@astrosheep/keiyaku 2.9.13 → 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 -130
- 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 -32
- 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 -5
- package/build/cli/commands/akuma/akuma/meta.js +0 -17
- package/build/cli/commands/akuma/catalog.js +0 -10
- package/build/cli/commands/akuma/list/handler.js +0 -15
- package/build/cli/commands/akuma/list/meta-list.js +0 -12
- 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 -186
- package/build/cli/commands/contract/amend/handler.js +0 -17
- package/build/cli/commands/contract/amend/meta.js +0 -13
- package/build/cli/commands/contract/arc/handler.js +0 -16
- package/build/cli/commands/contract/arc/meta.js +0 -28
- package/build/cli/commands/contract/audit/handler.js +0 -42
- package/build/cli/commands/contract/audit/meta.js +0 -17
- 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 -64
- package/build/cli/commands/contract/petition/meta.js +0 -23
- package/build/cli/commands/contract/renew/handler.js +0 -65
- package/build/cli/commands/contract/renew/meta.js +0 -19
- package/build/cli/commands/metadata.js +0 -68
- 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/fork/handler.js +0 -61
- package/build/cli/commands/projection/fork/meta.js +0 -12
- package/build/cli/commands/projection/history/handler.js +0 -65
- 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/shared.js +0 -27
- package/build/cli/commands/projection/status/handler.js +0 -42
- package/build/cli/commands/projection/status/meta.js +0 -20
- package/build/cli/commands/projection/tell/handler.js +0 -32
- package/build/cli/commands/projection/tell/meta.js +0 -12
- package/build/cli/commands/projection/wait/handler.js +0 -80
- 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 -10
- 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 -38
- package/build/cli/commands/task/add/meta.js +0 -31
- package/build/cli/commands/task/catalog.js +0 -32
- 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 -3
- 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 -8
- package/build/cli/commands/task/drop/meta.js +0 -11
- 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/note/handler.js +0 -6
- package/build/cli/commands/task/note/meta.js +0 -11
- 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 -181
- 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 -12
- package/build/cli/commands/verification/handler.js +0 -43
- package/build/cli/commands/verification/meta.js +0 -13
- package/build/cli/completion.js +0 -91
- package/build/cli/draft-artifact.js +0 -50
- package/build/cli/flags.js +0 -321
- package/build/cli/help.js +0 -99
- package/build/cli/index.js +0 -333
- 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 -301
- package/build/cli/parse-metadata.js +0 -132
- package/build/cli/parse-selectors.js +0 -83
- package/build/cli/parse.js +0 -250
- 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 -88
- 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 -300
- 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 -85
- package/build/cli/render/projection-activity.js +0 -332
- package/build/cli/render/projection-history.js +0 -77
- 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-indicator.js +0 -47
- package/build/cli/render/status.js +0 -243
- package/build/cli/render/success-response.js +0 -95
- package/build/cli/render/task.js +0 -175
- package/build/cli/render/tell.js +0 -11
- package/build/cli/render/terminal-failure.js +0 -65
- package/build/cli/render/tool-command-normalization.js +0 -137
- package/build/cli/render/tool-ledger-rollup.js +0 -74
- package/build/cli/render/tool-presentation.js +0 -98
- package/build/cli/render/types.js +0 -2
- package/build/cli/render/verification.js +0 -23
- package/build/cli/render/wait.js +0 -343
- package/build/cli/skills-install.js +0 -348
- package/build/cli/subagent-guard.js +0 -25
- package/build/cli/types.js +0 -2
- package/build/config/akuma-loader.js +0 -240
- 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 -14
- 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 -113
- package/build/core/address-carrier.js +0 -89
- package/build/core/addressing.js +0 -407
- package/build/core/amend.js +0 -321
- 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 -141
- package/build/core/audit/coordinates.js +0 -230
- package/build/core/audit/evidence.js +0 -156
- 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 -409
- package/build/core/bind-workspace.js +0 -115
- package/build/core/bind.js +0 -503
- package/build/core/call/call.js +0 -235
- package/build/core/call/context.js +0 -210
- package/build/core/call/execution.js +0 -255
- package/build/core/call/prompt.js +0 -27
- 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 -512
- package/build/core/contract-carrier.js +0 -353
- package/build/core/contract-view.js +0 -319
- package/build/core/contract.js +0 -19
- package/build/core/derived-replay.js +0 -340
- package/build/core/draft.js +0 -400
- 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 -48
- package/build/core/lifecycle-recovery.js +0 -122
- 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/projection/akuma-name.js +0 -43
- package/build/core/projection/generation/database.js +0 -473
- package/build/core/projection/generation/identity.js +0 -84
- package/build/core/projection/generation/ledger.js +0 -91
- package/build/core/projection/generation/model.js +0 -261
- package/build/core/projection/generation/projection-generation-continuation.js +0 -84
- package/build/core/projection/generation/projection-generation-doorbell.js +0 -88
- package/build/core/projection/generation/projection-generation-execution.js +0 -241
- package/build/core/projection/generation/projection-generation-identity.js +0 -21
- package/build/core/projection/generation/projection-generation-launcher.js +0 -154
- package/build/core/projection/generation/projection-generation-process.js +0 -47
- package/build/core/projection/generation/projection-generation-runner.js +0 -489
- package/build/core/projection/generation/projection-generation-runtime.js +0 -46
- package/build/core/projection/generation/protocol.js +0 -68
- package/build/core/projection/generation/store.js +0 -108
- 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 -127
- 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 -112
- package/build/core/projection/projection-life-observer.js +0 -101
- package/build/core/projection/projection-mint.js +0 -170
- package/build/core/projection/projection-status-observation.js +0 -434
- package/build/core/projection/projection-status.js +0 -442
- package/build/core/projection/projection-terminal-failure.js +0 -111
- package/build/core/projection/projection-wait.js +0 -337
- package/build/core/projection/projection-wake.js +0 -298
- 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 -554
- package/build/core/renew-plan.js +0 -264
- package/build/core/renew-rewrite.js +0 -118
- package/build/core/renew.js +0 -345
- package/build/core/repository-ledger/accepted-fold-read.js +0 -22
- 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 -303
- package/build/core/repository-ledger/current-state-store.js +0 -968
- package/build/core/repository-ledger/fold-repository.js +0 -374
- 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/identity.js +0 -60
- 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 -517
- 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 -346
- 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/run-control/connection-bound-close.js +0 -41
- package/build/core/run-control/detached-lease-bootstrap.js +0 -208
- package/build/core/run-control/detached-process.js +0 -14
- package/build/core/run-control/index.js +0 -6
- package/build/core/run-control/process-tree.js +0 -139
- package/build/core/run-control/runner-lease.js +0 -172
- package/build/core/run-control/sqlite-process-lifetime-lock.js +0 -174
- package/build/core/scope.js +0 -416
- package/build/core/seal.js +0 -364
- package/build/core/settlement/claim-delivery.js +0 -82
- package/build/core/settlement/claim.js +0 -258
- package/build/core/settlement/index.js +0 -19
- package/build/core/settlement/petition-claim-gates.js +0 -247
- package/build/core/settlement/petition-forfeit.js +0 -46
- package/build/core/settlement/petition-head-guard.js +0 -12
- package/build/core/settlement/petition-io.js +0 -1
- package/build/core/settlement/petition-preview.js +0 -125
- package/build/core/settlement/petition-window.js +0 -50
- package/build/core/settlement/petition.js +0 -315
- 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 -385
- package/build/core/settlement/verdict.js +0 -126
- package/build/core/settlement/verification.js +0 -554
- package/build/core/status/board.js +0 -455
- package/build/core/status/drift.js +0 -113
- 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 -248
- package/build/core/task/commands.js +0 -401
- package/build/core/task/compose.js +0 -328
- package/build/core/task/coordinate.js +0 -56
- package/build/core/task/document.js +0 -273
- 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 -423
- package/build/core/task/settlement-policy.js +0 -137
- package/build/core/task/source-board.js +0 -104
- package/build/core/task/source-model.js +0 -1
- package/build/core/task/task-bind-preparation.js +0 -243
- 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 -97
- 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/verification-declaration.js +0 -95
- package/build/core/worktree-bootstrap.js +0 -195
- package/build/core/worktree-path.js +0 -371
- package/build/errno.js +0 -3
- package/build/flow-error.js +0 -191
- 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 -84
- package/build/git/commits.js +0 -151
- package/build/git/core.js +0 -86
- 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/process.js +0 -229
- package/build/git/refs.js +0 -250
- package/build/git/staging.js +0 -79
- package/build/git/streaming-batch.js +0 -354
- package/build/git/worktree.js +0 -175
- package/build/index.js +0 -67
- 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 -97
- package/skills/keiyaku-task/SKILL.md +0 -118
- package/skills/keiyaku-workflow/SKILL.md +0 -191
- /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,371 +0,0 @@
|
|
|
1
|
-
import { FlowError } from "../../flow-error.js";
|
|
2
|
-
import { assertGitObservation, requireGitRepository } from "../../git/branches.js";
|
|
3
|
-
import { assertTaskBoardGeneration, withLockHeldTaskBoard, } from "./task-git-store.js";
|
|
4
|
-
import { prepareTaskDocumentReplacements, taskBoardFromSourceBoard, taskRepositoryFromLockedBoard } from "./task-store-repository.js";
|
|
5
|
-
import { buildTaskSourceBoard } from "./source-board.js";
|
|
6
|
-
import { formatTaskCoordinate } from "./coordinate.js";
|
|
7
|
-
import { createTaskBoardCommit, publishTaskMutationCommit, inspectCurrentBranch, publishForwardTaskBoardCommit, reconcileTaskPathsetIndex, refHead, taskContractAtCommit, taskSourcesAtCommit, taskWritesFromSources, trackedTaskPaths, updateBranch, } from "./settlement-git.js";
|
|
8
|
-
import { boundTaskDocument, contractPointerDocument, doneTaskReplacements, reopenedTaskDocument, requireHealthySettlementBoard, requireSettledTask, selectReadyTasksForBind, tasksForContract, } from "./settlement-policy.js";
|
|
9
|
-
import { stableRepoRoot } from "../worktree-path.js";
|
|
10
|
-
/**
|
|
11
|
-
* Read the same healthy task board and run the same ready-task selector as bind
|
|
12
|
-
* under the task admission lock, without replacing sources or publishing.
|
|
13
|
-
*/
|
|
14
|
-
export async function previewTaskBoardForBind(input) {
|
|
15
|
-
await requireGitRepository(input.cwd, "task bind");
|
|
16
|
-
return await withLockHeldTaskBoard(input.cwd, async (transaction) => {
|
|
17
|
-
if (transaction.location.mode !== "git") {
|
|
18
|
-
if (transaction.location.capability === "unavailable") {
|
|
19
|
-
assertGitObservation({ capability: "unavailable" }, "task bind");
|
|
20
|
-
}
|
|
21
|
-
throw new FlowError("NOT_GIT_REPO", "task bind requires Git task storage");
|
|
22
|
-
}
|
|
23
|
-
const repository = taskRepositoryFromLockedBoard(transaction);
|
|
24
|
-
const board = requireHealthySettlementBoard(await repository.read());
|
|
25
|
-
return { tasks: input.taskIds === undefined ? [] : selectReadyTasksForBind(board, input.taskIds) };
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
function sourcePath(root, source) {
|
|
29
|
-
return source.path.slice(root.length + 1).split("\\").join("/");
|
|
30
|
-
}
|
|
31
|
-
function taskPath(id) {
|
|
32
|
-
return `.keiyaku/tasks/${id}.md`;
|
|
33
|
-
}
|
|
34
|
-
function ownedTaskPaths(board, taskIds) {
|
|
35
|
-
if (!taskIds || taskIds.length === 0)
|
|
36
|
-
return [];
|
|
37
|
-
const paths = new Set();
|
|
38
|
-
for (const taskId of taskIds) {
|
|
39
|
-
let current = board.byId.get(taskId);
|
|
40
|
-
while (current) {
|
|
41
|
-
paths.add(taskPath(current.coordinate));
|
|
42
|
-
current = current.parent === null ? undefined : board.byId.get(current.parent);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return [...paths].sort();
|
|
46
|
-
}
|
|
47
|
-
function selectSettlementSources(input) {
|
|
48
|
-
const tracked = new Set(input.trackedPaths);
|
|
49
|
-
const sourceByPath = new Map(input.sources.map((source) => [sourcePath(input.root, source), source]));
|
|
50
|
-
// An ancestry path is eligible only when it was already tracked. A mutation is
|
|
51
|
-
// the sole explicit adoption authority for an untracked task document.
|
|
52
|
-
const selected = new Set([
|
|
53
|
-
...input.ownedPaths.filter((taskSourcePath) => tracked.has(taskSourcePath)),
|
|
54
|
-
...input.mutationPaths,
|
|
55
|
-
].filter((taskSourcePath) => sourceByPath.has(taskSourcePath)));
|
|
56
|
-
const selectedPaths = [...selected].sort();
|
|
57
|
-
const adoptedPaths = selectedPaths.filter((taskSourcePath) => !tracked.has(taskSourcePath));
|
|
58
|
-
const observedPaths = new Set([...tracked, ...sourceByPath.keys()]);
|
|
59
|
-
return {
|
|
60
|
-
sources: selectedPaths.map((taskSourcePath) => sourceByPath.get(taskSourcePath)),
|
|
61
|
-
evidence: {
|
|
62
|
-
selectedPaths,
|
|
63
|
-
rejectedPaths: [...observedPaths].filter((taskSourcePath) => !selected.has(taskSourcePath)).sort(),
|
|
64
|
-
adoptedPaths,
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function repositoryForSettlement(transaction, sources) {
|
|
69
|
-
let currentSources = sources;
|
|
70
|
-
return {
|
|
71
|
-
read: async () => taskBoardFromSourceBoard(buildTaskSourceBoard(currentSources)),
|
|
72
|
-
sources: () => currentSources,
|
|
73
|
-
mutate: async (apply) => {
|
|
74
|
-
const board = taskBoardFromSourceBoard(buildTaskSourceBoard(currentSources));
|
|
75
|
-
const mutation = await apply(board);
|
|
76
|
-
const prepared = prepareTaskDocumentReplacements(currentSources, mutation.replacements);
|
|
77
|
-
await transaction.replace(prepared.writes);
|
|
78
|
-
currentSources = prepared.sources;
|
|
79
|
-
return mutation.select(prepared.board);
|
|
80
|
-
},
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
async function clearAttemptedPointers(input) {
|
|
84
|
-
return input.repository.mutate((board) => {
|
|
85
|
-
const replacements = input.tasks.flatMap((task) => {
|
|
86
|
-
const current = requireSettledTask(board, task.coordinate);
|
|
87
|
-
return current.contractId === input.contractId
|
|
88
|
-
? [contractPointerDocument(current, undefined, input.updatedAt)]
|
|
89
|
-
: [];
|
|
90
|
-
});
|
|
91
|
-
return { replacements, select: () => replacements.map((replacement) => replacement.coordinate ?? replacement.id) };
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
async function replaceTaskDocuments(repository, replacements) {
|
|
95
|
-
return repository.mutate(() => ({
|
|
96
|
-
replacements,
|
|
97
|
-
select: (resulting) => replacements.map((replacement) => requireSettledTask(resulting, replacement.coordinate ?? replacement.id)),
|
|
98
|
-
}));
|
|
99
|
-
}
|
|
100
|
-
async function restorePreAdmissionTaskMutations(input) {
|
|
101
|
-
// Write text is ignored by restore; the id selects the path whose prior bytes return.
|
|
102
|
-
await input.transaction.restore(input.taskIds.map((id) => ({ id, text: "" })), input.previousSources);
|
|
103
|
-
}
|
|
104
|
-
async function rollForwardClearAttemptedPointer(input) {
|
|
105
|
-
const clearedIds = await clearAttemptedPointers({
|
|
106
|
-
repository: input.repository,
|
|
107
|
-
tasks: input.selected,
|
|
108
|
-
contractId: input.contractId,
|
|
109
|
-
updatedAt: input.updatedAt,
|
|
110
|
-
});
|
|
111
|
-
if (clearedIds.length === 0)
|
|
112
|
-
return;
|
|
113
|
-
const rollbackSelection = selectSettlementSources({
|
|
114
|
-
root: input.root,
|
|
115
|
-
sources: input.repository.sources(),
|
|
116
|
-
trackedPaths: await trackedTaskPaths(input.hubCwd, input.trackedHead),
|
|
117
|
-
ownedPaths: input.selectedPaths,
|
|
118
|
-
mutationPaths: clearedIds.map(taskPath),
|
|
119
|
-
});
|
|
120
|
-
await publishForwardTaskBoardCommit({
|
|
121
|
-
cwd: input.hubCwd,
|
|
122
|
-
ref: input.branchRef,
|
|
123
|
-
gitDir: input.gitDir,
|
|
124
|
-
root: input.root,
|
|
125
|
-
sources: rollbackSelection.sources,
|
|
126
|
-
paths: rollbackSelection.evidence.selectedPaths,
|
|
127
|
-
subject: `Clear failed contract ${input.contractId} from ${clearedIds.length === 1 ? `task ${clearedIds[0]}` : `${clearedIds.length} tasks`}`,
|
|
128
|
-
}, input.deps);
|
|
129
|
-
}
|
|
130
|
-
export async function settleTaskBoardForBind(input, deps = {}) {
|
|
131
|
-
const updatedAt = new Date().toISOString();
|
|
132
|
-
await requireGitRepository(input.cwd, "task bind");
|
|
133
|
-
return withLockHeldTaskBoard(input.cwd, async (transaction) => {
|
|
134
|
-
if (transaction.location.mode !== "git") {
|
|
135
|
-
if (transaction.location.capability === "unavailable") {
|
|
136
|
-
assertGitObservation({ capability: "unavailable" }, "task bind");
|
|
137
|
-
}
|
|
138
|
-
throw new FlowError("NOT_GIT_REPO", "task bind requires Git task storage");
|
|
139
|
-
}
|
|
140
|
-
const hubCwd = transaction.location.root;
|
|
141
|
-
const branch = await inspectCurrentBranch(hubCwd);
|
|
142
|
-
const previousSources = transaction.sources;
|
|
143
|
-
const repository = repositoryForSettlement(transaction, transaction.sources);
|
|
144
|
-
const board = requireHealthySettlementBoard(await repository.read());
|
|
145
|
-
const taskBound = "taskIds" in input;
|
|
146
|
-
const selectedTasks = taskBound ? selectReadyTasksForBind(board, input.taskIds) : [];
|
|
147
|
-
const prepared = taskBound ? await input.prepare(selectedTasks) : input;
|
|
148
|
-
const contractId = prepared.contractId;
|
|
149
|
-
if (taskBound && selectedTasks.length > 0) {
|
|
150
|
-
await replaceTaskDocuments(repository, selectedTasks.map((task) => boundTaskDocument(task, contractId, updatedAt)));
|
|
151
|
-
}
|
|
152
|
-
const taskIds = taskBound ? selectedTasks.map((t) => t.coordinate) : undefined;
|
|
153
|
-
const selectedPaths = ownedTaskPaths(await repository.read(), taskIds);
|
|
154
|
-
const mutationPaths = taskBound ? selectedTasks.map((t) => taskPath(t.coordinate)) : [];
|
|
155
|
-
const selectCurrentSettlement = async () => selectSettlementSources({
|
|
156
|
-
root: transaction.location.root,
|
|
157
|
-
sources: repository.sources(),
|
|
158
|
-
trackedPaths: await trackedTaskPaths(hubCwd, branch.head),
|
|
159
|
-
ownedPaths: selectedPaths,
|
|
160
|
-
mutationPaths,
|
|
161
|
-
});
|
|
162
|
-
const selection = await selectCurrentSettlement();
|
|
163
|
-
const makeBoardCommit = deps.createTaskBoardCommit ?? createTaskBoardCommit;
|
|
164
|
-
const reconcileIndex = deps.reconcileTaskPathsetIndex ?? reconcileTaskPathsetIndex;
|
|
165
|
-
let firstCommit;
|
|
166
|
-
try {
|
|
167
|
-
const taskLabel = taskBound
|
|
168
|
-
? selectedTasks.length === 1
|
|
169
|
-
? `task ${selectedTasks[0].coordinate}`
|
|
170
|
-
: `${selectedTasks.length} tasks`
|
|
171
|
-
: "";
|
|
172
|
-
firstCommit = await makeBoardCommit({
|
|
173
|
-
cwd: hubCwd,
|
|
174
|
-
gitDir: transaction.location.gitDir,
|
|
175
|
-
root: transaction.location.root,
|
|
176
|
-
parent: branch.head,
|
|
177
|
-
sources: selection.sources,
|
|
178
|
-
subject: taskBound
|
|
179
|
-
? `Bind ${taskLabel} to contract ${contractId}`
|
|
180
|
-
: `Flush task board for contract ${contractId}`,
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
catch (error) {
|
|
184
|
-
if (taskBound) {
|
|
185
|
-
await restorePreAdmissionTaskMutations({ transaction, taskIds: selectedTasks.map((task) => task.coordinate), previousSources });
|
|
186
|
-
}
|
|
187
|
-
throw error;
|
|
188
|
-
}
|
|
189
|
-
try {
|
|
190
|
-
await updateBranch({ cwd: hubCwd, ref: branch.ref, next: firstCommit, expected: branch.head }, deps);
|
|
191
|
-
}
|
|
192
|
-
catch (error) {
|
|
193
|
-
if (taskBound) {
|
|
194
|
-
const concurrentHead = await refHead(hubCwd, branch.ref);
|
|
195
|
-
const concurrentMatches = await Promise.all(selectedTasks.map(async (task) => (await taskContractAtCommit(hubCwd, concurrentHead, task.coordinate)) === contractId));
|
|
196
|
-
if (concurrentMatches.every(Boolean)) {
|
|
197
|
-
await rollForwardClearAttemptedPointer({
|
|
198
|
-
repository, selected: selectedTasks, contractId, hubCwd,
|
|
199
|
-
branchRef: branch.ref, trackedHead: branch.head,
|
|
200
|
-
gitDir: transaction.location.gitDir, root: transaction.location.root,
|
|
201
|
-
selectedPaths, deps, updatedAt,
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
await restorePreAdmissionTaskMutations({ transaction, taskIds: selectedTasks.map((task) => task.coordinate), previousSources });
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
throw error;
|
|
209
|
-
}
|
|
210
|
-
try {
|
|
211
|
-
await reconcileIndex(hubCwd, firstCommit, selection.evidence.selectedPaths);
|
|
212
|
-
}
|
|
213
|
-
catch (indexError) {
|
|
214
|
-
if (taskBound) {
|
|
215
|
-
await rollForwardClearAttemptedPointer({
|
|
216
|
-
repository, selected: selectedTasks, contractId, hubCwd,
|
|
217
|
-
branchRef: branch.ref, trackedHead: branch.head,
|
|
218
|
-
gitDir: transaction.location.gitDir, root: transaction.location.root,
|
|
219
|
-
selectedPaths, deps, updatedAt,
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
throw indexError;
|
|
223
|
-
}
|
|
224
|
-
try {
|
|
225
|
-
const ledger = await prepared.publishLedger(firstCommit);
|
|
226
|
-
const boardAfter = requireHealthySettlementBoard(await repository.read());
|
|
227
|
-
return {
|
|
228
|
-
boardCommit: firstCommit,
|
|
229
|
-
contractId,
|
|
230
|
-
ledger,
|
|
231
|
-
...(taskBound && selectedTasks.length > 0 ? { tasks: selectedTasks.map((t) => requireSettledTask(boardAfter, t.coordinate)) } : {}),
|
|
232
|
-
evidence: selection.evidence,
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
catch (publishError) {
|
|
236
|
-
if (!taskBound)
|
|
237
|
-
throw publishError;
|
|
238
|
-
await rollForwardClearAttemptedPointer({
|
|
239
|
-
repository, selected: selectedTasks, contractId, hubCwd,
|
|
240
|
-
branchRef: branch.ref, trackedHead: branch.head,
|
|
241
|
-
gitDir: transaction.location.gitDir, root: transaction.location.root,
|
|
242
|
-
selectedPaths, deps, updatedAt,
|
|
243
|
-
});
|
|
244
|
-
throw publishError;
|
|
245
|
-
}
|
|
246
|
-
}, { signal: input.signal });
|
|
247
|
-
}
|
|
248
|
-
export async function reconcileTaskForfeit(input) {
|
|
249
|
-
const updatedAt = new Date().toISOString();
|
|
250
|
-
await requireGitRepository(input.cwd, "task forfeit");
|
|
251
|
-
const hubRoot = await stableRepoRoot(input.cwd);
|
|
252
|
-
return withLockHeldTaskBoard(hubRoot, async (transaction) => {
|
|
253
|
-
if (transaction.location.mode !== "git") {
|
|
254
|
-
if (transaction.location.capability === "unavailable") {
|
|
255
|
-
assertGitObservation({ capability: "unavailable" }, "task forfeit");
|
|
256
|
-
}
|
|
257
|
-
throw new FlowError("NOT_GIT_REPO", "task forfeit requires Git task storage");
|
|
258
|
-
}
|
|
259
|
-
assertTaskBoardGeneration(transaction, input.expectedGeneration);
|
|
260
|
-
const repository = taskRepositoryFromLockedBoard(transaction);
|
|
261
|
-
const branch = await inspectCurrentBranch(transaction.location.root);
|
|
262
|
-
const trackedPaths = await trackedTaskPaths(transaction.location.root, branch.head);
|
|
263
|
-
const branchSources = await taskSourcesAtCommit(transaction.location.root, transaction.location.root, branch.head, trackedPaths);
|
|
264
|
-
if (!branchSources)
|
|
265
|
-
throw new FlowError("INTERNAL_STATE", `task branch ${branch.head} lost tracked task sources`);
|
|
266
|
-
const branchBoard = requireHealthySettlementBoard(taskBoardFromSourceBoard(buildTaskSourceBoard(branchSources)));
|
|
267
|
-
const matched = tasksForContract(branchBoard, input.contractId);
|
|
268
|
-
const worktreeMatched = tasksForContract(await repository.read(), input.contractId);
|
|
269
|
-
if (matched.length === 0 && worktreeMatched.length === 0) {
|
|
270
|
-
input.observeEffect?.({ effect: "task-source-reconciliation", status: "succeeded", taskCount: 0, detail: "current" });
|
|
271
|
-
input.observeEffect?.({ effect: "task-reconciliation", status: "succeeded", commit: branch.head, detail: "current" });
|
|
272
|
-
input.observeEffect?.({ effect: "task-index-reconciliation", status: "succeeded", commit: branch.head });
|
|
273
|
-
return { ledger: await input.publishLedger() };
|
|
274
|
-
}
|
|
275
|
-
const reopenedDocuments = matched.map((task) => reopenedTaskDocument(task, updatedAt));
|
|
276
|
-
const prepared = prepareTaskDocumentReplacements(branchSources, reopenedDocuments);
|
|
277
|
-
const projectionIds = matched.length > 0 ? matched.map((task) => task.coordinate) : worktreeMatched.map((task) => task.coordinate);
|
|
278
|
-
const branchSourcesByPath = new Map(branchSources.map((source) => [sourcePath(transaction.location.root, source), source]));
|
|
279
|
-
const writes = matched.length > 0
|
|
280
|
-
? prepared.writes
|
|
281
|
-
: taskWritesFromSources(projectionIds.map((id) => {
|
|
282
|
-
const source = branchSourcesByPath.get(taskPath(id));
|
|
283
|
-
if (!source)
|
|
284
|
-
throw new FlowError("INTERNAL_STATE", `task ${id} is missing from authoritative task branch ${branch.head}`);
|
|
285
|
-
return source;
|
|
286
|
-
}));
|
|
287
|
-
const reopened = projectionIds.map((id) => requireSettledTask(prepared.board, id));
|
|
288
|
-
const taskLabel = projectionIds.length === 1 ? `task ${projectionIds[0]}` : `${projectionIds.length} tasks`;
|
|
289
|
-
let indexSucceeded = false;
|
|
290
|
-
await publishTaskMutationCommit({
|
|
291
|
-
cwd: transaction.location.root,
|
|
292
|
-
gitDir: transaction.location.gitDir,
|
|
293
|
-
writes,
|
|
294
|
-
subject: `Reopen ${taskLabel} after forfeit of ${input.contractId}`,
|
|
295
|
-
observeEffect: (effect) => {
|
|
296
|
-
input.observeEffect?.(effect);
|
|
297
|
-
if (effect.effect === "task-index-reconciliation" && effect.status === "succeeded")
|
|
298
|
-
indexSucceeded = true;
|
|
299
|
-
},
|
|
300
|
-
});
|
|
301
|
-
if (!indexSucceeded)
|
|
302
|
-
throw new FlowError("INTERNAL_STATE", "task index reconciliation failed before forfeit ledger publication");
|
|
303
|
-
try {
|
|
304
|
-
await transaction.replace(writes);
|
|
305
|
-
input.observeEffect?.({ effect: "task-source-reconciliation", status: "succeeded", taskCount: reopened.length, detail: "materialized" });
|
|
306
|
-
}
|
|
307
|
-
catch (error) {
|
|
308
|
-
input.observeEffect?.({ effect: "task-source-reconciliation", status: "failed", error });
|
|
309
|
-
throw error;
|
|
310
|
-
}
|
|
311
|
-
const ledger = await input.publishLedger();
|
|
312
|
-
return { ledger, tasks: reopened };
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
/** Replay the claim's folded task selection after target+ledger authority commits. */
|
|
316
|
-
export async function replayClaimTasks(input) {
|
|
317
|
-
await requireGitRepository(input.cwd, "task claim replay");
|
|
318
|
-
const hubRoot = await stableRepoRoot(input.cwd);
|
|
319
|
-
return await withLockHeldTaskBoard(hubRoot, async (transaction) => {
|
|
320
|
-
if (transaction.location.mode !== "git") {
|
|
321
|
-
if (transaction.location.capability === "unavailable") {
|
|
322
|
-
assertGitObservation({ capability: "unavailable" }, "task claim replay");
|
|
323
|
-
}
|
|
324
|
-
throw new FlowError("NOT_GIT_REPO", "task claim replay requires Git task storage");
|
|
325
|
-
}
|
|
326
|
-
const hubBranch = await inspectCurrentBranch(transaction.location.root);
|
|
327
|
-
const materializeHub = hubBranch.ref === input.targetRef;
|
|
328
|
-
const selectedPaths = input.taskIds.map(taskPath);
|
|
329
|
-
for (let attempt = 0; attempt < 4; attempt += 1) {
|
|
330
|
-
const targetHead = await refHead(input.cwd, input.targetRef);
|
|
331
|
-
const paths = await trackedTaskPaths(input.cwd, targetHead);
|
|
332
|
-
const sources = await taskSourcesAtCommit(input.cwd, transaction.location.root, targetHead, paths);
|
|
333
|
-
if (!sources)
|
|
334
|
-
throw new FlowError("INTERNAL_STATE", `claim target ${targetHead} lost tracked task sources`);
|
|
335
|
-
const board = requireHealthySettlementBoard(taskBoardFromSourceBoard(buildTaskSourceBoard(sources)));
|
|
336
|
-
const replacements = doneTaskReplacements(board, input.contractId, input.taskIds, input.updatedAt);
|
|
337
|
-
if (replacements.length === 0) {
|
|
338
|
-
const selected = new Set(selectedPaths);
|
|
339
|
-
const writes = taskWritesFromSources(sources.filter((source) => selected.has(sourcePath(transaction.location.root, source))));
|
|
340
|
-
if (materializeHub) {
|
|
341
|
-
if (writes.length > 0)
|
|
342
|
-
await transaction.replace(writes);
|
|
343
|
-
await reconcileTaskPathsetIndex(transaction.location.root, targetHead, selectedPaths);
|
|
344
|
-
}
|
|
345
|
-
return { taskCount: input.taskIds.length, commit: targetHead, worktree: materializeHub ? "materialized" : "ref-only" };
|
|
346
|
-
}
|
|
347
|
-
const prepared = prepareTaskDocumentReplacements(sources, replacements);
|
|
348
|
-
const commit = await createTaskBoardCommit({
|
|
349
|
-
cwd: input.cwd,
|
|
350
|
-
gitDir: transaction.location.gitDir,
|
|
351
|
-
root: transaction.location.root,
|
|
352
|
-
parent: targetHead,
|
|
353
|
-
sources: prepared.sources,
|
|
354
|
-
subject: `Complete ${replacements.length === 1 ? `task ${replacements[0].coordinate ?? formatTaskCoordinate(replacements[0].namespace ?? null, replacements[0].id)}` : `${replacements.length} tasks`} after claim of ${input.contractId}`,
|
|
355
|
-
});
|
|
356
|
-
try {
|
|
357
|
-
await updateBranch({ cwd: input.cwd, ref: input.targetRef, next: commit, expected: targetHead }, {});
|
|
358
|
-
if (materializeHub) {
|
|
359
|
-
await transaction.replace(prepared.writes);
|
|
360
|
-
await reconcileTaskPathsetIndex(transaction.location.root, commit, selectedPaths);
|
|
361
|
-
}
|
|
362
|
-
return { taskCount: input.taskIds.length, commit, worktree: materializeHub ? "materialized" : "ref-only" };
|
|
363
|
-
}
|
|
364
|
-
catch (error) {
|
|
365
|
-
if (attempt === 3)
|
|
366
|
-
throw error;
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
throw new FlowError("CONCURRENT_MODIFICATION", `claim target ${input.targetRef} kept moving during task replay`);
|
|
370
|
-
});
|
|
371
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { rollbackOrphanTaskPointers } from "./task.js";
|
|
2
|
-
import { buildTaskSourceBoard } from "./source-board.js";
|
|
3
|
-
export async function inspectTaskDoctor(store, repository, facts) {
|
|
4
|
-
const orphans = facts.lockHeld ? [] : await rollbackOrphanTaskPointers(repository, facts.contractIds);
|
|
5
|
-
const sources = await store.read();
|
|
6
|
-
const board = buildTaskSourceBoard(sources);
|
|
7
|
-
return {
|
|
8
|
-
board,
|
|
9
|
-
sources,
|
|
10
|
-
orphans,
|
|
11
|
-
landingDiagnostics: facts.landingDiagnostics ?? [],
|
|
12
|
-
lockHeld: facts.lockHeld === true,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
-
import * as fs from "node:fs";
|
|
3
|
-
import * as path from "node:path";
|
|
4
|
-
import { FlowError } from "../../flow-error.js";
|
|
5
|
-
import { syncDirectorySync } from "../../fs/durability.js";
|
|
6
|
-
import { isTaskCoordinate } from "./coordinate.js";
|
|
7
|
-
export function atomicReplaceTaskFile(filePath, text, _deps) {
|
|
8
|
-
const directory = path.dirname(filePath);
|
|
9
|
-
fs.mkdirSync(directory, { recursive: true });
|
|
10
|
-
const temporary = path.join(directory, `.${path.basename(filePath)}.${process.pid}.${randomBytes(12).toString("hex")}.tmp`);
|
|
11
|
-
let descriptor;
|
|
12
|
-
try {
|
|
13
|
-
descriptor = fs.openSync(temporary, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL, 0o644);
|
|
14
|
-
fs.writeFileSync(descriptor, text, { encoding: "utf8" });
|
|
15
|
-
fs.fsyncSync(descriptor);
|
|
16
|
-
fs.closeSync(descriptor);
|
|
17
|
-
descriptor = undefined;
|
|
18
|
-
fs.renameSync(temporary, filePath);
|
|
19
|
-
syncDirectorySync(directory);
|
|
20
|
-
}
|
|
21
|
-
catch (error) {
|
|
22
|
-
if (descriptor !== undefined) {
|
|
23
|
-
try {
|
|
24
|
-
fs.closeSync(descriptor);
|
|
25
|
-
}
|
|
26
|
-
catch { /* preserve original failure */ }
|
|
27
|
-
}
|
|
28
|
-
try {
|
|
29
|
-
fs.unlinkSync(temporary);
|
|
30
|
-
}
|
|
31
|
-
catch { /* absent after rename or already cleaned */ }
|
|
32
|
-
throw error;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
function lstatIfPresent(target) {
|
|
36
|
-
try {
|
|
37
|
-
return fs.lstatSync(target);
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
if (error.code === "ENOENT")
|
|
41
|
-
return undefined;
|
|
42
|
-
throw error;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
export function validateTaskMutationWrites(writes) {
|
|
46
|
-
if (writes.length === 0) {
|
|
47
|
-
throw new FlowError("INTERNAL_STATE", "task mutation must contain at least one write");
|
|
48
|
-
}
|
|
49
|
-
const targets = new Set();
|
|
50
|
-
for (const write of writes) {
|
|
51
|
-
const target = `${write.id}.md`;
|
|
52
|
-
if (!isTaskCoordinate(write.id)) {
|
|
53
|
-
throw new FlowError("INTERNAL_STATE", `invalid task mutation coordinate: ${write.id}`);
|
|
54
|
-
}
|
|
55
|
-
if (targets.has(target))
|
|
56
|
-
throw new FlowError("INTERNAL_STATE", `duplicate task mutation target: ${target}`);
|
|
57
|
-
targets.add(target);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
function mutationTarget(write) {
|
|
61
|
-
return `${write.id}.md`;
|
|
62
|
-
}
|
|
63
|
-
function capturePreviousFiles(directory, writes) {
|
|
64
|
-
return writes.map((write) => {
|
|
65
|
-
const destination = path.join(directory, mutationTarget(write));
|
|
66
|
-
const stat = lstatIfPresent(destination);
|
|
67
|
-
if (!stat)
|
|
68
|
-
return { path: destination };
|
|
69
|
-
if (stat.isSymbolicLink() || !stat.isFile()) {
|
|
70
|
-
throw new FlowError("INTERNAL_STATE", `task destination is not a regular file: ${destination}`);
|
|
71
|
-
}
|
|
72
|
-
return { path: destination, text: fs.readFileSync(destination, "utf8") };
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
export function sameSources(left, right) {
|
|
76
|
-
return left.length === right.length && left.every((source, index) => {
|
|
77
|
-
const candidate = right[index];
|
|
78
|
-
return candidate !== undefined && source.path === candidate.path && source.text === candidate.text;
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
export function generationFor(location, sources) {
|
|
82
|
-
const digest = createHash("sha256").update("keiyaku-task-board-v1\0");
|
|
83
|
-
for (const source of [...sources].sort((left, right) => Buffer.from(left.path).compare(Buffer.from(right.path)))) {
|
|
84
|
-
const relativePath = path.relative(location.mode === "git" ? location.surfaceRoot : location.root, source.path).split(path.sep).join("/");
|
|
85
|
-
digest.update(String(Buffer.byteLength(relativePath))).update(":").update(relativePath);
|
|
86
|
-
digest.update(String(Buffer.byteLength(source.text))).update(":").update(source.text);
|
|
87
|
-
}
|
|
88
|
-
return { root: location.root, fingerprint: digest.digest("hex") };
|
|
89
|
-
}
|
|
90
|
-
export function taskBoardGeneration(transaction) {
|
|
91
|
-
return generationFor(transaction.location, transaction.sources);
|
|
92
|
-
}
|
|
93
|
-
export function assertTaskBoardGeneration(transaction, expected) {
|
|
94
|
-
const current = taskBoardGeneration(transaction);
|
|
95
|
-
if (current.root === expected.root && current.fingerprint === expected.fingerprint)
|
|
96
|
-
return;
|
|
97
|
-
throw new FlowError("CONCURRENT_MODIFICATION", "task board generation changed during lifecycle preparation", {
|
|
98
|
-
facts: { kind: "task_board_generation_changed", expected, current },
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
function removeTaskFile(filePath) {
|
|
102
|
-
try {
|
|
103
|
-
fs.unlinkSync(filePath);
|
|
104
|
-
syncDirectorySync(path.dirname(filePath));
|
|
105
|
-
}
|
|
106
|
-
catch (error) {
|
|
107
|
-
if (error.code !== "ENOENT")
|
|
108
|
-
throw error;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
function restoreFiles(previous, deps) {
|
|
112
|
-
for (const entry of previous) {
|
|
113
|
-
if (entry.text === undefined)
|
|
114
|
-
removeTaskFile(entry.path);
|
|
115
|
-
else
|
|
116
|
-
(deps.atomicReplace ?? atomicReplaceTaskFile)(entry.path, entry.text);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
function writeTaskFile(directory, write, deps) {
|
|
120
|
-
const destination = path.join(directory, mutationTarget(write));
|
|
121
|
-
(deps.atomicReplace ?? atomicReplaceTaskFile)(destination, write.text);
|
|
122
|
-
}
|
|
123
|
-
function assertTaskDirectorySafety(directory) {
|
|
124
|
-
const stat = lstatIfPresent(directory);
|
|
125
|
-
if (stat && (stat.isSymbolicLink() || !stat.isDirectory())) {
|
|
126
|
-
throw new FlowError("INTERNAL_STATE", `task directory is not a regular directory: ${directory}`);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
export function createTaskFileTransaction(input) {
|
|
130
|
-
return {
|
|
131
|
-
location: input.location,
|
|
132
|
-
get sources() { return input.getSources(); },
|
|
133
|
-
async replace(writes) {
|
|
134
|
-
validateTaskMutationWrites(writes);
|
|
135
|
-
input.assertBoardSafety();
|
|
136
|
-
assertTaskDirectorySafety(input.directory);
|
|
137
|
-
const currentSources = await input.readSources();
|
|
138
|
-
if (!sameSources(input.getSources(), currentSources)) {
|
|
139
|
-
throw new FlowError("CONCURRENT_MODIFICATION", "task sources changed while applying the mutation");
|
|
140
|
-
}
|
|
141
|
-
input.assertBoardSafety();
|
|
142
|
-
assertTaskDirectorySafety(input.directory);
|
|
143
|
-
const previous = capturePreviousFiles(input.directory, writes);
|
|
144
|
-
let applied = 0;
|
|
145
|
-
try {
|
|
146
|
-
for (const write of writes) {
|
|
147
|
-
writeTaskFile(input.directory, write, input.deps);
|
|
148
|
-
applied += 1;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
try {
|
|
153
|
-
restoreFiles(previous.slice(0, applied + 1), input.deps);
|
|
154
|
-
}
|
|
155
|
-
catch { /* the original replacement failure remains authoritative */ }
|
|
156
|
-
throw error;
|
|
157
|
-
}
|
|
158
|
-
input.setSources(await input.readSources());
|
|
159
|
-
},
|
|
160
|
-
async restore(writes, previousSources) {
|
|
161
|
-
validateTaskMutationWrites(writes);
|
|
162
|
-
const currentSources = await input.readSources();
|
|
163
|
-
if (!sameSources(input.getSources(), currentSources)) {
|
|
164
|
-
throw new FlowError("CONCURRENT_MODIFICATION", "task sources changed while rolling back a failed publication");
|
|
165
|
-
}
|
|
166
|
-
const previousById = new Map(previousSources.map((source) => [path.relative(input.directory, source.path).slice(0, -3).split(path.sep).join("/"), source.text]));
|
|
167
|
-
restoreFiles(writes.map((write) => ({ path: path.join(input.directory, mutationTarget(write)), text: previousById.get(write.id) })), input.deps);
|
|
168
|
-
input.setSources(await input.readSources());
|
|
169
|
-
},
|
|
170
|
-
};
|
|
171
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { runGitProcess } from "../../git/core.js";
|
|
2
|
-
const ANONYMOUS_TASK_CREATOR = "(anonymous)";
|
|
3
|
-
const TASK_ACTOR_ENV = "KEIYAKU_ACTOR";
|
|
4
|
-
const GIT_ACTOR_KEYS = ["keiyaku.actor", "user.name"];
|
|
5
|
-
async function defaultRunGit(cwd, args, env) {
|
|
6
|
-
return await runGitProcess(cwd, args, { env: { ...env } });
|
|
7
|
-
}
|
|
8
|
-
function attribution(value) {
|
|
9
|
-
const trimmed = value?.trim();
|
|
10
|
-
return trimmed ? trimmed : undefined;
|
|
11
|
-
}
|
|
12
|
-
export async function resolveTaskCreator(cwd, deps = {}) {
|
|
13
|
-
const sourceEnv = deps.env ?? process.env;
|
|
14
|
-
const environmentActor = attribution(sourceEnv[TASK_ACTOR_ENV]);
|
|
15
|
-
if (environmentActor)
|
|
16
|
-
return environmentActor;
|
|
17
|
-
const gitEnv = { ...sourceEnv, GIT_TERMINAL_PROMPT: "0", LC_ALL: "C" };
|
|
18
|
-
const runGit = deps.runGit ?? defaultRunGit;
|
|
19
|
-
for (const key of GIT_ACTOR_KEYS) {
|
|
20
|
-
try {
|
|
21
|
-
const result = await runGit(cwd, ["config", "--get", key], gitEnv);
|
|
22
|
-
if (!result.error && result.status === 0) {
|
|
23
|
-
const configuredActor = attribution(result.stdout);
|
|
24
|
-
if (configuredActor)
|
|
25
|
-
return configuredActor;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
// Creator attribution is advisory and must not prevent task creation.
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return ANONYMOUS_TASK_CREATOR;
|
|
33
|
-
}
|