@astrosheep/keiyaku 4.5.28 → 4.6.1
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 -19
- package/build/src/akuma/akuma-instance.js +65 -177
- package/build/src/akuma/akuma-observe.d.ts +3 -21
- package/build/src/akuma/akuma-observe.js +7 -25
- package/build/src/akuma/{akuma-handle.d.ts → akuma-owner.d.ts} +60 -25
- package/build/src/akuma/{akuma-handle.js → akuma-owner.js} +43 -29
- 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 -32
- package/build/src/akuma/akuma-wait.js +113 -0
- package/build/src/akuma/akuma.d.ts +35 -97
- package/build/src/akuma/akuma.js +148 -35
- package/build/src/akuma/archetype.d.ts +18 -6
- package/build/src/akuma/archetype.js +52 -34
- package/build/src/akuma/body.d.ts +79 -61
- package/build/src/akuma/body.js +101 -50
- package/build/src/akuma/call-initial-tell.d.ts +164 -0
- package/build/src/akuma/call-initial-tell.js +62 -0
- package/build/src/akuma/call-input.d.ts +0 -3
- package/build/src/akuma/call-input.js +0 -7
- package/build/src/akuma/call-request.d.ts +247 -38
- package/build/src/akuma/call-request.js +77 -92
- 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 +3 -9
- 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 +7 -10
- 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-read.js +1 -2
- 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 -23
- package/build/src/akuma/provider-recipe.js +62 -103
- package/build/src/akuma/provider.d.ts +7 -78
- 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 -17
- package/build/src/akuma/providers/claude/index.js +2 -14
- package/build/src/akuma/providers/codex-app-server/index.js +0 -22
- package/build/src/akuma/providers/grok-build/index.js +44 -24
- 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 -74
- 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.js +70 -24
- 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 -3
- package/build/src/akuma/requests.js +0 -24
- package/build/src/akuma/{fleet-observation.d.ts → selection-observation.d.ts} +61 -52
- 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.d.ts +3 -0
- package/build/src/akuma/turn-drive.js +75 -16
- 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 -312
- 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 +5 -9
- 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 +28 -30
- package/build/src/cli/commands/contract-help.js +69 -96
- package/build/src/cli/commands/contract.d.ts +18 -97
- package/build/src/cli/commands/contract.js +620 -237
- 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 +415 -333
- 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 +63 -61
- package/build/src/cli/render/akuma-activity.d.ts +88 -39
- package/build/src/cli/render/akuma-activity.js +465 -263
- package/build/src/cli/render/akuma-tool.d.ts +15 -5
- package/build/src/cli/render/akuma-tool.js +40 -27
- package/build/src/cli/render/akuma.d.ts +40 -24
- package/build/src/cli/render/akuma.js +108 -205
- package/build/src/cli/render/audit.d.ts +6 -2
- package/build/src/cli/render/audit.js +61 -30
- package/build/src/cli/render/catalog.d.ts +11 -2
- package/build/src/cli/render/catalog.js +75 -94
- 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 +255 -106
- 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 +108 -129
- 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 +126 -46
- 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 +61 -34
- package/build/src/cli/render/region.js +3 -2
- package/build/src/cli/render/settings.js +4 -14
- package/build/src/cli/render/task.d.ts +37 -6
- package/build/src/cli/render/task.js +162 -158
- package/build/src/cli/render/terminal.d.ts +25 -1
- package/build/src/cli/render/terminal.js +105 -18
- package/build/src/cli/runtime.d.ts +32 -8
- package/build/src/cli/runtime.js +161 -163
- 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 -6
- package/build/src/index.js +52 -3
- 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 +35 -33
- package/build/src/library/akuma-creation.js +184 -167
- package/build/src/library/akumas.d.ts +40 -0
- package/build/src/library/akumas.js +84 -0
- 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 +24 -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 +44 -437
- package/build/src/library/keiyaku.js +132 -20
- 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} +177 -160
- 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 -14
- package/build/src/akuma/akuma-product-symbols.d.ts +0 -1
- package/build/src/akuma/akuma-product-symbols.js +0 -1
- package/build/src/akuma/akuma-product.d.ts +0 -62
- package/build/src/akuma/akuma-product.js +0 -293
- package/build/src/akuma/fleet-execution.js +0 -181
- package/build/src/akuma/fleet-observation.js +0 -91
- package/build/src/cli/accepted.d.ts +0 -24
- package/build/src/cli/accepted.js +0 -167
- package/build/src/cli/commands/akuma-invoke.d.ts +0 -114
- package/build/src/cli/commands/akuma-invoke.js +0 -402
- 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 -484
- 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/catalog.d.ts +0 -68
- package/build/src/library/catalog.js +0 -130
- package/build/src/library/composition.d.ts +0 -403
- package/build/src/library/composition.js +0 -29
- 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 -45
- package/build/src/library/contract-handle.js +0 -373
- package/build/src/library/contract.d.ts +0 -53
- package/build/src/library/contract.js +0 -91
- 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,20 +1,26 @@
|
|
|
1
|
-
import type { ExecutionCleanup, ExecutionStop,
|
|
1
|
+
import type { ExecutionCleanup, ExecutionStop, PartialOutcomeEnvelope, ReconciliationLag } from "../../index.js";
|
|
2
2
|
import type { PlacementStop, VerificationReuse, VerificationStop } from "../../index.js";
|
|
3
|
-
import type { Lag } from "../result.js";
|
|
4
3
|
export type ReceiptSegment = Readonly<{
|
|
5
4
|
text: string;
|
|
6
5
|
opaque?: boolean;
|
|
7
6
|
}>;
|
|
8
|
-
type HookFailure = Extract<
|
|
7
|
+
type HookFailure = Extract<ReconciliationLag, {
|
|
9
8
|
kind: "worktree-hook-failed";
|
|
10
9
|
}>["failure"];
|
|
11
10
|
export declare function receiptRow(lines: string[], mark: string, label: string, segments: readonly ReceiptSegment[], columns: number): void;
|
|
12
11
|
export declare function receiptPayload(lines: string[], label: string, payload: string): void;
|
|
13
12
|
export declare function outcomeLines(mark: "✓" | "×" | "!" | "?", verb: string, word: "accepted" | "refused" | "retry", contract: string | undefined, columns?: number): string[];
|
|
13
|
+
export declare function refusalLines(verb: string, facts: readonly string[], columns?: number, trailingFacts?: readonly string[]): string[];
|
|
14
14
|
export declare function titleLines(mark: string, title: string, contract: string, columns?: number): string[];
|
|
15
15
|
export declare function hookFailureSummary(failure: HookFailure): string;
|
|
16
16
|
export declare function appendHookPayload(lines: string[], failure: HookFailure): void;
|
|
17
17
|
export declare function reuseLines(reuse: VerificationReuse | undefined, columns: number): readonly string[];
|
|
18
|
+
/**
|
|
19
|
+
* The pending margin statement: the not-yet-happened requirements a refused placement awaits. A gate in stale
|
|
20
|
+
* state awaits the same event; when every unmet gate already holds a recorded verdict there is nothing pending and
|
|
21
|
+
* the line is omitted.
|
|
22
|
+
*/
|
|
23
|
+
export declare function gatesAwaitLines(placement: VerificationStop | PlacementStop | undefined): readonly string[];
|
|
18
24
|
export declare function stopLines(stop: VerificationStop | PlacementStop, columns: number, addressed: string, dependent?: string): readonly string[];
|
|
19
25
|
export declare function cleanupLines(cleanup: Extract<ExecutionCleanup, {
|
|
20
26
|
kind: "verification-cleanup";
|
|
@@ -27,5 +33,5 @@ export declare function seatCloseLines(seatClose: readonly Extract<ExecutionClea
|
|
|
27
33
|
}>["failure"][], columns: number): readonly string[];
|
|
28
34
|
export declare function executionStopLines(stops: readonly ExecutionStop[], columns: number): readonly string[];
|
|
29
35
|
export declare function executionCleanupLines(cleanup: readonly ExecutionCleanup[], columns: number, primary?: string): readonly string[];
|
|
30
|
-
export declare function executionFailureLines(receipt:
|
|
36
|
+
export declare function executionFailureLines(receipt: PartialOutcomeEnvelope, category: string, diagnostic: string, columns: number): readonly string[];
|
|
31
37
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { renderRefusalFacts } from "./refusal.js";
|
|
2
|
-
import { displayColumns, renderOpaqueBlock, safeText, quotedText } from "./terminal.js";
|
|
2
|
+
import { DEFAULT_CLI_COLUMNS, displayColumns, orderRefusalFacts, renderOpaqueBlock, safeText, quotedText, } from "./terminal.js";
|
|
3
3
|
export function receiptRow(lines, mark, label, segments, columns) {
|
|
4
4
|
const prefix = mark.trim().length === 0 ? " " : `${mark} `;
|
|
5
5
|
let current = `${prefix}${label}`;
|
|
@@ -21,9 +21,9 @@ export function receiptRow(lines, mark, label, segments, columns) {
|
|
|
21
21
|
lines.push(current);
|
|
22
22
|
}
|
|
23
23
|
export function receiptPayload(lines, label, payload) {
|
|
24
|
-
lines.push(label
|
|
24
|
+
lines.push(` ${label.trim()}`, ...renderOpaqueBlock(payload, " ", DEFAULT_CLI_COLUMNS), "");
|
|
25
25
|
}
|
|
26
|
-
export function outcomeLines(mark, verb, word, contract, columns =
|
|
26
|
+
export function outcomeLines(mark, verb, word, contract, columns = DEFAULT_CLI_COLUMNS) {
|
|
27
27
|
const base = `${mark} ${verb} ${word}`;
|
|
28
28
|
if (contract === undefined)
|
|
29
29
|
return [base];
|
|
@@ -32,7 +32,15 @@ export function outcomeLines(mark, verb, word, contract, columns = 80) {
|
|
|
32
32
|
return [inline];
|
|
33
33
|
return [`${base}`, ` contract ${safeText(contract)}`];
|
|
34
34
|
}
|
|
35
|
-
export function
|
|
35
|
+
export function refusalLines(verb, facts, columns = DEFAULT_CLI_COLUMNS, trailingFacts = []) {
|
|
36
|
+
const lines = [
|
|
37
|
+
...outcomeLines("×", verb, "refused", undefined, columns),
|
|
38
|
+
...orderRefusalFacts(facts).map((fact) => ` ${fact}`),
|
|
39
|
+
...trailingFacts,
|
|
40
|
+
];
|
|
41
|
+
return lines;
|
|
42
|
+
}
|
|
43
|
+
export function titleLines(mark, title, contract, columns = DEFAULT_CLI_COLUMNS) {
|
|
36
44
|
const base = `${mark} ${title}`;
|
|
37
45
|
const inline = `${base} ${contract}`;
|
|
38
46
|
if (displayColumns(inline) <= columns)
|
|
@@ -48,10 +56,10 @@ export function hookFailureSummary(failure) {
|
|
|
48
56
|
}
|
|
49
57
|
export function appendHookPayload(lines, failure) {
|
|
50
58
|
if (failure.kind === "spawn-error")
|
|
51
|
-
receiptPayload(lines, "
|
|
59
|
+
receiptPayload(lines, "reason", failure.diagnostic);
|
|
52
60
|
if (!("stdout" in failure))
|
|
53
61
|
return;
|
|
54
|
-
if (failure.stdout.length > 0)
|
|
62
|
+
if (failure.stdout !== undefined && failure.stdout.length > 0)
|
|
55
63
|
receiptPayload(lines, "stdout", failure.stdout);
|
|
56
64
|
if (failure.stderr !== undefined && failure.stderr.length > 0)
|
|
57
65
|
receiptPayload(lines, "stderr", failure.stderr);
|
|
@@ -59,7 +67,7 @@ export function appendHookPayload(lines, failure) {
|
|
|
59
67
|
export function reuseLines(reuse, columns) {
|
|
60
68
|
if (reuse === undefined)
|
|
61
69
|
return [];
|
|
62
|
-
return renderOpaqueBlock(`reuse verified · ${reuse.verdict}
|
|
70
|
+
return renderOpaqueBlock(`reuse verified · ${reuse.verdict}`, " ", columns);
|
|
63
71
|
}
|
|
64
72
|
function prerequisiteRows(stop, columns) {
|
|
65
73
|
if (!("refusal" in stop) || stop.refusal?.kind !== "prerequisites-unsatisfied")
|
|
@@ -70,26 +78,44 @@ function prerequisiteRows(stop, columns) {
|
|
|
70
78
|
}
|
|
71
79
|
return lines;
|
|
72
80
|
}
|
|
73
|
-
|
|
81
|
+
/** Requirement names speak as plain event nouns; the "gate" class word never prints on a receipt. */
|
|
82
|
+
function eventNoun(gate) {
|
|
83
|
+
if (gate === "reviewed")
|
|
84
|
+
return "review";
|
|
85
|
+
if (gate === "verified")
|
|
86
|
+
return "verification";
|
|
87
|
+
return gate;
|
|
88
|
+
}
|
|
89
|
+
/** Only a recorded unsatisfied verdict alarms; missing and stale requirements fold into the await line. */
|
|
90
|
+
function gateAlarmRows(stop, columns) {
|
|
74
91
|
if (!("refusal" in stop) || stop.refusal?.kind !== "gates-unsatisfied")
|
|
75
92
|
return [];
|
|
76
93
|
const lines = [];
|
|
77
94
|
for (const report of stop.refusal.unmet) {
|
|
78
95
|
const { gate, current } = report;
|
|
79
|
-
if (current.kind
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
else if (current.kind === "stale") {
|
|
85
|
-
receiptRow(lines, " ", "gate", [{ text: gate, opaque: true }, { text: "· stale" }, { text: `· prior ${current.priorVerdict}` }], columns);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
receiptRow(lines, " ", "gate", [{ text: gate, opaque: true }, { text: "· missing" }], columns);
|
|
89
|
-
}
|
|
96
|
+
if (current.kind !== "attested")
|
|
97
|
+
continue;
|
|
98
|
+
receiptRow(lines, "!", eventNoun(gate), [{ text: `· ${current.verdict}` }, { text: `· at ${current.at}` }], columns);
|
|
99
|
+
if (current.summary !== undefined)
|
|
100
|
+
receiptPayload(lines, ` summary ${gate}`, current.summary);
|
|
90
101
|
}
|
|
91
102
|
return lines;
|
|
92
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* The pending margin statement: the not-yet-happened requirements a refused placement awaits. A gate in stale
|
|
106
|
+
* state awaits the same event; when every unmet gate already holds a recorded verdict there is nothing pending and
|
|
107
|
+
* the line is omitted.
|
|
108
|
+
*/
|
|
109
|
+
export function gatesAwaitLines(placement) {
|
|
110
|
+
if (placement === undefined || !("refusal" in placement) || placement.refusal?.kind !== "gates-unsatisfied")
|
|
111
|
+
return [];
|
|
112
|
+
const events = placement.refusal.unmet
|
|
113
|
+
.filter((report) => report.current.kind !== "attested")
|
|
114
|
+
.map((report) => eventNoun(report.gate));
|
|
115
|
+
if (events.length === 0)
|
|
116
|
+
return [];
|
|
117
|
+
return [`⧗ awaiting ${events.length > 3 ? `${events.length} gates` : events.join(", ")}`];
|
|
118
|
+
}
|
|
93
119
|
function targetMovedDetail(stop) {
|
|
94
120
|
if ("integratedAt" in stop) {
|
|
95
121
|
return [
|
|
@@ -106,16 +132,15 @@ function targetMovedDetail(stop) {
|
|
|
106
132
|
];
|
|
107
133
|
}
|
|
108
134
|
function directStopName(stop) {
|
|
109
|
-
if ("refusal" in stop
|
|
135
|
+
if ("refusal" in stop)
|
|
110
136
|
return stop.refusal.kind.replaceAll("-", " ");
|
|
111
|
-
if ("retry" in stop
|
|
137
|
+
if ("retry" in stop)
|
|
112
138
|
return stop.retry.kind.replaceAll("-", " ");
|
|
113
139
|
return stop.failure.replaceAll("-", " ");
|
|
114
140
|
}
|
|
115
141
|
function refusalEvidence(stop, columns) {
|
|
116
142
|
const lines = [];
|
|
117
143
|
lines.push(...prerequisiteRows(stop, columns));
|
|
118
|
-
lines.push(...gateRows(stop, columns));
|
|
119
144
|
if (!("refusal" in stop) || stop.refusal === undefined)
|
|
120
145
|
return lines;
|
|
121
146
|
const refusal = stop.refusal;
|
|
@@ -142,15 +167,51 @@ function refusalEvidence(stop, columns) {
|
|
|
142
167
|
}
|
|
143
168
|
return lines;
|
|
144
169
|
}
|
|
145
|
-
|
|
146
|
-
if ("refusal" in stop
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
170
|
+
function checkoutNotFollowableStopLines(stop, columns, addressed, dependent) {
|
|
171
|
+
if (!("refusal" in stop) || stop.refusal?.kind !== "checkout-not-followable")
|
|
172
|
+
return undefined;
|
|
173
|
+
const checkout = renderRefusalFacts(stop.refusal, "", columns, addressed);
|
|
174
|
+
if (dependent === undefined)
|
|
175
|
+
return checkout;
|
|
176
|
+
const lines = [];
|
|
177
|
+
receiptRow(lines, "!", "dependent", [{ text: dependent, opaque: true }], columns);
|
|
178
|
+
return [...lines, ...checkout];
|
|
179
|
+
}
|
|
180
|
+
function targetPlacementFailedStopLines(stop, columns, dependent) {
|
|
181
|
+
if (!("failure" in stop) || stop.failure !== "target-placement-failed")
|
|
182
|
+
return undefined;
|
|
183
|
+
const lines = [];
|
|
184
|
+
receiptRow(lines, "×", "not accepted", dependent === undefined ? [] : [{ text: dependent, opaque: true }], columns);
|
|
185
|
+
receiptPayload(lines, "reason", stop.diagnostic);
|
|
186
|
+
return lines;
|
|
187
|
+
}
|
|
188
|
+
function retryStopLines(stop, columns, dependent) {
|
|
189
|
+
if (!("retry" in stop) || stop.retry === undefined)
|
|
190
|
+
return undefined;
|
|
191
|
+
const lines = [];
|
|
192
|
+
const segments = [{ text: stop.retry.kind.replaceAll("-", " ") }];
|
|
193
|
+
if (dependent !== undefined)
|
|
194
|
+
segments.push({ text: "·" }, { text: dependent, opaque: true });
|
|
195
|
+
receiptRow(lines, "?", "retry", segments, columns);
|
|
196
|
+
if (stop.retry.kind === "publication-failed")
|
|
197
|
+
receiptPayload(lines, "reason", stop.retry.diagnostic);
|
|
198
|
+
return lines;
|
|
199
|
+
}
|
|
200
|
+
function gatesUnsatisfiedStopLines(stop, columns, dependent) {
|
|
201
|
+
if (!("refusal" in stop) || stop.refusal?.kind !== "gates-unsatisfied")
|
|
202
|
+
return undefined;
|
|
203
|
+
// The refused placement never prints its refusal kind: the per-gate alarms and the target's non-movement
|
|
204
|
+
// carry the story, and the caller closes the receipt with the awaiting margin line.
|
|
205
|
+
const lines = [];
|
|
206
|
+
const target = stop.refusal.target;
|
|
207
|
+
if (dependent !== undefined)
|
|
208
|
+
receiptRow(lines, "⧗", dependent, [{ text: "·" }, { text: "gates unmet" }], columns);
|
|
209
|
+
else if (target !== undefined)
|
|
210
|
+
receiptRow(lines, " ", "target", [{ text: target, opaque: true }, { text: "· unchanged" }], columns);
|
|
211
|
+
lines.push(...gateAlarmRows(stop, columns));
|
|
212
|
+
return lines;
|
|
213
|
+
}
|
|
214
|
+
function directStopLines(stop, columns, dependent) {
|
|
154
215
|
const lines = [];
|
|
155
216
|
const segments = dependent === undefined ? [] : [{ text: "·" }, { text: directStopName(stop) }];
|
|
156
217
|
if ("failure" in stop && stop.failure === "target-moved")
|
|
@@ -163,14 +224,18 @@ export function stopLines(stop, columns, addressed, dependent) {
|
|
|
163
224
|
if ("failure" in stop && stop.failure === "environment-failure" && "name" in stop) {
|
|
164
225
|
appendHookPayload(lines, stop.detail);
|
|
165
226
|
}
|
|
166
|
-
if ("
|
|
167
|
-
receiptPayload(lines, "
|
|
168
|
-
}
|
|
169
|
-
else if ("failure" in stop && "diagnostic" in stop) {
|
|
170
|
-
receiptPayload(lines, "diagnostic", stop.diagnostic);
|
|
227
|
+
if ("failure" in stop && "diagnostic" in stop) {
|
|
228
|
+
receiptPayload(lines, "reason", stop.diagnostic);
|
|
171
229
|
}
|
|
172
230
|
return lines;
|
|
173
231
|
}
|
|
232
|
+
export function stopLines(stop, columns, addressed, dependent) {
|
|
233
|
+
return (checkoutNotFollowableStopLines(stop, columns, addressed, dependent) ??
|
|
234
|
+
targetPlacementFailedStopLines(stop, columns, dependent) ??
|
|
235
|
+
retryStopLines(stop, columns, dependent) ??
|
|
236
|
+
gatesUnsatisfiedStopLines(stop, columns, dependent) ??
|
|
237
|
+
directStopLines(stop, columns, dependent));
|
|
238
|
+
}
|
|
174
239
|
export function cleanupLines(cleanup, columns) {
|
|
175
240
|
const lines = [];
|
|
176
241
|
receiptRow(lines, "!", "cleanup", [
|
|
@@ -183,23 +248,23 @@ export function cleanupLines(cleanup, columns) {
|
|
|
183
248
|
}
|
|
184
249
|
export function leakLines(leak, columns) {
|
|
185
250
|
const lines = [];
|
|
186
|
-
receiptRow(lines, "
|
|
187
|
-
receiptPayload(lines, "
|
|
251
|
+
receiptRow(lines, " ", "verification scratch kept at", [{ text: leak.path, opaque: true }], columns);
|
|
252
|
+
receiptPayload(lines, "reason", leak.diagnostic);
|
|
188
253
|
return lines;
|
|
189
254
|
}
|
|
190
255
|
export function seatCloseLines(seatClose, columns) {
|
|
191
256
|
const lines = [];
|
|
192
257
|
for (const lag of seatClose) {
|
|
193
258
|
receiptRow(lines, "!", "lag", [{ text: lag.kind }], columns);
|
|
194
|
-
receiptPayload(lines, "
|
|
259
|
+
receiptPayload(lines, "reason", lag.diagnostic);
|
|
195
260
|
}
|
|
196
261
|
return lines;
|
|
197
262
|
}
|
|
198
263
|
export function executionStopLines(stops, columns) {
|
|
199
264
|
const lines = [];
|
|
200
265
|
for (const stop of stops) {
|
|
201
|
-
receiptRow(lines, "!",
|
|
202
|
-
receiptPayload(lines, "
|
|
266
|
+
receiptRow(lines, "!", "execution", [{ text: stop.reason }, { text: stop.contractId, opaque: true }], columns);
|
|
267
|
+
receiptPayload(lines, "reason", stop.diagnostic);
|
|
203
268
|
}
|
|
204
269
|
return lines;
|
|
205
270
|
}
|
|
@@ -214,17 +279,32 @@ export function executionCleanupLines(cleanup, columns, primary) {
|
|
|
214
279
|
lines.push(...cleanupLines(issue.failure, columns));
|
|
215
280
|
else if (issue.kind === "worktree-leak")
|
|
216
281
|
lines.push(...leakLines(issue.leak, columns));
|
|
282
|
+
else if (issue.kind === "decode-channel-retirement")
|
|
283
|
+
receiptPayload(lines, "cleanup", issue.diagnostic);
|
|
217
284
|
else
|
|
218
285
|
lines.push(...seatCloseLines([issue.failure], columns));
|
|
219
286
|
}
|
|
220
287
|
return lines;
|
|
221
288
|
}
|
|
222
289
|
export function executionFailureLines(receipt, category, diagnostic, columns) {
|
|
290
|
+
const contract = "contract" in receipt ? receipt.contract : undefined;
|
|
291
|
+
const stops = [];
|
|
292
|
+
const cleanup = [];
|
|
293
|
+
for (const effect of receipt.effects) {
|
|
294
|
+
if (effect.kind === "execution-stopped")
|
|
295
|
+
stops.push({
|
|
296
|
+
kind: "execution-stopped",
|
|
297
|
+
contractId: effect.contract,
|
|
298
|
+
stage: effect.stage,
|
|
299
|
+
reason: effect.reason,
|
|
300
|
+
diagnostic: effect.diagnostic,
|
|
301
|
+
});
|
|
302
|
+
else if (effect.kind === "cleanup")
|
|
303
|
+
cleanup.push(effect.issue);
|
|
304
|
+
}
|
|
223
305
|
const lines = [];
|
|
224
|
-
receiptRow(lines, "!", "execution failed after admission", [{ text: category }, { text:
|
|
225
|
-
receiptPayload(lines, "
|
|
226
|
-
|
|
227
|
-
receiptRow(lines, " ", "journal", [{ text: fact.contract, opaque: true }, { text: fact.entry, opaque: true }, { text: fact.kind }], columns);
|
|
228
|
-
lines.push(...executionStopLines(receipt.executionStops, columns), ...executionCleanupLines(receipt.cleanup, columns, receipt.contractId));
|
|
306
|
+
receiptRow(lines, "!", "execution failed after admission", [{ text: category }, ...(contract === undefined ? [] : [{ text: contract, opaque: true }])], columns);
|
|
307
|
+
receiptPayload(lines, "reason", diagnostic);
|
|
308
|
+
lines.push(...executionStopLines(stops, columns), ...executionCleanupLines(cleanup, columns, contract));
|
|
229
309
|
return lines;
|
|
230
310
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ReconcileReport } from "../../library/reconcile.js";
|
|
2
|
+
import { type RepoReconcileReport } from "../../library/reconcile.js";
|
|
3
|
+
import { type TextRenderContext } from "./terminal.js";
|
|
4
|
+
export declare function reconcileHasFailure(report: ReconcileReport | RepoReconcileReport): boolean;
|
|
5
|
+
export declare function renderReconcile(report: ReconcileReport | RepoReconcileReport, context?: TextRenderContext): string;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { reconcileLagIsFailure } from "../../library/reconcile.js";
|
|
2
|
+
import { abbreviateGitIds, displayGitId } from "./contract-observation.js";
|
|
3
|
+
import { receiptPayload, receiptRow } from "./receipt.js";
|
|
4
|
+
import { DEFAULT_CLI_COLUMNS } from "./terminal.js";
|
|
5
|
+
function effectText(effect) {
|
|
6
|
+
if (effect.action === "unchanged")
|
|
7
|
+
return null;
|
|
8
|
+
const ids = effect.kind === "ref"
|
|
9
|
+
? [effect.before ?? "", effect.after ?? ""]
|
|
10
|
+
: effect.kind === "worktree" && effect.action === "followed"
|
|
11
|
+
? [effect.before, effect.after]
|
|
12
|
+
: effect.kind === "recovery-snapshot"
|
|
13
|
+
? [effect.snapshot]
|
|
14
|
+
: [];
|
|
15
|
+
const abbreviations = abbreviateGitIds(ids);
|
|
16
|
+
const state = effect.kind === "ref"
|
|
17
|
+
? `${effect.action}${effect.before === null ? "" : ` · ${displayGitId(effect.before, abbreviations)}`}${effect.after === null ? "" : ` → ${displayGitId(effect.after, abbreviations)}`}`
|
|
18
|
+
: effect.kind === "worktree" && effect.action === "followed"
|
|
19
|
+
? `followed · ${displayGitId(effect.before, abbreviations)} → ${displayGitId(effect.after, abbreviations)}`
|
|
20
|
+
: effect.action;
|
|
21
|
+
const path = effect.kind === "ref"
|
|
22
|
+
? effect.name
|
|
23
|
+
: effect.kind === "recovery-snapshot"
|
|
24
|
+
? displayGitId(effect.snapshot, abbreviations)
|
|
25
|
+
: effect.path;
|
|
26
|
+
return [effect.kind, state, path];
|
|
27
|
+
}
|
|
28
|
+
function worktreeHookLagRows(lines, lag, columns, contract) {
|
|
29
|
+
receiptRow(lines, "!", "reconcile", [
|
|
30
|
+
...(contract === undefined ? [] : [{ text: contract, opaque: true }]),
|
|
31
|
+
{ text: "hook", opaque: true },
|
|
32
|
+
{ text: lag.phase, opaque: true },
|
|
33
|
+
{ text: lag.path, opaque: true },
|
|
34
|
+
{ text: lag.name, opaque: true },
|
|
35
|
+
{ text: `command ${lag.command}`, opaque: true },
|
|
36
|
+
{ text: lag.failure.kind === "exit" ? `exit ${lag.failure.code}` : lag.failure.kind, opaque: true },
|
|
37
|
+
], columns);
|
|
38
|
+
const output = "stdout" in lag.failure ? lag.failure.stdout : undefined;
|
|
39
|
+
const error = "stderr" in lag.failure ? lag.failure.stderr : undefined;
|
|
40
|
+
if (lag.failure.kind === "spawn-error") {
|
|
41
|
+
receiptRow(lines, "!", "reason", [{ text: lag.failure.diagnostic, opaque: true }], columns);
|
|
42
|
+
}
|
|
43
|
+
if (output !== undefined && output.length > 0)
|
|
44
|
+
receiptPayload(lines, "stdout", output);
|
|
45
|
+
if (error !== undefined && error.length > 0)
|
|
46
|
+
receiptPayload(lines, "stderr", error);
|
|
47
|
+
}
|
|
48
|
+
function lagRow(lines, lag, columns, contract) {
|
|
49
|
+
switch (lag.kind) {
|
|
50
|
+
case "worktree-hook-failed":
|
|
51
|
+
worktreeHookLagRows(lines, lag, columns, contract);
|
|
52
|
+
break;
|
|
53
|
+
case "reconcile-failed":
|
|
54
|
+
receiptRow(lines, "!", "reconcile", [
|
|
55
|
+
...(contract === undefined ? [] : [{ text: contract, opaque: true }]),
|
|
56
|
+
{ text: lag.stage, opaque: true },
|
|
57
|
+
{ text: lag.diagnostic, opaque: true },
|
|
58
|
+
], columns);
|
|
59
|
+
break;
|
|
60
|
+
case "worktree-retained":
|
|
61
|
+
receiptRow(lines, " ", "worktree retained at", [{ text: lag.path, opaque: true }], columns);
|
|
62
|
+
if (lag.diagnostic !== undefined)
|
|
63
|
+
receiptRow(lines, " ", "reason", [{ text: lag.diagnostic, opaque: true }], columns);
|
|
64
|
+
break;
|
|
65
|
+
case "worktree-follow-retained":
|
|
66
|
+
receiptRow(lines, " ", "worktree follow kept at", [{ text: lag.path, opaque: true }, { text: `· ${lag.reason.replaceAll("-", " ")}` }], columns);
|
|
67
|
+
break;
|
|
68
|
+
case "unsealed-bytes":
|
|
69
|
+
receiptRow(lines, " ", "unsealed bytes kept at", [{ text: lag.path, opaque: true }], columns);
|
|
70
|
+
break;
|
|
71
|
+
case "target-checkout-retained":
|
|
72
|
+
receiptRow(lines, "!", "target checkout kept at", [
|
|
73
|
+
{ text: lag.path, opaque: true },
|
|
74
|
+
{ text: `· ${lag.target}`, opaque: true },
|
|
75
|
+
], columns);
|
|
76
|
+
receiptRow(lines, " ", "reason", [{ text: lag.diagnostic, opaque: true }], columns);
|
|
77
|
+
break;
|
|
78
|
+
case "contract-file-failed":
|
|
79
|
+
receiptRow(lines, "!", "contract file unavailable", [
|
|
80
|
+
{ text: lag.worktree, opaque: true },
|
|
81
|
+
{ text: `· ${lag.path}`, opaque: true },
|
|
82
|
+
], columns);
|
|
83
|
+
receiptRow(lines, " ", "reason", [{ text: lag.diagnostic, opaque: true }], columns);
|
|
84
|
+
break;
|
|
85
|
+
default: {
|
|
86
|
+
const exhaustive = lag;
|
|
87
|
+
return exhaustive;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function appendReport(lines, report, columns, seen, contract) {
|
|
92
|
+
for (const effect of report.effects) {
|
|
93
|
+
const parts = effectText(effect);
|
|
94
|
+
if (parts === null)
|
|
95
|
+
continue;
|
|
96
|
+
const key = JSON.stringify([contract, effect]);
|
|
97
|
+
if (seen.has(key))
|
|
98
|
+
continue;
|
|
99
|
+
seen.add(key);
|
|
100
|
+
receiptRow(lines, " ", "effect", parts.map((text) => ({ text, opaque: true })), columns);
|
|
101
|
+
}
|
|
102
|
+
for (const lag of report.lag)
|
|
103
|
+
lagRow(lines, lag, columns, contract);
|
|
104
|
+
for (const action of report.settlement?.actions ?? []) {
|
|
105
|
+
receiptRow(lines, " ", "settlement", [{ text: action.kind, opaque: true }], columns);
|
|
106
|
+
}
|
|
107
|
+
for (const lag of report.settlement?.lags ?? []) {
|
|
108
|
+
receiptRow(lines, "!", "settlement", Object.entries(lag)
|
|
109
|
+
.filter(([key]) => key !== "kind")
|
|
110
|
+
.map(([key, value]) => ({ text: `${key} ${String(value)}`, opaque: true })), columns);
|
|
111
|
+
}
|
|
112
|
+
for (const failure of report.settlement?.seatClose ?? []) {
|
|
113
|
+
receiptRow(lines, "!", "settlement", [{ text: failure.kind, opaque: true }], columns);
|
|
114
|
+
receiptRow(lines, "!", "reason", [{ text: failure.diagnostic, opaque: true }], columns);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function isRepoReport(report) {
|
|
118
|
+
return "kind" in report && (report.kind === "completed" || report.kind === "world-observation-failed");
|
|
119
|
+
}
|
|
120
|
+
export function reconcileHasFailure(report) {
|
|
121
|
+
if (isRepoReport(report)) {
|
|
122
|
+
if (report.kind === "world-observation-failed")
|
|
123
|
+
return true;
|
|
124
|
+
const completed = report;
|
|
125
|
+
return completed.contracts.some((item) => {
|
|
126
|
+
return (item.report.lag.some((lag) => reconcileLagIsFailure(lag)) ||
|
|
127
|
+
item.report.settlement.lags.length > 0 ||
|
|
128
|
+
(item.report.settlement.seatClose?.length ?? 0) > 0);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
return (report.lag.some((lag) => reconcileLagIsFailure(lag)) ||
|
|
132
|
+
(report.settlement?.lags.length ?? 0) > 0 ||
|
|
133
|
+
(report.settlement?.seatClose?.length ?? 0) > 0);
|
|
134
|
+
}
|
|
135
|
+
export function renderReconcile(report, context) {
|
|
136
|
+
const columns = context?.columns ?? DEFAULT_CLI_COLUMNS;
|
|
137
|
+
const lines = ["✓ reconcile"];
|
|
138
|
+
const seen = new Set();
|
|
139
|
+
if (isRepoReport(report)) {
|
|
140
|
+
if (report.kind === "world-observation-failed") {
|
|
141
|
+
receiptRow(lines, "!", "reconcile", [{ text: report.diagnostic, opaque: true }], columns);
|
|
142
|
+
return lines.join("\n");
|
|
143
|
+
}
|
|
144
|
+
for (const item of report.contracts)
|
|
145
|
+
appendReport(lines, item.report, columns, seen, item.contractId);
|
|
146
|
+
}
|
|
147
|
+
else
|
|
148
|
+
appendReport(lines, report, columns, seen);
|
|
149
|
+
if (lines.length === 1)
|
|
150
|
+
lines.push(" already consistent");
|
|
151
|
+
return lines.join("\n");
|
|
152
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { BindDraftReceipt
|
|
2
|
-
import
|
|
1
|
+
import type { BindDraftReceipt } from "../draft.js";
|
|
2
|
+
import { type CliUsageGuide } from "../usage.js";
|
|
3
|
+
import type { ContractId, IntegrationConflictMaterialized, KeiyakuRefusal } from "../../index.js";
|
|
3
4
|
import { type TextRenderContext } from "./terminal.js";
|
|
4
5
|
type DirtyWithOption = Extract<KeiyakuRefusal, {
|
|
5
6
|
kind: "dirty-workspace";
|
|
@@ -9,9 +10,25 @@ type DirtyWithOption = Extract<KeiyakuRefusal, {
|
|
|
9
10
|
available: boolean;
|
|
10
11
|
}>;
|
|
11
12
|
};
|
|
12
|
-
|
|
13
|
+
/** Edge acquisition refusals the CLI owns; they never come from the SDK. */
|
|
14
|
+
type CliEdgeRefusal = Readonly<{
|
|
15
|
+
kind: "invalid-document";
|
|
16
|
+
diagnostic: string;
|
|
17
|
+
}>;
|
|
18
|
+
export type RenderableRefusal = KeiyakuRefusal | DirtyWithOption | CliEdgeRefusal;
|
|
13
19
|
export declare function renderRefusalFacts(refusal: RenderableRefusal, indent: string, columns: number, addressed?: string): readonly string[];
|
|
14
|
-
|
|
20
|
+
/**
|
|
21
|
+
* The one refusal receipt assembly: a denied-verdict title, a labeled reason, labeled facts, and the
|
|
22
|
+
* applicable acceptance grammar. Typed refusals and bare command refusals both render through here.
|
|
23
|
+
*/
|
|
24
|
+
export declare function renderStructuredRefusal(verb: string, reason: string, facts?: readonly string[], guide?: CliUsageGuide): string;
|
|
25
|
+
/** One native refusal plus the CLI's own presentation identity; the draft belongs only to edge bind. */
|
|
26
|
+
type RefusedInvocation = Readonly<{
|
|
27
|
+
operation: string;
|
|
28
|
+
contract?: ContractId;
|
|
29
|
+
refusal: RenderableRefusal;
|
|
30
|
+
}>;
|
|
31
|
+
export declare function renderRefusal(refused: RefusedInvocation, draft?: BindDraftReceipt, context?: TextRenderContext): string;
|
|
15
32
|
export declare function renderConflictMaterialized(result: IntegrationConflictMaterialized, _context?: TextRenderContext): string;
|
|
16
33
|
export declare function renderBindDraftReceipt(receipt: BindDraftReceipt): string;
|
|
17
34
|
export {};
|