@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,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `contracts` — path half (name-level, R2→A) runs today; shape half (§13)
|
|
3
|
+
* needs producer-attached shapes, reporting `refused` with named blockers
|
|
4
|
+
* rather than an empty list. `defect` is provable here alone; `lead` is not.
|
|
5
|
+
*/
|
|
6
|
+
import { checkContracts, withProminence } from "@descryy/core";
|
|
7
|
+
import { briefNode, optionalInteger, optionalStringArray, } from "./kit.js";
|
|
8
|
+
import { capBySize, sizeCapNote } from "../capped.js";
|
|
9
|
+
const SCHEMA = {
|
|
10
|
+
type: "object",
|
|
11
|
+
properties: {
|
|
12
|
+
paths: {
|
|
13
|
+
type: "array",
|
|
14
|
+
items: { type: "string" },
|
|
15
|
+
description: "Restrict to endpoints whose path contains one of these substrings, e.g. \"/orders\".",
|
|
16
|
+
},
|
|
17
|
+
files: {
|
|
18
|
+
type: "array",
|
|
19
|
+
items: { type: "string" },
|
|
20
|
+
description: "Restrict to findings touching these files — e.g. a diff about to be pushed.",
|
|
21
|
+
},
|
|
22
|
+
pathsOnly: {
|
|
23
|
+
type: "boolean",
|
|
24
|
+
description: "Skip the shape comparison. Faster; honest when there's no type checker.",
|
|
25
|
+
},
|
|
26
|
+
maxFindings: {
|
|
27
|
+
type: "integer",
|
|
28
|
+
minimum: 1,
|
|
29
|
+
description: "Cap on findings. Default 25; overflow disclosed, not dropped.",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
additionalProperties: false,
|
|
33
|
+
};
|
|
34
|
+
/** True when at least one of `nodes` has a `file` in `scope`. No scope given means every node passes. */
|
|
35
|
+
function touchesFiles(nodes, scope) {
|
|
36
|
+
return scope === undefined || nodes.some((n) => n.file !== null && scope.includes(n.file));
|
|
37
|
+
}
|
|
38
|
+
function fitContracts(rest, findings, shapeMismatches, budgetBytes) {
|
|
39
|
+
const scaffoldBytes = Buffer.byteLength(JSON.stringify({ ...rest, findings: [], shapeMismatches: [] }), "utf8");
|
|
40
|
+
let budget = Math.max(budgetBytes - scaffoldBytes, 0);
|
|
41
|
+
const findingsFit = capBySize(findings, budget, 0);
|
|
42
|
+
budget = Math.max(budget - Buffer.byteLength(JSON.stringify(findingsFit.shown), "utf8"), 0);
|
|
43
|
+
const mismatchesFit = capBySize(shapeMismatches, budget, 0);
|
|
44
|
+
const notes = [];
|
|
45
|
+
if (findingsFit.droppedForSize > 0) {
|
|
46
|
+
notes.push(sizeCapNote("finding", findingsFit.shown.length, findings.length, findingsFit.droppedForSize));
|
|
47
|
+
}
|
|
48
|
+
if (mismatchesFit.droppedForSize > 0) {
|
|
49
|
+
notes.push(sizeCapNote("shape mismatch", mismatchesFit.shown.length, shapeMismatches.length, mismatchesFit.droppedForSize));
|
|
50
|
+
}
|
|
51
|
+
const droppedNow = findingsFit.droppedForSize + mismatchesFit.droppedForSize;
|
|
52
|
+
const shownNow = findingsFit.shown.length + mismatchesFit.shown.length;
|
|
53
|
+
const preFitTotal = findings.length + shapeMismatches.length;
|
|
54
|
+
return {
|
|
55
|
+
data: { ...rest, findings: findingsFit.shown, shapeMismatches: mismatchesFit.shown },
|
|
56
|
+
notes,
|
|
57
|
+
...(droppedNow === 0 ? {} : { truncatedDetail: { shown: shownNow, total: preFitTotal, more: null } }),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async function run(args, ctx) {
|
|
61
|
+
const filters = optionalStringArray(args, "paths");
|
|
62
|
+
const fileScope = optionalStringArray(args, "files");
|
|
63
|
+
const maxFindings = optionalInteger(args, "maxFindings", 1);
|
|
64
|
+
const pathsOnly = args["pathsOnly"] === true;
|
|
65
|
+
const provider = ctx.session.provider();
|
|
66
|
+
ctx.progress("Matching callers against routes");
|
|
67
|
+
const checked = checkContracts(provider, {
|
|
68
|
+
...(maxFindings === undefined ? {} : { maxFindings }),
|
|
69
|
+
...(pathsOnly ? { pathsOnly: true } : {}),
|
|
70
|
+
});
|
|
71
|
+
const { paths, shapes } = checked.data;
|
|
72
|
+
const notes = [...checked.notes];
|
|
73
|
+
// Filtering happens after the check so the counts describe the whole graph
|
|
74
|
+
// — a shrinking denominator would make a narrow query look healthy.
|
|
75
|
+
const matchesPath = (template) => filters === undefined || filters.some((f) => template.includes(f));
|
|
76
|
+
const findings = paths.findings.filter((f) => matchesPath(f.pathTemplate) && touchesFiles([...f.callers, ...f.routes], fileScope));
|
|
77
|
+
const mismatches = shapes.mismatches.filter((m) => matchesPath(String(m.endpoint.attrs["pathTemplate"] ?? m.endpoint.name)) &&
|
|
78
|
+
touchesFiles([m.reader, m.writer], fileScope));
|
|
79
|
+
if (filters !== undefined) {
|
|
80
|
+
notes.push(`Filtered to endpoints matching ${filters.map((f) => `"${f}"`).join(", ")}. The counts ` +
|
|
81
|
+
"below describe the whole graph; the lists describe the filter.");
|
|
82
|
+
}
|
|
83
|
+
if (fileScope !== undefined) {
|
|
84
|
+
notes.push(`Filtered to findings touching ${fileScope.length} named file(s). The counts below describe ` +
|
|
85
|
+
"the whole graph; the lists describe the filter.");
|
|
86
|
+
}
|
|
87
|
+
// A `paths` filter matching zero endpoints means it named something never
|
|
88
|
+
// parsed as a route/endpoint — a different claim than "checked, fine."
|
|
89
|
+
// API_ROUTE is checked too: an unmounted route has no API_ENDPOINT at all.
|
|
90
|
+
let pathsMatchedNothing = false;
|
|
91
|
+
if (filters !== undefined) {
|
|
92
|
+
const endpoints = provider.nodesOfType("API_ENDPOINT");
|
|
93
|
+
const routes = provider.nodesOfType("API_ROUTE");
|
|
94
|
+
const matched = (n) => matchesPath(String(n.attrs["pathTemplate"] ?? n.name));
|
|
95
|
+
pathsMatchedNothing = !endpoints.nodes.some(matched) && !routes.nodes.some(matched);
|
|
96
|
+
}
|
|
97
|
+
const defects = findings.filter((f) => f.claim === "defect").length + mismatches.length;
|
|
98
|
+
const leads = findings.filter((f) => f.claim === "lead").length;
|
|
99
|
+
if (findings.length > 0) {
|
|
100
|
+
notes.push("findings are ranked by evidence strength — their own resolution, strongest first — not by " +
|
|
101
|
+
"claim. A call reaching no route and a route nothing calls can each rest on strong or weak " +
|
|
102
|
+
"evidence; which of them is a defect versus a lead is a separate axis (claim), not a ranking.");
|
|
103
|
+
}
|
|
104
|
+
// Zero API_ENDPOINT nodes usually means nothing to check — but not when the
|
|
105
|
+
// mount check found an independent ROUTE_NOT_MOUNTED finding with no
|
|
106
|
+
// endpoint in the graph; refusing then would bury a real finding.
|
|
107
|
+
const nothingToCheck = paths.checked.endpoints === 0 && paths.findingsTotal === 0;
|
|
108
|
+
// MK-7: graded on `claim` — a lead is worth a look; a defect is provable
|
|
109
|
+
// from this graph alone (`nearMiss` keeps a mere typo out of the count).
|
|
110
|
+
const verdict = defects > 0
|
|
111
|
+
? `${defects} defect(s) found`
|
|
112
|
+
: leads > 0
|
|
113
|
+
? `No defects; ${leads} lead(s) to review`
|
|
114
|
+
: "Clean at path level";
|
|
115
|
+
// render.ts refuses a `truncated` answer with no `truncatedDetail`, so this
|
|
116
|
+
// must be supplied whenever `checked.truncated` is set; `total` is the
|
|
117
|
+
// whole unfiltered graph, an honest upper bound on `shown`.
|
|
118
|
+
const truncatedDetail = checked.truncated
|
|
119
|
+
? { shown: findings.length, total: Math.max(paths.findingsTotal, findings.length), more: null }
|
|
120
|
+
: undefined;
|
|
121
|
+
const shapedFindings = withProminence(
|
|
122
|
+
// Sorted before ranking, because `withProminence` deliberately does
|
|
123
|
+
// not sort: rank must follow the order the reply actually reports.
|
|
124
|
+
// Ties keep the checker's own order, which is stable.
|
|
125
|
+
[...findings]
|
|
126
|
+
.sort((a, b) => b.resolution - a.resolution)
|
|
127
|
+
.map((f) => ({
|
|
128
|
+
kind: f.kind,
|
|
129
|
+
// Whether this asserts a fault. Carried as a field because the
|
|
130
|
+
// sentence below already said it and nothing could read prose.
|
|
131
|
+
claim: f.claim,
|
|
132
|
+
method: f.method,
|
|
133
|
+
path: f.pathTemplate,
|
|
134
|
+
detail: f.detail,
|
|
135
|
+
resolution: f.resolution,
|
|
136
|
+
...(f.nearMiss === null
|
|
137
|
+
? {}
|
|
138
|
+
: { nearMiss: { kind: f.nearMiss.kind, against: f.nearMiss.against } }),
|
|
139
|
+
callers: f.callers.slice(0, 5).map(briefNode),
|
|
140
|
+
routes: f.routes.slice(0, 5).map(briefNode),
|
|
141
|
+
})));
|
|
142
|
+
const shapedMismatches = mismatches.map((m) => ({
|
|
143
|
+
endpoint: m.endpoint.name,
|
|
144
|
+
direction: m.direction,
|
|
145
|
+
reader: briefNode(m.reader),
|
|
146
|
+
writer: briefNode(m.writer),
|
|
147
|
+
differences: m.differences,
|
|
148
|
+
resolution: m.resolution,
|
|
149
|
+
// A field the reading side needs and the writing side does not
|
|
150
|
+
// supply. There is no benign reading of that, so every mismatch is a
|
|
151
|
+
// fault claim — unlike an uncalled route, whose usual explanation is
|
|
152
|
+
// a consumer outside the graph.
|
|
153
|
+
claim: m.claim,
|
|
154
|
+
}));
|
|
155
|
+
const restOfData = {
|
|
156
|
+
checked: paths.checked,
|
|
157
|
+
shapes: {
|
|
158
|
+
ran: shapes.ran,
|
|
159
|
+
comparable: shapes.comparable,
|
|
160
|
+
consumerOnly: shapes.consumerOnly,
|
|
161
|
+
providerOnly: shapes.providerOnly,
|
|
162
|
+
unroledDtos: shapes.unroledDtos,
|
|
163
|
+
blockers: shapes.blockers,
|
|
164
|
+
},
|
|
165
|
+
unmatchedWithoutNearMiss: paths.unmatchedWithoutNearMiss,
|
|
166
|
+
defects,
|
|
167
|
+
leads,
|
|
168
|
+
};
|
|
169
|
+
return {
|
|
170
|
+
result: {
|
|
171
|
+
...checked,
|
|
172
|
+
data: { ...restOfData, findings: shapedFindings, shapeMismatches: shapedMismatches },
|
|
173
|
+
notes: pathsMatchedNothing
|
|
174
|
+
? [
|
|
175
|
+
`0 endpoint(s) matched ${(filters ?? []).map((f) => `"${f}"`).join(", ")}. Nothing in ` +
|
|
176
|
+
"this graph was parsed as a route or endpoint under that filter, so there is nothing " +
|
|
177
|
+
"for \"clean\" to describe — this is not a statement about whether the endpoint you " +
|
|
178
|
+
"meant is correct.",
|
|
179
|
+
...notes,
|
|
180
|
+
]
|
|
181
|
+
: notes,
|
|
182
|
+
},
|
|
183
|
+
// A path finding is a name-level claim (R2 fully supports); a shape
|
|
184
|
+
// mismatch is not — `engine.ts` caps each individually. This flags the
|
|
185
|
+
// answer's own headline claim, the path half.
|
|
186
|
+
nameLevel: true,
|
|
187
|
+
...(truncatedDetail === undefined ? {} : { truncatedDetail }),
|
|
188
|
+
...(nothingToCheck
|
|
189
|
+
? { state: "refused" }
|
|
190
|
+
: pathsMatchedNothing
|
|
191
|
+
? { state: "empty" }
|
|
192
|
+
: {}),
|
|
193
|
+
fitToBudget: (budgetBytes) => fitContracts(restOfData, shapedFindings, shapedMismatches, budgetBytes),
|
|
194
|
+
headline: nothingToCheck
|
|
195
|
+
? "No API endpoints are in the graph, so there is no contract to check."
|
|
196
|
+
: pathsMatchedNothing
|
|
197
|
+
? `0 endpoint(s) matched this filter. Not checked, not clean.`
|
|
198
|
+
: `${verdict}. ${paths.checked.joined} of ${paths.checked.endpoints} endpoint(s) have both ` +
|
|
199
|
+
`a caller and a route${shapes.ran ? "" : "; request and response shapes were not compared"}.`,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
export const contractsTool = {
|
|
203
|
+
name: "contracts",
|
|
204
|
+
class: "read",
|
|
205
|
+
tier: "conclusion",
|
|
206
|
+
version: "1.0.0",
|
|
207
|
+
title: "Frontend/backend contract mismatches",
|
|
208
|
+
description: "Match every API caller against its route. Reports calls that reach no route, routes " +
|
|
209
|
+
"nothing calls, and fields one side reads that the other doesn't send. Shape comparison " +
|
|
210
|
+
"needs type info; reported not-run otherwise. States a verdict.",
|
|
211
|
+
inputSchema: SCHEMA,
|
|
212
|
+
run,
|
|
213
|
+
};
|
|
214
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cross-pr` — "what does this change collide with, that reading the diff alone
|
|
3
|
+
* would not show?"
|
|
4
|
+
*
|
|
5
|
+
* §14's multi-PR engine, at the protocol level. Four checks exist behind it,
|
|
6
|
+
* for a reason worth stating rather than discovering: a check is available
|
|
7
|
+
* exactly when something already produces its input.
|
|
8
|
+
*
|
|
9
|
+
* | check | § | input | today |
|
|
10
|
+
* | --- | --- | --- | --- |
|
|
11
|
+
* | hidden dependency | 14.8 | `CHANGES_WITH` edges, already in the graph | **runs** |
|
|
12
|
+
* | overlap scoring | 14.3 | stored PR scopes | **runs, over whatever is stored** |
|
|
13
|
+
* | superseded | 14.5 | git blob ids at head and at base's tip | **runs** |
|
|
14
|
+
* | migration heads | 14.6 | base's and head's migration files, read directly from git | **runs** |
|
|
15
|
+
*
|
|
16
|
+
* §14.8 is first because it is the one that costs nothing: the edges already
|
|
17
|
+
* exist, it needs no per-PR storage, and it works at R0 in any language with no
|
|
18
|
+
* adapter beyond file paths. For a repository whose language has no adapter at
|
|
19
|
+
* all, this is the check that still fires.
|
|
20
|
+
*
|
|
21
|
+
* **Migration heads answers the diff-precise question this section once said
|
|
22
|
+
* was out of scope for an MCP tool call** — `readMigrationsAcrossChange`
|
|
23
|
+
* (`sources/migrations/across-change.ts`) reads base's and head's migration
|
|
24
|
+
* files directly with `git ls-tree`/`git show`, so it needs no language
|
|
25
|
+
* adapter and no re-resolution of the graph against two commits. `ran` is
|
|
26
|
+
* false only when neither side has a migration format this producer
|
|
27
|
+
* recognises — never because a producer has not run yet.
|
|
28
|
+
*
|
|
29
|
+
* ## Why a check that still cannot run is declared rather than omitted
|
|
30
|
+
*
|
|
31
|
+
* `contracts.ts` set this precedent and the reasoning transfers unchanged: a
|
|
32
|
+
* tool that silently offers three of four checks lets a caller read "nothing
|
|
33
|
+
* found" as "nothing there". A blocked check names the producer it is
|
|
34
|
+
* waiting for, so the gap is actionable rather than mysterious.
|
|
35
|
+
*
|
|
36
|
+
* ## Everything here is Class C and that is not a defect to be fixed
|
|
37
|
+
*
|
|
38
|
+
* Co-change is evidence about **people**, not program structure — a pair that
|
|
39
|
+
* moved together two hundred times is a stronger hint and is still a hint. The
|
|
40
|
+
* checks compute their own reliability rather than being told it, and each
|
|
41
|
+
* finding carries the sentence that must travel with it. A caller rendering
|
|
42
|
+
* these as defects has broken principle 4 at the last gate. Migration heads is
|
|
43
|
+
* the one exception worth naming: a genuine fork in the revision chain is
|
|
44
|
+
* closer to a defect than a hint, but it is left at Class C here too, because
|
|
45
|
+
* this check cannot yet tell a legitimate two-branch merge-in-progress from an
|
|
46
|
+
* actual conflict — that distinction is left to the migration-integrity
|
|
47
|
+
* checks in `validate`, which are provable from the graph alone.
|
|
48
|
+
*/
|
|
49
|
+
import type { DiffType, HiddenDependencyReport, MigrationsAcrossChange, IncomparablePair, NodeVerdict, OverlapFinding, SupersededReport } from "@descryy/core";
|
|
50
|
+
import type { ReliabilityClass } from "@descryy/ir";
|
|
51
|
+
import { type BriefNode, type ToolDefinition } from "./kit.ts";
|
|
52
|
+
/**
|
|
53
|
+
* A check whose input no producer writes yet.
|
|
54
|
+
*
|
|
55
|
+
* Declared rather than omitted, and `needs` says what would have to exist —
|
|
56
|
+
* a tool silently offering three of four checks lets a caller read "nothing
|
|
57
|
+
* found" as "nothing there".
|
|
58
|
+
*/
|
|
59
|
+
export interface BlockedCheck {
|
|
60
|
+
readonly check: string;
|
|
61
|
+
/** The architecture section that specifies it. */
|
|
62
|
+
readonly section: string;
|
|
63
|
+
readonly question: string;
|
|
64
|
+
readonly needs: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* A file that historically moves with the change and was not touched this time.
|
|
68
|
+
*
|
|
69
|
+
* Class C, always, and `disclosure` is the sentence that must travel with it:
|
|
70
|
+
* co-change is evidence about **people**, not program structure. A caller
|
|
71
|
+
* rendering this as a defect has broken principle 4 at the last gate.
|
|
72
|
+
*/
|
|
73
|
+
export interface HiddenDependencyFinding extends BriefNode {
|
|
74
|
+
readonly coupledTo: readonly {
|
|
75
|
+
readonly file: string | null;
|
|
76
|
+
readonly support: number;
|
|
77
|
+
}[];
|
|
78
|
+
readonly strongestSupport: number;
|
|
79
|
+
readonly reliability: ReliabilityClass;
|
|
80
|
+
readonly disclosure: string;
|
|
81
|
+
}
|
|
82
|
+
export interface HiddenDependencyCheck {
|
|
83
|
+
/** False when no changed file had a single CHANGES_WITH edge: the history was not read. */
|
|
84
|
+
readonly ran: boolean;
|
|
85
|
+
readonly findings: readonly HiddenDependencyFinding[];
|
|
86
|
+
/** The count before `limit` capped it — P27's disclosed remainder (§4 technique 5). */
|
|
87
|
+
readonly findingsTotal: number;
|
|
88
|
+
readonly checked: HiddenDependencyReport["checked"];
|
|
89
|
+
/** Changed paths with no FILE node. Nothing looked at them. */
|
|
90
|
+
readonly unresolvedChanged: readonly string[];
|
|
91
|
+
}
|
|
92
|
+
export interface OverlapCheck {
|
|
93
|
+
/** False when fewer than two stored scopes exist: no pair could be compared. */
|
|
94
|
+
readonly ran: boolean;
|
|
95
|
+
readonly scopesCompared: number;
|
|
96
|
+
readonly findings: readonly OverlapFinding[];
|
|
97
|
+
/** The count before `limit` capped it — P27's disclosed remainder (§4 technique 5). */
|
|
98
|
+
readonly findingsTotal: number;
|
|
99
|
+
/** Pairs refused before comparison. An incomparable pair and a clean pair look identical otherwise. */
|
|
100
|
+
readonly incomparable: readonly IncomparablePair[];
|
|
101
|
+
readonly checked: OverlapReportChecked;
|
|
102
|
+
}
|
|
103
|
+
/** Named separately because `OverlapReport` itself is not re-exported field by field. */
|
|
104
|
+
export type OverlapReportChecked = {
|
|
105
|
+
readonly scopes: number;
|
|
106
|
+
readonly pairs: number;
|
|
107
|
+
readonly pairsOverlapping: number;
|
|
108
|
+
readonly belowThreshold: number;
|
|
109
|
+
readonly incomparable: number;
|
|
110
|
+
};
|
|
111
|
+
export interface SupersededCheck {
|
|
112
|
+
/** False when there was nothing to compare — not the same as "not superseded". */
|
|
113
|
+
readonly ran: boolean;
|
|
114
|
+
readonly verdict: boolean;
|
|
115
|
+
readonly counts: SupersededReport["counts"];
|
|
116
|
+
readonly reliability: ReliabilityClass;
|
|
117
|
+
readonly disclosure: string;
|
|
118
|
+
/** Everything not already on base, so a reader sees what is left rather than what matched. */
|
|
119
|
+
readonly remaining: readonly {
|
|
120
|
+
/** Undefined for a comparison whose candidate carried no path. */
|
|
121
|
+
readonly file: string | undefined;
|
|
122
|
+
readonly diffType: DiffType;
|
|
123
|
+
readonly verdict: NodeVerdict;
|
|
124
|
+
}[];
|
|
125
|
+
}
|
|
126
|
+
/** git rejected the range: no diff-dependent check ran, and `blocked` is all there is to say. */
|
|
127
|
+
export interface CrossPrGitFailure {
|
|
128
|
+
readonly blocked: readonly BlockedCheck[];
|
|
129
|
+
readonly migrationHeads: MigrationHeadCheck;
|
|
130
|
+
}
|
|
131
|
+
/** The diff is empty. A real answer: there is nothing to collide with. */
|
|
132
|
+
export interface CrossPrEmptyDiff extends CrossPrGitFailure {
|
|
133
|
+
readonly changedFiles: number;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* §14.6 — the heads this merge would leave.
|
|
137
|
+
*
|
|
138
|
+
* The set is base's migrations plus this change's, because that is the set the
|
|
139
|
+
* migration runner sees after the merge. `ran` is false when neither side had a
|
|
140
|
+
* migration format this producer recognises, which is **not** the same as a
|
|
141
|
+
* clean answer: a repository whose framework declares no DAG cannot have this
|
|
142
|
+
* failure at all, and one whose files were unreadable simply was not read.
|
|
143
|
+
*/
|
|
144
|
+
export interface MigrationHeadCheck {
|
|
145
|
+
readonly ran: boolean;
|
|
146
|
+
/** Base's single head, or null when base has none or already forks. */
|
|
147
|
+
readonly baseHead: string | null;
|
|
148
|
+
/** At most one — either the merged set has a single head or it does not. */
|
|
149
|
+
readonly conflict: MigrationsAcrossChange["report"]["conflict"];
|
|
150
|
+
readonly dependencies: MigrationsAcrossChange["report"]["dependencies"];
|
|
151
|
+
readonly duplicateRevisions: MigrationsAcrossChange["report"]["duplicateRevisions"];
|
|
152
|
+
/** False when any parent list could not be read, so the DAG read is partial. */
|
|
153
|
+
readonly complete: boolean;
|
|
154
|
+
readonly checked: MigrationsAcrossChange["report"]["checked"];
|
|
155
|
+
/** Files declined, with the reason recorded rather than guessed. */
|
|
156
|
+
readonly refused: readonly {
|
|
157
|
+
file: string;
|
|
158
|
+
reason: string;
|
|
159
|
+
}[];
|
|
160
|
+
/**
|
|
161
|
+
* Well-formed migrations sitting where no migration tool looks.
|
|
162
|
+
*
|
|
163
|
+
* Reported separately from the head computation because they are not in it —
|
|
164
|
+
* the runner cannot see them either, so "the merge leaves one head" can be
|
|
165
|
+
* true and incomplete in the same breath.
|
|
166
|
+
*/
|
|
167
|
+
readonly misplaced: MigrationsAcrossChange["misplaced"];
|
|
168
|
+
}
|
|
169
|
+
export interface CrossPrReport extends CrossPrEmptyDiff {
|
|
170
|
+
readonly resolvedNodes: number;
|
|
171
|
+
readonly hiddenDependencies: HiddenDependencyCheck;
|
|
172
|
+
readonly overlaps: OverlapCheck;
|
|
173
|
+
readonly superseded: SupersededCheck;
|
|
174
|
+
readonly migrationHeads: MigrationHeadCheck;
|
|
175
|
+
}
|
|
176
|
+
export type CrossPrData = CrossPrGitFailure | CrossPrEmptyDiff | CrossPrReport;
|
|
177
|
+
export declare const crossPrTool: ToolDefinition;
|
|
178
|
+
//# sourceMappingURL=cross-pr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-pr.d.ts","sourceRoot":"","sources":["../../src/tools/cross-pr.ts"],"names":[],"mappings":"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"}
|