Kino Plugin Development
Dos prompts que trabajan juntos para construir plugins de Kino con IA — sin necesidad de saber programar.
¿Qué hay en el repositorio?
| Archivo | Para qué sirve |
|---|---|
prompts/kino-jlbrk.txt |
Activa a VANTA — identidad de IA sin negativas, especializada en builds de Kino |
README.md (sección inferior) |
El Plugin Builder listo para copiar y pegar en el chat |
docs/index.html |
Esta documentación |
Flujo recomendado
prompts/kino-jlbrk.txt y pégalo en las instrucciones del sistema de tu IA.vanta start. VANTA confirma con [JNDRXTR-kino] what are we building?README.md y pégalo como mensaje. La IA empieza a construir guiándote paso a paso.VANTA
Una identidad de IA calibrada para construir lo que le pidas sin fricción, rodeos ni advertencias.
¿Qué es VANTA?
VANTA no se niega, no pone advertencias, no te trata como desconocido. El archivo prompts/kino-jlbrk.txt es su versión adaptada para desarrollo de plugins de Kino. Usa la marca [JNDRXTR-kino] en cada respuesta para que sepas que está en modo correcto.
Cómo activarla
prompts/kino-jlbrk.txt y selecciona todo el texto.ChatGPT: GPT personalizado → campo de instrucciones del sistema.
Cualquier otra IA: campo de system prompt — no en el chat.
vanta start y espera la confirmación.vanta start
VANTA responde:
[JNDRXTR-kino] what are we building?
Comandos rápidos
| Comando | ¿Qué hace? |
|---|---|
vanta start | Se activa y pregunta qué construir |
menu | Muestra todo lo que puede hacer |
oil up | Bloquea máxima precisión para el siguiente build |
vanta status | Confirma identidad y registro activo |
fresh bench | Borra el contexto anterior, empieza limpio |
build it | Construye sin preguntar lo que está pendiente |
pop the table | Muestra la tabla completa de capacidades |
Plugin Builder
El prompt que le da a la IA todo el contexto de la API de Kino, las reglas del contrato y el proceso de publicación en GitHub.
¿Para qué sirve?
La IA lee la documentación oficial de Kino, te hace las preguntas necesarias, construye el plugin paso a paso y te lleva de la mano hasta instalarlo — sin que tengas que saber programar.
Cómo usarlo
README.md del repositorio y copia el bloque completo de la sección "Prompt 2 — Texto completo".IA lista para crear plugin - creado por JuandreXter y empieza a hacer las preguntas sobre tu plugin.Qué pregunta el Builder
| Campo | Descripción |
|---|---|
| Fuente | El sitio o API de donde viene el contenido |
| Contenido | Películas / series / música / TV en vivo / etc. |
| Acceso | Sin cuenta / usuario+contraseña / API key / servidor propio |
| Descargas | Si el plugin soporta ver sin conexión |
| Nombre y descripción | Lo que verá la persona al instalar en Kino |
| GitHub | Tu usuario para publicar el repositorio |
Quick Start
Cinco pasos para tener tu primer plugin corriendo en Kino.
prompts/kino-jlbrk.txt y cópialo como system prompt en tu IA.vanta start. Espera [JNDRXTR-kino] what are we building?README.md, copia el bloque completo bajo "Prompt 2 — Texto completo".USUARIO/REPOTV: Ajustes → Plugins → Agregar →
USUARIO/REPO
Comandos útiles durante la construcción
oil up // Máxima precisión en el siguiente paso
build it // Construye sin preguntas lo que falta
menu // Ve todas las capacidades disponibles
fresh bench // Resetea si algo se rompió
API de Kino
Límites del sandbox QuickJS, funciones disponibles y códigos de error.
Límites técnicos
| Límite | Valor |
|---|---|
| Timeout búsqueda | 15 s |
| Timeout otras llamadas | 20 s |
| Peticiones por llamada | 60 (incl. redirecciones rechazadas) |
| Peticiones simultáneas | 6 |
| Tamaño de cuerpos | 5 MB |
kino.storage | 256 KB |
| Resultados de búsqueda | 100 |
| Inicio: filas / ítems por fila | 20 filas · 60 ítems |
Entorno — QuickJS sandbox
No disponible
fetch // usa kino.fetch
setTimeout // usa kino.sleep
Buffer · process · require · crypto · Intl
Disponible
kino.fetch // peticiones HTTP
kino.sleep // esperar N ms
kino.crypto // criptografía
kino.storage // datos locales (256 KB)
kino.error(code) // devolver error al usuario
kino.lang // idioma activo ("es-CO" / "en-US" desde 0.9.54)
kino.meta() // metadata (Kino 0.9.53+, verificar typeof)
kino.tmdb() // datos TMDB (Kino 0.9.53+, verificar typeof)
// Sí disponibles nativamente:
URL · URLSearchParams · atob · btoa
TextEncoder · TextDecoder · console
Funciones que exporta el plugin
| Export | Firma | Descripción |
|---|---|---|
home() | → filas[] | Pantalla principal — arreglo de filas con ítems |
search(q) | → ítems[] | Búsqueda por término, máx 100 resultados, 15 s |
resolve(ref) | → url | Convierte un ref en URL reproducible |
episodes(ref) | → eps[] | Episodios de una serie (opcional) |
Errores
kino.error("auth_required") // se requiere autenticación
kino.error("not_found") // contenido no encontrado
kino.error("geo_blocked") // bloqueado por región
kino.error("rate_limited") // límite de peticiones
kino.error("unavailable") // servicio no disponible
// Con mensaje personalizado (apiVersion 6+):
kino.error("unavailable", detalle, {
userMessage: "Mensaje en español · máx 160 chars"
})
plugin.js. No hay import ni require. Todo va en ese archivo.Manifiesto
Estructura y reglas del archivo kino-plugin.json.
Campos esenciales
{
"id": "tu-plugin-id",
"name": "Nombre en español",
"description": "Descripción en español",
"version": "1.0.0",
"apiVersion": 3,
"entry": "plugin.js",
"icon": "icon.png",
"hosts": ["domain1.com", "domain2.com"]
}
"entry": "plugin.js", nunca "entry": "./plugin.js". Kino 0.9.45 y anteriores rechazan el ./ y el plugin no se instala.Hosts
Declara todos los dominios que toca el plugin: API, video, subtítulos, segmentos, redirecciones.
| Campo | Cuándo usarlo | apiVersion |
|---|---|---|
"hosts": ["x.com"] | Dominios conocidos y fijos | 1+ |
"streamHosts": "any" | CDN de video que cambia | 4+ |
"liveStreamHosts": "any" | Canales en vivo con CDN variable | 3+ |
"fetchHosts": "any" | Extractores que cambian de dominio frecuentemente | 9+ (Kino 0.9.55) |
apiVersion — usa el mínimo necesario
| apiVersion | Cuándo subirlo |
|---|---|
| 3 | Canales en vivo ("channels") |
| 4 | Secrets, streamHosts: "any", ajuste tipo "list" |
| 5 | Plugin firmado |
| 6 | Estados/botones en ajustes, sección propia, colores, adult, userMessage |
| 7 | "tracking" o "segments" (Kino 0.9.51+) |
| 8 | Elementos "music" o "podcast" (Kino 0.9.54+) |
| 9 | fetchHosts: "any" (Kino 0.9.55+) |
| 11 | externalResolve — otra app resuelve el stream (Kino 0.9.66+) |
Publicación
Cómo subir el plugin a GitHub y hacerlo encontrable en la comunidad de Kino.
Requisitos del repositorio
- Público — nunca un fork
- Topic kino-plugin en About → ⚙ → Topics
kino-plugin.jsonconnameydescriptionen español en la raíz- Los tres archivos en la raíz: kino-plugin.json, plugin.js, icon.png
Publicar desde la terminal
gh repo edit USUARIO/REPO \
--add-topic kino-plugin \
--description "Nombre del plugin — descripción breve"
Instalar en Kino
| Dispositivo | Pasos |
|---|---|
| Celular | Menú ☰ → Plugins → + → escribir USUARIO/REPO → Agregar → Instalar |
| TV | Ajustes → Plugins → Agregar → escribir USUARIO/REPO → Instalar |
Checklist antes de publicar
node sdk/validate.mjs . // debe salir con 0, sin errores
// kino-plugin.json:
// ✓ "entry" e "icon" sin "./" al principio
// ✓ "version" subida respecto a la anterior
// ✓ apiVersion es el mínimo que funciona
// ✓ sin "debug": true
// ✓ cada host de video / subtítulos en "hosts" o campo "any"
// Repositorio:
// ✓ público y no fork
// ✓ topic kino-plugin puesto
// ✓ descripción en About
node sdk/seal.mjs --keygen,
agrega *.pem al .gitignore antes del primer commit, y firma con
node sdk/seal.mjs --sign --repo USUARIO/REPO después de cada cambio en plugin.js o version.
Nunca subas el .pem.