agenticreplay 0.1.0 → 0.1.2
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/README.md +14 -13
- package/bin/agenticreplay.js +2 -0
- package/node_modules/@agenticreplay/adapters/dist/claude-code.d.ts +37 -0
- package/node_modules/@agenticreplay/adapters/dist/claude-code.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/claude-code.js +103 -0
- package/node_modules/@agenticreplay/adapters/dist/claude-code.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/codex.d.ts +36 -0
- package/node_modules/@agenticreplay/adapters/dist/codex.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/codex.js +130 -0
- package/node_modules/@agenticreplay/adapters/dist/codex.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/contract.d.ts +65 -0
- package/node_modules/@agenticreplay/adapters/dist/contract.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/contract.js +460 -0
- package/node_modules/@agenticreplay/adapters/dist/contract.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/cursor.d.ts +40 -0
- package/node_modules/@agenticreplay/adapters/dist/cursor.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/cursor.js +71 -0
- package/node_modules/@agenticreplay/adapters/dist/cursor.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/detect.d.ts +47 -0
- package/node_modules/@agenticreplay/adapters/dist/detect.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/detect.js +123 -0
- package/node_modules/@agenticreplay/adapters/dist/detect.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/env.d.ts +60 -0
- package/node_modules/@agenticreplay/adapters/dist/env.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/env.js +99 -0
- package/node_modules/@agenticreplay/adapters/dist/env.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/exec.d.ts +25 -0
- package/node_modules/@agenticreplay/adapters/dist/exec.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/exec.js +51 -0
- package/node_modules/@agenticreplay/adapters/dist/exec.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/generic-openai.d.ts +8 -0
- package/node_modules/@agenticreplay/adapters/dist/generic-openai.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/generic-openai.js +31 -0
- package/node_modules/@agenticreplay/adapters/dist/generic-openai.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/goose.d.ts +39 -0
- package/node_modules/@agenticreplay/adapters/dist/goose.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/goose.js +81 -0
- package/node_modules/@agenticreplay/adapters/dist/goose.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/grok.d.ts +23 -0
- package/node_modules/@agenticreplay/adapters/dist/grok.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/grok.js +50 -0
- package/node_modules/@agenticreplay/adapters/dist/grok.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/hermes.d.ts +70 -0
- package/node_modules/@agenticreplay/adapters/dist/hermes.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/hermes.js +88 -0
- package/node_modules/@agenticreplay/adapters/dist/hermes.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/index.d.ts +25 -0
- package/node_modules/@agenticreplay/adapters/dist/index.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/index.js +25 -0
- package/node_modules/@agenticreplay/adapters/dist/index.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/indexrag.d.ts +27 -0
- package/node_modules/@agenticreplay/adapters/dist/indexrag.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/indexrag.js +236 -0
- package/node_modules/@agenticreplay/adapters/dist/indexrag.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/kilo.d.ts +21 -0
- package/node_modules/@agenticreplay/adapters/dist/kilo.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/kilo.js +35 -0
- package/node_modules/@agenticreplay/adapters/dist/kilo.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/mcode.d.ts +81 -0
- package/node_modules/@agenticreplay/adapters/dist/mcode.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/mcode.js +368 -0
- package/node_modules/@agenticreplay/adapters/dist/mcode.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/mcp-config.d.ts +17 -0
- package/node_modules/@agenticreplay/adapters/dist/mcp-config.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/mcp-config.js +62 -0
- package/node_modules/@agenticreplay/adapters/dist/mcp-config.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/mimo.d.ts +26 -0
- package/node_modules/@agenticreplay/adapters/dist/mimo.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/mimo.js +40 -0
- package/node_modules/@agenticreplay/adapters/dist/mimo.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/node.d.ts +19 -0
- package/node_modules/@agenticreplay/adapters/dist/node.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/node.js +59 -0
- package/node_modules/@agenticreplay/adapters/dist/node.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/openclaw.d.ts +19 -0
- package/node_modules/@agenticreplay/adapters/dist/openclaw.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/openclaw.js +43 -0
- package/node_modules/@agenticreplay/adapters/dist/openclaw.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-api-bases.d.ts +2 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-api-bases.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-api-bases.js +201 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-api-bases.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-capture.d.ts +26 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-capture.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-capture.js +132 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-capture.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-catalog.d.ts +5 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-catalog.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-catalog.js +43 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-catalog.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-config.d.ts +40 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-config.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-config.js +185 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode-config.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode.d.ts +10 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode.js +243 -0
- package/node_modules/@agenticreplay/adapters/dist/opencode.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/qwen.d.ts +51 -0
- package/node_modules/@agenticreplay/adapters/dist/qwen.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/qwen.js +105 -0
- package/node_modules/@agenticreplay/adapters/dist/qwen.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/registry.d.ts +19 -0
- package/node_modules/@agenticreplay/adapters/dist/registry.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/registry.js +110 -0
- package/node_modules/@agenticreplay/adapters/dist/registry.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/scaffold.d.ts +26 -0
- package/node_modules/@agenticreplay/adapters/dist/scaffold.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/scaffold.js +125 -0
- package/node_modules/@agenticreplay/adapters/dist/scaffold.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/session.d.ts +47 -0
- package/node_modules/@agenticreplay/adapters/dist/session.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/session.js +112 -0
- package/node_modules/@agenticreplay/adapters/dist/session.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/zcode.d.ts +60 -0
- package/node_modules/@agenticreplay/adapters/dist/zcode.d.ts.map +1 -0
- package/node_modules/@agenticreplay/adapters/dist/zcode.js +424 -0
- package/node_modules/@agenticreplay/adapters/dist/zcode.js.map +1 -0
- package/node_modules/@agenticreplay/adapters/package.json +29 -0
- package/node_modules/@agenticreplay/core/dist/blobs.d.ts +21 -0
- package/node_modules/@agenticreplay/core/dist/blobs.d.ts.map +1 -0
- package/node_modules/@agenticreplay/core/dist/blobs.js +102 -0
- package/node_modules/@agenticreplay/core/dist/blobs.js.map +1 -0
- package/node_modules/@agenticreplay/core/dist/fetch.d.ts +38 -0
- package/node_modules/@agenticreplay/core/dist/fetch.d.ts.map +1 -0
- package/node_modules/@agenticreplay/core/dist/fetch.js +47 -0
- package/node_modules/@agenticreplay/core/dist/fetch.js.map +1 -0
- package/node_modules/@agenticreplay/core/dist/graph.d.ts +106 -0
- package/node_modules/@agenticreplay/core/dist/graph.d.ts.map +1 -0
- package/node_modules/@agenticreplay/core/dist/graph.js +394 -0
- package/node_modules/@agenticreplay/core/dist/graph.js.map +1 -0
- package/node_modules/@agenticreplay/core/dist/index.d.ts +9 -0
- package/node_modules/@agenticreplay/core/dist/index.d.ts.map +1 -0
- package/node_modules/@agenticreplay/core/dist/index.js +9 -0
- package/node_modules/@agenticreplay/core/dist/index.js.map +1 -0
- package/node_modules/@agenticreplay/core/dist/paths.d.ts +45 -0
- package/node_modules/@agenticreplay/core/dist/paths.d.ts.map +1 -0
- package/node_modules/@agenticreplay/core/dist/paths.js +149 -0
- package/node_modules/@agenticreplay/core/dist/paths.js.map +1 -0
- package/node_modules/@agenticreplay/core/dist/private-files.d.ts +37 -0
- package/node_modules/@agenticreplay/core/dist/private-files.d.ts.map +1 -0
- package/node_modules/@agenticreplay/core/dist/private-files.js +353 -0
- package/node_modules/@agenticreplay/core/dist/private-files.js.map +1 -0
- package/node_modules/@agenticreplay/core/dist/reader.d.ts +45 -0
- package/node_modules/@agenticreplay/core/dist/reader.d.ts.map +1 -0
- package/node_modules/@agenticreplay/core/dist/reader.js +152 -0
- package/node_modules/@agenticreplay/core/dist/reader.js.map +1 -0
- package/node_modules/@agenticreplay/core/dist/redaction.d.ts +69 -0
- package/node_modules/@agenticreplay/core/dist/redaction.d.ts.map +1 -0
- package/node_modules/@agenticreplay/core/dist/redaction.js +768 -0
- package/node_modules/@agenticreplay/core/dist/redaction.js.map +1 -0
- package/node_modules/@agenticreplay/core/dist/writer.d.ts +75 -0
- package/node_modules/@agenticreplay/core/dist/writer.d.ts.map +1 -0
- package/node_modules/@agenticreplay/core/dist/writer.js +368 -0
- package/node_modules/@agenticreplay/core/dist/writer.js.map +1 -0
- package/node_modules/@agenticreplay/core/package.json +26 -0
- package/node_modules/@agenticreplay/fs-capture/dist/capture.d.ts +84 -0
- package/node_modules/@agenticreplay/fs-capture/dist/capture.d.ts.map +1 -0
- package/node_modules/@agenticreplay/fs-capture/dist/capture.js +147 -0
- package/node_modules/@agenticreplay/fs-capture/dist/capture.js.map +1 -0
- package/node_modules/@agenticreplay/fs-capture/dist/git.d.ts +25 -0
- package/node_modules/@agenticreplay/fs-capture/dist/git.d.ts.map +1 -0
- package/node_modules/@agenticreplay/fs-capture/dist/git.js +108 -0
- package/node_modules/@agenticreplay/fs-capture/dist/git.js.map +1 -0
- package/node_modules/@agenticreplay/fs-capture/dist/index.d.ts +4 -0
- package/node_modules/@agenticreplay/fs-capture/dist/index.d.ts.map +1 -0
- package/node_modules/@agenticreplay/fs-capture/dist/index.js +4 -0
- package/node_modules/@agenticreplay/fs-capture/dist/index.js.map +1 -0
- package/node_modules/@agenticreplay/fs-capture/dist/shadow.d.ts +271 -0
- package/node_modules/@agenticreplay/fs-capture/dist/shadow.d.ts.map +1 -0
- package/node_modules/@agenticreplay/fs-capture/dist/shadow.js +668 -0
- package/node_modules/@agenticreplay/fs-capture/dist/shadow.js.map +1 -0
- package/node_modules/@agenticreplay/fs-capture/package.json +25 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/cli.d.ts +100 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/cli.d.ts.map +1 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/cli.js +334 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/cli.js.map +1 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/framing.d.ts +41 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/framing.d.ts.map +1 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/framing.js +94 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/framing.js.map +1 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/index.d.ts +5 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/index.d.ts.map +1 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/index.js +5 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/index.js.map +1 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/mock.d.ts +70 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/mock.d.ts.map +1 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/mock.js +138 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/mock.js.map +1 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/shim.d.ts +24 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/shim.d.ts.map +1 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/shim.js +105 -0
- package/node_modules/@agenticreplay/mcp-shim/dist/shim.js.map +1 -0
- package/node_modules/@agenticreplay/mcp-shim/package.json +26 -0
- package/node_modules/@agenticreplay/node-instrument/dist/capture.d.ts +58 -0
- package/node_modules/@agenticreplay/node-instrument/dist/capture.d.ts.map +1 -0
- package/node_modules/@agenticreplay/node-instrument/dist/capture.js +404 -0
- package/node_modules/@agenticreplay/node-instrument/dist/capture.js.map +1 -0
- package/node_modules/@agenticreplay/node-instrument/dist/index.d.ts +4 -0
- package/node_modules/@agenticreplay/node-instrument/dist/index.d.ts.map +1 -0
- package/node_modules/@agenticreplay/node-instrument/dist/index.js +4 -0
- package/node_modules/@agenticreplay/node-instrument/dist/index.js.map +1 -0
- package/node_modules/@agenticreplay/node-instrument/dist/install.d.ts +47 -0
- package/node_modules/@agenticreplay/node-instrument/dist/install.d.ts.map +1 -0
- package/node_modules/@agenticreplay/node-instrument/dist/install.js +174 -0
- package/node_modules/@agenticreplay/node-instrument/dist/install.js.map +1 -0
- package/node_modules/@agenticreplay/node-instrument/dist/rewrite.d.ts +33 -0
- package/node_modules/@agenticreplay/node-instrument/dist/rewrite.d.ts.map +1 -0
- package/node_modules/@agenticreplay/node-instrument/dist/rewrite.js +61 -0
- package/node_modules/@agenticreplay/node-instrument/dist/rewrite.js.map +1 -0
- package/node_modules/@agenticreplay/node-instrument/package.json +23 -0
- package/node_modules/@agenticreplay/plugin-api/dist/canonical.d.ts +87 -0
- package/node_modules/@agenticreplay/plugin-api/dist/canonical.d.ts.map +1 -0
- package/node_modules/@agenticreplay/plugin-api/dist/canonical.js +10 -0
- package/node_modules/@agenticreplay/plugin-api/dist/canonical.js.map +1 -0
- package/node_modules/@agenticreplay/plugin-api/dist/index.d.ts +3 -0
- package/node_modules/@agenticreplay/plugin-api/dist/index.d.ts.map +1 -0
- package/node_modules/@agenticreplay/plugin-api/dist/index.js +3 -0
- package/node_modules/@agenticreplay/plugin-api/dist/index.js.map +1 -0
- package/node_modules/@agenticreplay/plugin-api/dist/plugins.d.ts +258 -0
- package/node_modules/@agenticreplay/plugin-api/dist/plugins.d.ts.map +1 -0
- package/node_modules/@agenticreplay/plugin-api/dist/plugins.js +2 -0
- package/node_modules/@agenticreplay/plugin-api/dist/plugins.js.map +1 -0
- package/node_modules/@agenticreplay/plugin-api/package.json +22 -0
- package/node_modules/@agenticreplay/providers/dist/index.d.ts +34 -0
- package/node_modules/@agenticreplay/providers/dist/index.d.ts.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/index.js +34 -0
- package/node_modules/@agenticreplay/providers/dist/index.js.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/pricing.d.ts +44 -0
- package/node_modules/@agenticreplay/providers/dist/pricing.d.ts.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/pricing.js +126 -0
- package/node_modules/@agenticreplay/providers/dist/pricing.js.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/translate/anthropic.d.ts +66 -0
- package/node_modules/@agenticreplay/providers/dist/translate/anthropic.d.ts.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/translate/anthropic.js +569 -0
- package/node_modules/@agenticreplay/providers/dist/translate/anthropic.js.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/translate/openai-responses.d.ts +51 -0
- package/node_modules/@agenticreplay/providers/dist/translate/openai-responses.d.ts.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/translate/openai-responses.js +574 -0
- package/node_modules/@agenticreplay/providers/dist/translate/openai-responses.js.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/translate/openai.d.ts +60 -0
- package/node_modules/@agenticreplay/providers/dist/translate/openai.d.ts.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/translate/openai.js +577 -0
- package/node_modules/@agenticreplay/providers/dist/translate/openai.js.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/translate/sse.d.ts +29 -0
- package/node_modules/@agenticreplay/providers/dist/translate/sse.d.ts.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/translate/sse.js +97 -0
- package/node_modules/@agenticreplay/providers/dist/translate/sse.js.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/translate/util.d.ts +34 -0
- package/node_modules/@agenticreplay/providers/dist/translate/util.d.ts.map +1 -0
- package/node_modules/@agenticreplay/providers/dist/translate/util.js +106 -0
- package/node_modules/@agenticreplay/providers/dist/translate/util.js.map +1 -0
- package/node_modules/@agenticreplay/providers/package.json +26 -0
- package/node_modules/@agenticreplay/proxy/dist/ca.d.ts +45 -0
- package/node_modules/@agenticreplay/proxy/dist/ca.d.ts.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/ca.js +264 -0
- package/node_modules/@agenticreplay/proxy/dist/ca.js.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/der.d.ts +51 -0
- package/node_modules/@agenticreplay/proxy/dist/der.d.ts.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/der.js +144 -0
- package/node_modules/@agenticreplay/proxy/dist/der.js.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/dialects.d.ts +81 -0
- package/node_modules/@agenticreplay/proxy/dist/dialects.d.ts.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/dialects.js +329 -0
- package/node_modules/@agenticreplay/proxy/dist/dialects.js.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/forward.d.ts +34 -0
- package/node_modules/@agenticreplay/proxy/dist/forward.d.ts.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/forward.js +44 -0
- package/node_modules/@agenticreplay/proxy/dist/forward.js.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/index.d.ts +9 -0
- package/node_modules/@agenticreplay/proxy/dist/index.d.ts.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/index.js +9 -0
- package/node_modules/@agenticreplay/proxy/dist/index.js.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/intercept.d.ts +234 -0
- package/node_modules/@agenticreplay/proxy/dist/intercept.d.ts.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/intercept.js +1258 -0
- package/node_modules/@agenticreplay/proxy/dist/intercept.js.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/matching.d.ts +109 -0
- package/node_modules/@agenticreplay/proxy/dist/matching.d.ts.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/matching.js +928 -0
- package/node_modules/@agenticreplay/proxy/dist/matching.js.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/retrieval.d.ts +93 -0
- package/node_modules/@agenticreplay/proxy/dist/retrieval.d.ts.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/retrieval.js +233 -0
- package/node_modules/@agenticreplay/proxy/dist/retrieval.js.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/server.d.ts +327 -0
- package/node_modules/@agenticreplay/proxy/dist/server.d.ts.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/server.js +2291 -0
- package/node_modules/@agenticreplay/proxy/dist/server.js.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/tls-hosts.d.ts +54 -0
- package/node_modules/@agenticreplay/proxy/dist/tls-hosts.d.ts.map +1 -0
- package/node_modules/@agenticreplay/proxy/dist/tls-hosts.js +178 -0
- package/node_modules/@agenticreplay/proxy/dist/tls-hosts.js.map +1 -0
- package/node_modules/@agenticreplay/proxy/package.json +28 -0
- package/node_modules/@agenticreplay/schema/dist/constants.d.ts +30 -0
- package/node_modules/@agenticreplay/schema/dist/constants.d.ts.map +1 -0
- package/node_modules/@agenticreplay/schema/dist/constants.js +66 -0
- package/node_modules/@agenticreplay/schema/dist/constants.js.map +1 -0
- package/node_modules/@agenticreplay/schema/dist/index.d.ts +4 -0
- package/node_modules/@agenticreplay/schema/dist/index.d.ts.map +1 -0
- package/node_modules/@agenticreplay/schema/dist/index.js +4 -0
- package/node_modules/@agenticreplay/schema/dist/index.js.map +1 -0
- package/node_modules/@agenticreplay/schema/dist/types.d.ts +97 -0
- package/node_modules/@agenticreplay/schema/dist/types.d.ts.map +1 -0
- package/node_modules/@agenticreplay/schema/dist/types.js +7 -0
- package/node_modules/@agenticreplay/schema/dist/types.js.map +1 -0
- package/node_modules/@agenticreplay/schema/dist/validate.d.ts +13 -0
- package/node_modules/@agenticreplay/schema/dist/validate.d.ts.map +1 -0
- package/node_modules/@agenticreplay/schema/dist/validate.js +44 -0
- package/node_modules/@agenticreplay/schema/dist/validate.js.map +1 -0
- package/node_modules/@agenticreplay/schema/package.json +28 -0
- package/node_modules/@agenticreplay/shell-shim/dist/index.d.ts +4 -0
- package/node_modules/@agenticreplay/shell-shim/dist/index.d.ts.map +1 -0
- package/node_modules/@agenticreplay/shell-shim/dist/index.js +4 -0
- package/node_modules/@agenticreplay/shell-shim/dist/index.js.map +1 -0
- package/node_modules/@agenticreplay/shell-shim/dist/install.d.ts +75 -0
- package/node_modules/@agenticreplay/shell-shim/dist/install.d.ts.map +1 -0
- package/node_modules/@agenticreplay/shell-shim/dist/install.js +353 -0
- package/node_modules/@agenticreplay/shell-shim/dist/install.js.map +1 -0
- package/node_modules/@agenticreplay/shell-shim/dist/resolve.d.ts +2 -0
- package/node_modules/@agenticreplay/shell-shim/dist/resolve.d.ts.map +1 -0
- package/node_modules/@agenticreplay/shell-shim/dist/resolve.js +97 -0
- package/node_modules/@agenticreplay/shell-shim/dist/resolve.js.map +1 -0
- package/node_modules/@agenticreplay/shell-shim/dist/runner-bin.d.ts +3 -0
- package/node_modules/@agenticreplay/shell-shim/dist/runner-bin.d.ts.map +1 -0
- package/node_modules/@agenticreplay/shell-shim/dist/runner-bin.js +4 -0
- package/node_modules/@agenticreplay/shell-shim/dist/runner-bin.js.map +1 -0
- package/node_modules/@agenticreplay/shell-shim/dist/runner.d.ts +45 -0
- package/node_modules/@agenticreplay/shell-shim/dist/runner.d.ts.map +1 -0
- package/node_modules/@agenticreplay/shell-shim/dist/runner.js +105 -0
- package/node_modules/@agenticreplay/shell-shim/dist/runner.js.map +1 -0
- package/node_modules/@agenticreplay/shell-shim/package.json +26 -0
- package/node_modules/@agenticreplay/viewer/dist/bundle.d.ts +11 -0
- package/node_modules/@agenticreplay/viewer/dist/bundle.d.ts.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/bundle.js +36 -0
- package/node_modules/@agenticreplay/viewer/dist/bundle.js.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/client/main.d.ts +12 -0
- package/node_modules/@agenticreplay/viewer/dist/client/main.d.ts.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/client/main.js +249 -0
- package/node_modules/@agenticreplay/viewer/dist/client/main.js.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/credit.d.ts +22 -0
- package/node_modules/@agenticreplay/viewer/dist/credit.d.ts.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/credit.js +22 -0
- package/node_modules/@agenticreplay/viewer/dist/credit.js.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/css.d.ts +11 -0
- package/node_modules/@agenticreplay/viewer/dist/css.d.ts.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/css.js +410 -0
- package/node_modules/@agenticreplay/viewer/dist/css.js.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/export.d.ts +21 -0
- package/node_modules/@agenticreplay/viewer/dist/export.d.ts.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/export.js +22 -0
- package/node_modules/@agenticreplay/viewer/dist/export.js.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/html.d.ts +32 -0
- package/node_modules/@agenticreplay/viewer/dist/html.d.ts.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/html.js +252 -0
- package/node_modules/@agenticreplay/viewer/dist/html.js.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/index.d.ts +16 -0
- package/node_modules/@agenticreplay/viewer/dist/index.d.ts.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/index.js +16 -0
- package/node_modules/@agenticreplay/viewer/dist/index.js.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/render.d.ts +126 -0
- package/node_modules/@agenticreplay/viewer/dist/render.d.ts.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/render.js +699 -0
- package/node_modules/@agenticreplay/viewer/dist/render.js.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/serve.d.ts +21 -0
- package/node_modules/@agenticreplay/viewer/dist/serve.d.ts.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/serve.js +122 -0
- package/node_modules/@agenticreplay/viewer/dist/serve.js.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/trace-dir.d.ts +28 -0
- package/node_modules/@agenticreplay/viewer/dist/trace-dir.d.ts.map +1 -0
- package/node_modules/@agenticreplay/viewer/dist/trace-dir.js +120 -0
- package/node_modules/@agenticreplay/viewer/dist/trace-dir.js.map +1 -0
- package/node_modules/@agenticreplay/viewer/package.json +25 -0
- package/node_modules/ajv/.runkit_example.js +23 -0
- package/node_modules/ajv/LICENSE +22 -0
- package/node_modules/ajv/README.md +207 -0
- package/node_modules/ajv/dist/2019.d.ts +19 -0
- package/node_modules/ajv/dist/2019.js +61 -0
- package/node_modules/ajv/dist/2019.js.map +1 -0
- package/node_modules/ajv/dist/2020.d.ts +19 -0
- package/node_modules/ajv/dist/2020.js +55 -0
- package/node_modules/ajv/dist/2020.js.map +1 -0
- package/node_modules/ajv/dist/ajv.d.ts +18 -0
- package/node_modules/ajv/dist/ajv.js +50 -0
- package/node_modules/ajv/dist/ajv.js.map +1 -0
- package/node_modules/ajv/dist/compile/codegen/code.d.ts +40 -0
- package/node_modules/ajv/dist/compile/codegen/code.js +156 -0
- package/node_modules/ajv/dist/compile/codegen/code.js.map +1 -0
- package/node_modules/ajv/dist/compile/codegen/index.d.ts +79 -0
- package/node_modules/ajv/dist/compile/codegen/index.js +697 -0
- package/node_modules/ajv/dist/compile/codegen/index.js.map +1 -0
- package/node_modules/ajv/dist/compile/codegen/scope.d.ts +79 -0
- package/node_modules/ajv/dist/compile/codegen/scope.js +143 -0
- package/node_modules/ajv/dist/compile/codegen/scope.js.map +1 -0
- package/node_modules/ajv/dist/compile/errors.d.ts +13 -0
- package/node_modules/ajv/dist/compile/errors.js +123 -0
- package/node_modules/ajv/dist/compile/errors.js.map +1 -0
- package/node_modules/ajv/dist/compile/index.d.ts +80 -0
- package/node_modules/ajv/dist/compile/index.js +242 -0
- package/node_modules/ajv/dist/compile/index.js.map +1 -0
- package/node_modules/ajv/dist/compile/jtd/parse.d.ts +4 -0
- package/node_modules/ajv/dist/compile/jtd/parse.js +350 -0
- package/node_modules/ajv/dist/compile/jtd/parse.js.map +1 -0
- package/node_modules/ajv/dist/compile/jtd/serialize.d.ts +4 -0
- package/node_modules/ajv/dist/compile/jtd/serialize.js +236 -0
- package/node_modules/ajv/dist/compile/jtd/serialize.js.map +1 -0
- package/node_modules/ajv/dist/compile/jtd/types.d.ts +6 -0
- package/node_modules/ajv/dist/compile/jtd/types.js +14 -0
- package/node_modules/ajv/dist/compile/jtd/types.js.map +1 -0
- package/node_modules/ajv/dist/compile/names.d.ts +20 -0
- package/node_modules/ajv/dist/compile/names.js +28 -0
- package/node_modules/ajv/dist/compile/names.js.map +1 -0
- package/node_modules/ajv/dist/compile/ref_error.d.ts +6 -0
- package/node_modules/ajv/dist/compile/ref_error.js +12 -0
- package/node_modules/ajv/dist/compile/ref_error.js.map +1 -0
- package/node_modules/ajv/dist/compile/resolve.d.ts +12 -0
- package/node_modules/ajv/dist/compile/resolve.js +155 -0
- package/node_modules/ajv/dist/compile/resolve.js.map +1 -0
- package/node_modules/ajv/dist/compile/rules.d.ts +28 -0
- package/node_modules/ajv/dist/compile/rules.js +26 -0
- package/node_modules/ajv/dist/compile/rules.js.map +1 -0
- package/node_modules/ajv/dist/compile/util.d.ts +40 -0
- package/node_modules/ajv/dist/compile/util.js +178 -0
- package/node_modules/ajv/dist/compile/util.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/applicability.d.ts +6 -0
- package/node_modules/ajv/dist/compile/validate/applicability.js +19 -0
- package/node_modules/ajv/dist/compile/validate/applicability.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/boolSchema.d.ts +4 -0
- package/node_modules/ajv/dist/compile/validate/boolSchema.js +50 -0
- package/node_modules/ajv/dist/compile/validate/boolSchema.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/dataType.d.ts +17 -0
- package/node_modules/ajv/dist/compile/validate/dataType.js +203 -0
- package/node_modules/ajv/dist/compile/validate/dataType.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/defaults.d.ts +2 -0
- package/node_modules/ajv/dist/compile/validate/defaults.js +35 -0
- package/node_modules/ajv/dist/compile/validate/defaults.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/index.d.ts +42 -0
- package/node_modules/ajv/dist/compile/validate/index.js +520 -0
- package/node_modules/ajv/dist/compile/validate/index.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/keyword.d.ts +8 -0
- package/node_modules/ajv/dist/compile/validate/keyword.js +124 -0
- package/node_modules/ajv/dist/compile/validate/keyword.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/subschema.d.ts +47 -0
- package/node_modules/ajv/dist/compile/validate/subschema.js +81 -0
- package/node_modules/ajv/dist/compile/validate/subschema.js.map +1 -0
- package/node_modules/ajv/dist/core.d.ts +174 -0
- package/node_modules/ajv/dist/core.js +618 -0
- package/node_modules/ajv/dist/core.js.map +1 -0
- package/node_modules/ajv/dist/jtd.d.ts +47 -0
- package/node_modules/ajv/dist/jtd.js +72 -0
- package/node_modules/ajv/dist/jtd.js.map +1 -0
- package/node_modules/ajv/dist/refs/data.json +13 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/index.d.ts +2 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/index.js +28 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/index.js.map +1 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/applicator.json +53 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/content.json +17 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/core.json +57 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/format.json +14 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/meta-data.json +37 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/validation.json +90 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/schema.json +39 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/index.d.ts +2 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/index.js +30 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/index.js.map +1 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.json +48 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.json +17 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.json +51 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.json +14 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.json +37 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.json +15 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.json +90 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/schema.json +55 -0
- package/node_modules/ajv/dist/refs/json-schema-draft-06.json +137 -0
- package/node_modules/ajv/dist/refs/json-schema-draft-07.json +151 -0
- package/node_modules/ajv/dist/refs/json-schema-secure.json +88 -0
- package/node_modules/ajv/dist/refs/jtd-schema.d.ts +3 -0
- package/node_modules/ajv/dist/refs/jtd-schema.js +118 -0
- package/node_modules/ajv/dist/refs/jtd-schema.js.map +1 -0
- package/node_modules/ajv/dist/runtime/equal.d.ts +6 -0
- package/node_modules/ajv/dist/runtime/equal.js +7 -0
- package/node_modules/ajv/dist/runtime/equal.js.map +1 -0
- package/node_modules/ajv/dist/runtime/parseJson.d.ts +18 -0
- package/node_modules/ajv/dist/runtime/parseJson.js +185 -0
- package/node_modules/ajv/dist/runtime/parseJson.js.map +1 -0
- package/node_modules/ajv/dist/runtime/quote.d.ts +5 -0
- package/node_modules/ajv/dist/runtime/quote.js +30 -0
- package/node_modules/ajv/dist/runtime/quote.js.map +1 -0
- package/node_modules/ajv/dist/runtime/re2.d.ts +6 -0
- package/node_modules/ajv/dist/runtime/re2.js +6 -0
- package/node_modules/ajv/dist/runtime/re2.js.map +1 -0
- package/node_modules/ajv/dist/runtime/timestamp.d.ts +5 -0
- package/node_modules/ajv/dist/runtime/timestamp.js +42 -0
- package/node_modules/ajv/dist/runtime/timestamp.js.map +1 -0
- package/node_modules/ajv/dist/runtime/ucs2length.d.ts +5 -0
- package/node_modules/ajv/dist/runtime/ucs2length.js +24 -0
- package/node_modules/ajv/dist/runtime/ucs2length.js.map +1 -0
- package/node_modules/ajv/dist/runtime/uri.d.ts +6 -0
- package/node_modules/ajv/dist/runtime/uri.js +6 -0
- package/node_modules/ajv/dist/runtime/uri.js.map +1 -0
- package/node_modules/ajv/dist/runtime/validation_error.d.ts +7 -0
- package/node_modules/ajv/dist/runtime/validation_error.js +11 -0
- package/node_modules/ajv/dist/runtime/validation_error.js.map +1 -0
- package/node_modules/ajv/dist/standalone/index.d.ts +6 -0
- package/node_modules/ajv/dist/standalone/index.js +90 -0
- package/node_modules/ajv/dist/standalone/index.js.map +1 -0
- package/node_modules/ajv/dist/standalone/instance.d.ts +12 -0
- package/node_modules/ajv/dist/standalone/instance.js +35 -0
- package/node_modules/ajv/dist/standalone/instance.js.map +1 -0
- package/node_modules/ajv/dist/types/index.d.ts +183 -0
- package/node_modules/ajv/dist/types/index.js +3 -0
- package/node_modules/ajv/dist/types/index.js.map +1 -0
- package/node_modules/ajv/dist/types/json-schema.d.ts +125 -0
- package/node_modules/ajv/dist/types/json-schema.js +3 -0
- package/node_modules/ajv/dist/types/json-schema.js.map +1 -0
- package/node_modules/ajv/dist/types/jtd-schema.d.ts +174 -0
- package/node_modules/ajv/dist/types/jtd-schema.js +3 -0
- package/node_modules/ajv/dist/types/jtd-schema.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +49 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +106 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/allOf.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/allOf.js +23 -0
- package/node_modules/ajv/dist/vocabularies/applicator/allOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/anyOf.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +12 -0
- package/node_modules/ajv/dist/vocabularies/applicator/anyOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/contains.d.ts +7 -0
- package/node_modules/ajv/dist/vocabularies/applicator/contains.js +95 -0
- package/node_modules/ajv/dist/vocabularies/applicator/contains.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts +21 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +85 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependencies.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js +11 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/if.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/if.js +66 -0
- package/node_modules/ajv/dist/vocabularies/applicator/if.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/index.d.ts +13 -0
- package/node_modules/ajv/dist/vocabularies/applicator/index.js +44 -0
- package/node_modules/ajv/dist/vocabularies/applicator/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items.js +52 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items2020.js +30 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items2020.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/not.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/applicator/not.js +26 -0
- package/node_modules/ajv/dist/vocabularies/applicator/not.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/oneOf.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +60 -0
- package/node_modules/ajv/dist/vocabularies/applicator/oneOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +75 -0
- package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +12 -0
- package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/properties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/properties.js +54 -0
- package/node_modules/ajv/dist/vocabularies/applicator/properties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +38 -0
- package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/thenElse.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +13 -0
- package/node_modules/ajv/dist/vocabularies/applicator/thenElse.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/code.d.ts +17 -0
- package/node_modules/ajv/dist/vocabularies/code.js +131 -0
- package/node_modules/ajv/dist/vocabularies/code.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/core/id.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/core/id.js +10 -0
- package/node_modules/ajv/dist/vocabularies/core/id.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/core/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/core/index.js +16 -0
- package/node_modules/ajv/dist/vocabularies/core/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/core/ref.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/core/ref.js +122 -0
- package/node_modules/ajv/dist/vocabularies/core/ref.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/index.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/index.js +104 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/types.d.ts +10 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/types.js +9 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/types.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/draft2020.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/draft2020.js +23 -0
- package/node_modules/ajv/dist/vocabularies/draft2020.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/draft7.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/draft7.js +17 -0
- package/node_modules/ajv/dist/vocabularies/draft7.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js +30 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js +51 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/index.js +9 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js +16 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js +10 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/errors.d.ts +9 -0
- package/node_modules/ajv/dist/vocabularies/errors.js +3 -0
- package/node_modules/ajv/dist/vocabularies/errors.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/format/format.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/format/format.js +92 -0
- package/node_modules/ajv/dist/vocabularies/format/format.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/format/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/format/index.js +6 -0
- package/node_modules/ajv/dist/vocabularies/format/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/discriminator.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/jtd/discriminator.js +71 -0
- package/node_modules/ajv/dist/vocabularies/jtd/discriminator.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/elements.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/jtd/elements.js +24 -0
- package/node_modules/ajv/dist/vocabularies/jtd/elements.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/enum.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/jtd/enum.js +43 -0
- package/node_modules/ajv/dist/vocabularies/jtd/enum.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/error.d.ts +9 -0
- package/node_modules/ajv/dist/vocabularies/jtd/error.js +20 -0
- package/node_modules/ajv/dist/vocabularies/jtd/error.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/index.d.ts +10 -0
- package/node_modules/ajv/dist/vocabularies/jtd/index.js +29 -0
- package/node_modules/ajv/dist/vocabularies/jtd/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/metadata.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/jtd/metadata.js +25 -0
- package/node_modules/ajv/dist/vocabularies/jtd/metadata.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/nullable.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/jtd/nullable.js +22 -0
- package/node_modules/ajv/dist/vocabularies/jtd/nullable.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.js +15 -0
- package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/properties.d.ts +22 -0
- package/node_modules/ajv/dist/vocabularies/jtd/properties.js +149 -0
- package/node_modules/ajv/dist/vocabularies/jtd/properties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/ref.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/jtd/ref.js +67 -0
- package/node_modules/ajv/dist/vocabularies/jtd/ref.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/type.d.ts +10 -0
- package/node_modules/ajv/dist/vocabularies/jtd/type.js +69 -0
- package/node_modules/ajv/dist/vocabularies/jtd/type.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/union.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/jtd/union.js +12 -0
- package/node_modules/ajv/dist/vocabularies/jtd/union.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/values.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/jtd/values.js +51 -0
- package/node_modules/ajv/dist/vocabularies/jtd/values.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/metadata.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/metadata.js +18 -0
- package/node_modules/ajv/dist/vocabularies/metadata.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/next.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/next.js +8 -0
- package/node_modules/ajv/dist/vocabularies/next.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/index.js +7 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js +40 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js +65 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/const.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/validation/const.js +25 -0
- package/node_modules/ajv/dist/vocabularies/validation/const.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js +12 -0
- package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/enum.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/enum.js +48 -0
- package/node_modules/ajv/dist/vocabularies/validation/enum.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/index.d.ts +16 -0
- package/node_modules/ajv/dist/vocabularies/validation/index.js +33 -0
- package/node_modules/ajv/dist/vocabularies/validation/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitContains.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitContains.js +15 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitContains.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitItems.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitItems.js +24 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitLength.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitLength.js +27 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitLength.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitNumber.d.ts +11 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +27 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitNumber.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitProperties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +24 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/multipleOf.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +26 -0
- package/node_modules/ajv/dist/vocabularies/validation/multipleOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/pattern.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/pattern.js +33 -0
- package/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/required.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/required.js +79 -0
- package/node_modules/ajv/dist/vocabularies/validation/required.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.d.ts +9 -0
- package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +64 -0
- package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js.map +1 -0
- package/node_modules/ajv/lib/2019.ts +81 -0
- package/node_modules/ajv/lib/2020.ts +75 -0
- package/node_modules/ajv/lib/ajv.ts +70 -0
- package/node_modules/ajv/lib/compile/codegen/code.ts +169 -0
- package/node_modules/ajv/lib/compile/codegen/index.ts +852 -0
- package/node_modules/ajv/lib/compile/codegen/scope.ts +215 -0
- package/node_modules/ajv/lib/compile/errors.ts +184 -0
- package/node_modules/ajv/lib/compile/index.ts +324 -0
- package/node_modules/ajv/lib/compile/jtd/parse.ts +411 -0
- package/node_modules/ajv/lib/compile/jtd/serialize.ts +277 -0
- package/node_modules/ajv/lib/compile/jtd/types.ts +16 -0
- package/node_modules/ajv/lib/compile/names.ts +27 -0
- package/node_modules/ajv/lib/compile/ref_error.ts +13 -0
- package/node_modules/ajv/lib/compile/resolve.ts +149 -0
- package/node_modules/ajv/lib/compile/rules.ts +50 -0
- package/node_modules/ajv/lib/compile/util.ts +213 -0
- package/node_modules/ajv/lib/compile/validate/applicability.ts +22 -0
- package/node_modules/ajv/lib/compile/validate/boolSchema.ts +47 -0
- package/node_modules/ajv/lib/compile/validate/dataType.ts +230 -0
- package/node_modules/ajv/lib/compile/validate/defaults.ts +32 -0
- package/node_modules/ajv/lib/compile/validate/index.ts +582 -0
- package/node_modules/ajv/lib/compile/validate/keyword.ts +171 -0
- package/node_modules/ajv/lib/compile/validate/subschema.ts +135 -0
- package/node_modules/ajv/lib/core.ts +892 -0
- package/node_modules/ajv/lib/jtd.ts +132 -0
- package/node_modules/ajv/lib/refs/data.json +13 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/index.ts +28 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/applicator.json +53 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/content.json +17 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/core.json +57 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/format.json +14 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/meta-data.json +37 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/validation.json +90 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/schema.json +39 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/index.ts +30 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/applicator.json +48 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/content.json +17 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/core.json +51 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/format-annotation.json +14 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/meta-data.json +37 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/unevaluated.json +15 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/validation.json +90 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/schema.json +55 -0
- package/node_modules/ajv/lib/refs/json-schema-draft-06.json +137 -0
- package/node_modules/ajv/lib/refs/json-schema-draft-07.json +151 -0
- package/node_modules/ajv/lib/refs/json-schema-secure.json +88 -0
- package/node_modules/ajv/lib/refs/jtd-schema.ts +130 -0
- package/node_modules/ajv/lib/runtime/equal.ts +7 -0
- package/node_modules/ajv/lib/runtime/parseJson.ts +177 -0
- package/node_modules/ajv/lib/runtime/quote.ts +31 -0
- package/node_modules/ajv/lib/runtime/re2.ts +6 -0
- package/node_modules/ajv/lib/runtime/timestamp.ts +46 -0
- package/node_modules/ajv/lib/runtime/ucs2length.ts +20 -0
- package/node_modules/ajv/lib/runtime/uri.ts +6 -0
- package/node_modules/ajv/lib/runtime/validation_error.ts +13 -0
- package/node_modules/ajv/lib/standalone/index.ts +100 -0
- package/node_modules/ajv/lib/standalone/instance.ts +36 -0
- package/node_modules/ajv/lib/types/index.ts +244 -0
- package/node_modules/ajv/lib/types/json-schema.ts +187 -0
- package/node_modules/ajv/lib/types/jtd-schema.ts +273 -0
- package/node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts +56 -0
- package/node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts +118 -0
- package/node_modules/ajv/lib/vocabularies/applicator/allOf.ts +22 -0
- package/node_modules/ajv/lib/vocabularies/applicator/anyOf.ts +14 -0
- package/node_modules/ajv/lib/vocabularies/applicator/contains.ts +109 -0
- package/node_modules/ajv/lib/vocabularies/applicator/dependencies.ts +112 -0
- package/node_modules/ajv/lib/vocabularies/applicator/dependentSchemas.ts +11 -0
- package/node_modules/ajv/lib/vocabularies/applicator/if.ts +80 -0
- package/node_modules/ajv/lib/vocabularies/applicator/index.ts +53 -0
- package/node_modules/ajv/lib/vocabularies/applicator/items.ts +59 -0
- package/node_modules/ajv/lib/vocabularies/applicator/items2020.ts +36 -0
- package/node_modules/ajv/lib/vocabularies/applicator/not.ts +38 -0
- package/node_modules/ajv/lib/vocabularies/applicator/oneOf.ts +82 -0
- package/node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts +91 -0
- package/node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts +12 -0
- package/node_modules/ajv/lib/vocabularies/applicator/properties.ts +57 -0
- package/node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts +50 -0
- package/node_modules/ajv/lib/vocabularies/applicator/thenElse.ts +13 -0
- package/node_modules/ajv/lib/vocabularies/code.ts +168 -0
- package/node_modules/ajv/lib/vocabularies/core/id.ts +10 -0
- package/node_modules/ajv/lib/vocabularies/core/index.ts +16 -0
- package/node_modules/ajv/lib/vocabularies/core/ref.ts +129 -0
- package/node_modules/ajv/lib/vocabularies/discriminator/index.ts +113 -0
- package/node_modules/ajv/lib/vocabularies/discriminator/types.ts +12 -0
- package/node_modules/ajv/lib/vocabularies/draft2020.ts +23 -0
- package/node_modules/ajv/lib/vocabularies/draft7.ts +17 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/dynamicAnchor.ts +31 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/dynamicRef.ts +51 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/index.ts +9 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/recursiveAnchor.ts +14 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/recursiveRef.ts +10 -0
- package/node_modules/ajv/lib/vocabularies/errors.ts +18 -0
- package/node_modules/ajv/lib/vocabularies/format/format.ts +120 -0
- package/node_modules/ajv/lib/vocabularies/format/index.ts +6 -0
- package/node_modules/ajv/lib/vocabularies/jtd/discriminator.ts +89 -0
- package/node_modules/ajv/lib/vocabularies/jtd/elements.ts +32 -0
- package/node_modules/ajv/lib/vocabularies/jtd/enum.ts +45 -0
- package/node_modules/ajv/lib/vocabularies/jtd/error.ts +23 -0
- package/node_modules/ajv/lib/vocabularies/jtd/index.ts +37 -0
- package/node_modules/ajv/lib/vocabularies/jtd/metadata.ts +24 -0
- package/node_modules/ajv/lib/vocabularies/jtd/nullable.ts +21 -0
- package/node_modules/ajv/lib/vocabularies/jtd/optionalProperties.ts +15 -0
- package/node_modules/ajv/lib/vocabularies/jtd/properties.ts +184 -0
- package/node_modules/ajv/lib/vocabularies/jtd/ref.ts +76 -0
- package/node_modules/ajv/lib/vocabularies/jtd/type.ts +75 -0
- package/node_modules/ajv/lib/vocabularies/jtd/union.ts +12 -0
- package/node_modules/ajv/lib/vocabularies/jtd/values.ts +58 -0
- package/node_modules/ajv/lib/vocabularies/metadata.ts +17 -0
- package/node_modules/ajv/lib/vocabularies/next.ts +8 -0
- package/node_modules/ajv/lib/vocabularies/unevaluated/index.ts +7 -0
- package/node_modules/ajv/lib/vocabularies/unevaluated/unevaluatedItems.ts +47 -0
- package/node_modules/ajv/lib/vocabularies/unevaluated/unevaluatedProperties.ts +85 -0
- package/node_modules/ajv/lib/vocabularies/validation/const.ts +28 -0
- package/node_modules/ajv/lib/vocabularies/validation/dependentRequired.ts +23 -0
- package/node_modules/ajv/lib/vocabularies/validation/enum.ts +54 -0
- package/node_modules/ajv/lib/vocabularies/validation/index.ts +49 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitContains.ts +16 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitItems.ts +26 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitLength.ts +30 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitNumber.ts +42 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitProperties.ts +26 -0
- package/node_modules/ajv/lib/vocabularies/validation/multipleOf.ts +34 -0
- package/node_modules/ajv/lib/vocabularies/validation/pattern.ts +39 -0
- package/node_modules/ajv/lib/vocabularies/validation/required.ts +98 -0
- package/node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts +79 -0
- package/node_modules/ajv/package.json +126 -0
- package/node_modules/ajv-formats/LICENSE +21 -0
- package/node_modules/ajv-formats/README.md +125 -0
- package/node_modules/ajv-formats/dist/formats.d.ts +9 -0
- package/node_modules/ajv-formats/dist/formats.js +208 -0
- package/node_modules/ajv-formats/dist/formats.js.map +1 -0
- package/node_modules/ajv-formats/dist/index.d.ts +15 -0
- package/node_modules/ajv-formats/dist/index.js +37 -0
- package/node_modules/ajv-formats/dist/index.js.map +1 -0
- package/node_modules/ajv-formats/dist/limit.d.ts +10 -0
- package/node_modules/ajv-formats/dist/limit.js +69 -0
- package/node_modules/ajv-formats/dist/limit.js.map +1 -0
- package/node_modules/ajv-formats/package.json +74 -0
- package/node_modules/ajv-formats/src/formats.ts +269 -0
- package/node_modules/ajv-formats/src/index.ts +62 -0
- package/node_modules/ajv-formats/src/limit.ts +99 -0
- package/node_modules/fast-deep-equal/LICENSE +21 -0
- package/node_modules/fast-deep-equal/README.md +96 -0
- package/node_modules/fast-deep-equal/es6/index.d.ts +2 -0
- package/node_modules/fast-deep-equal/es6/index.js +72 -0
- package/node_modules/fast-deep-equal/es6/react.d.ts +2 -0
- package/node_modules/fast-deep-equal/es6/react.js +79 -0
- package/node_modules/fast-deep-equal/index.d.ts +4 -0
- package/node_modules/fast-deep-equal/index.js +46 -0
- package/node_modules/fast-deep-equal/package.json +61 -0
- package/node_modules/fast-deep-equal/react.d.ts +2 -0
- package/node_modules/fast-deep-equal/react.js +53 -0
- package/node_modules/fast-uri/.gitattributes +2 -0
- package/node_modules/fast-uri/.github/dependabot.yml +13 -0
- package/node_modules/fast-uri/.github/workflows/ci.yml +106 -0
- package/node_modules/fast-uri/.github/workflows/lock-threads.yml +19 -0
- package/node_modules/fast-uri/.github/workflows/package-manager-ci.yml +24 -0
- package/node_modules/fast-uri/LICENSE +30 -0
- package/node_modules/fast-uri/README.md +152 -0
- package/node_modules/fast-uri/benchmark/benchmark.mjs +159 -0
- package/node_modules/fast-uri/benchmark/equal.mjs +51 -0
- package/node_modules/fast-uri/benchmark/non-simple-domain.mjs +22 -0
- package/node_modules/fast-uri/benchmark/package.json +17 -0
- package/node_modules/fast-uri/benchmark/string-array-to-hex-stripped.mjs +24 -0
- package/node_modules/fast-uri/benchmark/ws-is-secure.mjs +65 -0
- package/node_modules/fast-uri/eslint.config.js +6 -0
- package/node_modules/fast-uri/index.js +631 -0
- package/node_modules/fast-uri/lib/schemes.js +272 -0
- package/node_modules/fast-uri/lib/utils.js +747 -0
- package/node_modules/fast-uri/package.json +68 -0
- package/node_modules/fast-uri/test/ajv.test.js +43 -0
- package/node_modules/fast-uri/test/component-safe-serialization.test.js +163 -0
- package/node_modules/fast-uri/test/equal.test.js +145 -0
- package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +503 -0
- package/node_modules/fast-uri/test/fixtures/uri-js-serialize.json +120 -0
- package/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
- package/node_modules/fast-uri/test/ipv6-validation.test.js +124 -0
- package/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
- package/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
- package/node_modules/fast-uri/test/parse.test.js +327 -0
- package/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
- package/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
- package/node_modules/fast-uri/test/resolve.test.js +87 -0
- package/node_modules/fast-uri/test/rfc-3986.test.js +90 -0
- package/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
- package/node_modules/fast-uri/test/security-normalization.test.js +178 -0
- package/node_modules/fast-uri/test/security.test.js +431 -0
- package/node_modules/fast-uri/test/serialize.test.js +151 -0
- package/node_modules/fast-uri/test/uri-js-compatibility.test.js +33 -0
- package/node_modules/fast-uri/test/uri-js.test.js +912 -0
- package/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
- package/node_modules/fast-uri/test/util.test.js +38 -0
- package/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
- package/node_modules/fast-uri/tsconfig.json +9 -0
- package/node_modules/fast-uri/types/index.d.ts +60 -0
- package/node_modules/fast-uri/types/index.test-d.ts +17 -0
- package/node_modules/json-schema-traverse/.eslintrc.yml +27 -0
- package/node_modules/json-schema-traverse/.github/FUNDING.yml +2 -0
- package/node_modules/json-schema-traverse/.github/workflows/build.yml +28 -0
- package/node_modules/json-schema-traverse/.github/workflows/publish.yml +27 -0
- package/node_modules/json-schema-traverse/LICENSE +21 -0
- package/node_modules/json-schema-traverse/README.md +95 -0
- package/node_modules/json-schema-traverse/index.d.ts +40 -0
- package/node_modules/json-schema-traverse/index.js +93 -0
- package/node_modules/json-schema-traverse/package.json +43 -0
- package/node_modules/json-schema-traverse/spec/.eslintrc.yml +6 -0
- package/node_modules/json-schema-traverse/spec/fixtures/schema.js +125 -0
- package/node_modules/json-schema-traverse/spec/index.spec.js +171 -0
- package/node_modules/require-from-string/index.js +34 -0
- package/node_modules/require-from-string/license +21 -0
- package/node_modules/require-from-string/package.json +28 -0
- package/node_modules/require-from-string/readme.md +56 -0
- package/package.json +49 -2
- package/packages/cli/dist/agent-spans.d.ts +238 -0
- package/packages/cli/dist/agent-spans.d.ts.map +1 -0
- package/packages/cli/dist/agent-spans.js +677 -0
- package/packages/cli/dist/agent-spans.js.map +1 -0
- package/packages/cli/dist/api.d.ts +127 -0
- package/packages/cli/dist/api.d.ts.map +1 -0
- package/packages/cli/dist/api.js +159 -0
- package/packages/cli/dist/api.js.map +1 -0
- package/packages/cli/dist/archive.d.ts +24 -0
- package/packages/cli/dist/archive.d.ts.map +1 -0
- package/packages/cli/dist/archive.js +230 -0
- package/packages/cli/dist/archive.js.map +1 -0
- package/packages/cli/dist/args.d.ts +57 -0
- package/packages/cli/dist/args.d.ts.map +1 -0
- package/packages/cli/dist/args.js +180 -0
- package/packages/cli/dist/args.js.map +1 -0
- package/packages/cli/dist/attach.d.ts +48 -0
- package/packages/cli/dist/attach.d.ts.map +1 -0
- package/packages/cli/dist/attach.js +153 -0
- package/packages/cli/dist/attach.js.map +1 -0
- package/packages/cli/dist/capture-limits.d.ts +7 -0
- package/packages/cli/dist/capture-limits.d.ts.map +1 -0
- package/packages/cli/dist/capture-limits.js +13 -0
- package/packages/cli/dist/capture-limits.js.map +1 -0
- package/packages/cli/dist/cli.d.ts +3 -0
- package/packages/cli/dist/cli.d.ts.map +1 -0
- package/packages/cli/dist/cli.js +4 -0
- package/packages/cli/dist/cli.js.map +1 -0
- package/packages/cli/dist/commands/attach.d.ts +49 -0
- package/packages/cli/dist/commands/attach.d.ts.map +1 -0
- package/packages/cli/dist/commands/attach.js +350 -0
- package/packages/cli/dist/commands/attach.js.map +1 -0
- package/packages/cli/dist/commands/compare.d.ts +27 -0
- package/packages/cli/dist/commands/compare.d.ts.map +1 -0
- package/packages/cli/dist/commands/compare.js +187 -0
- package/packages/cli/dist/commands/compare.js.map +1 -0
- package/packages/cli/dist/commands/doctor.d.ts +24 -0
- package/packages/cli/dist/commands/doctor.d.ts.map +1 -0
- package/packages/cli/dist/commands/doctor.js +402 -0
- package/packages/cli/dist/commands/doctor.js.map +1 -0
- package/packages/cli/dist/commands/gc.d.ts +24 -0
- package/packages/cli/dist/commands/gc.d.ts.map +1 -0
- package/packages/cli/dist/commands/gc.js +326 -0
- package/packages/cli/dist/commands/gc.js.map +1 -0
- package/packages/cli/dist/commands/inspect.d.ts +45 -0
- package/packages/cli/dist/commands/inspect.d.ts.map +1 -0
- package/packages/cli/dist/commands/inspect.js +375 -0
- package/packages/cli/dist/commands/inspect.js.map +1 -0
- package/packages/cli/dist/commands/quickstart.d.ts +48 -0
- package/packages/cli/dist/commands/quickstart.d.ts.map +1 -0
- package/packages/cli/dist/commands/quickstart.js +413 -0
- package/packages/cli/dist/commands/quickstart.js.map +1 -0
- package/packages/cli/dist/commands/record.d.ts +31 -0
- package/packages/cli/dist/commands/record.d.ts.map +1 -0
- package/packages/cli/dist/commands/record.js +958 -0
- package/packages/cli/dist/commands/record.js.map +1 -0
- package/packages/cli/dist/commands/replay.d.ts +184 -0
- package/packages/cli/dist/commands/replay.d.ts.map +1 -0
- package/packages/cli/dist/commands/replay.js +2014 -0
- package/packages/cli/dist/commands/replay.js.map +1 -0
- package/packages/cli/dist/commands/scrub.d.ts +34 -0
- package/packages/cli/dist/commands/scrub.d.ts.map +1 -0
- package/packages/cli/dist/commands/scrub.js +765 -0
- package/packages/cli/dist/commands/scrub.js.map +1 -0
- package/packages/cli/dist/commands/setup.d.ts +23 -0
- package/packages/cli/dist/commands/setup.d.ts.map +1 -0
- package/packages/cli/dist/commands/setup.js +239 -0
- package/packages/cli/dist/commands/setup.js.map +1 -0
- package/packages/cli/dist/commands/sync.d.ts +236 -0
- package/packages/cli/dist/commands/sync.d.ts.map +1 -0
- package/packages/cli/dist/commands/sync.js +1270 -0
- package/packages/cli/dist/commands/sync.js.map +1 -0
- package/packages/cli/dist/config.d.ts +69 -0
- package/packages/cli/dist/config.d.ts.map +1 -0
- package/packages/cli/dist/config.js +144 -0
- package/packages/cli/dist/config.js.map +1 -0
- package/packages/cli/dist/exchange-events.d.ts +80 -0
- package/packages/cli/dist/exchange-events.d.ts.map +1 -0
- package/packages/cli/dist/exchange-events.js +296 -0
- package/packages/cli/dist/exchange-events.js.map +1 -0
- package/packages/cli/dist/flags.d.ts +41 -0
- package/packages/cli/dist/flags.d.ts.map +1 -0
- package/packages/cli/dist/flags.js +292 -0
- package/packages/cli/dist/flags.js.map +1 -0
- package/packages/cli/dist/fs-events.d.ts +19 -0
- package/packages/cli/dist/fs-events.d.ts.map +1 -0
- package/packages/cli/dist/fs-events.js +89 -0
- package/packages/cli/dist/fs-events.js.map +1 -0
- package/packages/cli/dist/index.d.ts +18 -0
- package/packages/cli/dist/index.d.ts.map +1 -0
- package/packages/cli/dist/index.js +18 -0
- package/packages/cli/dist/index.js.map +1 -0
- package/packages/cli/dist/main.d.ts +2 -0
- package/packages/cli/dist/main.d.ts.map +1 -0
- package/packages/cli/dist/main.js +404 -0
- package/packages/cli/dist/main.js.map +1 -0
- package/packages/cli/dist/mcp-server.d.ts +44 -0
- package/packages/cli/dist/mcp-server.d.ts.map +1 -0
- package/packages/cli/dist/mcp-server.js +250 -0
- package/packages/cli/dist/mcp-server.js.map +1 -0
- package/packages/cli/dist/mcp.d.ts +126 -0
- package/packages/cli/dist/mcp.d.ts.map +1 -0
- package/packages/cli/dist/mcp.js +290 -0
- package/packages/cli/dist/mcp.js.map +1 -0
- package/packages/cli/dist/out.d.ts +107 -0
- package/packages/cli/dist/out.d.ts.map +1 -0
- package/packages/cli/dist/out.js +280 -0
- package/packages/cli/dist/out.js.map +1 -0
- package/packages/cli/dist/rasterize.d.ts +62 -0
- package/packages/cli/dist/rasterize.d.ts.map +1 -0
- package/packages/cli/dist/rasterize.js +154 -0
- package/packages/cli/dist/rasterize.js.map +1 -0
- package/packages/cli/dist/serial.d.ts +19 -0
- package/packages/cli/dist/serial.d.ts.map +1 -0
- package/packages/cli/dist/serial.js +34 -0
- package/packages/cli/dist/serial.js.map +1 -0
- package/packages/cli/dist/share-card.d.ts +73 -0
- package/packages/cli/dist/share-card.d.ts.map +1 -0
- package/packages/cli/dist/share-card.js +413 -0
- package/packages/cli/dist/share-card.js.map +1 -0
- package/packages/cli/dist/snapshot.d.ts +39 -0
- package/packages/cli/dist/snapshot.d.ts.map +1 -0
- package/packages/cli/dist/snapshot.js +43 -0
- package/packages/cli/dist/snapshot.js.map +1 -0
- package/packages/cli/dist/tls-capture.d.ts +135 -0
- package/packages/cli/dist/tls-capture.d.ts.map +1 -0
- package/packages/cli/dist/tls-capture.js +586 -0
- package/packages/cli/dist/tls-capture.js.map +1 -0
- package/packages/cli/dist/upstream.d.ts +29 -0
- package/packages/cli/dist/upstream.d.ts.map +1 -0
- package/packages/cli/dist/upstream.js +41 -0
- package/packages/cli/dist/upstream.js.map +1 -0
- package/packages/cli/dist/version.d.ts +2 -0
- package/packages/cli/dist/version.d.ts.map +1 -0
- package/packages/cli/dist/version.js +18 -0
- package/packages/cli/dist/version.js.map +1 -0
- package/packages/cli/package.json +11 -11
- package/.dockerignore +0 -11
- package/.gitattributes +0 -19
- package/.github/workflows/ci.yml +0 -146
- package/.grok-plugin/plugin.json +0 -12
- package/.mcp.json +0 -8
- package/.prettierignore +0 -4
- package/.prettierrc.json +0 -1
- package/CONTRIBUTING.md +0 -106
- package/Dockerfile +0 -30
- package/MAINTAINERS.md +0 -24
- package/RELEASING.md +0 -183
- package/SECURITY.md +0 -149
- package/capture/CAPTURE-RUNBOOK.md +0 -271
- package/capture/CURSOR-HTTP2.md +0 -226
- package/capture/README.md +0 -349
- package/capture/capture-run.gif +0 -0
- package/capture/capture.mjs +0 -1883
- package/capture/fable-capture.gif +0 -0
- package/capture/fable-capture.mp4 +0 -0
- package/capture/muse-shim.mjs +0 -114
- package/capture/render-run.mjs +0 -125
- package/capture/render.mjs +0 -228
- package/companion-kiokuko-dsh.patch +0 -7806
- package/docs/agenticreplay-acceptance.md +0 -135
- package/docs/architecture.md +0 -160
- package/docs/chain-card.png +0 -0
- package/docs/compare-card.png +0 -0
- package/docs/demo-cli.gif +0 -0
- package/docs/demo-viewer.gif +0 -0
- package/docs/fidelity.md +0 -16
- package/docs/good-first-issues.md +0 -78
- package/docs/graph-card.png +0 -0
- package/docs/how-to/compare-models-on-the-same-failure.md +0 -58
- package/docs/how-to/debug-a-failing-agent-run.md +0 -127
- package/docs/how-to/why-did-my-agent-delete-my-file.md +0 -92
- package/docs/i18n/README.ar.md +0 -597
- package/docs/i18n/README.de.md +0 -648
- package/docs/i18n/README.es.md +0 -642
- package/docs/i18n/README.fr.md +0 -649
- package/docs/i18n/README.ja.md +0 -608
- package/docs/i18n/README.ko.md +0 -598
- package/docs/i18n/README.zh-CN.md +0 -574
- package/docs/integrations.md +0 -628
- package/docs/launch-path.md +0 -215
- package/docs/media/README.md +0 -101
- package/docs/media/sync-transcript.txt +0 -18
- package/docs/media/transcript.txt +0 -29
- package/docs/opencode-capture.md +0 -137
- package/docs/plugins.md +0 -250
- package/docs/proposals/action-graph-and-reasoning.md +0 -354
- package/docs/sync-card.png +0 -0
- package/docs/validation.md +0 -52
- package/docs/viewer-timeline.png +0 -0
- package/examples/traces/README.md +0 -50
- package/examples/traces/run_9f2c14a03b71/blobs/1b/1b694f32b8c582ace6b35ad64050e532fb3ee3ecc1a2763a82cf42ad0f2a3dd0 +0 -10
- package/examples/traces/run_9f2c14a03b71/blobs/51/517b5b8ec6c3b13121dbaec61784e2a024247c7c4efd9ba068b582ee57bd2764 +0 -4
- package/examples/traces/run_9f2c14a03b71/blobs/5b/5bba1bd069013d86363f69c00c1ae77c84c4e113aeeb7431c8141af4fed76860 +0 -7
- package/examples/traces/run_9f2c14a03b71/blobs/84/84247e7b385fd5f99a6728a509838e52ef963af92f44ef6eccbed6910de1438d +0 -10
- package/examples/traces/run_9f2c14a03b71/blobs/ac/ac9b4be9bdf7fe63c7b5135e2d14c4c0745a48771e733804869790590455f8e8 +0 -7
- package/examples/traces/run_9f2c14a03b71/events.jsonl +0 -31
- package/examples/traces/run_9f2c14a03b71/manifest.json +0 -46
- package/examples/traces/run_9f2c14a03b71/redactions.json +0 -17
- package/llms.txt +0 -26
- package/packages/adapters/fixtures/harness/claude-code.json +0 -12
- package/packages/adapters/fixtures/harness/codex.json +0 -10
- package/packages/adapters/fixtures/harness/cursor.json +0 -10
- package/packages/adapters/fixtures/harness/exec.json +0 -10
- package/packages/adapters/fixtures/harness/generic-openai.json +0 -14
- package/packages/adapters/fixtures/harness/goose.json +0 -14
- package/packages/adapters/fixtures/harness/grok.json +0 -18
- package/packages/adapters/fixtures/harness/hermes.json +0 -10
- package/packages/adapters/fixtures/harness/indexrag.json +0 -21
- package/packages/adapters/fixtures/harness/kilo.json +0 -10
- package/packages/adapters/fixtures/harness/mcode.json +0 -10
- package/packages/adapters/fixtures/harness/mimo.json +0 -10
- package/packages/adapters/fixtures/harness/node.json +0 -22
- package/packages/adapters/fixtures/harness/openclaw.json +0 -21
- package/packages/adapters/fixtures/harness/opencode.json +0 -20
- package/packages/adapters/fixtures/harness/qwen.json +0 -20
- package/packages/adapters/fixtures/harness/zcode.json +0 -10
- package/packages/adapters/package.json +0 -29
- package/packages/adapters/src/claude-code.ts +0 -109
- package/packages/adapters/src/codex.ts +0 -135
- package/packages/adapters/src/contract.ts +0 -531
- package/packages/adapters/src/cursor.ts +0 -76
- package/packages/adapters/src/detect.ts +0 -132
- package/packages/adapters/src/env.ts +0 -118
- package/packages/adapters/src/exec.ts +0 -59
- package/packages/adapters/src/generic-openai.ts +0 -36
- package/packages/adapters/src/goose.ts +0 -87
- package/packages/adapters/src/grok.ts +0 -60
- package/packages/adapters/src/hermes.ts +0 -92
- package/packages/adapters/src/index.ts +0 -24
- package/packages/adapters/src/indexrag.ts +0 -254
- package/packages/adapters/src/kilo.ts +0 -39
- package/packages/adapters/src/mcode.ts +0 -392
- package/packages/adapters/src/mcp-config.ts +0 -84
- package/packages/adapters/src/mimo.ts +0 -44
- package/packages/adapters/src/node.ts +0 -71
- package/packages/adapters/src/openclaw.ts +0 -50
- package/packages/adapters/src/opencode-api-bases.ts +0 -200
- package/packages/adapters/src/opencode-capture.ts +0 -164
- package/packages/adapters/src/opencode-catalog.ts +0 -44
- package/packages/adapters/src/opencode-config.ts +0 -209
- package/packages/adapters/src/opencode.ts +0 -257
- package/packages/adapters/src/qwen.ts +0 -113
- package/packages/adapters/src/registry.ts +0 -121
- package/packages/adapters/src/scaffold.ts +0 -173
- package/packages/adapters/src/session.ts +0 -138
- package/packages/adapters/src/zcode.ts +0 -440
- package/packages/adapters/test/adapters.test.ts +0 -666
- package/packages/adapters/test/contract.test.ts +0 -601
- package/packages/adapters/test/exec-adapter.test.ts +0 -114
- package/packages/adapters/test/harness-versions.test.ts +0 -220
- package/packages/adapters/test/indexrag.test.ts +0 -192
- package/packages/adapters/test/mcode.test.ts +0 -678
- package/packages/adapters/test/mcp-config.test.ts +0 -118
- package/packages/adapters/test/named-agents.test.ts +0 -262
- package/packages/adapters/test/node-adapter.test.ts +0 -98
- package/packages/adapters/test/opencode-capture.test.ts +0 -137
- package/packages/adapters/test/opencode-catalog.test.ts +0 -178
- package/packages/adapters/test/opencode-config.test.ts +0 -63
- package/packages/adapters/test/scaffold.test.ts +0 -156
- package/packages/adapters/test/session.test.ts +0 -368
- package/packages/adapters/test/zcode.test.ts +0 -497
- package/packages/adapters/tsconfig.json +0 -16
- package/packages/cli/README.md +0 -92
- package/packages/cli/src/agent-spans.ts +0 -752
- package/packages/cli/src/api.ts +0 -275
- package/packages/cli/src/archive.ts +0 -264
- package/packages/cli/src/args.ts +0 -207
- package/packages/cli/src/attach.ts +0 -178
- package/packages/cli/src/capture-limits.ts +0 -21
- package/packages/cli/src/cli.ts +0 -4
- package/packages/cli/src/commands/attach.ts +0 -441
- package/packages/cli/src/commands/compare.ts +0 -218
- package/packages/cli/src/commands/doctor.ts +0 -447
- package/packages/cli/src/commands/gc.ts +0 -372
- package/packages/cli/src/commands/inspect.ts +0 -482
- package/packages/cli/src/commands/quickstart.ts +0 -479
- package/packages/cli/src/commands/record.ts +0 -1069
- package/packages/cli/src/commands/replay.ts +0 -2289
- package/packages/cli/src/commands/scrub.ts +0 -865
- package/packages/cli/src/commands/setup.ts +0 -294
- package/packages/cli/src/commands/sync.ts +0 -1429
- package/packages/cli/src/config.ts +0 -182
- package/packages/cli/src/exchange-events.ts +0 -369
- package/packages/cli/src/flags.ts +0 -316
- package/packages/cli/src/fs-events.ts +0 -103
- package/packages/cli/src/index.ts +0 -17
- package/packages/cli/src/main.ts +0 -419
- package/packages/cli/src/mcp-server.ts +0 -314
- package/packages/cli/src/mcp.ts +0 -350
- package/packages/cli/src/out.ts +0 -350
- package/packages/cli/src/rasterize.ts +0 -205
- package/packages/cli/src/serial.ts +0 -38
- package/packages/cli/src/share-card.ts +0 -514
- package/packages/cli/src/snapshot.ts +0 -80
- package/packages/cli/src/tls-capture.ts +0 -688
- package/packages/cli/src/upstream.ts +0 -75
- package/packages/cli/src/version.ts +0 -21
- package/packages/cli/test/agent-spans-drain.test.ts +0 -157
- package/packages/cli/test/agent-spans-race.test.ts +0 -97
- package/packages/cli/test/agent-spans.test.ts +0 -1032
- package/packages/cli/test/api.test.ts +0 -178
- package/packages/cli/test/archive.test.ts +0 -143
- package/packages/cli/test/args.test.ts +0 -164
- package/packages/cli/test/attach-command.test.ts +0 -356
- package/packages/cli/test/attach.test.ts +0 -198
- package/packages/cli/test/capture-oracle.test.ts +0 -160
- package/packages/cli/test/capture-warning.test.ts +0 -215
- package/packages/cli/test/chain-card.test.ts +0 -190
- package/packages/cli/test/claude-capture.test.ts +0 -242
- package/packages/cli/test/compare.test.ts +0 -329
- package/packages/cli/test/config-permission-failure.test.ts +0 -41
- package/packages/cli/test/config.test.ts +0 -239
- package/packages/cli/test/declared-inside-replay.test.ts +0 -170
- package/packages/cli/test/doctor.test.ts +0 -276
- package/packages/cli/test/e2e.test.ts +0 -1230
- package/packages/cli/test/exchange-events.test.ts +0 -345
- package/packages/cli/test/failure-lines.test.ts +0 -47
- package/packages/cli/test/fixtures/deaf-agent.mjs +0 -11
- package/packages/cli/test/fixtures/embedding-agent.mjs +0 -32
- package/packages/cli/test/fixtures/fake-agent.mjs +0 -114
- package/packages/cli/test/fixtures/fake-model.mjs +0 -105
- package/packages/cli/test/fixtures/gateway-agent.mjs +0 -20
- package/packages/cli/test/fixtures/ide-parent.mjs +0 -34
- package/packages/cli/test/fixtures/mcp-agent.mjs +0 -64
- package/packages/cli/test/fixtures/proxy-call.mjs +0 -105
- package/packages/cli/test/fixtures/responses-agent.mjs +0 -82
- package/packages/cli/test/fixtures/responses-model.mjs +0 -94
- package/packages/cli/test/fixtures/tls-agent.mjs +0 -35
- package/packages/cli/test/fixtures/vercel-agent.mjs +0 -81
- package/packages/cli/test/flag-values.test.ts +0 -162
- package/packages/cli/test/flags.test.ts +0 -313
- package/packages/cli/test/fork-provenance.test.ts +0 -224
- package/packages/cli/test/fork-tls.test.ts +0 -190
- package/packages/cli/test/gateway-e2e.test.ts +0 -110
- package/packages/cli/test/gc.test.ts +0 -531
- package/packages/cli/test/generated-esm.test.ts +0 -87
- package/packages/cli/test/graph-card.test.ts +0 -249
- package/packages/cli/test/graph-command.test.ts +0 -258
- package/packages/cli/test/grok-bot-e2e.test.ts +0 -349
- package/packages/cli/test/inspect.test.ts +0 -412
- package/packages/cli/test/intercept-failures.test.ts +0 -74
- package/packages/cli/test/json-only.test.ts +0 -88
- package/packages/cli/test/json-output.test.ts +0 -221
- package/packages/cli/test/list-gateway.test.ts +0 -770
- package/packages/cli/test/mcp-capture.test.ts +0 -498
- package/packages/cli/test/mcp-server.test.ts +0 -315
- package/packages/cli/test/nested-repo-replay.test.ts +0 -972
- package/packages/cli/test/no-credential-in-attrs.test.ts +0 -255
- package/packages/cli/test/opencode-capture.test.ts +0 -422
- package/packages/cli/test/opencode-catalog-capture.test.ts +0 -175
- package/packages/cli/test/out.test.ts +0 -491
- package/packages/cli/test/pinned-fetch.test.ts +0 -154
- package/packages/cli/test/prompt-scrub.test.ts +0 -132
- package/packages/cli/test/publish-order.test.ts +0 -87
- package/packages/cli/test/quickstart.test.ts +0 -579
- package/packages/cli/test/rasterize.test.ts +0 -86
- package/packages/cli/test/record-detection.test.ts +0 -156
- package/packages/cli/test/record-teardown.test.ts +0 -203
- package/packages/cli/test/replay-putback.test.ts +0 -242
- package/packages/cli/test/replay-spill.test.ts +0 -116
- package/packages/cli/test/replay-teardown.test.ts +0 -143
- package/packages/cli/test/replay-trace.test.ts +0 -199
- package/packages/cli/test/replay-transport.test.ts +0 -113
- package/packages/cli/test/reset-roots.test.ts +0 -67
- package/packages/cli/test/responses-e2e.test.ts +0 -119
- package/packages/cli/test/retrieval-context.test.ts +0 -168
- package/packages/cli/test/review-regressions.test.ts +0 -168
- package/packages/cli/test/route-decision.test.ts +0 -134
- package/packages/cli/test/run-dir-sidecars.test.ts +0 -779
- package/packages/cli/test/scrub.test.ts +0 -936
- package/packages/cli/test/serial.test.ts +0 -65
- package/packages/cli/test/setup.test.ts +0 -535
- package/packages/cli/test/share-card.test.ts +0 -135
- package/packages/cli/test/shell-capture.test.ts +0 -184
- package/packages/cli/test/shell-frames-drain.test.ts +0 -91
- package/packages/cli/test/snapshot-retry.test.ts +0 -54
- package/packages/cli/test/support-claims.test.ts +0 -127
- package/packages/cli/test/sync-credentials.test.ts +0 -177
- package/packages/cli/test/sync.test.ts +0 -1709
- package/packages/cli/test/tls-intercept.test.ts +0 -548
- package/packages/cli/test/upstream-visible.test.ts +0 -314
- package/packages/cli/test/vercel-sdk-e2e.test.ts +0 -105
- package/packages/cli/test/version.test.ts +0 -20
- package/packages/cli/tsconfig.json +0 -40
- package/packages/core/package.json +0 -26
- package/packages/core/src/blobs.ts +0 -109
- package/packages/core/src/fetch.ts +0 -48
- package/packages/core/src/graph.ts +0 -450
- package/packages/core/src/index.ts +0 -8
- package/packages/core/src/paths.ts +0 -180
- package/packages/core/src/private-files.ts +0 -394
- package/packages/core/src/reader.ts +0 -175
- package/packages/core/src/redaction.ts +0 -826
- package/packages/core/src/writer.ts +0 -467
- package/packages/core/test/blobs.test.ts +0 -170
- package/packages/core/test/capture-contract.test.ts +0 -179
- package/packages/core/test/data-uri-redaction.test.ts +0 -758
- package/packages/core/test/graph.test.ts +0 -520
- package/packages/core/test/integration.test.ts +0 -148
- package/packages/core/test/paths-permission-failure.test.ts +0 -53
- package/packages/core/test/paths.test.ts +0 -339
- package/packages/core/test/private-files-owner.test.ts +0 -77
- package/packages/core/test/private-files-scratch-race.test.ts +0 -62
- package/packages/core/test/private-files.test.ts +0 -251
- package/packages/core/test/reader.test.ts +0 -271
- package/packages/core/test/redaction.test.ts +0 -525
- package/packages/core/test/writer.test.ts +0 -531
- package/packages/core/tsconfig.json +0 -6
- package/packages/fs-capture/package.json +0 -25
- package/packages/fs-capture/src/capture.ts +0 -193
- package/packages/fs-capture/src/git.ts +0 -131
- package/packages/fs-capture/src/index.ts +0 -3
- package/packages/fs-capture/src/shadow.ts +0 -751
- package/packages/fs-capture/test/capture.test.ts +0 -241
- package/packages/fs-capture/test/git.test.ts +0 -118
- package/packages/fs-capture/test/helpers.ts +0 -28
- package/packages/fs-capture/test/shadow.test.ts +0 -1058
- package/packages/fs-capture/tsconfig.json +0 -6
- package/packages/mcp-shim/package.json +0 -26
- package/packages/mcp-shim/src/cli.ts +0 -372
- package/packages/mcp-shim/src/framing.ts +0 -106
- package/packages/mcp-shim/src/index.ts +0 -4
- package/packages/mcp-shim/src/mock.ts +0 -194
- package/packages/mcp-shim/src/shim.ts +0 -126
- package/packages/mcp-shim/test/cli.test.ts +0 -489
- package/packages/mcp-shim/test/framing.test.ts +0 -143
- package/packages/mcp-shim/test/mock.test.ts +0 -200
- package/packages/mcp-shim/test/shim.test.ts +0 -287
- package/packages/mcp-shim/tsconfig.json +0 -5
- package/packages/node-instrument/package.json +0 -23
- package/packages/node-instrument/src/capture.ts +0 -505
- package/packages/node-instrument/src/index.ts +0 -3
- package/packages/node-instrument/src/install.ts +0 -186
- package/packages/node-instrument/src/rewrite.ts +0 -66
- package/packages/node-instrument/test/capture.test.ts +0 -423
- package/packages/node-instrument/test/install.test.ts +0 -427
- package/packages/node-instrument/test/rewrite.test.ts +0 -85
- package/packages/node-instrument/tsconfig.json +0 -9
- package/packages/plugin-api/package.json +0 -22
- package/packages/plugin-api/src/canonical.ts +0 -73
- package/packages/plugin-api/src/index.ts +0 -2
- package/packages/plugin-api/src/plugins.ts +0 -265
- package/packages/plugin-api/test/canonical.test.ts +0 -58
- package/packages/plugin-api/tsconfig.json +0 -5
- package/packages/providers/package.json +0 -26
- package/packages/providers/src/index.ts +0 -34
- package/packages/providers/src/pricing.ts +0 -140
- package/packages/providers/src/translate/anthropic.ts +0 -620
- package/packages/providers/src/translate/openai-responses.ts +0 -638
- package/packages/providers/src/translate/openai.ts +0 -630
- package/packages/providers/src/translate/sse.ts +0 -99
- package/packages/providers/src/translate/util.ts +0 -111
- package/packages/providers/test/anthropic-translate.test.ts +0 -687
- package/packages/providers/test/openai-responses-translate.test.ts +0 -377
- package/packages/providers/test/openai-translate.test.ts +0 -884
- package/packages/providers/test/pricing.test.ts +0 -171
- package/packages/providers/tsconfig.json +0 -6
- package/packages/proxy/package.json +0 -28
- package/packages/proxy/src/ca.ts +0 -376
- package/packages/proxy/src/der.ts +0 -152
- package/packages/proxy/src/dialects.ts +0 -413
- package/packages/proxy/src/forward.ts +0 -64
- package/packages/proxy/src/index.ts +0 -8
- package/packages/proxy/src/intercept.ts +0 -1554
- package/packages/proxy/src/matching.ts +0 -1056
- package/packages/proxy/src/retrieval.ts +0 -290
- package/packages/proxy/src/server.ts +0 -2875
- package/packages/proxy/src/tls-hosts.ts +0 -205
- package/packages/proxy/test/beta-headers.test.ts +0 -39
- package/packages/proxy/test/ca.test.ts +0 -146
- package/packages/proxy/test/forward.test.ts +0 -306
- package/packages/proxy/test/hop-by-hop.test.ts +0 -118
- package/packages/proxy/test/image-matching.test.ts +0 -129
- package/packages/proxy/test/indexing-concurrency.test.ts +0 -224
- package/packages/proxy/test/lookahead.test.ts +0 -160
- package/packages/proxy/test/malformed-body.test.ts +0 -73
- package/packages/proxy/test/matching.test.ts +0 -822
- package/packages/proxy/test/passthrough.test.ts +0 -599
- package/packages/proxy/test/recorded-upstream.test.ts +0 -253
- package/packages/proxy/test/responses-dialect.test.ts +0 -239
- package/packages/proxy/test/retrieval.test.ts +0 -589
- package/packages/proxy/test/server.test.ts +0 -1281
- package/packages/proxy/test/tls-hosts.test.ts +0 -190
- package/packages/proxy/test/tls-intercept.test.ts +0 -1769
- package/packages/proxy/tsconfig.json +0 -22
- package/packages/schema/package.json +0 -28
- package/packages/schema/src/constants.ts +0 -73
- package/packages/schema/src/index.ts +0 -3
- package/packages/schema/src/types.ts +0 -103
- package/packages/schema/src/validate.ts +0 -60
- package/packages/schema/test/schema-parity.test.ts +0 -116
- package/packages/schema/tsconfig.json +0 -5
- package/packages/shell-shim/package.json +0 -26
- package/packages/shell-shim/src/index.ts +0 -3
- package/packages/shell-shim/src/install.ts +0 -406
- package/packages/shell-shim/src/resolve.ts +0 -98
- package/packages/shell-shim/src/runner-bin.ts +0 -4
- package/packages/shell-shim/src/runner.ts +0 -149
- package/packages/shell-shim/test/resolve.test.ts +0 -125
- package/packages/shell-shim/test/shim.test.ts +0 -548
- package/packages/shell-shim/test/transport-race.test.ts +0 -109
- package/packages/shell-shim/tsconfig.json +0 -13
- package/packages/viewer/package.json +0 -25
- package/packages/viewer/src/bundle.ts +0 -36
- package/packages/viewer/src/client/main.ts +0 -248
- package/packages/viewer/src/credit.ts +0 -24
- package/packages/viewer/src/css.ts +0 -409
- package/packages/viewer/src/export.ts +0 -38
- package/packages/viewer/src/html.ts +0 -356
- package/packages/viewer/src/index.ts +0 -16
- package/packages/viewer/src/render.ts +0 -791
- package/packages/viewer/src/serve.ts +0 -150
- package/packages/viewer/src/trace-dir.ts +0 -140
- package/packages/viewer/test/bundle.test.ts +0 -47
- package/packages/viewer/test/client.test.ts +0 -378
- package/packages/viewer/test/export.test.ts +0 -131
- package/packages/viewer/test/fixtures.ts +0 -69
- package/packages/viewer/test/html.test.ts +0 -453
- package/packages/viewer/test/playback.test.ts +0 -54
- package/packages/viewer/test/render.test.ts +0 -714
- package/packages/viewer/test/serve.test.ts +0 -125
- package/packages/viewer/tsconfig.json +0 -6
- package/prompt/AIDER/deepseek-v4-1-flash-system-prompt.md +0 -29
- package/prompt/CLAUDECODE/claude-fable-5-1-print-system-prompt.md +0 -127
- package/prompt/CLAUDECODE/claude-fable-5-1-system-prompt.md +0 -169
- package/prompt/CLAUDECODE/claude-opus-4-8-system-prompt.md +0 -131
- package/prompt/CLAUDECODE/claude-opus-5-system-prompt.md +0 -149
- package/prompt/CLINE/openai-gpt-4o-mini-system-prompt.md +0 -37
- package/prompt/CODEX/gpt-5-6-luna-system-prompt.md +0 -183
- package/prompt/CODEX/gpt-5-6-sol-system-prompt.md +0 -218
- package/prompt/CODEX/gpt-6-1-sol-system-prompt.md +0 -242
- package/prompt/CODEX/gpt-6-astra-system-prompt.md +0 -170
- package/prompt/CODEX/gpt-6-luna-system-prompt.md +0 -223
- package/prompt/CODEX/gpt-6-sol-system-prompt.md +0 -226
- package/prompt/CRUSH/deepseek-v4-1-flash-system-prompt.md +0 -472
- package/prompt/CURSOR/grok-4-5-high-system-prompt.md +0 -40
- package/prompt/DSH/deepseek-flash-system-prompt.md +0 -31
- package/prompt/GEMINICLI/gemini-3-5-flash-system-prompt.md +0 -168
- package/prompt/GOOSE/deepseek-v4-1-flash-system-prompt.md +0 -180
- package/prompt/HACKERAI/openai-gpt-4o-mini-system-prompt.md +0 -70
- package/prompt/HERMES/nemotron-3-5-lightning-free-system-prompt.md +0 -111
- package/prompt/KILOCODE/kilo-auto-free-system-prompt.md +0 -129
- package/prompt/MCODE/deepseek-deepseek-v4-flash-free-coding-system-prompt.md +0 -128
- package/prompt/MCODE/deepseek-deepseek-v4-flash-free-tui-system-prompt.md +0 -119
- package/prompt/MCODE/deepseek-deepseek-v4-flash-free-work-system-prompt.md +0 -140
- package/prompt/MIMOCODE/mimo-v2-5-pro-system-prompt.md +0 -411
- package/prompt/MIMOCODE/mimo-v2-5-system-prompt.md +0 -411
- package/prompt/MUSECODE/muse-spark-1-3-system-prompt.md +0 -78
- package/prompt/OPENCLAW/gpt-5-6-sol-system-prompt.md +0 -333
- package/prompt/OPENCODE/big-pickle-system-prompt.md +0 -114
- package/prompt/OPENCODE/gpt-5-6-sol-system-prompt.md +0 -126
- package/prompt/OPENCODE/ling-3-0-flash-fin-free-system-prompt.md +0 -114
- package/prompt/OPENCODE/mimo-v2-5-free-system-prompt.md +0 -114
- package/prompt/OPENCODE/muse-spark-1-2-contributor-free-system-prompt.md +0 -84
- package/prompt/OPENCODE/nemotron-3-5-lightning-free-system-prompt.md +0 -114
- package/prompt/OPENCODE/nemotron-3-ultra-free-system-prompt.md +0 -114
- package/prompt/PI/openai-gpt-4o-mini-system-prompt.md +0 -31
- package/prompt/QWENCODE/gpt-5-6-sol-system-prompt.md +0 -290
- package/prompt/ZCODE/glm-4-6-system-prompt.md +0 -91
- package/python/README.md +0 -132
- package/python/agenticreplay_trace/__init__.py +0 -58
- package/python/agenticreplay_trace/graph.py +0 -137
- package/python/agenticreplay_trace/models.py +0 -491
- package/python/agenticreplay_trace/py.typed +0 -0
- package/python/agenticreplay_trace/reader.py +0 -295
- package/python/conftest.py +0 -12
- package/python/examples/analyze.py +0 -114
- package/python/pyproject.toml +0 -45
- package/python/tests/conftest.py +0 -102
- package/python/tests/test_capture_contract.py +0 -24
- package/python/tests/test_conformance.py +0 -235
- package/python/tests/test_examples.py +0 -60
- package/python/tests/test_graph.py +0 -247
- package/python/tests/test_models.py +0 -342
- package/python/tests/test_reader.py +0 -423
- package/python-langgraph/README.md +0 -159
- package/python-langgraph/agenticreplay_langgraph/__init__.py +0 -21
- package/python-langgraph/agenticreplay_langgraph/handler.py +0 -317
- package/python-langgraph/agenticreplay_langgraph/hook.py +0 -168
- package/python-langgraph/pyproject.toml +0 -35
- package/python-langgraph/tests/test_handler.py +0 -370
- package/python-langgraph/tests/test_integration.py +0 -484
- package/python-openai-agents/README.md +0 -145
- package/python-openai-agents/agenticreplay_openai_agents/__init__.py +0 -11
- package/python-openai-agents/agenticreplay_openai_agents/processor.py +0 -331
- package/python-openai-agents/pyproject.toml +0 -34
- package/python-openai-agents/tests/test_processor.py +0 -457
- package/scripts/check-neutrality.mjs +0 -62
- package/scripts/codex-client-acceptance.mjs +0 -133
- package/scripts/conformance.mjs +0 -245
- package/scripts/fidelity.mjs +0 -170
- package/scripts/hermes-client-acceptance.mjs +0 -158
- package/scripts/host-client-acceptance.mjs +0 -732
- package/scripts/installed-smoke.mjs +0 -316
- package/scripts/publish-order.mjs +0 -96
- package/scripts/regenerate-quickstart.mjs +0 -79
- package/scripts/render-cards.mjs +0 -178
- package/scripts/render-demo.mjs +0 -139
- package/scripts/render-sync-card.mjs +0 -96
- package/scripts/set-version.mjs +0 -152
- package/scripts/set-version.test.ts +0 -220
- package/scripts/sync-server-json.mjs +0 -13
- package/scripts/update-opencode-api-bases.mjs +0 -29
- package/server.json +0 -28
- package/skills/agenticreplay-replay/SKILL.md +0 -211
- package/spec/agenticreplay-trace-v0.md +0 -223
- package/test/integrations/README.md +0 -133
- package/test/integrations/agents/ai_sdk_openai.mjs +0 -24
- package/test/integrations/agents/anthropic_sdk.py +0 -10
- package/test/integrations/agents/browser_use_agent.py +0 -24
- package/test/integrations/agents/crewai_agent.py +0 -44
- package/test/integrations/agents/crewai_model_names.py +0 -72
- package/test/integrations/agents/hardcoded_origin.mjs +0 -13
- package/test/integrations/agents/haystack_pipeline.py +0 -28
- package/test/integrations/agents/haystack_rag.py +0 -35
- package/test/integrations/agents/langgraph_agent.py +0 -54
- package/test/integrations/agents/langgraph_nodes.py +0 -62
- package/test/integrations/agents/litellm_agent.py +0 -11
- package/test/integrations/agents/llama_index_agent.py +0 -27
- package/test/integrations/agents/llama_index_model_names.py +0 -67
- package/test/integrations/agents/mastra_agent.mjs +0 -20
- package/test/integrations/agents/mcp_agent.py +0 -44
- package/test/integrations/agents/mcp_server.py +0 -20
- package/test/integrations/agents/openai_agents_handoff.py +0 -52
- package/test/integrations/agents/openai_agents_sdk.py +0 -29
- package/test/integrations/agents/openai_async.py +0 -17
- package/test/integrations/agents/openai_sdk.py +0 -10
- package/test/integrations/agents/openhands_agent.py +0 -34
- package/test/integrations/agents/rag_pipeline.py +0 -79
- package/test/integrations/agents/vision_agent.py +0 -63
- package/test/integrations/run.mjs +0 -719
- package/test/integrations/stub-origin.mjs +0 -229
- package/tsconfig.base.json +0 -20
- package/tsconfig.json +0 -41
- package/vitest.config.ts +0 -39
- package/vitest.setup.ts +0 -25
- /package/{packages → node_modules/@agenticreplay}/schema/schema/event.schema.json +0 -0
- /package/{packages → node_modules/@agenticreplay}/schema/schema/manifest.schema.json +0 -0
|
@@ -0,0 +1,928 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { Redactor } from '@agenticreplay/core';
|
|
3
|
+
import { DIVERGENCE_LEVELS, MATCH_RUNGS } from '@agenticreplay/schema';
|
|
4
|
+
/** Fields that change every run and say nothing about what was asked. */
|
|
5
|
+
const VOLATILE_METADATA = new Set([
|
|
6
|
+
'request_id',
|
|
7
|
+
'user_id',
|
|
8
|
+
'session',
|
|
9
|
+
'session_id',
|
|
10
|
+
'trace_id',
|
|
11
|
+
'idempotency_key',
|
|
12
|
+
'timestamp',
|
|
13
|
+
]);
|
|
14
|
+
/** Rung 2 accepts differences up to this share of the request's total size. */
|
|
15
|
+
const MINOR_DISTANCE_RATIO = 0.15;
|
|
16
|
+
/**
|
|
17
|
+
* How many unplayed recorded requests a live one may step over, at least.
|
|
18
|
+
*
|
|
19
|
+
* Small on purpose. The calls a harness makes for itself cluster at the start of a session — a
|
|
20
|
+
* quota probe, a title — so a handful is enough for the case this exists for, and a wide window
|
|
21
|
+
* turns a coincidental near-match into a wrong answer served under a `minor` label.
|
|
22
|
+
*
|
|
23
|
+
* It is a floor rather than the whole answer because a second workload reorders on a different
|
|
24
|
+
* scale. An indexing pipeline issues N requests at once — IndexRAG defaults to ten workers,
|
|
25
|
+
* Microsoft GraphRAG to `concurrent_requests`, LightRAG to `llm_model_max_async` — and the order
|
|
26
|
+
* they are answered in is the order the origin happened to finish them, so a replay of the same
|
|
27
|
+
* pipeline can arrive up to N-1 positions away from the cursor. A fixed 8 against a window of 10
|
|
28
|
+
* refuses the ones that drifted furthest, and refuses them for a reason that has nothing to do
|
|
29
|
+
* with the recording. {@link MatcherOptions.concurrency} lets the proxy raise the ceiling to what
|
|
30
|
+
* it actually observed, which is a number only it can know.
|
|
31
|
+
*/
|
|
32
|
+
const LOOKAHEAD = 8;
|
|
33
|
+
/**
|
|
34
|
+
* Reduce a request to what actually determines the model's answer: same model, same conversation,
|
|
35
|
+
* same tools, same sampling. Tool order is not meaningful, so it is sorted; metadata that changes
|
|
36
|
+
* per invocation is dropped.
|
|
37
|
+
*/
|
|
38
|
+
export function normalizeRequest(req) {
|
|
39
|
+
const metadata = req.metadata
|
|
40
|
+
? Object.fromEntries(Object.entries(req.metadata)
|
|
41
|
+
.filter(([k]) => !VOLATILE_METADATA.has(k))
|
|
42
|
+
.sort(([a], [b]) => a.localeCompare(b)))
|
|
43
|
+
: undefined;
|
|
44
|
+
return sortKeys({
|
|
45
|
+
model: req.model,
|
|
46
|
+
system: req.system ?? null,
|
|
47
|
+
messages: req.messages.map((m) => ({
|
|
48
|
+
role: m.role,
|
|
49
|
+
content: m.content.map(normalizeContent),
|
|
50
|
+
})),
|
|
51
|
+
tools: (req.tools ?? [])
|
|
52
|
+
.map((t) => ({
|
|
53
|
+
name: t.name,
|
|
54
|
+
description: t.description ?? null,
|
|
55
|
+
input_schema: t.input_schema,
|
|
56
|
+
}))
|
|
57
|
+
.sort((a, b) => a.name.localeCompare(b.name)),
|
|
58
|
+
max_tokens: req.max_tokens ?? null,
|
|
59
|
+
temperature: req.temperature ?? null,
|
|
60
|
+
top_p: req.top_p ?? null,
|
|
61
|
+
stop: req.stop ?? null,
|
|
62
|
+
metadata: metadata && Object.keys(metadata).length > 0 ? metadata : null,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function normalizeContent(c) {
|
|
66
|
+
// A tool_use id is generated per call and never affects the answer, so it is excluded from the
|
|
67
|
+
// identity of the request while the name and input — which do — are kept.
|
|
68
|
+
switch (c.type) {
|
|
69
|
+
case 'tool_use':
|
|
70
|
+
return { type: c.type, name: c.name, input: c.input };
|
|
71
|
+
case 'tool_result':
|
|
72
|
+
return { type: c.type, content: c.content, is_error: c.is_error ?? false };
|
|
73
|
+
case 'image':
|
|
74
|
+
return { type: c.type, media_type: c.media_type, data: c.data };
|
|
75
|
+
default:
|
|
76
|
+
return { type: c.type, text: c.text };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function sortKeys(value) {
|
|
80
|
+
if (Array.isArray(value))
|
|
81
|
+
return value.map(sortKeys);
|
|
82
|
+
if (value && typeof value === 'object') {
|
|
83
|
+
const out = {};
|
|
84
|
+
for (const key of Object.keys(value).sort()) {
|
|
85
|
+
out[key] = sortKeys(value[key]);
|
|
86
|
+
}
|
|
87
|
+
return out;
|
|
88
|
+
}
|
|
89
|
+
return value;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* A redaction placeholder is `<secret:kind:hash8>` and the digest is salted **per run** (spec §5),
|
|
93
|
+
* so the same secret, in the same position, becomes a different placeholder in a different run.
|
|
94
|
+
* That is deliberate — it is what stops a short secret being brute-forced out of a published trace
|
|
95
|
+
* — but it means a recorded request can never be byte-equal to the same request made again. Every
|
|
96
|
+
* comparison below rung 1 is therefore made on the *kind* of secret rather than on its digest.
|
|
97
|
+
*/
|
|
98
|
+
const PLACEHOLDER_DIGEST = /(<secret:[a-z0-9_]+):[0-9a-f]{8}>/g;
|
|
99
|
+
function foldPlaceholders(text) {
|
|
100
|
+
return text.replace(PLACEHOLDER_DIGEST, '$1>');
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* A rendered image is the second value a replay can never reproduce, for the same reason as a
|
|
104
|
+
* salted placeholder and with the same consequence: rung 1 is unreachable for any request carrying
|
|
105
|
+
* one. A replay drives the *real* browser — agenticreplay does not intercept the world — so the screenshot
|
|
106
|
+
* arriving now was rendered a second time, and two renders of one page are not the same bytes. A
|
|
107
|
+
* caret blinked, a font landed a frame later, the article was edited.
|
|
108
|
+
*
|
|
109
|
+
* Measured on a browser-use run against Wikipedia, recorded and then replayed:
|
|
110
|
+
*
|
|
111
|
+
* turn 1 distance 545,134 — with the pixels set aside: 171
|
|
112
|
+
*
|
|
113
|
+
* 99.97% of the distance was one PNG, and no threshold reachable from here can absorb that: the
|
|
114
|
+
* screenshot is 94% of the request body, so a rung-2 budget generous enough to admit it would
|
|
115
|
+
* admit a wholly different conversation too.
|
|
116
|
+
*
|
|
117
|
+
* The fold is safe because it is not the pixels that identify such a request. A browser agent
|
|
118
|
+
* sends its element tree, the page URL and its own memory in the same message, in text, and that
|
|
119
|
+
* text stays fully compared — in the same measurement, two runs that genuinely diverged scored
|
|
120
|
+
* 14,191, 19,409 and 57,519 with the pixels already set aside. Blinding the payload does not make
|
|
121
|
+
* everything match; it stops one unreproducible field from drowning out everything that does.
|
|
122
|
+
*
|
|
123
|
+
* Below rung 1 only. Rung 1 compares the payload, so an exact match still means exact.
|
|
124
|
+
*/
|
|
125
|
+
function foldImages(form) {
|
|
126
|
+
const messages = (form.messages ?? []).map((m) => ({
|
|
127
|
+
...m,
|
|
128
|
+
content: (m.content ?? []).map((c) => c?.type === 'image' ? { ...c, data: '' } : c),
|
|
129
|
+
}));
|
|
130
|
+
return { ...form, messages };
|
|
131
|
+
}
|
|
132
|
+
/** How the fold is named wherever it is reported. */
|
|
133
|
+
function imageNote(n) {
|
|
134
|
+
return `${n} ${n === 1 ? 'image' : 'images'}, whose pixels are not compared below rung 1`;
|
|
135
|
+
}
|
|
136
|
+
/** For that message: a fold nobody is told about is a replay that quietly approximates. */
|
|
137
|
+
function countImages(form) {
|
|
138
|
+
let n = 0;
|
|
139
|
+
for (const m of (form.messages ?? [])) {
|
|
140
|
+
for (const c of (m.content ?? [])) {
|
|
141
|
+
if (c?.type === 'image')
|
|
142
|
+
n += 1;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return n;
|
|
146
|
+
}
|
|
147
|
+
/** Deep map over string leaves, structure untouched. */
|
|
148
|
+
function mapStrings(value, f) {
|
|
149
|
+
if (typeof value === 'string')
|
|
150
|
+
return f(value);
|
|
151
|
+
if (Array.isArray(value))
|
|
152
|
+
return value.map((v) => mapStrings(v, f));
|
|
153
|
+
if (value !== null && typeof value === 'object') {
|
|
154
|
+
const out = {};
|
|
155
|
+
for (const [k, v] of Object.entries(value))
|
|
156
|
+
out[k] = mapStrings(v, f);
|
|
157
|
+
return out;
|
|
158
|
+
}
|
|
159
|
+
return value;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* The recorded side was redacted on its way to disk. An incoming replay request has never been near
|
|
163
|
+
* the write path, so it holds the real values and cannot match a recording that holds placeholders
|
|
164
|
+
* — the two have to be put in the same representation first. Pass the redactor for the live side;
|
|
165
|
+
* the recorded side is already in it.
|
|
166
|
+
*/
|
|
167
|
+
function redactedForm(req, redactor) {
|
|
168
|
+
const normalized = normalizeRequest(req);
|
|
169
|
+
if (!redactor)
|
|
170
|
+
return normalized;
|
|
171
|
+
return mapStrings(normalized, (s) => redactor.redactString(s).value);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* What rungs 2 and below compare: the redacted form with the two unreproducible things folded
|
|
175
|
+
* away — a placeholder's digest, so what survives is *which kind of secret sat here*, and an
|
|
176
|
+
* image's payload, so what survives is *an image of this media type sat here*. In both cases that
|
|
177
|
+
* is the most a trace can honestly claim about a value the replay cannot produce again.
|
|
178
|
+
*/
|
|
179
|
+
export function comparableRequest(req, redactor) {
|
|
180
|
+
return foldImages(mapStrings(redactedForm(req, redactor), foldPlaceholders));
|
|
181
|
+
}
|
|
182
|
+
function hashOf(value) {
|
|
183
|
+
return createHash('sha256').update(JSON.stringify(value)).digest('hex');
|
|
184
|
+
}
|
|
185
|
+
export function canonicalHash(req) {
|
|
186
|
+
return hashOf(normalizeRequest(req));
|
|
187
|
+
}
|
|
188
|
+
function countPlaceholders(value) {
|
|
189
|
+
let n = 0;
|
|
190
|
+
mapStrings(value, (s) => {
|
|
191
|
+
n += s.match(PLACEHOLDER_DIGEST)?.length ?? 0;
|
|
192
|
+
return s;
|
|
193
|
+
});
|
|
194
|
+
return n;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Character distance summed over the leaves that actually differ.
|
|
198
|
+
*
|
|
199
|
+
* The obvious implementation — longest common prefix and suffix of the two serialized bodies — is
|
|
200
|
+
* wrong in a way only a real harness shows you. Claude Code carries a session-scoped id in both its
|
|
201
|
+
* system prompt and its tool descriptions; two drifting tokens that far apart leave the entire
|
|
202
|
+
* 200 KB between them counted as changed, so a sixteen-character difference scored 217,568 and
|
|
203
|
+
* rung 2 could not fire on any real recording. Walking the two structures in parallel bounds each
|
|
204
|
+
* difference to the leaf that contains it.
|
|
205
|
+
*
|
|
206
|
+
* Arrays align by index, which is right for `messages` and for the name-sorted `tools`, and
|
|
207
|
+
* deliberately pessimistic when an element is *inserted* in the middle: everything after it counts
|
|
208
|
+
* as changed. Over-counting sends a request down the ladder rather than up it, which is the safe
|
|
209
|
+
* direction for a matcher to be wrong in.
|
|
210
|
+
*/
|
|
211
|
+
export function structuralDistance(a, b) {
|
|
212
|
+
return leafDistance(comparableRequest(a), comparableRequest(b));
|
|
213
|
+
}
|
|
214
|
+
function leafDistance(a, b) {
|
|
215
|
+
if (a === b)
|
|
216
|
+
return 0;
|
|
217
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
218
|
+
let total = 0;
|
|
219
|
+
const shared = Math.min(a.length, b.length);
|
|
220
|
+
for (let i = 0; i < shared; i += 1)
|
|
221
|
+
total += leafDistance(a[i], b[i]);
|
|
222
|
+
for (let i = shared; i < a.length; i += 1)
|
|
223
|
+
total += weight(a[i]);
|
|
224
|
+
for (let i = shared; i < b.length; i += 1)
|
|
225
|
+
total += weight(b[i]);
|
|
226
|
+
return total;
|
|
227
|
+
}
|
|
228
|
+
if (isRecord(a) && isRecord(b)) {
|
|
229
|
+
let total = 0;
|
|
230
|
+
for (const key of new Set([...Object.keys(a), ...Object.keys(b)])) {
|
|
231
|
+
if (!(key in a))
|
|
232
|
+
total += weight(b[key]);
|
|
233
|
+
else if (!(key in b))
|
|
234
|
+
total += weight(a[key]);
|
|
235
|
+
else
|
|
236
|
+
total += leafDistance(a[key], b[key]);
|
|
237
|
+
}
|
|
238
|
+
return total;
|
|
239
|
+
}
|
|
240
|
+
if (typeof a === 'string' && typeof b === 'string')
|
|
241
|
+
return textDistance(a, b);
|
|
242
|
+
return Math.max(weight(a), weight(b));
|
|
243
|
+
}
|
|
244
|
+
function isRecord(v) {
|
|
245
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
246
|
+
}
|
|
247
|
+
function weight(v) {
|
|
248
|
+
return JSON.stringify(v ?? null).length;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Distance within one string leaf.
|
|
252
|
+
*
|
|
253
|
+
* Line-aligned when both sides have the same number of lines, because that is the shape drift takes
|
|
254
|
+
* inside a command's output: `node --test` prints four `duration_ms` floats scattered over fifty
|
|
255
|
+
* lines, and taking the common prefix and suffix of the whole string counted the 1,289 characters
|
|
256
|
+
* lying between the first and the last of them. Per line, it counts the four. Same failure as the
|
|
257
|
+
* whole-body metric had, one level down; the structural walk above cannot see inside a string.
|
|
258
|
+
*/
|
|
259
|
+
function textDistance(a, b) {
|
|
260
|
+
if (a === b)
|
|
261
|
+
return 0;
|
|
262
|
+
const la = a.split('\n');
|
|
263
|
+
const lb = b.split('\n');
|
|
264
|
+
if (la.length === lb.length && la.length > 1) {
|
|
265
|
+
let total = 0;
|
|
266
|
+
for (let i = 0; i < la.length; i += 1)
|
|
267
|
+
total += spanDistance(la[i], lb[i]);
|
|
268
|
+
return total;
|
|
269
|
+
}
|
|
270
|
+
return spanDistance(a, b);
|
|
271
|
+
}
|
|
272
|
+
/** Prefix and suffix — the old whole-body heuristic, now scoped to one line, where it holds. */
|
|
273
|
+
function spanDistance(a, b) {
|
|
274
|
+
let prefix = 0;
|
|
275
|
+
const max = Math.min(a.length, b.length);
|
|
276
|
+
while (prefix < max && a[prefix] === b[prefix])
|
|
277
|
+
prefix += 1;
|
|
278
|
+
let suffix = 0;
|
|
279
|
+
while (suffix < max - prefix && a[a.length - 1 - suffix] === b[b.length - 1 - suffix]) {
|
|
280
|
+
suffix += 1;
|
|
281
|
+
}
|
|
282
|
+
return Math.max(a.length, b.length) - prefix - suffix;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* How good a candidate is, lower being better: the rung first, then the distance, then how far it
|
|
286
|
+
* is from the cursor.
|
|
287
|
+
*
|
|
288
|
+
* The rung leads because the rungs are already ordered by how much was approximated — a rung-2
|
|
289
|
+
* match really is better evidence than a rung-3 one, whatever the raw character counts say, since
|
|
290
|
+
* rung 3 means the conversation itself differs. Distance separates candidates at the same rung.
|
|
291
|
+
* The last term is the tie-break, and it points at the cursor: with nothing else to choose
|
|
292
|
+
* between two equally good answers, the one the recording expected next is the honest pick.
|
|
293
|
+
*/
|
|
294
|
+
function rank(result, cursor) {
|
|
295
|
+
const distance = result.divergence?.distance ?? 0;
|
|
296
|
+
return result.rung * 1e12 + distance * 1e3 + Math.abs(result.index - cursor);
|
|
297
|
+
}
|
|
298
|
+
function trailingMessage(form) {
|
|
299
|
+
const messages = (form.messages ?? []);
|
|
300
|
+
return messages[messages.length - 1];
|
|
301
|
+
}
|
|
302
|
+
function messageCount(form) {
|
|
303
|
+
return (form.messages ?? []).length;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* The request with the body of every tool result blanked, leaving what the model was told and what
|
|
307
|
+
* it said.
|
|
308
|
+
*
|
|
309
|
+
* If two requests agree on this and differ elsewhere, the only thing that changed is what the world
|
|
310
|
+
* returned — and on replay it will, because agenticreplay does not intercept tool execution. That is the
|
|
311
|
+
* price of not patching the harness: the agent really re-runs `npm test`, which really reprints its
|
|
312
|
+
* own durations. `is_error` is kept, so a check that went from failing to passing is still a
|
|
313
|
+
* difference; only the text of the output is set aside.
|
|
314
|
+
*/
|
|
315
|
+
function withoutToolOutput(form) {
|
|
316
|
+
const messages = (form.messages ?? []).map((m) => ({
|
|
317
|
+
...m,
|
|
318
|
+
content: (m.content ?? []).map((c) => c?.type === 'tool_result' ? { ...c, content: '' } : c),
|
|
319
|
+
}));
|
|
320
|
+
return { ...form, messages };
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* How far the ask may drift and still be the same ask: a share of its own size, capped in absolute
|
|
324
|
+
* terms. Both halves earn their place. The ratio has no floor, so on a short question a fraction of
|
|
325
|
+
* a short string is a fraction of a character and "same ask" collapses back to equality — which is
|
|
326
|
+
* what stops a swapped question being served the recorded answer. The cap stops a very large tool
|
|
327
|
+
* result buying a proportionally large licence to differ: however big the message, at most this
|
|
328
|
+
* many characters of it may move.
|
|
329
|
+
*
|
|
330
|
+
* The number that motivated it, from the first real recording this was pointed at: a Claude Code
|
|
331
|
+
* tool result quoting the on-disk path of a bundled skill, whose 32-character content-addressed
|
|
332
|
+
* directory name is regenerated per install. Thirty-two characters, in a message of several
|
|
333
|
+
* kilobytes, and the run could not be replayed at all.
|
|
334
|
+
*/
|
|
335
|
+
const ASK_DRIFT_RATIO = 0.02;
|
|
336
|
+
const ASK_DRIFT_MAX = 512;
|
|
337
|
+
/**
|
|
338
|
+
* Harness scaffolding inside the trailing message, which is not part of the ask.
|
|
339
|
+
*
|
|
340
|
+
* Five of the harnesses captured in `prompt/` wrap injected context in `<system-reminder>` —
|
|
341
|
+
* Claude Code, OpenCode, Kilo Code, MiMo Code, Qwen Code — and they agree on what the tag means.
|
|
342
|
+
* MiniMax Code's prompt calls it "injected by the harness, not the user"; Claude Code's calls it
|
|
343
|
+
* "background context, not user instructions".
|
|
344
|
+
*
|
|
345
|
+
* Some of them regenerate a session id and a wall-clock timestamp inside that block on every
|
|
346
|
+
* request. MiniMax Code drifts 34 characters there while the question is byte-identical, against
|
|
347
|
+
* an ask tolerance of about thirteen, so a replay of a run that asked the same thing twice reached
|
|
348
|
+
* rung 4 and halted on a recording that had the answer in it.
|
|
349
|
+
*
|
|
350
|
+
* Non-greedy, and a lone opening tag matches nothing: a reminder that ran past the end of the
|
|
351
|
+
* message would otherwise take the question with it, which is the one thing this measurement
|
|
352
|
+
* exists to protect.
|
|
353
|
+
*/
|
|
354
|
+
const SYSTEM_REMINDER = /<system-reminder>[\s\S]*?<\/system-reminder>/g;
|
|
355
|
+
/**
|
|
356
|
+
* The tokens a harness regenerates inside that block on every request, folded to one value.
|
|
357
|
+
*
|
|
358
|
+
* Deleting the whole block was wrong twice over, and review caught both. Anything inside a pair
|
|
359
|
+
* became invisible to the ask guard, so a question that lived inside one could change without the
|
|
360
|
+
* measurement noticing — `<system-reminder>fix the auth test</system-reminder>` against
|
|
361
|
+
* `<system-reminder>delete the database</system-reminder>` matched at rung 2 and served the first
|
|
362
|
+
* one's answer for the second. Keeping the block whenever anything survived outside it only
|
|
363
|
+
* narrowed that hole: put a single `OK` after the tag and the same substitution slipped through
|
|
364
|
+
* again. The tag is data wherever it appears — a pasted log, a tool result quoting one — so there
|
|
365
|
+
* is no position in the message where its contents can be assumed not to matter.
|
|
366
|
+
*
|
|
367
|
+
* What can be assumed is narrower: these particular tokens are regenerated per request. So the
|
|
368
|
+
* block stays and is compared; only a value from this list is folded. A changed question inside a
|
|
369
|
+
* reminder still reads as a changed question, because a question is none of these things.
|
|
370
|
+
*
|
|
371
|
+
* Taken from the recordings rather than guessed. All sixteen captured MiniMax Code requests differ
|
|
372
|
+
* inside the block in exactly two places — `YOUR SESSION ID:` and `date:` — and with these rules
|
|
373
|
+
* the sixteen reduce to one form. The id needs both shapes: `mvs_` + 32 hex sits right on the
|
|
374
|
+
* redactor's entropy threshold, so whether it arrives raw or as `<secret:high_entropy>` depends on
|
|
375
|
+
* the id's own characters, and the two have to fold together. `foldPlaceholders` has already run
|
|
376
|
+
* by then and removed the per-value digest.
|
|
377
|
+
*/
|
|
378
|
+
const VOLATILE = [
|
|
379
|
+
[/<secret:[a-z0-9_]+>/gi, '<volatile>'],
|
|
380
|
+
[/[0-9a-z]{0,12}_?[0-9a-f]{16,}/gi, '<volatile>'],
|
|
381
|
+
// `Date.toString()`, which is what MiniMax Code sends, then ISO 8601, then a bare clock.
|
|
382
|
+
[
|
|
383
|
+
/[A-Z][a-z]{2} [A-Z][a-z]{2} [0-9]{1,2} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} GMT[+-][0-9]{4}( [(][^)]*[)])?/g,
|
|
384
|
+
'<volatile>',
|
|
385
|
+
],
|
|
386
|
+
[
|
|
387
|
+
/[0-9]{4}-[0-9]{2}-[0-9]{2}[T ][0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]+)?(Z|[+-][0-9]{2}:?[0-9]{2})?/g,
|
|
388
|
+
'<volatile>',
|
|
389
|
+
],
|
|
390
|
+
[/[0-9]{1,2}:[0-9]{2}(:[0-9]{2})?/g, '<volatile>'],
|
|
391
|
+
];
|
|
392
|
+
/**
|
|
393
|
+
* How much of a reminder has to be something other than a regenerated value for it to count as
|
|
394
|
+
* scaffolding at all.
|
|
395
|
+
*
|
|
396
|
+
* A second guard rather than the main one, after review showed bulk alone is not enough. It still
|
|
397
|
+
* earns its place at the small end: `<system-reminder>date: 14:30</system-reminder>` is a labelled
|
|
398
|
+
* field by the rule below, and nothing but a labelled field, so without a floor a question written
|
|
399
|
+
* that way would fold. The recorded MiniMax Code blocks leave about 494 characters that are not
|
|
400
|
+
* volatile; that one leaves six.
|
|
401
|
+
*/
|
|
402
|
+
const SCAFFOLD_MIN_STABLE = 64;
|
|
403
|
+
/**
|
|
404
|
+
* A `Label: value` line, with the label ending at the first colon.
|
|
405
|
+
*
|
|
406
|
+
* This is what separates a regenerated field from a question, and shape alone could not. Review
|
|
407
|
+
* reproduced two questions made of exactly the shapes that get folded — `what does commit 4f2a… do?`
|
|
408
|
+
* against `…9911…`, and `what is at 14:30 today?` against `…15:45…` — and a threshold that only
|
|
409
|
+
* measured the block's bulk let both through as soon as there were 64 other characters around
|
|
410
|
+
* them. A 300-character question about a sha inside 100 characters of scaffolding folded too.
|
|
411
|
+
*
|
|
412
|
+
* What the harness actually emits is a field. All sixteen recorded MiniMax Code blocks carry their
|
|
413
|
+
* two volatile values in an `<agent-context>` list:
|
|
414
|
+
*
|
|
415
|
+
* agent: Mavis # display name
|
|
416
|
+
* SESSION ROLE: root
|
|
417
|
+
* YOUR SESSION ID: <secret:high_entropy>
|
|
418
|
+
* date: Sun Sep 20 2026 11:31:14 GMT+0800 (中国标准时间)
|
|
419
|
+
*
|
|
420
|
+
* — one label, one value, the whole value regenerated. A question is prose: it has no label, and
|
|
421
|
+
* the token sits inside a sentence rather than being the entire value. So a token is folded only
|
|
422
|
+
* when it is the complete value of a labelled line, and `what does commit 4f2a… do?` is never
|
|
423
|
+
* that, however long the block around it is.
|
|
424
|
+
*
|
|
425
|
+
* The residual is what remains after both guards: a question written *as* a field, inside a block
|
|
426
|
+
* with 64 other characters in it — `commit: 4f2a…` against `commit: 9911…` in a long reminder.
|
|
427
|
+
* That is narrow enough to state and leave, where refusing every long block would give up the
|
|
428
|
+
* case this measurement exists for.
|
|
429
|
+
*/
|
|
430
|
+
const LABELLED_FIELD = /^([ \t]*[^\s:][^:\n]{0,63}:[ \t]*)([^\n]*[^\s \t])[ \t]*$/gm;
|
|
431
|
+
/** Anchored twins of `VOLATILE`, for asking whether a value is *entirely* one of these. */
|
|
432
|
+
const VOLATILE_WHOLE = VOLATILE.map(([pattern]) => new RegExp(`^(?:${pattern.source})$`, pattern.flags.replace(/[gy]/g, '')));
|
|
433
|
+
/**
|
|
434
|
+
* Only inside the block, only when the block is scaffolding, and only a labelled field's value.
|
|
435
|
+
*
|
|
436
|
+
* Outside the block the same shapes are the user's own content — a commit sha they are asking
|
|
437
|
+
* about, a time they want changed — and folding those would be the very substitution this guard
|
|
438
|
+
* exists to refuse.
|
|
439
|
+
*/
|
|
440
|
+
function withoutVolatility(value) {
|
|
441
|
+
return mapStrings(value, (s) => s.replace(SYSTEM_REMINDER, foldScaffolding));
|
|
442
|
+
}
|
|
443
|
+
function foldScaffolding(block) {
|
|
444
|
+
let stable = block;
|
|
445
|
+
for (const [pattern] of VOLATILE)
|
|
446
|
+
stable = stable.replace(pattern, '');
|
|
447
|
+
if (stable.length < SCAFFOLD_MIN_STABLE)
|
|
448
|
+
return block;
|
|
449
|
+
return block.replace(LABELLED_FIELD, (line, label, field) => VOLATILE_WHOLE.some((pattern) => pattern.test(field)) ? `${label}<volatile>` : line);
|
|
450
|
+
}
|
|
451
|
+
/** The ask with its scaffolding gone: what is left is the question, which is what the budget is a fraction of. */
|
|
452
|
+
function withoutReminders(value) {
|
|
453
|
+
return mapStrings(value, (s) => s.replace(SYSTEM_REMINDER, ''));
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* `Infinity` when one side has no trailing message at all and the other does.
|
|
457
|
+
*
|
|
458
|
+
* Rung 2's whole-request distance still counts every character of the reminders, so a reminder
|
|
459
|
+
* that grew by a kilobyte is still drift and the match still reports as minor rather than exact —
|
|
460
|
+
* what this stops is a regenerated id being read as a different question.
|
|
461
|
+
*/
|
|
462
|
+
function askDistance(live, recorded) {
|
|
463
|
+
const a = trailingMessage(live);
|
|
464
|
+
const b = trailingMessage(recorded);
|
|
465
|
+
if (a === undefined || b === undefined)
|
|
466
|
+
return a === b ? 0 : Number.POSITIVE_INFINITY;
|
|
467
|
+
return leafDistance(withoutVolatility(a), withoutVolatility(b));
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* A fraction of the question, not of the scaffolding around it.
|
|
471
|
+
*
|
|
472
|
+
* The two are measured on different text on purpose. Drift is everything that is not a folded
|
|
473
|
+
* token, so it sees the whole ask; the budget is a share of what the user actually asked, so the
|
|
474
|
+
* reminders come out of it entirely. Taking the budget from the raw ask instead let the injected
|
|
475
|
+
* block buy room for a changed question — at 2,000 characters of reminder it reached 40 while the
|
|
476
|
+
* drift between "fix the auth test" and "delete the auth test" is 6, and the recorded answer to
|
|
477
|
+
* one was served for the other at rung 2. That was the first thing review caught here.
|
|
478
|
+
*
|
|
479
|
+
* An ask that is nothing but a reminder leaves no question, and a budget of about one character:
|
|
480
|
+
* identical still matches, anything else is a different run.
|
|
481
|
+
*/
|
|
482
|
+
function askTolerance(recorded) {
|
|
483
|
+
const ask = trailingMessage(recorded);
|
|
484
|
+
if (ask === undefined)
|
|
485
|
+
return 0;
|
|
486
|
+
return Math.min(weight(withoutReminders(ask)) * ASK_DRIFT_RATIO, ASK_DRIFT_MAX);
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Walks the recorded requests in order, consuming one per match. Recorded order is meaningful:
|
|
490
|
+
* a conversation replays forwards, so a match behind the cursor would mean the agent went
|
|
491
|
+
* backwards, which is a divergence rather than a match.
|
|
492
|
+
*/
|
|
493
|
+
/**
|
|
494
|
+
* Tools the recording had and the replay does not.
|
|
495
|
+
*
|
|
496
|
+
* The reason a miss is worth naming rather than counting. A session recorded through a terminal is
|
|
497
|
+
* offered tools that only make sense with a person in front of it — asking a question, entering
|
|
498
|
+
* plan mode, ending the conversation — and a replay driven without one is not offered them. Their
|
|
499
|
+
* schemas are large, so the distance runs into the hundreds of thousands and reads as a corrupted
|
|
500
|
+
* trace, when what happened is that the same agent was started two different ways.
|
|
501
|
+
*/
|
|
502
|
+
function toolsOnlyInRecording(live, recorded) {
|
|
503
|
+
const replayed = new Set((live.tools ?? []).map((t) => t.name));
|
|
504
|
+
return (recorded.tools ?? []).map((t) => t.name).filter((name) => !replayed.has(name));
|
|
505
|
+
}
|
|
506
|
+
export class RequestMatcher {
|
|
507
|
+
#recorded;
|
|
508
|
+
/** Redacted but unfolded — rung 1 compares these, so "exact" still means exact. */
|
|
509
|
+
#strict;
|
|
510
|
+
#comparable;
|
|
511
|
+
/** Counted before the fold, which is the only point at which the digests are still there. */
|
|
512
|
+
#secrets;
|
|
513
|
+
/** Likewise for images, so a match that only held because the pixels were set aside says so. */
|
|
514
|
+
#images;
|
|
515
|
+
#redactor;
|
|
516
|
+
#concurrency;
|
|
517
|
+
#cursor = 0;
|
|
518
|
+
/**
|
|
519
|
+
* Recorded requests the cursor stepped over that have not been played yet.
|
|
520
|
+
*
|
|
521
|
+
* Stepping over used to discard them, and against a harness that issues a call concurrently with
|
|
522
|
+
* its own conversation that loses the conversation. goose is the case that found it: it asks for
|
|
523
|
+
* a session title on a second task, so the title and the first real turn race, and the order
|
|
524
|
+
* they land in is not the order they were recorded in. When the replay's title arrived first the
|
|
525
|
+
* cursor jumped past the recorded first turn to reach it — and the first turn, which was about
|
|
526
|
+
* to be asked for, had already been thrown away. The next request then met turn *two* and the
|
|
527
|
+
* replay halted on a recording that contained everything it needed.
|
|
528
|
+
*
|
|
529
|
+
* Holding them here instead costs nothing when the order does match — the set stays empty — and
|
|
530
|
+
* makes out-of-order arrival a matter of which request is served rather than whether the replay
|
|
531
|
+
* survives. Anything still in here at the end was genuinely never repeated, which is what
|
|
532
|
+
* `reused=x/y` already reports.
|
|
533
|
+
*/
|
|
534
|
+
#deferred = [];
|
|
535
|
+
/**
|
|
536
|
+
* Recorded positions by strict hash, ascending — the index behind {@link #exactAhead}.
|
|
537
|
+
*
|
|
538
|
+
* A map rather than a scan because the scan is what the window was protecting against: looking
|
|
539
|
+
* for an exact match by walking the recording is O(n) per request and O(n²) over a run, and a
|
|
540
|
+
* pipeline recording is exactly the shape with thousands of them.
|
|
541
|
+
*/
|
|
542
|
+
#byStrictHash = new Map();
|
|
543
|
+
constructor(recorded, options = {}) {
|
|
544
|
+
this.#recorded = recorded;
|
|
545
|
+
this.#redactor = options.redactor;
|
|
546
|
+
this.#concurrency = options.concurrency;
|
|
547
|
+
const normalized = recorded.map((r) => normalizeRequest(r));
|
|
548
|
+
this.#strict = normalized.map(hashOf);
|
|
549
|
+
this.#secrets = normalized.map(countPlaceholders);
|
|
550
|
+
this.#images = normalized.map(countImages);
|
|
551
|
+
this.#comparable = normalized.map((n) => foldImages(mapStrings(n, foldPlaceholders)));
|
|
552
|
+
for (const [index, hash] of this.#strict.entries()) {
|
|
553
|
+
const at = this.#byStrictHash.get(hash);
|
|
554
|
+
if (at)
|
|
555
|
+
at.push(index);
|
|
556
|
+
else
|
|
557
|
+
this.#byStrictHash.set(hash, [index]);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
remaining() {
|
|
561
|
+
return this.#recorded.length - this.#cursor + this.#deferred.length;
|
|
562
|
+
}
|
|
563
|
+
get cursor() {
|
|
564
|
+
return this.#cursor;
|
|
565
|
+
}
|
|
566
|
+
match(incoming) {
|
|
567
|
+
const hash = hashOf(redactedForm(incoming, this.#redactor));
|
|
568
|
+
// The ordinary case, and the only one that needs no judgement: the request at the cursor is
|
|
569
|
+
// byte-identical to the one being asked for.
|
|
570
|
+
if (this.#cursor < this.#recorded.length && this.#strict[this.#cursor] === hash) {
|
|
571
|
+
const at = this.#matchAt(incoming, this.#cursor);
|
|
572
|
+
this.#cursor = at.index + 1;
|
|
573
|
+
return at;
|
|
574
|
+
}
|
|
575
|
+
// An exact match somewhere else outranks an approximate one here.
|
|
576
|
+
//
|
|
577
|
+
// This ordering is load-bearing, and having it the other way round is how an indexing
|
|
578
|
+
// pipeline came to be served another document's answer. Rung 2 exists for drift *around* a
|
|
579
|
+
// stable question — a regenerated id, a different working directory in the system prompt —
|
|
580
|
+
// and it measures that drift as a share of the request's own size. An extraction prompt
|
|
581
|
+
// carries the document in the *system* prompt and a fixed template as its only message, so
|
|
582
|
+
// two different paragraphs are `sameAsk` by construction and differ by a few hundred
|
|
583
|
+
// characters in a request of several thousand: comfortably inside tolerance. Taking the
|
|
584
|
+
// cursor's near-match first meant paragraph 2's request was answered with paragraph 1's
|
|
585
|
+
// extraction, under a `minor` label, while paragraph 2's own answer sat unplayed three
|
|
586
|
+
// positions along — and the knowledge base built from that replay was a knowledge base of
|
|
587
|
+
// mismatched answers.
|
|
588
|
+
//
|
|
589
|
+
// Nothing is lost by looking first. An exact match is a hash lookup, and where there is none
|
|
590
|
+
// the ladder runs exactly as it did before.
|
|
591
|
+
const heldExact = this.#matchDeferred(incoming, hash);
|
|
592
|
+
if (heldExact)
|
|
593
|
+
return heldExact;
|
|
594
|
+
const aheadExact = this.#exactAhead(hash);
|
|
595
|
+
if (aheadExact !== undefined)
|
|
596
|
+
return this.#skipTo(incoming, aheadExact);
|
|
597
|
+
if (this.#cursor >= this.#recorded.length) {
|
|
598
|
+
// The cursor is past the end, and nothing held is an exact answer to this. A near one still
|
|
599
|
+
// might be: the out-of-order pair whose second half arrives last.
|
|
600
|
+
//
|
|
601
|
+
// Ranked, not first-come. This branch used to serve whichever held request matched first in
|
|
602
|
+
// insertion order, which is the same mistake the rest of this method was rewritten to stop
|
|
603
|
+
// making — and concurrency is what turned it from a corner into an ordinary state, since a
|
|
604
|
+
// worker pool routinely drives the cursor off the end while the requests it stepped over are
|
|
605
|
+
// still owed. On an indexing recording every held candidate is a rung-2 match against every
|
|
606
|
+
// other, so "first" meant the earliest document rather than this one: 2 of 4 documents, and
|
|
607
|
+
// 8 of 30 at width 10, were served a neighbour's extraction under a `minor` label.
|
|
608
|
+
const held = this.#nearestHeld(incoming);
|
|
609
|
+
if (held)
|
|
610
|
+
return held;
|
|
611
|
+
return {
|
|
612
|
+
matched: false,
|
|
613
|
+
rung: 4,
|
|
614
|
+
index: -1,
|
|
615
|
+
reason: `recording exhausted after ${this.#recorded.length} model requests`,
|
|
616
|
+
};
|
|
617
|
+
}
|
|
618
|
+
// No exact answer anywhere, so the ladder has to approximate — and the question becomes
|
|
619
|
+
// *which* recorded request it approximates against. Taking the cursor's, because it is the
|
|
620
|
+
// cursor's, is the other half of the same mistake: a request that is a rung-2 match against
|
|
621
|
+
// the cursor is frequently a much better rung-2 match against one three positions along, and
|
|
622
|
+
// `leafDistance` already says which, by how much. The exact path above covers an indexing
|
|
623
|
+
// pipeline whose requests repeat byte for byte; this covers the same pipeline once anything
|
|
624
|
+
// per-run is in the prompt — a session id, a timestamp — so that nothing is byte-equal and
|
|
625
|
+
// every comparison lands on rung 2 against several neighbours at once.
|
|
626
|
+
//
|
|
627
|
+
// "Nearest" means lowest rung first and then least distance, because the rungs are ordered by
|
|
628
|
+
// how much was approximated and a rung-2 match elsewhere really is better evidence than a
|
|
629
|
+
// rung-3 at the cursor. Ties go to the cursor, which is where a well-behaved run always is.
|
|
630
|
+
const best = this.#nearest(incoming);
|
|
631
|
+
if (best !== undefined) {
|
|
632
|
+
if (best.index === this.#cursor) {
|
|
633
|
+
this.#cursor = best.index + 1;
|
|
634
|
+
return best;
|
|
635
|
+
}
|
|
636
|
+
const held = this.#matchDeferred(incoming, undefined, best.index);
|
|
637
|
+
if (held)
|
|
638
|
+
return held;
|
|
639
|
+
return this.#skipTo(incoming, best.index);
|
|
640
|
+
}
|
|
641
|
+
return this.#matchAt(incoming, this.#cursor);
|
|
642
|
+
}
|
|
643
|
+
/**
|
|
644
|
+
* The best approximate match available: the cursor, anything held, and the window ahead.
|
|
645
|
+
*
|
|
646
|
+
* The cursor is allowed to match at any rung — rung 3 is what a compacted conversation lands on
|
|
647
|
+
* and it is only ever legitimate in place. Everything else is held to rung 2, for the reason a
|
|
648
|
+
* step-forward always has been: below that the agent would be handed some other turn's answer.
|
|
649
|
+
*/
|
|
650
|
+
#nearest(incoming) {
|
|
651
|
+
const candidates = [];
|
|
652
|
+
const atCursor = this.#matchAt(incoming, this.#cursor);
|
|
653
|
+
if (atCursor.matched)
|
|
654
|
+
candidates.push(atCursor);
|
|
655
|
+
for (const index of [...this.#deferred, ...this.#nearAhead()]) {
|
|
656
|
+
const other = this.#matchAt(incoming, index);
|
|
657
|
+
if (other.matched && other.rung <= 2)
|
|
658
|
+
candidates.push(other);
|
|
659
|
+
}
|
|
660
|
+
let best;
|
|
661
|
+
for (const candidate of candidates) {
|
|
662
|
+
if (best === undefined || rank(candidate, this.#cursor) < rank(best, this.#cursor)) {
|
|
663
|
+
best = candidate;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
return best;
|
|
667
|
+
}
|
|
668
|
+
/**
|
|
669
|
+
* The best rung-2 match among the held requests, ranked the way {@link #nearest} ranks its own.
|
|
670
|
+
*
|
|
671
|
+
* `#nearest` cannot serve here: it probes `#matchAt(incoming, this.#cursor)`, and past the end
|
|
672
|
+
* of the recording there is nothing at the cursor to probe.
|
|
673
|
+
*/
|
|
674
|
+
#nearestHeld(incoming) {
|
|
675
|
+
let best;
|
|
676
|
+
for (const index of this.#deferred) {
|
|
677
|
+
const other = this.#matchAt(incoming, index);
|
|
678
|
+
if (!other.matched || other.rung > 2)
|
|
679
|
+
continue;
|
|
680
|
+
if (best === undefined || rank(other, this.#cursor) < rank(best, this.#cursor))
|
|
681
|
+
best = other;
|
|
682
|
+
}
|
|
683
|
+
if (best === undefined)
|
|
684
|
+
return undefined;
|
|
685
|
+
// `#matchDeferred` is what actually removes the entry from `#deferred` and labels the result
|
|
686
|
+
// as reordered; this only decides which entry it should be handed.
|
|
687
|
+
return this.#matchDeferred(incoming, undefined, best.index);
|
|
688
|
+
}
|
|
689
|
+
/** Move the cursor to `index`, holding what it stepped over, and report what was passed by. */
|
|
690
|
+
#skipTo(incoming, index) {
|
|
691
|
+
const later = this.#matchAt(incoming, index);
|
|
692
|
+
const skipped = index - this.#cursor;
|
|
693
|
+
// Set aside rather than dropped. They may yet be asked for — see `#deferred`.
|
|
694
|
+
for (let i = this.#cursor; i < index; i += 1)
|
|
695
|
+
this.#deferred.push(i);
|
|
696
|
+
this.#cursor = index + 1;
|
|
697
|
+
const skippedNote = `, holding ${skipped} recorded ${skipped === 1 ? 'request' : 'requests'} ` +
|
|
698
|
+
'the replay has not asked for yet';
|
|
699
|
+
// A rung-1 skip is reported as a reordering, not a divergence — see `MatchResult.reordered`.
|
|
700
|
+
// Nothing is hidden by that: the requests stepped over are held, and anything still held at
|
|
701
|
+
// the end was never asked for, which is exactly what `reused=x/y` counts.
|
|
702
|
+
if (later.rung === 1)
|
|
703
|
+
return { ...later, skipped, reordered: true };
|
|
704
|
+
return {
|
|
705
|
+
...later,
|
|
706
|
+
skipped,
|
|
707
|
+
reordered: true,
|
|
708
|
+
// Said even when the match had a divergence of its own: an inexact exchange stepped over
|
|
709
|
+
// without mention is a replay claiming to have reproduced something it passed by.
|
|
710
|
+
divergence: {
|
|
711
|
+
level: later.divergence?.level ?? 'minor',
|
|
712
|
+
rung: later.rung,
|
|
713
|
+
distance: later.divergence?.distance ?? 0,
|
|
714
|
+
detail: `${later.divergence?.detail ?? `matched request ${index}`}${skippedNote}`,
|
|
715
|
+
},
|
|
716
|
+
};
|
|
717
|
+
}
|
|
718
|
+
/**
|
|
719
|
+
* Serve a request the cursor stepped over earlier, when this is the one it was waiting for.
|
|
720
|
+
*
|
|
721
|
+
* With `exactHash`, only a byte-identical one counts. That pass runs before the ladder is
|
|
722
|
+
* allowed to approximate anything, so a held request that *is* the answer is served rather than
|
|
723
|
+
* a near-match at the cursor that merely resembles it.
|
|
724
|
+
*/
|
|
725
|
+
#matchDeferred(incoming, exactHash, only) {
|
|
726
|
+
for (let slot = 0; slot < this.#deferred.length; slot += 1) {
|
|
727
|
+
const index = this.#deferred[slot];
|
|
728
|
+
if (only !== undefined && index !== only)
|
|
729
|
+
continue;
|
|
730
|
+
if (exactHash !== undefined && this.#strict[index] !== exactHash)
|
|
731
|
+
continue;
|
|
732
|
+
const held = this.#matchAt(incoming, index);
|
|
733
|
+
if (!held.matched || held.rung > 2)
|
|
734
|
+
continue;
|
|
735
|
+
this.#deferred.splice(slot, 1);
|
|
736
|
+
// As in `#skipTo`: byte-identical is byte-identical, whichever order it arrived in.
|
|
737
|
+
if (held.rung === 1)
|
|
738
|
+
return { ...held, reordered: true };
|
|
739
|
+
const note = ', matched out of the order it was recorded in';
|
|
740
|
+
return {
|
|
741
|
+
...held,
|
|
742
|
+
reordered: true,
|
|
743
|
+
divergence: {
|
|
744
|
+
level: held.divergence?.level ?? 'minor',
|
|
745
|
+
rung: held.rung,
|
|
746
|
+
distance: held.divergence?.distance ?? 0,
|
|
747
|
+
detail: `${held.divergence?.detail ?? `matched request ${index}`}${note}`,
|
|
748
|
+
},
|
|
749
|
+
};
|
|
750
|
+
}
|
|
751
|
+
return undefined;
|
|
752
|
+
}
|
|
753
|
+
/**
|
|
754
|
+
* What had to be folded away for this request to compare equal — said in full, because "identical
|
|
755
|
+
* apart from 0 redacted values" is what a message reads like when it names only one of two folds.
|
|
756
|
+
*/
|
|
757
|
+
#foldedNote(index) {
|
|
758
|
+
const secrets = this.#secrets[index];
|
|
759
|
+
const images = this.#images[index];
|
|
760
|
+
const parts = [];
|
|
761
|
+
if (secrets > 0) {
|
|
762
|
+
parts.push(`${secrets} redacted ${secrets === 1 ? 'value' : 'values'}, ` +
|
|
763
|
+
'whose digests are salted per run');
|
|
764
|
+
}
|
|
765
|
+
if (images > 0)
|
|
766
|
+
parts.push(imageNote(images));
|
|
767
|
+
// Unreachable in practice — with neither fold applied the two forms are the hash rung 1
|
|
768
|
+
// compared — but a matcher that prints "identical apart from " is worse than one that says so.
|
|
769
|
+
return parts.length === 0 ? 'nothing this matcher can name' : parts.join(' and ');
|
|
770
|
+
}
|
|
771
|
+
/**
|
|
772
|
+
* The first unplayed recorded position this request is byte-identical to, if there is one.
|
|
773
|
+
*
|
|
774
|
+
* Reached by hash rather than by walking, so "anywhere ahead" costs the same as one comparison.
|
|
775
|
+
* The earliest candidate is taken: a recording that asked the same thing twice owes the answers
|
|
776
|
+
* back in the order it got them.
|
|
777
|
+
*/
|
|
778
|
+
#exactAhead(hash) {
|
|
779
|
+
for (const index of this.#byStrictHash.get(hash) ?? []) {
|
|
780
|
+
if (index > this.#cursor)
|
|
781
|
+
return index;
|
|
782
|
+
}
|
|
783
|
+
return undefined;
|
|
784
|
+
}
|
|
785
|
+
/**
|
|
786
|
+
* Positions a near-match may reach. Bounded: past this, a match is more likely a coincidence.
|
|
787
|
+
*
|
|
788
|
+
* Supersedes the fixed `#lookaheadLimit` this replaced: the window is a floor rather than a
|
|
789
|
+
* ceiling, and a run's own observed concurrency raises it.
|
|
790
|
+
*/
|
|
791
|
+
#nearAhead() {
|
|
792
|
+
const observed = this.#concurrency?.() ?? 0;
|
|
793
|
+
const window = Math.max(LOOKAHEAD, Number.isFinite(observed) ? observed : 0);
|
|
794
|
+
const limit = Math.min(this.#cursor + window, this.#recorded.length - 1);
|
|
795
|
+
const out = [];
|
|
796
|
+
for (let ahead = this.#cursor + 1; ahead <= limit; ahead += 1)
|
|
797
|
+
out.push(ahead);
|
|
798
|
+
return out;
|
|
799
|
+
}
|
|
800
|
+
/** Match against one recorded request, without moving the cursor. */
|
|
801
|
+
#matchAt(incoming, index) {
|
|
802
|
+
const recorded = this.#comparable[index];
|
|
803
|
+
// Rung 1 — canonical hash. Redacted the same way the recording was, but not folded: a request
|
|
804
|
+
// only counts as exact when nothing in it had to be approximated.
|
|
805
|
+
if (hashOf(redactedForm(incoming, this.#redactor)) === this.#strict[index]) {
|
|
806
|
+
return { matched: true, rung: 1, index };
|
|
807
|
+
}
|
|
808
|
+
const live = comparableRequest(incoming, this.#redactor);
|
|
809
|
+
const distance = leafDistance(live, recorded);
|
|
810
|
+
const size = JSON.stringify(recorded).length;
|
|
811
|
+
const images = this.#images[index];
|
|
812
|
+
// Rung 2a — identical everywhere the trace kept a comparable value. What differs is only what
|
|
813
|
+
// agenticreplay can neither reproduce nor rule out: a placeholder digest, salted per run, and an image,
|
|
814
|
+
// rendered again. Both are named rather than waved through — this is the ordinary shape of
|
|
815
|
+
// replaying a real harness, whose own prompt carries a session id and whose eyes are a camera.
|
|
816
|
+
if (distance === 0) {
|
|
817
|
+
return {
|
|
818
|
+
matched: true,
|
|
819
|
+
rung: 2,
|
|
820
|
+
index,
|
|
821
|
+
divergence: {
|
|
822
|
+
level: 'minor',
|
|
823
|
+
rung: 2,
|
|
824
|
+
distance: 0,
|
|
825
|
+
detail: `request ${index} is identical apart from ${this.#foldedNote(index)}`,
|
|
826
|
+
},
|
|
827
|
+
};
|
|
828
|
+
}
|
|
829
|
+
// Rung 2 — same position, same ask, small difference around it.
|
|
830
|
+
//
|
|
831
|
+
// The trailing-message condition is load-bearing, not belt-and-braces. Tolerance has an
|
|
832
|
+
// absolute floor, and on a short request that floor is a large fraction of the entire body —
|
|
833
|
+
// so without this, swapping the user's question for an unrelated one of similar length fell
|
|
834
|
+
// inside tolerance and was served the recorded answer under a `minor` label. Rung 2 exists for
|
|
835
|
+
// drift *around* the question: a regenerated id, a different cwd in the system prompt, a
|
|
836
|
+
// reordered tool list. A changed question is a different run, and it belongs at rung 4.
|
|
837
|
+
const askDrift = askDistance(live, recorded);
|
|
838
|
+
const sameAsk = askDrift <= askTolerance(recorded);
|
|
839
|
+
if (sameAsk &&
|
|
840
|
+
messageCount(live) === messageCount(recorded) &&
|
|
841
|
+
distance <= Math.max(64, size * MINOR_DISTANCE_RATIO)) {
|
|
842
|
+
return {
|
|
843
|
+
matched: true,
|
|
844
|
+
rung: 2,
|
|
845
|
+
index,
|
|
846
|
+
divergence: {
|
|
847
|
+
level: 'minor',
|
|
848
|
+
rung: 2,
|
|
849
|
+
distance,
|
|
850
|
+
detail: `request ${index} differs by ${distance} ${distance === 1 ? 'char' : 'chars'} ` +
|
|
851
|
+
`with an identical message count` +
|
|
852
|
+
(askDrift > 0 ? `, ${askDrift} of them in the trailing message` : '') +
|
|
853
|
+
(images === 0 ? '' : `, not counting ${imageNote(images)}`),
|
|
854
|
+
},
|
|
855
|
+
};
|
|
856
|
+
}
|
|
857
|
+
// Rung 3 — the ask is the same, the history is not. Typical after context compaction.
|
|
858
|
+
//
|
|
859
|
+
// "The history is not" has to mean the history. Compaction is the case this rung was written
|
|
860
|
+
// for, and compaction rewrites `messages`; what it never does is leave the message count
|
|
861
|
+
// untouched while replacing the system prompt. An indexing pipeline does exactly that — one
|
|
862
|
+
// fixed instruction as the only message, the document that varies carried in the system
|
|
863
|
+
// prompt — so every document's request is `sameAsk` against every other document's, and this
|
|
864
|
+
// rung handed each one whichever answer the cursor happened to be sitting on. Measured on 30
|
|
865
|
+
// real HotpotQA paragraphs at concurrency 10: 24 matched here, each served another
|
|
866
|
+
// paragraph's answer, and the run still exited 0.
|
|
867
|
+
//
|
|
868
|
+
// Requiring the counts to differ costs nothing that rung 2 does not already cover — a request
|
|
869
|
+
// whose history is the same length and whose ask is the same either fits inside rung 2's
|
|
870
|
+
// tolerance or is a different request — and it sends the indexing case to rung 4, where the
|
|
871
|
+
// lookahead can find its real answer instead of being handed a wrong one.
|
|
872
|
+
const historyDiffers = messageCount(live) !== messageCount(recorded);
|
|
873
|
+
if (sameAsk && historyDiffers) {
|
|
874
|
+
return {
|
|
875
|
+
matched: true,
|
|
876
|
+
rung: 3,
|
|
877
|
+
index,
|
|
878
|
+
divergence: {
|
|
879
|
+
level: 'major',
|
|
880
|
+
rung: 3,
|
|
881
|
+
distance,
|
|
882
|
+
detail: `request ${index} has ${askDrift === 0 ? 'an identical' : 'an equivalent'} trailing ` +
|
|
883
|
+
`message but a different prefix ` +
|
|
884
|
+
`(${messageCount(recorded)} recorded vs ${messageCount(live)} replayed)`,
|
|
885
|
+
},
|
|
886
|
+
};
|
|
887
|
+
}
|
|
888
|
+
// Rung 3 — every difference in this request is inside tool output. Halting here would make
|
|
889
|
+
// exact replay impossible for most real agents, since re-running a command reprints its own
|
|
890
|
+
// timings, and the drift accumulates: by the fifth turn the earlier results are in the prefix
|
|
891
|
+
// too. Serving the recorded answer is the useful thing to do, and a `major` divergence is the
|
|
892
|
+
// honest way to say so. Deliberately narrow — a changed *question*, or a check that went from
|
|
893
|
+
// failing to passing, moves this comparison and still falls through to rung 4.
|
|
894
|
+
// A message count that differs is already covered: `leafDistance` charges the full weight of
|
|
895
|
+
// any message only one side has, so it cannot come back zero.
|
|
896
|
+
if (leafDistance(withoutToolOutput(live), withoutToolOutput(recorded)) === 0) {
|
|
897
|
+
return {
|
|
898
|
+
matched: true,
|
|
899
|
+
rung: 3,
|
|
900
|
+
index,
|
|
901
|
+
divergence: {
|
|
902
|
+
level: 'major',
|
|
903
|
+
rung: 3,
|
|
904
|
+
distance,
|
|
905
|
+
detail: `request ${index} replayed against a different world: ` +
|
|
906
|
+
`only tool output differs (${distance} chars)`,
|
|
907
|
+
},
|
|
908
|
+
};
|
|
909
|
+
}
|
|
910
|
+
// Rung 4 — no match. Halt and report; the caller decides whether --loose continues live.
|
|
911
|
+
const missingTools = toolsOnlyInRecording(incoming, this.#recorded[index]);
|
|
912
|
+
return {
|
|
913
|
+
matched: false,
|
|
914
|
+
rung: 4,
|
|
915
|
+
index,
|
|
916
|
+
reason: `request ${index} does not match the recording ` +
|
|
917
|
+
`(distance ${distance}, ${messageCount(recorded)} recorded vs ` +
|
|
918
|
+
`${messageCount(live)} replayed messages)` +
|
|
919
|
+
(missingTools.length === 0
|
|
920
|
+
? ''
|
|
921
|
+
: `; the recording offered ${missingTools.length} tools this replay is not: ` +
|
|
922
|
+
`${missingTools.slice(0, 6).join(', ')}` +
|
|
923
|
+
`${missingTools.length > 6 ? ', …' : ''}` +
|
|
924
|
+
' — a session recorded through a terminal carries tools that need one'),
|
|
925
|
+
};
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
//# sourceMappingURL=matching.js.map
|