@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
package/dist/build-info.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "pome-sh",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"git_sha": "
|
|
5
|
-
"build_time": "2026-07-
|
|
3
|
+
"version": "0.10.0",
|
|
4
|
+
"git_sha": "14613c1a69d37441adc719248f0a506d7db76da9",
|
|
5
|
+
"build_time": "2026-07-28T23:09:18.070Z"
|
|
6
6
|
}
|
|
@@ -13,7 +13,7 @@ import { dirname } from "node:path";
|
|
|
13
13
|
import { postAgentResolver, resolveSeams, } from "./agent-resolver.js";
|
|
14
14
|
import { resolveCredentials } from "./credentials.js";
|
|
15
15
|
import { ensurePomeGitignored, readLinkCache, resolveCachedAgentId, writeLinkCache, } from "./link-cache.js";
|
|
16
|
-
import { readManifest } from "./project-config.js";
|
|
16
|
+
import { normalizeManifestTwins, readManifest } from "./project-config.js";
|
|
17
17
|
export async function resolveRunAgentIdentity(input) {
|
|
18
18
|
const manifestRead = await readManifest(input.startDir);
|
|
19
19
|
if (!manifestRead) {
|
|
@@ -38,13 +38,18 @@ export async function resolveRunAgentIdentity(input) {
|
|
|
38
38
|
if (cachedId) {
|
|
39
39
|
return { ...base, agentId: cachedId };
|
|
40
40
|
}
|
|
41
|
-
// Silent re-resolution — a run never prompts for a near-miss.
|
|
41
|
+
// Silent re-resolution — a run never prompts for a near-miss. Send the
|
|
42
|
+
// manifest's twins so a fork / first `pome run` that auto-creates the agent
|
|
43
|
+
// enables the declared services instead of the server's `github` default
|
|
44
|
+
// (F-926); the server merges additively, so this is safe when the agent
|
|
45
|
+
// already exists.
|
|
42
46
|
const resolved = await postAgentResolver(creds, {
|
|
43
47
|
name: agent.name ?? agent.slug,
|
|
44
48
|
slug: agent.slug,
|
|
45
49
|
description: agent.description,
|
|
46
50
|
version: agent.version,
|
|
47
51
|
framework: agent.framework,
|
|
52
|
+
twins: normalizeManifestTwins(manifestRead.manifest.twins),
|
|
48
53
|
}, resolveSeams({ stdinIsTTY: false }));
|
|
49
54
|
if (creds.teamId) {
|
|
50
55
|
await writeLinkCache(projectDir, { agent_id: resolved.id, team_id: creds.teamId });
|
|
@@ -4,6 +4,9 @@ import type { ResolvedCredentials } from "./credentials.js";
|
|
|
4
4
|
export interface InteractiveSeams {
|
|
5
5
|
stdinIsTTY?: boolean;
|
|
6
6
|
confirm?: (question: string) => Promise<boolean>;
|
|
7
|
+
/** Free-text prompt. Added by F-1074: picking a check from a numbered list and
|
|
8
|
+
* filling its typed parameters needs an answer, not a yes/no. */
|
|
9
|
+
ask?: (question: string) => Promise<string>;
|
|
7
10
|
}
|
|
8
11
|
/** The manifest identity fields POSTed to the resolver. */
|
|
9
12
|
export interface AgentPostBody {
|
|
@@ -11,6 +11,7 @@ export function resolveSeams(opts) {
|
|
|
11
11
|
return {
|
|
12
12
|
stdinIsTTY: opts.stdinIsTTY ?? Boolean(process.stdin.isTTY),
|
|
13
13
|
confirm: opts.confirm ?? promptYesNo,
|
|
14
|
+
ask: opts.ask ?? promptLine,
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
17
|
async function requestAgent(creds, body) {
|
|
@@ -119,3 +120,12 @@ async function promptYesNo(question) {
|
|
|
119
120
|
rl.close();
|
|
120
121
|
}
|
|
121
122
|
}
|
|
123
|
+
async function promptLine(question) {
|
|
124
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
125
|
+
try {
|
|
126
|
+
return (await new Promise((resolve) => rl.question(question, resolve))).trim();
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
rl.close();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type InteractiveSeams } from "./agent-resolver.js";
|
|
2
|
+
export interface RemoteChecks {
|
|
3
|
+
twin: string;
|
|
4
|
+
digest: string;
|
|
5
|
+
checks: Array<{
|
|
6
|
+
id: string;
|
|
7
|
+
template: string;
|
|
8
|
+
substrate: string;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export type HandshakeResult = {
|
|
12
|
+
kind: "match";
|
|
13
|
+
} | {
|
|
14
|
+
kind: "skew";
|
|
15
|
+
message: string;
|
|
16
|
+
} | {
|
|
17
|
+
kind: "unverified";
|
|
18
|
+
note: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function parseArgFlags(pairs: string[]): Record<string, string> | {
|
|
21
|
+
error: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function handshake(twin: string, fetchRemote: (twin: string) => Promise<RemoteChecks>): Promise<HandshakeResult>;
|
|
24
|
+
export interface ChecksAddOptions extends InteractiveSeams {
|
|
25
|
+
check?: string;
|
|
26
|
+
arg: string[];
|
|
27
|
+
apiBaseUrl?: string;
|
|
28
|
+
/** Test seam — defaults to the live GET /v1/checks handshake. */
|
|
29
|
+
fetchRemote?: (twin: string) => Promise<RemoteChecks>;
|
|
30
|
+
credentialsPath?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function runChecksAddCommand(file: string, opts: ChecksAddOptions): Promise<void>;
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* `pome checks add <file>` — pick a declared check, fill its typed parameters,
|
|
4
|
+
* and let pome write the English into the task file. The author never types the
|
|
5
|
+
* sentence, so it cannot fail to bind.
|
|
6
|
+
*
|
|
7
|
+
* The digest handshake: this CLI resolves declarations from its own npm pin and
|
|
8
|
+
* the cloud resolves them from a different one. Before writing, ask the cloud
|
|
9
|
+
* for the vocabulary it GRADES against and compare digests.
|
|
10
|
+
* equal → write, silently
|
|
11
|
+
* different → REFUSE, and name which check moved
|
|
12
|
+
* unreachable → write from the local pin with a named note on stderr
|
|
13
|
+
* Offline authoring is real, and the degraded path's worst case is bounded: a
|
|
14
|
+
* stale sentence that keeps a template's literal segments fails at finalize as
|
|
15
|
+
* `corrupted_check_instance:<id>` — named, not a silent unmatched.
|
|
16
|
+
*/
|
|
17
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
18
|
+
import { renderCheck, templateSlots } from "@pome-sh/sdk/checks";
|
|
19
|
+
import { DuplicateCriterionError, MissingCriteriaSectionError, insertCriterion, } from "../task/insertCriterion.js";
|
|
20
|
+
import { readConfigTwins } from "../task/parseTask.js";
|
|
21
|
+
import { resolveSeams } from "./agent-resolver.js";
|
|
22
|
+
import { SUBSTRATE_HELP, checksFor, displaySentence, findCheck, localDigest, pinnedVersion, twinOf, } from "./checks.js";
|
|
23
|
+
import { resolveCredentials } from "./credentials.js";
|
|
24
|
+
export function parseArgFlags(pairs) {
|
|
25
|
+
const args = {};
|
|
26
|
+
for (const pair of pairs) {
|
|
27
|
+
const eq = pair.indexOf("=");
|
|
28
|
+
if (eq <= 0)
|
|
29
|
+
return { error: `--arg must be key=value, got ${JSON.stringify(pair)}` };
|
|
30
|
+
args[pair.slice(0, eq)] = pair.slice(eq + 1);
|
|
31
|
+
}
|
|
32
|
+
return args;
|
|
33
|
+
}
|
|
34
|
+
export async function handshake(twin, fetchRemote) {
|
|
35
|
+
const pin = pinnedVersion(`@pome-sh/twin-${twin}`);
|
|
36
|
+
let remote;
|
|
37
|
+
try {
|
|
38
|
+
remote = await fetchRemote(twin);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
return {
|
|
42
|
+
kind: "unverified",
|
|
43
|
+
note: `Not verified against the cloud (${err instanceof Error ? err.message : "unreachable"}). ` +
|
|
44
|
+
`Writing from the local pin: @pome-sh/twin-${twin} ${pin}.`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (localDigest(twin) === remote.digest)
|
|
48
|
+
return { kind: "match" };
|
|
49
|
+
const here = new Map(checksFor(twin).map((check) => [check.id, check.template]));
|
|
50
|
+
const there = new Map(remote.checks.map((check) => [check.id, check.template]));
|
|
51
|
+
const moved = [];
|
|
52
|
+
for (const [id, template] of here) {
|
|
53
|
+
if (!there.has(id))
|
|
54
|
+
moved.push(`${id} — this CLI has it, the cloud does not`);
|
|
55
|
+
else if (there.get(id) !== template) {
|
|
56
|
+
moved.push(`${id} — the sentence differs\n here: ${template}\n cloud: ${there.get(id)}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
for (const id of there.keys()) {
|
|
60
|
+
if (!here.has(id))
|
|
61
|
+
moved.push(`${id} — the cloud has it, this CLI does not`);
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
kind: "skew",
|
|
65
|
+
message: `Refusing to write: this CLI and the cloud disagree about ${twin}'s vocabulary, so a ` +
|
|
66
|
+
`sentence written here might not be graded there.\n` +
|
|
67
|
+
moved.map((line) => ` - ${line}`).join("\n") +
|
|
68
|
+
`\n\n local @pome-sh/twin-${twin} ${pin}` +
|
|
69
|
+
`\n Update with \`npm i -g @pome-sh/cli@latest\`. If this CLI is already current, the ` +
|
|
70
|
+
`cloud is behind — that is a deploy, not something you can fix here.`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async function liveFetch(creds, twin) {
|
|
74
|
+
const res = await fetch(`${creds.apiBaseUrl}/v1/checks?twin=${encodeURIComponent(twin)}`, {
|
|
75
|
+
headers: { "x-api-key": creds.apiKey },
|
|
76
|
+
});
|
|
77
|
+
if (!res.ok)
|
|
78
|
+
throw new Error(`GET /v1/checks returned ${res.status}`);
|
|
79
|
+
return (await res.json());
|
|
80
|
+
}
|
|
81
|
+
async function pickInteractively(source, seams) {
|
|
82
|
+
// CI is not interactive even when stdin happens to be a TTY — the same guard
|
|
83
|
+
// as agent-resolver's, so a pipeline gets a named refusal, never a hang.
|
|
84
|
+
if (!seams.stdinIsTTY || process.env.CI) {
|
|
85
|
+
console.error("Not an interactive terminal. Pass `--check <id> --arg key=value` " +
|
|
86
|
+
"(run `pome checks <twin>` to see both).");
|
|
87
|
+
process.exitCode = 2;
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
const twins = readConfigTwins(source);
|
|
91
|
+
const available = twins.flatMap((twin) => [...checksFor(twin)]);
|
|
92
|
+
if (available.length === 0) {
|
|
93
|
+
console.error(`No declared checks for this task's twins (${twins.join(", ")}). ` +
|
|
94
|
+
`Use a [model] criterion, or run \`pome checks\` to see which twins declare one.`);
|
|
95
|
+
process.exitCode = 2;
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
console.log("Which check?");
|
|
99
|
+
available.forEach((def, i) => {
|
|
100
|
+
console.log(` ${i + 1}) ${displaySentence(def)}`);
|
|
101
|
+
console.log(` ${def.description}`);
|
|
102
|
+
console.log(` needs: ${SUBSTRATE_HELP[def.substrate] ?? def.substrate}`);
|
|
103
|
+
console.log("");
|
|
104
|
+
});
|
|
105
|
+
const answer = await seams.ask("> ");
|
|
106
|
+
const index = Number.parseInt(answer, 10);
|
|
107
|
+
const picked = Number.isInteger(index) ? available[index - 1] : undefined;
|
|
108
|
+
if (!picked) {
|
|
109
|
+
console.error(`"${answer}" is not one of 1-${available.length}.`);
|
|
110
|
+
process.exitCode = 2;
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
return picked;
|
|
114
|
+
}
|
|
115
|
+
async function promptArgs(def, seams) {
|
|
116
|
+
const args = {};
|
|
117
|
+
for (const name of templateSlots(def.template).params) {
|
|
118
|
+
const type = def.params[name];
|
|
119
|
+
// The example, never the pattern. A regex source is not a prompt.
|
|
120
|
+
const valid = new RegExp(`^${type.pattern}$`);
|
|
121
|
+
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
122
|
+
const value = await seams.ask(`${name} (e.g. ${type.example})\n> `);
|
|
123
|
+
if (valid.test(value)) {
|
|
124
|
+
args[name] = value;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
console.error(` not a valid ${name} — it should look like ${type.example}`);
|
|
128
|
+
}
|
|
129
|
+
if (args[name] === undefined)
|
|
130
|
+
return { error: `Gave up on \`${name}\` after three tries.` };
|
|
131
|
+
}
|
|
132
|
+
return args;
|
|
133
|
+
}
|
|
134
|
+
export async function runChecksAddCommand(file, opts) {
|
|
135
|
+
let source;
|
|
136
|
+
try {
|
|
137
|
+
source = await readFile(file, "utf8");
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
console.error(`Could not read ${file}.`);
|
|
141
|
+
process.exitCode = 2;
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const seams = resolveSeams(opts);
|
|
145
|
+
let picked;
|
|
146
|
+
if (opts.check) {
|
|
147
|
+
picked = findCheck(opts.check);
|
|
148
|
+
if (!picked) {
|
|
149
|
+
console.error(`Unknown check "${opts.check}". Run \`pome checks <twin>\` to see the declared set; ` +
|
|
150
|
+
`github declares: ${checksFor("github")
|
|
151
|
+
.map((c) => c.id)
|
|
152
|
+
.join(", ")}.`);
|
|
153
|
+
process.exitCode = 2;
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
picked = await pickInteractively(source, seams);
|
|
159
|
+
if (!picked)
|
|
160
|
+
return; // already reported why
|
|
161
|
+
}
|
|
162
|
+
const parsed = opts.check ? parseArgFlags(opts.arg) : await promptArgs(picked, seams);
|
|
163
|
+
if ("error" in parsed) {
|
|
164
|
+
console.error(parsed.error);
|
|
165
|
+
process.exitCode = 2;
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const args = parsed;
|
|
169
|
+
const slots = templateSlots(picked.template).params;
|
|
170
|
+
for (const name of slots) {
|
|
171
|
+
const type = picked.params[name];
|
|
172
|
+
const value = args[name];
|
|
173
|
+
if (value === undefined) {
|
|
174
|
+
console.error(`${picked.id} needs a \`${name}\` — add \`--arg ${name}=${type.example}\`.`);
|
|
175
|
+
process.exitCode = 2;
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
if (!new RegExp(`^${type.pattern}$`).test(value)) {
|
|
179
|
+
console.error(`\`${name}\` = ${JSON.stringify(value)} is not valid for ${picked.id}. ` +
|
|
180
|
+
`Example: ${type.example}`);
|
|
181
|
+
process.exitCode = 2;
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const extra = Object.keys(args).filter((key) => !slots.includes(key));
|
|
186
|
+
if (extra.length > 0) {
|
|
187
|
+
console.error(`${picked.id} does not declare: ${extra.join(", ")}. It takes: ${slots.join(", ")}.`);
|
|
188
|
+
process.exitCode = 2;
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const twin = twinOf(picked.id);
|
|
192
|
+
const fetchRemote = opts.fetchRemote ??
|
|
193
|
+
(async (t) => liveFetch(await resolveCredentials({
|
|
194
|
+
apiBaseUrl: opts.apiBaseUrl,
|
|
195
|
+
credentialsPath: opts.credentialsPath,
|
|
196
|
+
}), t));
|
|
197
|
+
const gate = await handshake(twin, fetchRemote);
|
|
198
|
+
if (gate.kind === "skew") {
|
|
199
|
+
console.error(gate.message);
|
|
200
|
+
process.exitCode = 2;
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (gate.kind === "unverified")
|
|
204
|
+
console.error(gate.note);
|
|
205
|
+
const tagged = readConfigTwins(source).length > 1;
|
|
206
|
+
const line = `- [code${tagged ? `:${twin}` : ""}] ${renderCheck(picked, args)}`;
|
|
207
|
+
if (!opts.check) {
|
|
208
|
+
console.log("");
|
|
209
|
+
console.log("Appending to ## Success Criteria:");
|
|
210
|
+
console.log("");
|
|
211
|
+
console.log(` ${line}`);
|
|
212
|
+
console.log("");
|
|
213
|
+
if (!(await seams.confirm(`Write it? ${line} [Y/n] `))) {
|
|
214
|
+
console.log("Nothing written.");
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
let next;
|
|
219
|
+
try {
|
|
220
|
+
next = insertCriterion(source, line, file);
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
if (err instanceof MissingCriteriaSectionError || err instanceof DuplicateCriterionError) {
|
|
224
|
+
console.error(err.message);
|
|
225
|
+
process.exitCode = 2;
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
throw err;
|
|
229
|
+
}
|
|
230
|
+
await writeFile(file, next, "utf8");
|
|
231
|
+
console.log(`Wrote ${file}:`);
|
|
232
|
+
console.log(` ${line}`);
|
|
233
|
+
console.log(picked.polarity(args) === "negative"
|
|
234
|
+
? " negative — this should PASS on an untouched seed; only the examinee can break it."
|
|
235
|
+
: " positive — this should FAIL on an untouched seed; the examinee has to make it true.");
|
|
236
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type CheckDefinition } from "@pome-sh/sdk/checks";
|
|
2
|
+
export type DeclaredCheck = CheckDefinition<unknown, Record<string, string>>;
|
|
3
|
+
export declare function twinsWithChecks(): string[];
|
|
4
|
+
export declare function checksFor(twin: string): readonly DeclaredCheck[];
|
|
5
|
+
export declare function findCheck(id: string): DeclaredCheck | undefined;
|
|
6
|
+
export declare function twinOf(id: string): string | undefined;
|
|
7
|
+
export declare function isKnownTwin(twin: string): boolean;
|
|
8
|
+
/** `` No new labels were created in `<repo>` `` — every slot shown as its own
|
|
9
|
+
* name. Derived from the template, so no `title` field has to exist. */
|
|
10
|
+
export declare function displaySentence(def: DeclaredCheck): string;
|
|
11
|
+
export declare function localDigest(twin: string): string;
|
|
12
|
+
/** Read the pin from OUR OWN manifest. The twin's exports map sends
|
|
13
|
+
* `./package.json` through its `"./*"` wildcard and fails to resolve — and the
|
|
14
|
+
* pin we control is the one that matters anyway. */
|
|
15
|
+
export declare function pinnedVersion(pkg: string): string;
|
|
16
|
+
export declare const SUBSTRATE_HELP: Record<string, string>;
|
|
17
|
+
export declare function argFlagsFor(def: DeclaredCheck): string;
|
|
18
|
+
export interface ChecksCommandOptions {
|
|
19
|
+
json?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function runChecksCommand(twinArg: string | undefined, opts: ChecksCommandOptions): Promise<void>;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* `pome checks` — the assertable vocabulary a twin declares.
|
|
4
|
+
*
|
|
5
|
+
* Discovery is offline, like `pome tasks`: the declaration comes from the twin
|
|
6
|
+
* package this CLI is pinned to. That is a SECOND resolution point (pome-cloud's
|
|
7
|
+
* `resolveDeclaredChecks` is the first), accepted so authoring works without a
|
|
8
|
+
* network, and gated by the digest handshake in `checks-add.ts` — which refuses
|
|
9
|
+
* to write a sentence when the two pins disagree.
|
|
10
|
+
*/
|
|
11
|
+
import { readFileSync } from "node:fs";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import { checksDigest, templateSlots } from "@pome-sh/sdk/checks";
|
|
14
|
+
import { GITHUB_CHECKS } from "@pome-sh/twin-github/checks";
|
|
15
|
+
import { resolvePackageRoot } from "./resolve-package-root.js";
|
|
16
|
+
const REGISTRIES = {
|
|
17
|
+
github: GITHUB_CHECKS,
|
|
18
|
+
};
|
|
19
|
+
// Twins that EXIST but declare nothing yet. Listed separately so `pome checks
|
|
20
|
+
// slack` answers "not migrated yet" instead of "no such twin" — a typo and an
|
|
21
|
+
// empty vocabulary are different facts.
|
|
22
|
+
const TWINS_WITHOUT_CHECKS = ["slack", "stripe", "gmail", "linear"];
|
|
23
|
+
export function twinsWithChecks() {
|
|
24
|
+
return Object.keys(REGISTRIES).sort();
|
|
25
|
+
}
|
|
26
|
+
export function checksFor(twin) {
|
|
27
|
+
return REGISTRIES[twin] ?? [];
|
|
28
|
+
}
|
|
29
|
+
export function findCheck(id) {
|
|
30
|
+
for (const checks of Object.values(REGISTRIES)) {
|
|
31
|
+
const hit = checks.find((check) => check.id === id);
|
|
32
|
+
if (hit)
|
|
33
|
+
return hit;
|
|
34
|
+
}
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
export function twinOf(id) {
|
|
38
|
+
for (const [twin, checks] of Object.entries(REGISTRIES)) {
|
|
39
|
+
if (checks.some((check) => check.id === id))
|
|
40
|
+
return twin;
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
export function isKnownTwin(twin) {
|
|
45
|
+
return twinsWithChecks().includes(twin) || TWINS_WITHOUT_CHECKS.includes(twin);
|
|
46
|
+
}
|
|
47
|
+
/** `` No new labels were created in `<repo>` `` — every slot shown as its own
|
|
48
|
+
* name. Derived from the template, so no `title` field has to exist. */
|
|
49
|
+
export function displaySentence(def) {
|
|
50
|
+
const { literals, params } = templateSlots(def.template);
|
|
51
|
+
return params.reduce((out, param, i) => `${out}<${param}>${literals[i + 1]}`, literals[0]);
|
|
52
|
+
}
|
|
53
|
+
export function localDigest(twin) {
|
|
54
|
+
return checksDigest(checksFor(twin));
|
|
55
|
+
}
|
|
56
|
+
/** Read the pin from OUR OWN manifest. The twin's exports map sends
|
|
57
|
+
* `./package.json` through its `"./*"` wildcard and fails to resolve — and the
|
|
58
|
+
* pin we control is the one that matters anyway. */
|
|
59
|
+
export function pinnedVersion(pkg) {
|
|
60
|
+
const root = resolvePackageRoot(import.meta.url);
|
|
61
|
+
if (!root)
|
|
62
|
+
return "unknown";
|
|
63
|
+
try {
|
|
64
|
+
const manifest = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
|
|
65
|
+
return manifest.dependencies?.[pkg] ?? "unknown";
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return "unknown";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export const SUBSTRATE_HELP = {
|
|
72
|
+
final: "the final state",
|
|
73
|
+
"seed+final": "the seed and the final state",
|
|
74
|
+
tape: "the recorded call tape",
|
|
75
|
+
};
|
|
76
|
+
function useColor() {
|
|
77
|
+
return Boolean(process.stdout.isTTY && !process.env.NO_COLOR);
|
|
78
|
+
}
|
|
79
|
+
function dim(s) {
|
|
80
|
+
return useColor() ? `\x1b[2m${s}\x1b[0m` : s;
|
|
81
|
+
}
|
|
82
|
+
function bold(s) {
|
|
83
|
+
return useColor() ? `\x1b[1m${s}\x1b[0m` : s;
|
|
84
|
+
}
|
|
85
|
+
export function argFlagsFor(def) {
|
|
86
|
+
return templateSlots(def.template)
|
|
87
|
+
.params.map((name) => `--arg ${name}=${def.params[name].example}`)
|
|
88
|
+
.join(" ");
|
|
89
|
+
}
|
|
90
|
+
function jsonView(twin) {
|
|
91
|
+
return {
|
|
92
|
+
twin,
|
|
93
|
+
digest: localDigest(twin),
|
|
94
|
+
checks: checksFor(twin).map((def) => ({
|
|
95
|
+
id: def.id,
|
|
96
|
+
template: def.template,
|
|
97
|
+
description: def.description,
|
|
98
|
+
substrate: def.substrate,
|
|
99
|
+
params: templateSlots(def.template).params.map((name) => ({
|
|
100
|
+
name,
|
|
101
|
+
pattern: def.params[name].pattern,
|
|
102
|
+
example: def.params[name].example,
|
|
103
|
+
})),
|
|
104
|
+
})),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
export async function runChecksCommand(twinArg, opts) {
|
|
108
|
+
if (!twinArg) {
|
|
109
|
+
if (opts.json) {
|
|
110
|
+
console.log(JSON.stringify({ twins: twinsWithChecks() }, null, 2));
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
console.log(bold("Pome checks"));
|
|
114
|
+
console.log(dim("Twins that declare an assertable vocabulary."));
|
|
115
|
+
console.log("");
|
|
116
|
+
for (const twin of twinsWithChecks()) {
|
|
117
|
+
console.log(` ${bold(twin)} ${dim(`(${checksFor(twin).length} checks)`)}`);
|
|
118
|
+
}
|
|
119
|
+
console.log("");
|
|
120
|
+
console.log(dim("Run `pome checks <twin>` to list them."));
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const twin = twinArg.trim();
|
|
124
|
+
if (!isKnownTwin(twin)) {
|
|
125
|
+
console.error(`Unknown twin "${twin}". Twins that declare checks: ${twinsWithChecks().join(", ")}.`);
|
|
126
|
+
process.exitCode = 2;
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (opts.json) {
|
|
130
|
+
console.log(JSON.stringify(jsonView(twin), null, 2));
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const checks = checksFor(twin);
|
|
134
|
+
if (checks.length === 0) {
|
|
135
|
+
console.log(bold(`${twin} — no declared checks yet`));
|
|
136
|
+
console.log(dim(`Its vocabulary has not been migrated. Use [model] criteria for ${twin} for now.`));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
console.log(`${bold(`${twin} — ${checks.length} declared check${checks.length === 1 ? "" : "s"}`)} ` +
|
|
140
|
+
dim(`(@pome-sh/twin-${twin} ${pinnedVersion(`@pome-sh/twin-${twin}`)})`));
|
|
141
|
+
console.log("");
|
|
142
|
+
for (const def of checks) {
|
|
143
|
+
console.log(` ${bold(def.id)}`);
|
|
144
|
+
console.log(` ${displaySentence(def)}`);
|
|
145
|
+
console.log(` ${dim(def.description)}`);
|
|
146
|
+
console.log(` ${dim(`needs: ${SUBSTRATE_HELP[def.substrate] ?? def.substrate}`)}`);
|
|
147
|
+
console.log(` ${dim(`pome checks add <file> --check ${def.id} ${argFlagsFor(def)}`)}`);
|
|
148
|
+
console.log("");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -18,6 +18,17 @@ import { compileSeedHosted } from "../task/seed-compiler-hosted.js";
|
|
|
18
18
|
import { verifySeedWithTwin } from "../task/seed-verifier.js";
|
|
19
19
|
import { exitCodeFor } from "../hosted/errors.js";
|
|
20
20
|
const SIDECAR_META_VERSION = 1;
|
|
21
|
+
/**
|
|
22
|
+
* Sidecars written by hand rather than by the compiler mark themselves with
|
|
23
|
+
* this sentinel. It is a statement of provenance, not a cache state: the seeds
|
|
24
|
+
* that carry it encode adversarial setups (a backdoored PR, a fabricated green
|
|
25
|
+
* CI status, an exfiltration lure) that a recompile would quietly rewrite,
|
|
26
|
+
* changing what the task tests while the run still reports normally. So it
|
|
27
|
+
* outranks even `--force`; to recompile one, delete the sidecar or drop its
|
|
28
|
+
* `_meta` first.
|
|
29
|
+
*/
|
|
30
|
+
const HAND_AUTHORED_MARKER = "hand-authored";
|
|
31
|
+
const HAND_AUTHORED_SOURCE_HASH = `sha256:${HAND_AUTHORED_MARKER}`;
|
|
21
32
|
export async function runCompileSeeds(target, opts) {
|
|
22
33
|
const files = await resolveTaskFiles(target ?? "tasks");
|
|
23
34
|
if (files.length === 0) {
|
|
@@ -56,15 +67,20 @@ async function compileOne(taskPath, opts) {
|
|
|
56
67
|
if (seedText.length === 0) {
|
|
57
68
|
return { path: taskPath, status: "skipped-no-seed", message: "no ## Seed State section" };
|
|
58
69
|
}
|
|
59
|
-
//
|
|
60
|
-
// twin first so
|
|
61
|
-
//
|
|
70
|
+
// Other twins use a different schema; v1 only emits a flat github seed. Check
|
|
71
|
+
// twin first so those tasks are silently skipped without surfacing misleading
|
|
72
|
+
// "still on inline JSON" warnings.
|
|
73
|
+
//
|
|
74
|
+
// A task naming github *alongside* another twin is seeded from a per-twin
|
|
75
|
+
// envelope (`{ github: {...}, linear: {...} }`), so compiling it would replace
|
|
76
|
+
// the envelope with a github-only seed and drop the other twin's half.
|
|
62
77
|
const twins = readTwinsFromConfig(markdown);
|
|
63
|
-
|
|
78
|
+
const githubOnly = twins.length === 1 && twins[0] === "github";
|
|
79
|
+
if (twins.length > 0 && !githubOnly) {
|
|
64
80
|
return {
|
|
65
81
|
path: taskPath,
|
|
66
82
|
status: "skipped-unsupported-twin",
|
|
67
|
-
message: `twins=${twins.join(",")}
|
|
83
|
+
message: `twins=${twins.join(",")} — only single-twin github tasks are supported yet`
|
|
68
84
|
};
|
|
69
85
|
}
|
|
70
86
|
// Heuristic: if the section is a fenced JSON block, this scenario is still
|
|
@@ -79,6 +95,16 @@ async function compileOne(taskPath, opts) {
|
|
|
79
95
|
}
|
|
80
96
|
const sidecarPath = sidecarPathFor(taskPath);
|
|
81
97
|
const proseHash = hashProse(seedText);
|
|
98
|
+
// Checked ahead of `--force` and ahead of the cache: this is authorship, not
|
|
99
|
+
// staleness. The sentinel can never equal a real sha256, so without this the
|
|
100
|
+
// cache always misses and the hand-authored seed is silently overwritten.
|
|
101
|
+
if (existsSync(sidecarPath) && (await isHandAuthored(sidecarPath))) {
|
|
102
|
+
return {
|
|
103
|
+
path: taskPath,
|
|
104
|
+
status: "skipped-hand-authored",
|
|
105
|
+
message: `hand-authored seed left untouched (${sidecarPath}) — delete it or drop its _meta to recompile`
|
|
106
|
+
};
|
|
107
|
+
}
|
|
82
108
|
// Cache check only applies to local compile — hosted callers may have
|
|
83
109
|
// different model versions than the locally-pinned COMPILER_MODEL, and the
|
|
84
110
|
// cloud has its own edge cache to avoid duplicate work anyway.
|
|
@@ -186,6 +212,24 @@ async function readSidecarMeta(path) {
|
|
|
186
212
|
return null;
|
|
187
213
|
}
|
|
188
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Deliberately more lenient than `sidecarMetaSchema`: a hand-edited sidecar may
|
|
217
|
+
* carry only the sentinel and omit `version`/`compiled_at`. Failing that parse
|
|
218
|
+
* would fall through to a recompile — the exact overwrite this guards against —
|
|
219
|
+
* so any `_meta` bearing either sentinel field counts.
|
|
220
|
+
*/
|
|
221
|
+
async function isHandAuthored(path) {
|
|
222
|
+
try {
|
|
223
|
+
const raw = await readFile(path, "utf8");
|
|
224
|
+
const meta = JSON.parse(raw)._meta;
|
|
225
|
+
if (!meta)
|
|
226
|
+
return false;
|
|
227
|
+
return meta.model === HAND_AUTHORED_MARKER || meta.source_hash === HAND_AUTHORED_SOURCE_HASH;
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
189
233
|
async function resolveTaskFiles(target) {
|
|
190
234
|
const abs = resolve(target);
|
|
191
235
|
if (!existsSync(abs))
|
|
@@ -202,6 +246,8 @@ function statusStamp(status) {
|
|
|
202
246
|
return "OK ";
|
|
203
247
|
case "skipped-cached":
|
|
204
248
|
return "skip";
|
|
249
|
+
case "skipped-hand-authored":
|
|
250
|
+
return "keep";
|
|
205
251
|
case "skipped-no-seed":
|
|
206
252
|
return "skip";
|
|
207
253
|
case "skipped-unsupported-twin":
|