@astrosheep/keiyaku 2.9.12 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -126
- package/build/integrations/marketplace/.agents/plugins/marketplace.json +12 -0
- package/build/integrations/marketplace/.claude-plugin/marketplace.json +5 -0
- package/build/integrations/marketplace/plugins/keiyaku/.claude-plugin/plugin.json +7 -0
- package/build/integrations/marketplace/plugins/keiyaku/.codex-plugin/plugin.json +18 -0
- package/build/integrations/marketplace/plugins/keiyaku/opencode.js +16 -0
- package/build/integrations/marketplace/plugins/keiyaku/package.json +8 -0
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku/SKILL.md +34 -0
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/SKILL.md +50 -0
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-task/SKILL.md +62 -0
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-workflow/SKILL.md +72 -0
- package/build/src/akuma/activity.d.ts +66 -0
- package/build/src/akuma/activity.js +139 -0
- package/build/src/akuma/akuma.d.ts +116 -0
- package/build/src/akuma/akuma.js +382 -0
- package/build/src/akuma/archetype.d.ts +31 -0
- package/build/src/akuma/archetype.js +188 -0
- package/build/src/akuma/body.d.ts +20 -0
- package/build/src/akuma/body.js +305 -0
- package/build/src/akuma/heart/facts.d.ts +150 -0
- package/build/src/akuma/heart/facts.js +9 -0
- package/build/src/akuma/heart/index.d.ts +78 -0
- package/build/src/akuma/heart/index.js +361 -0
- package/build/src/akuma/heart/rows.d.ts +189 -0
- package/build/src/akuma/heart/rows.js +319 -0
- package/build/src/akuma/heart/schema.d.ts +5 -0
- package/build/src/akuma/heart/schema.js +113 -0
- package/build/src/akuma/identity.d.ts +46 -0
- package/build/src/akuma/identity.js +89 -0
- package/build/src/akuma/index.d.ts +7 -0
- package/build/src/akuma/index.js +3 -0
- package/build/src/akuma/provider.d.ts +123 -0
- package/build/src/akuma/provider.js +235 -0
- package/build/src/akuma/providers/claude.d.ts +84 -0
- package/build/src/akuma/providers/claude.js +305 -0
- package/build/src/akuma/providers/codex-app-server/events.d.ts +110 -0
- package/build/src/akuma/providers/codex-app-server/events.js +337 -0
- package/build/src/akuma/providers/codex-app-server/index.d.ts +27 -0
- package/build/src/akuma/providers/codex-app-server/index.js +162 -0
- package/build/src/akuma/providers/index.d.ts +4 -0
- package/build/src/akuma/providers/index.js +71 -0
- package/build/src/akuma/publication.d.ts +10 -0
- package/build/src/akuma/publication.js +107 -0
- package/build/src/akuma/requests.d.ts +46 -0
- package/build/src/akuma/requests.js +388 -0
- package/build/src/alias/index.d.ts +17 -0
- package/build/src/alias/index.js +104 -0
- package/build/src/body/amend.d.ts +2 -0
- package/build/src/body/amend.js +289 -0
- package/build/src/body/arc.d.ts +2 -0
- package/build/src/body/arc.js +54 -0
- package/build/src/body/decode.d.ts +4 -0
- package/build/src/body/decode.js +146 -0
- package/build/src/body/keys.d.ts +4 -0
- package/build/src/body/keys.js +11 -0
- package/build/src/body/region.d.ts +6 -0
- package/build/src/body/region.js +139 -0
- package/build/src/body/render.d.ts +4 -0
- package/build/src/body/render.js +73 -0
- package/build/src/body/shape.d.ts +29 -0
- package/build/src/body/shape.js +16 -0
- package/build/src/body/types.d.ts +28 -0
- package/build/src/body/verification.d.ts +7 -0
- package/build/src/body/verification.js +25 -0
- package/build/src/cli/accepted.d.ts +16 -0
- package/build/src/cli/accepted.js +65 -0
- package/build/src/cli/actor.d.ts +8 -0
- package/build/src/cli/actor.js +11 -0
- package/build/src/cli/commands/akuma-invoke.d.ts +53 -0
- package/build/src/cli/commands/akuma-invoke.js +68 -0
- package/build/src/cli/commands/akuma.d.ts +42 -0
- package/build/src/cli/commands/akuma.js +224 -0
- package/build/src/cli/commands/amend.d.ts +13 -0
- package/build/src/cli/commands/amend.js +13 -0
- package/build/src/cli/commands/bind.d.ts +12 -0
- package/build/src/cli/commands/bind.js +17 -0
- package/build/src/cli/commands/install.d.ts +25 -0
- package/build/src/cli/commands/install.js +103 -0
- package/build/src/cli/commands/task-invoke.d.ts +9 -0
- package/build/src/cli/commands/task-invoke.js +92 -0
- package/build/src/cli/commands/task.d.ts +16 -0
- package/build/src/cli/commands/task.js +144 -0
- package/build/src/cli/index.d.ts +2 -0
- package/build/src/cli/index.js +3 -0
- package/build/src/cli/invoke.d.ts +17 -0
- package/build/src/cli/invoke.js +265 -0
- package/build/src/cli/main.d.ts +1 -0
- package/build/src/cli/main.js +79 -0
- package/build/src/cli/parse.d.ts +210 -0
- package/build/src/cli/parse.js +375 -0
- package/build/src/cli/render/akuma-tool.d.ts +11 -0
- package/build/src/cli/render/akuma-tool.js +68 -0
- package/build/src/cli/render/akuma.d.ts +6 -0
- package/build/src/cli/render/akuma.js +254 -0
- package/build/src/cli/render/board.d.ts +2 -0
- package/build/src/cli/render/board.js +4 -0
- package/build/src/cli/render/contract.d.ts +4 -0
- package/build/src/cli/render/contract.js +69 -0
- package/build/src/cli/render/kanshi.d.ts +3 -0
- package/build/src/cli/render/kanshi.js +204 -0
- package/build/src/cli/render/refusal.d.ts +2 -0
- package/build/src/cli/render/refusal.js +4 -0
- package/build/src/cli/render/settings.d.ts +3 -0
- package/build/src/cli/render/settings.js +30 -0
- package/build/src/cli/render/task.d.ts +6 -0
- package/build/src/cli/render/task.js +105 -0
- package/build/src/cli/render/terminal.d.ts +10 -0
- package/build/src/cli/render/terminal.js +76 -0
- package/build/src/cli/render/text.d.ts +3 -0
- package/build/src/cli/render/text.js +15 -0
- package/build/src/cli/result.d.ts +55 -0
- package/build/src/cli/selectors.d.ts +9 -0
- package/build/src/cli/selectors.js +66 -0
- package/build/src/cli/usage.d.ts +6 -0
- package/build/src/cli/usage.js +19 -0
- package/build/src/context-root.d.ts +4 -0
- package/build/src/context-root.js +15 -0
- package/build/src/coordination/durable-file.d.ts +1 -0
- package/build/src/coordination/durable-file.js +36 -0
- package/build/src/coordination/sqlite-transaction-lock.d.ts +14 -0
- package/build/src/coordination/sqlite-transaction-lock.js +119 -0
- package/build/src/core/decide.d.ts +45 -0
- package/build/src/core/facts/codec.d.ts +3 -0
- package/build/src/core/facts/codec.js +258 -0
- package/build/src/core/facts/eligibility.d.ts +16 -0
- package/build/src/core/facts/eligibility.js +75 -0
- package/build/src/core/facts/errors.d.ts +3 -0
- package/build/src/core/facts/errors.js +6 -0
- package/build/src/core/facts/fold.d.ts +2 -0
- package/build/src/core/facts/fold.js +97 -0
- package/build/src/core/facts/gate.d.ts +24 -0
- package/build/src/core/facts/gate.js +52 -0
- package/build/src/core/facts/observation.d.ts +12 -0
- package/build/src/core/facts/observation.js +23 -0
- package/build/src/core/facts/offer.d.ts +21 -0
- package/build/src/core/facts/types.d.ts +130 -0
- package/build/src/core/facts/types.js +66 -0
- package/build/src/core/subject.d.ts +21 -0
- package/build/src/core/subject.js +89 -0
- package/build/src/core/verbs/abandon.d.ts +13 -0
- package/build/src/core/verbs/abandon.js +17 -0
- package/build/src/core/verbs/amend.d.ts +14 -0
- package/build/src/core/verbs/amend.js +56 -0
- package/build/src/core/verbs/arc.d.ts +13 -0
- package/build/src/core/verbs/arc.js +25 -0
- package/build/src/core/verbs/attestation.d.ts +13 -0
- package/build/src/core/verbs/attestation.js +21 -0
- package/build/src/core/verbs/bind.d.ts +13 -0
- package/build/src/core/verbs/bind.js +40 -0
- package/build/src/core/verbs/deliver.d.ts +13 -0
- package/build/src/core/verbs/deliver.js +26 -0
- package/build/src/core/verbs/placement.d.ts +13 -0
- package/build/src/core/verbs/placement.js +42 -0
- package/build/src/dispatch/index.d.ts +31 -0
- package/build/src/dispatch/index.js +159 -0
- package/build/src/git/admission.d.ts +18 -0
- package/build/src/git/admission.js +116 -0
- package/build/src/git/delivery.d.ts +20 -0
- package/build/src/git/delivery.js +109 -0
- package/build/src/git/hooks.d.ts +34 -0
- package/build/src/git/hooks.js +258 -0
- package/build/src/git/identity.d.ts +13 -0
- package/build/src/git/identity.js +28 -0
- package/build/src/git/observe.d.ts +38 -0
- package/build/src/git/observe.js +227 -0
- package/build/src/git/reconcile.d.ts +49 -0
- package/build/src/git/reconcile.js +223 -0
- package/build/src/git/repository.d.ts +80 -0
- package/build/src/git/repository.js +456 -0
- package/build/src/git/tree.d.ts +34 -0
- package/build/src/git/tree.js +112 -0
- package/build/src/git/verification.d.ts +14 -0
- package/build/src/git/verification.js +56 -0
- package/build/src/identity/coordinates.d.ts +9 -0
- package/build/src/identity/coordinates.js +20 -0
- package/build/src/identity/normalize.d.ts +8 -0
- package/build/src/identity/normalize.js +45 -0
- package/build/src/identity/selector.d.ts +6 -0
- package/build/src/identity/selector.js +7 -0
- package/build/src/index.d.ts +4 -0
- package/build/src/index.js +2 -0
- package/build/src/kanshi/index.d.ts +5 -0
- package/build/src/kanshi/index.js +2 -0
- package/build/src/kanshi/read.d.ts +5 -0
- package/build/src/kanshi/read.js +100 -0
- package/build/src/kanshi/report.d.ts +35 -0
- package/build/src/kanshi/select.d.ts +8 -0
- package/build/src/kanshi/select.js +21 -0
- package/build/src/library/akuma-creation.d.ts +79 -0
- package/build/src/library/akuma-creation.js +151 -0
- package/build/src/library/configuration.d.ts +26 -0
- package/build/src/library/configuration.js +100 -0
- package/build/src/library/contract.d.ts +145 -0
- package/build/src/library/contract.js +325 -0
- package/build/src/library/input.d.ts +13 -0
- package/build/src/library/input.js +82 -0
- package/build/src/library/keiyaku.d.ts +28 -0
- package/build/src/library/keiyaku.js +16 -0
- package/build/src/library/region.d.ts +17 -0
- package/build/src/library/region.js +30 -0
- package/build/src/library/repo.d.ts +33 -0
- package/build/src/library/repo.js +61 -0
- package/build/src/markdown/diff.d.ts +1 -0
- package/build/src/markdown/diff.js +4 -0
- package/build/src/markdown/lex.d.ts +3 -0
- package/build/src/markdown/lex.js +221 -0
- package/build/src/markdown/parse.d.ts +2 -0
- package/build/src/markdown/parse.js +221 -0
- package/build/src/markdown/query.d.ts +21 -0
- package/build/src/markdown/query.js +51 -0
- package/build/src/markdown/types.d.ts +118 -0
- package/build/src/markdown/types.js +6 -0
- package/build/src/protocol/attempt.d.ts +36 -0
- package/build/src/protocol/attempt.js +119 -0
- package/build/src/protocol/bind.d.ts +25 -0
- package/build/src/protocol/bind.js +62 -0
- package/build/src/protocol/intent.d.ts +52 -0
- package/build/src/protocol/intent.js +129 -0
- package/build/src/protocol/operations.d.ts +140 -0
- package/build/src/protocol/operations.js +373 -0
- package/build/src/protocol/outcome.d.ts +18 -0
- package/build/src/protocol/outcome.js +15 -0
- package/build/src/protocol/read/audit.d.ts +25 -0
- package/build/src/protocol/read/audit.js +39 -0
- package/build/src/protocol/read/documents.d.ts +8 -0
- package/build/src/protocol/read/documents.js +16 -0
- package/build/src/protocol/read/status.d.ts +38 -0
- package/build/src/protocol/read/status.js +47 -0
- package/build/src/protocol/run.d.ts +39 -0
- package/build/src/protocol/run.js +36 -0
- package/build/src/runtime/proc/line-rpc.d.ts +37 -0
- package/build/src/runtime/proc/line-rpc.js +124 -0
- package/build/src/runtime/proc/run.d.ts +54 -0
- package/build/src/runtime/proc/run.js +200 -0
- package/build/src/settings.d.ts +45 -0
- package/build/src/settings.js +99 -0
- package/build/src/settlement/holder.d.ts +15 -0
- package/build/src/settlement/holder.js +113 -0
- package/build/src/settlement/settle.d.ts +36 -0
- package/build/src/settlement/settle.js +91 -0
- package/build/src/task/board.d.ts +65 -0
- package/build/src/task/board.js +155 -0
- package/build/src/task/compose.d.ts +25 -0
- package/build/src/task/compose.js +232 -0
- package/build/src/task/context.d.ts +4 -0
- package/build/src/task/context.js +56 -0
- package/build/src/task/document.d.ts +24 -0
- package/build/src/task/document.js +118 -0
- package/build/src/task/identity.d.ts +12 -0
- package/build/src/task/identity.js +47 -0
- package/build/src/task/index.d.ts +90 -0
- package/build/src/task/index.js +179 -0
- package/build/src/task/operations.d.ts +115 -0
- package/build/src/task/operations.js +194 -0
- package/build/src/task/store.d.ts +22 -0
- package/build/src/task/store.js +114 -0
- package/build/src/verification/declaration.d.ts +22 -0
- package/build/src/verification/declaration.js +14 -0
- package/build/src/verification/producer.d.ts +23 -0
- package/build/src/verification/producer.js +54 -0
- package/package.json +62 -44
- package/build/.tsbuildinfo +0 -1
- package/build/agents/call-terms.js +0 -31
- package/build/agents/harness/activity-values.js +0 -70
- package/build/agents/harness/control-types.js +0 -18
- package/build/agents/harness/event-channel.js +0 -213
- package/build/agents/harness/event-persistence.js +0 -220
- package/build/agents/harness/events.js +0 -48
- package/build/agents/harness/execution-handle.js +0 -172
- package/build/agents/harness/index.js +0 -11
- package/build/agents/harness/outcome-error.js +0 -81
- package/build/agents/harness/outcome.js +0 -220
- package/build/agents/harness/projection.js +0 -369
- package/build/agents/harness/provider-adapter.js +0 -58
- package/build/agents/harness/router.js +0 -30
- package/build/agents/harness/runtime.js +0 -85
- package/build/agents/harness/session.js +0 -15
- package/build/agents/launch-snapshot/model.js +0 -127
- package/build/agents/launch-snapshot/parse-helpers.js +0 -114
- package/build/agents/launch-snapshot/resolve.js +0 -46
- package/build/agents/opencode-sdk.js +0 -159
- package/build/agents/providers/claude-agent-sdk/adapter.js +0 -396
- package/build/agents/providers/claude-agent-sdk/events.js +0 -218
- package/build/agents/providers/claude-agent-sdk/registration.js +0 -225
- package/build/agents/providers/claude-agent-sdk/session-schema.js +0 -2
- package/build/agents/providers/claude-agent-sdk/session.js +0 -172
- package/build/agents/providers/codex-app-server/adapter.js +0 -387
- package/build/agents/providers/codex-app-server/events.js +0 -492
- package/build/agents/providers/codex-app-server/identity.js +0 -1
- package/build/agents/providers/codex-app-server/policy.js +0 -29
- package/build/agents/providers/codex-app-server/registration.js +0 -259
- package/build/agents/providers/codex-app-server/session-schema.js +0 -6
- package/build/agents/providers/codex-app-server/session.js +0 -273
- package/build/agents/providers/event-type-tail.js +0 -16
- package/build/agents/providers/opencode-sdk/adapter.js +0 -402
- package/build/agents/providers/opencode-sdk/events.js +0 -380
- package/build/agents/providers/opencode-sdk/registration.js +0 -146
- package/build/agents/providers/opencode-sdk/session-schema.js +0 -2
- package/build/agents/providers/opencode-sdk/session.js +0 -187
- package/build/agents/providers/pi/adapter.js +0 -285
- package/build/agents/providers/pi/checkpoint.js +0 -49
- package/build/agents/providers/pi/events.js +0 -285
- package/build/agents/providers/pi/registration.js +0 -160
- package/build/agents/providers/pi/session-schema.js +0 -6
- package/build/agents/providers/registration.js +0 -7
- package/build/agents/providers/registry.js +0 -76
- package/build/agents/selector.js +0 -120
- package/build/agents/session.js +0 -29
- package/build/agents/string-tail-buffer.js +0 -44
- package/build/agents/types.js +0 -30
- package/build/artifact-directories.js +0 -22
- package/build/cli/commands/akuma/akuma/handler.js +0 -4
- package/build/cli/commands/akuma/akuma/meta.js +0 -16
- package/build/cli/commands/akuma/catalog.js +0 -8
- package/build/cli/commands/akuma/list/handler.js +0 -15
- package/build/cli/commands/akuma/list/meta-ls.js +0 -9
- package/build/cli/commands/akuma/show/handler.js +0 -27
- package/build/cli/commands/akuma/show/meta.js +0 -8
- package/build/cli/commands/akuma.js +0 -181
- package/build/cli/commands/contract/amend/handler.js +0 -17
- package/build/cli/commands/contract/amend/meta.js +0 -12
- package/build/cli/commands/contract/arc/handler.js +0 -16
- package/build/cli/commands/contract/arc/meta.js +0 -26
- package/build/cli/commands/contract/audit/handler.js +0 -16
- package/build/cli/commands/contract/audit/meta.js +0 -16
- package/build/cli/commands/contract/bind/handler.js +0 -39
- package/build/cli/commands/contract/bind/meta.js +0 -96
- package/build/cli/commands/contract/catalog.js +0 -18
- package/build/cli/commands/contract/forfeit/handler.js +0 -17
- package/build/cli/commands/contract/forfeit/meta.js +0 -12
- package/build/cli/commands/contract/log/handler.js +0 -12
- package/build/cli/commands/contract/log/meta.js +0 -12
- package/build/cli/commands/contract/petition/handler.js +0 -63
- package/build/cli/commands/contract/petition/meta.js +0 -23
- package/build/cli/commands/contract/renew/handler.js +0 -24
- package/build/cli/commands/contract/renew/meta.js +0 -18
- package/build/cli/commands/metadata.js +0 -65
- package/build/cli/commands/projection/call/handler.js +0 -43
- package/build/cli/commands/projection/call/meta.js +0 -12
- package/build/cli/commands/projection/catalog.js +0 -16
- package/build/cli/commands/projection/history/handler.js +0 -21
- package/build/cli/commands/projection/history/meta.js +0 -9
- package/build/cli/commands/projection/kill/handler.js +0 -20
- package/build/cli/commands/projection/kill/meta.js +0 -11
- package/build/cli/commands/projection/revive/handler.js +0 -56
- package/build/cli/commands/projection/revive/meta.js +0 -12
- package/build/cli/commands/projection/shared.js +0 -27
- package/build/cli/commands/projection/status/handler.js +0 -26
- package/build/cli/commands/projection/status/meta.js +0 -9
- package/build/cli/commands/projection/tell/handler.js +0 -28
- package/build/cli/commands/projection/tell/meta.js +0 -12
- package/build/cli/commands/projection/wait/handler.js +0 -55
- package/build/cli/commands/projection/wait/meta.js +0 -16
- package/build/cli/commands/registry.js +0 -48
- package/build/cli/commands/shared.js +0 -74
- package/build/cli/commands/skills/catalog.js +0 -6
- package/build/cli/commands/skills/install/handler.js +0 -7
- package/build/cli/commands/skills/install/meta.js +0 -9
- package/build/cli/commands/skills/skills/handler.js +0 -4
- package/build/cli/commands/skills/skills/meta.js +0 -10
- package/build/cli/commands/system/catalog.js +0 -8
- package/build/cli/commands/system/completion/handler.js +0 -10
- package/build/cli/commands/system/completion/meta.js +0 -9
- package/build/cli/commands/system/dump-env/handler.js +0 -3
- package/build/cli/commands/system/dump-env/meta.js +0 -10
- package/build/cli/commands/system/guide/handler.js +0 -4
- package/build/cli/commands/system/guide/meta.js +0 -9
- package/build/cli/commands/task/add/handler.js +0 -22
- package/build/cli/commands/task/add/meta.js +0 -19
- package/build/cli/commands/task/catalog.js +0 -30
- package/build/cli/commands/task/compose/handler.js +0 -18
- package/build/cli/commands/task/compose/meta.js +0 -10
- package/build/cli/commands/task/doctor/handler.js +0 -4
- package/build/cli/commands/task/doctor/meta.js +0 -8
- package/build/cli/commands/task/done/handler.js +0 -10
- package/build/cli/commands/task/done/meta.js +0 -8
- package/build/cli/commands/task/drop/handler.js +0 -3
- package/build/cli/commands/task/drop/meta.js +0 -8
- package/build/cli/commands/task/hold/handler.js +0 -3
- package/build/cli/commands/task/hold/meta.js +0 -8
- package/build/cli/commands/task/log/handler.js +0 -12
- package/build/cli/commands/task/log/meta.js +0 -8
- package/build/cli/commands/task/ls/handler.js +0 -17
- package/build/cli/commands/task/ls/meta.js +0 -8
- package/build/cli/commands/task/resume/handler.js +0 -3
- package/build/cli/commands/task/resume/meta.js +0 -8
- package/build/cli/commands/task/shared.js +0 -167
- package/build/cli/commands/task/show/handler.js +0 -13
- package/build/cli/commands/task/show/meta.js +0 -8
- package/build/cli/commands/task/start/handler.js +0 -3
- package/build/cli/commands/task/start/meta.js +0 -8
- package/build/cli/commands/task/stop/handler.js +0 -10
- package/build/cli/commands/task/stop/meta.js +0 -8
- package/build/cli/commands/task/task/handler.js +0 -5
- package/build/cli/commands/task/task/meta.js +0 -11
- package/build/cli/commands/task/update/handler.js +0 -21
- package/build/cli/commands/task/update/meta.js +0 -11
- package/build/cli/completion.js +0 -88
- package/build/cli/draft-artifact.js +0 -50
- package/build/cli/flags.js +0 -289
- package/build/cli/help.js +0 -100
- package/build/cli/index.js +0 -332
- package/build/cli/missing-subcommand.js +0 -7
- package/build/cli/output-stream-error-policy.js +0 -31
- package/build/cli/parse-flags.js +0 -262
- package/build/cli/parse-metadata.js +0 -129
- package/build/cli/parse-selectors.js +0 -65
- package/build/cli/parse.js +0 -237
- package/build/cli/projection-address.js +0 -105
- package/build/cli/render/address.js +0 -101
- package/build/cli/render/amendment-warning.js +0 -8
- package/build/cli/render/arc.js +0 -79
- package/build/cli/render/audit.js +0 -440
- package/build/cli/render/call.js +0 -70
- package/build/cli/render/compact-text.js +0 -3
- package/build/cli/render/errors.js +0 -101
- package/build/cli/render/format.js +0 -226
- package/build/cli/render/kanshi.js +0 -263
- package/build/cli/render/kill.js +0 -9
- package/build/cli/render/lifecycle.js +0 -56
- package/build/cli/render/line-width.js +0 -103
- package/build/cli/render/misc.js +0 -84
- package/build/cli/render/path-prefix-compaction.js +0 -131
- package/build/cli/render/petition.js +0 -70
- package/build/cli/render/projection-activity.js +0 -332
- package/build/cli/render/projection-history.js +0 -64
- package/build/cli/render/response-style.js +0 -27
- package/build/cli/render/shared.js +0 -232
- package/build/cli/render/skills.js +0 -10
- package/build/cli/render/status.js +0 -213
- package/build/cli/render/success-response.js +0 -80
- package/build/cli/render/task.js +0 -174
- package/build/cli/render/tell.js +0 -5
- package/build/cli/render/terminal-failure.js +0 -65
- package/build/cli/render/tool-ledger-rollup.js +0 -74
- package/build/cli/render/tool-presentation.js +0 -97
- package/build/cli/render/types.js +0 -2
- package/build/cli/render/wait.js +0 -275
- package/build/cli/skills-install.js +0 -348
- package/build/cli/subagent-guard.js +0 -25
- package/build/cli/types.js +0 -1
- package/build/config/akuma-loader.js +0 -220
- package/build/config/env-keys.js +0 -57
- package/build/config/env.js +0 -304
- package/build/config/provider-policy-ownership.js +0 -10
- package/build/config/settings/disease.js +0 -33
- package/build/config/settings/knobs.js +0 -8
- package/build/config/settings/loader.js +0 -275
- package/build/config/settings/provider-instance-fields.js +0 -51
- package/build/config/settings/schema.js +0 -108
- package/build/core/address-carrier.js +0 -89
- package/build/core/addressing.js +0 -407
- package/build/core/amend.js +0 -236
- package/build/core/amendment-criteria.js +0 -17
- package/build/core/amendment-warning.js +0 -10
- package/build/core/arc.js +0 -293
- package/build/core/atomic-publish.js +0 -64
- package/build/core/audit/candidate.js +0 -149
- package/build/core/audit/coordinates.js +0 -235
- package/build/core/audit/evidence.js +0 -154
- package/build/core/audit/facade.js +0 -65
- package/build/core/audit/readiness.js +0 -4
- package/build/core/audit/report.js +0 -38
- package/build/core/audit.js +0 -1
- package/build/core/bind-reconciliation.js +0 -390
- package/build/core/bind-workspace.js +0 -115
- package/build/core/bind.js +0 -402
- package/build/core/call/call.js +0 -236
- package/build/core/call/context.js +0 -197
- package/build/core/call/execution.js +0 -240
- package/build/core/call/prompt.js +0 -58
- package/build/core/call/reference.js +0 -24
- package/build/core/call-persist.js +0 -76
- package/build/core/command-markdown.js +0 -45
- package/build/core/context.js +0 -104
- package/build/core/contract-carrier-runtime.js +0 -408
- package/build/core/contract-carrier.js +0 -270
- package/build/core/contract-view.js +0 -282
- package/build/core/contract.js +0 -18
- package/build/core/derived-replay.js +0 -207
- package/build/core/draft.js +0 -396
- package/build/core/execution-coordinate.js +0 -46
- package/build/core/execution-pact.js +0 -126
- package/build/core/forfeit.js +0 -132
- package/build/core/hints.js +0 -34
- package/build/core/identifier-slug.js +0 -116
- package/build/core/ids.js +0 -90
- package/build/core/lifecycle-history.js +0 -35
- package/build/core/lifecycle-recovery.js +0 -117
- package/build/core/lifecycle-runner.js +0 -377
- package/build/core/log.js +0 -50
- package/build/core/markdown/lex.js +0 -274
- package/build/core/markdown/parser.js +0 -260
- package/build/core/markdown/render.js +0 -68
- package/build/core/markdown/sections.js +0 -80
- package/build/core/markdown/titles.js +0 -9
- package/build/core/markdown/types.js +0 -6
- package/build/core/outcome-base.js +0 -185
- package/build/core/places.js +0 -175
- package/build/core/process-group.js +0 -139
- package/build/core/projection/generation/database.js +0 -411
- package/build/core/projection/generation/identity.js +0 -84
- package/build/core/projection/generation/model.js +0 -256
- package/build/core/projection/generation/projection-generation-continuation.js +0 -84
- package/build/core/projection/generation/projection-generation-execution.js +0 -217
- package/build/core/projection/generation/projection-generation-identity.js +0 -17
- package/build/core/projection/generation/projection-generation-launcher.js +0 -220
- package/build/core/projection/generation/projection-generation-process.js +0 -46
- package/build/core/projection/generation/projection-generation-runner.js +0 -443
- package/build/core/projection/generation/projection-generation-runtime.js +0 -97
- package/build/core/projection/generation/store.js +0 -98
- package/build/core/projection/generation/transitions.js +0 -463
- package/build/core/projection/heart.js +0 -9
- package/build/core/projection/index.js +0 -28
- package/build/core/projection/projection-activity.js +0 -273
- package/build/core/projection/projection-alias.js +0 -131
- package/build/core/projection/projection-coordinate.js +0 -61
- package/build/core/projection/projection-core.js +0 -123
- package/build/core/projection/projection-execution-observer.js +0 -270
- package/build/core/projection/projection-history.js +0 -474
- package/build/core/projection/projection-identity.js +0 -11
- package/build/core/projection/projection-kill.js +0 -103
- package/build/core/projection/projection-life-observer.js +0 -101
- package/build/core/projection/projection-life-protocol.js +0 -115
- package/build/core/projection/projection-mint.js +0 -172
- package/build/core/projection/projection-runner-lock.js +0 -211
- package/build/core/projection/projection-status-observation.js +0 -365
- package/build/core/projection/projection-status.js +0 -295
- package/build/core/projection/projection-terminal-failure.js +0 -111
- package/build/core/projection/projection-wait.js +0 -318
- package/build/core/projection/projection-wake.js +0 -360
- package/build/core/projection/tell/database.js +0 -127
- package/build/core/projection/tell/launch-store.js +0 -244
- package/build/core/projection/tell/model.js +0 -98
- package/build/core/projection/tell/store.js +0 -245
- package/build/core/provider-loader-ports.js +0 -4
- package/build/core/registry.js +0 -100
- package/build/core/renew-build.js +0 -424
- package/build/core/renew-plan.js +0 -239
- package/build/core/renew-rewrite.js +0 -77
- package/build/core/renew.js +0 -341
- package/build/core/repository-ledger/accepted-fold-read.js +0 -19
- package/build/core/repository-ledger/accepted-tail.js +0 -116
- package/build/core/repository-ledger/admission.js +0 -38
- package/build/core/repository-ledger/authoritative-transaction.js +0 -1
- package/build/core/repository-ledger/claim-evidence.js +0 -147
- package/build/core/repository-ledger/codec.js +0 -297
- package/build/core/repository-ledger/current-state-store.js +0 -971
- package/build/core/repository-ledger/fold-repository.js +0 -375
- package/build/core/repository-ledger/fold.js +0 -248
- package/build/core/repository-ledger/git-object-store.js +0 -243
- package/build/core/repository-ledger/history-read.js +0 -15
- package/build/core/repository-ledger/incremental-read.js +0 -153
- package/build/core/repository-ledger/index.js +0 -15
- package/build/core/repository-ledger/inventory-plan.js +0 -75
- package/build/core/repository-ledger/inventory.js +0 -310
- package/build/core/repository-ledger/publication-admission.js +0 -125
- package/build/core/repository-ledger/publication.js +0 -353
- package/build/core/repository-ledger/read-model.js +0 -469
- package/build/core/repository-ledger/transaction-membership.js +0 -78
- package/build/core/repository-ledger/traversal.js +0 -404
- package/build/core/repository-ledger/write-transaction.js +0 -341
- package/build/core/response-artifact-catalog-sqlite.js +0 -112
- package/build/core/response-artifact-catalog.js +0 -7
- package/build/core/response-artifact-id.js +0 -5
- package/build/core/scope.js +0 -416
- package/build/core/seal.js +0 -352
- package/build/core/settlement/claim-delivery.js +0 -69
- package/build/core/settlement/claim.js +0 -256
- package/build/core/settlement/index.js +0 -19
- package/build/core/settlement/petition-claim-gates.js +0 -246
- package/build/core/settlement/petition-forfeit.js +0 -46
- package/build/core/settlement/petition-head-guard.js +0 -13
- package/build/core/settlement/petition-io.js +0 -1
- package/build/core/settlement/petition-preview.js +0 -109
- package/build/core/settlement/petition-window.js +0 -50
- package/build/core/settlement/petition.js +0 -281
- package/build/core/settlement/queue-read-model.js +0 -120
- package/build/core/settlement/queue-seat-allocation.js +0 -65
- package/build/core/settlement/queue.js +0 -6
- package/build/core/settlement/settlement.js +0 -380
- package/build/core/settlement/verdict.js +0 -126
- package/build/core/settlement/verification-coordination.js +0 -305
- package/build/core/settlement/verification-supervisor.js +0 -275
- package/build/core/settlement/verification.js +0 -426
- package/build/core/sqlite-process-lifetime-lock.js +0 -194
- package/build/core/status/board.js +0 -346
- package/build/core/status/drift.js +0 -115
- package/build/core/status/lifecycle.js +0 -11
- package/build/core/stored-agent-event.js +0 -129
- package/build/core/structured-query.js +0 -23
- package/build/core/target-ref.js +0 -10
- package/build/core/task/board.js +0 -247
- package/build/core/task/commands.js +0 -376
- package/build/core/task/compose.js +0 -327
- package/build/core/task/coordinate.js +0 -56
- package/build/core/task/document.js +0 -210
- package/build/core/task/index.js +0 -16
- package/build/core/task/model.js +0 -8
- package/build/core/task/query.js +0 -204
- package/build/core/task/settlement-git.js +0 -426
- package/build/core/task/settlement-policy.js +0 -124
- package/build/core/task/source-board.js +0 -103
- package/build/core/task/source-model.js +0 -1
- package/build/core/task/task-bind-preparation.js +0 -193
- package/build/core/task/task-contract.js +0 -371
- package/build/core/task/task-doctor.js +0 -14
- package/build/core/task/task-file-transaction.js +0 -171
- package/build/core/task/task-git-actor.js +0 -33
- package/build/core/task/task-git-runtime.js +0 -97
- package/build/core/task/task-git-store.js +0 -400
- package/build/core/task/task-repository.js +0 -1
- package/build/core/task/task-store-repository.js +0 -96
- package/build/core/task/task-store.js +0 -1
- package/build/core/task/task-worktree.js +0 -25
- package/build/core/task/task.js +0 -7
- package/build/core/task/tree.js +0 -37
- package/build/core/task/validation.js +0 -48
- package/build/core/transcripts.js +0 -485
- package/build/core/validation.js +0 -17
- package/build/core/worktree-bootstrap.js +0 -195
- package/build/core/worktree-path.js +0 -375
- package/build/errno.js +0 -3
- package/build/flow-error.js +0 -183
- package/build/fs/durability.js +0 -27
- package/build/fs/path-coordinate.js +0 -16
- package/build/generated/version.js +0 -3
- package/build/git/branches.js +0 -113
- package/build/git/commits.js +0 -80
- package/build/git/core.js +0 -238
- package/build/git/diff/parsers.js +0 -181
- package/build/git/diff/pathspec.js +0 -3
- package/build/git/diff/preview.js +0 -38
- package/build/git/diff/read.js +0 -105
- package/build/git/diff/structured.js +0 -127
- package/build/git/diff/types.js +0 -1
- package/build/git/path-coordinate.js +0 -17
- package/build/git/refs.js +0 -225
- package/build/git/staging.js +0 -155
- package/build/git/streaming-batch.js +0 -361
- package/build/git/worktree.js +0 -162
- package/build/index.js +0 -60
- package/build/keiyaku-constants.js +0 -2
- package/build/keiyaku.js +0 -30
- package/build/telemetry/debug-log.js +0 -40
- package/build/telemetry/logger.js +0 -48
- package/skills/keiyaku/SKILL.md +0 -46
- package/skills/keiyaku-akuma/SKILL.md +0 -96
- package/skills/keiyaku-task/SKILL.md +0 -84
- package/skills/keiyaku-workflow/SKILL.md +0 -151
- /package/build/{agents/launch-snapshot → src/body}/types.js +0 -0
- /package/build/{agents/providers/claude-agent-sdk/terms.js → src/cli/result.js} +0 -0
- /package/build/{agents/providers/codex-app-server/terms.js → src/core/decide.js} +0 -0
- /package/build/{agents/providers/opencode-sdk/terms.js → src/core/facts/offer.js} +0 -0
- /package/build/{agents/providers/pi/terms.js → src/kanshi/report.js} +0 -0
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { isIncompatibleProjectionGenerationStoreError, openProjectionGenerationStoreReadOnly, } from "./generation/store.js";
|
|
2
|
-
import { deriveProjectionLife, selectCurrentGeneration, } from "./projection-life-protocol.js";
|
|
3
|
-
import { observeProjectionRunnerLock } from "./projection-runner-lock.js";
|
|
4
|
-
function errorDetail(error) {
|
|
5
|
-
return error instanceof Error ? error.message : String(error);
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Observe the current generation without creating, repairing, or mutating
|
|
9
|
-
* projection storage. Generation history is the ordering authority; the
|
|
10
|
-
* runner lock is consulted only for an adopted, non-terminal generation.
|
|
11
|
-
*/
|
|
12
|
-
export function observeProjectionLifeSnapshot(projectionDirectory, options) {
|
|
13
|
-
const readRecords = () => {
|
|
14
|
-
const store = openProjectionGenerationStoreReadOnly(projectionDirectory);
|
|
15
|
-
try {
|
|
16
|
-
return store.readRecords();
|
|
17
|
-
}
|
|
18
|
-
finally {
|
|
19
|
-
store.close();
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
for (let attempt = 0; attempt < 4; attempt += 1) {
|
|
23
|
-
let records;
|
|
24
|
-
try {
|
|
25
|
-
records = readRecords();
|
|
26
|
-
}
|
|
27
|
-
catch (error) {
|
|
28
|
-
if (isIncompatibleProjectionGenerationStoreError(error)) {
|
|
29
|
-
return { compatibility: "incompatible", diagnostic: errorDetail(error) };
|
|
30
|
-
}
|
|
31
|
-
return {
|
|
32
|
-
compatibility: "current",
|
|
33
|
-
life: {
|
|
34
|
-
phase: "unknown",
|
|
35
|
-
diagnostic: `generation history could not be observed: ${errorDetail(error)}`,
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
const current = selectCurrentGeneration(records);
|
|
40
|
-
if (!current || current.verdict || !current.adoption) {
|
|
41
|
-
return {
|
|
42
|
-
compatibility: "current",
|
|
43
|
-
life: deriveProjectionLife({
|
|
44
|
-
records,
|
|
45
|
-
nowMs: options.nowMs,
|
|
46
|
-
startupTimeoutMs: options.startupTimeoutMs,
|
|
47
|
-
}),
|
|
48
|
-
records,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
const lock = observeProjectionRunnerLock(projectionDirectory, options.platform);
|
|
52
|
-
let after;
|
|
53
|
-
try {
|
|
54
|
-
after = readRecords();
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
if (isIncompatibleProjectionGenerationStoreError(error)) {
|
|
58
|
-
return { compatibility: "incompatible", diagnostic: errorDetail(error) };
|
|
59
|
-
}
|
|
60
|
-
return {
|
|
61
|
-
compatibility: "current",
|
|
62
|
-
life: {
|
|
63
|
-
phase: "unknown",
|
|
64
|
-
executionId: current.launch.executionId,
|
|
65
|
-
diagnostic: `generation history could not be re-observed: ${errorDetail(error)}`,
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
const beforeTail = records.at(-1)?.seq;
|
|
70
|
-
const afterTail = after.at(-1)?.seq;
|
|
71
|
-
if (records.length !== after.length || beforeTail !== afterTail)
|
|
72
|
-
continue;
|
|
73
|
-
return {
|
|
74
|
-
compatibility: "current",
|
|
75
|
-
life: deriveProjectionLife({
|
|
76
|
-
records,
|
|
77
|
-
runnerLock: lock.state === "held"
|
|
78
|
-
? "held"
|
|
79
|
-
: lock.state === "released"
|
|
80
|
-
? "released"
|
|
81
|
-
: "unknown",
|
|
82
|
-
nowMs: options.nowMs,
|
|
83
|
-
startupTimeoutMs: options.startupTimeoutMs,
|
|
84
|
-
}),
|
|
85
|
-
records,
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
return {
|
|
89
|
-
compatibility: "current",
|
|
90
|
-
life: {
|
|
91
|
-
phase: "unknown",
|
|
92
|
-
diagnostic: "generation history changed during runner-lock observation",
|
|
93
|
-
},
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
export function observeProjectionLife(projectionDirectory, options) {
|
|
97
|
-
const snapshot = observeProjectionLifeSnapshot(projectionDirectory, options);
|
|
98
|
-
return snapshot.compatibility === "current"
|
|
99
|
-
? snapshot.life
|
|
100
|
-
: { phase: "unknown", diagnostic: snapshot.diagnostic };
|
|
101
|
-
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
export const GENERATION_VERDICT_STATES = [
|
|
2
|
-
"completed",
|
|
3
|
-
"failed",
|
|
4
|
-
"launch-failed",
|
|
5
|
-
"lost-runner",
|
|
6
|
-
"dismissed",
|
|
7
|
-
"interrupted",
|
|
8
|
-
"killed",
|
|
9
|
-
];
|
|
10
|
-
function asLaunch(record) {
|
|
11
|
-
return record.kind === "launch"
|
|
12
|
-
? record
|
|
13
|
-
: undefined;
|
|
14
|
-
}
|
|
15
|
-
function asAdoption(record) {
|
|
16
|
-
return record.kind === "adoption"
|
|
17
|
-
? record
|
|
18
|
-
: undefined;
|
|
19
|
-
}
|
|
20
|
-
function asKillIntent(record) {
|
|
21
|
-
return record.kind === "kill-intent"
|
|
22
|
-
? record
|
|
23
|
-
: undefined;
|
|
24
|
-
}
|
|
25
|
-
function asInterruptIntent(record) {
|
|
26
|
-
return record.kind === "interrupt-intent"
|
|
27
|
-
? record
|
|
28
|
-
: undefined;
|
|
29
|
-
}
|
|
30
|
-
function asVerdict(record) {
|
|
31
|
-
return record.kind === "verdict"
|
|
32
|
-
? record
|
|
33
|
-
: undefined;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Select the current generation using ledger sequence only. The store validates
|
|
37
|
-
* dense sequence and transition legality before records reach this fold.
|
|
38
|
-
*/
|
|
39
|
-
export function selectCurrentGeneration(records) {
|
|
40
|
-
let launch;
|
|
41
|
-
for (const record of records) {
|
|
42
|
-
const candidate = asLaunch(record);
|
|
43
|
-
if (candidate)
|
|
44
|
-
launch = candidate;
|
|
45
|
-
}
|
|
46
|
-
if (!launch)
|
|
47
|
-
return null;
|
|
48
|
-
let adoption;
|
|
49
|
-
let killIntent;
|
|
50
|
-
let interruptIntent;
|
|
51
|
-
let verdict;
|
|
52
|
-
for (const record of records) {
|
|
53
|
-
if (record.seq <= launch.seq || record.executionId !== launch.executionId)
|
|
54
|
-
continue;
|
|
55
|
-
adoption ??= asAdoption(record);
|
|
56
|
-
killIntent ??= asKillIntent(record);
|
|
57
|
-
interruptIntent ??= asInterruptIntent(record);
|
|
58
|
-
verdict ??= asVerdict(record);
|
|
59
|
-
}
|
|
60
|
-
return {
|
|
61
|
-
launch,
|
|
62
|
-
...(adoption ? { adoption } : {}),
|
|
63
|
-
...(killIntent ? { killIntent } : {}),
|
|
64
|
-
...(interruptIntent ? { interruptIntent } : {}),
|
|
65
|
-
...(verdict ? { verdict } : {}),
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function verdictState(record) {
|
|
69
|
-
const state = record?.facts.state;
|
|
70
|
-
return typeof state === "string"
|
|
71
|
-
&& GENERATION_VERDICT_STATES.includes(state)
|
|
72
|
-
? state
|
|
73
|
-
: undefined;
|
|
74
|
-
}
|
|
75
|
-
function phaseForVerdict(state) {
|
|
76
|
-
switch (state) {
|
|
77
|
-
case "completed": return "done";
|
|
78
|
-
case "dismissed": return "dismissed";
|
|
79
|
-
case "interrupted": return "done";
|
|
80
|
-
case "killed": return "killed";
|
|
81
|
-
case "lost-runner": return "lost";
|
|
82
|
-
case "failed":
|
|
83
|
-
case "launch-failed":
|
|
84
|
-
return "failed";
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
export function deriveProjectionLife(input) {
|
|
88
|
-
const chain = selectCurrentGeneration(input.records);
|
|
89
|
-
if (!chain)
|
|
90
|
-
return { phase: "quiescent" };
|
|
91
|
-
const executionId = chain.launch.executionId;
|
|
92
|
-
if (chain.verdict) {
|
|
93
|
-
const state = verdictState(chain.verdict);
|
|
94
|
-
return state
|
|
95
|
-
? { phase: phaseForVerdict(state), executionId, verdict: state }
|
|
96
|
-
: { phase: "unknown", executionId, diagnostic: "current generation has an invalid verdict" };
|
|
97
|
-
}
|
|
98
|
-
if (!chain.adoption) {
|
|
99
|
-
const createdAt = chain.launch.facts.createdAt;
|
|
100
|
-
const launchedAtMs = typeof createdAt === "string" ? Date.parse(createdAt) : Number.NaN;
|
|
101
|
-
if (!Number.isFinite(launchedAtMs)) {
|
|
102
|
-
return { phase: "unknown", executionId, diagnostic: "current launch has an invalid createdAt fact" };
|
|
103
|
-
}
|
|
104
|
-
return input.nowMs - launchedAtMs >= input.startupTimeoutMs
|
|
105
|
-
? { phase: "startup-timeout", executionId }
|
|
106
|
-
: { phase: "minting", executionId };
|
|
107
|
-
}
|
|
108
|
-
switch (input.runnerLock) {
|
|
109
|
-
case "held": return { phase: "active", executionId };
|
|
110
|
-
case "released": return { phase: "lost", executionId };
|
|
111
|
-
case "unknown":
|
|
112
|
-
case undefined:
|
|
113
|
-
return { phase: "unknown", executionId, diagnostic: "runner lock could not be determined" };
|
|
114
|
-
}
|
|
115
|
-
}
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import * as fs from "node:fs";
|
|
2
|
-
import * as path from "node:path";
|
|
3
|
-
import { isErrnoException } from "../../errno.js";
|
|
4
|
-
import { ProjectionStateError, randomHex8 } from "../atomic-publish.js";
|
|
5
|
-
import { isoFromNowMs, PROJECTION_ROOT_SEGMENTS, projectionDir, projectionRoot, } from "./projection-core.js";
|
|
6
|
-
import { parseExecutionAuthoritySelection, parseExecutionPact, parseExecutionPactFields, } from "../execution-pact.js";
|
|
7
|
-
import { openProjectionGenerationStore } from "./generation/store.js";
|
|
8
|
-
import { initializeProjectionRunnerLockDatabase } from "./projection-runner-lock.js";
|
|
9
|
-
export class ProjectionMintCollisionError extends Error {
|
|
10
|
-
code = "PROJECTION_MINT_COLLISION";
|
|
11
|
-
constructor(message, options) {
|
|
12
|
-
super(message, options);
|
|
13
|
-
this.name = "ProjectionMintCollisionError";
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
const DEFAULT_MINT_ATTEMPTS = 16;
|
|
17
|
-
function assertMintSlug(slug) {
|
|
18
|
-
const normalized = slug.trim();
|
|
19
|
-
if (!normalized) {
|
|
20
|
-
throw new ProjectionStateError("projection slug cannot be empty");
|
|
21
|
-
}
|
|
22
|
-
if (!/^[a-zA-Z0-9]+(?:[.-][a-zA-Z0-9]+)*$/.test(normalized)) {
|
|
23
|
-
throw new ProjectionStateError(`invalid projection slug: ${slug}`);
|
|
24
|
-
}
|
|
25
|
-
return normalized;
|
|
26
|
-
}
|
|
27
|
-
function removeEmptyAkumaRoot(dir) {
|
|
28
|
-
try {
|
|
29
|
-
fs.rmdirSync(dir);
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
if (isErrnoException(error) && ["ENOENT", "ENOTEMPTY", "EEXIST"].includes(error.code ?? ""))
|
|
33
|
-
return;
|
|
34
|
-
throw error;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Validate mint inputs that can fail, then reserve one private staging directory.
|
|
39
|
-
* Dot-prefixed staging is never a published projection address.
|
|
40
|
-
*/
|
|
41
|
-
async function reserveProjectionDirectory(input) {
|
|
42
|
-
const slug = assertMintSlug(input.slug);
|
|
43
|
-
if (!Number.isInteger(input.pid) || input.pid < 0) {
|
|
44
|
-
throw new ProjectionStateError("projection pid must be a non-negative integer");
|
|
45
|
-
}
|
|
46
|
-
if (!Number.isSafeInteger(input.nowMs) || input.nowMs < 0) {
|
|
47
|
-
throw new ProjectionStateError("nowMs must be a safe non-negative integer");
|
|
48
|
-
}
|
|
49
|
-
const maxAttempts = input.maxAttempts ?? DEFAULT_MINT_ATTEMPTS;
|
|
50
|
-
if (!Number.isInteger(maxAttempts) || maxAttempts < 1) {
|
|
51
|
-
throw new ProjectionStateError("maxAttempts must be a positive integer");
|
|
52
|
-
}
|
|
53
|
-
const root = await projectionRoot(input.cwd);
|
|
54
|
-
fs.mkdirSync(root, { recursive: true });
|
|
55
|
-
const akumaRoot = path.join(root, slug);
|
|
56
|
-
const createdAkumaRoot = !fs.existsSync(akumaRoot);
|
|
57
|
-
fs.mkdirSync(akumaRoot, { recursive: true });
|
|
58
|
-
for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
|
|
59
|
-
const hex = (input.randomHex?.(attempt) ?? randomHex8()).toLowerCase();
|
|
60
|
-
if (!/^[0-9a-f]{8}$/.test(hex)) {
|
|
61
|
-
if (createdAkumaRoot)
|
|
62
|
-
removeEmptyAkumaRoot(akumaRoot);
|
|
63
|
-
throw new ProjectionStateError(`projection id random segment must be 8 hex chars, got ${hex}`);
|
|
64
|
-
}
|
|
65
|
-
const id = `${slug}/${hex}`;
|
|
66
|
-
const dir = await projectionDir(input.cwd, id);
|
|
67
|
-
const stagingDir = path.join(akumaRoot, `.mint-${hex}`);
|
|
68
|
-
if (fs.existsSync(dir))
|
|
69
|
-
continue;
|
|
70
|
-
try {
|
|
71
|
-
fs.mkdirSync(stagingDir);
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
if (isErrnoException(error) && error.code === "EEXIST") {
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
if (createdAkumaRoot)
|
|
78
|
-
removeEmptyAkumaRoot(akumaRoot);
|
|
79
|
-
throw error;
|
|
80
|
-
}
|
|
81
|
-
if (fs.existsSync(dir)) {
|
|
82
|
-
fs.rmdirSync(stagingDir);
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
return { id, dir, stagingDir };
|
|
86
|
-
}
|
|
87
|
-
if (createdAkumaRoot)
|
|
88
|
-
removeEmptyAkumaRoot(akumaRoot);
|
|
89
|
-
throw new ProjectionMintCollisionError(`exhausted ${maxAttempts} projection id attempts under ${PROJECTION_ROOT_SEGMENTS.join("/")} (PROJECTION_MINT_COLLISION)`);
|
|
90
|
-
}
|
|
91
|
-
/** Build the pact fields shared by both authority variants. */
|
|
92
|
-
function buildMintPactFields(input) {
|
|
93
|
-
return {
|
|
94
|
-
version: 1,
|
|
95
|
-
pid: input.pid,
|
|
96
|
-
akuma: input.akuma,
|
|
97
|
-
provider: input.provider,
|
|
98
|
-
binding: input.binding,
|
|
99
|
-
mintedAt: isoFromNowMs(input.nowMs),
|
|
100
|
-
workspaceRoot: input.workspaceRoot ?? path.resolve(input.cwd),
|
|
101
|
-
...(input.effectivePolicy ? { effectivePolicy: input.effectivePolicy } : {}),
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Build both hard projection organs in private staging, close every database
|
|
106
|
-
* handle, then publish the complete projection with one directory rename.
|
|
107
|
-
*/
|
|
108
|
-
function publishReservedProjection(pact, reserved) {
|
|
109
|
-
let published = false;
|
|
110
|
-
try {
|
|
111
|
-
const heart = openProjectionGenerationStore(reserved.stagingDir);
|
|
112
|
-
try {
|
|
113
|
-
heart.initializeIdentity(pact);
|
|
114
|
-
}
|
|
115
|
-
finally {
|
|
116
|
-
heart.close();
|
|
117
|
-
}
|
|
118
|
-
initializeProjectionRunnerLockDatabase(reserved.stagingDir);
|
|
119
|
-
fs.renameSync(reserved.stagingDir, reserved.dir);
|
|
120
|
-
published = true;
|
|
121
|
-
return { id: reserved.id, dir: reserved.dir, pact };
|
|
122
|
-
}
|
|
123
|
-
finally {
|
|
124
|
-
if (!published) {
|
|
125
|
-
fs.rmSync(reserved.stagingDir, { recursive: true, force: true });
|
|
126
|
-
const parent = path.dirname(reserved.stagingDir);
|
|
127
|
-
removeEmptyAkumaRoot(parent);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Mint a user-authority projection directory.
|
|
133
|
-
* Order (closed): validate → reserve staging → heart + leash → atomic rename.
|
|
134
|
-
*/
|
|
135
|
-
export async function mintProjection(input) {
|
|
136
|
-
const authority = parseExecutionAuthoritySelection(input.authority, "projection identity", "user");
|
|
137
|
-
const fields = parseExecutionPactFields(buildMintPactFields(input));
|
|
138
|
-
const pact = parseExecutionPact({
|
|
139
|
-
version: fields.version,
|
|
140
|
-
pid: fields.pid,
|
|
141
|
-
akuma: fields.akuma,
|
|
142
|
-
provider: fields.provider,
|
|
143
|
-
authority,
|
|
144
|
-
binding: fields.binding,
|
|
145
|
-
mintedAt: fields.mintedAt,
|
|
146
|
-
workspaceRoot: fields.workspaceRoot,
|
|
147
|
-
...(fields.effectivePolicy !== undefined ? { effectivePolicy: fields.effectivePolicy } : {}),
|
|
148
|
-
});
|
|
149
|
-
const reserved = await reserveProjectionDirectory(input);
|
|
150
|
-
return publishReservedProjection(pact, reserved);
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Mint a repository-authority projection.
|
|
154
|
-
* Order: validate complete identity → reserve staging → heart + leash → atomic rename.
|
|
155
|
-
*/
|
|
156
|
-
export async function mintRepositoryProjection(input) {
|
|
157
|
-
parseExecutionAuthoritySelection(input.authority, "projection identity", "repository");
|
|
158
|
-
const fields = parseExecutionPactFields(buildMintPactFields(input));
|
|
159
|
-
const reserved = await reserveProjectionDirectory(input);
|
|
160
|
-
const pact = parseExecutionPact({
|
|
161
|
-
version: fields.version,
|
|
162
|
-
pid: fields.pid,
|
|
163
|
-
akuma: fields.akuma,
|
|
164
|
-
provider: fields.provider,
|
|
165
|
-
authority: { kind: "repository" },
|
|
166
|
-
binding: fields.binding,
|
|
167
|
-
mintedAt: fields.mintedAt,
|
|
168
|
-
workspaceRoot: fields.workspaceRoot,
|
|
169
|
-
...(fields.effectivePolicy !== undefined ? { effectivePolicy: fields.effectivePolicy } : {}),
|
|
170
|
-
});
|
|
171
|
-
return publishReservedProjection(pact, reserved);
|
|
172
|
-
}
|
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
import * as path from "node:path";
|
|
2
|
-
import { initializeSqliteProcessLifetimeLockDatabase, isSqliteProcessLifetimeLockContention, isSqliteProcessLifetimeLockPlatformSupported, openSqliteProcessLifetimeLockTransaction, SqliteProcessLifetimeLockError, sqliteProcessLifetimeLockErrorDetail, } from "../sqlite-process-lifetime-lock.js";
|
|
3
|
-
export const PROJECTION_RUNNER_LOCK_DATABASE = "leash";
|
|
4
|
-
export class ProjectionRunnerLockUnavailableError extends Error {
|
|
5
|
-
code = "PROJECTION_RUNNER_LOCK_UNAVAILABLE";
|
|
6
|
-
constructor(message, options) {
|
|
7
|
-
super(message, options);
|
|
8
|
-
this.name = "ProjectionRunnerLockUnavailableError";
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
export class ProjectionRunnerLockUnsupportedError extends Error {
|
|
12
|
-
code = "PROJECTION_RUNNER_LOCK_UNSUPPORTED";
|
|
13
|
-
constructor(platform) {
|
|
14
|
-
super(`projection runner locks are unsupported on platform '${platform}'`);
|
|
15
|
-
this.name = "ProjectionRunnerLockUnsupportedError";
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export function projectionRunnerLockPath(projectionDirectory) {
|
|
19
|
-
return path.join(projectionDirectory, PROJECTION_RUNNER_LOCK_DATABASE);
|
|
20
|
-
}
|
|
21
|
-
export function isProjectionRunnerLockPlatformSupported(platform = process.platform) {
|
|
22
|
-
return isSqliteProcessLifetimeLockPlatformSupported(platform);
|
|
23
|
-
}
|
|
24
|
-
function errorDetail(error) {
|
|
25
|
-
return sqliteProcessLifetimeLockErrorDetail(error);
|
|
26
|
-
}
|
|
27
|
-
function isContention(error) {
|
|
28
|
-
return isSqliteProcessLifetimeLockContention(error)
|
|
29
|
-
|| (error instanceof SqliteProcessLifetimeLockError && error.reason === "busy");
|
|
30
|
-
}
|
|
31
|
-
function openGuard(lockPath, busyTimeoutMs) {
|
|
32
|
-
return openSqliteProcessLifetimeLockTransaction({ path: lockPath, mode: "deferred", busyTimeoutMs });
|
|
33
|
-
}
|
|
34
|
-
function openReservation(lockPath, busyTimeoutMs) {
|
|
35
|
-
return openSqliteProcessLifetimeLockTransaction({ path: lockPath, mode: "immediate", busyTimeoutMs });
|
|
36
|
-
}
|
|
37
|
-
function closeTransaction(transaction) {
|
|
38
|
-
try {
|
|
39
|
-
transaction.close();
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
return error;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function createHeldLock(lockPath, busyTimeoutMs, guard, initialReservation) {
|
|
46
|
-
let closed = false;
|
|
47
|
-
let reservation = initialReservation;
|
|
48
|
-
return {
|
|
49
|
-
path: lockPath,
|
|
50
|
-
releaseReservationForTransfer() {
|
|
51
|
-
if (closed || reservation === undefined)
|
|
52
|
-
return;
|
|
53
|
-
const released = reservation;
|
|
54
|
-
reservation = undefined;
|
|
55
|
-
const failure = closeTransaction(released);
|
|
56
|
-
if (failure !== undefined)
|
|
57
|
-
throw new ProjectionRunnerLockUnavailableError(`projection runner reservation release failed: ${errorDetail(failure)}`, { cause: failure });
|
|
58
|
-
},
|
|
59
|
-
reclaimReservation() {
|
|
60
|
-
if (closed || reservation !== undefined)
|
|
61
|
-
return;
|
|
62
|
-
try {
|
|
63
|
-
reservation = openReservation(lockPath, busyTimeoutMs);
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
throw new ProjectionRunnerLockUnavailableError(`projection runner reservation reclaim failed: ${errorDetail(error)}`, { cause: error });
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
close() {
|
|
70
|
-
if (closed)
|
|
71
|
-
return;
|
|
72
|
-
closed = true;
|
|
73
|
-
let failure;
|
|
74
|
-
if (reservation !== undefined)
|
|
75
|
-
failure = closeTransaction(reservation);
|
|
76
|
-
failure ??= closeTransaction(guard);
|
|
77
|
-
if (failure !== undefined)
|
|
78
|
-
throw new ProjectionRunnerLockUnavailableError(`projection runner lock release failed: ${errorDetail(failure)}`, { cause: failure });
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
function unavailable(operation, error) {
|
|
83
|
-
return new ProjectionRunnerLockUnavailableError(`${operation}: ${errorDetail(error)}`, { cause: error });
|
|
84
|
-
}
|
|
85
|
-
/** Mint-time schema initialization retains no process-life authority. */
|
|
86
|
-
export function initializeProjectionRunnerLockDatabase(projectionDirectory, platform = process.platform) {
|
|
87
|
-
if (!isProjectionRunnerLockPlatformSupported(platform))
|
|
88
|
-
throw new ProjectionRunnerLockUnsupportedError(platform);
|
|
89
|
-
try {
|
|
90
|
-
return initializeSqliteProcessLifetimeLockDatabase(projectionRunnerLockPath(projectionDirectory), platform);
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
throw unavailable("projection runner lock database could not be initialized", error);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Projection policy: hold a SHARED guard plus a RESERVED claim. The transfer
|
|
98
|
-
* target overlaps its guard before the reservation moves, preserving exclusion.
|
|
99
|
-
*/
|
|
100
|
-
export function acquireProjectionRunnerLock(projectionDirectory, platform = process.platform, busyTimeoutMs = 0) {
|
|
101
|
-
if (!isProjectionRunnerLockPlatformSupported(platform))
|
|
102
|
-
throw new ProjectionRunnerLockUnsupportedError(platform);
|
|
103
|
-
const lockPath = projectionRunnerLockPath(projectionDirectory);
|
|
104
|
-
let guard;
|
|
105
|
-
try {
|
|
106
|
-
guard = openGuard(lockPath, busyTimeoutMs);
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
throw unavailable("projection runner lock database could not be opened", error);
|
|
110
|
-
}
|
|
111
|
-
try {
|
|
112
|
-
return createHeldLock(lockPath, busyTimeoutMs, guard, openReservation(lockPath, busyTimeoutMs));
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
closeTransaction(guard);
|
|
116
|
-
if (isContention(error))
|
|
117
|
-
throw new ProjectionRunnerLockUnavailableError("projection runner lock is already held", { cause: error });
|
|
118
|
-
throw unavailable("projection runner lock acquisition failed", error);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
export function acquireProjectionRunnerTransferTarget(projectionDirectory, platform = process.platform, busyTimeoutMs = 0) {
|
|
122
|
-
if (!isProjectionRunnerLockPlatformSupported(platform))
|
|
123
|
-
throw new ProjectionRunnerLockUnsupportedError(platform);
|
|
124
|
-
const lockPath = projectionRunnerLockPath(projectionDirectory);
|
|
125
|
-
let guard;
|
|
126
|
-
try {
|
|
127
|
-
guard = openGuard(lockPath, busyTimeoutMs);
|
|
128
|
-
}
|
|
129
|
-
catch (error) {
|
|
130
|
-
throw unavailable("projection runner transfer acquisition failed", error);
|
|
131
|
-
}
|
|
132
|
-
let closed = false;
|
|
133
|
-
return {
|
|
134
|
-
path: lockPath,
|
|
135
|
-
promote() {
|
|
136
|
-
if (closed)
|
|
137
|
-
throw new ProjectionRunnerLockUnavailableError("projection runner transfer target is closed");
|
|
138
|
-
try {
|
|
139
|
-
const reservation = openReservation(lockPath, busyTimeoutMs);
|
|
140
|
-
closed = true;
|
|
141
|
-
return createHeldLock(lockPath, busyTimeoutMs, guard, reservation);
|
|
142
|
-
}
|
|
143
|
-
catch (error) {
|
|
144
|
-
throw unavailable("projection runner transfer promotion failed", error);
|
|
145
|
-
}
|
|
146
|
-
},
|
|
147
|
-
close() {
|
|
148
|
-
if (closed)
|
|
149
|
-
return;
|
|
150
|
-
closed = true;
|
|
151
|
-
const failure = closeTransaction(guard);
|
|
152
|
-
if (failure !== undefined)
|
|
153
|
-
throw unavailable("projection runner transfer release failed", failure);
|
|
154
|
-
},
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
/** Acquire positive death evidence. An active guard or transfer blocks this. */
|
|
158
|
-
export function acquireProjectionRunnerSettlementLock(projectionDirectory, platform = process.platform, busyTimeoutMs = 0) {
|
|
159
|
-
if (!isProjectionRunnerLockPlatformSupported(platform))
|
|
160
|
-
throw new ProjectionRunnerLockUnsupportedError(platform);
|
|
161
|
-
const lockPath = projectionRunnerLockPath(projectionDirectory);
|
|
162
|
-
let transaction;
|
|
163
|
-
try {
|
|
164
|
-
transaction = openSqliteProcessLifetimeLockTransaction({ path: lockPath, mode: "exclusive", busyTimeoutMs });
|
|
165
|
-
}
|
|
166
|
-
catch (error) {
|
|
167
|
-
if (isContention(error))
|
|
168
|
-
throw new ProjectionRunnerLockUnavailableError("projection runner lock is already held", { cause: error });
|
|
169
|
-
throw unavailable("projection runner settlement lock acquisition failed", error);
|
|
170
|
-
}
|
|
171
|
-
let closed = false;
|
|
172
|
-
return {
|
|
173
|
-
path: lockPath,
|
|
174
|
-
close() {
|
|
175
|
-
if (closed)
|
|
176
|
-
return;
|
|
177
|
-
closed = true;
|
|
178
|
-
const failure = closeTransaction(transaction);
|
|
179
|
-
if (failure !== undefined)
|
|
180
|
-
throw unavailable("projection runner settlement lock release failed", failure);
|
|
181
|
-
},
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
/** Positive death probe without creating a missing lock database. */
|
|
185
|
-
export function observeProjectionRunnerLock(projectionDirectory, platform = process.platform) {
|
|
186
|
-
if (!isProjectionRunnerLockPlatformSupported(platform)) {
|
|
187
|
-
return { state: "unknown", reason: "unsupported-platform", detail: `projection runner locks are unsupported on platform '${platform}'` };
|
|
188
|
-
}
|
|
189
|
-
const lockPath = projectionRunnerLockPath(projectionDirectory);
|
|
190
|
-
let probe;
|
|
191
|
-
try {
|
|
192
|
-
probe = openSqliteProcessLifetimeLockTransaction({ path: lockPath, mode: "exclusive", busyTimeoutMs: 0 });
|
|
193
|
-
return { state: "released" };
|
|
194
|
-
}
|
|
195
|
-
catch (error) {
|
|
196
|
-
if (isContention(error))
|
|
197
|
-
return { state: "held" };
|
|
198
|
-
const detail = errorDetail(error);
|
|
199
|
-
return {
|
|
200
|
-
state: "unknown",
|
|
201
|
-
reason: detail.includes("rollback-journal") ? "unsupported-journal-mode" : "probe-failed",
|
|
202
|
-
detail,
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
finally {
|
|
206
|
-
try {
|
|
207
|
-
probe?.close();
|
|
208
|
-
}
|
|
209
|
-
catch { /* no probe cleanup result is death evidence */ }
|
|
210
|
-
}
|
|
211
|
-
}
|