@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,5 +1,12 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AbandonOutcome, AmendOutcome, ArcOutcome, AuditOutcome, BindOutcome, DeliverOutcome, ReviewOutcome } from "../../index.js";
|
|
2
2
|
import { type TextRenderContext } from "./terminal.js";
|
|
3
|
-
export
|
|
4
|
-
export
|
|
3
|
+
export type ContractOutcome = BindOutcome | AmendOutcome | DeliverOutcome | ReviewOutcome | AuditOutcome | ArcOutcome | AbandonOutcome;
|
|
4
|
+
export type AcceptedContractOutcome = Extract<ContractOutcome, {
|
|
5
|
+
kind: "accepted";
|
|
6
|
+
}>;
|
|
7
|
+
type RetryContractOutcome = Extract<ContractOutcome, {
|
|
8
|
+
kind: "retry";
|
|
9
|
+
}>;
|
|
10
|
+
export declare function renderAccepted(result: AcceptedContractOutcome, context?: TextRenderContext): string;
|
|
11
|
+
export declare function renderRetry(result: RetryContractOutcome, context?: TextRenderContext): string;
|
|
5
12
|
export { renderContractHistory } from "./contract-history.js";
|
|
@@ -1,16 +1,43 @@
|
|
|
1
|
+
import { effectCleanup, effectExecutionStops, effectLags, effectRecoverySnapshot, effectRetainedCheckouts, effectRetainedWorktrees, effectRetiredWorktrees, effectSettlementLags, } from "./effects.js";
|
|
1
2
|
import { renderAcceptedAudit } from "./audit.js";
|
|
2
|
-
import { appendHookPayload, executionCleanupLines, executionStopLines, hookFailureSummary, outcomeLines, receiptPayload, receiptRow, reuseLines, stopLines, titleLines, } from "./receipt.js";
|
|
3
|
+
import { appendHookPayload, executionCleanupLines, executionStopLines, gatesAwaitLines, hookFailureSummary, outcomeLines, receiptPayload, receiptRow, reuseLines, stopLines, titleLines, } from "./receipt.js";
|
|
4
|
+
import { abbreviateGitIds, displayGitId, lifecycleWord } from "./contract-observation.js";
|
|
5
|
+
import { renderDiffstat } from "./akuma-tool.js";
|
|
3
6
|
import { DEFAULT_CLI_COLUMNS, renderOpaqueBlock, safeText, tone } from "./terminal.js";
|
|
4
7
|
const HANG = " ";
|
|
5
|
-
function
|
|
6
|
-
|
|
8
|
+
function attestationVerdict(facts) {
|
|
9
|
+
const attestation = facts.findLast((fact) => fact.kind === "attestation" && fact.data.gate === "reviewed");
|
|
10
|
+
if (attestation === undefined)
|
|
11
|
+
throw new Error("accepted review is missing its reviewed attestation");
|
|
12
|
+
return attestation.data.verdict;
|
|
13
|
+
}
|
|
14
|
+
function bindTarget(facts) {
|
|
15
|
+
return facts.findLast((fact) => fact.kind === "bind")?.data.coordinates.target ?? null;
|
|
16
|
+
}
|
|
17
|
+
function arcChapter(facts) {
|
|
18
|
+
const arc = facts.findLast((fact) => fact.kind === "arc");
|
|
19
|
+
if (arc === undefined)
|
|
20
|
+
throw new Error("accepted arc is missing its arc fact");
|
|
21
|
+
return { seq: arc.data.seq, title: arc.data.title };
|
|
22
|
+
}
|
|
23
|
+
function abandonedNote(facts) {
|
|
24
|
+
return facts.findLast((fact) => fact.kind === "abandoned")?.data.note;
|
|
7
25
|
}
|
|
8
26
|
function retryLines(detail, indent, columns) {
|
|
9
27
|
if (detail.kind === "publication-failed") {
|
|
10
|
-
return [...renderOpaqueBlock("publication-failed", indent, columns), ...["
|
|
28
|
+
return [...renderOpaqueBlock("publication-failed", indent, columns), ...["reason", "", detail.diagnostic, ""]];
|
|
11
29
|
}
|
|
12
30
|
return renderOpaqueBlock(detail.kind, indent, columns);
|
|
13
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* The one word for a checkout git could not carry to the landed head: `behind` is git's own name for
|
|
34
|
+
* that state, and the raw result kind never prints on a receipt.
|
|
35
|
+
*/
|
|
36
|
+
function checkoutBehindRows(path, target, columns) {
|
|
37
|
+
const lines = [];
|
|
38
|
+
receiptRow(lines, "!", "lag", [{ text: "checkout behind" }, { text: path, opaque: true }, { text: `· ${target}`, opaque: true }], columns);
|
|
39
|
+
return lines;
|
|
40
|
+
}
|
|
14
41
|
function lagRows(lag, columns) {
|
|
15
42
|
const lines = [];
|
|
16
43
|
if (lag.kind === "worktree-retained") {
|
|
@@ -29,8 +56,8 @@ function lagRows(lag, columns) {
|
|
|
29
56
|
receiptRow(lines, "!", "lag", [{ text: "unsealed bytes" }, { text: lag.path, opaque: true }], columns);
|
|
30
57
|
}
|
|
31
58
|
else if (lag.kind === "target-checkout-retained") {
|
|
32
|
-
|
|
33
|
-
receiptPayload(lines, "
|
|
59
|
+
pushBlock(lines, checkoutBehindRows(lag.path, lag.target, columns));
|
|
60
|
+
receiptPayload(lines, "reason", lag.diagnostic);
|
|
34
61
|
}
|
|
35
62
|
else if (lag.kind === "worktree-hook-failed") {
|
|
36
63
|
receiptRow(lines, "!", "lag", [
|
|
@@ -43,11 +70,11 @@ function lagRows(lag, columns) {
|
|
|
43
70
|
}
|
|
44
71
|
else if (lag.kind === "contract-file-failed") {
|
|
45
72
|
receiptRow(lines, "!", "lag", [{ text: `contract-file-failed ${lag.worktree} ${lag.path}`, opaque: true }], columns);
|
|
46
|
-
receiptPayload(lines, "
|
|
73
|
+
receiptPayload(lines, "reason", lag.diagnostic);
|
|
47
74
|
}
|
|
48
75
|
else {
|
|
49
76
|
receiptRow(lines, "!", "lag", [{ text: `reconcile-failed ${lag.stage}`, opaque: true }], columns);
|
|
50
|
-
receiptPayload(lines, "
|
|
77
|
+
receiptPayload(lines, "reason", lag.diagnostic);
|
|
51
78
|
}
|
|
52
79
|
return lines;
|
|
53
80
|
}
|
|
@@ -58,39 +85,71 @@ function settlementLagRows(lag, columns) {
|
|
|
58
85
|
receiptRow(lines, " ", "task", [{ text: lag.taskId, opaque: true }], columns);
|
|
59
86
|
if (lag.path !== undefined)
|
|
60
87
|
receiptRow(lines, " ", "path", [{ text: lag.path, opaque: true }], columns);
|
|
61
|
-
receiptPayload(lines, "
|
|
88
|
+
receiptPayload(lines, "reason", lag.diagnostic);
|
|
62
89
|
return lines;
|
|
63
90
|
}
|
|
91
|
+
function overlapGroup(patterns) {
|
|
92
|
+
const identical = [];
|
|
93
|
+
const identicalSeen = new Set();
|
|
94
|
+
const contained = new Map();
|
|
95
|
+
const intersections = [];
|
|
96
|
+
const intersectionSeen = new Set();
|
|
97
|
+
for (const pattern of patterns) {
|
|
98
|
+
if (pattern.relation === "same" || (pattern.relation === undefined && pattern.mine === pattern.theirs)) {
|
|
99
|
+
if (!identicalSeen.has(pattern.mine)) {
|
|
100
|
+
identicalSeen.add(pattern.mine);
|
|
101
|
+
identical.push(pattern.mine);
|
|
102
|
+
}
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (pattern.relation === "mine-within-theirs" || pattern.relation === "theirs-within-mine") {
|
|
106
|
+
const container = pattern.relation === "mine-within-theirs" ? pattern.theirs : pattern.mine;
|
|
107
|
+
const leaf = pattern.relation === "mine-within-theirs" ? pattern.mine : pattern.theirs;
|
|
108
|
+
const entry = contained.get(container) ?? { container, leaves: [] };
|
|
109
|
+
if (!entry.leaves.includes(leaf))
|
|
110
|
+
entry.leaves.push(leaf);
|
|
111
|
+
contained.set(container, entry);
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const key = `${pattern.mine}\u0000${pattern.theirs}`;
|
|
115
|
+
if (!intersectionSeen.has(key)) {
|
|
116
|
+
intersectionSeen.add(key);
|
|
117
|
+
intersections.push({ mine: pattern.mine, theirs: pattern.theirs });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return { identical, contained: [...contained.values()], intersections };
|
|
121
|
+
}
|
|
64
122
|
function overlapRows(overlaps, color) {
|
|
65
123
|
const groups = new Map();
|
|
66
124
|
for (const overlap of overlaps) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
groups.set(overlap.contract, patterns);
|
|
71
|
-
}
|
|
72
|
-
for (const pattern of overlap.patterns)
|
|
73
|
-
patterns.set(JSON.stringify([pattern.mine, pattern.theirs]), pattern);
|
|
125
|
+
const patterns = groups.get(overlap.contract) ?? [];
|
|
126
|
+
patterns.push(...overlap.patterns);
|
|
127
|
+
groups.set(overlap.contract, patterns);
|
|
74
128
|
}
|
|
75
129
|
if (groups.size === 0)
|
|
76
130
|
return [];
|
|
77
|
-
const lines = [""
|
|
131
|
+
const lines = [""];
|
|
132
|
+
let groupIndex = 0;
|
|
78
133
|
for (const [contract, patterns] of groups) {
|
|
79
|
-
if (
|
|
134
|
+
if (groupIndex++ > 0)
|
|
80
135
|
lines.push("");
|
|
81
136
|
const identity = safeText(contract);
|
|
82
|
-
lines.push(` ${
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
137
|
+
lines.push(` overlap ${color ? `\u001b[1m${identity}\u001b[0m` : identity}`);
|
|
138
|
+
const group = overlapGroup(patterns);
|
|
139
|
+
const relation = (symbol) => tone(symbol, "dim", color);
|
|
140
|
+
const bounded = group.identical.slice(0, 6);
|
|
141
|
+
for (const pattern of bounded)
|
|
142
|
+
lines.push(` ${relation("≡")} ${safeText(pattern)}`);
|
|
143
|
+
if (group.identical.length > 6)
|
|
144
|
+
lines.push(` ${relation("≡")} … (${group.identical.length - 6} more)`);
|
|
145
|
+
for (const { container, leaves } of group.contained) {
|
|
146
|
+
for (const leaf of leaves.slice(0, 6))
|
|
147
|
+
lines.push(` ${safeText(leaf)} ${relation("⊂")} ${safeText(container)}`);
|
|
148
|
+
if (leaves.length > 6)
|
|
149
|
+
lines.push(` … (${leaves.length - 6} more) ${relation("⊂")} ${safeText(container)}`);
|
|
93
150
|
}
|
|
151
|
+
for (const { mine, theirs } of group.intersections)
|
|
152
|
+
lines.push(` ${relation("∩")} ${safeText(mine)} · ${safeText(theirs)}`);
|
|
94
153
|
}
|
|
95
154
|
return lines;
|
|
96
155
|
}
|
|
@@ -101,33 +160,47 @@ function pushBlock(lines, block) {
|
|
|
101
160
|
}
|
|
102
161
|
function acceptedRecord(result, columns) {
|
|
103
162
|
const record = [];
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
163
|
+
const recoverySnapshot = effectRecoverySnapshot(result.effects);
|
|
164
|
+
if (recoverySnapshot !== undefined)
|
|
165
|
+
receiptRow(record, " ", "recovery snapshot", [{ text: recoverySnapshot, opaque: true }], columns);
|
|
166
|
+
if (result.operation === "deliver") {
|
|
167
|
+
pushBlock(record, reuseLines(result.value.verificationReuse, columns));
|
|
108
168
|
}
|
|
109
169
|
return record;
|
|
110
170
|
}
|
|
111
171
|
function acceptedLagRows(result, columns) {
|
|
112
172
|
const obligations = [];
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
173
|
+
// A checkout this invocation's own follow could not carry is loud; the same arm's reconciliation lag
|
|
174
|
+
// is pre-existing residue and stays in the typed result only.
|
|
175
|
+
for (const checkout of effectRetainedCheckouts(result.effects) ?? []) {
|
|
176
|
+
pushBlock(obligations, checkoutBehindRows(checkout.path, checkout.target, columns));
|
|
116
177
|
}
|
|
117
|
-
for (const lag of result.
|
|
178
|
+
for (const { contract, lag } of effectLags(result.effects)) {
|
|
179
|
+
if (lag.kind === "worktree-retained" ||
|
|
180
|
+
lag.kind === "worktree-follow-retained" ||
|
|
181
|
+
lag.kind === "unsealed-bytes" ||
|
|
182
|
+
lag.kind === "target-checkout-retained")
|
|
183
|
+
continue;
|
|
184
|
+
if (contract !== result.contract)
|
|
185
|
+
receiptRow(obligations, "!", "lag owner", [{ text: contract, opaque: true }], columns);
|
|
186
|
+
pushBlock(obligations, lagRows(lag, columns));
|
|
187
|
+
}
|
|
188
|
+
for (const { contract, lag } of effectSettlementLags(result.effects)) {
|
|
189
|
+
if (contract !== result.contract)
|
|
190
|
+
receiptRow(obligations, "!", "settlement owner", [{ text: contract, opaque: true }], columns);
|
|
118
191
|
pushBlock(obligations, settlementLagRows(lag, columns));
|
|
119
192
|
}
|
|
120
|
-
pushBlock(obligations, executionCleanupLines(result.
|
|
121
|
-
pushBlock(obligations, executionStopLines(result.
|
|
193
|
+
pushBlock(obligations, executionCleanupLines(effectCleanup(result.effects).filter((issue) => issue.kind !== "worktree-leak"), columns, result.contract));
|
|
194
|
+
pushBlock(obligations, executionStopLines(effectExecutionStops(result.effects), columns));
|
|
122
195
|
return obligations;
|
|
123
196
|
}
|
|
124
197
|
function acceptedDeviations(result, columns, color) {
|
|
125
198
|
const deviations = [];
|
|
126
|
-
if (result.overlaps !== undefined)
|
|
127
|
-
pushBlock(deviations, overlapRows(result.overlaps, color));
|
|
128
|
-
if (result.overlapFailure !== undefined) {
|
|
199
|
+
if (result.value.overlaps !== undefined)
|
|
200
|
+
pushBlock(deviations, overlapRows(result.value.overlaps, color));
|
|
201
|
+
if (result.value.overlapFailure !== undefined) {
|
|
129
202
|
receiptRow(deviations, "!", "overlap", [{ text: "unavailable" }], columns);
|
|
130
|
-
receiptPayload(deviations, "
|
|
203
|
+
receiptPayload(deviations, "reason", result.value.overlapFailure);
|
|
131
204
|
}
|
|
132
205
|
return deviations;
|
|
133
206
|
}
|
|
@@ -137,50 +210,99 @@ function recordBlock(result, columns) {
|
|
|
137
210
|
}
|
|
138
211
|
function nonGatingVerificationLines(result, columns) {
|
|
139
212
|
const lines = [];
|
|
140
|
-
const verification = result.completion?.verification;
|
|
213
|
+
const verification = result.value.completion?.verification;
|
|
141
214
|
if (verification === undefined || verification.verdict !== "unsatisfied")
|
|
142
215
|
return lines;
|
|
143
|
-
receiptRow(lines, "!", "verification", [
|
|
144
|
-
|
|
145
|
-
|
|
216
|
+
receiptRow(lines, "!", "verification", [
|
|
217
|
+
...(verification.mode === "reused" ? [{ text: "reused" }] : []),
|
|
218
|
+
{ text: "unsatisfied" },
|
|
219
|
+
{ text: "· not required by Contract gates" },
|
|
220
|
+
], columns);
|
|
221
|
+
if (result.value.verificationSummary !== undefined) {
|
|
222
|
+
receiptPayload(lines, " summary", result.value.verificationSummary);
|
|
146
223
|
}
|
|
147
224
|
return lines;
|
|
148
225
|
}
|
|
149
|
-
|
|
150
|
-
|
|
226
|
+
/** A terminal command names the worktree it retired, or the retained worktree it failed to remove. */
|
|
227
|
+
function worktreeRetirementLines(result, columns) {
|
|
228
|
+
const lines = [];
|
|
229
|
+
for (const { contract, name } of effectRetiredWorktrees(result.effects)) {
|
|
230
|
+
if (contract === result.contract)
|
|
231
|
+
receiptRow(lines, " ", "worktree", [{ text: `${name} retired` }], columns);
|
|
232
|
+
else
|
|
233
|
+
receiptRow(lines, "!", "worktree owner", [
|
|
234
|
+
{ text: contract, opaque: true },
|
|
235
|
+
{ text: `${name} retired`, opaque: true },
|
|
236
|
+
], columns);
|
|
237
|
+
}
|
|
238
|
+
for (const { contract, path } of effectRetainedWorktrees(result.effects)) {
|
|
239
|
+
if (contract === result.contract)
|
|
240
|
+
receiptRow(lines, "!", "lag", [{ text: "worktree retained" }, { text: path, opaque: true }], columns);
|
|
241
|
+
else
|
|
242
|
+
receiptRow(lines, "!", "worktree owner", [
|
|
243
|
+
{ text: contract, opaque: true },
|
|
244
|
+
{ text: `retained ${path}`, opaque: true },
|
|
245
|
+
], columns);
|
|
246
|
+
}
|
|
247
|
+
return lines;
|
|
248
|
+
}
|
|
249
|
+
/** The landed diff's shape, rendered by the one diffstat rule the akuma surfaces already own. */
|
|
250
|
+
function landedChangesLines(scope, columns) {
|
|
251
|
+
if (scope === undefined)
|
|
252
|
+
return [];
|
|
253
|
+
const files = `${scope.filesChanged} ${scope.filesChanged === 1 ? "file" : "files"}`;
|
|
254
|
+
const lines = [];
|
|
255
|
+
receiptRow(lines, " ", "changes", [{ text: `${files} · ${renderDiffstat({ added: scope.insertions, removed: scope.deletions })}` }], columns);
|
|
256
|
+
return lines;
|
|
151
257
|
}
|
|
152
258
|
/**
|
|
153
259
|
* Shared presentation of a completed placement, so a deliver and a review that placed the same candidate read
|
|
154
260
|
* identically: one git-shaped target movement row, naming the reference it advanced, then the final lifecycle
|
|
155
261
|
* state. Satisfied Verification adds one fact row naming the integrated result; placement made that commit the
|
|
156
|
-
* reference's new head, so the movement and integrated-result rows share one sha.
|
|
157
|
-
*
|
|
158
|
-
* Journal ULIDs stay in JSON and `history`, never in ordinary
|
|
262
|
+
* reference's new head, so the movement and integrated-result rows share one sha. The verdict names reuse in the
|
|
263
|
+
* audit surface's vocabulary and carries no qualifier when this command executed declarations. A completion
|
|
264
|
+
* without an advanced reference states no movement. Journal ULIDs stay in JSON and `history`, never in ordinary
|
|
265
|
+
* receipt text.
|
|
159
266
|
*/
|
|
160
267
|
function completedPlacementLines(result, columns) {
|
|
161
|
-
const completion = result.completion;
|
|
268
|
+
const completion = result.value.completion;
|
|
162
269
|
if (completion === undefined)
|
|
163
270
|
return [];
|
|
271
|
+
const abbreviations = abbreviateGitIds([
|
|
272
|
+
completion.predecessor ?? "",
|
|
273
|
+
completion.integration,
|
|
274
|
+
...(result.operation === "deliver"
|
|
275
|
+
? [result.value.tenderSnapshot ?? "", result.value.integration?.changeId ?? ""]
|
|
276
|
+
: []),
|
|
277
|
+
]);
|
|
164
278
|
const lines = [];
|
|
165
279
|
if (completion.predecessor !== undefined && completion.target !== undefined) {
|
|
166
280
|
receiptRow(lines, " ", "target", [
|
|
167
|
-
{
|
|
281
|
+
{
|
|
282
|
+
text: `${displayGitId(completion.predecessor, abbreviations)}..${displayGitId(completion.integration, abbreviations)}`,
|
|
283
|
+
},
|
|
168
284
|
{ text: completion.target, opaque: true },
|
|
169
285
|
], columns);
|
|
170
286
|
}
|
|
171
287
|
if (completion.verification?.verdict === "satisfied") {
|
|
172
|
-
receiptRow(lines, " ", "integration result", [
|
|
288
|
+
receiptRow(lines, " ", "integration result", [
|
|
289
|
+
{
|
|
290
|
+
text: `${displayGitId(completion.integration, abbreviations)} · verification ${completion.verification.mode === "reused" ? "reused " : ""}satisfied`,
|
|
291
|
+
},
|
|
292
|
+
], columns);
|
|
173
293
|
}
|
|
294
|
+
lines.push(...landedChangesLines(completion.scope, columns));
|
|
174
295
|
lines.push(...nonGatingVerificationLines(result, columns));
|
|
175
|
-
// Placement admission always admits the claim entry beside the movement, so a completed placement is
|
|
176
|
-
receiptRow(lines, "
|
|
296
|
+
// Placement admission always admits the claim entry beside the movement, so a completed placement is accepted.
|
|
297
|
+
receiptRow(lines, "✓", lifecycleWord("claimed"), [], columns);
|
|
177
298
|
return lines;
|
|
178
299
|
}
|
|
179
300
|
/** Evidence handles stay in JSON and history; ordinary receipt text carries only outstanding obligations. */
|
|
180
301
|
function obligationLines(result, columns) {
|
|
181
302
|
const rows = [];
|
|
182
|
-
|
|
183
|
-
|
|
303
|
+
const recoverySnapshot = effectRecoverySnapshot(result.effects);
|
|
304
|
+
if (recoverySnapshot !== undefined)
|
|
305
|
+
receiptRow(rows, " ", "recovery snapshot", [{ text: recoverySnapshot, opaque: true }], columns);
|
|
184
306
|
rows.push(...acceptedLagRows(result, columns));
|
|
185
307
|
return rows;
|
|
186
308
|
}
|
|
@@ -193,12 +315,12 @@ function movementLines(result, columns) {
|
|
|
193
315
|
return lines;
|
|
194
316
|
}
|
|
195
317
|
function continuationLines(result, columns) {
|
|
196
|
-
const report = result.continuation;
|
|
318
|
+
const report = result.value.continuation;
|
|
197
319
|
if (report === undefined)
|
|
198
320
|
return [];
|
|
199
321
|
const lines = [];
|
|
200
322
|
for (const contractId of report.claimed) {
|
|
201
|
-
receiptRow(lines, "✓", "
|
|
323
|
+
receiptRow(lines, "✓", "dependent", [{ text: "complete" }, { text: contractId, opaque: true }], columns);
|
|
202
324
|
}
|
|
203
325
|
for (const { contractId, stop } of report.stopped) {
|
|
204
326
|
if ("kind" in stop && stop.kind === "already-terminal")
|
|
@@ -206,7 +328,7 @@ function continuationLines(result, columns) {
|
|
|
206
328
|
else if ("kind" in stop && stop.kind === "execution-stopped")
|
|
207
329
|
lines.push(...executionStopLines([stop], columns));
|
|
208
330
|
else if ("kind" in stop && stop.kind === "physical-lag") {
|
|
209
|
-
receiptRow(lines, "!", "
|
|
331
|
+
receiptRow(lines, "!", "dependent", [{ text: contractId, opaque: true }, { text: "physical follow stopped" }], columns);
|
|
210
332
|
}
|
|
211
333
|
else
|
|
212
334
|
lines.push(...stopLines(stop, columns, contractId, contractId));
|
|
@@ -215,81 +337,110 @@ function continuationLines(result, columns) {
|
|
|
215
337
|
}
|
|
216
338
|
function renderAcceptedBind(result, columns, color) {
|
|
217
339
|
const lines = titleLines("✓", "bound", result.contract, columns);
|
|
218
|
-
if (result.workspace !== undefined)
|
|
219
|
-
receiptRow(lines, " ", "
|
|
220
|
-
|
|
340
|
+
if (result.value.workspace !== undefined)
|
|
341
|
+
receiptRow(lines, " ", "worktree", [{ text: result.value.workspace.path, opaque: true }], columns);
|
|
342
|
+
const target = bindTarget(result.facts);
|
|
343
|
+
if (target === null)
|
|
221
344
|
receiptRow(lines, " ", "no target", [], columns);
|
|
222
345
|
else
|
|
223
|
-
receiptRow(lines, " ", "target", [{ text:
|
|
224
|
-
for (const warning of result.warnings ?? [])
|
|
346
|
+
receiptRow(lines, " ", "target", [{ text: target, opaque: true }], columns);
|
|
347
|
+
for (const warning of result.value.warnings ?? [])
|
|
225
348
|
receiptRow(lines, "!", "region warning", [{ text: warning }], columns);
|
|
226
349
|
lines.push(...acceptedDeviations(result, columns, color), ...recordBlock(result, columns));
|
|
227
350
|
return lines.join("\n");
|
|
228
351
|
}
|
|
352
|
+
function termsDiffText(diff) {
|
|
353
|
+
return diff.replace(/^={3,}\r?\n/u, "").replace(/^((?:---|\+\+\+) [^\r\n]*)[ \t]+$/gmu, "$1");
|
|
354
|
+
}
|
|
229
355
|
function renderAcceptedAmend(result, columns, color) {
|
|
230
|
-
const
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
|
|
356
|
+
const documentChanged = result.value.documentDiff.length > 0;
|
|
357
|
+
const changed = documentChanged || result.value.changes.gates !== undefined || result.value.changes.after !== undefined;
|
|
358
|
+
const lines = titleLines("✓", "amended", result.contract, columns);
|
|
359
|
+
if (!changed)
|
|
360
|
+
receiptRow(lines, " ", "terms", [{ text: "unchanged" }], columns);
|
|
361
|
+
if (result.value.changes.gates !== undefined)
|
|
362
|
+
receiptRow(lines, " ", "gates", [{ text: result.value.changes.gates.join(" · ") || "none" }], columns);
|
|
363
|
+
if (result.value.changes.after !== undefined)
|
|
364
|
+
receiptRow(lines, " ", "after", [{ text: result.value.changes.after.join(" · ") || "none" }], columns);
|
|
365
|
+
if (documentChanged)
|
|
366
|
+
receiptPayload(lines, "terms diff", termsDiffText(result.value.documentDiff));
|
|
234
367
|
lines.push(...acceptedDeviations(result, columns, color), ...recordBlock(result, columns));
|
|
235
368
|
return lines.join("\n");
|
|
236
369
|
}
|
|
370
|
+
function deliverIdentityLines(result, abbreviations, columns) {
|
|
371
|
+
const lines = [];
|
|
372
|
+
if (result.value.leading !== undefined && result.value.leading.kind === "already-admitted")
|
|
373
|
+
receiptRow(lines, " ", "leading", [{ text: result.value.leading.kind.replaceAll("-", " ") }], columns);
|
|
374
|
+
if (result.value.tenderSnapshot !== undefined)
|
|
375
|
+
receiptRow(lines, " ", "candidate", [{ text: displayGitId(result.value.tenderSnapshot, abbreviations), opaque: true }], columns);
|
|
376
|
+
if (result.value.integration !== undefined && !/^0{40}$/u.test(result.value.integration.changeId))
|
|
377
|
+
receiptRow(lines, " ", "content identity (not commit)", [{ text: displayGitId(result.value.integration.changeId, abbreviations), opaque: true }], columns);
|
|
378
|
+
return lines;
|
|
379
|
+
}
|
|
237
380
|
function renderAcceptedDeliver(result, columns) {
|
|
238
|
-
const complete = result.completion !== undefined;
|
|
239
|
-
const
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
381
|
+
const complete = result.value.completion !== undefined;
|
|
382
|
+
const lines = titleLines("✓", "delivered", result.contract, columns);
|
|
383
|
+
const abbreviations = abbreviateGitIds([
|
|
384
|
+
result.value.tenderSnapshot ?? "",
|
|
385
|
+
result.value.integration?.changeId ?? "",
|
|
386
|
+
result.value.verificationSubject?.snapshot ?? "",
|
|
387
|
+
result.value.completion?.predecessor ?? "",
|
|
388
|
+
result.value.completion?.integration ?? "",
|
|
389
|
+
]);
|
|
390
|
+
lines.push(...deliverIdentityLines(result, abbreviations, columns));
|
|
248
391
|
if (complete)
|
|
249
392
|
lines.push(...completedPlacementLines(result, columns));
|
|
250
|
-
else
|
|
393
|
+
else {
|
|
394
|
+
const subject = result.value.verificationSubject;
|
|
395
|
+
if (subject !== undefined)
|
|
396
|
+
receiptRow(lines, " ", "integration result", [
|
|
397
|
+
{
|
|
398
|
+
text: `${displayGitId(subject.snapshot, abbreviations)} · verification ${subject.mode === "reused" ? "reused " : ""}${subject.verdict}`,
|
|
399
|
+
},
|
|
400
|
+
], columns);
|
|
251
401
|
lines.push(...movementLines(result, columns));
|
|
252
|
-
if (result.verification !== undefined) {
|
|
253
|
-
lines.push(...stopLines(result.verification, columns, result.contract));
|
|
254
|
-
}
|
|
255
|
-
if (!complete && result.placement !== undefined) {
|
|
256
|
-
lines.push(...stopLines(result.placement, columns, result.contract));
|
|
257
402
|
}
|
|
403
|
+
if (result.value.verification !== undefined)
|
|
404
|
+
lines.push(...stopLines(result.value.verification, columns, result.contract));
|
|
405
|
+
if (!complete && result.value.placement !== undefined)
|
|
406
|
+
lines.push(...stopLines(result.value.placement, columns, result.contract));
|
|
258
407
|
if (!complete)
|
|
259
408
|
receiptRow(lines, " ", "candidate", [{ text: "kept" }], columns);
|
|
260
|
-
lines.push(...continuationLines(result, columns));
|
|
261
|
-
lines.push(...(complete ? obligationLines(result, columns) : recordBlock(result, columns)));
|
|
409
|
+
lines.push(...continuationLines(result, columns), ...(complete ? obligationLines(result, columns) : recordBlock(result, columns)), ...worktreeRetirementLines(result, columns), ...gatesAwaitLines(result.value.placement));
|
|
262
410
|
return lines.join("\n");
|
|
263
411
|
}
|
|
264
412
|
function renderAcceptedReview(result, columns) {
|
|
265
|
-
const lines = titleLines("✓", `review ${result.
|
|
413
|
+
const lines = titleLines("✓", `review ${attestationVerdict(result.facts)}`, result.contract, columns);
|
|
266
414
|
lines.push(...completedPlacementLines(result, columns));
|
|
267
|
-
if (result.verification !== undefined) {
|
|
268
|
-
lines.push(...stopLines(result.verification, columns, result.contract));
|
|
415
|
+
if (result.value.verification !== undefined) {
|
|
416
|
+
lines.push(...stopLines(result.value.verification, columns, result.contract));
|
|
269
417
|
}
|
|
270
|
-
if (result.placement !== undefined) {
|
|
271
|
-
lines.push(...stopLines(result.placement, columns, result.contract));
|
|
418
|
+
if (result.value.placement !== undefined) {
|
|
419
|
+
lines.push(...stopLines(result.value.placement, columns, result.contract));
|
|
272
420
|
}
|
|
273
421
|
lines.push(...continuationLines(result, columns));
|
|
274
422
|
lines.push(...obligationLines(result, columns));
|
|
423
|
+
lines.push(...worktreeRetirementLines(result, columns));
|
|
424
|
+
lines.push(...gatesAwaitLines(result.value.placement));
|
|
275
425
|
return lines.join("\n");
|
|
276
426
|
}
|
|
277
427
|
function renderAcceptedArc(result, columns) {
|
|
278
|
-
const lines = titleLines("✓", `
|
|
279
|
-
receiptRow(lines, " ", "chapter", [{ text: String(result.chapter.seq) }, { text: "·" }, { text: result.chapter.title }], columns);
|
|
428
|
+
const lines = titleLines("✓", `chapter ${arcChapter(result.facts).seq} opened · ${arcChapter(result.facts).title}`, result.contract, columns);
|
|
280
429
|
lines.push(...recordBlock(result, columns));
|
|
281
430
|
return lines.join("\n");
|
|
282
431
|
}
|
|
283
432
|
function renderAcceptedAbandon(result, columns) {
|
|
284
433
|
const lines = titleLines("✓", "abandoned", result.contract, columns);
|
|
285
|
-
|
|
286
|
-
|
|
434
|
+
const note = abandonedNote(result.facts);
|
|
435
|
+
if (note !== undefined)
|
|
436
|
+
receiptRow(lines, " ", "note", [{ text: note }], columns);
|
|
287
437
|
lines.push(...recordBlock(result, columns));
|
|
438
|
+
lines.push(...worktreeRetirementLines(result, columns));
|
|
288
439
|
return lines.join("\n");
|
|
289
440
|
}
|
|
290
441
|
export function renderAccepted(result, context) {
|
|
291
442
|
const columns = context?.columns ?? DEFAULT_CLI_COLUMNS;
|
|
292
|
-
switch (result.
|
|
443
|
+
switch (result.operation) {
|
|
293
444
|
case "audit":
|
|
294
445
|
return renderAcceptedAudit(result, context);
|
|
295
446
|
case "bind":
|
|
@@ -308,9 +459,7 @@ export function renderAccepted(result, context) {
|
|
|
308
459
|
}
|
|
309
460
|
export function renderRetry(result, context) {
|
|
310
461
|
const columns = context?.columns ?? DEFAULT_CLI_COLUMNS;
|
|
311
|
-
const detail =
|
|
312
|
-
|
|
313
|
-
: [];
|
|
314
|
-
return [...outcomeLines("?", result.verb, "retry", result.contract, columns), ...detail].join("\n");
|
|
462
|
+
const detail = retryLines(result.reason, HANG, columns);
|
|
463
|
+
return [...outcomeLines("?", result.operation, "retry", result.contract, columns), ...detail].join("\n");
|
|
315
464
|
}
|
|
316
465
|
export { renderContractHistory } from "./contract-history.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ContractId, ExecutionCleanup, ExecutionStop, InvocationEffect, ReconciliationLag, SettlementLag, SnapshotId } from "../../index.js";
|
|
2
|
+
/** Presentation reads of the one native effect carrier; it never recomputes owner finality. */
|
|
3
|
+
export declare function effectLags(effects: readonly InvocationEffect[]): readonly Readonly<{
|
|
4
|
+
contract: ContractId;
|
|
5
|
+
lag: ReconciliationLag;
|
|
6
|
+
}>[];
|
|
7
|
+
export declare function effectSettlementLags(effects: readonly InvocationEffect[]): readonly Readonly<{
|
|
8
|
+
contract: ContractId;
|
|
9
|
+
lag: SettlementLag;
|
|
10
|
+
}>[];
|
|
11
|
+
export declare function effectCleanup(effects: readonly InvocationEffect[]): readonly ExecutionCleanup[];
|
|
12
|
+
export declare function effectExecutionStops(effects: readonly InvocationEffect[]): readonly ExecutionStop[];
|
|
13
|
+
export declare function effectRetainedCheckouts(effects: readonly InvocationEffect[]): readonly Readonly<{
|
|
14
|
+
path: string;
|
|
15
|
+
target: string;
|
|
16
|
+
diagnostic: string;
|
|
17
|
+
}>[];
|
|
18
|
+
export declare function effectRetiredWorktrees(effects: readonly InvocationEffect[]): readonly Readonly<{
|
|
19
|
+
contract: ContractId;
|
|
20
|
+
name: string;
|
|
21
|
+
}>[];
|
|
22
|
+
export declare function effectRetainedWorktrees(effects: readonly InvocationEffect[]): readonly Readonly<{
|
|
23
|
+
contract: ContractId;
|
|
24
|
+
path: string;
|
|
25
|
+
}>[];
|
|
26
|
+
export declare function effectRecoverySnapshot(effects: readonly InvocationEffect[]): SnapshotId | undefined;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** Presentation reads of the one native effect carrier; it never recomputes owner finality. */
|
|
2
|
+
export function effectLags(effects) {
|
|
3
|
+
return effects.flatMap((effect) => effect.kind === "reconciliation-lag" ? [{ contract: effect.contract, lag: effect.lag }] : []);
|
|
4
|
+
}
|
|
5
|
+
export function effectSettlementLags(effects) {
|
|
6
|
+
return effects.flatMap((effect) => effect.kind === "settlement-lag" ? [{ contract: effect.contract, lag: effect.lag }] : []);
|
|
7
|
+
}
|
|
8
|
+
export function effectCleanup(effects) {
|
|
9
|
+
return effects.flatMap((effect) => (effect.kind === "cleanup" ? [effect.issue] : []));
|
|
10
|
+
}
|
|
11
|
+
export function effectExecutionStops(effects) {
|
|
12
|
+
return effects.flatMap((effect) => effect.kind === "execution-stopped"
|
|
13
|
+
? [
|
|
14
|
+
{
|
|
15
|
+
kind: "execution-stopped",
|
|
16
|
+
contractId: effect.contract,
|
|
17
|
+
stage: effect.stage,
|
|
18
|
+
reason: effect.reason,
|
|
19
|
+
diagnostic: effect.diagnostic,
|
|
20
|
+
},
|
|
21
|
+
]
|
|
22
|
+
: []);
|
|
23
|
+
}
|
|
24
|
+
export function effectRetainedCheckouts(effects) {
|
|
25
|
+
return effects.flatMap((effect) => effect.kind === "checkout-retained"
|
|
26
|
+
? [{ path: effect.path, target: effect.target, diagnostic: effect.diagnostic }]
|
|
27
|
+
: []);
|
|
28
|
+
}
|
|
29
|
+
export function effectRetiredWorktrees(effects) {
|
|
30
|
+
return effects.flatMap((effect) => effect.kind === "worktree-retired" ? [{ contract: effect.contract, name: effect.name }] : []);
|
|
31
|
+
}
|
|
32
|
+
export function effectRetainedWorktrees(effects) {
|
|
33
|
+
return effects.flatMap((effect) => effect.kind === "worktree-retained" ? [{ contract: effect.contract, path: effect.path }] : []);
|
|
34
|
+
}
|
|
35
|
+
export function effectRecoverySnapshot(effects) {
|
|
36
|
+
for (const effect of effects) {
|
|
37
|
+
if (effect.kind === "reconciliation-effect" && effect.effect.kind === "recovery-snapshot")
|
|
38
|
+
return effect.effect.snapshot;
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|