DuDuClaw アーキテクチャ概要
アーキテクチャ概要(v1.13.1)
Section titled “アーキテクチャ概要(v1.13.1)”DuDuClawはマルチランタイム AI エージェントプラットフォーム(Multi-Runtime AI Agent Platform)であり、統一された AgentRuntime トレイトを通じてClaude Code / Codex / Gemini CLIをAIバックエンドとしてサポートし、自動検出とエージェントごとの設定に対応しています。DuDuClawは単体のLLM製品ではなく、1つ(または複数)のAI CLIを、チャネルルーティング・セッション記憶・自己進化・マルチアカウントローテーション・ローカルLLM推論・ブラウザ自動化・IDE統合を備えた長時間稼働エージェントへと変える配管層です。
主要なアーキテクチャ上の決定
Section titled “主要なアーキテクチャ上の決定”ランタイムとトランスポート
Section titled “ランタイムとトランスポート”- Multi-Runtime(
AgentRuntimeトレイト)— Claude / Codex / Gemini / OpenAI-compat の4バックエンド、RuntimeRegistryによる自動検出、エージェントごとの設定はagent.toml [runtime]に記述。 - MCP Server(stdio)(
duduclaw mcp-server)— stdin/stdout上のJSON-RPC 2.0を通じて、チャネル・メモリ・エージェント・skill・task・共有wiki・autopilotの各ツールをAI Runtimeに公開します。登録はエージェントレベルの<agent>/.mcp.json(v1.8.5でv1.8.4のグローバル登録を取り消しました。Claude CLIの-p --dangerously-skip-permissionsはプロジェクトレベルの.mcp.jsonしか読み込まないため)。Gateway起動時に全エージェントの.mcp.jsonを自動作成・修復します。 - MCP Server(HTTP/SSE)(
duduclaw http-server --bind 127.0.0.1:8765、v1.9.4)— Bearer認証のPOST /mcp/v1/call(単発のJSON-RPCツール呼び出し)、GET /mcp/v1/stream(長時間接続のSSEイベントストリーム、Bearerまたは?api_key=)、POST /mcp/v1/stream/call(非同期+SSE結果プッシュ)、GET /healthz(認証不要)。トークンバケット方式のレート制限(60 req/min)。mcp_sse_store.rsがbroadcastチャネルでSSE接続を管理します。外部HTTPクライアント向けにstdioを補完します。 - ACP/A2A Server(
duduclaw acp-server)— stdio JSON-RPC 2.0ループで、agent/discover、tasks/send、tasks/get、tasks/cancelメソッドを提供し、.well-known/agent.jsonのAgentCardを出力します。Agent Client Protocolを通じてZed / JetBrains / NeovimなどIDE統合を可能にします。 - エージェントディレクトリはClaude Codeと互換性があります。各ディレクトリには
.claude/、.mcp.json、SOUL.md、CLAUDE.md、CONTRACT.toml、agent.toml、wiki/、SKILLS/、memory/、tasks/、state/が含まれます。
チャネル(7種類 + 汎用Webhook)
Section titled “チャネル(7種類 + 汎用Webhook)”- Telegram(ロングポーリング)— ファイル/写真/スタンプ/音声、フォーラム/トピック、メンション限定、Whisper文字起こし。
- LINE(webhook)— HMAC-SHA256署名、スタンプカタログ、チャットごとの設定。
- Discord(Gateway WebSocket)—
tokio::select!によるハートビート、スラッシュコマンド、自動スレッド、ボイスチャンネル(Songbird)。v1.9.2で強化:本物のop 6 RESUME(session_id+resume_gateway_url+ シーケンス番号を永続化)、スタール監視(ハートビート間隔の2倍を超えて通信がなければ切断)、ハートビートチャネルの容量を1→16にしtry_sendへ変更、op 9に1〜5秒のジッターを追加、RESUMEDディスパッチの処理、backoff上限を60秒に短縮。 - Slack(Socket Mode)、WhatsApp(Cloud API)、Feishu(Open Platform v2)、WebChat(
/ws/chat+ Reactフロントエンド)。 - 汎用Webhook:
POST /webhook/{agent_id}+ HMAC-SHA256。 - チャネルのホットスタート/ストップ:Dashboardの
channels.add/channels.removeでgatewayを再起動せずにチャネルタスクを起動/中断できます。 - メディアパイプライン:画像の自動リサイズ(最大1568px)+ MIME検出 + Vision統合。
サブエージェントオーケストレーション
Section titled “サブエージェントオーケストレーション”create_agent/spawn_agent/list_agentsMCPツール、reports_to階層と連動。- System promptが「## Your Team」サブエージェント名簿を自動注入します。
- 構造化ハンドオフ:
DelegationEnvelope(context / constraints / task_chain / expected_output)、失敗時はRaw形式にフォールバック。 - TaskSpecワークフロー:依存関係を考慮したスケジューリング、自動リトライ(3回)、リプラン(2回)、永続化を備えた多段階タスク計画。
- 長文レスポンスの分割:チャネルのバイト予算を超えるサブエージェントの返信は
channel_format::split_textで分割され、📨 **agent** 的回報 (1/N)/(續 2/N)ラベルが付与されます(Discord 1900 / Telegram 4000 / LINE 4900 / Slack 3900)。 - 孤立レスポンスの復旧:
reconcile_orphan_responsesが、クラッシュ/Ctrl+C/ホットスワップで取り残されたbus_queue.jsonlのエントリをアトミックに再生します。
セッション記憶スタック
Section titled “セッション記憶スタック”- ネイティブなマルチターン:Claude CLIの
--resume <session-id>(SHA-256による決定的なセッションID付き)。--resumeが失敗した場合(古いハンドル、アカウントローテーション、未知のstream-jsonエラー)は履歴をプロンプトに埋め込む方式に自動フォールバックします。 - ターントリミング(800文字超 → 先頭300 + 末尾200 +
[trimmed N chars]、CJK対応)。 - Direct APIのpromptキャッシュ(“system_and_3” ブレークポイント戦略、マルチターンで約75%のキャッシュヒット率、純粋なsystem-promptキャッシュでは95%以上)。
- 圧縮サマリーは50kトークンの閾値でsystem prompt(会話ターンではなく)に注入されます。
- Instruction Pinning(v1.8.6 P0)— ユーザーの最初のターン → 非同期でHaikuがコアタスクを抽出 →
sessions.pinned_instructionsに保存 → system promptの末尾に注入(U字型の注意分布を利用)。明確化の回答は蓄積されます(≤1000文字)。 - Snowball Recap(v1.8.6 P0)— 各ターンでユーザーメッセージの前に
<task_recap>を付加。LLMコストはゼロ。 - P2 Key-Fact Accumulator(v1.8.6)— 実質的な内容のあるターンごとに、Haikuが2〜4件の重要事実を抽出 → FTS5付きの
key_factsテーブルに保存 → 最も関連性の高い上位3件をsystem promptに注入。約100〜150トークンで、MemGPTの6,500トークン(−87%)と比較して大幅に削減。 - CLI軽量パス—
call_claude_cli_lightweight()に--effort medium --max-turns 1 --no-session-persistence --tools ""を付与し、メタデータタスクに使用。コストを25〜40%削減。 - 安定化フラグ—
--strict-mcp-config(MCP分離)+--exclude-dynamic-system-prompt-sections(ターンをまたいだprompt安定性、トークンを10〜15%削減)。--bareはv1.8.11で削除されました(OSキーチェーンの認証情報検索を壊していたため)。
- 予測駆動エンジン:Active Inference + Dual Process Theory、約90%の会話でLLMコストゼロ。無視できる/中程度の誤差 → コストゼロ、有意な誤差 → GVUリフレクションを起動、重大な誤差 → 緊急GVUループを起動。
- MetaCognition:100回の予測ごとに誤差閾値を自己校正、Adaptive Depth(GVU 3〜7ラウンド)を駆動。
- GVU²自己対戦ループ(Generator→Verifier→Updater):TextGradフィードバック、4+2層の検証(L1-Format / L2-Metrics / L2.5-MistakeRegression / L3-LLMJudge / L3.5-SandboxCanary / L4-Safety)。Evolution v3以降は非デフォルトのlegacyパス(
agent.toml [evolution] legacy_soul_evolution = true)— 詳細は後述のAEEを参照。 - Deferred GVU:勾配の蓄積+遅延リトライ(最大3回延期、72時間の範囲、実効9〜21ラウンドに相当)。
- MistakeNotebook:ループを横断するエラー記憶で退行を防止。エントリには決定的な
TrajectoryEvidence(どのツール/アサーションが失敗したか)が付与され、リフレクションの統合が未検証の自己申告診断を鵜呑みにしなくなりました(Evolution v3)。 - SOUL.mdバージョン管理:24時間の観察期間+自動ロールバック、書き込みはアトミック(一時ファイル+rename)でSHA-256フィンガープリント付き。この仕組みは上記のlegacy GVUパスに適用されます。Evolution v3以降
SOUL.mdはエージェントに対してデフォルトで読み取り専用です(オペレーター/ダッシュボードのみ書き込み可)。 - AEE(Agentic Evolution Engine、v3のデフォルト):デフォルトの進化対象は
SOUL.mdからplaybookへと変わりました。カテゴリ/シグナル/eval caseに紐づく、小さく個別に廃止可能な遺伝子状のエントリの集合で、Gate(決定的、拒否権を保持)とMeasure(スコアリング、拒否権なし)の分離、champion+現状維持か改善のみ許可するコミットゲート(matches-or-improves)、そしてファイル全体ではなくエントリ単位の観察期間を通じて進化します。詳細はevolution-engine.md第12章と../../features/ja-JP/38-aee-playbook-evolution.mdを参照。 - Agent-as-Evaluator:独立したEvaluator Agent(コスト管理のためHaikuを使用)が、構造化されたJSON判定によるアドバーサリアル検証を行います。
- ConversationOutcome:LLMコストゼロで会話結果を検出(TaskType / Satisfaction / Completion)、zh-TW + en の両言語に対応。
- 外部要因:ユーザーフィードバック、セキュリティイベント、チャネル指標、Odooのビジネスコンテキスト、他エージェントからのシグナルが予測エンジンとGVUリフレクションに反映されます。
Wikiナレッジレイヤー(v1.8.9)
Section titled “Wikiナレッジレイヤー(v1.8.9)”- 4層アーキテクチャ(Vault-for-LLMに着想):L0 Identity / L1 Core / L2 Context / L3 Deep。
- 信頼度重み付け(frontmatterの
trust、0.0〜1.0)— 検索結果は信頼度加重スコアで順位付けされます。 - 自動注入:
build_system_prompt()がL0+L1ページを自動的にWIKI_CONTEXTへ注入します。CLI/チャネル返信/dispatcherの各パスに対応し、Claude / Codex / Gemini / OpenAIの各ランタイムで統一されています。 - FTS5インデックス(
unicode61トークナイザー)— 書き込み/削除のたびに自動同期、wiki_rebuild_ftsで手動再構築も可能。 - ナレッジグラフ:
wiki_graphMCPツールがBFS深度を制限したMermaid図をエクスポート。ノードの形状はレイヤーごとに異なります。 - 重複検出:
wiki_dedupはタイトル一致+タグのJaccard類似度(≥0.8)で重複ページを検出します。 - 逆引きbacklinkインデックス:
relatedfrontmatterと本文中のmarkdownリンクをスキャンし、双方向のマッピングを構築します。 - 検索フィルター:
wiki_search/shared_wiki_searchはmin_trust、layer、expand(1ホップのbacklink展開)に対応。 - Shared Wiki:
~/.duduclaw/shared/wiki/にエージェント横断のSOP・ポリシー・製品仕様を格納。可視性はwiki_visible_tocapabilityで制御。
メモリシステム
Section titled “メモリシステム”- 認知メモリ(オプション):
SqliteMemoryEngine、エピソード記憶と意味記憶を分離し、Generative Agentsの3軸重み付け検索(Recency × Importance × Relevance)を採用。 - メモリ減衰の日次スケジューラー:バックグラウンドタスクが24時間ごとに
duduclaw_memory::decay::run_decayを実行。重要度が低く30日経過 → アーカイブ。アーカイブ済みで90日経過 → 完全削除。 - 認知メモリMCPツール:
memory_search_by_layer(エピソード/意味フィルター)、memory_successful_conversations、memory_episodic_pressure、memory_consolidation_status。 - MemGPT 3層システム(Core Memory、Recall Memory、Archival Bridge、Budget Manager、Consolidation Pipeline、MCPツール6個)はv1.8.1で削除されました(−1,985行)— このプロンプト注入方式はプロンプトごとに6,500トークンも肥大化させ、「lost in the middle」による注意力の劣化を引き起こしていました。
Worktree分離(v1.6.0)
Section titled “Worktree分離(v1.6.0)”- Git worktree L0分離レイヤー— タスクごとのファイルシステム分離で、コンテナサンドボックスより低コスト。
- WorktreeManager:create / remove / list / cleanup_staleのライフサイクル管理。
- アトミックマージ:dry-runによる事前チェック → abort → クリーンな場合のみ実マージ。グローバル
Mutexで保護。 - Snapワークフロー:create → execute → inspect → merge/cleanup(判定ロジックは純粋関数で実装し、テスト容易性を確保)。
- ブランチ命名:
wt/{agent_id}/{adjective}-{noun}、50×50の単語リストから生成。 - copy_env_files:パストラバーサル対策(jail)+ symlink拒否 + 1MBサイズ上限。
- リソース上限:エージェントごとに最大5個のworktree、全体で最大20個。
ローカル推論
Section titled “ローカル推論”- 統一
InferenceBackendトレイト(duduclaw-inferencecrate):llama.cpp(Metal/CUDA/Vulkan/CPU)、mistral.rs(ISQ + PagedAttention + Speculative Decoding)、OpenAI互換HTTP(Exo/llamafile/vLLM/SGLang)。 - Confidence Router:LocalFast / LocalStrong / CloudAPIの3段階ルーティング、CJKを考慮したトークン推定。
- InferenceManager:自動切り替えのステートマシン——Exo P2P → llamafile → Direct backend → OpenAI-compat → Cloud API。
- Exo P2Pクラスター(
exo_cluster.rs):分散推論、複数マシンをまたいで235B超のモデルを実行可能。 - llamafile manager:サブプロセスのライフサイクル管理、ヘルスモニタリング、localhostでOpenAI互換APIを提供。
- MLX bridge:Apple Silicon上でPythonサブプロセスから
mlx_lmを呼び出し、ローカルリフレクション + LoRAに利用。 - MCPツール:
model_list、model_load、model_unload、inference_status、hardware_info、route_query、inference_mode、llamafile_start/stop/list、compress_text、decompress_text。
トークン圧縮
Section titled “トークン圧縮”- Meta-Token(LTSC)— Rustネイティブの可逆・BPE類似アルゴリズム、構造化入力で27〜47%の圧縮率。
- LLMLingua-2— Microsoftによるトークン重要度に基づく枝刈り、2〜5倍の非可逆圧縮。
- StreamingLLM— attention sink + スライディングウィンドウKVキャッシュ。
- 戦略セレクター:
compress_textはstrategyパラメータ(meta_token / llmlingua / streaming_llm / auto)を受け付けます。
音声パイプライン
Section titled “音声パイプライン”- ASR:Whisper.cpp(ローカル)/ SenseVoice ONNX(ローカル)/ OpenAI Whisper API / Deepgram(ストリーミング)。
- TTS:Piper ONNX(ローカル)/ MiniMax T2A / Edge TTS / OpenAI TTS。
- VAD:Silero ONNX。
- 音声デコード:symphonia(OGG Opus、MP3、AAC、WAV、FLAC → PCM)。
- Discord Voice(Songbird)+ LiveKit マルチエージェント音声ルーム。
- ONNX Embedding:BERT WordPieceトークナイザー + ONNX Runtimeベクトル埋め込み。
セキュリティ
Section titled “セキュリティ”- Claude Codeセキュリティhooks(
.claude/hooks/):3段階の漸進的防御——Layer 1 決定的ブラックリスト(<50ms)、Layer 2 難読化/情報流出検出(YELLOW以上)、Layer 3 HaikuによるAI判断(RED時のみ)。 - 脅威レベルステートマシン:GREEN → YELLOW → RED、自動エスカレーション/降格(24時間イベントなしで1段階降格)。
- SOUL.mdドリフト検出(SHA-256フィンガープリント)。
- Prompt injectionスキャナー(6種類のルールカテゴリ + XML区切り文字による保護)。
- 機密情報漏洩スキャナー— 20種類以上のパターン(Anthropic/OpenAI/AWS/GitHub/Slack/Stripe/DB URL)。
- CONTRACT.toml—
must_not/must_alwaysの境界ルール、system promptに自動注入。duduclaw testレッドチームCLI(組み込み9シナリオ)。 - 統一マルチソース監査ログ:
audit.unified_logがsecurity_audit.jsonl/tool_calls.jsonl/channel_failures.jsonl/feedback.jsonlを共通のエンベロープ(timestamp / source / event_type / agent_id / severity / summary / details)にマージし、Logsページのフィルターチップで絞り込めます。 - 保存時はAES-256-GCM— エージェントごとに鍵を分離。
- Ed25519 challenge-response によるWebSocket認証。
- コンテナサンドボックス(Docker / Apple Container / WSL2)—
--network=none、tmpfs、読み取り専用rootfs、512MB上限。 - ブラウザ自動化(5層自動ルーティング):L1 API Fetch → L2 Static Scrape → L3 Headless → L4 Sandbox Container → L5 Computer Use。
CapabilitiesConfigによりデフォルト拒否。bash-gate.shがLayer 1.5としてPlaywright/Puppeteerをホワイトリスト許可。 - CJK安全なバイトスライス:
duduclaw_core::truncate_bytes/truncate_charsが31箇所の安全でないs[..s.len().min(N)]を置き換え(v1.8.11のマルチバイトコードポイントpanicを修正)。
アカウントとコスト
Section titled “アカウントとコスト”- エージェントごとのモデルルーティング(SDKファースト):
agent.toml [model]—preferred(Claude SDKモデル)、local.model、local.use_router、api_mode(cli/direct/auto)、account_pool(後述)。 - マルチOAuthアカウントローテーション:OAuthセッション(Claude Pro/Team/Max、
claude auth status経由。setup-tokenアカウントはCLAUDE_CODE_OAUTH_TOKEN)+ APIキー。4種類の戦略(Priority/LeastCost/Failover/RoundRobin)。レート制限クールダウン(2分)、課金枯渇クールダウン(24時間)、予算強制、トークン有効期限追跡(30日/7日前の警告)。 - エージェントごとのアカウントプール(
agent.toml [model] account_pool):そのエージェントが使用できるローテーション対象アカウントを制限します。適用対象は候補集合——provider/health/cooldown/budgetのフィルターの後、戦略実行の前——なので、4つの戦略はすべて絞り込んだ集合上でも意味論をそのまま保ちます。エントリはアカウントのidまたはdashboardのlabel(完全一致、トリム済み、ASCII大文字小文字を区別しない。部分一致は不可)と照合されます。Fail-open:プールが利用可能なアカウントに一件も一致しない場合(idが古い、全アカウントがクールダウン中など)はwarnを記録し、フルセットにフォールバックします。古くなったプールがエージェントをアカウントなしの状態にすることは絶対にありません。未設定/空 ⇒ ローテーションの挙動は変わりません。エントリポイント:AccountRotator::select_with_pool/select_for_provider_with_pool。 - 二重ディスパッチパス:サブエージェントディスパッチャー(
claude_runner::call_with_rotation)とユーザー向けチャネル返信(channel_reply::call_claude_cli_rotated→rotate_cli_spawn_with_pool)の両方がrotatorを経由し、それぞれ応答するエージェントのaccount_poolを引き継ぎます。 FailureReason分類— RateLimited / Billing / Timeout / BinaryMissing / SpawnError / EmptyResponse / NoAccounts / Unknown。カテゴリごとに専用のzh-TWユーザー向けメッセージを表示し、channel_failures.jsonlに監査記録を残します。- バイナリ検出:
which_claude()/which_claude_in_home()がHomebrew(Intel + Apple Silicon)、Bun、Volta、npm-global、.claude/bin、.local/bin、asdf shims、NVMバージョンディレクトリを探索します。PATHが空の状態でlaunchdから起動されたgatewayがバイナリを発見できない問題を修正。 - CostTelemetry:SQLiteベースのトークン使用量トラッキングとキャッシュ効率分析(
cache_read / (input + cache_read + cache_creation))、200Kの価格崖警告、適応的ルーティング(キャッシュ効率<30% → ローカルへ)。MCPツール:cost_summary、cost_agents、cost_recent。 - Direct APIクライアント(
direct_api.rs):純粋なチャットではClaude CLIを迂回し、system promptにcache_control: ephemeralを付与 → キャッシュヒット率95%以上。単一のreqwest::Client(タイムアウト120秒)を使用。全OAuthアカウントがクールダウン中のフォールバックとして利用。
スケジューリング
Section titled “スケジューリング”- HeartbeatScheduler:エージェントごとの統一スケジューリング——busポーリング + GVUサイレンスブレーカー + cron、
max_concurrent_runsセマフォで制御。 - CronScheduler:
cron_tasks.jsonl(v1.8.12以降はcron_tasks.dbも)を読み込み、cron式に従ってタスクを発火します。list_cron_tasksは全タスクを返します(v1.8.3以降、default_agentによる絞り込みは行いません)。schedule_taskMCPツールのスキーマはv1.8.12で修正され、agent_idとnameフィールドが追加されました。 - ReminderScheduler:一回限りのリマインダー(相対時間
5m/2h/1dまたはISO 8601)、direct静的メッセージまたはagent_callbackウェイクアップモード。
Skillエコシステム
Section titled “Skillエコシステム”- 7段階のライフサイクル:Activation → Compression → Extraction → Reconstruction → Distillation → Diagnostician → Gap Analysis。
- GitHubライブインデックス— Search API + 24時間のローカルキャッシュ + 加重検索。
- Skill自動合成(Phase 3-4):gap accumulatorが繰り返し発生するドメインギャップを検出 → エピソード記憶からskillを合成(Voyagerに着想)→ TTL付きサンドボックス試行 → エージェント横断の卒業判定。MCPツール:
skill_security_scan、skill_graduate、skill_synthesis_status。 - Rustネイティブ Skillセキュリティスキャナー(
skill_lifecycle::security_scanner)— Pythonサブプロセス不要。dashboardの審査、MCPのskill_security_scanツール、サンドボックス試行ゲートを支えます。
タスクとナレッジ
Section titled “タスクとナレッジ”- Task Board:SQLiteベースのタスク管理(状態/優先度/割り当てを追跡)+ リアルタイムActivity Feed WebSocket。MCPツール:
tasks.list/create/update/assign、activity.list/subscribe。 - 共有ナレッジベース:
~/.duduclaw/shared/wiki/、Wikiの対象分類(agent/shared/both)に対応。MCPツール:shared_wiki_ls/read/write/search/delete/stats、wiki_share。 - Autopilotルールエンジン:委任/通知/skill実行の自動化。トリガー:タスク作成、状態変化、チャネルメッセージ、アイドル検出、cronスケジュール。
インテグレーション
Section titled “インテグレーション”- Odoo ERPブリッジ(
duduclaw-odoocrate):CE/EEに対応するJSON-RPCミドルウェア、15個のMCPツール(CRM/Sales/Inventory/Accounting)、EditionGate自動検出、イベントポーリング + webhook。OdooConnectorPoolによるエージェントごとの認証情報分離(RFC-21 §2、v1.11.0)。Dashboardの保存前テスト:odoo.testRPCがインラインパラメータを受け付け(v1.13.1)— 認証情報を省略すると保存済みシークレットにフォールバック。odoo.configureと同じSSRF/HTTPS/DB名バリデーターを使用。scrub_odoo_error()が接続エラーを240文字に切り詰め、HTML/URLの漏洩を防ぎます。 - Prometheusメトリクス:gateway HTTPの
GET /metrics— リクエスト数、トークン数、所要時間ヒストグラム、チャネル状態。 - RLトラジェクトリコレクター:チャネルとのやり取り中、エージェントごとの軌跡を
~/.duduclaw/rl_trajectories.jsonlに書き込みます。duduclaw rl export|stats|rewardCLI(複合報酬:outcome × 0.7 + efficiency × 0.2 + overlong × 0.1)。 - BroadcastLayer tracing layerがリアルタイムログをWebSocket購読者にストリーミングします。
- Dashboard WebSocketハートビート:サーバーは30秒ごとにPingを送信し、Pongが60秒間なければアイドルソケットを切断します。クライアント側は25秒ごとにアプリケーションレベルの
pingRPCを送信します(ブラウザは制御フレームを送出できないため)。
信頼性とガバナンス(v1.9.4)
Section titled “信頼性とガバナンス(v1.9.4)”duduclaw-durabilitycrate— 5本柱の耐久性:idempotency.rs:キーベースの重複排除で二重実行を防止。retry.rs:ジッター付き指数バックオフ戦略。circuit_breaker.rs:Closed / Open / HalfOpenの3状態、probe_inflightによるカウント(v1.9.4での修正:OPEN→HALF_OPEN遷移時にprobe_inflightをインクリメントし、ゴーストプローブの超過を防止)。checkpoint.rs:再開可能なタスク進捗。dlq.rs:最終的に失敗したメッセージ用のDead Letter Queue。
duduclaw-governancecrate(W19-P1 M1-A)—PolicyRegistry(YAML + ホットリロード + エージェント優先度マージ + fail-safe + 並行upsertの安全性)、4種類のPolicyType(Rate / Permission / Quota / Lifecycle)、quota_manager.rs(エージェントごと/ポリシーごとのソフト・ハードクォータ)、error_codes.rs(QUOTA_EXCEEDED / POLICY_DENIED / …)、承認ワークフロー + 監査ログ。デフォルトのポリシーセットはpolicies/global.yaml。- LLM fallbackチェーン(
gateway/llm_fallback.rs)— プライマリのタイムアウト/503/429/overloadedで自動的にフォールバックモデルへ切り替え。is_llm_fallback_error/should_attempt_model_fallbackはユニットテスト付きの純粋関数です。char_indicesによるUTF-8安全な切り詰め。 - Evolution Eventsシステム(
gateway/evolution_events/)— 30種類以上のイベントスキーマ、非同期バッチ+リトライのエミッター、クエリインターフェース、信頼性の保証。gateway上でHTTPエンドポイントとして公開され、WebのReliabilityPageに表示されます。
メモリ評価(v1.9.4 / W21)
Section titled “メモリ評価(v1.9.4 / W21)”- LOCOMO評価(
python/duduclaw/memory_eval/)—retrieval_accuracy、retention_rate、locomo_integrity_check。cron_runnerが毎日UTC 03:00にトリガーされます。5分間のsmoke_testP0が基本的なメモリ機能を検証。build_golden_qa.pyがゴールドQAセットを構築し、data/golden_qa_set.jsonlに最初の200件を収録。duduclaw-memoryエンジンに評価用のバッチクエリAPIを追加。 - Python
agents/+mcp/モジュール—agents/capabilities/(manifest + matcher)、agents/routing/(router + resolution + memory_resolver)。mcp/auth/(キーマスキング付きAPI Key)、mcp/tools/memory/(store / read / search / namespace / quota、execute()の入口で厳格なscope強制——v1.9.3の認証ギャップ(有効なAPI Keyであればscope制限を回避できていた問題)を修正)。
Webダッシュボード(24ページ)
Section titled “Webダッシュボード(24ページ)”- 技術スタック:React 19 + TypeScript + Tailwind CSS 4 + shadcn/ui、暖色系アンバーテーマ。
- リアルタイムログストリーミング(BroadcastLayer → WebSocket)。
- OrgChart(D3.jsによるインタラクティブなエージェント階層図)。
- Memoryページ:Key Insightsタブ(access_countバッジ付き
key_factsカード)+ Evolutionタブ(前後の差分付きSOUL.mdバージョン履歴)。 - Logsページ:ソースフィルターチップ + severityドロップダウン + severityで色分けした左ボーダー + JSON詳細展開。
- Toast通知システム(モジュールスコープのevent bus、最大5件キュー、暖色系バリアント)。
- Skill Market 3タブ(Marketplace / Shared Skills / My Skills)。
- Autopilot設定 + Session Replay + WikiGraph。
- ReliabilityPage(v1.9.4、
/reliabilityルート)— circuit breaker状態、リトライ統計、DLQ深度ダッシュボード。getEvolutionEvents/getReliabilityStats/getDlqItemsを呼び出します。 - i18n:zh-TW / en / ja-JP(600+ 翻訳キー)。
- Dark/Lightテーマ(システム追従 + 手動切り替え)。