@descryy/mcp 0.11.5 → 0.11.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action-handshake.d.ts +38 -0
- package/dist/action-handshake.d.ts.map +1 -0
- package/dist/action-handshake.js +127 -0
- package/dist/action-handshake.js.map +1 -0
- package/dist/bin/descry-mcp.d.ts +7 -0
- package/dist/bin/descry-mcp.d.ts.map +1 -0
- package/dist/bin/descry-mcp.js +73 -0
- package/dist/bin/descry-mcp.js.map +1 -0
- package/dist/browser/auth.d.ts +84 -0
- package/dist/browser/auth.d.ts.map +1 -0
- package/dist/browser/auth.js +233 -0
- package/dist/browser/auth.js.map +1 -0
- package/dist/browser/capability-probe.d.ts +109 -0
- package/dist/browser/capability-probe.d.ts.map +1 -0
- package/dist/browser/capability-probe.js +201 -0
- package/dist/browser/capability-probe.js.map +1 -0
- package/dist/browser/driver.d.ts +591 -0
- package/dist/browser/driver.d.ts.map +1 -0
- package/dist/browser/driver.js +116 -0
- package/dist/browser/driver.js.map +1 -0
- package/dist/browser/evidence.d.ts +28 -0
- package/dist/browser/evidence.d.ts.map +1 -0
- package/dist/browser/evidence.js +82 -0
- package/dist/browser/evidence.js.map +1 -0
- package/dist/browser/fake-driver.d.ts +116 -0
- package/dist/browser/fake-driver.d.ts.map +1 -0
- package/dist/browser/fake-driver.js +416 -0
- package/dist/browser/fake-driver.js.map +1 -0
- package/dist/browser/fault-attribution.d.ts +178 -0
- package/dist/browser/fault-attribution.d.ts.map +1 -0
- package/dist/browser/fault-attribution.js +266 -0
- package/dist/browser/fault-attribution.js.map +1 -0
- package/dist/browser/graph-write.d.ts +45 -0
- package/dist/browser/graph-write.d.ts.map +1 -0
- package/dist/browser/graph-write.js +103 -0
- package/dist/browser/graph-write.js.map +1 -0
- package/dist/browser/identity-graph-write.d.ts +55 -0
- package/dist/browser/identity-graph-write.d.ts.map +1 -0
- package/dist/browser/identity-graph-write.js +45 -0
- package/dist/browser/identity-graph-write.js.map +1 -0
- package/dist/browser/page-probe.d.ts +81 -0
- package/dist/browser/page-probe.d.ts.map +1 -0
- package/dist/browser/page-probe.js +202 -0
- package/dist/browser/page-probe.js.map +1 -0
- package/dist/browser/playwright-driver.d.ts +115 -0
- package/dist/browser/playwright-driver.d.ts.map +1 -0
- package/dist/browser/playwright-driver.js +1545 -0
- package/dist/browser/playwright-driver.js.map +1 -0
- package/dist/browser/provider.d.ts +26 -0
- package/dist/browser/provider.d.ts.map +1 -0
- package/dist/browser/provider.js +14 -0
- package/dist/browser/provider.js.map +1 -0
- package/dist/browser/reach-recording-session.d.ts +44 -0
- package/dist/browser/reach-recording-session.d.ts.map +1 -0
- package/dist/browser/reach-recording-session.js +151 -0
- package/dist/browser/reach-recording-session.js.map +1 -0
- package/dist/browser/reachability.d.ts +168 -0
- package/dist/browser/reachability.d.ts.map +1 -0
- package/dist/browser/reachability.js +294 -0
- package/dist/browser/reachability.js.map +1 -0
- package/dist/browser/registry.d.ts +126 -0
- package/dist/browser/registry.d.ts.map +1 -0
- package/dist/browser/registry.js +177 -0
- package/dist/browser/registry.js.map +1 -0
- package/dist/browser/scenario-provenance.d.ts +23 -0
- package/dist/browser/scenario-provenance.d.ts.map +1 -0
- package/dist/browser/scenario-provenance.js +73 -0
- package/dist/browser/scenario-provenance.js.map +1 -0
- package/dist/browser/scenario-resolve.d.ts +28 -0
- package/dist/browser/scenario-resolve.d.ts.map +1 -0
- package/dist/browser/scenario-resolve.js +96 -0
- package/dist/browser/scenario-resolve.js.map +1 -0
- package/dist/browser/scenario-runner.d.ts +72 -0
- package/dist/browser/scenario-runner.d.ts.map +1 -0
- package/dist/browser/scenario-runner.js +353 -0
- package/dist/browser/scenario-runner.js.map +1 -0
- package/dist/browser/stack-parser.d.ts +19 -0
- package/dist/browser/stack-parser.d.ts.map +1 -0
- package/dist/browser/stack-parser.js +85 -0
- package/dist/browser/stack-parser.js.map +1 -0
- package/dist/browser/tool-support.d.ts +71 -0
- package/dist/browser/tool-support.d.ts.map +1 -0
- package/dist/browser/tool-support.js +216 -0
- package/dist/browser/tool-support.js.map +1 -0
- package/dist/browser/url-scheme.d.ts +14 -0
- package/dist/browser/url-scheme.d.ts.map +1 -0
- package/dist/browser/url-scheme.js +38 -0
- package/dist/browser/url-scheme.js.map +1 -0
- package/dist/browser/wait-target.d.ts +37 -0
- package/dist/browser/wait-target.d.ts.map +1 -0
- package/dist/browser/wait-target.js +54 -0
- package/dist/browser/wait-target.js.map +1 -0
- package/dist/cancellation.d.ts +20 -0
- package/dist/cancellation.d.ts.map +1 -0
- package/dist/cancellation.js +41 -0
- package/dist/cancellation.js.map +1 -0
- package/dist/capped.d.ts +39 -0
- package/dist/capped.d.ts.map +1 -0
- package/dist/capped.js +43 -0
- package/dist/capped.js.map +1 -0
- package/dist/credential-store.d.ts +22 -0
- package/dist/credential-store.d.ts.map +1 -0
- package/dist/credential-store.js +33 -0
- package/dist/credential-store.js.map +1 -0
- package/dist/disclosure-ledger.d.ts +14 -0
- package/dist/disclosure-ledger.d.ts.map +1 -0
- package/dist/disclosure-ledger.js +18 -0
- package/dist/disclosure-ledger.js.map +1 -0
- package/dist/evidence/observed-route-evidence.d.ts +25 -0
- package/dist/evidence/observed-route-evidence.d.ts.map +1 -0
- package/dist/evidence/observed-route-evidence.js +76 -0
- package/dist/evidence/observed-route-evidence.js.map +1 -0
- package/dist/heap.d.ts +61 -0
- package/dist/heap.d.ts.map +1 -0
- package/dist/heap.js +82 -0
- package/dist/heap.js.map +1 -0
- package/dist/heartbeat.d.ts +46 -0
- package/dist/heartbeat.d.ts.map +1 -0
- package/dist/heartbeat.js +66 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/module-trust.d.ts +37 -0
- package/dist/module-trust.d.ts.map +1 -0
- package/dist/module-trust.js +77 -0
- package/dist/module-trust.js.map +1 -0
- package/dist/path-confinement.d.ts +31 -0
- package/dist/path-confinement.d.ts.map +1 -0
- package/dist/path-confinement.js +44 -0
- package/dist/path-confinement.js.map +1 -0
- package/dist/planner/predict-then-propose.d.ts +134 -0
- package/dist/planner/predict-then-propose.d.ts.map +1 -0
- package/dist/planner/predict-then-propose.js +138 -0
- package/dist/planner/predict-then-propose.js.map +1 -0
- package/dist/planner/propose-journey.d.ts +75 -0
- package/dist/planner/propose-journey.d.ts.map +1 -0
- package/dist/planner/propose-journey.js +96 -0
- package/dist/planner/propose-journey.js.map +1 -0
- package/dist/protocol.d.ts +57 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +90 -0
- package/dist/protocol.js.map +1 -0
- package/dist/ready-checks.d.ts +12 -0
- package/dist/ready-checks.d.ts.map +1 -0
- package/dist/ready-checks.js +43 -0
- package/dist/ready-checks.js.map +1 -0
- package/dist/registry.d.ts +103 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +327 -0
- package/dist/registry.js.map +1 -0
- package/dist/render.d.ts +623 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +968 -0
- package/dist/render.js.map +1 -0
- package/dist/runtime-registry.d.ts +22 -0
- package/dist/runtime-registry.d.ts.map +1 -0
- package/dist/runtime-registry.js +142 -0
- package/dist/runtime-registry.js.map +1 -0
- package/dist/sandbox-defaults.d.ts +41 -0
- package/dist/sandbox-defaults.d.ts.map +1 -0
- package/dist/sandbox-defaults.js +14 -0
- package/dist/sandbox-defaults.js.map +1 -0
- package/dist/scenarios/browser-run-plan-projection.d.ts +161 -0
- package/dist/scenarios/browser-run-plan-projection.d.ts.map +1 -0
- package/dist/scenarios/browser-run-plan-projection.js +264 -0
- package/dist/scenarios/browser-run-plan-projection.js.map +1 -0
- package/dist/scenarios/credential-ref.d.ts +102 -0
- package/dist/scenarios/credential-ref.d.ts.map +1 -0
- package/dist/scenarios/credential-ref.js +148 -0
- package/dist/scenarios/credential-ref.js.map +1 -0
- package/dist/scenarios/index.d.ts +7 -0
- package/dist/scenarios/index.d.ts.map +1 -0
- package/dist/scenarios/index.js +7 -0
- package/dist/scenarios/index.js.map +1 -0
- package/dist/scenarios/parse.d.ts +18 -0
- package/dist/scenarios/parse.d.ts.map +1 -0
- package/dist/scenarios/parse.js +212 -0
- package/dist/scenarios/parse.js.map +1 -0
- package/dist/scenarios/scenario.d.ts +93 -0
- package/dist/scenarios/scenario.d.ts.map +1 -0
- package/dist/scenarios/scenario.js +27 -0
- package/dist/scenarios/scenario.js.map +1 -0
- package/dist/scenarios/secret-ref.d.ts +86 -0
- package/dist/scenarios/secret-ref.d.ts.map +1 -0
- package/dist/scenarios/secret-ref.js +125 -0
- package/dist/scenarios/secret-ref.js.map +1 -0
- package/dist/scenarios/storage.d.ts +21 -0
- package/dist/scenarios/storage.d.ts.map +1 -0
- package/dist/scenarios/storage.js +103 -0
- package/dist/scenarios/storage.js.map +1 -0
- package/dist/server.d.ts +61 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +642 -0
- package/dist/server.js.map +1 -0
- package/dist/session.d.ts +356 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +779 -0
- package/dist/session.js.map +1 -0
- package/dist/tools/alias-kit.d.ts +29 -0
- package/dist/tools/alias-kit.d.ts.map +1 -0
- package/dist/tools/alias-kit.js +21 -0
- package/dist/tools/alias-kit.js.map +1 -0
- package/dist/tools/aliases.d.ts +42 -0
- package/dist/tools/aliases.d.ts.map +1 -0
- package/dist/tools/aliases.js +52 -0
- package/dist/tools/aliases.js.map +1 -0
- package/dist/tools/analyze-workspace.d.ts +52 -0
- package/dist/tools/analyze-workspace.d.ts.map +1 -0
- package/dist/tools/analyze-workspace.js +207 -0
- package/dist/tools/analyze-workspace.js.map +1 -0
- package/dist/tools/analyze.d.ts +163 -0
- package/dist/tools/analyze.d.ts.map +1 -0
- package/dist/tools/analyze.js +724 -0
- package/dist/tools/analyze.js.map +1 -0
- package/dist/tools/browser-click.d.ts +18 -0
- package/dist/tools/browser-click.d.ts.map +1 -0
- package/dist/tools/browser-click.js +110 -0
- package/dist/tools/browser-click.js.map +1 -0
- package/dist/tools/browser-close-session.d.ts +39 -0
- package/dist/tools/browser-close-session.d.ts.map +1 -0
- package/dist/tools/browser-close-session.js +120 -0
- package/dist/tools/browser-close-session.js.map +1 -0
- package/dist/tools/browser-fill.d.ts +18 -0
- package/dist/tools/browser-fill.d.ts.map +1 -0
- package/dist/tools/browser-fill.js +117 -0
- package/dist/tools/browser-fill.js.map +1 -0
- package/dist/tools/browser-navigate.d.ts +15 -0
- package/dist/tools/browser-navigate.d.ts.map +1 -0
- package/dist/tools/browser-navigate.js +106 -0
- package/dist/tools/browser-navigate.js.map +1 -0
- package/dist/tools/browser-read.d.ts +33 -0
- package/dist/tools/browser-read.d.ts.map +1 -0
- package/dist/tools/browser-read.js +105 -0
- package/dist/tools/browser-read.js.map +1 -0
- package/dist/tools/browser-run-scenario.d.ts +28 -0
- package/dist/tools/browser-run-scenario.d.ts.map +1 -0
- package/dist/tools/browser-run-scenario.js +238 -0
- package/dist/tools/browser-run-scenario.js.map +1 -0
- package/dist/tools/browser-save-scenario.d.ts +19 -0
- package/dist/tools/browser-save-scenario.d.ts.map +1 -0
- package/dist/tools/browser-save-scenario.js +447 -0
- package/dist/tools/browser-save-scenario.js.map +1 -0
- package/dist/tools/browser-select.d.ts +20 -0
- package/dist/tools/browser-select.d.ts.map +1 -0
- package/dist/tools/browser-select.js +120 -0
- package/dist/tools/browser-select.js.map +1 -0
- package/dist/tools/browser-snapshot.d.ts +46 -0
- package/dist/tools/browser-snapshot.d.ts.map +1 -0
- package/dist/tools/browser-snapshot.js +127 -0
- package/dist/tools/browser-snapshot.js.map +1 -0
- package/dist/tools/browser-start-session.d.ts +24 -0
- package/dist/tools/browser-start-session.d.ts.map +1 -0
- package/dist/tools/browser-start-session.js +653 -0
- package/dist/tools/browser-start-session.js.map +1 -0
- package/dist/tools/browser-submit.d.ts +18 -0
- package/dist/tools/browser-submit.d.ts.map +1 -0
- package/dist/tools/browser-submit.js +106 -0
- package/dist/tools/browser-submit.js.map +1 -0
- package/dist/tools/browser-type.d.ts +18 -0
- package/dist/tools/browser-type.d.ts.map +1 -0
- package/dist/tools/browser-type.js +115 -0
- package/dist/tools/browser-type.js.map +1 -0
- package/dist/tools/browser-wait-for.d.ts +45 -0
- package/dist/tools/browser-wait-for.d.ts.map +1 -0
- package/dist/tools/browser-wait-for.js +164 -0
- package/dist/tools/browser-wait-for.js.map +1 -0
- package/dist/tools/browser.d.ts +69 -0
- package/dist/tools/browser.d.ts.map +1 -0
- package/dist/tools/browser.js +326 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/chain.d.ts +41 -0
- package/dist/tools/chain.d.ts.map +1 -0
- package/dist/tools/chain.js +101 -0
- package/dist/tools/chain.js.map +1 -0
- package/dist/tools/change-scope.d.ts +25 -0
- package/dist/tools/change-scope.d.ts.map +1 -0
- package/dist/tools/change-scope.js +103 -0
- package/dist/tools/change-scope.js.map +1 -0
- package/dist/tools/code-context.d.ts +83 -0
- package/dist/tools/code-context.d.ts.map +1 -0
- package/dist/tools/code-context.js +432 -0
- package/dist/tools/code-context.js.map +1 -0
- package/dist/tools/contracts.d.ts +74 -0
- package/dist/tools/contracts.d.ts.map +1 -0
- package/dist/tools/contracts.js +214 -0
- package/dist/tools/contracts.js.map +1 -0
- package/dist/tools/cross-pr.d.ts +178 -0
- package/dist/tools/cross-pr.d.ts.map +1 -0
- package/dist/tools/cross-pr.js +362 -0
- package/dist/tools/cross-pr.js.map +1 -0
- package/dist/tools/disclosure.d.ts +75 -0
- package/dist/tools/disclosure.d.ts.map +1 -0
- package/dist/tools/disclosure.js +325 -0
- package/dist/tools/disclosure.js.map +1 -0
- package/dist/tools/draw-conclusion.d.ts +55 -0
- package/dist/tools/draw-conclusion.d.ts.map +1 -0
- package/dist/tools/draw-conclusion.js +243 -0
- package/dist/tools/draw-conclusion.js.map +1 -0
- package/dist/tools/git-context.d.ts +39 -0
- package/dist/tools/git-context.d.ts.map +1 -0
- package/dist/tools/git-context.js +374 -0
- package/dist/tools/git-context.js.map +1 -0
- package/dist/tools/git-diff.d.ts +45 -0
- package/dist/tools/git-diff.d.ts.map +1 -0
- package/dist/tools/git-diff.js +338 -0
- package/dist/tools/git-diff.js.map +1 -0
- package/dist/tools/git-history.d.ts +16 -0
- package/dist/tools/git-history.d.ts.map +1 -0
- package/dist/tools/git-history.js +106 -0
- package/dist/tools/git-history.js.map +1 -0
- package/dist/tools/history.d.ts +34 -0
- package/dist/tools/history.d.ts.map +1 -0
- package/dist/tools/history.js +121 -0
- package/dist/tools/history.js.map +1 -0
- package/dist/tools/impact.d.ts +46 -0
- package/dist/tools/impact.d.ts.map +1 -0
- package/dist/tools/impact.js +225 -0
- package/dist/tools/impact.js.map +1 -0
- package/dist/tools/index.d.ts +59 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +70 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/kit.d.ts +165 -0
- package/dist/tools/kit.d.ts.map +1 -0
- package/dist/tools/kit.js +153 -0
- package/dist/tools/kit.js.map +1 -0
- package/dist/tools/link-workspace.d.ts +24 -0
- package/dist/tools/link-workspace.d.ts.map +1 -0
- package/dist/tools/link-workspace.js +131 -0
- package/dist/tools/link-workspace.js.map +1 -0
- package/dist/tools/lookup.d.ts +19 -0
- package/dist/tools/lookup.d.ts.map +1 -0
- package/dist/tools/lookup.js +63 -0
- package/dist/tools/lookup.js.map +1 -0
- package/dist/tools/mark-incident.d.ts +28 -0
- package/dist/tools/mark-incident.d.ts.map +1 -0
- package/dist/tools/mark-incident.js +171 -0
- package/dist/tools/mark-incident.js.map +1 -0
- package/dist/tools/merged-browser.d.ts +11 -0
- package/dist/tools/merged-browser.d.ts.map +1 -0
- package/dist/tools/merged-browser.js +20 -0
- package/dist/tools/merged-browser.js.map +1 -0
- package/dist/tools/merged-context.d.ts +11 -0
- package/dist/tools/merged-context.d.ts.map +1 -0
- package/dist/tools/merged-context.js +21 -0
- package/dist/tools/merged-context.js.map +1 -0
- package/dist/tools/merged-observe.d.ts +13 -0
- package/dist/tools/merged-observe.d.ts.map +1 -0
- package/dist/tools/merged-observe.js +21 -0
- package/dist/tools/merged-observe.js.map +1 -0
- package/dist/tools/merged-workspace.d.ts +14 -0
- package/dist/tools/merged-workspace.d.ts.map +1 -0
- package/dist/tools/merged-workspace.js +21 -0
- package/dist/tools/merged-workspace.js.map +1 -0
- package/dist/tools/observe-runtime.d.ts +262 -0
- package/dist/tools/observe-runtime.d.ts.map +1 -0
- package/dist/tools/observe-runtime.js +1966 -0
- package/dist/tools/observe-runtime.js.map +1 -0
- package/dist/tools/observe-tests.d.ts +57 -0
- package/dist/tools/observe-tests.d.ts.map +1 -0
- package/dist/tools/observe-tests.js +391 -0
- package/dist/tools/observe-tests.js.map +1 -0
- package/dist/tools/observe.d.ts +28 -0
- package/dist/tools/observe.d.ts.map +1 -0
- package/dist/tools/observe.js +291 -0
- package/dist/tools/observe.js.map +1 -0
- package/dist/tools/pr-analysis.d.ts +189 -0
- package/dist/tools/pr-analysis.d.ts.map +1 -0
- package/dist/tools/pr-analysis.js +365 -0
- package/dist/tools/pr-analysis.js.map +1 -0
- package/dist/tools/pre-push.d.ts +168 -0
- package/dist/tools/pre-push.d.ts.map +1 -0
- package/dist/tools/pre-push.js +416 -0
- package/dist/tools/pre-push.js.map +1 -0
- package/dist/tools/predict-reach.d.ts +57 -0
- package/dist/tools/predict-reach.d.ts.map +1 -0
- package/dist/tools/predict-reach.js +183 -0
- package/dist/tools/predict-reach.js.map +1 -0
- package/dist/tools/propagation.d.ts +37 -0
- package/dist/tools/propagation.d.ts.map +1 -0
- package/dist/tools/propagation.js +162 -0
- package/dist/tools/propagation.js.map +1 -0
- package/dist/tools/propose-journey.d.ts +16 -0
- package/dist/tools/propose-journey.d.ts.map +1 -0
- package/dist/tools/propose-journey.js +132 -0
- package/dist/tools/propose-journey.js.map +1 -0
- package/dist/tools/prove-reach.d.ts +74 -0
- package/dist/tools/prove-reach.d.ts.map +1 -0
- package/dist/tools/prove-reach.js +274 -0
- package/dist/tools/prove-reach.js.map +1 -0
- package/dist/tools/questions.d.ts +30 -0
- package/dist/tools/questions.d.ts.map +1 -0
- package/dist/tools/questions.js +230 -0
- package/dist/tools/questions.js.map +1 -0
- package/dist/tools/refusal-fetch.d.ts +35 -0
- package/dist/tools/refusal-fetch.d.ts.map +1 -0
- package/dist/tools/refusal-fetch.js +123 -0
- package/dist/tools/refusal-fetch.js.map +1 -0
- package/dist/tools/runtime-incident.d.ts +33 -0
- package/dist/tools/runtime-incident.d.ts.map +1 -0
- package/dist/tools/runtime-incident.js +67 -0
- package/dist/tools/runtime-incident.js.map +1 -0
- package/dist/tools/runtime-journey-drive.d.ts +102 -0
- package/dist/tools/runtime-journey-drive.d.ts.map +1 -0
- package/dist/tools/runtime-journey-drive.js +247 -0
- package/dist/tools/runtime-journey-drive.js.map +1 -0
- package/dist/tools/scope.d.ts +45 -0
- package/dist/tools/scope.d.ts.map +1 -0
- package/dist/tools/scope.js +217 -0
- package/dist/tools/scope.js.map +1 -0
- package/dist/tools/similar-incidents.d.ts +43 -0
- package/dist/tools/similar-incidents.d.ts.map +1 -0
- package/dist/tools/similar-incidents.js +190 -0
- package/dist/tools/similar-incidents.js.map +1 -0
- package/dist/tools/validate.d.ts +133 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +488 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/tools/verb.d.ts +46 -0
- package/dist/tools/verb.d.ts.map +1 -0
- package/dist/tools/verb.js +78 -0
- package/dist/tools/verb.js.map +1 -0
- package/dist/tools/verification-status.d.ts +38 -0
- package/dist/tools/verification-status.d.ts.map +1 -0
- package/dist/tools/verification-status.js +203 -0
- package/dist/tools/verification-status.js.map +1 -0
- package/dist/tools/verify-claim.d.ts +29 -0
- package/dist/tools/verify-claim.d.ts.map +1 -0
- package/dist/tools/verify-claim.js +218 -0
- package/dist/tools/verify-claim.js.map +1 -0
- package/dist/tools/workspace.d.ts +28 -0
- package/dist/tools/workspace.d.ts.map +1 -0
- package/dist/tools/workspace.js +94 -0
- package/dist/tools/workspace.js.map +1 -0
- package/dist/transport.d.ts +32 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +85 -0
- package/dist/transport.js.map +1 -0
- package/dist/workspace-index.d.ts +164 -0
- package/dist/workspace-index.d.ts.map +1 -0
- package/dist/workspace-index.js +381 -0
- package/dist/workspace-index.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `disclosure` — merges `verification_status` and `refusal_fetch` behind one
|
|
3
|
+
* `verb` (mcp-surface-consolidation.md group 3, §3.4: both read/evidence, and
|
|
4
|
+
* both answer the *coverage* axis — what the graph did or did not reach —
|
|
5
|
+
* rather than a finding's confidence, so the merge preserves the distinction
|
|
6
|
+
* the five-state model exists to protect).
|
|
7
|
+
*
|
|
8
|
+
* `refusal_fetch` is **not** "why a call refused" — read its own section
|
|
9
|
+
* below before touching the "unresolved" verb. It summarises and paginates
|
|
10
|
+
* the graph's ledger of references an adapter could not resolve, and this
|
|
11
|
+
* merge is required to keep three things exactly as they were:
|
|
12
|
+
*
|
|
13
|
+
* 1. **The summary-plus-opaque-handle shape.** No `handle` mints a fresh
|
|
14
|
+
* summary (count, one exemplar, a handle); a `handle` redeems a page. A
|
|
15
|
+
* single flat schema cannot express "these two properties are alternate
|
|
16
|
+
* entry points", so the shape lives in the verb's own logic, unchanged.
|
|
17
|
+
* 2. **The deliberate `{ classified: false }` read.** The default `true`
|
|
18
|
+
* would silently drop unclassified rows (DEC-243) — this is not a stray
|
|
19
|
+
* argument to simplify away.
|
|
20
|
+
* 3. **The uncapped population read.** There is no `limit` on "unresolved":
|
|
21
|
+
* the population this verb summarises must stay stable across a page's
|
|
22
|
+
* lifetime, and a cap here would make that population caller-controlled.
|
|
23
|
+
*
|
|
24
|
+
* Both verbs' behaviour is otherwise unchanged from the tool each replaces.
|
|
25
|
+
*/
|
|
26
|
+
import { computeVerificationStatus, fetchRefusalPage, findNodes, getNode, observedTestCoverage, resolutionOfExercised, summariseRefusals, } from "@descryy/core";
|
|
27
|
+
import { answer, optionalInteger, optionalString, optionalStringArray, ToolInputError, } from "./kit.js";
|
|
28
|
+
import { capBySize, sizeCapNote } from "../capped.js";
|
|
29
|
+
import { loadSources } from "../registry.js";
|
|
30
|
+
import { selectVerb } from "./verb.js";
|
|
31
|
+
/** See `verification-status.ts`'s original module header for the full rationale — reproduced only
|
|
32
|
+
* where these functions are called, not restated, to keep this file's own header the one place
|
|
33
|
+
* that explains why this merge exists. */
|
|
34
|
+
function isInformativeFileNode(n) {
|
|
35
|
+
return n.type === "FILE" && n.resolution > 0;
|
|
36
|
+
}
|
|
37
|
+
function isResolutionZeroFileStub(n) {
|
|
38
|
+
return n.type === "FILE" && n.resolution === 0;
|
|
39
|
+
}
|
|
40
|
+
function representativeForFile(nodes) {
|
|
41
|
+
const informativeFileNodes = nodes.filter(isInformativeFileNode);
|
|
42
|
+
if (informativeFileNodes.length > 0) {
|
|
43
|
+
return informativeFileNodes.reduce((weakest, n) => (n.resolution < weakest.resolution ? n : weakest));
|
|
44
|
+
}
|
|
45
|
+
const realNodes = nodes.filter((n) => !isResolutionZeroFileStub(n));
|
|
46
|
+
const pool = realNodes.length > 0 ? realNodes : nodes;
|
|
47
|
+
return pool.reduce((weakest, n) => (n.resolution < weakest.resolution ? n : weakest));
|
|
48
|
+
}
|
|
49
|
+
function resolveRef(driver, ref) {
|
|
50
|
+
const byId = getNode(driver, ref);
|
|
51
|
+
if (byId !== undefined)
|
|
52
|
+
return { ref, language: byId.language, node: byId };
|
|
53
|
+
const inFile = findNodes(driver, { file: ref });
|
|
54
|
+
if (inFile.length > 0) {
|
|
55
|
+
const node = representativeForFile(inFile);
|
|
56
|
+
return { ref, language: node.language, node };
|
|
57
|
+
}
|
|
58
|
+
return { ref, language: null, node: null };
|
|
59
|
+
}
|
|
60
|
+
async function capabilitiesForUnresolvedRefs(sources, unresolvedRefs, repoPath) {
|
|
61
|
+
const capabilitiesByRef = new Map();
|
|
62
|
+
const failedNotes = [];
|
|
63
|
+
if (unresolvedRefs.length === 0 || sources.length === 0)
|
|
64
|
+
return { capabilitiesByRef, failedNotes };
|
|
65
|
+
const { loaded, failed } = await loadSources(sources, repoPath);
|
|
66
|
+
try {
|
|
67
|
+
for (const ref of unresolvedRefs) {
|
|
68
|
+
const owner = loaded.find((entry) => entry.adapter?.ownsPath?.(ref) === true);
|
|
69
|
+
if (owner?.adapter !== undefined && owner?.adapter !== null) {
|
|
70
|
+
capabilitiesByRef.set(ref, owner.adapter.capabilities());
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
await Promise.all(loaded.map((entry) => entry.adapter?.dispose()));
|
|
76
|
+
}
|
|
77
|
+
for (const failure of failed) {
|
|
78
|
+
failedNotes.push(`A configured source (${failure.spec.module}) did not import (${failure.reason}), so it could ` +
|
|
79
|
+
"not be asked whether it owns any of this call's unresolved refs.");
|
|
80
|
+
}
|
|
81
|
+
return { capabilitiesByRef, failedNotes };
|
|
82
|
+
}
|
|
83
|
+
function brief(ref) {
|
|
84
|
+
return {
|
|
85
|
+
fromNodeId: ref.fromNodeId,
|
|
86
|
+
edgeType: ref.edgeType,
|
|
87
|
+
rawTarget: ref.rawTarget,
|
|
88
|
+
file: ref.file,
|
|
89
|
+
line: ref.line,
|
|
90
|
+
producedBy: ref.producedBy,
|
|
91
|
+
reason: ref.reason,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* `unresolved`'s page has no `limit` (the population must stay stable across
|
|
96
|
+
* a page's lifetime, per this file's own header) and each row carries a
|
|
97
|
+
* free-text `reason`/`rawTarget`, so a page can still overflow the reply
|
|
98
|
+
* budget by row count or by row size. Rows are self-contained; shrinking
|
|
99
|
+
* means dropping trailing rows of this page — the next page's own
|
|
100
|
+
* `nextHandle` is unaffected by this drop.
|
|
101
|
+
*/
|
|
102
|
+
function fitUnresolvedPage(rest, shownItems, budgetBytes) {
|
|
103
|
+
const scaffoldBytes = Buffer.byteLength(JSON.stringify({ ...rest, items: [] }), "utf8");
|
|
104
|
+
const fit = capBySize(shownItems, budgetBytes, scaffoldBytes);
|
|
105
|
+
const notes = fit.droppedForSize === 0 ? [] : [sizeCapNote("row", fit.shown.length, shownItems.length, fit.droppedForSize)];
|
|
106
|
+
return {
|
|
107
|
+
data: { ...rest, items: fit.shown },
|
|
108
|
+
notes,
|
|
109
|
+
...(fit.droppedForSize === 0
|
|
110
|
+
? {}
|
|
111
|
+
: { truncatedDetail: { shown: fit.shown.length, total: rest.total, more: null } }),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// --- per-verb argument ownership, for selectVerb ----------------------------
|
|
115
|
+
const VERB_SPECS = [
|
|
116
|
+
{ verb: "coverage", accepts: ["refs"] },
|
|
117
|
+
{ verb: "unresolved", accepts: ["handle", "pageSize"] },
|
|
118
|
+
];
|
|
119
|
+
const SCHEMA = {
|
|
120
|
+
type: "object",
|
|
121
|
+
properties: {
|
|
122
|
+
verb: {
|
|
123
|
+
type: "string",
|
|
124
|
+
enum: ["coverage", "unresolved"],
|
|
125
|
+
description: "coverage: was this ref reached, and at what resolution. unresolved: page through unresolved references.",
|
|
126
|
+
},
|
|
127
|
+
refs: {
|
|
128
|
+
type: "array",
|
|
129
|
+
items: { type: "string" },
|
|
130
|
+
minItems: 1,
|
|
131
|
+
description: "coverage only, REQUIRED: node ids and/or file paths to check.",
|
|
132
|
+
},
|
|
133
|
+
handle: {
|
|
134
|
+
type: "string",
|
|
135
|
+
description: "unresolved only: fetch the next page. Omit for a fresh summary and starting handle.",
|
|
136
|
+
},
|
|
137
|
+
pageSize: {
|
|
138
|
+
type: "integer",
|
|
139
|
+
minimum: 1,
|
|
140
|
+
description: "unresolved only: rows per page for a fresh handle. Default 50.",
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
required: ["verb"],
|
|
144
|
+
additionalProperties: false,
|
|
145
|
+
};
|
|
146
|
+
function fitCoverage(checked, exercised, notExercised, verifiedByTests, budgetBytes) {
|
|
147
|
+
const scaffoldBytes = Buffer.byteLength(JSON.stringify({ checked, exercised: [], notExercised: [], verifiedByTests: [] }), "utf8");
|
|
148
|
+
let budget = Math.max(budgetBytes - scaffoldBytes, 0);
|
|
149
|
+
const exercisedFit = capBySize(exercised, budget, 0);
|
|
150
|
+
budget = Math.max(budget - Buffer.byteLength(JSON.stringify(exercisedFit.shown), "utf8"), 0);
|
|
151
|
+
const testedFit = capBySize(verifiedByTests, budget, 0);
|
|
152
|
+
budget = Math.max(budget - Buffer.byteLength(JSON.stringify(testedFit.shown), "utf8"), 0);
|
|
153
|
+
const notExercisedFit = capBySize(notExercised, budget, 0);
|
|
154
|
+
const notes = [];
|
|
155
|
+
if (exercisedFit.droppedForSize > 0) {
|
|
156
|
+
notes.push(sizeCapNote("exercised ref", exercisedFit.shown.length, exercised.length, exercisedFit.droppedForSize));
|
|
157
|
+
}
|
|
158
|
+
if (testedFit.droppedForSize > 0) {
|
|
159
|
+
notes.push(sizeCapNote("test-verified ref", testedFit.shown.length, verifiedByTests.length, testedFit.droppedForSize));
|
|
160
|
+
}
|
|
161
|
+
if (notExercisedFit.droppedForSize > 0) {
|
|
162
|
+
notes.push(sizeCapNote("not-exercised ref", notExercisedFit.shown.length, notExercised.length, notExercisedFit.droppedForSize));
|
|
163
|
+
}
|
|
164
|
+
const droppedNow = exercisedFit.droppedForSize + testedFit.droppedForSize + notExercisedFit.droppedForSize;
|
|
165
|
+
const shownNow = exercisedFit.shown.length + testedFit.shown.length + notExercisedFit.shown.length;
|
|
166
|
+
const preFitTotal = exercised.length + verifiedByTests.length + notExercised.length;
|
|
167
|
+
return {
|
|
168
|
+
data: { checked, exercised: exercisedFit.shown, notExercised: notExercisedFit.shown, verifiedByTests: testedFit.shown },
|
|
169
|
+
notes,
|
|
170
|
+
...(droppedNow === 0 ? {} : { truncatedDetail: { shown: shownNow, total: preFitTotal, more: null } }),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
async function runCoverage(args, ctx) {
|
|
174
|
+
const refs = optionalStringArray(args, "refs") ?? [];
|
|
175
|
+
if (refs.length === 0) {
|
|
176
|
+
throw new ToolInputError('"refs" must name at least one node id or file path — with none, there is nothing to report ' +
|
|
177
|
+
"coverage for, and an empty answer would look like a check that ran");
|
|
178
|
+
}
|
|
179
|
+
const driver = ctx.session.store().driver;
|
|
180
|
+
const base = ctx.session.provider().baseStamp();
|
|
181
|
+
ctx.progress(`Checking coverage for ${refs.length} ref(s)`);
|
|
182
|
+
const resolved = refs.map((ref) => resolveRef(driver, ref));
|
|
183
|
+
const unresolvedRefs = resolved.filter((r) => r.node === null).map((r) => r.ref);
|
|
184
|
+
const { capabilitiesByRef, failedNotes } = await capabilitiesForUnresolvedRefs(ctx.session.config.sources, unresolvedRefs, ctx.session.repoPath);
|
|
185
|
+
const scope = resolved.map((r) => ({
|
|
186
|
+
ref: r.ref,
|
|
187
|
+
language: r.language,
|
|
188
|
+
node: r.node,
|
|
189
|
+
capabilities: r.node === null ? capabilitiesByRef.get(r.ref) : undefined,
|
|
190
|
+
}));
|
|
191
|
+
const status = computeVerificationStatus(scope);
|
|
192
|
+
const exercised = status.exercised.map((entry) => resolutionOfExercised(entry));
|
|
193
|
+
const lookupIds = resolved.filter((r) => r.node !== null).map((r) => r.node.id);
|
|
194
|
+
const coverage = observedTestCoverage(driver, lookupIds);
|
|
195
|
+
const verifiedByTests = resolved.flatMap((r) => {
|
|
196
|
+
if (r.node === null)
|
|
197
|
+
return [];
|
|
198
|
+
const found = coverage.get(r.node.id);
|
|
199
|
+
if (found === undefined)
|
|
200
|
+
return [];
|
|
201
|
+
return [
|
|
202
|
+
{
|
|
203
|
+
ref: r.ref,
|
|
204
|
+
direct: found.tests.every((t) => t.direct),
|
|
205
|
+
tests: found.tests.map((t) => ({
|
|
206
|
+
qualifiedName: t.qualifiedName,
|
|
207
|
+
outcome: t.outcome,
|
|
208
|
+
runId: t.runId,
|
|
209
|
+
})),
|
|
210
|
+
},
|
|
211
|
+
];
|
|
212
|
+
});
|
|
213
|
+
return answer({
|
|
214
|
+
headline: (exercised.length === refs.length
|
|
215
|
+
? `All ${refs.length} ref(s) were reached by the graph.`
|
|
216
|
+
: `${exercised.length} of ${refs.length} ref(s) were reached by the graph; ` +
|
|
217
|
+
`${status.notExercised.length} were not — see notExercised for why.`) +
|
|
218
|
+
(verifiedByTests.length > 0
|
|
219
|
+
? ` ${verifiedByTests.length} of them ${verifiedByTests.length === 1 ? "has" : "have"} an observed test run behind ${verifiedByTests.length === 1 ? "it" : "them"}.`
|
|
220
|
+
: ""),
|
|
221
|
+
data: { checked: refs, exercised, notExercised: status.notExercised, verifiedByTests },
|
|
222
|
+
fitToBudget: (budgetBytes) => fitCoverage(refs, exercised, status.notExercised, verifiedByTests, budgetBytes),
|
|
223
|
+
resolutionFloor: exercised.length === 0 ? 0 : Math.min(...exercised.map((e) => e.resolution)),
|
|
224
|
+
commitSha: base.commitSha,
|
|
225
|
+
graphBuiltAt: base.graphBuiltAt,
|
|
226
|
+
irSchemaVersion: base.irSchemaVersion,
|
|
227
|
+
commitSpread: base.commitSpread,
|
|
228
|
+
repoCount: base.repoCount,
|
|
229
|
+
nameLevel: true,
|
|
230
|
+
notes: [
|
|
231
|
+
...(status.notExercised.length === 0
|
|
232
|
+
? []
|
|
233
|
+
: [
|
|
234
|
+
"This tool never names a language for an absent ref — it only asks each configured, " +
|
|
235
|
+
"loaded adapter whether it owns that path. See each notExercised reason for exactly " +
|
|
236
|
+
"what was determined.",
|
|
237
|
+
]),
|
|
238
|
+
...(verifiedByTests.length === 0
|
|
239
|
+
? [
|
|
240
|
+
"No observed test run bears on any of these refs. That is not the same as \"nothing " +
|
|
241
|
+
"tests this\": it is also what you see when no suite has been run through observe_tests " +
|
|
242
|
+
"yet, and this tool cannot tell those apart from the ledger alone.",
|
|
243
|
+
]
|
|
244
|
+
: [
|
|
245
|
+
"verifiedByTests reports that a test which claims to cover a ref actually ran, and how it " +
|
|
246
|
+
"finished. Where direct is false the claim crosses a static TESTS edge: the run witnessed " +
|
|
247
|
+
"the test executing, not the test touching that ref. An outcome of failed or skipped is " +
|
|
248
|
+
"reported rather than filtered — being covered by a failing test is not being verified.",
|
|
249
|
+
]),
|
|
250
|
+
...failedNotes,
|
|
251
|
+
],
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
async function runUnresolved(args, ctx) {
|
|
255
|
+
const handle = optionalString(args, "handle");
|
|
256
|
+
const pageSize = optionalInteger(args, "pageSize", 1);
|
|
257
|
+
const base = ctx.session.provider().baseStamp();
|
|
258
|
+
ctx.progress("Reading the unresolved-reference ledger");
|
|
259
|
+
const { refs } = ctx.session.provider().unresolvedRefs({ classified: false });
|
|
260
|
+
const envelopeBase = {
|
|
261
|
+
resolutionFloor: 0,
|
|
262
|
+
commitSha: base.commitSha,
|
|
263
|
+
graphBuiltAt: base.graphBuiltAt,
|
|
264
|
+
irSchemaVersion: base.irSchemaVersion,
|
|
265
|
+
commitSpread: base.commitSpread,
|
|
266
|
+
repoCount: base.repoCount,
|
|
267
|
+
nameLevel: true,
|
|
268
|
+
};
|
|
269
|
+
if (handle === undefined) {
|
|
270
|
+
ctx.progress(`Summarising ${refs.length} unresolved reference(s)`);
|
|
271
|
+
const summary = summariseRefusals(refs, pageSize);
|
|
272
|
+
return answer({
|
|
273
|
+
...envelopeBase,
|
|
274
|
+
state: summary.count === 0 ? "empty" : "ok",
|
|
275
|
+
headline: summary.count === 0
|
|
276
|
+
? "No unresolved references are recorded — nothing for the unresolved verb to page through."
|
|
277
|
+
: `${summary.count} unresolved reference(s) recorded. Exemplar: "${summary.exemplar}". Call again with { "verb": "unresolved", "handle": "${summary.handle}" } to page through the rest.`,
|
|
278
|
+
notes: summary.count === 0
|
|
279
|
+
? ["The graph has no unresolved-reference rows at all — every edge either resolved or was never attempted."]
|
|
280
|
+
: [],
|
|
281
|
+
data: { kind: "summary", count: summary.count, exemplar: summary.exemplar, handle: summary.handle },
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
ctx.progress("Redeeming the unresolved-verb handle");
|
|
285
|
+
const page = fetchRefusalPage(refs, handle);
|
|
286
|
+
if (page.state === "refused") {
|
|
287
|
+
return answer({
|
|
288
|
+
...envelopeBase,
|
|
289
|
+
state: "refused",
|
|
290
|
+
headline: "This handle could not be redeemed.",
|
|
291
|
+
notes: [page.reason],
|
|
292
|
+
data: { kind: "page", items: [], total: 0, nextHandle: null },
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
const restOfPageData = { kind: "page", total: page.total, nextHandle: page.nextHandle };
|
|
296
|
+
const shapedItems = page.items.map(brief);
|
|
297
|
+
return answer({
|
|
298
|
+
...envelopeBase,
|
|
299
|
+
headline: `Page of ${page.items.length} unresolved reference(s), of ${page.total} total.`,
|
|
300
|
+
notes: [],
|
|
301
|
+
data: { ...restOfPageData, items: shapedItems },
|
|
302
|
+
fitToBudget: (budgetBytes) => fitUnresolvedPage(restOfPageData, shapedItems, budgetBytes),
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
async function run(args, ctx) {
|
|
306
|
+
const verb = selectVerb(args, "verb", VERB_SPECS);
|
|
307
|
+
switch (verb) {
|
|
308
|
+
case "coverage":
|
|
309
|
+
return runCoverage(args, ctx);
|
|
310
|
+
case "unresolved":
|
|
311
|
+
return runUnresolved(args, ctx);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
export const disclosureTool = {
|
|
315
|
+
name: "disclosure",
|
|
316
|
+
class: "read",
|
|
317
|
+
tier: "evidence",
|
|
318
|
+
version: "1.0.0",
|
|
319
|
+
title: "Coverage: what the graph reached, and what it could not resolve",
|
|
320
|
+
description: "coverage: given node ids/file paths, report which were reached, at what resolution, and " +
|
|
321
|
+
"by which test runs. unresolved: page through references the graph could never resolve.",
|
|
322
|
+
inputSchema: SCHEMA,
|
|
323
|
+
run,
|
|
324
|
+
};
|
|
325
|
+
//# sourceMappingURL=disclosure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disclosure.js","sourceRoot":"","sources":["../../src/tools/disclosure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `draw_conclusion` — RG-8(a): routes evidence and a graph path through the real finding
|
|
3
|
+
* funnel (`@descryy/ir`'s G3/G4 gate, `packages/ir/src/finding.ts`) and returns a governed
|
|
4
|
+
* category, in the same five-category vocabulary (`ReportCategory`) the desktop's pipeline
|
|
5
|
+
* uses — not a raw evidence tally the caller has to interpret itself.
|
|
6
|
+
*
|
|
7
|
+
* This closes the open half of the `FINDING_CAPS` ruling: until this tool existed, nothing on
|
|
8
|
+
* the MCP surface ever called `reportCategory` — `observe_runtime` writes R4 facts and reports
|
|
9
|
+
* evidence counts, but never gates them into a category. An MCP client reading `observe_runtime`'s
|
|
10
|
+
* reply was, at most, "reading the evidence back" — this tool is what makes "the finding" an
|
|
11
|
+
* honest word for what MCP returns.
|
|
12
|
+
*
|
|
13
|
+
* **What this tool does not do.** It does not draw its own graph path or gather its own runtime
|
|
14
|
+
* evidence — those come from the caller, who already holds them from `impact`/`propagation` (a
|
|
15
|
+
* `GraphPathHop[]`) and `observe_runtime`/the browser tools (runtime observations). This tool is
|
|
16
|
+
* the gate alone: the same `reportCategory` arithmetic the architecture specifies, called once,
|
|
17
|
+
* from one place, so a category MCP returns and a category the desktop's pipeline computes are
|
|
18
|
+
* never two independently-typed re-implementations agreeing by coincidence.
|
|
19
|
+
*
|
|
20
|
+
* `class: "read"` — same as this server's other three conclusion tools (`validate`, `contracts`,
|
|
21
|
+
* `cross_pr`): it changes nothing and mints no token. A category computed from evidence the
|
|
22
|
+
* caller already supplied is a read over that evidence, not a new write against the target.
|
|
23
|
+
*/
|
|
24
|
+
import { type ResolutionLevel } from "@descryy/ir";
|
|
25
|
+
import { type ToolContext, type ToolDefinition } from "./kit.ts";
|
|
26
|
+
import type { ToolAnswer } from "../render.ts";
|
|
27
|
+
export interface DrawConclusionData {
|
|
28
|
+
readonly failurePoint: string;
|
|
29
|
+
/** §19's five-category vocabulary — the same `ReportCategory` the desktop's report surface renders. */
|
|
30
|
+
readonly category: string;
|
|
31
|
+
/** The class (A/B/C) that capped it — rule 3, `reliabilityCap`. */
|
|
32
|
+
readonly reliabilityClass: string;
|
|
33
|
+
/** Step 2 alone, uncapped by the structural path — how strongly the evidence says the failure is real. */
|
|
34
|
+
readonly existence: string;
|
|
35
|
+
readonly resolution: ResolutionLevel;
|
|
36
|
+
readonly independentSignalTypes: number;
|
|
37
|
+
readonly directMechanismEvidence: boolean;
|
|
38
|
+
readonly hasRuntimeEvidence: boolean;
|
|
39
|
+
readonly humanAsserted: boolean;
|
|
40
|
+
/** Echoed back only when the caller supplied one — see the schema's own doc for why this is
|
|
41
|
+
* inert unless a future call also names `requireReproductionForConfirmed`. */
|
|
42
|
+
readonly reproductionCount: number | null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Exported so a caller can see the answer's real shape.
|
|
46
|
+
*
|
|
47
|
+
* `ToolDefinition` erases the type parameter — it has to, the registry is one
|
|
48
|
+
* array of many shapes — so reaching this through `drawConclusionTool.run`
|
|
49
|
+
* hands back an erased `data` and every assertion on a field of it fails to
|
|
50
|
+
* compile. The tool object stays the registry's entry point; this is the typed
|
|
51
|
+
* one, for tests and for any in-process caller that needs the shape.
|
|
52
|
+
*/
|
|
53
|
+
export declare function runDrawConclusion(args: Record<string, unknown>, ctx: ToolContext): Promise<ToolAnswer<DrawConclusionData>>;
|
|
54
|
+
export declare const drawConclusionTool: ToolDefinition;
|
|
55
|
+
//# sourceMappingURL=draw-conclusion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draw-conclusion.d.ts","sourceRoot":"","sources":["../../src/tools/draw-conclusion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAWL,KAAK,eAAe,EAGrB,MAAM,aAAa,CAAC;AAErB,OAAO,EAA4E,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAC3I,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,uGAAuG;IACvG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,0GAA0G;IAC1G,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC;mFAC+E;IAC/E,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAwID;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CA+DzC;AAED,eAAO,MAAM,kBAAkB,EAAE,cAWhC,CAAC"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `draw_conclusion` — RG-8(a): routes evidence and a graph path through the real finding
|
|
3
|
+
* funnel (`@descryy/ir`'s G3/G4 gate, `packages/ir/src/finding.ts`) and returns a governed
|
|
4
|
+
* category, in the same five-category vocabulary (`ReportCategory`) the desktop's pipeline
|
|
5
|
+
* uses — not a raw evidence tally the caller has to interpret itself.
|
|
6
|
+
*
|
|
7
|
+
* This closes the open half of the `FINDING_CAPS` ruling: until this tool existed, nothing on
|
|
8
|
+
* the MCP surface ever called `reportCategory` — `observe_runtime` writes R4 facts and reports
|
|
9
|
+
* evidence counts, but never gates them into a category. An MCP client reading `observe_runtime`'s
|
|
10
|
+
* reply was, at most, "reading the evidence back" — this tool is what makes "the finding" an
|
|
11
|
+
* honest word for what MCP returns.
|
|
12
|
+
*
|
|
13
|
+
* **What this tool does not do.** It does not draw its own graph path or gather its own runtime
|
|
14
|
+
* evidence — those come from the caller, who already holds them from `impact`/`propagation` (a
|
|
15
|
+
* `GraphPathHop[]`) and `observe_runtime`/the browser tools (runtime observations). This tool is
|
|
16
|
+
* the gate alone: the same `reportCategory` arithmetic the architecture specifies, called once,
|
|
17
|
+
* from one place, so a category MCP returns and a category the desktop's pipeline computes are
|
|
18
|
+
* never two independently-typed re-implementations agreeing by coincidence.
|
|
19
|
+
*
|
|
20
|
+
* `class: "read"` — same as this server's other three conclusion tools (`validate`, `contracts`,
|
|
21
|
+
* `cross_pr`): it changes nothing and mints no token. A category computed from evidence the
|
|
22
|
+
* caller already supplied is a read over that evidence, not a new write against the target.
|
|
23
|
+
*/
|
|
24
|
+
import { directMechanismEvidence, evidencePrecondition, humanAssertedOnPath, independentSignalTypes, minimumResolution, reportCategory, RESOLUTION_LEVELS, RUNTIME_SIGNAL_TYPES, } from "@descryy/ir";
|
|
25
|
+
import { answer, optionalBoolean, optionalInteger, requiredString, ToolInputError } from "./kit.js";
|
|
26
|
+
const EDGE_TYPE_ENUM = [
|
|
27
|
+
"CALLS",
|
|
28
|
+
"IMPORTS",
|
|
29
|
+
"READS",
|
|
30
|
+
"WRITES",
|
|
31
|
+
"RETURNS",
|
|
32
|
+
"IMPLEMENTS",
|
|
33
|
+
"INHERITS",
|
|
34
|
+
"USES_API",
|
|
35
|
+
"SERVES_API",
|
|
36
|
+
"USES_TYPE",
|
|
37
|
+
"PROPAGATES_TO",
|
|
38
|
+
"TESTS",
|
|
39
|
+
"FIXED_BY",
|
|
40
|
+
"CHANGES_WITH",
|
|
41
|
+
"INCIDENT_CORRELATED",
|
|
42
|
+
];
|
|
43
|
+
const SCHEMA = {
|
|
44
|
+
type: "object",
|
|
45
|
+
properties: {
|
|
46
|
+
failurePoint: {
|
|
47
|
+
type: "string",
|
|
48
|
+
description: "Node id claimed to have failed; must match a runtime observation's nodeId exactly.",
|
|
49
|
+
},
|
|
50
|
+
graphPath: {
|
|
51
|
+
type: "array",
|
|
52
|
+
description: "Path this finding rests on, from impact/propagation. Capped by the weakest hop's resolution.",
|
|
53
|
+
items: {
|
|
54
|
+
type: "object",
|
|
55
|
+
properties: {
|
|
56
|
+
from: { type: "string" },
|
|
57
|
+
to: { type: "string" },
|
|
58
|
+
edgeType: { type: "string", enum: [...EDGE_TYPE_ENUM] },
|
|
59
|
+
resolution: { type: "integer", enum: [...RESOLUTION_LEVELS] },
|
|
60
|
+
humanAsserted: {
|
|
61
|
+
type: "boolean",
|
|
62
|
+
description: "Confirmed by a person, not analysis.",
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
required: ["from", "to", "edgeType", "resolution"],
|
|
66
|
+
additionalProperties: false,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
runtimeEvidence: {
|
|
70
|
+
type: "array",
|
|
71
|
+
description: "Observations from observe or the browser tools. Empty returns unconfirmed regardless of graphPath.",
|
|
72
|
+
items: {
|
|
73
|
+
type: "object",
|
|
74
|
+
properties: {
|
|
75
|
+
signal: { type: "string", enum: [...RUNTIME_SIGNAL_TYPES, null] },
|
|
76
|
+
detail: { type: "string" },
|
|
77
|
+
nodeId: { type: "string" },
|
|
78
|
+
directMechanism: {
|
|
79
|
+
type: "boolean",
|
|
80
|
+
description: "Directly enacts the failure, not merely co-occurring.",
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
required: ["detail"],
|
|
84
|
+
additionalProperties: false,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
nameLevel: {
|
|
88
|
+
type: "boolean",
|
|
89
|
+
description: "True when the claim is about a name, not a shape. Default false.",
|
|
90
|
+
},
|
|
91
|
+
reproductionCount: {
|
|
92
|
+
type: "integer",
|
|
93
|
+
description: "Independent times observed. Optional; echoed back, doesn't yet affect reportCategory.",
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
required: ["failurePoint", "graphPath", "runtimeEvidence"],
|
|
97
|
+
additionalProperties: false,
|
|
98
|
+
};
|
|
99
|
+
function readGraphPath(args) {
|
|
100
|
+
const raw = args["graphPath"];
|
|
101
|
+
if (!Array.isArray(raw))
|
|
102
|
+
throw new ToolInputError('"graphPath" must be an array');
|
|
103
|
+
return raw.map((entry, index) => {
|
|
104
|
+
if (typeof entry !== "object" || entry === null)
|
|
105
|
+
throw new ToolInputError(`"graphPath[${String(index)}]" must be an object`);
|
|
106
|
+
const hop = entry;
|
|
107
|
+
const from = hop["from"];
|
|
108
|
+
const to = hop["to"];
|
|
109
|
+
const edgeType = hop["edgeType"];
|
|
110
|
+
const resolution = hop["resolution"];
|
|
111
|
+
if (typeof from !== "string" || from === "")
|
|
112
|
+
throw new ToolInputError(`"graphPath[${String(index)}].from" is required`);
|
|
113
|
+
if (typeof to !== "string" || to === "")
|
|
114
|
+
throw new ToolInputError(`"graphPath[${String(index)}].to" is required`);
|
|
115
|
+
if (typeof edgeType !== "string" || !EDGE_TYPE_ENUM.includes(edgeType)) {
|
|
116
|
+
throw new ToolInputError(`"graphPath[${String(index)}].edgeType" must be one of: ${EDGE_TYPE_ENUM.join(", ")}`);
|
|
117
|
+
}
|
|
118
|
+
if (typeof resolution !== "number" || !RESOLUTION_LEVELS.includes(resolution)) {
|
|
119
|
+
throw new ToolInputError(`"graphPath[${String(index)}].resolution" must be one of: ${RESOLUTION_LEVELS.join(", ")}`);
|
|
120
|
+
}
|
|
121
|
+
const humanAsserted = hop["humanAsserted"];
|
|
122
|
+
if (humanAsserted !== undefined && typeof humanAsserted !== "boolean") {
|
|
123
|
+
throw new ToolInputError(`"graphPath[${String(index)}].humanAsserted" must be a boolean`);
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
from,
|
|
127
|
+
to,
|
|
128
|
+
edgeType: edgeType,
|
|
129
|
+
resolution: resolution,
|
|
130
|
+
...(humanAsserted === undefined ? {} : { humanAsserted }),
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
function readRuntimeEvidence(args) {
|
|
135
|
+
const raw = args["runtimeEvidence"];
|
|
136
|
+
if (!Array.isArray(raw))
|
|
137
|
+
throw new ToolInputError('"runtimeEvidence" must be an array');
|
|
138
|
+
return raw.map((entry, index) => {
|
|
139
|
+
if (typeof entry !== "object" || entry === null)
|
|
140
|
+
throw new ToolInputError(`"runtimeEvidence[${String(index)}]" must be an object`);
|
|
141
|
+
const item = entry;
|
|
142
|
+
const detail = item["detail"];
|
|
143
|
+
if (typeof detail !== "string")
|
|
144
|
+
throw new ToolInputError(`"runtimeEvidence[${String(index)}].detail" is required`);
|
|
145
|
+
const signal = item["signal"];
|
|
146
|
+
if (signal !== undefined && signal !== null && (typeof signal !== "string" || !RUNTIME_SIGNAL_TYPES.includes(signal))) {
|
|
147
|
+
throw new ToolInputError(`"runtimeEvidence[${String(index)}].signal" must be one of: ${RUNTIME_SIGNAL_TYPES.join(", ")}, or null`);
|
|
148
|
+
}
|
|
149
|
+
const nodeId = item["nodeId"];
|
|
150
|
+
if (nodeId !== undefined && typeof nodeId !== "string")
|
|
151
|
+
throw new ToolInputError(`"runtimeEvidence[${String(index)}].nodeId" must be a string`);
|
|
152
|
+
const directMechanism = item["directMechanism"];
|
|
153
|
+
if (directMechanism !== undefined && typeof directMechanism !== "boolean") {
|
|
154
|
+
throw new ToolInputError(`"runtimeEvidence[${String(index)}].directMechanism" must be a boolean`);
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
signal: (signal ?? null),
|
|
158
|
+
detail,
|
|
159
|
+
...(nodeId === undefined ? {} : { nodeId }),
|
|
160
|
+
...(directMechanism === undefined ? {} : { directMechanism }),
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Exported so a caller can see the answer's real shape.
|
|
166
|
+
*
|
|
167
|
+
* `ToolDefinition` erases the type parameter — it has to, the registry is one
|
|
168
|
+
* array of many shapes — so reaching this through `drawConclusionTool.run`
|
|
169
|
+
* hands back an erased `data` and every assertion on a field of it fails to
|
|
170
|
+
* compile. The tool object stays the registry's entry point; this is the typed
|
|
171
|
+
* one, for tests and for any in-process caller that needs the shape.
|
|
172
|
+
*/
|
|
173
|
+
export async function runDrawConclusion(args, ctx) {
|
|
174
|
+
const failurePoint = requiredString(args, "failurePoint");
|
|
175
|
+
const graphPath = readGraphPath(args);
|
|
176
|
+
const runtimeEvidence = readRuntimeEvidence(args);
|
|
177
|
+
const nameLevel = optionalBoolean(args, "nameLevel") ?? false;
|
|
178
|
+
const reproductionCount = optionalInteger(args, "reproductionCount", 0) ?? null;
|
|
179
|
+
const hasRuntimeEvidence = evidencePrecondition(runtimeEvidence);
|
|
180
|
+
const resolution = minimumResolution(graphPath);
|
|
181
|
+
const humanAsserted = humanAssertedOnPath(graphPath);
|
|
182
|
+
const eSignals = independentSignalTypes(runtimeEvidence);
|
|
183
|
+
const mMechanism = directMechanismEvidence(runtimeEvidence, failurePoint);
|
|
184
|
+
// The real gate — the one function `@descryy/ir`'s own module doc calls "G3/G4, `ai-
|
|
185
|
+
// governance-spec.md` §4-5, stage 14". Called with its default config (reproduction
|
|
186
|
+
// requirement off), the same as every other caller today — see the schema's own doc.
|
|
187
|
+
const gated = reportCategory({
|
|
188
|
+
hasRuntimeEvidence,
|
|
189
|
+
independentSignalTypes: eSignals,
|
|
190
|
+
directMechanismEvidence: mMechanism,
|
|
191
|
+
resolution,
|
|
192
|
+
nameLevel,
|
|
193
|
+
humanAsserted,
|
|
194
|
+
});
|
|
195
|
+
const base = ctx.session.provider().baseStamp();
|
|
196
|
+
return answer({
|
|
197
|
+
headline: `"${failurePoint}": ${gated.category}` +
|
|
198
|
+
(hasRuntimeEvidence ? "" : " (no runtime evidence was supplied — G3 fails unconditionally)") +
|
|
199
|
+
`. Reliability class ${gated.reliabilityClass}, resolution R${String(resolution)}.`,
|
|
200
|
+
nameLevel,
|
|
201
|
+
resolutionFloor: resolution,
|
|
202
|
+
commitSha: base.commitSha,
|
|
203
|
+
graphBuiltAt: base.graphBuiltAt,
|
|
204
|
+
irSchemaVersion: base.irSchemaVersion,
|
|
205
|
+
commitSpread: base.commitSpread,
|
|
206
|
+
repoCount: base.repoCount,
|
|
207
|
+
notes: [
|
|
208
|
+
"This category is computed by the same reportCategory gate the desktop's pipeline runs " +
|
|
209
|
+
"(packages/ir/src/finding.ts) — not a second, independent classifier. A caller reading " +
|
|
210
|
+
"this reply is reading a governed finding, not raw evidence.",
|
|
211
|
+
...(graphPath.length === 0
|
|
212
|
+
? ["\"graphPath\" was empty, so resolution derives to R0 — the conservative floor, per rule 2."]
|
|
213
|
+
: []),
|
|
214
|
+
...(runtimeEvidence.length === 0
|
|
215
|
+
? ["\"runtimeEvidence\" was empty, so G3 fails and this call returns \"unconfirmed\" regardless of graphPath."]
|
|
216
|
+
: []),
|
|
217
|
+
],
|
|
218
|
+
data: {
|
|
219
|
+
failurePoint,
|
|
220
|
+
category: gated.category,
|
|
221
|
+
reliabilityClass: gated.reliabilityClass,
|
|
222
|
+
existence: gated.existence,
|
|
223
|
+
resolution,
|
|
224
|
+
independentSignalTypes: eSignals,
|
|
225
|
+
directMechanismEvidence: mMechanism,
|
|
226
|
+
hasRuntimeEvidence,
|
|
227
|
+
humanAsserted,
|
|
228
|
+
reproductionCount,
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
export const drawConclusionTool = {
|
|
233
|
+
name: "draw_conclusion",
|
|
234
|
+
class: "read",
|
|
235
|
+
tier: "conclusion",
|
|
236
|
+
version: "1.0.0",
|
|
237
|
+
title: "Gate evidence and a graph path into a governed finding category",
|
|
238
|
+
description: "Take a graph path and runtime evidence you already hold, and return the report category " +
|
|
239
|
+
"the governance gate assigns them. Does not gather evidence itself; states a verdict.",
|
|
240
|
+
inputSchema: SCHEMA,
|
|
241
|
+
run: runDrawConclusion,
|
|
242
|
+
};
|
|
243
|
+
//# sourceMappingURL=draw-conclusion.js.map
|