@astrosheep/keiyaku 4.5.28 → 4.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku/SKILL.md +0 -13
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/SKILL.md +47 -78
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/references/automation.md +54 -41
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-babysit/SKILL.md +10 -0
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-bind/SKILL.md +27 -9
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-workflow/SKILL.md +68 -71
- package/build/src/akuma/akuma-call.d.ts +53 -0
- package/build/src/akuma/akuma-call.js +113 -0
- package/build/src/akuma/akuma-instance.d.ts +20 -19
- package/build/src/akuma/akuma-instance.js +65 -177
- package/build/src/akuma/akuma-observe.d.ts +3 -21
- package/build/src/akuma/akuma-observe.js +7 -25
- package/build/src/akuma/{akuma-handle.d.ts → akuma-owner.d.ts} +60 -25
- package/build/src/akuma/{akuma-handle.js → akuma-owner.js} +43 -29
- package/build/src/akuma/akuma-selection-execution.d.ts +51 -0
- package/build/src/akuma/akuma-selection-execution.js +134 -0
- package/build/src/akuma/{fleet-execution.d.ts → akuma-wait.d.ts} +24 -32
- package/build/src/akuma/akuma-wait.js +113 -0
- package/build/src/akuma/akuma.d.ts +35 -97
- package/build/src/akuma/akuma.js +148 -35
- package/build/src/akuma/archetype.d.ts +18 -6
- package/build/src/akuma/archetype.js +52 -34
- package/build/src/akuma/body.d.ts +79 -61
- package/build/src/akuma/body.js +101 -50
- package/build/src/akuma/call-initial-tell.d.ts +164 -0
- package/build/src/akuma/call-initial-tell.js +62 -0
- package/build/src/akuma/call-input.d.ts +0 -3
- package/build/src/akuma/call-input.js +0 -7
- package/build/src/akuma/call-request.d.ts +247 -38
- package/build/src/akuma/call-request.js +77 -92
- package/build/src/akuma/coordinate.d.ts +15 -5
- package/build/src/akuma/coordinate.js +12 -22
- package/build/src/akuma/dispatch-association.d.ts +1 -1
- package/build/src/akuma/dispatch-association.js +1 -10
- package/build/src/akuma/heart/activity-schema.d.ts +325 -0
- package/build/src/akuma/heart/activity-schema.js +53 -0
- package/build/src/akuma/heart/facts.d.ts +3 -9
- package/build/src/akuma/heart/index.d.ts +3 -1
- package/build/src/akuma/heart/index.js +4 -1
- package/build/src/akuma/heart/rows.d.ts +49 -2
- package/build/src/akuma/heart/rows.js +16 -2
- package/build/src/akuma/heart/soul.d.ts +1 -0
- package/build/src/akuma/heart/soul.js +7 -10
- package/build/src/akuma/heart/tells.d.ts +1 -0
- package/build/src/akuma/heart/tells.js +18 -0
- package/build/src/akuma/identity.d.ts +10 -7
- package/build/src/akuma/identity.js +23 -0
- package/build/src/akuma/index.d.ts +10 -8
- package/build/src/akuma/index.js +2 -2
- package/build/src/akuma/nuke.d.ts +3 -0
- package/build/src/akuma/nuke.js +13 -7
- package/build/src/akuma/projection-read.js +1 -2
- package/build/src/akuma/projection.d.ts +0 -5
- package/build/src/akuma/projection.js +22 -43
- package/build/src/akuma/provider-recipe.d.ts +58 -23
- package/build/src/akuma/provider-recipe.js +62 -103
- package/build/src/akuma/provider.d.ts +7 -78
- package/build/src/akuma/provider.js +11 -219
- package/build/src/akuma/providers/acp/config.d.ts +2 -0
- package/build/src/akuma/providers/acp/config.js +26 -1
- package/build/src/akuma/providers/acp/core.d.ts +7 -0
- package/build/src/akuma/providers/acp/core.js +49 -18
- package/build/src/akuma/providers/acp/index.js +14 -17
- package/build/src/akuma/providers/claude/index.js +2 -14
- package/build/src/akuma/providers/codex-app-server/index.js +0 -22
- package/build/src/akuma/providers/grok-build/index.js +44 -24
- package/build/src/akuma/providers/index.d.ts +3 -3
- package/build/src/akuma/providers/index.js +2 -13
- package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +28 -0
- package/build/src/akuma/providers/opencode-sdk/event-stream.js +92 -0
- package/build/src/akuma/providers/opencode-sdk/events.d.ts +0 -1
- package/build/src/akuma/providers/opencode-sdk/index.js +200 -74
- package/build/src/akuma/providers/opencode-sdk/session.d.ts +41 -1
- package/build/src/akuma/providers/opencode-sdk/session.js +69 -2
- package/build/src/akuma/providers/pi/events.js +5 -2
- package/build/src/akuma/providers/pi/index.js +70 -24
- package/build/src/akuma/publication.d.ts +84 -3
- package/build/src/akuma/publication.js +145 -2
- package/build/src/akuma/read-pool.d.ts +2 -0
- package/build/src/akuma/read-pool.js +15 -0
- package/build/src/akuma/request-rendezvous.js +10 -0
- package/build/src/akuma/request-serve.js +7 -0
- package/build/src/akuma/request-wire.d.ts +14 -26
- package/build/src/akuma/request-wire.js +4 -0
- package/build/src/akuma/requests.d.ts +0 -3
- package/build/src/akuma/requests.js +0 -24
- package/build/src/akuma/{fleet-observation.d.ts → selection-observation.d.ts} +61 -52
- package/build/src/akuma/selection-observation.js +65 -0
- package/build/src/akuma/{fleet-owner-port.d.ts → selection-owner-port.d.ts} +3 -3
- package/build/src/akuma/{fleet-owner-port.js → selection-owner-port.js} +11 -17
- package/build/src/akuma/{fleet-request.d.ts → selection-request.d.ts} +42 -82
- package/build/src/akuma/{fleet-request.js → selection-request.js} +92 -136
- package/build/src/akuma/turn-drive.d.ts +3 -0
- package/build/src/akuma/turn-drive.js +75 -16
- package/build/src/akuma-body.js +91 -56
- package/build/src/body/amend.d.ts +5 -0
- package/build/src/body/amend.js +26 -50
- package/build/src/body/arc.d.ts +4 -2
- package/build/src/body/arc.js +19 -26
- package/build/src/body/criteria.d.ts +6 -0
- package/build/src/body/criteria.js +37 -0
- package/build/src/body/decode.js +5 -42
- package/build/src/body/region.d.ts +5 -0
- package/build/src/body/region.js +45 -2
- package/build/src/body/render.js +2 -4
- package/build/src/cli/activity.d.ts +26 -0
- package/build/src/cli/activity.js +75 -0
- package/build/src/cli/actor.d.ts +3 -1
- package/build/src/cli/actor.js +15 -2
- package/build/src/cli/commands/akuma-grammar.d.ts +75 -0
- package/build/src/cli/commands/akuma-grammar.js +414 -0
- package/build/src/cli/commands/akuma.d.ts +5 -69
- package/build/src/cli/commands/akuma.js +352 -312
- package/build/src/cli/commands/amend.d.ts +4 -5
- package/build/src/cli/commands/amend.js +1 -2
- package/build/src/cli/commands/bind.d.ts +4 -5
- package/build/src/cli/commands/bind.js +5 -9
- package/build/src/cli/commands/contract-grammar.d.ts +112 -0
- package/build/src/cli/commands/contract-grammar.js +282 -0
- package/build/src/cli/commands/contract-help.d.ts +28 -30
- package/build/src/cli/commands/contract-help.js +69 -96
- package/build/src/cli/commands/contract.d.ts +18 -97
- package/build/src/cli/commands/contract.js +620 -237
- package/build/src/cli/commands/install.d.ts +1 -1
- package/build/src/cli/commands/install.js +2 -2
- package/build/src/cli/commands/task-grammar.d.ts +19 -0
- package/build/src/cli/commands/task-grammar.js +438 -0
- package/build/src/cli/commands/task-query.js +23 -104
- package/build/src/cli/commands/task.d.ts +5 -20
- package/build/src/cli/commands/task.js +415 -333
- package/build/src/cli/coordinates.d.ts +10 -0
- package/build/src/cli/coordinates.js +20 -0
- package/build/src/cli/draft.d.ts +7 -1
- package/build/src/cli/main.js +10 -1
- package/build/src/cli/parse.d.ts +8 -9
- package/build/src/cli/parse.js +63 -61
- package/build/src/cli/render/akuma-activity.d.ts +88 -39
- package/build/src/cli/render/akuma-activity.js +465 -263
- package/build/src/cli/render/akuma-tool.d.ts +15 -5
- package/build/src/cli/render/akuma-tool.js +40 -27
- package/build/src/cli/render/akuma.d.ts +40 -24
- package/build/src/cli/render/akuma.js +108 -205
- package/build/src/cli/render/audit.d.ts +6 -2
- package/build/src/cli/render/audit.js +61 -30
- package/build/src/cli/render/catalog.d.ts +11 -2
- package/build/src/cli/render/catalog.js +75 -94
- package/build/src/cli/render/contract-history.d.ts +3 -1
- package/build/src/cli/render/contract-history.js +215 -22
- package/build/src/cli/render/contract-observation.d.ts +10 -5
- package/build/src/cli/render/contract-observation.js +29 -46
- package/build/src/cli/render/contract.d.ts +10 -3
- package/build/src/cli/render/contract.js +255 -106
- package/build/src/cli/render/effects.d.ts +26 -0
- package/build/src/cli/render/effects.js +41 -0
- package/build/src/cli/render/execution-progress.d.ts +18 -6
- package/build/src/cli/render/execution-progress.js +34 -31
- package/build/src/cli/render/kanshi-akuma.d.ts +1 -2
- package/build/src/cli/render/kanshi-akuma.js +5 -26
- package/build/src/cli/render/kanshi.js +108 -129
- package/build/src/cli/render/marks.d.ts +13 -0
- package/build/src/cli/render/marks.js +74 -0
- package/build/src/cli/render/nuke.js +18 -7
- package/build/src/cli/render/receipt.d.ts +10 -4
- package/build/src/cli/render/receipt.js +126 -46
- package/build/src/cli/render/reconcile.d.ts +5 -0
- package/build/src/cli/render/reconcile.js +152 -0
- package/build/src/cli/render/refusal.d.ts +21 -4
- package/build/src/cli/render/refusal.js +61 -34
- package/build/src/cli/render/region.js +3 -2
- package/build/src/cli/render/settings.js +4 -14
- package/build/src/cli/render/task.d.ts +37 -6
- package/build/src/cli/render/task.js +162 -158
- package/build/src/cli/render/terminal.d.ts +25 -1
- package/build/src/cli/render/terminal.js +105 -18
- package/build/src/cli/runtime.d.ts +32 -8
- package/build/src/cli/runtime.js +161 -163
- package/build/src/cli/selectors.d.ts +5 -2
- package/build/src/cli/selectors.js +11 -3
- package/build/src/cli/streams.d.ts +11 -0
- package/build/src/cli/streams.js +32 -0
- package/build/src/cli/usage.d.ts +2 -0
- package/build/src/cli/usage.js +12 -8
- package/build/src/contract-guidance.js +3 -7
- package/build/src/contract-worktree.d.ts +20 -28
- package/build/src/contract-worktree.js +18 -70
- package/build/src/coordination/durable-file.d.ts +2 -2
- package/build/src/coordination/durable-file.js +0 -27
- package/build/src/core/facts/codec.d.ts +1 -2
- package/build/src/core/facts/codec.js +6 -7
- package/build/src/core/facts/gate.d.ts +0 -1
- package/build/src/core/facts/gate.js +0 -82
- package/build/src/core/facts/types.d.ts +1 -2
- package/build/src/core/verbs/abandon.d.ts +2 -6
- package/build/src/core/verbs/abandon.js +0 -16
- package/build/src/core/verbs/amend.d.ts +0 -1
- package/build/src/core/verbs/amend.js +0 -20
- package/build/src/core/verbs/arc.d.ts +7 -8
- package/build/src/core/verbs/arc.js +2 -19
- package/build/src/core/verbs/attestation.d.ts +2 -6
- package/build/src/core/verbs/attestation.js +0 -16
- package/build/src/core/verbs/bind.d.ts +0 -1
- package/build/src/core/verbs/bind.js +0 -16
- package/build/src/core/verbs/deliver.d.ts +0 -1
- package/build/src/core/verbs/deliver.js +0 -16
- package/build/src/core/verbs/placement.d.ts +2 -1
- package/build/src/core/verbs/placement.js +10 -59
- package/build/src/git/admission.d.ts +6 -4
- package/build/src/git/admission.js +4 -0
- package/build/src/git/hooks.d.ts +55 -30
- package/build/src/git/hooks.js +30 -3
- package/build/src/git/identity.d.ts +6 -0
- package/build/src/git/identity.js +47 -0
- package/build/src/git/integration.d.ts +31 -13
- package/build/src/git/integration.js +32 -1
- package/build/src/git/nuke.d.ts +10 -1
- package/build/src/git/nuke.js +31 -11
- package/build/src/git/observe.js +2 -15
- package/build/src/git/private-state-seat.d.ts +6 -7
- package/build/src/git/private-state-seat.js +8 -6
- package/build/src/git/read-observation.d.ts +6 -1
- package/build/src/git/read-observation.js +81 -46
- package/build/src/git/reconcile.d.ts +117 -40
- package/build/src/git/reconcile.js +169 -40
- package/build/src/git/scratch.d.ts +7 -4
- package/build/src/git/scratch.js +28 -6
- package/build/src/git/target-placement.d.ts +53 -38
- package/build/src/git/target-placement.js +69 -54
- package/build/src/git/tender.d.ts +37 -28
- package/build/src/git/tender.js +39 -0
- package/build/src/git/terminal-reconcile.js +21 -23
- package/build/src/git/terminal-seal.d.ts +8 -6
- package/build/src/git/terminal-seal.js +10 -0
- package/build/src/git/workspace.d.ts +29 -15
- package/build/src/git/workspace.js +28 -2
- package/build/src/identity/normalize.js +19 -6
- package/build/src/index.d.ts +78 -6
- package/build/src/index.js +52 -3
- package/build/src/kanshi/read.d.ts +3 -3
- package/build/src/kanshi/read.js +21 -21
- package/build/src/kanshi/report.d.ts +9 -8
- package/build/src/kanshi/roster.d.ts +2 -0
- package/build/src/kanshi/roster.js +2 -0
- package/build/src/kanshi/select.js +7 -3
- package/build/src/library/address.d.ts +3 -7
- package/build/src/library/address.js +7 -7
- package/build/src/library/akuma-creation.d.ts +35 -33
- package/build/src/library/akuma-creation.js +184 -167
- package/build/src/library/akumas.d.ts +40 -0
- package/build/src/library/akumas.js +84 -0
- package/build/src/library/bind.d.ts +107 -13
- package/build/src/library/bind.js +29 -23
- package/build/src/library/continuation.d.ts +556 -28
- package/build/src/library/continuation.js +29 -54
- package/build/src/library/contract-composition.d.ts +40 -0
- package/build/src/library/contract-composition.js +105 -0
- package/build/src/library/contract-creation.d.ts +7 -0
- package/build/src/library/contract-creation.js +192 -0
- package/build/src/library/contract-execution.d.ts +29 -40
- package/build/src/library/contract-execution.js +503 -128
- package/build/src/library/contract-operations.d.ts +275 -134
- package/build/src/library/contract-operations.js +83 -92
- package/build/src/library/contract-outcomes.d.ts +71 -0
- package/build/src/library/contract-outcomes.js +32 -0
- package/build/src/library/contract-settings.d.ts +25 -0
- package/build/src/library/contract-settings.js +135 -0
- package/build/src/library/contract-types.d.ts +24 -38
- package/build/src/library/delivery.d.ts +530 -10
- package/build/src/library/delivery.js +20 -45
- package/build/src/library/input.d.ts +3 -1
- package/build/src/library/input.js +11 -16
- package/build/src/library/invocation.d.ts +87 -0
- package/build/src/library/invocation.js +290 -0
- package/build/src/library/keiyaku.d.ts +44 -437
- package/build/src/library/keiyaku.js +132 -20
- package/build/src/library/nuke.d.ts +2 -11
- package/build/src/library/nuke.js +70 -57
- package/build/src/library/outcome.d.ts +13196 -0
- package/build/src/library/outcome.js +487 -0
- package/build/src/library/reconcile.d.ts +96 -24
- package/build/src/library/reconcile.js +102 -42
- package/build/src/library/refusal.d.ts +470 -42
- package/build/src/library/refusal.js +55 -143
- package/build/src/library/region.d.ts +15 -7
- package/build/src/library/region.js +23 -3
- package/build/src/library/repo.d.ts +2 -12
- package/build/src/library/repo.js +1 -22
- package/build/src/library/selection.d.ts +121 -0
- package/build/src/library/{fleet.js → selection.js} +177 -160
- package/build/src/plugin/public.d.ts +2 -0
- package/build/src/protocol/abandon.d.ts +2 -2
- package/build/src/protocol/abandon.js +1 -0
- package/build/src/protocol/amend.js +1 -0
- package/build/src/protocol/arc.d.ts +6 -4
- package/build/src/protocol/attempt.d.ts +4 -2
- package/build/src/protocol/attempt.js +10 -0
- package/build/src/protocol/audit.d.ts +255 -52
- package/build/src/protocol/audit.js +63 -5
- package/build/src/protocol/bind.d.ts +18 -17
- package/build/src/protocol/bind.js +9 -28
- package/build/src/protocol/completion.d.ts +256 -22
- package/build/src/protocol/completion.js +100 -12
- package/build/src/protocol/deliver.d.ts +34 -23
- package/build/src/protocol/deliver.js +39 -25
- package/build/src/protocol/execution-observation.d.ts +36 -37
- package/build/src/protocol/execution-observation.js +7 -9
- package/build/src/protocol/intent.d.ts +101 -30
- package/build/src/protocol/intent.js +74 -1
- package/build/src/protocol/operations.d.ts +570 -64
- package/build/src/protocol/operations.js +189 -9
- package/build/src/protocol/outcome.d.ts +2 -1
- package/build/src/protocol/placement.d.ts +2 -2
- package/build/src/protocol/placement.js +3 -1
- package/build/src/protocol/progress.d.ts +108 -65
- package/build/src/protocol/progress.js +82 -132
- package/build/src/protocol/read/status.d.ts +4 -3
- package/build/src/protocol/read/status.js +6 -5
- package/build/src/protocol/reconcile.d.ts +3 -3
- package/build/src/protocol/reconcile.js +4 -0
- package/build/src/protocol/reintegrate.d.ts +2 -2
- package/build/src/protocol/review.d.ts +30 -12
- package/build/src/protocol/review.js +15 -24
- package/build/src/protocol/run.d.ts +34 -5
- package/build/src/protocol/run.js +24 -12
- package/build/src/runtime/proc/windows-launch.exe +0 -0
- package/build/src/settings.d.ts +0 -10
- package/build/src/settings.js +0 -76
- package/build/src/settlement/holder.d.ts +1 -1
- package/build/src/settlement/settle.d.ts +25 -16
- package/build/src/settlement/settle.js +80 -20
- package/build/src/task/board.d.ts +3 -1
- package/build/src/task/board.js +13 -17
- package/build/src/task/catalog.d.ts +0 -4
- package/build/src/task/catalog.js +0 -15
- package/build/src/task/compose-language.d.ts +19 -9
- package/build/src/task/compose-language.js +30 -20
- package/build/src/task/compose.d.ts +7 -37
- package/build/src/task/compose.js +20 -2
- package/build/src/task/created-observation.d.ts +0 -1
- package/build/src/task/created-observation.js +1 -4
- package/build/src/task/document.d.ts +12 -2
- package/build/src/task/document.js +4 -0
- package/build/src/task/identity.d.ts +4 -1
- package/build/src/task/identity.js +21 -17
- package/build/src/task/index.d.ts +36 -16
- package/build/src/task/index.js +103 -96
- package/build/src/task/lifecycle-operations.d.ts +1 -1
- package/build/src/task/mutation-result.d.ts +647 -586
- package/build/src/task/mutation-result.js +79 -46
- package/build/src/task/mutation.d.ts +298 -270
- package/build/src/task/mutation.js +93 -110
- package/build/src/task/operation-types.d.ts +6 -49
- package/build/src/task/operations.d.ts +2 -1
- package/build/src/task/operations.js +35 -12
- package/build/src/task/query.d.ts +9 -3
- package/build/src/task/query.js +42 -16
- package/build/src/task/store.d.ts +2 -1
- package/build/src/task/store.js +10 -14
- package/build/src/verification/declaration.d.ts +0 -1
- package/build/src/verification/declaration.js +1 -18
- package/build/src/verification/execution.d.ts +6 -2
- package/build/src/verification/observation.d.ts +1 -1
- package/package.json +2 -14
- package/build/src/akuma/akuma-product-symbols.d.ts +0 -1
- package/build/src/akuma/akuma-product-symbols.js +0 -1
- package/build/src/akuma/akuma-product.d.ts +0 -62
- package/build/src/akuma/akuma-product.js +0 -293
- package/build/src/akuma/fleet-execution.js +0 -181
- package/build/src/akuma/fleet-observation.js +0 -91
- package/build/src/cli/accepted.d.ts +0 -24
- package/build/src/cli/accepted.js +0 -167
- package/build/src/cli/commands/akuma-invoke.d.ts +0 -114
- package/build/src/cli/commands/akuma-invoke.js +0 -402
- package/build/src/cli/commands/contract-invoke.d.ts +0 -34
- package/build/src/cli/commands/contract-invoke.js +0 -259
- package/build/src/cli/commands/nuke.d.ts +0 -10
- package/build/src/cli/commands/nuke.js +0 -20
- package/build/src/cli/commands/status-set.d.ts +0 -4
- package/build/src/cli/commands/status-set.js +0 -52
- package/build/src/cli/commands/task-invoke.d.ts +0 -49
- package/build/src/cli/commands/task-invoke.js +0 -306
- package/build/src/cli/invoke.d.ts +0 -27
- package/build/src/cli/invoke.js +0 -484
- package/build/src/cli/render/board.d.ts +0 -3
- package/build/src/cli/render/board.js +0 -25
- package/build/src/cli/render/status-set.d.ts +0 -5
- package/build/src/cli/render/status-set.js +0 -19
- package/build/src/cli/render/text.d.ts +0 -3
- package/build/src/cli/render/text.js +0 -33
- package/build/src/cli/result.d.ts +0 -240
- package/build/src/cli/result.js +0 -1
- package/build/src/git/result-codec.d.ts +0 -29
- package/build/src/git/result-codec.js +0 -309
- package/build/src/kanshi/fleet.d.ts +0 -6
- package/build/src/kanshi/fleet.js +0 -27
- package/build/src/library/audit.d.ts +0 -29
- package/build/src/library/audit.js +0 -41
- package/build/src/library/catalog.d.ts +0 -68
- package/build/src/library/catalog.js +0 -130
- package/build/src/library/composition.d.ts +0 -403
- package/build/src/library/composition.js +0 -29
- package/build/src/library/configuration.d.ts +0 -4
- package/build/src/library/configuration.js +0 -2
- package/build/src/library/contract-bind.d.ts +0 -31
- package/build/src/library/contract-bind.js +0 -140
- package/build/src/library/contract-forwarding.d.ts +0 -55
- package/build/src/library/contract-forwarding.js +0 -67
- package/build/src/library/contract-handle.d.ts +0 -45
- package/build/src/library/contract-handle.js +0 -373
- package/build/src/library/contract.d.ts +0 -53
- package/build/src/library/contract.js +0 -91
- package/build/src/library/execution-result.d.ts +0 -243
- package/build/src/library/execution-result.js +0 -101
- package/build/src/library/execution.d.ts +0 -8
- package/build/src/library/execution.js +0 -102
- package/build/src/library/fleet.d.ts +0 -83
- package/build/src/library/mutation.d.ts +0 -501
- package/build/src/library/mutation.js +0 -248
- package/build/src/library/result-codec.d.ts +0 -2
- package/build/src/library/result-codec.js +0 -12
- package/build/src/protocol/result-codec.d.ts +0 -23
- package/build/src/protocol/result-codec.js +0 -488
- package/build/src/settlement/result-codec.d.ts +0 -2
- package/build/src/settlement/result-codec.js +0 -56
- package/build/src/task/public.d.ts +0 -2
- package/build/src/task/public.js +0 -1
|
@@ -1,17 +1,9 @@
|
|
|
1
|
-
import { type AkumaLife, type KillEvidence, type ResumeCoordinate } from "./heart/index.js";
|
|
2
|
-
export type { KillEvidence };
|
|
3
|
-
import { type AkuId } from "./identity.js";
|
|
4
|
-
import type { Settings } from "../settings.js";
|
|
5
|
-
import type { WorldRoot } from "../world.js";
|
|
6
|
-
import { type AllowedAction } from "./allowed.js";
|
|
7
|
-
import type { ExecutionContext } from "./requests.js";
|
|
8
1
|
import { z } from "zod";
|
|
9
|
-
import type
|
|
10
|
-
import type {
|
|
11
|
-
import {
|
|
12
|
-
import type {
|
|
13
|
-
|
|
14
|
-
export declare const POLL_MS = 100;
|
|
2
|
+
import { type BoundedList } from "../bounded-list.js";
|
|
3
|
+
import type { AkumaAlias } from "../identity/selector.js";
|
|
4
|
+
import type { WorldRoot } from "../world.js";
|
|
5
|
+
import type { AkumaLife } from "./heart/index.js";
|
|
6
|
+
import { type AkuId } from "./identity.js";
|
|
15
7
|
export type AkumaListRow = Readonly<{
|
|
16
8
|
id: AkuId;
|
|
17
9
|
archetype: string;
|
|
@@ -20,8 +12,26 @@ export type AkumaListRow = Readonly<{
|
|
|
20
12
|
lifeAt: string | null;
|
|
21
13
|
lastActivityAt: string | null;
|
|
22
14
|
pending: readonly string[];
|
|
15
|
+
aliases: readonly AkumaAlias[];
|
|
16
|
+
}>;
|
|
17
|
+
export type UnbornAkumaListRow = Readonly<{
|
|
18
|
+
id: AkuId;
|
|
19
|
+
life: "unborn" | "stillborn";
|
|
20
|
+
aliases: readonly AkumaAlias[];
|
|
21
|
+
seal?: Readonly<{
|
|
22
|
+
evidence: string;
|
|
23
|
+
at: string;
|
|
24
|
+
}>;
|
|
25
|
+
}>;
|
|
26
|
+
export type AkumaList = BoundedList<AkumaListRow | UnbornAkumaListRow> & Readonly<{
|
|
27
|
+
observedAt: string;
|
|
28
|
+
searched: readonly string[];
|
|
29
|
+
}>;
|
|
30
|
+
export type AkumaCompleteList = Omit<AkumaList, "hasMore">;
|
|
31
|
+
export type AkumaListInput = Readonly<{
|
|
32
|
+
archetype?: string;
|
|
33
|
+
limit?: number;
|
|
23
34
|
}>;
|
|
24
|
-
export declare const akumaIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<AkuId, string>>;
|
|
25
35
|
export declare const akumaStatusSchema: z.ZodObject<{
|
|
26
36
|
id: z.ZodPipe<z.ZodString, z.ZodTransform<AkuId, string>>;
|
|
27
37
|
life: z.ZodEnum<{
|
|
@@ -51,12 +61,6 @@ export declare const akumaStatusSchema: z.ZodObject<{
|
|
|
51
61
|
"contract.deliver": "contract.deliver";
|
|
52
62
|
"contract.review": "contract.review";
|
|
53
63
|
}>>, z.ZodTransform<import("./allowed.js").AllowedActions, ("task.add" | "task.addDocument" | "task.compose" | "task.done" | "task.drop" | "task.hold" | "task.resume" | "task.start" | "task.stop" | "task.update" | "akuma.call" | "akuma.kill" | "akuma.tell" | "contract.audit" | "contract.deliver" | "contract.review")[]>>;
|
|
54
|
-
readonly: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
|
|
55
|
-
enforcement: z.ZodLiteral<"native">;
|
|
56
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
57
|
-
enforcement: z.ZodLiteral<"none">;
|
|
58
|
-
diagnostic: z.ZodString;
|
|
59
|
-
}, z.core.$strict>]>>;
|
|
60
64
|
timeline: z.ZodUnion<readonly [z.ZodObject<{
|
|
61
65
|
reportedChanges: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
62
66
|
sequence: z.ZodNumber;
|
|
@@ -220,7 +224,6 @@ export declare const akumaStatusSchema: z.ZodObject<{
|
|
|
220
224
|
sequence: z.ZodNumber;
|
|
221
225
|
turnSequence: z.ZodNumber;
|
|
222
226
|
at: z.ZodString;
|
|
223
|
-
completedAt: z.ZodOptional<z.ZodString>;
|
|
224
227
|
durationMs: z.ZodOptional<z.ZodNumber>;
|
|
225
228
|
name: z.ZodString;
|
|
226
229
|
call: z.ZodUnion<readonly [z.ZodObject<{
|
|
@@ -379,7 +382,6 @@ export declare const akumaStatusSchema: z.ZodObject<{
|
|
|
379
382
|
sequence: z.ZodNumber;
|
|
380
383
|
turnSequence: z.ZodNumber;
|
|
381
384
|
at: z.ZodString;
|
|
382
|
-
completedAt: z.ZodOptional<z.ZodString>;
|
|
383
385
|
durationMs: z.ZodOptional<z.ZodNumber>;
|
|
384
386
|
name: z.ZodString;
|
|
385
387
|
call: z.ZodUnion<readonly [z.ZodObject<{
|
|
@@ -440,81 +442,17 @@ export declare const akumaStatusSchema: z.ZodObject<{
|
|
|
440
442
|
}, z.core.$strict>;
|
|
441
443
|
export type AkumaStatus = z.infer<typeof akumaStatusSchema>;
|
|
442
444
|
export declare function parseAkumaStatus(value: unknown): AkumaStatus;
|
|
443
|
-
export
|
|
444
|
-
export { withoutReportedChanges } from "./projection.js";
|
|
445
|
-
export type { ReadonlyRestraint } from "./provider-recipe.js";
|
|
446
|
-
export type * from "./projection.js";
|
|
447
|
-
export type UnbornAkumaListRow = Readonly<{
|
|
448
|
-
id: AkuId;
|
|
449
|
-
life: "unborn" | "stillborn";
|
|
450
|
-
seal?: Readonly<{
|
|
451
|
-
evidence: string;
|
|
452
|
-
at: string;
|
|
453
|
-
}>;
|
|
454
|
-
}>;
|
|
455
|
-
export type AkumaList = BoundedList<AkumaListRow | UnbornAkumaListRow> & Readonly<{
|
|
456
|
-
observedAt: string;
|
|
457
|
-
searched: readonly string[];
|
|
458
|
-
}>;
|
|
459
|
-
export type AkumaCompleteList = Omit<AkumaList, "hasMore">;
|
|
460
|
-
export type AkumaListInput = Readonly<{
|
|
461
|
-
archetype?: string;
|
|
462
|
-
limit?: number;
|
|
463
|
-
}>;
|
|
464
|
-
export type AkumaCallExecution = Readonly<{
|
|
465
|
-
cwd: string;
|
|
466
|
-
source: "input" | "caller" | "process" | "world";
|
|
467
|
-
}>;
|
|
468
|
-
export type AkumaCallInput = Readonly<{
|
|
469
|
-
archetype: string;
|
|
470
|
-
body: string;
|
|
471
|
-
cwd?: string;
|
|
472
|
-
readonly?: true;
|
|
473
|
-
allowed?: readonly AllowedAction[];
|
|
474
|
-
schema?: Schema<unknown>;
|
|
475
|
-
initiator?: string;
|
|
476
|
-
signal?: AbortSignal;
|
|
477
|
-
}>;
|
|
478
|
-
export type AkumaCallContext = Readonly<{
|
|
479
|
-
initiatorCwd?: string;
|
|
480
|
-
cwdCanonical?: true;
|
|
481
|
-
}>;
|
|
482
|
-
export type { TellResult, TellWake } from "./body.js";
|
|
483
|
-
export type InterruptReceipt = Readonly<{
|
|
484
|
-
kind: "unavailable";
|
|
485
|
-
evidence: "hung" | "untidy" | "unavailable";
|
|
486
|
-
}> | Readonly<{
|
|
487
|
-
kind: "interrupted";
|
|
488
|
-
putDown: "was-idle" | "self-aborted";
|
|
489
|
-
tell: TellResult;
|
|
490
|
-
}>;
|
|
491
|
-
export type ForkReceipt = Readonly<{
|
|
492
|
-
kind: "forked";
|
|
493
|
-
child: AkuId;
|
|
494
|
-
}> | Readonly<{
|
|
495
|
-
kind: "provider-cannot-fork";
|
|
496
|
-
provider: string;
|
|
497
|
-
}> | Readonly<{
|
|
498
|
-
kind: "unknown-history";
|
|
499
|
-
at: string;
|
|
500
|
-
}> | Readonly<{
|
|
501
|
-
kind: "fork-failed";
|
|
502
|
-
diagnostic: string;
|
|
503
|
-
}> | Readonly<{
|
|
504
|
-
kind: "upstream-forked";
|
|
505
|
-
childSession: ResumeCoordinate;
|
|
506
|
-
diagnostic: string;
|
|
507
|
-
}>;
|
|
508
|
-
export { AkumaNotBornError } from "./akuma-errors.js";
|
|
509
|
-
export declare function wait(milliseconds: number): Promise<void>;
|
|
510
|
-
export { bornStatus, fleetListRow, readAkumaBirthCwd, readBudgetedStatus, type BudgetedStatusObservation, } from "./akuma-observe.js";
|
|
511
|
-
export type AkumaConfiguration = Readonly<{
|
|
445
|
+
export declare function listAkumaArchetypes(path: WorldRoot, input?: Readonly<{
|
|
512
446
|
home?: string;
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
447
|
+
}>): Promise<readonly string[]>;
|
|
448
|
+
/**
|
|
449
|
+
* The bounded recent-activity roster: native membership, semantic order and
|
|
450
|
+
* observed extent. World Alias context is attached by the upper composition.
|
|
451
|
+
*/
|
|
452
|
+
export declare function readAkumaRoster(path: WorldRoot, input?: AkumaListInput): Promise<AkumaList>;
|
|
453
|
+
/** The complete native roster for callers whose semantics require a frozen set. */
|
|
454
|
+
export declare function readAkumaCompleteRoster(path: WorldRoot, input?: Readonly<{
|
|
455
|
+
archetype?: string;
|
|
456
|
+
}>): Promise<AkumaCompleteList>;
|
|
518
457
|
/** Internal timeline observation for composition owners. */
|
|
519
458
|
export declare function readAkumaTimeline(path: WorldRoot, id: AkuId): Promise<AkumaStatus["timeline"]>;
|
|
520
|
-
export { AkumaBusyError, AkumaDecodeError, AkumaProviderError } from "./akuma-errors.js";
|
package/build/src/akuma/akuma.js
CHANGED
|
@@ -1,34 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { activitySnapshotSchema } from "./projection.js";
|
|
3
|
-
import { allowedActionsSchema } from "./allowed.js";
|
|
1
|
+
import { readdir, stat } from "node:fs/promises";
|
|
4
2
|
import { z } from "zod";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
throw new Error("not canonical");
|
|
14
|
-
return id;
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
context.addIssue({ code: "custom", message: "expected canonical AkuId" });
|
|
18
|
-
return z.NEVER;
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
const readonlySchema = z.union([
|
|
22
|
-
z.object({ enforcement: z.literal("native") }).strict(),
|
|
23
|
-
z.object({ enforcement: z.literal("none"), diagnostic: z.string().refine((value) => value.trim() !== "") }).strict(),
|
|
24
|
-
]);
|
|
3
|
+
import { boundedListLimit, projectBoundedList } from "../bounded-list.js";
|
|
4
|
+
import { rosterListRow } from "./akuma-observe.js";
|
|
5
|
+
import { AkumaOwner } from "./akuma-owner.js";
|
|
6
|
+
import { allowedActionsSchema } from "./allowed.js";
|
|
7
|
+
import { listArchetypes as readArchetypes } from "./archetype.js";
|
|
8
|
+
import { akuIdFromDirectoryName, akumaIdSchema, akumaPaths, akumaRunRoot, archetypeName, } from "./identity.js";
|
|
9
|
+
import { activitySnapshotSchema } from "./projection.js";
|
|
10
|
+
import { PAGE_POOL_SIZE, boundedMap } from "./read-pool.js";
|
|
25
11
|
export const akumaStatusSchema = z
|
|
26
12
|
.object({
|
|
27
13
|
id: akumaIdSchema,
|
|
28
14
|
life: z.enum(["running", "asleep", "stranded", "hung", "untidy", "killed"]),
|
|
29
15
|
cwd: z.string().optional(),
|
|
30
16
|
allowed: allowedActionsSchema,
|
|
31
|
-
readonly: readonlySchema.optional(),
|
|
32
17
|
timeline: activitySnapshotSchema,
|
|
33
18
|
strandedReason: z.literal("resume-unsupported").optional(),
|
|
34
19
|
})
|
|
@@ -36,19 +21,147 @@ export const akumaStatusSchema = z
|
|
|
36
21
|
export function parseAkumaStatus(value) {
|
|
37
22
|
return akumaStatusSchema.parse(value);
|
|
38
23
|
}
|
|
39
|
-
export
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
24
|
+
export async function listAkumaArchetypes(path, input = {}) {
|
|
25
|
+
return readArchetypes({ project: path, ...(input.home === undefined ? {} : { home: input.home }) });
|
|
26
|
+
}
|
|
27
|
+
function activityAt(row) {
|
|
28
|
+
if (!("lifeAt" in row))
|
|
29
|
+
return null;
|
|
30
|
+
if (row.lifeAt === null)
|
|
31
|
+
return row.lastActivityAt;
|
|
32
|
+
if (row.lastActivityAt === null)
|
|
33
|
+
return row.lifeAt;
|
|
34
|
+
return row.lifeAt > row.lastActivityAt ? row.lifeAt : row.lastActivityAt;
|
|
35
|
+
}
|
|
36
|
+
function compareActivity(left, right) {
|
|
37
|
+
if (left === right)
|
|
38
|
+
return 0;
|
|
39
|
+
if (left === null)
|
|
40
|
+
return 1;
|
|
41
|
+
if (right === null)
|
|
42
|
+
return -1;
|
|
43
|
+
return left > right ? -1 : 1;
|
|
44
|
+
}
|
|
45
|
+
function compareRows(left, right) {
|
|
46
|
+
const activity = compareActivity(activityAt(left), activityAt(right));
|
|
47
|
+
if (activity !== 0)
|
|
48
|
+
return activity;
|
|
49
|
+
return left.id < right.id ? -1 : left.id > right.id ? 1 : 0;
|
|
50
|
+
}
|
|
51
|
+
async function mtimeBound(paths) {
|
|
52
|
+
const read = async (path) => {
|
|
53
|
+
try {
|
|
54
|
+
return (await stat(path)).mtimeMs;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
return error.code === "ENOENT" ? 0 : Number.POSITIVE_INFINITY;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
return Math.max(await read(paths.heart), await read(`${paths.heart}-wal`));
|
|
61
|
+
}
|
|
62
|
+
async function knownAkuma(path, selected) {
|
|
63
|
+
const runRoot = akumaRunRoot(path);
|
|
64
|
+
let names;
|
|
65
|
+
try {
|
|
66
|
+
names = (await readdir(runRoot, { withFileTypes: true }))
|
|
67
|
+
.filter((entry) => entry.isDirectory())
|
|
68
|
+
.map((entry) => entry.name)
|
|
69
|
+
.sort();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (error.code === "ENOENT")
|
|
73
|
+
return { runRoot, rows: [] };
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
const rows = [];
|
|
77
|
+
for (const name of names) {
|
|
78
|
+
let physical;
|
|
79
|
+
try {
|
|
80
|
+
physical = akuIdFromDirectoryName(name);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (selected !== undefined && physical.archetype !== selected)
|
|
86
|
+
continue;
|
|
87
|
+
rows.push({
|
|
88
|
+
id: physical.id,
|
|
89
|
+
paths: akumaPaths({ runRoot, archetype: physical.archetype, suffix: physical.suffix }),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return { runRoot, rows };
|
|
93
|
+
}
|
|
94
|
+
async function readableRows(rows) {
|
|
95
|
+
const loaded = await boundedMap(rows, async ({ id, paths }) => {
|
|
96
|
+
try {
|
|
97
|
+
return await rosterListRow(paths, id);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
return [...loaded].filter((row) => row !== null);
|
|
104
|
+
}
|
|
105
|
+
function rosterArchetype(input, allowLimit) {
|
|
106
|
+
if (typeof input !== "object" || input === null || Array.isArray(input))
|
|
107
|
+
throw new TypeError("Akuma list input must be an object");
|
|
108
|
+
const allowed = allowLimit ? ["archetype", "limit"] : ["archetype"];
|
|
109
|
+
const unknown = Object.keys(input).find((key) => !allowed.includes(key));
|
|
110
|
+
if (unknown !== undefined)
|
|
111
|
+
throw new TypeError(`Akuma list input has unknown field: ${unknown}`);
|
|
112
|
+
return input.archetype === undefined ? undefined : archetypeName(input.archetype);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The bounded recent-activity roster: native membership, semantic order and
|
|
116
|
+
* observed extent. World Alias context is attached by the upper composition.
|
|
117
|
+
*/
|
|
118
|
+
export async function readAkumaRoster(path, input = {}) {
|
|
119
|
+
const selected = rosterArchetype(input, true);
|
|
120
|
+
const limit = boundedListLimit(input.limit);
|
|
121
|
+
const observedAt = new Date().toISOString();
|
|
122
|
+
const known = await knownAkuma(path, selected);
|
|
123
|
+
const candidatesWithBounds = await boundedMap(known.rows, async (row) => ({
|
|
124
|
+
...row,
|
|
125
|
+
bound: await mtimeBound(row.paths),
|
|
126
|
+
}));
|
|
127
|
+
const candidates = [...candidatesWithBounds].sort((left, right) => right.bound - left.bound);
|
|
128
|
+
const readable = [];
|
|
129
|
+
let cursor = 0;
|
|
130
|
+
while (cursor < candidates.length) {
|
|
131
|
+
const batch = candidates.slice(cursor, cursor + PAGE_POOL_SIZE);
|
|
132
|
+
readable.push(...(await readableRows(batch)));
|
|
133
|
+
cursor += batch.length;
|
|
134
|
+
const ranked = readable.sort(compareRows);
|
|
135
|
+
const lookahead = ranked[limit];
|
|
136
|
+
const activity = lookahead === undefined ? null : activityAt(lookahead);
|
|
137
|
+
const unreadBound = candidates[cursor]?.bound;
|
|
138
|
+
if (lookahead !== undefined &&
|
|
139
|
+
activity !== null &&
|
|
140
|
+
unreadBound !== undefined &&
|
|
141
|
+
Number.isFinite(unreadBound) &&
|
|
142
|
+
Number.isFinite(Date.parse(activity)) &&
|
|
143
|
+
unreadBound < Date.parse(activity)) {
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const ranked = readable.sort(compareRows);
|
|
148
|
+
return {
|
|
149
|
+
observedAt,
|
|
150
|
+
searched: [known.runRoot],
|
|
151
|
+
...projectBoundedList(ranked, limit),
|
|
152
|
+
};
|
|
44
153
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
154
|
+
/** The complete native roster for callers whose semantics require a frozen set. */
|
|
155
|
+
export async function readAkumaCompleteRoster(path, input = {}) {
|
|
156
|
+
const selected = rosterArchetype(input, false);
|
|
157
|
+
const known = await knownAkuma(path, selected);
|
|
158
|
+
return {
|
|
159
|
+
observedAt: new Date().toISOString(),
|
|
160
|
+
rows: [...(await readableRows(known.rows))].sort(compareRows),
|
|
161
|
+
searched: [known.runRoot],
|
|
162
|
+
};
|
|
49
163
|
}
|
|
50
164
|
/** Internal timeline observation for composition owners. */
|
|
51
165
|
export async function readAkumaTimeline(path, id) {
|
|
52
|
-
return (await
|
|
166
|
+
return (await new AkumaOwner(id, path).status()).timeline;
|
|
53
167
|
}
|
|
54
|
-
export { AkumaBusyError, AkumaDecodeError, AkumaProviderError } from "./akuma-errors.js";
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { type BoundedList } from "../bounded-list.js";
|
|
1
2
|
import type { Settings } from "../settings.js";
|
|
2
3
|
import type { ProviderAdapter } from "./provider.js";
|
|
3
|
-
import { type ProviderExecution, type ProviderOptions
|
|
4
|
+
import { type ProviderExecution, type ProviderOptions } from "./provider-recipe.js";
|
|
4
5
|
import { type AllowedActions } from "./allowed.js";
|
|
5
6
|
type DecodedArchetype = Readonly<{
|
|
6
7
|
name: string;
|
|
7
8
|
path: string;
|
|
8
9
|
provider: string;
|
|
9
10
|
description?: string;
|
|
11
|
+
hidden?: boolean;
|
|
10
12
|
options: ProviderOptions;
|
|
11
|
-
readonly?: true;
|
|
12
13
|
allowed: AllowedActions;
|
|
13
14
|
}>;
|
|
14
15
|
export type ArchetypeCatalogRow = Readonly<{
|
|
@@ -19,9 +20,12 @@ export type ArchetypeCatalogRow = Readonly<{
|
|
|
19
20
|
type ArchetypeDefinition = DecodedArchetype & Readonly<{
|
|
20
21
|
adapter: ProviderAdapter;
|
|
21
22
|
}>;
|
|
22
|
-
type AdmittedArchetype = Omit<ArchetypeDefinition, "provider"
|
|
23
|
+
type AdmittedArchetype = Omit<ArchetypeDefinition, "provider"> & Readonly<{
|
|
24
|
+
provider: ProviderExecution;
|
|
25
|
+
}>;
|
|
26
|
+
/** One loaded archetype whose provider owner has decoded its execution but not yet admitted its options. */
|
|
27
|
+
type PreparedArchetype = Omit<DecodedArchetype, "provider"> & Readonly<{
|
|
23
28
|
provider: ProviderExecution;
|
|
24
|
-
readonly?: ReadonlyRestraint;
|
|
25
29
|
}>;
|
|
26
30
|
export declare class AkumaArchetypeError extends Error {
|
|
27
31
|
readonly archetype: string;
|
|
@@ -35,12 +39,20 @@ type ArchetypeCoordinates = Readonly<{
|
|
|
35
39
|
home?: string;
|
|
36
40
|
}>;
|
|
37
41
|
export declare function listArchetypes(input?: ArchetypeCoordinates): Promise<readonly string[]>;
|
|
38
|
-
export declare function listArchetypeDefinitions(input?: ArchetypeCoordinates
|
|
42
|
+
export declare function listArchetypeDefinitions(input?: ArchetypeCoordinates & Readonly<{
|
|
43
|
+
limit?: number;
|
|
44
|
+
}>): Promise<BoundedList<ArchetypeCatalogRow>>;
|
|
45
|
+
/** Resolve one archetype and decode its provider execution, leaving option admission to the caller. */
|
|
46
|
+
export declare function loadPreparedArchetype(input: Readonly<{
|
|
47
|
+
name: string;
|
|
48
|
+
project?: string;
|
|
49
|
+
home?: string;
|
|
50
|
+
settings: Settings;
|
|
51
|
+
}>): Promise<PreparedArchetype>;
|
|
39
52
|
export declare function loadArchetype(input: Readonly<{
|
|
40
53
|
name: string;
|
|
41
54
|
project?: string;
|
|
42
55
|
home?: string;
|
|
43
56
|
settings: Settings;
|
|
44
|
-
readonly?: true;
|
|
45
57
|
}>): Promise<AdmittedArchetype>;
|
|
46
58
|
export {};
|
|
@@ -2,6 +2,7 @@ import { readFile, readdir } from "node:fs/promises";
|
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { parseDocument } from "yaml";
|
|
5
|
+
import { boundedListLimit } from "../bounded-list.js";
|
|
5
6
|
import { archetypeName } from "./identity.js";
|
|
6
7
|
import { decodeProviderOptions, decodeProviderRecipe, } from "./provider-recipe.js";
|
|
7
8
|
import { resolveProviderExecution } from "./providers/index.js";
|
|
@@ -99,12 +100,13 @@ function archetypeEnum(values, key, allowed) {
|
|
|
99
100
|
throw new TypeError(`Akuma ${key} must be one of ${allowed.join(", ")}`);
|
|
100
101
|
return value;
|
|
101
102
|
}
|
|
102
|
-
function
|
|
103
|
-
|
|
103
|
+
function archetypeBoolean(values, key) {
|
|
104
|
+
const value = values[key];
|
|
105
|
+
if (value === undefined)
|
|
104
106
|
return undefined;
|
|
105
|
-
if (
|
|
106
|
-
throw new TypeError(
|
|
107
|
-
return
|
|
107
|
+
if (typeof value !== "boolean")
|
|
108
|
+
throw new TypeError(`Akuma ${key} must be a boolean`);
|
|
109
|
+
return value;
|
|
108
110
|
}
|
|
109
111
|
function parseArchetypeFrontmatter(markdown) {
|
|
110
112
|
const lines = markdown.split(/\r?\n/u);
|
|
@@ -126,14 +128,11 @@ function decodeArchetypeFields(values) {
|
|
|
126
128
|
const provider = archetypeField(values, "provider");
|
|
127
129
|
const baseValue = archetypeField(values, "base");
|
|
128
130
|
const base = baseValue === undefined ? undefined : archetypeName(baseValue);
|
|
129
|
-
if ("access" in values)
|
|
130
|
-
throw new TypeError("Akuma access is not supported; use readonly: true");
|
|
131
131
|
const model = archetypeField(values, "model");
|
|
132
132
|
const effort = archetypeField(values, "effort");
|
|
133
|
-
const readonly = archetypeReadonly(values);
|
|
134
133
|
const network = archetypeEnum(values, "network", ["disabled", "enabled"]);
|
|
135
|
-
const sandbox = archetypeEnum(values, "sandbox", ["full-access"]);
|
|
136
134
|
const description = archetypeField(values, "description");
|
|
135
|
+
const hidden = archetypeBoolean(values, "hidden");
|
|
137
136
|
const allowedPresent = "allowed" in values;
|
|
138
137
|
const allowed = allowedPresent ? decodeAllowedActions(values.allowed) : undefined;
|
|
139
138
|
const systemPromptMode = archetypeEnum(values, "systemPromptMode", ["append", "replace"]);
|
|
@@ -142,10 +141,9 @@ function decodeArchetypeFields(values) {
|
|
|
142
141
|
...(provider === undefined ? {} : { provider }),
|
|
143
142
|
...(model === undefined ? {} : { model }),
|
|
144
143
|
...(effort === undefined ? {} : { effort }),
|
|
145
|
-
...(readonly === undefined ? {} : { readonly }),
|
|
146
144
|
...(network === undefined ? {} : { network }),
|
|
147
|
-
...(sandbox === undefined ? {} : { sandbox }),
|
|
148
145
|
...(description === undefined ? {} : { description }),
|
|
146
|
+
...(hidden === undefined ? {} : { hidden }),
|
|
149
147
|
...(allowed === undefined ? {} : { allowed }),
|
|
150
148
|
allowedPresent,
|
|
151
149
|
...(systemPromptMode === undefined ? {} : { systemPromptMode }),
|
|
@@ -164,11 +162,11 @@ function decodeArchetype(name, path, markdown) {
|
|
|
164
162
|
...(fields.base === undefined ? {} : { base: fields.base }),
|
|
165
163
|
...(fields.provider === undefined ? {} : { provider: fields.provider }),
|
|
166
164
|
...(fields.description === undefined ? {} : { description: fields.description }),
|
|
165
|
+
...(fields.hidden === undefined ? {} : { hidden: fields.hidden }),
|
|
167
166
|
options: decodeProviderOptions({
|
|
168
167
|
...(fields.model === undefined ? {} : { model: fields.model }),
|
|
169
168
|
...(fields.effort === undefined ? {} : { effort: fields.effort }),
|
|
170
169
|
...(fields.network === undefined ? {} : { network: fields.network }),
|
|
171
|
-
...(fields.sandbox === undefined ? {} : { sandbox: fields.sandbox }),
|
|
172
170
|
...(systemPrompt.length === 0
|
|
173
171
|
? {}
|
|
174
172
|
: {
|
|
@@ -176,7 +174,6 @@ function decodeArchetype(name, path, markdown) {
|
|
|
176
174
|
systemPromptMode: fields.systemPromptMode ?? "append",
|
|
177
175
|
}),
|
|
178
176
|
}),
|
|
179
|
-
...(fields.readonly === undefined ? {} : { readonly: fields.readonly }),
|
|
180
177
|
...(fields.allowed === undefined ? {} : { allowed: fields.allowed }),
|
|
181
178
|
allowedPresent: fields.allowedPresent,
|
|
182
179
|
});
|
|
@@ -196,8 +193,9 @@ function mergeArchetype(base, local) {
|
|
|
196
193
|
? {}
|
|
197
194
|
: { description: base.description }
|
|
198
195
|
: { description: local.description }),
|
|
196
|
+
// Hiddenness is the file's own catalogue visibility; it never flows through base.
|
|
197
|
+
...(local.hidden === true ? { hidden: true } : {}),
|
|
199
198
|
options,
|
|
200
|
-
...(local.readonly === true || base?.readonly === true ? { readonly: true } : {}),
|
|
201
199
|
allowed,
|
|
202
200
|
});
|
|
203
201
|
}
|
|
@@ -242,14 +240,11 @@ async function resolveArchetype(name, input, source, chain = []) {
|
|
|
242
240
|
export async function listArchetypeDefinitions(input = {}) {
|
|
243
241
|
// Reads still run concurrently, but the reported failure is the first invalid
|
|
244
242
|
// definition in catalog byte order, not whichever read happened to finish first.
|
|
245
|
-
const
|
|
243
|
+
const limit = input.limit === undefined ? undefined : boundedListLimit(input.limit);
|
|
244
|
+
const all = await archetypePaths(input);
|
|
245
|
+
const settled = await Promise.allSettled(all.map(async ({ name, path }) => {
|
|
246
246
|
try {
|
|
247
|
-
|
|
248
|
-
return Object.freeze({
|
|
249
|
-
name: definition.name,
|
|
250
|
-
...(definition.options.model === undefined ? {} : { model: definition.options.model }),
|
|
251
|
-
...(definition.description === undefined ? {} : { description: definition.description }),
|
|
252
|
-
});
|
|
247
|
+
return await resolveArchetype(name, input, undefined);
|
|
253
248
|
}
|
|
254
249
|
catch (error) {
|
|
255
250
|
if (error instanceof AkumaArchetypeError)
|
|
@@ -260,7 +255,18 @@ export async function listArchetypeDefinitions(input = {}) {
|
|
|
260
255
|
const firstInvalid = settled.find((result) => result.status === "rejected");
|
|
261
256
|
if (firstInvalid !== undefined)
|
|
262
257
|
throw firstInvalid.reason;
|
|
263
|
-
|
|
258
|
+
const visible = settled
|
|
259
|
+
.map((result) => result.value)
|
|
260
|
+
.filter((definition) => definition.hidden !== true)
|
|
261
|
+
.map((definition) => Object.freeze({
|
|
262
|
+
name: definition.name,
|
|
263
|
+
...(definition.options.model === undefined ? {} : { model: definition.options.model }),
|
|
264
|
+
...(definition.description === undefined ? {} : { description: definition.description }),
|
|
265
|
+
}));
|
|
266
|
+
return {
|
|
267
|
+
rows: limit === undefined ? visible : visible.slice(0, limit),
|
|
268
|
+
hasMore: limit === undefined ? false : visible.length > limit,
|
|
269
|
+
};
|
|
264
270
|
}
|
|
265
271
|
function record(value) {
|
|
266
272
|
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
@@ -296,6 +302,11 @@ const BUILTIN_EXECUTIONS = {
|
|
|
296
302
|
claude: { kind: "claude-agent-sdk" },
|
|
297
303
|
"codex-app-server": { kind: "codex-app-server" },
|
|
298
304
|
"opencode-sdk": { kind: "opencode-sdk" },
|
|
305
|
+
kimi: {
|
|
306
|
+
kind: "acp",
|
|
307
|
+
executable: "kimi",
|
|
308
|
+
config: { argvBefore: ["acp"], argvAfter: [], modelConfigId: "model", effortConfigId: "thinking" },
|
|
309
|
+
},
|
|
299
310
|
pi: { kind: "pi" },
|
|
300
311
|
"grok-build": {
|
|
301
312
|
kind: "grok-build",
|
|
@@ -314,10 +325,10 @@ function providerExecution(settings, name) {
|
|
|
314
325
|
return decodeProviderRecipe({ name, ...builtin });
|
|
315
326
|
throw new TypeError(`unknown provider ${name}`);
|
|
316
327
|
}
|
|
317
|
-
async function admitArchetype(archetype
|
|
328
|
+
async function admitArchetype(archetype) {
|
|
318
329
|
let selected;
|
|
319
330
|
try {
|
|
320
|
-
selected = await resolveProviderExecution(
|
|
331
|
+
selected = await resolveProviderExecution(archetype.provider);
|
|
321
332
|
}
|
|
322
333
|
catch (error) {
|
|
323
334
|
if (error instanceof TypeError)
|
|
@@ -326,25 +337,32 @@ async function admitArchetype(archetype, settings, callReadonly) {
|
|
|
326
337
|
}
|
|
327
338
|
const execution = selected.execution;
|
|
328
339
|
const adapter = selected.adapter;
|
|
329
|
-
const
|
|
330
|
-
const admission = adapter.admitOptions({
|
|
331
|
-
...archetype.options,
|
|
332
|
-
...(effectiveReadonly ? { readonly: true } : {}),
|
|
333
|
-
});
|
|
340
|
+
const admission = adapter.admitOptions(archetype.options);
|
|
334
341
|
if (admission.kind === "refused") {
|
|
335
342
|
throw new AkumaArchetypeError(archetype.name, [archetype.path], `is unsupported: ${admission.diagnostic}`);
|
|
336
343
|
}
|
|
337
|
-
const { readonly: _readonly, ...definition } = archetype;
|
|
338
344
|
return Object.freeze({
|
|
339
|
-
...
|
|
345
|
+
...archetype,
|
|
340
346
|
provider: execution,
|
|
341
347
|
adapter,
|
|
342
348
|
options: admission.options,
|
|
343
|
-
...(admission.readonly === undefined ? {} : { readonly: admission.readonly }),
|
|
344
349
|
});
|
|
345
350
|
}
|
|
346
|
-
|
|
351
|
+
/** Resolve one archetype and decode its provider execution, leaving option admission to the caller. */
|
|
352
|
+
export async function loadPreparedArchetype(input) {
|
|
347
353
|
const name = archetypeName(input.name);
|
|
348
354
|
const definition = await resolveArchetype(name, input, undefined);
|
|
349
|
-
|
|
355
|
+
let provider;
|
|
356
|
+
try {
|
|
357
|
+
provider = providerExecution(input.settings, definition.provider);
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
if (error instanceof TypeError)
|
|
361
|
+
throw new AkumaArchetypeError(definition.name, [definition.path], `uses ${error.message}`);
|
|
362
|
+
throw error;
|
|
363
|
+
}
|
|
364
|
+
return Object.freeze({ ...definition, provider });
|
|
365
|
+
}
|
|
366
|
+
export async function loadArchetype(input) {
|
|
367
|
+
return await admitArchetype(await loadPreparedArchetype(input));
|
|
350
368
|
}
|