@astrosheep/keiyaku 4.5.29 → 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 -18
- package/build/src/akuma/akuma-instance.js +65 -175
- package/build/src/akuma/akuma-observe.d.ts +3 -21
- package/build/src/akuma/akuma-observe.js +7 -24
- package/build/src/akuma/{akuma-handle.d.ts → akuma-owner.d.ts} +55 -27
- package/build/src/akuma/{akuma-handle.js → akuma-owner.js} +24 -23
- package/build/src/akuma/akuma-selection-execution.d.ts +51 -0
- package/build/src/akuma/akuma-selection-execution.js +134 -0
- package/build/src/akuma/{fleet-execution.d.ts → akuma-wait.d.ts} +24 -44
- package/build/src/akuma/akuma-wait.js +113 -0
- package/build/src/akuma/akuma.d.ts +35 -89
- package/build/src/akuma/akuma.js +148 -30
- package/build/src/akuma/archetype.d.ts +12 -0
- package/build/src/akuma/archetype.js +47 -19
- package/build/src/akuma/body.d.ts +76 -36
- package/build/src/akuma/body.js +84 -49
- package/build/src/akuma/call-initial-tell.d.ts +131 -22
- package/build/src/akuma/call-initial-tell.js +31 -1
- package/build/src/akuma/call-request.d.ts +237 -31
- package/build/src/akuma/call-request.js +67 -94
- package/build/src/akuma/coordinate.d.ts +15 -5
- package/build/src/akuma/coordinate.js +12 -22
- package/build/src/akuma/dispatch-association.d.ts +1 -1
- package/build/src/akuma/dispatch-association.js +1 -10
- package/build/src/akuma/heart/activity-schema.d.ts +325 -0
- package/build/src/akuma/heart/activity-schema.js +53 -0
- package/build/src/akuma/heart/facts.d.ts +1 -6
- package/build/src/akuma/heart/index.d.ts +3 -1
- package/build/src/akuma/heart/index.js +4 -1
- package/build/src/akuma/heart/rows.d.ts +49 -2
- package/build/src/akuma/heart/rows.js +16 -2
- package/build/src/akuma/heart/soul.d.ts +1 -0
- package/build/src/akuma/heart/soul.js +6 -4
- package/build/src/akuma/heart/tells.d.ts +1 -0
- package/build/src/akuma/heart/tells.js +18 -0
- package/build/src/akuma/identity.d.ts +10 -7
- package/build/src/akuma/identity.js +23 -0
- package/build/src/akuma/index.d.ts +10 -8
- package/build/src/akuma/index.js +2 -2
- package/build/src/akuma/nuke.d.ts +3 -0
- package/build/src/akuma/nuke.js +13 -7
- package/build/src/akuma/projection.d.ts +0 -5
- package/build/src/akuma/projection.js +22 -43
- package/build/src/akuma/provider-recipe.d.ts +58 -13
- package/build/src/akuma/provider-recipe.js +62 -80
- package/build/src/akuma/provider.d.ts +6 -76
- package/build/src/akuma/provider.js +11 -219
- package/build/src/akuma/providers/acp/config.d.ts +2 -0
- package/build/src/akuma/providers/acp/config.js +26 -1
- package/build/src/akuma/providers/acp/core.d.ts +7 -0
- package/build/src/akuma/providers/acp/core.js +49 -18
- package/build/src/akuma/providers/acp/index.js +14 -6
- package/build/src/akuma/providers/grok-build/index.js +44 -13
- package/build/src/akuma/providers/index.d.ts +3 -3
- package/build/src/akuma/providers/index.js +2 -13
- package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +28 -0
- package/build/src/akuma/providers/opencode-sdk/event-stream.js +92 -0
- package/build/src/akuma/providers/opencode-sdk/events.d.ts +0 -1
- package/build/src/akuma/providers/opencode-sdk/index.js +200 -64
- package/build/src/akuma/providers/opencode-sdk/session.d.ts +41 -1
- package/build/src/akuma/providers/opencode-sdk/session.js +69 -2
- package/build/src/akuma/providers/pi/events.js +5 -2
- package/build/src/akuma/providers/pi/index.js +69 -19
- package/build/src/akuma/publication.d.ts +84 -3
- package/build/src/akuma/publication.js +145 -2
- package/build/src/akuma/read-pool.d.ts +2 -0
- package/build/src/akuma/read-pool.js +15 -0
- package/build/src/akuma/request-rendezvous.js +10 -0
- package/build/src/akuma/request-serve.js +7 -0
- package/build/src/akuma/request-wire.d.ts +14 -26
- package/build/src/akuma/request-wire.js +4 -0
- package/build/src/akuma/requests.d.ts +0 -2
- package/build/src/akuma/requests.js +0 -17
- package/build/src/akuma/{fleet-observation.d.ts → selection-observation.d.ts} +37 -36
- package/build/src/akuma/selection-observation.js +65 -0
- package/build/src/akuma/{fleet-owner-port.d.ts → selection-owner-port.d.ts} +3 -3
- package/build/src/akuma/{fleet-owner-port.js → selection-owner-port.js} +11 -17
- package/build/src/akuma/{fleet-request.d.ts → selection-request.d.ts} +42 -82
- package/build/src/akuma/{fleet-request.js → selection-request.js} +92 -136
- package/build/src/akuma/turn-drive.js +73 -14
- package/build/src/akuma-body.js +91 -56
- package/build/src/body/amend.d.ts +5 -0
- package/build/src/body/amend.js +26 -50
- package/build/src/body/arc.d.ts +4 -2
- package/build/src/body/arc.js +19 -26
- package/build/src/body/criteria.d.ts +6 -0
- package/build/src/body/criteria.js +37 -0
- package/build/src/body/decode.js +5 -42
- package/build/src/body/region.d.ts +5 -0
- package/build/src/body/region.js +45 -2
- package/build/src/body/render.js +2 -4
- package/build/src/cli/activity.d.ts +26 -0
- package/build/src/cli/activity.js +75 -0
- package/build/src/cli/actor.d.ts +3 -1
- package/build/src/cli/actor.js +15 -2
- package/build/src/cli/commands/akuma-grammar.d.ts +75 -0
- package/build/src/cli/commands/akuma-grammar.js +414 -0
- package/build/src/cli/commands/akuma.d.ts +5 -69
- package/build/src/cli/commands/akuma.js +352 -319
- package/build/src/cli/commands/amend.d.ts +4 -5
- package/build/src/cli/commands/amend.js +1 -2
- package/build/src/cli/commands/bind.d.ts +4 -5
- package/build/src/cli/commands/bind.js +7 -10
- package/build/src/cli/commands/contract-grammar.d.ts +112 -0
- package/build/src/cli/commands/contract-grammar.js +282 -0
- package/build/src/cli/commands/contract-help.d.ts +17 -22
- package/build/src/cli/commands/contract-help.js +37 -24
- package/build/src/cli/commands/contract.d.ts +18 -97
- package/build/src/cli/commands/contract.js +621 -233
- package/build/src/cli/commands/install.d.ts +1 -1
- package/build/src/cli/commands/install.js +2 -2
- package/build/src/cli/commands/task-grammar.d.ts +19 -0
- package/build/src/cli/commands/task-grammar.js +438 -0
- package/build/src/cli/commands/task-query.js +23 -104
- package/build/src/cli/commands/task.d.ts +5 -20
- package/build/src/cli/commands/task.js +414 -364
- package/build/src/cli/coordinates.d.ts +10 -0
- package/build/src/cli/coordinates.js +20 -0
- package/build/src/cli/draft.d.ts +7 -1
- package/build/src/cli/main.js +10 -1
- package/build/src/cli/parse.d.ts +8 -9
- package/build/src/cli/parse.js +62 -62
- package/build/src/cli/render/akuma-activity.d.ts +54 -36
- package/build/src/cli/render/akuma-activity.js +262 -242
- package/build/src/cli/render/akuma-tool.d.ts +8 -4
- package/build/src/cli/render/akuma-tool.js +6 -5
- package/build/src/cli/render/akuma.d.ts +36 -16
- package/build/src/cli/render/akuma.js +65 -132
- package/build/src/cli/render/audit.d.ts +6 -2
- package/build/src/cli/render/audit.js +59 -28
- package/build/src/cli/render/catalog.d.ts +11 -2
- package/build/src/cli/render/catalog.js +75 -95
- package/build/src/cli/render/contract-history.d.ts +3 -1
- package/build/src/cli/render/contract-history.js +215 -22
- package/build/src/cli/render/contract-observation.d.ts +10 -5
- package/build/src/cli/render/contract-observation.js +29 -46
- package/build/src/cli/render/contract.d.ts +10 -3
- package/build/src/cli/render/contract.js +252 -103
- package/build/src/cli/render/effects.d.ts +26 -0
- package/build/src/cli/render/effects.js +41 -0
- package/build/src/cli/render/execution-progress.d.ts +18 -6
- package/build/src/cli/render/execution-progress.js +34 -31
- package/build/src/cli/render/kanshi-akuma.d.ts +1 -2
- package/build/src/cli/render/kanshi-akuma.js +5 -26
- package/build/src/cli/render/kanshi.js +107 -128
- package/build/src/cli/render/marks.d.ts +13 -0
- package/build/src/cli/render/marks.js +74 -0
- package/build/src/cli/render/nuke.js +18 -7
- package/build/src/cli/render/receipt.d.ts +10 -4
- package/build/src/cli/render/receipt.js +124 -44
- package/build/src/cli/render/reconcile.d.ts +5 -0
- package/build/src/cli/render/reconcile.js +152 -0
- package/build/src/cli/render/refusal.d.ts +21 -4
- package/build/src/cli/render/refusal.js +60 -33
- package/build/src/cli/render/region.js +3 -2
- package/build/src/cli/render/settings.js +2 -12
- package/build/src/cli/render/task.d.ts +37 -6
- package/build/src/cli/render/task.js +161 -157
- package/build/src/cli/render/terminal.d.ts +20 -1
- package/build/src/cli/render/terminal.js +92 -18
- package/build/src/cli/runtime.d.ts +32 -8
- package/build/src/cli/runtime.js +157 -165
- package/build/src/cli/selectors.d.ts +5 -2
- package/build/src/cli/selectors.js +11 -3
- package/build/src/cli/streams.d.ts +11 -0
- package/build/src/cli/streams.js +32 -0
- package/build/src/cli/usage.d.ts +2 -0
- package/build/src/cli/usage.js +12 -8
- package/build/src/contract-guidance.js +3 -7
- package/build/src/contract-worktree.d.ts +20 -28
- package/build/src/contract-worktree.js +18 -70
- package/build/src/coordination/durable-file.d.ts +2 -2
- package/build/src/coordination/durable-file.js +0 -27
- package/build/src/core/facts/codec.d.ts +1 -2
- package/build/src/core/facts/codec.js +6 -7
- package/build/src/core/facts/gate.d.ts +0 -1
- package/build/src/core/facts/gate.js +0 -82
- package/build/src/core/facts/types.d.ts +1 -2
- package/build/src/core/verbs/abandon.d.ts +2 -6
- package/build/src/core/verbs/abandon.js +0 -16
- package/build/src/core/verbs/amend.d.ts +0 -1
- package/build/src/core/verbs/amend.js +0 -20
- package/build/src/core/verbs/arc.d.ts +7 -8
- package/build/src/core/verbs/arc.js +2 -19
- package/build/src/core/verbs/attestation.d.ts +2 -6
- package/build/src/core/verbs/attestation.js +0 -16
- package/build/src/core/verbs/bind.d.ts +0 -1
- package/build/src/core/verbs/bind.js +0 -16
- package/build/src/core/verbs/deliver.d.ts +0 -1
- package/build/src/core/verbs/deliver.js +0 -16
- package/build/src/core/verbs/placement.d.ts +2 -1
- package/build/src/core/verbs/placement.js +10 -59
- package/build/src/git/admission.d.ts +6 -4
- package/build/src/git/admission.js +4 -0
- package/build/src/git/hooks.d.ts +55 -30
- package/build/src/git/hooks.js +30 -3
- package/build/src/git/identity.d.ts +6 -0
- package/build/src/git/identity.js +47 -0
- package/build/src/git/integration.d.ts +31 -13
- package/build/src/git/integration.js +32 -1
- package/build/src/git/nuke.d.ts +10 -1
- package/build/src/git/nuke.js +31 -11
- package/build/src/git/observe.js +2 -15
- package/build/src/git/private-state-seat.d.ts +6 -7
- package/build/src/git/private-state-seat.js +8 -6
- package/build/src/git/read-observation.d.ts +6 -1
- package/build/src/git/read-observation.js +81 -46
- package/build/src/git/reconcile.d.ts +117 -40
- package/build/src/git/reconcile.js +169 -40
- package/build/src/git/scratch.d.ts +7 -4
- package/build/src/git/scratch.js +28 -6
- package/build/src/git/target-placement.d.ts +53 -38
- package/build/src/git/target-placement.js +69 -54
- package/build/src/git/tender.d.ts +37 -28
- package/build/src/git/tender.js +39 -0
- package/build/src/git/terminal-reconcile.js +21 -23
- package/build/src/git/terminal-seal.d.ts +8 -6
- package/build/src/git/terminal-seal.js +10 -0
- package/build/src/git/workspace.d.ts +29 -15
- package/build/src/git/workspace.js +28 -2
- package/build/src/identity/normalize.js +19 -6
- package/build/src/index.d.ts +78 -7
- package/build/src/index.js +52 -4
- package/build/src/kanshi/read.d.ts +3 -3
- package/build/src/kanshi/read.js +21 -21
- package/build/src/kanshi/report.d.ts +9 -8
- package/build/src/kanshi/roster.d.ts +2 -0
- package/build/src/kanshi/roster.js +2 -0
- package/build/src/kanshi/select.js +7 -3
- package/build/src/library/address.d.ts +3 -7
- package/build/src/library/address.js +7 -7
- package/build/src/library/akuma-creation.d.ts +21 -32
- package/build/src/library/akuma-creation.js +148 -165
- package/build/src/library/akumas.d.ts +20 -22
- package/build/src/library/akumas.js +43 -20
- package/build/src/library/bind.d.ts +107 -13
- package/build/src/library/bind.js +29 -23
- package/build/src/library/continuation.d.ts +556 -28
- package/build/src/library/continuation.js +29 -54
- package/build/src/library/contract-composition.d.ts +40 -0
- package/build/src/library/contract-composition.js +105 -0
- package/build/src/library/contract-creation.d.ts +7 -0
- package/build/src/library/contract-creation.js +192 -0
- package/build/src/library/contract-execution.d.ts +29 -40
- package/build/src/library/contract-execution.js +503 -128
- package/build/src/library/contract-operations.d.ts +275 -134
- package/build/src/library/contract-operations.js +83 -92
- package/build/src/library/contract-outcomes.d.ts +71 -0
- package/build/src/library/contract-outcomes.js +32 -0
- package/build/src/library/contract-settings.d.ts +25 -0
- package/build/src/library/contract-settings.js +135 -0
- package/build/src/library/contract-types.d.ts +17 -38
- package/build/src/library/delivery.d.ts +530 -10
- package/build/src/library/delivery.js +20 -45
- package/build/src/library/input.d.ts +3 -1
- package/build/src/library/input.js +11 -16
- package/build/src/library/invocation.d.ts +87 -0
- package/build/src/library/invocation.js +290 -0
- package/build/src/library/keiyaku.d.ts +45 -22
- package/build/src/library/keiyaku.js +134 -8
- package/build/src/library/nuke.d.ts +2 -11
- package/build/src/library/nuke.js +70 -57
- package/build/src/library/outcome.d.ts +13196 -0
- package/build/src/library/outcome.js +487 -0
- package/build/src/library/reconcile.d.ts +96 -24
- package/build/src/library/reconcile.js +102 -42
- package/build/src/library/refusal.d.ts +470 -42
- package/build/src/library/refusal.js +55 -143
- package/build/src/library/region.d.ts +15 -7
- package/build/src/library/region.js +23 -3
- package/build/src/library/repo.d.ts +2 -12
- package/build/src/library/repo.js +1 -22
- package/build/src/library/selection.d.ts +121 -0
- package/build/src/library/{fleet.js → selection.js} +169 -152
- package/build/src/plugin/public.d.ts +2 -0
- package/build/src/protocol/abandon.d.ts +2 -2
- package/build/src/protocol/abandon.js +1 -0
- package/build/src/protocol/amend.js +1 -0
- package/build/src/protocol/arc.d.ts +6 -4
- package/build/src/protocol/attempt.d.ts +4 -2
- package/build/src/protocol/attempt.js +10 -0
- package/build/src/protocol/audit.d.ts +255 -52
- package/build/src/protocol/audit.js +63 -5
- package/build/src/protocol/bind.d.ts +18 -17
- package/build/src/protocol/bind.js +9 -28
- package/build/src/protocol/completion.d.ts +256 -22
- package/build/src/protocol/completion.js +100 -12
- package/build/src/protocol/deliver.d.ts +34 -23
- package/build/src/protocol/deliver.js +39 -25
- package/build/src/protocol/execution-observation.d.ts +36 -37
- package/build/src/protocol/execution-observation.js +7 -9
- package/build/src/protocol/intent.d.ts +101 -30
- package/build/src/protocol/intent.js +74 -1
- package/build/src/protocol/operations.d.ts +570 -64
- package/build/src/protocol/operations.js +189 -9
- package/build/src/protocol/outcome.d.ts +2 -1
- package/build/src/protocol/placement.d.ts +2 -2
- package/build/src/protocol/placement.js +3 -1
- package/build/src/protocol/progress.d.ts +108 -65
- package/build/src/protocol/progress.js +82 -132
- package/build/src/protocol/read/status.d.ts +4 -3
- package/build/src/protocol/read/status.js +6 -5
- package/build/src/protocol/reconcile.d.ts +3 -3
- package/build/src/protocol/reconcile.js +4 -0
- package/build/src/protocol/reintegrate.d.ts +2 -2
- package/build/src/protocol/review.d.ts +30 -12
- package/build/src/protocol/review.js +15 -24
- package/build/src/protocol/run.d.ts +34 -5
- package/build/src/protocol/run.js +24 -12
- package/build/src/runtime/proc/windows-launch.exe +0 -0
- package/build/src/settings.d.ts +0 -10
- package/build/src/settings.js +0 -76
- package/build/src/settlement/holder.d.ts +1 -1
- package/build/src/settlement/settle.d.ts +25 -16
- package/build/src/settlement/settle.js +80 -20
- package/build/src/task/board.d.ts +3 -1
- package/build/src/task/board.js +13 -17
- package/build/src/task/catalog.d.ts +0 -4
- package/build/src/task/catalog.js +0 -15
- package/build/src/task/compose-language.d.ts +19 -9
- package/build/src/task/compose-language.js +30 -20
- package/build/src/task/compose.d.ts +7 -37
- package/build/src/task/compose.js +20 -2
- package/build/src/task/created-observation.d.ts +0 -1
- package/build/src/task/created-observation.js +1 -4
- package/build/src/task/document.d.ts +12 -2
- package/build/src/task/document.js +4 -0
- package/build/src/task/identity.d.ts +4 -1
- package/build/src/task/identity.js +21 -17
- package/build/src/task/index.d.ts +36 -16
- package/build/src/task/index.js +103 -96
- package/build/src/task/lifecycle-operations.d.ts +1 -1
- package/build/src/task/mutation-result.d.ts +647 -586
- package/build/src/task/mutation-result.js +79 -46
- package/build/src/task/mutation.d.ts +298 -270
- package/build/src/task/mutation.js +93 -110
- package/build/src/task/operation-types.d.ts +6 -49
- package/build/src/task/operations.d.ts +2 -1
- package/build/src/task/operations.js +35 -12
- package/build/src/task/query.d.ts +9 -3
- package/build/src/task/query.js +42 -16
- package/build/src/task/store.d.ts +2 -1
- package/build/src/task/store.js +10 -14
- package/build/src/verification/declaration.d.ts +0 -1
- package/build/src/verification/declaration.js +1 -18
- package/build/src/verification/execution.d.ts +6 -2
- package/build/src/verification/observation.d.ts +1 -1
- package/package.json +2 -18
- package/build/src/akuma/akuma-product.d.ts +0 -58
- package/build/src/akuma/akuma-product.js +0 -276
- package/build/src/akuma/fleet-execution.js +0 -234
- package/build/src/akuma/fleet-observation.js +0 -97
- package/build/src/cli/accepted.d.ts +0 -24
- package/build/src/cli/accepted.js +0 -167
- package/build/src/cli/catalog.d.ts +0 -45
- package/build/src/cli/catalog.js +0 -1
- package/build/src/cli/commands/akuma-invoke.d.ts +0 -114
- package/build/src/cli/commands/akuma-invoke.js +0 -375
- package/build/src/cli/commands/contract-invoke.d.ts +0 -34
- package/build/src/cli/commands/contract-invoke.js +0 -259
- package/build/src/cli/commands/nuke.d.ts +0 -10
- package/build/src/cli/commands/nuke.js +0 -20
- package/build/src/cli/commands/status-set.d.ts +0 -4
- package/build/src/cli/commands/status-set.js +0 -52
- package/build/src/cli/commands/task-invoke.d.ts +0 -49
- package/build/src/cli/commands/task-invoke.js +0 -306
- package/build/src/cli/invoke.d.ts +0 -27
- package/build/src/cli/invoke.js +0 -521
- package/build/src/cli/render/board.d.ts +0 -3
- package/build/src/cli/render/board.js +0 -25
- package/build/src/cli/render/status-set.d.ts +0 -5
- package/build/src/cli/render/status-set.js +0 -19
- package/build/src/cli/render/text.d.ts +0 -3
- package/build/src/cli/render/text.js +0 -33
- package/build/src/cli/result.d.ts +0 -240
- package/build/src/cli/result.js +0 -1
- package/build/src/git/result-codec.d.ts +0 -29
- package/build/src/git/result-codec.js +0 -309
- package/build/src/kanshi/fleet.d.ts +0 -6
- package/build/src/kanshi/fleet.js +0 -27
- package/build/src/library/audit.d.ts +0 -29
- package/build/src/library/audit.js +0 -41
- package/build/src/library/composition.d.ts +0 -15
- package/build/src/library/composition.js +0 -28
- package/build/src/library/configuration.d.ts +0 -4
- package/build/src/library/configuration.js +0 -2
- package/build/src/library/contract-bind.d.ts +0 -31
- package/build/src/library/contract-bind.js +0 -140
- package/build/src/library/contract-forwarding.d.ts +0 -55
- package/build/src/library/contract-forwarding.js +0 -67
- package/build/src/library/contract-handle.d.ts +0 -50
- package/build/src/library/contract-handle.js +0 -385
- package/build/src/library/contract.d.ts +0 -46
- package/build/src/library/contract.js +0 -73
- package/build/src/library/execution-result.d.ts +0 -243
- package/build/src/library/execution-result.js +0 -101
- package/build/src/library/execution.d.ts +0 -8
- package/build/src/library/execution.js +0 -102
- package/build/src/library/fleet.d.ts +0 -83
- package/build/src/library/mutation.d.ts +0 -501
- package/build/src/library/mutation.js +0 -248
- package/build/src/library/result-codec.d.ts +0 -2
- package/build/src/library/result-codec.js +0 -12
- package/build/src/protocol/result-codec.d.ts +0 -23
- package/build/src/protocol/result-codec.js +0 -488
- package/build/src/settlement/result-codec.d.ts +0 -2
- package/build/src/settlement/result-codec.js +0 -56
- package/build/src/task/public.d.ts +0 -2
- package/build/src/task/public.js +0 -1
|
@@ -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<{
|
|
@@ -30,27 +31,28 @@ export type AkumaBirthInput = Readonly<{
|
|
|
30
31
|
settings?: Settings;
|
|
31
32
|
allowed?: readonly AllowedAction[];
|
|
32
33
|
}>;
|
|
33
|
-
export type AkumaTellOptions
|
|
34
|
-
schema: Schema<T> | StandardSchemaV1<T>;
|
|
34
|
+
export type AkumaTellOptions = AkumaSignalOptions & Readonly<{
|
|
35
35
|
interrupt?: boolean;
|
|
36
36
|
initiator?: string;
|
|
37
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 };
|
|
38
43
|
export declare class Akuma {
|
|
39
44
|
readonly id: AkuId;
|
|
40
45
|
private readonly root;
|
|
41
46
|
private constructor();
|
|
42
|
-
private
|
|
47
|
+
private owner;
|
|
43
48
|
static birth(archetype: string, input: AkumaBirthInput): Promise<Akuma>;
|
|
44
49
|
static select(root: WorldRoot, selector: string): Akuma;
|
|
45
|
-
tell(text: string, options?:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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>>;
|
|
50
55
|
status(): Promise<AkumaStatus>;
|
|
51
|
-
interrupt(text: string, options?: AkumaSignalOptions & Readonly<{
|
|
52
|
-
initiator?: string;
|
|
53
|
-
}>): Promise<InterruptReceipt>;
|
|
54
56
|
idle(options?: AkumaIdleOptions): Promise<AkumaIdleResult>;
|
|
55
57
|
history(options?: AkumaHistoryOptions): Promise<ActivityHistory>;
|
|
56
58
|
kill(options?: AkumaSignalOptions): Promise<KillEvidence>;
|
|
@@ -1,19 +1,10 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { 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,101 +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
|
-
launch: async (born) => await spawnAkumaBody({
|
|
110
|
-
paths: born.paths,
|
|
111
|
-
seed: {
|
|
112
|
-
id: born.id,
|
|
113
|
-
archetype: born.archetype,
|
|
114
|
-
...(loaded.description === undefined ? {} : { description: loaded.description }),
|
|
115
|
-
provider: loaded.provider,
|
|
116
|
-
options: loaded.options,
|
|
117
|
-
allowed,
|
|
118
|
-
cwd,
|
|
119
|
-
origin: { kind: "direct" },
|
|
120
|
-
},
|
|
121
|
-
}),
|
|
122
|
-
});
|
|
123
|
-
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);
|
|
124
43
|
}
|
|
125
44
|
static select(root, selector) {
|
|
126
45
|
if (typeof root !== "string")
|
|
127
46
|
throw new TypeError("Akuma.select root must be a WorldRoot");
|
|
128
47
|
return new Akuma(parseAkuId(selector).id, root);
|
|
129
48
|
}
|
|
130
|
-
async tell(text, options) {
|
|
49
|
+
async tell(text, options = {}) {
|
|
131
50
|
if (typeof text !== "string")
|
|
132
51
|
throw new TypeError("Akuma tell text must be a string");
|
|
133
|
-
|
|
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);
|
|
134
60
|
signal?.throwIfAborted();
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
?
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
tellId,
|
|
144
|
-
options,
|
|
145
|
-
signal,
|
|
146
|
-
}))
|
|
147
|
-
: await recordSchemaTell({
|
|
148
|
-
id: this.id,
|
|
149
|
-
body: text,
|
|
150
|
-
tellId,
|
|
151
|
-
schema,
|
|
152
|
-
root: this.root,
|
|
153
|
-
...(schemaOptions.interrupt === undefined ? {} : { interrupt: schemaOptions.interrupt }),
|
|
154
|
-
...(schemaOptions.initiator === undefined ? {} : { initiator: schemaOptions.initiator }),
|
|
155
|
-
...(signal === undefined ? {} : { signal }),
|
|
156
|
-
});
|
|
157
|
-
const outcome = await awaitTellOutcome(new AkumaHandle(this.id, this.root), recorded.tellId, signal);
|
|
158
|
-
if (outcome.kind !== "answered")
|
|
159
|
-
outcomeError(outcome);
|
|
160
|
-
if (schema === undefined)
|
|
161
|
-
return outcome.answer;
|
|
162
|
-
const raw = outcome.answerJson ?? outcome.answer;
|
|
163
|
-
let parsed;
|
|
164
|
-
try {
|
|
165
|
-
parsed = JSON.parse(raw);
|
|
166
|
-
}
|
|
167
|
-
catch (error) {
|
|
168
|
-
throw new AkumaDecodeError(error instanceof Error ? error.message : "Answer is not valid JSON", outcome.answer);
|
|
169
|
-
}
|
|
170
|
-
try {
|
|
171
|
-
return schema.decode(parsed);
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
throw new AkumaDecodeError(error instanceof Error ? error.message : "Answer failed schema decode", outcome.answer);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
async status() {
|
|
178
|
-
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
|
+
});
|
|
179
69
|
}
|
|
180
|
-
async
|
|
70
|
+
async ask(text, options = {}) {
|
|
181
71
|
if (typeof text !== "string")
|
|
182
|
-
throw new TypeError("Akuma
|
|
183
|
-
if (typeof options !== "object" || options === null || Array.isArray(options))
|
|
184
|
-
throw new TypeError("Akuma
|
|
185
|
-
|
|
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");
|
|
186
81
|
const signal = signalOption(options.signal);
|
|
187
82
|
signal?.throwIfAborted();
|
|
188
|
-
const
|
|
189
|
-
|
|
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 } : {}),
|
|
190
91
|
...(options.initiator === undefined ? {} : { initiator: options.initiator }),
|
|
92
|
+
...(signal === undefined ? {} : { signal }),
|
|
191
93
|
});
|
|
192
|
-
return
|
|
94
|
+
return (schema === undefined ? result : { ...result, observation: decodeAskObservation(result.observation, schema) });
|
|
95
|
+
}
|
|
96
|
+
async status() {
|
|
97
|
+
return await this.owner().status();
|
|
193
98
|
}
|
|
194
99
|
async idle(options = {}) {
|
|
195
100
|
if (typeof options !== "object" || options === null || Array.isArray(options)) {
|
|
@@ -202,13 +107,11 @@ export class Akuma {
|
|
|
202
107
|
throw new TypeError("Akuma idle timeoutMs must be a nonnegative finite millisecond duration");
|
|
203
108
|
}
|
|
204
109
|
const signal = signalOption(options.signal);
|
|
205
|
-
const waited = await
|
|
110
|
+
const waited = await this.owner().waitReceipt(defaultWaitComplete, {
|
|
206
111
|
...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
|
|
207
112
|
...(signal === undefined ? {} : { signal }),
|
|
208
|
-
observe: async () => (await bornStatus(this.paths, this.id, { aperture: "monitoring" })).status,
|
|
209
|
-
complete: defaultWaitComplete,
|
|
210
113
|
});
|
|
211
|
-
return { reason: waited.reason, status: waited.
|
|
114
|
+
return { reason: waited.reason, status: waited.status };
|
|
212
115
|
}
|
|
213
116
|
async history(options = {}) {
|
|
214
117
|
if (typeof options !== "object" || options === null || Array.isArray(options)) {
|
|
@@ -220,24 +123,11 @@ export class Akuma {
|
|
|
220
123
|
if (options.before !== undefined && options.since !== undefined) {
|
|
221
124
|
throw new TypeError("Akuma history before and since are mutually exclusive");
|
|
222
125
|
}
|
|
223
|
-
|
|
224
|
-
["before", options.before],
|
|
225
|
-
["since", options.since],
|
|
226
|
-
]) {
|
|
227
|
-
if (value !== undefined && (!Number.isSafeInteger(value) || value <= 0)) {
|
|
228
|
-
throw new TypeError(`Akuma history ${name} must be a positive safe integer`);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
const limit = options.limit ?? HISTORY_LIMIT;
|
|
232
|
-
if (!Number.isSafeInteger(limit) || limit <= 0 || limit > 5_000) {
|
|
233
|
-
throw new TypeError("Akuma history limit must be a positive safe integer no greater than 5000");
|
|
234
|
-
}
|
|
235
|
-
const slice = await activitySlice(this.paths);
|
|
236
|
-
return selectHistory(projectTurns(slice.rows, { lowestRetained: slice.lowestRetained, highest: slice.highest }), {
|
|
126
|
+
return (await this.owner().history({
|
|
237
127
|
...(options.before === undefined ? {} : { before: options.before }),
|
|
238
128
|
...(options.since === undefined ? {} : { since: options.since }),
|
|
239
|
-
limit,
|
|
240
|
-
});
|
|
129
|
+
...(options.limit === undefined ? {} : { limit: options.limit }),
|
|
130
|
+
}));
|
|
241
131
|
}
|
|
242
132
|
async kill(options = {}) {
|
|
243
133
|
if (typeof options !== "object" || options === null || Array.isArray(options)) {
|
|
@@ -245,6 +135,6 @@ export class Akuma {
|
|
|
245
135
|
}
|
|
246
136
|
const signal = signalOption(options.signal);
|
|
247
137
|
signal?.throwIfAborted();
|
|
248
|
-
return await abortable(
|
|
138
|
+
return await abortable(this.owner().kill(signal === undefined ? {} : { signal }), signal ?? new AbortController().signal);
|
|
249
139
|
}
|
|
250
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
|
}
|
|
@@ -88,9 +91,6 @@ export async function bornStatus(paths, expected, input) {
|
|
|
88
91
|
const { rows: _rows, ...status } = await bornLiveStatus(paths, expected, input);
|
|
89
92
|
return status;
|
|
90
93
|
}
|
|
91
|
-
export async function readBudgetedStatus(worldPath, id, input) {
|
|
92
|
-
return await bornStatus(pathsForAkuId(worldPath, id), id, input);
|
|
93
|
-
}
|
|
94
94
|
export async function readLiveStatus(worldPath, id, input) {
|
|
95
95
|
return await bornLiveStatus(pathsForAkuId(worldPath, id), id, input);
|
|
96
96
|
}
|
|
@@ -135,23 +135,6 @@ export async function waitForObservation(input) {
|
|
|
135
135
|
: Math.min(OBSERVATION_POLL_MS, Math.max(0, deadline - performance.now())), input.signal);
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
|
-
/**
|
|
139
|
-
* Successive status observations of one already born Akuma until its
|
|
140
|
-
* observation window closes. Every acquired observation is reported to
|
|
141
|
-
* `observe` before completion or deadline judgment, including the first
|
|
142
|
-
* already-complete observation; the last status is returned.
|
|
143
|
-
*/
|
|
144
|
-
export async function observeAkumaStatus(worldPath, expected, input) {
|
|
145
|
-
const paths = pathsForAkuId(worldPath, expected);
|
|
146
|
-
const waited = await waitForObservation({
|
|
147
|
-
timeoutMs: input.timeoutMs,
|
|
148
|
-
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
149
|
-
observe: async () => await bornLiveStatus(paths, expected, { aperture: "monitoring" }),
|
|
150
|
-
complete: (observation) => defaultWaitComplete(observation.status),
|
|
151
|
-
onObserve: input.observe,
|
|
152
|
-
});
|
|
153
|
-
return { reason: waited.reason, status: waited.value.status };
|
|
154
|
-
}
|
|
155
138
|
export async function readAkumaBirthCwd(worldPath, id) {
|
|
156
139
|
const soul = await readSoul(pathsForAkuId(worldPath, id));
|
|
157
140
|
if (soul === null)
|