@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
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Settings } from "../settings.js";
|
|
2
|
+
import type { WorldRoot } from "../world.js";
|
|
3
|
+
import { type AllowedAction } from "./allowed.js";
|
|
4
|
+
import { type TellResult } from "./body.js";
|
|
5
|
+
import type { CallInitialTell } from "./call-initial-tell.js";
|
|
6
|
+
import { type AllocatedAkuma } from "./identity.js";
|
|
7
|
+
import { type ExecutionContext } from "./requests.js";
|
|
8
|
+
import type { Schema } from "./schema.js";
|
|
9
|
+
type AkumaCallExecution = Readonly<{
|
|
10
|
+
cwd: string;
|
|
11
|
+
source: "input" | "caller" | "process" | "world";
|
|
12
|
+
}>;
|
|
13
|
+
export type AkumaCallInput = Readonly<{
|
|
14
|
+
archetype: string;
|
|
15
|
+
body?: string;
|
|
16
|
+
cwd?: string;
|
|
17
|
+
allowed?: readonly AllowedAction[];
|
|
18
|
+
schema?: Schema<unknown>;
|
|
19
|
+
initiator?: string;
|
|
20
|
+
signal?: AbortSignal;
|
|
21
|
+
}>;
|
|
22
|
+
type AkumaCallContext = Readonly<{
|
|
23
|
+
initiatorCwd?: string;
|
|
24
|
+
cwdCanonical?: true;
|
|
25
|
+
}>;
|
|
26
|
+
export type AkumaConfiguration = Readonly<{
|
|
27
|
+
home?: string;
|
|
28
|
+
settings?: Settings;
|
|
29
|
+
execution?: ExecutionContext;
|
|
30
|
+
}>;
|
|
31
|
+
export type InitialCallTell = CallInitialTell;
|
|
32
|
+
/** One admitted call: the leading child identity plus the exact live initial Tell evidence when supplied. */
|
|
33
|
+
export type AdmittedAkumaCall = Readonly<{
|
|
34
|
+
id: AllocatedAkuma["id"];
|
|
35
|
+
cwd: string;
|
|
36
|
+
execution: AkumaCallExecution;
|
|
37
|
+
/** True when the serving process was reached through the one direct-parent request channel. */
|
|
38
|
+
requested: boolean;
|
|
39
|
+
tell?: TellResult;
|
|
40
|
+
/** The native local failure, or the request transport's diagnostic text, after a confirmed birth. */
|
|
41
|
+
failure?: unknown;
|
|
42
|
+
}>;
|
|
43
|
+
type AkumaCallLaunchInput = Omit<AkumaCallInput, "body" | "schema"> & Readonly<{
|
|
44
|
+
initialTell?: InitialCallTell;
|
|
45
|
+
contractId?: string;
|
|
46
|
+
}>;
|
|
47
|
+
/**
|
|
48
|
+
* The one lower recipe preparer and admission edge used by plural creation and
|
|
49
|
+
* standalone birth: load the caller Archetype/Settings, freeze allowed and cwd,
|
|
50
|
+
* then invoke the P3 prepared-call executor under local or request custody.
|
|
51
|
+
*/
|
|
52
|
+
export declare function admitAkumaCall(path: WorldRoot, configuration: AkumaConfiguration, input: AkumaCallLaunchInput, context: AkumaCallContext): Promise<AdmittedAkumaCall>;
|
|
53
|
+
export {};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { settings as readSettings } from "../settings.js";
|
|
3
|
+
import { readAkumaBirthCwd } from "./akuma-observe.js";
|
|
4
|
+
import { AkumaOwner } from "./akuma-owner.js";
|
|
5
|
+
import { decodeAllowedActions, unionAllowedActions } from "./allowed.js";
|
|
6
|
+
import { AkumaArchetypeError, loadPreparedArchetype } from "./archetype.js";
|
|
7
|
+
import { spawnAkumaBody } from "./body.js";
|
|
8
|
+
import { canonicalBirthCwd } from "./call-input.js";
|
|
9
|
+
import { requestForwardedAkumaCall } from "./call-request.js";
|
|
10
|
+
import { archetypeName } from "./identity.js";
|
|
11
|
+
import { PreparedCallAdmissionError, executePreparedCall } from "./publication.js";
|
|
12
|
+
import { executionChannel } from "./requests.js";
|
|
13
|
+
async function admitBodyRequest(input) {
|
|
14
|
+
const cwd = input.call.cwd === undefined
|
|
15
|
+
? undefined
|
|
16
|
+
: input.context.cwdCanonical === true
|
|
17
|
+
? input.call.cwd
|
|
18
|
+
: await canonicalBirthCwd(input.call.cwd);
|
|
19
|
+
const response = await requestForwardedAkumaCall({
|
|
20
|
+
directory: input.execution.directory,
|
|
21
|
+
id: randomUUID(),
|
|
22
|
+
world: input.path,
|
|
23
|
+
archetype: input.name,
|
|
24
|
+
...(input.call.initialTell === undefined ? {} : { initialTell: input.call.initialTell }),
|
|
25
|
+
...(cwd === undefined ? {} : { cwd }),
|
|
26
|
+
recipe: input.recipe,
|
|
27
|
+
...(input.call.signal === undefined ? {} : { signal: input.call.signal }),
|
|
28
|
+
});
|
|
29
|
+
const bornCwd = await readAkumaBirthCwd(input.path, response.id);
|
|
30
|
+
return {
|
|
31
|
+
id: response.id,
|
|
32
|
+
cwd: bornCwd,
|
|
33
|
+
requested: true,
|
|
34
|
+
execution: { cwd: bornCwd, source: cwd === undefined ? "caller" : "input" },
|
|
35
|
+
...(response.kind === "live" && response.tell !== undefined ? { tell: response.tell } : {}),
|
|
36
|
+
...(response.kind === "live" && response.tellFailure !== undefined ? { failure: response.tellFailure } : {}),
|
|
37
|
+
...(response.kind === "reference" && input.call.initialTell !== undefined
|
|
38
|
+
? { failure: `Akuma ${response.id} was born without its exact initial Tell receipt` }
|
|
39
|
+
: {}),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
async function admitDirect(input) {
|
|
43
|
+
const initiatorCwd = input.context.initiatorCwd;
|
|
44
|
+
const selectedCwd = input.call.cwd ?? initiatorCwd ?? input.path;
|
|
45
|
+
const cwd = input.call.cwd !== undefined && input.context.cwdCanonical === true
|
|
46
|
+
? input.call.cwd
|
|
47
|
+
: await canonicalBirthCwd(selectedCwd);
|
|
48
|
+
let result;
|
|
49
|
+
try {
|
|
50
|
+
result = await executePreparedCall({
|
|
51
|
+
archetype: input.archetype.name,
|
|
52
|
+
cwd,
|
|
53
|
+
...(input.call.initialTell === undefined ? {} : { initialTell: input.call.initialTell }),
|
|
54
|
+
...(input.call.signal === undefined ? {} : { signal: input.call.signal }),
|
|
55
|
+
custody: {
|
|
56
|
+
kind: "local",
|
|
57
|
+
world: input.path,
|
|
58
|
+
recipe: input.recipe,
|
|
59
|
+
spawn: async (launch) => await spawnAkumaBody({
|
|
60
|
+
paths: launch.paths,
|
|
61
|
+
seed: launch.seed,
|
|
62
|
+
...(input.call.contractId === undefined ? {} : { completion: { contractId: input.call.contractId } }),
|
|
63
|
+
}),
|
|
64
|
+
admitInitialTell: async ({ id, initialTell, signal }) => await new AkumaOwner(id, input.path).admitInitialTell(initialTell, {
|
|
65
|
+
...(signal === undefined ? {} : { signal }),
|
|
66
|
+
}),
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
// The executor owns provider admission; this local edge restores the
|
|
72
|
+
// Archetype-classified refusal the initiating caller has always seen.
|
|
73
|
+
if (error instanceof PreparedCallAdmissionError) {
|
|
74
|
+
throw new AkumaArchetypeError(input.archetype.name, [input.archetype.path], error.stage === "options" ? `is unsupported: ${error.diagnostic}` : `uses ${error.diagnostic}`);
|
|
75
|
+
}
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
id: result.child.id,
|
|
80
|
+
cwd,
|
|
81
|
+
requested: false,
|
|
82
|
+
execution: {
|
|
83
|
+
cwd,
|
|
84
|
+
source: input.call.cwd !== undefined ? "input" : initiatorCwd === undefined ? "world" : "process",
|
|
85
|
+
},
|
|
86
|
+
...(result.tell === undefined ? {} : { tell: result.tell }),
|
|
87
|
+
...(result.failure === undefined ? {} : { failure: result.failure }),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The one lower recipe preparer and admission edge used by plural creation and
|
|
92
|
+
* standalone birth: load the caller Archetype/Settings, freeze allowed and cwd,
|
|
93
|
+
* then invoke the P3 prepared-call executor under local or request custody.
|
|
94
|
+
*/
|
|
95
|
+
export async function admitAkumaCall(path, configuration, input, context) {
|
|
96
|
+
const name = archetypeName(input.archetype);
|
|
97
|
+
const home = configuration.home === undefined ? {} : { home: configuration.home };
|
|
98
|
+
const settings = configuration.settings ?? (await readSettings({ root: path, ...home }));
|
|
99
|
+
const archetype = await loadPreparedArchetype({ name, project: path, ...home, settings });
|
|
100
|
+
const allowed = input.allowed === undefined
|
|
101
|
+
? archetype.allowed
|
|
102
|
+
: unionAllowedActions(archetype.allowed, decodeAllowedActions(input.allowed, "Akuma call allowed"));
|
|
103
|
+
const execution = executionChannel(configuration.execution);
|
|
104
|
+
const requestRecipe = Object.freeze({
|
|
105
|
+
...(archetype.description === undefined ? {} : { description: archetype.description }),
|
|
106
|
+
provider: archetype.provider,
|
|
107
|
+
options: archetype.options,
|
|
108
|
+
allowed,
|
|
109
|
+
});
|
|
110
|
+
if (execution.kind === "body-request")
|
|
111
|
+
return await admitBodyRequest({ call: input, context, path, name, recipe: requestRecipe, execution });
|
|
112
|
+
return await admitDirect({ call: input, context, path, archetype, recipe: requestRecipe });
|
|
113
|
+
}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import type { AllowedAction } from "./allowed.js";
|
|
2
|
-
import type { AkumaStatus } from "./akuma.js";
|
|
3
|
-
import type { InterruptReceipt, KillEvidence } from "./akuma.js";
|
|
4
|
-
import { type WaitReason } from "./akuma-observe.js";
|
|
5
|
-
import { type AkuId } from "./identity.js";
|
|
6
|
-
import { type ActivityHistory } from "./projection.js";
|
|
7
1
|
import type { Settings } from "../settings.js";
|
|
8
2
|
import type { WorldRoot } from "../world.js";
|
|
3
|
+
import { type InterruptReceipt } from "./akuma-owner.js";
|
|
4
|
+
import { type AkumaStatus } from "./akuma.js";
|
|
5
|
+
import type { AllowedAction } from "./allowed.js";
|
|
6
|
+
import { type KillEvidence } from "./heart/index.js";
|
|
7
|
+
import { type AkuId } from "./identity.js";
|
|
8
|
+
import type { ActivityHistory } from "./projection.js";
|
|
9
9
|
import { type Schema, type StandardSchemaV1 } from "./schema.js";
|
|
10
|
+
import { type AkumaAskResult, type AkumaTellResult } from "./selection-observation.js";
|
|
10
11
|
export type AkumaIdleOptions = Readonly<{
|
|
11
12
|
timeoutMs?: number;
|
|
12
13
|
signal?: AbortSignal;
|
|
13
14
|
}>;
|
|
14
15
|
export type AkumaIdleResult = Readonly<{
|
|
15
|
-
reason:
|
|
16
|
+
reason: "completed" | "deadline";
|
|
16
17
|
status: AkumaStatus;
|
|
17
18
|
}>;
|
|
18
19
|
export type AkumaHistoryOptions = Readonly<{
|
|
@@ -28,30 +29,30 @@ export type AkumaBirthInput = Readonly<{
|
|
|
28
29
|
cwd?: string;
|
|
29
30
|
home?: string;
|
|
30
31
|
settings?: Settings;
|
|
31
|
-
readonly?: true;
|
|
32
32
|
allowed?: readonly AllowedAction[];
|
|
33
33
|
}>;
|
|
34
|
-
export type AkumaTellOptions
|
|
35
|
-
schema: Schema<T> | StandardSchemaV1<T>;
|
|
34
|
+
export type AkumaTellOptions = AkumaSignalOptions & Readonly<{
|
|
36
35
|
interrupt?: boolean;
|
|
37
36
|
initiator?: string;
|
|
38
37
|
}>;
|
|
38
|
+
export type AkumaAskOptions<T> = AkumaTellOptions & Readonly<{
|
|
39
|
+
timeoutMs?: number;
|
|
40
|
+
schema?: Schema<T> | StandardSchemaV1<T>;
|
|
41
|
+
}>;
|
|
42
|
+
export type { AkumaAskResult, AkumaTellResult, InterruptReceipt, KillEvidence };
|
|
39
43
|
export declare class Akuma {
|
|
40
44
|
readonly id: AkuId;
|
|
41
45
|
private readonly root;
|
|
42
46
|
private constructor();
|
|
43
|
-
private
|
|
47
|
+
private owner;
|
|
44
48
|
static birth(archetype: string, input: AkumaBirthInput): Promise<Akuma>;
|
|
45
49
|
static select(root: WorldRoot, selector: string): Akuma;
|
|
46
|
-
tell(text: string, options?:
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
tell(text: string, options?: AkumaTellOptions): Promise<AkumaTellResult>;
|
|
51
|
+
ask(text: string, options?: AkumaAskOptions<string>): Promise<AkumaAskResult<string>>;
|
|
52
|
+
ask<T>(text: string, options: AkumaAskOptions<T> & Readonly<{
|
|
53
|
+
schema: Schema<T> | StandardSchemaV1<T>;
|
|
54
|
+
}>): Promise<AkumaAskResult<T>>;
|
|
51
55
|
status(): Promise<AkumaStatus>;
|
|
52
|
-
interrupt(text: string, options?: AkumaSignalOptions & Readonly<{
|
|
53
|
-
initiator?: string;
|
|
54
|
-
}>): Promise<InterruptReceipt>;
|
|
55
56
|
idle(options?: AkumaIdleOptions): Promise<AkumaIdleResult>;
|
|
56
57
|
history(options?: AkumaHistoryOptions): Promise<ActivityHistory>;
|
|
57
58
|
kill(options?: AkumaSignalOptions): Promise<KillEvidence>;
|
|
@@ -1,19 +1,10 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { callReadonly, canonicalBirthCwd } from "./call-input.js";
|
|
3
|
-
import { spawnAkumaBody } from "./body.js";
|
|
4
|
-
import { decodeAllowedActions, unionAllowedActions } from "./allowed.js";
|
|
5
|
-
import { AkumaDecodeError, AkumaProviderError } from "./akuma-errors.js";
|
|
6
|
-
import { AkumaHandle } from "./akuma-handle.js";
|
|
7
|
-
import { bornStatus, defaultWaitComplete, waitForObservation } from "./akuma-observe.js";
|
|
8
|
-
import { loadArchetype } from "./archetype.js";
|
|
9
|
-
import { activitySlice } from "./heart/index.js";
|
|
10
|
-
import { parseAkuId, pathsForAkuId } from "./identity.js";
|
|
11
|
-
import { birthAkuma, launchAkuma } from "./publication.js";
|
|
12
|
-
import { projectTurns, selectHistory } from "./projection.js";
|
|
13
|
-
import { settings as readSettings } from "../settings.js";
|
|
14
|
-
import { schemaFromStandard, schemaJsonText } from "./schema.js";
|
|
15
1
|
import { abortable } from "./abort.js";
|
|
16
|
-
|
|
2
|
+
import { admitAkumaCall } from "./akuma-call.js";
|
|
3
|
+
import { defaultWaitComplete } from "./akuma-observe.js";
|
|
4
|
+
import { AkumaOwner } from "./akuma-owner.js";
|
|
5
|
+
import { decodeAskObservation, executeAskAkuma, executeTellAkuma } from "./akuma-selection-execution.js";
|
|
6
|
+
import { parseAkuId } from "./identity.js";
|
|
7
|
+
import { schemaFromStandard, schemaJsonText } from "./schema.js";
|
|
17
8
|
function signalOption(value) {
|
|
18
9
|
if (value === undefined)
|
|
19
10
|
return undefined;
|
|
@@ -21,63 +12,6 @@ function signalOption(value) {
|
|
|
21
12
|
throw new TypeError("signal must be an AbortSignal");
|
|
22
13
|
return value;
|
|
23
14
|
}
|
|
24
|
-
function recordedTell(result) {
|
|
25
|
-
if (result.wake.kind === "failed")
|
|
26
|
-
throw new AkumaProviderError(result.wake.diagnostic);
|
|
27
|
-
return { tellId: result.admission.tellId };
|
|
28
|
-
}
|
|
29
|
-
async function recordPlainTell(input) {
|
|
30
|
-
const { id, root, body, tellId, initiator, signal } = input;
|
|
31
|
-
const admitted = await new AkumaHandle(id, root).tell(body, tellId, undefined, undefined, {
|
|
32
|
-
...(initiator === undefined ? {} : { initiator }),
|
|
33
|
-
...(signal === undefined ? {} : { signal }),
|
|
34
|
-
});
|
|
35
|
-
return recordedTell(admitted);
|
|
36
|
-
}
|
|
37
|
-
function plainTellInput(input) {
|
|
38
|
-
return {
|
|
39
|
-
id: input.id,
|
|
40
|
-
root: input.root,
|
|
41
|
-
body: input.body,
|
|
42
|
-
tellId: input.tellId,
|
|
43
|
-
...(input.options?.initiator === undefined ? {} : { initiator: input.options.initiator }),
|
|
44
|
-
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
async function recordSchemaTell(input) {
|
|
48
|
-
const { id, body, tellId, schema, root } = input;
|
|
49
|
-
if (input.interrupt === true) {
|
|
50
|
-
const interrupted = await new AkumaHandle(id, root).interrupt(body, {
|
|
51
|
-
tellId,
|
|
52
|
-
schemaJson: schemaJsonText(schema),
|
|
53
|
-
...(input.initiator === undefined ? {} : { initiator: input.initiator }),
|
|
54
|
-
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
55
|
-
});
|
|
56
|
-
if (interrupted.kind === "unavailable") {
|
|
57
|
-
throw new AkumaProviderError(`schema interrupt unavailable: ${interrupted.evidence}`);
|
|
58
|
-
}
|
|
59
|
-
return recordedTell(interrupted.tell);
|
|
60
|
-
}
|
|
61
|
-
const admitted = await new AkumaHandle(id, root).tell(body, tellId, undefined, undefined, {
|
|
62
|
-
schemaJson: schemaJsonText(schema),
|
|
63
|
-
...(input.initiator === undefined ? {} : { initiator: input.initiator }),
|
|
64
|
-
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
65
|
-
});
|
|
66
|
-
return recordedTell(admitted);
|
|
67
|
-
}
|
|
68
|
-
function outcomeError(outcome) {
|
|
69
|
-
if (outcome.kind === "invalid-output")
|
|
70
|
-
throw new AkumaDecodeError(outcome.diagnostic, outcome.answer);
|
|
71
|
-
if (outcome.kind === "failed")
|
|
72
|
-
throw new AkumaProviderError(outcome.diagnostic);
|
|
73
|
-
throw new AkumaProviderError("Akuma answered without a value");
|
|
74
|
-
}
|
|
75
|
-
async function awaitTellOutcome(handle, tellId, signal) {
|
|
76
|
-
const observed = await handle.tellOutcome(tellId, signal === undefined ? {} : { signal });
|
|
77
|
-
if (observed.outcome !== null)
|
|
78
|
-
return observed.outcome;
|
|
79
|
-
throw new AkumaProviderError(`recorded Tell ${tellId} reached a terminal delivery without a Turn binding`);
|
|
80
|
-
}
|
|
81
15
|
export class Akuma {
|
|
82
16
|
id;
|
|
83
17
|
root;
|
|
@@ -86,8 +20,8 @@ export class Akuma {
|
|
|
86
20
|
this.root = root;
|
|
87
21
|
Object.freeze(this);
|
|
88
22
|
}
|
|
89
|
-
|
|
90
|
-
return
|
|
23
|
+
owner() {
|
|
24
|
+
return new AkumaOwner(this.id, this.root);
|
|
91
25
|
}
|
|
92
26
|
static async birth(archetype, input) {
|
|
93
27
|
if (typeof input !== "object" || input === null || Array.isArray(input)) {
|
|
@@ -95,103 +29,72 @@ export class Akuma {
|
|
|
95
29
|
}
|
|
96
30
|
if (typeof input.root !== "string")
|
|
97
31
|
throw new TypeError("Akuma birth root must be a WorldRoot");
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
?
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
allocated,
|
|
110
|
-
launch: async (born) => await spawnAkumaBody({
|
|
111
|
-
paths: born.paths,
|
|
112
|
-
seed: {
|
|
113
|
-
id: born.id,
|
|
114
|
-
archetype: born.archetype,
|
|
115
|
-
...(loaded.description === undefined ? {} : { description: loaded.description }),
|
|
116
|
-
provider: loaded.provider,
|
|
117
|
-
options: loaded.options,
|
|
118
|
-
...(loaded.readonly === undefined ? {} : { readonly: loaded.readonly }),
|
|
119
|
-
allowed,
|
|
120
|
-
cwd,
|
|
121
|
-
origin: { kind: "direct" },
|
|
122
|
-
},
|
|
123
|
-
}),
|
|
124
|
-
});
|
|
125
|
-
return new Akuma(allocated.id, input.root);
|
|
32
|
+
const admitted = await admitAkumaCall(input.root, {
|
|
33
|
+
...(input.home === undefined ? {} : { home: input.home }),
|
|
34
|
+
...(input.settings === undefined ? {} : { settings: input.settings }),
|
|
35
|
+
}, {
|
|
36
|
+
archetype,
|
|
37
|
+
...(input.cwd === undefined ? {} : { cwd: input.cwd }),
|
|
38
|
+
...(input.allowed === undefined ? {} : { allowed: input.allowed }),
|
|
39
|
+
}, {});
|
|
40
|
+
if (admitted.failure !== undefined)
|
|
41
|
+
throw admitted.failure;
|
|
42
|
+
return new Akuma(admitted.id, input.root);
|
|
126
43
|
}
|
|
127
44
|
static select(root, selector) {
|
|
128
45
|
if (typeof root !== "string")
|
|
129
46
|
throw new TypeError("Akuma.select root must be a WorldRoot");
|
|
130
47
|
return new Akuma(parseAkuId(selector).id, root);
|
|
131
48
|
}
|
|
132
|
-
async tell(text, options) {
|
|
49
|
+
async tell(text, options = {}) {
|
|
133
50
|
if (typeof text !== "string")
|
|
134
51
|
throw new TypeError("Akuma tell text must be a string");
|
|
135
|
-
|
|
52
|
+
if (typeof options !== "object" || options === null || Array.isArray(options))
|
|
53
|
+
throw new TypeError("Akuma tell options must be an object");
|
|
54
|
+
if ("schema" in options)
|
|
55
|
+
throw new TypeError("Akuma tell does not accept schema; use ask");
|
|
56
|
+
const unknown = Object.keys(options).find((key) => !["interrupt", "initiator", "signal"].includes(key));
|
|
57
|
+
if (unknown !== undefined)
|
|
58
|
+
throw new TypeError(`Akuma tell options has unknown field: ${unknown}`);
|
|
59
|
+
const signal = signalOption(options.signal);
|
|
136
60
|
signal?.throwIfAborted();
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
?
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
tellId,
|
|
146
|
-
options,
|
|
147
|
-
signal,
|
|
148
|
-
}))
|
|
149
|
-
: await recordSchemaTell({
|
|
150
|
-
id: this.id,
|
|
151
|
-
body: text,
|
|
152
|
-
tellId,
|
|
153
|
-
schema,
|
|
154
|
-
root: this.root,
|
|
155
|
-
...(schemaOptions.interrupt === undefined ? {} : { interrupt: schemaOptions.interrupt }),
|
|
156
|
-
...(schemaOptions.initiator === undefined ? {} : { initiator: schemaOptions.initiator }),
|
|
157
|
-
...(signal === undefined ? {} : { signal }),
|
|
158
|
-
});
|
|
159
|
-
const outcome = await awaitTellOutcome(new AkumaHandle(this.id, this.root), recorded.tellId, signal);
|
|
160
|
-
if (outcome.kind !== "answered")
|
|
161
|
-
outcomeError(outcome);
|
|
162
|
-
if (schema === undefined)
|
|
163
|
-
return outcome.answer;
|
|
164
|
-
const raw = outcome.answerJson ?? outcome.answer;
|
|
165
|
-
let parsed;
|
|
166
|
-
try {
|
|
167
|
-
parsed = JSON.parse(raw);
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
throw new AkumaDecodeError(error instanceof Error ? error.message : "Answer is not valid JSON", outcome.answer);
|
|
171
|
-
}
|
|
172
|
-
try {
|
|
173
|
-
return schema.decode(parsed);
|
|
174
|
-
}
|
|
175
|
-
catch (error) {
|
|
176
|
-
throw new AkumaDecodeError(error instanceof Error ? error.message : "Answer failed schema decode", outcome.answer);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
async status() {
|
|
180
|
-
return (await bornStatus(this.paths, this.id, { aperture: "monitoring" })).status;
|
|
61
|
+
return await executeTellAkuma({
|
|
62
|
+
path: this.root,
|
|
63
|
+
id: this.id,
|
|
64
|
+
body: text,
|
|
65
|
+
...(options.interrupt === true ? { interrupt: true } : {}),
|
|
66
|
+
...(options.initiator === undefined ? {} : { initiator: options.initiator }),
|
|
67
|
+
...(signal === undefined ? {} : { signal }),
|
|
68
|
+
});
|
|
181
69
|
}
|
|
182
|
-
async
|
|
70
|
+
async ask(text, options = {}) {
|
|
183
71
|
if (typeof text !== "string")
|
|
184
|
-
throw new TypeError("Akuma
|
|
185
|
-
if (typeof options !== "object" || options === null || Array.isArray(options))
|
|
186
|
-
throw new TypeError("Akuma
|
|
187
|
-
|
|
72
|
+
throw new TypeError("Akuma ask text must be a string");
|
|
73
|
+
if (typeof options !== "object" || options === null || Array.isArray(options))
|
|
74
|
+
throw new TypeError("Akuma ask options must be an object");
|
|
75
|
+
const unknown = Object.keys(options).find((key) => !["schema", "timeoutMs", "interrupt", "initiator", "signal"].includes(key));
|
|
76
|
+
if (unknown !== undefined)
|
|
77
|
+
throw new TypeError(`Akuma ask options has unknown field: ${unknown}`);
|
|
78
|
+
if (options.timeoutMs !== undefined &&
|
|
79
|
+
(!Number.isFinite(options.timeoutMs) || !Number.isInteger(options.timeoutMs) || options.timeoutMs < 0))
|
|
80
|
+
throw new TypeError("Akuma ask timeoutMs must be a nonnegative finite millisecond duration");
|
|
188
81
|
const signal = signalOption(options.signal);
|
|
189
82
|
signal?.throwIfAborted();
|
|
190
|
-
const
|
|
191
|
-
|
|
83
|
+
const schema = options.schema === undefined ? undefined : schemaFromStandard(options.schema);
|
|
84
|
+
const result = await executeAskAkuma({
|
|
85
|
+
path: this.root,
|
|
86
|
+
id: this.id,
|
|
87
|
+
body: text,
|
|
88
|
+
...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
|
|
89
|
+
...(schema === undefined ? {} : { schemaJson: schemaJsonText(schema) }),
|
|
90
|
+
...(options.interrupt === true ? { interrupt: true } : {}),
|
|
192
91
|
...(options.initiator === undefined ? {} : { initiator: options.initiator }),
|
|
92
|
+
...(signal === undefined ? {} : { signal }),
|
|
193
93
|
});
|
|
194
|
-
return
|
|
94
|
+
return (schema === undefined ? result : { ...result, observation: decodeAskObservation(result.observation, schema) });
|
|
95
|
+
}
|
|
96
|
+
async status() {
|
|
97
|
+
return await this.owner().status();
|
|
195
98
|
}
|
|
196
99
|
async idle(options = {}) {
|
|
197
100
|
if (typeof options !== "object" || options === null || Array.isArray(options)) {
|
|
@@ -204,13 +107,11 @@ export class Akuma {
|
|
|
204
107
|
throw new TypeError("Akuma idle timeoutMs must be a nonnegative finite millisecond duration");
|
|
205
108
|
}
|
|
206
109
|
const signal = signalOption(options.signal);
|
|
207
|
-
const waited = await
|
|
110
|
+
const waited = await this.owner().waitReceipt(defaultWaitComplete, {
|
|
208
111
|
...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
|
|
209
112
|
...(signal === undefined ? {} : { signal }),
|
|
210
|
-
observe: async () => (await bornStatus(this.paths, this.id, { aperture: "monitoring" })).status,
|
|
211
|
-
complete: defaultWaitComplete,
|
|
212
113
|
});
|
|
213
|
-
return { reason: waited.reason, status: waited.
|
|
114
|
+
return { reason: waited.reason, status: waited.status };
|
|
214
115
|
}
|
|
215
116
|
async history(options = {}) {
|
|
216
117
|
if (typeof options !== "object" || options === null || Array.isArray(options)) {
|
|
@@ -222,24 +123,11 @@ export class Akuma {
|
|
|
222
123
|
if (options.before !== undefined && options.since !== undefined) {
|
|
223
124
|
throw new TypeError("Akuma history before and since are mutually exclusive");
|
|
224
125
|
}
|
|
225
|
-
|
|
226
|
-
["before", options.before],
|
|
227
|
-
["since", options.since],
|
|
228
|
-
]) {
|
|
229
|
-
if (value !== undefined && (!Number.isSafeInteger(value) || value <= 0)) {
|
|
230
|
-
throw new TypeError(`Akuma history ${name} must be a positive safe integer`);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
const limit = options.limit ?? HISTORY_LIMIT;
|
|
234
|
-
if (!Number.isSafeInteger(limit) || limit <= 0 || limit > 5_000) {
|
|
235
|
-
throw new TypeError("Akuma history limit must be a positive safe integer no greater than 5000");
|
|
236
|
-
}
|
|
237
|
-
const slice = await activitySlice(this.paths);
|
|
238
|
-
return selectHistory(projectTurns(slice.rows, { lowestRetained: slice.lowestRetained, highest: slice.highest }), {
|
|
126
|
+
return (await this.owner().history({
|
|
239
127
|
...(options.before === undefined ? {} : { before: options.before }),
|
|
240
128
|
...(options.since === undefined ? {} : { since: options.since }),
|
|
241
|
-
limit,
|
|
242
|
-
});
|
|
129
|
+
...(options.limit === undefined ? {} : { limit: options.limit }),
|
|
130
|
+
}));
|
|
243
131
|
}
|
|
244
132
|
async kill(options = {}) {
|
|
245
133
|
if (typeof options !== "object" || options === null || Array.isArray(options)) {
|
|
@@ -247,6 +135,6 @@ export class Akuma {
|
|
|
247
135
|
}
|
|
248
136
|
const signal = signalOption(options.signal);
|
|
249
137
|
signal?.throwIfAborted();
|
|
250
|
-
return await abortable(
|
|
138
|
+
return await abortable(this.owner().kill(signal === undefined ? {} : { signal }), signal ?? new AbortController().signal);
|
|
251
139
|
}
|
|
252
140
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { type AkuId, type AkumaPaths } from "./identity.js";
|
|
2
2
|
import { selectHistory, type ActivityHistory, type ActivityRow, type ActivitySnapshot } from "./projection.js";
|
|
3
3
|
import type { WorldRoot } from "../world.js";
|
|
4
|
+
import type { AkumaAlias } from "../identity/selector.js";
|
|
4
5
|
import type { AkumaListRow, AkumaStatus, UnbornAkumaListRow } from "./akuma.js";
|
|
5
|
-
export declare function
|
|
6
|
-
|
|
6
|
+
export declare function rosterListRow(paths: AkumaPaths, expected: AkuId, aliases?: readonly AkumaAlias[]): Promise<AkumaListRow | UnbornAkumaListRow>;
|
|
7
|
+
type BudgetedStatusObservation = Readonly<{
|
|
7
8
|
status: AkumaStatus;
|
|
8
9
|
ordinarySelected: number;
|
|
9
10
|
}>;
|
|
@@ -26,11 +27,6 @@ export declare function bornStatus(paths: AkumaPaths, expected: AkuId, input: Re
|
|
|
26
27
|
ordinaryBudget?: number;
|
|
27
28
|
admittedTellId?: string;
|
|
28
29
|
}>): Promise<BudgetedStatusObservation>;
|
|
29
|
-
export declare function readBudgetedStatus(worldPath: WorldRoot, id: AkuId, input: Readonly<{
|
|
30
|
-
aperture: "monitoring" | "receipt";
|
|
31
|
-
ordinaryBudget?: number;
|
|
32
|
-
admittedTellId?: string;
|
|
33
|
-
}>): Promise<BudgetedStatusObservation>;
|
|
34
30
|
export declare function readLiveStatus(worldPath: WorldRoot, id: AkuId, input: Readonly<{
|
|
35
31
|
aperture: "monitoring" | "receipt";
|
|
36
32
|
ordinaryBudget?: number;
|
|
@@ -55,19 +51,5 @@ export declare function waitForObservation<T>(input: Readonly<{
|
|
|
55
51
|
reason: WaitReason;
|
|
56
52
|
value: T;
|
|
57
53
|
}>>;
|
|
58
|
-
/**
|
|
59
|
-
* Successive status observations of one already born Akuma until its
|
|
60
|
-
* observation window closes. Every acquired observation is reported to
|
|
61
|
-
* `observe` before completion or deadline judgment, including the first
|
|
62
|
-
* already-complete observation; the last status is returned.
|
|
63
|
-
*/
|
|
64
|
-
export declare function observeAkumaStatus(worldPath: WorldRoot, expected: AkuId, input: Readonly<{
|
|
65
|
-
timeoutMs: number;
|
|
66
|
-
signal?: AbortSignal;
|
|
67
|
-
observe: (status: LiveStatusObservation) => void;
|
|
68
|
-
}>): Promise<Readonly<{
|
|
69
|
-
reason: WaitReason;
|
|
70
|
-
status: AkumaStatus;
|
|
71
|
-
}>>;
|
|
72
54
|
export declare function readAkumaBirthCwd(worldPath: WorldRoot, id: AkuId): Promise<string>;
|
|
73
55
|
export { selectHistory, type ActivityHistory, type ActivitySnapshot };
|
|
@@ -4,7 +4,7 @@ import { ordinarySnapshotBudget, projectTurns, selectHistory, selectSnapshot, }
|
|
|
4
4
|
import { resolveProviderExecution } from "./providers/index.js";
|
|
5
5
|
import { abortableDelay } from "./abort.js";
|
|
6
6
|
import { AkumaNotBornError } from "./akuma-errors.js";
|
|
7
|
-
export async function
|
|
7
|
+
export async function rosterListRow(paths, expected, aliases = []) {
|
|
8
8
|
const snapshot = await readHeart(paths);
|
|
9
9
|
if (snapshot.soul !== null) {
|
|
10
10
|
const observed = await bornObservation(paths, expected, () => readHeart(paths), snapshot);
|
|
@@ -16,17 +16,20 @@ export async function fleetListRow(paths, expected) {
|
|
|
16
16
|
lifeAt: lifeAt(observed.currentLife, observed.snapshot.latestBody, observed.snapshot.latestKill, observed.soul.createdAt),
|
|
17
17
|
lastActivityAt: observed.snapshot.lastActivityAt,
|
|
18
18
|
pending: observed.snapshot.pending.map((tell) => tell.id),
|
|
19
|
+
aliases,
|
|
19
20
|
};
|
|
20
21
|
}
|
|
21
22
|
try {
|
|
22
23
|
if ((await probeLeash(paths)) === "held")
|
|
23
|
-
return { id: expected, life: "unborn" };
|
|
24
|
+
return { id: expected, life: "unborn", aliases };
|
|
24
25
|
const seal = await readSeal(paths);
|
|
25
|
-
return seal === null
|
|
26
|
+
return seal === null
|
|
27
|
+
? { id: expected, life: "unborn", aliases }
|
|
28
|
+
: { id: expected, life: "stillborn", seal, aliases };
|
|
26
29
|
}
|
|
27
30
|
catch (error) {
|
|
28
31
|
if (isHeartAbsent(error))
|
|
29
|
-
return { id: expected, life: "unborn" };
|
|
32
|
+
return { id: expected, life: "unborn", aliases };
|
|
30
33
|
throw error;
|
|
31
34
|
}
|
|
32
35
|
}
|
|
@@ -77,7 +80,6 @@ export async function bornLiveStatus(paths, expected, input) {
|
|
|
77
80
|
life: currentLife,
|
|
78
81
|
cwd: soul.cwd,
|
|
79
82
|
allowed: soul.allowed,
|
|
80
|
-
...(soul.readonly === undefined ? {} : { readonly: soul.readonly }),
|
|
81
83
|
...(resumeUnsupported ? { strandedReason: "resume-unsupported" } : {}),
|
|
82
84
|
timeline: selected.snapshot,
|
|
83
85
|
},
|
|
@@ -89,9 +91,6 @@ export async function bornStatus(paths, expected, input) {
|
|
|
89
91
|
const { rows: _rows, ...status } = await bornLiveStatus(paths, expected, input);
|
|
90
92
|
return status;
|
|
91
93
|
}
|
|
92
|
-
export async function readBudgetedStatus(worldPath, id, input) {
|
|
93
|
-
return await bornStatus(pathsForAkuId(worldPath, id), id, input);
|
|
94
|
-
}
|
|
95
94
|
export async function readLiveStatus(worldPath, id, input) {
|
|
96
95
|
return await bornLiveStatus(pathsForAkuId(worldPath, id), id, input);
|
|
97
96
|
}
|
|
@@ -136,23 +135,6 @@ export async function waitForObservation(input) {
|
|
|
136
135
|
: Math.min(OBSERVATION_POLL_MS, Math.max(0, deadline - performance.now())), input.signal);
|
|
137
136
|
}
|
|
138
137
|
}
|
|
139
|
-
/**
|
|
140
|
-
* Successive status observations of one already born Akuma until its
|
|
141
|
-
* observation window closes. Every acquired observation is reported to
|
|
142
|
-
* `observe` before completion or deadline judgment, including the first
|
|
143
|
-
* already-complete observation; the last status is returned.
|
|
144
|
-
*/
|
|
145
|
-
export async function observeAkumaStatus(worldPath, expected, input) {
|
|
146
|
-
const paths = pathsForAkuId(worldPath, expected);
|
|
147
|
-
const waited = await waitForObservation({
|
|
148
|
-
timeoutMs: input.timeoutMs,
|
|
149
|
-
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
150
|
-
observe: async () => await bornLiveStatus(paths, expected, { aperture: "monitoring" }),
|
|
151
|
-
complete: (observation) => defaultWaitComplete(observation.status),
|
|
152
|
-
onObserve: input.observe,
|
|
153
|
-
});
|
|
154
|
-
return { reason: waited.reason, status: waited.value.status };
|
|
155
|
-
}
|
|
156
138
|
export async function readAkumaBirthCwd(worldPath, id) {
|
|
157
139
|
const soul = await readSoul(pathsForAkuId(worldPath, id));
|
|
158
140
|
if (soul === null)
|