@descryy/mcp 0.11.3 → 0.11.5
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/package.json +20 -20
- package/dist/action-handshake.d.ts +0 -38
- package/dist/action-handshake.d.ts.map +0 -1
- package/dist/action-handshake.js +0 -127
- package/dist/action-handshake.js.map +0 -1
- package/dist/bin/descry-mcp.d.ts +0 -7
- package/dist/bin/descry-mcp.d.ts.map +0 -1
- package/dist/bin/descry-mcp.js +0 -72
- package/dist/bin/descry-mcp.js.map +0 -1
- package/dist/browser/auth.d.ts +0 -84
- package/dist/browser/auth.d.ts.map +0 -1
- package/dist/browser/auth.js +0 -233
- package/dist/browser/auth.js.map +0 -1
- package/dist/browser/capability-probe.d.ts +0 -109
- package/dist/browser/capability-probe.d.ts.map +0 -1
- package/dist/browser/capability-probe.js +0 -201
- package/dist/browser/capability-probe.js.map +0 -1
- package/dist/browser/driver.d.ts +0 -570
- package/dist/browser/driver.d.ts.map +0 -1
- package/dist/browser/driver.js +0 -116
- package/dist/browser/driver.js.map +0 -1
- package/dist/browser/evidence.d.ts +0 -28
- package/dist/browser/evidence.d.ts.map +0 -1
- package/dist/browser/evidence.js +0 -82
- package/dist/browser/evidence.js.map +0 -1
- package/dist/browser/fake-driver.d.ts +0 -116
- package/dist/browser/fake-driver.d.ts.map +0 -1
- package/dist/browser/fake-driver.js +0 -416
- package/dist/browser/fake-driver.js.map +0 -1
- package/dist/browser/fault-attribution.d.ts +0 -178
- package/dist/browser/fault-attribution.d.ts.map +0 -1
- package/dist/browser/fault-attribution.js +0 -266
- package/dist/browser/fault-attribution.js.map +0 -1
- package/dist/browser/graph-write.d.ts +0 -45
- package/dist/browser/graph-write.d.ts.map +0 -1
- package/dist/browser/graph-write.js +0 -103
- package/dist/browser/graph-write.js.map +0 -1
- package/dist/browser/identity-graph-write.d.ts +0 -55
- package/dist/browser/identity-graph-write.d.ts.map +0 -1
- package/dist/browser/identity-graph-write.js +0 -45
- package/dist/browser/identity-graph-write.js.map +0 -1
- package/dist/browser/page-probe.d.ts +0 -81
- package/dist/browser/page-probe.d.ts.map +0 -1
- package/dist/browser/page-probe.js +0 -202
- package/dist/browser/page-probe.js.map +0 -1
- package/dist/browser/playwright-driver.d.ts +0 -114
- package/dist/browser/playwright-driver.d.ts.map +0 -1
- package/dist/browser/playwright-driver.js +0 -1479
- package/dist/browser/playwright-driver.js.map +0 -1
- package/dist/browser/provider.d.ts +0 -26
- package/dist/browser/provider.d.ts.map +0 -1
- package/dist/browser/provider.js +0 -14
- package/dist/browser/provider.js.map +0 -1
- package/dist/browser/reach-recording-session.d.ts +0 -44
- package/dist/browser/reach-recording-session.d.ts.map +0 -1
- package/dist/browser/reach-recording-session.js +0 -143
- package/dist/browser/reach-recording-session.js.map +0 -1
- package/dist/browser/reachability.d.ts +0 -168
- package/dist/browser/reachability.d.ts.map +0 -1
- package/dist/browser/reachability.js +0 -294
- package/dist/browser/reachability.js.map +0 -1
- package/dist/browser/registry.d.ts +0 -126
- package/dist/browser/registry.d.ts.map +0 -1
- package/dist/browser/registry.js +0 -177
- package/dist/browser/registry.js.map +0 -1
- package/dist/browser/scenario-provenance.d.ts +0 -23
- package/dist/browser/scenario-provenance.d.ts.map +0 -1
- package/dist/browser/scenario-provenance.js +0 -73
- package/dist/browser/scenario-provenance.js.map +0 -1
- package/dist/browser/scenario-resolve.d.ts +0 -28
- package/dist/browser/scenario-resolve.d.ts.map +0 -1
- package/dist/browser/scenario-resolve.js +0 -96
- package/dist/browser/scenario-resolve.js.map +0 -1
- package/dist/browser/scenario-runner.d.ts +0 -72
- package/dist/browser/scenario-runner.d.ts.map +0 -1
- package/dist/browser/scenario-runner.js +0 -353
- package/dist/browser/scenario-runner.js.map +0 -1
- package/dist/browser/stack-parser.d.ts +0 -19
- package/dist/browser/stack-parser.d.ts.map +0 -1
- package/dist/browser/stack-parser.js +0 -85
- package/dist/browser/stack-parser.js.map +0 -1
- package/dist/browser/tool-support.d.ts +0 -71
- package/dist/browser/tool-support.d.ts.map +0 -1
- package/dist/browser/tool-support.js +0 -216
- package/dist/browser/tool-support.js.map +0 -1
- package/dist/browser/url-scheme.d.ts +0 -14
- package/dist/browser/url-scheme.d.ts.map +0 -1
- package/dist/browser/url-scheme.js +0 -38
- package/dist/browser/url-scheme.js.map +0 -1
- package/dist/browser/wait-target.d.ts +0 -37
- package/dist/browser/wait-target.d.ts.map +0 -1
- package/dist/browser/wait-target.js +0 -54
- package/dist/browser/wait-target.js.map +0 -1
- package/dist/cancellation.d.ts +0 -20
- package/dist/cancellation.d.ts.map +0 -1
- package/dist/cancellation.js +0 -41
- package/dist/cancellation.js.map +0 -1
- package/dist/capped.d.ts +0 -17
- package/dist/capped.d.ts.map +0 -1
- package/dist/capped.js +0 -15
- package/dist/capped.js.map +0 -1
- package/dist/credential-store.d.ts +0 -22
- package/dist/credential-store.d.ts.map +0 -1
- package/dist/credential-store.js +0 -33
- package/dist/credential-store.js.map +0 -1
- package/dist/disclosure-ledger.d.ts +0 -14
- package/dist/disclosure-ledger.d.ts.map +0 -1
- package/dist/disclosure-ledger.js +0 -18
- package/dist/disclosure-ledger.js.map +0 -1
- package/dist/evidence/observed-route-evidence.d.ts +0 -25
- package/dist/evidence/observed-route-evidence.d.ts.map +0 -1
- package/dist/evidence/observed-route-evidence.js +0 -76
- package/dist/evidence/observed-route-evidence.js.map +0 -1
- package/dist/heap.d.ts +0 -61
- package/dist/heap.d.ts.map +0 -1
- package/dist/heap.js +0 -82
- package/dist/heap.js.map +0 -1
- package/dist/heartbeat.d.ts +0 -46
- package/dist/heartbeat.d.ts.map +0 -1
- package/dist/heartbeat.js +0 -66
- package/dist/heartbeat.js.map +0 -1
- package/dist/index.d.ts +0 -32
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -19
- package/dist/index.js.map +0 -1
- package/dist/module-trust.d.ts +0 -37
- package/dist/module-trust.d.ts.map +0 -1
- package/dist/module-trust.js +0 -77
- package/dist/module-trust.js.map +0 -1
- package/dist/path-confinement.d.ts +0 -31
- package/dist/path-confinement.d.ts.map +0 -1
- package/dist/path-confinement.js +0 -44
- package/dist/path-confinement.js.map +0 -1
- package/dist/planner/predict-then-propose.d.ts +0 -134
- package/dist/planner/predict-then-propose.d.ts.map +0 -1
- package/dist/planner/predict-then-propose.js +0 -138
- package/dist/planner/predict-then-propose.js.map +0 -1
- package/dist/planner/propose-journey.d.ts +0 -75
- package/dist/planner/propose-journey.d.ts.map +0 -1
- package/dist/planner/propose-journey.js +0 -96
- package/dist/planner/propose-journey.js.map +0 -1
- package/dist/protocol.d.ts +0 -57
- package/dist/protocol.d.ts.map +0 -1
- package/dist/protocol.js +0 -90
- package/dist/protocol.js.map +0 -1
- package/dist/registry.d.ts +0 -103
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -319
- package/dist/registry.js.map +0 -1
- package/dist/render.d.ts +0 -580
- package/dist/render.d.ts.map +0 -1
- package/dist/render.js +0 -867
- package/dist/render.js.map +0 -1
- package/dist/runtime-registry.d.ts +0 -22
- package/dist/runtime-registry.d.ts.map +0 -1
- package/dist/runtime-registry.js +0 -142
- package/dist/runtime-registry.js.map +0 -1
- package/dist/sandbox-defaults.d.ts +0 -41
- package/dist/sandbox-defaults.d.ts.map +0 -1
- package/dist/sandbox-defaults.js +0 -14
- package/dist/sandbox-defaults.js.map +0 -1
- package/dist/scenarios/browser-run-plan-projection.d.ts +0 -161
- package/dist/scenarios/browser-run-plan-projection.d.ts.map +0 -1
- package/dist/scenarios/browser-run-plan-projection.js +0 -264
- package/dist/scenarios/browser-run-plan-projection.js.map +0 -1
- package/dist/scenarios/credential-ref.d.ts +0 -102
- package/dist/scenarios/credential-ref.d.ts.map +0 -1
- package/dist/scenarios/credential-ref.js +0 -148
- package/dist/scenarios/credential-ref.js.map +0 -1
- package/dist/scenarios/index.d.ts +0 -7
- package/dist/scenarios/index.d.ts.map +0 -1
- package/dist/scenarios/index.js +0 -7
- package/dist/scenarios/index.js.map +0 -1
- package/dist/scenarios/parse.d.ts +0 -18
- package/dist/scenarios/parse.d.ts.map +0 -1
- package/dist/scenarios/parse.js +0 -212
- package/dist/scenarios/parse.js.map +0 -1
- package/dist/scenarios/scenario.d.ts +0 -93
- package/dist/scenarios/scenario.d.ts.map +0 -1
- package/dist/scenarios/scenario.js +0 -27
- package/dist/scenarios/scenario.js.map +0 -1
- package/dist/scenarios/secret-ref.d.ts +0 -86
- package/dist/scenarios/secret-ref.d.ts.map +0 -1
- package/dist/scenarios/secret-ref.js +0 -125
- package/dist/scenarios/secret-ref.js.map +0 -1
- package/dist/scenarios/storage.d.ts +0 -21
- package/dist/scenarios/storage.d.ts.map +0 -1
- package/dist/scenarios/storage.js +0 -103
- package/dist/scenarios/storage.js.map +0 -1
- package/dist/server.d.ts +0 -61
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -541
- package/dist/server.js.map +0 -1
- package/dist/session.d.ts +0 -243
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js +0 -602
- package/dist/session.js.map +0 -1
- package/dist/tools/alias-kit.d.ts +0 -29
- package/dist/tools/alias-kit.d.ts.map +0 -1
- package/dist/tools/alias-kit.js +0 -21
- package/dist/tools/alias-kit.js.map +0 -1
- package/dist/tools/aliases.d.ts +0 -42
- package/dist/tools/aliases.d.ts.map +0 -1
- package/dist/tools/aliases.js +0 -52
- package/dist/tools/aliases.js.map +0 -1
- package/dist/tools/analyze-workspace.d.ts +0 -52
- package/dist/tools/analyze-workspace.d.ts.map +0 -1
- package/dist/tools/analyze-workspace.js +0 -207
- package/dist/tools/analyze-workspace.js.map +0 -1
- package/dist/tools/analyze.d.ts +0 -163
- package/dist/tools/analyze.d.ts.map +0 -1
- package/dist/tools/analyze.js +0 -724
- package/dist/tools/analyze.js.map +0 -1
- package/dist/tools/browser-click.d.ts +0 -18
- package/dist/tools/browser-click.d.ts.map +0 -1
- package/dist/tools/browser-click.js +0 -110
- package/dist/tools/browser-click.js.map +0 -1
- package/dist/tools/browser-close-session.d.ts +0 -39
- package/dist/tools/browser-close-session.d.ts.map +0 -1
- package/dist/tools/browser-close-session.js +0 -120
- package/dist/tools/browser-close-session.js.map +0 -1
- package/dist/tools/browser-fill.d.ts +0 -18
- package/dist/tools/browser-fill.d.ts.map +0 -1
- package/dist/tools/browser-fill.js +0 -117
- package/dist/tools/browser-fill.js.map +0 -1
- package/dist/tools/browser-navigate.d.ts +0 -15
- package/dist/tools/browser-navigate.d.ts.map +0 -1
- package/dist/tools/browser-navigate.js +0 -104
- package/dist/tools/browser-navigate.js.map +0 -1
- package/dist/tools/browser-read.d.ts +0 -33
- package/dist/tools/browser-read.d.ts.map +0 -1
- package/dist/tools/browser-read.js +0 -113
- package/dist/tools/browser-read.js.map +0 -1
- package/dist/tools/browser-run-scenario.d.ts +0 -28
- package/dist/tools/browser-run-scenario.d.ts.map +0 -1
- package/dist/tools/browser-run-scenario.js +0 -206
- package/dist/tools/browser-run-scenario.js.map +0 -1
- package/dist/tools/browser-save-scenario.d.ts +0 -19
- package/dist/tools/browser-save-scenario.d.ts.map +0 -1
- package/dist/tools/browser-save-scenario.js +0 -447
- package/dist/tools/browser-save-scenario.js.map +0 -1
- package/dist/tools/browser-select.d.ts +0 -20
- package/dist/tools/browser-select.d.ts.map +0 -1
- package/dist/tools/browser-select.js +0 -120
- package/dist/tools/browser-select.js.map +0 -1
- package/dist/tools/browser-snapshot.d.ts +0 -46
- package/dist/tools/browser-snapshot.d.ts.map +0 -1
- package/dist/tools/browser-snapshot.js +0 -127
- package/dist/tools/browser-snapshot.js.map +0 -1
- package/dist/tools/browser-start-session.d.ts +0 -24
- package/dist/tools/browser-start-session.d.ts.map +0 -1
- package/dist/tools/browser-start-session.js +0 -622
- package/dist/tools/browser-start-session.js.map +0 -1
- package/dist/tools/browser-submit.d.ts +0 -18
- package/dist/tools/browser-submit.d.ts.map +0 -1
- package/dist/tools/browser-submit.js +0 -106
- package/dist/tools/browser-submit.js.map +0 -1
- package/dist/tools/browser-type.d.ts +0 -18
- package/dist/tools/browser-type.d.ts.map +0 -1
- package/dist/tools/browser-type.js +0 -115
- package/dist/tools/browser-type.js.map +0 -1
- package/dist/tools/browser-wait-for.d.ts +0 -45
- package/dist/tools/browser-wait-for.d.ts.map +0 -1
- package/dist/tools/browser-wait-for.js +0 -150
- package/dist/tools/browser-wait-for.js.map +0 -1
- package/dist/tools/browser.d.ts +0 -69
- package/dist/tools/browser.d.ts.map +0 -1
- package/dist/tools/browser.js +0 -386
- package/dist/tools/browser.js.map +0 -1
- package/dist/tools/chain.d.ts +0 -41
- package/dist/tools/chain.d.ts.map +0 -1
- package/dist/tools/chain.js +0 -105
- package/dist/tools/chain.js.map +0 -1
- package/dist/tools/change-scope.d.ts +0 -25
- package/dist/tools/change-scope.d.ts.map +0 -1
- package/dist/tools/change-scope.js +0 -110
- package/dist/tools/change-scope.js.map +0 -1
- package/dist/tools/code-context.d.ts +0 -83
- package/dist/tools/code-context.d.ts.map +0 -1
- package/dist/tools/code-context.js +0 -416
- package/dist/tools/code-context.js.map +0 -1
- package/dist/tools/contracts.d.ts +0 -74
- package/dist/tools/contracts.d.ts.map +0 -1
- package/dist/tools/contracts.js +0 -196
- package/dist/tools/contracts.js.map +0 -1
- package/dist/tools/cross-pr.d.ts +0 -178
- package/dist/tools/cross-pr.d.ts.map +0 -1
- package/dist/tools/cross-pr.js +0 -321
- package/dist/tools/cross-pr.js.map +0 -1
- package/dist/tools/disclosure.d.ts +0 -75
- package/dist/tools/disclosure.d.ts.map +0 -1
- package/dist/tools/disclosure.js +0 -288
- package/dist/tools/disclosure.js.map +0 -1
- package/dist/tools/draw-conclusion.d.ts +0 -55
- package/dist/tools/draw-conclusion.d.ts.map +0 -1
- package/dist/tools/draw-conclusion.js +0 -259
- package/dist/tools/draw-conclusion.js.map +0 -1
- package/dist/tools/git-context.d.ts +0 -39
- package/dist/tools/git-context.d.ts.map +0 -1
- package/dist/tools/git-context.js +0 -364
- package/dist/tools/git-context.js.map +0 -1
- package/dist/tools/git-diff.d.ts +0 -45
- package/dist/tools/git-diff.d.ts.map +0 -1
- package/dist/tools/git-diff.js +0 -338
- package/dist/tools/git-diff.js.map +0 -1
- package/dist/tools/git-history.d.ts +0 -16
- package/dist/tools/git-history.d.ts.map +0 -1
- package/dist/tools/git-history.js +0 -86
- package/dist/tools/git-history.js.map +0 -1
- package/dist/tools/history.d.ts +0 -34
- package/dist/tools/history.d.ts.map +0 -1
- package/dist/tools/history.js +0 -121
- package/dist/tools/history.js.map +0 -1
- package/dist/tools/impact.d.ts +0 -46
- package/dist/tools/impact.d.ts.map +0 -1
- package/dist/tools/impact.js +0 -225
- package/dist/tools/impact.js.map +0 -1
- package/dist/tools/index.d.ts +0 -59
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -70
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/kit.d.ts +0 -165
- package/dist/tools/kit.d.ts.map +0 -1
- package/dist/tools/kit.js +0 -153
- package/dist/tools/kit.js.map +0 -1
- package/dist/tools/link-workspace.d.ts +0 -24
- package/dist/tools/link-workspace.d.ts.map +0 -1
- package/dist/tools/link-workspace.js +0 -131
- package/dist/tools/link-workspace.js.map +0 -1
- package/dist/tools/lookup.d.ts +0 -19
- package/dist/tools/lookup.d.ts.map +0 -1
- package/dist/tools/lookup.js +0 -63
- package/dist/tools/lookup.js.map +0 -1
- package/dist/tools/mark-incident.d.ts +0 -28
- package/dist/tools/mark-incident.d.ts.map +0 -1
- package/dist/tools/mark-incident.js +0 -188
- package/dist/tools/mark-incident.js.map +0 -1
- package/dist/tools/merged-browser.d.ts +0 -11
- package/dist/tools/merged-browser.d.ts.map +0 -1
- package/dist/tools/merged-browser.js +0 -20
- package/dist/tools/merged-browser.js.map +0 -1
- package/dist/tools/merged-context.d.ts +0 -11
- package/dist/tools/merged-context.d.ts.map +0 -1
- package/dist/tools/merged-context.js +0 -21
- package/dist/tools/merged-context.js.map +0 -1
- package/dist/tools/merged-observe.d.ts +0 -13
- package/dist/tools/merged-observe.d.ts.map +0 -1
- package/dist/tools/merged-observe.js +0 -21
- package/dist/tools/merged-observe.js.map +0 -1
- package/dist/tools/merged-workspace.d.ts +0 -14
- package/dist/tools/merged-workspace.d.ts.map +0 -1
- package/dist/tools/merged-workspace.js +0 -21
- package/dist/tools/merged-workspace.js.map +0 -1
- package/dist/tools/observe-runtime.d.ts +0 -250
- package/dist/tools/observe-runtime.d.ts.map +0 -1
- package/dist/tools/observe-runtime.js +0 -1753
- package/dist/tools/observe-runtime.js.map +0 -1
- package/dist/tools/observe-tests.d.ts +0 -57
- package/dist/tools/observe-tests.d.ts.map +0 -1
- package/dist/tools/observe-tests.js +0 -368
- package/dist/tools/observe-tests.js.map +0 -1
- package/dist/tools/observe.d.ts +0 -28
- package/dist/tools/observe.d.ts.map +0 -1
- package/dist/tools/observe.js +0 -330
- package/dist/tools/observe.js.map +0 -1
- package/dist/tools/pr-analysis.d.ts +0 -189
- package/dist/tools/pr-analysis.d.ts.map +0 -1
- package/dist/tools/pr-analysis.js +0 -299
- package/dist/tools/pr-analysis.js.map +0 -1
- package/dist/tools/pre-push.d.ts +0 -168
- package/dist/tools/pre-push.d.ts.map +0 -1
- package/dist/tools/pre-push.js +0 -416
- package/dist/tools/pre-push.js.map +0 -1
- package/dist/tools/predict-reach.d.ts +0 -57
- package/dist/tools/predict-reach.d.ts.map +0 -1
- package/dist/tools/predict-reach.js +0 -159
- package/dist/tools/predict-reach.js.map +0 -1
- package/dist/tools/propagation.d.ts +0 -37
- package/dist/tools/propagation.d.ts.map +0 -1
- package/dist/tools/propagation.js +0 -162
- package/dist/tools/propagation.js.map +0 -1
- package/dist/tools/propose-journey.d.ts +0 -16
- package/dist/tools/propose-journey.d.ts.map +0 -1
- package/dist/tools/propose-journey.js +0 -121
- package/dist/tools/propose-journey.js.map +0 -1
- package/dist/tools/prove-reach.d.ts +0 -74
- package/dist/tools/prove-reach.d.ts.map +0 -1
- package/dist/tools/prove-reach.js +0 -286
- package/dist/tools/prove-reach.js.map +0 -1
- package/dist/tools/questions.d.ts +0 -30
- package/dist/tools/questions.d.ts.map +0 -1
- package/dist/tools/questions.js +0 -232
- package/dist/tools/questions.js.map +0 -1
- package/dist/tools/refusal-fetch.d.ts +0 -35
- package/dist/tools/refusal-fetch.d.ts.map +0 -1
- package/dist/tools/refusal-fetch.js +0 -103
- package/dist/tools/refusal-fetch.js.map +0 -1
- package/dist/tools/runtime-incident.d.ts +0 -33
- package/dist/tools/runtime-incident.d.ts.map +0 -1
- package/dist/tools/runtime-incident.js +0 -67
- package/dist/tools/runtime-incident.js.map +0 -1
- package/dist/tools/runtime-journey-drive.d.ts +0 -102
- package/dist/tools/runtime-journey-drive.d.ts.map +0 -1
- package/dist/tools/runtime-journey-drive.js +0 -247
- package/dist/tools/runtime-journey-drive.js.map +0 -1
- package/dist/tools/scope.d.ts +0 -45
- package/dist/tools/scope.d.ts.map +0 -1
- package/dist/tools/scope.js +0 -186
- package/dist/tools/scope.js.map +0 -1
- package/dist/tools/similar-incidents.d.ts +0 -43
- package/dist/tools/similar-incidents.d.ts.map +0 -1
- package/dist/tools/similar-incidents.js +0 -179
- package/dist/tools/similar-incidents.js.map +0 -1
- package/dist/tools/validate.d.ts +0 -133
- package/dist/tools/validate.d.ts.map +0 -1
- package/dist/tools/validate.js +0 -442
- package/dist/tools/validate.js.map +0 -1
- package/dist/tools/verb.d.ts +0 -46
- package/dist/tools/verb.d.ts.map +0 -1
- package/dist/tools/verb.js +0 -78
- package/dist/tools/verb.js.map +0 -1
- package/dist/tools/verification-status.d.ts +0 -38
- package/dist/tools/verification-status.d.ts.map +0 -1
- package/dist/tools/verification-status.js +0 -203
- package/dist/tools/verification-status.js.map +0 -1
- package/dist/tools/verify-claim.d.ts +0 -29
- package/dist/tools/verify-claim.d.ts.map +0 -1
- package/dist/tools/verify-claim.js +0 -220
- package/dist/tools/verify-claim.js.map +0 -1
- package/dist/tools/workspace.d.ts +0 -28
- package/dist/tools/workspace.d.ts.map +0 -1
- package/dist/tools/workspace.js +0 -101
- package/dist/tools/workspace.js.map +0 -1
- package/dist/transport.d.ts +0 -32
- package/dist/transport.d.ts.map +0 -1
- package/dist/transport.js +0 -85
- package/dist/transport.js.map +0 -1
- package/dist/workspace-index.d.ts +0 -164
- package/dist/workspace-index.d.ts.map +0 -1
- package/dist/workspace-index.js +0 -381
- package/dist/workspace-index.js.map +0 -1
package/dist/tools/scope.js
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `scope` — §12.5 diff scoping: what else does this change touch? Expansion stops
|
|
3
|
-
* on score, not hop count — a payment gateway 4 hops out matters, a logging import
|
|
4
|
-
* 1 hop out doesn't. A file the graph never heard of has two causes (not analysable,
|
|
5
|
-
* or stale graph) — both disclosed, never reported as "0 affected" (§20.2's collapse). */
|
|
6
|
-
import { nodesInFiles, scopeChange } from "@descryy/core";
|
|
7
|
-
import { answer, briefNode, optionalEnum, optionalInteger, optionalStringArray, ToolInputError, } from "./kit.js";
|
|
8
|
-
import { capped } from "../capped.js";
|
|
9
|
-
const TRIGGERS = ["pre-push", "pr", "nightly"];
|
|
10
|
-
const SCHEMA = {
|
|
11
|
-
type: "object",
|
|
12
|
-
properties: {
|
|
13
|
-
files: {
|
|
14
|
-
type: "array",
|
|
15
|
-
items: { type: "string" },
|
|
16
|
-
description: "Repository-relative paths that are changing. Every symbol declared in them seeds the " +
|
|
17
|
-
"blast radius.",
|
|
18
|
-
},
|
|
19
|
-
nodeIds: {
|
|
20
|
-
type: "array",
|
|
21
|
-
items: { type: "string" },
|
|
22
|
-
description: "Graph node ids to seed with directly, instead of or as well as files.",
|
|
23
|
-
},
|
|
24
|
-
trigger: {
|
|
25
|
-
type: "string",
|
|
26
|
-
enum: [...TRIGGERS],
|
|
27
|
-
description: "Which node budget to use: pre-push 200, pr 1000, nightly 5000. Default pr.",
|
|
28
|
-
},
|
|
29
|
-
budget: {
|
|
30
|
-
type: "integer",
|
|
31
|
-
minimum: 1,
|
|
32
|
-
description: "Override the trigger's node budget.",
|
|
33
|
-
},
|
|
34
|
-
limit: {
|
|
35
|
-
type: "integer",
|
|
36
|
-
minimum: 1,
|
|
37
|
-
description: "Cap how many nodes come back in the reply — applied to the changed list and the affected " +
|
|
38
|
-
"list alike. Default 25 (MK-9 — the same walk-cost reduction impact.ts applies, for the " +
|
|
39
|
-
"same reason). Capping the changed list shortens only the listing: every changed symbol " +
|
|
40
|
-
"still seeds the traversal, and changedTotal reports how many there were. A capped reply " +
|
|
41
|
-
"always discloses shown/total; raise this explicitly when the full set is needed.",
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
additionalProperties: false,
|
|
45
|
-
};
|
|
46
|
-
function shape(entry) {
|
|
47
|
-
return {
|
|
48
|
-
...briefNode(entry.node),
|
|
49
|
-
score: Number(entry.score.toFixed(4)),
|
|
50
|
-
tier: entry.tier,
|
|
51
|
-
depth: entry.depth,
|
|
52
|
-
...(entry.via === null ? {} : { via: entry.via.type }),
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
async function run(args, ctx) {
|
|
56
|
-
const files = optionalStringArray(args, "files") ?? [];
|
|
57
|
-
const seedIds = [...(optionalStringArray(args, "nodeIds") ?? [])];
|
|
58
|
-
const trigger = optionalEnum(args, "trigger", TRIGGERS) ?? "pr";
|
|
59
|
-
const budget = optionalInteger(args, "budget", 1);
|
|
60
|
-
const limit = optionalInteger(args, "limit", 1) ?? 25;
|
|
61
|
-
if (files.length === 0 && seedIds.length === 0) {
|
|
62
|
-
throw new ToolInputError('give at least one of "files" or "nodeIds"');
|
|
63
|
-
}
|
|
64
|
-
const notes = [];
|
|
65
|
-
const session = ctx.session;
|
|
66
|
-
if (files.length > 0) {
|
|
67
|
-
ctx.progress(`Resolving ${files.length} path(s) to graph nodes`);
|
|
68
|
-
const absolute = files.filter((f) => f.startsWith("/"));
|
|
69
|
-
if (absolute.length > 0) {
|
|
70
|
-
notes.push(`${absolute.length} path(s) were absolute. The graph stores repository-relative paths, so ` +
|
|
71
|
-
"these matched nothing. Pass paths relative to the repository root.");
|
|
72
|
-
}
|
|
73
|
-
const { nodes, missing } = nodesInFiles(session.store().driver, files);
|
|
74
|
-
for (const node of nodes)
|
|
75
|
-
seedIds.push(node.id);
|
|
76
|
-
if (missing.length > 0) {
|
|
77
|
-
notes.push(`${missing.length} of ${files.length} path(s) have no node in the graph ` +
|
|
78
|
-
`(${missing.slice(0, 5).join(", ")}${missing.length > 5 ? ", …" : ""}). Either no ` +
|
|
79
|
-
"configured adapter reads them or the graph predates them — run analyze. Their impact " +
|
|
80
|
-
"is not in this answer and they are not reported as having none.");
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
if (seedIds.length === 0) {
|
|
84
|
-
const base = session.provider().baseStamp();
|
|
85
|
-
return answer({
|
|
86
|
-
headline: "Nothing in the graph matches what you named, so no blast radius could be computed.",
|
|
87
|
-
state: "refused",
|
|
88
|
-
nameLevel: true,
|
|
89
|
-
resolutionFloor: 0,
|
|
90
|
-
commitSha: base.commitSha,
|
|
91
|
-
graphBuiltAt: base.graphBuiltAt,
|
|
92
|
-
irSchemaVersion: base.irSchemaVersion,
|
|
93
|
-
commitSpread: base.commitSpread,
|
|
94
|
-
repoCount: base.repoCount,
|
|
95
|
-
notes: [
|
|
96
|
-
...notes,
|
|
97
|
-
"This is not a result of zero impact. No seed node was found, so the traversal never ran.",
|
|
98
|
-
],
|
|
99
|
-
data: { changed: [], affected: [], seeds: 0 },
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
ctx.progress(`Expanding from ${seedIds.length} changed symbol(s)`);
|
|
103
|
-
const scoped = scopeChange(session.provider(), [...new Set(seedIds)], {
|
|
104
|
-
trigger,
|
|
105
|
-
...(budget === undefined ? {} : { budget }),
|
|
106
|
-
});
|
|
107
|
-
const affected = scoped.data.affected;
|
|
108
|
-
// `capped()` produces the slice and its shown/total detail together, so this reply
|
|
109
|
-
// can't cap without carrying what it capped — previously hand-sliced with only the
|
|
110
|
-
// prose note updated, so `truncated`/`truncatedDetail` stayed unset on the wire.
|
|
111
|
-
const cap = capped(affected, limit);
|
|
112
|
-
if (cap.detail !== null) {
|
|
113
|
-
notes.push(`${cap.detail.total - cap.detail.shown} lower-scoring affected node(s) are in the scope but not ` +
|
|
114
|
-
`listed here — the reply is capped at ${limit}. Raise "limit" to see them; they were ` +
|
|
115
|
-
"analysed either way.");
|
|
116
|
-
}
|
|
117
|
-
// P6-B5. `limit` used to bound `affected` alone, and `changed` — one entry per
|
|
118
|
-
// symbol declared in the named files — went out whole. That is unbounded by
|
|
119
|
-
// anything the caller controls: it is the size of the files they named, not of
|
|
120
|
-
// the answer they asked for. One generated file produced 638 entries and 162k
|
|
121
|
-
// characters, past the client's token limit, and the invariant sweep in
|
|
122
|
-
// `truncation-invariant.test.ts` could not catch it because an uncapped list
|
|
123
|
-
// emits no capping prose to scan for. The seeds are still all *analysed* — the
|
|
124
|
-
// traversal runs over every one of them, and `changedTotal` reports how many
|
|
125
|
-
// there were, so a capped list can never read as a smaller change than it was.
|
|
126
|
-
const changedCap = capped(scoped.data.changed, limit);
|
|
127
|
-
if (changedCap.detail !== null) {
|
|
128
|
-
notes.push(`${changedCap.detail.total - changedCap.detail.shown} of ${changedCap.detail.total} changed ` +
|
|
129
|
-
`symbol(s) are not listed here — the reply is capped at ${limit}. All ${changedCap.detail.total} ` +
|
|
130
|
-
'seeded the traversal; only the listing is shortened. Raise "limit" to see them.');
|
|
131
|
-
}
|
|
132
|
-
const byTier = [1, 2, 3, 4].map((tier) => ({
|
|
133
|
-
tier,
|
|
134
|
-
count: tier === 1
|
|
135
|
-
? scoped.data.changed.length
|
|
136
|
-
: affected.filter((node) => node.tier === tier).length,
|
|
137
|
-
}));
|
|
138
|
-
// One `truncatedDetail` for a reply that now caps two lists: the rows carried
|
|
139
|
-
// versus the rows there were. Summing is the only reading of "the primary
|
|
140
|
-
// collection" that stays true when either list is cut — reporting `affected`'s
|
|
141
|
-
// pair alone would say nothing was withheld on a reply that withheld 290 seeds.
|
|
142
|
-
const shownRows = changedCap.shown.length + cap.shown.length;
|
|
143
|
-
const totalRows = scoped.data.changed.length + affected.length;
|
|
144
|
-
const truncatedDetail = changedCap.detail === null && cap.detail === null
|
|
145
|
-
? null
|
|
146
|
-
: { shown: shownRows, total: totalRows, more: null };
|
|
147
|
-
return {
|
|
148
|
-
result: {
|
|
149
|
-
...scoped,
|
|
150
|
-
data: {
|
|
151
|
-
changed: changedCap.shown.map(shape),
|
|
152
|
-
changedTotal: scoped.data.changed.length,
|
|
153
|
-
affected: cap.shown.map(shape),
|
|
154
|
-
affectedTotal: affected.length,
|
|
155
|
-
droppedForBudget: scoped.data.dropped.length,
|
|
156
|
-
budget: scoped.data.budget,
|
|
157
|
-
budgetUsed: scoped.data.budgetUsed,
|
|
158
|
-
byTier,
|
|
159
|
-
},
|
|
160
|
-
// Deliberately not `scoped.truncated` (the node *budget*'s own drop flag,
|
|
161
|
-
// disclosed separately via `droppedForBudget`) — this `truncated` means "this
|
|
162
|
-
// reply is shorter than the scope computed," a different fact from that.
|
|
163
|
-
truncated: truncatedDetail !== null,
|
|
164
|
-
notes: [...scoped.notes, ...notes],
|
|
165
|
-
},
|
|
166
|
-
...(truncatedDetail === null ? {} : { truncatedDetail }),
|
|
167
|
-
...(affected.length === 0 ? { state: "empty" } : {}),
|
|
168
|
-
nameLevel: true,
|
|
169
|
-
headline: `${scoped.data.changed.length} changed symbol(s) reach ${affected.length} other node(s) ` +
|
|
170
|
-
`above the impact threshold, under the ${trigger} budget of ${scoped.data.budget}.`,
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
export const scopeTool = {
|
|
174
|
-
name: "scope",
|
|
175
|
-
class: "read",
|
|
176
|
-
tier: "evidence",
|
|
177
|
-
version: "1.0.0",
|
|
178
|
-
title: "Blast radius of a change",
|
|
179
|
-
description: "Given the files or symbols you are changing, return what else is affected, ranked by impact " +
|
|
180
|
-
"score and grouped into tiers 1-4. Expansion stops on score rather than hop count, so a " +
|
|
181
|
-
"distant high-impact dependency is kept and a nearby trivial one is dropped. Names the paths " +
|
|
182
|
-
"it could not find in the graph rather than reporting them as unaffected.",
|
|
183
|
-
inputSchema: SCHEMA,
|
|
184
|
-
run,
|
|
185
|
-
};
|
|
186
|
-
//# sourceMappingURL=scope.js.map
|
package/dist/tools/scope.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/tools/scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/** `similar_incidents` ranks existing `INCIDENT` nodes against a failure with no graph node yet,
|
|
2
|
-
* deterministically (file/token Jaccard, no vector store). DEC-274 found zero `INCIDENT` nodes
|
|
3
|
-
* across three repos (734/459/203 commits): recall is 0/0, not 0% — an empty result never means
|
|
4
|
-
* "no similar incident exists" (DEC-279). §1.3a: a zero-incident graph is `refused`, never `empty`
|
|
5
|
-
* — the same split `contracts` and `propagation` apply to their own zero-population case. */
|
|
6
|
-
import { type SimilarIncidentSignalKind } from "@descryy/core";
|
|
7
|
-
import { type BriefNode, type ToolDefinition } from "./kit.ts";
|
|
8
|
-
/** One signal that fired for a candidate — the "why", never a bare score. */
|
|
9
|
-
export interface SimilarIncidentSignalReport {
|
|
10
|
-
readonly kind: SimilarIncidentSignalKind;
|
|
11
|
-
/** Jaccard similarity for this signal alone, 0..1. */
|
|
12
|
-
readonly score: number;
|
|
13
|
-
}
|
|
14
|
-
export interface SimilarIncidentReport {
|
|
15
|
-
readonly incident: BriefNode;
|
|
16
|
-
/** The `FIX_PATTERN` this incident resolved to, when a `FIXED_BY` edge exists. */
|
|
17
|
-
readonly fix: BriefNode | null;
|
|
18
|
-
/** How this incident was detected (`attrs.detectedVia`) — reported per match since the
|
|
19
|
-
* mechanisms differ: revert, `Fixes #123`, a process dying at runtime, or `developer-confirmed`
|
|
20
|
-
* testimony (capped at reliability B, DEC-223). `null` for incidents minted before this field. */
|
|
21
|
-
readonly detectedVia: string | null;
|
|
22
|
-
readonly signals: readonly SimilarIncidentSignalReport[];
|
|
23
|
-
/** Weighted combination of every signal the query attempted, 0..1. */
|
|
24
|
-
readonly score: number;
|
|
25
|
-
}
|
|
26
|
-
/** One shape, both branches: `analysed: false` with `incidentsInGraph: 0` is the zero-denominator
|
|
27
|
-
* case, `state: "refused"`. Counts live in the payload, not just prose, so a caller can read the
|
|
28
|
-
* denominator without parsing a sentence. */
|
|
29
|
-
export interface SimilarIncidentsData {
|
|
30
|
-
readonly query: {
|
|
31
|
-
readonly touchedFiles: readonly string[];
|
|
32
|
-
readonly errorMessage: string | null;
|
|
33
|
-
};
|
|
34
|
-
readonly matches: readonly SimilarIncidentReport[];
|
|
35
|
-
/** Count before `limit` — honest about what was capped. */
|
|
36
|
-
readonly matchesTotal: number;
|
|
37
|
-
/** How many `INCIDENT` nodes were available to compare against. Zero is the headline fact. */
|
|
38
|
-
readonly incidentsInGraph: number;
|
|
39
|
-
/** False when the graph holds no `INCIDENT` node at all: nothing was compared. */
|
|
40
|
-
readonly analysed: boolean;
|
|
41
|
-
}
|
|
42
|
-
export declare const similarIncidentsTool: ToolDefinition;
|
|
43
|
-
//# sourceMappingURL=similar-incidents.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"similar-incidents.d.ts","sourceRoot":"","sources":["../../src/tools/similar-incidents.ts"],"names":[],"mappings":"AAAA;;;;8FAI8F;AAE9F,OAAO,EAAoB,KAAK,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAEjF,OAAO,EAOL,KAAK,SAAS,EAEd,KAAK,cAAc,EACpB,MAAM,UAAU,CAAC;AAiClB,6EAA6E;AAC7E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B;;uGAEmG;IACnG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACzD,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;8CAE8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;QACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;KACtC,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACnD,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,8FAA8F;IAC9F,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AA0JD,eAAO,MAAM,oBAAoB,EAAE,cAqBlC,CAAC"}
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
/** `similar_incidents` ranks existing `INCIDENT` nodes against a failure with no graph node yet,
|
|
2
|
-
* deterministically (file/token Jaccard, no vector store). DEC-274 found zero `INCIDENT` nodes
|
|
3
|
-
* across three repos (734/459/203 commits): recall is 0/0, not 0% — an empty result never means
|
|
4
|
-
* "no similar incident exists" (DEC-279). §1.3a: a zero-incident graph is `refused`, never `empty`
|
|
5
|
-
* — the same split `contracts` and `propagation` apply to their own zero-population case. */
|
|
6
|
-
import { similarIncidents } from "@descryy/core";
|
|
7
|
-
import { answer, briefNode, optionalInteger, optionalString, optionalStringArray, ToolInputError, } from "./kit.js";
|
|
8
|
-
const SCHEMA = {
|
|
9
|
-
type: "object",
|
|
10
|
-
properties: {
|
|
11
|
-
touchedFiles: {
|
|
12
|
-
type: "array",
|
|
13
|
-
items: { type: "string" },
|
|
14
|
-
description: "Repository-relative paths the failure touched — from a stack trace, a failing test's " +
|
|
15
|
-
"imports, or the diff being investigated. Matched against each incident's own correlated " +
|
|
16
|
-
"file set.",
|
|
17
|
-
},
|
|
18
|
-
errorMessage: {
|
|
19
|
-
type: "string",
|
|
20
|
-
description: "The failure's error or exception text. Matched against each incident's text, which today " +
|
|
21
|
-
"is always a commit subject line — real signal, but thin.",
|
|
22
|
-
},
|
|
23
|
-
minScore: {
|
|
24
|
-
type: "number",
|
|
25
|
-
minimum: 0,
|
|
26
|
-
maximum: 1,
|
|
27
|
-
description: "Drop candidates scoring below this. Default 0, meaning any signal that fired at all is " +
|
|
28
|
-
"returned — ranked, so a weak match is visible as a weak match rather than hidden.",
|
|
29
|
-
},
|
|
30
|
-
limit: { type: "integer", minimum: 1, description: "Cap on matches in the reply. Default 20." },
|
|
31
|
-
},
|
|
32
|
-
additionalProperties: false,
|
|
33
|
-
};
|
|
34
|
-
/** The mandatory disclosure sentence, shaped per branch. Written once here rather than inline at
|
|
35
|
-
* three return sites, so no branch can forget it. */
|
|
36
|
-
function recallDisclosure(incidentsInGraph) {
|
|
37
|
-
return ((incidentsInGraph === 0
|
|
38
|
-
? "This graph holds no INCIDENT node at all, so nothing was compared. "
|
|
39
|
-
: `${incidentsInGraph} INCIDENT node(s) were available to compare against. `) +
|
|
40
|
-
"Absence is not evidence here, and the reason is measured rather than assumed. An INCIDENT is " +
|
|
41
|
-
"minted only where somebody declared a failure or a machine witnessed one: a revert (written " +
|
|
42
|
-
"by git or by hand), a \"Fixes #123\", a service dying during an observed run, or " +
|
|
43
|
-
"\"mark_incident\". An ordinary fix-forward commit — how most bugs are actually fixed — mints " +
|
|
44
|
-
"nothing, and the heuristic that would have changed that was built, measured at 25% precision " +
|
|
45
|
-
"against a 90% threshold, and refused. DEC-274 found zero INCIDENT nodes across three real " +
|
|
46
|
-
"repositories of 734, 459 and 203 commits. So this matcher's recall is not computable (0/0) " +
|
|
47
|
-
"rather than 0%, and a failure this repository has genuinely hit before can be absent from " +
|
|
48
|
-
"these results entirely. The corpus grows fastest through \"mark_incident\": one call, at the " +
|
|
49
|
-
"moment you already know the answer.");
|
|
50
|
-
}
|
|
51
|
-
async function run(args, ctx) {
|
|
52
|
-
const touchedFiles = optionalStringArray(args, "touchedFiles") ?? [];
|
|
53
|
-
const errorMessage = optionalString(args, "errorMessage");
|
|
54
|
-
const limit = optionalInteger(args, "limit", 1) ?? 20;
|
|
55
|
-
const rawMinScore = args["minScore"];
|
|
56
|
-
if (rawMinScore !== undefined && rawMinScore !== null) {
|
|
57
|
-
if (typeof rawMinScore !== "number" || rawMinScore < 0 || rawMinScore > 1) {
|
|
58
|
-
throw new ToolInputError('"minScore" must be a number between 0 and 1');
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
const minScore = typeof rawMinScore === "number" ? rawMinScore : undefined;
|
|
62
|
-
// Describing nothing and being told "0 matches" is the empty-denominator
|
|
63
|
-
// defect at the input side: the reply would be indistinguishable from a real
|
|
64
|
-
// search that found nothing.
|
|
65
|
-
if (touchedFiles.length === 0 && (errorMessage === undefined || errorMessage === "")) {
|
|
66
|
-
throw new ToolInputError('give at least one of "touchedFiles" or "errorMessage" — with neither, there is nothing to ' +
|
|
67
|
-
"compare an incident against, and an empty answer would look like a search that ran");
|
|
68
|
-
}
|
|
69
|
-
const provider = ctx.session.provider();
|
|
70
|
-
// The population, read for its own sake. `similarIncidents` scans the same
|
|
71
|
-
// set internally but returns only what matched, and the count of what did
|
|
72
|
-
// *not* match is the number this tool's honesty rests on.
|
|
73
|
-
ctx.progress("Reading the incident population");
|
|
74
|
-
const population = provider.nodesOfType("INCIDENT");
|
|
75
|
-
const incidentsInGraph = population.nodes.length;
|
|
76
|
-
const base = provider.baseStamp();
|
|
77
|
-
if (incidentsInGraph === 0) {
|
|
78
|
-
return answer({
|
|
79
|
-
headline: "No incident is recorded in this graph, so nothing was compared against the failure you " +
|
|
80
|
-
"described. This is not a finding that the failure is new.",
|
|
81
|
-
// A refusal, not an empty result — §1.3a. `not_analysable` is the value
|
|
82
|
-
// today's envelope has for it; §1.1 renames it `refused` in P2.
|
|
83
|
-
state: "refused",
|
|
84
|
-
// Whether an incident resembles a failure is a claim about names and
|
|
85
|
-
// paths, not about shapes — the same class as `history`'s co-change
|
|
86
|
-
// rows. R0 is the honest floor: an INCIDENT is minted from a commit
|
|
87
|
-
// log, which is R0 by nature rather than by degradation.
|
|
88
|
-
nameLevel: true,
|
|
89
|
-
resolutionFloor: 0,
|
|
90
|
-
commitSha: base.commitSha,
|
|
91
|
-
graphBuiltAt: base.graphBuiltAt,
|
|
92
|
-
irSchemaVersion: base.irSchemaVersion,
|
|
93
|
-
commitSpread: base.commitSpread,
|
|
94
|
-
repoCount: base.repoCount,
|
|
95
|
-
notes: [recallDisclosure(0)],
|
|
96
|
-
data: {
|
|
97
|
-
query: { touchedFiles, errorMessage: errorMessage ?? null },
|
|
98
|
-
matches: [],
|
|
99
|
-
matchesTotal: 0,
|
|
100
|
-
incidentsInGraph: 0,
|
|
101
|
-
analysed: false,
|
|
102
|
-
},
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
ctx.progress(`Ranking ${incidentsInGraph} incident(s) against the failure`);
|
|
106
|
-
const ranked = similarIncidents(provider, {
|
|
107
|
-
...(touchedFiles.length === 0 ? {} : { touchedFiles }),
|
|
108
|
-
...(errorMessage === undefined ? {} : { errorMessage }),
|
|
109
|
-
}, { ...(minScore === undefined ? {} : { minScore }) });
|
|
110
|
-
const shown = ranked.data.slice(0, limit);
|
|
111
|
-
const notes = [...ranked.notes, recallDisclosure(incidentsInGraph)];
|
|
112
|
-
if (shown.length < ranked.data.length) {
|
|
113
|
-
notes.push(`${ranked.data.length - shown.length} further match(es) scored above the threshold but are ` +
|
|
114
|
-
`not listed — the reply is capped at ${limit}.`);
|
|
115
|
-
}
|
|
116
|
-
if (population.truncated) {
|
|
117
|
-
notes.push("The incident read was capped, so some INCIDENT nodes were never scored. The counts here " +
|
|
118
|
-
"are a lower bound.");
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
result: {
|
|
122
|
-
data: {
|
|
123
|
-
query: { touchedFiles, errorMessage: errorMessage ?? null },
|
|
124
|
-
matches: shown.map((match) => ({
|
|
125
|
-
incident: briefNode(match.incident),
|
|
126
|
-
fix: match.fix === null ? null : briefNode(match.fix),
|
|
127
|
-
// Read off the node rather than inferred from anything about the
|
|
128
|
-
// match: which mechanism minted an incident is a fact about the
|
|
129
|
-
// incident, not about how well it scored.
|
|
130
|
-
detectedVia: typeof match.incident.attrs?.["detectedVia"] === "string"
|
|
131
|
-
? match.incident.attrs["detectedVia"]
|
|
132
|
-
: null,
|
|
133
|
-
signals: match.signals.map((s) => ({ kind: s.kind, score: Number(s.score.toFixed(4)) })),
|
|
134
|
-
score: Number(match.combinedScore.toFixed(4)),
|
|
135
|
-
})),
|
|
136
|
-
matchesTotal: ranked.data.length,
|
|
137
|
-
incidentsInGraph,
|
|
138
|
-
analysed: true,
|
|
139
|
-
},
|
|
140
|
-
stamp: ranked.stamp,
|
|
141
|
-
truncated: ranked.truncated || shown.length < ranked.data.length || population.truncated,
|
|
142
|
-
notes,
|
|
143
|
-
},
|
|
144
|
-
...(ranked.data.length === 0 ? { state: "empty" } : {}),
|
|
145
|
-
...(shown.length < ranked.data.length
|
|
146
|
-
? { truncatedDetail: { shown: shown.length, total: ranked.data.length, more: null } }
|
|
147
|
-
: {}),
|
|
148
|
-
nameLevel: true,
|
|
149
|
-
headline: ranked.data.length === 0
|
|
150
|
-
? `None of the ${incidentsInGraph} incident(s) in this graph share a file or a phrase with ` +
|
|
151
|
-
"the failure you described. That is a statement about this graph's incident record, not " +
|
|
152
|
-
"about the failure."
|
|
153
|
-
: `${ranked.data.length} of ${incidentsInGraph} recorded incident(s) resemble this failure; ` +
|
|
154
|
-
`closest: ${shown[0].incident.name}` +
|
|
155
|
-
`${shown[0].fix === null ? "" : ` (fixed by: ${shown[0].fix.name})`}.`,
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
export const similarIncidentsTool = {
|
|
159
|
-
name: "similar_incidents",
|
|
160
|
-
class: "read",
|
|
161
|
-
tier: "evidence",
|
|
162
|
-
version: "1.0.0",
|
|
163
|
-
title: "Past incidents that resemble a failure happening now",
|
|
164
|
-
description: "Given the files a failure touched and/or its error text, rank the incidents already recorded " +
|
|
165
|
-
"in the graph by how much they resemble it, and name which signal fired for each — file " +
|
|
166
|
-
"overlap, message similarity, or both. Use this for a failure that has no graph node yet (a " +
|
|
167
|
-
"stack trace, a red test); use \"impact\" instead for incidents linked to a symbol that " +
|
|
168
|
-
"already exists. Deterministic graph and text matching only; no embedding search runs. Two " +
|
|
169
|
-
"absences and they are different answers: an empty result means this graph's recorded " +
|
|
170
|
-
"incidents were compared and none matched, while a refusal means the graph holds no incident " +
|
|
171
|
-
"at all — common, because an incident is only minted where somebody declared a failure (a " +
|
|
172
|
-
"revert, a \"Fixes #123\", a \"mark_incident\" call) or a machine witnessed one (a service " +
|
|
173
|
-
"dying during an observed run), and an ordinary fix-forward commit mints nothing. Neither " +
|
|
174
|
-
"absence is evidence that the failure is new. Every match reports its own \"detectedVia\", " +
|
|
175
|
-
"because a revert and a person's say-so are not the same kind of claim.",
|
|
176
|
-
inputSchema: SCHEMA,
|
|
177
|
-
run,
|
|
178
|
-
};
|
|
179
|
-
//# sourceMappingURL=similar-incidents.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"similar-incidents.js","sourceRoot":"","sources":["../../src/tools/similar-incidents.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/validate.d.ts
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `validate` — §15 static validation: env/config checks.
|
|
3
|
-
* Omits a var unless its read fails-on-absence AND declaration surface is complete
|
|
4
|
-
* (18/107 wrong findings measured otherwise); refuses rather than `ok` when no reads
|
|
5
|
-
* exist. Pass `files` for NEW_READ_UNDECLARED — catches accessor-shape-independent reads.
|
|
6
|
-
* Add `changedLines` (from get_git_diff's patch) to verify against an added line rather
|
|
7
|
-
* than a file scope, and get `defect` instead of `lead` back for it — see C2, UAT phase 4. */
|
|
8
|
-
import type { AttributeFinding, AttributeReport, ConfigGraph, ConfigReadSite, EnvClaim, EnvEvidence, EnvFindingKind, EnvReport, MigrationIntegrityFinding, MigrationIntegrityReport, ObservedRouteFinding, OrmRegistrationFinding, OrmRegistrationReport, RollbackFinding, RollbackReport } from "@descryy/core";
|
|
9
|
-
import type { ResolutionLevel } from "@descryy/ir";
|
|
10
|
-
import { type ToolDefinition } from "./kit.ts";
|
|
11
|
-
/** One env/config finding. `claim` distinguishes `defect` (code contradiction) from
|
|
12
|
-
* `lead` (worth a look) — conflating them caused 18/107 wrong findings on two repos. */
|
|
13
|
-
export interface EnvFindingReport {
|
|
14
|
-
readonly kind: EnvFindingKind;
|
|
15
|
-
readonly name: string;
|
|
16
|
-
readonly claim: EnvClaim;
|
|
17
|
-
readonly detail: string;
|
|
18
|
-
/** Every location the finding rests on. Never empty. */
|
|
19
|
-
readonly evidence: readonly EnvEvidence[];
|
|
20
|
-
readonly resolution: ResolutionLevel;
|
|
21
|
-
}
|
|
22
|
-
/** A variable and how much of the repo depends on it (§15.3's third check feeding
|
|
23
|
-
* the first). Only variables with a computable dependent set appear — unknown ≠ zero. */
|
|
24
|
-
export interface ConfigDependencyReport {
|
|
25
|
-
readonly name: string;
|
|
26
|
-
/** A lower bound, never a total. */
|
|
27
|
-
readonly dependents: number | null;
|
|
28
|
-
/** True when the traversal's budget stopped it short. */
|
|
29
|
-
readonly truncated: boolean;
|
|
30
|
-
/** Up to three read sites. */
|
|
31
|
-
readonly readAt: readonly ConfigReadSite[];
|
|
32
|
-
/** A few dependent files, for a reader who wants to look. */
|
|
33
|
-
readonly sample: readonly string[];
|
|
34
|
-
}
|
|
35
|
-
export interface ValidateData {
|
|
36
|
-
readonly findings: readonly EnvFindingReport[];
|
|
37
|
-
/** The count before `maxFindings` capped it — P27's disclosed remainder (§4 technique 5). */
|
|
38
|
-
readonly findingsTotal: number;
|
|
39
|
-
readonly surfaces: EnvReport["surfaces"];
|
|
40
|
-
readonly reads: EnvReport["reads"];
|
|
41
|
-
/** Null when no read existed at all, so the coverage guard could not be evaluated. */
|
|
42
|
-
readonly coverage: EnvReport["coverage"];
|
|
43
|
-
/** Declared and read nowhere. A dead-configuration lead, not a finding. */
|
|
44
|
-
readonly declaredNeverRead: number;
|
|
45
|
-
/** False when no adapter supplied environment reads — otherwise "no missing
|
|
46
|
-
* variables" would misstate code that was never read as clean. */
|
|
47
|
-
readonly readsAvailable: boolean;
|
|
48
|
-
readonly configGraph: {
|
|
49
|
-
readonly counts: ConfigGraph["counts"];
|
|
50
|
-
/** True when the graph carried at least one resolved import edge. */
|
|
51
|
-
readonly importsAvailable: boolean;
|
|
52
|
-
/** The ten most-depended-on variables that had a computable dependent set. */
|
|
53
|
-
readonly mostDependedOn: readonly ConfigDependencyReport[];
|
|
54
|
-
};
|
|
55
|
-
readonly rollback: {
|
|
56
|
-
readonly findings: readonly RollbackFinding[];
|
|
57
|
-
/** The count before `maxFindings` capped it — P27's disclosed remainder (§4 technique 5). */
|
|
58
|
-
readonly findingsTotal: number;
|
|
59
|
-
readonly examined: RollbackReport["examined"];
|
|
60
|
-
/** Operations this check declined to report, by reason. The size of what it did not say. */
|
|
61
|
-
readonly withheld: RollbackReport["withheld"];
|
|
62
|
-
/** False when no source supplied migration operations. */
|
|
63
|
-
readonly ran: boolean;
|
|
64
|
-
/** Named in plain words when `ran` is false. */
|
|
65
|
-
readonly blockers: readonly string[];
|
|
66
|
-
};
|
|
67
|
-
/** §"attribute read, type doesn't declare it" — always a defect (graph-provable
|
|
68
|
-
* contradiction between two producers), never a lead. */
|
|
69
|
-
readonly attributeExistence: {
|
|
70
|
-
readonly findings: readonly AttributeFinding[];
|
|
71
|
-
readonly findingsTotal: number;
|
|
72
|
-
readonly examined: AttributeReport["examined"];
|
|
73
|
-
/** False when no READS edge onto a type-like node carried field-existence info at all. */
|
|
74
|
-
readonly ran: boolean;
|
|
75
|
-
};
|
|
76
|
-
/** §"migration outside its directory, or broken revision chain" — both always
|
|
77
|
-
* defects, both graph-provable. */
|
|
78
|
-
readonly migrationIntegrity: {
|
|
79
|
-
readonly findings: readonly MigrationIntegrityFinding[];
|
|
80
|
-
readonly findingsTotal: number;
|
|
81
|
-
readonly examined: MigrationIntegrityReport["examined"];
|
|
82
|
-
readonly migrationsDirectory: string | null;
|
|
83
|
-
/** False when no module in the graph carried migration revision attrs. */
|
|
84
|
-
readonly ran: boolean;
|
|
85
|
-
readonly withheld: MigrationIntegrityReport["withheld"];
|
|
86
|
-
};
|
|
87
|
-
/** §"ORM model inherits the declarative base but no __init__.py in its package
|
|
88
|
-
* reaches its module" — always a lead, never a defect: a model registered by an
|
|
89
|
-
* explicit scan rather than by import, or deliberately excluded from migrations,
|
|
90
|
-
* triggers this without being a bug. See `orm-registration.ts`'s header. */
|
|
91
|
-
readonly ormRegistration: {
|
|
92
|
-
readonly findings: readonly OrmRegistrationFinding[];
|
|
93
|
-
readonly findingsTotal: number;
|
|
94
|
-
readonly examined: OrmRegistrationReport["examined"];
|
|
95
|
-
/** False when no MODEL node in the graph carried an outgoing INHERITS edge. */
|
|
96
|
-
readonly ran: boolean;
|
|
97
|
-
readonly withheld: OrmRegistrationReport["withheld"];
|
|
98
|
-
};
|
|
99
|
-
/** §"an observed HTTP response against a path no route serves" — UAT phase 5 §5
|
|
100
|
-
* (D2). Always a lead: a status code and path alone can never rule out a
|
|
101
|
-
* legitimately missing resource. See `@descryy/core`'s `observed-routes.ts`. */
|
|
102
|
-
readonly observedRoutes: {
|
|
103
|
-
readonly findings: readonly ObservedRouteFinding[];
|
|
104
|
-
readonly findingsTotal: number;
|
|
105
|
-
readonly examined: number;
|
|
106
|
-
/** False when no evidence database exists yet, or it holds no NETWORK_RESPONSE/
|
|
107
|
-
* HTTP_ERROR events — never created here: this is a read tool. */
|
|
108
|
-
readonly ran: boolean;
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
/** The minimal shape every one of `validate`'s finding sources satisfies — enough
|
|
112
|
-
* for a composer to count and rank without knowing which producer emitted an item. */
|
|
113
|
-
export interface ValidateFinding {
|
|
114
|
-
readonly claim: "defect" | "lead";
|
|
115
|
-
readonly detail: string;
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Flattens every one of `validate`'s finding sources into one array: the
|
|
119
|
-
* top-level env array plus the nested reports (`rollback`, `attributeExistence`,
|
|
120
|
-
* `migrationIntegrity`, `ormRegistration`, `observedRoutes`).
|
|
121
|
-
*
|
|
122
|
-
* `validate` publishes findings across several separate sub-objects because
|
|
123
|
-
* each check examines a different kind of evidence and discloses its own
|
|
124
|
-
* `ran`/`examined`/`withheld` detail alongside its findings. A composer that
|
|
125
|
-
* reads only one of them silently drops the rest — the exact failure UAT
|
|
126
|
-
* phase 5 §4 found in `pre_push`, which read `data.findings` and nothing
|
|
127
|
-
* else. This function is the one place that knows the full list, so a new
|
|
128
|
-
* sub-check added here is inherited by every composer automatically instead
|
|
129
|
-
* of requiring a second, easily-forgotten edit at each call site.
|
|
130
|
-
*/
|
|
131
|
-
export declare function collectValidateFindings(data: ValidateData): readonly ValidateFinding[];
|
|
132
|
-
export declare const validateTool: ToolDefinition;
|
|
133
|
-
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/tools/validate.ts"],"names":[],"mappings":"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"}
|