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