Skip to content

DCP API リファレンス ​

学習後にできること ​

本節はプラグイン開発者向けに DCP の完全な API リファレンスを提供し、以下のことができるようになります:

  • DCP のプラグインエントリとフックメカニズムを理解する
  • 設定インターフェースとすべての設定項目の機能を掌握する
  • discard と extract ツールの仕様を理解する
  • 状態管理 API を使用してセッション状態を操作する

コアコンセプト ​

DCP プラグインは OpenCode Plugin SDK に基づき、フック、ツール、コマンドを登録することでコンテキストプルーニング機能を実現します。

プラグインライフサイクル:

1. OpenCode がプラグインをロード
    ↓
2. Plugin 関数が実行
    ↓
3. フック、ツール、コマンドを登録
    ↓
4. OpenCode がフックを呼び出してメッセージを処理
    ↓
5. プラグインがプルーニングロジックを実行
    ↓
6. 変更後のメッセージを返す

プラグインエントリ API ​

Plugin 関数 ​

DCP のメインエントリ関数で、プラグイン設定オブジェクトを返します。

シグネチャ:

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

const plugin: Plugin = (async (ctx) => {
    // プラグイン初期化ロジック
    return {
        // 登録するフック、ツール、コマンド
    }) satisfies Plugin

export default plugin

パラメータ:

パラメータ名型説明
ctxPluginInputOpenCode プラグインコンテキスト。client や directory などの情報を含む

戻り値:

プラグイン設定オブジェクト。以下のフィールドを含む:

フィールド型説明
experimental.chat.system.transformHandlerシステムプロンプト注入フック
experimental.chat.messages.transformHandlerメッセージ変換フック
chat.messageHandlerメッセージキャプチャフック
command.execute.beforeHandlerコマンド実行フック
toolRecord<string, Tool>登録するツールマッピング
configConfigHandler設定変更フック

ソースコード位置:index.ts


設定 API ​

PluginConfig インターフェース ​

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
    }
}

ソースコード位置:lib/config.ts

設定項目の詳細 ​

トップレベル設定 ​

設定項目型デフォルト値説明
enabledbooleantrueプラグインを有効にするかどうか
debugbooleanfalseデバッグログを有効にするかどうか。ログは ~/.config/opencode/logs/dcp/ に書き込まれる
pruneNotification"off" | "minimal" | "detailed""detailed"通知表示モード
protectedFilePatternsstring[][]ファイル保護 glob パターンリスト。一致するファイルはプルーニングされない

Commands 設定 ​

typescript
export interface Commands {
    enabled: boolean
    protectedTools: string[]
}
フィールド型デフォルト値説明
enabledbooleantrue/dcp コマンドを有効にするかどうか
protectedToolsstring[][...DEFAULT_PROTECTED_TOOLS]コマンド保護ツールリスト。これらのツールは /dcp sweep でプルーニングされない

TurnProtection 設定 ​

typescript
export interface TurnProtection {
    enabled: boolean
    turns: number
}
フィールド型デフォルト値説明
enabledbooleanfalseターン保護を有効にするかどうか
turnsnumber4保護ターン数。直近 N ターンのツールはプルーニングされない

Tools 設定 ​

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

ToolSettings:

typescript
export interface ToolSettings {
    nudgeEnabled: boolean
    nudgeFrequency: number
    protectedTools: string[]
}
フィールド型デフォルト値説明
nudgeEnabledbooleantrueAI リマインダーを有効にするかどうか
nudgeFrequencynumber10リマインダー頻度。N 個のツール結果ごとに AI にプルーニングツールの使用をリマインド
protectedToolsstring[][...DEFAULT_PROTECTED_TOOLS]ツール保護リスト

DiscardTool:

typescript
export interface DiscardTool {
    enabled: boolean
}
フィールド型デフォルト値説明
enabledbooleantruediscard ツールを有効にするかどうか

ExtractTool:

typescript
export interface ExtractTool {
    enabled: boolean
    showDistillation: boolean
}
フィールド型デフォルト値説明
enabledbooleantrueextract ツールを有効にするかどうか
showDistillationbooleanfalse通知に抽出内容を表示するかどうか

Strategies 設定 ​

Deduplication:

typescript
export interface Deduplication {
    enabled: boolean
    protectedTools: string[]
}
フィールド型デフォルト値説明
enabledbooleantrue重複除去戦略を有効にするかどうか
protectedToolsstring[][...DEFAULT_PROTECTED_TOOLS]重複除去に参加しないツールリスト

SupersedeWrites:

typescript
export interface SupersedeWrites {
    enabled: boolean
}
フィールド型デフォルト値説明
enabledbooleanfalse上書き書き込み戦略を有効にするかどうか

PurgeErrors:

typescript
export interface PurgeErrors {
    enabled: boolean
    turns: number
    protectedTools: string[]
}
フィールド型デフォルト値説明
enabledbooleantrueエラークリア戦略を有効にするかどうか
turnsnumber4エラークリア閾値(ターン数)
protectedToolsstring[][...DEFAULT_PROTECTED_TOOLS]クリアに参加しないツールリスト

getConfig 関数 ​

複数階層の設定をロードしてマージします。

typescript
export function getConfig(ctx: PluginInput): PluginConfig

パラメータ:

パラメータ名型説明
ctxPluginInputOpenCode プラグインコンテキスト

戻り値:

マージ後の設定オブジェクト。優先度は高い順から:

  1. プロジェクト設定 (.opencode/dcp.jsonc)
  2. 環境変数設定 ($OPENCODE_CONFIG_DIR/dcp.jsonc)
  3. グローバル設定 (~/.config/opencode/dcp.jsonc)
  4. デフォルト設定(コードで定義)

ソースコード位置:lib/config.ts


ツール API ​

createDiscardTool ​

discard ツールを作成。完了したタスクやノイズとなるツール出力を削除するために使用。

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

パラメータ:

パラメータ名型説明
ctxPruneToolContextツールコンテキスト。client、state、logger、config、workingDirectory を含む

ツール仕様:

フィールド型説明
idsstring[]最初の要素は理由('completion' または 'noise')、それ以降は数字の ID

ソースコード位置:lib/strategies/tools.ts

createExtractTool ​

extract ツールを作成。重要な発見を抽出した後、元のツール出力を削除するために使用。

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

パラメータ:

パラメータ名型説明
ctxPruneToolContextツールコンテキスト。client、state、logger、config、workingDirectory を含む

ツール仕様:

フィールド型説明
idsstring[]数字の ID 配列
distillationstring[]抽出内容配列。ids と同じ長さ

ソースコード位置:lib/strategies/tools.ts


状態 API ​

SessionState インターフェース ​

セッション状態オブジェクト。単一セッションのランタイム状態を管理。

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
}

フィールド説明:

フィールド型説明
sessionIdstring | nullOpenCode セッション ID
isSubAgentbooleanサブエージェントセッションかどうか
prunePruneプルーニング状態
statsSessionStats統計データ
toolParametersMap<string, ToolParameterEntry>ツール呼び出しキャッシュ(callID → メタデータ)
nudgeCounternumber累積ツール呼び出し回数(リマインダー発火用)
lastToolPruneboolean前回の操作がプルーニングツールだったか
lastCompactionnumber最後のコンテキスト圧縮タイムスタンプ
currentTurnnumber現在のターン数
variantstring | undefinedモデルバリアント(例:claude-3.5-sonnet)

ソースコード位置:lib/state/types.ts

SessionStats インターフェース ​

セッションレベルの Token プルーニング統計。

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

フィールド説明:

フィールド型説明
pruneTokenCounternumber現在のセッションでプルーニングされた Token 数(累積)
totalPruneTokensnumber履歴累積プルーニング Token 数

ソースコード位置:lib/state/types.ts

Prune インターフェース ​

プルーニング状態オブジェクト。

typescript
export interface Prune {
    toolIds: string[]
}

フィールド説明:

フィールド型説明
toolIdsstring[]プルーニング対象としてマークされたツール呼び出し ID リスト

ソースコード位置:lib/state/types.ts

ToolParameterEntry インターフェース ​

単一ツール呼び出しのメタデータキャッシュ。

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

フィールド説明:

フィールド型説明
toolstringツール名
parametersanyツールパラメータ
statusToolStatus | undefinedツール実行状態
errorstring | undefinedエラー情報(あれば)
turnnumberこの呼び出しを作成したターン数

ToolStatus 列挙型:

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

ソースコード位置:lib/state/types.ts

createSessionState ​

新しいセッション状態オブジェクトを作成。

typescript
export function createSessionState(): SessionState

戻り値:初期化された SessionState オブジェクト


フック API ​

createSystemPromptHandler ​

システムプロンプト注入フックハンドラを作成。

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

パラメータ:

パラメータ名型説明
stateSessionStateセッション状態オブジェクト
loggerLoggerログシステムインスタンス
configPluginConfig設定オブジェクト

動作:

  • サブエージェントセッションかどうかをチェック。そうであればスキップ
  • 内部エージェント(例:サマリージェネレーター)かどうかをチェック。そうであればスキップ
  • 設定に基づいて対応するプロンプトテンプレート(both/discard/extract)をロード
  • プルーニングツールの説明をシステムプロンプトに注入

ソースコード位置:lib/hooks.ts

createChatMessageTransformHandler ​

メッセージ変換フックハンドラを作成。自動プルーニングロジックを実行。

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

パラメータ:

パラメータ名型説明
clientanyOpenCode クライアントインスタンス
stateSessionStateセッション状態オブジェクト
loggerLoggerログシステムインスタンス
configPluginConfig設定オブジェクト

処理フロー:

  1. セッション状態をチェック(サブエージェントかどうか)
  2. ツールキャッシュを同期
  3. 自動戦略を実行(重複除去、上書き書き込み、エラークリア)
  4. マークされたツールコンテンツをプルーニング
  5. <prunable-tools> リストを注入
  6. コンテキストスナップショットを保存(設定されていれば)

ソースコード位置:lib/hooks.ts

createCommandExecuteHandler ​

コマンド実行フックハンドラを作成。/dcp シリーズコマンドを処理。

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

パラメータ:

パラメータ名型説明
clientanyOpenCode クライアントインスタンス
stateSessionStateセッション状態オブジェクト
loggerLoggerログシステムインスタンス
configPluginConfig設定オブジェクト
workingDirectorystring作業ディレクトリパス

サポートするコマンド:

  • /dcp - ヘルプ情報を表示
  • /dcp context - 現在のセッション Token 使用分析を表示
  • /dcp stats - 累積プルーニング統計を表示
  • /dcp sweep [n] - ツールを手動プルーニング(数量を指定可能)

ソースコード位置:lib/hooks.ts


本レッスンのまとめ ​

本節は DCP プラグインの完全な API リファレンスを提供し、以下をカバーしました:

  • プラグインエントリ関数とフック登録メカニズム
  • 設定インターフェースとすべての設定項目の詳細な説明
  • discard と extract ツールの仕様と作成方法
  • セッション状態、統計データ、ツールキャッシュの型定義
  • システムプロンプト、メッセージ変換、コマンド実行のフックハンドラ

DCP の内部実装の詳細についてさらに深く理解したい場合は、アーキテクチャ概要とToken 計算原理を参照することをお勧めします。


付録:ソースコードリファレンス ​

クリックしてソースコード位置を表示

更新日:2026-01-23

機能ファイルパス行番号
プラグインエントリ関数index.ts12-102
設定インターフェース定義lib/config.ts7-66
getConfig 関数lib/config.ts669-797
discard ツール作成lib/strategies/tools.ts155-181
extract ツール作成lib/strategies/tools.ts183-220
状態型定義lib/state/types.ts1-39
システムプロンプトフックlib/hooks.ts20-53
メッセージ変換フックlib/hooks.ts55-82
コマンド実行フックlib/hooks.ts84-156

重要な型:

  • Plugin: OpenCode プラグイン関数シグネチャ
  • PluginConfig: DCP 設定インターフェース
  • SessionState: セッション状態インターフェース
  • ToolStatus: ツール状態列挙型(pending | running | completed | error)

重要な関数:

  • plugin(): プラグインエントリ関数
  • getConfig(): 設定のロードとマージ
  • createDiscardTool(): discard ツールの作成
  • createExtractTool(): extract ツールの作成
  • createSessionState(): セッション状態の作成