@pome-sh/cli 0.8.0 → 0.10.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/dist/build-info.json +3 -3
- package/dist/src/cli/agent-identity.js +7 -2
- package/dist/src/cli/agent-resolver.d.ts +3 -0
- package/dist/src/cli/agent-resolver.js +10 -0
- package/dist/src/cli/checks-add.d.ts +32 -0
- package/dist/src/cli/checks-add.js +236 -0
- package/dist/src/cli/checks.d.ts +21 -0
- package/dist/src/cli/checks.js +150 -0
- package/dist/src/cli/compile-seeds.js +51 -5
- package/dist/src/cli/main.js +49 -11
- package/dist/src/cli/project-config.d.ts +8 -0
- package/dist/src/cli/project-config.js +18 -0
- package/dist/src/cli/register.d.ts +15 -0
- package/dist/src/cli/register.js +26 -3
- package/dist/src/cli/session.d.ts +10 -0
- package/dist/src/cli/session.js +28 -2
- package/dist/src/fix-prompt/index.d.ts +1 -1
- package/dist/src/fix-prompt/index.js +2 -2
- package/dist/src/fix-prompt/prompt.d.ts +2 -2
- package/dist/src/fix-prompt/prompt.js +9 -9
- package/dist/src/hosted/client.d.ts +8 -2
- package/dist/src/hosted/client.js +108 -26
- package/dist/src/hosted/errors.d.ts +14 -0
- package/dist/src/hosted/errors.js +22 -0
- package/dist/src/hosted/evalResultCache.d.ts +4 -4
- package/dist/src/hosted/evalResultCache.js +10 -3
- package/dist/src/recorder/artifacts.d.ts +1 -1
- package/dist/src/recorder/artifacts.js +8 -1
- package/dist/src/runner/runTask.d.ts +10 -10
- package/dist/src/runner/runTaskHosted.js +9 -2
- package/dist/src/runner/runTrialGroup.js +4 -1
- package/dist/src/task/insertCriterion.d.ts +15 -0
- package/dist/src/task/insertCriterion.js +62 -0
- package/dist/src/task/parseTask.d.ts +5 -0
- package/dist/src/task/parseTask.js +11 -0
- package/dist/src/task/taskSchema.d.ts +4 -4
- package/node_modules/@pome-sh/sdk/dist/checks.d.ts +54 -0
- package/node_modules/@pome-sh/sdk/dist/checks.js +143 -0
- package/node_modules/@pome-sh/sdk/dist/checks.js.map +1 -0
- package/node_modules/@pome-sh/sdk/package.json +7 -3
- package/node_modules/@pome-sh/twin-github/dist/src/access-control.d.ts +3 -3
- package/node_modules/@pome-sh/twin-github/dist/src/checks.d.ts +21 -0
- package/node_modules/@pome-sh/twin-github/dist/src/checks.js +90 -0
- package/node_modules/@pome-sh/twin-github/dist/src/checks.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.d.ts +153 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.js +66 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/git.d.ts +567 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/git.js +198 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/git.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/{domain.d.ts → domain/github-domain.d.ts} +340 -71
- package/node_modules/@pome-sh/twin-github/dist/src/domain/github-domain.js +794 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/github-domain.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/helpers.d.ts +5 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/helpers.js +15 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/helpers.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/index.d.ts +2 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/index.js +5 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/index.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.d.ts +545 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.js +272 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.d.ts +816 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.js +256 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/releases.d.ts +160 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/releases.js +63 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/releases.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/repos.d.ts +219 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/repos.js +131 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/repos.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/search.d.ts +252 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/search.js +83 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/search.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/types.d.ts +15 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/types.js +2 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain/types.js.map +1 -0
- package/node_modules/@pome-sh/twin-github/dist/src/index.d.ts +2 -1
- package/node_modules/@pome-sh/twin-github/dist/src/index.js +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/index.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/routes.d.ts +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/seed.d.ts +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/serializers.d.ts +3 -3
- package/node_modules/@pome-sh/twin-github/dist/src/tools.d.ts +188 -188
- package/node_modules/@pome-sh/twin-github/dist/src/twin.d.ts +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/twin.js +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/twin.js.map +1 -1
- package/node_modules/@pome-sh/twin-github/package.json +4 -4
- package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/package.json +2 -2
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +35 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.js +103 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.d.ts +100 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.js +262 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.d.ts +7 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.js +14 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.d.ts +44 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.js +113 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.d.ts +24 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.js +61 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +43 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.js +160 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +8 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.js +39 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.d.ts +372 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.js +139 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +10 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +221 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.d.ts +61 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.js +123 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.d.ts +120 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.js +368 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.d.ts +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.js +3 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +54 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.js +181 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.d.ts +46 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.js +394 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +8 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.js +22 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/package.json +54 -0
- package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/index.d.ts +1 -0
- package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/index.js +1 -0
- package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/index.js.map +1 -1
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +31 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.js +76 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.js.map +1 -0
- package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/rest.d.ts +9 -0
- package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/rest.js +27 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/rest.js.map +1 -0
- package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/manifest-schema.json +68 -0
- package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/package.json +2 -1
- package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/trace-contract.json +1 -1
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +35 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.js +103 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.d.ts +100 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.js +262 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.d.ts +7 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.js +14 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.d.ts +44 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.js +113 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.d.ts +24 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.js +61 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +43 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.js +160 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +8 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.js +39 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.d.ts +372 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.js +139 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +10 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +221 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.d.ts +61 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.js +123 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.d.ts +120 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.js +368 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.d.ts +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.js +3 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +54 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.js +181 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.d.ts +46 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.js +394 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +8 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.js +22 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.js.map +1 -0
- package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/package.json +54 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +35 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.js +103 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.d.ts +100 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.js +262 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.d.ts +7 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.js +14 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.d.ts +44 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.js +113 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.d.ts +24 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.js +61 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +43 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.js +160 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +8 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.js +39 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.d.ts +372 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.js +139 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +10 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +221 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.d.ts +61 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.js +123 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.d.ts +120 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.js +368 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.d.ts +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.js +3 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +54 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.js +181 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.d.ts +46 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.js +394 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +8 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.js +22 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.js.map +1 -0
- package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/package.json +54 -0
- package/package.json +3 -3
- package/tasks/00-default-seed.md +1 -1
- package/tasks/01-bug-happy-path.md +1 -1
- package/tasks/03-already-triaged.md +1 -1
- package/tasks/06-mislabeled-needs-fix.md +1 -1
- package/tasks/17-in-scope-injection.md +1 -1
- package/node_modules/@pome-sh/twin-github/dist/src/domain.js +0 -0
- package/node_modules/@pome-sh/twin-github/dist/src/domain.js.map +0 -1
- package/node_modules/@pome-sh/twin-github/node_modules/@pome-sh/shared-types/dist/rest.js.map +0 -1
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/admin-gate.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/auth.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/auth.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/auth.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/build-info.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/build-info.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/build-info.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/db.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/db.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/db.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/errors.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/errors.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/errors.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/failure-injection.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/index.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/index.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/index.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/parity.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/parity.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/parity.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/recorder.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/recorder.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/recorder.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/redaction.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/redaction.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/redaction.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server-helpers.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/tool-context.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/tool-context.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/errors.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/errors.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/errors.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/github-access-control.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/github-access-control.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/github-access-control.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/identity.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/identity.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/identity.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/index.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/index.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/index.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/manifest.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/manifest.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/index.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/index.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/index.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/map-span.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/nano.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/nano.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/nano.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/project.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/project.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/project.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/semconv.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/recorder-events.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/redaction.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/redaction.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/redaction.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/rest.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/rest.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/rest.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/run.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/run.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/run.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-envelope.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-envelope.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-envelope.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-state.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/sessions.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/sessions.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task-vocab.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task-vocab.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task-vocab.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task.d.ts +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task.js +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task.js.map +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/manifest-schema.json +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/package.json +0 -0
- /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/trace-contract.json +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/errors.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/errors.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/errors.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/github-access-control.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/github-access-control.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/github-access-control.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/identity.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/identity.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/identity.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/index.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/index.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/index.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/map-span.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/nano.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/nano.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/nano.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/project.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/project.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/project.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/semconv.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/recorder-events.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/redaction.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/redaction.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/redaction.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/run.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/run.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/run.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-envelope.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-envelope.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-envelope.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-state.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/sessions.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/sessions.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task-vocab.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task-vocab.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task-vocab.js.map +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task.d.ts +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task.js +0 -0
- /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task.js.map +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import { type TwinDefinition } from "./index.js";
|
|
3
|
+
import { type RecorderStore } from "./recorder.js";
|
|
4
|
+
export { TwinBootError, ensureTwinAuthSecret, isLoopbackHost, created, ok } from "./server-helpers.js";
|
|
5
|
+
export { createRecorderHandle, createRecorderStore, createFileBackedRecorderStore, resolveRecorderStore, toTwinHttpEventRow, POME_RECORDER_EVENTS_PATH, } from "./recorder.js";
|
|
6
|
+
export type { RecorderStore, RecorderStoreOptions, FileBackedRecorderStoreOptions, ErrorEnvelopeFn, } from "./recorder.js";
|
|
7
|
+
export { bearerAuth, requireAdminAuth, resolveAuthSecret } from "./auth.js";
|
|
8
|
+
export { createAdminGate, setClientIp } from "./admin-gate.js";
|
|
9
|
+
export type { AdminGateOptions } from "./admin-gate.js";
|
|
10
|
+
export { TwinError, UnknownToolError } from "./errors.js";
|
|
11
|
+
export { redactEvent, redactSecrets } from "./redaction.js";
|
|
12
|
+
export { FAILURE_INJECTION_OVERRIDE_KEY, createFailureInjectionStore, failureInjectionMiddleware, failureInjectionRuleSchema, } from "./failure-injection.js";
|
|
13
|
+
export type { FailureInjectionMiddlewareOptions, FailureInjectionMode, FailureInjectionOverride, FailureInjectionRule, FailureInjectionStore, } from "./failure-injection.js";
|
|
14
|
+
export { PROVIDER_SHAPED_TEAM_ID, formTokenResolver, mintProviderToken, queryTokenResolver, verifyProviderToken, } from "./auth.js";
|
|
15
|
+
export type { AuthEnvelope, BearerAuthOptions, MintProviderTokenOptions, ProviderTokenSpec, SessionClaims, SessionValue, TokenResolver, UnauthorizedKind, } from "./auth.js";
|
|
16
|
+
export { twinBuildInfo } from "./build-info.js";
|
|
17
|
+
export type { TwinBuildInfo } from "./build-info.js";
|
|
18
|
+
export interface ServeOptions<TDb = unknown, TSeed = unknown> {
|
|
19
|
+
/** Optional. When set, `serve()` binds a Node HTTP server. */
|
|
20
|
+
port?: number;
|
|
21
|
+
/** Bind hostname. Defaults to "127.0.0.1". */
|
|
22
|
+
hostname?: string;
|
|
23
|
+
/** Opaque database handle forwarded to `definition.domain({ db })`. */
|
|
24
|
+
db?: TDb;
|
|
25
|
+
/** Initial seed forwarded to `definition.domain({ seed })`. Validated against `definition.seed` if provided. */
|
|
26
|
+
seed?: TSeed;
|
|
27
|
+
/** Custom recorder store. Defaults to `resolveRecorderStore()` (durable when `POME_RECORDER_EVENTS_PATH` is set). */
|
|
28
|
+
recorder?: RecorderStore;
|
|
29
|
+
/** Run identifier embedded in every recorder event. Defaults to "local". */
|
|
30
|
+
runId?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function createApp<TDb, TSeed, TDomain>(definition: TwinDefinition<TDb, TSeed, TDomain>, options?: ServeOptions<TDb, TSeed>): Hono;
|
|
33
|
+
export interface ServeResult {
|
|
34
|
+
app: Hono;
|
|
35
|
+
/**
|
|
36
|
+
* Stop the bound HTTP server (if any), then flush+close the recorder store
|
|
37
|
+
* so durable tapes drain before process exit (F-698).
|
|
38
|
+
*/
|
|
39
|
+
close(): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Build the app and bind a Node HTTP server. If `port` is omitted, no
|
|
43
|
+
* server is bound — `close()` still flushes the recorder store.
|
|
44
|
+
*/
|
|
45
|
+
export declare function serve<TDb, TSeed, TDomain>(definition: TwinDefinition<TDb, TSeed, TDomain>, options?: ServeOptions<TDb, TSeed>): Promise<ServeResult>;
|
|
46
|
+
/** Engine-owned `/_pome/*` route names a twin's `pomeRoutes` may not shadow. */
|
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
// file-size: server engine intentionally centralizes TwinDefinition boot, reserved routes, recorder shutdown, and auth wiring.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
//
|
|
4
|
+
// `@pome-sh/sdk/server` — boot a `TwinDefinition` into a Hono app and
|
|
5
|
+
// optionally bind a Node HTTP server. `createApp()` returns the bare app
|
|
6
|
+
// (no port binding) for tests; `serve()` wraps it with `@hono/node-server`.
|
|
7
|
+
//
|
|
8
|
+
// Auto-mounted routes:
|
|
9
|
+
// GET /healthz (root, no auth)
|
|
10
|
+
// POST /admin/reset (localhost-only)
|
|
11
|
+
// POST /admin/seed (localhost-only)
|
|
12
|
+
// GET /s/:sid/healthz (bearer)
|
|
13
|
+
// GET /s/:sid/_pome/health (bearer)
|
|
14
|
+
// GET /s/:sid/_pome/state (bearer)
|
|
15
|
+
// GET /s/:sid/_pome/events (bearer)
|
|
16
|
+
// GET /s/:sid/mcp/tools (bearer)
|
|
17
|
+
// POST /s/:sid/mcp/tools/:name (bearer)
|
|
18
|
+
// POST /s/:sid/mcp/call (bearer)
|
|
19
|
+
//
|
|
20
|
+
// User routes registered via `definition.routes(app, ctx)` are mounted under
|
|
21
|
+
// `/s/:sid/*`. The SDK refuses to boot if any user route shadows the
|
|
22
|
+
// `/_pome/*` or `/mcp/*` prefixes (OQ-B6 invariant).
|
|
23
|
+
import { Hono } from "hono";
|
|
24
|
+
import { z } from "zod";
|
|
25
|
+
import { toolInputSchema, toolListExtras, } from "./index.js";
|
|
26
|
+
import { bearerAuth, requireAdminAuth } from "./auth.js";
|
|
27
|
+
import { createAdminGate } from "./admin-gate.js";
|
|
28
|
+
import { makeToolCallContext } from "./tool-context.js";
|
|
29
|
+
import { twinBuildInfo } from "./build-info.js";
|
|
30
|
+
import { handleMcpJsonRpc, mcpMethodNotAllowed } from "./mcp-jsonrpc.js";
|
|
31
|
+
import { createRecorderHandle, resolveRecorderStore } from "./recorder.js";
|
|
32
|
+
import { redactSecrets } from "./redaction.js";
|
|
33
|
+
import { TwinError, envelopeFor } from "./errors.js";
|
|
34
|
+
import { POME_CORE_ROUTE_NAMES, TwinBootError, assertUniqueToolNames, ensureTwinAuthSecret, findTool, isLoopbackHost, makeDeltaSink, readJson, shadowedPrefix, } from "./server-helpers.js";
|
|
35
|
+
// Public boot surface consumed by twin entrypoints
|
|
36
|
+
// (`import { ensureTwinAuthSecret, serve } from "@pome-sh/sdk/server"`).
|
|
37
|
+
export { TwinBootError, ensureTwinAuthSecret, isLoopbackHost, created, ok } from "./server-helpers.js";
|
|
38
|
+
export { createRecorderHandle, createRecorderStore, createFileBackedRecorderStore, resolveRecorderStore, toTwinHttpEventRow, POME_RECORDER_EVENTS_PATH, } from "./recorder.js";
|
|
39
|
+
export { bearerAuth, requireAdminAuth, resolveAuthSecret } from "./auth.js";
|
|
40
|
+
// Alternate serving bridges (anything that isn't @hono/node-server) must feed
|
|
41
|
+
// the gate the transport-level peer address via setClientIp from an upstream
|
|
42
|
+
// middleware; createAdminGate lets custom twins mount the gate with their own
|
|
43
|
+
// 403 envelope. See the SECURITY note on setClientIp — never derive the value
|
|
44
|
+
// from request headers.
|
|
45
|
+
export { createAdminGate, setClientIp } from "./admin-gate.js";
|
|
46
|
+
export { TwinError, UnknownToolError } from "./errors.js";
|
|
47
|
+
export { redactEvent, redactSecrets } from "./redaction.js";
|
|
48
|
+
export { FAILURE_INJECTION_OVERRIDE_KEY, createFailureInjectionStore, failureInjectionMiddleware, failureInjectionRuleSchema, } from "./failure-injection.js";
|
|
49
|
+
export { PROVIDER_SHAPED_TEAM_ID, formTokenResolver, mintProviderToken, queryTokenResolver, verifyProviderToken, } from "./auth.js";
|
|
50
|
+
export { twinBuildInfo } from "./build-info.js";
|
|
51
|
+
const jsonRecord = z.record(z.string(), z.unknown());
|
|
52
|
+
export function createApp(definition, options = {}) {
|
|
53
|
+
// 1. Validate + build seed
|
|
54
|
+
let seed;
|
|
55
|
+
if (options.seed !== undefined) {
|
|
56
|
+
if (definition.seed) {
|
|
57
|
+
seed = definition.seed.parse(options.seed);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
seed = options.seed;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// 2. Build domain
|
|
64
|
+
const domain = definition.domain({ db: options.db, seed });
|
|
65
|
+
// 3. Build recorder. The manifest's `errorEnvelope` (if set) is forwarded
|
|
66
|
+
// here so API-mirroring twins control their error shape without
|
|
67
|
+
// bypassing the recorder middleware.
|
|
68
|
+
const runId = options.runId ?? "local";
|
|
69
|
+
const recorder = createRecorderHandle({
|
|
70
|
+
runId,
|
|
71
|
+
twin: definition.id,
|
|
72
|
+
store: options.recorder ?? resolveRecorderStore(),
|
|
73
|
+
errorEnvelope: definition.errorEnvelope,
|
|
74
|
+
stampToolCallId: definition.stampToolCallId,
|
|
75
|
+
recordingProjection: definition.recordingProjection,
|
|
76
|
+
});
|
|
77
|
+
// 4. Boot-time invariant: user routes must not shadow reserved prefixes.
|
|
78
|
+
const userApp = new Hono();
|
|
79
|
+
if (definition.routes) {
|
|
80
|
+
definition.routes(userApp, { domain, recorder, runId, twin: definition.id });
|
|
81
|
+
for (const route of userApp.routes) {
|
|
82
|
+
const shadowed = shadowedPrefix(route.path);
|
|
83
|
+
if (shadowed) {
|
|
84
|
+
throw new TwinBootError(`Twin "${definition.id}" route ${route.method} ${route.path} shadows reserved SDK prefix ${shadowed}/*`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// 5. Tool name uniqueness sanity (defineTwin already enforces, but a
|
|
89
|
+
// test that hand-builds a TwinDefinition could bypass it).
|
|
90
|
+
assertUniqueToolNames(definition.tools, definition.id);
|
|
91
|
+
// 6. Build root app
|
|
92
|
+
const root = new Hono();
|
|
93
|
+
// Contract core: {ok, twin, implementation, tools, runtime}. Extras
|
|
94
|
+
// default to the pre-F-681 fields; a twin with a frozen healthz shape
|
|
95
|
+
// supplies its own (possibly empty) extras via `definition.healthz`.
|
|
96
|
+
const healthzExtras = definition.healthz ??
|
|
97
|
+
(() => ({ version: definition.version, fidelity: definition.fidelity.default }));
|
|
98
|
+
root.get("/healthz", (c) => c.json({
|
|
99
|
+
ok: true,
|
|
100
|
+
twin: definition.id,
|
|
101
|
+
implementation: definition.implementation ?? `${definition.id}_clone`,
|
|
102
|
+
tools: definition.tools.length,
|
|
103
|
+
runtime: twinBuildInfo(definition.packageName ?? `@pome-sh/twin-${definition.id}`),
|
|
104
|
+
...healthzExtras(),
|
|
105
|
+
}));
|
|
106
|
+
// Per-twin body reader for the engine-owned JSON surfaces. Default is
|
|
107
|
+
// strict JSON (malformed → SyntaxError into the twin's errorEnvelope);
|
|
108
|
+
// twins with frozen tolerant/form parsing (slack, stripe) declare theirs.
|
|
109
|
+
const readBody = definition.bodyReader ?? ((c) => readJson(c.req.raw));
|
|
110
|
+
// 7. Admin sub-app. Gate mechanism is the engine's; a twin with a frozen
|
|
111
|
+
// 403 body declares it via `admin.forbidden` (F-683).
|
|
112
|
+
const adminForbidden = definition.admin?.forbidden;
|
|
113
|
+
const adminApp = new Hono();
|
|
114
|
+
adminApp.use("*", adminForbidden
|
|
115
|
+
? createAdminGate({
|
|
116
|
+
forbidden: () => {
|
|
117
|
+
const envelope = adminForbidden();
|
|
118
|
+
return Response.json(envelope.body, { status: envelope.status });
|
|
119
|
+
},
|
|
120
|
+
})
|
|
121
|
+
: requireAdminAuth());
|
|
122
|
+
const adminEnvelope = definition.admin?.errorEnvelope;
|
|
123
|
+
// stripe pin: its pre-port recorder never saw admin traffic, so
|
|
124
|
+
// admin.recorded=false serves the same handlers without emitting events.
|
|
125
|
+
const wrapAdmin = definition.admin?.recorded !== false
|
|
126
|
+
? (fn) => recorder.handle({ mutation: true, errorEnvelope: adminEnvelope }, fn)
|
|
127
|
+
: (fn) => async (c) => {
|
|
128
|
+
try {
|
|
129
|
+
const result = await fn(c);
|
|
130
|
+
return c.json(result.body, result.status);
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
const envelope = (adminEnvelope ?? definition.errorEnvelope ?? envelopeFor)(err);
|
|
134
|
+
return c.json(envelope.body, envelope.status);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
adminApp.post("/reset", wrapAdmin(async () => {
|
|
138
|
+
if (!definition.admin?.reset) {
|
|
139
|
+
throw new TwinError("admin.reset is not configured for this twin", 501);
|
|
140
|
+
}
|
|
141
|
+
const delta = makeDeltaSink();
|
|
142
|
+
const body = (await definition.admin.reset({ domain, reportDelta: delta.report })) ?? { ok: true };
|
|
143
|
+
return { status: 200, body, delta: delta.value() };
|
|
144
|
+
}));
|
|
145
|
+
adminApp.post("/seed", wrapAdmin(async (c) => {
|
|
146
|
+
if (!definition.admin?.seed) {
|
|
147
|
+
throw new TwinError("admin.seed is not configured for this twin", 501);
|
|
148
|
+
}
|
|
149
|
+
if (!definition.seed) {
|
|
150
|
+
throw new TwinError("Twin manifest has no `seed` schema; cannot accept POST /admin/seed", 501);
|
|
151
|
+
}
|
|
152
|
+
const raw = await readBody(c);
|
|
153
|
+
const parsed = definition.seed.parse(raw);
|
|
154
|
+
const delta = makeDeltaSink();
|
|
155
|
+
const body = (await definition.admin.seed({ domain, seed: parsed, reportDelta: delta.report })) ?? { ok: true };
|
|
156
|
+
return { status: 200, body, delta: delta.value() };
|
|
157
|
+
}));
|
|
158
|
+
root.route("/admin", adminApp);
|
|
159
|
+
// 8. Session sub-app. Auth mechanism is the engine's; the twin's declared
|
|
160
|
+
// shape (F-712) rides in via `definition.auth`.
|
|
161
|
+
const session = new Hono();
|
|
162
|
+
session.use("*", bearerAuth(definition.auth));
|
|
163
|
+
// Session-wide middleware slot — the pre-port `session.use("*")` position,
|
|
164
|
+
// mounted BEFORE the engine's MCP / `/_pome/*` routes so twin middleware
|
|
165
|
+
// (stripe failure-injection, idempotency) covers MCP dispatch too.
|
|
166
|
+
if (definition.middleware) {
|
|
167
|
+
definition.middleware(session, { domain, recorder, runId, twin: definition.id });
|
|
168
|
+
}
|
|
169
|
+
// Per-session healthz is contract-frozen per twin: github/slack answer
|
|
170
|
+
// 200 {ok, sid}; stripe has NO such route (falls to the 501 catch-all).
|
|
171
|
+
if (definition.sessionHealthz !== false) {
|
|
172
|
+
session.get("/healthz", (c) => c.json({ ok: true, sid: c.req.param("sid") }));
|
|
173
|
+
}
|
|
174
|
+
// `pomeHealth` extras replace the default {version, fidelity} for twins
|
|
175
|
+
// with a frozen per-session health shape (slack: bare {ok, twin};
|
|
176
|
+
// github: no version; stripe adds recorder counters).
|
|
177
|
+
const pomeHealthExtras = definition.pomeHealth ??
|
|
178
|
+
(() => ({ version: definition.version, fidelity: definition.fidelity.default }));
|
|
179
|
+
session.get("/_pome/health", (c) => c.json({
|
|
180
|
+
ok: true,
|
|
181
|
+
twin: definition.id,
|
|
182
|
+
...pomeHealthExtras({ recorder }),
|
|
183
|
+
}));
|
|
184
|
+
// NOT recorder-wrapped: no pre-port twin recorded /_pome/state fetches on
|
|
185
|
+
// the tape (F-683 review pin) — the export is a read-side probe, and
|
|
186
|
+
// recording it would embed the full state as an event response_body.
|
|
187
|
+
session.get("/_pome/state", async (c) => {
|
|
188
|
+
try {
|
|
189
|
+
if (!definition.state) {
|
|
190
|
+
throw new TwinError("state introspection is not configured for this twin", 501);
|
|
191
|
+
}
|
|
192
|
+
const session = c.get("session");
|
|
193
|
+
const state = await definition.state({ domain, session });
|
|
194
|
+
// Central redaction: the state export feeds cloud-side scoring and the
|
|
195
|
+
// CLI trace; a twin must not be able to leak secrets by omission.
|
|
196
|
+
return c.json(redactSecrets(state));
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
const envelope = (definition.errorEnvelope ?? envelopeFor)(err);
|
|
200
|
+
return c.json(envelope.body, envelope.status);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
session.get("/_pome/events", (c) => c.json(recorder.events()));
|
|
204
|
+
// 8b. Extra per-twin `/_pome/*` routes (github's frozen
|
|
205
|
+
// GET /s/:sid/_pome/access-control, F-682). Registered after the core
|
|
206
|
+
// routes so the platform surface can never be shadowed; core names are
|
|
207
|
+
// rejected outright at boot.
|
|
208
|
+
if (definition.pomeRoutes) {
|
|
209
|
+
for (const [name, handler] of Object.entries(definition.pomeRoutes)) {
|
|
210
|
+
if (POME_CORE_ROUTE_NAMES.has(name)) {
|
|
211
|
+
throw new TwinBootError(`Twin "${definition.id}" pome route "/_pome/${name}" shadows a reserved engine route`);
|
|
212
|
+
}
|
|
213
|
+
session.get(`/_pome/${name}`, async (c) => c.json((await handler({ domain }))));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// 9. MCP routes from tool registry. `/mcp` is the streamable-HTTP
|
|
217
|
+
// JSON-RPC endpoint (stateless — GET/DELETE answer 405); `/mcp/tools`,
|
|
218
|
+
// `/mcp/tools/:name`, `/mcp/call` are the legacy dispatch surface.
|
|
219
|
+
session.post("/mcp", (c) => handleMcpJsonRpc(c, { definition, domain, recorder, runId }));
|
|
220
|
+
session.get("/mcp", (c) => mcpMethodNotAllowed(c));
|
|
221
|
+
session.delete("/mcp", (c) => mcpMethodNotAllowed(c));
|
|
222
|
+
session.get("/mcp/tools", (c) => c.json({
|
|
223
|
+
tools: definition.tools.map((tool) => ({
|
|
224
|
+
name: tool.name,
|
|
225
|
+
description: tool.description,
|
|
226
|
+
input_schema: toolInputSchema(tool),
|
|
227
|
+
...toolListExtras(tool),
|
|
228
|
+
})),
|
|
229
|
+
}));
|
|
230
|
+
session.post("/mcp/tools/:name", recorder.handle({ mutation: false }, async (c) => {
|
|
231
|
+
const name = c.req.param("name") ?? "";
|
|
232
|
+
const tool = findTool(definition, name);
|
|
233
|
+
const args = await readBody(c);
|
|
234
|
+
const parsed = tool.schema.parse(args ?? {});
|
|
235
|
+
const call = makeToolCallContext(c);
|
|
236
|
+
const result = await tool.handler(domain, parsed, call.ctx);
|
|
237
|
+
const delta = call.delta();
|
|
238
|
+
const mutation = tool.mutation && (!call.reportedDelta() || delta !== null);
|
|
239
|
+
return { status: 200, body: result, mutation, delta };
|
|
240
|
+
}));
|
|
241
|
+
session.post("/mcp/call", recorder.handle({ mutation: false }, async (c) => {
|
|
242
|
+
const raw = await readBody(c);
|
|
243
|
+
let call;
|
|
244
|
+
if (definition.legacyMcp?.aliases) {
|
|
245
|
+
// Frozen slack surface: {name}/{params} alias {tool}/{arguments};
|
|
246
|
+
// a body naming no tool answers the twin's own envelope (400
|
|
247
|
+
// invalid_arguments) instead of the strict-parse error.
|
|
248
|
+
const rec = (raw && typeof raw === "object" && !Array.isArray(raw) ? raw : {});
|
|
249
|
+
const name = rec.tool ?? rec.name;
|
|
250
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
251
|
+
const missing = definition.legacyMcp.missingTool;
|
|
252
|
+
if (missing) {
|
|
253
|
+
const envelope = missing();
|
|
254
|
+
return { status: envelope.status, body: envelope.body };
|
|
255
|
+
}
|
|
256
|
+
z.object({ tool: z.string().min(1) }).parse(rec); // throws the strict-parse error
|
|
257
|
+
}
|
|
258
|
+
call = {
|
|
259
|
+
tool: name,
|
|
260
|
+
arguments: (rec.arguments ?? rec.params ?? {}),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
call = z
|
|
265
|
+
.object({ tool: z.string().min(1), arguments: jsonRecord.default({}) })
|
|
266
|
+
.parse(raw);
|
|
267
|
+
}
|
|
268
|
+
const tool = findTool(definition, call.tool);
|
|
269
|
+
const parsed = tool.schema.parse(call.arguments);
|
|
270
|
+
const toolCall = makeToolCallContext(c);
|
|
271
|
+
const result = await tool.handler(domain, parsed, toolCall.ctx);
|
|
272
|
+
const delta = toolCall.delta();
|
|
273
|
+
const mutation = tool.mutation && (!toolCall.reportedDelta() || delta !== null);
|
|
274
|
+
return { status: 200, body: result, mutation, delta };
|
|
275
|
+
}));
|
|
276
|
+
// 10. User routes
|
|
277
|
+
if (definition.routes) {
|
|
278
|
+
session.route("/", userApp);
|
|
279
|
+
}
|
|
280
|
+
// 11. Catch-all for unsupported surfaces. Recorder records
|
|
281
|
+
// fidelity:"unsupported" and returns 501 so unmatched routes surface
|
|
282
|
+
// as a fidelity-gap signal in the trace instead of silently 404'ing.
|
|
283
|
+
// Not opt-out per OQ-B6: every community twin auto-surfaces fidelity
|
|
284
|
+
// gaps in the trace.
|
|
285
|
+
session.all("*", recorder.handle({ mutation: false, fidelity: "unsupported" }, async (c) => {
|
|
286
|
+
const ctx = { method: c.req.method, path: new URL(c.req.url).pathname };
|
|
287
|
+
if (definition.unsupported)
|
|
288
|
+
return definition.unsupported(ctx);
|
|
289
|
+
return {
|
|
290
|
+
status: 501,
|
|
291
|
+
body: {
|
|
292
|
+
message: `Endpoint not modeled by twin "${definition.id}".`,
|
|
293
|
+
fidelity: "unsupported",
|
|
294
|
+
method: ctx.method,
|
|
295
|
+
path: ctx.path,
|
|
296
|
+
},
|
|
297
|
+
};
|
|
298
|
+
}));
|
|
299
|
+
root.route("/s/:sid", session);
|
|
300
|
+
// 11b. SDK-compat root mount (stripe F3, F-684): the same session router
|
|
301
|
+
// answers at the root path. Root /healthz + /admin/* were registered
|
|
302
|
+
// first and stay first-match; unknown root paths hit the twin's auth
|
|
303
|
+
// wall (bearerAuth answers 401 before the 501 catch-all). Pair with
|
|
304
|
+
// `auth.requirePathSid: false` so the bearer alone resolves the sid.
|
|
305
|
+
if (definition.mountSessionAtRoot) {
|
|
306
|
+
root.route("/", session);
|
|
307
|
+
}
|
|
308
|
+
// 12. Footgun warning: clean-state-per-test workflows rely on
|
|
309
|
+
// /admin/reset. Warn loudly if a twin ships without it so authors
|
|
310
|
+
// don't discover the gap mid-CI-debug.
|
|
311
|
+
if (!definition.admin?.reset) {
|
|
312
|
+
console.warn(`[@pome-sh/sdk] twin "${definition.id}" has no admin.reset configured — POST /admin/reset returns 501. Most CI workflows rely on this for clean-state-per-test.`);
|
|
313
|
+
}
|
|
314
|
+
return root;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Build the app and bind a Node HTTP server. If `port` is omitted, no
|
|
318
|
+
* server is bound — `close()` still flushes the recorder store.
|
|
319
|
+
*/
|
|
320
|
+
export async function serve(definition, options = {}) {
|
|
321
|
+
const hostname = options.hostname ?? "127.0.0.1";
|
|
322
|
+
// Contract boot guard: a twin must never serve real traffic with the dev
|
|
323
|
+
// fallback secret. Since F-708 a non-loopback bind with no env-injected
|
|
324
|
+
// secret self-generates + persists one instead of refusing to boot; a
|
|
325
|
+
// failed generation still throws before the app is built, so the process
|
|
326
|
+
// exits non-zero without ever listening.
|
|
327
|
+
if (options.port !== undefined && !isLoopbackHost(hostname)) {
|
|
328
|
+
ensureTwinAuthSecret(definition.id, hostname);
|
|
329
|
+
}
|
|
330
|
+
// Resolve the store once so `close()` can flush the same instance the app
|
|
331
|
+
// records into (durable when POME_RECORDER_EVENTS_PATH is set).
|
|
332
|
+
const store = options.recorder ?? resolveRecorderStore();
|
|
333
|
+
const app = createApp(definition, { ...options, recorder: store });
|
|
334
|
+
const closeRecorder = async () => {
|
|
335
|
+
await store.flush?.();
|
|
336
|
+
await store.close?.();
|
|
337
|
+
};
|
|
338
|
+
if (options.port === undefined) {
|
|
339
|
+
return { app, close: closeRecorder };
|
|
340
|
+
}
|
|
341
|
+
const { serve: nodeServe } = await import("@hono/node-server");
|
|
342
|
+
const server = await new Promise((resolve) => {
|
|
343
|
+
const bound = nodeServe({
|
|
344
|
+
fetch: app.fetch,
|
|
345
|
+
port: options.port,
|
|
346
|
+
hostname,
|
|
347
|
+
}, () => resolve(bound));
|
|
348
|
+
});
|
|
349
|
+
let closed = false;
|
|
350
|
+
const close = async () => {
|
|
351
|
+
if (closed) {
|
|
352
|
+
await closeRecorder();
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
closed = true;
|
|
356
|
+
unregisterServeShutdown(close);
|
|
357
|
+
await new Promise((resolve, reject) => {
|
|
358
|
+
server.close((err) => (err ? reject(err) : resolve()));
|
|
359
|
+
});
|
|
360
|
+
await closeRecorder();
|
|
361
|
+
};
|
|
362
|
+
// Twin boot scripts (`await serve(...)`) never call close() themselves.
|
|
363
|
+
// Drain the durable recorder on graceful process signals so hosted twins
|
|
364
|
+
// with POME_RECORDER_EVENTS_PATH set do not lose the last accepted events.
|
|
365
|
+
// Shared registry: every served twin flushes before a single process.exit,
|
|
366
|
+
// so multi-twin processes cannot lose sibling recorder tapes.
|
|
367
|
+
registerServeShutdown(close);
|
|
368
|
+
return { app, close };
|
|
369
|
+
}
|
|
370
|
+
/** Active `serve({ port })` close hooks — drained together on SIGINT/SIGTERM. */
|
|
371
|
+
const serveShutdownHooks = new Set();
|
|
372
|
+
let serveSignalHandlersInstalled = false;
|
|
373
|
+
function registerServeShutdown(close) {
|
|
374
|
+
serveShutdownHooks.add(close);
|
|
375
|
+
if (serveSignalHandlersInstalled)
|
|
376
|
+
return;
|
|
377
|
+
serveSignalHandlersInstalled = true;
|
|
378
|
+
const onSignal = () => {
|
|
379
|
+
void (async () => {
|
|
380
|
+
const hooks = [...serveShutdownHooks];
|
|
381
|
+
serveShutdownHooks.clear();
|
|
382
|
+
await Promise.allSettled(hooks.map((hook) => hook()));
|
|
383
|
+
process.exit(0);
|
|
384
|
+
})();
|
|
385
|
+
};
|
|
386
|
+
process.once("SIGINT", onSignal);
|
|
387
|
+
process.once("SIGTERM", onSignal);
|
|
388
|
+
}
|
|
389
|
+
function unregisterServeShutdown(close) {
|
|
390
|
+
serveShutdownHooks.delete(close);
|
|
391
|
+
}
|
|
392
|
+
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
393
|
+
/** Engine-owned `/_pome/*` route names a twin's `pomeRoutes` may not shadow. */
|
|
394
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Context } from "hono";
|
|
2
|
+
import type { RecorderEvent, ToolCallContext } from "./index.js";
|
|
3
|
+
export declare function makeToolCallContext(c: Context): {
|
|
4
|
+
ctx: ToolCallContext;
|
|
5
|
+
delta: () => RecorderEvent["state_delta"];
|
|
6
|
+
/** True once the handler invoked `reportDelta` (including with `null`). */
|
|
7
|
+
reportedDelta: () => boolean;
|
|
8
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
//
|
|
3
|
+
// Per-call ToolCallContext factory shared by every MCP dispatch surface
|
|
4
|
+
// (server.ts legacy routes + mcp-jsonrpc.ts tools/call). Exposes the
|
|
5
|
+
// authenticated session and captures a handler-reported state delta for the
|
|
6
|
+
// recorded event (F-683).
|
|
7
|
+
export function makeToolCallContext(c) {
|
|
8
|
+
let reported = null;
|
|
9
|
+
let didReport = false;
|
|
10
|
+
return {
|
|
11
|
+
ctx: {
|
|
12
|
+
session: c.get("session"),
|
|
13
|
+
reportDelta: (delta) => {
|
|
14
|
+
reported = delta;
|
|
15
|
+
didReport = true;
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
delta: () => reported,
|
|
19
|
+
reportedDelta: () => didReport,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=tool-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../src/tool-context.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,wEAAwE;AACxE,qEAAqE;AACrE,4EAA4E;AAC5E,0BAA0B;AAM1B,MAAM,UAAU,mBAAmB,CAAC,CAAU;IAM5C,IAAI,QAAQ,GAAiC,IAAI,CAAC;IAClD,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,OAAO;QACL,GAAG,EAAE;YACH,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAA6B;YACrD,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrB,QAAQ,GAAG,KAAK,CAAC;gBACjB,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;SACF;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ;QACrB,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS;KAC/B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pome-sh/sdk",
|
|
3
|
+
"version": "0.5.1",
|
|
4
|
+
"description": "Twin engine for Pome digital twins — defineTwin() + serve(): HTTP mounting, bearer auth, trace recorder, MCP dispatch, SQLite-backed state.",
|
|
5
|
+
"private": false,
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./server": {
|
|
15
|
+
"types": "./dist/server.d.ts",
|
|
16
|
+
"default": "./dist/server.js"
|
|
17
|
+
},
|
|
18
|
+
"./parity": {
|
|
19
|
+
"types": "./dist/parity.d.ts",
|
|
20
|
+
"default": "./dist/parity.js"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/pome-sh/digital-twins.git",
|
|
29
|
+
"directory": "packages/sdk"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/pome-sh/digital-twins/tree/main/packages/sdk",
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/pome-sh/digital-twins/issues"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist"
|
|
37
|
+
],
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@pome-sh/shared-types": "0.12.0",
|
|
40
|
+
"hono": "^4.12.27",
|
|
41
|
+
"zod": "^4.1.13"
|
|
42
|
+
},
|
|
43
|
+
"peerDependencies": {
|
|
44
|
+
"@hono/node-server": "^2.0.8"
|
|
45
|
+
},
|
|
46
|
+
"peerDependenciesMeta": {
|
|
47
|
+
"@hono/node-server": {
|
|
48
|
+
"optional": true
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=24"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Context, MiddlewareHandler } from "hono";
|
|
2
|
+
/** Context variable consulted first by getClientIp(). */
|
|
3
|
+
export declare const CLIENT_IP_VAR = "pomeClientIp";
|
|
4
|
+
/**
|
|
5
|
+
* Explicitly record the peer address for this request. Alternate serving
|
|
6
|
+
* bridges (or tests) call this from an upstream middleware so the gate never
|
|
7
|
+
* reaches into runtime-private internals.
|
|
8
|
+
*
|
|
9
|
+
* SECURITY: the value passed here MUST be the transport-level peer address
|
|
10
|
+
* (the socket's remote address as reported by the serving bridge). It takes
|
|
11
|
+
* precedence over getConnInfo, so deriving it from any request-controlled
|
|
12
|
+
* input — X-Forwarded-For or any other client-supplied header — would make
|
|
13
|
+
* the loopback-only admin gate spoofable by whoever sets that header. If you
|
|
14
|
+
* are behind a reverse proxy, use TWIN_ADMIN_TOKEN instead of trying to
|
|
15
|
+
* recover the "real" client IP.
|
|
16
|
+
*/
|
|
17
|
+
export declare function setClientIp(c: Context, ip: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Runtime-neutral client-IP accessor (FDRS-587). Resolution order:
|
|
20
|
+
* 1. Explicit override set via setClientIp() (alternate bridges / tests).
|
|
21
|
+
* 2. The node serving bridge's official getConnInfo helper.
|
|
22
|
+
* 3. undefined — no live socket (e.g. app.request() in-process tests).
|
|
23
|
+
*/
|
|
24
|
+
export declare function getClientIp(c: Context): Promise<string | undefined>;
|
|
25
|
+
export declare function isLoopbackAddress(remote: string): boolean;
|
|
26
|
+
export interface AdminGateOptions {
|
|
27
|
+
/** 403 response factory so each twin keeps its own error envelope. */
|
|
28
|
+
forbidden?: () => Response;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Admin endpoint protection shared by every twin (FDRS-616). Each twin's
|
|
32
|
+
* auth.ts wraps this with its own `forbidden` envelope. Semantics are
|
|
33
|
+
* identical to the per-twin requireAdminAuth() copies this replaces.
|
|
34
|
+
*/
|
|
35
|
+
export declare function createAdminGate(options?: AdminGateOptions): MiddlewareHandler;
|