Skip to content

Referencia de API de DCP

Lo que aprenderás

Esta sección proporciona una referencia completa de la API de DCP para desarrolladores de plugins, permitiéndote:

  • Comprender el punto de entrada del plugin y el mecanismo de hooks de DCP
  • Dominar las interfaces de configuración y el propósito de cada opción
  • Conocer las especificaciones de las herramientas discard y extract
  • Utilizar la API de gestión de estado para operaciones de estado de sesión

Conceptos Fundamentales

El plugin DCP se basa en el SDK de Plugins de OpenCode, implementando la funcionalidad de poda de contexto mediante el registro de hooks, herramientas y comandos.

Ciclo de vida del plugin:

1. OpenCode carga el plugin

2. Se ejecuta la función Plugin

3. Se registran hooks, herramientas y comandos

4. OpenCode invoca los hooks para procesar mensajes

5. El plugin ejecuta la lógica de poda

6. Se devuelven los mensajes modificados

API de Entrada del Plugin

Función Plugin

La función de entrada principal de DCP que devuelve el objeto de configuración del plugin.

Firma:

typescript
import type { Plugin } from "@opencode-ai/plugin"

const plugin: Plugin = (async (ctx) => {
    // Lógica de inicialización del plugin
    return {
        // Hooks, herramientas y comandos registrados
    }) satisfies Plugin

export default plugin

Parámetros:

ParámetroTipoDescripción
ctxPluginInputContexto del plugin de OpenCode, contiene información como client y directory

Valor de retorno:

Objeto de configuración del plugin con los siguientes campos:

CampoTipoDescripción
experimental.chat.system.transformHandlerHook de inyección de prompt del sistema
experimental.chat.messages.transformHandlerHook de transformación de mensajes
chat.messageHandlerHook de captura de mensajes
command.execute.beforeHandlerHook de ejecución de comandos
toolRecord<string, Tool>Mapa de herramientas registradas
configConfigHandlerHook de mutación de configuración

Ubicación en el código fuente: index.ts


API de Configuración

Interfaz PluginConfig

Definición completa del tipo de configuración de DCP.

typescript
export interface PluginConfig {
    enabled: boolean
    debug: boolean
    pruneNotification: "off" | "minimal" | "detailed"
    commands: Commands
    turnProtection: TurnProtection
    protectedFilePatterns: string[]
    tools: Tools
    strategies: {
        deduplication: Deduplication
        supersedeWrites: SupersedeWrites
        purgeErrors: PurgeErrors
    }
}

Ubicación en el código fuente: lib/config.ts

Detalles de las Opciones de Configuración

Configuración de Nivel Superior

OpciónTipoValor por defectoDescripción
enabledbooleantrueHabilitar o deshabilitar el plugin
debugbooleanfalseHabilitar logs de depuración, escritos en ~/.config/opencode/logs/dcp/
pruneNotification"off" | "minimal" | "detailed""detailed"Modo de visualización de notificaciones
protectedFilePatternsstring[][]Lista de patrones glob para protección de archivos, los archivos coincidentes no serán podados

Configuración de Commands

typescript
export interface Commands {
    enabled: boolean
    protectedTools: string[]
}
CampoTipoValor por defectoDescripción
enabledbooleantrueHabilitar el comando /dcp
protectedToolsstring[][...DEFAULT_PROTECTED_TOOLS]Lista de herramientas protegidas por comandos, estas herramientas no serán podadas por /dcp sweep

Configuración de TurnProtection

typescript
export interface TurnProtection {
    enabled: boolean
    turns: number
}
CampoTipoValor por defectoDescripción
enabledbooleanfalseHabilitar protección por turnos
turnsnumber4Número de turnos protegidos, las herramientas de los últimos N turnos no serán podadas

Configuración de Tools

typescript
export interface Tools {
    settings: ToolSettings
    discard: DiscardTool
    extract: ExtractTool
}

ToolSettings:

typescript
export interface ToolSettings {
    nudgeEnabled: boolean
    nudgeFrequency: number
    protectedTools: string[]
}
CampoTipoValor por defectoDescripción
nudgeEnabledbooleantrueHabilitar recordatorios para la IA
nudgeFrequencynumber10Frecuencia de recordatorios, recordar a la IA usar herramientas de poda cada N resultados de herramientas
protectedToolsstring[][...DEFAULT_PROTECTED_TOOLS]Lista de herramientas protegidas

DiscardTool:

typescript
export interface DiscardTool {
    enabled: boolean
}
CampoTipoValor por defectoDescripción
enabledbooleantrueHabilitar la herramienta discard

ExtractTool:

typescript
export interface ExtractTool {
    enabled: boolean
    showDistillation: boolean
}
CampoTipoValor por defectoDescripción
enabledbooleantrueHabilitar la herramienta extract
showDistillationbooleanfalseMostrar contenido extraído en las notificaciones

Configuración de Strategies

Deduplication:

typescript
export interface Deduplication {
    enabled: boolean
    protectedTools: string[]
}
CampoTipoValor por defectoDescripción
enabledbooleantrueHabilitar estrategia de deduplicación
protectedToolsstring[][...DEFAULT_PROTECTED_TOOLS]Lista de herramientas excluidas de la deduplicación

SupersedeWrites:

typescript
export interface SupersedeWrites {
    enabled: boolean
}
CampoTipoValor por defectoDescripción
enabledbooleanfalseHabilitar estrategia de sobrescritura

PurgeErrors:

typescript
export interface PurgeErrors {
    enabled: boolean
    turns: number
    protectedTools: string[]
}
CampoTipoValor por defectoDescripción
enabledbooleantrueHabilitar estrategia de limpieza de errores
turnsnumber4Umbral de limpieza de errores (número de turnos)
protectedToolsstring[][...DEFAULT_PROTECTED_TOOLS]Lista de herramientas excluidas de la limpieza

Función getConfig

Carga y fusiona configuraciones de múltiples niveles.

typescript
export function getConfig(ctx: PluginInput): PluginConfig

Parámetros:

ParámetroTipoDescripción
ctxPluginInputContexto del plugin de OpenCode

Valor de retorno:

Objeto de configuración fusionado, con prioridad de mayor a menor:

  1. Configuración del proyecto (.opencode/dcp.jsonc)
  2. Configuración de variable de entorno ($OPENCODE_CONFIG_DIR/dcp.jsonc)
  3. Configuración global (~/.config/opencode/dcp.jsonc)
  4. Configuración por defecto (definida en el código)

Ubicación en el código fuente: lib/config.ts


API de Herramientas

createDiscardTool

Crea la herramienta discard, utilizada para eliminar tareas completadas o salidas de herramientas ruidosas.

typescript
export function createDiscardTool(ctx: PruneToolContext): ReturnType<typeof tool>

Parámetros:

ParámetroTipoDescripción
ctxPruneToolContextContexto de la herramienta, contiene client, state, logger, config, workingDirectory

Especificación de la herramienta:

CampoTipoDescripción
idsstring[]El primer elemento es la razón ('completion' o 'noise'), seguido de IDs numéricos

Ubicación en el código fuente: lib/strategies/tools.ts

createExtractTool

Crea la herramienta extract, utilizada para extraer hallazgos clave y eliminar la salida original de la herramienta.

typescript
export function createExtractTool(ctx: PruneToolContext): ReturnType<typeof tool>

Parámetros:

ParámetroTipoDescripción
ctxPruneToolContextContexto de la herramienta, contiene client, state, logger, config, workingDirectory

Especificación de la herramienta:

CampoTipoDescripción
idsstring[]Array de IDs numéricos
distillationstring[]Array de contenido extraído, con la misma longitud que ids

Ubicación en el código fuente: lib/strategies/tools.ts


API de Estado

Interfaz SessionState

Objeto de estado de sesión que gestiona el estado en tiempo de ejecución de una sesión individual.

typescript
export interface SessionState {
    sessionId: string | null
    isSubAgent: boolean
    prune: Prune
    stats: SessionStats
    toolParameters: Map<string, ToolParameterEntry>
    nudgeCounter: number
    lastToolPrune: boolean
    lastCompaction: number
    currentTurn: number
    variant: string | undefined
}

Descripción de campos:

CampoTipoDescripción
sessionIdstring | nullID de sesión de OpenCode
isSubAgentbooleanSi es una sesión de sub-agente
prunePruneEstado de poda
statsSessionStatsDatos estadísticos
toolParametersMap<string, ToolParameterEntry>Caché de llamadas a herramientas (callID → metadatos)
nudgeCounternumberContador acumulado de llamadas a herramientas (para activar recordatorios)
lastToolPrunebooleanSi la última operación fue una herramienta de poda
lastCompactionnumberMarca de tiempo de la última compactación de contexto
currentTurnnumberNúmero de turno actual
variantstring | undefinedVariante del modelo (ej. claude-3.5-sonnet)

Ubicación en el código fuente: lib/state/types.ts

Interfaz SessionStats

Estadísticas de poda de tokens a nivel de sesión.

typescript
export interface SessionStats {
    pruneTokenCounter: number
    totalPruneTokens: number
}

Descripción de campos:

CampoTipoDescripción
pruneTokenCounternumberTokens podados en la sesión actual (acumulado)
totalPruneTokensnumberTotal histórico de tokens podados

Ubicación en el código fuente: lib/state/types.ts

Interfaz Prune

Objeto de estado de poda.

typescript
export interface Prune {
    toolIds: string[]
}

Descripción de campos:

CampoTipoDescripción
toolIdsstring[]Lista de IDs de llamadas a herramientas marcadas para poda

Ubicación en el código fuente: lib/state/types.ts

Interfaz ToolParameterEntry

Caché de metadatos para una llamada individual a herramienta.

typescript
export interface ToolParameterEntry {
    tool: string
    parameters: any
    status?: ToolStatus
    error?: string
    turn: number
}

Descripción de campos:

CampoTipoDescripción
toolstringNombre de la herramienta
parametersanyParámetros de la herramienta
statusToolStatus | undefinedEstado de ejecución de la herramienta
errorstring | undefinedMensaje de error (si existe)
turnnumberNúmero de turno en que se creó la llamada

Enumeración ToolStatus:

typescript
export type ToolStatus = "pending" | "running" | "completed" | "error"

Ubicación en el código fuente: lib/state/types.ts

createSessionState

Crea un nuevo objeto de estado de sesión.

typescript
export function createSessionState(): SessionState

Valor de retorno: Objeto SessionState inicializado


API de Hooks

createSystemPromptHandler

Crea el manejador del hook de inyección de prompt del sistema.

typescript
export function createSystemPromptHandler(
    state: SessionState,
    logger: Logger,
    config: PluginConfig,
): Handler

Parámetros:

ParámetroTipoDescripción
stateSessionStateObjeto de estado de sesión
loggerLoggerInstancia del sistema de logging
configPluginConfigObjeto de configuración

Comportamiento:

  • Verifica si es una sesión de sub-agente, si es así la omite
  • Verifica si es un agente interno (como generador de resúmenes), si es así lo omite
  • Carga la plantilla de prompt correspondiente según la configuración (both/discard/extract)
  • Inyecta las instrucciones de herramientas de poda en el prompt del sistema

Ubicación en el código fuente: lib/hooks.ts

createChatMessageTransformHandler

Crea el manejador del hook de transformación de mensajes, ejecutando la lógica de poda automática.

typescript
export function createChatMessageTransformHandler(
    client: any,
    state: SessionState,
    logger: Logger,
    config: PluginConfig,
): Handler

Parámetros:

ParámetroTipoDescripción
clientanyInstancia del cliente de OpenCode
stateSessionStateObjeto de estado de sesión
loggerLoggerInstancia del sistema de logging
configPluginConfigObjeto de configuración

Flujo de procesamiento:

  1. Verificar estado de sesión (si es sub-agente)
  2. Sincronizar caché de herramientas
  3. Ejecutar estrategias automáticas (deduplicación, sobrescritura, limpieza de errores)
  4. Podar contenido de herramientas marcadas
  5. Inyectar lista <prunable-tools>
  6. Guardar snapshot del contexto (si está configurado)

Ubicación en el código fuente: lib/hooks.ts

createCommandExecuteHandler

Crea el manejador del hook de ejecución de comandos, procesando la serie de comandos /dcp.

typescript
export function createCommandExecuteHandler(
    client: any,
    state: SessionState,
    logger: Logger,
    config: PluginConfig,
    workingDirectory: string,
): Handler

Parámetros:

ParámetroTipoDescripción
clientanyInstancia del cliente de OpenCode
stateSessionStateObjeto de estado de sesión
loggerLoggerInstancia del sistema de logging
configPluginConfigObjeto de configuración
workingDirectorystringRuta del directorio de trabajo

Comandos soportados:

  • /dcp - Mostrar información de ayuda
  • /dcp context - Mostrar análisis de uso de tokens de la sesión actual
  • /dcp stats - Mostrar estadísticas acumuladas de poda
  • /dcp sweep [n] - Poda manual de herramientas (opcionalmente especificar cantidad)

Ubicación en el código fuente: lib/hooks.ts


Resumen de la Lección

Esta sección proporciona la referencia completa de la API del plugin DCP, cubriendo:

  • Función de entrada del plugin y mecanismo de registro de hooks
  • Interfaces de configuración y descripción detallada de todas las opciones
  • Especificaciones y métodos de creación de las herramientas discard y extract
  • Definiciones de tipos para estado de sesión, datos estadísticos y caché de herramientas
  • Manejadores de hooks para prompt del sistema, transformación de mensajes y ejecución de comandos

Si necesitas profundizar en los detalles de implementación interna de DCP, te recomendamos leer la Visión General de la Arquitectura y los Principios de Cálculo de Tokens.


Apéndice: Referencia del Código Fuente

Haz clic para expandir las ubicaciones del código fuente

Última actualización: 2026-01-23

FuncionalidadRuta del archivoLíneas
Función de entrada del pluginindex.ts12-102
Definición de interfaz de configuraciónlib/config.ts7-66
Función getConfiglib/config.ts669-797
Creación de herramienta discardlib/strategies/tools.ts155-181
Creación de herramienta extractlib/strategies/tools.ts183-220
Definición de tipos de estadolib/state/types.ts1-39
Hook de prompt del sistemalib/hooks.ts20-53
Hook de transformación de mensajeslib/hooks.ts55-82
Hook de ejecución de comandoslib/hooks.ts84-156

Tipos clave:

  • Plugin: Firma de la función del plugin de OpenCode
  • PluginConfig: Interfaz de configuración de DCP
  • SessionState: Interfaz de estado de sesión
  • ToolStatus: Enumeración de estado de herramienta (pending | running | completed | error)

Funciones clave:

  • plugin(): Función de entrada del plugin
  • getConfig(): Cargar y fusionar configuración
  • createDiscardTool(): Crear herramienta discard
  • createExtractTool(): Crear herramienta extract
  • createSessionState(): Crear estado de sesión