@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
package/build/src/task/store.js
CHANGED
|
@@ -3,21 +3,11 @@ import { closeSync, fsyncSync, openSync, renameSync, writeFileSync } from "node:
|
|
|
3
3
|
import { lstat, mkdir, readFile, readdir, rmdir, unlink } from "node:fs/promises";
|
|
4
4
|
import { dirname, relative, resolve, sep } from "node:path";
|
|
5
5
|
import { acquireSqliteTransactionLock, SqliteTransactionLockError, } from "../coordination/sqlite-transaction-lock.js";
|
|
6
|
+
import { syncDirectory } from "../coordination/durable-file.js";
|
|
6
7
|
import { boundedListLimit, projectBoundedList } from "../bounded-list.js";
|
|
7
8
|
import { parseTaskDocument } from "./document.js";
|
|
8
9
|
import { formatTaskId, parseTaskId, physicalTaskSegment, TASK_LOCAL_ID_BYTES, sameNamespace, taskAuthorityPath, } from "./identity.js";
|
|
9
10
|
export const DEFAULT_TASK_LOCK_TIMEOUT_MS = 3_000;
|
|
10
|
-
function syncTaskDirectory(path) {
|
|
11
|
-
if (process.platform === "win32")
|
|
12
|
-
return;
|
|
13
|
-
const directory = openSync(path, "r");
|
|
14
|
-
try {
|
|
15
|
-
fsyncSync(directory);
|
|
16
|
-
}
|
|
17
|
-
finally {
|
|
18
|
-
closeSync(directory);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
11
|
function tasksDirectory(world) {
|
|
22
12
|
return resolve(world, ".keiyaku", "tasks");
|
|
23
13
|
}
|
|
@@ -41,7 +31,7 @@ async function requireDirectory(path, mode) {
|
|
|
41
31
|
return false;
|
|
42
32
|
try {
|
|
43
33
|
await mkdir(path);
|
|
44
|
-
|
|
34
|
+
syncDirectory(dirname(path));
|
|
45
35
|
}
|
|
46
36
|
catch (mkdirError) {
|
|
47
37
|
if (mkdirError.code !== "EEXIST")
|
|
@@ -202,7 +192,7 @@ export async function replaceAuthority(input) {
|
|
|
202
192
|
if (!equal(await currentBytes(input.world, input.id), input.expected))
|
|
203
193
|
return "concurrent-modification";
|
|
204
194
|
renameSync(temporary, resolved.path);
|
|
205
|
-
|
|
195
|
+
syncDirectory(parent);
|
|
206
196
|
return "replaced";
|
|
207
197
|
}
|
|
208
198
|
finally {
|
|
@@ -249,11 +239,15 @@ export async function nukeTaskAuthority(world, options) {
|
|
|
249
239
|
const candidates = await ownedAuthorityCandidates(directory);
|
|
250
240
|
const ids = [...new Set(candidates.map((candidate) => candidate.id))].sort((left, right) => Buffer.compare(Buffer.from(left), Buffer.from(right)));
|
|
251
241
|
return await withTaskLocks({ world, allocation: false, ids, ...lockOptions }, async () => {
|
|
242
|
+
let removed = 0;
|
|
252
243
|
for (const candidate of candidates) {
|
|
253
244
|
try {
|
|
254
245
|
const resolved = await resolveAuthority(world, candidate.id, "read");
|
|
255
|
-
if (resolved.exists)
|
|
246
|
+
if (resolved.exists) {
|
|
256
247
|
await unlink(resolved.path);
|
|
248
|
+
removed += 1;
|
|
249
|
+
options?.onRemoved?.(1);
|
|
250
|
+
}
|
|
257
251
|
}
|
|
258
252
|
catch (error) {
|
|
259
253
|
if (error.code !== "ENOENT")
|
|
@@ -261,10 +255,12 @@ export async function nukeTaskAuthority(world, options) {
|
|
|
261
255
|
}
|
|
262
256
|
}
|
|
263
257
|
await removeEmptyTaskDirectories(directory, false);
|
|
258
|
+
return removed;
|
|
264
259
|
});
|
|
265
260
|
});
|
|
266
261
|
if (result === "busy")
|
|
267
262
|
return "busy";
|
|
263
|
+
return result;
|
|
268
264
|
}
|
|
269
265
|
export async function withTaskLocks(input, action) {
|
|
270
266
|
const paths = [
|
|
@@ -14,7 +14,6 @@ export type VerificationDeclarationRefusal = Readonly<{
|
|
|
14
14
|
kind: "verification-declaration-invalid";
|
|
15
15
|
contractId?: ContractId;
|
|
16
16
|
}>;
|
|
17
|
-
export declare function decodeVerificationDeclarationRefusal(value: unknown): VerificationDeclarationRefusal;
|
|
18
17
|
export type VerificationDeclarationPreparation = Preparation<VerificationDefinition | null, VerificationDeclarationRefusal>;
|
|
19
18
|
export declare const VERIFIED: Gate;
|
|
20
19
|
export declare function prepareVerificationDeclaration(input: Readonly<{
|
|
@@ -1,21 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export function decodeVerificationDeclarationRefusal(value) {
|
|
3
|
-
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
4
|
-
throw new Error("malformed verification declaration refusal");
|
|
5
|
-
const object = value;
|
|
6
|
-
if (object.kind !== "verification-declaration-invalid")
|
|
7
|
-
throw new Error("malformed verification declaration refusal");
|
|
8
|
-
if (Object.keys(object).some((key) => key !== "kind" && key !== "contractId"))
|
|
9
|
-
throw new Error("malformed verification declaration refusal");
|
|
10
|
-
if (object.contractId === undefined)
|
|
11
|
-
return { kind: "verification-declaration-invalid" };
|
|
12
|
-
try {
|
|
13
|
-
return { kind: "verification-declaration-invalid", contractId: contractId(String(object.contractId)) };
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
throw new Error("malformed verification declaration refusal");
|
|
17
|
-
}
|
|
18
|
-
}
|
|
1
|
+
import { gate } from "../core/facts/types.js";
|
|
19
2
|
export const VERIFIED = gate("verified");
|
|
20
3
|
export function prepareVerificationDeclaration(input) {
|
|
21
4
|
if (input.definition !== null || !input.gates.includes(VERIFIED)) {
|
|
@@ -13,7 +13,7 @@ export type VerificationTerminalOutcome = Readonly<{
|
|
|
13
13
|
total: number;
|
|
14
14
|
summary?: string;
|
|
15
15
|
}>;
|
|
16
|
-
|
|
16
|
+
type CapturedOutput = Readonly<{
|
|
17
17
|
stdout?: string;
|
|
18
18
|
stderr?: string;
|
|
19
19
|
truncated?: boolean;
|
|
@@ -26,7 +26,11 @@ export type VerificationNonterminalOutcome = CapturedOutput & (Readonly<{
|
|
|
26
26
|
kind: "spawn-error";
|
|
27
27
|
diagnostic: string;
|
|
28
28
|
}>);
|
|
29
|
-
export declare function capturedOutput(value: CapturedOutput):
|
|
29
|
+
export declare function capturedOutput(value: CapturedOutput): Readonly<{
|
|
30
|
+
stdout?: string;
|
|
31
|
+
stderr?: string;
|
|
32
|
+
truncated?: true;
|
|
33
|
+
}>;
|
|
30
34
|
export type VerificationExecutionStop = VerificationNonterminalOutcome | Readonly<{
|
|
31
35
|
kind: "candidate-unavailable" | "environment-failure";
|
|
32
36
|
diagnostic: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export declare const verificationObservationSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
3
3
|
state: z.ZodEnum<{
|
|
4
|
-
finished: "finished";
|
|
5
4
|
started: "started";
|
|
5
|
+
finished: "finished";
|
|
6
6
|
}>;
|
|
7
7
|
outcome: z.ZodOptional<z.ZodString>;
|
|
8
8
|
elapsedMs: z.ZodOptional<z.ZodNumber>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astrosheep/keiyaku",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.6.1",
|
|
4
4
|
"workspaces": [
|
|
5
5
|
"plugins/*"
|
|
6
6
|
],
|
|
@@ -14,18 +14,6 @@
|
|
|
14
14
|
"types": "./build/src/index.d.ts",
|
|
15
15
|
"import": "./build/src/index.js"
|
|
16
16
|
},
|
|
17
|
-
"./task": {
|
|
18
|
-
"types": "./build/src/task/public.d.ts",
|
|
19
|
-
"import": "./build/src/task/public.js"
|
|
20
|
-
},
|
|
21
|
-
"./kanshi": {
|
|
22
|
-
"types": "./build/src/kanshi/index.d.ts",
|
|
23
|
-
"import": "./build/src/kanshi/index.js"
|
|
24
|
-
},
|
|
25
|
-
"./akuma": {
|
|
26
|
-
"types": "./build/src/akuma/index.d.ts",
|
|
27
|
-
"import": "./build/src/akuma/index.js"
|
|
28
|
-
},
|
|
29
17
|
"./plugin": {
|
|
30
18
|
"types": "./build/src/plugin/public.d.ts",
|
|
31
19
|
"import": "./build/src/plugin/public.js"
|
|
@@ -82,7 +70,7 @@
|
|
|
82
70
|
"@anthropic-ai/claude-agent-sdk": "^0.3.226",
|
|
83
71
|
"@astrosheep/keiyaku-plugin-square": "0.1.6",
|
|
84
72
|
"@astrosheep/square": "^0.3.57",
|
|
85
|
-
"@earendil-works/pi-coding-agent": "0.
|
|
73
|
+
"@earendil-works/pi-coding-agent": "^1.0.0",
|
|
86
74
|
"@opencode-ai/sdk": "1.18.3",
|
|
87
75
|
"cross-spawn": "^7.0.6",
|
|
88
76
|
"diff": "^8.0.4",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const CALL_WITH_CONTEXT: unique symbol;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const CALL_WITH_CONTEXT = Symbol("akuma-call-with-context");
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { AkumaHandle } from "./akuma-handle.js";
|
|
2
|
-
import type { AkumaCallContext, AkumaCallInput, AkumaCompleteList, AkumaConfiguration, AkumaList, AkumaListInput } from "./akuma.js";
|
|
3
|
-
import { CALL_WITH_CONTEXT } from "./akuma-product-symbols.js";
|
|
4
|
-
import type { WorldRoot } from "../world.js";
|
|
5
|
-
import type { BodyLaunch } from "./body.js";
|
|
6
|
-
import type { AllocatedAkuma } from "./identity.js";
|
|
7
|
-
type AkumaCallRecipe = Omit<NonNullable<BodyLaunch["seed"]>, "id" | "archetype" | "cwd" | "origin">;
|
|
8
|
-
type BornExecution = Readonly<{
|
|
9
|
-
cwd: string;
|
|
10
|
-
source: "input" | "caller" | "process" | "world";
|
|
11
|
-
}>;
|
|
12
|
-
export type BornAkumaCall = Readonly<{
|
|
13
|
-
kind: "born";
|
|
14
|
-
allocated: AllocatedAkuma;
|
|
15
|
-
seed: AkumaCallRecipe & Readonly<{
|
|
16
|
-
id: AllocatedAkuma["id"];
|
|
17
|
-
archetype: string;
|
|
18
|
-
cwd: string;
|
|
19
|
-
origin: {
|
|
20
|
-
kind: "direct";
|
|
21
|
-
};
|
|
22
|
-
}>;
|
|
23
|
-
initialBody?: string;
|
|
24
|
-
initiator?: string;
|
|
25
|
-
initialSchemaJson?: string;
|
|
26
|
-
execution: BornExecution;
|
|
27
|
-
}>;
|
|
28
|
-
export type RequestedAkumaCall = Readonly<{
|
|
29
|
-
kind: "requested";
|
|
30
|
-
id: AllocatedAkuma["id"];
|
|
31
|
-
cwd: string;
|
|
32
|
-
execution: BornExecution;
|
|
33
|
-
}>;
|
|
34
|
-
export type AkumaBornCall = BornAkumaCall | RequestedAkumaCall;
|
|
35
|
-
type AkumaCallLaunchInput = Omit<AkumaCallInput, "body"> & Readonly<{
|
|
36
|
-
body?: string;
|
|
37
|
-
}>;
|
|
38
|
-
export declare const PAGE_POOL_SIZE = 16;
|
|
39
|
-
export declare function boundedMap<Value, Result>(values: readonly Value[], mapper: (value: Value) => Promise<Result>): Promise<readonly Result[]>;
|
|
40
|
-
declare class AkumaProduct {
|
|
41
|
-
private readonly path;
|
|
42
|
-
private readonly configuration;
|
|
43
|
-
private constructor();
|
|
44
|
-
static create(root: WorldRoot, input?: AkumaConfiguration): AkumaProduct;
|
|
45
|
-
selectHandle(input: Readonly<{
|
|
46
|
-
id: string;
|
|
47
|
-
}>): AkumaHandle;
|
|
48
|
-
listArchetypes(): Promise<readonly string[]>;
|
|
49
|
-
invoke(input: AkumaCallLaunchInput): Promise<AkumaHandle>;
|
|
50
|
-
admit(input: AkumaCallLaunchInput, context: AkumaCallContext): Promise<AkumaBornCall>;
|
|
51
|
-
publish(born: AkumaBornCall, completion?: Readonly<{
|
|
52
|
-
contractId?: string;
|
|
53
|
-
}>, signal?: AbortSignal): Promise<AkumaHandle>;
|
|
54
|
-
[CALL_WITH_CONTEXT](input: AkumaCallLaunchInput, context: AkumaCallContext): Promise<AkumaHandle>;
|
|
55
|
-
listComplete(input?: Readonly<{
|
|
56
|
-
archetype?: string;
|
|
57
|
-
}>): Promise<AkumaCompleteList>;
|
|
58
|
-
list(input?: AkumaListInput): Promise<AkumaList>;
|
|
59
|
-
}
|
|
60
|
-
/** Internal composition product; the package exposes the smaller Akuma instance instead. */
|
|
61
|
-
export declare function createAkumaProduct(root: WorldRoot, input?: AkumaConfiguration): AkumaProduct;
|
|
62
|
-
export {};
|
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { readdir, stat } from "node:fs/promises";
|
|
3
|
-
import { boundedListLimit, projectBoundedList } from "../bounded-list.js";
|
|
4
|
-
import { AkumaHandle } from "./akuma-handle.js";
|
|
5
|
-
import { CALL_WITH_CONTEXT } from "./akuma-product-symbols.js";
|
|
6
|
-
import { callReadonly, canonicalBirthCwd } from "./call-input.js";
|
|
7
|
-
import { fleetListRow, readAkumaBirthCwd } from "./akuma-observe.js";
|
|
8
|
-
import { akuIdFromDirectoryName, akumaPaths, akumaRunRoot, archetypeName, parseAkuId } from "./identity.js";
|
|
9
|
-
import { loadArchetype, listArchetypes as readArchetypes } from "./archetype.js";
|
|
10
|
-
import { birthAkuma, launchAkuma } from "./publication.js";
|
|
11
|
-
import { spawnAkumaBody } from "./body.js";
|
|
12
|
-
import { requestForwardedAkumaCall } from "./call-request.js";
|
|
13
|
-
import { executionChannel } from "./requests.js";
|
|
14
|
-
import { decodeAllowedActions, unionAllowedActions } from "./allowed.js";
|
|
15
|
-
import { settings as readSettings } from "../settings.js";
|
|
16
|
-
import { schemaJsonText } from "./schema.js";
|
|
17
|
-
async function admitBodyRequest(input) {
|
|
18
|
-
const cwd = input.call.cwd === undefined
|
|
19
|
-
? undefined
|
|
20
|
-
: input.context.cwdCanonical === true
|
|
21
|
-
? input.call.cwd
|
|
22
|
-
: await canonicalBirthCwd(input.call.cwd);
|
|
23
|
-
const child = await requestForwardedAkumaCall({
|
|
24
|
-
directory: input.execution.directory,
|
|
25
|
-
id: randomUUID(),
|
|
26
|
-
world: input.path,
|
|
27
|
-
archetype: input.name,
|
|
28
|
-
...(input.call.body === undefined ? {} : { body: input.call.body }),
|
|
29
|
-
...(input.call.initiator === undefined ? {} : { initiator: input.call.initiator }),
|
|
30
|
-
...(cwd === undefined ? {} : { cwd }),
|
|
31
|
-
recipe: input.recipe,
|
|
32
|
-
...(input.call.signal === undefined ? {} : { signal: input.call.signal }),
|
|
33
|
-
});
|
|
34
|
-
const bornCwd = await readAkumaBirthCwd(input.path, child);
|
|
35
|
-
return {
|
|
36
|
-
kind: "requested",
|
|
37
|
-
id: child,
|
|
38
|
-
cwd: bornCwd,
|
|
39
|
-
execution: { cwd: bornCwd, source: cwd === undefined ? "caller" : "input" },
|
|
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
|
-
const allocated = await birthAkuma({
|
|
49
|
-
worldPath: input.path,
|
|
50
|
-
archetype: input.archetype.name,
|
|
51
|
-
...(input.call.signal === undefined ? {} : { signal: input.call.signal }),
|
|
52
|
-
});
|
|
53
|
-
return {
|
|
54
|
-
kind: "born",
|
|
55
|
-
allocated,
|
|
56
|
-
seed: {
|
|
57
|
-
id: allocated.id,
|
|
58
|
-
archetype: allocated.archetype,
|
|
59
|
-
...input.recipe,
|
|
60
|
-
cwd,
|
|
61
|
-
origin: { kind: "direct" },
|
|
62
|
-
},
|
|
63
|
-
...(input.call.body === undefined ? {} : { initialBody: input.call.body }),
|
|
64
|
-
...(input.call.initiator === undefined ? {} : { initiator: input.call.initiator }),
|
|
65
|
-
...(input.call.schema === undefined ? {} : { initialSchemaJson: schemaJsonText(input.call.schema) }),
|
|
66
|
-
execution: {
|
|
67
|
-
cwd,
|
|
68
|
-
source: input.call.cwd !== undefined ? "input" : initiatorCwd === undefined ? "world" : "process",
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
export const PAGE_POOL_SIZE = 16;
|
|
73
|
-
function activityAt(row) {
|
|
74
|
-
if (!("lifeAt" in row))
|
|
75
|
-
return null;
|
|
76
|
-
if (row.lifeAt === null)
|
|
77
|
-
return row.lastActivityAt;
|
|
78
|
-
if (row.lastActivityAt === null)
|
|
79
|
-
return row.lifeAt;
|
|
80
|
-
return row.lifeAt > row.lastActivityAt ? row.lifeAt : row.lastActivityAt;
|
|
81
|
-
}
|
|
82
|
-
function compareActivity(left, right) {
|
|
83
|
-
if (left === right)
|
|
84
|
-
return 0;
|
|
85
|
-
if (left === null)
|
|
86
|
-
return 1;
|
|
87
|
-
if (right === null)
|
|
88
|
-
return -1;
|
|
89
|
-
return left > right ? -1 : 1;
|
|
90
|
-
}
|
|
91
|
-
function compareRows(left, right) {
|
|
92
|
-
const activity = compareActivity(activityAt(left), activityAt(right));
|
|
93
|
-
if (activity !== 0)
|
|
94
|
-
return activity;
|
|
95
|
-
return left.id < right.id ? -1 : left.id > right.id ? 1 : 0;
|
|
96
|
-
}
|
|
97
|
-
export async function boundedMap(values, mapper) {
|
|
98
|
-
const results = [];
|
|
99
|
-
let index = 0;
|
|
100
|
-
const worker = async () => {
|
|
101
|
-
for (;;) {
|
|
102
|
-
const selected = index++;
|
|
103
|
-
if (selected >= values.length)
|
|
104
|
-
return;
|
|
105
|
-
results[selected] = await mapper(values[selected]);
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
await Promise.all(Array.from({ length: Math.min(PAGE_POOL_SIZE, values.length) }, worker));
|
|
109
|
-
return results;
|
|
110
|
-
}
|
|
111
|
-
async function mtimeBound(paths) {
|
|
112
|
-
const read = async (path) => {
|
|
113
|
-
try {
|
|
114
|
-
return (await stat(path)).mtimeMs;
|
|
115
|
-
}
|
|
116
|
-
catch (error) {
|
|
117
|
-
return error.code === "ENOENT" ? 0 : Number.POSITIVE_INFINITY;
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
return Math.max(await read(paths.heart), await read(`${paths.heart}-wal`));
|
|
121
|
-
}
|
|
122
|
-
async function knownAkuma(path, selected) {
|
|
123
|
-
const runRoot = akumaRunRoot(path);
|
|
124
|
-
let names;
|
|
125
|
-
try {
|
|
126
|
-
names = (await readdir(runRoot, { withFileTypes: true }))
|
|
127
|
-
.filter((entry) => entry.isDirectory())
|
|
128
|
-
.map((entry) => entry.name)
|
|
129
|
-
.sort();
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
if (error.code === "ENOENT")
|
|
133
|
-
return { runRoot, rows: [] };
|
|
134
|
-
throw error;
|
|
135
|
-
}
|
|
136
|
-
const rows = [];
|
|
137
|
-
for (const name of names) {
|
|
138
|
-
let physical;
|
|
139
|
-
try {
|
|
140
|
-
physical = akuIdFromDirectoryName(name);
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
if (selected !== undefined && physical.archetype !== selected)
|
|
146
|
-
continue;
|
|
147
|
-
rows.push({
|
|
148
|
-
id: physical.id,
|
|
149
|
-
paths: akumaPaths({ runRoot, archetype: physical.archetype, suffix: physical.suffix }),
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
return { runRoot, rows };
|
|
153
|
-
}
|
|
154
|
-
async function readableRows(rows) {
|
|
155
|
-
const loaded = await boundedMap(rows, async ({ id, paths }) => {
|
|
156
|
-
try {
|
|
157
|
-
return await fleetListRow(paths, id);
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
return null;
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
return [...loaded].filter((row) => row !== null);
|
|
164
|
-
}
|
|
165
|
-
class AkumaProduct {
|
|
166
|
-
path;
|
|
167
|
-
configuration;
|
|
168
|
-
constructor(path, configuration) {
|
|
169
|
-
this.path = path;
|
|
170
|
-
this.configuration = configuration;
|
|
171
|
-
}
|
|
172
|
-
static create(root, input = {}) {
|
|
173
|
-
if (typeof root !== "string")
|
|
174
|
-
throw new TypeError("Akuma product root must be a WorldRoot");
|
|
175
|
-
return new AkumaProduct(root, input);
|
|
176
|
-
}
|
|
177
|
-
selectHandle(input) {
|
|
178
|
-
return new AkumaHandle(parseAkuId(input.id).id, this.path);
|
|
179
|
-
}
|
|
180
|
-
async listArchetypes() {
|
|
181
|
-
return readArchetypes({
|
|
182
|
-
project: this.path,
|
|
183
|
-
...(this.configuration.home === undefined ? {} : { home: this.configuration.home }),
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
async invoke(input) {
|
|
187
|
-
return await this[CALL_WITH_CONTEXT](input, { initiatorCwd: process.cwd() });
|
|
188
|
-
}
|
|
189
|
-
async admit(input, context) {
|
|
190
|
-
const readonly = callReadonly(input.readonly);
|
|
191
|
-
const name = archetypeName(input.archetype);
|
|
192
|
-
const home = this.configuration.home === undefined ? {} : { home: this.configuration.home };
|
|
193
|
-
const settings = this.configuration.settings ?? (await readSettings({ root: this.path, ...home }));
|
|
194
|
-
const archetype = await loadArchetype({ name, project: this.path, ...home, settings, ...readonly });
|
|
195
|
-
const allowed = input.allowed === undefined
|
|
196
|
-
? archetype.allowed
|
|
197
|
-
: unionAllowedActions(archetype.allowed, decodeAllowedActions(input.allowed, "Akuma call allowed"));
|
|
198
|
-
const execution = executionChannel(this.configuration.execution);
|
|
199
|
-
const requestRecipe = Object.freeze({
|
|
200
|
-
...(archetype.description === undefined ? {} : { description: archetype.description }),
|
|
201
|
-
provider: archetype.provider,
|
|
202
|
-
options: archetype.options,
|
|
203
|
-
...(archetype.readonly === undefined ? {} : { readonly: archetype.readonly }),
|
|
204
|
-
allowed,
|
|
205
|
-
});
|
|
206
|
-
if (execution.kind === "body-request")
|
|
207
|
-
return await admitBodyRequest({ call: input, context, path: this.path, name, recipe: requestRecipe, execution });
|
|
208
|
-
return await admitDirect({ call: input, context, path: this.path, archetype, recipe: requestRecipe });
|
|
209
|
-
}
|
|
210
|
-
async publish(born, completion = {}, signal) {
|
|
211
|
-
if (born.kind === "requested") {
|
|
212
|
-
return new AkumaHandle(born.id, this.path, { cwd: born.cwd, source: born.execution.source });
|
|
213
|
-
}
|
|
214
|
-
const published = await launchAkuma({
|
|
215
|
-
allocated: born.allocated,
|
|
216
|
-
...(signal === undefined ? {} : { signal }),
|
|
217
|
-
launch: async (allocated) => await spawnAkumaBody({
|
|
218
|
-
paths: allocated.paths,
|
|
219
|
-
seed: born.seed,
|
|
220
|
-
...(born.initialBody === undefined ? {} : { initialBody: born.initialBody }),
|
|
221
|
-
...(born.initiator === undefined ? {} : { initiator: born.initiator }),
|
|
222
|
-
...(born.initialSchemaJson === undefined ? {} : { initialSchemaJson: born.initialSchemaJson }),
|
|
223
|
-
...(Object.keys(completion).length === 0 ? {} : { completion }),
|
|
224
|
-
}),
|
|
225
|
-
});
|
|
226
|
-
return new AkumaHandle(published.id, this.path, {
|
|
227
|
-
cwd: born.execution.cwd,
|
|
228
|
-
source: born.execution.source,
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
async [CALL_WITH_CONTEXT](input, context) {
|
|
232
|
-
return await this.publish(await this.admit(input, context));
|
|
233
|
-
}
|
|
234
|
-
async listComplete(input = {}) {
|
|
235
|
-
if (typeof input !== "object" || input === null || Array.isArray(input))
|
|
236
|
-
throw new TypeError("Akuma complete list input must be an object");
|
|
237
|
-
const unknown = Object.keys(input).find((key) => key !== "archetype");
|
|
238
|
-
if (unknown !== undefined)
|
|
239
|
-
throw new TypeError(`Akuma complete list input has unknown field: ${unknown}`);
|
|
240
|
-
const selected = input.archetype === undefined ? undefined : archetypeName(input.archetype);
|
|
241
|
-
const known = await knownAkuma(this.path, selected);
|
|
242
|
-
return {
|
|
243
|
-
observedAt: new Date().toISOString(),
|
|
244
|
-
rows: [...(await readableRows(known.rows))].sort(compareRows),
|
|
245
|
-
searched: [known.runRoot],
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
async list(input = {}) {
|
|
249
|
-
if (typeof input !== "object" || input === null || Array.isArray(input))
|
|
250
|
-
throw new TypeError("Akuma list input must be an object");
|
|
251
|
-
const unknown = Object.keys(input).find((key) => key !== "archetype" && key !== "limit");
|
|
252
|
-
if (unknown !== undefined)
|
|
253
|
-
throw new TypeError(`Akuma list input has unknown field: ${unknown}`);
|
|
254
|
-
const selected = input.archetype === undefined ? undefined : archetypeName(input.archetype);
|
|
255
|
-
const limit = boundedListLimit(input.limit);
|
|
256
|
-
const observedAt = new Date().toISOString();
|
|
257
|
-
const known = await knownAkuma(this.path, selected);
|
|
258
|
-
const candidatesWithBounds = await boundedMap(known.rows, async (row) => ({
|
|
259
|
-
...row,
|
|
260
|
-
bound: await mtimeBound(row.paths),
|
|
261
|
-
}));
|
|
262
|
-
const candidates = [...candidatesWithBounds].sort((left, right) => right.bound - left.bound);
|
|
263
|
-
const readable = [];
|
|
264
|
-
let cursor = 0;
|
|
265
|
-
while (cursor < candidates.length) {
|
|
266
|
-
const batch = candidates.slice(cursor, cursor + PAGE_POOL_SIZE);
|
|
267
|
-
readable.push(...(await readableRows(batch)));
|
|
268
|
-
cursor += batch.length;
|
|
269
|
-
const ranked = readable.sort(compareRows);
|
|
270
|
-
const lookahead = ranked[limit];
|
|
271
|
-
const activity = lookahead === undefined ? null : activityAt(lookahead);
|
|
272
|
-
const unreadBound = candidates[cursor]?.bound;
|
|
273
|
-
if (lookahead !== undefined &&
|
|
274
|
-
activity !== null &&
|
|
275
|
-
unreadBound !== undefined &&
|
|
276
|
-
Number.isFinite(unreadBound) &&
|
|
277
|
-
Number.isFinite(Date.parse(activity)) &&
|
|
278
|
-
unreadBound < Date.parse(activity)) {
|
|
279
|
-
break;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
const ranked = readable.sort(compareRows);
|
|
283
|
-
return {
|
|
284
|
-
observedAt,
|
|
285
|
-
searched: [known.runRoot],
|
|
286
|
-
...projectBoundedList(ranked, limit),
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
/** Internal composition product; the package exposes the smaller Akuma instance instead. */
|
|
291
|
-
export function createAkumaProduct(root, input = {}) {
|
|
292
|
-
return AkumaProduct.create(root, input);
|
|
293
|
-
}
|