@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,18 +1,95 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { contractIdSchema, snapshotIdSchema } from "../git/identity.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { worktreeLeakSchema } from "../git/scratch.js";
|
|
4
|
+
import { privateStateSeatCloseLagSchema } from "../git/private-state-seat.js";
|
|
5
|
+
import { verificationCleanupFailureSchema } from "./intent.js";
|
|
2
6
|
import { AuthorityCorruptionError } from "../core/facts/errors.js";
|
|
3
7
|
import { GitPlumbingError } from "../git/process.js";
|
|
4
8
|
import { SqliteTransactionLockError } from "../coordination/sqlite-transaction-lock.js";
|
|
5
|
-
import {
|
|
9
|
+
import { GitPrivateStateSeatContentionError } from "../git/private-state-seat.js";
|
|
6
10
|
export function contractCheckpoint(input) {
|
|
7
11
|
return { state: input.state, journal: input.journal };
|
|
8
12
|
}
|
|
13
|
+
export const executionCleanupSchema = z.union([
|
|
14
|
+
z
|
|
15
|
+
.object({
|
|
16
|
+
kind: z.literal("decode-channel-retirement"),
|
|
17
|
+
contractId: contractIdSchema,
|
|
18
|
+
diagnostic: z.string().min(1),
|
|
19
|
+
})
|
|
20
|
+
.strict(),
|
|
21
|
+
z
|
|
22
|
+
.object({
|
|
23
|
+
kind: z.literal("verification-cleanup"),
|
|
24
|
+
contractId: contractIdSchema,
|
|
25
|
+
snapshot: snapshotIdSchema.optional(),
|
|
26
|
+
failure: verificationCleanupFailureSchema,
|
|
27
|
+
})
|
|
28
|
+
.strict(),
|
|
29
|
+
z
|
|
30
|
+
.object({
|
|
31
|
+
kind: z.literal("worktree-leak"),
|
|
32
|
+
contractId: contractIdSchema,
|
|
33
|
+
snapshot: snapshotIdSchema.optional(),
|
|
34
|
+
leak: worktreeLeakSchema,
|
|
35
|
+
})
|
|
36
|
+
.strict(),
|
|
37
|
+
z
|
|
38
|
+
.object({
|
|
39
|
+
kind: z.literal("private-state-seat-close"),
|
|
40
|
+
contractId: contractIdSchema,
|
|
41
|
+
failure: privateStateSeatCloseLagSchema,
|
|
42
|
+
})
|
|
43
|
+
.strict(),
|
|
44
|
+
]);
|
|
45
|
+
export const executionStageSchema = z.enum([
|
|
46
|
+
"admission",
|
|
47
|
+
"verification",
|
|
48
|
+
"placement",
|
|
49
|
+
"reintegration",
|
|
50
|
+
"continuation",
|
|
51
|
+
"reconciliation",
|
|
52
|
+
]);
|
|
53
|
+
export const executionStopSchema = z
|
|
54
|
+
.object({
|
|
55
|
+
kind: z.literal("execution-stopped"),
|
|
56
|
+
contractId: contractIdSchema,
|
|
57
|
+
stage: executionStageSchema,
|
|
58
|
+
reason: z.enum(["cancelled", "failed"]),
|
|
59
|
+
diagnostic: z.string().refine((value) => value.trim() !== ""),
|
|
60
|
+
})
|
|
61
|
+
.strict();
|
|
62
|
+
/** Only owner-declared operational classes and native system I/O failures are operational. */
|
|
63
|
+
export function isOperationalFailure(error) {
|
|
64
|
+
if (!(error instanceof Error) ||
|
|
65
|
+
error instanceof AuthorityCorruptionError ||
|
|
66
|
+
error instanceof TypeError ||
|
|
67
|
+
error instanceof RangeError ||
|
|
68
|
+
error instanceof ReferenceError ||
|
|
69
|
+
error instanceof SyntaxError)
|
|
70
|
+
return false;
|
|
71
|
+
return (error instanceof GitPlumbingError ||
|
|
72
|
+
error instanceof SqliteTransactionLockError ||
|
|
73
|
+
error instanceof GitPrivateStateSeatContentionError ||
|
|
74
|
+
("code" in error && typeof error.code === "string" && /^E[A-Z0-9]+$/u.test(error.code)));
|
|
75
|
+
}
|
|
76
|
+
/** Cancellation is witnessed by this exact signal reason, not by a signal merely being aborted. */
|
|
77
|
+
export function isOperationalStop(error, signal) {
|
|
78
|
+
if (signal?.aborted === true && error === signal.reason)
|
|
79
|
+
return true;
|
|
80
|
+
if (error instanceof AuthorityCorruptionError ||
|
|
81
|
+
error instanceof TypeError ||
|
|
82
|
+
error instanceof RangeError ||
|
|
83
|
+
error instanceof ReferenceError ||
|
|
84
|
+
error instanceof SyntaxError)
|
|
85
|
+
return false;
|
|
86
|
+
return isOperationalFailure(error);
|
|
87
|
+
}
|
|
9
88
|
/** Classify operational failures only; programming errors and corrupt authority still throw. */
|
|
10
89
|
export function executionStop(contractId, stage, error, signal) {
|
|
11
|
-
if (error instanceof AuthorityCorruptionError || error instanceof TypeError)
|
|
12
|
-
throw error;
|
|
13
90
|
const cancelled = signal?.aborted === true &&
|
|
14
91
|
(error === signal.reason || error instanceof GitPlumbingError || error instanceof SqliteTransactionLockError);
|
|
15
|
-
if (!cancelled && !(error
|
|
92
|
+
if (!cancelled && !isOperationalFailure(error))
|
|
16
93
|
throw error;
|
|
17
94
|
return {
|
|
18
95
|
kind: "execution-stopped",
|
|
@@ -22,130 +99,3 @@ export function executionStop(contractId, stage, error, signal) {
|
|
|
22
99
|
diagnostic: error instanceof Error ? error.message : String(error),
|
|
23
100
|
};
|
|
24
101
|
}
|
|
25
|
-
/** Invocation-local receipts and ephemeral observations; no scheduling or authority reads. */
|
|
26
|
-
export class ExecutionProgress {
|
|
27
|
-
observer;
|
|
28
|
-
constructor(observer) {
|
|
29
|
-
this.observer = observer;
|
|
30
|
-
}
|
|
31
|
-
observe(event) {
|
|
32
|
-
observeExecution(this.observer, event);
|
|
33
|
-
}
|
|
34
|
-
entries = new Map();
|
|
35
|
-
admittedFacts = [];
|
|
36
|
-
admittedHeads = new Map();
|
|
37
|
-
admittedCheckpoints = new Map();
|
|
38
|
-
affectedContracts = new Set();
|
|
39
|
-
effects = [];
|
|
40
|
-
lags = [];
|
|
41
|
-
cleanupIssues = [];
|
|
42
|
-
executionStops = [];
|
|
43
|
-
reportedResidue = new WeakSet();
|
|
44
|
-
/** A confirmed publication is retained even if folding or later physical work throws. */
|
|
45
|
-
recordPublication(contractId, head, facts) {
|
|
46
|
-
const incoming = new Map();
|
|
47
|
-
for (const fact of facts) {
|
|
48
|
-
const key = `${fact.contract}\0${fact.entry}`;
|
|
49
|
-
const bytes = encodeEntry(fact);
|
|
50
|
-
const previous = incoming.get(key)?.bytes ?? this.entries.get(key);
|
|
51
|
-
if (previous !== undefined && previous !== bytes)
|
|
52
|
-
throw new AuthorityCorruptionError("conflicting invocation receipt");
|
|
53
|
-
incoming.set(key, { fact, bytes });
|
|
54
|
-
}
|
|
55
|
-
let fresh = false;
|
|
56
|
-
for (const [key, { fact, bytes }] of incoming) {
|
|
57
|
-
if (this.entries.has(key))
|
|
58
|
-
continue;
|
|
59
|
-
this.entries.set(key, bytes);
|
|
60
|
-
this.admittedFacts.push(fact);
|
|
61
|
-
this.observe({ kind: "admitted", contractId, fact });
|
|
62
|
-
this.affectedContracts.add(fact.contract);
|
|
63
|
-
fresh = true;
|
|
64
|
-
}
|
|
65
|
-
if (fresh || !this.admittedHeads.has(contractId))
|
|
66
|
-
this.admittedHeads.set(contractId, head);
|
|
67
|
-
}
|
|
68
|
-
recordAdmission(step) {
|
|
69
|
-
if (step.state.head === null)
|
|
70
|
-
throw new Error("admission requires a journal head");
|
|
71
|
-
this.recordPublication(step.state.id, step.state.head, step.facts);
|
|
72
|
-
if (this.admittedHeads.get(step.state.id) === step.state.head) {
|
|
73
|
-
this.admittedCheckpoints.set(step.state.id, contractCheckpoint(step));
|
|
74
|
-
}
|
|
75
|
-
this.recordResidue(step.state.id, step);
|
|
76
|
-
}
|
|
77
|
-
hasFact(fact) {
|
|
78
|
-
return this.entries.get(`${fact.contract}\0${fact.entry}`) === encodeEntry(fact);
|
|
79
|
-
}
|
|
80
|
-
head(contractId) {
|
|
81
|
-
return this.admittedHeads.get(contractId);
|
|
82
|
-
}
|
|
83
|
-
recordResidue(contractId, residue) {
|
|
84
|
-
if (residue.physical !== undefined)
|
|
85
|
-
this.recordPhysical(contractId, residue.physical);
|
|
86
|
-
for (const failure of residue.seatClose ?? []) {
|
|
87
|
-
if (this.reportedResidue.has(failure))
|
|
88
|
-
continue;
|
|
89
|
-
this.reportedResidue.add(failure);
|
|
90
|
-
this.cleanupIssues.push({ kind: "private-state-seat-close", contractId, failure });
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
recordPhysical(contractId, physical) {
|
|
94
|
-
if (physical.effects.length > 0 || physical.lag.length > 0)
|
|
95
|
-
this.affectedContracts.add(contractId);
|
|
96
|
-
for (const effect of physical.effects) {
|
|
97
|
-
if (this.reportedResidue.has(effect))
|
|
98
|
-
continue;
|
|
99
|
-
this.reportedResidue.add(effect);
|
|
100
|
-
this.effects.push(effect);
|
|
101
|
-
}
|
|
102
|
-
for (const lag of physical.lag) {
|
|
103
|
-
if (this.reportedResidue.has(lag))
|
|
104
|
-
continue;
|
|
105
|
-
this.reportedResidue.add(lag);
|
|
106
|
-
this.lags.push(lag);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
recordVerification(contractId, snapshot, result) {
|
|
110
|
-
if (result.cleanup !== undefined)
|
|
111
|
-
this.cleanupIssues.push({
|
|
112
|
-
kind: "verification-cleanup",
|
|
113
|
-
contractId,
|
|
114
|
-
...(snapshot === undefined ? {} : { snapshot }),
|
|
115
|
-
failure: result.cleanup,
|
|
116
|
-
});
|
|
117
|
-
if (result.leak !== undefined)
|
|
118
|
-
this.cleanupIssues.push({
|
|
119
|
-
kind: "worktree-leak",
|
|
120
|
-
contractId,
|
|
121
|
-
...(snapshot === undefined ? {} : { snapshot }),
|
|
122
|
-
leak: result.leak,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
recordStop(stop) {
|
|
126
|
-
if (!this.executionStops.includes(stop))
|
|
127
|
-
this.executionStops.push(stop);
|
|
128
|
-
}
|
|
129
|
-
checkpoint(contractId) {
|
|
130
|
-
return this.admittedCheckpoints.get(contractId);
|
|
131
|
-
}
|
|
132
|
-
snapshot() {
|
|
133
|
-
return {
|
|
134
|
-
facts: Object.freeze([...this.admittedFacts]),
|
|
135
|
-
checkpoints: new Map(this.admittedCheckpoints),
|
|
136
|
-
heads: new Map(this.admittedHeads),
|
|
137
|
-
affected: Object.freeze([...this.affectedContracts]),
|
|
138
|
-
physical: { effects: Object.freeze([...this.effects]), lag: Object.freeze([...this.lags]) },
|
|
139
|
-
cleanup: Object.freeze([...this.cleanupIssues]),
|
|
140
|
-
stops: Object.freeze([...this.executionStops]),
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
/** One final assembly; a dependent's checkpoint can never replace the addressed head. */
|
|
144
|
-
accepted(contractId, value) {
|
|
145
|
-
const head = this.head(contractId);
|
|
146
|
-
if (head === undefined)
|
|
147
|
-
throw new Error("missing leading admission receipt");
|
|
148
|
-
const snapshot = this.snapshot();
|
|
149
|
-
return { kind: "accepted", head, facts: snapshot.facts, value, physical: snapshot.physical };
|
|
150
|
-
}
|
|
151
|
-
}
|
|
@@ -4,7 +4,7 @@ import type { GitDecodeChannel, GitReadObservation } from "../../git/read-observ
|
|
|
4
4
|
import { type GateCurrent } from "../../core/facts/gate.js";
|
|
5
5
|
import { type ContractId, type ContractState, type DeliverData, type JournalEntry, type SnapshotId } from "../../core/facts/types.js";
|
|
6
6
|
import { type BoundedList } from "../../bounded-list.js";
|
|
7
|
-
export type ContractPhase = "
|
|
7
|
+
export type ContractPhase = "bound" | "delivered" | "claimed" | "abandoned";
|
|
8
8
|
export type ContractDisposition = "active" | "terminal";
|
|
9
9
|
export type ContractGateCurrent = GateCurrent;
|
|
10
10
|
export type ContractGateReport = Readonly<{
|
|
@@ -36,7 +36,7 @@ export type ContractTargetLag = GitContractTargetLag | Readonly<{
|
|
|
36
36
|
}>;
|
|
37
37
|
}>;
|
|
38
38
|
export type { ContractWorkspaceObservation };
|
|
39
|
-
|
|
39
|
+
type AfterEndpointObservation = Readonly<{
|
|
40
40
|
kind: "claimed";
|
|
41
41
|
}> | Readonly<{
|
|
42
42
|
kind: "active";
|
|
@@ -67,6 +67,7 @@ export type ContractRow = Readonly<{
|
|
|
67
67
|
target: string | null;
|
|
68
68
|
targetLag: ContractTargetLag;
|
|
69
69
|
delivery: DeliverData | null;
|
|
70
|
+
abandonNote?: string;
|
|
70
71
|
targetObservation: Readonly<{
|
|
71
72
|
head: SnapshotId | null;
|
|
72
73
|
drift: boolean;
|
|
@@ -97,7 +98,7 @@ export type ContractObservation = Readonly<{
|
|
|
97
98
|
kind: "present";
|
|
98
99
|
row: ContractRow;
|
|
99
100
|
}>;
|
|
100
|
-
export declare function phaseAtFor(state: Pick<ContractState, "terminal" | "delivery"
|
|
101
|
+
export declare function phaseAtFor(state: Pick<ContractState, "terminal" | "delivery">, bindAt: string): string;
|
|
101
102
|
export declare function lastJournalAtFor(entries: readonly Pick<JournalEntry, "at">[]): string;
|
|
102
103
|
/** Build the Contract board from one immutable git observation. */
|
|
103
104
|
export declare function readContractBoard(observation: GitReadObservation, include?: ContractId): Promise<ContractBoard>;
|
|
@@ -25,10 +25,8 @@ function phaseFor(state) {
|
|
|
25
25
|
if (state.terminal?.kind === "abandoned")
|
|
26
26
|
return "abandoned";
|
|
27
27
|
if (state.delivery !== null)
|
|
28
|
-
return "
|
|
29
|
-
|
|
30
|
-
return "bound";
|
|
31
|
-
return "waiting";
|
|
28
|
+
return "delivered";
|
|
29
|
+
return "bound";
|
|
32
30
|
}
|
|
33
31
|
function verificationFor(state, document) {
|
|
34
32
|
if (document === undefined)
|
|
@@ -49,7 +47,7 @@ function verificationFor(state, document) {
|
|
|
49
47
|
return state.delivery === null ? undefined : { kind: "unrecorded" };
|
|
50
48
|
}
|
|
51
49
|
export function phaseAtFor(state, bindAt) {
|
|
52
|
-
return state.terminal?.at ?? state.delivery?.at ??
|
|
50
|
+
return state.terminal?.at ?? state.delivery?.at ?? bindAt;
|
|
53
51
|
}
|
|
54
52
|
export function lastJournalAtFor(entries) {
|
|
55
53
|
const last = entries.at(-1);
|
|
@@ -129,6 +127,9 @@ async function rowFor(input) {
|
|
|
129
127
|
delivery: state.delivery === null || state.currentIntegration === null
|
|
130
128
|
? null
|
|
131
129
|
: { ...state.delivery.data, integration: state.currentIntegration },
|
|
130
|
+
...(state.terminal?.kind === "abandoned" && state.terminal.data.note !== undefined
|
|
131
|
+
? { abandonNote: state.terminal.data.note }
|
|
132
|
+
: {}),
|
|
132
133
|
targetObservation,
|
|
133
134
|
...(verification === undefined ? {} : { verification }),
|
|
134
135
|
gates: {
|
|
@@ -3,10 +3,9 @@ import type { ContractId, ContractState } from "../core/facts/types.js";
|
|
|
3
3
|
import type { WorktreeHooks } from "../git/hooks.js";
|
|
4
4
|
import type { GitDecodeChannel } from "../git/read-observation.js";
|
|
5
5
|
import type { MutationOperationInput, RepositoryScope } from "./operations.js";
|
|
6
|
-
export type ReconcileReport = ReconcileResult;
|
|
7
6
|
type ReconcileObservation = Readonly<{
|
|
8
7
|
state: ContractState | null;
|
|
9
|
-
report:
|
|
8
|
+
report: ReconcileResult;
|
|
10
9
|
}>;
|
|
11
10
|
type ReconcileOptions = Readonly<{
|
|
12
11
|
hooks: WorktreeHooks;
|
|
@@ -14,12 +13,13 @@ type ReconcileOptions = Readonly<{
|
|
|
14
13
|
retainTerminalWorktree?: boolean;
|
|
15
14
|
place?: string;
|
|
16
15
|
places?: ReadonlyMap<ContractId, string>;
|
|
16
|
+
onPhysical?: (report: ReconcileResult) => void;
|
|
17
17
|
}>;
|
|
18
18
|
export declare function reconcileOperation(input: MutationOperationInput & ReconcileOptions): Promise<ReconcileObservation>;
|
|
19
19
|
type RepoReconcileItem = Readonly<{
|
|
20
20
|
contractId: ContractId;
|
|
21
21
|
state: ContractState | null;
|
|
22
|
-
report:
|
|
22
|
+
report: ReconcileResult;
|
|
23
23
|
}>;
|
|
24
24
|
type RepoReconcileReport = Readonly<{
|
|
25
25
|
contracts: readonly RepoReconcileItem[];
|
|
@@ -10,6 +10,10 @@ export async function reconcileOperation(input) {
|
|
|
10
10
|
contractId: input.contractId,
|
|
11
11
|
hooks: input.hooks,
|
|
12
12
|
retryHooks: input.retryHooks,
|
|
13
|
+
onPhysical: (report) => {
|
|
14
|
+
input.progress?.recordPhysical(input.contractId, report);
|
|
15
|
+
input.onPhysical?.(report);
|
|
16
|
+
},
|
|
13
17
|
...(input.retainTerminalWorktree === undefined ? {} : { retainTerminalWorktree: input.retainTerminalWorktree }),
|
|
14
18
|
...(input.place === undefined ? {} : { place: input.place }),
|
|
15
19
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ProtocolProgress } from "./progress.js";
|
|
2
2
|
import type { ActorId, ContractId, ReintegratedData } from "../core/facts/types.js";
|
|
3
3
|
import { type ReintegrateRefusal } from "../core/verbs/reintegrate.js";
|
|
4
4
|
import { type IntegrationPreparationRefusal } from "../git/integration.js";
|
|
@@ -27,7 +27,7 @@ type ReintegrationInput = Readonly<{
|
|
|
27
27
|
contractId: ContractId;
|
|
28
28
|
target: string;
|
|
29
29
|
actor?: ActorId;
|
|
30
|
-
progress?:
|
|
30
|
+
progress?: ProtocolProgress;
|
|
31
31
|
}>;
|
|
32
32
|
export declare function reintegrateOperation(input: ReintegrationInput): Promise<ReintegrationResult>;
|
|
33
33
|
export {};
|
|
@@ -1,26 +1,43 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type ActiveContractRefusal } from "../core/facts/observation.js";
|
|
2
3
|
import type { AttestationData, ContractState, DeliverData } from "../core/facts/types.js";
|
|
3
|
-
import { type AttestationRefusal } from "../core/verbs/attestation.js";
|
|
4
4
|
import type { LeadingOutcome } from "./outcome.js";
|
|
5
|
-
import type { CompletionEvidence } from "./completion.js";
|
|
6
5
|
import type { MutationOperationInput, RepositoryScope } from "./operations.js";
|
|
7
6
|
type ReviewPreparationRefusal = Readonly<{
|
|
8
7
|
kind: "worktree-missing";
|
|
9
8
|
contractId: import("../core/facts/types.js").ContractId;
|
|
10
9
|
}> | import("../git/tender.js").DirtyWorkspaceRefusal;
|
|
11
|
-
type ReviewRefusal =
|
|
10
|
+
type ReviewRefusal = ActiveContractRefusal | ReviewPreparationRefusal;
|
|
12
11
|
type ReviewOperationInput = MutationOperationInput & Readonly<{
|
|
13
12
|
verdict: AttestationData["verdict"];
|
|
14
13
|
summary?: string;
|
|
15
14
|
}>;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
declare const reviewWorkspaceEvidenceSchema: z.ZodObject<{
|
|
16
|
+
staged: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
17
|
+
unstaged: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
18
|
+
untracked: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
19
|
+
shortStat: z.ZodObject<{
|
|
20
|
+
filesChanged: z.ZodNumber;
|
|
21
|
+
insertions: z.ZodNumber;
|
|
22
|
+
deletions: z.ZodNumber;
|
|
23
|
+
}, z.core.$strict>;
|
|
24
|
+
unmergedPaths: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
25
|
+
}, z.core.$strict>;
|
|
26
|
+
type ReviewWorkspaceEvidence = z.infer<typeof reviewWorkspaceEvidenceSchema>;
|
|
27
|
+
export declare const reviewAdmissionValueSchema: z.ZodObject<{
|
|
28
|
+
workspace: z.ZodOptional<z.ZodObject<{
|
|
29
|
+
staged: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
30
|
+
unstaged: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
31
|
+
untracked: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
32
|
+
shortStat: z.ZodObject<{
|
|
33
|
+
filesChanged: z.ZodNumber;
|
|
34
|
+
insertions: z.ZodNumber;
|
|
35
|
+
deletions: z.ZodNumber;
|
|
36
|
+
}, z.core.$strict>;
|
|
37
|
+
unmergedPaths: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
38
|
+
}, z.core.$strict>>;
|
|
39
|
+
}, z.core.$strict>;
|
|
40
|
+
export type ReviewAdmissionValue = z.infer<typeof reviewAdmissionValueSchema>;
|
|
24
41
|
export declare function prepareReview(repository: RepositoryScope, stage: Readonly<{
|
|
25
42
|
contractId: import("../core/facts/types.js").ContractId;
|
|
26
43
|
coordinates: ContractState["coordinates"];
|
|
@@ -35,3 +52,4 @@ export declare function prepareReview(repository: RepositoryScope, stage: Readon
|
|
|
35
52
|
refusal: ReviewPreparationRefusal;
|
|
36
53
|
}>;
|
|
37
54
|
export declare function admitReviewOperation(input: ReviewOperationInput): Promise<LeadingOutcome<ReviewAdmissionValue, ReviewRefusal>>;
|
|
55
|
+
export {};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { workspaceDirtyDeltaSchema } from "../git/tender.js";
|
|
1
3
|
import { worktreeChangeId } from "../git/integration.js";
|
|
2
|
-
import { captureTender, dirtyTenderDelta, dirtyTenderRefusal
|
|
4
|
+
import { captureTender, dirtyTenderDelta, dirtyTenderRefusal } from "../git/tender.js";
|
|
3
5
|
import { observeContractsForAdmissionAt } from "../git/observe.js";
|
|
4
6
|
import { unmergedWorkspacePaths, worktreePath } from "../git/workspace.js";
|
|
5
|
-
import { contractStateWitness, privateStateSeatAttempt, sameWorktreeWitness, STALE_PRIVATE_STATE_PREPARATION, } from "./run.js";
|
|
7
|
+
import { contractStateWitness, privateStateSeatAttempt, runBoundedAttempts, sameWorktreeWitness, STALE_PRIVATE_STATE_PREPARATION, } from "./run.js";
|
|
6
8
|
import { dependencyKeySet } from "../core/subject.js";
|
|
7
9
|
import { contractState } from "../core/facts/observation.js";
|
|
8
10
|
import { gate } from "../core/facts/types.js";
|
|
@@ -11,7 +13,10 @@ import { admitDecidedOffer, mintAttempts } from "./attempt.js";
|
|
|
11
13
|
import { appointmentFor, readPlaceRegister } from "../workspace-place.js";
|
|
12
14
|
import { attemptDecisionWithSeatClose, timestamp } from "./operations.js";
|
|
13
15
|
const REVIEWED = gate("reviewed");
|
|
14
|
-
|
|
16
|
+
const reviewWorkspaceEvidenceSchema = workspaceDirtyDeltaSchema
|
|
17
|
+
.extend({ unmergedPaths: z.array(z.string().refine((value) => value.trim() !== "")).readonly() })
|
|
18
|
+
.strict();
|
|
19
|
+
export const reviewAdmissionValueSchema = z.object({ workspace: reviewWorkspaceEvidenceSchema.optional() }).strict();
|
|
15
20
|
async function captureReviewableWorktree(repository, stage) {
|
|
16
21
|
const appointed = stage.coordinates.workspace === "worktree"
|
|
17
22
|
? appointmentFor(await readPlaceRegister(repository), stage.contractId)
|
|
@@ -178,25 +183,11 @@ async function reviewAttempt(input, attempt) {
|
|
|
178
183
|
}, attemptDecisionWithSeatClose);
|
|
179
184
|
}
|
|
180
185
|
export async function admitReviewOperation(input) {
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
if (result.kind === "publication-failed")
|
|
190
|
-
return { kind: "retry", reason: result };
|
|
191
|
-
if (result.kind === "stale" || result.kind === "redecide")
|
|
192
|
-
continue;
|
|
193
|
-
if (result.kind === "collision" && index + 1 === attempts.length)
|
|
194
|
-
return { kind: "retry", reason: result };
|
|
195
|
-
}
|
|
196
|
-
if (review === null)
|
|
197
|
-
return { kind: "retry", reason: { kind: "exhausted" } };
|
|
198
|
-
if (review.kind !== "accepted")
|
|
199
|
-
return review;
|
|
200
|
-
input.progress?.recordResidue(input.contractId, review);
|
|
201
|
-
return review;
|
|
186
|
+
const result = await runBoundedAttempts(mintAttempts({ entryCount: 1 }), (attempt) => reviewAttempt(input, attempt));
|
|
187
|
+
if (result.kind === "refused")
|
|
188
|
+
return result;
|
|
189
|
+
if (result.kind !== "accepted")
|
|
190
|
+
return { kind: "retry", reason: result };
|
|
191
|
+
input.progress?.recordResidue(input.contractId, result);
|
|
192
|
+
return result;
|
|
202
193
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { ProtocolProgress } from "./progress.js";
|
|
2
3
|
import { type GitDecisionObservation } from "../git/observe.js";
|
|
3
4
|
import { type PrivateStatePublicationSeat, type PrivateStateSeatOutcome } from "../git/private-state-seat.js";
|
|
4
5
|
import type { GitDecodeChannel, GitTreeSelection } from "../git/read-observation.js";
|
|
@@ -12,13 +13,41 @@ import { type AcceptedAdmission, type AttemptTerminal } from "./attempt.js";
|
|
|
12
13
|
export declare const STALE_PRIVATE_STATE_PREPARATION: {
|
|
13
14
|
readonly kind: "stale";
|
|
14
15
|
};
|
|
15
|
-
export
|
|
16
|
-
kind:
|
|
17
|
-
|
|
16
|
+
export declare const protocolTerminalSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
17
|
+
kind: z.ZodEnum<{
|
|
18
|
+
exhausted: "exhausted";
|
|
19
|
+
collision: "collision";
|
|
20
|
+
}>;
|
|
21
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
22
|
+
kind: z.ZodLiteral<"publication-failed">;
|
|
23
|
+
diagnostic: z.ZodString;
|
|
24
|
+
}, z.core.$strict>]>;
|
|
25
|
+
export type ProtocolTerminal = z.infer<typeof protocolTerminalSchema>;
|
|
18
26
|
export type ProtocolResult<Refusal> = AcceptedAdmission | Readonly<{
|
|
19
27
|
kind: "refused";
|
|
20
28
|
refusal: Refusal;
|
|
21
29
|
}> | ProtocolTerminal;
|
|
30
|
+
type BoundedAttemptResult<Accepted extends Readonly<{
|
|
31
|
+
kind: "accepted";
|
|
32
|
+
}>, Refusal> = Accepted | Readonly<{
|
|
33
|
+
kind: "refused";
|
|
34
|
+
refusal: Refusal;
|
|
35
|
+
}> | Readonly<{
|
|
36
|
+
kind: "stale";
|
|
37
|
+
}> | Readonly<{
|
|
38
|
+
kind: "redecide";
|
|
39
|
+
}> | AttemptTerminal;
|
|
40
|
+
/**
|
|
41
|
+
* Classify one bounded sequence of fresh semantic attempts. The callback owns every verb-specific
|
|
42
|
+
* observation, preparation, decision, and publication; this function only decides whether its
|
|
43
|
+
* result is terminal or whether the next fresh context may be tried.
|
|
44
|
+
*/
|
|
45
|
+
export declare function runBoundedAttempts<Accepted extends Readonly<{
|
|
46
|
+
kind: "accepted";
|
|
47
|
+
}>, Refusal>(attempts: readonly AttemptContext[], attempt: (context: AttemptContext, index: number) => Promise<BoundedAttemptResult<Accepted, Refusal>>): Promise<Accepted | Readonly<{
|
|
48
|
+
kind: "refused";
|
|
49
|
+
refusal: Refusal;
|
|
50
|
+
}> | ProtocolTerminal>;
|
|
22
51
|
export type CompanionDecorator = (input: Readonly<{
|
|
23
52
|
repository: GitRepository;
|
|
24
53
|
observation: GitDecisionObservation;
|
|
@@ -61,7 +90,7 @@ type ProtocolAdmission<Input extends Readonly<{
|
|
|
61
90
|
}>, Refusal> = Readonly<{
|
|
62
91
|
channel: GitDecodeChannel;
|
|
63
92
|
repository: GitRepository;
|
|
64
|
-
progress?:
|
|
93
|
+
progress?: ProtocolProgress;
|
|
65
94
|
contracts: readonly ContractId[];
|
|
66
95
|
attempts: readonly AttemptContext[];
|
|
67
96
|
decide: (input: DecideInput<Input>) => OfferDecision<Refusal>;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { publicationFailedSchema } from "../git/admission.js";
|
|
1
3
|
import { extendAdmissionPathsAt, observeContractsForAdmissionAt } from "../git/observe.js";
|
|
2
4
|
import { appendPrivateStateSeatClose, isPrivateStateSeatContention, mergePrivateStateSeatClose, withPrivateStatePublicationSeat, } from "../git/private-state-seat.js";
|
|
3
5
|
import { GIT_REF, readRefs } from "../git/repository.js";
|
|
@@ -5,6 +7,25 @@ import { admitDecidedOffer } from "./attempt.js";
|
|
|
5
7
|
export const STALE_PRIVATE_STATE_PREPARATION = {
|
|
6
8
|
kind: "stale",
|
|
7
9
|
};
|
|
10
|
+
export const protocolTerminalSchema = z.union([
|
|
11
|
+
z.object({ kind: z.enum(["exhausted", "collision"]) }).strict(),
|
|
12
|
+
publicationFailedSchema,
|
|
13
|
+
]);
|
|
14
|
+
/**
|
|
15
|
+
* Classify one bounded sequence of fresh semantic attempts. The callback owns every verb-specific
|
|
16
|
+
* observation, preparation, decision, and publication; this function only decides whether its
|
|
17
|
+
* result is terminal or whether the next fresh context may be tried.
|
|
18
|
+
*/
|
|
19
|
+
export async function runBoundedAttempts(attempts, attempt) {
|
|
20
|
+
for (let index = 0; index < attempts.length; index += 1) {
|
|
21
|
+
const result = await attempt(attempts[index], index);
|
|
22
|
+
if (result.kind === "accepted" || result.kind === "refused" || result.kind === "publication-failed")
|
|
23
|
+
return result;
|
|
24
|
+
if (result.kind === "collision" && index + 1 === attempts.length)
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
return { kind: "exhausted" };
|
|
28
|
+
}
|
|
8
29
|
export function contractStateWitness(state) {
|
|
9
30
|
return { head: state.head };
|
|
10
31
|
}
|
|
@@ -158,16 +179,7 @@ async function prepareDirectProtocolAttempt(input, baseAttempt) {
|
|
|
158
179
|
}
|
|
159
180
|
/** Run bounded, verb-neutral attempts and return one real admission on acceptance. */
|
|
160
181
|
export async function runProtocol(input) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
const result = input.preparation === undefined
|
|
165
|
-
? await runDirectProtocolAttempt(input, attempt)
|
|
166
|
-
: await runSplitProtocolAttempt(input, attempt);
|
|
167
|
-
if (result.kind === "refused" || result.kind === "accepted" || result.kind === "publication-failed")
|
|
168
|
-
return result;
|
|
169
|
-
if (result.kind === "collision" && index + 1 === attempts.length)
|
|
170
|
-
return result;
|
|
171
|
-
}
|
|
172
|
-
return { kind: "exhausted" };
|
|
182
|
+
return await runBoundedAttempts(input.attempts, (attempt) => input.preparation === undefined
|
|
183
|
+
? runDirectProtocolAttempt(input, attempt)
|
|
184
|
+
: runSplitProtocolAttempt(input, attempt));
|
|
173
185
|
}
|
|
Binary file
|
package/build/src/settings.d.ts
CHANGED
|
@@ -46,16 +46,6 @@ export declare class SettingsError extends Error {
|
|
|
46
46
|
readonly kind = "settings";
|
|
47
47
|
constructor(message: string);
|
|
48
48
|
}
|
|
49
|
-
export type Gate = string;
|
|
50
|
-
export type GatesFromInput = Readonly<{
|
|
51
|
-
settings: Settings;
|
|
52
|
-
names?: readonly string[];
|
|
53
|
-
}>;
|
|
54
|
-
export type RequireBranchesToBeUpToDateFromInput = Readonly<{
|
|
55
|
-
settings: Settings;
|
|
56
|
-
}>;
|
|
57
49
|
export declare function settings(input?: SettingsInput): Promise<Settings>;
|
|
58
50
|
/** Read only the project scope owned by a materialized candidate snapshot. */
|
|
59
51
|
export declare function projectSettings(root: string): Promise<Settings>;
|
|
60
|
-
export declare function gatesFrom(input: GatesFromInput): readonly Gate[];
|
|
61
|
-
export declare function requireBranchesToBeUpToDateFrom(input: RequireBranchesToBeUpToDateFromInput): boolean;
|