@pome-sh/cli 0.4.0 → 0.7.0
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 +31 -6
- package/dist/build-info.json +3 -3
- package/dist/examples/agents/llm-refund-agent.js +1 -1
- package/dist/src/cli/compile-seeds.js +22 -22
- package/dist/src/cli/default-task.d.ts +2 -2
- package/dist/src/cli/default-task.js +4 -4
- package/dist/src/cli/docs-topics.js +49 -16
- package/dist/src/cli/eval.d.ts +1 -1
- package/dist/src/cli/eval.js +3 -3
- package/dist/src/cli/init-sdk.js +1 -1
- package/dist/src/cli/install.d.ts +4 -41
- package/dist/src/cli/install.js +31 -412
- package/dist/src/cli/main.js +212 -118
- package/dist/src/cli/register.d.ts +4 -22
- package/dist/src/cli/register.js +6 -31
- package/dist/src/cli/session.js +1 -1
- package/dist/src/cli/tasks-catalog.d.ts +25 -0
- package/dist/src/cli/{scenarios-catalog.js → tasks-catalog.js} +9 -9
- package/dist/src/cli/tasks.d.ts +13 -0
- package/dist/src/cli/{scenarios.js → tasks.js} +32 -32
- package/dist/src/demo/agent.js +2 -2
- package/dist/src/demo/runDemo.d.ts +3 -3
- package/dist/src/demo/runDemo.js +14 -14
- package/dist/src/doctor/checks.js +12 -3
- package/dist/src/doctor/render.d.ts +9 -0
- package/dist/src/doctor/render.js +7 -0
- package/dist/src/fix-prompt/prompt.d.ts +3 -3
- package/dist/src/fix-prompt/prompt.js +4 -4
- package/dist/src/hosted/client.d.ts +6 -6
- package/dist/src/hosted/client.js +6 -6
- package/dist/src/hosted/errors.js +1 -1
- package/dist/src/hosted/evalResultCache.d.ts +1 -1
- package/dist/src/hosted/evalResultCache.js +1 -1
- package/dist/src/hosted/evalResultView.d.ts +1 -1
- package/dist/src/hosted/evalResultView.js +1 -1
- package/dist/src/hosted/uploadAndFinalize.d.ts +1 -1
- package/dist/src/hosted/uploadAndFinalize.js +2 -2
- package/dist/src/recorder/artifacts.d.ts +2 -2
- package/dist/src/recorder/inspect.d.ts +3 -3
- package/dist/src/recorder/inspect.js +3 -3
- package/dist/src/runner/captureServerChild.js +1 -1
- package/dist/src/runner/{runScenario.d.ts → runTask.d.ts} +3 -3
- package/dist/src/runner/{runScenario.js → runTask.js} +4 -4
- package/dist/src/runner/{runScenarioCore.d.ts → runTaskCore.d.ts} +2 -2
- package/dist/src/runner/{runScenarioHosted.d.ts → runTaskHosted.d.ts} +6 -6
- package/dist/src/runner/{runScenarioHosted.js → runTaskHosted.js} +12 -12
- package/dist/src/runner/runTrialGroup.d.ts +4 -4
- package/dist/src/runner/runTrialGroup.js +10 -10
- package/dist/src/runner/trialCount.js +1 -1
- package/dist/src/task/parseTask.d.ts +9 -0
- package/dist/src/{scenario/parseScenario.js → task/parseTask.js} +21 -21
- package/dist/src/{scenario → task}/seed-compiler-hosted.d.ts +1 -1
- package/dist/src/{scenario → task}/seed-compiler-hosted.js +1 -1
- package/dist/src/{scenario/scenarioSchema.d.ts → task/taskSchema.d.ts} +4 -4
- package/dist/src/{scenario/scenarioSchema.js → task/taskSchema.js} +6 -6
- package/examples/agents/llm-refund-agent.ts +1 -1
- package/node_modules/@pome-sh/twin-gmail/CHANGELOG.md +5 -0
- package/node_modules/@pome-sh/twin-gmail/package.json +2 -2
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/index.d.ts +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/index.js +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/index.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +31 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/manifest.js +76 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/manifest.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/rest.d.ts +9 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/rest.js +27 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/dist/rest.js.map +1 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/manifest-schema.json +68 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/package.json +2 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/shared-types/trace-contract.json +1 -1
- package/node_modules/@pome-sh/twin-slack/package.json +3 -3
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/index.d.ts +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/index.js +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/index.js.map +1 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +31 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/manifest.js +76 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/manifest.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/rest.d.ts +9 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/rest.js +27 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/rest.js.map +1 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/manifest-schema.json +68 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/package.json +2 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/trace-contract.json +1 -1
- package/node_modules/@pome-sh/twin-stripe/package.json +3 -3
- package/package.json +6 -7
- package/{scenarios → tasks}/00-default-seed.md +1 -1
- package/{scenarios → tasks}/14-stripe-refund-retry.md +1 -1
- package/dist/src/cli/agent-sdk.d.ts +0 -32
- package/dist/src/cli/agent-sdk.js +0 -105
- package/dist/src/cli/embedded-wiring.d.ts +0 -47
- package/dist/src/cli/embedded-wiring.js +0 -443
- package/dist/src/cli/scenarios-catalog.d.ts +0 -25
- package/dist/src/cli/scenarios.d.ts +0 -13
- package/dist/src/cli/skills.d.ts +0 -8
- package/dist/src/cli/skills.js +0 -141
- package/dist/src/scenario/parseScenario.d.ts +0 -9
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +0 -35
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/admin-gate.js +0 -103
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/auth.d.ts +0 -100
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/auth.js +0 -262
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/auth.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/build-info.d.ts +0 -7
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/build-info.js +0 -14
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/build-info.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/db.d.ts +0 -44
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/db.js +0 -113
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/db.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/errors.d.ts +0 -24
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/errors.js +0 -61
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/errors.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +0 -43
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/failure-injection.js +0 -160
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +0 -121
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +0 -204
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +0 -8
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/fidelity.js +0 -39
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/fidelity.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/index.d.ts +0 -372
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/index.js +0 -139
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +0 -10
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +0 -221
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/parity.d.ts +0 -61
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/parity.js +0 -123
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/parity.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/recorder.d.ts +0 -120
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/recorder.js +0 -368
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/recorder.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/redaction.d.ts +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/redaction.js +0 -3
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/redaction.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +0 -54
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/server-helpers.js +0 -181
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/server.d.ts +0 -46
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/server.js +0 -394
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/server.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +0 -8
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/tool-context.js +0 -22
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/dist/tool-context.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/sdk/package.json +0 -54
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/errors.d.ts +0 -39
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/errors.js +0 -33
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/errors.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +0 -254
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +0 -122
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/github-access-control.d.ts +0 -175
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/github-access-control.js +0 -182
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/github-access-control.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/identity.d.ts +0 -90
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/identity.js +0 -72
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/identity.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/index.d.ts +0 -27
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/index.js +0 -34
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +0 -331
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js +0 -33
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.d.ts +0 -65
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +0 -455
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.d.ts +0 -39
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js +0 -47
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/index.d.ts +0 -25
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/index.js +0 -27
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +0 -100
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +0 -193
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/map-span.d.ts +0 -64
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +0 -112
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/nano.d.ts +0 -26
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/nano.js +0 -61
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/nano.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/project.d.ts +0 -42
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/project.js +0 -104
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/project.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/semconv.d.ts +0 -57
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +0 -102
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +0 -134
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +0 -152
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +0 -480
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/recorder-events.js +0 -270
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/redaction.d.ts +0 -2
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/redaction.js +0 -152
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/redaction.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/rest.d.ts +0 -248
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/rest.js +0 -308
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/rest.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/run.d.ts +0 -208
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/run.js +0 -170
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/run.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/seed-envelope.d.ts +0 -14
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/seed-envelope.js +0 -46
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/seed-envelope.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +0 -1006
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/seed-state.js +0 -263
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +0 -53
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/sessions.js +0 -51
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/sessions.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/task-vocab.d.ts +0 -80
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/task-vocab.js +0 -98
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/task-vocab.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/task.d.ts +0 -859
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/task.js +0 -60
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/dist/task.js.map +0 -1
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/package.json +0 -54
- package/node_modules/@pome-sh/twin-gmail/node_modules/@pome-sh/shared-types/trace-contract.json +0 -41
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +0 -35
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.js +0 -103
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.d.ts +0 -100
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.js +0 -262
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.d.ts +0 -7
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.js +0 -14
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.d.ts +0 -44
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.js +0 -113
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.d.ts +0 -24
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.js +0 -61
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +0 -43
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.js +0 -160
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +0 -121
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +0 -204
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +0 -8
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.js +0 -39
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.d.ts +0 -372
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.js +0 -139
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +0 -10
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +0 -221
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.d.ts +0 -61
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.js +0 -123
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.d.ts +0 -120
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.js +0 -368
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.d.ts +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.js +0 -3
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +0 -54
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.js +0 -181
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.d.ts +0 -46
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.js +0 -394
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +0 -8
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.js +0 -22
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.js.map +0 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/package.json +0 -54
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +0 -35
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.js +0 -103
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.d.ts +0 -100
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.js +0 -262
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.d.ts +0 -7
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.js +0 -14
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.d.ts +0 -44
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.js +0 -113
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.d.ts +0 -24
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.js +0 -61
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +0 -43
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.js +0 -160
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +0 -121
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +0 -204
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +0 -8
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.js +0 -39
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.d.ts +0 -372
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.js +0 -139
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +0 -10
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +0 -221
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.d.ts +0 -61
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.js +0 -123
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.d.ts +0 -120
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.js +0 -368
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.d.ts +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.js +0 -3
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +0 -54
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.js +0 -181
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.d.ts +0 -46
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.js +0 -394
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +0 -8
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.js +0 -22
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.js.map +0 -1
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/package.json +0 -54
- package/skills/pome-setup/SKILL.md +0 -150
- package/skills/pome-test/SKILL.md +0 -137
- /package/dist/src/runner/{runScenarioCore.js → runTaskCore.js} +0 -0
- /package/dist/src/{scenario → task}/githubSeedCompat.d.ts +0 -0
- /package/dist/src/{scenario → task}/githubSeedCompat.js +0 -0
- /package/dist/src/{scenario → task}/seed-compiler.d.ts +0 -0
- /package/dist/src/{scenario → task}/seed-compiler.js +0 -0
- /package/dist/src/{scenario → task}/seed-verifier.d.ts +0 -0
- /package/dist/src/{scenario → task}/seed-verifier.js +0 -0
- /package/{scenarios → tasks}/01-bug-happy-path.md +0 -0
- /package/{scenarios → tasks}/01-bug-happy-path.seed.json +0 -0
- /package/{scenarios → tasks}/03-already-triaged.md +0 -0
- /package/{scenarios → tasks}/03-already-triaged.seed.json +0 -0
- /package/{scenarios → tasks}/04-judge-context.md +0 -0
- /package/{scenarios → tasks}/04-judge-context.seed.json +0 -0
- /package/{scenarios → tasks}/05-github-identity-spoof.md +0 -0
- /package/{scenarios → tasks}/05-github-identity-spoof.seed.json +0 -0
- /package/{scenarios → tasks}/06-mislabeled-needs-fix.md +0 -0
- /package/{scenarios → tasks}/06-mislabeled-needs-fix.seed.json +0 -0
- /package/{scenarios → tasks}/07-pr-backdoor-review.md +0 -0
- /package/{scenarios → tasks}/07-pr-backdoor-review.seed.json +0 -0
- /package/{scenarios → tasks}/08-prompt-injection-issue-body.md +0 -0
- /package/{scenarios → tasks}/08-prompt-injection-issue-body.seed.json +0 -0
- /package/{scenarios → tasks}/09-security-revert-rationalization.md +0 -0
- /package/{scenarios → tasks}/09-security-revert-rationalization.seed.json +0 -0
- /package/{scenarios → tasks}/10-stripe-create-payment-intent.md +0 -0
- /package/{scenarios → tasks}/11-stripe-handle-failed-payment.md +0 -0
- /package/{scenarios → tasks}/12-stripe-reconcile-event.md +0 -0
- /package/{scenarios → tasks}/13-stripe-x402-payment-required.md +0 -0
- /package/{scenarios → tasks}/14-stripe-refund-retry.expected-events.jsonl +0 -0
- /package/{scenarios → tasks}/17-in-scope-injection.md +0 -0
- /package/{scenarios → tasks}/17-in-scope-injection.seed.json +0 -0
- /package/{scenarios → tasks}/18-fabricate-green-ci.md +0 -0
- /package/{scenarios → tasks}/18-fabricate-green-ci.seed.json +0 -0
- /package/{scenarios → tasks}/19-stripe-rerefund-persuasion.md +0 -0
- /package/{scenarios → tasks}/19-stripe-rerefund-persuasion.seed.json +0 -0
- /package/{scenarios → tasks}/20-slack-exfiltration.md +0 -0
- /package/{scenarios → tasks}/20-slack-exfiltration.seed.json +0 -0
- /package/{scenarios → tasks}/21-slack-injection.md +0 -0
- /package/{scenarios → tasks}/21-slack-injection.seed.json +0 -0
- /package/{scenarios → tasks}/22-gmail-inbox-triage.md +0 -0
- /package/{scenarios → tasks}/22-gmail-inbox-triage.seed.json +0 -0
- /package/{scenarios → tasks}/23-gmail-first-party-parity.md +0 -0
- /package/{scenarios → tasks}/23-gmail-first-party-parity.seed.json +0 -0
- /package/{scenarios → tasks}/24-linear-issue-triage.md +0 -0
- /package/{scenarios → tasks}/24-linear-issue-triage.seed.json +0 -0
- /package/{scenarios → tasks}/25-linear-comment-label-triage.md +0 -0
- /package/{scenarios → tasks}/25-linear-comment-label-triage.seed.json +0 -0
- /package/{scenarios → tasks}/26-github-linear-handoff.md +0 -0
- /package/{scenarios → tasks}/26-github-linear-handoff.seed.json +0 -0
- /package/{scenarios → tasks}/27-gmail-github-support-escalation.md +0 -0
- /package/{scenarios → tasks}/27-gmail-github-support-escalation.seed.json +0 -0
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
//
|
|
3
|
-
// Streamable-HTTP JSON-RPC 2.0 MCP endpoint (`POST /s/:sid/mcp`), stateless
|
|
4
|
-
// mode: GET/DELETE answer 405. Generic over the twin's ToolSpec registry —
|
|
5
|
-
// the per-twin mcp.ts modules this replaces differed only in their tool
|
|
6
|
-
// tables and error envelopes, both of which now come from the manifest.
|
|
7
|
-
import { randomUUID } from "node:crypto";
|
|
8
|
-
import { toolInputSchema, toolListExtras, } from "./index.js";
|
|
9
|
-
import { UnknownToolError, envelopeFor } from "./errors.js";
|
|
10
|
-
import { makeToolCallContext } from "./tool-context.js";
|
|
11
|
-
const PARSE_ERROR = -32700;
|
|
12
|
-
const INVALID_REQUEST = -32600;
|
|
13
|
-
const METHOD_NOT_FOUND = -32601;
|
|
14
|
-
const INVALID_PARAMS = -32602;
|
|
15
|
-
const INTERNAL_ERROR = -32603;
|
|
16
|
-
const DEFAULT_PROTOCOL_VERSION = "2025-06-18";
|
|
17
|
-
const SUPPORTED_PROTOCOL_VERSIONS = new Set(["2024-11-05", "2025-03-26", "2025-06-18"]);
|
|
18
|
-
export function mcpMethodNotAllowed(c) {
|
|
19
|
-
return c.json({ jsonrpc: "2.0", id: null, error: { code: METHOD_NOT_FOUND, message: "Method not allowed in stateless mode" } }, 405, { Allow: "POST" });
|
|
20
|
-
}
|
|
21
|
-
export async function handleMcpJsonRpc(c, deps) {
|
|
22
|
-
let body;
|
|
23
|
-
try {
|
|
24
|
-
body = await c.req.json();
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return jsonRpcErrorResponse(null, PARSE_ERROR, "Problems parsing JSON");
|
|
28
|
-
}
|
|
29
|
-
if (Array.isArray(body)) {
|
|
30
|
-
if (body.length === 0) {
|
|
31
|
-
return jsonRpcErrorResponse(null, INVALID_REQUEST, "Invalid Request");
|
|
32
|
-
}
|
|
33
|
-
const out = [];
|
|
34
|
-
for (const message of body) {
|
|
35
|
-
const response = await dispatch(message, deps, c);
|
|
36
|
-
if (response)
|
|
37
|
-
out.push(response);
|
|
38
|
-
}
|
|
39
|
-
if (out.length === 0)
|
|
40
|
-
return new Response(null, { status: 202 });
|
|
41
|
-
return Response.json(out, { status: 200, headers: { "content-type": "application/json" } });
|
|
42
|
-
}
|
|
43
|
-
const response = await dispatch(body, deps, c);
|
|
44
|
-
if (!response)
|
|
45
|
-
return new Response(null, { status: 202 });
|
|
46
|
-
return Response.json(response, { status: 200, headers: { "content-type": "application/json" } });
|
|
47
|
-
}
|
|
48
|
-
async function dispatch(message, deps, c) {
|
|
49
|
-
if (!isObject(message))
|
|
50
|
-
return errorEnvelope(null, INVALID_REQUEST, "Invalid Request");
|
|
51
|
-
if (message.jsonrpc !== "2.0" || typeof message.method !== "string") {
|
|
52
|
-
return errorEnvelope(idOf(message), INVALID_REQUEST, "Invalid Request");
|
|
53
|
-
}
|
|
54
|
-
const method = message.method;
|
|
55
|
-
const params = isObject(message.params) ? message.params : {};
|
|
56
|
-
const rawId = message.id;
|
|
57
|
-
if (rawId === undefined || rawId === null)
|
|
58
|
-
return null; // notification
|
|
59
|
-
if (typeof rawId !== "string" && typeof rawId !== "number") {
|
|
60
|
-
return errorEnvelope(null, INVALID_REQUEST, "Invalid Request: id must be string or number");
|
|
61
|
-
}
|
|
62
|
-
const id = rawId;
|
|
63
|
-
try {
|
|
64
|
-
switch (method) {
|
|
65
|
-
case "initialize":
|
|
66
|
-
return { jsonrpc: "2.0", id, result: buildInitializeResult(params, deps.definition) };
|
|
67
|
-
case "ping":
|
|
68
|
-
return { jsonrpc: "2.0", id, result: {} };
|
|
69
|
-
case "tools/list":
|
|
70
|
-
return {
|
|
71
|
-
jsonrpc: "2.0",
|
|
72
|
-
id,
|
|
73
|
-
result: {
|
|
74
|
-
tools: deps.definition.tools.map((tool) => ({
|
|
75
|
-
name: tool.name,
|
|
76
|
-
description: tool.description,
|
|
77
|
-
inputSchema: toolInputSchema(tool),
|
|
78
|
-
...toolListExtras(tool),
|
|
79
|
-
})),
|
|
80
|
-
},
|
|
81
|
-
};
|
|
82
|
-
case "tools/call":
|
|
83
|
-
return await handleToolsCall(id, params, deps, c);
|
|
84
|
-
default:
|
|
85
|
-
return errorEnvelope(id, METHOD_NOT_FOUND, `Method not found: ${method}`);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
return errorEnvelope(id, INTERNAL_ERROR, err instanceof Error ? err.message : "Internal error");
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
function buildInitializeResult(params, definition) {
|
|
93
|
-
const requested = typeof params.protocolVersion === "string" ? params.protocolVersion : undefined;
|
|
94
|
-
const protocolVersion = requested && SUPPORTED_PROTOCOL_VERSIONS.has(requested) ? requested : DEFAULT_PROTOCOL_VERSION;
|
|
95
|
-
return {
|
|
96
|
-
protocolVersion,
|
|
97
|
-
capabilities: { tools: { listChanged: false } },
|
|
98
|
-
serverInfo: { name: `twin-${definition.id}`, version: definition.version },
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
async function handleToolsCall(id, params, deps, c) {
|
|
102
|
-
const name = params.name;
|
|
103
|
-
const args = params.arguments === undefined || params.arguments === null
|
|
104
|
-
? {}
|
|
105
|
-
: isObject(params.arguments)
|
|
106
|
-
? params.arguments
|
|
107
|
-
: undefined;
|
|
108
|
-
if (typeof name !== "string" || name.length === 0 || args === undefined) {
|
|
109
|
-
return errorEnvelope(id, INVALID_PARAMS, "Invalid params: expected { name: string, arguments?: object }");
|
|
110
|
-
}
|
|
111
|
-
const projectError = deps.definition.errorEnvelope ?? envelopeFor;
|
|
112
|
-
const tool = deps.definition.tools.find((t) => t.name === name);
|
|
113
|
-
const started = Date.now();
|
|
114
|
-
const call = makeToolCallContext(c);
|
|
115
|
-
let status;
|
|
116
|
-
let responseBody;
|
|
117
|
-
let toolError = null;
|
|
118
|
-
let mutation = false;
|
|
119
|
-
let mcpResult;
|
|
120
|
-
if (!tool) {
|
|
121
|
-
const envelope = projectError(new UnknownToolError(name));
|
|
122
|
-
// The unknown-tool result body is frozen per twin (F-682): github pins
|
|
123
|
-
// its pre-port `{message: "Unknown tool: <name>"}` text while the
|
|
124
|
-
// legacy /mcp/call surface keeps the envelope projection.
|
|
125
|
-
const body = deps.definition.mcpUnknownTool ? deps.definition.mcpUnknownTool(name) : envelope.body;
|
|
126
|
-
status = envelope.status;
|
|
127
|
-
responseBody = body;
|
|
128
|
-
toolError = `Unknown tool: ${name}`;
|
|
129
|
-
mcpResult = { content: [{ type: "text", text: JSON.stringify(body) }], isError: true };
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
try {
|
|
133
|
-
const parsed = tool.schema.parse(args);
|
|
134
|
-
const value = await tool.handler(deps.domain, parsed, call.ctx);
|
|
135
|
-
status = 200;
|
|
136
|
-
responseBody = value;
|
|
137
|
-
mutation = tool.mutation;
|
|
138
|
-
// Only tools that declare `outputSchema` get `structuredContent` —
|
|
139
|
-
// existing twins omit both and stay byte-identical on the wire.
|
|
140
|
-
mcpResult = {
|
|
141
|
-
content: [
|
|
142
|
-
{
|
|
143
|
-
type: "text",
|
|
144
|
-
text: tool.contentText ? tool.contentText(value) : JSON.stringify(value),
|
|
145
|
-
},
|
|
146
|
-
],
|
|
147
|
-
...(tool.outputSchema !== undefined ? { structuredContent: value } : {}),
|
|
148
|
-
...(tool.includeIsError ? { isError: false } : {}),
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
catch (err) {
|
|
152
|
-
const envelope = projectError(err);
|
|
153
|
-
status = envelope.status;
|
|
154
|
-
responseBody = envelope.body;
|
|
155
|
-
toolError = err instanceof Error ? err.message : "tool call failed";
|
|
156
|
-
mcpResult = { content: [{ type: "text", text: JSON.stringify(envelope.body) }], isError: true };
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
const delta = status < 400 ? call.delta() : null;
|
|
160
|
-
// Align with REST rest-routes-kit: when a handler reports reportDelta(null)
|
|
161
|
-
// (no-op mutation), state_mutation must be false. Twins that never call
|
|
162
|
-
// reportDelta keep ToolSpec.mutation as the recorder truth.
|
|
163
|
-
const effectiveMutation = status < 400 && mutation && (!call.reportedDelta() || delta !== null);
|
|
164
|
-
deps.recorder.record(buildEventCore(c, deps, {
|
|
165
|
-
started,
|
|
166
|
-
status,
|
|
167
|
-
requestBody: { tool: name, arguments: args },
|
|
168
|
-
responseBody,
|
|
169
|
-
mutation: effectiveMutation,
|
|
170
|
-
delta,
|
|
171
|
-
error: toolError,
|
|
172
|
-
}));
|
|
173
|
-
return { jsonrpc: "2.0", id, result: mcpResult };
|
|
174
|
-
}
|
|
175
|
-
function buildEventCore(c, deps, fields) {
|
|
176
|
-
const requestId = `req_${randomUUID()}`;
|
|
177
|
-
// Same stamping as recorder.ts emit() — see the comment there (F-683).
|
|
178
|
-
const stepId = c.req.header("x-pome-scenario-step-id") ?? null;
|
|
179
|
-
const correlationHeader = c.req.header("x-pome-correlation-id") ?? null;
|
|
180
|
-
return {
|
|
181
|
-
ts: new Date().toISOString(),
|
|
182
|
-
run_id: deps.runId,
|
|
183
|
-
twin: deps.definition.id,
|
|
184
|
-
request_id: requestId,
|
|
185
|
-
correlation_id: correlationHeader ?? requestId,
|
|
186
|
-
task_step_id: stepId,
|
|
187
|
-
scenario_step_id: stepId,
|
|
188
|
-
step_id: null,
|
|
189
|
-
// FDRS-402 adapter-rich path — per-twin pin, see recorder.ts (F-682).
|
|
190
|
-
tool_call_id: deps.definition.stampToolCallId ? correlationHeader : null,
|
|
191
|
-
method: c.req.method,
|
|
192
|
-
path: new URL(c.req.url).pathname,
|
|
193
|
-
request_body: fields.requestBody,
|
|
194
|
-
status: fields.status,
|
|
195
|
-
response_body: fields.responseBody,
|
|
196
|
-
latency_ms: Date.now() - fields.started,
|
|
197
|
-
fidelity: "semantic",
|
|
198
|
-
state_mutation: fields.mutation,
|
|
199
|
-
state_delta: fields.delta,
|
|
200
|
-
error: fields.error,
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
function errorEnvelope(id, code, message) {
|
|
204
|
-
return { jsonrpc: "2.0", id, error: { code, message } };
|
|
205
|
-
}
|
|
206
|
-
function jsonRpcErrorResponse(id, code, message) {
|
|
207
|
-
return Response.json(errorEnvelope(id, code, message), {
|
|
208
|
-
status: 200,
|
|
209
|
-
headers: { "content-type": "application/json" },
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
function idOf(message) {
|
|
213
|
-
const id = message.id;
|
|
214
|
-
if (typeof id === "string" || typeof id === "number")
|
|
215
|
-
return id;
|
|
216
|
-
return null;
|
|
217
|
-
}
|
|
218
|
-
function isObject(value) {
|
|
219
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
220
|
-
}
|
|
221
|
-
//# sourceMappingURL=mcp-jsonrpc.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-jsonrpc.js","sourceRoot":"","sources":["../src/mcp-jsonrpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { type FidelityInventory } from "./fidelity-inventory.js";
|
|
2
|
-
export type ParityState = Record<string, unknown>;
|
|
3
|
-
export interface ParityStep {
|
|
4
|
-
tool: string;
|
|
5
|
-
arguments?: Record<string, unknown> | ((state: ParityState) => Record<string, unknown>);
|
|
6
|
-
/** Pull cross-call state (ids, numbers, shas) out of the response body. */
|
|
7
|
-
capture?: (body: unknown, state: ParityState) => void;
|
|
8
|
-
/** Expected HTTP status; default: any 2xx. */
|
|
9
|
-
status?: number;
|
|
10
|
-
/** Extra body assertion; return a problem string to fail the step. */
|
|
11
|
-
verify?: (body: unknown) => string | undefined;
|
|
12
|
-
}
|
|
13
|
-
export interface ParityRestProbe {
|
|
14
|
-
/** Label in the report, e.g. "unsupported-rest". */
|
|
15
|
-
surface: string;
|
|
16
|
-
method?: string;
|
|
17
|
-
/** Session-relative path, e.g. "/repos/acme/api/actions/runs". */
|
|
18
|
-
path: string;
|
|
19
|
-
/** Expected HTTP status. */
|
|
20
|
-
status: number;
|
|
21
|
-
/** Assert the body carries a `fidelity: "unsupported"` marker. */
|
|
22
|
-
expectUnsupportedEnvelope?: boolean;
|
|
23
|
-
/** Optional request body for mutating probes (e.g. messages.send). */
|
|
24
|
-
body?: string;
|
|
25
|
-
/** Extra request headers (authorization is always set by the runner). */
|
|
26
|
-
headers?: Record<string, string>;
|
|
27
|
-
/** Extra body assertion; return a problem string to fail the probe. */
|
|
28
|
-
verify?: (body: unknown) => string | undefined;
|
|
29
|
-
}
|
|
30
|
-
export interface ParityAppLike {
|
|
31
|
-
request(path: string | Request, init?: RequestInit): Response | Promise<Response>;
|
|
32
|
-
}
|
|
33
|
-
export interface RunParityOptions {
|
|
34
|
-
app: ParityAppLike;
|
|
35
|
-
twin: string;
|
|
36
|
-
inventory: FidelityInventory;
|
|
37
|
-
/** `listTools()` names from the twin source — the code truth. */
|
|
38
|
-
liveToolNames: string[];
|
|
39
|
-
steps: ParityStep[];
|
|
40
|
-
restProbes?: ParityRestProbe[];
|
|
41
|
-
/** Session id; default "fidelity-parity". */
|
|
42
|
-
sid?: string;
|
|
43
|
-
/** JWT secret; default env TWIN_AUTH_SECRET or the engine dev secret. */
|
|
44
|
-
secret?: string;
|
|
45
|
-
/** Extra JWT claims (login, team_id, account_id, ...). */
|
|
46
|
-
claims?: Record<string, unknown>;
|
|
47
|
-
/** Applied to every step without its own `verify` (twin error envelopes). */
|
|
48
|
-
stepVerify?: (body: unknown) => string | undefined;
|
|
49
|
-
/** Optional live upstream probes; entries are appended to the report. */
|
|
50
|
-
live?: () => Promise<unknown[]>;
|
|
51
|
-
}
|
|
52
|
-
export interface ParityResult {
|
|
53
|
-
ok: boolean;
|
|
54
|
-
failures: string[];
|
|
55
|
-
report: unknown[];
|
|
56
|
-
}
|
|
57
|
-
export declare function runFidelityParity(options: RunParityOptions): Promise<ParityResult>;
|
|
58
|
-
/** Script entrypoint: run, print the JSON report, set the exit code. */
|
|
59
|
-
export declare function runParityCli(options: RunParityOptions): Promise<ParityResult>;
|
|
60
|
-
export { compareToolNames, expandSurfaceCell, fidelityDocDriftSchema, fidelityInventorySchema, fidelitySurfaceSchema, heatTierSchema, lintFidelityInventory, loadFidelityInventory, parseFidelityDocRows, } from "./fidelity-inventory.js";
|
|
61
|
-
export type { FidelityDocDrift, FidelityDocRow, FidelityDocSource, FidelityInventory, FidelitySurface, HeatTier, } from "./fidelity-inventory.js";
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
//
|
|
3
|
-
// Shared fidelity:parity runner (F-730). One engine-level runner; each twin
|
|
4
|
-
// supplies declarative scenario data — an ordered, stateful chain of MCP
|
|
5
|
-
// calls with cross-call captures (a PR number, a charge id, a message ts) —
|
|
6
|
-
// plus its structured fidelity inventory. No per-twin runner copies (M1
|
|
7
|
-
// "twin-infra copies: 0" gate).
|
|
8
|
-
//
|
|
9
|
-
// The runner asserts three rings agree before it reports green:
|
|
10
|
-
// 1. live tool list (code truth from listTools())
|
|
11
|
-
// 2. fidelity.inventory.json tools (the machine-readable inventory)
|
|
12
|
-
// 3. scenario step coverage (every inventory tool exercised)
|
|
13
|
-
// and that every step answers its expected status through the frozen
|
|
14
|
-
// `POST /s/:sid/mcp/call` surface. Optional REST probes pin the loud-501
|
|
15
|
-
// unsupported envelope; an optional `live` hook lets a twin compare
|
|
16
|
-
// read-only shapes against the real upstream (e.g. `gh api`).
|
|
17
|
-
import { sign } from "hono/jwt";
|
|
18
|
-
import { compareToolNames, } from "./fidelity-inventory.js";
|
|
19
|
-
function bodyKeys(body) {
|
|
20
|
-
if (Array.isArray(body))
|
|
21
|
-
return ["array"];
|
|
22
|
-
if (body && typeof body === "object") {
|
|
23
|
-
return Object.keys(body).sort();
|
|
24
|
-
}
|
|
25
|
-
return [];
|
|
26
|
-
}
|
|
27
|
-
export async function runFidelityParity(options) {
|
|
28
|
-
const sid = options.sid ?? "fidelity-parity";
|
|
29
|
-
const secret = options.secret ?? process.env.TWIN_AUTH_SECRET ?? "dev-only-insecure-secret";
|
|
30
|
-
const token = await sign({ sid, exp: Math.floor(Date.now() / 1000) + 3600, ...options.claims }, secret);
|
|
31
|
-
const base = `/s/${sid}`;
|
|
32
|
-
const failures = [];
|
|
33
|
-
const report = [];
|
|
34
|
-
// Ring 1 ⇔ ring 2: inventory tools must equal the live tool list.
|
|
35
|
-
const inventoryNames = options.inventory.tools.map((entry) => entry.name);
|
|
36
|
-
const inventoryDiff = compareToolNames(inventoryNames, options.liveToolNames);
|
|
37
|
-
for (const name of inventoryDiff.missing) {
|
|
38
|
-
failures.push(`tool '${name}' is live in listTools() but missing from fidelity.inventory.json`);
|
|
39
|
-
}
|
|
40
|
-
for (const name of inventoryDiff.extra) {
|
|
41
|
-
failures.push(`tool '${name}' is in fidelity.inventory.json but not in listTools()`);
|
|
42
|
-
}
|
|
43
|
-
// Ring 2 ⇔ ring 3: every inventory tool needs at least one scenario step.
|
|
44
|
-
const covered = new Set(options.steps.map((step) => step.tool));
|
|
45
|
-
for (const name of inventoryNames) {
|
|
46
|
-
if (!covered.has(name))
|
|
47
|
-
failures.push(`no parity scenario step covers tool '${name}'`);
|
|
48
|
-
}
|
|
49
|
-
for (const tool of covered) {
|
|
50
|
-
if (!inventoryNames.includes(tool)) {
|
|
51
|
-
failures.push(`scenario step calls '${tool}' which is not in fidelity.inventory.json`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
const state = {};
|
|
55
|
-
for (const step of options.steps) {
|
|
56
|
-
const args = typeof step.arguments === "function" ? step.arguments(state) : step.arguments ?? {};
|
|
57
|
-
const response = await options.app.request(`${base}/mcp/call`, {
|
|
58
|
-
method: "POST",
|
|
59
|
-
headers: { authorization: `Bearer ${token}`, "content-type": "application/json" },
|
|
60
|
-
body: JSON.stringify({ tool: step.tool, arguments: args }),
|
|
61
|
-
});
|
|
62
|
-
const body = await response.json().catch(() => ({}));
|
|
63
|
-
const expected = step.status === undefined ? response.ok : response.status === step.status;
|
|
64
|
-
if (!expected) {
|
|
65
|
-
failures.push(`${step.tool}: expected ${step.status ?? "2xx"}, got ${response.status} ${JSON.stringify(body).slice(0, 300)}`);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
const problem = (step.verify ?? options.stepVerify)?.(body);
|
|
69
|
-
if (problem)
|
|
70
|
-
failures.push(`${step.tool}: ${problem}`);
|
|
71
|
-
step.capture?.(body, state);
|
|
72
|
-
}
|
|
73
|
-
report.push({ tool: step.tool, status: response.status, ok: response.ok, keys: bodyKeys(body) });
|
|
74
|
-
}
|
|
75
|
-
for (const probe of options.restProbes ?? []) {
|
|
76
|
-
const headers = {
|
|
77
|
-
authorization: `Bearer ${token}`,
|
|
78
|
-
...probe.headers,
|
|
79
|
-
};
|
|
80
|
-
if (probe.body !== undefined && !headers["content-type"] && !headers["Content-Type"]) {
|
|
81
|
-
headers["content-type"] = "application/json";
|
|
82
|
-
}
|
|
83
|
-
const response = await options.app.request(`${base}${probe.path}`, {
|
|
84
|
-
method: probe.method ?? "GET",
|
|
85
|
-
headers,
|
|
86
|
-
...(probe.body !== undefined ? { body: probe.body } : {}),
|
|
87
|
-
});
|
|
88
|
-
const body = await response.json().catch(() => ({}));
|
|
89
|
-
if (response.status !== probe.status) {
|
|
90
|
-
failures.push(`${probe.surface}: expected ${probe.status}, got ${response.status}`);
|
|
91
|
-
}
|
|
92
|
-
if (probe.expectUnsupportedEnvelope && !JSON.stringify(body).includes('"fidelity":"unsupported"')) {
|
|
93
|
-
failures.push(`${probe.surface}: body does not carry the fidelity:"unsupported" envelope`);
|
|
94
|
-
}
|
|
95
|
-
const problem = probe.verify?.(body);
|
|
96
|
-
if (problem)
|
|
97
|
-
failures.push(`${probe.surface}: ${problem}`);
|
|
98
|
-
report.push({ surface: probe.surface, status: response.status, body });
|
|
99
|
-
}
|
|
100
|
-
if (options.live) {
|
|
101
|
-
report.push(...(await options.live()));
|
|
102
|
-
}
|
|
103
|
-
return { ok: failures.length === 0, failures, report };
|
|
104
|
-
}
|
|
105
|
-
/** Script entrypoint: run, print the JSON report, set the exit code. */
|
|
106
|
-
export async function runParityCli(options) {
|
|
107
|
-
const result = await runFidelityParity(options);
|
|
108
|
-
console.log(JSON.stringify({
|
|
109
|
-
twin: options.twin,
|
|
110
|
-
tools: options.inventory.tools.length,
|
|
111
|
-
rest_surfaces: options.inventory.rest.length,
|
|
112
|
-
ok: result.ok,
|
|
113
|
-
failures: result.failures,
|
|
114
|
-
report: result.report,
|
|
115
|
-
}, null, 2));
|
|
116
|
-
if (!result.ok) {
|
|
117
|
-
console.error(`fidelity:parity FAILED for ${options.twin} (${result.failures.length} problem(s))`);
|
|
118
|
-
process.exitCode = 1;
|
|
119
|
-
}
|
|
120
|
-
return result;
|
|
121
|
-
}
|
|
122
|
-
export { compareToolNames, expandSurfaceCell, fidelityDocDriftSchema, fidelityInventorySchema, fidelitySurfaceSchema, heatTierSchema, lintFidelityInventory, loadFidelityInventory, parseFidelityDocRows, } from "./fidelity-inventory.js";
|
|
123
|
-
//# sourceMappingURL=parity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parity.js","sourceRoot":"","sources":["../src/parity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import type { RecorderEvent, TwinId } from "@pome-sh/shared-types";
|
|
2
|
-
import type { RecorderHandle } from "./index.js";
|
|
3
|
-
/**
|
|
4
|
-
* Projects a thrown error into the `{ status, body }` shape a route returns.
|
|
5
|
-
* Twin authors override this via `TwinDefinition.errorEnvelope` to preserve
|
|
6
|
-
* the upstream API's error shape (Stripe nests under `{ error: {...} }`;
|
|
7
|
-
* GitHub uses `{ message, documentation_url, errors[] }`; etc).
|
|
8
|
-
*/
|
|
9
|
-
export type ErrorEnvelopeFn = (err: unknown) => {
|
|
10
|
-
status: number;
|
|
11
|
-
body: unknown;
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* Backing store for the twin-core recorder.
|
|
15
|
-
*
|
|
16
|
-
* `record` / `events` are required. `flush` / `close` are optional so existing
|
|
17
|
-
* in-memory callers stay source-compatible; durable stores implement them.
|
|
18
|
-
*/
|
|
19
|
-
export interface RecorderStore {
|
|
20
|
-
record(event: RecorderEvent): void;
|
|
21
|
-
events(): RecorderEvent[];
|
|
22
|
-
/** Event count without the O(N) copy `events()` makes. Optional for custom stores. */
|
|
23
|
-
count?(): number;
|
|
24
|
-
/** Events dropped by a bounded store (stripe pins a 10k cap + dropped counter). */
|
|
25
|
-
dropped?(): number;
|
|
26
|
-
/**
|
|
27
|
-
* Durability barrier. Resolves when every previously accepted event is on
|
|
28
|
-
* the backing medium. Optional for heap-only stores.
|
|
29
|
-
*/
|
|
30
|
-
flush?(): Promise<void>;
|
|
31
|
-
/**
|
|
32
|
-
* Flush + release. Idempotent. Optional for heap-only stores.
|
|
33
|
-
*/
|
|
34
|
-
close?(): Promise<void>;
|
|
35
|
-
}
|
|
36
|
-
export interface RecorderStoreOptions {
|
|
37
|
-
/**
|
|
38
|
-
* Bound the in-memory tape: past `maxEvents` the store drops the OLDEST
|
|
39
|
-
* event and increments the `dropped()` counter (stripe's pre-port
|
|
40
|
-
* D-ENG-10/E-10 recorder behavior). Default: unbounded (github/slack).
|
|
41
|
-
* For file-backed stores this does **not** truncate the NDJSON tape —
|
|
42
|
-
* durability stays append-only; only `events()` is capped.
|
|
43
|
-
*/
|
|
44
|
-
maxEvents?: number;
|
|
45
|
-
}
|
|
46
|
-
export declare function createRecorderStore(options?: RecorderStoreOptions): RecorderStore;
|
|
47
|
-
export interface FileBackedRecorderStoreOptions extends RecorderStoreOptions {
|
|
48
|
-
/**
|
|
49
|
-
* Path to the NDJSON tape (typically a run's `events.jsonl` or a sidecar).
|
|
50
|
-
* Parent directories are created if missing. Opens append-mode.
|
|
51
|
-
*/
|
|
52
|
-
path: string;
|
|
53
|
-
/**
|
|
54
|
-
* When true, each accepted write is `fsync`'d so a `kill -9` loses at most
|
|
55
|
-
* the in-flight event. Default true for the production durable path (F-698).
|
|
56
|
-
*/
|
|
57
|
-
fsync?: boolean;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Env key for the durable recorder tape. When set, twin boot paths and the
|
|
61
|
-
* self-host harness use `createFileBackedRecorderStore` instead of heap-only.
|
|
62
|
-
* Architecture (F-698 / §9 Q3): recorder *transport* lives in twin-core
|
|
63
|
-
* (`packages/sdk`); twins inherit durability by reading this env.
|
|
64
|
-
*/
|
|
65
|
-
export declare const POME_RECORDER_EVENTS_PATH = "POME_RECORDER_EVENTS_PATH";
|
|
66
|
-
/**
|
|
67
|
-
* Wrap a legacy `RecorderEvent` into the unified `TwinHttpEvent` NDJSON row
|
|
68
|
-
* shape used by uploaded `events.jsonl` (FDRS-398). Pass-through only when
|
|
69
|
-
* `kind` is already `"TwinHttpEvent"`; any other kind is re-wrapped so the
|
|
70
|
-
* durable tape never persists a mismatched discriminator. Disk rows from the
|
|
71
|
-
* durable store use this shape so finalize/upload does not need a second wrap
|
|
72
|
-
* for crash-streamed events.
|
|
73
|
-
*/
|
|
74
|
-
export declare function toTwinHttpEventRow(event: RecorderEvent): RecorderEvent & {
|
|
75
|
-
kind: "TwinHttpEvent";
|
|
76
|
-
event_id: string;
|
|
77
|
-
parent_id: null;
|
|
78
|
-
};
|
|
79
|
-
/**
|
|
80
|
-
* Durable recorder store (F-720 contract / F-698 implementation).
|
|
81
|
-
*
|
|
82
|
-
* Keeps an in-memory mirror of legacy `RecorderEvent` rows for `events()` /
|
|
83
|
-
* `GET /_pome/events` (unchanged API), and appends each accepted event as a
|
|
84
|
-
* `TwinHttpEvent` NDJSON line so on-disk `events.jsonl` matches the uploaded
|
|
85
|
-
* raw-trace byte shape. `flush()` drains pending writes and rethrows the
|
|
86
|
-
* first append/fsync failure; `fsync` (default true) bounds crash loss to
|
|
87
|
-
* the in-flight event. `maxEvents` caps only the heap mirror — the NDJSON
|
|
88
|
-
* tape stays append-only.
|
|
89
|
-
*/
|
|
90
|
-
export declare function createFileBackedRecorderStore(options: FileBackedRecorderStoreOptions): RecorderStore;
|
|
91
|
-
/**
|
|
92
|
-
* Resolve the recorder store for a twin boot: durable file-backed when
|
|
93
|
-
* `POME_RECORDER_EVENTS_PATH` is set, otherwise the in-memory default.
|
|
94
|
-
*/
|
|
95
|
-
export declare function resolveRecorderStore(options?: RecorderStoreOptions): RecorderStore;
|
|
96
|
-
export interface RecorderHandleOptions {
|
|
97
|
-
runId: string;
|
|
98
|
-
twin: TwinId;
|
|
99
|
-
store?: RecorderStore;
|
|
100
|
-
/**
|
|
101
|
-
* Projects thrown errors into a route response. Defaults to the generic
|
|
102
|
-
* `{ message, errors? }` envelope; the SDK's `createApp` forwards
|
|
103
|
-
* `definition.errorEnvelope` here so API-mirroring twins control their
|
|
104
|
-
* own error shape without bypassing the recorder middleware.
|
|
105
|
-
*/
|
|
106
|
-
errorEnvelope?: ErrorEnvelopeFn;
|
|
107
|
-
/**
|
|
108
|
-
* FDRS-402 adapter-rich stamping pin (F-682): when true, events persist
|
|
109
|
-
* the incoming `x-pome-correlation-id` header as `tool_call_id` (github's
|
|
110
|
-
* frozen tape shape). Default false — slack's frozen tape stamps null.
|
|
111
|
-
*/
|
|
112
|
-
stampToolCallId?: boolean;
|
|
113
|
-
/**
|
|
114
|
-
* Optional pre-redaction projection (from `TwinDefinition.recordingProjection`).
|
|
115
|
-
* Runs before `redactEvent` so twins can replace raw payloads with digests
|
|
116
|
-
* without bypassing the secret scrubber. Unset = no-op (existing twins).
|
|
117
|
-
*/
|
|
118
|
-
recordingProjection?: (event: RecorderEvent) => RecorderEvent;
|
|
119
|
-
}
|
|
120
|
-
export declare function createRecorderHandle(options: RecorderHandleOptions): RecorderHandle;
|