@astrosheep/keiyaku 4.5.29 → 4.6.2
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/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku/SKILL.md +0 -13
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/SKILL.md +47 -78
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/references/automation.md +54 -41
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-babysit/SKILL.md +10 -0
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-bind/SKILL.md +27 -9
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-workflow/SKILL.md +68 -71
- package/build/src/akuma/akuma-call.d.ts +53 -0
- package/build/src/akuma/akuma-call.js +113 -0
- package/build/src/akuma/akuma-instance.d.ts +20 -18
- package/build/src/akuma/akuma-instance.js +65 -175
- package/build/src/akuma/akuma-observe.d.ts +3 -21
- package/build/src/akuma/akuma-observe.js +7 -24
- package/build/src/akuma/{akuma-handle.d.ts → akuma-owner.d.ts} +55 -27
- package/build/src/akuma/{akuma-handle.js → akuma-owner.js} +24 -23
- package/build/src/akuma/akuma-selection-execution.d.ts +51 -0
- package/build/src/akuma/akuma-selection-execution.js +134 -0
- package/build/src/akuma/{fleet-execution.d.ts → akuma-wait.d.ts} +24 -44
- package/build/src/akuma/akuma-wait.js +113 -0
- package/build/src/akuma/akuma.d.ts +35 -89
- package/build/src/akuma/akuma.js +148 -30
- package/build/src/akuma/archetype.d.ts +12 -0
- package/build/src/akuma/archetype.js +47 -19
- package/build/src/akuma/body.d.ts +76 -36
- package/build/src/akuma/body.js +84 -49
- package/build/src/akuma/call-initial-tell.d.ts +131 -22
- package/build/src/akuma/call-initial-tell.js +31 -1
- package/build/src/akuma/call-request.d.ts +237 -31
- package/build/src/akuma/call-request.js +67 -94
- package/build/src/akuma/coordinate.d.ts +15 -5
- package/build/src/akuma/coordinate.js +12 -22
- package/build/src/akuma/dispatch-association.d.ts +1 -1
- package/build/src/akuma/dispatch-association.js +1 -10
- package/build/src/akuma/heart/activity-schema.d.ts +325 -0
- package/build/src/akuma/heart/activity-schema.js +53 -0
- package/build/src/akuma/heart/facts.d.ts +1 -6
- package/build/src/akuma/heart/index.d.ts +3 -1
- package/build/src/akuma/heart/index.js +4 -1
- package/build/src/akuma/heart/rows.d.ts +49 -2
- package/build/src/akuma/heart/rows.js +16 -2
- package/build/src/akuma/heart/soul.d.ts +1 -0
- package/build/src/akuma/heart/soul.js +6 -4
- package/build/src/akuma/heart/tells.d.ts +1 -0
- package/build/src/akuma/heart/tells.js +18 -0
- package/build/src/akuma/identity.d.ts +10 -7
- package/build/src/akuma/identity.js +23 -0
- package/build/src/akuma/index.d.ts +10 -8
- package/build/src/akuma/index.js +2 -2
- package/build/src/akuma/nuke.d.ts +3 -0
- package/build/src/akuma/nuke.js +13 -7
- package/build/src/akuma/projection.d.ts +0 -5
- package/build/src/akuma/projection.js +22 -43
- package/build/src/akuma/provider-recipe.d.ts +58 -13
- package/build/src/akuma/provider-recipe.js +62 -80
- package/build/src/akuma/provider.d.ts +6 -76
- package/build/src/akuma/provider.js +11 -219
- package/build/src/akuma/providers/acp/config.d.ts +2 -0
- package/build/src/akuma/providers/acp/config.js +26 -1
- package/build/src/akuma/providers/acp/core.d.ts +7 -0
- package/build/src/akuma/providers/acp/core.js +49 -18
- package/build/src/akuma/providers/acp/index.js +14 -6
- package/build/src/akuma/providers/grok-build/index.js +44 -13
- package/build/src/akuma/providers/index.d.ts +3 -3
- package/build/src/akuma/providers/index.js +2 -13
- package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +28 -0
- package/build/src/akuma/providers/opencode-sdk/event-stream.js +92 -0
- package/build/src/akuma/providers/opencode-sdk/events.d.ts +0 -1
- package/build/src/akuma/providers/opencode-sdk/index.js +200 -64
- package/build/src/akuma/providers/opencode-sdk/session.d.ts +41 -1
- package/build/src/akuma/providers/opencode-sdk/session.js +69 -2
- package/build/src/akuma/providers/pi/events.js +5 -2
- package/build/src/akuma/providers/pi/index.d.ts +3 -4
- package/build/src/akuma/providers/pi/index.js +99 -45
- package/build/src/akuma/publication.d.ts +84 -3
- package/build/src/akuma/publication.js +145 -2
- package/build/src/akuma/read-pool.d.ts +2 -0
- package/build/src/akuma/read-pool.js +15 -0
- package/build/src/akuma/request-rendezvous.js +10 -0
- package/build/src/akuma/request-serve.js +7 -0
- package/build/src/akuma/request-wire.d.ts +14 -26
- package/build/src/akuma/request-wire.js +4 -0
- package/build/src/akuma/requests.d.ts +0 -2
- package/build/src/akuma/requests.js +0 -17
- package/build/src/akuma/{fleet-observation.d.ts → selection-observation.d.ts} +37 -36
- package/build/src/akuma/selection-observation.js +65 -0
- package/build/src/akuma/{fleet-owner-port.d.ts → selection-owner-port.d.ts} +3 -3
- package/build/src/akuma/{fleet-owner-port.js → selection-owner-port.js} +11 -17
- package/build/src/akuma/{fleet-request.d.ts → selection-request.d.ts} +42 -82
- package/build/src/akuma/{fleet-request.js → selection-request.js} +92 -136
- package/build/src/akuma/turn-drive.js +73 -14
- package/build/src/akuma-body.js +91 -56
- package/build/src/body/amend.d.ts +5 -0
- package/build/src/body/amend.js +26 -50
- package/build/src/body/arc.d.ts +4 -2
- package/build/src/body/arc.js +19 -26
- package/build/src/body/criteria.d.ts +6 -0
- package/build/src/body/criteria.js +37 -0
- package/build/src/body/decode.js +5 -42
- package/build/src/body/region.d.ts +5 -0
- package/build/src/body/region.js +45 -2
- package/build/src/body/render.js +2 -4
- package/build/src/cli/activity.d.ts +26 -0
- package/build/src/cli/activity.js +75 -0
- package/build/src/cli/actor.d.ts +3 -1
- package/build/src/cli/actor.js +15 -2
- package/build/src/cli/commands/akuma-grammar.d.ts +75 -0
- package/build/src/cli/commands/akuma-grammar.js +414 -0
- package/build/src/cli/commands/akuma.d.ts +5 -69
- package/build/src/cli/commands/akuma.js +352 -319
- package/build/src/cli/commands/amend.d.ts +4 -5
- package/build/src/cli/commands/amend.js +1 -2
- package/build/src/cli/commands/bind.d.ts +4 -5
- package/build/src/cli/commands/bind.js +7 -10
- package/build/src/cli/commands/contract-grammar.d.ts +112 -0
- package/build/src/cli/commands/contract-grammar.js +282 -0
- package/build/src/cli/commands/contract-help.d.ts +17 -22
- package/build/src/cli/commands/contract-help.js +37 -24
- package/build/src/cli/commands/contract.d.ts +18 -97
- package/build/src/cli/commands/contract.js +621 -233
- package/build/src/cli/commands/install.d.ts +1 -1
- package/build/src/cli/commands/install.js +2 -2
- package/build/src/cli/commands/task-grammar.d.ts +19 -0
- package/build/src/cli/commands/task-grammar.js +438 -0
- package/build/src/cli/commands/task-query.js +23 -104
- package/build/src/cli/commands/task.d.ts +5 -20
- package/build/src/cli/commands/task.js +414 -364
- package/build/src/cli/coordinates.d.ts +10 -0
- package/build/src/cli/coordinates.js +20 -0
- package/build/src/cli/draft.d.ts +7 -1
- package/build/src/cli/main.js +10 -1
- package/build/src/cli/parse.d.ts +8 -9
- package/build/src/cli/parse.js +62 -62
- package/build/src/cli/render/akuma-activity.d.ts +54 -36
- package/build/src/cli/render/akuma-activity.js +262 -242
- package/build/src/cli/render/akuma-tool.d.ts +8 -4
- package/build/src/cli/render/akuma-tool.js +6 -5
- package/build/src/cli/render/akuma.d.ts +36 -16
- package/build/src/cli/render/akuma.js +65 -132
- package/build/src/cli/render/audit.d.ts +6 -2
- package/build/src/cli/render/audit.js +59 -28
- package/build/src/cli/render/catalog.d.ts +11 -2
- package/build/src/cli/render/catalog.js +75 -95
- package/build/src/cli/render/contract-history.d.ts +3 -1
- package/build/src/cli/render/contract-history.js +215 -22
- package/build/src/cli/render/contract-observation.d.ts +10 -5
- package/build/src/cli/render/contract-observation.js +29 -46
- package/build/src/cli/render/contract.d.ts +10 -3
- package/build/src/cli/render/contract.js +252 -103
- package/build/src/cli/render/effects.d.ts +26 -0
- package/build/src/cli/render/effects.js +41 -0
- package/build/src/cli/render/execution-progress.d.ts +18 -6
- package/build/src/cli/render/execution-progress.js +34 -31
- package/build/src/cli/render/kanshi-akuma.d.ts +1 -2
- package/build/src/cli/render/kanshi-akuma.js +5 -26
- package/build/src/cli/render/kanshi.js +107 -128
- package/build/src/cli/render/marks.d.ts +13 -0
- package/build/src/cli/render/marks.js +74 -0
- package/build/src/cli/render/nuke.js +18 -7
- package/build/src/cli/render/receipt.d.ts +10 -4
- package/build/src/cli/render/receipt.js +124 -44
- package/build/src/cli/render/reconcile.d.ts +5 -0
- package/build/src/cli/render/reconcile.js +152 -0
- package/build/src/cli/render/refusal.d.ts +21 -4
- package/build/src/cli/render/refusal.js +60 -33
- package/build/src/cli/render/region.js +3 -2
- package/build/src/cli/render/settings.js +2 -12
- package/build/src/cli/render/task.d.ts +37 -6
- package/build/src/cli/render/task.js +161 -157
- package/build/src/cli/render/terminal.d.ts +20 -1
- package/build/src/cli/render/terminal.js +92 -18
- package/build/src/cli/runtime.d.ts +32 -8
- package/build/src/cli/runtime.js +157 -165
- package/build/src/cli/selectors.d.ts +5 -2
- package/build/src/cli/selectors.js +11 -3
- package/build/src/cli/streams.d.ts +11 -0
- package/build/src/cli/streams.js +32 -0
- package/build/src/cli/usage.d.ts +2 -0
- package/build/src/cli/usage.js +12 -8
- package/build/src/contract-guidance.js +3 -7
- package/build/src/contract-worktree.d.ts +20 -28
- package/build/src/contract-worktree.js +18 -70
- package/build/src/coordination/durable-file.d.ts +2 -2
- package/build/src/coordination/durable-file.js +0 -27
- package/build/src/core/facts/codec.d.ts +1 -2
- package/build/src/core/facts/codec.js +6 -7
- package/build/src/core/facts/gate.d.ts +0 -1
- package/build/src/core/facts/gate.js +0 -82
- package/build/src/core/facts/types.d.ts +1 -2
- package/build/src/core/verbs/abandon.d.ts +2 -6
- package/build/src/core/verbs/abandon.js +0 -16
- package/build/src/core/verbs/amend.d.ts +0 -1
- package/build/src/core/verbs/amend.js +0 -20
- package/build/src/core/verbs/arc.d.ts +7 -8
- package/build/src/core/verbs/arc.js +2 -19
- package/build/src/core/verbs/attestation.d.ts +2 -6
- package/build/src/core/verbs/attestation.js +0 -16
- package/build/src/core/verbs/bind.d.ts +0 -1
- package/build/src/core/verbs/bind.js +0 -16
- package/build/src/core/verbs/deliver.d.ts +0 -1
- package/build/src/core/verbs/deliver.js +0 -16
- package/build/src/core/verbs/placement.d.ts +2 -1
- package/build/src/core/verbs/placement.js +10 -59
- package/build/src/git/admission.d.ts +6 -4
- package/build/src/git/admission.js +4 -0
- package/build/src/git/hooks.d.ts +55 -30
- package/build/src/git/hooks.js +30 -3
- package/build/src/git/identity.d.ts +6 -0
- package/build/src/git/identity.js +47 -0
- package/build/src/git/integration.d.ts +31 -13
- package/build/src/git/integration.js +32 -1
- package/build/src/git/nuke.d.ts +10 -1
- package/build/src/git/nuke.js +31 -11
- package/build/src/git/observe.js +2 -15
- package/build/src/git/private-state-seat.d.ts +6 -7
- package/build/src/git/private-state-seat.js +8 -6
- package/build/src/git/read-observation.d.ts +6 -1
- package/build/src/git/read-observation.js +81 -46
- package/build/src/git/reconcile.d.ts +117 -40
- package/build/src/git/reconcile.js +169 -40
- package/build/src/git/scratch.d.ts +7 -4
- package/build/src/git/scratch.js +28 -6
- package/build/src/git/target-placement.d.ts +53 -38
- package/build/src/git/target-placement.js +69 -54
- package/build/src/git/tender.d.ts +37 -28
- package/build/src/git/tender.js +39 -0
- package/build/src/git/terminal-reconcile.js +21 -23
- package/build/src/git/terminal-seal.d.ts +8 -6
- package/build/src/git/terminal-seal.js +10 -0
- package/build/src/git/workspace.d.ts +29 -15
- package/build/src/git/workspace.js +28 -2
- package/build/src/identity/normalize.js +19 -6
- package/build/src/index.d.ts +78 -7
- package/build/src/index.js +52 -4
- package/build/src/kanshi/read.d.ts +3 -3
- package/build/src/kanshi/read.js +21 -21
- package/build/src/kanshi/report.d.ts +9 -8
- package/build/src/kanshi/roster.d.ts +2 -0
- package/build/src/kanshi/roster.js +2 -0
- package/build/src/kanshi/select.js +7 -3
- package/build/src/library/address.d.ts +3 -7
- package/build/src/library/address.js +7 -7
- package/build/src/library/akuma-creation.d.ts +21 -32
- package/build/src/library/akuma-creation.js +148 -165
- package/build/src/library/akumas.d.ts +20 -22
- package/build/src/library/akumas.js +43 -20
- package/build/src/library/bind.d.ts +107 -13
- package/build/src/library/bind.js +29 -23
- package/build/src/library/continuation.d.ts +556 -28
- package/build/src/library/continuation.js +29 -54
- package/build/src/library/contract-composition.d.ts +40 -0
- package/build/src/library/contract-composition.js +105 -0
- package/build/src/library/contract-creation.d.ts +7 -0
- package/build/src/library/contract-creation.js +192 -0
- package/build/src/library/contract-execution.d.ts +29 -40
- package/build/src/library/contract-execution.js +503 -128
- package/build/src/library/contract-operations.d.ts +275 -134
- package/build/src/library/contract-operations.js +83 -92
- package/build/src/library/contract-outcomes.d.ts +71 -0
- package/build/src/library/contract-outcomes.js +32 -0
- package/build/src/library/contract-settings.d.ts +25 -0
- package/build/src/library/contract-settings.js +135 -0
- package/build/src/library/contract-types.d.ts +17 -38
- package/build/src/library/delivery.d.ts +530 -10
- package/build/src/library/delivery.js +20 -45
- package/build/src/library/input.d.ts +3 -1
- package/build/src/library/input.js +11 -16
- package/build/src/library/invocation.d.ts +87 -0
- package/build/src/library/invocation.js +290 -0
- package/build/src/library/keiyaku.d.ts +45 -22
- package/build/src/library/keiyaku.js +134 -8
- package/build/src/library/nuke.d.ts +2 -11
- package/build/src/library/nuke.js +70 -57
- package/build/src/library/outcome.d.ts +13196 -0
- package/build/src/library/outcome.js +487 -0
- package/build/src/library/reconcile.d.ts +96 -24
- package/build/src/library/reconcile.js +102 -42
- package/build/src/library/refusal.d.ts +470 -42
- package/build/src/library/refusal.js +55 -143
- package/build/src/library/region.d.ts +15 -7
- package/build/src/library/region.js +23 -3
- package/build/src/library/repo.d.ts +2 -12
- package/build/src/library/repo.js +1 -22
- package/build/src/library/selection.d.ts +121 -0
- package/build/src/library/{fleet.js → selection.js} +169 -152
- package/build/src/plugin/public.d.ts +2 -0
- package/build/src/protocol/abandon.d.ts +2 -2
- package/build/src/protocol/abandon.js +1 -0
- package/build/src/protocol/amend.js +1 -0
- package/build/src/protocol/arc.d.ts +6 -4
- package/build/src/protocol/attempt.d.ts +4 -2
- package/build/src/protocol/attempt.js +10 -0
- package/build/src/protocol/audit.d.ts +255 -52
- package/build/src/protocol/audit.js +63 -5
- package/build/src/protocol/bind.d.ts +18 -17
- package/build/src/protocol/bind.js +9 -28
- package/build/src/protocol/completion.d.ts +256 -22
- package/build/src/protocol/completion.js +100 -12
- package/build/src/protocol/deliver.d.ts +34 -23
- package/build/src/protocol/deliver.js +39 -25
- package/build/src/protocol/execution-observation.d.ts +36 -37
- package/build/src/protocol/execution-observation.js +7 -9
- package/build/src/protocol/intent.d.ts +101 -30
- package/build/src/protocol/intent.js +74 -1
- package/build/src/protocol/operations.d.ts +570 -64
- package/build/src/protocol/operations.js +189 -9
- package/build/src/protocol/outcome.d.ts +2 -1
- package/build/src/protocol/placement.d.ts +2 -2
- package/build/src/protocol/placement.js +3 -1
- package/build/src/protocol/progress.d.ts +108 -65
- package/build/src/protocol/progress.js +82 -132
- package/build/src/protocol/read/status.d.ts +4 -3
- package/build/src/protocol/read/status.js +6 -5
- package/build/src/protocol/reconcile.d.ts +3 -3
- package/build/src/protocol/reconcile.js +4 -0
- package/build/src/protocol/reintegrate.d.ts +2 -2
- package/build/src/protocol/review.d.ts +30 -12
- package/build/src/protocol/review.js +15 -24
- package/build/src/protocol/run.d.ts +34 -5
- package/build/src/protocol/run.js +24 -12
- package/build/src/runtime/proc/windows-launch.exe +0 -0
- package/build/src/settings.d.ts +0 -10
- package/build/src/settings.js +0 -76
- package/build/src/settlement/holder.d.ts +1 -1
- package/build/src/settlement/settle.d.ts +25 -16
- package/build/src/settlement/settle.js +80 -20
- package/build/src/task/board.d.ts +3 -1
- package/build/src/task/board.js +13 -17
- package/build/src/task/catalog.d.ts +0 -4
- package/build/src/task/catalog.js +0 -15
- package/build/src/task/compose-language.d.ts +19 -9
- package/build/src/task/compose-language.js +30 -20
- package/build/src/task/compose.d.ts +7 -37
- package/build/src/task/compose.js +20 -2
- package/build/src/task/created-observation.d.ts +0 -1
- package/build/src/task/created-observation.js +1 -4
- package/build/src/task/document.d.ts +12 -2
- package/build/src/task/document.js +4 -0
- package/build/src/task/identity.d.ts +4 -1
- package/build/src/task/identity.js +21 -17
- package/build/src/task/index.d.ts +36 -16
- package/build/src/task/index.js +103 -96
- package/build/src/task/lifecycle-operations.d.ts +1 -1
- package/build/src/task/mutation-result.d.ts +647 -586
- package/build/src/task/mutation-result.js +79 -46
- package/build/src/task/mutation.d.ts +298 -270
- package/build/src/task/mutation.js +93 -110
- package/build/src/task/operation-types.d.ts +6 -49
- package/build/src/task/operations.d.ts +2 -1
- package/build/src/task/operations.js +35 -12
- package/build/src/task/query.d.ts +9 -3
- package/build/src/task/query.js +42 -16
- package/build/src/task/store.d.ts +2 -1
- package/build/src/task/store.js +10 -14
- package/build/src/verification/declaration.d.ts +0 -1
- package/build/src/verification/declaration.js +1 -18
- package/build/src/verification/execution.d.ts +6 -2
- package/build/src/verification/observation.d.ts +1 -1
- package/package.json +2 -18
- package/build/src/akuma/akuma-product.d.ts +0 -58
- package/build/src/akuma/akuma-product.js +0 -276
- package/build/src/akuma/fleet-execution.js +0 -234
- package/build/src/akuma/fleet-observation.js +0 -97
- package/build/src/cli/accepted.d.ts +0 -24
- package/build/src/cli/accepted.js +0 -167
- package/build/src/cli/catalog.d.ts +0 -45
- package/build/src/cli/catalog.js +0 -1
- package/build/src/cli/commands/akuma-invoke.d.ts +0 -114
- package/build/src/cli/commands/akuma-invoke.js +0 -375
- package/build/src/cli/commands/contract-invoke.d.ts +0 -34
- package/build/src/cli/commands/contract-invoke.js +0 -259
- package/build/src/cli/commands/nuke.d.ts +0 -10
- package/build/src/cli/commands/nuke.js +0 -20
- package/build/src/cli/commands/status-set.d.ts +0 -4
- package/build/src/cli/commands/status-set.js +0 -52
- package/build/src/cli/commands/task-invoke.d.ts +0 -49
- package/build/src/cli/commands/task-invoke.js +0 -306
- package/build/src/cli/invoke.d.ts +0 -27
- package/build/src/cli/invoke.js +0 -521
- package/build/src/cli/render/board.d.ts +0 -3
- package/build/src/cli/render/board.js +0 -25
- package/build/src/cli/render/status-set.d.ts +0 -5
- package/build/src/cli/render/status-set.js +0 -19
- package/build/src/cli/render/text.d.ts +0 -3
- package/build/src/cli/render/text.js +0 -33
- package/build/src/cli/result.d.ts +0 -240
- package/build/src/cli/result.js +0 -1
- package/build/src/git/result-codec.d.ts +0 -29
- package/build/src/git/result-codec.js +0 -309
- package/build/src/kanshi/fleet.d.ts +0 -6
- package/build/src/kanshi/fleet.js +0 -27
- package/build/src/library/audit.d.ts +0 -29
- package/build/src/library/audit.js +0 -41
- package/build/src/library/composition.d.ts +0 -15
- package/build/src/library/composition.js +0 -28
- package/build/src/library/configuration.d.ts +0 -4
- package/build/src/library/configuration.js +0 -2
- package/build/src/library/contract-bind.d.ts +0 -31
- package/build/src/library/contract-bind.js +0 -140
- package/build/src/library/contract-forwarding.d.ts +0 -55
- package/build/src/library/contract-forwarding.js +0 -67
- package/build/src/library/contract-handle.d.ts +0 -50
- package/build/src/library/contract-handle.js +0 -385
- package/build/src/library/contract.d.ts +0 -46
- package/build/src/library/contract.js +0 -73
- package/build/src/library/execution-result.d.ts +0 -243
- package/build/src/library/execution-result.js +0 -101
- package/build/src/library/execution.d.ts +0 -8
- package/build/src/library/execution.js +0 -102
- package/build/src/library/fleet.d.ts +0 -83
- package/build/src/library/mutation.d.ts +0 -501
- package/build/src/library/mutation.js +0 -248
- package/build/src/library/result-codec.d.ts +0 -2
- package/build/src/library/result-codec.js +0 -12
- package/build/src/protocol/result-codec.d.ts +0 -23
- package/build/src/protocol/result-codec.js +0 -488
- package/build/src/settlement/result-codec.d.ts +0 -2
- package/build/src/settlement/result-codec.js +0 -56
- package/build/src/task/public.d.ts +0 -2
- package/build/src/task/public.js +0 -1
|
@@ -1,64 +1,28 @@
|
|
|
1
|
-
import { contractId } from "../core/facts/types.js";
|
|
2
1
|
import { observeActiveContractWorld } from "../git/observe.js";
|
|
3
2
|
import { withGitReadObservation } from "../git/read-observation.js";
|
|
4
3
|
import { reconcileDependentWorktree } from "../git/reconcile.js";
|
|
5
4
|
import { worktreePath } from "../git/workspace.js";
|
|
6
5
|
import { completeCandidate } from "../protocol/completion.js";
|
|
7
|
-
import { contractCheckpoint, executionStop } from "../protocol/progress.js";
|
|
6
|
+
import { contractCheckpoint, isOperationalStop, executionStop, } from "../protocol/progress.js";
|
|
8
7
|
import { observeContractAt } from "../git/observe.js";
|
|
9
|
-
import {
|
|
10
|
-
import { executionStopSchema } from "
|
|
11
|
-
import {
|
|
12
|
-
import { ownerSchema } from "./result-codec.js";
|
|
8
|
+
import { gitReconcileLagSchema } from "../git/reconcile.js";
|
|
9
|
+
import { executionStopSchema } from "../protocol/progress.js";
|
|
10
|
+
import { contractIdSchema, placementStopSchema, verificationStopSchema } from "../protocol/operations.js";
|
|
13
11
|
import { appointmentFor, readPlaceRegister } from "../workspace-place.js";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (Object.keys(stopped).some((key) => key !== "contractId" && key !== "stop"))
|
|
29
|
-
throw new Error("malformed continuation report");
|
|
30
|
-
const stopValue = stopped.stop;
|
|
31
|
-
const alreadyTerminal = stopValue !== null &&
|
|
32
|
-
typeof stopValue === "object" &&
|
|
33
|
-
!Array.isArray(stopValue) &&
|
|
34
|
-
stopValue.kind === "already-terminal" &&
|
|
35
|
-
Object.keys(stopValue).length === 1;
|
|
36
|
-
return {
|
|
37
|
-
contractId: contractId(String(stopped.contractId)),
|
|
38
|
-
stop: alreadyTerminal ? { kind: "already-terminal" } : decodeContinuationStop(stopValue),
|
|
39
|
-
};
|
|
40
|
-
}),
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
export const continuationReportSchema = ownerSchema(decodeContinuationReport, "expected continuation report");
|
|
44
|
-
function decodeContinuationStop(value) {
|
|
45
|
-
if (value !== null && typeof value === "object" && "kind" in value) {
|
|
46
|
-
if (value.kind === "execution-stopped")
|
|
47
|
-
return executionStopSchema.parse(value);
|
|
48
|
-
if (value.kind === "physical-lag" &&
|
|
49
|
-
"lags" in value &&
|
|
50
|
-
Array.isArray(value.lags) &&
|
|
51
|
-
Object.keys(value).length === 2) {
|
|
52
|
-
return { kind: "physical-lag", lags: value.lags.map(decodeGitReconcileLag) };
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
try {
|
|
56
|
-
return decodePlacementStop(value);
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
return decodeVerificationStop(value);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
const continuationStopSchema = z.union([
|
|
14
|
+
placementStopSchema,
|
|
15
|
+
verificationStopSchema,
|
|
16
|
+
executionStopSchema,
|
|
17
|
+
z.object({ kind: z.literal("already-terminal") }).strict(),
|
|
18
|
+
z.object({ kind: z.literal("physical-lag"), lags: z.array(gitReconcileLagSchema).readonly() }).strict(),
|
|
19
|
+
]);
|
|
20
|
+
export const continuationReportSchema = z
|
|
21
|
+
.object({
|
|
22
|
+
claimed: z.array(contractIdSchema).readonly(),
|
|
23
|
+
stopped: z.array(z.object({ contractId: contractIdSchema, stop: continuationStopSchema }).strict()).readonly(),
|
|
24
|
+
})
|
|
25
|
+
.strict();
|
|
62
26
|
function reverseDependents(world) {
|
|
63
27
|
const index = new Map();
|
|
64
28
|
for (const record of world.contracts.values()) {
|
|
@@ -103,6 +67,8 @@ async function attemptDependent(input, id, predecessor) {
|
|
|
103
67
|
return await continueCandidate(input, id, predecessor);
|
|
104
68
|
}
|
|
105
69
|
catch (error) {
|
|
70
|
+
if (!isOperationalStop(error, input.signal))
|
|
71
|
+
throw error;
|
|
106
72
|
const stop = executionStop(id, "continuation", error, input.signal);
|
|
107
73
|
input.progress.recordStop(stop);
|
|
108
74
|
return { kind: "stopped-before-node", stop };
|
|
@@ -113,6 +79,10 @@ export async function continueDeliveredDependents(input) {
|
|
|
113
79
|
const primary = input.completed.checkpoint.state.id;
|
|
114
80
|
const claimed = [];
|
|
115
81
|
const stopped = [];
|
|
82
|
+
const retain = () => input.progress.recordContinuation(primary, { claimed: [...claimed], stopped: [...stopped] });
|
|
83
|
+
// The primary candidate's own conclusions are retained by completion before this walk discovers
|
|
84
|
+
// anything; every sibling attempt is retained here before the next one is awaited.
|
|
85
|
+
retain();
|
|
116
86
|
try {
|
|
117
87
|
input.signal?.throwIfAborted();
|
|
118
88
|
const world = await withGitReadObservation(input.scope, input.channel, observeActiveContractWorld);
|
|
@@ -134,6 +104,7 @@ export async function continueDeliveredDependents(input) {
|
|
|
134
104
|
if (result.kind === "completed") {
|
|
135
105
|
claimed.push(id);
|
|
136
106
|
newlyClaimed.add(id);
|
|
107
|
+
retain();
|
|
137
108
|
queue.push({ contractId: id, target: result.evidence.completion.integration });
|
|
138
109
|
}
|
|
139
110
|
else {
|
|
@@ -142,15 +113,19 @@ export async function continueDeliveredDependents(input) {
|
|
|
142
113
|
contractId: id,
|
|
143
114
|
stop: "refusal" in stop && stop.refusal.kind === "terminal" ? { kind: "already-terminal" } : stop,
|
|
144
115
|
});
|
|
116
|
+
retain();
|
|
145
117
|
}
|
|
146
118
|
}
|
|
147
119
|
}
|
|
148
120
|
return attempted.size === 0 ? undefined : { claimed, stopped };
|
|
149
121
|
}
|
|
150
122
|
catch (error) {
|
|
123
|
+
if (!isOperationalStop(error, input.signal))
|
|
124
|
+
throw error;
|
|
151
125
|
const stop = executionStop(primary, "continuation", error, input.signal);
|
|
152
126
|
input.progress.recordStop(stop);
|
|
153
127
|
stopped.push({ contractId: primary, stop });
|
|
128
|
+
retain();
|
|
154
129
|
return { claimed, stopped };
|
|
155
130
|
}
|
|
156
131
|
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** @architectureCompositionRoot */
|
|
2
|
+
import { type LibraryExecution } from "../akuma/requests.js";
|
|
3
|
+
import type { ContractObservation } from "../protocol/read/status.js";
|
|
4
|
+
import type { BindOutcome } from "./contract-outcomes.js";
|
|
5
|
+
import type { BindInput, ContractList, ContractListInput, ContractObservationInput, KeiyakuSelectInput, LocalContractComposition } from "./contract-types.js";
|
|
6
|
+
import type { Keiyaku, createKeiyakuHandle } from "./keiyaku.js";
|
|
7
|
+
import { type ReconcileCompletion, type RepoReconcileReport } from "./reconcile.js";
|
|
8
|
+
import { type Repo } from "./repo.js";
|
|
9
|
+
export type ReconcileInput = Readonly<{
|
|
10
|
+
repo: Repo;
|
|
11
|
+
contract?: string;
|
|
12
|
+
retryHooks?: boolean;
|
|
13
|
+
}>;
|
|
14
|
+
interface KeiyakuLibraryReconcile {
|
|
15
|
+
(input: ReconcileInput & Readonly<{
|
|
16
|
+
contract: string;
|
|
17
|
+
}>): Promise<ReconcileCompletion>;
|
|
18
|
+
(input: ReconcileInput & Readonly<{
|
|
19
|
+
contract?: undefined;
|
|
20
|
+
}>): Promise<RepoReconcileReport>;
|
|
21
|
+
(input: ReconcileInput): Promise<ReconcileCompletion | RepoReconcileReport>;
|
|
22
|
+
}
|
|
23
|
+
export type KeiyakuLibrary = Readonly<{
|
|
24
|
+
bind(input: BindInput): Promise<BindOutcome>;
|
|
25
|
+
select(input: KeiyakuSelectInput): Keiyaku;
|
|
26
|
+
list(input: ContractListInput): Promise<ContractList>;
|
|
27
|
+
observe(input: ContractObservationInput): Promise<ContractObservation>;
|
|
28
|
+
reconcile: KeiyakuLibraryReconcile;
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* The one private Contract composition constructor. `Keiyaku.with` fixes local execution; CLI and
|
|
32
|
+
* Body pass their captured internal channel explicitly here instead of a second constructor. The
|
|
33
|
+
* carrier is a positional argument, never a field of the public construction input, so no runtime
|
|
34
|
+
* value reaching the public surface can select a private channel.
|
|
35
|
+
*/
|
|
36
|
+
export declare function composeContractLibrary(execution: LibraryExecution, createHandle: typeof createKeiyakuHandle, input?: LocalContractComposition): KeiyakuLibrary;
|
|
37
|
+
export declare function listKeiyaku(input: ContractListInput): Promise<ContractList>;
|
|
38
|
+
export declare function observeKeiyaku(input: ContractObservationInput): Promise<ContractObservation>;
|
|
39
|
+
export declare function readContractValue<Value>(operation: () => Promise<Value>): Promise<Value>;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/** @architectureCompositionRoot */
|
|
2
|
+
import { localExecutionContext } from "../akuma/requests.js";
|
|
3
|
+
import { contractId } from "../core/facts/types.js";
|
|
4
|
+
import { withGitDecodeChannel } from "../git/read-observation.js";
|
|
5
|
+
import { contractCatalogueOperation, contractObservationOperation, contractsOperation, } from "../protocol/operations.js";
|
|
6
|
+
import { bindKeiyaku } from "./contract-creation.js";
|
|
7
|
+
import { captureLocalContractComposition, derivedHooks, } from "./contract-settings.js";
|
|
8
|
+
import { requireInput } from "./input.js";
|
|
9
|
+
import { KeiyakuError, errorCategory } from "./outcome.js";
|
|
10
|
+
import { completeReconcile, completeRepoReconcile, } from "./reconcile.js";
|
|
11
|
+
import { scopeForRepo } from "./repo.js";
|
|
12
|
+
/**
|
|
13
|
+
* The one private Contract composition constructor. `Keiyaku.with` fixes local execution; CLI and
|
|
14
|
+
* Body pass their captured internal channel explicitly here instead of a second constructor. The
|
|
15
|
+
* carrier is a positional argument, never a field of the public construction input, so no runtime
|
|
16
|
+
* value reaching the public surface can select a private channel.
|
|
17
|
+
*/
|
|
18
|
+
export function composeContractLibrary(execution, createHandle, input) {
|
|
19
|
+
const composition = captureLocalContractComposition(input);
|
|
20
|
+
return Object.freeze({
|
|
21
|
+
bind: (operation) => bindKeiyaku(operation, createHandle, execution, composition),
|
|
22
|
+
select: (operation) => selectKeiyaku(operation, createHandle, execution, composition),
|
|
23
|
+
list: (operation) => listKeiyaku(operation),
|
|
24
|
+
observe: (operation) => observeKeiyaku(operation),
|
|
25
|
+
reconcile: reconcileOperation(composition),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function selectKeiyaku(input, createHandle, execution = localExecutionContext(), composition = captureLocalContractComposition()) {
|
|
29
|
+
const values = requireInput(input, "Keiyaku.with().select input");
|
|
30
|
+
const scope = scopeForRepo(values.repo);
|
|
31
|
+
if (typeof values.id !== "string")
|
|
32
|
+
throw new TypeError("contract ID must be a string");
|
|
33
|
+
return createHandle(contractId(values.id), scope, execution, composition);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The one public repair entry: an explicit Repo proves the Git world, the captured composition
|
|
37
|
+
* supplies its Settings-derived hooks, and the same operation-local retryHooks choice stays
|
|
38
|
+
* available. Omitted contract reconciles the complete world; a supplied one reconciles that
|
|
39
|
+
* addressed Contract.
|
|
40
|
+
*/
|
|
41
|
+
function reconcileOperation(composition) {
|
|
42
|
+
function run(input) {
|
|
43
|
+
return reconcileKeiyaku(input, composition);
|
|
44
|
+
}
|
|
45
|
+
return run;
|
|
46
|
+
}
|
|
47
|
+
async function reconcileKeiyaku(input, composition = captureLocalContractComposition()) {
|
|
48
|
+
const values = requireInput(input, "Keiyaku.with().reconcile input", ["repo", "contract", "retryHooks"]);
|
|
49
|
+
const scope = scopeForRepo(values.repo);
|
|
50
|
+
const contract = values.contract;
|
|
51
|
+
if (contract !== undefined && typeof contract !== "string")
|
|
52
|
+
throw new TypeError("contract must be a string");
|
|
53
|
+
if (values.retryHooks !== undefined && typeof values.retryHooks !== "boolean")
|
|
54
|
+
throw new TypeError("retryHooks must be a boolean");
|
|
55
|
+
const options = { scope, hooks: derivedHooks(composition), retryHooks: values.retryHooks ?? false };
|
|
56
|
+
if (contract === undefined) {
|
|
57
|
+
return await withGitDecodeChannel(scope, (channel) => completeRepoReconcile({ ...options, channel }));
|
|
58
|
+
}
|
|
59
|
+
const id = contractId(contract);
|
|
60
|
+
return await readContractValue(() => withGitDecodeChannel(scope, (channel) => completeReconcile({ ...options, channel, contractId: id })));
|
|
61
|
+
}
|
|
62
|
+
export async function listKeiyaku(input) {
|
|
63
|
+
const values = requireInput(input, "Keiyaku.with().list input");
|
|
64
|
+
for (const key of Object.keys(values)) {
|
|
65
|
+
if (key !== "repo" && key !== "limit")
|
|
66
|
+
throw new TypeError(`Keiyaku.with().list input has unknown field: ${key}`);
|
|
67
|
+
}
|
|
68
|
+
const scope = scopeForRepo(values.repo);
|
|
69
|
+
if (values.limit === undefined) {
|
|
70
|
+
const board = await readContractValue(() => withGitDecodeChannel(scope, (channel) => contractsOperation({ scope, channel })));
|
|
71
|
+
return { ...board, hasMore: false };
|
|
72
|
+
}
|
|
73
|
+
if (typeof values.limit !== "number")
|
|
74
|
+
throw new TypeError("Contract list limit must be a number");
|
|
75
|
+
return readContractValue(() => withGitDecodeChannel(scope, (channel) => contractCatalogueOperation({ scope, channel, limit: values.limit })));
|
|
76
|
+
}
|
|
77
|
+
export async function observeKeiyaku(input) {
|
|
78
|
+
const values = requireInput(input, "Keiyaku.observe input");
|
|
79
|
+
for (const key of Object.keys(values))
|
|
80
|
+
if (key !== "repo" && key !== "id")
|
|
81
|
+
throw new TypeError(`Keiyaku.observe input has unknown field: ${key}`);
|
|
82
|
+
const scope = scopeForRepo(values.repo);
|
|
83
|
+
if (typeof values.id !== "string")
|
|
84
|
+
throw new TypeError("contract ID must be a string");
|
|
85
|
+
let id;
|
|
86
|
+
try {
|
|
87
|
+
id = contractId(values.id);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
throw new TypeError(error instanceof Error ? error.message : "contract ID is invalid");
|
|
91
|
+
}
|
|
92
|
+
return readContractValue(() => withGitDecodeChannel(scope, (channel) => contractObservationOperation({ scope, channel, contractId: id })));
|
|
93
|
+
}
|
|
94
|
+
export async function readContractValue(operation) {
|
|
95
|
+
try {
|
|
96
|
+
return await operation();
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
if (error instanceof KeiyakuError)
|
|
100
|
+
throw error;
|
|
101
|
+
throw new KeiyakuError(errorCategory(error), error instanceof Error ? error.message : String(error), {
|
|
102
|
+
cause: error,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** @architectureCompositionRoot */
|
|
2
|
+
import { type ExecutionContext } from "../akuma/requests.js";
|
|
3
|
+
import type { BindOutcome } from "./contract-outcomes.js";
|
|
4
|
+
import { type LocalContractCompositionCapture } from "./contract-settings.js";
|
|
5
|
+
import type { BindInput } from "./contract-types.js";
|
|
6
|
+
import type { createKeiyakuHandle } from "./keiyaku.js";
|
|
7
|
+
export declare function bindKeiyaku(input: BindInput, createHandle: typeof createKeiyakuHandle, execution?: ExecutionContext, composition?: LocalContractCompositionCapture): Promise<BindOutcome>;
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/** @architectureCompositionRoot */
|
|
2
|
+
import { localExecutionContext } from "../akuma/requests.js";
|
|
3
|
+
import { decodeContractDocument } from "../body/decode.js";
|
|
4
|
+
import { regionWarnings } from "../body/region.js";
|
|
5
|
+
import { contractId } from "../core/facts/types.js";
|
|
6
|
+
import { withGitDecodeChannel } from "../git/read-observation.js";
|
|
7
|
+
import { executionStop, isOperationalFailure, isOperationalStop } from "../protocol/progress.js";
|
|
8
|
+
import { readManagedWorktreeAppointment } from "../workspace-place.js";
|
|
9
|
+
import { admitForkBindWithAppointment, prepareMarkdownBind } from "./bind.js";
|
|
10
|
+
import { acceptedOutcome, conclusions, expected, retainAdmission } from "./contract-outcomes.js";
|
|
11
|
+
import { captureLocalContractComposition, derivedGates, derivedHooks, gateNames, } from "./contract-settings.js";
|
|
12
|
+
import { actorOption, normalizedList, requireInput, requireMarkdown, taskOption } from "./input.js";
|
|
13
|
+
import { InvocationAccumulator } from "./invocation.js";
|
|
14
|
+
import { project, validated } from "./outcome.js";
|
|
15
|
+
import { completeReconcile } from "./reconcile.js";
|
|
16
|
+
import { observeRegion } from "./region.js";
|
|
17
|
+
import { scopeForRepo } from "./repo.js";
|
|
18
|
+
function bindInput(input, composition) {
|
|
19
|
+
return validated(() => {
|
|
20
|
+
const values = requireInput(input, "Keiyaku.bind input");
|
|
21
|
+
const forkOf = values.forkOf;
|
|
22
|
+
const allowed = forkOf === undefined
|
|
23
|
+
? ["repo", "markdown", "task", "target", "workspace", "actor", "after", "gates"]
|
|
24
|
+
: ["repo", "forkOf", "target", "workspace", "actor"];
|
|
25
|
+
requireInput(input, "Keiyaku.bind input", allowed);
|
|
26
|
+
if ((values.workspace ?? "worktree") !== "worktree")
|
|
27
|
+
throw new TypeError("workspace must be worktree");
|
|
28
|
+
if (values.target !== undefined && typeof values.target !== "string")
|
|
29
|
+
throw new TypeError("target must be a string");
|
|
30
|
+
const actor = actorOption(values.actor);
|
|
31
|
+
const document = forkOf === undefined ? parseMarkdown(requireMarkdown(values.markdown)) : undefined;
|
|
32
|
+
if (forkOf !== undefined) {
|
|
33
|
+
if (typeof forkOf !== "string")
|
|
34
|
+
throw new TypeError("forkOf must be a ContractId");
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
forkOf: forkOf === undefined ? undefined : contractId(forkOf),
|
|
38
|
+
scope: scopeForRepo(values.repo),
|
|
39
|
+
document,
|
|
40
|
+
actor,
|
|
41
|
+
target: values.target,
|
|
42
|
+
task: forkOf === undefined ? taskOption(values.task) : undefined,
|
|
43
|
+
gates: forkOf === undefined ? derivedGates(composition, gateNames(values.gates)) : undefined,
|
|
44
|
+
after: forkOf === undefined ? normalizedList(values.after, "after", contractId) : undefined,
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export async function bindKeiyaku(input, createHandle, execution = localExecutionContext(), composition = captureLocalContractComposition()) {
|
|
49
|
+
const prepared = bindInput(input, composition);
|
|
50
|
+
const hooks = derivedHooks(composition);
|
|
51
|
+
const { forkOf, scope, document, target, actor } = prepared;
|
|
52
|
+
const handle = (id) => createHandle(id, scope, execution, composition);
|
|
53
|
+
const accumulator = new InvocationAccumulator();
|
|
54
|
+
const projection = await (async () => {
|
|
55
|
+
let completed;
|
|
56
|
+
let retirement;
|
|
57
|
+
try {
|
|
58
|
+
return await withGitDecodeChannel(scope, async (channel) => {
|
|
59
|
+
completed = await (async () => {
|
|
60
|
+
if (forkOf !== undefined) {
|
|
61
|
+
const fork = await admitForkBindWithAppointment({
|
|
62
|
+
scope,
|
|
63
|
+
channel,
|
|
64
|
+
progress: accumulator,
|
|
65
|
+
sourceId: forkOf,
|
|
66
|
+
...(target === undefined ? {} : { target }),
|
|
67
|
+
...actor,
|
|
68
|
+
});
|
|
69
|
+
if (fork.kind === "refused")
|
|
70
|
+
return { kind: "refused", refusal: fork.refusal };
|
|
71
|
+
const admission = fork.admission;
|
|
72
|
+
if (admission.kind !== "accepted")
|
|
73
|
+
return expected(undefined, admission);
|
|
74
|
+
const id = admission.value.contractId;
|
|
75
|
+
accumulator.extendConclusions(id, { keiyaku: handle(id) });
|
|
76
|
+
const value = await bindComplete(accumulator, id, scope, channel, admission, hooks, () => observeRegion(scope, channel, id, fork.document.region).then((region) => bindValue(handle(id), region, [])));
|
|
77
|
+
return acceptedOutcome("bind", id, accumulator, value);
|
|
78
|
+
}
|
|
79
|
+
if (document === undefined)
|
|
80
|
+
throw new Error("Markdown bind requires its prepared document");
|
|
81
|
+
return await markdownBind(prepared, document, hooks, scope, channel, accumulator, handle);
|
|
82
|
+
})();
|
|
83
|
+
return completed;
|
|
84
|
+
}, (error) => {
|
|
85
|
+
retirement = { error };
|
|
86
|
+
const id = accumulator.snapshot().facts.find((fact) => fact.kind === "bind")?.contract;
|
|
87
|
+
if (id !== undefined)
|
|
88
|
+
accumulator.recordChannelRetirement(id, error);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
if (retirement !== undefined &&
|
|
93
|
+
error === retirement.error &&
|
|
94
|
+
completed?.kind === "accepted" &&
|
|
95
|
+
isOperationalFailure(error))
|
|
96
|
+
return completed;
|
|
97
|
+
const contract = accumulator.snapshot().facts.find((fact) => fact.kind === "bind")?.contract;
|
|
98
|
+
return { kind: "failed", ...(contract === undefined ? {} : { contract }), error };
|
|
99
|
+
}
|
|
100
|
+
})();
|
|
101
|
+
const projected = project("bind", accumulator.snapshot(), projection);
|
|
102
|
+
if (projected.kind === "failed")
|
|
103
|
+
throw projected.error;
|
|
104
|
+
return projected.outcome;
|
|
105
|
+
}
|
|
106
|
+
function bindValue(keiyaku, region, warnings, workspace, appointmentLag) {
|
|
107
|
+
const base = {
|
|
108
|
+
keiyaku,
|
|
109
|
+
...(workspace === undefined ? {} : { workspace }),
|
|
110
|
+
...(warnings.length === 0 ? {} : { warnings }),
|
|
111
|
+
...region,
|
|
112
|
+
};
|
|
113
|
+
void appointmentLag;
|
|
114
|
+
return base;
|
|
115
|
+
}
|
|
116
|
+
// eslint-disable-next-line max-params -- Keep this local operation's custody, admission, and policy witnesses explicit.
|
|
117
|
+
async function bindComplete(accumulator, id, scope, channel, leading, hooks, value) {
|
|
118
|
+
retainAdmission(accumulator, id, leading, false);
|
|
119
|
+
await reconcileAll(accumulator, id, scope, channel, hooks);
|
|
120
|
+
try {
|
|
121
|
+
const appointment = await readManagedWorktreeAppointment(scope, id);
|
|
122
|
+
if (appointment.kind === "appointed")
|
|
123
|
+
accumulator.extendConclusions(id, {
|
|
124
|
+
workspace: { kind: "worktree", path: appointment.path },
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
if (!isOperationalStop(error, scope.signal))
|
|
129
|
+
throw error;
|
|
130
|
+
accumulator.recordStop(executionStop(id, "reconciliation", error, scope.signal));
|
|
131
|
+
}
|
|
132
|
+
const built = { ...(await value()), ...accumulator.conclusions(id) };
|
|
133
|
+
accumulator.extendConclusions(id, conclusions(built));
|
|
134
|
+
return built;
|
|
135
|
+
}
|
|
136
|
+
async function reconcileAll(accumulator, id, scope, channel, hooks) {
|
|
137
|
+
for (const contract of [...new Set([id, ...accumulator.snapshot().affected])]) {
|
|
138
|
+
try {
|
|
139
|
+
accumulator.observe({ kind: "stage", contractId: contract, stage: "reconciliation", state: "started" });
|
|
140
|
+
const report = await (async () => {
|
|
141
|
+
try {
|
|
142
|
+
return await completeReconcile({
|
|
143
|
+
scope,
|
|
144
|
+
channel,
|
|
145
|
+
contractId: contract,
|
|
146
|
+
hooks,
|
|
147
|
+
retryHooks: false,
|
|
148
|
+
progress: accumulator,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
accumulator.observe({ kind: "stage", contractId: contract, stage: "reconciliation", state: "finished" });
|
|
153
|
+
}
|
|
154
|
+
})();
|
|
155
|
+
void report;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
if (!isOperationalStop(error, scope.signal))
|
|
159
|
+
throw error;
|
|
160
|
+
accumulator.recordStop(executionStop(contract, "reconciliation", error, scope.signal));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// eslint-disable-next-line max-params -- Keep this local operation's custody, admission, and policy witnesses explicit.
|
|
165
|
+
async function markdownBind(prepared, document, hooks, scope, channel, accumulator, handle) {
|
|
166
|
+
const { task, target, actor, gates, after } = prepared;
|
|
167
|
+
if (gates === undefined || after === undefined)
|
|
168
|
+
throw new Error("Markdown bind requires prepared terms");
|
|
169
|
+
const targetSelection = target !== undefined ? { kind: "explicit", target } : { kind: "targetless" };
|
|
170
|
+
const admission = await prepareMarkdownBind({
|
|
171
|
+
scope,
|
|
172
|
+
channel,
|
|
173
|
+
document,
|
|
174
|
+
gates,
|
|
175
|
+
progress: accumulator,
|
|
176
|
+
after,
|
|
177
|
+
workspace: "worktree",
|
|
178
|
+
targetSelection,
|
|
179
|
+
...(task === undefined ? {} : { task }),
|
|
180
|
+
...actor,
|
|
181
|
+
});
|
|
182
|
+
const leading = admission.admission === null ? admission.result : admission.admission.result;
|
|
183
|
+
if (leading.kind !== "accepted")
|
|
184
|
+
return expected(undefined, leading);
|
|
185
|
+
const id = leading.value.contractId;
|
|
186
|
+
accumulator.extendConclusions(id, { keiyaku: handle(id), warnings: regionWarnings(document.region) });
|
|
187
|
+
const value = await bindComplete(accumulator, id, scope, channel, leading, hooks, async () => bindValue(handle(id), await observeRegion(scope, channel, id, document.region), regionWarnings(document.region)));
|
|
188
|
+
return acceptedOutcome("bind", id, accumulator, value);
|
|
189
|
+
}
|
|
190
|
+
function parseMarkdown(markdown) {
|
|
191
|
+
return decodeContractDocument(markdown, { requireTimeout: true });
|
|
192
|
+
}
|
|
@@ -1,41 +1,30 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import
|
|
3
|
-
import { type GitDecodeChannel } from "../git/read-observation.js";
|
|
4
|
-
import { type IntegrationConflictMaterialized } from "../protocol/deliver.js";
|
|
1
|
+
import { type ExecutionContext } from "../akuma/requests.js";
|
|
2
|
+
import { type ContractId } from "../core/facts/types.js";
|
|
5
3
|
import { type RepositoryScope } from "../protocol/operations.js";
|
|
6
|
-
import {
|
|
7
|
-
import type
|
|
8
|
-
import type {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
progress: ExecutionProgress;
|
|
34
|
-
}>;
|
|
35
|
-
/** The channel's own retirement cannot hide an already returned admission. */
|
|
36
|
-
export declare function withContractExecution<Result extends MutationResult<unknown> | IntegrationConflictMaterialized>(input: CommonExecutionInput, operation: MutationOperation, run: (context: ExecutionContext) => Promise<Result>): Promise<Result>;
|
|
37
|
-
/** Review records testimony, then the same shared node judges automatic placement. */
|
|
38
|
-
export declare function executeLocalReview(input: ReviewExecutionInput): Promise<MutationResult<Review>>;
|
|
39
|
-
/** Delivery admits a candidate; completion and dependent continuation remain automatic. */
|
|
40
|
-
export declare function executeLocalDelivery(input: DeliveryExecutionInput): Promise<MutationResult<DeliveryValue> | IntegrationConflictMaterialized>;
|
|
41
|
-
export {};
|
|
4
|
+
import type { AbandonOutcome, AmendOutcome, ArcOutcome, AuditInput, AuditOutcome, DeliverOutcome, MutationObservation, ReviewOutcome } from "./contract-outcomes.js";
|
|
5
|
+
import { type LocalContractCompositionCapture } from "./contract-settings.js";
|
|
6
|
+
import type { AbandonInput, AmendInput, ArcInput, DeliverInput, ReviewInput } from "./contract-types.js";
|
|
7
|
+
export declare class ContractExecution {
|
|
8
|
+
private readonly seat;
|
|
9
|
+
constructor(seat: Readonly<{
|
|
10
|
+
id: ContractId;
|
|
11
|
+
scope: RepositoryScope;
|
|
12
|
+
execution: ExecutionContext;
|
|
13
|
+
composition: LocalContractCompositionCapture;
|
|
14
|
+
}>);
|
|
15
|
+
private get id();
|
|
16
|
+
private get scope();
|
|
17
|
+
private get execution();
|
|
18
|
+
private get composition();
|
|
19
|
+
amend(input: AmendInput): Promise<AmendOutcome>;
|
|
20
|
+
/** One promise with an optional observation callback; observation never delays custody. */
|
|
21
|
+
deliver(input?: DeliverInput, options?: MutationObservation): Promise<DeliverOutcome>;
|
|
22
|
+
review(input: ReviewInput, options?: MutationObservation): Promise<ReviewOutcome>;
|
|
23
|
+
abandon(input?: AbandonInput): Promise<AbandonOutcome>;
|
|
24
|
+
arc(input: ArcInput): Promise<ArcOutcome>;
|
|
25
|
+
audit(input?: AuditInput, options?: MutationObservation): Promise<AuditOutcome>;
|
|
26
|
+
/** One accumulator before the first admission-capable await, one projector after teardown. */
|
|
27
|
+
private local;
|
|
28
|
+
private conclude;
|
|
29
|
+
private reconcileContracts;
|
|
30
|
+
}
|