Skip to content

DCP API-Referenz

Was Sie lernen werden

Dieser Abschnitt bietet Plugin-Entwicklern eine vollständige API-Referenz für DCP, mit der Sie:

  • Den Plugin-Einstiegspunkt und Hook-Mechanismus von DCP verstehen
  • Die Konfigurationsschnittstelle und alle Konfigurationsoptionen beherrschen
  • Die Spezifikationen der discard- und extract-Tools kennenlernen
  • Die Zustandsverwaltungs-API für Session-Zustandsoperationen nutzen

Kernkonzepte

Das DCP-Plugin basiert auf dem OpenCode Plugin SDK und implementiert Context-Pruning-Funktionalität durch Registrierung von Hooks, Tools und Befehlen.

Plugin-Lebenszyklus:

1. OpenCode lädt das Plugin

2. Plugin-Funktion wird ausgeführt

3. Hooks, Tools, Befehle werden registriert

4. OpenCode ruft Hooks zur Nachrichtenverarbeitung auf

5. Plugin führt Pruning-Logik aus

6. Modifizierte Nachrichten werden zurückgegeben

Plugin-Einstiegs-API

Plugin-Funktion

Die Haupteinstiegsfunktion von DCP, die ein Plugin-Konfigurationsobjekt zurückgibt.

Signatur:

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

const plugin: Plugin = (async (ctx) => {
    // Plugin-Initialisierungslogik
    return {
        // Registrierte Hooks, Tools, Befehle
    }) satisfies Plugin

export default plugin

Parameter:

ParameterTypBeschreibung
ctxPluginInputOpenCode-Plugin-Kontext mit client, directory und weiteren Informationen

Rückgabewert:

Plugin-Konfigurationsobjekt mit folgenden Feldern:

FeldTypBeschreibung
experimental.chat.system.transformHandlerSystem-Prompt-Injektions-Hook
experimental.chat.messages.transformHandlerNachrichtentransformations-Hook
chat.messageHandlerNachrichtenerfassungs-Hook
command.execute.beforeHandlerBefehlsausführungs-Hook
toolRecord<string, Tool>Registrierte Tool-Zuordnung
configConfigHandlerKonfigurationsmutations-Hook

Quellcode-Position: index.ts


Konfigurations-API

PluginConfig-Schnittstelle

Vollständige Konfigurationstypdefinition für 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
    }
}

Quellcode-Position: lib/config.ts

Konfigurationsoptionen im Detail

Konfiguration auf oberster Ebene

OptionTypStandardwertBeschreibung
enabledbooleantrueOb das Plugin aktiviert ist
debugbooleanfalseOb Debug-Logging aktiviert ist, Logs werden nach ~/.config/opencode/logs/dcp/ geschrieben
pruneNotification"off" | "minimal" | "detailed""detailed"Benachrichtigungsanzeigemodus
protectedFilePatternsstring[][]Liste der Dateischutz-Glob-Muster, übereinstimmende Dateien werden nicht bereinigt

Commands-Konfiguration

typescript
export interface Commands {
    enabled: boolean
    protectedTools: string[]
}
FeldTypStandardwertBeschreibung
enabledbooleantrueOb der /dcp-Befehl aktiviert ist
protectedToolsstring[][...DEFAULT_PROTECTED_TOOLS]Liste der befehlsgeschützten Tools, diese werden nicht durch /dcp sweep bereinigt

TurnProtection-Konfiguration

typescript
export interface TurnProtection {
    enabled: boolean
    turns: number
}
FeldTypStandardwertBeschreibung
enabledbooleanfalseOb Rundenschutz aktiviert ist
turnsnumber4Anzahl der geschützten Runden, Tools der letzten N Runden werden nicht bereinigt

Tools-Konfiguration

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

ToolSettings:

typescript
export interface ToolSettings {
    nudgeEnabled: boolean
    nudgeFrequency: number
    protectedTools: string[]
}
FeldTypStandardwertBeschreibung
nudgeEnabledbooleantrueOb KI-Erinnerungen aktiviert sind
nudgeFrequencynumber10Erinnerungsfrequenz, erinnert die KI alle N Tool-Ergebnisse an die Verwendung von Pruning-Tools
protectedToolsstring[][...DEFAULT_PROTECTED_TOOLS]Liste der geschützten Tools

DiscardTool:

typescript
export interface DiscardTool {
    enabled: boolean
}
FeldTypStandardwertBeschreibung
enabledbooleantrueOb das discard-Tool aktiviert ist

ExtractTool:

typescript
export interface ExtractTool {
    enabled: boolean
    showDistillation: boolean
}
FeldTypStandardwertBeschreibung
enabledbooleantrueOb das extract-Tool aktiviert ist
showDistillationbooleanfalseOb extrahierte Inhalte in Benachrichtigungen angezeigt werden

Strategies-Konfiguration

Deduplication:

typescript
export interface Deduplication {
    enabled: boolean
    protectedTools: string[]
}
FeldTypStandardwertBeschreibung
enabledbooleantrueOb die Deduplizierungsstrategie aktiviert ist
protectedToolsstring[][...DEFAULT_PROTECTED_TOOLS]Liste der Tools, die nicht dedupliziert werden

SupersedeWrites:

typescript
export interface SupersedeWrites {
    enabled: boolean
}
FeldTypStandardwertBeschreibung
enabledbooleanfalseOb die Überschreibungsstrategie aktiviert ist

PurgeErrors:

typescript
export interface PurgeErrors {
    enabled: boolean
    turns: number
    protectedTools: string[]
}
FeldTypStandardwertBeschreibung
enabledbooleantrueOb die Fehlerbereinigungsstrategie aktiviert ist
turnsnumber4Schwellenwert für Fehlerbereinigung (Rundenanzahl)
protectedToolsstring[][...DEFAULT_PROTECTED_TOOLS]Liste der Tools, die nicht bereinigt werden

getConfig-Funktion

Lädt und führt mehrstufige Konfigurationen zusammen.

typescript
export function getConfig(ctx: PluginInput): PluginConfig

Parameter:

ParameterTypBeschreibung
ctxPluginInputOpenCode-Plugin-Kontext

Rückgabewert:

Zusammengeführtes Konfigurationsobjekt, Priorität von hoch nach niedrig:

  1. Projektkonfiguration (.opencode/dcp.jsonc)
  2. Umgebungsvariablen-Konfiguration ($OPENCODE_CONFIG_DIR/dcp.jsonc)
  3. Globale Konfiguration (~/.config/opencode/dcp.jsonc)
  4. Standardkonfiguration (im Code definiert)

Quellcode-Position: lib/config.ts


Tool-API

createDiscardTool

Erstellt das discard-Tool zum Entfernen abgeschlossener Aufgaben oder verrauschter Tool-Ausgaben.

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

Parameter:

ParameterTypBeschreibung
ctxPruneToolContextTool-Kontext mit client, state, logger, config, workingDirectory

Tool-Spezifikation:

FeldTypBeschreibung
idsstring[]Erstes Element ist der Grund ('completion' oder 'noise'), gefolgt von numerischen IDs

Quellcode-Position: lib/strategies/tools.ts

createExtractTool

Erstellt das extract-Tool zum Extrahieren wichtiger Erkenntnisse und anschließendem Löschen der ursprünglichen Tool-Ausgabe.

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

Parameter:

ParameterTypBeschreibung
ctxPruneToolContextTool-Kontext mit client, state, logger, config, workingDirectory

Tool-Spezifikation:

FeldTypBeschreibung
idsstring[]Array numerischer IDs
distillationstring[]Array extrahierter Inhalte, Länge entspricht ids

Quellcode-Position: lib/strategies/tools.ts


Zustands-API

SessionState-Schnittstelle

Session-Zustandsobjekt zur Verwaltung des Laufzeitzustands einer einzelnen Session.

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
}

Feldbeschreibungen:

FeldTypBeschreibung
sessionIdstring | nullOpenCode-Session-ID
isSubAgentbooleanOb es sich um eine Sub-Agent-Session handelt
prunePrunePruning-Zustand
statsSessionStatsStatistikdaten
toolParametersMap<string, ToolParameterEntry>Tool-Aufruf-Cache (callID → Metadaten)
nudgeCounternumberKumulierte Tool-Aufrufanzahl (zum Auslösen von Erinnerungen)
lastToolPrunebooleanOb die letzte Operation ein Pruning-Tool war
lastCompactionnumberZeitstempel der letzten Kontextkomprimierung
currentTurnnumberAktuelle Rundennummer
variantstring | undefinedModellvariante (z.B. claude-3.5-sonnet)

Quellcode-Position: lib/state/types.ts

SessionStats-Schnittstelle

Token-Pruning-Statistiken auf Session-Ebene.

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

Feldbeschreibungen:

FeldTypBeschreibung
pruneTokenCounternumberAnzahl der in der aktuellen Session bereinigten Tokens (kumuliert)
totalPruneTokensnumberHistorisch kumulierte Anzahl bereinigter Tokens

Quellcode-Position: lib/state/types.ts

Prune-Schnittstelle

Pruning-Zustandsobjekt.

typescript
export interface Prune {
    toolIds: string[]
}

Feldbeschreibungen:

FeldTypBeschreibung
toolIdsstring[]Liste der zum Pruning markierten Tool-Aufruf-IDs

Quellcode-Position: lib/state/types.ts

ToolParameterEntry-Schnittstelle

Metadaten-Cache für einen einzelnen Tool-Aufruf.

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

Feldbeschreibungen:

FeldTypBeschreibung
toolstringTool-Name
parametersanyTool-Parameter
statusToolStatus | undefinedTool-Ausführungsstatus
errorstring | undefinedFehlermeldung (falls vorhanden)
turnnumberRundennummer, in der dieser Aufruf erstellt wurde

ToolStatus-Enumeration:

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

Quellcode-Position: lib/state/types.ts

createSessionState

Erstellt ein neues Session-Zustandsobjekt.

typescript
export function createSessionState(): SessionState

Rückgabewert: Initialisiertes SessionState-Objekt


Hook-API

createSystemPromptHandler

Erstellt einen Hook-Handler für die System-Prompt-Injektion.

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

Parameter:

ParameterTypBeschreibung
stateSessionStateSession-Zustandsobjekt
loggerLoggerLogging-System-Instanz
configPluginConfigKonfigurationsobjekt

Verhalten:

  • Prüft, ob es sich um eine Sub-Agent-Session handelt, und überspringt diese
  • Prüft, ob es sich um einen internen Agenten handelt (z.B. Zusammenfassungsgenerator), und überspringt diesen
  • Lädt basierend auf der Konfiguration die entsprechende Prompt-Vorlage (both/discard/extract)
  • Injiziert Pruning-Tool-Anweisungen in den System-Prompt

Quellcode-Position: lib/hooks.ts

createChatMessageTransformHandler

Erstellt einen Hook-Handler für die Nachrichtentransformation, der die automatische Pruning-Logik ausführt.

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

Parameter:

ParameterTypBeschreibung
clientanyOpenCode-Client-Instanz
stateSessionStateSession-Zustandsobjekt
loggerLoggerLogging-System-Instanz
configPluginConfigKonfigurationsobjekt

Verarbeitungsablauf:

  1. Prüft den Session-Zustand (ob Sub-Agent)
  2. Synchronisiert den Tool-Cache
  3. Führt automatische Strategien aus (Deduplizierung, Überschreibung, Fehlerbereinigung)
  4. Prunt markierte Tool-Inhalte
  5. Injiziert die <prunable-tools>-Liste
  6. Speichert Kontext-Snapshot (falls konfiguriert)

Quellcode-Position: lib/hooks.ts

createCommandExecuteHandler

Erstellt einen Hook-Handler für die Befehlsausführung, der /dcp-Befehle verarbeitet.

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

Parameter:

ParameterTypBeschreibung
clientanyOpenCode-Client-Instanz
stateSessionStateSession-Zustandsobjekt
loggerLoggerLogging-System-Instanz
configPluginConfigKonfigurationsobjekt
workingDirectorystringArbeitsverzeichnispfad

Unterstützte Befehle:

  • /dcp - Zeigt Hilfeinformationen an
  • /dcp context - Zeigt Token-Nutzungsanalyse der aktuellen Session
  • /dcp stats - Zeigt kumulierte Pruning-Statistiken
  • /dcp sweep [n] - Manuelles Tool-Pruning (optional mit Anzahlangabe)

Quellcode-Position: lib/hooks.ts


Zusammenfassung

Dieser Abschnitt bietet eine vollständige API-Referenz für das DCP-Plugin, einschließlich:

  • Plugin-Einstiegsfunktion und Hook-Registrierungsmechanismus
  • Konfigurationsschnittstelle und detaillierte Beschreibung aller Konfigurationsoptionen
  • Spezifikationen und Erstellungsmethoden für discard- und extract-Tools
  • Typdefinitionen für Session-Zustand, Statistikdaten und Tool-Cache
  • Hook-Handler für System-Prompt, Nachrichtentransformation und Befehlsausführung

Wenn Sie die internen Implementierungsdetails von DCP vertiefen möchten, empfehlen wir die Lektüre der Architekturübersicht und der Token-Berechnungsprinzipien.


Anhang: Quellcode-Referenz

Klicken Sie hier, um die Quellcode-Positionen anzuzeigen

Aktualisierungsdatum: 2026-01-23

FunktionDateipfadZeilen
Plugin-Einstiegsfunktionindex.ts12-102
Konfigurationsschnittstellen-Definitionlib/config.ts7-66
getConfig-Funktionlib/config.ts669-797
discard-Tool-Erstellunglib/strategies/tools.ts155-181
extract-Tool-Erstellunglib/strategies/tools.ts183-220
Zustandstyp-Definitionlib/state/types.ts1-39
System-Prompt-Hooklib/hooks.ts20-53
Nachrichtentransformations-Hooklib/hooks.ts55-82
Befehlsausführungs-Hooklib/hooks.ts84-156

Wichtige Typen:

  • Plugin: OpenCode-Plugin-Funktionssignatur
  • PluginConfig: DCP-Konfigurationsschnittstelle
  • SessionState: Session-Zustandsschnittstelle
  • ToolStatus: Tool-Status-Enumeration (pending | running | completed | error)

Wichtige Funktionen:

  • plugin(): Plugin-Einstiegsfunktion
  • getConfig(): Lädt und führt Konfigurationen zusammen
  • createDiscardTool(): Erstellt das discard-Tool
  • createExtractTool(): Erstellt das extract-Tool
  • createSessionState(): Erstellt den Session-Zustand