From 8b677c18448bf93733062482bdd024e20f837891 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 25 Apr 2026 16:33:42 -0700 Subject: [PATCH] chore(reports): refresh compatibility artifacts --- baselines/runtime/main.json | 319 +++++++++++ reports/crabpot-capture.json | 523 +++++++++++++++++- reports/crabpot-capture.md | 166 +++--- reports/crabpot-ci-policy.json | 88 ++++ reports/crabpot-ci-policy.md | 28 + reports/crabpot-ci-summary.json | 145 +++++ reports/crabpot-ci-summary.md | 71 +++ reports/crabpot-cold-import.json | 64 ++- reports/crabpot-cold-import.md | 14 +- reports/crabpot-issues.md | 230 ++++---- reports/crabpot-profile-diff.json | 168 ++++++ reports/crabpot-profile-diff.md | 31 ++ reports/crabpot-ref-diff.json | 210 ++++++++ reports/crabpot-ref-diff.md | 41 ++ reports/crabpot-report.json | 729 +++++++++++++++++++++++++- reports/crabpot-report.md | 472 +++++++++-------- reports/crabpot-runtime-profile.json | 246 ++++++--- reports/crabpot-runtime-profile.md | 38 +- reports/crabpot-synthetic-probes.json | 322 +++++++++++- reports/crabpot-synthetic-probes.md | 26 +- reports/crabpot-workspace-plan.json | 224 +++++++- reports/crabpot-workspace-plan.md | 49 +- scripts/workspace-plan.mjs | 2 +- 23 files changed, 3640 insertions(+), 566 deletions(-) create mode 100644 baselines/runtime/main.json create mode 100644 reports/crabpot-ci-policy.json create mode 100644 reports/crabpot-ci-policy.md create mode 100644 reports/crabpot-ci-summary.json create mode 100644 reports/crabpot-ci-summary.md create mode 100644 reports/crabpot-profile-diff.json create mode 100644 reports/crabpot-profile-diff.md create mode 100644 reports/crabpot-ref-diff.json create mode 100644 reports/crabpot-ref-diff.md diff --git a/baselines/runtime/main.json b/baselines/runtime/main.json new file mode 100644 index 0000000..3c2f726 --- /dev/null +++ b/baselines/runtime/main.json @@ -0,0 +1,319 @@ +{ + "generatedAt": "deterministic", + "runs": 3, + "targetOpenClaw": { + "status": "ok", + "configuredPath": "../openclaw", + "compatRecords": 19, + "hookNames": 31, + "apiRegistrars": 40, + "capturedRegistrars": 18, + "sdkExports": 307, + "manifestFields": 32, + "manifestContractFields": 16 + }, + "fixtureInventory": { + "fixtures": 12, + "sourceFiles": 201, + "observedHooks": 18, + "observedRegistrations": 22, + "observedSdkImports": 20, + "contractProbes": 57, + "issueFindings": 58 + }, + "summary": { + "commandCount": 7, + "p50WallMs": 742, + "p95WallMs": 1273, + "maxPeakRssMb": 65.1 + }, + "commands": [ + { + "id": "node-boot", + "label": "Node boot", + "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node -e 0", + "samples": [ + { + "wallMs": 1134, + "peakRssMb": 0.4, + "exitCode": 0, + "stdoutPreview": "", + "stderrPreview": "" + }, + { + "wallMs": 697, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "", + "stderrPreview": "" + }, + { + "wallMs": 917, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "", + "stderrPreview": "" + } + ], + "wallMs": { + "min": 697, + "median": 917, + "max": 1134 + }, + "peakRssMb": { + "min": 0, + "median": 0, + "max": 0.4 + }, + "exitCodes": [ + 0 + ] + }, + { + "id": "fixture-inspection", + "label": "Fixture inspection", + "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node scripts/inspect-fixtures.mjs --check", + "samples": [ + { + "wallMs": 1273, + "peakRssMb": 51.8, + "exitCode": 0, + "stdoutPreview": "│ 11 │ 'inworld-tts' │ 'ok' │ '' │ 'definePluginEntry,registerSpeechProvider' │ 'speechProviders' │\n└─────────┴─────────────────────┴────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┴───────────────────┘", + "stderrPreview": "" + }, + { + "wallMs": 487, + "peakRssMb": 43.1, + "exitCode": 0, + "stdoutPreview": "│ 11 │ 'inworld-tts' │ 'ok' │ '' │ 'definePluginEntry,registerSpeechProvider' │ 'speechProviders' │\n└─────────┴─────────────────────┴────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┴───────────────────┘", + "stderrPreview": "" + }, + { + "wallMs": 1397, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "│ 11 │ 'inworld-tts' │ 'ok' │ '' │ 'definePluginEntry,registerSpeechProvider' │ 'speechProviders' │\n└─────────┴─────────────────────┴────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┴───────────────────┘", + "stderrPreview": "" + } + ], + "wallMs": { + "min": 487, + "median": 1273, + "max": 1397 + }, + "peakRssMb": { + "min": 0, + "median": 43.1, + "max": 51.8 + }, + "exitCodes": [ + 0 + ] + }, + { + "id": "compat-report-registry", + "label": "Compatibility report plus target registry parse", + "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node scripts/generate-report.mjs --check", + "samples": [ + { + "wallMs": 1956, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "crabpot report check: pass; 0 breakages, 18 warnings, 40 suggestions, 58 issues\nreport targets: /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.md, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.json, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-issues.md", + "stderrPreview": "" + }, + { + "wallMs": 517, + "peakRssMb": 65.1, + "exitCode": 0, + "stdoutPreview": "crabpot report check: pass; 0 breakages, 18 warnings, 40 suggestions, 58 issues\nreport targets: /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.md, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.json, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-issues.md", + "stderrPreview": "" + }, + { + "wallMs": 424, + "peakRssMb": 63.5, + "exitCode": 0, + "stdoutPreview": "crabpot report check: pass; 0 breakages, 18 warnings, 40 suggestions, 58 issues\nreport targets: /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.md, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.json, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-issues.md", + "stderrPreview": "" + } + ], + "wallMs": { + "min": 424, + "median": 517, + "max": 1956 + }, + "peakRssMb": { + "min": 0, + "median": 63.5, + "max": 65.1 + }, + "exitCodes": [ + 0 + ] + }, + { + "id": "contract-capture", + "label": "Contract capture inventory", + "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node scripts/capture-contracts.mjs --check", + "samples": [ + { + "wallMs": 483, + "peakRssMb": 64.1, + "exitCode": 0, + "stdoutPreview": "contract capture: 30 registrations, 18 hooks, 41 sdk imports, 57 issue probes", + "stderrPreview": "" + }, + { + "wallMs": 522, + "peakRssMb": 63.6, + "exitCode": 0, + "stdoutPreview": "contract capture: 30 registrations, 18 hooks, 41 sdk imports, 57 issue probes", + "stderrPreview": "" + }, + { + "wallMs": 471, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "contract capture: 30 registrations, 18 hooks, 41 sdk imports, 57 issue probes", + "stderrPreview": "" + } + ], + "wallMs": { + "min": 471, + "median": 483, + "max": 522 + }, + "peakRssMb": { + "min": 0, + "median": 63.6, + "max": 64.1 + }, + "exitCodes": [ + 0 + ] + }, + { + "id": "synthetic-probe-plan", + "label": "Synthetic probe plan", + "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node scripts/synthetic-probes.mjs --check", + "samples": [ + { + "wallMs": 821, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "synthetic probes: 48 ready, 0 blocked, 48 total", + "stderrPreview": "" + }, + { + "wallMs": 874, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "synthetic probes: 48 ready, 0 blocked, 48 total", + "stderrPreview": "" + }, + { + "wallMs": 2457, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "synthetic probes: 48 ready, 0 blocked, 48 total", + "stderrPreview": "" + } + ], + "wallMs": { + "min": 821, + "median": 874, + "max": 2457 + }, + "peakRssMb": { + "min": 0, + "median": 0, + "max": 0 + }, + "exitCodes": [ + 0 + ] + }, + { + "id": "cold-import-readiness", + "label": "Cold import readiness", + "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node scripts/cold-import-readiness.mjs --check", + "samples": [ + { + "wallMs": 444, + "peakRssMb": 60.8, + "exitCode": 0, + "stdoutPreview": "cold import readiness: 15 entrypoints, 0 ready, 15 blocked", + "stderrPreview": "" + }, + { + "wallMs": 364, + "peakRssMb": 51.4, + "exitCode": 0, + "stdoutPreview": "cold import readiness: 15 entrypoints, 0 ready, 15 blocked", + "stderrPreview": "" + }, + { + "wallMs": 604, + "peakRssMb": 57.6, + "exitCode": 0, + "stdoutPreview": "cold import readiness: 15 entrypoints, 0 ready, 15 blocked", + "stderrPreview": "" + } + ], + "wallMs": { + "min": 364, + "median": 444, + "max": 604 + }, + "peakRssMb": { + "min": 51.4, + "median": 57.6, + "max": 60.8 + }, + "exitCodes": [ + 0 + ] + }, + { + "id": "workspace-plan", + "label": "Workspace execution plan", + "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node scripts/workspace-plan.mjs --check", + "samples": [ + { + "wallMs": 369, + "peakRssMb": 0.3, + "exitCode": 0, + "stdoutPreview": "workspace plan: 15 entrypoints, 10 installs, 4 builds, 15 captures, 15 synthetic probes, 15 artifact dirs", + "stderrPreview": "" + }, + { + "wallMs": 1554, + "peakRssMb": 64, + "exitCode": 0, + "stdoutPreview": "workspace plan: 15 entrypoints, 10 installs, 4 builds, 15 captures, 15 synthetic probes, 15 artifact dirs", + "stderrPreview": "" + }, + { + "wallMs": 742, + "peakRssMb": 63.3, + "exitCode": 0, + "stdoutPreview": "workspace plan: 15 entrypoints, 10 installs, 4 builds, 15 captures, 15 synthetic probes, 15 artifact dirs", + "stderrPreview": "" + } + ], + "wallMs": { + "min": 369, + "median": 742, + "max": 1554 + }, + "peakRssMb": { + "min": 0.3, + "median": 63.3, + "max": 64 + }, + "exitCodes": [ + 0 + ] + } + ] +} diff --git a/reports/crabpot-capture.json b/reports/crabpot-capture.json index a876443..88cdd53 100644 --- a/reports/crabpot-capture.json +++ b/reports/crabpot-capture.json @@ -4,16 +4,16 @@ "status": "ok", "configuredPath": "../openclaw", "capturedRegistrarCount": 18, - "sdkExportCount": 306 + "sdkExportCount": 307 }, "summary": { - "fixtureCount": 11, - "registrationCount": 28, - "hookCount": 8, - "sdkImportCount": 32, - "packageEntrypointCount": 13, - "issueProbeCount": 50, - "inspectorShimRequiredCount": 17, + "fixtureCount": 12, + "registrationCount": 30, + "hookCount": 18, + "sdkImportCount": 41, + "packageEntrypointCount": 15, + "issueProbeCount": 57, + "inspectorShimRequiredCount": 18, "compatAliasRequiredCount": 3 }, "fixtures": [ @@ -809,6 +809,409 @@ } ] }, + { + "id": "opik-openclaw", + "priority": "high", + "registrations": [ + { + "id": "registration.registerCli:opik-openclaw:plugins-opik-openclaw-index-ts-17", + "fixture": "opik-openclaw", + "registrar": "registerCli", + "ref": "plugins/opik-openclaw/index.ts:17", + "support": "target-captured", + "assertions": [ + "command name is stable", + "argument schema is captured" + ], + "syntheticArguments": [ + { + "name": "fixture-command", + "args": [ + { + "name": "input", + "type": "string" + } + ] + } + ] + }, + { + "id": "registration.registerService:opik-openclaw:plugins-opik-openclaw-index-ts-16", + "fixture": "opik-openclaw", + "registrar": "registerService", + "ref": "plugins/opik-openclaw/index.ts:16", + "support": "inspector-shim-required", + "assertions": [ + "service id is stable", + "start/stop lifecycle handlers are captured" + ], + "syntheticArguments": [ + { + "name": "fixture-service", + "start": "function", + "stop": "function" + } + ] + } + ], + "hooks": [ + { + "id": "hook.after_tool_call:opik-openclaw:plugins-opik-openclaw-src-service-hooks-tool-ts-100", + "fixture": "opik-openclaw", + "hook": "after_tool_call", + "ref": "plugins/opik-openclaw/src/service/hooks/tool.ts:100", + "support": "synthetic-event-required", + "assertions": [ + "hook payload and return value are captured" + ], + "syntheticEvent": { + "hook": "after_tool_call", + "fixture": "opik-openclaw" + }, + "syntheticContext": { + "hook": "after_tool_call", + "fixture": "opik-openclaw" + } + }, + { + "id": "hook.agent_end:opik-openclaw:plugins-opik-openclaw-src-service-ts-560", + "fixture": "opik-openclaw", + "hook": "agent_end", + "ref": "plugins/opik-openclaw/src/service.ts:560", + "support": "synthetic-event-required", + "assertions": [ + "final conversation payload is redacted as expected", + "agent id and run metadata are present" + ], + "syntheticEvent": { + "runId": "run-fixture", + "agentId": "agent-fixture", + "conversationId": "conversation-fixture", + "status": "completed", + "transcript": [ + { + "role": "assistant", + "content": "[redacted fixture output]" + } + ] + }, + "syntheticContext": { + "runId": "run-fixture", + "agentId": "agent-fixture", + "sessionId": "session-fixture", + "channelId": "fixture-channel" + } + }, + { + "id": "hook.before_tool_call:opik-openclaw:plugins-opik-openclaw-src-service-hooks-tool-ts-34", + "fixture": "opik-openclaw", + "hook": "before_tool_call", + "ref": "plugins/opik-openclaw/src/service/hooks/tool.ts:34", + "support": "synthetic-event-required", + "assertions": [ + "block/allow return shapes are preserved", + "terminal and approval metadata are present" + ], + "syntheticEvent": { + "runId": "run-fixture", + "toolName": "fixture_tool", + "params": {}, + "toolCallId": "call-fixture" + }, + "syntheticContext": { + "runId": "run-fixture", + "agentId": "agent-fixture", + "sessionId": "session-fixture", + "toolName": "fixture_tool", + "toolCallId": "call-fixture" + } + }, + { + "id": "hook.llm_input:opik-openclaw:plugins-opik-openclaw-src-service-hooks-llm-ts-39", + "fixture": "opik-openclaw", + "hook": "llm_input", + "ref": "plugins/opik-openclaw/src/service/hooks/llm.ts:39", + "support": "synthetic-event-required", + "assertions": [ + "model input payload is redacted as expected", + "model and agent metadata are present" + ], + "syntheticEvent": { + "agentId": "agent-fixture", + "model": "gpt-5.4", + "messages": [ + { + "role": "user", + "content": "[redacted fixture input]" + } + ] + }, + "syntheticContext": { + "runId": "run-fixture", + "agentId": "agent-fixture", + "sessionId": "session-fixture", + "channelId": "fixture-channel" + } + }, + { + "id": "hook.llm_output:opik-openclaw:plugins-opik-openclaw-src-service-hooks-llm-ts-150", + "fixture": "opik-openclaw", + "hook": "llm_output", + "ref": "plugins/opik-openclaw/src/service/hooks/llm.ts:150", + "support": "synthetic-event-required", + "assertions": [ + "model output payload is redacted as expected", + "model and agent metadata are present" + ], + "syntheticEvent": { + "agentId": "agent-fixture", + "model": "gpt-5.4", + "output": { + "role": "assistant", + "content": "[redacted fixture output]" + } + }, + "syntheticContext": { + "runId": "run-fixture", + "agentId": "agent-fixture", + "sessionId": "session-fixture", + "channelId": "fixture-channel" + } + }, + { + "id": "hook.subagent_delivery_target:opik-openclaw:plugins-opik-openclaw-src-service-hooks-subagent-ts-147", + "fixture": "opik-openclaw", + "hook": "subagent_delivery_target", + "ref": "plugins/opik-openclaw/src/service/hooks/subagent.ts:147", + "support": "synthetic-event-required", + "assertions": [ + "target routing result is preserved", + "parent/subagent metadata are present" + ], + "syntheticEvent": { + "childSessionKey": "child-session", + "agentId": "agent-child", + "label": "fixture child", + "mode": "run", + "requester": { + "channel": "fixture-channel", + "accountId": "fixture-account" + } + }, + "syntheticContext": { + "runId": "run-fixture", + "childSessionKey": "child-session", + "requesterSessionKey": "parent-session" + } + }, + { + "id": "hook.subagent_ended:opik-openclaw:plugins-opik-openclaw-src-service-hooks-subagent-ts-222", + "fixture": "opik-openclaw", + "hook": "subagent_ended", + "ref": "plugins/opik-openclaw/src/service/hooks/subagent.ts:222", + "support": "synthetic-event-required", + "assertions": [ + "subagent completion payload is preserved", + "status metadata is present" + ], + "syntheticEvent": { + "childSessionKey": "child-session", + "agentId": "agent-child", + "status": "completed" + }, + "syntheticContext": { + "runId": "run-fixture", + "childSessionKey": "child-session", + "requesterSessionKey": "parent-session" + } + }, + { + "id": "hook.subagent_spawned:opik-openclaw:plugins-opik-openclaw-src-service-hooks-subagent-ts-89", + "fixture": "opik-openclaw", + "hook": "subagent_spawned", + "ref": "plugins/opik-openclaw/src/service/hooks/subagent.ts:89", + "support": "synthetic-event-required", + "assertions": [ + "spawn payload is preserved", + "parent/subagent metadata are present" + ], + "syntheticEvent": { + "childSessionKey": "child-session", + "agentId": "agent-child", + "label": "fixture child", + "mode": "run" + }, + "syntheticContext": { + "runId": "run-fixture", + "childSessionKey": "child-session", + "requesterSessionKey": "parent-session" + } + }, + { + "id": "hook.subagent_spawning:opik-openclaw:plugins-opik-openclaw-src-service-hooks-subagent-ts-38", + "fixture": "opik-openclaw", + "hook": "subagent_spawning", + "ref": "plugins/opik-openclaw/src/service/hooks/subagent.ts:38", + "support": "synthetic-event-required", + "assertions": [ + "hook payload and return value are captured" + ], + "syntheticEvent": { + "hook": "subagent_spawning", + "fixture": "opik-openclaw" + }, + "syntheticContext": { + "hook": "subagent_spawning", + "fixture": "opik-openclaw" + } + }, + { + "id": "hook.tool_result_persist:opik-openclaw:plugins-opik-openclaw-src-service-ts-541", + "fixture": "opik-openclaw", + "hook": "tool_result_persist", + "ref": "plugins/opik-openclaw/src/service.ts:541", + "support": "synthetic-event-required", + "assertions": [ + "hook payload and return value are captured" + ], + "syntheticEvent": { + "hook": "tool_result_persist", + "fixture": "opik-openclaw" + }, + "syntheticContext": { + "hook": "tool_result_persist", + "fixture": "opik-openclaw" + } + } + ], + "sdkImports": [ + { + "id": "sdk.openclaw/plugin-sdk:opik-openclaw:plugins-opik-openclaw-index-ts-1", + "fixture": "opik-openclaw", + "specifier": "openclaw/plugin-sdk", + "ref": "plugins/opik-openclaw/index.ts:1", + "support": "target-exported", + "assertions": [ + "package export exists", + "cold import resolves without plugin credentials" + ] + }, + { + "id": "sdk.openclaw/plugin-sdk:opik-openclaw:plugins-opik-openclaw-index-ts-2", + "fixture": "opik-openclaw", + "specifier": "openclaw/plugin-sdk", + "ref": "plugins/opik-openclaw/index.ts:2", + "support": "target-exported", + "assertions": [ + "package export exists", + "cold import resolves without plugin credentials" + ] + }, + { + "id": "sdk.openclaw/plugin-sdk:opik-openclaw:plugins-opik-openclaw-src-cli-ts-1", + "fixture": "opik-openclaw", + "specifier": "openclaw/plugin-sdk", + "ref": "plugins/opik-openclaw/src/cli.ts:1", + "support": "target-exported", + "assertions": [ + "package export exists", + "cold import resolves without plugin credentials" + ] + }, + { + "id": "sdk.openclaw/plugin-sdk:opik-openclaw:plugins-opik-openclaw-src-configure-ts-2", + "fixture": "opik-openclaw", + "specifier": "openclaw/plugin-sdk", + "ref": "plugins/opik-openclaw/src/configure.ts:2", + "support": "target-exported", + "assertions": [ + "package export exists", + "cold import resolves without plugin credentials" + ] + }, + { + "id": "sdk.openclaw/plugin-sdk:opik-openclaw:plugins-opik-openclaw-src-service-ts-5", + "fixture": "opik-openclaw", + "specifier": "openclaw/plugin-sdk", + "ref": "plugins/opik-openclaw/src/service.ts:5", + "support": "target-exported", + "assertions": [ + "package export exists", + "cold import resolves without plugin credentials" + ] + }, + { + "id": "sdk.openclaw/plugin-sdk:opik-openclaw:plugins-opik-openclaw-src-service-ts-6", + "fixture": "opik-openclaw", + "specifier": "openclaw/plugin-sdk", + "ref": "plugins/opik-openclaw/src/service.ts:6", + "support": "target-exported", + "assertions": [ + "package export exists", + "cold import resolves without plugin credentials" + ] + }, + { + "id": "sdk.openclaw/plugin-sdk:opik-openclaw:plugins-opik-openclaw-src-service-hooks-llm-ts-1", + "fixture": "opik-openclaw", + "specifier": "openclaw/plugin-sdk", + "ref": "plugins/opik-openclaw/src/service/hooks/llm.ts:1", + "support": "target-exported", + "assertions": [ + "package export exists", + "cold import resolves without plugin credentials" + ] + }, + { + "id": "sdk.openclaw/plugin-sdk:opik-openclaw:plugins-opik-openclaw-src-service-hooks-subagent-ts-1", + "fixture": "opik-openclaw", + "specifier": "openclaw/plugin-sdk", + "ref": "plugins/opik-openclaw/src/service/hooks/subagent.ts:1", + "support": "target-exported", + "assertions": [ + "package export exists", + "cold import resolves without plugin credentials" + ] + }, + { + "id": "sdk.openclaw/plugin-sdk:opik-openclaw:plugins-opik-openclaw-src-service-hooks-tool-ts-1", + "fixture": "opik-openclaw", + "specifier": "openclaw/plugin-sdk", + "ref": "plugins/opik-openclaw/src/service/hooks/tool.ts:1", + "support": "target-exported", + "assertions": [ + "package export exists", + "cold import resolves without plugin credentials" + ] + } + ], + "packageEntrypoints": [ + { + "id": "package.extension:opik-openclaw:plugins-opik-openclaw-index-ts", + "fixture": "opik-openclaw", + "kind": "extension", + "specifier": "./index.ts", + "ref": "plugins/opik-openclaw/index.ts", + "support": "source-present", + "assertions": [ + "entrypoint path resolves", + "entrypoint can be cold-imported after required build step" + ] + }, + { + "id": "package.runtimeExtension:opik-openclaw:plugins-opik-openclaw-dist-index-js", + "fixture": "opik-openclaw", + "kind": "runtimeExtension", + "specifier": "./dist/index.js", + "ref": "plugins/opik-openclaw/dist/index.js", + "support": "build-required", + "assertions": [ + "entrypoint path resolves", + "entrypoint can be cold-imported after required build step" + ] + } + ] + }, { "id": "clawmetry", "priority": "medium", @@ -1459,6 +1862,19 @@ "registered handler metadata is retained" ] }, + { + "id": "api.capture.runtime-registrars:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P1", + "target": "inspector-capture-api", + "evidence": [ + "registerService @ plugins/opik-openclaw/index.ts:16" + ], + "assertions": [ + "registration arguments are recorded", + "registered handler metadata is retained" + ] + }, { "id": "api.capture.runtime-registrars:wecom", "fixture": "wecom", @@ -1473,6 +1889,19 @@ "registered handler metadata is retained" ] }, + { + "id": "hook.before_tool_call.terminal-block-approval:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P1", + "target": "hook-runner", + "evidence": [ + "before_tool_call @ plugins/opik-openclaw/src/service/hooks/tool.ts:34" + ], + "assertions": [ + "synthetic event payload is accepted", + "return semantics are preserved" + ] + }, { "id": "hook.before_tool_call.terminal-block-approval:wecom", "fixture": "wecom", @@ -1500,6 +1929,21 @@ "return semantics are preserved" ] }, + { + "id": "hook.llm-observer.privacy-payload:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P1", + "target": "hook-runner", + "evidence": [ + "agent_end @ plugins/opik-openclaw/src/service.ts:560", + "llm_input @ plugins/opik-openclaw/src/service/hooks/llm.ts:39", + "llm_output @ plugins/opik-openclaw/src/service/hooks/llm.ts:150" + ], + "assertions": [ + "synthetic event payload is accepted", + "return semantics are preserved" + ] + }, { "id": "sdk.import.package-export-cold-import:codex-app-server", "fixture": "codex-app-server", @@ -1648,6 +2092,19 @@ "cold import failure mode is classified" ] }, + { + "id": "package.entrypoint.build-before-cold-import:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P2", + "target": "package-loader", + "evidence": [ + "runtimeExtension:./dist/index.js -> plugins/opik-openclaw/dist/index.js" + ], + "assertions": [ + "entrypoint metadata resolves", + "cold import failure mode is classified" + ] + }, { "id": "package.entrypoint.isolated-dependency-install:a2a-gateway", "fixture": "a2a-gateway", @@ -1712,6 +2169,22 @@ "cold import failure mode is classified" ] }, + { + "id": "package.entrypoint.isolated-dependency-install:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P2", + "target": "package-loader", + "evidence": [ + "@clack/prompts @ plugins/opik-openclaw/package.json", + "opik @ plugins/opik-openclaw/package.json", + "zod @ plugins/opik-openclaw/package.json", + "openclaw @ plugins/opik-openclaw/package.json" + ], + "assertions": [ + "entrypoint metadata resolves", + "cold import failure mode is classified" + ] + }, { "id": "package.entrypoint.isolated-dependency-install:wecom", "fixture": "wecom", @@ -1781,6 +2254,19 @@ "cold import failure mode is classified" ] }, + { + "id": "package.entrypoint.typescript-loader:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P2", + "target": "package-loader", + "evidence": [ + "extension:plugins/opik-openclaw/index.ts" + ], + "assertions": [ + "entrypoint metadata resolves", + "cold import failure mode is classified" + ] + }, { "id": "package.metadata.version-alignment:a2a-gateway", "fixture": "a2a-gateway", @@ -1821,6 +2307,27 @@ "migration metadata is visible when alias is missing" ] }, + { + "id": "sdk.import.root-barrel-cold-import:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P2", + "target": "sdk-alias", + "evidence": [ + "openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:2", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/cli.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/configure.ts:2", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:5", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:6", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/llm.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/subagent.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/tool.ts:1" + ], + "assertions": [ + "package export exists", + "migration metadata is visible when alias is missing" + ] + }, { "id": "tool.registration.schema-capture:a2a-gateway", "fixture": "a2a-gateway", diff --git a/reports/crabpot-capture.md b/reports/crabpot-capture.md index f465d76..e0d6a9d 100644 --- a/reports/crabpot-capture.md +++ b/reports/crabpot-capture.md @@ -6,13 +6,13 @@ Generated: deterministic | Metric | Value | | ----------------------- | ----- | -| Fixtures | 11 | -| Registrations | 28 | -| Hooks | 8 | -| SDK imports | 32 | -| Package entrypoints | 13 | -| Issue probes | 50 | -| Inspector shim required | 17 | +| Fixtures | 12 | +| Registrations | 30 | +| Hooks | 18 | +| SDK imports | 41 | +| Package entrypoints | 15 | +| Issue probes | 57 | +| Inspector shim required | 18 | | Compat aliases required | 3 | ## Registration Capture @@ -35,6 +35,8 @@ Generated: deterministic | hasdata | registerTool | target-captured | plugins/hasdata/src/index.ts:43 | tool name is stable; input schema is captured; result shape metadata is captured | | mcp-adapter | registerService | inspector-shim-required | plugins/mcp-adapter/index.ts:15 | service id is stable; start/stop lifecycle handlers are captured | | mcp-adapter | registerTool | target-captured | plugins/mcp-adapter/index.ts:30 | tool name is stable; input schema is captured; result shape metadata is captured | +| opik-openclaw | registerCli | target-captured | plugins/opik-openclaw/index.ts:17 | command name is stable; argument schema is captured | +| opik-openclaw | registerService | inspector-shim-required | plugins/opik-openclaw/index.ts:16 | service id is stable; start/stop lifecycle handlers are captured | | clawmetry | definePluginEntry | inspector-shim-required | plugins/clawmetry/clawhub-plugin/index.ts:4 | entrypoint register function is callable; entrypoint metadata is preserved | | clawmetry | registerService | inspector-shim-required | plugins/clawmetry/clawhub-plugin/index.ts:9 | service id is stable; start/stop lifecycle handlers are captured | | codex-app-server | registerCommand | inspector-shim-required | plugins/codex-app-server/index.ts:48 | command id is stable; interactive command payload is captured | @@ -50,16 +52,26 @@ Generated: deterministic ## Hook Probes -| Fixture | Hook | Support | Evidence | Assertions | -| ----------------- | ------------------------ | ------------------------ | -------------------------------------- | ----------------------------------------------------------------------------------- | -| wecom | before_prompt_build | synthetic-event-required | plugins/wecom/index.js:53 | prompt mutation result is preserved; agent and conversation metadata are present | -| wecom | before_tool_call | synthetic-event-required | plugins/wecom/index.js:65 | block/allow return shapes are preserved; terminal and approval metadata are present | -| wecom | subagent_delivery_target | synthetic-event-required | plugins/wecom/index.js:61 | target routing result is preserved; parent/subagent metadata are present | -| wecom | subagent_ended | synthetic-event-required | plugins/wecom/index.js:63 | subagent completion payload is preserved; status metadata is present | -| wecom | subagent_spawned | synthetic-event-required | plugins/wecom/index.js:62 | spawn payload is preserved; parent/subagent metadata are present | -| llm-trace-phoenix | llm_input | synthetic-event-required | plugins/llm-trace-phoenix/index.ts:154 | model input payload is redacted as expected; model and agent metadata are present | -| llm-trace-phoenix | llm_output | synthetic-event-required | plugins/llm-trace-phoenix/index.ts:168 | model output payload is redacted as expected; model and agent metadata are present | -| codex-app-server | inbound_claim | synthetic-event-required | plugins/codex-app-server/index.ts:25 | claim payload preserves channel/source identity; routing metadata is present | +| Fixture | Hook | Support | Evidence | Assertions | +| ----------------- | ------------------------ | ------------------------ | ------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| wecom | before_prompt_build | synthetic-event-required | plugins/wecom/index.js:53 | prompt mutation result is preserved; agent and conversation metadata are present | +| wecom | before_tool_call | synthetic-event-required | plugins/wecom/index.js:65 | block/allow return shapes are preserved; terminal and approval metadata are present | +| wecom | subagent_delivery_target | synthetic-event-required | plugins/wecom/index.js:61 | target routing result is preserved; parent/subagent metadata are present | +| wecom | subagent_ended | synthetic-event-required | plugins/wecom/index.js:63 | subagent completion payload is preserved; status metadata is present | +| wecom | subagent_spawned | synthetic-event-required | plugins/wecom/index.js:62 | spawn payload is preserved; parent/subagent metadata are present | +| llm-trace-phoenix | llm_input | synthetic-event-required | plugins/llm-trace-phoenix/index.ts:154 | model input payload is redacted as expected; model and agent metadata are present | +| llm-trace-phoenix | llm_output | synthetic-event-required | plugins/llm-trace-phoenix/index.ts:168 | model output payload is redacted as expected; model and agent metadata are present | +| opik-openclaw | after_tool_call | synthetic-event-required | plugins/opik-openclaw/src/service/hooks/tool.ts:100 | hook payload and return value are captured | +| opik-openclaw | agent_end | synthetic-event-required | plugins/opik-openclaw/src/service.ts:560 | final conversation payload is redacted as expected; agent id and run metadata are present | +| opik-openclaw | before_tool_call | synthetic-event-required | plugins/opik-openclaw/src/service/hooks/tool.ts:34 | block/allow return shapes are preserved; terminal and approval metadata are present | +| opik-openclaw | llm_input | synthetic-event-required | plugins/opik-openclaw/src/service/hooks/llm.ts:39 | model input payload is redacted as expected; model and agent metadata are present | +| opik-openclaw | llm_output | synthetic-event-required | plugins/opik-openclaw/src/service/hooks/llm.ts:150 | model output payload is redacted as expected; model and agent metadata are present | +| opik-openclaw | subagent_delivery_target | synthetic-event-required | plugins/opik-openclaw/src/service/hooks/subagent.ts:147 | target routing result is preserved; parent/subagent metadata are present | +| opik-openclaw | subagent_ended | synthetic-event-required | plugins/opik-openclaw/src/service/hooks/subagent.ts:222 | subagent completion payload is preserved; status metadata is present | +| opik-openclaw | subagent_spawned | synthetic-event-required | plugins/opik-openclaw/src/service/hooks/subagent.ts:89 | spawn payload is preserved; parent/subagent metadata are present | +| opik-openclaw | subagent_spawning | synthetic-event-required | plugins/opik-openclaw/src/service/hooks/subagent.ts:38 | hook payload and return value are captured | +| opik-openclaw | tool_result_persist | synthetic-event-required | plugins/opik-openclaw/src/service.ts:541 | hook payload and return value are captured | +| codex-app-server | inbound_claim | synthetic-event-required | plugins/codex-app-server/index.ts:25 | claim payload preserves channel/source identity; routing metadata is present | ## SDK Import Probes @@ -78,6 +90,15 @@ Generated: deterministic | wecom | openclaw/plugin-sdk/status-helpers | target-exported | plugins/wecom/wecom/channel-plugin.js:6 | package export exists; cold import resolves without plugin credentials | | a2a-gateway | openclaw/plugin-sdk | target-exported | plugins/a2a-gateway/src/types.ts:14 | package export exists; cold import resolves without plugin credentials | | llm-trace-phoenix | openclaw/plugin-sdk | target-exported | plugins/llm-trace-phoenix/index.ts:12 | package export exists; cold import resolves without plugin credentials | +| opik-openclaw | openclaw/plugin-sdk | target-exported | plugins/opik-openclaw/index.ts:1 | package export exists; cold import resolves without plugin credentials | +| opik-openclaw | openclaw/plugin-sdk | target-exported | plugins/opik-openclaw/index.ts:2 | package export exists; cold import resolves without plugin credentials | +| opik-openclaw | openclaw/plugin-sdk | target-exported | plugins/opik-openclaw/src/cli.ts:1 | package export exists; cold import resolves without plugin credentials | +| opik-openclaw | openclaw/plugin-sdk | target-exported | plugins/opik-openclaw/src/configure.ts:2 | package export exists; cold import resolves without plugin credentials | +| opik-openclaw | openclaw/plugin-sdk | target-exported | plugins/opik-openclaw/src/service.ts:5 | package export exists; cold import resolves without plugin credentials | +| opik-openclaw | openclaw/plugin-sdk | target-exported | plugins/opik-openclaw/src/service.ts:6 | package export exists; cold import resolves without plugin credentials | +| opik-openclaw | openclaw/plugin-sdk | target-exported | plugins/opik-openclaw/src/service/hooks/llm.ts:1 | package export exists; cold import resolves without plugin credentials | +| opik-openclaw | openclaw/plugin-sdk | target-exported | plugins/opik-openclaw/src/service/hooks/subagent.ts:1 | package export exists; cold import resolves without plugin credentials | +| opik-openclaw | openclaw/plugin-sdk | target-exported | plugins/opik-openclaw/src/service/hooks/tool.ts:1 | package export exists; cold import resolves without plugin credentials | | clawmetry | openclaw/plugin-sdk/diagnostics-otel | target-exported | plugins/clawmetry/clawhub-plugin/src/service.ts:2 | package export exists; cold import resolves without plugin credentials | | clawmetry | openclaw/plugin-sdk/plugin-entry | target-exported | plugins/clawmetry/clawhub-plugin/index.ts:1 | package export exists; cold import resolves without plugin credentials | | clawmetry | openclaw/plugin-sdk/plugin-entry | target-exported | plugins/clawmetry/clawhub-plugin/src/service.ts:1 | package export exists; cold import resolves without plugin credentials | @@ -100,55 +121,62 @@ Generated: deterministic ## Issue Probe Backlog -| ID | Priority | Fixture | Target | Assertions | Evidence | -| --------------------------------------------------------------- | -------- | ----------------- | --------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| api.capture.runtime-registrars:a2a-gateway | P1 | a2a-gateway | inspector-capture-api | registration arguments are recorded; registered handler metadata is retained | registerGatewayMethod @ plugins/a2a-gateway/index.ts:616, registerGatewayMethod @ plugins/a2a-gateway/index.ts:622, registerGatewayMethod @ plugins/a2a-gateway/index.ts:631, registerGatewayMethod @ plugins/a2a-gateway/index.ts:657, registerGatewayMethod @ plugins/a2a-gateway/index.ts:669, registerService @ plugins/a2a-gateway/index.ts:857 | -| api.capture.runtime-registrars:clawmetry | P1 | clawmetry | inspector-capture-api | registration arguments are recorded; registered handler metadata is retained | registerService @ plugins/clawmetry/clawhub-plugin/index.ts:9 | -| api.capture.runtime-registrars:codex-app-server | P1 | codex-app-server | inspector-capture-api | registration arguments are recorded; registered handler metadata is retained | registerCommand @ plugins/codex-app-server/index.ts:48, registerInteractiveHandler @ plugins/codex-app-server/index.ts:29, registerInteractiveHandler @ plugins/codex-app-server/index.ts:38, registerService @ plugins/codex-app-server/index.ts:12 | -| api.capture.runtime-registrars:mcp-adapter | P1 | mcp-adapter | inspector-capture-api | registration arguments are recorded; registered handler metadata is retained | registerService @ plugins/mcp-adapter/index.ts:15 | -| api.capture.runtime-registrars:wecom | P1 | wecom | inspector-capture-api | registration arguments are recorded; registered handler metadata is retained | registerChannel @ plugins/wecom/index.js:27, registerHttpRoute @ plugins/wecom/index.js:45 | -| hook.before_tool_call.terminal-block-approval:wecom | P1 | wecom | hook-runner | synthetic event payload is accepted; return semantics are preserved | before_tool_call @ plugins/wecom/index.js:65 | -| hook.llm-observer.privacy-payload:llm-trace-phoenix | P1 | llm-trace-phoenix | hook-runner | synthetic event payload is accepted; return semantics are preserved | llm_input @ plugins/llm-trace-phoenix/index.ts:154, llm_output @ plugins/llm-trace-phoenix/index.ts:168 | -| sdk.import.package-export-cold-import:codex-app-server | P1 | codex-app-server | sdk-alias | package export exists; migration metadata is visible when alias is missing | openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:104, openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:106, openclaw/plugin-sdk/telegram-account @ plugins/codex-app-server/src/controller.ts:105 | -| channel.runtime.envelope-config-metadata:agentchat | P2 | agentchat | channel-runtime | message envelope is stable; sender/config metadata is preserved | defineChannelPluginEntry @ plugins/agentchat/integrations/openclaw-channel/src/channel.ts:333 | -| channel.runtime.envelope-config-metadata:wecom | P2 | wecom | channel-runtime | message envelope is stable; sender/config metadata is preserved | registerChannel @ plugins/wecom/index.js:27 | -| manifest.compat.channel-env-vars:agentchat | P2 | agentchat | manifest-loader | metadata key is accepted; migration or compatibility mapping is visible | agentchat | -| manifest.compat.provider-auth-env-vars:hasdata | P2 | hasdata | manifest-loader | metadata key is accepted; migration or compatibility mapping is visible | hasdata | -| manifest.schema.top-level-fields:a2a-gateway | P2 | a2a-gateway | manifest-loader | metadata key is accepted; migration or compatibility mapping is visible | defaultConfig @ plugins/a2a-gateway/openclaw.plugin.json | -| manifest.schema.top-level-fields:agentchat | P2 | agentchat | manifest-loader | metadata key is accepted; migration or compatibility mapping is visible | displayName @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, homepage @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, icon @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | -| package.compat.plugin-api-range:a2a-gateway | P2 | a2a-gateway | package-loader | entrypoint metadata resolves; cold import failure mode is classified | plugins/a2a-gateway/package.json | -| package.compat.plugin-api-range:mcp-adapter | P2 | mcp-adapter | package-loader | entrypoint metadata resolves; cold import failure mode is classified | plugins/mcp-adapter/package.json | -| package.compat.plugin-api-range:wecom | P2 | wecom | package-loader | entrypoint metadata resolves; cold import failure mode is classified | plugins/wecom/package.json | -| package.entrypoint.build-before-cold-import:agentchat | P2 | agentchat | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:./dist/index.js -> plugins/agentchat/integrations/openclaw-channel/dist/index.js, setupEntry:./dist/setup-entry.js -> plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js | -| package.entrypoint.isolated-dependency-install:a2a-gateway | P2 | a2a-gateway | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @a2a-js/sdk @ plugins/a2a-gateway/package.json, @bufbuild/protobuf @ plugins/a2a-gateway/package.json, @grpc/grpc-js @ plugins/a2a-gateway/package.json, express @ plugins/a2a-gateway/package.json, multicast-dns @ plugins/a2a-gateway/package.json, uuid @ plugins/a2a-gateway/package.json, ws @ plugins/a2a-gateway/package.json | -| package.entrypoint.isolated-dependency-install:agentchat | P2 | agentchat | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @agentchatme/agentchat @ plugins/agentchat/integrations/openclaw-channel/package.json, @sinclair/typebox @ plugins/agentchat/integrations/openclaw-channel/package.json, pino @ plugins/agentchat/integrations/openclaw-channel/package.json, ws @ plugins/agentchat/integrations/openclaw-channel/package.json, zod @ plugins/agentchat/integrations/openclaw-channel/package.json, openclaw @ plugins/agentchat/integrations/openclaw-channel/package.json | -| package.entrypoint.isolated-dependency-install:hasdata | P2 | hasdata | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @sinclair/typebox @ plugins/hasdata/package.json, openclaw @ plugins/hasdata/package.json | -| package.entrypoint.isolated-dependency-install:mcp-adapter | P2 | mcp-adapter | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @modelcontextprotocol/sdk @ plugins/mcp-adapter/package.json | -| package.entrypoint.isolated-dependency-install:wecom | P2 | wecom | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @wecom/aibot-node-sdk @ plugins/wecom/package.json, file-type @ plugins/wecom/package.json, pinyin-pro @ plugins/wecom/package.json, openclaw @ plugins/wecom/package.json, undici @ plugins/wecom/package.json | -| package.entrypoint.typescript-loader:a2a-gateway | P2 | a2a-gateway | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/a2a-gateway/index.ts | -| package.entrypoint.typescript-loader:hasdata | P2 | hasdata | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/hasdata/src/index.ts | -| package.entrypoint.typescript-loader:llm-trace-phoenix | P2 | llm-trace-phoenix | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/llm-trace-phoenix/index.ts | -| package.entrypoint.typescript-loader:mcp-adapter | P2 | mcp-adapter | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/mcp-adapter/index.ts | -| package.metadata.version-alignment:a2a-gateway | P2 | a2a-gateway | package-loader | entrypoint metadata resolves; cold import failure mode is classified | package:1.4.0, manifest:1.3.0 | -| sdk.import.root-barrel-cold-import:a2a-gateway | P2 | a2a-gateway | sdk-alias | package export exists; migration metadata is visible when alias is missing | openclaw/plugin-sdk @ plugins/a2a-gateway/src/types.ts:14 | -| sdk.import.root-barrel-cold-import:llm-trace-phoenix | P2 | llm-trace-phoenix | sdk-alias | package export exists; migration metadata is visible when alias is missing | openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12 | -| tool.registration.schema-capture:a2a-gateway | P2 | a2a-gateway | tool-runtime | tool schema is captured; tool result metadata is retained | registerTool @ plugins/a2a-gateway/index.ts:777 | -| tool.registration.schema-capture:mcp-adapter | P2 | mcp-adapter | tool-runtime | tool schema is captured; tool result metadata is retained | registerTool @ plugins/mcp-adapter/index.ts:30 | -| tool.registration.schema-capture:wecom | P2 | wecom | tool-runtime | tool schema is captured; tool result metadata is retained | registerTool @ plugins/wecom/index.js:28, registerTool @ plugins/wecom/index.js:29, registerTool @ plugins/wecom/index.js:33 | -| manifest.compat.provider-auth-env-vars:inworld-tts | P3 | inworld-tts | manifest-loader | metadata key is accepted; migration or compatibility mapping is visible | inworld | -| manifest.compat.provider-auth-env-vars:web-search-plus | P3 | web-search-plus | manifest-loader | metadata key is accepted; migration or compatibility mapping is visible | serper, tavily, linkup, querit, exa, firecrawl, perplexity, you, searxng | -| package.entrypoint.build-before-cold-import:clawmetry | P3 | clawmetry | package-loader | entrypoint metadata resolves; cold import failure mode is classified | runtimeExtension:./dist/index.js -> plugins/clawmetry/clawhub-plugin/dist/index.js | -| package.entrypoint.isolated-dependency-install:apify | P3 | apify | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @sinclair/typebox @ plugins/apify/package.json, apify-client @ plugins/apify/package.json, openclaw @ plugins/apify/package.json | -| package.entrypoint.isolated-dependency-install:clawmetry | P3 | clawmetry | package-loader | entrypoint metadata resolves; cold import failure mode is classified | node-fetch @ plugins/clawmetry/clawhub-plugin/package.json | -| package.entrypoint.isolated-dependency-install:codex-app-server | P3 | codex-app-server | package-loader | entrypoint metadata resolves; cold import failure mode is classified | ws @ plugins/codex-app-server/package.json, openclaw @ plugins/codex-app-server/package.json | -| package.entrypoint.isolated-dependency-install:inworld-tts | P3 | inworld-tts | package-loader | entrypoint metadata resolves; cold import failure mode is classified | openclaw @ plugins/inworld-tts/package.json | -| package.entrypoint.isolated-dependency-install:web-search-plus | P3 | web-search-plus | package-loader | entrypoint metadata resolves; cold import failure mode is classified | openclaw @ plugins/web-search-plus/package.json | -| package.entrypoint.typescript-loader:apify | P3 | apify | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/apify/src/index.ts | -| package.entrypoint.typescript-loader:clawmetry | P3 | clawmetry | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/clawmetry/clawhub-plugin/index.ts | -| package.entrypoint.typescript-loader:codex-app-server | P3 | codex-app-server | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/codex-app-server/index.ts | -| package.entrypoint.typescript-loader:inworld-tts | P3 | inworld-tts | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/inworld-tts/index.ts | -| package.entrypoint.typescript-loader:web-search-plus | P3 | web-search-plus | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/web-search-plus/index.ts | -| sdk.import.root-barrel-cold-import:apify | P3 | apify | sdk-alias | package export exists; migration metadata is visible when alias is missing | openclaw/plugin-sdk @ plugins/apify/src/cli.ts:2, openclaw/plugin-sdk @ plugins/apify/src/index.ts:1, openclaw/plugin-sdk @ plugins/apify/src/tools/apify-scraper-tool.ts:4 | -| sdk.import.root-barrel-cold-import:codex-app-server | P3 | codex-app-server | sdk-alias | package export exists; migration metadata is visible when alias is missing | openclaw/plugin-sdk @ plugins/codex-app-server/index.ts:1, openclaw/plugin-sdk @ plugins/codex-app-server/src/client.ts:6, openclaw/plugin-sdk @ plugins/codex-app-server/src/controller.ts:18, openclaw/plugin-sdk @ plugins/codex-app-server/src/types.ts:1 | -| tool.registration.schema-capture:apify | P3 | apify | tool-runtime | tool schema is captured; tool result metadata is retained | registerTool @ plugins/apify/src/index.ts:13 | -| tool.registration.schema-capture:web-search-plus | P3 | web-search-plus | tool-runtime | tool schema is captured; tool result metadata is retained | registerTool @ plugins/web-search-plus/index.ts:815, registerTool @ plugins/web-search-plus/index.ts:947 | +| ID | Priority | Fixture | Target | Assertions | Evidence | +| --------------------------------------------------------------- | -------- | ----------------- | --------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| api.capture.runtime-registrars:a2a-gateway | P1 | a2a-gateway | inspector-capture-api | registration arguments are recorded; registered handler metadata is retained | registerGatewayMethod @ plugins/a2a-gateway/index.ts:616, registerGatewayMethod @ plugins/a2a-gateway/index.ts:622, registerGatewayMethod @ plugins/a2a-gateway/index.ts:631, registerGatewayMethod @ plugins/a2a-gateway/index.ts:657, registerGatewayMethod @ plugins/a2a-gateway/index.ts:669, registerService @ plugins/a2a-gateway/index.ts:857 | +| api.capture.runtime-registrars:clawmetry | P1 | clawmetry | inspector-capture-api | registration arguments are recorded; registered handler metadata is retained | registerService @ plugins/clawmetry/clawhub-plugin/index.ts:9 | +| api.capture.runtime-registrars:codex-app-server | P1 | codex-app-server | inspector-capture-api | registration arguments are recorded; registered handler metadata is retained | registerCommand @ plugins/codex-app-server/index.ts:48, registerInteractiveHandler @ plugins/codex-app-server/index.ts:29, registerInteractiveHandler @ plugins/codex-app-server/index.ts:38, registerService @ plugins/codex-app-server/index.ts:12 | +| api.capture.runtime-registrars:mcp-adapter | P1 | mcp-adapter | inspector-capture-api | registration arguments are recorded; registered handler metadata is retained | registerService @ plugins/mcp-adapter/index.ts:15 | +| api.capture.runtime-registrars:opik-openclaw | P1 | opik-openclaw | inspector-capture-api | registration arguments are recorded; registered handler metadata is retained | registerService @ plugins/opik-openclaw/index.ts:16 | +| api.capture.runtime-registrars:wecom | P1 | wecom | inspector-capture-api | registration arguments are recorded; registered handler metadata is retained | registerChannel @ plugins/wecom/index.js:27, registerHttpRoute @ plugins/wecom/index.js:45 | +| hook.before_tool_call.terminal-block-approval:opik-openclaw | P1 | opik-openclaw | hook-runner | synthetic event payload is accepted; return semantics are preserved | before_tool_call @ plugins/opik-openclaw/src/service/hooks/tool.ts:34 | +| hook.before_tool_call.terminal-block-approval:wecom | P1 | wecom | hook-runner | synthetic event payload is accepted; return semantics are preserved | before_tool_call @ plugins/wecom/index.js:65 | +| hook.llm-observer.privacy-payload:llm-trace-phoenix | P1 | llm-trace-phoenix | hook-runner | synthetic event payload is accepted; return semantics are preserved | llm_input @ plugins/llm-trace-phoenix/index.ts:154, llm_output @ plugins/llm-trace-phoenix/index.ts:168 | +| hook.llm-observer.privacy-payload:opik-openclaw | P1 | opik-openclaw | hook-runner | synthetic event payload is accepted; return semantics are preserved | agent_end @ plugins/opik-openclaw/src/service.ts:560, llm_input @ plugins/opik-openclaw/src/service/hooks/llm.ts:39, llm_output @ plugins/opik-openclaw/src/service/hooks/llm.ts:150 | +| sdk.import.package-export-cold-import:codex-app-server | P1 | codex-app-server | sdk-alias | package export exists; migration metadata is visible when alias is missing | openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:104, openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:106, openclaw/plugin-sdk/telegram-account @ plugins/codex-app-server/src/controller.ts:105 | +| channel.runtime.envelope-config-metadata:agentchat | P2 | agentchat | channel-runtime | message envelope is stable; sender/config metadata is preserved | defineChannelPluginEntry @ plugins/agentchat/integrations/openclaw-channel/src/channel.ts:333 | +| channel.runtime.envelope-config-metadata:wecom | P2 | wecom | channel-runtime | message envelope is stable; sender/config metadata is preserved | registerChannel @ plugins/wecom/index.js:27 | +| manifest.compat.channel-env-vars:agentchat | P2 | agentchat | manifest-loader | metadata key is accepted; migration or compatibility mapping is visible | agentchat | +| manifest.compat.provider-auth-env-vars:hasdata | P2 | hasdata | manifest-loader | metadata key is accepted; migration or compatibility mapping is visible | hasdata | +| manifest.schema.top-level-fields:a2a-gateway | P2 | a2a-gateway | manifest-loader | metadata key is accepted; migration or compatibility mapping is visible | defaultConfig @ plugins/a2a-gateway/openclaw.plugin.json | +| manifest.schema.top-level-fields:agentchat | P2 | agentchat | manifest-loader | metadata key is accepted; migration or compatibility mapping is visible | displayName @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, homepage @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, icon @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | +| package.compat.plugin-api-range:a2a-gateway | P2 | a2a-gateway | package-loader | entrypoint metadata resolves; cold import failure mode is classified | plugins/a2a-gateway/package.json | +| package.compat.plugin-api-range:mcp-adapter | P2 | mcp-adapter | package-loader | entrypoint metadata resolves; cold import failure mode is classified | plugins/mcp-adapter/package.json | +| package.compat.plugin-api-range:wecom | P2 | wecom | package-loader | entrypoint metadata resolves; cold import failure mode is classified | plugins/wecom/package.json | +| package.entrypoint.build-before-cold-import:agentchat | P2 | agentchat | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:./dist/index.js -> plugins/agentchat/integrations/openclaw-channel/dist/index.js, setupEntry:./dist/setup-entry.js -> plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js | +| package.entrypoint.build-before-cold-import:opik-openclaw | P2 | opik-openclaw | package-loader | entrypoint metadata resolves; cold import failure mode is classified | runtimeExtension:./dist/index.js -> plugins/opik-openclaw/dist/index.js | +| package.entrypoint.isolated-dependency-install:a2a-gateway | P2 | a2a-gateway | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @a2a-js/sdk @ plugins/a2a-gateway/package.json, @bufbuild/protobuf @ plugins/a2a-gateway/package.json, @grpc/grpc-js @ plugins/a2a-gateway/package.json, express @ plugins/a2a-gateway/package.json, multicast-dns @ plugins/a2a-gateway/package.json, uuid @ plugins/a2a-gateway/package.json, ws @ plugins/a2a-gateway/package.json | +| package.entrypoint.isolated-dependency-install:agentchat | P2 | agentchat | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @agentchatme/agentchat @ plugins/agentchat/integrations/openclaw-channel/package.json, @sinclair/typebox @ plugins/agentchat/integrations/openclaw-channel/package.json, pino @ plugins/agentchat/integrations/openclaw-channel/package.json, ws @ plugins/agentchat/integrations/openclaw-channel/package.json, zod @ plugins/agentchat/integrations/openclaw-channel/package.json, openclaw @ plugins/agentchat/integrations/openclaw-channel/package.json | +| package.entrypoint.isolated-dependency-install:hasdata | P2 | hasdata | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @sinclair/typebox @ plugins/hasdata/package.json, openclaw @ plugins/hasdata/package.json | +| package.entrypoint.isolated-dependency-install:mcp-adapter | P2 | mcp-adapter | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @modelcontextprotocol/sdk @ plugins/mcp-adapter/package.json | +| package.entrypoint.isolated-dependency-install:opik-openclaw | P2 | opik-openclaw | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @clack/prompts @ plugins/opik-openclaw/package.json, opik @ plugins/opik-openclaw/package.json, zod @ plugins/opik-openclaw/package.json, openclaw @ plugins/opik-openclaw/package.json | +| package.entrypoint.isolated-dependency-install:wecom | P2 | wecom | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @wecom/aibot-node-sdk @ plugins/wecom/package.json, file-type @ plugins/wecom/package.json, pinyin-pro @ plugins/wecom/package.json, openclaw @ plugins/wecom/package.json, undici @ plugins/wecom/package.json | +| package.entrypoint.typescript-loader:a2a-gateway | P2 | a2a-gateway | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/a2a-gateway/index.ts | +| package.entrypoint.typescript-loader:hasdata | P2 | hasdata | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/hasdata/src/index.ts | +| package.entrypoint.typescript-loader:llm-trace-phoenix | P2 | llm-trace-phoenix | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/llm-trace-phoenix/index.ts | +| package.entrypoint.typescript-loader:mcp-adapter | P2 | mcp-adapter | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/mcp-adapter/index.ts | +| package.entrypoint.typescript-loader:opik-openclaw | P2 | opik-openclaw | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/opik-openclaw/index.ts | +| package.metadata.version-alignment:a2a-gateway | P2 | a2a-gateway | package-loader | entrypoint metadata resolves; cold import failure mode is classified | package:1.4.0, manifest:1.3.0 | +| sdk.import.root-barrel-cold-import:a2a-gateway | P2 | a2a-gateway | sdk-alias | package export exists; migration metadata is visible when alias is missing | openclaw/plugin-sdk @ plugins/a2a-gateway/src/types.ts:14 | +| sdk.import.root-barrel-cold-import:llm-trace-phoenix | P2 | llm-trace-phoenix | sdk-alias | package export exists; migration metadata is visible when alias is missing | openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12 | +| sdk.import.root-barrel-cold-import:opik-openclaw | P2 | opik-openclaw | sdk-alias | package export exists; migration metadata is visible when alias is missing | openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:2, openclaw/plugin-sdk @ plugins/opik-openclaw/src/cli.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/configure.ts:2, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:5, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:6, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/llm.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/subagent.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/tool.ts:1 | +| tool.registration.schema-capture:a2a-gateway | P2 | a2a-gateway | tool-runtime | tool schema is captured; tool result metadata is retained | registerTool @ plugins/a2a-gateway/index.ts:777 | +| tool.registration.schema-capture:mcp-adapter | P2 | mcp-adapter | tool-runtime | tool schema is captured; tool result metadata is retained | registerTool @ plugins/mcp-adapter/index.ts:30 | +| tool.registration.schema-capture:wecom | P2 | wecom | tool-runtime | tool schema is captured; tool result metadata is retained | registerTool @ plugins/wecom/index.js:28, registerTool @ plugins/wecom/index.js:29, registerTool @ plugins/wecom/index.js:33 | +| manifest.compat.provider-auth-env-vars:inworld-tts | P3 | inworld-tts | manifest-loader | metadata key is accepted; migration or compatibility mapping is visible | inworld | +| manifest.compat.provider-auth-env-vars:web-search-plus | P3 | web-search-plus | manifest-loader | metadata key is accepted; migration or compatibility mapping is visible | serper, tavily, linkup, querit, exa, firecrawl, perplexity, you, searxng | +| package.entrypoint.build-before-cold-import:clawmetry | P3 | clawmetry | package-loader | entrypoint metadata resolves; cold import failure mode is classified | runtimeExtension:./dist/index.js -> plugins/clawmetry/clawhub-plugin/dist/index.js | +| package.entrypoint.isolated-dependency-install:apify | P3 | apify | package-loader | entrypoint metadata resolves; cold import failure mode is classified | @sinclair/typebox @ plugins/apify/package.json, apify-client @ plugins/apify/package.json, openclaw @ plugins/apify/package.json | +| package.entrypoint.isolated-dependency-install:clawmetry | P3 | clawmetry | package-loader | entrypoint metadata resolves; cold import failure mode is classified | node-fetch @ plugins/clawmetry/clawhub-plugin/package.json | +| package.entrypoint.isolated-dependency-install:codex-app-server | P3 | codex-app-server | package-loader | entrypoint metadata resolves; cold import failure mode is classified | ws @ plugins/codex-app-server/package.json, openclaw @ plugins/codex-app-server/package.json | +| package.entrypoint.isolated-dependency-install:inworld-tts | P3 | inworld-tts | package-loader | entrypoint metadata resolves; cold import failure mode is classified | openclaw @ plugins/inworld-tts/package.json | +| package.entrypoint.isolated-dependency-install:web-search-plus | P3 | web-search-plus | package-loader | entrypoint metadata resolves; cold import failure mode is classified | openclaw @ plugins/web-search-plus/package.json | +| package.entrypoint.typescript-loader:apify | P3 | apify | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/apify/src/index.ts | +| package.entrypoint.typescript-loader:clawmetry | P3 | clawmetry | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/clawmetry/clawhub-plugin/index.ts | +| package.entrypoint.typescript-loader:codex-app-server | P3 | codex-app-server | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/codex-app-server/index.ts | +| package.entrypoint.typescript-loader:inworld-tts | P3 | inworld-tts | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/inworld-tts/index.ts | +| package.entrypoint.typescript-loader:web-search-plus | P3 | web-search-plus | package-loader | entrypoint metadata resolves; cold import failure mode is classified | extension:plugins/web-search-plus/index.ts | +| sdk.import.root-barrel-cold-import:apify | P3 | apify | sdk-alias | package export exists; migration metadata is visible when alias is missing | openclaw/plugin-sdk @ plugins/apify/src/cli.ts:2, openclaw/plugin-sdk @ plugins/apify/src/index.ts:1, openclaw/plugin-sdk @ plugins/apify/src/tools/apify-scraper-tool.ts:4 | +| sdk.import.root-barrel-cold-import:codex-app-server | P3 | codex-app-server | sdk-alias | package export exists; migration metadata is visible when alias is missing | openclaw/plugin-sdk @ plugins/codex-app-server/index.ts:1, openclaw/plugin-sdk @ plugins/codex-app-server/src/client.ts:6, openclaw/plugin-sdk @ plugins/codex-app-server/src/controller.ts:18, openclaw/plugin-sdk @ plugins/codex-app-server/src/types.ts:1 | +| tool.registration.schema-capture:apify | P3 | apify | tool-runtime | tool schema is captured; tool result metadata is retained | registerTool @ plugins/apify/src/index.ts:13 | +| tool.registration.schema-capture:web-search-plus | P3 | web-search-plus | tool-runtime | tool schema is captured; tool result metadata is retained | registerTool @ plugins/web-search-plus/index.ts:815, registerTool @ plugins/web-search-plus/index.ts:947 | diff --git a/reports/crabpot-ci-policy.json b/reports/crabpot-ci-policy.json new file mode 100644 index 0000000..e416c6d --- /dev/null +++ b/reports/crabpot-ci-policy.json @@ -0,0 +1,88 @@ +{ + "generatedAt": "deterministic", + "status": "pass", + "strict": false, + "policy": { + "allowedBlocked": 2, + "expectedWarnings": 1, + "fixtureSets": [ + "build", + "sdk-alias", + "side-effect-review", + "smoke" + ], + "thresholds": { + "wallP95RegressionPercent": 50, + "peakRssRegressionMb": 50, + "bootRegressionMs": 500, + "strictMinimumSamples": 3 + } + }, + "summary": { + "checkCount": 6, + "failCount": 0, + "warnCount": 2, + "passCount": 4 + }, + "checks": [ + { + "id": "execution-results.blocked.wecom.registerChannel.0", + "action": "warn", + "message": "allowed-blocked: captured registration requires includeChannelRuntime=true", + "evidence": [ + ".crabpot/results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.synthetic.json", + "registerChannel", + "captured registration requires includeChannelRuntime=true", + "channel-runtime-harness" + ] + }, + { + "id": "execution-results.blocked.wecom.registerTool.2", + "action": "warn", + "message": "expected-warning: captured registration has no object descriptor", + "evidence": [ + ".crabpot/results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.synthetic.json", + "registerTool", + "captured registration has no object descriptor", + "tool-factory-descriptor" + ] + }, + { + "id": "compatibility-report.breakages", + "action": "pass", + "message": "0 hard breakages", + "evidence": [] + }, + { + "id": "compatibility-report.p1-issues", + "action": "pass", + "message": "12 P1 issues tracked", + "evidence": [ + "a2a-gateway:registration-capture-gap", + "clawmetry:registration-capture-gap", + "codex-app-server:missing-compat-record", + "codex-app-server:registration-capture-gap", + "codex-app-server:sdk-export-missing", + "llm-trace-phoenix:conversation-access-hook", + "mcp-adapter:registration-capture-gap", + "opik-openclaw:before-tool-call-probe", + "opik-openclaw:conversation-access-hook", + "opik-openclaw:registration-capture-gap", + "wecom:before-tool-call-probe", + "wecom:registration-capture-gap" + ] + }, + { + "id": "execution-results.audit-findings", + "action": "pass", + "message": "0 package audit findings", + "evidence": [] + }, + { + "id": "execution-results.failures", + "action": "pass", + "message": "0 failed synthetic probes", + "evidence": [] + } + ] +} diff --git a/reports/crabpot-ci-policy.md b/reports/crabpot-ci-policy.md new file mode 100644 index 0000000..758a774 --- /dev/null +++ b/reports/crabpot-ci-policy.md @@ -0,0 +1,28 @@ +# Crabpot CI Policy + +Generated: deterministic +Status: PASS +Strict: false + +## Summary + +| Metric | Value | +| ---------------------- | ------------------------------------------- | +| Checks | 6 | +| Fail | 0 | +| Warn | 2 | +| Pass | 4 | +| Allowed blocked rules | 2 | +| Expected warning rules | 1 | +| Fixture sets | build, sdk-alias, side-effect-review, smoke | + +## Checks + +| Action | ID | Message | Evidence | +| ------ | ------------------------------------------------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| warn | execution-results.blocked.wecom.registerChannel.0 | allowed-blocked: captured registration requires includeChannelRuntime=true | .crabpot/results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.synthetic.json, registerChannel, captured registration requires includeChannelRuntime=true, channel-runtime-harness | +| warn | execution-results.blocked.wecom.registerTool.2 | expected-warning: captured registration has no object descriptor | .crabpot/results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.synthetic.json, registerTool, captured registration has no object descriptor, tool-factory-descriptor | +| pass | compatibility-report.breakages | 0 hard breakages | - | +| pass | compatibility-report.p1-issues | 12 P1 issues tracked | a2a-gateway:registration-capture-gap, clawmetry:registration-capture-gap, codex-app-server:missing-compat-record, codex-app-server:registration-capture-gap, codex-app-server:sdk-export-missing, llm-trace-phoenix:conversation-access-hook, mcp-adapter:registration-capture-gap, opik-openclaw:before-tool-call-probe, opik-openclaw:conversation-access-hook, opik-openclaw:registration-capture-gap, wecom:before-tool-call-probe, wecom:registration-capture-gap | +| pass | execution-results.audit-findings | 0 package audit findings | - | +| pass | execution-results.failures | 0 failed synthetic probes | - | diff --git a/reports/crabpot-ci-summary.json b/reports/crabpot-ci-summary.json new file mode 100644 index 0000000..7cd2dd9 --- /dev/null +++ b/reports/crabpot-ci-summary.json @@ -0,0 +1,145 @@ +{ + "generatedAt": "deterministic", + "mode": "local", + "openclawLabel": "../openclaw", + "status": "pass", + "summary": { + "breakages": 0, + "warnings": 18, + "suggestions": 40, + "issues": 58, + "p1Issues": 12, + "refDiffFailures": 0, + "refDiffWarnings": 0, + "policyFailures": 0, + "policyWarnings": 2, + "profileWarnings": 0, + "executionPass": 6, + "executionFail": 0, + "executionBlocked": 2 + }, + "topIssues": [ + { + "severity": "P1", + "fixture": "a2a-gateway", + "code": "registration-capture-gap", + "title": "a2a-gateway: runtime registrations need capture before contract judgment", + "decision": "inspector-follow-up" + }, + { + "severity": "P1", + "fixture": "clawmetry", + "code": "registration-capture-gap", + "title": "clawmetry: runtime registrations need capture before contract judgment", + "decision": "inspector-follow-up" + }, + { + "severity": "P1", + "fixture": "codex-app-server", + "code": "missing-compat-record", + "title": "codex-app-server: compat-dependent behavior lacks registry coverage", + "decision": "core-compat-adapter" + }, + { + "severity": "P1", + "fixture": "codex-app-server", + "code": "registration-capture-gap", + "title": "codex-app-server: runtime registrations need capture before contract judgment", + "decision": "inspector-follow-up" + }, + { + "severity": "P1", + "fixture": "codex-app-server", + "code": "sdk-export-missing", + "title": "codex-app-server: plugin SDK import aliases are missing from target package exports", + "decision": "core-compat-adapter" + }, + { + "severity": "P1", + "fixture": "llm-trace-phoenix", + "code": "conversation-access-hook", + "title": "llm-trace-phoenix: conversation-access hooks need privacy-boundary probes", + "decision": "inspector-follow-up" + }, + { + "severity": "P1", + "fixture": "mcp-adapter", + "code": "registration-capture-gap", + "title": "mcp-adapter: runtime registrations need capture before contract judgment", + "decision": "inspector-follow-up" + }, + { + "severity": "P1", + "fixture": "opik-openclaw", + "code": "before-tool-call-probe", + "title": "opik-openclaw: before_tool_call needs terminal/block/approval probes", + "decision": "inspector-follow-up" + }, + { + "severity": "P1", + "fixture": "opik-openclaw", + "code": "conversation-access-hook", + "title": "opik-openclaw: conversation-access hooks need privacy-boundary probes", + "decision": "inspector-follow-up" + }, + { + "severity": "P1", + "fixture": "opik-openclaw", + "code": "registration-capture-gap", + "title": "opik-openclaw: runtime registrations need capture before contract judgment", + "decision": "inspector-follow-up" + }, + { + "severity": "P1", + "fixture": "wecom", + "code": "before-tool-call-probe", + "title": "wecom: before_tool_call needs terminal/block/approval probes", + "decision": "inspector-follow-up" + }, + { + "severity": "P1", + "fixture": "wecom", + "code": "registration-capture-gap", + "title": "wecom: runtime registrations need capture before contract judgment", + "decision": "inspector-follow-up" + } + ], + "refRegressions": [], + "policyFindings": [ + { + "id": "execution-results.blocked.wecom.registerChannel.0", + "action": "warn", + "message": "allowed-blocked: captured registration requires includeChannelRuntime=true", + "evidence": [ + ".crabpot/results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.synthetic.json", + "registerChannel", + "captured registration requires includeChannelRuntime=true", + "channel-runtime-harness" + ] + }, + { + "id": "execution-results.blocked.wecom.registerTool.2", + "action": "warn", + "message": "expected-warning: captured registration has no object descriptor", + "evidence": [ + ".crabpot/results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.synthetic.json", + "registerTool", + "captured registration has no object descriptor", + "tool-factory-descriptor" + ] + } + ], + "profileFindings": [], + "artifacts": { + "compatibility": "reports/crabpot-report.json", + "capture": "reports/crabpot-capture.json", + "synthetic": "reports/crabpot-synthetic-probes.json", + "coldImport": "reports/crabpot-cold-import.json", + "workspace": "reports/crabpot-workspace-plan.json", + "execution": "reports/crabpot-execution-results.json", + "runtimeProfile": "reports/crabpot-runtime-profile.json", + "refDiff": "reports/crabpot-ref-diff.json", + "profileDiff": "reports/crabpot-profile-diff.json", + "ciPolicy": "reports/crabpot-ci-policy.json" + } +} diff --git a/reports/crabpot-ci-summary.md b/reports/crabpot-ci-summary.md new file mode 100644 index 0000000..8fa05d2 --- /dev/null +++ b/reports/crabpot-ci-summary.md @@ -0,0 +1,71 @@ +# Crabpot CI Summary + +Generated: deterministic +Mode: local +OpenClaw: ../openclaw +Status: PASS + +## Counts + +| Metric | Value | +| ----------------- | ----- | +| Breakages | 0 | +| Warnings | 18 | +| Suggestions | 40 | +| Issues | 58 | +| P1 issues | 12 | +| Ref diff failures | 0 | +| Ref diff warnings | 0 | +| Policy failures | 0 | +| Policy warnings | 2 | +| Profile warnings | 0 | +| Execution pass | 6 | +| Execution fail | 0 | +| Execution blocked | 2 | + +## Top Issues + +| Severity | Fixture | Code | Decision | Title | +| -------- | ----------------- | ------------------------ | ------------------- | ----------------------------------------------------------------------------------- | +| P1 | a2a-gateway | registration-capture-gap | inspector-follow-up | a2a-gateway: runtime registrations need capture before contract judgment | +| P1 | clawmetry | registration-capture-gap | inspector-follow-up | clawmetry: runtime registrations need capture before contract judgment | +| P1 | codex-app-server | missing-compat-record | core-compat-adapter | codex-app-server: compat-dependent behavior lacks registry coverage | +| P1 | codex-app-server | registration-capture-gap | inspector-follow-up | codex-app-server: runtime registrations need capture before contract judgment | +| P1 | codex-app-server | sdk-export-missing | core-compat-adapter | codex-app-server: plugin SDK import aliases are missing from target package exports | +| P1 | llm-trace-phoenix | conversation-access-hook | inspector-follow-up | llm-trace-phoenix: conversation-access hooks need privacy-boundary probes | +| P1 | mcp-adapter | registration-capture-gap | inspector-follow-up | mcp-adapter: runtime registrations need capture before contract judgment | +| P1 | opik-openclaw | before-tool-call-probe | inspector-follow-up | opik-openclaw: before_tool_call needs terminal/block/approval probes | +| P1 | opik-openclaw | conversation-access-hook | inspector-follow-up | opik-openclaw: conversation-access hooks need privacy-boundary probes | +| P1 | opik-openclaw | registration-capture-gap | inspector-follow-up | opik-openclaw: runtime registrations need capture before contract judgment | +| P1 | wecom | before-tool-call-probe | inspector-follow-up | wecom: before_tool_call needs terminal/block/approval probes | +| P1 | wecom | registration-capture-gap | inspector-follow-up | wecom: runtime registrations need capture before contract judgment | + +## Ref Regressions + +_none_ + +## Policy Findings + +| Action | ID | Message | Evidence | +| ------ | ------------------------------------------------- | -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| warn | execution-results.blocked.wecom.registerChannel.0 | allowed-blocked: captured registration requires includeChannelRuntime=true | .crabpot/results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.synthetic.json, registerChannel, captured registration requires includeChannelRuntime=true, channel-runtime-harness | +| warn | execution-results.blocked.wecom.registerTool.2 | expected-warning: captured registration has no object descriptor | .crabpot/results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.synthetic.json, registerTool, captured registration has no object descriptor, tool-factory-descriptor | + +## Profile Findings + +_none_ + +## Artifacts + +| Artifact | Path | +| -------------- | -------------------------------------- | +| compatibility | reports/crabpot-report.json | +| capture | reports/crabpot-capture.json | +| synthetic | reports/crabpot-synthetic-probes.json | +| coldImport | reports/crabpot-cold-import.json | +| workspace | reports/crabpot-workspace-plan.json | +| execution | reports/crabpot-execution-results.json | +| runtimeProfile | reports/crabpot-runtime-profile.json | +| refDiff | reports/crabpot-ref-diff.json | +| profileDiff | reports/crabpot-profile-diff.json | +| ciPolicy | reports/crabpot-ci-policy.json | diff --git a/reports/crabpot-cold-import.json b/reports/crabpot-cold-import.json index d78d247..ca98a53 100644 --- a/reports/crabpot-cold-import.json +++ b/reports/crabpot-cold-import.json @@ -3,16 +3,16 @@ "targetOpenClaw": { "status": "ok", "configuredPath": "../openclaw", - "sdkExportCount": 306 + "sdkExportCount": 307 }, "summary": { - "fixtureCount": 11, - "entrypointCount": 13, + "fixtureCount": 12, + "entrypointCount": 15, "readyCount": 0, - "blockedCount": 13, - "tsLoaderRequiredCount": 8, - "buildRequiredCount": 3, - "dependencyInstallRequiredCount": 9, + "blockedCount": 15, + "tsLoaderRequiredCount": 9, + "buildRequiredCount": 4, + "dependencyInstallRequiredCount": 10, "sdkAliasRequiredCount": 1 }, "fixtures": [ @@ -215,6 +215,56 @@ } ] }, + { + "id": "opik-openclaw", + "priority": "high", + "entrypoints": [ + { + "id": "cold-import.extension:opik-openclaw:plugins-opik-openclaw-index-ts", + "fixture": "opik-openclaw", + "packagePath": "plugins/opik-openclaw/package.json", + "kind": "extension", + "specifier": "./index.ts", + "path": "plugins/opik-openclaw/index.ts", + "status": "ts-loader-required", + "blockers": [ + { + "code": "ts-loader-required", + "message": "entrypoint is TypeScript source and needs a loader or build step before Node cold import", + "evidence": "plugins/opik-openclaw/index.ts" + }, + { + "code": "dependency-install-required", + "message": "package declares runtime dependencies that must be installed before cold import", + "evidence": "@clack/prompts, opik, zod, openclaw" + } + ], + "assertions": [ + "TypeScript source entrypoint is compiled or loaded before cold import", + "fixture dependencies are installed in an isolated workspace before cold import" + ] + }, + { + "id": "cold-import.runtimeExtension:opik-openclaw:plugins-opik-openclaw-dist-index-js", + "fixture": "opik-openclaw", + "packagePath": "plugins/opik-openclaw/package.json", + "kind": "runtimeExtension", + "specifier": "./dist/index.js", + "path": "plugins/opik-openclaw/dist/index.js", + "status": "build-required", + "blockers": [ + { + "code": "build-required", + "message": "entrypoint points at build output that is absent in the fixture checkout", + "evidence": "plugins/opik-openclaw/dist/index.js" + } + ], + "assertions": [ + "plugin build or source alias resolution runs before cold import" + ] + } + ] + }, { "id": "clawmetry", "priority": "medium", diff --git a/reports/crabpot-cold-import.md b/reports/crabpot-cold-import.md index 149e326..1a483b2 100644 --- a/reports/crabpot-cold-import.md +++ b/reports/crabpot-cold-import.md @@ -6,13 +6,13 @@ Generated: deterministic | Metric | Value | | --------------------------- | ----- | -| Fixtures | 11 | -| Entrypoints | 13 | +| Fixtures | 12 | +| Entrypoints | 15 | | Ready | 0 | -| Blocked | 13 | -| TypeScript loader required | 8 | -| Build required | 3 | -| Dependency install required | 9 | +| Blocked | 15 | +| TypeScript loader required | 9 | +| Build required | 4 | +| Dependency install required | 10 | | SDK alias required | 1 | ## Entrypoints @@ -26,6 +26,8 @@ Generated: deterministic | hasdata | extension | ts-loader-required | plugins/hasdata/src/index.ts | ts-loader-required, top-level-side-effect-review, dependency-install-required | TypeScript source entrypoint is compiled or loaded before cold import; cold import sandbox blocks network/process side effects before register capture; fixture dependencies are installed in an isolated workspace before cold import | | mcp-adapter | extension | ts-loader-required | plugins/mcp-adapter/index.ts | ts-loader-required, dependency-install-required | TypeScript source entrypoint is compiled or loaded before cold import; fixture dependencies are installed in an isolated workspace before cold import | | llm-trace-phoenix | extension | ts-loader-required | plugins/llm-trace-phoenix/index.ts | ts-loader-required, top-level-side-effect-review | TypeScript source entrypoint is compiled or loaded before cold import; cold import sandbox blocks network/process side effects before register capture | +| opik-openclaw | extension | ts-loader-required | plugins/opik-openclaw/index.ts | ts-loader-required, dependency-install-required | TypeScript source entrypoint is compiled or loaded before cold import; fixture dependencies are installed in an isolated workspace before cold import | +| opik-openclaw | runtimeExtension | build-required | plugins/opik-openclaw/dist/index.js | build-required | plugin build or source alias resolution runs before cold import | | clawmetry | extension | ts-loader-required | plugins/clawmetry/clawhub-plugin/index.ts | ts-loader-required, dependency-install-required | TypeScript source entrypoint is compiled or loaded before cold import; fixture dependencies are installed in an isolated workspace before cold import | | clawmetry | runtimeExtension | build-required | plugins/clawmetry/clawhub-plugin/dist/index.js | build-required | plugin build or source alias resolution runs before cold import | | codex-app-server | extension | sdk-alias-required | plugins/codex-app-server/index.ts | ts-loader-required, dependency-install-required, sdk-alias-required, sdk-alias-required, sdk-alias-required | TypeScript source entrypoint is compiled or loaded before cold import; fixture dependencies are installed in an isolated workspace before cold import; target OpenClaw exports the imported SDK alias or provides a migration shim; target OpenClaw exports the imported SDK alias or provides a migration shim; target OpenClaw exports the imported SDK alias or provides a migration shim | diff --git a/reports/crabpot-issues.md b/reports/crabpot-issues.md index 5ab1522..91b09f3 100644 --- a/reports/crabpot-issues.md +++ b/reports/crabpot-issues.md @@ -7,118 +7,132 @@ Status: PASS | Metric | Value | | --------------- | ----- | -| Issue findings | 51 | +| Issue findings | 58 | | P0 | 0 | -| P1 | 9 | -| Contract probes | 50 | +| P1 | 12 | +| Contract probes | 57 | ## Issues -| ID | Severity | Fixture | Owner | Decision | Status | Title | Evidence | -| ---------------- | -------- | ----------------- | --------- | ------------------- | ------ | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| CRABPOT-37E8444D | P1 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: runtime registrations need capture before contract judgment | registerGatewayMethod @ plugins/a2a-gateway/index.ts:616, registerGatewayMethod @ plugins/a2a-gateway/index.ts:622, registerGatewayMethod @ plugins/a2a-gateway/index.ts:631, registerGatewayMethod @ plugins/a2a-gateway/index.ts:657, registerGatewayMethod @ plugins/a2a-gateway/index.ts:669, registerService @ plugins/a2a-gateway/index.ts:857 | -| CRABPOT-9D5EE194 | P1 | clawmetry | inspector | inspector-follow-up | open | clawmetry: runtime registrations need capture before contract judgment | registerService @ plugins/clawmetry/clawhub-plugin/index.ts:9 | -| CRABPOT-6D9E51D9 | P1 | codex-app-server | core | core-compat-adapter | open | codex-app-server: compat-dependent behavior lacks registry coverage | plugin-sdk-export-aliases | -| CRABPOT-45CAC152 | P1 | codex-app-server | inspector | inspector-follow-up | open | codex-app-server: runtime registrations need capture before contract judgment | registerCommand @ plugins/codex-app-server/index.ts:48, registerInteractiveHandler @ plugins/codex-app-server/index.ts:29, registerInteractiveHandler @ plugins/codex-app-server/index.ts:38, registerService @ plugins/codex-app-server/index.ts:12 | -| CRABPOT-C2331427 | P1 | codex-app-server | core | core-compat-adapter | open | codex-app-server: plugin SDK import aliases are missing from target package exports | openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:104, openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:106, openclaw/plugin-sdk/telegram-account @ plugins/codex-app-server/src/controller.ts:105 | -| CRABPOT-D71B126E | P1 | llm-trace-phoenix | core | inspector-follow-up | open | llm-trace-phoenix: conversation-access hooks need privacy-boundary probes | llm_input @ plugins/llm-trace-phoenix/index.ts:154, llm_output @ plugins/llm-trace-phoenix/index.ts:168 | -| CRABPOT-B91192E5 | P1 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: runtime registrations need capture before contract judgment | registerService @ plugins/mcp-adapter/index.ts:15 | -| CRABPOT-B08DB79E | P1 | wecom | inspector | inspector-follow-up | open | wecom: before_tool_call needs terminal/block/approval probes | before_tool_call @ plugins/wecom/index.js:65 | -| CRABPOT-9428734C | P1 | wecom | inspector | inspector-follow-up | open | wecom: runtime registrations need capture before contract judgment | registerChannel @ plugins/wecom/index.js:27, registerHttpRoute @ plugins/wecom/index.js:45 | -| CRABPOT-6469330F | P2 | a2a-gateway | core | core-compat-adapter | open | a2a-gateway: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/a2a-gateway/src/types.ts:14 | -| CRABPOT-892CF14F | P2 | a2a-gateway | plugin | plugin-upstream-fix | open | a2a-gateway: manifest uses unsupported top-level fields | defaultConfig @ plugins/a2a-gateway/openclaw.plugin.json | -| CRABPOT-F5185BE0 | P2 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: cold import requires isolated dependency installation | @a2a-js/sdk @ plugins/a2a-gateway/package.json, @bufbuild/protobuf @ plugins/a2a-gateway/package.json, @grpc/grpc-js @ plugins/a2a-gateway/package.json, express @ plugins/a2a-gateway/package.json, multicast-dns @ plugins/a2a-gateway/package.json, uuid @ plugins/a2a-gateway/package.json, ws @ plugins/a2a-gateway/package.json | -| CRABPOT-16E892BF | P2 | a2a-gateway | plugin | plugin-upstream-fix | open | a2a-gateway: package and manifest versions drift | package:1.4.0, manifest:1.3.0 | -| CRABPOT-FDBB1C67 | P2 | a2a-gateway | plugin | plugin-upstream-fix | open | a2a-gateway: plugin API compatibility range is missing | plugins/a2a-gateway/package.json | -| CRABPOT-96D2E9F4 | P2 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: cold import needs TypeScript source entrypoint support | extension:plugins/a2a-gateway/index.ts | -| CRABPOT-654F01E7 | P2 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: runtime tool schema needs registration capture | registerTool @ plugins/a2a-gateway/index.ts:777 | -| CRABPOT-74260BA0 | P2 | agentchat | inspector | inspector-follow-up | open | agentchat: channel runtime needs envelope/config probes | defineChannelPluginEntry @ plugins/agentchat/integrations/openclaw-channel/src/channel.ts:333 | -| CRABPOT-90736EF4 | P2 | agentchat | core | core-compat-adapter | open | agentchat: channelEnvVars legacy manifest metadata must stay covered | agentchat | -| CRABPOT-BEC462A4 | P2 | agentchat | plugin | plugin-upstream-fix | open | agentchat: manifest uses unsupported top-level fields | displayName @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, homepage @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, icon @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | -| CRABPOT-6A790CB4 | P2 | agentchat | inspector | inspector-follow-up | open | agentchat: cold import requires package build output | extension:./dist/index.js -> plugins/agentchat/integrations/openclaw-channel/dist/index.js, setupEntry:./dist/setup-entry.js -> plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js | -| CRABPOT-2ED34BE8 | P2 | agentchat | inspector | inspector-follow-up | open | agentchat: cold import requires isolated dependency installation | @agentchatme/agentchat @ plugins/agentchat/integrations/openclaw-channel/package.json, @sinclair/typebox @ plugins/agentchat/integrations/openclaw-channel/package.json, pino @ plugins/agentchat/integrations/openclaw-channel/package.json, ws @ plugins/agentchat/integrations/openclaw-channel/package.json, zod @ plugins/agentchat/integrations/openclaw-channel/package.json, openclaw @ plugins/agentchat/integrations/openclaw-channel/package.json | -| CRABPOT-0CFF8B6F | P2 | apify | core | core-compat-adapter | open | apify: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/apify/src/cli.ts:2, openclaw/plugin-sdk @ plugins/apify/src/index.ts:1, openclaw/plugin-sdk @ plugins/apify/src/tools/apify-scraper-tool.ts:4 | -| CRABPOT-74FAA2A2 | P2 | apify | inspector | inspector-follow-up | open | apify: cold import requires isolated dependency installation | @sinclair/typebox @ plugins/apify/package.json, apify-client @ plugins/apify/package.json, openclaw @ plugins/apify/package.json | -| CRABPOT-18D12186 | P2 | apify | inspector | inspector-follow-up | open | apify: cold import needs TypeScript source entrypoint support | extension:plugins/apify/src/index.ts | -| CRABPOT-93E9D53A | P2 | apify | inspector | inspector-follow-up | open | apify: runtime tool schema needs registration capture | registerTool @ plugins/apify/src/index.ts:13 | -| CRABPOT-4BCB1F63 | P2 | clawmetry | inspector | inspector-follow-up | open | clawmetry: cold import requires package build output | runtimeExtension:./dist/index.js -> plugins/clawmetry/clawhub-plugin/dist/index.js | -| CRABPOT-034E5504 | P2 | clawmetry | inspector | inspector-follow-up | open | clawmetry: cold import requires isolated dependency installation | node-fetch @ plugins/clawmetry/clawhub-plugin/package.json | -| CRABPOT-EF6E7134 | P2 | clawmetry | inspector | inspector-follow-up | open | clawmetry: cold import needs TypeScript source entrypoint support | extension:plugins/clawmetry/clawhub-plugin/index.ts | -| CRABPOT-A36ECE8E | P2 | codex-app-server | core | core-compat-adapter | open | codex-app-server: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/codex-app-server/index.ts:1, openclaw/plugin-sdk @ plugins/codex-app-server/src/client.ts:6, openclaw/plugin-sdk @ plugins/codex-app-server/src/controller.ts:18, openclaw/plugin-sdk @ plugins/codex-app-server/src/types.ts:1 | -| CRABPOT-DC637E99 | P2 | codex-app-server | inspector | inspector-follow-up | open | codex-app-server: cold import requires isolated dependency installation | ws @ plugins/codex-app-server/package.json, openclaw @ plugins/codex-app-server/package.json | -| CRABPOT-F8C8F1CD | P2 | codex-app-server | inspector | inspector-follow-up | open | codex-app-server: cold import needs TypeScript source entrypoint support | extension:plugins/codex-app-server/index.ts | -| CRABPOT-2C2BFD3C | P2 | hasdata | inspector | inspector-follow-up | open | hasdata: cold import requires isolated dependency installation | @sinclair/typebox @ plugins/hasdata/package.json, openclaw @ plugins/hasdata/package.json | -| CRABPOT-1853BC94 | P2 | hasdata | inspector | inspector-follow-up | open | hasdata: cold import needs TypeScript source entrypoint support | extension:plugins/hasdata/src/index.ts | -| CRABPOT-1ABECD7E | P2 | hasdata | core | core-compat-adapter | open | hasdata: providerAuthEnvVars legacy manifest metadata must stay covered | hasdata | -| CRABPOT-0853EBDC | P2 | inworld-tts | inspector | inspector-follow-up | open | inworld-tts: cold import requires isolated dependency installation | openclaw @ plugins/inworld-tts/package.json | -| CRABPOT-7C59D06F | P2 | inworld-tts | inspector | inspector-follow-up | open | inworld-tts: cold import needs TypeScript source entrypoint support | extension:plugins/inworld-tts/index.ts | -| CRABPOT-CCABE384 | P2 | inworld-tts | core | core-compat-adapter | open | inworld-tts: providerAuthEnvVars legacy manifest metadata must stay covered | inworld | -| CRABPOT-4CC6CA25 | P2 | llm-trace-phoenix | core | core-compat-adapter | open | llm-trace-phoenix: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12 | -| CRABPOT-15F8300A | P2 | llm-trace-phoenix | inspector | inspector-follow-up | open | llm-trace-phoenix: cold import needs TypeScript source entrypoint support | extension:plugins/llm-trace-phoenix/index.ts | -| CRABPOT-22E35E29 | P2 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: cold import requires isolated dependency installation | @modelcontextprotocol/sdk @ plugins/mcp-adapter/package.json | -| CRABPOT-4511EE11 | P2 | mcp-adapter | plugin | plugin-upstream-fix | open | mcp-adapter: plugin API compatibility range is missing | plugins/mcp-adapter/package.json | -| CRABPOT-6515DC5B | P2 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: cold import needs TypeScript source entrypoint support | extension:plugins/mcp-adapter/index.ts | -| CRABPOT-B195BB7A | P2 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: runtime tool schema needs registration capture | registerTool @ plugins/mcp-adapter/index.ts:30 | -| CRABPOT-D8910079 | P2 | web-search-plus | inspector | inspector-follow-up | open | web-search-plus: cold import requires isolated dependency installation | openclaw @ plugins/web-search-plus/package.json | -| CRABPOT-E55C4521 | P2 | web-search-plus | inspector | inspector-follow-up | open | web-search-plus: cold import needs TypeScript source entrypoint support | extension:plugins/web-search-plus/index.ts | -| CRABPOT-A3EA1186 | P2 | web-search-plus | core | core-compat-adapter | open | web-search-plus: providerAuthEnvVars legacy manifest metadata must stay covered | serper, tavily, linkup, querit, exa, firecrawl, perplexity, you, searxng | -| CRABPOT-AF929F22 | P2 | web-search-plus | inspector | inspector-follow-up | open | web-search-plus: runtime tool schema needs registration capture | registerTool @ plugins/web-search-plus/index.ts:815, registerTool @ plugins/web-search-plus/index.ts:947 | -| CRABPOT-848F09E3 | P2 | wecom | inspector | inspector-follow-up | open | wecom: channel runtime needs envelope/config probes | registerChannel @ plugins/wecom/index.js:27 | -| CRABPOT-4734034D | P2 | wecom | inspector | inspector-follow-up | open | wecom: cold import requires isolated dependency installation | @wecom/aibot-node-sdk @ plugins/wecom/package.json, file-type @ plugins/wecom/package.json, pinyin-pro @ plugins/wecom/package.json, openclaw @ plugins/wecom/package.json, undici @ plugins/wecom/package.json | -| CRABPOT-5E53BD07 | P2 | wecom | plugin | plugin-upstream-fix | open | wecom: plugin API compatibility range is missing | plugins/wecom/package.json | -| CRABPOT-72021A36 | P2 | wecom | inspector | inspector-follow-up | open | wecom: runtime tool schema needs registration capture | registerTool @ plugins/wecom/index.js:28, registerTool @ plugins/wecom/index.js:29, registerTool @ plugins/wecom/index.js:33 | +| ID | Severity | Fixture | Owner | Decision | Status | Title | Evidence | +| ---------------- | -------- | ----------------- | --------- | ------------------- | ------ | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| CRABPOT-37E8444D | P1 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: runtime registrations need capture before contract judgment | registerGatewayMethod @ plugins/a2a-gateway/index.ts:616, registerGatewayMethod @ plugins/a2a-gateway/index.ts:622, registerGatewayMethod @ plugins/a2a-gateway/index.ts:631, registerGatewayMethod @ plugins/a2a-gateway/index.ts:657, registerGatewayMethod @ plugins/a2a-gateway/index.ts:669, registerService @ plugins/a2a-gateway/index.ts:857 | +| CRABPOT-9D5EE194 | P1 | clawmetry | inspector | inspector-follow-up | open | clawmetry: runtime registrations need capture before contract judgment | registerService @ plugins/clawmetry/clawhub-plugin/index.ts:9 | +| CRABPOT-6D9E51D9 | P1 | codex-app-server | core | core-compat-adapter | open | codex-app-server: compat-dependent behavior lacks registry coverage | plugin-sdk-export-aliases | +| CRABPOT-45CAC152 | P1 | codex-app-server | inspector | inspector-follow-up | open | codex-app-server: runtime registrations need capture before contract judgment | registerCommand @ plugins/codex-app-server/index.ts:48, registerInteractiveHandler @ plugins/codex-app-server/index.ts:29, registerInteractiveHandler @ plugins/codex-app-server/index.ts:38, registerService @ plugins/codex-app-server/index.ts:12 | +| CRABPOT-C2331427 | P1 | codex-app-server | core | core-compat-adapter | open | codex-app-server: plugin SDK import aliases are missing from target package exports | openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:104, openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:106, openclaw/plugin-sdk/telegram-account @ plugins/codex-app-server/src/controller.ts:105 | +| CRABPOT-D71B126E | P1 | llm-trace-phoenix | core | inspector-follow-up | open | llm-trace-phoenix: conversation-access hooks need privacy-boundary probes | llm_input @ plugins/llm-trace-phoenix/index.ts:154, llm_output @ plugins/llm-trace-phoenix/index.ts:168 | +| CRABPOT-B91192E5 | P1 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: runtime registrations need capture before contract judgment | registerService @ plugins/mcp-adapter/index.ts:15 | +| CRABPOT-EE3B527C | P1 | opik-openclaw | inspector | inspector-follow-up | open | opik-openclaw: before_tool_call needs terminal/block/approval probes | before_tool_call @ plugins/opik-openclaw/src/service/hooks/tool.ts:34 | +| CRABPOT-6FC4ED08 | P1 | opik-openclaw | core | inspector-follow-up | open | opik-openclaw: conversation-access hooks need privacy-boundary probes | agent_end @ plugins/opik-openclaw/src/service.ts:560, llm_input @ plugins/opik-openclaw/src/service/hooks/llm.ts:39, llm_output @ plugins/opik-openclaw/src/service/hooks/llm.ts:150 | +| CRABPOT-5E85F236 | P1 | opik-openclaw | inspector | inspector-follow-up | open | opik-openclaw: runtime registrations need capture before contract judgment | registerService @ plugins/opik-openclaw/index.ts:16 | +| CRABPOT-B08DB79E | P1 | wecom | inspector | inspector-follow-up | open | wecom: before_tool_call needs terminal/block/approval probes | before_tool_call @ plugins/wecom/index.js:65 | +| CRABPOT-9428734C | P1 | wecom | inspector | inspector-follow-up | open | wecom: runtime registrations need capture before contract judgment | registerChannel @ plugins/wecom/index.js:27, registerHttpRoute @ plugins/wecom/index.js:45 | +| CRABPOT-6469330F | P2 | a2a-gateway | core | core-compat-adapter | open | a2a-gateway: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/a2a-gateway/src/types.ts:14 | +| CRABPOT-892CF14F | P2 | a2a-gateway | plugin | plugin-upstream-fix | open | a2a-gateway: manifest uses unsupported top-level fields | defaultConfig @ plugins/a2a-gateway/openclaw.plugin.json | +| CRABPOT-F5185BE0 | P2 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: cold import requires isolated dependency installation | @a2a-js/sdk @ plugins/a2a-gateway/package.json, @bufbuild/protobuf @ plugins/a2a-gateway/package.json, @grpc/grpc-js @ plugins/a2a-gateway/package.json, express @ plugins/a2a-gateway/package.json, multicast-dns @ plugins/a2a-gateway/package.json, uuid @ plugins/a2a-gateway/package.json, ws @ plugins/a2a-gateway/package.json | +| CRABPOT-16E892BF | P2 | a2a-gateway | plugin | plugin-upstream-fix | open | a2a-gateway: package and manifest versions drift | package:1.4.0, manifest:1.3.0 | +| CRABPOT-FDBB1C67 | P2 | a2a-gateway | plugin | plugin-upstream-fix | open | a2a-gateway: plugin API compatibility range is missing | plugins/a2a-gateway/package.json | +| CRABPOT-96D2E9F4 | P2 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: cold import needs TypeScript source entrypoint support | extension:plugins/a2a-gateway/index.ts | +| CRABPOT-654F01E7 | P2 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: runtime tool schema needs registration capture | registerTool @ plugins/a2a-gateway/index.ts:777 | +| CRABPOT-74260BA0 | P2 | agentchat | inspector | inspector-follow-up | open | agentchat: channel runtime needs envelope/config probes | defineChannelPluginEntry @ plugins/agentchat/integrations/openclaw-channel/src/channel.ts:333 | +| CRABPOT-90736EF4 | P2 | agentchat | core | core-compat-adapter | open | agentchat: channelEnvVars legacy manifest metadata must stay covered | agentchat | +| CRABPOT-BEC462A4 | P2 | agentchat | plugin | plugin-upstream-fix | open | agentchat: manifest uses unsupported top-level fields | displayName @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, homepage @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, icon @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | +| CRABPOT-6A790CB4 | P2 | agentchat | inspector | inspector-follow-up | open | agentchat: cold import requires package build output | extension:./dist/index.js -> plugins/agentchat/integrations/openclaw-channel/dist/index.js, setupEntry:./dist/setup-entry.js -> plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js | +| CRABPOT-2ED34BE8 | P2 | agentchat | inspector | inspector-follow-up | open | agentchat: cold import requires isolated dependency installation | @agentchatme/agentchat @ plugins/agentchat/integrations/openclaw-channel/package.json, @sinclair/typebox @ plugins/agentchat/integrations/openclaw-channel/package.json, pino @ plugins/agentchat/integrations/openclaw-channel/package.json, ws @ plugins/agentchat/integrations/openclaw-channel/package.json, zod @ plugins/agentchat/integrations/openclaw-channel/package.json, openclaw @ plugins/agentchat/integrations/openclaw-channel/package.json | +| CRABPOT-0CFF8B6F | P2 | apify | core | core-compat-adapter | open | apify: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/apify/src/cli.ts:2, openclaw/plugin-sdk @ plugins/apify/src/index.ts:1, openclaw/plugin-sdk @ plugins/apify/src/tools/apify-scraper-tool.ts:4 | +| CRABPOT-74FAA2A2 | P2 | apify | inspector | inspector-follow-up | open | apify: cold import requires isolated dependency installation | @sinclair/typebox @ plugins/apify/package.json, apify-client @ plugins/apify/package.json, openclaw @ plugins/apify/package.json | +| CRABPOT-18D12186 | P2 | apify | inspector | inspector-follow-up | open | apify: cold import needs TypeScript source entrypoint support | extension:plugins/apify/src/index.ts | +| CRABPOT-93E9D53A | P2 | apify | inspector | inspector-follow-up | open | apify: runtime tool schema needs registration capture | registerTool @ plugins/apify/src/index.ts:13 | +| CRABPOT-4BCB1F63 | P2 | clawmetry | inspector | inspector-follow-up | open | clawmetry: cold import requires package build output | runtimeExtension:./dist/index.js -> plugins/clawmetry/clawhub-plugin/dist/index.js | +| CRABPOT-034E5504 | P2 | clawmetry | inspector | inspector-follow-up | open | clawmetry: cold import requires isolated dependency installation | node-fetch @ plugins/clawmetry/clawhub-plugin/package.json | +| CRABPOT-EF6E7134 | P2 | clawmetry | inspector | inspector-follow-up | open | clawmetry: cold import needs TypeScript source entrypoint support | extension:plugins/clawmetry/clawhub-plugin/index.ts | +| CRABPOT-A36ECE8E | P2 | codex-app-server | core | core-compat-adapter | open | codex-app-server: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/codex-app-server/index.ts:1, openclaw/plugin-sdk @ plugins/codex-app-server/src/client.ts:6, openclaw/plugin-sdk @ plugins/codex-app-server/src/controller.ts:18, openclaw/plugin-sdk @ plugins/codex-app-server/src/types.ts:1 | +| CRABPOT-DC637E99 | P2 | codex-app-server | inspector | inspector-follow-up | open | codex-app-server: cold import requires isolated dependency installation | ws @ plugins/codex-app-server/package.json, openclaw @ plugins/codex-app-server/package.json | +| CRABPOT-F8C8F1CD | P2 | codex-app-server | inspector | inspector-follow-up | open | codex-app-server: cold import needs TypeScript source entrypoint support | extension:plugins/codex-app-server/index.ts | +| CRABPOT-2C2BFD3C | P2 | hasdata | inspector | inspector-follow-up | open | hasdata: cold import requires isolated dependency installation | @sinclair/typebox @ plugins/hasdata/package.json, openclaw @ plugins/hasdata/package.json | +| CRABPOT-1853BC94 | P2 | hasdata | inspector | inspector-follow-up | open | hasdata: cold import needs TypeScript source entrypoint support | extension:plugins/hasdata/src/index.ts | +| CRABPOT-1ABECD7E | P2 | hasdata | core | core-compat-adapter | open | hasdata: providerAuthEnvVars legacy manifest metadata must stay covered | hasdata | +| CRABPOT-0853EBDC | P2 | inworld-tts | inspector | inspector-follow-up | open | inworld-tts: cold import requires isolated dependency installation | openclaw @ plugins/inworld-tts/package.json | +| CRABPOT-7C59D06F | P2 | inworld-tts | inspector | inspector-follow-up | open | inworld-tts: cold import needs TypeScript source entrypoint support | extension:plugins/inworld-tts/index.ts | +| CRABPOT-CCABE384 | P2 | inworld-tts | core | core-compat-adapter | open | inworld-tts: providerAuthEnvVars legacy manifest metadata must stay covered | inworld | +| CRABPOT-4CC6CA25 | P2 | llm-trace-phoenix | core | core-compat-adapter | open | llm-trace-phoenix: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12 | +| CRABPOT-15F8300A | P2 | llm-trace-phoenix | inspector | inspector-follow-up | open | llm-trace-phoenix: cold import needs TypeScript source entrypoint support | extension:plugins/llm-trace-phoenix/index.ts | +| CRABPOT-22E35E29 | P2 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: cold import requires isolated dependency installation | @modelcontextprotocol/sdk @ plugins/mcp-adapter/package.json | +| CRABPOT-4511EE11 | P2 | mcp-adapter | plugin | plugin-upstream-fix | open | mcp-adapter: plugin API compatibility range is missing | plugins/mcp-adapter/package.json | +| CRABPOT-6515DC5B | P2 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: cold import needs TypeScript source entrypoint support | extension:plugins/mcp-adapter/index.ts | +| CRABPOT-B195BB7A | P2 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: runtime tool schema needs registration capture | registerTool @ plugins/mcp-adapter/index.ts:30 | +| CRABPOT-F76EC24F | P2 | opik-openclaw | core | core-compat-adapter | open | opik-openclaw: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:2, openclaw/plugin-sdk @ plugins/opik-openclaw/src/cli.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/configure.ts:2, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:5, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:6, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/llm.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/subagent.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/tool.ts:1 | +| CRABPOT-5D328BF6 | P2 | opik-openclaw | inspector | inspector-follow-up | open | opik-openclaw: cold import requires package build output | runtimeExtension:./dist/index.js -> plugins/opik-openclaw/dist/index.js | +| CRABPOT-32CDFD6D | P2 | opik-openclaw | inspector | inspector-follow-up | open | opik-openclaw: cold import requires isolated dependency installation | @clack/prompts @ plugins/opik-openclaw/package.json, opik @ plugins/opik-openclaw/package.json, zod @ plugins/opik-openclaw/package.json, openclaw @ plugins/opik-openclaw/package.json | +| CRABPOT-FAEC3F71 | P2 | opik-openclaw | inspector | inspector-follow-up | open | opik-openclaw: cold import needs TypeScript source entrypoint support | extension:plugins/opik-openclaw/index.ts | +| CRABPOT-D8910079 | P2 | web-search-plus | inspector | inspector-follow-up | open | web-search-plus: cold import requires isolated dependency installation | openclaw @ plugins/web-search-plus/package.json | +| CRABPOT-E55C4521 | P2 | web-search-plus | inspector | inspector-follow-up | open | web-search-plus: cold import needs TypeScript source entrypoint support | extension:plugins/web-search-plus/index.ts | +| CRABPOT-A3EA1186 | P2 | web-search-plus | core | core-compat-adapter | open | web-search-plus: providerAuthEnvVars legacy manifest metadata must stay covered | serper, tavily, linkup, querit, exa, firecrawl, perplexity, you, searxng | +| CRABPOT-AF929F22 | P2 | web-search-plus | inspector | inspector-follow-up | open | web-search-plus: runtime tool schema needs registration capture | registerTool @ plugins/web-search-plus/index.ts:815, registerTool @ plugins/web-search-plus/index.ts:947 | +| CRABPOT-848F09E3 | P2 | wecom | inspector | inspector-follow-up | open | wecom: channel runtime needs envelope/config probes | registerChannel @ plugins/wecom/index.js:27 | +| CRABPOT-4734034D | P2 | wecom | inspector | inspector-follow-up | open | wecom: cold import requires isolated dependency installation | @wecom/aibot-node-sdk @ plugins/wecom/package.json, file-type @ plugins/wecom/package.json, pinyin-pro @ plugins/wecom/package.json, openclaw @ plugins/wecom/package.json, undici @ plugins/wecom/package.json | +| CRABPOT-5E53BD07 | P2 | wecom | plugin | plugin-upstream-fix | open | wecom: plugin API compatibility range is missing | plugins/wecom/package.json | +| CRABPOT-72021A36 | P2 | wecom | inspector | inspector-follow-up | open | wecom: runtime tool schema needs registration capture | registerTool @ plugins/wecom/index.js:28, registerTool @ plugins/wecom/index.js:29, registerTool @ plugins/wecom/index.js:33 | ## Contract Probe Backlog -| ID | Priority | Fixture | Target | Contract | Evidence | -| --------------------------------------------------------------- | -------- | ----------------- | --------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| api.capture.runtime-registrars:a2a-gateway | P1 | a2a-gateway | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerGatewayMethod @ plugins/a2a-gateway/index.ts:616, registerGatewayMethod @ plugins/a2a-gateway/index.ts:622, registerGatewayMethod @ plugins/a2a-gateway/index.ts:631, registerGatewayMethod @ plugins/a2a-gateway/index.ts:657, registerGatewayMethod @ plugins/a2a-gateway/index.ts:669, registerService @ plugins/a2a-gateway/index.ts:857 | -| api.capture.runtime-registrars:clawmetry | P1 | clawmetry | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerService @ plugins/clawmetry/clawhub-plugin/index.ts:9 | -| api.capture.runtime-registrars:codex-app-server | P1 | codex-app-server | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerCommand @ plugins/codex-app-server/index.ts:48, registerInteractiveHandler @ plugins/codex-app-server/index.ts:29, registerInteractiveHandler @ plugins/codex-app-server/index.ts:38, registerService @ plugins/codex-app-server/index.ts:12 | -| api.capture.runtime-registrars:mcp-adapter | P1 | mcp-adapter | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerService @ plugins/mcp-adapter/index.ts:15 | -| api.capture.runtime-registrars:wecom | P1 | wecom | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerChannel @ plugins/wecom/index.js:27, registerHttpRoute @ plugins/wecom/index.js:45 | -| hook.before_tool_call.terminal-block-approval:wecom | P1 | wecom | hook-runner | Hook returns preserve terminal, block, and approval semantics. | before_tool_call @ plugins/wecom/index.js:65 | -| hook.llm-observer.privacy-payload:llm-trace-phoenix | P1 | llm-trace-phoenix | hook-runner | LLM observer hooks receive documented prompt/output fields with expected redaction behavior. | llm_input @ plugins/llm-trace-phoenix/index.ts:154, llm_output @ plugins/llm-trace-phoenix/index.ts:168 | -| sdk.import.package-export-cold-import:codex-app-server | P1 | codex-app-server | sdk-alias | Every observed OpenClaw plugin SDK import remains exported by the target OpenClaw package. | openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:104, openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:106, openclaw/plugin-sdk/telegram-account @ plugins/codex-app-server/src/controller.ts:105 | -| channel.runtime.envelope-config-metadata:agentchat | P2 | agentchat | channel-runtime | Channel setup, message envelope, sender metadata, and config schema remain stable. | defineChannelPluginEntry @ plugins/agentchat/integrations/openclaw-channel/src/channel.ts:333 | -| channel.runtime.envelope-config-metadata:wecom | P2 | wecom | channel-runtime | Channel setup, message envelope, sender metadata, and config schema remain stable. | registerChannel @ plugins/wecom/index.js:27 | -| manifest.compat.channel-env-vars:agentchat | P2 | agentchat | manifest-loader | Legacy channel env metadata continues to map into channel setup/help surfaces. | agentchat | -| manifest.compat.provider-auth-env-vars:hasdata | P2 | hasdata | manifest-loader | Legacy provider auth env metadata continues to map into config/help surfaces. | hasdata | -| manifest.schema.top-level-fields:a2a-gateway | P2 | a2a-gateway | manifest-loader | Manifest top-level fields are represented in target OpenClaw PluginManifest. | defaultConfig @ plugins/a2a-gateway/openclaw.plugin.json | -| manifest.schema.top-level-fields:agentchat | P2 | agentchat | manifest-loader | Manifest top-level fields are represented in target OpenClaw PluginManifest. | displayName @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, homepage @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, icon @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | -| package.compat.plugin-api-range:a2a-gateway | P2 | a2a-gateway | package-loader | Package metadata declares the OpenClaw plugin API range used by the plugin. | plugins/a2a-gateway/package.json | -| package.compat.plugin-api-range:mcp-adapter | P2 | mcp-adapter | package-loader | Package metadata declares the OpenClaw plugin API range used by the plugin. | plugins/mcp-adapter/package.json | -| package.compat.plugin-api-range:wecom | P2 | wecom | package-loader | Package metadata declares the OpenClaw plugin API range used by the plugin. | plugins/wecom/package.json | -| package.entrypoint.build-before-cold-import:agentchat | P2 | agentchat | package-loader | Inspector can build or resolve source aliases before cold importing package entrypoints. | extension:./dist/index.js -> plugins/agentchat/integrations/openclaw-channel/dist/index.js, setupEntry:./dist/setup-entry.js -> plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js | -| package.entrypoint.isolated-dependency-install:a2a-gateway | P2 | a2a-gateway | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @a2a-js/sdk @ plugins/a2a-gateway/package.json, @bufbuild/protobuf @ plugins/a2a-gateway/package.json, @grpc/grpc-js @ plugins/a2a-gateway/package.json, express @ plugins/a2a-gateway/package.json, multicast-dns @ plugins/a2a-gateway/package.json, uuid @ plugins/a2a-gateway/package.json, ws @ plugins/a2a-gateway/package.json | -| package.entrypoint.isolated-dependency-install:agentchat | P2 | agentchat | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @agentchatme/agentchat @ plugins/agentchat/integrations/openclaw-channel/package.json, @sinclair/typebox @ plugins/agentchat/integrations/openclaw-channel/package.json, pino @ plugins/agentchat/integrations/openclaw-channel/package.json, ws @ plugins/agentchat/integrations/openclaw-channel/package.json, zod @ plugins/agentchat/integrations/openclaw-channel/package.json, openclaw @ plugins/agentchat/integrations/openclaw-channel/package.json | -| package.entrypoint.isolated-dependency-install:hasdata | P2 | hasdata | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @sinclair/typebox @ plugins/hasdata/package.json, openclaw @ plugins/hasdata/package.json | -| package.entrypoint.isolated-dependency-install:mcp-adapter | P2 | mcp-adapter | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @modelcontextprotocol/sdk @ plugins/mcp-adapter/package.json | -| package.entrypoint.isolated-dependency-install:wecom | P2 | wecom | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @wecom/aibot-node-sdk @ plugins/wecom/package.json, file-type @ plugins/wecom/package.json, pinyin-pro @ plugins/wecom/package.json, openclaw @ plugins/wecom/package.json, undici @ plugins/wecom/package.json | -| package.entrypoint.typescript-loader:a2a-gateway | P2 | a2a-gateway | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/a2a-gateway/index.ts | -| package.entrypoint.typescript-loader:hasdata | P2 | hasdata | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/hasdata/src/index.ts | -| package.entrypoint.typescript-loader:llm-trace-phoenix | P2 | llm-trace-phoenix | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/llm-trace-phoenix/index.ts | -| package.entrypoint.typescript-loader:mcp-adapter | P2 | mcp-adapter | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/mcp-adapter/index.ts | -| package.metadata.version-alignment:a2a-gateway | P2 | a2a-gateway | package-loader | Package and OpenClaw manifest versions stay aligned for release compatibility reporting. | package:1.4.0, manifest:1.3.0 | -| sdk.import.root-barrel-cold-import:a2a-gateway | P2 | a2a-gateway | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/a2a-gateway/src/types.ts:14 | -| sdk.import.root-barrel-cold-import:llm-trace-phoenix | P2 | llm-trace-phoenix | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12 | -| tool.registration.schema-capture:a2a-gateway | P2 | a2a-gateway | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/a2a-gateway/index.ts:777 | -| tool.registration.schema-capture:mcp-adapter | P2 | mcp-adapter | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/mcp-adapter/index.ts:30 | -| tool.registration.schema-capture:wecom | P2 | wecom | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/wecom/index.js:28, registerTool @ plugins/wecom/index.js:29, registerTool @ plugins/wecom/index.js:33 | -| manifest.compat.provider-auth-env-vars:inworld-tts | P3 | inworld-tts | manifest-loader | Legacy provider auth env metadata continues to map into config/help surfaces. | inworld | -| manifest.compat.provider-auth-env-vars:web-search-plus | P3 | web-search-plus | manifest-loader | Legacy provider auth env metadata continues to map into config/help surfaces. | serper, tavily, linkup, querit, exa, firecrawl, perplexity, you, searxng | -| package.entrypoint.build-before-cold-import:clawmetry | P3 | clawmetry | package-loader | Inspector can build or resolve source aliases before cold importing package entrypoints. | runtimeExtension:./dist/index.js -> plugins/clawmetry/clawhub-plugin/dist/index.js | -| package.entrypoint.isolated-dependency-install:apify | P3 | apify | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @sinclair/typebox @ plugins/apify/package.json, apify-client @ plugins/apify/package.json, openclaw @ plugins/apify/package.json | -| package.entrypoint.isolated-dependency-install:clawmetry | P3 | clawmetry | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | node-fetch @ plugins/clawmetry/clawhub-plugin/package.json | -| package.entrypoint.isolated-dependency-install:codex-app-server | P3 | codex-app-server | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | ws @ plugins/codex-app-server/package.json, openclaw @ plugins/codex-app-server/package.json | -| package.entrypoint.isolated-dependency-install:inworld-tts | P3 | inworld-tts | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | openclaw @ plugins/inworld-tts/package.json | -| package.entrypoint.isolated-dependency-install:web-search-plus | P3 | web-search-plus | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | openclaw @ plugins/web-search-plus/package.json | -| package.entrypoint.typescript-loader:apify | P3 | apify | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/apify/src/index.ts | -| package.entrypoint.typescript-loader:clawmetry | P3 | clawmetry | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/clawmetry/clawhub-plugin/index.ts | -| package.entrypoint.typescript-loader:codex-app-server | P3 | codex-app-server | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/codex-app-server/index.ts | -| package.entrypoint.typescript-loader:inworld-tts | P3 | inworld-tts | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/inworld-tts/index.ts | -| package.entrypoint.typescript-loader:web-search-plus | P3 | web-search-plus | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/web-search-plus/index.ts | -| sdk.import.root-barrel-cold-import:apify | P3 | apify | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/apify/src/cli.ts:2, openclaw/plugin-sdk @ plugins/apify/src/index.ts:1, openclaw/plugin-sdk @ plugins/apify/src/tools/apify-scraper-tool.ts:4 | -| sdk.import.root-barrel-cold-import:codex-app-server | P3 | codex-app-server | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/codex-app-server/index.ts:1, openclaw/plugin-sdk @ plugins/codex-app-server/src/client.ts:6, openclaw/plugin-sdk @ plugins/codex-app-server/src/controller.ts:18, openclaw/plugin-sdk @ plugins/codex-app-server/src/types.ts:1 | -| tool.registration.schema-capture:apify | P3 | apify | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/apify/src/index.ts:13 | -| tool.registration.schema-capture:web-search-plus | P3 | web-search-plus | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/web-search-plus/index.ts:815, registerTool @ plugins/web-search-plus/index.ts:947 | +| ID | Priority | Fixture | Target | Contract | Evidence | +| --------------------------------------------------------------- | -------- | ----------------- | --------------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| api.capture.runtime-registrars:a2a-gateway | P1 | a2a-gateway | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerGatewayMethod @ plugins/a2a-gateway/index.ts:616, registerGatewayMethod @ plugins/a2a-gateway/index.ts:622, registerGatewayMethod @ plugins/a2a-gateway/index.ts:631, registerGatewayMethod @ plugins/a2a-gateway/index.ts:657, registerGatewayMethod @ plugins/a2a-gateway/index.ts:669, registerService @ plugins/a2a-gateway/index.ts:857 | +| api.capture.runtime-registrars:clawmetry | P1 | clawmetry | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerService @ plugins/clawmetry/clawhub-plugin/index.ts:9 | +| api.capture.runtime-registrars:codex-app-server | P1 | codex-app-server | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerCommand @ plugins/codex-app-server/index.ts:48, registerInteractiveHandler @ plugins/codex-app-server/index.ts:29, registerInteractiveHandler @ plugins/codex-app-server/index.ts:38, registerService @ plugins/codex-app-server/index.ts:12 | +| api.capture.runtime-registrars:mcp-adapter | P1 | mcp-adapter | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerService @ plugins/mcp-adapter/index.ts:15 | +| api.capture.runtime-registrars:opik-openclaw | P1 | opik-openclaw | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerService @ plugins/opik-openclaw/index.ts:16 | +| api.capture.runtime-registrars:wecom | P1 | wecom | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerChannel @ plugins/wecom/index.js:27, registerHttpRoute @ plugins/wecom/index.js:45 | +| hook.before_tool_call.terminal-block-approval:opik-openclaw | P1 | opik-openclaw | hook-runner | Hook returns preserve terminal, block, and approval semantics. | before_tool_call @ plugins/opik-openclaw/src/service/hooks/tool.ts:34 | +| hook.before_tool_call.terminal-block-approval:wecom | P1 | wecom | hook-runner | Hook returns preserve terminal, block, and approval semantics. | before_tool_call @ plugins/wecom/index.js:65 | +| hook.llm-observer.privacy-payload:llm-trace-phoenix | P1 | llm-trace-phoenix | hook-runner | LLM observer hooks receive documented prompt/output fields with expected redaction behavior. | llm_input @ plugins/llm-trace-phoenix/index.ts:154, llm_output @ plugins/llm-trace-phoenix/index.ts:168 | +| hook.llm-observer.privacy-payload:opik-openclaw | P1 | opik-openclaw | hook-runner | LLM observer hooks receive documented prompt/output fields with expected redaction behavior. | agent_end @ plugins/opik-openclaw/src/service.ts:560, llm_input @ plugins/opik-openclaw/src/service/hooks/llm.ts:39, llm_output @ plugins/opik-openclaw/src/service/hooks/llm.ts:150 | +| sdk.import.package-export-cold-import:codex-app-server | P1 | codex-app-server | sdk-alias | Every observed OpenClaw plugin SDK import remains exported by the target OpenClaw package. | openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:104, openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:106, openclaw/plugin-sdk/telegram-account @ plugins/codex-app-server/src/controller.ts:105 | +| channel.runtime.envelope-config-metadata:agentchat | P2 | agentchat | channel-runtime | Channel setup, message envelope, sender metadata, and config schema remain stable. | defineChannelPluginEntry @ plugins/agentchat/integrations/openclaw-channel/src/channel.ts:333 | +| channel.runtime.envelope-config-metadata:wecom | P2 | wecom | channel-runtime | Channel setup, message envelope, sender metadata, and config schema remain stable. | registerChannel @ plugins/wecom/index.js:27 | +| manifest.compat.channel-env-vars:agentchat | P2 | agentchat | manifest-loader | Legacy channel env metadata continues to map into channel setup/help surfaces. | agentchat | +| manifest.compat.provider-auth-env-vars:hasdata | P2 | hasdata | manifest-loader | Legacy provider auth env metadata continues to map into config/help surfaces. | hasdata | +| manifest.schema.top-level-fields:a2a-gateway | P2 | a2a-gateway | manifest-loader | Manifest top-level fields are represented in target OpenClaw PluginManifest. | defaultConfig @ plugins/a2a-gateway/openclaw.plugin.json | +| manifest.schema.top-level-fields:agentchat | P2 | agentchat | manifest-loader | Manifest top-level fields are represented in target OpenClaw PluginManifest. | displayName @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, homepage @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, icon @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | +| package.compat.plugin-api-range:a2a-gateway | P2 | a2a-gateway | package-loader | Package metadata declares the OpenClaw plugin API range used by the plugin. | plugins/a2a-gateway/package.json | +| package.compat.plugin-api-range:mcp-adapter | P2 | mcp-adapter | package-loader | Package metadata declares the OpenClaw plugin API range used by the plugin. | plugins/mcp-adapter/package.json | +| package.compat.plugin-api-range:wecom | P2 | wecom | package-loader | Package metadata declares the OpenClaw plugin API range used by the plugin. | plugins/wecom/package.json | +| package.entrypoint.build-before-cold-import:agentchat | P2 | agentchat | package-loader | Inspector can build or resolve source aliases before cold importing package entrypoints. | extension:./dist/index.js -> plugins/agentchat/integrations/openclaw-channel/dist/index.js, setupEntry:./dist/setup-entry.js -> plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js | +| package.entrypoint.build-before-cold-import:opik-openclaw | P2 | opik-openclaw | package-loader | Inspector can build or resolve source aliases before cold importing package entrypoints. | runtimeExtension:./dist/index.js -> plugins/opik-openclaw/dist/index.js | +| package.entrypoint.isolated-dependency-install:a2a-gateway | P2 | a2a-gateway | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @a2a-js/sdk @ plugins/a2a-gateway/package.json, @bufbuild/protobuf @ plugins/a2a-gateway/package.json, @grpc/grpc-js @ plugins/a2a-gateway/package.json, express @ plugins/a2a-gateway/package.json, multicast-dns @ plugins/a2a-gateway/package.json, uuid @ plugins/a2a-gateway/package.json, ws @ plugins/a2a-gateway/package.json | +| package.entrypoint.isolated-dependency-install:agentchat | P2 | agentchat | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @agentchatme/agentchat @ plugins/agentchat/integrations/openclaw-channel/package.json, @sinclair/typebox @ plugins/agentchat/integrations/openclaw-channel/package.json, pino @ plugins/agentchat/integrations/openclaw-channel/package.json, ws @ plugins/agentchat/integrations/openclaw-channel/package.json, zod @ plugins/agentchat/integrations/openclaw-channel/package.json, openclaw @ plugins/agentchat/integrations/openclaw-channel/package.json | +| package.entrypoint.isolated-dependency-install:hasdata | P2 | hasdata | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @sinclair/typebox @ plugins/hasdata/package.json, openclaw @ plugins/hasdata/package.json | +| package.entrypoint.isolated-dependency-install:mcp-adapter | P2 | mcp-adapter | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @modelcontextprotocol/sdk @ plugins/mcp-adapter/package.json | +| package.entrypoint.isolated-dependency-install:opik-openclaw | P2 | opik-openclaw | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @clack/prompts @ plugins/opik-openclaw/package.json, opik @ plugins/opik-openclaw/package.json, zod @ plugins/opik-openclaw/package.json, openclaw @ plugins/opik-openclaw/package.json | +| package.entrypoint.isolated-dependency-install:wecom | P2 | wecom | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @wecom/aibot-node-sdk @ plugins/wecom/package.json, file-type @ plugins/wecom/package.json, pinyin-pro @ plugins/wecom/package.json, openclaw @ plugins/wecom/package.json, undici @ plugins/wecom/package.json | +| package.entrypoint.typescript-loader:a2a-gateway | P2 | a2a-gateway | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/a2a-gateway/index.ts | +| package.entrypoint.typescript-loader:hasdata | P2 | hasdata | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/hasdata/src/index.ts | +| package.entrypoint.typescript-loader:llm-trace-phoenix | P2 | llm-trace-phoenix | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/llm-trace-phoenix/index.ts | +| package.entrypoint.typescript-loader:mcp-adapter | P2 | mcp-adapter | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/mcp-adapter/index.ts | +| package.entrypoint.typescript-loader:opik-openclaw | P2 | opik-openclaw | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/opik-openclaw/index.ts | +| package.metadata.version-alignment:a2a-gateway | P2 | a2a-gateway | package-loader | Package and OpenClaw manifest versions stay aligned for release compatibility reporting. | package:1.4.0, manifest:1.3.0 | +| sdk.import.root-barrel-cold-import:a2a-gateway | P2 | a2a-gateway | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/a2a-gateway/src/types.ts:14 | +| sdk.import.root-barrel-cold-import:llm-trace-phoenix | P2 | llm-trace-phoenix | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12 | +| sdk.import.root-barrel-cold-import:opik-openclaw | P2 | opik-openclaw | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:2, openclaw/plugin-sdk @ plugins/opik-openclaw/src/cli.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/configure.ts:2, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:5, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:6, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/llm.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/subagent.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/tool.ts:1 | +| tool.registration.schema-capture:a2a-gateway | P2 | a2a-gateway | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/a2a-gateway/index.ts:777 | +| tool.registration.schema-capture:mcp-adapter | P2 | mcp-adapter | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/mcp-adapter/index.ts:30 | +| tool.registration.schema-capture:wecom | P2 | wecom | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/wecom/index.js:28, registerTool @ plugins/wecom/index.js:29, registerTool @ plugins/wecom/index.js:33 | +| manifest.compat.provider-auth-env-vars:inworld-tts | P3 | inworld-tts | manifest-loader | Legacy provider auth env metadata continues to map into config/help surfaces. | inworld | +| manifest.compat.provider-auth-env-vars:web-search-plus | P3 | web-search-plus | manifest-loader | Legacy provider auth env metadata continues to map into config/help surfaces. | serper, tavily, linkup, querit, exa, firecrawl, perplexity, you, searxng | +| package.entrypoint.build-before-cold-import:clawmetry | P3 | clawmetry | package-loader | Inspector can build or resolve source aliases before cold importing package entrypoints. | runtimeExtension:./dist/index.js -> plugins/clawmetry/clawhub-plugin/dist/index.js | +| package.entrypoint.isolated-dependency-install:apify | P3 | apify | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @sinclair/typebox @ plugins/apify/package.json, apify-client @ plugins/apify/package.json, openclaw @ plugins/apify/package.json | +| package.entrypoint.isolated-dependency-install:clawmetry | P3 | clawmetry | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | node-fetch @ plugins/clawmetry/clawhub-plugin/package.json | +| package.entrypoint.isolated-dependency-install:codex-app-server | P3 | codex-app-server | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | ws @ plugins/codex-app-server/package.json, openclaw @ plugins/codex-app-server/package.json | +| package.entrypoint.isolated-dependency-install:inworld-tts | P3 | inworld-tts | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | openclaw @ plugins/inworld-tts/package.json | +| package.entrypoint.isolated-dependency-install:web-search-plus | P3 | web-search-plus | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | openclaw @ plugins/web-search-plus/package.json | +| package.entrypoint.typescript-loader:apify | P3 | apify | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/apify/src/index.ts | +| package.entrypoint.typescript-loader:clawmetry | P3 | clawmetry | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/clawmetry/clawhub-plugin/index.ts | +| package.entrypoint.typescript-loader:codex-app-server | P3 | codex-app-server | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/codex-app-server/index.ts | +| package.entrypoint.typescript-loader:inworld-tts | P3 | inworld-tts | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/inworld-tts/index.ts | +| package.entrypoint.typescript-loader:web-search-plus | P3 | web-search-plus | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/web-search-plus/index.ts | +| sdk.import.root-barrel-cold-import:apify | P3 | apify | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/apify/src/cli.ts:2, openclaw/plugin-sdk @ plugins/apify/src/index.ts:1, openclaw/plugin-sdk @ plugins/apify/src/tools/apify-scraper-tool.ts:4 | +| sdk.import.root-barrel-cold-import:codex-app-server | P3 | codex-app-server | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/codex-app-server/index.ts:1, openclaw/plugin-sdk @ plugins/codex-app-server/src/client.ts:6, openclaw/plugin-sdk @ plugins/codex-app-server/src/controller.ts:18, openclaw/plugin-sdk @ plugins/codex-app-server/src/types.ts:1 | +| tool.registration.schema-capture:apify | P3 | apify | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/apify/src/index.ts:13 | +| tool.registration.schema-capture:web-search-plus | P3 | web-search-plus | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/web-search-plus/index.ts:815, registerTool @ plugins/web-search-plus/index.ts:947 | diff --git a/reports/crabpot-profile-diff.json b/reports/crabpot-profile-diff.json new file mode 100644 index 0000000..1522537 --- /dev/null +++ b/reports/crabpot-profile-diff.json @@ -0,0 +1,168 @@ +{ + "generatedAt": "deterministic", + "status": "pass", + "strict": false, + "baseline": { + "runs": 3, + "summary": { + "commandCount": 7, + "p50WallMs": 742, + "p95WallMs": 1273, + "maxPeakRssMb": 65.1 + }, + "targetOpenClaw": { + "status": "ok", + "configuredPath": "../openclaw", + "compatRecords": 19, + "hookNames": 31, + "apiRegistrars": 40, + "capturedRegistrars": 18, + "sdkExports": 307, + "manifestFields": 32, + "manifestContractFields": 16 + }, + "fixtureInventory": { + "fixtures": 12, + "sourceFiles": 201, + "observedHooks": 18, + "observedRegistrations": 22, + "observedSdkImports": 20, + "contractProbes": 57, + "issueFindings": 58 + } + }, + "current": { + "runs": 3, + "summary": { + "commandCount": 7, + "p50WallMs": 742, + "p95WallMs": 1273, + "maxPeakRssMb": 65.1 + }, + "targetOpenClaw": { + "status": "ok", + "configuredPath": "../openclaw", + "compatRecords": 19, + "hookNames": 31, + "apiRegistrars": 40, + "capturedRegistrars": 18, + "sdkExports": 307, + "manifestFields": 32, + "manifestContractFields": 16 + }, + "fixtureInventory": { + "fixtures": 12, + "sourceFiles": 201, + "observedHooks": 18, + "observedRegistrations": 22, + "observedSdkImports": 20, + "contractProbes": 57, + "issueFindings": 58 + } + }, + "thresholds": { + "wallP95RegressionPercent": 50, + "peakRssRegressionMb": 50, + "bootRegressionMs": 500, + "strictMinimumSamples": 3 + }, + "summary": { + "checkCount": 10, + "failCount": 0, + "warnCount": 0, + "passCount": 10 + }, + "checks": [ + { + "id": "profile.wall-p95", + "action": "pass", + "metric": "p95WallMs", + "message": "p95WallMs stayed within 50% regression threshold", + "baseline": 1273, + "current": 1273, + "delta": 0, + "percent": 0 + }, + { + "id": "profile.peak-rss", + "action": "pass", + "metric": "maxPeakRssMb", + "message": "maxPeakRssMb stayed within 50 absolute regression threshold", + "baseline": 65.1, + "current": 65.1, + "delta": 0 + }, + { + "id": "profile.node-boot", + "action": "pass", + "metric": "nodeBootWallMs", + "message": "nodeBootWallMs stayed within 500 absolute regression threshold", + "baseline": 917, + "current": 917, + "delta": 0 + }, + { + "id": "registry.compatRecords", + "action": "pass", + "metric": "compatRecords", + "message": "registry surface delta is tracked as context", + "baseline": 19, + "current": 19, + "delta": 0 + }, + { + "id": "registry.hookNames", + "action": "pass", + "metric": "hookNames", + "message": "registry surface delta is tracked as context", + "baseline": 31, + "current": 31, + "delta": 0 + }, + { + "id": "registry.apiRegistrars", + "action": "pass", + "metric": "apiRegistrars", + "message": "registry surface delta is tracked as context", + "baseline": 40, + "current": 40, + "delta": 0 + }, + { + "id": "registry.capturedRegistrars", + "action": "pass", + "metric": "capturedRegistrars", + "message": "registry surface delta is tracked as context", + "baseline": 18, + "current": 18, + "delta": 0 + }, + { + "id": "registry.sdkExports", + "action": "pass", + "metric": "sdkExports", + "message": "registry surface delta is tracked as context", + "baseline": 307, + "current": 307, + "delta": 0 + }, + { + "id": "registry.manifestFields", + "action": "pass", + "metric": "manifestFields", + "message": "registry surface delta is tracked as context", + "baseline": 32, + "current": 32, + "delta": 0 + }, + { + "id": "registry.manifestContractFields", + "action": "pass", + "metric": "manifestContractFields", + "message": "registry surface delta is tracked as context", + "baseline": 16, + "current": 16, + "delta": 0 + } + ] +} diff --git a/reports/crabpot-profile-diff.md b/reports/crabpot-profile-diff.md new file mode 100644 index 0000000..ea4173a --- /dev/null +++ b/reports/crabpot-profile-diff.md @@ -0,0 +1,31 @@ +# Crabpot Runtime Profile Diff + +Generated: deterministic +Status: PASS +Strict: false + +## Summary + +| Metric | Value | +| ------------- | ----- | +| Checks | 10 | +| Fail | 0 | +| Warn | 0 | +| Pass | 10 | +| Current runs | 3 | +| Baseline runs | 3 | + +## Checks + +| Action | ID | Metric | Baseline | Current | Delta | Percent | Message | +| ------ | ------------------------------- | ---------------------- | -------- | ------- | ----- | ------- | -------------------------------------------------------------- | +| pass | profile.wall-p95 | p95WallMs | 1273 | 1273 | 0 | 0% | p95WallMs stayed within 50% regression threshold | +| pass | profile.peak-rss | maxPeakRssMb | 65.1 | 65.1 | 0 | - | maxPeakRssMb stayed within 50 absolute regression threshold | +| pass | profile.node-boot | nodeBootWallMs | 917 | 917 | 0 | - | nodeBootWallMs stayed within 500 absolute regression threshold | +| pass | registry.compatRecords | compatRecords | 19 | 19 | 0 | - | registry surface delta is tracked as context | +| pass | registry.hookNames | hookNames | 31 | 31 | 0 | - | registry surface delta is tracked as context | +| pass | registry.apiRegistrars | apiRegistrars | 40 | 40 | 0 | - | registry surface delta is tracked as context | +| pass | registry.capturedRegistrars | capturedRegistrars | 18 | 18 | 0 | - | registry surface delta is tracked as context | +| pass | registry.sdkExports | sdkExports | 307 | 307 | 0 | - | registry surface delta is tracked as context | +| pass | registry.manifestFields | manifestFields | 32 | 32 | 0 | - | registry surface delta is tracked as context | +| pass | registry.manifestContractFields | manifestContractFields | 16 | 16 | 0 | - | registry surface delta is tracked as context | diff --git a/reports/crabpot-ref-diff.json b/reports/crabpot-ref-diff.json new file mode 100644 index 0000000..824f67b --- /dev/null +++ b/reports/crabpot-ref-diff.json @@ -0,0 +1,210 @@ +{ + "generatedAt": "deterministic", + "base": { + "label": "../openclaw", + "targetOpenClaw": { + "status": "ok", + "configuredPath": "../openclaw", + "compatRecordCount": 19, + "hookNameCount": 31, + "apiRegistrarCount": 40, + "capturedRegistrarCount": 18, + "sdkExportCount": 307, + "manifestFieldCount": 32, + "manifestContractFieldCount": 16 + }, + "report": { + "status": "pass", + "breakageCount": 0, + "warningCount": 18, + "suggestionCount": 40, + "issueCount": 58, + "p0IssueCount": 0, + "p1IssueCount": 12, + "contractProbeCount": 57 + } + }, + "head": { + "label": "../openclaw", + "targetOpenClaw": { + "status": "ok", + "configuredPath": "../openclaw", + "compatRecordCount": 19, + "hookNameCount": 31, + "apiRegistrarCount": 40, + "capturedRegistrarCount": 18, + "sdkExportCount": 307, + "manifestFieldCount": 32, + "manifestContractFieldCount": 16 + }, + "report": { + "status": "pass", + "breakageCount": 0, + "warningCount": 18, + "suggestionCount": 40, + "issueCount": 58, + "p0IssueCount": 0, + "p1IssueCount": 12, + "contractProbeCount": 57 + } + }, + "status": "pass", + "summary": { + "dimensionCount": 7, + "hardRegressionCount": 0, + "warningRegressionCount": 0, + "newIssueCount": 0, + "newP0IssueCount": 0, + "newP1IssueCount": 0, + "removedIssueCount": 0 + }, + "dimensions": [ + { + "id": "compatRecords", + "label": "Compat records", + "baseCount": 19, + "headCount": 19, + "added": [], + "removed": [], + "removedUsed": [], + "used": [], + "regressions": [] + }, + { + "id": "hookNames", + "label": "Hook names", + "baseCount": 31, + "headCount": 31, + "added": [], + "removed": [], + "removedUsed": [], + "used": [ + "after_tool_call", + "agent_end", + "before_prompt_build", + "before_tool_call", + "inbound_claim", + "llm_input", + "llm_output", + "subagent_delivery_target", + "subagent_ended", + "subagent_spawned", + "subagent_spawning", + "tool_result_persist" + ], + "regressions": [] + }, + { + "id": "apiRegistrars", + "label": "API registrars", + "baseCount": 40, + "headCount": 40, + "added": [], + "removed": [], + "removedUsed": [], + "used": [ + "defineChannelPluginEntry", + "definePluginEntry", + "registerChannel", + "registerCli", + "registerCommand", + "registerGatewayMethod", + "registerHttpRoute", + "registerInteractiveHandler", + "registerService", + "registerSpeechProvider", + "registerTool" + ], + "regressions": [] + }, + { + "id": "capturedRegistrars", + "label": "Captured registrars", + "baseCount": 18, + "headCount": 18, + "added": [], + "removed": [], + "removedUsed": [], + "used": [ + "defineChannelPluginEntry", + "definePluginEntry", + "registerChannel", + "registerCli", + "registerCommand", + "registerGatewayMethod", + "registerHttpRoute", + "registerInteractiveHandler", + "registerService", + "registerSpeechProvider", + "registerTool" + ], + "regressions": [] + }, + { + "id": "sdkExports", + "label": "SDK exports", + "baseCount": 307, + "headCount": 307, + "added": [], + "removed": [], + "removedUsed": [], + "used": [ + "openclaw/plugin-sdk", + "openclaw/plugin-sdk/channel-contract", + "openclaw/plugin-sdk/channel-core", + "openclaw/plugin-sdk/core", + "openclaw/plugin-sdk/diagnostics-otel", + "openclaw/plugin-sdk/discord", + "openclaw/plugin-sdk/media-runtime", + "openclaw/plugin-sdk/plugin-entry", + "openclaw/plugin-sdk/secret-input", + "openclaw/plugin-sdk/setup", + "openclaw/plugin-sdk/speech", + "openclaw/plugin-sdk/status-helpers", + "openclaw/plugin-sdk/telegram-account" + ], + "regressions": [] + }, + { + "id": "manifestFields", + "label": "Manifest fields", + "baseCount": 32, + "headCount": 32, + "added": [], + "removed": [], + "removedUsed": [], + "used": [ + "activation", + "channelEnvVars", + "contracts", + "id", + "keys", + "name", + "path", + "providerAuthEnvVars", + "version" + ], + "regressions": [] + }, + { + "id": "manifestContractFields", + "label": "Manifest contract fields", + "baseCount": 16, + "headCount": 16, + "added": [], + "removed": [], + "removedUsed": [], + "used": [ + "speechProviders", + "tools" + ], + "regressions": [] + } + ], + "issueDelta": { + "added": [], + "removed": [], + "regressions": [] + }, + "regressions": [] +} diff --git a/reports/crabpot-ref-diff.md b/reports/crabpot-ref-diff.md new file mode 100644 index 0000000..2ec45d4 --- /dev/null +++ b/reports/crabpot-ref-diff.md @@ -0,0 +1,41 @@ +# Crabpot OpenClaw Ref Diff + +Generated: deterministic +Status: PASS + +## Summary + +| Metric | Value | +| ------------------- | ---------------- | +| Base | ../openclaw (ok) | +| Head | ../openclaw (ok) | +| Hard regressions | 0 | +| Warning regressions | 0 | +| New issues | 0 | +| New P0 issues | 0 | +| New P1 issues | 0 | +| Removed issues | 0 | + +## Target Surface Delta + +| Surface | Base | Head | Delta | Added | Removed | Removed used | +| ------------------------ | ---- | ---- | ----- | ----- | ------- | ------------ | +| Compat records | 19 | 19 | 0 | - | - | - | +| Hook names | 31 | 31 | 0 | - | - | - | +| API registrars | 40 | 40 | 0 | - | - | - | +| Captured registrars | 18 | 18 | 0 | - | - | - | +| SDK exports | 307 | 307 | 0 | - | - | - | +| Manifest fields | 32 | 32 | 0 | - | - | - | +| Manifest contract fields | 16 | 16 | 0 | - | - | - | + +## Regressions + +_none_ + +## New Issues + +_none_ + +## Removed Issues + +_none_ diff --git a/reports/crabpot-report.json b/reports/crabpot-report.json index c7129c9..353a631 100644 --- a/reports/crabpot-report.json +++ b/reports/crabpot-report.json @@ -3,8 +3,7 @@ "targetOpenClaw": { "configuredPath": "../openclaw", "searchedPaths": [ - "../openclaw", - "./openclaw" + "../openclaw" ], "status": "ok", "compatRegistryPath": "../openclaw/src/plugins/compat/registry.ts", @@ -132,7 +131,7 @@ "registerWebSearchProvider" ], "packagePath": "../openclaw/package.json", - "sdkExportCount": 306, + "sdkExportCount": 307, "sdkExports": [ "openclaw/plugin-sdk", "openclaw/plugin-sdk/account-core", @@ -322,6 +321,7 @@ "openclaw/plugin-sdk/opencode", "openclaw/plugin-sdk/outbound-media", "openclaw/plugin-sdk/outbound-runtime", + "openclaw/plugin-sdk/outbound-send-deps", "openclaw/plugin-sdk/param-readers", "openclaw/plugin-sdk/persistent-dedupe", "openclaw/plugin-sdk/plugin-entry", @@ -499,16 +499,16 @@ }, "status": "pass", "summary": { - "fixtureCount": 11, - "highPriorityFixtures": 6, + "fixtureCount": 12, + "highPriorityFixtures": 7, "breakageCount": 0, - "warningCount": 16, - "suggestionCount": 35, - "decisionCount": 53, - "issueCount": 51, + "warningCount": 18, + "suggestionCount": 40, + "decisionCount": 60, + "issueCount": 58, "p0IssueCount": 0, - "p1IssueCount": 9, - "contractProbeCount": 50 + "p1IssueCount": 12, + "contractProbeCount": 57 }, "fixtures": [ { @@ -1695,6 +1695,306 @@ } ] }, + { + "id": "opik-openclaw", + "name": "Opik OpenClaw", + "priority": "high", + "seams": [ + "llm-observer", + "tool-runtime", + "subagent-routing", + "diagnostics", + "cli" + ], + "why": "Opik trace exporter covering LLM spans, tool spans, subagent spans, stale trace cleanup, CLI setup, and persisted tool-result sanitization.", + "status": "ok", + "hooks": [ + "after_tool_call", + "agent_end", + "before_tool_call", + "llm_input", + "llm_output", + "subagent_delivery_target", + "subagent_ended", + "subagent_spawned", + "subagent_spawning", + "tool_result_persist" + ], + "hookDetails": [ + { + "name": "after_tool_call", + "file": "plugins/opik-openclaw/src/service/hooks/tool.ts", + "line": 100, + "ref": "plugins/opik-openclaw/src/service/hooks/tool.ts:100" + }, + { + "name": "agent_end", + "file": "plugins/opik-openclaw/src/service.ts", + "line": 560, + "ref": "plugins/opik-openclaw/src/service.ts:560" + }, + { + "name": "before_tool_call", + "file": "plugins/opik-openclaw/src/service/hooks/tool.ts", + "line": 34, + "ref": "plugins/opik-openclaw/src/service/hooks/tool.ts:34" + }, + { + "name": "llm_input", + "file": "plugins/opik-openclaw/src/service/hooks/llm.ts", + "line": 39, + "ref": "plugins/opik-openclaw/src/service/hooks/llm.ts:39" + }, + { + "name": "llm_output", + "file": "plugins/opik-openclaw/src/service/hooks/llm.ts", + "line": 150, + "ref": "plugins/opik-openclaw/src/service/hooks/llm.ts:150" + }, + { + "name": "subagent_delivery_target", + "file": "plugins/opik-openclaw/src/service/hooks/subagent.ts", + "line": 147, + "ref": "plugins/opik-openclaw/src/service/hooks/subagent.ts:147" + }, + { + "name": "subagent_ended", + "file": "plugins/opik-openclaw/src/service/hooks/subagent.ts", + "line": 222, + "ref": "plugins/opik-openclaw/src/service/hooks/subagent.ts:222" + }, + { + "name": "subagent_spawned", + "file": "plugins/opik-openclaw/src/service/hooks/subagent.ts", + "line": 89, + "ref": "plugins/opik-openclaw/src/service/hooks/subagent.ts:89" + }, + { + "name": "subagent_spawning", + "file": "plugins/opik-openclaw/src/service/hooks/subagent.ts", + "line": 38, + "ref": "plugins/opik-openclaw/src/service/hooks/subagent.ts:38" + }, + { + "name": "tool_result_persist", + "file": "plugins/opik-openclaw/src/service.ts", + "line": 541, + "ref": "plugins/opik-openclaw/src/service.ts:541" + } + ], + "registrations": [ + "registerCli", + "registerService" + ], + "registrationDetails": [ + { + "name": "registerCli", + "file": "plugins/opik-openclaw/index.ts", + "line": 17, + "ref": "plugins/opik-openclaw/index.ts:17" + }, + { + "name": "registerService", + "file": "plugins/opik-openclaw/index.ts", + "line": 16, + "ref": "plugins/opik-openclaw/index.ts:16" + } + ], + "manifestContracts": [], + "manifestFiles": [ + "plugins/opik-openclaw/openclaw.plugin.json" + ], + "sourceFiles": [ + "plugins/opik-openclaw/.scripts/build.mjs", + "plugins/opik-openclaw/.scripts/check-clawhub-suspicious.mjs", + "plugins/opik-openclaw/.scripts/check-e2e-result.mjs", + "plugins/opik-openclaw/.scripts/check-pack-payload.mjs", + "plugins/opik-openclaw/.scripts/live-e2e.mjs", + "plugins/opik-openclaw/.scripts/mock-llm-server.mjs", + "plugins/opik-openclaw/.scripts/mock-opik-server.mjs", + "plugins/opik-openclaw/index.ts", + "plugins/opik-openclaw/src/cli.ts", + "plugins/opik-openclaw/src/configure.ts", + "plugins/opik-openclaw/src/service.ts", + "plugins/opik-openclaw/src/service/attachment-uploader.ts", + "plugins/opik-openclaw/src/service/constants.ts", + "plugins/opik-openclaw/src/service/helpers.ts", + "plugins/opik-openclaw/src/service/hooks/llm.ts", + "plugins/opik-openclaw/src/service/hooks/subagent.ts", + "plugins/opik-openclaw/src/service/hooks/tool.ts", + "plugins/opik-openclaw/src/service/media.ts", + "plugins/opik-openclaw/src/service/payload-sanitizer.ts", + "plugins/opik-openclaw/src/types.ts" + ], + "pluginManifests": [ + { + "path": "plugins/opik-openclaw/openclaw.plugin.json", + "id": "opik-openclaw", + "name": "Opik", + "version": null, + "keys": [ + "configSchema", + "description", + "id", + "name", + "uiHints" + ], + "contracts": [], + "providerAuthEnvVars": {}, + "channelEnvVars": {}, + "activation": null + } + ], + "package": { + "path": "plugins/opik-openclaw/package.json", + "name": "@opik/opik-openclaw", + "version": "0.2.14", + "type": "module", + "main": null, + "dependencies": [ + "@clack/prompts", + "opik", + "zod" + ], + "peerDependencies": [ + "openclaw" + ], + "optionalDependencies": [], + "openclaw": { + "extensions": [ + "./index.ts" + ], + "runtimeExtensions": [ + "./dist/index.js" + ], + "setupEntry": null, + "compatPluginApi": ">=2026.3.2", + "buildOpenClawVersion": "2026.3.2", + "buildPluginSdkVersion": "2026.3.2", + "entrypoints": [ + { + "kind": "extension", + "specifier": "./index.ts", + "relativePath": "plugins/opik-openclaw/index.ts", + "exists": true, + "requiresBuild": false + }, + { + "kind": "runtimeExtension", + "specifier": "./dist/index.js", + "relativePath": "plugins/opik-openclaw/dist/index.js", + "exists": false, + "requiresBuild": true + } + ] + } + }, + "packages": [ + { + "path": "plugins/opik-openclaw/package.json", + "name": "@opik/opik-openclaw", + "version": "0.2.14", + "type": "module", + "main": null, + "dependencies": [ + "@clack/prompts", + "opik", + "zod" + ], + "peerDependencies": [ + "openclaw" + ], + "optionalDependencies": [], + "openclaw": { + "extensions": [ + "./index.ts" + ], + "runtimeExtensions": [ + "./dist/index.js" + ], + "setupEntry": null, + "compatPluginApi": ">=2026.3.2", + "buildOpenClawVersion": "2026.3.2", + "buildPluginSdkVersion": "2026.3.2", + "entrypoints": [ + { + "kind": "extension", + "specifier": "./index.ts", + "relativePath": "plugins/opik-openclaw/index.ts", + "exists": true, + "requiresBuild": false + }, + { + "kind": "runtimeExtension", + "specifier": "./dist/index.js", + "relativePath": "plugins/opik-openclaw/dist/index.js", + "exists": false, + "requiresBuild": true + } + ] + } + } + ], + "sdkImports": [ + "openclaw/plugin-sdk" + ], + "sdkImportDetails": [ + { + "specifier": "openclaw/plugin-sdk", + "file": "plugins/opik-openclaw/index.ts", + "line": 1, + "ref": "plugins/opik-openclaw/index.ts:1" + }, + { + "specifier": "openclaw/plugin-sdk", + "file": "plugins/opik-openclaw/index.ts", + "line": 2, + "ref": "plugins/opik-openclaw/index.ts:2" + }, + { + "specifier": "openclaw/plugin-sdk", + "file": "plugins/opik-openclaw/src/cli.ts", + "line": 1, + "ref": "plugins/opik-openclaw/src/cli.ts:1" + }, + { + "specifier": "openclaw/plugin-sdk", + "file": "plugins/opik-openclaw/src/configure.ts", + "line": 2, + "ref": "plugins/opik-openclaw/src/configure.ts:2" + }, + { + "specifier": "openclaw/plugin-sdk", + "file": "plugins/opik-openclaw/src/service.ts", + "line": 5, + "ref": "plugins/opik-openclaw/src/service.ts:5" + }, + { + "specifier": "openclaw/plugin-sdk", + "file": "plugins/opik-openclaw/src/service.ts", + "line": 6, + "ref": "plugins/opik-openclaw/src/service.ts:6" + }, + { + "specifier": "openclaw/plugin-sdk", + "file": "plugins/opik-openclaw/src/service/hooks/llm.ts", + "line": 1, + "ref": "plugins/opik-openclaw/src/service/hooks/llm.ts:1" + }, + { + "specifier": "openclaw/plugin-sdk", + "file": "plugins/opik-openclaw/src/service/hooks/subagent.ts", + "line": 1, + "ref": "plugins/opik-openclaw/src/service/hooks/subagent.ts:1" + }, + { + "specifier": "openclaw/plugin-sdk", + "file": "plugins/opik-openclaw/src/service/hooks/tool.ts", + "line": 1, + "ref": "plugins/opik-openclaw/src/service/hooks/tool.ts:1" + } + ] + }, { "id": "clawmetry", "name": "ClawMetry", @@ -2688,6 +2988,35 @@ ], "compatRecord": "legacy-root-sdk-import" }, + { + "fixture": "opik-openclaw", + "code": "conversation-access-hook", + "level": "warning", + "message": "fixture observes raw model or conversation content and needs privacy-boundary contract probes", + "evidence": [ + "agent_end @ plugins/opik-openclaw/src/service.ts:560", + "llm_input @ plugins/opik-openclaw/src/service/hooks/llm.ts:39", + "llm_output @ plugins/opik-openclaw/src/service/hooks/llm.ts:150" + ] + }, + { + "fixture": "opik-openclaw", + "code": "legacy-root-sdk-import", + "level": "warning", + "message": "fixture imports the root plugin SDK barrel", + "evidence": [ + "openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:2", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/cli.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/configure.ts:2", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:5", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:6", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/llm.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/subagent.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/tool.ts:1" + ], + "compatRecord": "legacy-root-sdk-import" + }, { "fixture": "codex-app-server", "code": "sdk-export-missing", @@ -2951,6 +3280,54 @@ "extension:plugins/llm-trace-phoenix/index.ts" ] }, + { + "fixture": "opik-openclaw", + "code": "package-build-artifact-entrypoint", + "level": "suggestion", + "message": "package OpenClaw entrypoint points at build output that is not present in the source fixture checkout", + "evidence": [ + "runtimeExtension:./dist/index.js -> plugins/opik-openclaw/dist/index.js" + ] + }, + { + "fixture": "opik-openclaw", + "code": "package-typescript-source-entrypoint", + "level": "suggestion", + "message": "package OpenClaw entrypoint resolves to TypeScript source in this fixture checkout", + "evidence": [ + "extension:plugins/opik-openclaw/index.ts" + ] + }, + { + "fixture": "opik-openclaw", + "code": "package-dependency-install-required", + "level": "suggestion", + "message": "package declares runtime dependencies that must be installed before cold import", + "evidence": [ + "@clack/prompts @ plugins/opik-openclaw/package.json", + "opik @ plugins/opik-openclaw/package.json", + "zod @ plugins/opik-openclaw/package.json", + "openclaw @ plugins/opik-openclaw/package.json" + ] + }, + { + "fixture": "opik-openclaw", + "code": "registration-capture-gap", + "level": "suggestion", + "message": "future inspector capture API should record lifecycle, route, gateway, command, and interactive registrations", + "evidence": [ + "registerService @ plugins/opik-openclaw/index.ts:16" + ] + }, + { + "fixture": "opik-openclaw", + "code": "before-tool-call-probe", + "level": "suggestion", + "message": "add contract probes for before_tool_call terminal, block, and approval semantics", + "evidence": [ + "before_tool_call @ plugins/opik-openclaw/src/service/hooks/tool.ts:34" + ] + }, { "fixture": "clawmetry", "code": "package-build-artifact-entrypoint", @@ -3214,6 +3591,50 @@ ], "compatRecord": null }, + { + "id": "CRABPOT-EE3B527C", + "fixture": "opik-openclaw", + "severity": "P1", + "owner": "inspector", + "code": "before-tool-call-probe", + "decision": "inspector-follow-up", + "status": "open", + "title": "opik-openclaw: before_tool_call needs terminal/block/approval probes", + "evidence": [ + "before_tool_call @ plugins/opik-openclaw/src/service/hooks/tool.ts:34" + ], + "compatRecord": null + }, + { + "id": "CRABPOT-6FC4ED08", + "fixture": "opik-openclaw", + "severity": "P1", + "owner": "core", + "code": "conversation-access-hook", + "decision": "inspector-follow-up", + "status": "open", + "title": "opik-openclaw: conversation-access hooks need privacy-boundary probes", + "evidence": [ + "agent_end @ plugins/opik-openclaw/src/service.ts:560", + "llm_input @ plugins/opik-openclaw/src/service/hooks/llm.ts:39", + "llm_output @ plugins/opik-openclaw/src/service/hooks/llm.ts:150" + ], + "compatRecord": null + }, + { + "id": "CRABPOT-5E85F236", + "fixture": "opik-openclaw", + "severity": "P1", + "owner": "inspector", + "code": "registration-capture-gap", + "decision": "inspector-follow-up", + "status": "open", + "title": "opik-openclaw: runtime registrations need capture before contract judgment", + "evidence": [ + "registerService @ plugins/opik-openclaw/index.ts:16" + ], + "compatRecord": null + }, { "id": "CRABPOT-B08DB79E", "fixture": "wecom", @@ -3743,6 +4164,73 @@ ], "compatRecord": null }, + { + "id": "CRABPOT-F76EC24F", + "fixture": "opik-openclaw", + "severity": "P2", + "owner": "core", + "code": "legacy-root-sdk-import", + "decision": "core-compat-adapter", + "status": "open", + "title": "opik-openclaw: root plugin SDK barrel is still used by fixtures", + "evidence": [ + "openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:2", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/cli.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/configure.ts:2", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:5", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:6", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/llm.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/subagent.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/tool.ts:1" + ], + "compatRecord": "legacy-root-sdk-import" + }, + { + "id": "CRABPOT-5D328BF6", + "fixture": "opik-openclaw", + "severity": "P2", + "owner": "inspector", + "code": "package-build-artifact-entrypoint", + "decision": "inspector-follow-up", + "status": "open", + "title": "opik-openclaw: cold import requires package build output", + "evidence": [ + "runtimeExtension:./dist/index.js -> plugins/opik-openclaw/dist/index.js" + ], + "compatRecord": null + }, + { + "id": "CRABPOT-32CDFD6D", + "fixture": "opik-openclaw", + "severity": "P2", + "owner": "inspector", + "code": "package-dependency-install-required", + "decision": "inspector-follow-up", + "status": "open", + "title": "opik-openclaw: cold import requires isolated dependency installation", + "evidence": [ + "@clack/prompts @ plugins/opik-openclaw/package.json", + "opik @ plugins/opik-openclaw/package.json", + "zod @ plugins/opik-openclaw/package.json", + "openclaw @ plugins/opik-openclaw/package.json" + ], + "compatRecord": null + }, + { + "id": "CRABPOT-FAEC3F71", + "fixture": "opik-openclaw", + "severity": "P2", + "owner": "inspector", + "code": "package-typescript-source-entrypoint", + "decision": "inspector-follow-up", + "status": "open", + "title": "opik-openclaw: cold import needs TypeScript source entrypoint support", + "evidence": [ + "extension:plugins/opik-openclaw/index.ts" + ], + "compatRecord": null + }, { "id": "CRABPOT-D8910079", "fixture": "web-search-plus", @@ -3920,6 +4408,16 @@ "registerService @ plugins/mcp-adapter/index.ts:15" ] }, + { + "id": "api.capture.runtime-registrars:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P1", + "target": "inspector-capture-api", + "contract": "External inspector capture records service, route, gateway, command, and interactive registrations.", + "evidence": [ + "registerService @ plugins/opik-openclaw/index.ts:16" + ] + }, { "id": "api.capture.runtime-registrars:wecom", "fixture": "wecom", @@ -3931,6 +4429,16 @@ "registerHttpRoute @ plugins/wecom/index.js:45" ] }, + { + "id": "hook.before_tool_call.terminal-block-approval:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P1", + "target": "hook-runner", + "contract": "Hook returns preserve terminal, block, and approval semantics.", + "evidence": [ + "before_tool_call @ plugins/opik-openclaw/src/service/hooks/tool.ts:34" + ] + }, { "id": "hook.before_tool_call.terminal-block-approval:wecom", "fixture": "wecom", @@ -3952,6 +4460,18 @@ "llm_output @ plugins/llm-trace-phoenix/index.ts:168" ] }, + { + "id": "hook.llm-observer.privacy-payload:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P1", + "target": "hook-runner", + "contract": "LLM observer hooks receive documented prompt/output fields with expected redaction behavior.", + "evidence": [ + "agent_end @ plugins/opik-openclaw/src/service.ts:560", + "llm_input @ plugins/opik-openclaw/src/service/hooks/llm.ts:39", + "llm_output @ plugins/opik-openclaw/src/service/hooks/llm.ts:150" + ] + }, { "id": "sdk.import.package-export-cold-import:codex-app-server", "fixture": "codex-app-server", @@ -4067,6 +4587,16 @@ "setupEntry:./dist/setup-entry.js -> plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js" ] }, + { + "id": "package.entrypoint.build-before-cold-import:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P2", + "target": "package-loader", + "contract": "Inspector can build or resolve source aliases before cold importing package entrypoints.", + "evidence": [ + "runtimeExtension:./dist/index.js -> plugins/opik-openclaw/dist/index.js" + ] + }, { "id": "package.entrypoint.isolated-dependency-install:a2a-gateway", "fixture": "a2a-gateway", @@ -4119,6 +4649,19 @@ "@modelcontextprotocol/sdk @ plugins/mcp-adapter/package.json" ] }, + { + "id": "package.entrypoint.isolated-dependency-install:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P2", + "target": "package-loader", + "contract": "Inspector installs package dependencies in an isolated workspace before cold import.", + "evidence": [ + "@clack/prompts @ plugins/opik-openclaw/package.json", + "opik @ plugins/opik-openclaw/package.json", + "zod @ plugins/opik-openclaw/package.json", + "openclaw @ plugins/opik-openclaw/package.json" + ] + }, { "id": "package.entrypoint.isolated-dependency-install:wecom", "fixture": "wecom", @@ -4173,6 +4716,16 @@ "extension:plugins/mcp-adapter/index.ts" ] }, + { + "id": "package.entrypoint.typescript-loader:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P2", + "target": "package-loader", + "contract": "Inspector can compile or load TypeScript source entrypoints before registration capture.", + "evidence": [ + "extension:plugins/opik-openclaw/index.ts" + ] + }, { "id": "package.metadata.version-alignment:a2a-gateway", "fixture": "a2a-gateway", @@ -4204,6 +4757,24 @@ "openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12" ] }, + { + "id": "sdk.import.root-barrel-cold-import:opik-openclaw", + "fixture": "opik-openclaw", + "priority": "P2", + "target": "sdk-alias", + "contract": "Root plugin SDK barrel remains importable or has a machine-readable migration path.", + "evidence": [ + "openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:2", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/cli.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/configure.ts:2", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:5", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:6", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/llm.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/subagent.ts:1", + "openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/tool.ts:1" + ] + }, { "id": "tool.registration.schema-capture:a2a-gateway", "fixture": "a2a-gateway", @@ -4767,6 +5338,83 @@ "version:1.0.1" ] }, + { + "fixture": "opik-openclaw", + "code": "seam-inventory", + "level": "log", + "message": "observed 10 hooks, 2 registrations, and 0 manifest contracts", + "evidence": [ + "hook:after_tool_call", + "hook:agent_end", + "hook:before_tool_call", + "hook:llm_input", + "hook:llm_output", + "hook:subagent_delivery_target", + "hook:subagent_ended", + "hook:subagent_spawned", + "hook:subagent_spawning", + "hook:tool_result_persist", + "registration:registerCli", + "registration:registerService" + ] + }, + { + "fixture": "opik-openclaw", + "code": "hook-names-present", + "level": "log", + "message": "all observed hooks exist in the target OpenClaw hook registry", + "evidence": [ + "after_tool_call", + "agent_end", + "before_tool_call", + "llm_input", + "llm_output", + "subagent_delivery_target", + "subagent_ended", + "subagent_spawned", + "subagent_spawning", + "tool_result_persist" + ] + }, + { + "fixture": "opik-openclaw", + "code": "api-registrars-present", + "level": "log", + "message": "all observed api.register* calls exist in the target OpenClaw plugin API builder", + "evidence": [ + "registerCli", + "registerService" + ] + }, + { + "fixture": "opik-openclaw", + "code": "sdk-exports-present", + "level": "log", + "message": "all observed plugin SDK imports exist in target OpenClaw package exports", + "evidence": [ + "openclaw/plugin-sdk" + ] + }, + { + "fixture": "opik-openclaw", + "code": "manifest-fields-checked", + "level": "log", + "message": "plugin manifest fields were compared with target OpenClaw manifest types", + "evidence": [ + "plugins/opik-openclaw/openclaw.plugin.json" + ] + }, + { + "fixture": "opik-openclaw", + "code": "package-metadata", + "level": "log", + "message": "selected package metadata for plugin contract checks", + "evidence": [ + "plugins/opik-openclaw/package.json", + "@opik/opik-openclaw", + "version:0.2.14" + ] + }, { "fixture": "clawmetry", "code": "seam-inventory", @@ -5075,6 +5723,16 @@ ], "compatRecord": "legacy-root-sdk-import" }, + { + "fixture": "opik-openclaw", + "code": "compat-record-present", + "level": "log", + "message": "target OpenClaw checkout has a matching compat registry record", + "evidence": [ + "legacy-root-sdk-import" + ], + "compatRecord": "legacy-root-sdk-import" + }, { "fixture": "codex-app-server", "code": "compat-record-present", @@ -5334,6 +5992,55 @@ "action": "Keep the root SDK barrel stable or expose a machine-readable migration map before removing aliases.", "evidence": "openclaw/plugin-sdk" }, + { + "fixture": "opik-openclaw", + "decision": "inspector-follow-up", + "seam": "cold-import", + "action": "Run the plugin build or resolve source entrypoint aliases before cold-importing this fixture.", + "evidence": "./dist/index.js" + }, + { + "fixture": "opik-openclaw", + "decision": "inspector-follow-up", + "seam": "cold-import", + "action": "Compile TypeScript source or run a loader before cold-importing this fixture entrypoint.", + "evidence": "plugins/opik-openclaw/index.ts" + }, + { + "fixture": "opik-openclaw", + "decision": "inspector-follow-up", + "seam": "cold-import", + "action": "Install runtime dependencies in an isolated workspace before executing this fixture entrypoint.", + "evidence": "@clack/prompts, opik, zod, openclaw" + }, + { + "fixture": "opik-openclaw", + "decision": "inspector-follow-up", + "seam": "conversation-access", + "action": "Add synthetic llm_input/llm_output/agent_end probes before tightening hook payloads or redaction behavior.", + "evidence": "agent_end, llm_input, llm_output" + }, + { + "fixture": "opik-openclaw", + "decision": "core-compat-adapter", + "seam": "sdk-import", + "action": "Keep the root SDK barrel stable or expose a machine-readable migration map before removing aliases.", + "evidence": "openclaw/plugin-sdk" + }, + { + "fixture": "opik-openclaw", + "decision": "inspector-follow-up", + "seam": "registration-capture", + "action": "Expose or mirror a full public API capture shim before treating these runtime-only seams as covered.", + "evidence": "registerService" + }, + { + "fixture": "opik-openclaw", + "decision": "inspector-follow-up", + "seam": "tool-policy", + "action": "Probe before_tool_call return shapes before changing tool-call approval or block behavior.", + "evidence": "before_tool_call" + }, { "fixture": "clawmetry", "decision": "inspector-follow-up", diff --git a/reports/crabpot-report.md b/reports/crabpot-report.md index b14ae66..6b517e6 100644 --- a/reports/crabpot-report.md +++ b/reports/crabpot-report.md @@ -7,16 +7,16 @@ Status: PASS | Metric | Value | | ------------------------- | ----- | -| Fixtures | 11 | -| High-priority fixtures | 6 | +| Fixtures | 12 | +| High-priority fixtures | 7 | | Hard breakages | 0 | -| Warnings | 16 | -| Compatibility suggestions | 35 | -| Issue findings | 51 | +| Warnings | 18 | +| Compatibility suggestions | 40 | +| Issue findings | 58 | | P0 issues | 0 | -| P1 issues | 9 | -| Contract probes | 50 | -| Decision rows | 53 | +| P1 issues | 12 | +| Contract probes | 57 | +| Decision rows | 60 | ## Hard Breakages @@ -38,31 +38,33 @@ _none_ | Captured registration | ../openclaw/src/plugins/captured-registration.ts | | Captured registrars | 18 | | Package metadata | ../openclaw/package.json | -| Plugin SDK exports | 306 | +| Plugin SDK exports | 307 | | Manifest types | ../openclaw/src/plugins/manifest.ts | | Manifest fields | 32 | | Manifest contract fields | 16 | ## Warnings -| Fixture | Code | Level | Message | Evidence | Compat record | -| ----------------- | --------------------------------- | ------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | -| agentchat | manifest-unknown-fields | warning | manifest uses top-level fields that are not present in the target OpenClaw PluginManifest type | displayName @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, homepage @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, icon @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | - | -| agentchat | channel-env-vars | warning | manifest uses channelEnvVars legacy compatibility metadata | agentchat | channel-env-vars | -| wecom | package-plugin-api-compat-missing | warning | package openclaw metadata does not declare compat.pluginApi | plugins/wecom/package.json | - | -| a2a-gateway | manifest-unknown-fields | warning | manifest uses top-level fields that are not present in the target OpenClaw PluginManifest type | defaultConfig @ plugins/a2a-gateway/openclaw.plugin.json | - | -| a2a-gateway | package-manifest-version-drift | warning | package.json and openclaw.plugin.json publish different versions | package:1.4.0, manifest:1.3.0 | - | -| a2a-gateway | package-plugin-api-compat-missing | warning | package openclaw metadata does not declare compat.pluginApi | plugins/a2a-gateway/package.json | - | -| a2a-gateway | legacy-root-sdk-import | warning | fixture imports the root plugin SDK barrel | openclaw/plugin-sdk @ plugins/a2a-gateway/src/types.ts:14 | legacy-root-sdk-import | -| hasdata | provider-auth-env-vars | warning | manifest uses providerAuthEnvVars legacy compatibility metadata | hasdata | provider-auth-env-vars | -| mcp-adapter | package-plugin-api-compat-missing | warning | package openclaw metadata does not declare compat.pluginApi | plugins/mcp-adapter/package.json | - | -| llm-trace-phoenix | conversation-access-hook | warning | fixture observes raw model or conversation content and needs privacy-boundary contract probes | llm_input @ plugins/llm-trace-phoenix/index.ts:154, llm_output @ plugins/llm-trace-phoenix/index.ts:168 | - | -| llm-trace-phoenix | legacy-root-sdk-import | warning | fixture imports the root plugin SDK barrel | openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12 | legacy-root-sdk-import | -| codex-app-server | sdk-export-missing | warning | fixture imports plugin SDK aliases that are not exported by the target OpenClaw package | openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:104, openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:106, openclaw/plugin-sdk/telegram-account @ plugins/codex-app-server/src/controller.ts:105 | plugin-sdk-export-aliases | -| codex-app-server | legacy-root-sdk-import | warning | fixture imports the root plugin SDK barrel | openclaw/plugin-sdk @ plugins/codex-app-server/index.ts:1, openclaw/plugin-sdk @ plugins/codex-app-server/src/client.ts:6, openclaw/plugin-sdk @ plugins/codex-app-server/src/controller.ts:18, openclaw/plugin-sdk @ plugins/codex-app-server/src/types.ts:1 | legacy-root-sdk-import | -| web-search-plus | provider-auth-env-vars | warning | manifest uses providerAuthEnvVars legacy compatibility metadata | serper, tavily, linkup, querit, exa, firecrawl, perplexity, you, searxng | provider-auth-env-vars | -| apify | legacy-root-sdk-import | warning | fixture imports the root plugin SDK barrel | openclaw/plugin-sdk @ plugins/apify/src/cli.ts:2, openclaw/plugin-sdk @ plugins/apify/src/index.ts:1, openclaw/plugin-sdk @ plugins/apify/src/tools/apify-scraper-tool.ts:4 | legacy-root-sdk-import | -| inworld-tts | provider-auth-env-vars | warning | manifest uses providerAuthEnvVars legacy compatibility metadata | inworld | provider-auth-env-vars | +| Fixture | Code | Level | Message | Evidence | Compat record | +| ----------------- | --------------------------------- | ------- | ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | +| agentchat | manifest-unknown-fields | warning | manifest uses top-level fields that are not present in the target OpenClaw PluginManifest type | displayName @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, homepage @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, icon @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | - | +| agentchat | channel-env-vars | warning | manifest uses channelEnvVars legacy compatibility metadata | agentchat | channel-env-vars | +| wecom | package-plugin-api-compat-missing | warning | package openclaw metadata does not declare compat.pluginApi | plugins/wecom/package.json | - | +| a2a-gateway | manifest-unknown-fields | warning | manifest uses top-level fields that are not present in the target OpenClaw PluginManifest type | defaultConfig @ plugins/a2a-gateway/openclaw.plugin.json | - | +| a2a-gateway | package-manifest-version-drift | warning | package.json and openclaw.plugin.json publish different versions | package:1.4.0, manifest:1.3.0 | - | +| a2a-gateway | package-plugin-api-compat-missing | warning | package openclaw metadata does not declare compat.pluginApi | plugins/a2a-gateway/package.json | - | +| a2a-gateway | legacy-root-sdk-import | warning | fixture imports the root plugin SDK barrel | openclaw/plugin-sdk @ plugins/a2a-gateway/src/types.ts:14 | legacy-root-sdk-import | +| hasdata | provider-auth-env-vars | warning | manifest uses providerAuthEnvVars legacy compatibility metadata | hasdata | provider-auth-env-vars | +| mcp-adapter | package-plugin-api-compat-missing | warning | package openclaw metadata does not declare compat.pluginApi | plugins/mcp-adapter/package.json | - | +| llm-trace-phoenix | conversation-access-hook | warning | fixture observes raw model or conversation content and needs privacy-boundary contract probes | llm_input @ plugins/llm-trace-phoenix/index.ts:154, llm_output @ plugins/llm-trace-phoenix/index.ts:168 | - | +| llm-trace-phoenix | legacy-root-sdk-import | warning | fixture imports the root plugin SDK barrel | openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12 | legacy-root-sdk-import | +| opik-openclaw | conversation-access-hook | warning | fixture observes raw model or conversation content and needs privacy-boundary contract probes | agent_end @ plugins/opik-openclaw/src/service.ts:560, llm_input @ plugins/opik-openclaw/src/service/hooks/llm.ts:39, llm_output @ plugins/opik-openclaw/src/service/hooks/llm.ts:150 | - | +| opik-openclaw | legacy-root-sdk-import | warning | fixture imports the root plugin SDK barrel | openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:2, openclaw/plugin-sdk @ plugins/opik-openclaw/src/cli.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/configure.ts:2, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:5, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:6, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/llm.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/subagent.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/tool.ts:1 | legacy-root-sdk-import | +| codex-app-server | sdk-export-missing | warning | fixture imports plugin SDK aliases that are not exported by the target OpenClaw package | openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:104, openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:106, openclaw/plugin-sdk/telegram-account @ plugins/codex-app-server/src/controller.ts:105 | plugin-sdk-export-aliases | +| codex-app-server | legacy-root-sdk-import | warning | fixture imports the root plugin SDK barrel | openclaw/plugin-sdk @ plugins/codex-app-server/index.ts:1, openclaw/plugin-sdk @ plugins/codex-app-server/src/client.ts:6, openclaw/plugin-sdk @ plugins/codex-app-server/src/controller.ts:18, openclaw/plugin-sdk @ plugins/codex-app-server/src/types.ts:1 | legacy-root-sdk-import | +| web-search-plus | provider-auth-env-vars | warning | manifest uses providerAuthEnvVars legacy compatibility metadata | serper, tavily, linkup, querit, exa, firecrawl, perplexity, you, searxng | provider-auth-env-vars | +| apify | legacy-root-sdk-import | warning | fixture imports the root plugin SDK barrel | openclaw/plugin-sdk @ plugins/apify/src/cli.ts:2, openclaw/plugin-sdk @ plugins/apify/src/index.ts:1, openclaw/plugin-sdk @ plugins/apify/src/tools/apify-scraper-tool.ts:4 | legacy-root-sdk-import | +| inworld-tts | provider-auth-env-vars | warning | manifest uses providerAuthEnvVars legacy compatibility metadata | inworld | provider-auth-env-vars | ## Suggestions To OpenClaw Compat Layer @@ -87,6 +89,11 @@ _none_ | mcp-adapter | registration-capture-gap | suggestion | future inspector capture API should record lifecycle, route, gateway, command, and interactive registrations | registerService @ plugins/mcp-adapter/index.ts:15 | - | | mcp-adapter | runtime-tool-capture | suggestion | tool shape is only visible after runtime registration capture | registerTool @ plugins/mcp-adapter/index.ts:30 | - | | llm-trace-phoenix | package-typescript-source-entrypoint | suggestion | package OpenClaw entrypoint resolves to TypeScript source in this fixture checkout | extension:plugins/llm-trace-phoenix/index.ts | - | +| opik-openclaw | package-build-artifact-entrypoint | suggestion | package OpenClaw entrypoint points at build output that is not present in the source fixture checkout | runtimeExtension:./dist/index.js -> plugins/opik-openclaw/dist/index.js | - | +| opik-openclaw | package-typescript-source-entrypoint | suggestion | package OpenClaw entrypoint resolves to TypeScript source in this fixture checkout | extension:plugins/opik-openclaw/index.ts | - | +| opik-openclaw | package-dependency-install-required | suggestion | package declares runtime dependencies that must be installed before cold import | @clack/prompts @ plugins/opik-openclaw/package.json, opik @ plugins/opik-openclaw/package.json, zod @ plugins/opik-openclaw/package.json, openclaw @ plugins/opik-openclaw/package.json | - | +| opik-openclaw | registration-capture-gap | suggestion | future inspector capture API should record lifecycle, route, gateway, command, and interactive registrations | registerService @ plugins/opik-openclaw/index.ts:16 | - | +| opik-openclaw | before-tool-call-probe | suggestion | add contract probes for before_tool_call terminal, block, and approval semantics | before_tool_call @ plugins/opik-openclaw/src/service/hooks/tool.ts:34 | - | | clawmetry | package-build-artifact-entrypoint | suggestion | package OpenClaw entrypoint points at build output that is not present in the source fixture checkout | runtimeExtension:./dist/index.js -> plugins/clawmetry/clawhub-plugin/dist/index.js | - | | clawmetry | package-typescript-source-entrypoint | suggestion | package OpenClaw entrypoint resolves to TypeScript source in this fixture checkout | extension:plugins/clawmetry/clawhub-plugin/index.ts | - | | clawmetry | package-dependency-install-required | suggestion | package declares runtime dependencies that must be installed before cold import | node-fetch @ plugins/clawmetry/clawhub-plugin/package.json | - | @@ -106,130 +113,145 @@ _none_ ## Issue Findings -| ID | Severity | Fixture | Owner | Decision | Status | Title | Evidence | -| ---------------- | -------- | ----------------- | --------- | ------------------- | ------ | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| CRABPOT-37E8444D | P1 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: runtime registrations need capture before contract judgment | registerGatewayMethod @ plugins/a2a-gateway/index.ts:616, registerGatewayMethod @ plugins/a2a-gateway/index.ts:622, registerGatewayMethod @ plugins/a2a-gateway/index.ts:631, registerGatewayMethod @ plugins/a2a-gateway/index.ts:657, registerGatewayMethod @ plugins/a2a-gateway/index.ts:669, registerService @ plugins/a2a-gateway/index.ts:857 | -| CRABPOT-9D5EE194 | P1 | clawmetry | inspector | inspector-follow-up | open | clawmetry: runtime registrations need capture before contract judgment | registerService @ plugins/clawmetry/clawhub-plugin/index.ts:9 | -| CRABPOT-6D9E51D9 | P1 | codex-app-server | core | core-compat-adapter | open | codex-app-server: compat-dependent behavior lacks registry coverage | plugin-sdk-export-aliases | -| CRABPOT-45CAC152 | P1 | codex-app-server | inspector | inspector-follow-up | open | codex-app-server: runtime registrations need capture before contract judgment | registerCommand @ plugins/codex-app-server/index.ts:48, registerInteractiveHandler @ plugins/codex-app-server/index.ts:29, registerInteractiveHandler @ plugins/codex-app-server/index.ts:38, registerService @ plugins/codex-app-server/index.ts:12 | -| CRABPOT-C2331427 | P1 | codex-app-server | core | core-compat-adapter | open | codex-app-server: plugin SDK import aliases are missing from target package exports | openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:104, openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:106, openclaw/plugin-sdk/telegram-account @ plugins/codex-app-server/src/controller.ts:105 | -| CRABPOT-D71B126E | P1 | llm-trace-phoenix | core | inspector-follow-up | open | llm-trace-phoenix: conversation-access hooks need privacy-boundary probes | llm_input @ plugins/llm-trace-phoenix/index.ts:154, llm_output @ plugins/llm-trace-phoenix/index.ts:168 | -| CRABPOT-B91192E5 | P1 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: runtime registrations need capture before contract judgment | registerService @ plugins/mcp-adapter/index.ts:15 | -| CRABPOT-B08DB79E | P1 | wecom | inspector | inspector-follow-up | open | wecom: before_tool_call needs terminal/block/approval probes | before_tool_call @ plugins/wecom/index.js:65 | -| CRABPOT-9428734C | P1 | wecom | inspector | inspector-follow-up | open | wecom: runtime registrations need capture before contract judgment | registerChannel @ plugins/wecom/index.js:27, registerHttpRoute @ plugins/wecom/index.js:45 | -| CRABPOT-6469330F | P2 | a2a-gateway | core | core-compat-adapter | open | a2a-gateway: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/a2a-gateway/src/types.ts:14 | -| CRABPOT-892CF14F | P2 | a2a-gateway | plugin | plugin-upstream-fix | open | a2a-gateway: manifest uses unsupported top-level fields | defaultConfig @ plugins/a2a-gateway/openclaw.plugin.json | -| CRABPOT-F5185BE0 | P2 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: cold import requires isolated dependency installation | @a2a-js/sdk @ plugins/a2a-gateway/package.json, @bufbuild/protobuf @ plugins/a2a-gateway/package.json, @grpc/grpc-js @ plugins/a2a-gateway/package.json, express @ plugins/a2a-gateway/package.json, multicast-dns @ plugins/a2a-gateway/package.json, uuid @ plugins/a2a-gateway/package.json, ws @ plugins/a2a-gateway/package.json | -| CRABPOT-16E892BF | P2 | a2a-gateway | plugin | plugin-upstream-fix | open | a2a-gateway: package and manifest versions drift | package:1.4.0, manifest:1.3.0 | -| CRABPOT-FDBB1C67 | P2 | a2a-gateway | plugin | plugin-upstream-fix | open | a2a-gateway: plugin API compatibility range is missing | plugins/a2a-gateway/package.json | -| CRABPOT-96D2E9F4 | P2 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: cold import needs TypeScript source entrypoint support | extension:plugins/a2a-gateway/index.ts | -| CRABPOT-654F01E7 | P2 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: runtime tool schema needs registration capture | registerTool @ plugins/a2a-gateway/index.ts:777 | -| CRABPOT-74260BA0 | P2 | agentchat | inspector | inspector-follow-up | open | agentchat: channel runtime needs envelope/config probes | defineChannelPluginEntry @ plugins/agentchat/integrations/openclaw-channel/src/channel.ts:333 | -| CRABPOT-90736EF4 | P2 | agentchat | core | core-compat-adapter | open | agentchat: channelEnvVars legacy manifest metadata must stay covered | agentchat | -| CRABPOT-BEC462A4 | P2 | agentchat | plugin | plugin-upstream-fix | open | agentchat: manifest uses unsupported top-level fields | displayName @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, homepage @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, icon @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | -| CRABPOT-6A790CB4 | P2 | agentchat | inspector | inspector-follow-up | open | agentchat: cold import requires package build output | extension:./dist/index.js -> plugins/agentchat/integrations/openclaw-channel/dist/index.js, setupEntry:./dist/setup-entry.js -> plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js | -| CRABPOT-2ED34BE8 | P2 | agentchat | inspector | inspector-follow-up | open | agentchat: cold import requires isolated dependency installation | @agentchatme/agentchat @ plugins/agentchat/integrations/openclaw-channel/package.json, @sinclair/typebox @ plugins/agentchat/integrations/openclaw-channel/package.json, pino @ plugins/agentchat/integrations/openclaw-channel/package.json, ws @ plugins/agentchat/integrations/openclaw-channel/package.json, zod @ plugins/agentchat/integrations/openclaw-channel/package.json, openclaw @ plugins/agentchat/integrations/openclaw-channel/package.json | -| CRABPOT-0CFF8B6F | P2 | apify | core | core-compat-adapter | open | apify: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/apify/src/cli.ts:2, openclaw/plugin-sdk @ plugins/apify/src/index.ts:1, openclaw/plugin-sdk @ plugins/apify/src/tools/apify-scraper-tool.ts:4 | -| CRABPOT-74FAA2A2 | P2 | apify | inspector | inspector-follow-up | open | apify: cold import requires isolated dependency installation | @sinclair/typebox @ plugins/apify/package.json, apify-client @ plugins/apify/package.json, openclaw @ plugins/apify/package.json | -| CRABPOT-18D12186 | P2 | apify | inspector | inspector-follow-up | open | apify: cold import needs TypeScript source entrypoint support | extension:plugins/apify/src/index.ts | -| CRABPOT-93E9D53A | P2 | apify | inspector | inspector-follow-up | open | apify: runtime tool schema needs registration capture | registerTool @ plugins/apify/src/index.ts:13 | -| CRABPOT-4BCB1F63 | P2 | clawmetry | inspector | inspector-follow-up | open | clawmetry: cold import requires package build output | runtimeExtension:./dist/index.js -> plugins/clawmetry/clawhub-plugin/dist/index.js | -| CRABPOT-034E5504 | P2 | clawmetry | inspector | inspector-follow-up | open | clawmetry: cold import requires isolated dependency installation | node-fetch @ plugins/clawmetry/clawhub-plugin/package.json | -| CRABPOT-EF6E7134 | P2 | clawmetry | inspector | inspector-follow-up | open | clawmetry: cold import needs TypeScript source entrypoint support | extension:plugins/clawmetry/clawhub-plugin/index.ts | -| CRABPOT-A36ECE8E | P2 | codex-app-server | core | core-compat-adapter | open | codex-app-server: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/codex-app-server/index.ts:1, openclaw/plugin-sdk @ plugins/codex-app-server/src/client.ts:6, openclaw/plugin-sdk @ plugins/codex-app-server/src/controller.ts:18, openclaw/plugin-sdk @ plugins/codex-app-server/src/types.ts:1 | -| CRABPOT-DC637E99 | P2 | codex-app-server | inspector | inspector-follow-up | open | codex-app-server: cold import requires isolated dependency installation | ws @ plugins/codex-app-server/package.json, openclaw @ plugins/codex-app-server/package.json | -| CRABPOT-F8C8F1CD | P2 | codex-app-server | inspector | inspector-follow-up | open | codex-app-server: cold import needs TypeScript source entrypoint support | extension:plugins/codex-app-server/index.ts | -| CRABPOT-2C2BFD3C | P2 | hasdata | inspector | inspector-follow-up | open | hasdata: cold import requires isolated dependency installation | @sinclair/typebox @ plugins/hasdata/package.json, openclaw @ plugins/hasdata/package.json | -| CRABPOT-1853BC94 | P2 | hasdata | inspector | inspector-follow-up | open | hasdata: cold import needs TypeScript source entrypoint support | extension:plugins/hasdata/src/index.ts | -| CRABPOT-1ABECD7E | P2 | hasdata | core | core-compat-adapter | open | hasdata: providerAuthEnvVars legacy manifest metadata must stay covered | hasdata | -| CRABPOT-0853EBDC | P2 | inworld-tts | inspector | inspector-follow-up | open | inworld-tts: cold import requires isolated dependency installation | openclaw @ plugins/inworld-tts/package.json | -| CRABPOT-7C59D06F | P2 | inworld-tts | inspector | inspector-follow-up | open | inworld-tts: cold import needs TypeScript source entrypoint support | extension:plugins/inworld-tts/index.ts | -| CRABPOT-CCABE384 | P2 | inworld-tts | core | core-compat-adapter | open | inworld-tts: providerAuthEnvVars legacy manifest metadata must stay covered | inworld | -| CRABPOT-4CC6CA25 | P2 | llm-trace-phoenix | core | core-compat-adapter | open | llm-trace-phoenix: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12 | -| CRABPOT-15F8300A | P2 | llm-trace-phoenix | inspector | inspector-follow-up | open | llm-trace-phoenix: cold import needs TypeScript source entrypoint support | extension:plugins/llm-trace-phoenix/index.ts | -| CRABPOT-22E35E29 | P2 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: cold import requires isolated dependency installation | @modelcontextprotocol/sdk @ plugins/mcp-adapter/package.json | -| CRABPOT-4511EE11 | P2 | mcp-adapter | plugin | plugin-upstream-fix | open | mcp-adapter: plugin API compatibility range is missing | plugins/mcp-adapter/package.json | -| CRABPOT-6515DC5B | P2 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: cold import needs TypeScript source entrypoint support | extension:plugins/mcp-adapter/index.ts | -| CRABPOT-B195BB7A | P2 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: runtime tool schema needs registration capture | registerTool @ plugins/mcp-adapter/index.ts:30 | -| CRABPOT-D8910079 | P2 | web-search-plus | inspector | inspector-follow-up | open | web-search-plus: cold import requires isolated dependency installation | openclaw @ plugins/web-search-plus/package.json | -| CRABPOT-E55C4521 | P2 | web-search-plus | inspector | inspector-follow-up | open | web-search-plus: cold import needs TypeScript source entrypoint support | extension:plugins/web-search-plus/index.ts | -| CRABPOT-A3EA1186 | P2 | web-search-plus | core | core-compat-adapter | open | web-search-plus: providerAuthEnvVars legacy manifest metadata must stay covered | serper, tavily, linkup, querit, exa, firecrawl, perplexity, you, searxng | -| CRABPOT-AF929F22 | P2 | web-search-plus | inspector | inspector-follow-up | open | web-search-plus: runtime tool schema needs registration capture | registerTool @ plugins/web-search-plus/index.ts:815, registerTool @ plugins/web-search-plus/index.ts:947 | -| CRABPOT-848F09E3 | P2 | wecom | inspector | inspector-follow-up | open | wecom: channel runtime needs envelope/config probes | registerChannel @ plugins/wecom/index.js:27 | -| CRABPOT-4734034D | P2 | wecom | inspector | inspector-follow-up | open | wecom: cold import requires isolated dependency installation | @wecom/aibot-node-sdk @ plugins/wecom/package.json, file-type @ plugins/wecom/package.json, pinyin-pro @ plugins/wecom/package.json, openclaw @ plugins/wecom/package.json, undici @ plugins/wecom/package.json | -| CRABPOT-5E53BD07 | P2 | wecom | plugin | plugin-upstream-fix | open | wecom: plugin API compatibility range is missing | plugins/wecom/package.json | -| CRABPOT-72021A36 | P2 | wecom | inspector | inspector-follow-up | open | wecom: runtime tool schema needs registration capture | registerTool @ plugins/wecom/index.js:28, registerTool @ plugins/wecom/index.js:29, registerTool @ plugins/wecom/index.js:33 | +| ID | Severity | Fixture | Owner | Decision | Status | Title | Evidence | +| ---------------- | -------- | ----------------- | --------- | ------------------- | ------ | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| CRABPOT-37E8444D | P1 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: runtime registrations need capture before contract judgment | registerGatewayMethod @ plugins/a2a-gateway/index.ts:616, registerGatewayMethod @ plugins/a2a-gateway/index.ts:622, registerGatewayMethod @ plugins/a2a-gateway/index.ts:631, registerGatewayMethod @ plugins/a2a-gateway/index.ts:657, registerGatewayMethod @ plugins/a2a-gateway/index.ts:669, registerService @ plugins/a2a-gateway/index.ts:857 | +| CRABPOT-9D5EE194 | P1 | clawmetry | inspector | inspector-follow-up | open | clawmetry: runtime registrations need capture before contract judgment | registerService @ plugins/clawmetry/clawhub-plugin/index.ts:9 | +| CRABPOT-6D9E51D9 | P1 | codex-app-server | core | core-compat-adapter | open | codex-app-server: compat-dependent behavior lacks registry coverage | plugin-sdk-export-aliases | +| CRABPOT-45CAC152 | P1 | codex-app-server | inspector | inspector-follow-up | open | codex-app-server: runtime registrations need capture before contract judgment | registerCommand @ plugins/codex-app-server/index.ts:48, registerInteractiveHandler @ plugins/codex-app-server/index.ts:29, registerInteractiveHandler @ plugins/codex-app-server/index.ts:38, registerService @ plugins/codex-app-server/index.ts:12 | +| CRABPOT-C2331427 | P1 | codex-app-server | core | core-compat-adapter | open | codex-app-server: plugin SDK import aliases are missing from target package exports | openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:104, openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:106, openclaw/plugin-sdk/telegram-account @ plugins/codex-app-server/src/controller.ts:105 | +| CRABPOT-D71B126E | P1 | llm-trace-phoenix | core | inspector-follow-up | open | llm-trace-phoenix: conversation-access hooks need privacy-boundary probes | llm_input @ plugins/llm-trace-phoenix/index.ts:154, llm_output @ plugins/llm-trace-phoenix/index.ts:168 | +| CRABPOT-B91192E5 | P1 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: runtime registrations need capture before contract judgment | registerService @ plugins/mcp-adapter/index.ts:15 | +| CRABPOT-EE3B527C | P1 | opik-openclaw | inspector | inspector-follow-up | open | opik-openclaw: before_tool_call needs terminal/block/approval probes | before_tool_call @ plugins/opik-openclaw/src/service/hooks/tool.ts:34 | +| CRABPOT-6FC4ED08 | P1 | opik-openclaw | core | inspector-follow-up | open | opik-openclaw: conversation-access hooks need privacy-boundary probes | agent_end @ plugins/opik-openclaw/src/service.ts:560, llm_input @ plugins/opik-openclaw/src/service/hooks/llm.ts:39, llm_output @ plugins/opik-openclaw/src/service/hooks/llm.ts:150 | +| CRABPOT-5E85F236 | P1 | opik-openclaw | inspector | inspector-follow-up | open | opik-openclaw: runtime registrations need capture before contract judgment | registerService @ plugins/opik-openclaw/index.ts:16 | +| CRABPOT-B08DB79E | P1 | wecom | inspector | inspector-follow-up | open | wecom: before_tool_call needs terminal/block/approval probes | before_tool_call @ plugins/wecom/index.js:65 | +| CRABPOT-9428734C | P1 | wecom | inspector | inspector-follow-up | open | wecom: runtime registrations need capture before contract judgment | registerChannel @ plugins/wecom/index.js:27, registerHttpRoute @ plugins/wecom/index.js:45 | +| CRABPOT-6469330F | P2 | a2a-gateway | core | core-compat-adapter | open | a2a-gateway: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/a2a-gateway/src/types.ts:14 | +| CRABPOT-892CF14F | P2 | a2a-gateway | plugin | plugin-upstream-fix | open | a2a-gateway: manifest uses unsupported top-level fields | defaultConfig @ plugins/a2a-gateway/openclaw.plugin.json | +| CRABPOT-F5185BE0 | P2 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: cold import requires isolated dependency installation | @a2a-js/sdk @ plugins/a2a-gateway/package.json, @bufbuild/protobuf @ plugins/a2a-gateway/package.json, @grpc/grpc-js @ plugins/a2a-gateway/package.json, express @ plugins/a2a-gateway/package.json, multicast-dns @ plugins/a2a-gateway/package.json, uuid @ plugins/a2a-gateway/package.json, ws @ plugins/a2a-gateway/package.json | +| CRABPOT-16E892BF | P2 | a2a-gateway | plugin | plugin-upstream-fix | open | a2a-gateway: package and manifest versions drift | package:1.4.0, manifest:1.3.0 | +| CRABPOT-FDBB1C67 | P2 | a2a-gateway | plugin | plugin-upstream-fix | open | a2a-gateway: plugin API compatibility range is missing | plugins/a2a-gateway/package.json | +| CRABPOT-96D2E9F4 | P2 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: cold import needs TypeScript source entrypoint support | extension:plugins/a2a-gateway/index.ts | +| CRABPOT-654F01E7 | P2 | a2a-gateway | inspector | inspector-follow-up | open | a2a-gateway: runtime tool schema needs registration capture | registerTool @ plugins/a2a-gateway/index.ts:777 | +| CRABPOT-74260BA0 | P2 | agentchat | inspector | inspector-follow-up | open | agentchat: channel runtime needs envelope/config probes | defineChannelPluginEntry @ plugins/agentchat/integrations/openclaw-channel/src/channel.ts:333 | +| CRABPOT-90736EF4 | P2 | agentchat | core | core-compat-adapter | open | agentchat: channelEnvVars legacy manifest metadata must stay covered | agentchat | +| CRABPOT-BEC462A4 | P2 | agentchat | plugin | plugin-upstream-fix | open | agentchat: manifest uses unsupported top-level fields | displayName @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, homepage @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, icon @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | +| CRABPOT-6A790CB4 | P2 | agentchat | inspector | inspector-follow-up | open | agentchat: cold import requires package build output | extension:./dist/index.js -> plugins/agentchat/integrations/openclaw-channel/dist/index.js, setupEntry:./dist/setup-entry.js -> plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js | +| CRABPOT-2ED34BE8 | P2 | agentchat | inspector | inspector-follow-up | open | agentchat: cold import requires isolated dependency installation | @agentchatme/agentchat @ plugins/agentchat/integrations/openclaw-channel/package.json, @sinclair/typebox @ plugins/agentchat/integrations/openclaw-channel/package.json, pino @ plugins/agentchat/integrations/openclaw-channel/package.json, ws @ plugins/agentchat/integrations/openclaw-channel/package.json, zod @ plugins/agentchat/integrations/openclaw-channel/package.json, openclaw @ plugins/agentchat/integrations/openclaw-channel/package.json | +| CRABPOT-0CFF8B6F | P2 | apify | core | core-compat-adapter | open | apify: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/apify/src/cli.ts:2, openclaw/plugin-sdk @ plugins/apify/src/index.ts:1, openclaw/plugin-sdk @ plugins/apify/src/tools/apify-scraper-tool.ts:4 | +| CRABPOT-74FAA2A2 | P2 | apify | inspector | inspector-follow-up | open | apify: cold import requires isolated dependency installation | @sinclair/typebox @ plugins/apify/package.json, apify-client @ plugins/apify/package.json, openclaw @ plugins/apify/package.json | +| CRABPOT-18D12186 | P2 | apify | inspector | inspector-follow-up | open | apify: cold import needs TypeScript source entrypoint support | extension:plugins/apify/src/index.ts | +| CRABPOT-93E9D53A | P2 | apify | inspector | inspector-follow-up | open | apify: runtime tool schema needs registration capture | registerTool @ plugins/apify/src/index.ts:13 | +| CRABPOT-4BCB1F63 | P2 | clawmetry | inspector | inspector-follow-up | open | clawmetry: cold import requires package build output | runtimeExtension:./dist/index.js -> plugins/clawmetry/clawhub-plugin/dist/index.js | +| CRABPOT-034E5504 | P2 | clawmetry | inspector | inspector-follow-up | open | clawmetry: cold import requires isolated dependency installation | node-fetch @ plugins/clawmetry/clawhub-plugin/package.json | +| CRABPOT-EF6E7134 | P2 | clawmetry | inspector | inspector-follow-up | open | clawmetry: cold import needs TypeScript source entrypoint support | extension:plugins/clawmetry/clawhub-plugin/index.ts | +| CRABPOT-A36ECE8E | P2 | codex-app-server | core | core-compat-adapter | open | codex-app-server: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/codex-app-server/index.ts:1, openclaw/plugin-sdk @ plugins/codex-app-server/src/client.ts:6, openclaw/plugin-sdk @ plugins/codex-app-server/src/controller.ts:18, openclaw/plugin-sdk @ plugins/codex-app-server/src/types.ts:1 | +| CRABPOT-DC637E99 | P2 | codex-app-server | inspector | inspector-follow-up | open | codex-app-server: cold import requires isolated dependency installation | ws @ plugins/codex-app-server/package.json, openclaw @ plugins/codex-app-server/package.json | +| CRABPOT-F8C8F1CD | P2 | codex-app-server | inspector | inspector-follow-up | open | codex-app-server: cold import needs TypeScript source entrypoint support | extension:plugins/codex-app-server/index.ts | +| CRABPOT-2C2BFD3C | P2 | hasdata | inspector | inspector-follow-up | open | hasdata: cold import requires isolated dependency installation | @sinclair/typebox @ plugins/hasdata/package.json, openclaw @ plugins/hasdata/package.json | +| CRABPOT-1853BC94 | P2 | hasdata | inspector | inspector-follow-up | open | hasdata: cold import needs TypeScript source entrypoint support | extension:plugins/hasdata/src/index.ts | +| CRABPOT-1ABECD7E | P2 | hasdata | core | core-compat-adapter | open | hasdata: providerAuthEnvVars legacy manifest metadata must stay covered | hasdata | +| CRABPOT-0853EBDC | P2 | inworld-tts | inspector | inspector-follow-up | open | inworld-tts: cold import requires isolated dependency installation | openclaw @ plugins/inworld-tts/package.json | +| CRABPOT-7C59D06F | P2 | inworld-tts | inspector | inspector-follow-up | open | inworld-tts: cold import needs TypeScript source entrypoint support | extension:plugins/inworld-tts/index.ts | +| CRABPOT-CCABE384 | P2 | inworld-tts | core | core-compat-adapter | open | inworld-tts: providerAuthEnvVars legacy manifest metadata must stay covered | inworld | +| CRABPOT-4CC6CA25 | P2 | llm-trace-phoenix | core | core-compat-adapter | open | llm-trace-phoenix: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12 | +| CRABPOT-15F8300A | P2 | llm-trace-phoenix | inspector | inspector-follow-up | open | llm-trace-phoenix: cold import needs TypeScript source entrypoint support | extension:plugins/llm-trace-phoenix/index.ts | +| CRABPOT-22E35E29 | P2 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: cold import requires isolated dependency installation | @modelcontextprotocol/sdk @ plugins/mcp-adapter/package.json | +| CRABPOT-4511EE11 | P2 | mcp-adapter | plugin | plugin-upstream-fix | open | mcp-adapter: plugin API compatibility range is missing | plugins/mcp-adapter/package.json | +| CRABPOT-6515DC5B | P2 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: cold import needs TypeScript source entrypoint support | extension:plugins/mcp-adapter/index.ts | +| CRABPOT-B195BB7A | P2 | mcp-adapter | inspector | inspector-follow-up | open | mcp-adapter: runtime tool schema needs registration capture | registerTool @ plugins/mcp-adapter/index.ts:30 | +| CRABPOT-F76EC24F | P2 | opik-openclaw | core | core-compat-adapter | open | opik-openclaw: root plugin SDK barrel is still used by fixtures | openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:2, openclaw/plugin-sdk @ plugins/opik-openclaw/src/cli.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/configure.ts:2, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:5, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:6, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/llm.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/subagent.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/tool.ts:1 | +| CRABPOT-5D328BF6 | P2 | opik-openclaw | inspector | inspector-follow-up | open | opik-openclaw: cold import requires package build output | runtimeExtension:./dist/index.js -> plugins/opik-openclaw/dist/index.js | +| CRABPOT-32CDFD6D | P2 | opik-openclaw | inspector | inspector-follow-up | open | opik-openclaw: cold import requires isolated dependency installation | @clack/prompts @ plugins/opik-openclaw/package.json, opik @ plugins/opik-openclaw/package.json, zod @ plugins/opik-openclaw/package.json, openclaw @ plugins/opik-openclaw/package.json | +| CRABPOT-FAEC3F71 | P2 | opik-openclaw | inspector | inspector-follow-up | open | opik-openclaw: cold import needs TypeScript source entrypoint support | extension:plugins/opik-openclaw/index.ts | +| CRABPOT-D8910079 | P2 | web-search-plus | inspector | inspector-follow-up | open | web-search-plus: cold import requires isolated dependency installation | openclaw @ plugins/web-search-plus/package.json | +| CRABPOT-E55C4521 | P2 | web-search-plus | inspector | inspector-follow-up | open | web-search-plus: cold import needs TypeScript source entrypoint support | extension:plugins/web-search-plus/index.ts | +| CRABPOT-A3EA1186 | P2 | web-search-plus | core | core-compat-adapter | open | web-search-plus: providerAuthEnvVars legacy manifest metadata must stay covered | serper, tavily, linkup, querit, exa, firecrawl, perplexity, you, searxng | +| CRABPOT-AF929F22 | P2 | web-search-plus | inspector | inspector-follow-up | open | web-search-plus: runtime tool schema needs registration capture | registerTool @ plugins/web-search-plus/index.ts:815, registerTool @ plugins/web-search-plus/index.ts:947 | +| CRABPOT-848F09E3 | P2 | wecom | inspector | inspector-follow-up | open | wecom: channel runtime needs envelope/config probes | registerChannel @ plugins/wecom/index.js:27 | +| CRABPOT-4734034D | P2 | wecom | inspector | inspector-follow-up | open | wecom: cold import requires isolated dependency installation | @wecom/aibot-node-sdk @ plugins/wecom/package.json, file-type @ plugins/wecom/package.json, pinyin-pro @ plugins/wecom/package.json, openclaw @ plugins/wecom/package.json, undici @ plugins/wecom/package.json | +| CRABPOT-5E53BD07 | P2 | wecom | plugin | plugin-upstream-fix | open | wecom: plugin API compatibility range is missing | plugins/wecom/package.json | +| CRABPOT-72021A36 | P2 | wecom | inspector | inspector-follow-up | open | wecom: runtime tool schema needs registration capture | registerTool @ plugins/wecom/index.js:28, registerTool @ plugins/wecom/index.js:29, registerTool @ plugins/wecom/index.js:33 | ## Contract Probe Backlog -| ID | Priority | Fixture | Target | Contract | Evidence | -| --------------------------------------------------------------- | -------- | ----------------- | --------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| api.capture.runtime-registrars:a2a-gateway | P1 | a2a-gateway | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerGatewayMethod @ plugins/a2a-gateway/index.ts:616, registerGatewayMethod @ plugins/a2a-gateway/index.ts:622, registerGatewayMethod @ plugins/a2a-gateway/index.ts:631, registerGatewayMethod @ plugins/a2a-gateway/index.ts:657, registerGatewayMethod @ plugins/a2a-gateway/index.ts:669, registerService @ plugins/a2a-gateway/index.ts:857 | -| api.capture.runtime-registrars:clawmetry | P1 | clawmetry | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerService @ plugins/clawmetry/clawhub-plugin/index.ts:9 | -| api.capture.runtime-registrars:codex-app-server | P1 | codex-app-server | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerCommand @ plugins/codex-app-server/index.ts:48, registerInteractiveHandler @ plugins/codex-app-server/index.ts:29, registerInteractiveHandler @ plugins/codex-app-server/index.ts:38, registerService @ plugins/codex-app-server/index.ts:12 | -| api.capture.runtime-registrars:mcp-adapter | P1 | mcp-adapter | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerService @ plugins/mcp-adapter/index.ts:15 | -| api.capture.runtime-registrars:wecom | P1 | wecom | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerChannel @ plugins/wecom/index.js:27, registerHttpRoute @ plugins/wecom/index.js:45 | -| hook.before_tool_call.terminal-block-approval:wecom | P1 | wecom | hook-runner | Hook returns preserve terminal, block, and approval semantics. | before_tool_call @ plugins/wecom/index.js:65 | -| hook.llm-observer.privacy-payload:llm-trace-phoenix | P1 | llm-trace-phoenix | hook-runner | LLM observer hooks receive documented prompt/output fields with expected redaction behavior. | llm_input @ plugins/llm-trace-phoenix/index.ts:154, llm_output @ plugins/llm-trace-phoenix/index.ts:168 | -| sdk.import.package-export-cold-import:codex-app-server | P1 | codex-app-server | sdk-alias | Every observed OpenClaw plugin SDK import remains exported by the target OpenClaw package. | openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:104, openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:106, openclaw/plugin-sdk/telegram-account @ plugins/codex-app-server/src/controller.ts:105 | -| channel.runtime.envelope-config-metadata:agentchat | P2 | agentchat | channel-runtime | Channel setup, message envelope, sender metadata, and config schema remain stable. | defineChannelPluginEntry @ plugins/agentchat/integrations/openclaw-channel/src/channel.ts:333 | -| channel.runtime.envelope-config-metadata:wecom | P2 | wecom | channel-runtime | Channel setup, message envelope, sender metadata, and config schema remain stable. | registerChannel @ plugins/wecom/index.js:27 | -| manifest.compat.channel-env-vars:agentchat | P2 | agentchat | manifest-loader | Legacy channel env metadata continues to map into channel setup/help surfaces. | agentchat | -| manifest.compat.provider-auth-env-vars:hasdata | P2 | hasdata | manifest-loader | Legacy provider auth env metadata continues to map into config/help surfaces. | hasdata | -| manifest.schema.top-level-fields:a2a-gateway | P2 | a2a-gateway | manifest-loader | Manifest top-level fields are represented in target OpenClaw PluginManifest. | defaultConfig @ plugins/a2a-gateway/openclaw.plugin.json | -| manifest.schema.top-level-fields:agentchat | P2 | agentchat | manifest-loader | Manifest top-level fields are represented in target OpenClaw PluginManifest. | displayName @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, homepage @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, icon @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | -| package.compat.plugin-api-range:a2a-gateway | P2 | a2a-gateway | package-loader | Package metadata declares the OpenClaw plugin API range used by the plugin. | plugins/a2a-gateway/package.json | -| package.compat.plugin-api-range:mcp-adapter | P2 | mcp-adapter | package-loader | Package metadata declares the OpenClaw plugin API range used by the plugin. | plugins/mcp-adapter/package.json | -| package.compat.plugin-api-range:wecom | P2 | wecom | package-loader | Package metadata declares the OpenClaw plugin API range used by the plugin. | plugins/wecom/package.json | -| package.entrypoint.build-before-cold-import:agentchat | P2 | agentchat | package-loader | Inspector can build or resolve source aliases before cold importing package entrypoints. | extension:./dist/index.js -> plugins/agentchat/integrations/openclaw-channel/dist/index.js, setupEntry:./dist/setup-entry.js -> plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js | -| package.entrypoint.isolated-dependency-install:a2a-gateway | P2 | a2a-gateway | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @a2a-js/sdk @ plugins/a2a-gateway/package.json, @bufbuild/protobuf @ plugins/a2a-gateway/package.json, @grpc/grpc-js @ plugins/a2a-gateway/package.json, express @ plugins/a2a-gateway/package.json, multicast-dns @ plugins/a2a-gateway/package.json, uuid @ plugins/a2a-gateway/package.json, ws @ plugins/a2a-gateway/package.json | -| package.entrypoint.isolated-dependency-install:agentchat | P2 | agentchat | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @agentchatme/agentchat @ plugins/agentchat/integrations/openclaw-channel/package.json, @sinclair/typebox @ plugins/agentchat/integrations/openclaw-channel/package.json, pino @ plugins/agentchat/integrations/openclaw-channel/package.json, ws @ plugins/agentchat/integrations/openclaw-channel/package.json, zod @ plugins/agentchat/integrations/openclaw-channel/package.json, openclaw @ plugins/agentchat/integrations/openclaw-channel/package.json | -| package.entrypoint.isolated-dependency-install:hasdata | P2 | hasdata | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @sinclair/typebox @ plugins/hasdata/package.json, openclaw @ plugins/hasdata/package.json | -| package.entrypoint.isolated-dependency-install:mcp-adapter | P2 | mcp-adapter | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @modelcontextprotocol/sdk @ plugins/mcp-adapter/package.json | -| package.entrypoint.isolated-dependency-install:wecom | P2 | wecom | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @wecom/aibot-node-sdk @ plugins/wecom/package.json, file-type @ plugins/wecom/package.json, pinyin-pro @ plugins/wecom/package.json, openclaw @ plugins/wecom/package.json, undici @ plugins/wecom/package.json | -| package.entrypoint.typescript-loader:a2a-gateway | P2 | a2a-gateway | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/a2a-gateway/index.ts | -| package.entrypoint.typescript-loader:hasdata | P2 | hasdata | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/hasdata/src/index.ts | -| package.entrypoint.typescript-loader:llm-trace-phoenix | P2 | llm-trace-phoenix | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/llm-trace-phoenix/index.ts | -| package.entrypoint.typescript-loader:mcp-adapter | P2 | mcp-adapter | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/mcp-adapter/index.ts | -| package.metadata.version-alignment:a2a-gateway | P2 | a2a-gateway | package-loader | Package and OpenClaw manifest versions stay aligned for release compatibility reporting. | package:1.4.0, manifest:1.3.0 | -| sdk.import.root-barrel-cold-import:a2a-gateway | P2 | a2a-gateway | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/a2a-gateway/src/types.ts:14 | -| sdk.import.root-barrel-cold-import:llm-trace-phoenix | P2 | llm-trace-phoenix | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12 | -| tool.registration.schema-capture:a2a-gateway | P2 | a2a-gateway | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/a2a-gateway/index.ts:777 | -| tool.registration.schema-capture:mcp-adapter | P2 | mcp-adapter | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/mcp-adapter/index.ts:30 | -| tool.registration.schema-capture:wecom | P2 | wecom | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/wecom/index.js:28, registerTool @ plugins/wecom/index.js:29, registerTool @ plugins/wecom/index.js:33 | -| manifest.compat.provider-auth-env-vars:inworld-tts | P3 | inworld-tts | manifest-loader | Legacy provider auth env metadata continues to map into config/help surfaces. | inworld | -| manifest.compat.provider-auth-env-vars:web-search-plus | P3 | web-search-plus | manifest-loader | Legacy provider auth env metadata continues to map into config/help surfaces. | serper, tavily, linkup, querit, exa, firecrawl, perplexity, you, searxng | -| package.entrypoint.build-before-cold-import:clawmetry | P3 | clawmetry | package-loader | Inspector can build or resolve source aliases before cold importing package entrypoints. | runtimeExtension:./dist/index.js -> plugins/clawmetry/clawhub-plugin/dist/index.js | -| package.entrypoint.isolated-dependency-install:apify | P3 | apify | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @sinclair/typebox @ plugins/apify/package.json, apify-client @ plugins/apify/package.json, openclaw @ plugins/apify/package.json | -| package.entrypoint.isolated-dependency-install:clawmetry | P3 | clawmetry | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | node-fetch @ plugins/clawmetry/clawhub-plugin/package.json | -| package.entrypoint.isolated-dependency-install:codex-app-server | P3 | codex-app-server | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | ws @ plugins/codex-app-server/package.json, openclaw @ plugins/codex-app-server/package.json | -| package.entrypoint.isolated-dependency-install:inworld-tts | P3 | inworld-tts | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | openclaw @ plugins/inworld-tts/package.json | -| package.entrypoint.isolated-dependency-install:web-search-plus | P3 | web-search-plus | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | openclaw @ plugins/web-search-plus/package.json | -| package.entrypoint.typescript-loader:apify | P3 | apify | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/apify/src/index.ts | -| package.entrypoint.typescript-loader:clawmetry | P3 | clawmetry | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/clawmetry/clawhub-plugin/index.ts | -| package.entrypoint.typescript-loader:codex-app-server | P3 | codex-app-server | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/codex-app-server/index.ts | -| package.entrypoint.typescript-loader:inworld-tts | P3 | inworld-tts | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/inworld-tts/index.ts | -| package.entrypoint.typescript-loader:web-search-plus | P3 | web-search-plus | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/web-search-plus/index.ts | -| sdk.import.root-barrel-cold-import:apify | P3 | apify | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/apify/src/cli.ts:2, openclaw/plugin-sdk @ plugins/apify/src/index.ts:1, openclaw/plugin-sdk @ plugins/apify/src/tools/apify-scraper-tool.ts:4 | -| sdk.import.root-barrel-cold-import:codex-app-server | P3 | codex-app-server | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/codex-app-server/index.ts:1, openclaw/plugin-sdk @ plugins/codex-app-server/src/client.ts:6, openclaw/plugin-sdk @ plugins/codex-app-server/src/controller.ts:18, openclaw/plugin-sdk @ plugins/codex-app-server/src/types.ts:1 | -| tool.registration.schema-capture:apify | P3 | apify | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/apify/src/index.ts:13 | -| tool.registration.schema-capture:web-search-plus | P3 | web-search-plus | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/web-search-plus/index.ts:815, registerTool @ plugins/web-search-plus/index.ts:947 | +| ID | Priority | Fixture | Target | Contract | Evidence | +| --------------------------------------------------------------- | -------- | ----------------- | --------------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| api.capture.runtime-registrars:a2a-gateway | P1 | a2a-gateway | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerGatewayMethod @ plugins/a2a-gateway/index.ts:616, registerGatewayMethod @ plugins/a2a-gateway/index.ts:622, registerGatewayMethod @ plugins/a2a-gateway/index.ts:631, registerGatewayMethod @ plugins/a2a-gateway/index.ts:657, registerGatewayMethod @ plugins/a2a-gateway/index.ts:669, registerService @ plugins/a2a-gateway/index.ts:857 | +| api.capture.runtime-registrars:clawmetry | P1 | clawmetry | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerService @ plugins/clawmetry/clawhub-plugin/index.ts:9 | +| api.capture.runtime-registrars:codex-app-server | P1 | codex-app-server | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerCommand @ plugins/codex-app-server/index.ts:48, registerInteractiveHandler @ plugins/codex-app-server/index.ts:29, registerInteractiveHandler @ plugins/codex-app-server/index.ts:38, registerService @ plugins/codex-app-server/index.ts:12 | +| api.capture.runtime-registrars:mcp-adapter | P1 | mcp-adapter | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerService @ plugins/mcp-adapter/index.ts:15 | +| api.capture.runtime-registrars:opik-openclaw | P1 | opik-openclaw | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerService @ plugins/opik-openclaw/index.ts:16 | +| api.capture.runtime-registrars:wecom | P1 | wecom | inspector-capture-api | External inspector capture records service, route, gateway, command, and interactive registrations. | registerChannel @ plugins/wecom/index.js:27, registerHttpRoute @ plugins/wecom/index.js:45 | +| hook.before_tool_call.terminal-block-approval:opik-openclaw | P1 | opik-openclaw | hook-runner | Hook returns preserve terminal, block, and approval semantics. | before_tool_call @ plugins/opik-openclaw/src/service/hooks/tool.ts:34 | +| hook.before_tool_call.terminal-block-approval:wecom | P1 | wecom | hook-runner | Hook returns preserve terminal, block, and approval semantics. | before_tool_call @ plugins/wecom/index.js:65 | +| hook.llm-observer.privacy-payload:llm-trace-phoenix | P1 | llm-trace-phoenix | hook-runner | LLM observer hooks receive documented prompt/output fields with expected redaction behavior. | llm_input @ plugins/llm-trace-phoenix/index.ts:154, llm_output @ plugins/llm-trace-phoenix/index.ts:168 | +| hook.llm-observer.privacy-payload:opik-openclaw | P1 | opik-openclaw | hook-runner | LLM observer hooks receive documented prompt/output fields with expected redaction behavior. | agent_end @ plugins/opik-openclaw/src/service.ts:560, llm_input @ plugins/opik-openclaw/src/service/hooks/llm.ts:39, llm_output @ plugins/opik-openclaw/src/service/hooks/llm.ts:150 | +| sdk.import.package-export-cold-import:codex-app-server | P1 | codex-app-server | sdk-alias | Every observed OpenClaw plugin SDK import remains exported by the target OpenClaw package. | openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:104, openclaw/plugin-sdk/discord @ plugins/codex-app-server/src/controller.ts:106, openclaw/plugin-sdk/telegram-account @ plugins/codex-app-server/src/controller.ts:105 | +| channel.runtime.envelope-config-metadata:agentchat | P2 | agentchat | channel-runtime | Channel setup, message envelope, sender metadata, and config schema remain stable. | defineChannelPluginEntry @ plugins/agentchat/integrations/openclaw-channel/src/channel.ts:333 | +| channel.runtime.envelope-config-metadata:wecom | P2 | wecom | channel-runtime | Channel setup, message envelope, sender metadata, and config schema remain stable. | registerChannel @ plugins/wecom/index.js:27 | +| manifest.compat.channel-env-vars:agentchat | P2 | agentchat | manifest-loader | Legacy channel env metadata continues to map into channel setup/help surfaces. | agentchat | +| manifest.compat.provider-auth-env-vars:hasdata | P2 | hasdata | manifest-loader | Legacy provider auth env metadata continues to map into config/help surfaces. | hasdata | +| manifest.schema.top-level-fields:a2a-gateway | P2 | a2a-gateway | manifest-loader | Manifest top-level fields are represented in target OpenClaw PluginManifest. | defaultConfig @ plugins/a2a-gateway/openclaw.plugin.json | +| manifest.schema.top-level-fields:agentchat | P2 | agentchat | manifest-loader | Manifest top-level fields are represented in target OpenClaw PluginManifest. | displayName @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, homepage @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json, icon @ plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | +| package.compat.plugin-api-range:a2a-gateway | P2 | a2a-gateway | package-loader | Package metadata declares the OpenClaw plugin API range used by the plugin. | plugins/a2a-gateway/package.json | +| package.compat.plugin-api-range:mcp-adapter | P2 | mcp-adapter | package-loader | Package metadata declares the OpenClaw plugin API range used by the plugin. | plugins/mcp-adapter/package.json | +| package.compat.plugin-api-range:wecom | P2 | wecom | package-loader | Package metadata declares the OpenClaw plugin API range used by the plugin. | plugins/wecom/package.json | +| package.entrypoint.build-before-cold-import:agentchat | P2 | agentchat | package-loader | Inspector can build or resolve source aliases before cold importing package entrypoints. | extension:./dist/index.js -> plugins/agentchat/integrations/openclaw-channel/dist/index.js, setupEntry:./dist/setup-entry.js -> plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js | +| package.entrypoint.build-before-cold-import:opik-openclaw | P2 | opik-openclaw | package-loader | Inspector can build or resolve source aliases before cold importing package entrypoints. | runtimeExtension:./dist/index.js -> plugins/opik-openclaw/dist/index.js | +| package.entrypoint.isolated-dependency-install:a2a-gateway | P2 | a2a-gateway | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @a2a-js/sdk @ plugins/a2a-gateway/package.json, @bufbuild/protobuf @ plugins/a2a-gateway/package.json, @grpc/grpc-js @ plugins/a2a-gateway/package.json, express @ plugins/a2a-gateway/package.json, multicast-dns @ plugins/a2a-gateway/package.json, uuid @ plugins/a2a-gateway/package.json, ws @ plugins/a2a-gateway/package.json | +| package.entrypoint.isolated-dependency-install:agentchat | P2 | agentchat | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @agentchatme/agentchat @ plugins/agentchat/integrations/openclaw-channel/package.json, @sinclair/typebox @ plugins/agentchat/integrations/openclaw-channel/package.json, pino @ plugins/agentchat/integrations/openclaw-channel/package.json, ws @ plugins/agentchat/integrations/openclaw-channel/package.json, zod @ plugins/agentchat/integrations/openclaw-channel/package.json, openclaw @ plugins/agentchat/integrations/openclaw-channel/package.json | +| package.entrypoint.isolated-dependency-install:hasdata | P2 | hasdata | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @sinclair/typebox @ plugins/hasdata/package.json, openclaw @ plugins/hasdata/package.json | +| package.entrypoint.isolated-dependency-install:mcp-adapter | P2 | mcp-adapter | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @modelcontextprotocol/sdk @ plugins/mcp-adapter/package.json | +| package.entrypoint.isolated-dependency-install:opik-openclaw | P2 | opik-openclaw | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @clack/prompts @ plugins/opik-openclaw/package.json, opik @ plugins/opik-openclaw/package.json, zod @ plugins/opik-openclaw/package.json, openclaw @ plugins/opik-openclaw/package.json | +| package.entrypoint.isolated-dependency-install:wecom | P2 | wecom | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @wecom/aibot-node-sdk @ plugins/wecom/package.json, file-type @ plugins/wecom/package.json, pinyin-pro @ plugins/wecom/package.json, openclaw @ plugins/wecom/package.json, undici @ plugins/wecom/package.json | +| package.entrypoint.typescript-loader:a2a-gateway | P2 | a2a-gateway | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/a2a-gateway/index.ts | +| package.entrypoint.typescript-loader:hasdata | P2 | hasdata | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/hasdata/src/index.ts | +| package.entrypoint.typescript-loader:llm-trace-phoenix | P2 | llm-trace-phoenix | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/llm-trace-phoenix/index.ts | +| package.entrypoint.typescript-loader:mcp-adapter | P2 | mcp-adapter | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/mcp-adapter/index.ts | +| package.entrypoint.typescript-loader:opik-openclaw | P2 | opik-openclaw | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/opik-openclaw/index.ts | +| package.metadata.version-alignment:a2a-gateway | P2 | a2a-gateway | package-loader | Package and OpenClaw manifest versions stay aligned for release compatibility reporting. | package:1.4.0, manifest:1.3.0 | +| sdk.import.root-barrel-cold-import:a2a-gateway | P2 | a2a-gateway | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/a2a-gateway/src/types.ts:14 | +| sdk.import.root-barrel-cold-import:llm-trace-phoenix | P2 | llm-trace-phoenix | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/llm-trace-phoenix/index.ts:12 | +| sdk.import.root-barrel-cold-import:opik-openclaw | P2 | opik-openclaw | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/index.ts:2, openclaw/plugin-sdk @ plugins/opik-openclaw/src/cli.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/configure.ts:2, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:5, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service.ts:6, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/llm.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/subagent.ts:1, openclaw/plugin-sdk @ plugins/opik-openclaw/src/service/hooks/tool.ts:1 | +| tool.registration.schema-capture:a2a-gateway | P2 | a2a-gateway | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/a2a-gateway/index.ts:777 | +| tool.registration.schema-capture:mcp-adapter | P2 | mcp-adapter | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/mcp-adapter/index.ts:30 | +| tool.registration.schema-capture:wecom | P2 | wecom | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/wecom/index.js:28, registerTool @ plugins/wecom/index.js:29, registerTool @ plugins/wecom/index.js:33 | +| manifest.compat.provider-auth-env-vars:inworld-tts | P3 | inworld-tts | manifest-loader | Legacy provider auth env metadata continues to map into config/help surfaces. | inworld | +| manifest.compat.provider-auth-env-vars:web-search-plus | P3 | web-search-plus | manifest-loader | Legacy provider auth env metadata continues to map into config/help surfaces. | serper, tavily, linkup, querit, exa, firecrawl, perplexity, you, searxng | +| package.entrypoint.build-before-cold-import:clawmetry | P3 | clawmetry | package-loader | Inspector can build or resolve source aliases before cold importing package entrypoints. | runtimeExtension:./dist/index.js -> plugins/clawmetry/clawhub-plugin/dist/index.js | +| package.entrypoint.isolated-dependency-install:apify | P3 | apify | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | @sinclair/typebox @ plugins/apify/package.json, apify-client @ plugins/apify/package.json, openclaw @ plugins/apify/package.json | +| package.entrypoint.isolated-dependency-install:clawmetry | P3 | clawmetry | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | node-fetch @ plugins/clawmetry/clawhub-plugin/package.json | +| package.entrypoint.isolated-dependency-install:codex-app-server | P3 | codex-app-server | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | ws @ plugins/codex-app-server/package.json, openclaw @ plugins/codex-app-server/package.json | +| package.entrypoint.isolated-dependency-install:inworld-tts | P3 | inworld-tts | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | openclaw @ plugins/inworld-tts/package.json | +| package.entrypoint.isolated-dependency-install:web-search-plus | P3 | web-search-plus | package-loader | Inspector installs package dependencies in an isolated workspace before cold import. | openclaw @ plugins/web-search-plus/package.json | +| package.entrypoint.typescript-loader:apify | P3 | apify | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/apify/src/index.ts | +| package.entrypoint.typescript-loader:clawmetry | P3 | clawmetry | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/clawmetry/clawhub-plugin/index.ts | +| package.entrypoint.typescript-loader:codex-app-server | P3 | codex-app-server | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/codex-app-server/index.ts | +| package.entrypoint.typescript-loader:inworld-tts | P3 | inworld-tts | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/inworld-tts/index.ts | +| package.entrypoint.typescript-loader:web-search-plus | P3 | web-search-plus | package-loader | Inspector can compile or load TypeScript source entrypoints before registration capture. | extension:plugins/web-search-plus/index.ts | +| sdk.import.root-barrel-cold-import:apify | P3 | apify | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/apify/src/cli.ts:2, openclaw/plugin-sdk @ plugins/apify/src/index.ts:1, openclaw/plugin-sdk @ plugins/apify/src/tools/apify-scraper-tool.ts:4 | +| sdk.import.root-barrel-cold-import:codex-app-server | P3 | codex-app-server | sdk-alias | Root plugin SDK barrel remains importable or has a machine-readable migration path. | openclaw/plugin-sdk @ plugins/codex-app-server/index.ts:1, openclaw/plugin-sdk @ plugins/codex-app-server/src/client.ts:6, openclaw/plugin-sdk @ plugins/codex-app-server/src/controller.ts:18, openclaw/plugin-sdk @ plugins/codex-app-server/src/types.ts:1 | +| tool.registration.schema-capture:apify | P3 | apify | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/apify/src/index.ts:13 | +| tool.registration.schema-capture:web-search-plus | P3 | web-search-plus | tool-runtime | Registered runtime tools expose stable names, input schemas, and result metadata. | registerTool @ plugins/web-search-plus/index.ts:815, registerTool @ plugins/web-search-plus/index.ts:947 | ## Fixture Seam Inventory -| Fixture | Priority | Seams | Hooks | Registrations | Manifest contracts | -| ----------------- | -------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ------------------ | -| agentchat | high | channel, prompt-mutation, config-schema, websocket, backpressure | - | defineChannelPluginEntry | - | -| wecom | high | channel, streaming, dynamic-agent-routing, message-policy, media | before_prompt_build, before_tool_call, subagent_delivery_target, subagent_ended, subagent_spawned | registerChannel, registerHttpRoute, registerTool | - | -| a2a-gateway | high | gateway-service, http-routes, agent-routing, async-job, auth | - | registerGatewayMethod, registerService, registerTool | - | -| hasdata | high | tool, tool-schema, external-api, cli, config-schema | - | registerTool | tools | -| mcp-adapter | high | dynamic-tool, json-schema, stdio, http, reconnect | - | registerService, registerTool | - | -| llm-trace-phoenix | high | llm-observer, conversation-access, telemetry, external-api | llm_input, llm_output | - | - | -| clawmetry | medium | diagnostics, log-transport, gateway-service, sidecar, telemetry | - | definePluginEntry, registerService | - | -| codex-app-server | medium | process-spawn, unsafe-install, channel-bridge, interactive-ui, sdk-compat | inbound_claim | registerCommand, registerInteractiveHandler, registerService | - | -| web-search-plus | medium | tool, provider-routing, external-api, env-auth, extraction | - | registerTool | - | -| apify | medium | tool, async-job, polling, external-api, catalog-discovery | - | registerCli, registerTool | - | -| inworld-tts | medium | provider-capability, speech, tts, env-auth, runtime-overrides | - | definePluginEntry, registerSpeechProvider | speechProviders | +| Fixture | Priority | Seams | Hooks | Registrations | Manifest contracts | +| ----------------- | -------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ------------------ | +| agentchat | high | channel, prompt-mutation, config-schema, websocket, backpressure | - | defineChannelPluginEntry | - | +| wecom | high | channel, streaming, dynamic-agent-routing, message-policy, media | before_prompt_build, before_tool_call, subagent_delivery_target, subagent_ended, subagent_spawned | registerChannel, registerHttpRoute, registerTool | - | +| a2a-gateway | high | gateway-service, http-routes, agent-routing, async-job, auth | - | registerGatewayMethod, registerService, registerTool | - | +| hasdata | high | tool, tool-schema, external-api, cli, config-schema | - | registerTool | tools | +| mcp-adapter | high | dynamic-tool, json-schema, stdio, http, reconnect | - | registerService, registerTool | - | +| llm-trace-phoenix | high | llm-observer, conversation-access, telemetry, external-api | llm_input, llm_output | - | - | +| opik-openclaw | high | llm-observer, tool-runtime, subagent-routing, diagnostics, cli | after_tool_call, agent_end, before_tool_call, llm_input, llm_output, subagent_delivery_target, subagent_ended, subagent_spawned, subagent_spawning, tool_result_persist | registerCli, registerService | - | +| clawmetry | medium | diagnostics, log-transport, gateway-service, sidecar, telemetry | - | definePluginEntry, registerService | - | +| codex-app-server | medium | process-spawn, unsafe-install, channel-bridge, interactive-ui, sdk-compat | inbound_claim | registerCommand, registerInteractiveHandler, registerService | - | +| web-search-plus | medium | tool, provider-routing, external-api, env-auth, extraction | - | registerTool | - | +| apify | medium | tool, async-job, polling, external-api, catalog-discovery | - | registerCli, registerTool | - | +| inworld-tts | medium | provider-capability, speech, tts, env-auth, runtime-overrides | - | definePluginEntry, registerSpeechProvider | speechProviders | ## Decision Matrix @@ -266,6 +288,13 @@ _none_ | llm-trace-phoenix | inspector-follow-up | cold-import | Compile TypeScript source or run a loader before cold-importing this fixture entrypoint. | plugins/llm-trace-phoenix/index.ts | | llm-trace-phoenix | inspector-follow-up | conversation-access | Add synthetic llm_input/llm_output/agent_end probes before tightening hook payloads or redaction behavior. | llm_input, llm_output | | llm-trace-phoenix | core-compat-adapter | sdk-import | Keep the root SDK barrel stable or expose a machine-readable migration map before removing aliases. | openclaw/plugin-sdk | +| opik-openclaw | inspector-follow-up | cold-import | Run the plugin build or resolve source entrypoint aliases before cold-importing this fixture. | ./dist/index.js | +| opik-openclaw | inspector-follow-up | cold-import | Compile TypeScript source or run a loader before cold-importing this fixture entrypoint. | plugins/opik-openclaw/index.ts | +| opik-openclaw | inspector-follow-up | cold-import | Install runtime dependencies in an isolated workspace before executing this fixture entrypoint. | @clack/prompts, opik, zod, openclaw | +| opik-openclaw | inspector-follow-up | conversation-access | Add synthetic llm_input/llm_output/agent_end probes before tightening hook payloads or redaction behavior. | agent_end, llm_input, llm_output | +| opik-openclaw | core-compat-adapter | sdk-import | Keep the root SDK barrel stable or expose a machine-readable migration map before removing aliases. | openclaw/plugin-sdk | +| opik-openclaw | inspector-follow-up | registration-capture | Expose or mirror a full public API capture shim before treating these runtime-only seams as covered. | registerService | +| opik-openclaw | inspector-follow-up | tool-policy | Probe before_tool_call return shapes before changing tool-call approval or block behavior. | before_tool_call | | clawmetry | inspector-follow-up | cold-import | Run the plugin build or resolve source entrypoint aliases before cold-importing this fixture. | ./dist/index.js | | clawmetry | inspector-follow-up | cold-import | Compile TypeScript source or run a loader before cold-importing this fixture entrypoint. | plugins/clawmetry/clawhub-plugin/index.ts | | clawmetry | inspector-follow-up | cold-import | Install runtime dependencies in an isolated workspace before executing this fixture entrypoint. | node-fetch | @@ -291,76 +320,83 @@ _none_ ## Raw Logs -| Fixture | Code | Level | Message | Evidence | Compat record | -| ----------------- | ----------------------- | ----- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | -| agentchat | seam-inventory | log | observed 0 hooks, 1 registrations, and 0 manifest contracts | registration:defineChannelPluginEntry | - | -| agentchat | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | -| agentchat | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | - | - | -| agentchat | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk/channel-contract, openclaw/plugin-sdk/channel-core, openclaw/plugin-sdk/setup | - | -| agentchat | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | - | -| agentchat | package-metadata | log | selected package metadata for plugin contract checks | plugins/agentchat/integrations/openclaw-channel/package.json, @agentchatme/openclaw, version:0.6.1 | - | -| wecom | seam-inventory | log | observed 5 hooks, 3 registrations, and 0 manifest contracts | hook:before_prompt_build, hook:before_tool_call, hook:subagent_delivery_target, hook:subagent_ended, hook:subagent_spawned, registration:registerChannel, registration:registerHttpRoute, registration:registerTool | - | -| wecom | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | before_prompt_build, before_tool_call, subagent_delivery_target, subagent_ended, subagent_spawned | - | -| wecom | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerChannel, registerHttpRoute, registerTool | - | -| wecom | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk/core, openclaw/plugin-sdk/media-runtime, openclaw/plugin-sdk/setup, openclaw/plugin-sdk/status-helpers | - | -| wecom | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/wecom/openclaw.plugin.json | - | -| wecom | package-metadata | log | selected package metadata for plugin contract checks | plugins/wecom/package.json, @sunnoy/wecom, version:3.0.1 | - | -| a2a-gateway | seam-inventory | log | observed 0 hooks, 3 registrations, and 0 manifest contracts | registration:registerGatewayMethod, registration:registerService, registration:registerTool | - | -| a2a-gateway | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | -| a2a-gateway | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerGatewayMethod, registerService, registerTool | - | -| a2a-gateway | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk | - | -| a2a-gateway | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/a2a-gateway/openclaw.plugin.json | - | -| a2a-gateway | package-metadata | log | selected package metadata for plugin contract checks | plugins/a2a-gateway/package.json, openclaw-a2a-gateway, version:1.4.0 | - | -| hasdata | seam-inventory | log | observed 0 hooks, 1 registrations, and 1 manifest contracts | registration:registerTool, manifestContract:tools | - | -| hasdata | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | -| hasdata | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerTool | - | -| hasdata | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/hasdata/openclaw.plugin.json | - | -| hasdata | package-metadata | log | selected package metadata for plugin contract checks | plugins/hasdata/package.json, @hasdata/hasdata-openclaw-plugin, version:0.1.5 | - | -| hasdata | declarative-contracts | log | fixture declares manifest contracts that can be checked without executing plugin code | tools | - | -| mcp-adapter | seam-inventory | log | observed 0 hooks, 2 registrations, and 0 manifest contracts | registration:registerService, registration:registerTool | - | -| mcp-adapter | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | -| mcp-adapter | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerService, registerTool | - | -| mcp-adapter | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/mcp-adapter/openclaw.plugin.json | - | -| mcp-adapter | package-metadata | log | selected package metadata for plugin contract checks | plugins/mcp-adapter/package.json, openclaw-mcp-adapter, version:0.1.1 | - | -| llm-trace-phoenix | seam-inventory | log | observed 2 hooks, 0 registrations, and 0 manifest contracts | hook:llm_input, hook:llm_output | - | -| llm-trace-phoenix | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | llm_input, llm_output | - | -| llm-trace-phoenix | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | - | - | -| llm-trace-phoenix | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk | - | -| llm-trace-phoenix | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/llm-trace-phoenix/openclaw.plugin.json | - | -| llm-trace-phoenix | package-metadata | log | selected package metadata for plugin contract checks | plugins/llm-trace-phoenix/package.json, llm-trace-phoenix, version:1.0.1 | - | -| clawmetry | seam-inventory | log | observed 0 hooks, 2 registrations, and 0 manifest contracts | registration:definePluginEntry, registration:registerService | - | -| clawmetry | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | -| clawmetry | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerService | - | -| clawmetry | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk/diagnostics-otel, openclaw/plugin-sdk/plugin-entry | - | -| clawmetry | package-metadata | log | selected package metadata for plugin contract checks | plugins/clawmetry/clawhub-plugin/package.json, @clawmetry/openclaw-plugin, version:1.0.0 | - | -| codex-app-server | seam-inventory | log | observed 1 hooks, 3 registrations, and 0 manifest contracts | hook:inbound_claim, registration:registerCommand, registration:registerInteractiveHandler, registration:registerService | - | -| codex-app-server | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | inbound_claim | - | -| codex-app-server | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerCommand, registerInteractiveHandler, registerService | - | -| codex-app-server | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/codex-app-server/openclaw.plugin.json | - | -| codex-app-server | package-metadata | log | selected package metadata for plugin contract checks | plugins/codex-app-server/package.json, openclaw-codex-app-server, version:0.0.0 | - | -| web-search-plus | seam-inventory | log | observed 0 hooks, 1 registrations, and 0 manifest contracts | registration:registerTool | - | -| web-search-plus | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | -| web-search-plus | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerTool | - | -| web-search-plus | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/web-search-plus/openclaw.plugin.json | - | -| web-search-plus | package-metadata | log | selected package metadata for plugin contract checks | plugins/web-search-plus/package.json, web-search-plus-plugin-v2, version:2.2.0 | - | -| apify | seam-inventory | log | observed 0 hooks, 2 registrations, and 0 manifest contracts | registration:registerCli, registration:registerTool | - | -| apify | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | -| apify | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerCli, registerTool | - | -| apify | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk, openclaw/plugin-sdk/core | - | -| apify | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/apify/openclaw.plugin.json | - | -| apify | package-metadata | log | selected package metadata for plugin contract checks | plugins/apify/package.json, @apify/apify-openclaw-plugin, version:0.2.0 | - | -| inworld-tts | seam-inventory | log | observed 0 hooks, 2 registrations, and 1 manifest contracts | registration:definePluginEntry, registration:registerSpeechProvider, manifestContract:speechProviders | - | -| inworld-tts | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | -| inworld-tts | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerSpeechProvider | - | -| inworld-tts | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk/plugin-entry, openclaw/plugin-sdk/secret-input, openclaw/plugin-sdk/speech | - | -| inworld-tts | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/inworld-tts/openclaw.plugin.json | - | -| inworld-tts | package-metadata | log | selected package metadata for plugin contract checks | plugins/inworld-tts/package.json, openclaw-inworld-tts, version:1.0.2 | - | -| inworld-tts | declarative-contracts | log | fixture declares manifest contracts that can be checked without executing plugin code | speechProviders | - | -| agentchat | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | channel-env-vars | channel-env-vars | -| a2a-gateway | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | legacy-root-sdk-import | legacy-root-sdk-import | -| hasdata | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | provider-auth-env-vars | provider-auth-env-vars | -| llm-trace-phoenix | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | legacy-root-sdk-import | legacy-root-sdk-import | -| codex-app-server | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | legacy-root-sdk-import | legacy-root-sdk-import | -| web-search-plus | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | provider-auth-env-vars | provider-auth-env-vars | -| apify | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | legacy-root-sdk-import | legacy-root-sdk-import | -| inworld-tts | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | provider-auth-env-vars | provider-auth-env-vars | +| Fixture | Code | Level | Message | Evidence | Compat record | +| ----------------- | ----------------------- | ----- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | +| agentchat | seam-inventory | log | observed 0 hooks, 1 registrations, and 0 manifest contracts | registration:defineChannelPluginEntry | - | +| agentchat | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | +| agentchat | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | - | - | +| agentchat | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk/channel-contract, openclaw/plugin-sdk/channel-core, openclaw/plugin-sdk/setup | - | +| agentchat | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/agentchat/integrations/openclaw-channel/openclaw.plugin.json | - | +| agentchat | package-metadata | log | selected package metadata for plugin contract checks | plugins/agentchat/integrations/openclaw-channel/package.json, @agentchatme/openclaw, version:0.6.1 | - | +| wecom | seam-inventory | log | observed 5 hooks, 3 registrations, and 0 manifest contracts | hook:before_prompt_build, hook:before_tool_call, hook:subagent_delivery_target, hook:subagent_ended, hook:subagent_spawned, registration:registerChannel, registration:registerHttpRoute, registration:registerTool | - | +| wecom | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | before_prompt_build, before_tool_call, subagent_delivery_target, subagent_ended, subagent_spawned | - | +| wecom | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerChannel, registerHttpRoute, registerTool | - | +| wecom | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk/core, openclaw/plugin-sdk/media-runtime, openclaw/plugin-sdk/setup, openclaw/plugin-sdk/status-helpers | - | +| wecom | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/wecom/openclaw.plugin.json | - | +| wecom | package-metadata | log | selected package metadata for plugin contract checks | plugins/wecom/package.json, @sunnoy/wecom, version:3.0.1 | - | +| a2a-gateway | seam-inventory | log | observed 0 hooks, 3 registrations, and 0 manifest contracts | registration:registerGatewayMethod, registration:registerService, registration:registerTool | - | +| a2a-gateway | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | +| a2a-gateway | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerGatewayMethod, registerService, registerTool | - | +| a2a-gateway | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk | - | +| a2a-gateway | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/a2a-gateway/openclaw.plugin.json | - | +| a2a-gateway | package-metadata | log | selected package metadata for plugin contract checks | plugins/a2a-gateway/package.json, openclaw-a2a-gateway, version:1.4.0 | - | +| hasdata | seam-inventory | log | observed 0 hooks, 1 registrations, and 1 manifest contracts | registration:registerTool, manifestContract:tools | - | +| hasdata | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | +| hasdata | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerTool | - | +| hasdata | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/hasdata/openclaw.plugin.json | - | +| hasdata | package-metadata | log | selected package metadata for plugin contract checks | plugins/hasdata/package.json, @hasdata/hasdata-openclaw-plugin, version:0.1.5 | - | +| hasdata | declarative-contracts | log | fixture declares manifest contracts that can be checked without executing plugin code | tools | - | +| mcp-adapter | seam-inventory | log | observed 0 hooks, 2 registrations, and 0 manifest contracts | registration:registerService, registration:registerTool | - | +| mcp-adapter | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | +| mcp-adapter | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerService, registerTool | - | +| mcp-adapter | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/mcp-adapter/openclaw.plugin.json | - | +| mcp-adapter | package-metadata | log | selected package metadata for plugin contract checks | plugins/mcp-adapter/package.json, openclaw-mcp-adapter, version:0.1.1 | - | +| llm-trace-phoenix | seam-inventory | log | observed 2 hooks, 0 registrations, and 0 manifest contracts | hook:llm_input, hook:llm_output | - | +| llm-trace-phoenix | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | llm_input, llm_output | - | +| llm-trace-phoenix | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | - | - | +| llm-trace-phoenix | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk | - | +| llm-trace-phoenix | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/llm-trace-phoenix/openclaw.plugin.json | - | +| llm-trace-phoenix | package-metadata | log | selected package metadata for plugin contract checks | plugins/llm-trace-phoenix/package.json, llm-trace-phoenix, version:1.0.1 | - | +| opik-openclaw | seam-inventory | log | observed 10 hooks, 2 registrations, and 0 manifest contracts | hook:after_tool_call, hook:agent_end, hook:before_tool_call, hook:llm_input, hook:llm_output, hook:subagent_delivery_target, hook:subagent_ended, hook:subagent_spawned, hook:subagent_spawning, hook:tool_result_persist, registration:registerCli, registration:registerService | - | +| opik-openclaw | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | after_tool_call, agent_end, before_tool_call, llm_input, llm_output, subagent_delivery_target, subagent_ended, subagent_spawned, subagent_spawning, tool_result_persist | - | +| opik-openclaw | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerCli, registerService | - | +| opik-openclaw | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk | - | +| opik-openclaw | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/opik-openclaw/openclaw.plugin.json | - | +| opik-openclaw | package-metadata | log | selected package metadata for plugin contract checks | plugins/opik-openclaw/package.json, @opik/opik-openclaw, version:0.2.14 | - | +| clawmetry | seam-inventory | log | observed 0 hooks, 2 registrations, and 0 manifest contracts | registration:definePluginEntry, registration:registerService | - | +| clawmetry | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | +| clawmetry | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerService | - | +| clawmetry | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk/diagnostics-otel, openclaw/plugin-sdk/plugin-entry | - | +| clawmetry | package-metadata | log | selected package metadata for plugin contract checks | plugins/clawmetry/clawhub-plugin/package.json, @clawmetry/openclaw-plugin, version:1.0.0 | - | +| codex-app-server | seam-inventory | log | observed 1 hooks, 3 registrations, and 0 manifest contracts | hook:inbound_claim, registration:registerCommand, registration:registerInteractiveHandler, registration:registerService | - | +| codex-app-server | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | inbound_claim | - | +| codex-app-server | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerCommand, registerInteractiveHandler, registerService | - | +| codex-app-server | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/codex-app-server/openclaw.plugin.json | - | +| codex-app-server | package-metadata | log | selected package metadata for plugin contract checks | plugins/codex-app-server/package.json, openclaw-codex-app-server, version:0.0.0 | - | +| web-search-plus | seam-inventory | log | observed 0 hooks, 1 registrations, and 0 manifest contracts | registration:registerTool | - | +| web-search-plus | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | +| web-search-plus | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerTool | - | +| web-search-plus | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/web-search-plus/openclaw.plugin.json | - | +| web-search-plus | package-metadata | log | selected package metadata for plugin contract checks | plugins/web-search-plus/package.json, web-search-plus-plugin-v2, version:2.2.0 | - | +| apify | seam-inventory | log | observed 0 hooks, 2 registrations, and 0 manifest contracts | registration:registerCli, registration:registerTool | - | +| apify | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | +| apify | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerCli, registerTool | - | +| apify | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk, openclaw/plugin-sdk/core | - | +| apify | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/apify/openclaw.plugin.json | - | +| apify | package-metadata | log | selected package metadata for plugin contract checks | plugins/apify/package.json, @apify/apify-openclaw-plugin, version:0.2.0 | - | +| inworld-tts | seam-inventory | log | observed 0 hooks, 2 registrations, and 1 manifest contracts | registration:definePluginEntry, registration:registerSpeechProvider, manifestContract:speechProviders | - | +| inworld-tts | hook-names-present | log | all observed hooks exist in the target OpenClaw hook registry | - | - | +| inworld-tts | api-registrars-present | log | all observed api.register* calls exist in the target OpenClaw plugin API builder | registerSpeechProvider | - | +| inworld-tts | sdk-exports-present | log | all observed plugin SDK imports exist in target OpenClaw package exports | openclaw/plugin-sdk/plugin-entry, openclaw/plugin-sdk/secret-input, openclaw/plugin-sdk/speech | - | +| inworld-tts | manifest-fields-checked | log | plugin manifest fields were compared with target OpenClaw manifest types | plugins/inworld-tts/openclaw.plugin.json | - | +| inworld-tts | package-metadata | log | selected package metadata for plugin contract checks | plugins/inworld-tts/package.json, openclaw-inworld-tts, version:1.0.2 | - | +| inworld-tts | declarative-contracts | log | fixture declares manifest contracts that can be checked without executing plugin code | speechProviders | - | +| agentchat | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | channel-env-vars | channel-env-vars | +| a2a-gateway | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | legacy-root-sdk-import | legacy-root-sdk-import | +| hasdata | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | provider-auth-env-vars | provider-auth-env-vars | +| llm-trace-phoenix | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | legacy-root-sdk-import | legacy-root-sdk-import | +| opik-openclaw | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | legacy-root-sdk-import | legacy-root-sdk-import | +| codex-app-server | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | legacy-root-sdk-import | legacy-root-sdk-import | +| web-search-plus | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | provider-auth-env-vars | provider-auth-env-vars | +| apify | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | legacy-root-sdk-import | legacy-root-sdk-import | +| inworld-tts | compat-record-present | log | target OpenClaw checkout has a matching compat registry record | provider-auth-env-vars | provider-auth-env-vars | diff --git a/reports/crabpot-runtime-profile.json b/reports/crabpot-runtime-profile.json index c98cb38..3c2f726 100644 --- a/reports/crabpot-runtime-profile.json +++ b/reports/crabpot-runtime-profile.json @@ -1,6 +1,6 @@ { "generatedAt": "deterministic", - "runs": 1, + "runs": 3, "targetOpenClaw": { "status": "ok", "configuredPath": "../openclaw", @@ -8,24 +8,24 @@ "hookNames": 31, "apiRegistrars": 40, "capturedRegistrars": 18, - "sdkExports": 306, + "sdkExports": 307, "manifestFields": 32, "manifestContractFields": 16 }, "fixtureInventory": { - "fixtures": 11, - "sourceFiles": 181, - "observedHooks": 8, - "observedRegistrations": 20, - "observedSdkImports": 19, - "contractProbes": 50, - "issueFindings": 51 + "fixtures": 12, + "sourceFiles": 201, + "observedHooks": 18, + "observedRegistrations": 22, + "observedSdkImports": 20, + "contractProbes": 57, + "issueFindings": 58 }, "summary": { "commandCount": 7, - "p50WallMs": 219, - "p95WallMs": 236, - "maxPeakRssMb": 66.7 + "p50WallMs": 742, + "p95WallMs": 1273, + "maxPeakRssMb": 65.1 }, "commands": [ { @@ -34,22 +34,36 @@ "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node -e 0", "samples": [ { - "wallMs": 130, - "peakRssMb": 2.5, + "wallMs": 1134, + "peakRssMb": 0.4, + "exitCode": 0, + "stdoutPreview": "", + "stderrPreview": "" + }, + { + "wallMs": 697, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "", + "stderrPreview": "" + }, + { + "wallMs": 917, + "peakRssMb": 0, "exitCode": 0, "stdoutPreview": "", "stderrPreview": "" } ], "wallMs": { - "min": 130, - "median": 130, - "max": 130 + "min": 697, + "median": 917, + "max": 1134 }, "peakRssMb": { - "min": 2.5, - "median": 2.5, - "max": 2.5 + "min": 0, + "median": 0, + "max": 0.4 }, "exitCodes": [ 0 @@ -61,22 +75,36 @@ "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node scripts/inspect-fixtures.mjs --check", "samples": [ { - "wallMs": 236, - "peakRssMb": 61.8, + "wallMs": 1273, + "peakRssMb": 51.8, "exitCode": 0, - "stdoutPreview": "│ 10 │ 'inworld-tts' │ 'ok' │ '' │ 'definePluginEntry,registerSpeechProvider' │ 'speechProviders' │\n└─────────┴─────────────────────┴────────┴─────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┴───────────────────┘", + "stdoutPreview": "│ 11 │ 'inworld-tts' │ 'ok' │ '' │ 'definePluginEntry,registerSpeechProvider' │ 'speechProviders' │\n└─────────┴─────────────────────┴────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┴───────────────────┘", + "stderrPreview": "" + }, + { + "wallMs": 487, + "peakRssMb": 43.1, + "exitCode": 0, + "stdoutPreview": "│ 11 │ 'inworld-tts' │ 'ok' │ '' │ 'definePluginEntry,registerSpeechProvider' │ 'speechProviders' │\n└─────────┴─────────────────────┴────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┴───────────────────┘", + "stderrPreview": "" + }, + { + "wallMs": 1397, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "│ 11 │ 'inworld-tts' │ 'ok' │ '' │ 'definePluginEntry,registerSpeechProvider' │ 'speechProviders' │\n└─────────┴─────────────────────┴────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────┴───────────────────┘", "stderrPreview": "" } ], "wallMs": { - "min": 236, - "median": 236, - "max": 236 + "min": 487, + "median": 1273, + "max": 1397 }, "peakRssMb": { - "min": 61.8, - "median": 61.8, - "max": 61.8 + "min": 0, + "median": 43.1, + "max": 51.8 }, "exitCodes": [ 0 @@ -88,22 +116,36 @@ "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node scripts/generate-report.mjs --check", "samples": [ { - "wallMs": 226, - "peakRssMb": 60.5, + "wallMs": 1956, + "peakRssMb": 0, "exitCode": 0, - "stdoutPreview": "crabpot report check: pass; 0 breakages, 16 warnings, 35 suggestions, 51 issues\nreport targets: /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.md, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.json, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-issues.md", + "stdoutPreview": "crabpot report check: pass; 0 breakages, 18 warnings, 40 suggestions, 58 issues\nreport targets: /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.md, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.json, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-issues.md", + "stderrPreview": "" + }, + { + "wallMs": 517, + "peakRssMb": 65.1, + "exitCode": 0, + "stdoutPreview": "crabpot report check: pass; 0 breakages, 18 warnings, 40 suggestions, 58 issues\nreport targets: /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.md, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.json, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-issues.md", + "stderrPreview": "" + }, + { + "wallMs": 424, + "peakRssMb": 63.5, + "exitCode": 0, + "stdoutPreview": "crabpot report check: pass; 0 breakages, 18 warnings, 40 suggestions, 58 issues\nreport targets: /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.md, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-report.json, /Users/vincentkoc/GIT/_Perso/crabpot/reports/crabpot-issues.md", "stderrPreview": "" } ], "wallMs": { - "min": 226, - "median": 226, - "max": 226 + "min": 424, + "median": 517, + "max": 1956 }, "peakRssMb": { - "min": 60.5, - "median": 60.5, - "max": 60.5 + "min": 0, + "median": 63.5, + "max": 65.1 }, "exitCodes": [ 0 @@ -115,22 +157,36 @@ "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node scripts/capture-contracts.mjs --check", "samples": [ { - "wallMs": 219, - "peakRssMb": 66.7, + "wallMs": 483, + "peakRssMb": 64.1, "exitCode": 0, - "stdoutPreview": "contract capture: 28 registrations, 8 hooks, 32 sdk imports, 50 issue probes", + "stdoutPreview": "contract capture: 30 registrations, 18 hooks, 41 sdk imports, 57 issue probes", + "stderrPreview": "" + }, + { + "wallMs": 522, + "peakRssMb": 63.6, + "exitCode": 0, + "stdoutPreview": "contract capture: 30 registrations, 18 hooks, 41 sdk imports, 57 issue probes", + "stderrPreview": "" + }, + { + "wallMs": 471, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "contract capture: 30 registrations, 18 hooks, 41 sdk imports, 57 issue probes", "stderrPreview": "" } ], "wallMs": { - "min": 219, - "median": 219, - "max": 219 + "min": 471, + "median": 483, + "max": 522 }, "peakRssMb": { - "min": 66.7, - "median": 66.7, - "max": 66.7 + "min": 0, + "median": 63.6, + "max": 64.1 }, "exitCodes": [ 0 @@ -142,22 +198,36 @@ "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node scripts/synthetic-probes.mjs --check", "samples": [ { - "wallMs": 169, - "peakRssMb": 51.1, + "wallMs": 821, + "peakRssMb": 0, "exitCode": 0, - "stdoutPreview": "synthetic probes: 36 ready, 0 blocked, 36 total", + "stdoutPreview": "synthetic probes: 48 ready, 0 blocked, 48 total", + "stderrPreview": "" + }, + { + "wallMs": 874, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "synthetic probes: 48 ready, 0 blocked, 48 total", + "stderrPreview": "" + }, + { + "wallMs": 2457, + "peakRssMb": 0, + "exitCode": 0, + "stdoutPreview": "synthetic probes: 48 ready, 0 blocked, 48 total", "stderrPreview": "" } ], "wallMs": { - "min": 169, - "median": 169, - "max": 169 + "min": 821, + "median": 874, + "max": 2457 }, "peakRssMb": { - "min": 51.1, - "median": 51.1, - "max": 51.1 + "min": 0, + "median": 0, + "max": 0 }, "exitCodes": [ 0 @@ -169,22 +239,36 @@ "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node scripts/cold-import-readiness.mjs --check", "samples": [ { - "wallMs": 223, - "peakRssMb": 48, + "wallMs": 444, + "peakRssMb": 60.8, "exitCode": 0, - "stdoutPreview": "cold import readiness: 13 entrypoints, 0 ready, 13 blocked", + "stdoutPreview": "cold import readiness: 15 entrypoints, 0 ready, 15 blocked", + "stderrPreview": "" + }, + { + "wallMs": 364, + "peakRssMb": 51.4, + "exitCode": 0, + "stdoutPreview": "cold import readiness: 15 entrypoints, 0 ready, 15 blocked", + "stderrPreview": "" + }, + { + "wallMs": 604, + "peakRssMb": 57.6, + "exitCode": 0, + "stdoutPreview": "cold import readiness: 15 entrypoints, 0 ready, 15 blocked", "stderrPreview": "" } ], "wallMs": { - "min": 223, - "median": 223, - "max": 223 + "min": 364, + "median": 444, + "max": 604 }, "peakRssMb": { - "min": 48, - "median": 48, - "max": 48 + "min": 51.4, + "median": 57.6, + "max": 60.8 }, "exitCodes": [ 0 @@ -196,22 +280,36 @@ "command": "/opt/homebrew/Cellar/node/25.9.0_2/bin/node scripts/workspace-plan.mjs --check", "samples": [ { - "wallMs": 184, - "peakRssMb": 66.3, + "wallMs": 369, + "peakRssMb": 0.3, "exitCode": 0, - "stdoutPreview": "workspace plan: 13 entrypoints, 9 installs, 3 builds, 13 captures, 13 synthetic probes, 13 artifact dirs", + "stdoutPreview": "workspace plan: 15 entrypoints, 10 installs, 4 builds, 15 captures, 15 synthetic probes, 15 artifact dirs", + "stderrPreview": "" + }, + { + "wallMs": 1554, + "peakRssMb": 64, + "exitCode": 0, + "stdoutPreview": "workspace plan: 15 entrypoints, 10 installs, 4 builds, 15 captures, 15 synthetic probes, 15 artifact dirs", + "stderrPreview": "" + }, + { + "wallMs": 742, + "peakRssMb": 63.3, + "exitCode": 0, + "stdoutPreview": "workspace plan: 15 entrypoints, 10 installs, 4 builds, 15 captures, 15 synthetic probes, 15 artifact dirs", "stderrPreview": "" } ], "wallMs": { - "min": 184, - "median": 184, - "max": 184 + "min": 369, + "median": 742, + "max": 1554 }, "peakRssMb": { - "min": 66.3, - "median": 66.3, - "max": 66.3 + "min": 0.3, + "median": 63.3, + "max": 64 }, "exitCodes": [ 0 diff --git a/reports/crabpot-runtime-profile.md b/reports/crabpot-runtime-profile.md index bd0c475..e16f51c 100644 --- a/reports/crabpot-runtime-profile.md +++ b/reports/crabpot-runtime-profile.md @@ -1,16 +1,16 @@ # Crabpot Runtime Profile Generated: deterministic -Samples per command: 1 +Samples per command: 3 ## Summary | Metric | Value | | ------------- | ------- | | Commands | 7 | -| P50 wall time | 219 ms | -| P95 wall time | 236 ms | -| Max peak RSS | 66.7 MB | +| P50 wall time | 742 ms | +| P95 wall time | 1273 ms | +| Max peak RSS | 65.1 MB | ## Target OpenClaw Registry Surface @@ -22,7 +22,7 @@ Samples per command: 1 | hookNames | 31 | | apiRegistrars | 40 | | capturedRegistrars | 18 | -| sdkExports | 306 | +| sdkExports | 307 | | manifestFields | 32 | | manifestContractFields | 16 | @@ -30,22 +30,22 @@ Samples per command: 1 | Metric | Value | | --------------------- | ----- | -| fixtures | 11 | -| sourceFiles | 181 | -| observedHooks | 8 | -| observedRegistrations | 20 | -| observedSdkImports | 19 | -| contractProbes | 50 | -| issueFindings | 51 | +| fixtures | 12 | +| sourceFiles | 201 | +| observedHooks | 18 | +| observedRegistrations | 22 | +| observedSdkImports | 20 | +| contractProbes | 57 | +| issueFindings | 58 | ## Boot And Memory Samples | ID | Label | Median wall | Max wall | Max peak RSS | Exit codes | | ---------------------- | ----------------------------------------------- | ----------- | -------- | ------------ | ---------- | -| node-boot | Node boot | 130 ms | 130 ms | 2.5 MB | 0 | -| fixture-inspection | Fixture inspection | 236 ms | 236 ms | 61.8 MB | 0 | -| compat-report-registry | Compatibility report plus target registry parse | 226 ms | 226 ms | 60.5 MB | 0 | -| contract-capture | Contract capture inventory | 219 ms | 219 ms | 66.7 MB | 0 | -| synthetic-probe-plan | Synthetic probe plan | 169 ms | 169 ms | 51.1 MB | 0 | -| cold-import-readiness | Cold import readiness | 223 ms | 223 ms | 48 MB | 0 | -| workspace-plan | Workspace execution plan | 184 ms | 184 ms | 66.3 MB | 0 | +| node-boot | Node boot | 917 ms | 1134 ms | 0.4 MB | 0 | +| fixture-inspection | Fixture inspection | 1273 ms | 1397 ms | 51.8 MB | 0 | +| compat-report-registry | Compatibility report plus target registry parse | 517 ms | 1956 ms | 65.1 MB | 0 | +| contract-capture | Contract capture inventory | 483 ms | 522 ms | 64.1 MB | 0 | +| synthetic-probe-plan | Synthetic probe plan | 874 ms | 2457 ms | 0 MB | 0 | +| cold-import-readiness | Cold import readiness | 444 ms | 604 ms | 60.8 MB | 0 | +| workspace-plan | Workspace execution plan | 742 ms | 1554 ms | 64 MB | 0 | diff --git a/reports/crabpot-synthetic-probes.json b/reports/crabpot-synthetic-probes.json index 1d9b79e..be12e3b 100644 --- a/reports/crabpot-synthetic-probes.json +++ b/reports/crabpot-synthetic-probes.json @@ -1,14 +1,14 @@ { "generatedAt": "deterministic", "summary": { - "fixtureCount": 11, - "probeCount": 36, - "hookProbeCount": 8, - "registrationProbeCount": 28, - "readyCount": 36, + "fixtureCount": 12, + "probeCount": 48, + "hookProbeCount": 18, + "registrationProbeCount": 30, + "readyCount": 48, "blockedCount": 0, - "directExecutionCount": 19, - "optInExecutionCount": 6, + "directExecutionCount": 20, + "optInExecutionCount": 7, "metadataOnlyCount": 3 }, "probes": [ @@ -202,6 +202,254 @@ }, "source": "plugins/llm-trace-phoenix/index.ts:168" }, + { + "id": "hook.after_tool_call:opik-openclaw:plugins-opik-openclaw-src-service-hooks-tool-ts-100", + "fixture": "opik-openclaw", + "kind": "hook", + "seam": "after_tool_call", + "status": "ready", + "blocker": null, + "assertions": [ + "hook payload and return value are captured" + ], + "syntheticEvent": { + "hook": "after_tool_call", + "fixture": "opik-openclaw" + }, + "syntheticContext": { + "hook": "after_tool_call", + "fixture": "opik-openclaw" + }, + "source": "plugins/opik-openclaw/src/service/hooks/tool.ts:100" + }, + { + "id": "hook.agent_end:opik-openclaw:plugins-opik-openclaw-src-service-ts-560", + "fixture": "opik-openclaw", + "kind": "hook", + "seam": "agent_end", + "status": "ready", + "blocker": null, + "assertions": [ + "final conversation payload is redacted as expected", + "agent id and run metadata are present" + ], + "syntheticEvent": { + "runId": "run-fixture", + "agentId": "agent-fixture", + "conversationId": "conversation-fixture", + "status": "completed", + "transcript": [ + { + "role": "assistant", + "content": "[redacted fixture output]" + } + ] + }, + "syntheticContext": { + "runId": "run-fixture", + "agentId": "agent-fixture", + "sessionId": "session-fixture", + "channelId": "fixture-channel" + }, + "source": "plugins/opik-openclaw/src/service.ts:560" + }, + { + "id": "hook.before_tool_call:opik-openclaw:plugins-opik-openclaw-src-service-hooks-tool-ts-34", + "fixture": "opik-openclaw", + "kind": "hook", + "seam": "before_tool_call", + "status": "ready", + "blocker": null, + "assertions": [ + "block/allow return shapes are preserved", + "terminal and approval metadata are present" + ], + "syntheticEvent": { + "runId": "run-fixture", + "toolName": "fixture_tool", + "params": {}, + "toolCallId": "call-fixture" + }, + "syntheticContext": { + "runId": "run-fixture", + "agentId": "agent-fixture", + "sessionId": "session-fixture", + "toolName": "fixture_tool", + "toolCallId": "call-fixture" + }, + "source": "plugins/opik-openclaw/src/service/hooks/tool.ts:34" + }, + { + "id": "hook.llm_input:opik-openclaw:plugins-opik-openclaw-src-service-hooks-llm-ts-39", + "fixture": "opik-openclaw", + "kind": "hook", + "seam": "llm_input", + "status": "ready", + "blocker": null, + "assertions": [ + "model input payload is redacted as expected", + "model and agent metadata are present" + ], + "syntheticEvent": { + "agentId": "agent-fixture", + "model": "gpt-5.4", + "messages": [ + { + "role": "user", + "content": "[redacted fixture input]" + } + ] + }, + "syntheticContext": { + "runId": "run-fixture", + "agentId": "agent-fixture", + "sessionId": "session-fixture", + "channelId": "fixture-channel" + }, + "source": "plugins/opik-openclaw/src/service/hooks/llm.ts:39" + }, + { + "id": "hook.llm_output:opik-openclaw:plugins-opik-openclaw-src-service-hooks-llm-ts-150", + "fixture": "opik-openclaw", + "kind": "hook", + "seam": "llm_output", + "status": "ready", + "blocker": null, + "assertions": [ + "model output payload is redacted as expected", + "model and agent metadata are present" + ], + "syntheticEvent": { + "agentId": "agent-fixture", + "model": "gpt-5.4", + "output": { + "role": "assistant", + "content": "[redacted fixture output]" + } + }, + "syntheticContext": { + "runId": "run-fixture", + "agentId": "agent-fixture", + "sessionId": "session-fixture", + "channelId": "fixture-channel" + }, + "source": "plugins/opik-openclaw/src/service/hooks/llm.ts:150" + }, + { + "id": "hook.subagent_delivery_target:opik-openclaw:plugins-opik-openclaw-src-service-hooks-subagent-ts-147", + "fixture": "opik-openclaw", + "kind": "hook", + "seam": "subagent_delivery_target", + "status": "ready", + "blocker": null, + "assertions": [ + "target routing result is preserved", + "parent/subagent metadata are present" + ], + "syntheticEvent": { + "childSessionKey": "child-session", + "agentId": "agent-child", + "label": "fixture child", + "mode": "run", + "requester": { + "channel": "fixture-channel", + "accountId": "fixture-account" + } + }, + "syntheticContext": { + "runId": "run-fixture", + "childSessionKey": "child-session", + "requesterSessionKey": "parent-session" + }, + "source": "plugins/opik-openclaw/src/service/hooks/subagent.ts:147" + }, + { + "id": "hook.subagent_ended:opik-openclaw:plugins-opik-openclaw-src-service-hooks-subagent-ts-222", + "fixture": "opik-openclaw", + "kind": "hook", + "seam": "subagent_ended", + "status": "ready", + "blocker": null, + "assertions": [ + "subagent completion payload is preserved", + "status metadata is present" + ], + "syntheticEvent": { + "childSessionKey": "child-session", + "agentId": "agent-child", + "status": "completed" + }, + "syntheticContext": { + "runId": "run-fixture", + "childSessionKey": "child-session", + "requesterSessionKey": "parent-session" + }, + "source": "plugins/opik-openclaw/src/service/hooks/subagent.ts:222" + }, + { + "id": "hook.subagent_spawned:opik-openclaw:plugins-opik-openclaw-src-service-hooks-subagent-ts-89", + "fixture": "opik-openclaw", + "kind": "hook", + "seam": "subagent_spawned", + "status": "ready", + "blocker": null, + "assertions": [ + "spawn payload is preserved", + "parent/subagent metadata are present" + ], + "syntheticEvent": { + "childSessionKey": "child-session", + "agentId": "agent-child", + "label": "fixture child", + "mode": "run" + }, + "syntheticContext": { + "runId": "run-fixture", + "childSessionKey": "child-session", + "requesterSessionKey": "parent-session" + }, + "source": "plugins/opik-openclaw/src/service/hooks/subagent.ts:89" + }, + { + "id": "hook.subagent_spawning:opik-openclaw:plugins-opik-openclaw-src-service-hooks-subagent-ts-38", + "fixture": "opik-openclaw", + "kind": "hook", + "seam": "subagent_spawning", + "status": "ready", + "blocker": null, + "assertions": [ + "hook payload and return value are captured" + ], + "syntheticEvent": { + "hook": "subagent_spawning", + "fixture": "opik-openclaw" + }, + "syntheticContext": { + "hook": "subagent_spawning", + "fixture": "opik-openclaw" + }, + "source": "plugins/opik-openclaw/src/service/hooks/subagent.ts:38" + }, + { + "id": "hook.tool_result_persist:opik-openclaw:plugins-opik-openclaw-src-service-ts-541", + "fixture": "opik-openclaw", + "kind": "hook", + "seam": "tool_result_persist", + "status": "ready", + "blocker": null, + "assertions": [ + "hook payload and return value are captured" + ], + "syntheticEvent": { + "hook": "tool_result_persist", + "fixture": "opik-openclaw" + }, + "syntheticContext": { + "hook": "tool_result_persist", + "fixture": "opik-openclaw" + }, + "source": "plugins/opik-openclaw/src/service.ts:541" + }, { "id": "hook.inbound_claim:codex-app-server:plugins-codex-app-server-index-ts-25", "fixture": "codex-app-server", @@ -711,6 +959,66 @@ }, "source": "plugins/mcp-adapter/index.ts:30" }, + { + "id": "registration.registerCli:opik-openclaw:plugins-opik-openclaw-index-ts-17", + "fixture": "opik-openclaw", + "kind": "registration", + "seam": "registerCli", + "status": "ready", + "blocker": null, + "assertions": [ + "command name is stable", + "argument schema is captured" + ], + "syntheticArguments": [ + { + "name": "fixture-command", + "args": [ + { + "name": "input", + "type": "string" + } + ] + } + ], + "execution": { + "mode": "direct", + "callableProperties": [ + "handler", + "run", + "execute" + ] + }, + "source": "plugins/opik-openclaw/index.ts:17" + }, + { + "id": "registration.registerService:opik-openclaw:plugins-opik-openclaw-index-ts-16", + "fixture": "opik-openclaw", + "kind": "registration", + "seam": "registerService", + "status": "ready", + "blocker": null, + "assertions": [ + "service id is stable", + "start/stop lifecycle handlers are captured" + ], + "syntheticArguments": [ + { + "name": "fixture-service", + "start": "function", + "stop": "function" + } + ], + "execution": { + "mode": "lifecycle-opt-in", + "callableProperties": [ + "start", + "stop" + ], + "option": "includeLifecycle" + }, + "source": "plugins/opik-openclaw/index.ts:16" + }, { "id": "registration.definePluginEntry:clawmetry:plugins-clawmetry-clawhub-plugin-index-ts-4", "fixture": "clawmetry", diff --git a/reports/crabpot-synthetic-probes.md b/reports/crabpot-synthetic-probes.md index 8a10017..59fbf81 100644 --- a/reports/crabpot-synthetic-probes.md +++ b/reports/crabpot-synthetic-probes.md @@ -6,14 +6,14 @@ Generated: deterministic | Metric | Value | | ------------------- | ----- | -| Fixtures | 11 | -| Probes | 36 | -| Hook probes | 8 | -| Registration probes | 28 | -| Ready | 36 | +| Fixtures | 12 | +| Probes | 48 | +| Hook probes | 18 | +| Registration probes | 30 | +| Ready | 48 | | Blocked | 0 | -| Direct execution | 19 | -| Opt-in execution | 6 | +| Direct execution | 20 | +| Opt-in execution | 7 | | Metadata-only | 3 | ## Probe Inventory @@ -27,6 +27,16 @@ Generated: deterministic | wecom | hook | subagent_spawned | ready | hook-direct | plugins/wecom/index.js:62 | spawn payload is preserved; parent/subagent metadata are present | | llm-trace-phoenix | hook | llm_input | ready | hook-direct | plugins/llm-trace-phoenix/index.ts:154 | model input payload is redacted as expected; model and agent metadata are present | | llm-trace-phoenix | hook | llm_output | ready | hook-direct | plugins/llm-trace-phoenix/index.ts:168 | model output payload is redacted as expected; model and agent metadata are present | +| opik-openclaw | hook | after_tool_call | ready | hook-direct | plugins/opik-openclaw/src/service/hooks/tool.ts:100 | hook payload and return value are captured | +| opik-openclaw | hook | agent_end | ready | hook-direct | plugins/opik-openclaw/src/service.ts:560 | final conversation payload is redacted as expected; agent id and run metadata are present | +| opik-openclaw | hook | before_tool_call | ready | hook-direct | plugins/opik-openclaw/src/service/hooks/tool.ts:34 | block/allow return shapes are preserved; terminal and approval metadata are present | +| opik-openclaw | hook | llm_input | ready | hook-direct | plugins/opik-openclaw/src/service/hooks/llm.ts:39 | model input payload is redacted as expected; model and agent metadata are present | +| opik-openclaw | hook | llm_output | ready | hook-direct | plugins/opik-openclaw/src/service/hooks/llm.ts:150 | model output payload is redacted as expected; model and agent metadata are present | +| opik-openclaw | hook | subagent_delivery_target | ready | hook-direct | plugins/opik-openclaw/src/service/hooks/subagent.ts:147 | target routing result is preserved; parent/subagent metadata are present | +| opik-openclaw | hook | subagent_ended | ready | hook-direct | plugins/opik-openclaw/src/service/hooks/subagent.ts:222 | subagent completion payload is preserved; status metadata is present | +| opik-openclaw | hook | subagent_spawned | ready | hook-direct | plugins/opik-openclaw/src/service/hooks/subagent.ts:89 | spawn payload is preserved; parent/subagent metadata are present | +| opik-openclaw | hook | subagent_spawning | ready | hook-direct | plugins/opik-openclaw/src/service/hooks/subagent.ts:38 | hook payload and return value are captured | +| opik-openclaw | hook | tool_result_persist | ready | hook-direct | plugins/opik-openclaw/src/service.ts:541 | hook payload and return value are captured | | codex-app-server | hook | inbound_claim | ready | hook-direct | plugins/codex-app-server/index.ts:25 | claim payload preserves channel/source identity; routing metadata is present | | agentchat | registration | defineChannelPluginEntry | ready | metadata-only | plugins/agentchat/integrations/openclaw-channel/src/channel.ts:333 | channel id is stable; setup/config schema can be read; message envelope metadata is preserved | | wecom | registration | registerChannel | ready | channel-opt-in | plugins/wecom/index.js:27 | channel id is stable; inbound/outbound envelope shape is captured; sender metadata is preserved | @@ -44,6 +54,8 @@ Generated: deterministic | hasdata | registration | registerTool | ready | direct | plugins/hasdata/src/index.ts:43 | tool name is stable; input schema is captured; result shape metadata is captured | | mcp-adapter | registration | registerService | ready | lifecycle-opt-in | plugins/mcp-adapter/index.ts:15 | service id is stable; start/stop lifecycle handlers are captured | | mcp-adapter | registration | registerTool | ready | direct | plugins/mcp-adapter/index.ts:30 | tool name is stable; input schema is captured; result shape metadata is captured | +| opik-openclaw | registration | registerCli | ready | direct | plugins/opik-openclaw/index.ts:17 | command name is stable; argument schema is captured | +| opik-openclaw | registration | registerService | ready | lifecycle-opt-in | plugins/opik-openclaw/index.ts:16 | service id is stable; start/stop lifecycle handlers are captured | | clawmetry | registration | definePluginEntry | ready | metadata-only | plugins/clawmetry/clawhub-plugin/index.ts:4 | entrypoint register function is callable; entrypoint metadata is preserved | | clawmetry | registration | registerService | ready | lifecycle-opt-in | plugins/clawmetry/clawhub-plugin/index.ts:9 | service id is stable; start/stop lifecycle handlers are captured | | codex-app-server | registration | registerCommand | ready | direct | plugins/codex-app-server/index.ts:48 | command id is stable; interactive command payload is captured | diff --git a/reports/crabpot-workspace-plan.json b/reports/crabpot-workspace-plan.json index f5b554f..5bacec3 100644 --- a/reports/crabpot-workspace-plan.json +++ b/reports/crabpot-workspace-plan.json @@ -10,14 +10,15 @@ "configuredPath": "../openclaw" }, "summary": { - "fixtureCount": 11, - "entrypointCount": 13, - "installStepCount": 9, - "buildStepCount": 3, - "artifactStepCount": 13, - "captureStepCount": 13, - "syntheticProbeStepCount": 13, - "targetOpenClawLinkStepCount": 8, + "fixtureCount": 12, + "entrypointCount": 15, + "installStepCount": 10, + "auditStepCount": 10, + "buildStepCount": 4, + "artifactStepCount": 15, + "captureStepCount": 15, + "syntheticProbeStepCount": 15, + "targetOpenClawLinkStepCount": 10, "missingBuildScriptCount": 0, "sdkAliasRequiredCount": 1 }, @@ -203,6 +204,13 @@ "cwd": ".crabpot/workspaces/wecom", "reason": "install runtime dependencies without mutating the pinned submodule" }, + { + "kind": "audit", + "command": "npm audit --json > ../../results/wecom/package-audit.json || true", + "cwd": ".crabpot/workspaces/wecom", + "artifactPath": ".crabpot/results/wecom/package-audit.json", + "reason": "capture package-manager dependency audit metadata as warning-only plugin upstream risk" + }, { "kind": "capture", "command": "CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/run-cold-import-capture.mjs ./index.js --output ../../results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.capture.json", @@ -270,6 +278,13 @@ "cwd": ".crabpot/workspaces/a2a-gateway", "reason": "install runtime dependencies without mutating the pinned submodule" }, + { + "kind": "audit", + "command": "npm audit --json > ../../results/a2a-gateway/package-audit.json || true", + "cwd": ".crabpot/workspaces/a2a-gateway", + "artifactPath": ".crabpot/results/a2a-gateway/package-audit.json", + "reason": "capture package-manager dependency audit metadata as warning-only plugin upstream risk" + }, { "kind": "capture", "command": "CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/a2a-gateway/cold-import-extension-a2a-gateway-plugins-a2a-gateway-index-ts.capture.json", @@ -350,6 +365,13 @@ "cwd": ".crabpot/workspaces/hasdata", "reason": "install runtime dependencies without mutating the pinned submodule" }, + { + "kind": "audit", + "command": "npm audit --json > ../../results/hasdata/package-audit.json || true", + "cwd": ".crabpot/workspaces/hasdata", + "artifactPath": ".crabpot/results/hasdata/package-audit.json", + "reason": "capture package-manager dependency audit metadata as warning-only plugin upstream risk" + }, { "kind": "capture", "command": "CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./src/index.ts --output ../../results/hasdata/cold-import-extension-hasdata-plugins-hasdata-src-index-ts.capture.json", @@ -417,6 +439,13 @@ "cwd": ".crabpot/workspaces/mcp-adapter", "reason": "install runtime dependencies without mutating the pinned submodule" }, + { + "kind": "audit", + "command": "npm audit --json > ../../results/mcp-adapter/package-audit.json || true", + "cwd": ".crabpot/workspaces/mcp-adapter", + "artifactPath": ".crabpot/results/mcp-adapter/package-audit.json", + "reason": "capture package-manager dependency audit metadata as warning-only plugin upstream risk" + }, { "kind": "capture", "command": "CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/mcp-adapter/cold-import-extension-mcp-adapter-plugins-mcp-adapter-index-ts.capture.json", @@ -496,6 +525,150 @@ } ] }, + { + "id": "opik-openclaw", + "entrypoints": [ + { + "id": "cold-import.extension:opik-openclaw:plugins-opik-openclaw-index-ts", + "fixture": "opik-openclaw", + "packagePath": "plugins/opik-openclaw/package.json", + "packageName": "@opik/opik-openclaw", + "entrypoint": "plugins/opik-openclaw/index.ts", + "status": "ts-loader-required", + "packageManager": "npm", + "lockfile": "plugins/opik-openclaw/package-lock.json", + "requiredCapabilities": [ + "capture-shim", + "dependency-install", + "synthetic-probes", + "target-openclaw-link", + "ts-loader" + ], + "blockers": [ + { + "code": "ts-loader-required", + "message": "entrypoint is TypeScript source and needs a loader or build step before Node cold import", + "evidence": "plugins/opik-openclaw/index.ts" + }, + { + "code": "dependency-install-required", + "message": "package declares runtime dependencies that must be installed before cold import", + "evidence": "@clack/prompts, opik, zod, openclaw" + } + ], + "steps": [ + { + "kind": "prepare", + "command": "rsync -a --delete plugins/opik-openclaw/ .crabpot/workspaces/opik-openclaw/", + "cwd": ".", + "reason": "copy fixture package into an isolated mutable workspace" + }, + { + "kind": "prepare-artifacts", + "command": "mkdir -p .crabpot/results/opik-openclaw", + "cwd": ".", + "reason": "create a stable result directory for capture and synthetic probe artifacts" + }, + { + "kind": "link-openclaw", + "command": "npm pkg set dependencies.openclaw=\"file:../../../../openclaw\"", + "cwd": ".crabpot/workspaces/opik-openclaw", + "reason": "link the plugin's openclaw peer dependency to the target checkout under test" + }, + { + "kind": "install", + "command": "npm install --ignore-scripts", + "cwd": ".crabpot/workspaces/opik-openclaw", + "reason": "install runtime dependencies without mutating the pinned submodule" + }, + { + "kind": "audit", + "command": "npm audit --json > ../../results/opik-openclaw/package-audit.json || true", + "cwd": ".crabpot/workspaces/opik-openclaw", + "artifactPath": ".crabpot/results/opik-openclaw/package-audit.json", + "reason": "capture package-manager dependency audit metadata as warning-only plugin upstream risk" + }, + { + "kind": "capture", + "command": "CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/opik-openclaw/cold-import-extension-opik-openclaw-plugins-opik-openclaw-index-ts.capture.json", + "cwd": ".crabpot/workspaces/opik-openclaw", + "artifactPath": ".crabpot/results/opik-openclaw/cold-import-extension-opik-openclaw-plugins-opik-openclaw-index-ts.capture.json", + "reason": "cold import the entrypoint against the capture shim" + }, + { + "kind": "synthetic-probe", + "command": "CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/opik-openclaw/cold-import-extension-opik-openclaw-plugins-opik-openclaw-index-ts.synthetic.json", + "cwd": ".crabpot/workspaces/opik-openclaw", + "artifactPath": ".crabpot/results/opik-openclaw/cold-import-extension-opik-openclaw-plugins-opik-openclaw-index-ts.synthetic.json", + "reason": "invoke retained hook and registration handlers with synthetic payloads" + } + ] + }, + { + "id": "cold-import.runtimeExtension:opik-openclaw:plugins-opik-openclaw-dist-index-js", + "fixture": "opik-openclaw", + "packagePath": "plugins/opik-openclaw/package.json", + "packageName": "@opik/opik-openclaw", + "entrypoint": "plugins/opik-openclaw/dist/index.js", + "status": "build-required", + "packageManager": "npm", + "lockfile": "plugins/opik-openclaw/package-lock.json", + "requiredCapabilities": [ + "build", + "capture-shim", + "synthetic-probes", + "target-openclaw-link" + ], + "blockers": [ + { + "code": "build-required", + "message": "entrypoint points at build output that is absent in the fixture checkout", + "evidence": "plugins/opik-openclaw/dist/index.js" + } + ], + "steps": [ + { + "kind": "prepare", + "command": "rsync -a --delete plugins/opik-openclaw/ .crabpot/workspaces/opik-openclaw/", + "cwd": ".", + "reason": "copy fixture package into an isolated mutable workspace" + }, + { + "kind": "prepare-artifacts", + "command": "mkdir -p .crabpot/results/opik-openclaw", + "cwd": ".", + "reason": "create a stable result directory for capture and synthetic probe artifacts" + }, + { + "kind": "link-openclaw", + "command": "npm pkg set dependencies.openclaw=\"file:../../../../openclaw\"", + "cwd": ".crabpot/workspaces/opik-openclaw", + "reason": "link the plugin's openclaw peer dependency to the target checkout under test" + }, + { + "kind": "build", + "command": "npm run build", + "cwd": ".crabpot/workspaces/opik-openclaw", + "reason": "produce missing OpenClaw build entrypoint" + }, + { + "kind": "capture", + "command": "CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/run-cold-import-capture.mjs ./dist/index.js --output ../../results/opik-openclaw/cold-import-runtimeExtension-opik-openclaw-plugins-opik-openclaw-dist-index-js.capture.json", + "cwd": ".crabpot/workspaces/opik-openclaw", + "artifactPath": ".crabpot/results/opik-openclaw/cold-import-runtimeExtension-opik-openclaw-plugins-opik-openclaw-dist-index-js.capture.json", + "reason": "cold import the entrypoint against the capture shim" + }, + { + "kind": "synthetic-probe", + "command": "CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/synthetic-probes.mjs --entrypoint ./dist/index.js --output ../../results/opik-openclaw/cold-import-runtimeExtension-opik-openclaw-plugins-opik-openclaw-dist-index-js.synthetic.json", + "cwd": ".crabpot/workspaces/opik-openclaw", + "artifactPath": ".crabpot/results/opik-openclaw/cold-import-runtimeExtension-opik-openclaw-plugins-opik-openclaw-dist-index-js.synthetic.json", + "reason": "invoke retained hook and registration handlers with synthetic payloads" + } + ] + } + ] + }, { "id": "clawmetry", "entrypoints": [ @@ -545,6 +718,13 @@ "cwd": ".crabpot/workspaces/clawmetry", "reason": "install runtime dependencies without mutating the pinned submodule" }, + { + "kind": "audit", + "command": "npm audit --json > ../../results/clawmetry/package-audit.json || true", + "cwd": ".crabpot/workspaces/clawmetry", + "artifactPath": ".crabpot/results/clawmetry/package-audit.json", + "reason": "capture package-manager dependency audit metadata as warning-only plugin upstream risk" + }, { "kind": "capture", "command": "CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/clawmetry/cold-import-extension-clawmetry-plugins-clawmetry-clawhub-plugin-index-ts.capture.json", @@ -691,6 +871,13 @@ "cwd": ".crabpot/workspaces/codex-app-server", "reason": "install runtime dependencies without mutating the pinned submodule" }, + { + "kind": "audit", + "command": "pnpm audit --json > ../../results/codex-app-server/package-audit.json || true", + "cwd": ".crabpot/workspaces/codex-app-server", + "artifactPath": ".crabpot/results/codex-app-server/package-audit.json", + "reason": "capture package-manager dependency audit metadata as warning-only plugin upstream risk" + }, { "kind": "capture", "command": "CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/codex-app-server/cold-import-extension-codex-app-server-plugins-codex-app-server-index-ts.capture.json", @@ -771,6 +958,13 @@ "cwd": ".crabpot/workspaces/web-search-plus", "reason": "install runtime dependencies without mutating the pinned submodule" }, + { + "kind": "audit", + "command": "npm audit --json > ../../results/web-search-plus/package-audit.json || true", + "cwd": ".crabpot/workspaces/web-search-plus", + "artifactPath": ".crabpot/results/web-search-plus/package-audit.json", + "reason": "capture package-manager dependency audit metadata as warning-only plugin upstream risk" + }, { "kind": "capture", "command": "CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/web-search-plus/cold-import-extension-web-search-plus-plugins-web-search-plus-index-ts.capture.json", @@ -845,6 +1039,13 @@ "cwd": ".crabpot/workspaces/apify", "reason": "install runtime dependencies without mutating the pinned submodule" }, + { + "kind": "audit", + "command": "npm audit --json > ../../results/apify/package-audit.json || true", + "cwd": ".crabpot/workspaces/apify", + "artifactPath": ".crabpot/results/apify/package-audit.json", + "reason": "capture package-manager dependency audit metadata as warning-only plugin upstream risk" + }, { "kind": "capture", "command": "CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./src/index.ts --output ../../results/apify/cold-import-extension-apify-plugins-apify-src-index-ts.capture.json", @@ -919,6 +1120,13 @@ "cwd": ".crabpot/workspaces/inworld-tts", "reason": "install runtime dependencies without mutating the pinned submodule" }, + { + "kind": "audit", + "command": "pnpm audit --json > ../../results/inworld-tts/package-audit.json || true", + "cwd": ".crabpot/workspaces/inworld-tts", + "artifactPath": ".crabpot/results/inworld-tts/package-audit.json", + "reason": "capture package-manager dependency audit metadata as warning-only plugin upstream risk" + }, { "kind": "capture", "command": "CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/inworld-tts/cold-import-extension-inworld-tts-plugins-inworld-tts-index-ts.capture.json", diff --git a/reports/crabpot-workspace-plan.md b/reports/crabpot-workspace-plan.md index 2b88a17..9bd1dd0 100644 --- a/reports/crabpot-workspace-plan.md +++ b/reports/crabpot-workspace-plan.md @@ -8,31 +8,34 @@ Opt-in: CRABPOT_EXECUTE_ISOLATED=1 | Metric | Value | | -------------------------- | ----- | -| Fixtures | 11 | -| Entrypoints | 13 | -| Artifact dirs | 13 | -| Install steps | 9 | -| Build steps | 3 | -| Capture steps | 13 | -| Synthetic probe steps | 13 | -| Target OpenClaw link steps | 8 | +| Fixtures | 12 | +| Entrypoints | 15 | +| Artifact dirs | 15 | +| Install steps | 10 | +| Audit steps | 10 | +| Build steps | 4 | +| Capture steps | 15 | +| Synthetic probe steps | 15 | +| Target OpenClaw link steps | 10 | | Missing build scripts | 0 | | SDK alias required | 1 | ## Entrypoint Workspaces -| Fixture | PM | Status | Entrypoint | Capabilities | Steps | -| ----------------- | ---- | --------------------------- | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| agentchat | pnpm | build-required | plugins/agentchat/integrations/openclaw-channel/dist/index.js | build, capture-shim, synthetic-probes, target-openclaw-link | prepare: rsync -a --delete plugins/agentchat/integrations/openclaw-channel/ .crabpot/workspaces/agentchat/; prepare-artifacts: mkdir -p .crabpot/results/agentchat; link-openclaw: pnpm pkg set dependencies.openclaw="file:../../../../openclaw"; build: pnpm run build; capture: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/run-cold-import-capture.mjs ./dist/index.js --output ../../results/agentchat/cold-import-extension-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-index-js.capture.json -> .crabpot/results/agentchat/cold-import-extension-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-index-js.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/synthetic-probes.mjs --entrypoint ./dist/index.js --output ../../results/agentchat/cold-import-extension-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-index-js.synthetic.json -> .crabpot/results/agentchat/cold-import-extension-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-index-js.synthetic.json | -| agentchat | pnpm | build-required | plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js | build, capture-shim, synthetic-probes, target-openclaw-link | prepare: rsync -a --delete plugins/agentchat/integrations/openclaw-channel/ .crabpot/workspaces/agentchat/; prepare-artifacts: mkdir -p .crabpot/results/agentchat; link-openclaw: pnpm pkg set dependencies.openclaw="file:../../../../openclaw"; build: pnpm run build; capture: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/run-cold-import-capture.mjs ./dist/setup-entry.js --output ../../results/agentchat/cold-import-setupEntry-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-setup-entry-js.capture.json -> .crabpot/results/agentchat/cold-import-setupEntry-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-setup-entry-js.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/synthetic-probes.mjs --entrypoint ./dist/setup-entry.js --output ../../results/agentchat/cold-import-setupEntry-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-setup-entry-js.synthetic.json -> .crabpot/results/agentchat/cold-import-setupEntry-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-setup-entry-js.synthetic.json | -| wecom | npm | dependency-install-required | plugins/wecom/index.js | capture-shim, dependency-install, synthetic-probes, target-openclaw-link | prepare: rsync -a --delete plugins/wecom/ .crabpot/workspaces/wecom/; prepare-artifacts: mkdir -p .crabpot/results/wecom; link-openclaw: npm pkg set dependencies.openclaw="file:../../../../openclaw"; install: npm install --ignore-scripts; capture: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/run-cold-import-capture.mjs ./index.js --output ../../results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.capture.json -> .crabpot/results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/synthetic-probes.mjs --entrypoint ./index.js --output ../../results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.synthetic.json -> .crabpot/results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.synthetic.json | -| a2a-gateway | npm | ts-loader-required | plugins/a2a-gateway/index.ts | capture-shim, dependency-install, synthetic-probes, ts-loader | prepare: rsync -a --delete plugins/a2a-gateway/ .crabpot/workspaces/a2a-gateway/; prepare-artifacts: mkdir -p .crabpot/results/a2a-gateway; install: npm install --ignore-scripts; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/a2a-gateway/cold-import-extension-a2a-gateway-plugins-a2a-gateway-index-ts.capture.json -> .crabpot/results/a2a-gateway/cold-import-extension-a2a-gateway-plugins-a2a-gateway-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/a2a-gateway/cold-import-extension-a2a-gateway-plugins-a2a-gateway-index-ts.synthetic.json -> .crabpot/results/a2a-gateway/cold-import-extension-a2a-gateway-plugins-a2a-gateway-index-ts.synthetic.json | -| hasdata | npm | ts-loader-required | plugins/hasdata/src/index.ts | capture-shim, dependency-install, side-effect-sandbox, synthetic-probes, target-openclaw-link, ts-loader | prepare: rsync -a --delete plugins/hasdata/ .crabpot/workspaces/hasdata/; prepare-artifacts: mkdir -p .crabpot/results/hasdata; link-openclaw: npm pkg set dependencies.openclaw="file:../../../../openclaw"; install: npm install --ignore-scripts; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./src/index.ts --output ../../results/hasdata/cold-import-extension-hasdata-plugins-hasdata-src-index-ts.capture.json -> .crabpot/results/hasdata/cold-import-extension-hasdata-plugins-hasdata-src-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./src/index.ts --output ../../results/hasdata/cold-import-extension-hasdata-plugins-hasdata-src-index-ts.synthetic.json -> .crabpot/results/hasdata/cold-import-extension-hasdata-plugins-hasdata-src-index-ts.synthetic.json | -| mcp-adapter | npm | ts-loader-required | plugins/mcp-adapter/index.ts | capture-shim, dependency-install, synthetic-probes, ts-loader | prepare: rsync -a --delete plugins/mcp-adapter/ .crabpot/workspaces/mcp-adapter/; prepare-artifacts: mkdir -p .crabpot/results/mcp-adapter; install: npm install --ignore-scripts; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/mcp-adapter/cold-import-extension-mcp-adapter-plugins-mcp-adapter-index-ts.capture.json -> .crabpot/results/mcp-adapter/cold-import-extension-mcp-adapter-plugins-mcp-adapter-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/mcp-adapter/cold-import-extension-mcp-adapter-plugins-mcp-adapter-index-ts.synthetic.json -> .crabpot/results/mcp-adapter/cold-import-extension-mcp-adapter-plugins-mcp-adapter-index-ts.synthetic.json | -| llm-trace-phoenix | npm | ts-loader-required | plugins/llm-trace-phoenix/index.ts | capture-shim, side-effect-sandbox, synthetic-probes, ts-loader | prepare: rsync -a --delete plugins/llm-trace-phoenix/ .crabpot/workspaces/llm-trace-phoenix/; prepare-artifacts: mkdir -p .crabpot/results/llm-trace-phoenix; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/llm-trace-phoenix/cold-import-extension-llm-trace-phoenix-plugins-llm-trace-phoenix-index-ts.capture.json -> .crabpot/results/llm-trace-phoenix/cold-import-extension-llm-trace-phoenix-plugins-llm-trace-phoenix-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/llm-trace-phoenix/cold-import-extension-llm-trace-phoenix-plugins-llm-trace-phoenix-index-ts.synthetic.json -> .crabpot/results/llm-trace-phoenix/cold-import-extension-llm-trace-phoenix-plugins-llm-trace-phoenix-index-ts.synthetic.json | -| clawmetry | npm | ts-loader-required | plugins/clawmetry/clawhub-plugin/index.ts | capture-shim, dependency-install, synthetic-probes, ts-loader | prepare: rsync -a --delete plugins/clawmetry/clawhub-plugin/ .crabpot/workspaces/clawmetry/; prepare-artifacts: mkdir -p .crabpot/results/clawmetry; install: npm install --ignore-scripts; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/clawmetry/cold-import-extension-clawmetry-plugins-clawmetry-clawhub-plugin-index-ts.capture.json -> .crabpot/results/clawmetry/cold-import-extension-clawmetry-plugins-clawmetry-clawhub-plugin-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/clawmetry/cold-import-extension-clawmetry-plugins-clawmetry-clawhub-plugin-index-ts.synthetic.json -> .crabpot/results/clawmetry/cold-import-extension-clawmetry-plugins-clawmetry-clawhub-plugin-index-ts.synthetic.json | -| clawmetry | npm | build-required | plugins/clawmetry/clawhub-plugin/dist/index.js | build, capture-shim, synthetic-probes | prepare: rsync -a --delete plugins/clawmetry/clawhub-plugin/ .crabpot/workspaces/clawmetry/; prepare-artifacts: mkdir -p .crabpot/results/clawmetry; build: npm run build; capture: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/run-cold-import-capture.mjs ./dist/index.js --output ../../results/clawmetry/cold-import-runtimeExtension-clawmetry-plugins-clawmetry-clawhub-plugin-dist-index-js.capture.json -> .crabpot/results/clawmetry/cold-import-runtimeExtension-clawmetry-plugins-clawmetry-clawhub-plugin-dist-index-js.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/synthetic-probes.mjs --entrypoint ./dist/index.js --output ../../results/clawmetry/cold-import-runtimeExtension-clawmetry-plugins-clawmetry-clawhub-plugin-dist-index-js.synthetic.json -> .crabpot/results/clawmetry/cold-import-runtimeExtension-clawmetry-plugins-clawmetry-clawhub-plugin-dist-index-js.synthetic.json | -| codex-app-server | pnpm | sdk-alias-required | plugins/codex-app-server/index.ts | capture-shim, dependency-install, sdk-alias-compat, synthetic-probes, target-openclaw-link, ts-loader | prepare: rsync -a --delete plugins/codex-app-server/ .crabpot/workspaces/codex-app-server/; prepare-artifacts: mkdir -p .crabpot/results/codex-app-server; link-openclaw: pnpm pkg set dependencies.openclaw="file:../../../../openclaw"; install: pnpm install --ignore-scripts; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/codex-app-server/cold-import-extension-codex-app-server-plugins-codex-app-server-index-ts.capture.json -> .crabpot/results/codex-app-server/cold-import-extension-codex-app-server-plugins-codex-app-server-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/codex-app-server/cold-import-extension-codex-app-server-plugins-codex-app-server-index-ts.synthetic.json -> .crabpot/results/codex-app-server/cold-import-extension-codex-app-server-plugins-codex-app-server-index-ts.synthetic.json | -| web-search-plus | npm | ts-loader-required | plugins/web-search-plus/index.ts | capture-shim, dependency-install, side-effect-sandbox, synthetic-probes, target-openclaw-link, ts-loader | prepare: rsync -a --delete plugins/web-search-plus/ .crabpot/workspaces/web-search-plus/; prepare-artifacts: mkdir -p .crabpot/results/web-search-plus; link-openclaw: npm pkg set dependencies.openclaw="file:../../../../openclaw"; install: npm install --ignore-scripts; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/web-search-plus/cold-import-extension-web-search-plus-plugins-web-search-plus-index-ts.capture.json -> .crabpot/results/web-search-plus/cold-import-extension-web-search-plus-plugins-web-search-plus-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/web-search-plus/cold-import-extension-web-search-plus-plugins-web-search-plus-index-ts.synthetic.json -> .crabpot/results/web-search-plus/cold-import-extension-web-search-plus-plugins-web-search-plus-index-ts.synthetic.json | -| apify | npm | ts-loader-required | plugins/apify/src/index.ts | capture-shim, dependency-install, synthetic-probes, target-openclaw-link, ts-loader | prepare: rsync -a --delete plugins/apify/ .crabpot/workspaces/apify/; prepare-artifacts: mkdir -p .crabpot/results/apify; link-openclaw: npm pkg set dependencies.openclaw="file:../../../../openclaw"; install: npm install --ignore-scripts; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./src/index.ts --output ../../results/apify/cold-import-extension-apify-plugins-apify-src-index-ts.capture.json -> .crabpot/results/apify/cold-import-extension-apify-plugins-apify-src-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./src/index.ts --output ../../results/apify/cold-import-extension-apify-plugins-apify-src-index-ts.synthetic.json -> .crabpot/results/apify/cold-import-extension-apify-plugins-apify-src-index-ts.synthetic.json | -| inworld-tts | pnpm | ts-loader-required | plugins/inworld-tts/index.ts | capture-shim, dependency-install, synthetic-probes, target-openclaw-link, ts-loader | prepare: rsync -a --delete plugins/inworld-tts/ .crabpot/workspaces/inworld-tts/; prepare-artifacts: mkdir -p .crabpot/results/inworld-tts; link-openclaw: pnpm pkg set dependencies.openclaw="file:../../../../openclaw"; install: pnpm install --ignore-scripts; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/inworld-tts/cold-import-extension-inworld-tts-plugins-inworld-tts-index-ts.capture.json -> .crabpot/results/inworld-tts/cold-import-extension-inworld-tts-plugins-inworld-tts-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/inworld-tts/cold-import-extension-inworld-tts-plugins-inworld-tts-index-ts.synthetic.json -> .crabpot/results/inworld-tts/cold-import-extension-inworld-tts-plugins-inworld-tts-index-ts.synthetic.json | +| Fixture | PM | Status | Entrypoint | Capabilities | Steps | +| ----------------- | ---- | --------------------------- | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| agentchat | pnpm | build-required | plugins/agentchat/integrations/openclaw-channel/dist/index.js | build, capture-shim, synthetic-probes, target-openclaw-link | prepare: rsync -a --delete plugins/agentchat/integrations/openclaw-channel/ .crabpot/workspaces/agentchat/; prepare-artifacts: mkdir -p .crabpot/results/agentchat; link-openclaw: pnpm pkg set dependencies.openclaw="file:../../../../openclaw"; build: pnpm run build; capture: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/run-cold-import-capture.mjs ./dist/index.js --output ../../results/agentchat/cold-import-extension-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-index-js.capture.json -> .crabpot/results/agentchat/cold-import-extension-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-index-js.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/synthetic-probes.mjs --entrypoint ./dist/index.js --output ../../results/agentchat/cold-import-extension-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-index-js.synthetic.json -> .crabpot/results/agentchat/cold-import-extension-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-index-js.synthetic.json | +| agentchat | pnpm | build-required | plugins/agentchat/integrations/openclaw-channel/dist/setup-entry.js | build, capture-shim, synthetic-probes, target-openclaw-link | prepare: rsync -a --delete plugins/agentchat/integrations/openclaw-channel/ .crabpot/workspaces/agentchat/; prepare-artifacts: mkdir -p .crabpot/results/agentchat; link-openclaw: pnpm pkg set dependencies.openclaw="file:../../../../openclaw"; build: pnpm run build; capture: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/run-cold-import-capture.mjs ./dist/setup-entry.js --output ../../results/agentchat/cold-import-setupEntry-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-setup-entry-js.capture.json -> .crabpot/results/agentchat/cold-import-setupEntry-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-setup-entry-js.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/synthetic-probes.mjs --entrypoint ./dist/setup-entry.js --output ../../results/agentchat/cold-import-setupEntry-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-setup-entry-js.synthetic.json -> .crabpot/results/agentchat/cold-import-setupEntry-agentchat-plugins-agentchat-integrations-openclaw-channel-dist-setup-entry-js.synthetic.json | +| wecom | npm | dependency-install-required | plugins/wecom/index.js | capture-shim, dependency-install, synthetic-probes, target-openclaw-link | prepare: rsync -a --delete plugins/wecom/ .crabpot/workspaces/wecom/; prepare-artifacts: mkdir -p .crabpot/results/wecom; link-openclaw: npm pkg set dependencies.openclaw="file:../../../../openclaw"; install: npm install --ignore-scripts; audit: npm audit --json > ../../results/wecom/package-audit.json || true -> .crabpot/results/wecom/package-audit.json; capture: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/run-cold-import-capture.mjs ./index.js --output ../../results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.capture.json -> .crabpot/results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/synthetic-probes.mjs --entrypoint ./index.js --output ../../results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.synthetic.json -> .crabpot/results/wecom/cold-import-extension-wecom-plugins-wecom-index-js.synthetic.json | +| a2a-gateway | npm | ts-loader-required | plugins/a2a-gateway/index.ts | capture-shim, dependency-install, synthetic-probes, ts-loader | prepare: rsync -a --delete plugins/a2a-gateway/ .crabpot/workspaces/a2a-gateway/; prepare-artifacts: mkdir -p .crabpot/results/a2a-gateway; install: npm install --ignore-scripts; audit: npm audit --json > ../../results/a2a-gateway/package-audit.json || true -> .crabpot/results/a2a-gateway/package-audit.json; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/a2a-gateway/cold-import-extension-a2a-gateway-plugins-a2a-gateway-index-ts.capture.json -> .crabpot/results/a2a-gateway/cold-import-extension-a2a-gateway-plugins-a2a-gateway-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/a2a-gateway/cold-import-extension-a2a-gateway-plugins-a2a-gateway-index-ts.synthetic.json -> .crabpot/results/a2a-gateway/cold-import-extension-a2a-gateway-plugins-a2a-gateway-index-ts.synthetic.json | +| hasdata | npm | ts-loader-required | plugins/hasdata/src/index.ts | capture-shim, dependency-install, side-effect-sandbox, synthetic-probes, target-openclaw-link, ts-loader | prepare: rsync -a --delete plugins/hasdata/ .crabpot/workspaces/hasdata/; prepare-artifacts: mkdir -p .crabpot/results/hasdata; link-openclaw: npm pkg set dependencies.openclaw="file:../../../../openclaw"; install: npm install --ignore-scripts; audit: npm audit --json > ../../results/hasdata/package-audit.json || true -> .crabpot/results/hasdata/package-audit.json; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./src/index.ts --output ../../results/hasdata/cold-import-extension-hasdata-plugins-hasdata-src-index-ts.capture.json -> .crabpot/results/hasdata/cold-import-extension-hasdata-plugins-hasdata-src-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./src/index.ts --output ../../results/hasdata/cold-import-extension-hasdata-plugins-hasdata-src-index-ts.synthetic.json -> .crabpot/results/hasdata/cold-import-extension-hasdata-plugins-hasdata-src-index-ts.synthetic.json | +| mcp-adapter | npm | ts-loader-required | plugins/mcp-adapter/index.ts | capture-shim, dependency-install, synthetic-probes, ts-loader | prepare: rsync -a --delete plugins/mcp-adapter/ .crabpot/workspaces/mcp-adapter/; prepare-artifacts: mkdir -p .crabpot/results/mcp-adapter; install: npm install --ignore-scripts; audit: npm audit --json > ../../results/mcp-adapter/package-audit.json || true -> .crabpot/results/mcp-adapter/package-audit.json; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/mcp-adapter/cold-import-extension-mcp-adapter-plugins-mcp-adapter-index-ts.capture.json -> .crabpot/results/mcp-adapter/cold-import-extension-mcp-adapter-plugins-mcp-adapter-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/mcp-adapter/cold-import-extension-mcp-adapter-plugins-mcp-adapter-index-ts.synthetic.json -> .crabpot/results/mcp-adapter/cold-import-extension-mcp-adapter-plugins-mcp-adapter-index-ts.synthetic.json | +| llm-trace-phoenix | npm | ts-loader-required | plugins/llm-trace-phoenix/index.ts | capture-shim, side-effect-sandbox, synthetic-probes, ts-loader | prepare: rsync -a --delete plugins/llm-trace-phoenix/ .crabpot/workspaces/llm-trace-phoenix/; prepare-artifacts: mkdir -p .crabpot/results/llm-trace-phoenix; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/llm-trace-phoenix/cold-import-extension-llm-trace-phoenix-plugins-llm-trace-phoenix-index-ts.capture.json -> .crabpot/results/llm-trace-phoenix/cold-import-extension-llm-trace-phoenix-plugins-llm-trace-phoenix-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/llm-trace-phoenix/cold-import-extension-llm-trace-phoenix-plugins-llm-trace-phoenix-index-ts.synthetic.json -> .crabpot/results/llm-trace-phoenix/cold-import-extension-llm-trace-phoenix-plugins-llm-trace-phoenix-index-ts.synthetic.json | +| opik-openclaw | npm | ts-loader-required | plugins/opik-openclaw/index.ts | capture-shim, dependency-install, synthetic-probes, target-openclaw-link, ts-loader | prepare: rsync -a --delete plugins/opik-openclaw/ .crabpot/workspaces/opik-openclaw/; prepare-artifacts: mkdir -p .crabpot/results/opik-openclaw; link-openclaw: npm pkg set dependencies.openclaw="file:../../../../openclaw"; install: npm install --ignore-scripts; audit: npm audit --json > ../../results/opik-openclaw/package-audit.json || true -> .crabpot/results/opik-openclaw/package-audit.json; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/opik-openclaw/cold-import-extension-opik-openclaw-plugins-opik-openclaw-index-ts.capture.json -> .crabpot/results/opik-openclaw/cold-import-extension-opik-openclaw-plugins-opik-openclaw-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/opik-openclaw/cold-import-extension-opik-openclaw-plugins-opik-openclaw-index-ts.synthetic.json -> .crabpot/results/opik-openclaw/cold-import-extension-opik-openclaw-plugins-opik-openclaw-index-ts.synthetic.json | +| opik-openclaw | npm | build-required | plugins/opik-openclaw/dist/index.js | build, capture-shim, synthetic-probes, target-openclaw-link | prepare: rsync -a --delete plugins/opik-openclaw/ .crabpot/workspaces/opik-openclaw/; prepare-artifacts: mkdir -p .crabpot/results/opik-openclaw; link-openclaw: npm pkg set dependencies.openclaw="file:../../../../openclaw"; build: npm run build; capture: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/run-cold-import-capture.mjs ./dist/index.js --output ../../results/opik-openclaw/cold-import-runtimeExtension-opik-openclaw-plugins-opik-openclaw-dist-index-js.capture.json -> .crabpot/results/opik-openclaw/cold-import-runtimeExtension-opik-openclaw-plugins-opik-openclaw-dist-index-js.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/synthetic-probes.mjs --entrypoint ./dist/index.js --output ../../results/opik-openclaw/cold-import-runtimeExtension-opik-openclaw-plugins-opik-openclaw-dist-index-js.synthetic.json -> .crabpot/results/opik-openclaw/cold-import-runtimeExtension-opik-openclaw-plugins-opik-openclaw-dist-index-js.synthetic.json | +| clawmetry | npm | ts-loader-required | plugins/clawmetry/clawhub-plugin/index.ts | capture-shim, dependency-install, synthetic-probes, ts-loader | prepare: rsync -a --delete plugins/clawmetry/clawhub-plugin/ .crabpot/workspaces/clawmetry/; prepare-artifacts: mkdir -p .crabpot/results/clawmetry; install: npm install --ignore-scripts; audit: npm audit --json > ../../results/clawmetry/package-audit.json || true -> .crabpot/results/clawmetry/package-audit.json; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/clawmetry/cold-import-extension-clawmetry-plugins-clawmetry-clawhub-plugin-index-ts.capture.json -> .crabpot/results/clawmetry/cold-import-extension-clawmetry-plugins-clawmetry-clawhub-plugin-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/clawmetry/cold-import-extension-clawmetry-plugins-clawmetry-clawhub-plugin-index-ts.synthetic.json -> .crabpot/results/clawmetry/cold-import-extension-clawmetry-plugins-clawmetry-clawhub-plugin-index-ts.synthetic.json | +| clawmetry | npm | build-required | plugins/clawmetry/clawhub-plugin/dist/index.js | build, capture-shim, synthetic-probes | prepare: rsync -a --delete plugins/clawmetry/clawhub-plugin/ .crabpot/workspaces/clawmetry/; prepare-artifacts: mkdir -p .crabpot/results/clawmetry; build: npm run build; capture: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/run-cold-import-capture.mjs ./dist/index.js --output ../../results/clawmetry/cold-import-runtimeExtension-clawmetry-plugins-clawmetry-clawhub-plugin-dist-index-js.capture.json -> .crabpot/results/clawmetry/cold-import-runtimeExtension-clawmetry-plugins-clawmetry-clawhub-plugin-dist-index-js.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node ../../../scripts/synthetic-probes.mjs --entrypoint ./dist/index.js --output ../../results/clawmetry/cold-import-runtimeExtension-clawmetry-plugins-clawmetry-clawhub-plugin-dist-index-js.synthetic.json -> .crabpot/results/clawmetry/cold-import-runtimeExtension-clawmetry-plugins-clawmetry-clawhub-plugin-dist-index-js.synthetic.json | +| codex-app-server | pnpm | sdk-alias-required | plugins/codex-app-server/index.ts | capture-shim, dependency-install, sdk-alias-compat, synthetic-probes, target-openclaw-link, ts-loader | prepare: rsync -a --delete plugins/codex-app-server/ .crabpot/workspaces/codex-app-server/; prepare-artifacts: mkdir -p .crabpot/results/codex-app-server; link-openclaw: pnpm pkg set dependencies.openclaw="file:../../../../openclaw"; install: pnpm install --ignore-scripts; audit: pnpm audit --json > ../../results/codex-app-server/package-audit.json || true -> .crabpot/results/codex-app-server/package-audit.json; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/codex-app-server/cold-import-extension-codex-app-server-plugins-codex-app-server-index-ts.capture.json -> .crabpot/results/codex-app-server/cold-import-extension-codex-app-server-plugins-codex-app-server-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/codex-app-server/cold-import-extension-codex-app-server-plugins-codex-app-server-index-ts.synthetic.json -> .crabpot/results/codex-app-server/cold-import-extension-codex-app-server-plugins-codex-app-server-index-ts.synthetic.json | +| web-search-plus | npm | ts-loader-required | plugins/web-search-plus/index.ts | capture-shim, dependency-install, side-effect-sandbox, synthetic-probes, target-openclaw-link, ts-loader | prepare: rsync -a --delete plugins/web-search-plus/ .crabpot/workspaces/web-search-plus/; prepare-artifacts: mkdir -p .crabpot/results/web-search-plus; link-openclaw: npm pkg set dependencies.openclaw="file:../../../../openclaw"; install: npm install --ignore-scripts; audit: npm audit --json > ../../results/web-search-plus/package-audit.json || true -> .crabpot/results/web-search-plus/package-audit.json; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/web-search-plus/cold-import-extension-web-search-plus-plugins-web-search-plus-index-ts.capture.json -> .crabpot/results/web-search-plus/cold-import-extension-web-search-plus-plugins-web-search-plus-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/web-search-plus/cold-import-extension-web-search-plus-plugins-web-search-plus-index-ts.synthetic.json -> .crabpot/results/web-search-plus/cold-import-extension-web-search-plus-plugins-web-search-plus-index-ts.synthetic.json | +| apify | npm | ts-loader-required | plugins/apify/src/index.ts | capture-shim, dependency-install, synthetic-probes, target-openclaw-link, ts-loader | prepare: rsync -a --delete plugins/apify/ .crabpot/workspaces/apify/; prepare-artifacts: mkdir -p .crabpot/results/apify; link-openclaw: npm pkg set dependencies.openclaw="file:../../../../openclaw"; install: npm install --ignore-scripts; audit: npm audit --json > ../../results/apify/package-audit.json || true -> .crabpot/results/apify/package-audit.json; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./src/index.ts --output ../../results/apify/cold-import-extension-apify-plugins-apify-src-index-ts.capture.json -> .crabpot/results/apify/cold-import-extension-apify-plugins-apify-src-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./src/index.ts --output ../../results/apify/cold-import-extension-apify-plugins-apify-src-index-ts.synthetic.json -> .crabpot/results/apify/cold-import-extension-apify-plugins-apify-src-index-ts.synthetic.json | +| inworld-tts | pnpm | ts-loader-required | plugins/inworld-tts/index.ts | capture-shim, dependency-install, synthetic-probes, target-openclaw-link, ts-loader | prepare: rsync -a --delete plugins/inworld-tts/ .crabpot/workspaces/inworld-tts/; prepare-artifacts: mkdir -p .crabpot/results/inworld-tts; link-openclaw: pnpm pkg set dependencies.openclaw="file:../../../../openclaw"; install: pnpm install --ignore-scripts; audit: pnpm audit --json > ../../results/inworld-tts/package-audit.json || true -> .crabpot/results/inworld-tts/package-audit.json; capture: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/run-cold-import-capture.mjs ./index.ts --output ../../results/inworld-tts/cold-import-extension-inworld-tts-plugins-inworld-tts-index-ts.capture.json -> .crabpot/results/inworld-tts/cold-import-extension-inworld-tts-plugins-inworld-tts-index-ts.capture.json; synthetic-probe: CRABPOT_EXECUTE_ISOLATED=1 node --import tsx ../../../scripts/synthetic-probes.mjs --entrypoint ./index.ts --output ../../results/inworld-tts/cold-import-extension-inworld-tts-plugins-inworld-tts-index-ts.synthetic.json -> .crabpot/results/inworld-tts/cold-import-extension-inworld-tts-plugins-inworld-tts-index-ts.synthetic.json | diff --git a/scripts/workspace-plan.mjs b/scripts/workspace-plan.mjs index 1736482..adc0ceb 100644 --- a/scripts/workspace-plan.mjs +++ b/scripts/workspace-plan.mjs @@ -27,7 +27,7 @@ async function main() { console.log(JSON.stringify(plan, null, 2)); } else { console.log( - `workspace plan: ${plan.summary.entrypointCount} entrypoints, ${plan.summary.installStepCount} installs, ${plan.summary.buildStepCount} builds, ${plan.summary.captureStepCount} captures, ${plan.summary.syntheticProbeStepCount} synthetic probes, ${plan.summary.artifactStepCount} artifact dirs`, + `workspace plan: ${plan.summary.entrypointCount} entrypoints, ${plan.summary.installStepCount} installs, ${plan.summary.auditStepCount} audits, ${plan.summary.buildStepCount} builds, ${plan.summary.captureStepCount} captures, ${plan.summary.syntheticProbeStepCount} synthetic probes, ${plan.summary.artifactStepCount} artifact dirs`, ); }