@descryy/mcp 0.11.4 → 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 +7 -7
- 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 -591
- 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 -1518
- 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 -151
- 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 -39
- package/dist/capped.d.ts.map +0 -1
- package/dist/capped.js +0 -43
- 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 -327
- package/dist/registry.js.map +0 -1
- package/dist/render.d.ts +0 -623
- package/dist/render.d.ts.map +0 -1
- package/dist/render.js +0 -968
- 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 -651
- package/dist/server.js.map +0 -1
- package/dist/session.d.ts +0 -356
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js +0 -779
- 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 -225
- 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 -640
- 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 -444
- 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 -370
- 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 -307
- 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 -385
- 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 -106
- 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 -262
- package/dist/tools/observe-runtime.d.ts.map +0 -1
- package/dist/tools/observe-runtime.js +0 -1901
- 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 -374
- 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 -123
- 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 -217
- 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 -203
- 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 -520
- 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
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* When a browser action fails: whose fault was it?
|
|
3
|
-
*
|
|
4
|
-
* ## This concept did not already exist
|
|
5
|
-
*
|
|
6
|
-
* `browser-reliability.md` §4.5 says "the product already carries this
|
|
7
|
-
* concept". Checked before building: it does not. `descry-runtime` has four
|
|
8
|
-
* incidental uses of the word "attributable" — a log envelope naming its
|
|
9
|
-
* unwrapper, evidence carrying a process id, a correlator comment about not
|
|
10
|
-
* blaming a producer, a test runner locating a fact — and no fault-domain type,
|
|
11
|
-
* no owner vocabulary and nothing that decides between them. The nearest real
|
|
12
|
-
* neighbours are `@descryy/ir`'s five **result states** and five **report
|
|
13
|
-
* categories**, and both answer a different question: they say how much Descry
|
|
14
|
-
* can claim, never who broke it. So this is new, and it is deliberately shaped
|
|
15
|
-
* like its neighbours — a small closed vocabulary, one function that decides,
|
|
16
|
-
* and an explicit value for "do not know".
|
|
17
|
-
*
|
|
18
|
-
* ## The one rule everything else serves
|
|
19
|
-
*
|
|
20
|
-
* **A timeout with nothing corroborating it is never the application's fault.**
|
|
21
|
-
* A wait that expired is a fact about Descry: the page did not reach a state
|
|
22
|
-
* Descry was waiting for, within a budget Descry chose. It is equally
|
|
23
|
-
* consistent with a broken button, a slow one, an overlay, and an animation.
|
|
24
|
-
* Reporting it as the user's bug is the single fastest way to make a testing
|
|
25
|
-
* tool untrusted, and the cost of being wrong is asymmetric — an
|
|
26
|
-
* `undetermined` that was really a bug costs one missed finding, and an
|
|
27
|
-
* `application` that was really our timeout costs the tool's credibility.
|
|
28
|
-
* That is rule 2 (precision over recall) applied to blame rather than to edges.
|
|
29
|
-
*
|
|
30
|
-
* So `application` is only ever named with a **first-party corroborating
|
|
31
|
-
* signal** in the same window: the page threw, or a request to the
|
|
32
|
-
* application's own origin failed. Never on the timeout alone.
|
|
33
|
-
*
|
|
34
|
-
* ## Where the corroborating signal comes from (C3)
|
|
35
|
-
*
|
|
36
|
-
* It does not exist yet when the failure happens. The recording decorator sees
|
|
37
|
-
* the throw and must not drain evidence to enrich it — evidence is drained, not
|
|
38
|
-
* peeked, and reading it there would steal what the calling tool is about to
|
|
39
|
-
* report. So `attributeActionFailure` runs on the error and the clock alone and
|
|
40
|
-
* most real failures start `undetermined`, which is the honest answer to what
|
|
41
|
-
* it was given. `evidenceInWindow` and `refineAttribution` below are the second
|
|
42
|
-
* half: the next drain of that session hands over what the page actually
|
|
43
|
-
* produced, the counts are narrowed to the failed action's own window, and the
|
|
44
|
-
* attribution is re-decided once. Wired at the two places a drain happens —
|
|
45
|
-
* `observeAndCorrelate` for every evidence-bearing tool call, and the
|
|
46
|
-
* registry's `reap` for the tail no tool call ever returns.
|
|
47
|
-
*/
|
|
48
|
-
import { BrowserSessionCrashedError, isFailedRequest, UnknownElementRefError } from "./driver.js";
|
|
49
|
-
/**
|
|
50
|
-
* The four fault domains, plus the fifth value that keeps the other four
|
|
51
|
-
* honest. `undetermined` is not a failure to classify — it is the correct
|
|
52
|
-
* answer whenever the evidence does not reach one of the four, and a
|
|
53
|
-
* vocabulary without it would force every case into a guess.
|
|
54
|
-
*/
|
|
55
|
-
export const FAULT_OWNERS = ["application", "automation", "environment", "dependency", "undetermined"];
|
|
56
|
-
/** Playwright's expiry reads as a message, not a type, on the far side of the
|
|
57
|
-
* port. Matching it is a heuristic and is treated as one: a false positive
|
|
58
|
-
* only ever routes to `undetermined`, which is where an unrecognised error
|
|
59
|
-
* goes anyway. */
|
|
60
|
-
function looksLikeExpiry(error) {
|
|
61
|
-
const text = error instanceof Error ? `${error.name} ${error.message}` : String(error);
|
|
62
|
-
return /timeout|timed out|exceeded/i.test(text);
|
|
63
|
-
}
|
|
64
|
-
export function attributeActionFailure(failure) {
|
|
65
|
-
const { error, verb, pageErrors, failedRequests, thirdPartyFailedRequests } = failure;
|
|
66
|
-
if (error instanceof UnknownElementRefError) {
|
|
67
|
-
return {
|
|
68
|
-
owner: "automation",
|
|
69
|
-
reason: `Descry tried to ${verb} an element it no longer had a valid handle for.`,
|
|
70
|
-
evidence: "The ref named no element in the session's current snapshot — it was invented or it was superseded.",
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
if (error instanceof BrowserSessionCrashedError) {
|
|
74
|
-
return {
|
|
75
|
-
owner: "environment",
|
|
76
|
-
reason: "The browser process went away mid-action, so nothing about the page was established.",
|
|
77
|
-
evidence: "The session reported itself unusable before the action could complete.",
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
// Corroboration first, expiry second. A page that threw while Descry waited
|
|
81
|
-
// is a first-party signal and outranks the wait; the wait alone never does.
|
|
82
|
-
if (pageErrors > 0) {
|
|
83
|
-
return {
|
|
84
|
-
owner: "application",
|
|
85
|
-
reason: `The page raised errors of its own while Descry was waiting to ${verb}.`,
|
|
86
|
-
evidence: `${pageErrors} console error${pageErrors === 1 ? "" : "s"} in the same window as the failed action.`,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
if (failedRequests > 0) {
|
|
90
|
-
if (thirdPartyFailedRequests >= failedRequests) {
|
|
91
|
-
return {
|
|
92
|
-
owner: "dependency",
|
|
93
|
-
reason: `Every request that failed while Descry was waiting to ${verb} went to a third-party origin.`,
|
|
94
|
-
evidence: `${failedRequests} failed request${failedRequests === 1 ? "" : "s"}, all of them off the application's own origin.`,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
const firstParty = failedRequests - thirdPartyFailedRequests;
|
|
98
|
-
return {
|
|
99
|
-
owner: "application",
|
|
100
|
-
reason: `Requests to the application's own origin failed while Descry was waiting to ${verb}.`,
|
|
101
|
-
evidence: `${firstParty} of ${failedRequests} failed request${failedRequests === 1 ? "" : "s"} were first-party.`,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
if (looksLikeExpiry(error)) {
|
|
105
|
-
return {
|
|
106
|
-
owner: "undetermined",
|
|
107
|
-
reason: `The element did not become actionable within the time Descry waited, and nothing else was observed ` +
|
|
108
|
-
`that would say why. A slow page, a covering overlay and a broken ${verb} target all look like this.`,
|
|
109
|
-
evidence: `The ${verb} expired after ${failure.elapsedMs} ms with no console error and no failed request alongside it.`,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
return {
|
|
113
|
-
owner: "undetermined",
|
|
114
|
-
reason: `The ${verb} failed for a reason Descry could not place in any of the four fault domains.`,
|
|
115
|
-
evidence: `${error instanceof Error ? `${error.name}: ${error.message}` : String(error)} after ${failure.elapsedMs} ms, with nothing else observed.`,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Counts, out of one drained observation, only what happened **inside a failed
|
|
120
|
-
* action's own window**.
|
|
121
|
-
*
|
|
122
|
-
* ## Why the window, and not the drain
|
|
123
|
-
*
|
|
124
|
-
* A drain is not a window. A drained observation covers everything since the
|
|
125
|
-
* last drain, which — because a failed verb throws and the tool never gets to
|
|
126
|
-
* drain — routinely includes a later, unrelated action. Counting the whole
|
|
127
|
-
* drain would let a console error caused by the *next* click decide who broke
|
|
128
|
-
* the previous one, and it would say so in the report's voice. The action's own
|
|
129
|
-
* start and end are recorded by the decorator for exactly this, and everything
|
|
130
|
-
* outside them is discarded rather than discounted.
|
|
131
|
-
*
|
|
132
|
-
* ## What is excluded, and why each exclusion goes the same way
|
|
133
|
-
*
|
|
134
|
-
* A timestamp that will not parse, a request URL that will not parse, and an
|
|
135
|
-
* `unattributed` request all resolve *away* from `application`. That is not
|
|
136
|
-
* symmetry for its own sake: the asymmetric cost this module was built around
|
|
137
|
-
* says an `undetermined` that was really a bug costs one finding, and an
|
|
138
|
-
* `application` that was really Descry's own timeout costs the tool. So an
|
|
139
|
-
* unreadable URL is counted as third-party (it cannot name the application), an
|
|
140
|
-
* unreadable timestamp is counted as outside the window, and a request whose
|
|
141
|
-
* terminal event could not be assigned to it is not counted as a failure at
|
|
142
|
-
* all — otherwise C3's own refusal to guess a join would come straight back as
|
|
143
|
-
* a guess about blame.
|
|
144
|
-
*/
|
|
145
|
-
export function evidenceInWindow(observation, window, applicationOrigin) {
|
|
146
|
-
const inside = (at) => {
|
|
147
|
-
const ms = Date.parse(at);
|
|
148
|
-
return Number.isFinite(ms) && ms >= window.from && ms <= window.to;
|
|
149
|
-
};
|
|
150
|
-
const failed = observation.requests.filter((request) => request.outcome !== "unattributed" && isFailedRequest(request) && inside(request.at));
|
|
151
|
-
const thirdParty = failed.filter((request) => {
|
|
152
|
-
try {
|
|
153
|
-
return new URL(request.url).origin !== applicationOrigin;
|
|
154
|
-
}
|
|
155
|
-
catch {
|
|
156
|
-
return true;
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
return {
|
|
160
|
-
pageErrors: observation.consoleErrors.filter((error) => inside(error.at)).length,
|
|
161
|
-
failedRequests: failed.length,
|
|
162
|
-
thirdPartyFailedRequests: thirdParty.length,
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Re-decide an attribution once evidence that was not available at the moment
|
|
167
|
-
* of failure has arrived. Only ever called on `undetermined`: an attribution
|
|
168
|
-
* that already reached one of the four rested on a signal this later evidence
|
|
169
|
-
* cannot withdraw, and silently rewriting it would make the same failure read
|
|
170
|
-
* two ways in two replies.
|
|
171
|
-
*/
|
|
172
|
-
export function refineAttribution(attribution, failure, later) {
|
|
173
|
-
if (attribution.owner !== "undetermined")
|
|
174
|
-
return attribution;
|
|
175
|
-
const refined = attributeActionFailure({
|
|
176
|
-
...failure,
|
|
177
|
-
pageErrors: failure.pageErrors + later.pageErrors,
|
|
178
|
-
failedRequests: failure.failedRequests + later.failedRequests,
|
|
179
|
-
thirdPartyFailedRequests: failure.thirdPartyFailedRequests + later.thirdPartyFailedRequests,
|
|
180
|
-
});
|
|
181
|
-
if (refined.owner === "undetermined")
|
|
182
|
-
return attribution;
|
|
183
|
-
return { ...refined, evidence: `${refined.evidence} (observed after the action, in the next evidence this session flushed)` };
|
|
184
|
-
}
|
|
185
|
-
export function faultNote(attribution) {
|
|
186
|
-
return `Fault: ${attribution.owner}. ${attribution.reason} ${attribution.evidence}`;
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* RG-12(b): the vocabulary reconciliation. The site names three layers to a
|
|
190
|
-
* user — "your product", "your environment", "a dependency" — and this
|
|
191
|
-
* module's own five values are `application`, `automation`, `environment`,
|
|
192
|
-
* `dependency`, `undetermined`. Two real gaps, not one:
|
|
193
|
-
*
|
|
194
|
-
* 1. `automation` (Descry's *own* fault — a bad ref, a stale handle, a
|
|
195
|
-
* harness bug) has nowhere to go in the site's three layers, and it is
|
|
196
|
-
* the one value that most protects a user's trust: folding it into
|
|
197
|
-
* "your environment" would let Descry's own mistake read as the user's
|
|
198
|
-
* infrastructure being at fault, which is backwards.
|
|
199
|
-
* 2. `undetermined` has nowhere to go either, and collapsing it into any of
|
|
200
|
-
* the three would state a layer the evidence did not actually reach.
|
|
201
|
-
*
|
|
202
|
-
* **Recommendation (implemented here, not on the site — that copy is a
|
|
203
|
-
* different lane's to change): the site gains a fourth and fifth category
|
|
204
|
-
* rather than losing this module's granularity.** "Descry itself" for
|
|
205
|
-
* `automation` (visible, not hidden — this is the layer that most needs to
|
|
206
|
-
* be named when the tool is the one that got it wrong) and "not
|
|
207
|
-
* determined" for `undetermined` (an honest refusal is not a hidden
|
|
208
|
-
* failure). No code value is deleted to fit the narrower copy; this
|
|
209
|
-
* function is the one place that maps the closed five-value set onto
|
|
210
|
-
* display text, so a copy change only ever touches this map.
|
|
211
|
-
*/
|
|
212
|
-
export const FAULT_OWNER_DISPLAY_LABELS = {
|
|
213
|
-
application: "your product",
|
|
214
|
-
automation: "Descry itself",
|
|
215
|
-
environment: "your environment",
|
|
216
|
-
dependency: "a dependency",
|
|
217
|
-
undetermined: "not determined",
|
|
218
|
-
};
|
|
219
|
-
/**
|
|
220
|
-
* RG-12(c): the type-level half of "every failure carries a layer, by
|
|
221
|
-
* construction, not by convention." A `switch` with no `default` fails to
|
|
222
|
-
* compile the moment `FAULT_OWNERS` gains or loses a value without this
|
|
223
|
-
* function being updated to match — the same guarantee `ActionRecord`'s
|
|
224
|
-
* discriminated union (`reachability.ts`) gives the *presence* of an
|
|
225
|
-
* attribution; this is what gives the *display* side the same guarantee.
|
|
226
|
-
*/
|
|
227
|
-
export function faultOwnerDisplayLabel(owner) {
|
|
228
|
-
switch (owner) {
|
|
229
|
-
case "application":
|
|
230
|
-
return FAULT_OWNER_DISPLAY_LABELS.application;
|
|
231
|
-
case "automation":
|
|
232
|
-
return FAULT_OWNER_DISPLAY_LABELS.automation;
|
|
233
|
-
case "environment":
|
|
234
|
-
return FAULT_OWNER_DISPLAY_LABELS.environment;
|
|
235
|
-
case "dependency":
|
|
236
|
-
return FAULT_OWNER_DISPLAY_LABELS.dependency;
|
|
237
|
-
case "undetermined":
|
|
238
|
-
return FAULT_OWNER_DISPLAY_LABELS.undetermined;
|
|
239
|
-
default: {
|
|
240
|
-
// Exhaustiveness check: if FAULT_OWNERS ever gains a member, `owner`
|
|
241
|
-
// stops being `never` here and this file fails to compile — the
|
|
242
|
-
// enforcement is at build time, not at review time.
|
|
243
|
-
const exhaustive = owner;
|
|
244
|
-
throw new Error(`faultOwnerDisplayLabel: unhandled FaultOwner ${String(exhaustive)}`);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* RG-12(c): the run-level half. Not a convention check — `ActionRecord`'s
|
|
250
|
-
* discriminated union already makes `{ succeeded: false, attribution: null }`
|
|
251
|
-
* uncoinstructable inside this module. This is the belt for a caller
|
|
252
|
-
* reaching in from outside the type system (a cast, a deserialised record,
|
|
253
|
-
* a future refactor that widens the type back out) — the same "trust but
|
|
254
|
-
* verify" `report()`'s own filter used to need before the union made it
|
|
255
|
-
* unnecessary there. Throws by name rather than silently dropping the
|
|
256
|
-
* finding, which is the failure mode this whole item exists to close.
|
|
257
|
-
*/
|
|
258
|
-
export function assertEveryFailureAttributed(actions) {
|
|
259
|
-
for (const action of actions) {
|
|
260
|
-
if (!action.succeeded && (action.attribution === null || action.attribution === undefined)) {
|
|
261
|
-
throw new Error("assertEveryFailureAttributed: a failed action carries no FaultAttribution. Every reportable failure " +
|
|
262
|
-
"must carry a layer — a failure with none must not reach a report at all.");
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
//# sourceMappingURL=fault-attribution.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fault-attribution.js","sourceRoot":"","sources":["../../src/browser/fault-attribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* §5.4: joins a real browser action to a real R4 edge — witnessed, not the
|
|
3
|
-
* R1 string-match `impact`/`propagation` already do. Precision over recall:
|
|
4
|
-
* anything unresolvable (no stack, no endpoint, ambiguous) drops the observation entirely rather than writing a weak edge. Never mints a denial.
|
|
5
|
-
*/
|
|
6
|
-
import type { SqlDriver } from "@descryy/core";
|
|
7
|
-
import { type ObservedRequest } from "./driver.ts";
|
|
8
|
-
/** A graph node this browser evidence actually reached — §5.3's "any graph node reached, surfaced in the same reply". */
|
|
9
|
-
export interface ReachedNode {
|
|
10
|
-
readonly nodeId: string;
|
|
11
|
-
readonly name: string;
|
|
12
|
-
readonly type: string;
|
|
13
|
-
/** The request that reached it, so a reader can see which action this was. */
|
|
14
|
-
readonly via: {
|
|
15
|
-
readonly method: string;
|
|
16
|
-
readonly url: string;
|
|
17
|
-
readonly status: number | null;
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
export interface BrowserGraphWrite {
|
|
21
|
-
/** Endpoints the page's own requests resolved to, whether or not an edge was written. */
|
|
22
|
-
readonly reached: readonly ReachedNode[];
|
|
23
|
-
/** Existing edges promoted to R4 by this observation. */
|
|
24
|
-
readonly promoted: readonly string[];
|
|
25
|
-
/** Edges the structural side never named, minted at R4 — the recall gap closing. */
|
|
26
|
-
readonly created: readonly string[];
|
|
27
|
-
/** Reasons an observation was declined. Kept, because a silent drop is indistinguishable from nothing having happened. */
|
|
28
|
-
readonly refused: readonly string[];
|
|
29
|
-
/** R4-vs-R4 disagreements, passed through untouched — this module does not adjudicate them. */
|
|
30
|
-
readonly contradictions: readonly string[];
|
|
31
|
-
}
|
|
32
|
-
export declare const NO_GRAPH_WRITE: BrowserGraphWrite;
|
|
33
|
-
export interface BrowserGraphWriteInput {
|
|
34
|
-
readonly driver: SqlDriver;
|
|
35
|
-
readonly repo: string;
|
|
36
|
-
readonly runId: string;
|
|
37
|
-
readonly commitSha: string;
|
|
38
|
-
readonly repoRoot: string;
|
|
39
|
-
readonly requests: readonly ObservedRequest[];
|
|
40
|
-
}
|
|
41
|
-
/** Correlates what the page did against the graph, recording only what was genuinely witnessed. Runs over every request, not just failures — a successful call is what proves the arrow. */
|
|
42
|
-
export declare function writeBrowserObservations(input: BrowserGraphWriteInput): BrowserGraphWrite;
|
|
43
|
-
/** What a reply says about a write. Empty when nothing was reached — silence about nothing is not a disclosure gap. */
|
|
44
|
-
export declare function graphWriteNotes(write: BrowserGraphWrite, requests: readonly ObservedRequest[]): string[];
|
|
45
|
-
//# sourceMappingURL=graph-write.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graph-write.d.ts","sourceRoot":"","sources":["../../src/browser/graph-write.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEpE,yHAAyH;AACzH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACjG;AAED,MAAM,WAAW,iBAAiB;IAChC,yFAAyF;IACzF,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,oFAAoF;IACpF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,0HAA0H;IAC1H,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,+FAA+F;IAC/F,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAED,eAAO,MAAM,cAAc,EAAE,iBAA+F,CAAC;AAE7H,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;CAC/C;AAED,4LAA4L;AAC5L,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,sBAAsB,GAAG,iBAAiB,CA6DzF;AAED,uHAAuH;AACvH,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,EAAE,CA8CxG"}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* §5.4: joins a real browser action to a real R4 edge — witnessed, not the
|
|
3
|
-
* R1 string-match `impact`/`propagation` already do. Precision over recall:
|
|
4
|
-
* anything unresolvable (no stack, no endpoint, ambiguous) drops the observation entirely rather than writing a weak edge. Never mints a denial.
|
|
5
|
-
*/
|
|
6
|
-
import { confirmObservedFrontendCaller, resolveEndpointNode } from "@descryy/runtime-graph-correlator";
|
|
7
|
-
import { isFailedRequest } from "./driver.js";
|
|
8
|
-
export const NO_GRAPH_WRITE = { reached: [], promoted: [], created: [], refused: [], contradictions: [] };
|
|
9
|
-
/** Correlates what the page did against the graph, recording only what was genuinely witnessed. Runs over every request, not just failures — a successful call is what proves the arrow. */
|
|
10
|
-
export function writeBrowserObservations(input) {
|
|
11
|
-
const reached = [];
|
|
12
|
-
const promoted = [];
|
|
13
|
-
const created = [];
|
|
14
|
-
const refused = [];
|
|
15
|
-
const contradictions = [];
|
|
16
|
-
const seen = new Set();
|
|
17
|
-
for (const request of input.requests) {
|
|
18
|
-
let path;
|
|
19
|
-
try {
|
|
20
|
-
path = new URL(request.url).pathname;
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
const resolution = resolveEndpointNode(input.driver, request.method, path);
|
|
26
|
-
if (resolution.outcome !== "resolved") {
|
|
27
|
-
// Not worth reporting per request: a page issues requests for
|
|
28
|
-
// stylesheets, images and third-party origins, none meant to be an
|
|
29
|
-
// endpoint here — reporting each miss would bury the real ones.
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
const endpoint = resolution.node;
|
|
33
|
-
const key = `${endpoint.id}::${request.method}::${path}`;
|
|
34
|
-
if (!seen.has(key)) {
|
|
35
|
-
seen.add(key);
|
|
36
|
-
reached.push({
|
|
37
|
-
nodeId: endpoint.id,
|
|
38
|
-
name: endpoint.name,
|
|
39
|
-
type: endpoint.type,
|
|
40
|
-
via: { method: request.method, url: request.url, status: request.status },
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
if (request.stackTrace === null) {
|
|
44
|
-
// Endpoint reached, but no parsed stack means no caller edge — disclosed rather than dropped ("saw the hit, not the source" is still useful).
|
|
45
|
-
refused.push(`${request.method} ${path} reached ${endpoint.name}, but no parsed call-site stack was captured, so no ` +
|
|
46
|
-
"caller edge was written. Name a stackParser on browser_start_session to capture one.");
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
const outcome = confirmObservedFrontendCaller(input.driver, {
|
|
50
|
-
endpointNodeId: endpoint.id,
|
|
51
|
-
stackTrace: request.stackTrace,
|
|
52
|
-
repo: input.repo,
|
|
53
|
-
runId: input.runId,
|
|
54
|
-
commitSha: input.commitSha,
|
|
55
|
-
repoRoot: input.repoRoot,
|
|
56
|
-
});
|
|
57
|
-
promoted.push(...outcome.confirmation.promoted);
|
|
58
|
-
created.push(...outcome.confirmation.created);
|
|
59
|
-
refused.push(...outcome.confirmation.refused.map((r) => r.reason));
|
|
60
|
-
contradictions.push(...outcome.confirmation.contradictions.map((c) => c.detail));
|
|
61
|
-
}
|
|
62
|
-
return { reached, promoted, created, refused, contradictions };
|
|
63
|
-
}
|
|
64
|
-
/** What a reply says about a write. Empty when nothing was reached — silence about nothing is not a disclosure gap. */
|
|
65
|
-
export function graphWriteNotes(write, requests) {
|
|
66
|
-
const notes = [];
|
|
67
|
-
const confirmed = write.promoted.length + write.created.length;
|
|
68
|
-
if (confirmed > 0) {
|
|
69
|
-
notes.push(`${confirmed} frontend→backend edge(s) were confirmed at resolution 4 from this run — ` +
|
|
70
|
-
`${write.promoted.length} existing edge(s) promoted, ${write.created.length} minted that static ` +
|
|
71
|
-
"analysis had not found. These are witnessed, not name-matched: a real request carrying a real " +
|
|
72
|
-
"call-site stack. impact and propagation read them with no further action.");
|
|
73
|
-
}
|
|
74
|
-
if (write.reached.length > 0 && confirmed === 0) {
|
|
75
|
-
notes.push(`${write.reached.length} endpoint(s) in the graph were reached by this page, but no caller edge was ` +
|
|
76
|
-
"written — see data.graph.refused for why. The endpoints are named so the gap is visible rather than absent.");
|
|
77
|
-
}
|
|
78
|
-
// Always stated, not only when non-empty (F7, UAT Phase 5): `contradictions`
|
|
79
|
-
// covers one narrow thing — an observation disagreeing with an existing R4
|
|
80
|
-
// edge — and an empty array reads as "nothing disagreed" unless the scope is
|
|
81
|
-
// named. It has no relationship to `confirmedFacts` in `.descry/config.json`
|
|
82
|
-
// and never consults them, so a real disagreement between this run's
|
|
83
|
-
// observations and a developer-confirmed fact (an env URL, say) produces no
|
|
84
|
-
// note here at all — not because nothing disagreed, but because nothing
|
|
85
|
-
// looked. Stated whenever there is something to state it about, i.e.
|
|
86
|
-
// whenever this run actually reached or confirmed anything.
|
|
87
|
-
if (confirmed > 0 || write.reached.length > 0 || write.contradictions.length > 0) {
|
|
88
|
-
notes.push(write.contradictions.length > 0
|
|
89
|
-
? `${write.contradictions.length} observation(s) disagree with an existing R4 edge. Reported, not resolved: ` +
|
|
90
|
-
"adjudicating two runtime observations against each other is not this call's job."
|
|
91
|
-
: "No R4 edge disagreed with this run's observations. This checks observation-versus-stored-R4-edge " +
|
|
92
|
-
'only — it does not compare against a developer-confirmed fact in .descry/config.json\'s ' +
|
|
93
|
-
'"confirmedFacts" (an env URL, say); nothing in this surface does that today.');
|
|
94
|
-
}
|
|
95
|
-
const unexplained = requests.filter((r) => r.stackTrace === null && !isFailedRequest(r)).length;
|
|
96
|
-
if (unexplained > 0 && confirmed === 0 && write.reached.length === 0) {
|
|
97
|
-
notes.push(`${requests.length} request(s) were observed and none resolved to an endpoint in the graph. If this ` +
|
|
98
|
-
"repository has not been analysed, run analyze first — nothing here can be related to code the graph " +
|
|
99
|
-
"does not hold.");
|
|
100
|
-
}
|
|
101
|
-
return notes;
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=graph-write.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graph-write.js","sourceRoot":"","sources":["../../src/browser/graph-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The graph half of B1: `symbolLocationForGraph` (`@descryy/runtime-identity-grounding`)
|
|
3
|
-
* already hands `resolveSymbolNode` (`@descryy/runtime-graph-correlator`) exactly its own
|
|
4
|
-
* input shape and stops — its own header says so, deliberately, because a compiled location
|
|
5
|
-
* is withheld there rather than passed through as if it were authored source. This file is
|
|
6
|
-
* the hand-off itself: wiring, not a second resolver. It does not duplicate
|
|
7
|
-
* `resolveSymbolNode`'s ambiguity refusal, line-mismatch reporting or path translation — it
|
|
8
|
-
* calls it and restates the outcome in this package's own node shape.
|
|
9
|
-
*
|
|
10
|
-
* No new node type, no new edge type: this resolves to a `FUNCTION`/`CLASS` node an adapter
|
|
11
|
-
* already produced. `descry-core`'s frozen 15/15 vocabulary is untouched.
|
|
12
|
-
*/
|
|
13
|
-
import type { SqlDriver } from "@descryy/core";
|
|
14
|
-
import { type ElementIdentity } from "@descryy/runtime-identity-grounding";
|
|
15
|
-
/** The graph node an identity resolved to — only what a caller needs to name it, never the
|
|
16
|
-
* full `IRNode` (this package does not depend on `@descryy/ir`'s node shape beyond id/name/type). */
|
|
17
|
-
export interface IdentityGraphNode {
|
|
18
|
-
readonly nodeId: string;
|
|
19
|
-
readonly name: string;
|
|
20
|
-
readonly type: string;
|
|
21
|
-
}
|
|
22
|
-
export type IdentityGraphOutcome = {
|
|
23
|
-
readonly outcome: "resolved";
|
|
24
|
-
readonly node: IdentityGraphNode;
|
|
25
|
-
} | {
|
|
26
|
-
readonly outcome: "line-mismatch";
|
|
27
|
-
readonly node: IdentityGraphNode;
|
|
28
|
-
readonly reason: string;
|
|
29
|
-
} | {
|
|
30
|
-
readonly outcome: "not-found";
|
|
31
|
-
readonly reason: string;
|
|
32
|
-
} | {
|
|
33
|
-
readonly outcome: "ambiguous";
|
|
34
|
-
readonly reason: string;
|
|
35
|
-
}
|
|
36
|
-
/** Identity grounding did not produce a graph-eligible location for this element at all —
|
|
37
|
-
* a refusal, a component named with no location, or a compiled location deliberately
|
|
38
|
-
* withheld by `symbolLocationForGraph`. The element's own `identity` field already says
|
|
39
|
-
* which; this outcome exists so a caller asking "does this reach the graph" gets one
|
|
40
|
-
* answer without re-deriving it from `ElementIdentity`'s three-way split. */
|
|
41
|
-
| {
|
|
42
|
-
readonly outcome: "withheld";
|
|
43
|
-
readonly reason: string;
|
|
44
|
-
};
|
|
45
|
-
/**
|
|
46
|
-
* Resolves one grounded element to the graph node an adapter already produced from the same
|
|
47
|
-
* source. `repo` has no honest default (`resolveSymbolNode`'s own discipline — DEC-054, a
|
|
48
|
-
* session can hold two same-named, same-relative-path symbols from different repos), so it is
|
|
49
|
-
* required here too.
|
|
50
|
-
*/
|
|
51
|
-
export declare function resolveIdentityGraphNode(driver: SqlDriver, identity: ElementIdentity, repo: string, options?: {
|
|
52
|
-
readonly repoRoot?: string;
|
|
53
|
-
readonly cwd?: string;
|
|
54
|
-
}): IdentityGraphOutcome;
|
|
55
|
-
//# sourceMappingURL=identity-graph-write.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"identity-graph-write.d.ts","sourceRoot":"","sources":["../../src/browser/identity-graph-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEnG;sGACsG;AACtG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAClE;IAAE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChG;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC5D;;;;8EAI8E;GAC5E;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,eAAe,EACzB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAClE,oBAAoB,CAsBtB"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The graph half of B1: `symbolLocationForGraph` (`@descryy/runtime-identity-grounding`)
|
|
3
|
-
* already hands `resolveSymbolNode` (`@descryy/runtime-graph-correlator`) exactly its own
|
|
4
|
-
* input shape and stops — its own header says so, deliberately, because a compiled location
|
|
5
|
-
* is withheld there rather than passed through as if it were authored source. This file is
|
|
6
|
-
* the hand-off itself: wiring, not a second resolver. It does not duplicate
|
|
7
|
-
* `resolveSymbolNode`'s ambiguity refusal, line-mismatch reporting or path translation — it
|
|
8
|
-
* calls it and restates the outcome in this package's own node shape.
|
|
9
|
-
*
|
|
10
|
-
* No new node type, no new edge type: this resolves to a `FUNCTION`/`CLASS` node an adapter
|
|
11
|
-
* already produced. `descry-core`'s frozen 15/15 vocabulary is untouched.
|
|
12
|
-
*/
|
|
13
|
-
import { resolveSymbolNode } from "@descryy/runtime-graph-correlator";
|
|
14
|
-
import { symbolLocationForGraph } from "@descryy/runtime-identity-grounding";
|
|
15
|
-
/**
|
|
16
|
-
* Resolves one grounded element to the graph node an adapter already produced from the same
|
|
17
|
-
* source. `repo` has no honest default (`resolveSymbolNode`'s own discipline — DEC-054, a
|
|
18
|
-
* session can hold two same-named, same-relative-path symbols from different repos), so it is
|
|
19
|
-
* required here too.
|
|
20
|
-
*/
|
|
21
|
-
export function resolveIdentityGraphNode(driver, identity, repo, options = {}) {
|
|
22
|
-
const location = symbolLocationForGraph(identity);
|
|
23
|
-
if (location === null) {
|
|
24
|
-
return {
|
|
25
|
-
outcome: "withheld",
|
|
26
|
-
reason: "identity grounding did not produce an authored file and symbol for this element — see the " +
|
|
27
|
-
"element's own identity outcome (grounded/component-only/refused) for why.",
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
const resolution = resolveSymbolNode(driver, location, repo, options);
|
|
31
|
-
switch (resolution.outcome) {
|
|
32
|
-
case "resolved":
|
|
33
|
-
return { outcome: "resolved", node: toGraphNode(resolution.node) };
|
|
34
|
-
case "line-mismatch":
|
|
35
|
-
return { outcome: "line-mismatch", node: toGraphNode(resolution.node), reason: resolution.reason };
|
|
36
|
-
case "not-found":
|
|
37
|
-
return { outcome: "not-found", reason: resolution.reason };
|
|
38
|
-
case "ambiguous":
|
|
39
|
-
return { outcome: "ambiguous", reason: resolution.reason };
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function toGraphNode(node) {
|
|
43
|
-
return { nodeId: node.id, name: node.name, type: node.type };
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=identity-graph-write.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"identity-graph-write.js","sourceRoot":"","sources":["../../src/browser/identity-graph-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAwB,MAAM,qCAAqC,CAAC;AAsBnG;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAiB,EACjB,QAAyB,EACzB,IAAY,EACZ,UAAiE,EAAE;IAEnE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,UAAU;YACnB,MAAM,EACJ,4FAA4F;gBAC5F,2EAA2E;SAC9E,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACtE,QAAQ,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3B,KAAK,UAAU;YACb,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,KAAK,eAAe;YAClB,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;QACrG,KAAK,WAAW;YACd,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;QAC7D,KAAK,WAAW;YACd,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAA2E;IAC9F,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC/D,CAAC"}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The in-page half of the capability probe: one function, serialized into the
|
|
3
|
-
* page, that counts the shapes `capability-probe.ts` turns into a reach
|
|
4
|
-
* estimate.
|
|
5
|
-
*
|
|
6
|
-
* ## Why it lives here and not in the driver
|
|
7
|
-
*
|
|
8
|
-
* `playwright-driver.ts` is one lane's file and this is another's. Keeping the
|
|
9
|
-
* probe body here means the driver gains a six-line delegating method rather
|
|
10
|
-
* than two hundred lines of DOM walking, which is the difference between a
|
|
11
|
-
* mergeable change and a rewritten file.
|
|
12
|
-
*
|
|
13
|
-
* ## Structural DOM types, again, and why
|
|
14
|
-
*
|
|
15
|
-
* `tsc` omits the DOM lib on purpose repo-wide — pulling it in would put
|
|
16
|
-
* `document` and `window` in scope in every engine file. The driver already
|
|
17
|
-
* declares the minimum it needs for `computeSelector`; this declares the
|
|
18
|
-
* minimum the probe needs. Both are structural, both are checked by the
|
|
19
|
-
* compiler, and neither leaks browser globals into modules that have no
|
|
20
|
-
* business with them.
|
|
21
|
-
*
|
|
22
|
-
* ## Every count is defensive, and an uncountable thing is null, never zero
|
|
23
|
-
*
|
|
24
|
-
* A probe that throws takes the session's opening disclosure with it, and a
|
|
25
|
-
* probe that reports `0` for something it could not look at teaches a false
|
|
26
|
-
* fact — which is the failure the five result states exist to prevent, applied
|
|
27
|
-
* one level down. So each group is wrapped, and `clientSideRouting` is
|
|
28
|
-
* `boolean | null` because a static probe genuinely cannot see it.
|
|
29
|
-
*/
|
|
30
|
-
import type { PageFingerprint } from "./capability-probe.ts";
|
|
31
|
-
/** The element surface the probe reads. Structural; see this file's header. */
|
|
32
|
-
export interface ProbeElement {
|
|
33
|
-
readonly ownerDocument: ProbeDocument;
|
|
34
|
-
readonly shadowRoot: ProbeRoot | null;
|
|
35
|
-
getAttribute(name: string): string | null;
|
|
36
|
-
getBoundingClientRect(): {
|
|
37
|
-
readonly width: number;
|
|
38
|
-
readonly height: number;
|
|
39
|
-
};
|
|
40
|
-
readonly scrollHeight: number;
|
|
41
|
-
readonly clientHeight: number;
|
|
42
|
-
readonly tagName: string;
|
|
43
|
-
}
|
|
44
|
-
export interface ProbeRoot {
|
|
45
|
-
querySelectorAll(selector: string): ArrayLike<ProbeElement>;
|
|
46
|
-
}
|
|
47
|
-
export interface ProbeDocument extends ProbeRoot {
|
|
48
|
-
readonly documentElement: {
|
|
49
|
-
readonly scrollHeight: number;
|
|
50
|
-
} | null;
|
|
51
|
-
readonly defaultView: ProbeView | null;
|
|
52
|
-
readonly location: {
|
|
53
|
-
readonly href: string;
|
|
54
|
-
readonly origin: string;
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
export interface ProbeView {
|
|
58
|
-
readonly innerWidth: number;
|
|
59
|
-
readonly innerHeight: number;
|
|
60
|
-
getComputedStyle(element: ProbeElement): {
|
|
61
|
-
readonly position: string;
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Runs inside the page. Must not close over anything in this module — it is
|
|
66
|
-
* serialized, so every constant it uses is passed in.
|
|
67
|
-
*/
|
|
68
|
-
export declare function probeInPage(root: ProbeElement, constants: {
|
|
69
|
-
readonly interactive: string;
|
|
70
|
-
readonly challengeMarkers: readonly (readonly [string, string])[];
|
|
71
|
-
readonly scrollOverflowRatio: number;
|
|
72
|
-
readonly overlayCovers: number;
|
|
73
|
-
}): PageFingerprint;
|
|
74
|
-
/** The constants `probeInPage` must be handed, since it cannot close over them. */
|
|
75
|
-
export declare const PROBE_CONSTANTS: {
|
|
76
|
-
readonly interactive: "a, button, input, select, textarea, [role], [onclick], summary";
|
|
77
|
-
readonly challengeMarkers: readonly (readonly [string, string])[];
|
|
78
|
-
readonly scrollOverflowRatio: 1.5;
|
|
79
|
-
readonly overlayCovers: 0.4;
|
|
80
|
-
};
|
|
81
|
-
//# sourceMappingURL=page-probe.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-probe.d.ts","sourceRoot":"","sources":["../../src/browser/page-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IACtC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1C,qBAAqB,IAAI;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,QAAQ,CAAC,eAAe,EAAE;QAAE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnE,QAAQ,CAAC,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AA4BD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE;IACT,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAClE,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,GACA,eAAe,CA+HjB;AAED,mFAAmF;AACnF,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC"}
|