@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,355 +1,388 @@
|
|
|
1
|
-
import { CliUsageError,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
`Default actions: ${DEFAULT_ALLOWED_ACTIONS.join(", ")}.`,
|
|
28
|
-
"Repeated --allowed adds actions to the selected Akuma's allowed actions; it cannot remove inherited permissions.",
|
|
29
|
-
"If no actions are configured, defaults apply; an explicitly empty list allows none.",
|
|
30
|
-
"An Akuma started by another Akuma can use only actions its parent can use. status <aku/...|@alias> shows that Akuma's allowed actions.",
|
|
31
|
-
"--schema checks the Akuma's answer against a JSON Schema file; stdin is still the prompt source.",
|
|
32
|
-
"On success, the Akuma is assigned to the Contract; if @name is already in use, --alias reassigns it to this Akuma.",
|
|
33
|
-
"With --wait, completed activity streams on stderr and the final answer is written to stdout once.",
|
|
34
|
-
].join("\n"),
|
|
35
|
-
},
|
|
36
|
-
wait: {
|
|
37
|
-
arity: "one-or-more",
|
|
38
|
-
stdin: false,
|
|
39
|
-
flags: { any: "boolean", all: "boolean", timeout: "value", json: "boolean" },
|
|
40
|
-
usage: "wait <akuma-selector>... [--any | --all] [--timeout <duration>]",
|
|
41
|
-
purpose: "Wait for one or more Akumas to finish work.",
|
|
42
|
-
details: [
|
|
43
|
-
"Without --any or --all the mode is any: the wait returns when any selected Akuma completes.",
|
|
44
|
-
"--all waits until every selected Akuma completes.",
|
|
45
|
-
"An already completed member counts immediately, so repeating a selection can return at once.",
|
|
46
|
-
"Akuma names, completed activity, and the final result stream on stderr.",
|
|
47
|
-
"A streamed plural wait leaves stdout empty, and so does a single wait with no answer.",
|
|
48
|
-
"Only a single selected Akuma that answered writes to stdout, exactly its answer.",
|
|
49
|
-
"With --json nothing streams and stdout carries the result document.",
|
|
50
|
-
].join("\n"),
|
|
51
|
-
},
|
|
52
|
-
tell: {
|
|
53
|
-
arity: 1,
|
|
54
|
-
stdin: true,
|
|
55
|
-
flags: { interrupt: "boolean", schema: "value", wait: "value", json: "boolean" },
|
|
56
|
-
usage: "tell <aku/...|@alias> [--interrupt] [--schema <file>] [--wait <duration>] (<prompt> | -)",
|
|
57
|
-
purpose: "Send a prompt to an Akuma and wake it to respond.",
|
|
58
|
-
details: [
|
|
59
|
-
"Give <prompt> as one argument, or use - to read stdin.",
|
|
60
|
-
"--interrupt ends the Akuma's current work before accepting the new prompt and waking it again.",
|
|
61
|
-
"--schema reads a JSON Schema file for the answer contract; stdin remains the prompt source.",
|
|
62
|
-
"--wait waits for the answer to this prompt, for the supplied duration after it is accepted.",
|
|
63
|
-
"With --wait, completed activity streams on stderr and the final answer is written to stdout once.",
|
|
64
|
-
].join("\n"),
|
|
65
|
-
},
|
|
66
|
-
history: {
|
|
67
|
-
arity: 1,
|
|
68
|
-
stdin: false,
|
|
69
|
-
flags: { id: "value", before: "value", since: "value", limit: "value", last: "boolean", json: "boolean" },
|
|
70
|
-
usage: "history <aku/...|@alias> [--id <historyId> | --before <index> | --since <index>] [--limit <count>] [--last]\nhistory <kei/...>",
|
|
71
|
-
purpose: "Read an Akuma's answers and activity, or a Contract's history of changes and assigned work.",
|
|
72
|
-
details: [
|
|
73
|
-
"--id reads the exact retained answered turn (turn/<number>).",
|
|
74
|
-
"--before <index> pages older rows before that sequence; --since <index> pages newer rows after it.",
|
|
75
|
-
"--limit bounds page size (default 12); without --since, the latest rows are shown.",
|
|
76
|
-
"With --since, paging starts at the earliest newer rows.",
|
|
77
|
-
"--last returns only the most recent answer, if one exists; it is not a history page.",
|
|
78
|
-
].join("\n"),
|
|
79
|
-
},
|
|
80
|
-
fork: {
|
|
81
|
-
arity: 1,
|
|
82
|
-
stdin: false,
|
|
83
|
-
flags: { at: "value", json: "boolean" },
|
|
84
|
-
usage: "fork <aku/...|@alias> --at <historyId>",
|
|
85
|
-
purpose: "Create a new Akuma from one retained answered turn.",
|
|
86
|
-
},
|
|
87
|
-
kill: {
|
|
88
|
-
arity: "one-or-more",
|
|
89
|
-
stdin: false,
|
|
90
|
-
flags: { json: "boolean" },
|
|
91
|
-
usage: "kill <akuma-selector>...",
|
|
92
|
-
purpose: "Stop the selected Akuma's current work; it can be woken again with tell.",
|
|
93
|
-
},
|
|
94
|
-
};
|
|
95
|
-
export function isAkumaAction(value) {
|
|
96
|
-
return value !== undefined && Object.hasOwn(AKUMA_COMMAND_SPECS, value);
|
|
97
|
-
}
|
|
98
|
-
export function isParsedAkumaCommand(command) {
|
|
99
|
-
return isAkumaAction(command.command) && !("contract" in command && command.command === "history");
|
|
1
|
+
import { CliUsageError, isBlankInput } from "../usage.js";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { squareAssignedParticipantName } from "@astrosheep/square";
|
|
5
|
+
import { emitInitiatingPluginSignal } from "../../plugin/akuma-signals.js";
|
|
6
|
+
import { canonicalBirthCwd } from "../../akuma/call-input.js";
|
|
7
|
+
import { Schema } from "../../akuma/index.js";
|
|
8
|
+
import { executionChannel } from "../../akuma/requests.js";
|
|
9
|
+
import { settings } from "../../settings.js";
|
|
10
|
+
import { AkumaWorldScopeError } from "../../index.js";
|
|
11
|
+
import { akumasWithExecution } from "../../library/akumas.js";
|
|
12
|
+
import { contractFromInput } from "../selectors.js";
|
|
13
|
+
import { ActivityDriver } from "../activity.js";
|
|
14
|
+
import { displayContext, resultContext, writeJson, writeStderr, writeStdout } from "../streams.js";
|
|
15
|
+
import { callObservationStream, inputWaitStream, waitObservationStream, } from "../render/akuma-activity.js";
|
|
16
|
+
import { askRawAnswer, callRawAnswer, historyRawAnswer, waitRawAnswer } from "../render/akuma-activity.js";
|
|
17
|
+
import { askExitCode, askProgressStream, callExitCode, callObservationHead, forkExitCode, historyExitCode, killExitCode, renderCallText, renderForkText, renderHistoryText, renderKillText, renderTellText, renderWaitText, tellExitCode, waitedTellProgress, } from "../render/akuma.js";
|
|
18
|
+
export { isParsedAkumaCommand, renderAkumaHelp } from "./akuma-grammar.js";
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Leaf dispatch: acquisition, one public SDK invocation, direct rendering
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
async function settingsAt(root, home) {
|
|
23
|
+
return settings({
|
|
24
|
+
...(root === undefined ? {} : { root }),
|
|
25
|
+
...(home === undefined ? {} : { home }),
|
|
26
|
+
});
|
|
100
27
|
}
|
|
101
|
-
|
|
102
|
-
return
|
|
28
|
+
function akumas(input) {
|
|
29
|
+
return akumasWithExecution(input.path, input.execution);
|
|
103
30
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
31
|
+
async function schemaFromFile(path) {
|
|
32
|
+
try {
|
|
33
|
+
const parsed = JSON.parse(await readFile(path, "utf8"));
|
|
34
|
+
return Schema.json(parsed, (value) => value);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
throw new Error(`cannot read JSON Schema file ${path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
38
|
+
}
|
|
110
39
|
}
|
|
111
|
-
|
|
112
|
-
return
|
|
40
|
+
function inputAlias(selector) {
|
|
41
|
+
return selector.startsWith("@") ? selector : undefined;
|
|
113
42
|
}
|
|
114
|
-
function
|
|
115
|
-
if (
|
|
116
|
-
|
|
117
|
-
|
|
43
|
+
async function promptBody(action, command, input) {
|
|
44
|
+
if (command.prompt.kind !== "stdin")
|
|
45
|
+
return command.prompt.value;
|
|
46
|
+
const bytes = await input.readStdin();
|
|
47
|
+
if (isBlankInput(bytes))
|
|
48
|
+
throw new CliUsageError(`${action} requires a nonblank prompt`);
|
|
49
|
+
return bytes;
|
|
118
50
|
}
|
|
119
|
-
function
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
51
|
+
function waitObserver(stream, driver, onSelected) {
|
|
52
|
+
return {
|
|
53
|
+
selected: (selected) => {
|
|
54
|
+
onSelected?.(selected);
|
|
55
|
+
stream.select(selected);
|
|
56
|
+
},
|
|
57
|
+
observe: (observed) => {
|
|
58
|
+
driver.settle(stream.observe(observed), stream.frame());
|
|
59
|
+
},
|
|
60
|
+
};
|
|
128
61
|
}
|
|
129
|
-
function
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if (kind === undefined)
|
|
134
|
-
fail(`option ${token} is not valid for ${input.action}`);
|
|
135
|
-
if (kind !== "repeatable" && flags[name] !== undefined)
|
|
136
|
-
fail(`duplicate option: ${token}`);
|
|
137
|
-
if (kind === "boolean") {
|
|
138
|
-
flags[name] = true;
|
|
139
|
-
return input.index;
|
|
62
|
+
async function inputInitiator(input) {
|
|
63
|
+
let initiator;
|
|
64
|
+
try {
|
|
65
|
+
initiator = squareAssignedParticipantName(input.environment);
|
|
140
66
|
}
|
|
141
|
-
|
|
142
|
-
if (
|
|
143
|
-
|
|
67
|
+
catch { }
|
|
68
|
+
if (initiator === undefined)
|
|
69
|
+
return {};
|
|
70
|
+
try {
|
|
71
|
+
await emitInitiatingPluginSignal({
|
|
72
|
+
world: input.path,
|
|
73
|
+
...(input.settings === undefined ? {} : { settings: input.settings }),
|
|
74
|
+
initiator,
|
|
75
|
+
reportDiagnostic: (message) => writeStderr(message),
|
|
76
|
+
});
|
|
144
77
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return
|
|
78
|
+
catch (error) {
|
|
79
|
+
writeStderr(`! plugin initiation: ${error instanceof Error ? error.message : String(error)}`);
|
|
80
|
+
}
|
|
81
|
+
return { initiator };
|
|
82
|
+
}
|
|
83
|
+
function emitResult(body, exact) {
|
|
84
|
+
if (exact)
|
|
85
|
+
process.stdout.write(body);
|
|
86
|
+
else
|
|
87
|
+
writeStdout(body);
|
|
149
88
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
89
|
+
// eslint-disable-next-line complexity -- one call owns prompt/schema/placement plus live observation.
|
|
90
|
+
async function runCall(command, input) {
|
|
91
|
+
const body = command.prompt === undefined ? undefined : await promptBody("call", { prompt: command.prompt }, input);
|
|
92
|
+
const schema = command.schema === undefined ? undefined : await schemaFromFile(command.schema);
|
|
93
|
+
const caller = akumas(input);
|
|
94
|
+
const request = {
|
|
95
|
+
...(await inputInitiator(input)),
|
|
96
|
+
archetype: command.archetype,
|
|
97
|
+
...(body === undefined ? {} : { body }),
|
|
98
|
+
...(input.home === undefined ? {} : { home: input.home }),
|
|
99
|
+
...(input.settings === undefined ? {} : { settings: input.settings }),
|
|
100
|
+
...(input.executionCwd === undefined ? {} : { cwd: input.executionCwd }),
|
|
101
|
+
...(input.contract === undefined ? {} : { contract: input.contract }),
|
|
102
|
+
...(command.alias === undefined ? {} : { alias: command.alias }),
|
|
103
|
+
...(command.allowed === undefined ? {} : { allowed: command.allowed }),
|
|
104
|
+
...(schema === undefined ? {} : { schema }),
|
|
105
|
+
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
106
|
+
};
|
|
107
|
+
let stream;
|
|
108
|
+
const driver = new ActivityDriver(process.stderr);
|
|
109
|
+
const observing = command.mode === "wait" && command.output === "text";
|
|
110
|
+
const observe = observing
|
|
111
|
+
? {
|
|
112
|
+
admitted: (tell, id, head) => {
|
|
113
|
+
stream = callObservationStream(resultContext(), callObservationHead({ akuma: id, ...head }), {
|
|
114
|
+
admittedAt: tell.row.at,
|
|
115
|
+
});
|
|
116
|
+
driver.redraw(stream.frame());
|
|
117
|
+
},
|
|
118
|
+
observe: (observation) => {
|
|
119
|
+
driver.settle(stream?.observe(observation) ?? [], stream?.frame() ?? []);
|
|
120
|
+
},
|
|
163
121
|
}
|
|
164
|
-
|
|
165
|
-
|
|
122
|
+
: undefined;
|
|
123
|
+
try {
|
|
124
|
+
const result = await caller.call({
|
|
125
|
+
...request,
|
|
126
|
+
mode: command.mode,
|
|
127
|
+
...(command.timeoutMs === undefined ? {} : { timeoutMs: command.timeoutMs }),
|
|
128
|
+
...(observe === undefined ? {} : { observe }),
|
|
129
|
+
});
|
|
130
|
+
let streamed = stream !== undefined;
|
|
131
|
+
if (stream !== undefined) {
|
|
132
|
+
driver.conclude(stream.conclude(result.observation));
|
|
166
133
|
}
|
|
167
|
-
else if (
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
134
|
+
else if (observing && result.observation.kind === "failed") {
|
|
135
|
+
const fallback = inputWaitStream(resultContext(), () => callObservationHead({
|
|
136
|
+
akuma: result.akuma,
|
|
137
|
+
dispatch: result.dispatch,
|
|
138
|
+
alias: result.alias,
|
|
139
|
+
}), { cursor: "empty", answerSeparator: true });
|
|
140
|
+
writeStderr(fallback.conclude({ kind: "failed", diagnostic: result.observation.failure.diagnostic }));
|
|
141
|
+
streamed = true;
|
|
171
142
|
}
|
|
172
|
-
|
|
173
|
-
|
|
143
|
+
if (command.output === "json") {
|
|
144
|
+
writeJson(result);
|
|
145
|
+
return callExitCode(result);
|
|
174
146
|
}
|
|
147
|
+
const raw = callRawAnswer(result, streamed);
|
|
148
|
+
if (raw === undefined)
|
|
149
|
+
emitResult(renderCallText(result, streamed, displayContext()), false);
|
|
150
|
+
else
|
|
151
|
+
emitResult(raw, true);
|
|
152
|
+
return callExitCode(result);
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
driver.close(stream?.flush() ?? []);
|
|
175
156
|
}
|
|
176
|
-
return { flags, positionals, stdin };
|
|
177
|
-
}
|
|
178
|
-
function positiveIndex(raw, option, fail) {
|
|
179
|
-
if (typeof raw !== "string" || !/^[1-9][0-9]*$/u.test(raw))
|
|
180
|
-
fail(`${option} requires a positive integer`);
|
|
181
|
-
const value = Number(raw);
|
|
182
|
-
if (!Number.isSafeInteger(value) || value <= 0)
|
|
183
|
-
fail(`${option} exceeds the safe integer range`);
|
|
184
|
-
return value;
|
|
185
|
-
}
|
|
186
|
-
function validateDirect(value, _fail) {
|
|
187
|
-
// Address validation belongs to the operation boundary so callers receive
|
|
188
|
-
// the compact Akuma refusal instead of a generic usage page.
|
|
189
|
-
return value;
|
|
190
157
|
}
|
|
191
|
-
function
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
158
|
+
async function runWait(command, input) {
|
|
159
|
+
const alias = command.akuma.length === 1 ? inputAlias(command.akuma[0]) : undefined;
|
|
160
|
+
const stream = command.output === "text" ? waitObservationStream(resultContext()) : undefined;
|
|
161
|
+
const driver = new ActivityDriver(process.stderr);
|
|
162
|
+
const startedAt = Date.now();
|
|
163
|
+
let selection;
|
|
164
|
+
const observer = stream === undefined
|
|
165
|
+
? undefined
|
|
166
|
+
: waitObserver(stream, driver, (selected) => {
|
|
167
|
+
selection = selected;
|
|
168
|
+
});
|
|
169
|
+
try {
|
|
170
|
+
const result = await akumas(input).wait({
|
|
171
|
+
akuma: command.akuma,
|
|
172
|
+
...(input.repo === undefined ? {} : { repo: input.repo }),
|
|
173
|
+
...(command.completion === undefined ? {} : { completion: command.completion }),
|
|
174
|
+
...(command.timeoutMs === undefined ? {} : { timeoutMs: command.timeoutMs }),
|
|
175
|
+
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
176
|
+
...(observer === undefined ? {} : { observe: observer }),
|
|
177
|
+
});
|
|
178
|
+
const streamed = stream !== undefined && stream.streamed();
|
|
179
|
+
if (stream !== undefined && streamed)
|
|
180
|
+
driver.conclude(stream.conclude(result));
|
|
181
|
+
const presentation = {
|
|
182
|
+
...(alias === undefined ? {} : { alias }),
|
|
183
|
+
...(selection === undefined ? {} : { selection }),
|
|
184
|
+
startedAt,
|
|
185
|
+
};
|
|
186
|
+
if (command.output === "json") {
|
|
187
|
+
writeJson(result);
|
|
188
|
+
return 0;
|
|
200
189
|
}
|
|
201
|
-
|
|
190
|
+
const raw = waitRawAnswer(result, streamed);
|
|
191
|
+
if (raw === undefined)
|
|
192
|
+
emitResult(renderWaitText(result, presentation, displayContext()), false);
|
|
193
|
+
else
|
|
194
|
+
emitResult(raw, true);
|
|
195
|
+
return 0;
|
|
196
|
+
}
|
|
197
|
+
finally {
|
|
198
|
+
driver.close(stream?.flush() ?? []);
|
|
202
199
|
}
|
|
203
|
-
return validateDirect(value, fail);
|
|
204
200
|
}
|
|
205
|
-
function
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
...(
|
|
213
|
-
...(
|
|
214
|
-
|
|
215
|
-
|
|
201
|
+
async function runTell(command, input) {
|
|
202
|
+
const body = await promptBody("tell", command, input);
|
|
203
|
+
const result = await akumas(input).tell({
|
|
204
|
+
...(await inputInitiator(input)),
|
|
205
|
+
akuma: command.akuma,
|
|
206
|
+
body,
|
|
207
|
+
...(command.interrupt ? { interrupt: true } : {}),
|
|
208
|
+
...(input.repo === undefined ? {} : { repo: input.repo }),
|
|
209
|
+
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
210
|
+
});
|
|
211
|
+
if (command.output === "json") {
|
|
212
|
+
writeJson(result);
|
|
213
|
+
return tellExitCode(result);
|
|
214
|
+
}
|
|
215
|
+
emitResult(renderTellText(result, inputAlias(command.akuma), displayContext()), false);
|
|
216
|
+
return tellExitCode(result);
|
|
216
217
|
}
|
|
217
|
-
function
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
218
|
+
async function runAsk(command, input) {
|
|
219
|
+
const body = await promptBody("ask", command, input);
|
|
220
|
+
const schema = command.schema === undefined ? undefined : await schemaFromFile(command.schema);
|
|
221
|
+
const alias = inputAlias(command.akuma);
|
|
222
|
+
const channel = executionChannel(input.execution);
|
|
223
|
+
const progress = command.output === "text" && channel.kind === "local"
|
|
224
|
+
? askProgressStream(undefined, alias, resultContext())
|
|
225
|
+
: undefined;
|
|
226
|
+
const driver = new ActivityDriver(process.stderr);
|
|
227
|
+
try {
|
|
228
|
+
const result = await akumas(input).ask({
|
|
229
|
+
...(await inputInitiator(input)),
|
|
230
|
+
akuma: command.akuma,
|
|
231
|
+
body,
|
|
232
|
+
...(command.timeoutMs === undefined ? {} : { timeoutMs: command.timeoutMs }),
|
|
233
|
+
...(schema === undefined ? {} : { schema }),
|
|
234
|
+
...(command.interrupt ? { interrupt: true } : {}),
|
|
235
|
+
...(input.repo === undefined ? {} : { repo: input.repo }),
|
|
236
|
+
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
237
|
+
...(progress === undefined
|
|
238
|
+
? {}
|
|
239
|
+
: {
|
|
240
|
+
observe: {
|
|
241
|
+
admitted: (tell, id) => {
|
|
242
|
+
driver.settle(progress.admitted(tell, id), progress.frame());
|
|
243
|
+
},
|
|
244
|
+
observe: (observation) => {
|
|
245
|
+
driver.settle(progress.observe(observation), progress.frame());
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
}),
|
|
249
|
+
});
|
|
250
|
+
if (progress !== undefined)
|
|
251
|
+
driver.conclude(progress.conclude(result).join("\n"));
|
|
252
|
+
else if (command.output === "text" && channel.kind === "body-request")
|
|
253
|
+
writeStderr(waitedTellProgress(result, alias, resultContext()));
|
|
254
|
+
if (command.output === "json") {
|
|
255
|
+
writeJson(result);
|
|
256
|
+
return askExitCode(result);
|
|
221
257
|
}
|
|
222
|
-
|
|
258
|
+
emitResult(askRawAnswer(result, schema !== undefined) ?? "", true);
|
|
259
|
+
return askExitCode(result);
|
|
260
|
+
}
|
|
261
|
+
finally {
|
|
262
|
+
driver.close(progress?.flush() ?? []);
|
|
223
263
|
}
|
|
224
|
-
return parseAkumaHistory(selector, flags, output, fail);
|
|
225
264
|
}
|
|
226
|
-
function
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
akuma:
|
|
243
|
-
...(id === undefined ? {} : { id }),
|
|
244
|
-
last:
|
|
245
|
-
...(flags.before === undefined ? {} : { before: positiveIndex(flags.before, "--before", fail) }),
|
|
246
|
-
...(flags.since === undefined ? {} : { since: positiveIndex(flags.since, "--since", fail) }),
|
|
247
|
-
...(limit === undefined ? {} : { limit }),
|
|
248
|
-
output,
|
|
265
|
+
async function runHistory(command, input) {
|
|
266
|
+
const result = await akumas(input).history({
|
|
267
|
+
akuma: command.akuma,
|
|
268
|
+
...(input.repo === undefined ? {} : { repo: input.repo }),
|
|
269
|
+
...(command.before === undefined ? {} : { before: command.before }),
|
|
270
|
+
...(command.since === undefined ? {} : { since: command.since }),
|
|
271
|
+
...(command.limit === undefined ? {} : { limit: command.limit }),
|
|
272
|
+
...(command.id === undefined ? {} : { id: command.id }),
|
|
273
|
+
last: command.last,
|
|
274
|
+
});
|
|
275
|
+
if (command.output === "json") {
|
|
276
|
+
writeJson(result);
|
|
277
|
+
return historyExitCode(result, command.id);
|
|
278
|
+
}
|
|
279
|
+
const raw = historyRawAnswer(result, command.id);
|
|
280
|
+
const presentation = {
|
|
281
|
+
...(inputAlias(command.akuma) === undefined ? {} : { alias: command.akuma }),
|
|
282
|
+
...(command.id === undefined ? {} : { id: command.id }),
|
|
283
|
+
last: command.last,
|
|
249
284
|
};
|
|
285
|
+
if (raw !== undefined)
|
|
286
|
+
emitResult(raw, true);
|
|
287
|
+
else if (command.last && result.kind === "last")
|
|
288
|
+
emitResult(result.answer, true);
|
|
289
|
+
else
|
|
290
|
+
emitResult(renderHistoryText(result, presentation, displayContext()), false);
|
|
291
|
+
return historyExitCode(result, command.id);
|
|
250
292
|
}
|
|
251
|
-
function
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
return parseHistory(selector, flags, output, fail);
|
|
293
|
+
async function runFork(command, input) {
|
|
294
|
+
const receipt = await akumas(input).fork({
|
|
295
|
+
akuma: command.akuma,
|
|
296
|
+
at: command.at,
|
|
297
|
+
...(input.repo === undefined ? {} : { repo: input.repo }),
|
|
298
|
+
});
|
|
299
|
+
if (command.output === "json") {
|
|
300
|
+
writeJson(receipt);
|
|
301
|
+
return forkExitCode(receipt);
|
|
261
302
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
return { command: action, akuma, at, output };
|
|
303
|
+
emitResult(renderForkText(receipt), false);
|
|
304
|
+
return forkExitCode(receipt);
|
|
265
305
|
}
|
|
266
|
-
function
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
306
|
+
async function runKill(command, input) {
|
|
307
|
+
const alias = command.akuma.length === 1 ? inputAlias(command.akuma[0]) : undefined;
|
|
308
|
+
const result = await akumas(input).kill({
|
|
309
|
+
akuma: command.akuma,
|
|
310
|
+
...(input.repo === undefined ? {} : { repo: input.repo }),
|
|
311
|
+
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
312
|
+
});
|
|
313
|
+
if (command.output === "json") {
|
|
314
|
+
writeJson(result);
|
|
315
|
+
return killExitCode(result);
|
|
316
|
+
}
|
|
317
|
+
emitResult(renderKillText(result, alias, displayContext()), false);
|
|
318
|
+
return killExitCode(result);
|
|
278
319
|
}
|
|
279
|
-
function
|
|
280
|
-
const
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
...(flags.wait === undefined ? {} : { timeoutMs: parseDuration(flags.wait, "--wait", fail) }),
|
|
287
|
-
prompt,
|
|
288
|
-
output,
|
|
289
|
-
};
|
|
320
|
+
async function akumaWorld(command, coordinates) {
|
|
321
|
+
const world = command.command === "call"
|
|
322
|
+
? (coordinates.candidateWorld ?? (await coordinates.establishWorld()))
|
|
323
|
+
: coordinates.world;
|
|
324
|
+
if (world === null)
|
|
325
|
+
throw new CliUsageError("no Keiyaku world contains the invocation cwd");
|
|
326
|
+
return world;
|
|
290
327
|
}
|
|
291
|
-
function
|
|
292
|
-
if (
|
|
328
|
+
async function callExecutionCwd(command, cwd, workdir) {
|
|
329
|
+
if (command.command !== "call")
|
|
293
330
|
return undefined;
|
|
294
|
-
if (
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
try {
|
|
298
|
-
return decodeAllowedActions(selected, "--allowed");
|
|
299
|
-
}
|
|
300
|
-
catch (error) {
|
|
301
|
-
fail(error instanceof Error ? error.message : "invalid --allowed action");
|
|
302
|
-
}
|
|
331
|
+
if (workdir !== undefined)
|
|
332
|
+
return await canonicalBirthCwd(resolve(cwd, workdir), `workdir is not an existing directory: ${workdir}`);
|
|
333
|
+
return cwd;
|
|
303
334
|
}
|
|
304
|
-
function
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
const mode = flags.wait === undefined ? "detach" : "wait";
|
|
316
|
-
const timeoutMs = flags.wait === undefined ? undefined : parseDuration(flags.wait, "--wait", fail);
|
|
317
|
-
const allowed = parseAllowedFlag(flags.allowed, fail);
|
|
318
|
-
const schema = flags.schema === undefined ? undefined : stringFlag(flags.schema, "call --schema requires a file", fail);
|
|
335
|
+
async function akumaInput(command, coordinates, workdir, runtime) {
|
|
336
|
+
const path = await akumaWorld(command, coordinates);
|
|
337
|
+
const executionCwd = await callExecutionCwd(command, coordinates.cwd, workdir);
|
|
338
|
+
const execution = runtime.execution;
|
|
339
|
+
const home = command.command === "call" ? runtime.home : undefined;
|
|
340
|
+
const configuration = command.command === "call" ? await settingsAt(path, home) : undefined;
|
|
341
|
+
if (command.command === "call" && command.contract !== undefined && coordinates.repo === undefined)
|
|
342
|
+
throw new Error("call with Contract requires a resolved Repo");
|
|
343
|
+
const contract = command.command === "call" && command.contract !== undefined
|
|
344
|
+
? contractFromInput(coordinates.repo, command.contract, execution).contract
|
|
345
|
+
: undefined;
|
|
319
346
|
return {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
...(
|
|
323
|
-
...(
|
|
324
|
-
|
|
325
|
-
...(
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
347
|
+
path,
|
|
348
|
+
...(executionCwd === undefined ? {} : { executionCwd }),
|
|
349
|
+
...(home === undefined ? {} : { home }),
|
|
350
|
+
...(configuration === undefined ? {} : { settings: configuration }),
|
|
351
|
+
...(contract === undefined ? {} : { contract }),
|
|
352
|
+
...(coordinates.repo === undefined ? {} : { repo: coordinates.repo }),
|
|
353
|
+
environment: runtime.environment,
|
|
354
|
+
readStdin: runtime.readStdin,
|
|
355
|
+
execution,
|
|
356
|
+
...(runtime.signal === undefined ? {} : { signal: runtime.signal }),
|
|
330
357
|
};
|
|
331
358
|
}
|
|
332
|
-
export function
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
359
|
+
export async function runAkumaCommand(command, coordinates, workdir, runtime) {
|
|
360
|
+
try {
|
|
361
|
+
const input = await akumaInput(command, coordinates, workdir, runtime);
|
|
362
|
+
switch (command.command) {
|
|
363
|
+
case "call":
|
|
364
|
+
return await runCall(command, input);
|
|
365
|
+
case "wait":
|
|
366
|
+
return await runWait(command, input);
|
|
367
|
+
case "tell":
|
|
368
|
+
return await runTell(command, input);
|
|
369
|
+
case "ask":
|
|
370
|
+
return await runAsk(command, input);
|
|
371
|
+
case "history":
|
|
372
|
+
return await runHistory(command, input);
|
|
373
|
+
case "fork":
|
|
374
|
+
return await runFork(command, input);
|
|
375
|
+
case "kill":
|
|
376
|
+
return await runKill(command, input);
|
|
377
|
+
}
|
|
348
378
|
}
|
|
349
|
-
|
|
350
|
-
|
|
379
|
+
catch (error) {
|
|
380
|
+
if (error instanceof Error && "executionReceipt" in error)
|
|
381
|
+
throw error;
|
|
382
|
+
if (error instanceof AkumaWorldScopeError)
|
|
383
|
+
throw error;
|
|
384
|
+
if (error instanceof TypeError)
|
|
385
|
+
throw new CliUsageError(error.message);
|
|
386
|
+
throw error;
|
|
351
387
|
}
|
|
352
|
-
if (stdin)
|
|
353
|
-
fail(`${action} reads no stdin`);
|
|
354
|
-
return parseAddressed(action, positionals, flags, output, fail);
|
|
355
388
|
}
|