@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
package/build/src/cli/invoke.js
DELETED
|
@@ -1,521 +0,0 @@
|
|
|
1
|
-
import { resolve } from "node:path";
|
|
2
|
-
import { resolveActor } from "./actor.js";
|
|
3
|
-
import { isParsedAkumaCommand } from "./commands/akuma.js";
|
|
4
|
-
import { invokeContractMutation } from "./commands/contract-invoke.js";
|
|
5
|
-
import { assertExplicitRepoUse, CliUsageError, usageGuideForCommand, } from "./parse.js";
|
|
6
|
-
import { isBlankInput } from "./usage.js";
|
|
7
|
-
import { AKUMA_REQUESTS_ENV } from "../akuma/provider.js";
|
|
8
|
-
import { canonicalBirthCwd } from "../akuma/call-input.js";
|
|
9
|
-
import { bodyRequestExecution, executionChannel, localExecutionContext, } from "../akuma/requests.js";
|
|
10
|
-
async function readStdin() {
|
|
11
|
-
const chunks = [];
|
|
12
|
-
for await (const chunk of process.stdin)
|
|
13
|
-
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
14
|
-
return Buffer.concat(chunks).toString("utf8");
|
|
15
|
-
}
|
|
16
|
-
function selectedStdinDiagnostic(command) {
|
|
17
|
-
switch (command.command) {
|
|
18
|
-
case "bind":
|
|
19
|
-
if (command.forkOf !== undefined)
|
|
20
|
-
return undefined;
|
|
21
|
-
return `${command.command} requires a nonblank stdin document`;
|
|
22
|
-
case "arc":
|
|
23
|
-
return `${command.command} requires a nonblank stdin document`;
|
|
24
|
-
case "amend":
|
|
25
|
-
return command.stdin === true ? "amend requires a nonblank stdin document" : undefined;
|
|
26
|
-
case "review":
|
|
27
|
-
return command.summaryFromStdin === true ? "review requires a nonblank summary" : undefined;
|
|
28
|
-
case "call":
|
|
29
|
-
case "tell":
|
|
30
|
-
return command.prompt.kind === "stdin" ? `${command.command} requires a nonblank prompt` : undefined;
|
|
31
|
-
case "task":
|
|
32
|
-
switch (command.stdin) {
|
|
33
|
-
case "document":
|
|
34
|
-
return "task add requires a nonblank stdin document";
|
|
35
|
-
case "compose":
|
|
36
|
-
return "task compose requires a nonblank stdin document";
|
|
37
|
-
case "body":
|
|
38
|
-
return "task update --body requires a nonblank value";
|
|
39
|
-
case "append":
|
|
40
|
-
return "task update --append requires a nonblank value";
|
|
41
|
-
case "note":
|
|
42
|
-
return "task update --note requires a nonblank value";
|
|
43
|
-
default:
|
|
44
|
-
return undefined;
|
|
45
|
-
}
|
|
46
|
-
default:
|
|
47
|
-
return undefined;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
async function withAcquiredStdin(command, runtime) {
|
|
51
|
-
const diagnostic = selectedStdinDiagnostic(command);
|
|
52
|
-
if (diagnostic === undefined)
|
|
53
|
-
return runtime;
|
|
54
|
-
const bytes = await (runtime.readStdin ?? readStdin)();
|
|
55
|
-
if (isBlankInput(bytes))
|
|
56
|
-
throw new CliUsageError(diagnostic);
|
|
57
|
-
return { ...runtime, readStdin: async () => bytes };
|
|
58
|
-
}
|
|
59
|
-
async function settingsAt(root, home) {
|
|
60
|
-
const { settings } = await import("../settings.js");
|
|
61
|
-
return settings({ ...(root === undefined ? {} : { root }), ...(home === undefined ? {} : { home }) });
|
|
62
|
-
}
|
|
63
|
-
function executionForEnvironment(environment) {
|
|
64
|
-
return environment[AKUMA_REQUESTS_ENV] === undefined
|
|
65
|
-
? localExecutionContext()
|
|
66
|
-
: bodyRequestExecution({ directory: environment[AKUMA_REQUESTS_ENV] });
|
|
67
|
-
}
|
|
68
|
-
async function contractSettings(command, execution, world, home) {
|
|
69
|
-
const forwarded = executionChannel(execution).kind === "body-request" &&
|
|
70
|
-
(command.command === "audit" || command.command === "deliver" || command.command === "review");
|
|
71
|
-
if (forwarded)
|
|
72
|
-
return {};
|
|
73
|
-
const configuration = await settingsAt(world ?? undefined, home);
|
|
74
|
-
const { worktreeHooksFrom, SettingsError } = await import("../library/configuration.js");
|
|
75
|
-
return { configuration, hooks: consumeSettings(() => worktreeHooksFrom({ settings: configuration }), SettingsError) };
|
|
76
|
-
}
|
|
77
|
-
function consumeSettings(run, ErrorType) {
|
|
78
|
-
try {
|
|
79
|
-
return run();
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
if (error instanceof Error && "executionReceipt" in error)
|
|
83
|
-
throw error;
|
|
84
|
-
if (error instanceof ErrorType)
|
|
85
|
-
throw new CliUsageError(error.message);
|
|
86
|
-
throw error;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
function actorFromEdge(actor, environment) {
|
|
90
|
-
let resolved;
|
|
91
|
-
try {
|
|
92
|
-
resolved = resolveActor({ env: environment, ...(actor === undefined ? {} : { actor }) });
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
if (error instanceof Error && "executionReceipt" in error)
|
|
96
|
-
throw error;
|
|
97
|
-
throw new CliUsageError(error instanceof Error ? error.message : String(error));
|
|
98
|
-
}
|
|
99
|
-
return resolved;
|
|
100
|
-
}
|
|
101
|
-
function taskActor(command, runtime, environment) {
|
|
102
|
-
return (runtime.actor ??
|
|
103
|
-
actorFromEdge(typeof command.flags.actor === "string" ? command.flags.actor : undefined, environment));
|
|
104
|
-
}
|
|
105
|
-
function gitPathFromEdge(environment) {
|
|
106
|
-
const value = environment.KEIYAKU_GIT_PATH;
|
|
107
|
-
if (value === undefined)
|
|
108
|
-
return undefined;
|
|
109
|
-
if (value.trim().length === 0)
|
|
110
|
-
throw new CliUsageError("KEIYAKU_GIT_PATH requires a nonblank value");
|
|
111
|
-
return value;
|
|
112
|
-
}
|
|
113
|
-
async function selectContract(repo, selector, scope) {
|
|
114
|
-
const { contractFromInput, resolveContextualContract } = await import("./selectors.js");
|
|
115
|
-
if (selector !== undefined && !selector.startsWith("@"))
|
|
116
|
-
return contractFromInput(repo, selector);
|
|
117
|
-
const { listCompleteContractBoard } = await import("../library/contract.js");
|
|
118
|
-
const id = resolveContextualContract(await listCompleteContractBoard(repo), selector, scope);
|
|
119
|
-
return contractFromInput(repo, id);
|
|
120
|
-
}
|
|
121
|
-
async function invokeAkumaFromEdge(parsed, input) {
|
|
122
|
-
try {
|
|
123
|
-
const { executionCwd, repo, edge } = input;
|
|
124
|
-
const path = await akumaWorldFor(parsed, input.located, input.candidate, input.establish);
|
|
125
|
-
const home = parsed.command === "call" ? input.home : undefined;
|
|
126
|
-
const configuration = parsed.command === "call" ? await settingsAt(path, home) : undefined;
|
|
127
|
-
if (parsed.command === "call" && parsed.contract !== undefined && repo === undefined) {
|
|
128
|
-
throw new Error("call with Contract requires a resolved Repo");
|
|
129
|
-
}
|
|
130
|
-
const { invokeAkuma } = await import("./commands/akuma-invoke.js");
|
|
131
|
-
const contract = parsed.command === "call" && parsed.contract !== undefined
|
|
132
|
-
? (await import("./selectors.js")).contractFromInput(repo, parsed.contract, input.execution).contract
|
|
133
|
-
: undefined;
|
|
134
|
-
return await invokeAkuma(parsed, {
|
|
135
|
-
path,
|
|
136
|
-
...(executionCwd === undefined ? {} : { executionCwd }),
|
|
137
|
-
...(home === undefined ? {} : { home }),
|
|
138
|
-
...(configuration === undefined ? {} : { settings: configuration }),
|
|
139
|
-
...(contract === undefined ? (repo === undefined ? {} : { repo }) : { contract }),
|
|
140
|
-
environment: edge.environment,
|
|
141
|
-
readStdin: edge.readStdin,
|
|
142
|
-
execution: input.execution,
|
|
143
|
-
...(edge.signal === undefined ? {} : { signal: edge.signal }),
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
if (error instanceof Error && "executionReceipt" in error)
|
|
148
|
-
throw error;
|
|
149
|
-
const { AkumaWorldScopeError } = await import("../library/address.js");
|
|
150
|
-
if (error instanceof AkumaWorldScopeError)
|
|
151
|
-
throw error;
|
|
152
|
-
if (error instanceof TypeError)
|
|
153
|
-
throw new CliUsageError(error.message);
|
|
154
|
-
throw error;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
async function akumaWorldFor(parsed, located, candidate, establish) {
|
|
158
|
-
const world = parsed.command === "call" ? (candidate ?? (await establish())) : located;
|
|
159
|
-
if (world === null)
|
|
160
|
-
throw new CliUsageError("no Keiyaku world contains the invocation cwd");
|
|
161
|
-
return world;
|
|
162
|
-
}
|
|
163
|
-
async function invokeCatalog(parsed, world, repo, home) {
|
|
164
|
-
try {
|
|
165
|
-
if (parsed.query.kind === "contracts") {
|
|
166
|
-
if (repo === undefined)
|
|
167
|
-
throw new Error("Contract catalog requires a resolved Repo");
|
|
168
|
-
const { Keiyaku } = await import("../library/keiyaku.js");
|
|
169
|
-
return {
|
|
170
|
-
kind: "catalog",
|
|
171
|
-
catalog: {
|
|
172
|
-
kind: "contracts",
|
|
173
|
-
...(await Keiyaku.with().list({
|
|
174
|
-
repo,
|
|
175
|
-
...(parsed.query.limit === undefined ? {} : { limit: parsed.query.limit }),
|
|
176
|
-
})),
|
|
177
|
-
},
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
if (parsed.query.kind === "archetypes") {
|
|
181
|
-
const { listArchetypeDefinitions } = await import("../akuma/archetype.js");
|
|
182
|
-
return {
|
|
183
|
-
kind: "catalog",
|
|
184
|
-
catalog: {
|
|
185
|
-
kind: "archetypes",
|
|
186
|
-
...(await listArchetypeDefinitions({
|
|
187
|
-
...(world === null ? {} : { project: world }),
|
|
188
|
-
...(parsed.query.limit === undefined ? {} : { limit: parsed.query.limit }),
|
|
189
|
-
...(home === undefined ? {} : { home }),
|
|
190
|
-
})),
|
|
191
|
-
},
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
if (world === null)
|
|
195
|
-
throw new CliUsageError("no Keiyaku world contains the invocation cwd");
|
|
196
|
-
if (parsed.query.kind === "tasks") {
|
|
197
|
-
const { Tasks } = await import("../task/index.js");
|
|
198
|
-
const listed = await Tasks.of(world).list({
|
|
199
|
-
selection: "all",
|
|
200
|
-
namespace: parsed.query.namespace ?? [],
|
|
201
|
-
...(parsed.query.limit === undefined ? {} : { limit: parsed.query.limit }),
|
|
202
|
-
});
|
|
203
|
-
if (listed.kind !== "accepted")
|
|
204
|
-
throw new Error("Task list did not return an accepted observation");
|
|
205
|
-
return {
|
|
206
|
-
kind: "catalog",
|
|
207
|
-
catalog: { kind: "tasks", root: world, ...listed.value },
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
const { Akumas } = await import("../library/akumas.js");
|
|
211
|
-
const listed = await Akumas.of(world).list({
|
|
212
|
-
...(parsed.query.archetype === undefined ? {} : { archetype: parsed.query.archetype }),
|
|
213
|
-
...(parsed.query.limit === undefined ? {} : { limit: parsed.query.limit }),
|
|
214
|
-
});
|
|
215
|
-
return {
|
|
216
|
-
kind: "catalog",
|
|
217
|
-
catalog: {
|
|
218
|
-
kind: "akuma",
|
|
219
|
-
root: world,
|
|
220
|
-
archetype: parsed.query.archetype ?? null,
|
|
221
|
-
...listed,
|
|
222
|
-
},
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
catch (error) {
|
|
226
|
-
if (error instanceof Error && "executionReceipt" in error)
|
|
227
|
-
throw error;
|
|
228
|
-
if (error instanceof TypeError)
|
|
229
|
-
throw new CliUsageError(error.message);
|
|
230
|
-
throw error;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
async function invokeStatus(parsed, world, repo) {
|
|
234
|
-
const selectors = "selectors" in parsed ? parsed.selectors : undefined;
|
|
235
|
-
if (selectors !== undefined) {
|
|
236
|
-
const { invokeStatusSet } = await import("./commands/status-set.js");
|
|
237
|
-
return await invokeStatusSet(selectors, world, repo);
|
|
238
|
-
}
|
|
239
|
-
if (parsed.akuma === true) {
|
|
240
|
-
if (world === null)
|
|
241
|
-
throw new CliUsageError("no Keiyaku world contains the invocation cwd");
|
|
242
|
-
return (await import("./commands/akuma-invoke.js")).invokeAkumaStatus(world, parsed.contract, undefined, repo);
|
|
243
|
-
}
|
|
244
|
-
const { kanshi, observeKanshi, selectKanshi } = await import("../kanshi/index.js");
|
|
245
|
-
if (parsed.contract === undefined) {
|
|
246
|
-
const report = await kanshi({ world, ...(repo === undefined ? {} : { repo }) });
|
|
247
|
-
return { kind: "status", report, selection: "world" };
|
|
248
|
-
}
|
|
249
|
-
if (parsed.contract.startsWith("@")) {
|
|
250
|
-
try {
|
|
251
|
-
const observation = await observeKanshi({ world, ...(repo === undefined ? {} : { repo }) });
|
|
252
|
-
const { resolveNamedAddress } = await import("../library/address.js");
|
|
253
|
-
const address = resolveNamedAddress({
|
|
254
|
-
selector: parsed.contract,
|
|
255
|
-
report: observation.report,
|
|
256
|
-
aliases: observation.aliases,
|
|
257
|
-
});
|
|
258
|
-
if (address.kind === "akuma") {
|
|
259
|
-
if (world === null)
|
|
260
|
-
throw new CliUsageError("no Keiyaku world contains the invocation cwd");
|
|
261
|
-
return (await import("./commands/akuma-invoke.js")).invokeAkumaStatus(world, address.id, parsed.contract, repo);
|
|
262
|
-
}
|
|
263
|
-
if (repo === undefined)
|
|
264
|
-
throw new CliUsageError("cannot select a contract while the Contract world is absent");
|
|
265
|
-
return {
|
|
266
|
-
kind: "status",
|
|
267
|
-
report: await kanshi({ world, repo, contract: address.id }),
|
|
268
|
-
selection: "contract",
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
catch (error) {
|
|
272
|
-
if (error instanceof Error && "executionReceipt" in error)
|
|
273
|
-
throw error;
|
|
274
|
-
if (error instanceof TypeError)
|
|
275
|
-
throw new CliUsageError(error.message);
|
|
276
|
-
throw error;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
if (parsed.contract.startsWith("kei/")) {
|
|
280
|
-
if (repo === undefined)
|
|
281
|
-
throw new CliUsageError("cannot select a contract while the Contract world is absent");
|
|
282
|
-
const { canonicalContractSelector } = await import("./selectors.js");
|
|
283
|
-
const contract = canonicalContractSelector(parsed.contract);
|
|
284
|
-
return {
|
|
285
|
-
kind: "status",
|
|
286
|
-
report: await kanshi({ world, repo, contract }),
|
|
287
|
-
selection: "contract",
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
const report = await kanshi({ world, ...(repo === undefined ? {} : { repo }) });
|
|
291
|
-
const { resolveKanshiContract } = await import("./selectors.js");
|
|
292
|
-
const contract = resolveKanshiContract(report, parsed.contract);
|
|
293
|
-
return { kind: "status", report: selectKanshi({ report, contract }), selection: "contract" };
|
|
294
|
-
}
|
|
295
|
-
async function invokeRegion(parsed, world, repo) {
|
|
296
|
-
const { kanshi, selectRegion } = await import("../kanshi/index.js");
|
|
297
|
-
const read = async (region) => {
|
|
298
|
-
try {
|
|
299
|
-
return await kanshi({ world, repo, region });
|
|
300
|
-
}
|
|
301
|
-
catch (error) {
|
|
302
|
-
if (error instanceof Error && "executionReceipt" in error)
|
|
303
|
-
throw error;
|
|
304
|
-
if (error instanceof TypeError)
|
|
305
|
-
throw new CliUsageError(error.message);
|
|
306
|
-
throw error;
|
|
307
|
-
}
|
|
308
|
-
};
|
|
309
|
-
if (parsed.paths !== undefined) {
|
|
310
|
-
const report = await read({ kind: "path", patterns: parsed.paths });
|
|
311
|
-
return { kind: "region", region: report.region ?? { kind: "absent" } };
|
|
312
|
-
}
|
|
313
|
-
if (parsed.contract === undefined) {
|
|
314
|
-
const report = await read({ kind: "declarations" });
|
|
315
|
-
return { kind: "region", region: report.region ?? { kind: "absent" } };
|
|
316
|
-
}
|
|
317
|
-
const report = await read({ kind: "declarations" });
|
|
318
|
-
const { resolveKanshiContract } = await import("./selectors.js");
|
|
319
|
-
const contract = resolveKanshiContract(report, parsed.contract);
|
|
320
|
-
if (report.contracts.kind !== "present" ||
|
|
321
|
-
report.contracts.value.rows.every((row) => row.id !== contract || row.disposition !== "active")) {
|
|
322
|
-
throw new CliUsageError(`unknown contract selector: ${parsed.contract}`);
|
|
323
|
-
}
|
|
324
|
-
if (report.region?.kind !== "present" || report.region.value.kind !== "declarations") {
|
|
325
|
-
return { kind: "region", region: report.region ?? { kind: "absent" } };
|
|
326
|
-
}
|
|
327
|
-
return {
|
|
328
|
-
kind: "region",
|
|
329
|
-
region: {
|
|
330
|
-
kind: "present",
|
|
331
|
-
value: selectRegion({
|
|
332
|
-
declarations: report.region.value.declarations,
|
|
333
|
-
selection: { kind: "contract", contract },
|
|
334
|
-
}),
|
|
335
|
-
},
|
|
336
|
-
};
|
|
337
|
-
}
|
|
338
|
-
async function invokeContractHistory(repo, contract) {
|
|
339
|
-
if (repo === undefined)
|
|
340
|
-
throw new Error("history kei/... requires a resolved Repo");
|
|
341
|
-
const { contractFromInput } = await import("./selectors.js");
|
|
342
|
-
const selected = contractFromInput(repo, contract);
|
|
343
|
-
try {
|
|
344
|
-
return { kind: "contract-history", history: await selected.contract.history() };
|
|
345
|
-
}
|
|
346
|
-
catch (error) {
|
|
347
|
-
if (error instanceof Error && "executionReceipt" in error)
|
|
348
|
-
throw error;
|
|
349
|
-
if (error instanceof TypeError)
|
|
350
|
-
throw new CliUsageError(error.message);
|
|
351
|
-
const { KeiyakuRefused } = await import("../library/keiyaku.js");
|
|
352
|
-
if (error instanceof KeiyakuRefused) {
|
|
353
|
-
return { kind: "refused", verb: "history", contract: selected.id, refusal: error.refusal };
|
|
354
|
-
}
|
|
355
|
-
throw error;
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
async function resolveInvocationCoordinates(invocation, runtime) {
|
|
359
|
-
const environment = runtime.environment ?? process.env, gitPath = gitPathFromEdge(environment);
|
|
360
|
-
const { resolveCliCoordinates } = await import("./coordinates.js");
|
|
361
|
-
return resolveCliCoordinates({
|
|
362
|
-
...(runtime.cwd === undefined ? {} : { processCwd: runtime.cwd }),
|
|
363
|
-
...(invocation.cwd === undefined ? {} : { cwd: invocation.cwd }),
|
|
364
|
-
...(invocation.repo === undefined ? {} : { repo: invocation.repo }),
|
|
365
|
-
...(gitPath === undefined ? {} : { gitPath }),
|
|
366
|
-
command: invocation.command,
|
|
367
|
-
});
|
|
368
|
-
}
|
|
369
|
-
async function invokeTask(parsed, runtime, edge, execution, coordinates) {
|
|
370
|
-
const actor = taskActor(parsed, runtime, edge.environment);
|
|
371
|
-
return await (await import("./commands/task-invoke.js")).invokeTaskFromEdge({
|
|
372
|
-
parsed,
|
|
373
|
-
world: coordinates.world,
|
|
374
|
-
candidate: coordinates.candidateWorld,
|
|
375
|
-
context: coordinates.taskContext,
|
|
376
|
-
establish: coordinates.establishWorld,
|
|
377
|
-
readStdin: edge.readStdin,
|
|
378
|
-
actor,
|
|
379
|
-
execution,
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
async function callExecutionCwd(input) {
|
|
383
|
-
if (input.command.command !== "call")
|
|
384
|
-
return undefined;
|
|
385
|
-
if (input.workdir !== undefined) {
|
|
386
|
-
return await canonicalBirthCwd(resolve(input.cwd, input.workdir), `workdir is not an existing directory: ${input.workdir}`);
|
|
387
|
-
}
|
|
388
|
-
return input.cwd;
|
|
389
|
-
}
|
|
390
|
-
async function invokeParsedAkuma(input) {
|
|
391
|
-
const executionCwd = await callExecutionCwd({
|
|
392
|
-
command: input.parsed,
|
|
393
|
-
cwd: input.cwd,
|
|
394
|
-
...(input.workdir === undefined ? {} : { workdir: input.workdir }),
|
|
395
|
-
});
|
|
396
|
-
return await invokeAkumaFromEdge(input.parsed, {
|
|
397
|
-
located: input.world,
|
|
398
|
-
candidate: input.candidate,
|
|
399
|
-
establish: input.establish,
|
|
400
|
-
...(executionCwd === undefined ? {} : { executionCwd }),
|
|
401
|
-
...(input.repo === undefined ? {} : { repo: input.repo }),
|
|
402
|
-
...(input.home === undefined ? {} : { home: input.home }),
|
|
403
|
-
edge: input.edge,
|
|
404
|
-
execution: input.execution,
|
|
405
|
-
});
|
|
406
|
-
}
|
|
407
|
-
// eslint-disable-next-line complexity -- command dispatch keeps the CLI's existing boundary in one place.
|
|
408
|
-
async function invokeParsed(invocation, runtime) {
|
|
409
|
-
const environment = runtime.environment ?? process.env;
|
|
410
|
-
const execution = executionForEnvironment(environment);
|
|
411
|
-
const coordinates = await resolveInvocationCoordinates(invocation, runtime);
|
|
412
|
-
const { cwd, repo, world, candidateWorld, establishWorld } = coordinates;
|
|
413
|
-
const edge = {
|
|
414
|
-
environment,
|
|
415
|
-
readStdin: runtime.readStdin ?? readStdin,
|
|
416
|
-
...(runtime.signal === undefined ? {} : { signal: runtime.signal }),
|
|
417
|
-
...(runtime.progress === undefined ? {} : { progress: runtime.progress }),
|
|
418
|
-
};
|
|
419
|
-
const parsed = invocation.command;
|
|
420
|
-
const mapped = edge.environment.KEIYAKU_HOME?.trim();
|
|
421
|
-
const home = mapped === undefined || mapped.length === 0 ? undefined : mapped;
|
|
422
|
-
if (parsed.command === "settings")
|
|
423
|
-
return { kind: "settings", value: await settingsAt(world ?? undefined, home) };
|
|
424
|
-
if (parsed.command === "nuke")
|
|
425
|
-
return await (await import("./commands/nuke.js")).invokeNuke(parsed, world);
|
|
426
|
-
if (parsed.command === "task")
|
|
427
|
-
return await invokeTask(parsed, runtime, edge, execution, coordinates);
|
|
428
|
-
if (parsed.command === "history" && "contract" in parsed)
|
|
429
|
-
return await invokeContractHistory(repo, parsed.contract);
|
|
430
|
-
if (isParsedAkumaCommand(parsed))
|
|
431
|
-
return await invokeParsedAkuma({
|
|
432
|
-
parsed,
|
|
433
|
-
cwd,
|
|
434
|
-
...(invocation.workdir === undefined ? {} : { workdir: invocation.workdir }),
|
|
435
|
-
world,
|
|
436
|
-
candidate: candidateWorld,
|
|
437
|
-
establish: coordinates.establishWorld,
|
|
438
|
-
...(repo === undefined ? {} : { repo }),
|
|
439
|
-
...(home === undefined ? {} : { home }),
|
|
440
|
-
edge,
|
|
441
|
-
execution,
|
|
442
|
-
});
|
|
443
|
-
if (parsed.command === "ls")
|
|
444
|
-
return await invokeCatalog(parsed, world, repo, home);
|
|
445
|
-
if (parsed.command === "status")
|
|
446
|
-
return await invokeStatus(parsed, world, repo);
|
|
447
|
-
if (repo === undefined)
|
|
448
|
-
throw new Error(`${parsed.command} requires a resolved Repo`);
|
|
449
|
-
if (parsed.command === "region")
|
|
450
|
-
return invokeRegion(parsed, world, repo);
|
|
451
|
-
const scope = cwd;
|
|
452
|
-
const { configuration, hooks } = await contractSettings(parsed, execution, world, home);
|
|
453
|
-
if (parsed.command === "show") {
|
|
454
|
-
const selected = await selectContract(repo, parsed.contract, scope);
|
|
455
|
-
return { kind: "guidance", contract: selected.id, guidance: await selected.contract.guidance() };
|
|
456
|
-
}
|
|
457
|
-
if (parsed.command === "reconcile") {
|
|
458
|
-
if (parsed.contract === undefined) {
|
|
459
|
-
return {
|
|
460
|
-
kind: "observation",
|
|
461
|
-
command: "reconcile",
|
|
462
|
-
report: await repo.reconcile({ ...(hooks === undefined ? {} : { hooks }), retryHooks: parsed.retryHooks }),
|
|
463
|
-
};
|
|
464
|
-
}
|
|
465
|
-
const { contract } = await selectContract(repo, parsed.contract, scope);
|
|
466
|
-
return {
|
|
467
|
-
kind: "observation",
|
|
468
|
-
command: "reconcile",
|
|
469
|
-
...(await contract.reconcile({ ...(hooks === undefined ? {} : { hooks }), retryHooks: parsed.retryHooks })),
|
|
470
|
-
};
|
|
471
|
-
}
|
|
472
|
-
return invokeContractMutation({
|
|
473
|
-
parsed,
|
|
474
|
-
repo,
|
|
475
|
-
edge,
|
|
476
|
-
scope,
|
|
477
|
-
...(configuration === undefined ? {} : { configuration }),
|
|
478
|
-
...(hooks === undefined ? {} : { hooks }),
|
|
479
|
-
establishWorld,
|
|
480
|
-
execution,
|
|
481
|
-
});
|
|
482
|
-
}
|
|
483
|
-
function withResolvedTaskActor(command, runtime) {
|
|
484
|
-
if (command.command !== "task" || (command.action !== "add" && command.action !== "compose"))
|
|
485
|
-
return runtime;
|
|
486
|
-
const actor = actorFromEdge(typeof command.flags.actor === "string" ? command.flags.actor : undefined, runtime.environment ?? process.env);
|
|
487
|
-
return actor === undefined ? runtime : { ...runtime, actor };
|
|
488
|
-
}
|
|
489
|
-
export async function invoke(invocation, runtime = {}) {
|
|
490
|
-
try {
|
|
491
|
-
const command = invocation.command;
|
|
492
|
-
assertExplicitRepoUse(command, invocation.repo);
|
|
493
|
-
if (command.command === "install") {
|
|
494
|
-
return (await import("./commands/install.js")).installHarnesses(command.harnesses, runtime.environment ?? process.env);
|
|
495
|
-
}
|
|
496
|
-
const acquiredRuntime = await withAcquiredStdin(command, withResolvedTaskActor(command, runtime));
|
|
497
|
-
if (command.command === "bind" && command.forkOf === undefined) {
|
|
498
|
-
const markdown = await (acquiredRuntime.readStdin ?? readStdin)();
|
|
499
|
-
const { admitMarkdownBindSyntax } = await import("./commands/contract-invoke.js");
|
|
500
|
-
await admitMarkdownBindSyntax({
|
|
501
|
-
markdown,
|
|
502
|
-
...(runtime.cwd === undefined ? {} : { processCwd: runtime.cwd }),
|
|
503
|
-
...(invocation.cwd === undefined ? {} : { cwd: invocation.cwd }),
|
|
504
|
-
});
|
|
505
|
-
}
|
|
506
|
-
return await invokeParsed({
|
|
507
|
-
...(invocation.cwd === undefined ? {} : { cwd: invocation.cwd }),
|
|
508
|
-
...(invocation.repo === undefined ? {} : { repo: invocation.repo }),
|
|
509
|
-
...(invocation.workdir === undefined ? {} : { workdir: invocation.workdir }),
|
|
510
|
-
command,
|
|
511
|
-
}, acquiredRuntime);
|
|
512
|
-
}
|
|
513
|
-
catch (error) {
|
|
514
|
-
if (error instanceof Error && "executionReceipt" in error)
|
|
515
|
-
throw error;
|
|
516
|
-
if (error instanceof CliUsageError && error.guide === undefined) {
|
|
517
|
-
throw new CliUsageError(error.diagnostic, usageGuideForCommand(invocation.command));
|
|
518
|
-
}
|
|
519
|
-
throw error;
|
|
520
|
-
}
|
|
521
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { safeText } from "./terminal.js";
|
|
2
|
-
import { namedValueLines } from "./value.js";
|
|
3
|
-
export function worldObservationFailureText(result) {
|
|
4
|
-
if (result.command !== "reconcile")
|
|
5
|
-
return undefined;
|
|
6
|
-
const report = result.report;
|
|
7
|
-
if (typeof report !== "object" ||
|
|
8
|
-
report === null ||
|
|
9
|
-
!("kind" in report) ||
|
|
10
|
-
report.kind !== "world-observation-failed" ||
|
|
11
|
-
!("diagnostic" in report) ||
|
|
12
|
-
typeof report.diagnostic !== "string") {
|
|
13
|
-
return undefined;
|
|
14
|
-
}
|
|
15
|
-
return `× observation ${result.command}\n diagnostic ${report.diagnostic}`;
|
|
16
|
-
}
|
|
17
|
-
export function renderObservation(result) {
|
|
18
|
-
const failed = worldObservationFailureText(result);
|
|
19
|
-
if (failed !== undefined)
|
|
20
|
-
return failed;
|
|
21
|
-
const facts = Object.entries(result)
|
|
22
|
-
.filter(([key]) => key !== "kind" && key !== "command")
|
|
23
|
-
.flatMap(([key, value]) => namedValueLines(key, value, " "));
|
|
24
|
-
return [`observation ${safeText(result.command)}`, ...facts].join("\n");
|
|
25
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { renderAkumaText } from "./akuma.js";
|
|
2
|
-
import { renderKanshiText } from "./kanshi.js";
|
|
3
|
-
export function renderStatusSetText(result, context) {
|
|
4
|
-
if (result.entries.length === 0)
|
|
5
|
-
return "status none";
|
|
6
|
-
return result.entries
|
|
7
|
-
.map((entry) => {
|
|
8
|
-
const body = entry.kind === "contract"
|
|
9
|
-
? renderKanshiText(entry.report, context, "contract")
|
|
10
|
-
: renderAkumaText({ command: "status", contract: entry.selector, akuma: true, output: "text" }, {
|
|
11
|
-
kind: "akuma",
|
|
12
|
-
action: "status",
|
|
13
|
-
status: entry.status,
|
|
14
|
-
...(entry.alias === undefined ? {} : { alias: entry.alias }),
|
|
15
|
-
}, context);
|
|
16
|
-
return body;
|
|
17
|
-
})
|
|
18
|
-
.join("\n\n");
|
|
19
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { renderObservation } from "./board.js";
|
|
2
|
-
import { renderAccepted, renderContractHistory, renderRetry } from "./contract.js";
|
|
3
|
-
import { renderKanshiText } from "./kanshi.js";
|
|
4
|
-
import { renderConflictMaterialized, renderRefusal } from "./refusal.js";
|
|
5
|
-
import { renderCatalogText } from "./catalog.js";
|
|
6
|
-
import { renderNukeText } from "./nuke.js";
|
|
7
|
-
import { renderRegionText } from "./region.js";
|
|
8
|
-
import { renderStatusSetText } from "./status-set.js";
|
|
9
|
-
export function renderText(result, context) {
|
|
10
|
-
if (result.kind === "guidance")
|
|
11
|
-
return result.guidance;
|
|
12
|
-
if (result.kind === "status")
|
|
13
|
-
return renderKanshiText(result.report, context, result.selection);
|
|
14
|
-
if (result.kind === "status-set")
|
|
15
|
-
return renderStatusSetText(result, context);
|
|
16
|
-
if (result.kind === "catalog")
|
|
17
|
-
return renderCatalogText(result.catalog);
|
|
18
|
-
if (result.kind === "contract-history")
|
|
19
|
-
return renderContractHistory(result.history);
|
|
20
|
-
if (result.kind === "region")
|
|
21
|
-
return renderRegionText(result.region);
|
|
22
|
-
if (result.kind === "nuke")
|
|
23
|
-
return renderNukeText(result.result);
|
|
24
|
-
if (result.kind === "accepted")
|
|
25
|
-
return renderAccepted(result, context);
|
|
26
|
-
if (result.kind === "refused")
|
|
27
|
-
return renderRefusal(result, context);
|
|
28
|
-
if (result.kind === "retry")
|
|
29
|
-
return renderRetry(result, context);
|
|
30
|
-
if (result.kind === "integration-conflict-materialized")
|
|
31
|
-
return renderConflictMaterialized(result, context);
|
|
32
|
-
return renderObservation(result);
|
|
33
|
-
}
|