@astrosheep/keiyaku 4.5.28 → 4.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku/SKILL.md +0 -13
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/SKILL.md +47 -78
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/references/automation.md +54 -41
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-babysit/SKILL.md +10 -0
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-bind/SKILL.md +27 -9
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-workflow/SKILL.md +68 -71
- package/build/src/akuma/akuma-call.d.ts +53 -0
- package/build/src/akuma/akuma-call.js +113 -0
- package/build/src/akuma/akuma-instance.d.ts +20 -19
- package/build/src/akuma/akuma-instance.js +65 -177
- package/build/src/akuma/akuma-observe.d.ts +3 -21
- package/build/src/akuma/akuma-observe.js +7 -25
- package/build/src/akuma/{akuma-handle.d.ts → akuma-owner.d.ts} +60 -25
- package/build/src/akuma/{akuma-handle.js → akuma-owner.js} +43 -29
- package/build/src/akuma/akuma-selection-execution.d.ts +51 -0
- package/build/src/akuma/akuma-selection-execution.js +134 -0
- package/build/src/akuma/{fleet-execution.d.ts → akuma-wait.d.ts} +24 -32
- package/build/src/akuma/akuma-wait.js +113 -0
- package/build/src/akuma/akuma.d.ts +35 -97
- package/build/src/akuma/akuma.js +148 -35
- package/build/src/akuma/archetype.d.ts +18 -6
- package/build/src/akuma/archetype.js +52 -34
- package/build/src/akuma/body.d.ts +79 -61
- package/build/src/akuma/body.js +101 -50
- package/build/src/akuma/call-initial-tell.d.ts +164 -0
- package/build/src/akuma/call-initial-tell.js +62 -0
- package/build/src/akuma/call-input.d.ts +0 -3
- package/build/src/akuma/call-input.js +0 -7
- package/build/src/akuma/call-request.d.ts +247 -38
- package/build/src/akuma/call-request.js +77 -92
- package/build/src/akuma/coordinate.d.ts +15 -5
- package/build/src/akuma/coordinate.js +12 -22
- package/build/src/akuma/dispatch-association.d.ts +1 -1
- package/build/src/akuma/dispatch-association.js +1 -10
- package/build/src/akuma/heart/activity-schema.d.ts +325 -0
- package/build/src/akuma/heart/activity-schema.js +53 -0
- package/build/src/akuma/heart/facts.d.ts +3 -9
- package/build/src/akuma/heart/index.d.ts +3 -1
- package/build/src/akuma/heart/index.js +4 -1
- package/build/src/akuma/heart/rows.d.ts +49 -2
- package/build/src/akuma/heart/rows.js +16 -2
- package/build/src/akuma/heart/soul.d.ts +1 -0
- package/build/src/akuma/heart/soul.js +7 -10
- package/build/src/akuma/heart/tells.d.ts +1 -0
- package/build/src/akuma/heart/tells.js +18 -0
- package/build/src/akuma/identity.d.ts +10 -7
- package/build/src/akuma/identity.js +23 -0
- package/build/src/akuma/index.d.ts +10 -8
- package/build/src/akuma/index.js +2 -2
- package/build/src/akuma/nuke.d.ts +3 -0
- package/build/src/akuma/nuke.js +13 -7
- package/build/src/akuma/projection-read.js +1 -2
- package/build/src/akuma/projection.d.ts +0 -5
- package/build/src/akuma/projection.js +22 -43
- package/build/src/akuma/provider-recipe.d.ts +58 -23
- package/build/src/akuma/provider-recipe.js +62 -103
- package/build/src/akuma/provider.d.ts +7 -78
- package/build/src/akuma/provider.js +11 -219
- package/build/src/akuma/providers/acp/config.d.ts +2 -0
- package/build/src/akuma/providers/acp/config.js +26 -1
- package/build/src/akuma/providers/acp/core.d.ts +7 -0
- package/build/src/akuma/providers/acp/core.js +49 -18
- package/build/src/akuma/providers/acp/index.js +14 -17
- package/build/src/akuma/providers/claude/index.js +2 -14
- package/build/src/akuma/providers/codex-app-server/index.js +0 -22
- package/build/src/akuma/providers/grok-build/index.js +44 -24
- package/build/src/akuma/providers/index.d.ts +3 -3
- package/build/src/akuma/providers/index.js +2 -13
- package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +28 -0
- package/build/src/akuma/providers/opencode-sdk/event-stream.js +92 -0
- package/build/src/akuma/providers/opencode-sdk/events.d.ts +0 -1
- package/build/src/akuma/providers/opencode-sdk/index.js +200 -74
- package/build/src/akuma/providers/opencode-sdk/session.d.ts +41 -1
- package/build/src/akuma/providers/opencode-sdk/session.js +69 -2
- package/build/src/akuma/providers/pi/events.js +5 -2
- package/build/src/akuma/providers/pi/index.js +70 -24
- package/build/src/akuma/publication.d.ts +84 -3
- package/build/src/akuma/publication.js +145 -2
- package/build/src/akuma/read-pool.d.ts +2 -0
- package/build/src/akuma/read-pool.js +15 -0
- package/build/src/akuma/request-rendezvous.js +10 -0
- package/build/src/akuma/request-serve.js +7 -0
- package/build/src/akuma/request-wire.d.ts +14 -26
- package/build/src/akuma/request-wire.js +4 -0
- package/build/src/akuma/requests.d.ts +0 -3
- package/build/src/akuma/requests.js +0 -24
- package/build/src/akuma/{fleet-observation.d.ts → selection-observation.d.ts} +61 -52
- package/build/src/akuma/selection-observation.js +65 -0
- package/build/src/akuma/{fleet-owner-port.d.ts → selection-owner-port.d.ts} +3 -3
- package/build/src/akuma/{fleet-owner-port.js → selection-owner-port.js} +11 -17
- package/build/src/akuma/{fleet-request.d.ts → selection-request.d.ts} +42 -82
- package/build/src/akuma/{fleet-request.js → selection-request.js} +92 -136
- package/build/src/akuma/turn-drive.d.ts +3 -0
- package/build/src/akuma/turn-drive.js +75 -16
- package/build/src/akuma-body.js +91 -56
- package/build/src/body/amend.d.ts +5 -0
- package/build/src/body/amend.js +26 -50
- package/build/src/body/arc.d.ts +4 -2
- package/build/src/body/arc.js +19 -26
- package/build/src/body/criteria.d.ts +6 -0
- package/build/src/body/criteria.js +37 -0
- package/build/src/body/decode.js +5 -42
- package/build/src/body/region.d.ts +5 -0
- package/build/src/body/region.js +45 -2
- package/build/src/body/render.js +2 -4
- package/build/src/cli/activity.d.ts +26 -0
- package/build/src/cli/activity.js +75 -0
- package/build/src/cli/actor.d.ts +3 -1
- package/build/src/cli/actor.js +15 -2
- package/build/src/cli/commands/akuma-grammar.d.ts +75 -0
- package/build/src/cli/commands/akuma-grammar.js +414 -0
- package/build/src/cli/commands/akuma.d.ts +5 -69
- package/build/src/cli/commands/akuma.js +352 -312
- package/build/src/cli/commands/amend.d.ts +4 -5
- package/build/src/cli/commands/amend.js +1 -2
- package/build/src/cli/commands/bind.d.ts +4 -5
- package/build/src/cli/commands/bind.js +5 -9
- package/build/src/cli/commands/contract-grammar.d.ts +112 -0
- package/build/src/cli/commands/contract-grammar.js +282 -0
- package/build/src/cli/commands/contract-help.d.ts +28 -30
- package/build/src/cli/commands/contract-help.js +69 -96
- package/build/src/cli/commands/contract.d.ts +18 -97
- package/build/src/cli/commands/contract.js +620 -237
- package/build/src/cli/commands/install.d.ts +1 -1
- package/build/src/cli/commands/install.js +2 -2
- package/build/src/cli/commands/task-grammar.d.ts +19 -0
- package/build/src/cli/commands/task-grammar.js +438 -0
- package/build/src/cli/commands/task-query.js +23 -104
- package/build/src/cli/commands/task.d.ts +5 -20
- package/build/src/cli/commands/task.js +415 -333
- package/build/src/cli/coordinates.d.ts +10 -0
- package/build/src/cli/coordinates.js +20 -0
- package/build/src/cli/draft.d.ts +7 -1
- package/build/src/cli/main.js +10 -1
- package/build/src/cli/parse.d.ts +8 -9
- package/build/src/cli/parse.js +63 -61
- package/build/src/cli/render/akuma-activity.d.ts +88 -39
- package/build/src/cli/render/akuma-activity.js +465 -263
- package/build/src/cli/render/akuma-tool.d.ts +15 -5
- package/build/src/cli/render/akuma-tool.js +40 -27
- package/build/src/cli/render/akuma.d.ts +40 -24
- package/build/src/cli/render/akuma.js +108 -205
- package/build/src/cli/render/audit.d.ts +6 -2
- package/build/src/cli/render/audit.js +61 -30
- package/build/src/cli/render/catalog.d.ts +11 -2
- package/build/src/cli/render/catalog.js +75 -94
- package/build/src/cli/render/contract-history.d.ts +3 -1
- package/build/src/cli/render/contract-history.js +215 -22
- package/build/src/cli/render/contract-observation.d.ts +10 -5
- package/build/src/cli/render/contract-observation.js +29 -46
- package/build/src/cli/render/contract.d.ts +10 -3
- package/build/src/cli/render/contract.js +255 -106
- package/build/src/cli/render/effects.d.ts +26 -0
- package/build/src/cli/render/effects.js +41 -0
- package/build/src/cli/render/execution-progress.d.ts +18 -6
- package/build/src/cli/render/execution-progress.js +34 -31
- package/build/src/cli/render/kanshi-akuma.d.ts +1 -2
- package/build/src/cli/render/kanshi-akuma.js +5 -26
- package/build/src/cli/render/kanshi.js +108 -129
- package/build/src/cli/render/marks.d.ts +13 -0
- package/build/src/cli/render/marks.js +74 -0
- package/build/src/cli/render/nuke.js +18 -7
- package/build/src/cli/render/receipt.d.ts +10 -4
- package/build/src/cli/render/receipt.js +126 -46
- package/build/src/cli/render/reconcile.d.ts +5 -0
- package/build/src/cli/render/reconcile.js +152 -0
- package/build/src/cli/render/refusal.d.ts +21 -4
- package/build/src/cli/render/refusal.js +61 -34
- package/build/src/cli/render/region.js +3 -2
- package/build/src/cli/render/settings.js +4 -14
- package/build/src/cli/render/task.d.ts +37 -6
- package/build/src/cli/render/task.js +162 -158
- package/build/src/cli/render/terminal.d.ts +25 -1
- package/build/src/cli/render/terminal.js +105 -18
- package/build/src/cli/runtime.d.ts +32 -8
- package/build/src/cli/runtime.js +161 -163
- package/build/src/cli/selectors.d.ts +5 -2
- package/build/src/cli/selectors.js +11 -3
- package/build/src/cli/streams.d.ts +11 -0
- package/build/src/cli/streams.js +32 -0
- package/build/src/cli/usage.d.ts +2 -0
- package/build/src/cli/usage.js +12 -8
- package/build/src/contract-guidance.js +3 -7
- package/build/src/contract-worktree.d.ts +20 -28
- package/build/src/contract-worktree.js +18 -70
- package/build/src/coordination/durable-file.d.ts +2 -2
- package/build/src/coordination/durable-file.js +0 -27
- package/build/src/core/facts/codec.d.ts +1 -2
- package/build/src/core/facts/codec.js +6 -7
- package/build/src/core/facts/gate.d.ts +0 -1
- package/build/src/core/facts/gate.js +0 -82
- package/build/src/core/facts/types.d.ts +1 -2
- package/build/src/core/verbs/abandon.d.ts +2 -6
- package/build/src/core/verbs/abandon.js +0 -16
- package/build/src/core/verbs/amend.d.ts +0 -1
- package/build/src/core/verbs/amend.js +0 -20
- package/build/src/core/verbs/arc.d.ts +7 -8
- package/build/src/core/verbs/arc.js +2 -19
- package/build/src/core/verbs/attestation.d.ts +2 -6
- package/build/src/core/verbs/attestation.js +0 -16
- package/build/src/core/verbs/bind.d.ts +0 -1
- package/build/src/core/verbs/bind.js +0 -16
- package/build/src/core/verbs/deliver.d.ts +0 -1
- package/build/src/core/verbs/deliver.js +0 -16
- package/build/src/core/verbs/placement.d.ts +2 -1
- package/build/src/core/verbs/placement.js +10 -59
- package/build/src/git/admission.d.ts +6 -4
- package/build/src/git/admission.js +4 -0
- package/build/src/git/hooks.d.ts +55 -30
- package/build/src/git/hooks.js +30 -3
- package/build/src/git/identity.d.ts +6 -0
- package/build/src/git/identity.js +47 -0
- package/build/src/git/integration.d.ts +31 -13
- package/build/src/git/integration.js +32 -1
- package/build/src/git/nuke.d.ts +10 -1
- package/build/src/git/nuke.js +31 -11
- package/build/src/git/observe.js +2 -15
- package/build/src/git/private-state-seat.d.ts +6 -7
- package/build/src/git/private-state-seat.js +8 -6
- package/build/src/git/read-observation.d.ts +6 -1
- package/build/src/git/read-observation.js +81 -46
- package/build/src/git/reconcile.d.ts +117 -40
- package/build/src/git/reconcile.js +169 -40
- package/build/src/git/scratch.d.ts +7 -4
- package/build/src/git/scratch.js +28 -6
- package/build/src/git/target-placement.d.ts +53 -38
- package/build/src/git/target-placement.js +69 -54
- package/build/src/git/tender.d.ts +37 -28
- package/build/src/git/tender.js +39 -0
- package/build/src/git/terminal-reconcile.js +21 -23
- package/build/src/git/terminal-seal.d.ts +8 -6
- package/build/src/git/terminal-seal.js +10 -0
- package/build/src/git/workspace.d.ts +29 -15
- package/build/src/git/workspace.js +28 -2
- package/build/src/identity/normalize.js +19 -6
- package/build/src/index.d.ts +78 -6
- package/build/src/index.js +52 -3
- package/build/src/kanshi/read.d.ts +3 -3
- package/build/src/kanshi/read.js +21 -21
- package/build/src/kanshi/report.d.ts +9 -8
- package/build/src/kanshi/roster.d.ts +2 -0
- package/build/src/kanshi/roster.js +2 -0
- package/build/src/kanshi/select.js +7 -3
- package/build/src/library/address.d.ts +3 -7
- package/build/src/library/address.js +7 -7
- package/build/src/library/akuma-creation.d.ts +35 -33
- package/build/src/library/akuma-creation.js +184 -167
- package/build/src/library/akumas.d.ts +40 -0
- package/build/src/library/akumas.js +84 -0
- package/build/src/library/bind.d.ts +107 -13
- package/build/src/library/bind.js +29 -23
- package/build/src/library/continuation.d.ts +556 -28
- package/build/src/library/continuation.js +29 -54
- package/build/src/library/contract-composition.d.ts +40 -0
- package/build/src/library/contract-composition.js +105 -0
- package/build/src/library/contract-creation.d.ts +7 -0
- package/build/src/library/contract-creation.js +192 -0
- package/build/src/library/contract-execution.d.ts +29 -40
- package/build/src/library/contract-execution.js +503 -128
- package/build/src/library/contract-operations.d.ts +275 -134
- package/build/src/library/contract-operations.js +83 -92
- package/build/src/library/contract-outcomes.d.ts +71 -0
- package/build/src/library/contract-outcomes.js +32 -0
- package/build/src/library/contract-settings.d.ts +25 -0
- package/build/src/library/contract-settings.js +135 -0
- package/build/src/library/contract-types.d.ts +24 -38
- package/build/src/library/delivery.d.ts +530 -10
- package/build/src/library/delivery.js +20 -45
- package/build/src/library/input.d.ts +3 -1
- package/build/src/library/input.js +11 -16
- package/build/src/library/invocation.d.ts +87 -0
- package/build/src/library/invocation.js +290 -0
- package/build/src/library/keiyaku.d.ts +44 -437
- package/build/src/library/keiyaku.js +132 -20
- package/build/src/library/nuke.d.ts +2 -11
- package/build/src/library/nuke.js +70 -57
- package/build/src/library/outcome.d.ts +13196 -0
- package/build/src/library/outcome.js +487 -0
- package/build/src/library/reconcile.d.ts +96 -24
- package/build/src/library/reconcile.js +102 -42
- package/build/src/library/refusal.d.ts +470 -42
- package/build/src/library/refusal.js +55 -143
- package/build/src/library/region.d.ts +15 -7
- package/build/src/library/region.js +23 -3
- package/build/src/library/repo.d.ts +2 -12
- package/build/src/library/repo.js +1 -22
- package/build/src/library/selection.d.ts +121 -0
- package/build/src/library/{fleet.js → selection.js} +177 -160
- package/build/src/plugin/public.d.ts +2 -0
- package/build/src/protocol/abandon.d.ts +2 -2
- package/build/src/protocol/abandon.js +1 -0
- package/build/src/protocol/amend.js +1 -0
- package/build/src/protocol/arc.d.ts +6 -4
- package/build/src/protocol/attempt.d.ts +4 -2
- package/build/src/protocol/attempt.js +10 -0
- package/build/src/protocol/audit.d.ts +255 -52
- package/build/src/protocol/audit.js +63 -5
- package/build/src/protocol/bind.d.ts +18 -17
- package/build/src/protocol/bind.js +9 -28
- package/build/src/protocol/completion.d.ts +256 -22
- package/build/src/protocol/completion.js +100 -12
- package/build/src/protocol/deliver.d.ts +34 -23
- package/build/src/protocol/deliver.js +39 -25
- package/build/src/protocol/execution-observation.d.ts +36 -37
- package/build/src/protocol/execution-observation.js +7 -9
- package/build/src/protocol/intent.d.ts +101 -30
- package/build/src/protocol/intent.js +74 -1
- package/build/src/protocol/operations.d.ts +570 -64
- package/build/src/protocol/operations.js +189 -9
- package/build/src/protocol/outcome.d.ts +2 -1
- package/build/src/protocol/placement.d.ts +2 -2
- package/build/src/protocol/placement.js +3 -1
- package/build/src/protocol/progress.d.ts +108 -65
- package/build/src/protocol/progress.js +82 -132
- package/build/src/protocol/read/status.d.ts +4 -3
- package/build/src/protocol/read/status.js +6 -5
- package/build/src/protocol/reconcile.d.ts +3 -3
- package/build/src/protocol/reconcile.js +4 -0
- package/build/src/protocol/reintegrate.d.ts +2 -2
- package/build/src/protocol/review.d.ts +30 -12
- package/build/src/protocol/review.js +15 -24
- package/build/src/protocol/run.d.ts +34 -5
- package/build/src/protocol/run.js +24 -12
- package/build/src/runtime/proc/windows-launch.exe +0 -0
- package/build/src/settings.d.ts +0 -10
- package/build/src/settings.js +0 -76
- package/build/src/settlement/holder.d.ts +1 -1
- package/build/src/settlement/settle.d.ts +25 -16
- package/build/src/settlement/settle.js +80 -20
- package/build/src/task/board.d.ts +3 -1
- package/build/src/task/board.js +13 -17
- package/build/src/task/catalog.d.ts +0 -4
- package/build/src/task/catalog.js +0 -15
- package/build/src/task/compose-language.d.ts +19 -9
- package/build/src/task/compose-language.js +30 -20
- package/build/src/task/compose.d.ts +7 -37
- package/build/src/task/compose.js +20 -2
- package/build/src/task/created-observation.d.ts +0 -1
- package/build/src/task/created-observation.js +1 -4
- package/build/src/task/document.d.ts +12 -2
- package/build/src/task/document.js +4 -0
- package/build/src/task/identity.d.ts +4 -1
- package/build/src/task/identity.js +21 -17
- package/build/src/task/index.d.ts +36 -16
- package/build/src/task/index.js +103 -96
- package/build/src/task/lifecycle-operations.d.ts +1 -1
- package/build/src/task/mutation-result.d.ts +647 -586
- package/build/src/task/mutation-result.js +79 -46
- package/build/src/task/mutation.d.ts +298 -270
- package/build/src/task/mutation.js +93 -110
- package/build/src/task/operation-types.d.ts +6 -49
- package/build/src/task/operations.d.ts +2 -1
- package/build/src/task/operations.js +35 -12
- package/build/src/task/query.d.ts +9 -3
- package/build/src/task/query.js +42 -16
- package/build/src/task/store.d.ts +2 -1
- package/build/src/task/store.js +10 -14
- package/build/src/verification/declaration.d.ts +0 -1
- package/build/src/verification/declaration.js +1 -18
- package/build/src/verification/execution.d.ts +6 -2
- package/build/src/verification/observation.d.ts +1 -1
- package/package.json +2 -14
- package/build/src/akuma/akuma-product-symbols.d.ts +0 -1
- package/build/src/akuma/akuma-product-symbols.js +0 -1
- package/build/src/akuma/akuma-product.d.ts +0 -62
- package/build/src/akuma/akuma-product.js +0 -293
- package/build/src/akuma/fleet-execution.js +0 -181
- package/build/src/akuma/fleet-observation.js +0 -91
- package/build/src/cli/accepted.d.ts +0 -24
- package/build/src/cli/accepted.js +0 -167
- package/build/src/cli/commands/akuma-invoke.d.ts +0 -114
- package/build/src/cli/commands/akuma-invoke.js +0 -402
- package/build/src/cli/commands/contract-invoke.d.ts +0 -34
- package/build/src/cli/commands/contract-invoke.js +0 -259
- package/build/src/cli/commands/nuke.d.ts +0 -10
- package/build/src/cli/commands/nuke.js +0 -20
- package/build/src/cli/commands/status-set.d.ts +0 -4
- package/build/src/cli/commands/status-set.js +0 -52
- package/build/src/cli/commands/task-invoke.d.ts +0 -49
- package/build/src/cli/commands/task-invoke.js +0 -306
- package/build/src/cli/invoke.d.ts +0 -27
- package/build/src/cli/invoke.js +0 -484
- package/build/src/cli/render/board.d.ts +0 -3
- package/build/src/cli/render/board.js +0 -25
- package/build/src/cli/render/status-set.d.ts +0 -5
- package/build/src/cli/render/status-set.js +0 -19
- package/build/src/cli/render/text.d.ts +0 -3
- package/build/src/cli/render/text.js +0 -33
- package/build/src/cli/result.d.ts +0 -240
- package/build/src/cli/result.js +0 -1
- package/build/src/git/result-codec.d.ts +0 -29
- package/build/src/git/result-codec.js +0 -309
- package/build/src/kanshi/fleet.d.ts +0 -6
- package/build/src/kanshi/fleet.js +0 -27
- package/build/src/library/audit.d.ts +0 -29
- package/build/src/library/audit.js +0 -41
- package/build/src/library/catalog.d.ts +0 -68
- package/build/src/library/catalog.js +0 -130
- package/build/src/library/composition.d.ts +0 -403
- package/build/src/library/composition.js +0 -29
- package/build/src/library/configuration.d.ts +0 -4
- package/build/src/library/configuration.js +0 -2
- package/build/src/library/contract-bind.d.ts +0 -31
- package/build/src/library/contract-bind.js +0 -140
- package/build/src/library/contract-forwarding.d.ts +0 -55
- package/build/src/library/contract-forwarding.js +0 -67
- package/build/src/library/contract-handle.d.ts +0 -45
- package/build/src/library/contract-handle.js +0 -373
- package/build/src/library/contract.d.ts +0 -53
- package/build/src/library/contract.js +0 -91
- package/build/src/library/execution-result.d.ts +0 -243
- package/build/src/library/execution-result.js +0 -101
- package/build/src/library/execution.d.ts +0 -8
- package/build/src/library/execution.js +0 -102
- package/build/src/library/fleet.d.ts +0 -83
- package/build/src/library/mutation.d.ts +0 -501
- package/build/src/library/mutation.js +0 -248
- package/build/src/library/result-codec.d.ts +0 -2
- package/build/src/library/result-codec.js +0 -12
- package/build/src/protocol/result-codec.d.ts +0 -23
- package/build/src/protocol/result-codec.js +0 -488
- package/build/src/settlement/result-codec.d.ts +0 -2
- package/build/src/settlement/result-codec.js +0 -56
- package/build/src/task/public.d.ts +0 -2
- package/build/src/task/public.js +0 -1
|
@@ -1,48 +1,87 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import type { AkumaCallRequestChildLaunch } from "./call-request.js";
|
|
2
|
-
import { type SessionFact, type Soul, type TellRow } from "./heart/index.js";
|
|
3
3
|
import { type AkumaPaths } from "./identity.js";
|
|
4
|
+
import { type TellResult } from "./call-initial-tell.js";
|
|
5
|
+
export type { TellResult, TellWake } from "./call-initial-tell.js";
|
|
4
6
|
import { type WorldRoot } from "../world.js";
|
|
5
7
|
import type { ProviderAdapter } from "./provider.js";
|
|
6
8
|
import type { ErasedRequestCommand } from "./request-wire.js";
|
|
7
|
-
import { type OwnedProcess
|
|
9
|
+
import { type OwnedProcess } from "../runtime/proc/run.js";
|
|
8
10
|
export declare const LEASH_HELD_EXIT = 75;
|
|
9
11
|
export { CONTROL_RESPONSE_MS } from "./body-supervisor.js";
|
|
10
|
-
export
|
|
11
|
-
paths:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}>;
|
|
12
|
+
export declare const bodyLaunchSchema: z.ZodObject<{
|
|
13
|
+
paths: z.ZodObject<{
|
|
14
|
+
directory: z.ZodString;
|
|
15
|
+
heart: z.ZodString;
|
|
16
|
+
leash: z.ZodString;
|
|
17
|
+
log: z.ZodString;
|
|
18
|
+
requests: z.ZodString;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
seed: z.ZodOptional<z.ZodPipe<z.ZodUnknown, z.ZodTransform<Omit<Readonly<{
|
|
21
|
+
id: import("./identity.js").AkuId;
|
|
22
|
+
archetype: string;
|
|
23
|
+
description?: string;
|
|
24
|
+
provider: import("./provider-recipe.js").ProviderExecution;
|
|
25
|
+
options: import("./provider-recipe.js").ProviderOptions;
|
|
26
|
+
cwd: string;
|
|
27
|
+
origin: import("./heart/facts.js").AkumaOrigin;
|
|
28
|
+
allowed: import("./allowed.js").AllowedActions;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
}>, "createdAt">, unknown>>>;
|
|
31
|
+
birthSession: z.ZodOptional<z.ZodObject<{
|
|
32
|
+
provider: z.ZodString;
|
|
33
|
+
coordinate: z.ZodUnion<readonly [z.ZodPipe<z.ZodObject<{
|
|
34
|
+
sessionFile: z.ZodString;
|
|
35
|
+
sessionId: z.ZodOptional<z.ZodString>;
|
|
36
|
+
}, z.core.$strict>, z.ZodTransform<{
|
|
37
|
+
sessionFile: string;
|
|
38
|
+
sessionId?: never;
|
|
39
|
+
} | {
|
|
40
|
+
sessionFile: string;
|
|
41
|
+
sessionId: string;
|
|
42
|
+
}, {
|
|
43
|
+
sessionFile: string;
|
|
44
|
+
sessionId?: string | undefined;
|
|
45
|
+
}>>, z.ZodObject<{
|
|
46
|
+
sessionId: z.ZodString;
|
|
47
|
+
}, z.core.$strict>]>;
|
|
48
|
+
cwd: z.ZodString;
|
|
49
|
+
options: z.ZodPipe<z.ZodObject<{
|
|
50
|
+
model: z.ZodOptional<z.ZodString>;
|
|
51
|
+
effort: z.ZodOptional<z.ZodString>;
|
|
52
|
+
network: z.ZodOptional<z.ZodEnum<{
|
|
53
|
+
disabled: "disabled";
|
|
54
|
+
enabled: "enabled";
|
|
55
|
+
}>>;
|
|
56
|
+
systemPrompt: z.ZodOptional<z.ZodString>;
|
|
57
|
+
systemPromptMode: z.ZodOptional<z.ZodEnum<{
|
|
58
|
+
append: "append";
|
|
59
|
+
replace: "replace";
|
|
60
|
+
}>>;
|
|
61
|
+
}, z.core.$strip>, z.ZodTransform<Readonly<{
|
|
62
|
+
systemPromptMode?: "append" | "replace";
|
|
63
|
+
systemPrompt?: string;
|
|
64
|
+
network?: "disabled" | "enabled";
|
|
65
|
+
effort?: string;
|
|
66
|
+
model?: string;
|
|
67
|
+
}>, {
|
|
68
|
+
model?: string | undefined;
|
|
69
|
+
effort?: string | undefined;
|
|
70
|
+
network?: "disabled" | "enabled" | undefined;
|
|
71
|
+
systemPrompt?: string | undefined;
|
|
72
|
+
systemPromptMode?: "append" | "replace" | undefined;
|
|
73
|
+
}>>;
|
|
74
|
+
admittedAt: z.ZodString;
|
|
75
|
+
}, z.core.$strict>>;
|
|
76
|
+
initialBody: z.ZodOptional<z.ZodString>;
|
|
77
|
+
initiator: z.ZodOptional<z.ZodString>;
|
|
78
|
+
initialSchemaJson: z.ZodOptional<z.ZodString>;
|
|
79
|
+
refuseIfHeld: z.ZodOptional<z.ZodBoolean>;
|
|
80
|
+
completion: z.ZodOptional<z.ZodObject<{
|
|
81
|
+
contractId: z.ZodOptional<z.ZodString>;
|
|
82
|
+
}, z.core.$strict>>;
|
|
83
|
+
}, z.core.$strict>;
|
|
84
|
+
export type BodyLaunch = z.infer<typeof bodyLaunchSchema>;
|
|
46
85
|
export type TellWakeRuntime = Readonly<{
|
|
47
86
|
spawn(paths: AkumaPaths): Promise<OwnedProcess>;
|
|
48
87
|
schedule?(milliseconds: number, signal: AbortSignal): Promise<void>;
|
|
@@ -54,28 +93,7 @@ type BodyRuntime = Readonly<{
|
|
|
54
93
|
world: WorldRoot;
|
|
55
94
|
externalCommands: Readonly<Record<string, ErasedRequestCommand>>;
|
|
56
95
|
}>;
|
|
57
|
-
|
|
58
|
-
/** The current process executable, preferred only while it is a different live value. */
|
|
59
|
-
current?: string;
|
|
60
|
-
/** The present PATH used to resolve the recorded executable basename. */
|
|
61
|
-
path?: string | undefined;
|
|
62
|
-
exists?: (path: string) => boolean | Promise<boolean>;
|
|
63
|
-
}>;
|
|
64
|
-
/** One Body launch's runtime input: the runtime recorded for it and its resolution environment. */
|
|
65
|
-
export type BodyLaunchRuntime = Readonly<{
|
|
66
|
-
recorded?: string;
|
|
67
|
-
environment?: RuntimeEnvironment;
|
|
68
|
-
}>;
|
|
69
|
-
/**
|
|
70
|
-
* Resolve the runtime executable a Body spawn will use. The path recorded for
|
|
71
|
-
* this process's birth wins while it exists. Once it is gone, wake re-resolves
|
|
72
|
-
* the runtime before any spawn can fail: the current process executable while
|
|
73
|
-
* that is a different live value, then the recorded executable basename on the
|
|
74
|
-
* present PATH. An unresolvable runtime refuses with the stale record, the
|
|
75
|
-
* failed re-resolution, and the kill-and-call-fresh remedy.
|
|
76
|
-
*/
|
|
77
|
-
export declare function resolveRuntimeExecutable(recorded?: string, environment?: RuntimeEnvironment): Promise<string>;
|
|
78
|
-
export declare function bodyProcessInput(launch: BodyLaunch, bodyModuleUrl?: string, runtime?: BodyLaunchRuntime): Promise<{
|
|
96
|
+
export declare function bodyProcessInput(launch: BodyLaunch, bodyModuleUrl?: string): Promise<{
|
|
79
97
|
argv: string[];
|
|
80
98
|
cwd: string;
|
|
81
99
|
env: Record<string, string>;
|
|
@@ -83,6 +101,6 @@ export declare function bodyProcessInput(launch: BodyLaunch, bodyModuleUrl?: str
|
|
|
83
101
|
}>;
|
|
84
102
|
export declare function handoffPendingTells(paths: AkumaPaths, spawn?: (launch: BodyLaunch) => Promise<OwnedProcess>): Promise<void>;
|
|
85
103
|
export declare function driveAkumaBody(launch: BodyLaunch, adapter?: ProviderAdapter, runtimeInput?: Partial<BodyRuntime>): Promise<"held" | void>;
|
|
86
|
-
export declare function spawnAkumaBody(launch: BodyLaunch
|
|
104
|
+
export declare function spawnAkumaBody(launch: BodyLaunch): Promise<OwnedProcess>;
|
|
87
105
|
export declare function runAkumaBody(launch: BodyLaunch, world: WorldRoot, externalCommands: Readonly<Record<string, ErasedRequestCommand>>): Promise<"held" | void>;
|
|
88
106
|
export declare function wakeRecordedTell(paths: AkumaPaths, tellId: string, runtime?: TellWakeRuntime, signal?: AbortSignal): Promise<TellResult>;
|
package/build/src/akuma/body.js
CHANGED
|
@@ -1,21 +1,45 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { decodeSoulSeed } from "./heart/soul.js";
|
|
3
|
+
import { sessionAdmissionSchema } from "./heart/rows.js";
|
|
1
4
|
import { appendFile, stat } from "node:fs/promises";
|
|
2
|
-
import { basename, delimiter, join } from "node:path";
|
|
3
5
|
import { fileURLToPath } from "node:url";
|
|
4
6
|
import { abortable, abortableDelay } from "./abort.js";
|
|
5
7
|
import { BodySupervisor } from "./body-supervisor.js";
|
|
6
8
|
import { driveTurn, turnRecipe } from "./turn-drive.js";
|
|
7
|
-
import { HeldAkumaLeash, breakBody, decidePendingTellDisposition, drainPendingTells, endTurn, failOpenBoundTurns, finishBodyIfIdle, heartExists, isHeartAbsent, probeLeash, projectTell, readHeart, readLatestTurnForBody, readOpenBoundTurns, readOpenPendingTellDisposition, readTell, readTurn, readNonterminalRequests, resolvePendingTellDisposition, } from "./heart/index.js";
|
|
8
|
-
import { worldRootForAkumaPaths } from "./identity.js";
|
|
9
|
+
import { HeldAkumaLeash, breakBody, decidePendingTellDisposition, drainPendingTells, endTurn, failOpenBoundTurns, finishBodyIfIdle, heartExists, isHeartAbsent, probeLeash, projectTell, readHeart, readLatestTurnForBody, readOpenBoundTurns, readOpenPendingTellDisposition, readTell, readTurn, readTurnParticipants, readNonterminalRequests, resolvePendingTellDisposition, } from "./heart/index.js";
|
|
10
|
+
import { akumaPathsSchema, pathsForAkuId, worldRootForAkumaPaths } from "./identity.js";
|
|
11
|
+
import { admitCallInitialTell, } from "./call-initial-tell.js";
|
|
9
12
|
import { akumaExecutionEnvironment } from "./providers/execution-environment.js";
|
|
10
13
|
import { pluginRuntime } from "../plugin/runtime.js";
|
|
11
14
|
import { World } from "../world.js";
|
|
12
15
|
import { resolveProviderExecution } from "./providers/index.js";
|
|
13
16
|
import { clearBodyRequestTransport, settleBodyRequests } from "./request-serve.js";
|
|
14
|
-
import { spawnDetachedProcess
|
|
17
|
+
import { spawnDetachedProcess } from "../runtime/proc/run.js";
|
|
15
18
|
const LEASH_RETRY_MS = 100;
|
|
16
19
|
const WAKE_REREAD_MS = 100;
|
|
17
20
|
export const LEASH_HELD_EXIT = 75;
|
|
18
21
|
export { CONTROL_RESPONSE_MS } from "./body-supervisor.js";
|
|
22
|
+
const launchSeedSchema = z.unknown().transform((value, context) => {
|
|
23
|
+
try {
|
|
24
|
+
return decodeSoulSeed(value);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
context.addIssue({ code: "custom", message: "invalid Body birth seed" });
|
|
28
|
+
return z.NEVER;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
export const bodyLaunchSchema = z
|
|
32
|
+
.object({
|
|
33
|
+
paths: akumaPathsSchema,
|
|
34
|
+
seed: launchSeedSchema.optional(),
|
|
35
|
+
birthSession: sessionAdmissionSchema.optional(),
|
|
36
|
+
initialBody: z.string().optional(),
|
|
37
|
+
initiator: z.string().optional(),
|
|
38
|
+
initialSchemaJson: z.string().optional(),
|
|
39
|
+
refuseIfHeld: z.boolean().optional(),
|
|
40
|
+
completion: z.object({ contractId: z.string().optional() }).strict().optional(),
|
|
41
|
+
})
|
|
42
|
+
.strict();
|
|
19
43
|
function missing(error) {
|
|
20
44
|
return isHeartAbsent(error) || error.code === "ENOENT";
|
|
21
45
|
}
|
|
@@ -147,64 +171,63 @@ const DEFAULT_RUNTIME = {
|
|
|
147
171
|
spawnBody: spawnAkumaBody,
|
|
148
172
|
};
|
|
149
173
|
/**
|
|
150
|
-
* The
|
|
151
|
-
*
|
|
152
|
-
*
|
|
174
|
+
* The Body spawn executable is the waking process's own executable, resolved
|
|
175
|
+
* at use time. There is no recorded path and no re-resolution chain: when the
|
|
176
|
+
* file is genuinely gone the spawn fails honestly and the wake diagnostic
|
|
177
|
+
* names the missing piece.
|
|
153
178
|
*/
|
|
154
|
-
|
|
155
|
-
async function runtimeFileExists(path) {
|
|
179
|
+
async function executableMissing(path) {
|
|
156
180
|
try {
|
|
157
|
-
return (await stat(path)).isFile();
|
|
181
|
+
return !(await stat(path)).isFile();
|
|
158
182
|
}
|
|
159
183
|
catch {
|
|
160
|
-
return
|
|
184
|
+
return true;
|
|
161
185
|
}
|
|
162
186
|
}
|
|
163
|
-
async function
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
if (directory.length === 0)
|
|
168
|
-
continue;
|
|
169
|
-
const candidate = join(directory, command);
|
|
170
|
-
if (await exists(candidate))
|
|
171
|
-
return candidate;
|
|
187
|
+
async function frozenCwdMissing(path) {
|
|
188
|
+
try {
|
|
189
|
+
await stat(path);
|
|
190
|
+
return false;
|
|
172
191
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
class StaleRuntimeError extends Error {
|
|
176
|
-
constructor(recorded, current, command) {
|
|
177
|
-
super(`recorded Body runtime ${recorded} no longer exists and re-resolution failed: neither this process executable ` +
|
|
178
|
-
`${current} nor the command "${command}" on PATH names an existing file; kill this Akuma and call a fresh one`);
|
|
179
|
-
this.name = "StaleRuntimeError";
|
|
192
|
+
catch {
|
|
193
|
+
return true;
|
|
180
194
|
}
|
|
181
195
|
}
|
|
182
196
|
/**
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
197
|
+
* Diagnose an ENOENT Body spawn failure by checking the attempted executable
|
|
198
|
+
* and the frozen execution cwd separately. The message names the genuinely
|
|
199
|
+
* missing piece(s) with the kill-and-call-fresh remedy; a missing cwd likely
|
|
200
|
+
* means its Contract was accepted and the worktree cleaned up. When both
|
|
201
|
+
* pieces still exist the original failure passes through unchanged, as does
|
|
202
|
+
* any non-ENOENT spawn failure.
|
|
189
203
|
*/
|
|
190
|
-
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
204
|
+
async function diagnoseSpawnEnoent(input, cause) {
|
|
205
|
+
const executable = input.argv[0] ?? process.execPath;
|
|
206
|
+
const cwd = input.cwd;
|
|
207
|
+
const [noExecutable, noCwd] = await Promise.all([executableMissing(executable), frozenCwdMissing(cwd)]);
|
|
208
|
+
if (!noExecutable && !noCwd)
|
|
209
|
+
return cause instanceof Error ? cause : new Error(String(cause));
|
|
210
|
+
const missing = [];
|
|
211
|
+
if (noCwd)
|
|
212
|
+
missing.push(`frozen execution directory ${cwd} no longer exists`);
|
|
213
|
+
if (noExecutable)
|
|
214
|
+
missing.push(`waking process executable ${executable} no longer exists (the host likely removed the running process binary)`);
|
|
215
|
+
const remedies = [];
|
|
216
|
+
if (noCwd)
|
|
217
|
+
remedies.push("a missing execution directory likely means its Contract was accepted and the worktree cleaned up, with deliverables already in Git");
|
|
218
|
+
if (noExecutable)
|
|
219
|
+
remedies.push("a missing executable likely means the host removed the running process binary: re-enter with a fresh CLI process and retry");
|
|
220
|
+
const remedy = `kill this Akuma and call a fresh one; ${remedies.join("; ")}`;
|
|
221
|
+
const error = new Error(`Body spawn failed: ${missing.join(" and ")}; ${remedy}`, { cause });
|
|
222
|
+
error.code = "ENOENT";
|
|
223
|
+
return error;
|
|
224
|
+
}
|
|
225
|
+
export async function bodyProcessInput(launch, bodyModuleUrl = import.meta.url) {
|
|
203
226
|
const encoded = Buffer.from(JSON.stringify(launch), "utf8").toString("base64url");
|
|
204
227
|
const actorId = launch.seed?.id ?? (await readHeart(launch.paths)).soul?.id;
|
|
205
228
|
if (actorId === undefined)
|
|
206
229
|
throw new Error("Akuma wake has no born soul");
|
|
207
|
-
const executable =
|
|
230
|
+
const executable = process.execPath;
|
|
208
231
|
const source = bodyModuleUrl.endsWith(".ts");
|
|
209
232
|
const entry = fileURLToPath(new URL(source ? "../akuma-body.ts" : "../akuma-body.js", bodyModuleUrl));
|
|
210
233
|
return {
|
|
@@ -294,6 +317,7 @@ function turnOutcomeEmitter(launch, soul) {
|
|
|
294
317
|
const turn = await readTurn(launch.paths, turnSequence);
|
|
295
318
|
if (turn === null)
|
|
296
319
|
throw new Error(`Committed Turn ${turnSequence} is missing from Heart`);
|
|
320
|
+
const participants = await readTurnParticipants(launch.paths, turnSequence);
|
|
297
321
|
plugins ??= pluginRuntime({
|
|
298
322
|
world: await World.at(worldRootForAkumaPaths(launch.paths)),
|
|
299
323
|
reportDiagnostic,
|
|
@@ -304,6 +328,7 @@ function turnOutcomeEmitter(launch, soul) {
|
|
|
304
328
|
bodySequence: turn.bodySequence,
|
|
305
329
|
turnSequence,
|
|
306
330
|
...(turn.initiator === undefined ? {} : { initiator: turn.initiator }),
|
|
331
|
+
...(participants.length === 0 ? {} : { participants }),
|
|
307
332
|
outcome: outcome.outcome === "answered"
|
|
308
333
|
? { kind: "answered", text: outcome.answer }
|
|
309
334
|
: { kind: "failed", reason: outcome.diagnostic },
|
|
@@ -323,7 +348,9 @@ function bodyEndEmitter(launch, soul) {
|
|
|
323
348
|
};
|
|
324
349
|
return (bodySequence, end, diagnostic) => (async () => {
|
|
325
350
|
try {
|
|
326
|
-
const
|
|
351
|
+
const latestTurn = await readLatestTurnForBody(launch.paths, bodySequence);
|
|
352
|
+
const initiator = latestTurn?.initiator;
|
|
353
|
+
const participants = latestTurn === null ? [] : await readTurnParticipants(launch.paths, latestTurn.sequence);
|
|
327
354
|
plugins ??= pluginRuntime({
|
|
328
355
|
world: await World.at(worldRootForAkumaPaths(launch.paths)),
|
|
329
356
|
reportDiagnostic,
|
|
@@ -335,6 +362,7 @@ function bodyEndEmitter(launch, soul) {
|
|
|
335
362
|
bodySequence,
|
|
336
363
|
end,
|
|
337
364
|
...(initiator === undefined ? {} : { initiator }),
|
|
365
|
+
...(participants.length === 0 ? {} : { participants }),
|
|
338
366
|
...(diagnostic === undefined ? {} : { diagnostic }),
|
|
339
367
|
...(launch.completion?.contractId === undefined ? {} : { contractId: launch.completion.contractId }),
|
|
340
368
|
}, reportDiagnostic);
|
|
@@ -344,6 +372,20 @@ function bodyEndEmitter(launch, soul) {
|
|
|
344
372
|
}
|
|
345
373
|
})();
|
|
346
374
|
}
|
|
375
|
+
async function admitInitialCallTell(runtime, input) {
|
|
376
|
+
const paths = pathsForAkuId(runtime.world, input.id);
|
|
377
|
+
return await admitCallInitialTell({
|
|
378
|
+
world: runtime.world,
|
|
379
|
+
id: input.id,
|
|
380
|
+
initialTell: input.initialTell,
|
|
381
|
+
signal: input.signal,
|
|
382
|
+
now: runtime.now,
|
|
383
|
+
wake: async (tell) => await wakeRecordedTell(paths, tell.id, {
|
|
384
|
+
spawn: async (tellPaths) => await (runtime.spawnBody ?? spawnAkumaBody)({ paths: tellPaths, refuseIfHeld: true }),
|
|
385
|
+
schedule: abortableDelay,
|
|
386
|
+
}, input.signal),
|
|
387
|
+
});
|
|
388
|
+
}
|
|
347
389
|
async function runBodyTurns(input) {
|
|
348
390
|
const { launch, soul, adapter, bodySequence, supervisor, runtime, turnOutcome } = input;
|
|
349
391
|
let initial = launch.initialBody;
|
|
@@ -371,6 +413,7 @@ async function runBodyTurns(input) {
|
|
|
371
413
|
bodySequence,
|
|
372
414
|
supervisor,
|
|
373
415
|
runtimeSpawn: runtime.spawnChild ?? spawnAkumaBody,
|
|
416
|
+
admitInitialTell: async (admission) => await admitInitialCallTell(runtime, admission),
|
|
374
417
|
body: initial ?? "",
|
|
375
418
|
...(initial === undefined ? {} : { call: initial }),
|
|
376
419
|
...(launch.initiator === undefined ? {} : { initiator: launch.initiator }),
|
|
@@ -560,8 +603,16 @@ export async function driveAkumaBody(launch, adapter, runtimeInput = {}) {
|
|
|
560
603
|
await finished.notification;
|
|
561
604
|
}
|
|
562
605
|
}
|
|
563
|
-
export async function spawnAkumaBody(launch
|
|
564
|
-
|
|
606
|
+
export async function spawnAkumaBody(launch) {
|
|
607
|
+
const input = await bodyProcessInput(launch, import.meta.url);
|
|
608
|
+
try {
|
|
609
|
+
return await spawnDetachedProcess(input);
|
|
610
|
+
}
|
|
611
|
+
catch (error) {
|
|
612
|
+
if (error?.code !== "ENOENT")
|
|
613
|
+
throw error;
|
|
614
|
+
throw await diagnoseSpawnEnoent(input, error);
|
|
615
|
+
}
|
|
565
616
|
}
|
|
566
617
|
export async function runAkumaBody(launch, world, externalCommands) {
|
|
567
618
|
return await driveAkumaBody(launch, undefined, { world, externalCommands });
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { WorldRoot } from "../world.js";
|
|
3
|
+
import { type TellFact } from "./heart/index.js";
|
|
4
|
+
import { type AkuId } from "./identity.js";
|
|
5
|
+
export type CallInitialTell = Readonly<{
|
|
6
|
+
tellId: string;
|
|
7
|
+
body: string;
|
|
8
|
+
schemaJson?: string;
|
|
9
|
+
initiator?: string;
|
|
10
|
+
}>;
|
|
11
|
+
declare const tellWakeSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
12
|
+
kind: z.ZodLiteral<"told">;
|
|
13
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
14
|
+
kind: z.ZodLiteral<"held">;
|
|
15
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
16
|
+
kind: z.ZodLiteral<"pursuing">;
|
|
17
|
+
bodySequence: z.ZodNumber;
|
|
18
|
+
}, z.core.$strict>, z.ZodPipe<z.ZodObject<{
|
|
19
|
+
kind: z.ZodLiteral<"failed">;
|
|
20
|
+
diagnostic: z.ZodString;
|
|
21
|
+
child: z.ZodOptional<z.ZodObject<{
|
|
22
|
+
code: z.ZodNullable<z.ZodNumber>;
|
|
23
|
+
signal: z.ZodNullable<z.ZodString>;
|
|
24
|
+
log: z.ZodObject<{
|
|
25
|
+
path: z.ZodString;
|
|
26
|
+
from: z.ZodNumber;
|
|
27
|
+
to: z.ZodNumber;
|
|
28
|
+
}, z.core.$strict>;
|
|
29
|
+
}, z.core.$strict>>;
|
|
30
|
+
}, z.core.$strict>, z.ZodTransform<{
|
|
31
|
+
kind: "failed";
|
|
32
|
+
diagnostic: string;
|
|
33
|
+
} | {
|
|
34
|
+
child: {
|
|
35
|
+
code: number | null;
|
|
36
|
+
signal: string | null;
|
|
37
|
+
log: {
|
|
38
|
+
path: string;
|
|
39
|
+
from: number;
|
|
40
|
+
to: number;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
kind: "failed";
|
|
44
|
+
diagnostic: string;
|
|
45
|
+
}, {
|
|
46
|
+
kind: "failed";
|
|
47
|
+
diagnostic: string;
|
|
48
|
+
child?: {
|
|
49
|
+
code: number | null;
|
|
50
|
+
signal: string | null;
|
|
51
|
+
log: {
|
|
52
|
+
path: string;
|
|
53
|
+
from: number;
|
|
54
|
+
to: number;
|
|
55
|
+
};
|
|
56
|
+
} | undefined;
|
|
57
|
+
}>>]>;
|
|
58
|
+
export declare const tellResultSchema: z.ZodObject<{
|
|
59
|
+
admission: z.ZodObject<{
|
|
60
|
+
fact: z.ZodLiteral<"recorded">;
|
|
61
|
+
tellId: z.ZodString;
|
|
62
|
+
}, z.core.$strict>;
|
|
63
|
+
row: z.ZodObject<{
|
|
64
|
+
kind: z.ZodLiteral<"tell">;
|
|
65
|
+
sequence: z.ZodNumber;
|
|
66
|
+
at: z.ZodString;
|
|
67
|
+
tellId: z.ZodString;
|
|
68
|
+
text: z.ZodString;
|
|
69
|
+
state: z.ZodEnum<{
|
|
70
|
+
pending: "pending";
|
|
71
|
+
told: "told";
|
|
72
|
+
}>;
|
|
73
|
+
deliveries: z.ZodReadonly<z.ZodArray<z.ZodPipe<z.ZodObject<{
|
|
74
|
+
deliveredAt: z.ZodString;
|
|
75
|
+
route: z.ZodEnum<{
|
|
76
|
+
live: "live";
|
|
77
|
+
launch: "launch";
|
|
78
|
+
}>;
|
|
79
|
+
turnSequence: z.ZodNumber;
|
|
80
|
+
receipt: z.ZodOptional<z.ZodEnum<{
|
|
81
|
+
required: "required";
|
|
82
|
+
unavailable: "unavailable";
|
|
83
|
+
}>>;
|
|
84
|
+
}, z.core.$strict>, z.ZodTransform<Readonly<{
|
|
85
|
+
turnSequence: number;
|
|
86
|
+
route: "launch" | "live";
|
|
87
|
+
receipt?: "unavailable" | "required";
|
|
88
|
+
deliveredAt: string;
|
|
89
|
+
}>, {
|
|
90
|
+
deliveredAt: string;
|
|
91
|
+
route: "live" | "launch";
|
|
92
|
+
turnSequence: number;
|
|
93
|
+
receipt?: "required" | "unavailable" | undefined;
|
|
94
|
+
}>>>>;
|
|
95
|
+
}, z.core.$strict>;
|
|
96
|
+
wake: z.ZodUnion<readonly [z.ZodObject<{
|
|
97
|
+
kind: z.ZodLiteral<"told">;
|
|
98
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
99
|
+
kind: z.ZodLiteral<"held">;
|
|
100
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
101
|
+
kind: z.ZodLiteral<"pursuing">;
|
|
102
|
+
bodySequence: z.ZodNumber;
|
|
103
|
+
}, z.core.$strict>, z.ZodPipe<z.ZodObject<{
|
|
104
|
+
kind: z.ZodLiteral<"failed">;
|
|
105
|
+
diagnostic: z.ZodString;
|
|
106
|
+
child: z.ZodOptional<z.ZodObject<{
|
|
107
|
+
code: z.ZodNullable<z.ZodNumber>;
|
|
108
|
+
signal: z.ZodNullable<z.ZodString>;
|
|
109
|
+
log: z.ZodObject<{
|
|
110
|
+
path: z.ZodString;
|
|
111
|
+
from: z.ZodNumber;
|
|
112
|
+
to: z.ZodNumber;
|
|
113
|
+
}, z.core.$strict>;
|
|
114
|
+
}, z.core.$strict>>;
|
|
115
|
+
}, z.core.$strict>, z.ZodTransform<{
|
|
116
|
+
kind: "failed";
|
|
117
|
+
diagnostic: string;
|
|
118
|
+
} | {
|
|
119
|
+
child: {
|
|
120
|
+
code: number | null;
|
|
121
|
+
signal: string | null;
|
|
122
|
+
log: {
|
|
123
|
+
path: string;
|
|
124
|
+
from: number;
|
|
125
|
+
to: number;
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
kind: "failed";
|
|
129
|
+
diagnostic: string;
|
|
130
|
+
}, {
|
|
131
|
+
kind: "failed";
|
|
132
|
+
diagnostic: string;
|
|
133
|
+
child?: {
|
|
134
|
+
code: number | null;
|
|
135
|
+
signal: string | null;
|
|
136
|
+
log: {
|
|
137
|
+
path: string;
|
|
138
|
+
from: number;
|
|
139
|
+
to: number;
|
|
140
|
+
};
|
|
141
|
+
} | undefined;
|
|
142
|
+
}>>]>;
|
|
143
|
+
}, z.core.$strict>;
|
|
144
|
+
export type TellWake = z.infer<typeof tellWakeSchema>;
|
|
145
|
+
export type TellResult = z.infer<typeof tellResultSchema>;
|
|
146
|
+
export type CallInitialTellAdmission = Readonly<{
|
|
147
|
+
kind: "admitted";
|
|
148
|
+
tell: TellFact;
|
|
149
|
+
wake: Promise<TellResult>;
|
|
150
|
+
}> | Readonly<{
|
|
151
|
+
kind: "not-born";
|
|
152
|
+
}> | Readonly<{
|
|
153
|
+
kind: "birth-failed";
|
|
154
|
+
diagnostic: string;
|
|
155
|
+
}>;
|
|
156
|
+
export declare function admitCallInitialTell(input: Readonly<{
|
|
157
|
+
world: WorldRoot;
|
|
158
|
+
id: AkuId;
|
|
159
|
+
initialTell: CallInitialTell;
|
|
160
|
+
signal?: AbortSignal;
|
|
161
|
+
now?: () => string;
|
|
162
|
+
wake(tell: TellFact): Promise<TellResult>;
|
|
163
|
+
}>): Promise<CallInitialTellAdmission>;
|
|
164
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { bornStatus, defaultWaitComplete, readWaitComplete, waitForObservation } from "./akuma-observe.js";
|
|
3
|
+
import { recordTell } from "./heart/index.js";
|
|
4
|
+
import { pathsForAkuId } from "./identity.js";
|
|
5
|
+
import { tellRowSchema } from "./projection.js";
|
|
6
|
+
import { BIRTH_TIMEOUT_MS } from "./publication.js";
|
|
7
|
+
const nonblankTextSchema = z.string().refine((value) => value.trim() !== "");
|
|
8
|
+
const runLogReferenceSchema = z
|
|
9
|
+
.object({ path: z.string(), from: z.number().int().nonnegative(), to: z.number().int().nonnegative() })
|
|
10
|
+
.strict();
|
|
11
|
+
const failedTellWakeSchema = z
|
|
12
|
+
.object({
|
|
13
|
+
kind: z.literal("failed"),
|
|
14
|
+
diagnostic: z.string(),
|
|
15
|
+
child: z
|
|
16
|
+
.object({ code: z.number().int().nullable(), signal: z.string().nullable(), log: runLogReferenceSchema })
|
|
17
|
+
.strict()
|
|
18
|
+
.optional(),
|
|
19
|
+
})
|
|
20
|
+
.strict()
|
|
21
|
+
.transform(({ child, ...wake }) => (child === undefined ? wake : { ...wake, child }));
|
|
22
|
+
const tellWakeSchema = z.union([
|
|
23
|
+
z.object({ kind: z.literal("told") }).strict(),
|
|
24
|
+
z.object({ kind: z.literal("held") }).strict(),
|
|
25
|
+
z.object({ kind: z.literal("pursuing"), bodySequence: z.number().int().nonnegative() }).strict(),
|
|
26
|
+
failedTellWakeSchema,
|
|
27
|
+
]);
|
|
28
|
+
export const tellResultSchema = z
|
|
29
|
+
.object({
|
|
30
|
+
admission: z.object({ fact: z.literal("recorded"), tellId: nonblankTextSchema }).strict(),
|
|
31
|
+
row: tellRowSchema,
|
|
32
|
+
wake: tellWakeSchema,
|
|
33
|
+
})
|
|
34
|
+
.strict();
|
|
35
|
+
export async function admitCallInitialTell(input) {
|
|
36
|
+
const paths = pathsForAkuId(input.world, input.id);
|
|
37
|
+
const birth = await waitForObservation({
|
|
38
|
+
timeoutMs: BIRTH_TIMEOUT_MS,
|
|
39
|
+
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
40
|
+
probe: async () => await readWaitComplete(input.world, input.id),
|
|
41
|
+
observe: async () => (await bornStatus(paths, input.id, { aperture: "receipt" })).status,
|
|
42
|
+
complete: defaultWaitComplete,
|
|
43
|
+
});
|
|
44
|
+
if (birth.reason !== "completed" || birth.value.life !== "asleep") {
|
|
45
|
+
return {
|
|
46
|
+
kind: "birth-failed",
|
|
47
|
+
diagnostic: `Akuma ${input.id} prompt-free birth did not settle cleanly`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
input.signal?.throwIfAborted();
|
|
51
|
+
const recorded = await recordTell(paths, {
|
|
52
|
+
kind: "tell",
|
|
53
|
+
id: input.initialTell.tellId,
|
|
54
|
+
body: input.initialTell.body,
|
|
55
|
+
recordedAt: input.now?.() ?? new Date().toISOString(),
|
|
56
|
+
...(input.initialTell.schemaJson === undefined ? {} : { schemaJson: input.initialTell.schemaJson }),
|
|
57
|
+
...(input.initialTell.initiator === undefined ? {} : { initiator: input.initialTell.initiator }),
|
|
58
|
+
});
|
|
59
|
+
if (recorded.kind === "not-born")
|
|
60
|
+
return recorded;
|
|
61
|
+
return { kind: "admitted", tell: recorded.tell, wake: input.wake(recorded.tell) };
|
|
62
|
+
}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import { realpath, stat } from "node:fs/promises";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
|
-
export function callReadonly(value, diagnostic = "Akuma call readonly must be true") {
|
|
4
|
-
if (value === undefined)
|
|
5
|
-
return {};
|
|
6
|
-
if (value !== true)
|
|
7
|
-
throw new TypeError(diagnostic);
|
|
8
|
-
return { readonly: true };
|
|
9
|
-
}
|
|
10
3
|
export async function canonicalBirthCwd(input, diagnostic = `cwd is not an existing directory: ${input}`) {
|
|
11
4
|
const selected = resolve(input);
|
|
12
5
|
try {
|