@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,22 +1,23 @@
|
|
|
1
1
|
/** @architectureCompositionRoot */
|
|
2
|
-
import { appendFile } from "node:fs/promises";
|
|
3
2
|
import { randomUUID } from "node:crypto";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { appendFile } from "node:fs/promises";
|
|
4
|
+
import { admitAkumaCall } from "../akuma/akuma-call.js";
|
|
5
|
+
import { AkumaOwner } from "../akuma/akuma-owner.js";
|
|
6
|
+
import { decodeAskObservation, observeAdmittedAskAkuma } from "../akuma/akuma-selection-execution.js";
|
|
7
|
+
import { canonicalBirthCwd } from "../akuma/call-input.js";
|
|
7
8
|
import { readSoul } from "../akuma/heart/index.js";
|
|
9
|
+
import { pathsForAkuId } from "../akuma/identity.js";
|
|
10
|
+
import { localExecutionContext } from "../akuma/requests.js";
|
|
11
|
+
import { schemaJsonText } from "../akuma/schema.js";
|
|
12
|
+
import { moveAlias } from "../alias/index.js";
|
|
8
13
|
import { AuthorityCorruptionError } from "../core/facts/errors.js";
|
|
9
14
|
import { publishDispatch, readDispatch } from "../dispatch/index.js";
|
|
10
15
|
import { parseAkumaAlias } from "../identity/selector.js";
|
|
11
16
|
import { emitCalledPluginSignal } from "../plugin/akuma-signals.js";
|
|
12
17
|
import { World } from "../world.js";
|
|
13
|
-
import { schemaJsonText } from "../akuma/schema.js";
|
|
14
|
-
import { decodeTellWaitObservation, observeAdmittedTellWaitAkuma, } from "../akuma/fleet-execution.js";
|
|
15
|
-
import { localExecutionContext } from "../akuma/requests.js";
|
|
16
|
-
import { canonicalBirthCwd } from "../akuma/call-input.js";
|
|
17
|
-
import { requireInput } from "./input.js";
|
|
18
18
|
import { addressAkuma } from "./address.js";
|
|
19
|
-
import {
|
|
19
|
+
import { requireInput } from "./input.js";
|
|
20
|
+
import { seatForKeiyaku } from "./keiyaku.js";
|
|
20
21
|
import { scopeForRepo } from "./repo.js";
|
|
21
22
|
function nonblank(value, label) {
|
|
22
23
|
if (typeof value !== "string" || value.trim().length === 0) {
|
|
@@ -44,13 +45,6 @@ function homeOption(value) {
|
|
|
44
45
|
return undefined;
|
|
45
46
|
return nonblank(value, "home");
|
|
46
47
|
}
|
|
47
|
-
function akumaWorld(path, home, settings, execution) {
|
|
48
|
-
return createAkumaProduct(path, {
|
|
49
|
-
...(home === undefined ? {} : { home }),
|
|
50
|
-
...(settings === undefined ? {} : { settings }),
|
|
51
|
-
...(execution === undefined ? {} : { execution }),
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
48
|
function onlyKeys(values, allowed, label) {
|
|
55
49
|
const accepted = new Set(allowed);
|
|
56
50
|
for (const key of Object.keys(values)) {
|
|
@@ -71,6 +65,15 @@ function callMode(value) {
|
|
|
71
65
|
return "wait";
|
|
72
66
|
throw new TypeError("mode must be wait or detach");
|
|
73
67
|
}
|
|
68
|
+
function callBody(value) {
|
|
69
|
+
return value === undefined ? undefined : text(value, "body");
|
|
70
|
+
}
|
|
71
|
+
function validateCallBodyOptions(body, values, mode) {
|
|
72
|
+
if (body === undefined && values.schema !== undefined)
|
|
73
|
+
throw new TypeError("schema requires body");
|
|
74
|
+
if (body === undefined && (mode === "wait" || values.timeoutMs !== undefined))
|
|
75
|
+
throw new TypeError("wait and timeoutMs require body");
|
|
76
|
+
}
|
|
74
77
|
function callTimeout(value, mode) {
|
|
75
78
|
if (mode === "detach" && value !== undefined) {
|
|
76
79
|
throw new TypeError("timeoutMs is not valid in detach mode");
|
|
@@ -97,10 +100,8 @@ function callSeat(contract) {
|
|
|
97
100
|
throw new TypeError("contract must be a Keiyaku");
|
|
98
101
|
return seat;
|
|
99
102
|
}
|
|
100
|
-
async function
|
|
101
|
-
|
|
102
|
-
return undefined;
|
|
103
|
-
const soul = await readSoul(pathsForAkuId(path, born.id));
|
|
103
|
+
async function requestedParent(path, id) {
|
|
104
|
+
const soul = await readSoul(pathsForAkuId(path, id));
|
|
104
105
|
return soul?.origin.kind === "request" ? soul.origin.parent : undefined;
|
|
105
106
|
}
|
|
106
107
|
function pluginDiagnostic(error) {
|
|
@@ -115,10 +116,16 @@ async function recordPluginDiagnostic(paths, error) {
|
|
|
115
116
|
// Plugin diagnostic loss must not change an already admitted call.
|
|
116
117
|
}
|
|
117
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* The submitting process's optional called-plugin observation. It runs once,
|
|
121
|
+
* after the prepared executor returned its local value or the forwarded caller
|
|
122
|
+
* received its exact live output, and it never gates birth, initial Tell, or a
|
|
123
|
+
* later integration stage. A failed delivery stays a diagnostic.
|
|
124
|
+
*/
|
|
118
125
|
async function emitCalledSignal(input) {
|
|
119
126
|
try {
|
|
120
|
-
const
|
|
121
|
-
const
|
|
127
|
+
const paths = pathsForAkuId(input.path, input.admitted.id);
|
|
128
|
+
const callerAkumaId = input.admitted.requested ? await requestedParent(input.path, input.admitted.id) : undefined;
|
|
122
129
|
const reportDiagnostic = (message) => {
|
|
123
130
|
void recordPluginDiagnostic(paths, message);
|
|
124
131
|
};
|
|
@@ -127,7 +134,7 @@ async function emitCalledSignal(input) {
|
|
|
127
134
|
world: input.path,
|
|
128
135
|
...(input.settings === undefined ? {} : { settings: input.settings }),
|
|
129
136
|
reportDiagnostic,
|
|
130
|
-
akumaId: input.
|
|
137
|
+
akumaId: input.admitted.id,
|
|
131
138
|
...(callerAkumaId === undefined ? {} : { callerAkumaId }),
|
|
132
139
|
...(input.contractId === undefined ? {} : { contractId: input.contractId }),
|
|
133
140
|
});
|
|
@@ -140,18 +147,6 @@ async function emitCalledSignal(input) {
|
|
|
140
147
|
// Plugin delivery must not change an already admitted call.
|
|
141
148
|
}
|
|
142
149
|
}
|
|
143
|
-
async function admitCall(input) {
|
|
144
|
-
const born = await input.world.admit(input.call, input.context);
|
|
145
|
-
const akuma = born.kind === "requested" ? born.id : born.allocated.id;
|
|
146
|
-
await emitCalledSignal({
|
|
147
|
-
path: input.path,
|
|
148
|
-
...(input.settings === undefined ? {} : { settings: input.settings }),
|
|
149
|
-
born,
|
|
150
|
-
akumaId: akuma,
|
|
151
|
-
...(input.contractId === undefined ? {} : { contractId: input.contractId }),
|
|
152
|
-
});
|
|
153
|
-
return { born, akuma };
|
|
154
|
-
}
|
|
155
150
|
async function dispatchStage(input) {
|
|
156
151
|
try {
|
|
157
152
|
const published = await publishDispatch(input);
|
|
@@ -223,10 +218,11 @@ async function parseCallInput(input) {
|
|
|
223
218
|
onlyKeys(values, CALL_INPUT_KEYS, "Akumas.call input");
|
|
224
219
|
const path = await World.prove(nonblank(values.path, "path"));
|
|
225
220
|
const archetype = nonblank(values.archetype, "archetype");
|
|
226
|
-
const body =
|
|
221
|
+
const body = callBody(values.body);
|
|
227
222
|
const initiator = values.initiator === undefined ? undefined : text(values.initiator, "initiator");
|
|
228
223
|
const cwd = values.cwd === undefined ? undefined : nonblank(values.cwd, "cwd");
|
|
229
224
|
const mode = callMode(values.mode);
|
|
225
|
+
validateCallBodyOptions(body, values, mode);
|
|
230
226
|
const timeoutMs = callTimeout(values.timeoutMs, mode);
|
|
231
227
|
const signal = callSignal(values.signal);
|
|
232
228
|
const home = homeOption(values.home);
|
|
@@ -236,13 +232,15 @@ async function parseCallInput(input) {
|
|
|
236
232
|
const schema = values.schema;
|
|
237
233
|
const schemaJson = schema === undefined ? undefined : schemaJsonText(schema);
|
|
238
234
|
const observe = values.observe;
|
|
239
|
-
const initialTell =
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
235
|
+
const initialTell = body === undefined
|
|
236
|
+
? undefined
|
|
237
|
+
: {
|
|
238
|
+
tellId: randomUUID(),
|
|
239
|
+
body,
|
|
240
|
+
...(schemaJson === undefined ? {} : { schemaJson }),
|
|
241
|
+
...(schema === undefined ? {} : { schema }),
|
|
242
|
+
...(initiator === undefined ? {} : { initiator }),
|
|
243
|
+
};
|
|
246
244
|
return {
|
|
247
245
|
path,
|
|
248
246
|
archetype,
|
|
@@ -255,171 +253,156 @@ async function parseCallInput(input) {
|
|
|
255
253
|
...(alias === undefined ? {} : { alias }),
|
|
256
254
|
...(values.allowed === undefined ? {} : { allowed: values.allowed }),
|
|
257
255
|
seat,
|
|
258
|
-
initialTell,
|
|
256
|
+
...(initialTell === undefined ? {} : { initialTell }),
|
|
259
257
|
...(observe === undefined ? {} : { observe }),
|
|
260
258
|
};
|
|
261
259
|
}
|
|
260
|
+
function callConfiguration(input, execution) {
|
|
261
|
+
return {
|
|
262
|
+
...(input.home === undefined ? {} : { home: input.home }),
|
|
263
|
+
...(input.settings === undefined ? {} : { settings: input.settings }),
|
|
264
|
+
execution,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
262
267
|
function callAdmissionInput(input, execution) {
|
|
263
268
|
return {
|
|
264
269
|
archetype: input.archetype,
|
|
265
|
-
initialTell
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
270
|
+
...(input.initialTell === undefined
|
|
271
|
+
? {}
|
|
272
|
+
: {
|
|
273
|
+
initialTell: {
|
|
274
|
+
tellId: input.initialTell.tellId,
|
|
275
|
+
body: input.initialTell.body,
|
|
276
|
+
...(input.initialTell.schemaJson === undefined ? {} : { schemaJson: input.initialTell.schemaJson }),
|
|
277
|
+
...(input.initialTell.initiator === undefined ? {} : { initiator: input.initialTell.initiator }),
|
|
278
|
+
},
|
|
279
|
+
}),
|
|
271
280
|
...(input.allowed === undefined ? {} : { allowed: input.allowed }),
|
|
272
281
|
...(execution === undefined ? {} : { cwd: execution.cwd }),
|
|
273
282
|
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
274
283
|
};
|
|
275
284
|
}
|
|
276
|
-
|
|
277
|
-
const parsed = await parseCallInput(input);
|
|
278
|
-
const execution = await resolveCallExecution(parsed.cwd === undefined ? {} : { cwd: parsed.cwd });
|
|
279
|
-
const world = akumaWorld(parsed.path, parsed.home, parsed.settings, context);
|
|
280
|
-
const { born, akuma } = await admitCall({
|
|
281
|
-
path: parsed.path,
|
|
282
|
-
world,
|
|
283
|
-
call: callAdmissionInput(parsed, execution),
|
|
284
|
-
context: execution === undefined ? {} : { cwdCanonical: true },
|
|
285
|
-
...(parsed.settings === undefined ? {} : { settings: parsed.settings }),
|
|
286
|
-
...(parsed.seat === undefined ? {} : { contractId: parsed.seat.id }),
|
|
287
|
-
});
|
|
288
|
-
const completedExecution = execution ?? born.execution;
|
|
289
|
-
const dispatch = parsed.seat === undefined
|
|
290
|
-
? { kind: "none" }
|
|
291
|
-
: await dispatchStage({ repository: parsed.seat.scope, akuId: akuma, contractId: parsed.seat.id });
|
|
292
|
-
const aliasStage = await resolveAliasStage(parsed.path, parsed.alias, dispatch, akuma);
|
|
285
|
+
function callResultOf(akuma, execution, dispatch, alias, initialTell) {
|
|
293
286
|
return {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
execution
|
|
297
|
-
mode: parsed.mode,
|
|
298
|
-
timeoutMs: parsed.timeoutMs,
|
|
299
|
-
...(parsed.signal === undefined ? {} : { signal: parsed.signal }),
|
|
287
|
+
kind: "called",
|
|
288
|
+
akuma,
|
|
289
|
+
execution,
|
|
300
290
|
dispatch,
|
|
301
|
-
alias
|
|
302
|
-
initialTell:
|
|
303
|
-
...(parsed.observe === undefined ? {} : { observe: parsed.observe }),
|
|
291
|
+
alias,
|
|
292
|
+
...(initialTell?.schema === undefined ? {} : { structured: true }),
|
|
304
293
|
};
|
|
305
294
|
}
|
|
306
|
-
|
|
307
|
-
const world = akumaWorld(born.path);
|
|
308
|
-
const contractId = born.dispatch.kind === "dispatched" ? born.dispatch.dispatch.contractId : undefined;
|
|
309
|
-
const handle = await world.publish(born.born, { ...(contractId === undefined ? {} : { contractId }) }, born.signal);
|
|
295
|
+
function failedCall(result, tellId, error, tell) {
|
|
310
296
|
return {
|
|
311
|
-
|
|
312
|
-
handle,
|
|
313
|
-
result: {
|
|
314
|
-
kind: "called",
|
|
315
|
-
akuma: handle.id,
|
|
316
|
-
execution: born.execution,
|
|
317
|
-
dispatch: born.dispatch,
|
|
318
|
-
alias: born.alias,
|
|
319
|
-
...(born.initialTell.schema === undefined ? {} : { structured: true }),
|
|
320
|
-
},
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
function failedCall(call, error, tell) {
|
|
324
|
-
return {
|
|
325
|
-
...call.result,
|
|
297
|
+
...result,
|
|
326
298
|
observation: {
|
|
327
299
|
kind: "failed",
|
|
328
|
-
tellId
|
|
300
|
+
tellId,
|
|
329
301
|
...(tell === undefined ? {} : { tell }),
|
|
330
302
|
failure: integrationFailure(error),
|
|
331
303
|
},
|
|
332
304
|
};
|
|
333
305
|
}
|
|
334
|
-
async function
|
|
335
|
-
const { born, handle } = call;
|
|
336
|
-
if (born.born.kind === "requested")
|
|
337
|
-
return { kind: "admitted" };
|
|
338
|
-
let admitted;
|
|
339
|
-
try {
|
|
340
|
-
admitted = await handle.admitInitialTell(born.initialTell, {
|
|
341
|
-
...(born.signal === undefined ? {} : { signal: born.signal }),
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
catch (error) {
|
|
345
|
-
if (born.signal?.aborted)
|
|
346
|
-
throw error;
|
|
347
|
-
return { kind: "failed", result: failedCall(call, error) };
|
|
348
|
-
}
|
|
349
|
-
if (admitted.kind === "birth-failed")
|
|
350
|
-
return { kind: "failed", result: failedCall(call, new Error(admitted.diagnostic)) };
|
|
351
|
-
if (admitted.kind === "not-born")
|
|
352
|
-
return {
|
|
353
|
-
kind: "failed",
|
|
354
|
-
result: failedCall(call, new Error(`Akuma ${handle.id} was not born for its initial Tell`)),
|
|
355
|
-
};
|
|
356
|
-
const wake = admitted.wake;
|
|
357
|
-
void wake.catch(() => undefined);
|
|
358
|
-
return { kind: "admitted", wake };
|
|
359
|
-
}
|
|
360
|
-
async function detachCall(call, admission) {
|
|
361
|
-
let tell;
|
|
362
|
-
try {
|
|
363
|
-
tell =
|
|
364
|
-
admission.wake === undefined
|
|
365
|
-
? await call.handle.admittedReceipt(call.born.initialTell.tellId)
|
|
366
|
-
: await admission.wake;
|
|
367
|
-
return { ...call.result, observation: { kind: "detached", tell } };
|
|
368
|
-
}
|
|
369
|
-
catch (error) {
|
|
370
|
-
if (admission.wake !== undefined)
|
|
371
|
-
tell = await call.handle.admittedReceipt(call.born.initialTell.tellId).catch(() => undefined);
|
|
372
|
-
return failedCall(call, error, tell);
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
async function observeCall(call, admission) {
|
|
376
|
-
const { born, handle } = call;
|
|
377
|
-
let tell;
|
|
306
|
+
async function observeCall(input) {
|
|
378
307
|
const onObserve = {
|
|
379
308
|
admitted: async (receipt, id) => {
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
alias: born.alias,
|
|
309
|
+
await input.observe?.admitted?.(receipt, id, {
|
|
310
|
+
dispatch: input.result.dispatch,
|
|
311
|
+
alias: input.result.alias,
|
|
384
312
|
});
|
|
385
313
|
},
|
|
386
|
-
...(
|
|
314
|
+
...(input.observe?.observe === undefined ? {} : { observe: input.observe.observe }),
|
|
387
315
|
};
|
|
388
316
|
try {
|
|
389
|
-
const observed = await
|
|
390
|
-
path:
|
|
391
|
-
id:
|
|
392
|
-
tellId:
|
|
393
|
-
timeoutMs:
|
|
394
|
-
|
|
395
|
-
...(
|
|
317
|
+
const observed = await observeAdmittedAskAkuma({
|
|
318
|
+
path: input.path,
|
|
319
|
+
id: input.akuma,
|
|
320
|
+
tellId: input.initialTell.tellId,
|
|
321
|
+
timeoutMs: input.timeoutMs,
|
|
322
|
+
receipt: input.receipt,
|
|
323
|
+
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
396
324
|
onObserve,
|
|
397
325
|
});
|
|
398
326
|
return {
|
|
399
|
-
...
|
|
327
|
+
...input.result,
|
|
400
328
|
observation: {
|
|
401
329
|
kind: "observed",
|
|
402
330
|
tell: observed.tell,
|
|
403
|
-
observation:
|
|
331
|
+
observation: input.initialTell.schema === undefined
|
|
404
332
|
? observed.observation
|
|
405
|
-
:
|
|
333
|
+
: decodeAskObservation(observed.observation, input.initialTell.schema),
|
|
406
334
|
...(observed.completedAt === undefined ? {} : { completedAt: observed.completedAt }),
|
|
407
335
|
},
|
|
408
336
|
};
|
|
409
337
|
}
|
|
410
338
|
catch (error) {
|
|
411
|
-
if (
|
|
339
|
+
if (input.signal?.aborted)
|
|
412
340
|
throw error;
|
|
413
|
-
return failedCall(
|
|
341
|
+
return failedCall(input.result, input.initialTell.tellId, error, input.receipt);
|
|
414
342
|
}
|
|
415
343
|
}
|
|
344
|
+
/** One failure that still names the child the invocation durably admitted. */
|
|
345
|
+
function knownChildFailure(reason, akuma) {
|
|
346
|
+
const error = reason instanceof Error ? reason : new Error(reason === undefined ? "call aborted" : String(reason));
|
|
347
|
+
Object.defineProperty(error, "akuma", { value: akuma, enumerable: false });
|
|
348
|
+
return error;
|
|
349
|
+
}
|
|
350
|
+
/** Preserve a native failure identity; only an unknown shape becomes a fresh Error. */
|
|
351
|
+
function asError(failure) {
|
|
352
|
+
return failure instanceof Error ? failure : new Error(failure === undefined ? "call failed" : String(failure));
|
|
353
|
+
}
|
|
416
354
|
export async function callAkumas(input, execution = localExecutionContext()) {
|
|
417
|
-
const
|
|
418
|
-
const
|
|
419
|
-
const
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
355
|
+
const parsed = await parseCallInput(input);
|
|
356
|
+
const selectedExecution = await resolveCallExecution(parsed.cwd === undefined ? {} : { cwd: parsed.cwd });
|
|
357
|
+
const seat = parsed.seat;
|
|
358
|
+
const admitted = await admitAkumaCall(parsed.path, callConfiguration(parsed, execution), {
|
|
359
|
+
...callAdmissionInput(parsed, selectedExecution),
|
|
360
|
+
...(seat === undefined ? {} : { contractId: seat.id }),
|
|
361
|
+
}, selectedExecution === undefined ? {} : { cwdCanonical: true });
|
|
362
|
+
// One caller-wiring sequence, after the prepared executor returned its local value
|
|
363
|
+
// or the forwarded caller received its exact live output, before outcome observation.
|
|
364
|
+
await emitCalledSignal({
|
|
365
|
+
path: parsed.path,
|
|
366
|
+
...(parsed.settings === undefined ? {} : { settings: parsed.settings }),
|
|
367
|
+
admitted,
|
|
368
|
+
...(seat === undefined ? {} : { contractId: seat.id }),
|
|
369
|
+
});
|
|
370
|
+
const dispatch = seat === undefined
|
|
371
|
+
? { kind: "none" }
|
|
372
|
+
: await dispatchStage({ repository: seat.scope, akuId: admitted.id, contractId: seat.id });
|
|
373
|
+
const aliasStage = await resolveAliasStage(parsed.path, parsed.alias, dispatch, admitted.id);
|
|
374
|
+
const result = callResultOf(admitted.id, selectedExecution ?? admitted.execution, dispatch, aliasStage, parsed.initialTell);
|
|
375
|
+
if (parsed.initialTell === undefined) {
|
|
376
|
+
// A prompt-free call must not report a clean birth when a launch stage failed
|
|
377
|
+
// after the child was durably born; keep the native failure and the child.
|
|
378
|
+
if (admitted.failure !== undefined)
|
|
379
|
+
throw knownChildFailure(admitted.failure, admitted.id);
|
|
380
|
+
return { ...result, observation: { kind: "born" } };
|
|
381
|
+
}
|
|
382
|
+
const receipt = admitted.tell;
|
|
383
|
+
if (receipt === undefined) {
|
|
384
|
+
if (parsed.signal?.aborted === true && admitted.failure !== undefined) {
|
|
385
|
+
// Cancellation keeps its native meaning, and the already-born child stays
|
|
386
|
+
// attached as private invocation evidence rather than being discarded.
|
|
387
|
+
throw knownChildFailure(parsed.signal.reason, admitted.id);
|
|
388
|
+
}
|
|
389
|
+
const failure = admitted.failure === undefined
|
|
390
|
+
? new Error(`Akuma ${admitted.id} returned no exact initial Tell receipt`)
|
|
391
|
+
: asError(admitted.failure);
|
|
392
|
+
return failedCall(result, parsed.initialTell.tellId, failure);
|
|
393
|
+
}
|
|
394
|
+
return parsed.mode === "detach"
|
|
395
|
+
? { ...result, observation: { kind: "detached", tell: receipt } }
|
|
396
|
+
: await observeCall({
|
|
397
|
+
path: parsed.path,
|
|
398
|
+
akuma: admitted.id,
|
|
399
|
+
result,
|
|
400
|
+
initialTell: parsed.initialTell,
|
|
401
|
+
receipt,
|
|
402
|
+
timeoutMs: parsed.timeoutMs,
|
|
403
|
+
...(parsed.signal === undefined ? {} : { signal: parsed.signal }),
|
|
404
|
+
...(parsed.observe === undefined ? {} : { observe: parsed.observe }),
|
|
405
|
+
});
|
|
423
406
|
}
|
|
424
407
|
export async function forkAkumas(input) {
|
|
425
408
|
const values = requireInput(input, "Akumas.fork input");
|
|
@@ -428,7 +411,7 @@ export async function forkAkumas(input) {
|
|
|
428
411
|
const addressed = await addressAkuma({ path: values.path, akuma: nonblank(values.akuma, "akuma") });
|
|
429
412
|
const { path, id: akuma } = addressed;
|
|
430
413
|
const repository = values.repo === undefined ? undefined : scopeForRepo(values.repo);
|
|
431
|
-
const receipt = await
|
|
414
|
+
const receipt = await new AkumaOwner(akuma, path).fork({ at });
|
|
432
415
|
if (receipt.kind !== "forked")
|
|
433
416
|
return { ...receipt, parent: akuma };
|
|
434
417
|
const dispatch = repository === undefined
|
|
@@ -1,27 +1,20 @@
|
|
|
1
|
+
/** @architectureCompositionRoot */
|
|
1
2
|
import type { AkumaList, AkumaListInput } from "../akuma/akuma.js";
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import { type AkumaHistoryInput as LibraryAkumaHistoryInput, type AkumaHistoryResult, type AkumaInterruptInput as LibraryAkumaInterruptInput, type AkumaInterruptResult, type AkumaKillInput as LibraryAkumaKillInput, type AkumaKillResult, type AkumaObservation, type AkumaObservationStage, type AkumaTellInput as LibraryAkumaTellInput, type AkumaTellResult, type AkumaWaitInput as LibraryAkumaWaitInput, type AkumaWaitResult } from "./fleet.js";
|
|
5
|
-
import type { AkumaAddressInput as LibraryAkumaAddressInput, AkumaWorldScopeRefusal } from "./address.js";
|
|
6
|
-
export { AkumaWorldScopeError, AkumaAddressError } from "./address.js";
|
|
7
|
-
import type { TellResult, TellWake } from "../akuma/akuma.js";
|
|
3
|
+
import type { TellResult, TellWake } from "../akuma/body.js";
|
|
4
|
+
import { type ExecutionContext } from "../akuma/requests.js";
|
|
8
5
|
import type { DispatchAssociation } from "../dispatch/association.js";
|
|
9
6
|
import type { CreatedTaskObservation } from "../task/created-observation.js";
|
|
10
7
|
import { type WorldRoot } from "../world.js";
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
export
|
|
15
|
-
export type
|
|
16
|
-
export type
|
|
17
|
-
export type
|
|
18
|
-
export type
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}>;
|
|
22
|
-
export type { AkumaHistoryResult, AkumaInterruptResult, AkumaKillResult, AkumaObservation, AkumaObservationStage, AkumaTellResult, AkumaWaitResult, CallResult, CallWaitHead, CreatedTaskObservation, DispatchStage, DispatchAssociation, ForkResult, TellResult, TellWake, };
|
|
23
|
-
export type { AkumaWorldScopeRefusal };
|
|
24
|
-
export type { AkumaList, AkumaListInput };
|
|
8
|
+
import type { AkumaAddressInput, AkumaWorldScopeRefusal } from "./address.js";
|
|
9
|
+
import type { CallInput, CallResult, CallWaitHead, DispatchStage, ForkInput, ForkResult } from "./akuma-creation.js";
|
|
10
|
+
import { type AkumaAskInput, type AkumaAskResult, type AkumaHistoryInput, type AkumaHistoryResult, type AkumaKillInput, type AkumaKillResult, type AkumaObservation, type AkumaObservationStage, type AkumaTellInput, type AkumaTellResult, type AkumaWaitInput, type AkumaWaitResult } from "./selection.js";
|
|
11
|
+
export { AkumaAddressError, AkumaWorldScopeError } from "./address.js";
|
|
12
|
+
export type { AkumaAddressInput } from "./address.js";
|
|
13
|
+
export type { CallInput, ForkInput } from "./akuma-creation.js";
|
|
14
|
+
export type { AkumaAskInput, AkumaHistoryInput, AkumaKillInput, AkumaTellInput, AkumaWaitInput } from "./selection.js";
|
|
15
|
+
export type { AkumaAskResult, AkumaHistoryResult, AkumaKillResult, AkumaList, AkumaListInput, AkumaObservation, AkumaObservationStage, AkumaTellResult, AkumaWaitResult, AkumaWorldScopeRefusal, CallResult, CallWaitHead, CreatedTaskObservation, DispatchAssociation, DispatchStage, ForkResult, TellResult, TellWake, };
|
|
16
|
+
/** The existing native wait-observation seam, exposed type-only for CLI composition. */
|
|
17
|
+
export type { WaitObservedAkuma, WaitObserver, WaitSelectedAkuma } from "../akuma/akuma-wait.js";
|
|
25
18
|
export type Akumas = AkumasHandle;
|
|
26
19
|
declare class AkumasHandle {
|
|
27
20
|
#private;
|
|
@@ -31,12 +24,17 @@ declare class AkumasHandle {
|
|
|
31
24
|
fork(input: ForkInput): Promise<ForkResult>;
|
|
32
25
|
status(input: AkumaAddressInput): Promise<AkumaObservation>;
|
|
33
26
|
tell(input: AkumaTellInput): Promise<AkumaTellResult>;
|
|
27
|
+
ask<T = string>(input: AkumaAskInput<T>): Promise<AkumaAskResult<T>>;
|
|
34
28
|
wait(input: AkumaWaitInput): Promise<AkumaWaitResult>;
|
|
35
29
|
kill(input: AkumaKillInput): Promise<AkumaKillResult>;
|
|
36
30
|
history(input: AkumaHistoryInput): Promise<AkumaHistoryResult>;
|
|
37
|
-
interrupt(input: AkumaInterruptInput): Promise<AkumaInterruptResult>;
|
|
38
31
|
private withWorld;
|
|
39
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* The one Akumas composition. Public `of` fixes local execution; CLI and Body pass their captured
|
|
35
|
+
* internal channel through `akumasWithExecution` instead of a second constructor.
|
|
36
|
+
*/
|
|
37
|
+
export declare function akumasWithExecution(world: WorldRoot, execution: ExecutionContext): Akumas;
|
|
40
38
|
export declare const Akumas: Readonly<{
|
|
41
|
-
of(world: WorldRoot
|
|
39
|
+
of(world: WorldRoot): Akumas;
|
|
42
40
|
}>;
|
|
@@ -1,21 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { readAkumaRoster } from "../akuma/akuma.js";
|
|
2
|
+
import { localExecutionContext } from "../akuma/requests.js";
|
|
3
|
+
import { readAliases } from "../alias/index.js";
|
|
4
|
+
import { World } from "../world.js";
|
|
4
5
|
import { callAkumas, forkAkumas } from "./akuma-creation.js";
|
|
5
|
-
import { historyAkuma, interruptAkuma, killAkuma, statusAkuma, tellAkuma, waitAkuma, } from "./fleet.js";
|
|
6
6
|
import { requireInput } from "./input.js";
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
import { askAkumaOn, historyAkuma, killAkumaOn, selectionSeam, statusAkuma, tellAkumaOn, waitAkumaOn, } from "./selection.js";
|
|
8
|
+
export { AkumaAddressError, AkumaWorldScopeError } from "./address.js";
|
|
9
9
|
class AkumasHandle {
|
|
10
10
|
#world;
|
|
11
11
|
#execution;
|
|
12
|
+
#selection;
|
|
12
13
|
constructor(world, execution) {
|
|
13
14
|
this.#world = world;
|
|
14
15
|
this.#execution = execution;
|
|
16
|
+
// One typed route seam captured at construction: no operation re-derives it.
|
|
17
|
+
this.#selection = selectionSeam(execution);
|
|
15
18
|
Object.freeze(this);
|
|
16
19
|
}
|
|
17
20
|
async list(input) {
|
|
18
|
-
|
|
21
|
+
const path = await World.prove(this.#world);
|
|
22
|
+
const roster = await readAkumaRoster(path, input);
|
|
23
|
+
if (roster.rows.length === 0)
|
|
24
|
+
return roster;
|
|
25
|
+
return withRosterAliases(roster, await readAliases(path));
|
|
19
26
|
}
|
|
20
27
|
call(input) {
|
|
21
28
|
return callAkumas(this.withWorld(input, "Akumas.call input"), this.#execution);
|
|
@@ -27,20 +34,20 @@ class AkumasHandle {
|
|
|
27
34
|
return statusAkuma(this.withWorld(input, "Akumas.status input"));
|
|
28
35
|
}
|
|
29
36
|
tell(input) {
|
|
30
|
-
return
|
|
37
|
+
return tellAkumaOn(this.#selection, this.withWorld(input, "Akumas.tell input"));
|
|
38
|
+
}
|
|
39
|
+
ask(input) {
|
|
40
|
+
return askAkumaOn(this.#selection, this.withWorld(input, "Akumas.ask input"));
|
|
31
41
|
}
|
|
32
42
|
wait(input) {
|
|
33
|
-
return
|
|
43
|
+
return waitAkumaOn(this.#selection, this.withWorld(input, "Akumas.wait input"));
|
|
34
44
|
}
|
|
35
45
|
kill(input) {
|
|
36
|
-
return
|
|
46
|
+
return killAkumaOn(this.#selection, this.withWorld(input, "Akumas.kill input"));
|
|
37
47
|
}
|
|
38
48
|
history(input) {
|
|
39
49
|
return historyAkuma(this.withWorld(input, "Akumas.history input"));
|
|
40
50
|
}
|
|
41
|
-
interrupt(input) {
|
|
42
|
-
return interruptAkuma(this.withWorld(input, "Akumas.interrupt input"));
|
|
43
|
-
}
|
|
44
51
|
withWorld(input, label) {
|
|
45
52
|
const values = requireInput(input, label);
|
|
46
53
|
if (Object.hasOwn(values, "path"))
|
|
@@ -48,14 +55,30 @@ class AkumasHandle {
|
|
|
48
55
|
return { ...values, path: this.#world };
|
|
49
56
|
}
|
|
50
57
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Upper World composition attaches the frozen Alias context to the lower
|
|
60
|
+
* roster's native membership and semantic order without reopening its extent.
|
|
61
|
+
*/
|
|
62
|
+
function withRosterAliases(roster, bindings) {
|
|
63
|
+
const byId = new Map();
|
|
64
|
+
for (const binding of bindings) {
|
|
65
|
+
const aliases = byId.get(binding.akuId) ?? [];
|
|
66
|
+
aliases.push(binding.alias);
|
|
67
|
+
byId.set(binding.akuId, aliases);
|
|
68
|
+
}
|
|
69
|
+
return { ...roster, rows: roster.rows.map((row) => ({ ...row, aliases: byId.get(row.id) ?? [] })) };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The one Akumas composition. Public `of` fixes local execution; CLI and Body pass their captured
|
|
73
|
+
* internal channel through `akumasWithExecution` instead of a second constructor.
|
|
74
|
+
*/
|
|
75
|
+
export function akumasWithExecution(world, execution) {
|
|
76
|
+
if (typeof world !== "string")
|
|
77
|
+
throw new TypeError("Akumas.of world must be a WorldRoot");
|
|
78
|
+
return new AkumasHandle(world, execution);
|
|
54
79
|
}
|
|
55
80
|
export const Akumas = Object.freeze({
|
|
56
|
-
of(world
|
|
57
|
-
|
|
58
|
-
throw new TypeError("Akumas.of world must be a WorldRoot");
|
|
59
|
-
return new AkumasHandle(world, executionFor(input));
|
|
81
|
+
of(world) {
|
|
82
|
+
return akumasWithExecution(world, localExecutionContext());
|
|
60
83
|
},
|
|
61
84
|
});
|