@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.
Files changed (425) hide show
  1. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku/SKILL.md +0 -13
  2. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/SKILL.md +47 -78
  3. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/references/automation.md +54 -41
  4. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-babysit/SKILL.md +10 -0
  5. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-bind/SKILL.md +27 -9
  6. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-workflow/SKILL.md +68 -71
  7. package/build/src/akuma/akuma-call.d.ts +53 -0
  8. package/build/src/akuma/akuma-call.js +113 -0
  9. package/build/src/akuma/akuma-instance.d.ts +20 -19
  10. package/build/src/akuma/akuma-instance.js +65 -177
  11. package/build/src/akuma/akuma-observe.d.ts +3 -21
  12. package/build/src/akuma/akuma-observe.js +7 -25
  13. package/build/src/akuma/{akuma-handle.d.ts → akuma-owner.d.ts} +60 -25
  14. package/build/src/akuma/{akuma-handle.js → akuma-owner.js} +43 -29
  15. package/build/src/akuma/akuma-selection-execution.d.ts +51 -0
  16. package/build/src/akuma/akuma-selection-execution.js +134 -0
  17. package/build/src/akuma/{fleet-execution.d.ts → akuma-wait.d.ts} +24 -32
  18. package/build/src/akuma/akuma-wait.js +113 -0
  19. package/build/src/akuma/akuma.d.ts +35 -97
  20. package/build/src/akuma/akuma.js +148 -35
  21. package/build/src/akuma/archetype.d.ts +18 -6
  22. package/build/src/akuma/archetype.js +52 -34
  23. package/build/src/akuma/body.d.ts +79 -61
  24. package/build/src/akuma/body.js +101 -50
  25. package/build/src/akuma/call-initial-tell.d.ts +164 -0
  26. package/build/src/akuma/call-initial-tell.js +62 -0
  27. package/build/src/akuma/call-input.d.ts +0 -3
  28. package/build/src/akuma/call-input.js +0 -7
  29. package/build/src/akuma/call-request.d.ts +247 -38
  30. package/build/src/akuma/call-request.js +77 -92
  31. package/build/src/akuma/coordinate.d.ts +15 -5
  32. package/build/src/akuma/coordinate.js +12 -22
  33. package/build/src/akuma/dispatch-association.d.ts +1 -1
  34. package/build/src/akuma/dispatch-association.js +1 -10
  35. package/build/src/akuma/heart/activity-schema.d.ts +325 -0
  36. package/build/src/akuma/heart/activity-schema.js +53 -0
  37. package/build/src/akuma/heart/facts.d.ts +3 -9
  38. package/build/src/akuma/heart/index.d.ts +3 -1
  39. package/build/src/akuma/heart/index.js +4 -1
  40. package/build/src/akuma/heart/rows.d.ts +49 -2
  41. package/build/src/akuma/heart/rows.js +16 -2
  42. package/build/src/akuma/heart/soul.d.ts +1 -0
  43. package/build/src/akuma/heart/soul.js +7 -10
  44. package/build/src/akuma/heart/tells.d.ts +1 -0
  45. package/build/src/akuma/heart/tells.js +18 -0
  46. package/build/src/akuma/identity.d.ts +10 -7
  47. package/build/src/akuma/identity.js +23 -0
  48. package/build/src/akuma/index.d.ts +10 -8
  49. package/build/src/akuma/index.js +2 -2
  50. package/build/src/akuma/nuke.d.ts +3 -0
  51. package/build/src/akuma/nuke.js +13 -7
  52. package/build/src/akuma/projection-read.js +1 -2
  53. package/build/src/akuma/projection.d.ts +0 -5
  54. package/build/src/akuma/projection.js +22 -43
  55. package/build/src/akuma/provider-recipe.d.ts +58 -23
  56. package/build/src/akuma/provider-recipe.js +62 -103
  57. package/build/src/akuma/provider.d.ts +7 -78
  58. package/build/src/akuma/provider.js +11 -219
  59. package/build/src/akuma/providers/acp/config.d.ts +2 -0
  60. package/build/src/akuma/providers/acp/config.js +26 -1
  61. package/build/src/akuma/providers/acp/core.d.ts +7 -0
  62. package/build/src/akuma/providers/acp/core.js +49 -18
  63. package/build/src/akuma/providers/acp/index.js +14 -17
  64. package/build/src/akuma/providers/claude/index.js +2 -14
  65. package/build/src/akuma/providers/codex-app-server/index.js +0 -22
  66. package/build/src/akuma/providers/grok-build/index.js +44 -24
  67. package/build/src/akuma/providers/index.d.ts +3 -3
  68. package/build/src/akuma/providers/index.js +2 -13
  69. package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +28 -0
  70. package/build/src/akuma/providers/opencode-sdk/event-stream.js +92 -0
  71. package/build/src/akuma/providers/opencode-sdk/events.d.ts +0 -1
  72. package/build/src/akuma/providers/opencode-sdk/index.js +200 -74
  73. package/build/src/akuma/providers/opencode-sdk/session.d.ts +41 -1
  74. package/build/src/akuma/providers/opencode-sdk/session.js +69 -2
  75. package/build/src/akuma/providers/pi/events.js +5 -2
  76. package/build/src/akuma/providers/pi/index.js +70 -24
  77. package/build/src/akuma/publication.d.ts +84 -3
  78. package/build/src/akuma/publication.js +145 -2
  79. package/build/src/akuma/read-pool.d.ts +2 -0
  80. package/build/src/akuma/read-pool.js +15 -0
  81. package/build/src/akuma/request-rendezvous.js +10 -0
  82. package/build/src/akuma/request-serve.js +7 -0
  83. package/build/src/akuma/request-wire.d.ts +14 -26
  84. package/build/src/akuma/request-wire.js +4 -0
  85. package/build/src/akuma/requests.d.ts +0 -3
  86. package/build/src/akuma/requests.js +0 -24
  87. package/build/src/akuma/{fleet-observation.d.ts → selection-observation.d.ts} +61 -52
  88. package/build/src/akuma/selection-observation.js +65 -0
  89. package/build/src/akuma/{fleet-owner-port.d.ts → selection-owner-port.d.ts} +3 -3
  90. package/build/src/akuma/{fleet-owner-port.js → selection-owner-port.js} +11 -17
  91. package/build/src/akuma/{fleet-request.d.ts → selection-request.d.ts} +42 -82
  92. package/build/src/akuma/{fleet-request.js → selection-request.js} +92 -136
  93. package/build/src/akuma/turn-drive.d.ts +3 -0
  94. package/build/src/akuma/turn-drive.js +75 -16
  95. package/build/src/akuma-body.js +91 -56
  96. package/build/src/body/amend.d.ts +5 -0
  97. package/build/src/body/amend.js +26 -50
  98. package/build/src/body/arc.d.ts +4 -2
  99. package/build/src/body/arc.js +19 -26
  100. package/build/src/body/criteria.d.ts +6 -0
  101. package/build/src/body/criteria.js +37 -0
  102. package/build/src/body/decode.js +5 -42
  103. package/build/src/body/region.d.ts +5 -0
  104. package/build/src/body/region.js +45 -2
  105. package/build/src/body/render.js +2 -4
  106. package/build/src/cli/activity.d.ts +26 -0
  107. package/build/src/cli/activity.js +75 -0
  108. package/build/src/cli/actor.d.ts +3 -1
  109. package/build/src/cli/actor.js +15 -2
  110. package/build/src/cli/commands/akuma-grammar.d.ts +75 -0
  111. package/build/src/cli/commands/akuma-grammar.js +414 -0
  112. package/build/src/cli/commands/akuma.d.ts +5 -69
  113. package/build/src/cli/commands/akuma.js +352 -312
  114. package/build/src/cli/commands/amend.d.ts +4 -5
  115. package/build/src/cli/commands/amend.js +1 -2
  116. package/build/src/cli/commands/bind.d.ts +4 -5
  117. package/build/src/cli/commands/bind.js +5 -9
  118. package/build/src/cli/commands/contract-grammar.d.ts +112 -0
  119. package/build/src/cli/commands/contract-grammar.js +282 -0
  120. package/build/src/cli/commands/contract-help.d.ts +28 -30
  121. package/build/src/cli/commands/contract-help.js +69 -96
  122. package/build/src/cli/commands/contract.d.ts +18 -97
  123. package/build/src/cli/commands/contract.js +620 -237
  124. package/build/src/cli/commands/install.d.ts +1 -1
  125. package/build/src/cli/commands/install.js +2 -2
  126. package/build/src/cli/commands/task-grammar.d.ts +19 -0
  127. package/build/src/cli/commands/task-grammar.js +438 -0
  128. package/build/src/cli/commands/task-query.js +23 -104
  129. package/build/src/cli/commands/task.d.ts +5 -20
  130. package/build/src/cli/commands/task.js +415 -333
  131. package/build/src/cli/coordinates.d.ts +10 -0
  132. package/build/src/cli/coordinates.js +20 -0
  133. package/build/src/cli/draft.d.ts +7 -1
  134. package/build/src/cli/main.js +10 -1
  135. package/build/src/cli/parse.d.ts +8 -9
  136. package/build/src/cli/parse.js +63 -61
  137. package/build/src/cli/render/akuma-activity.d.ts +88 -39
  138. package/build/src/cli/render/akuma-activity.js +465 -263
  139. package/build/src/cli/render/akuma-tool.d.ts +15 -5
  140. package/build/src/cli/render/akuma-tool.js +40 -27
  141. package/build/src/cli/render/akuma.d.ts +40 -24
  142. package/build/src/cli/render/akuma.js +108 -205
  143. package/build/src/cli/render/audit.d.ts +6 -2
  144. package/build/src/cli/render/audit.js +61 -30
  145. package/build/src/cli/render/catalog.d.ts +11 -2
  146. package/build/src/cli/render/catalog.js +75 -94
  147. package/build/src/cli/render/contract-history.d.ts +3 -1
  148. package/build/src/cli/render/contract-history.js +215 -22
  149. package/build/src/cli/render/contract-observation.d.ts +10 -5
  150. package/build/src/cli/render/contract-observation.js +29 -46
  151. package/build/src/cli/render/contract.d.ts +10 -3
  152. package/build/src/cli/render/contract.js +255 -106
  153. package/build/src/cli/render/effects.d.ts +26 -0
  154. package/build/src/cli/render/effects.js +41 -0
  155. package/build/src/cli/render/execution-progress.d.ts +18 -6
  156. package/build/src/cli/render/execution-progress.js +34 -31
  157. package/build/src/cli/render/kanshi-akuma.d.ts +1 -2
  158. package/build/src/cli/render/kanshi-akuma.js +5 -26
  159. package/build/src/cli/render/kanshi.js +108 -129
  160. package/build/src/cli/render/marks.d.ts +13 -0
  161. package/build/src/cli/render/marks.js +74 -0
  162. package/build/src/cli/render/nuke.js +18 -7
  163. package/build/src/cli/render/receipt.d.ts +10 -4
  164. package/build/src/cli/render/receipt.js +126 -46
  165. package/build/src/cli/render/reconcile.d.ts +5 -0
  166. package/build/src/cli/render/reconcile.js +152 -0
  167. package/build/src/cli/render/refusal.d.ts +21 -4
  168. package/build/src/cli/render/refusal.js +61 -34
  169. package/build/src/cli/render/region.js +3 -2
  170. package/build/src/cli/render/settings.js +4 -14
  171. package/build/src/cli/render/task.d.ts +37 -6
  172. package/build/src/cli/render/task.js +162 -158
  173. package/build/src/cli/render/terminal.d.ts +25 -1
  174. package/build/src/cli/render/terminal.js +105 -18
  175. package/build/src/cli/runtime.d.ts +32 -8
  176. package/build/src/cli/runtime.js +161 -163
  177. package/build/src/cli/selectors.d.ts +5 -2
  178. package/build/src/cli/selectors.js +11 -3
  179. package/build/src/cli/streams.d.ts +11 -0
  180. package/build/src/cli/streams.js +32 -0
  181. package/build/src/cli/usage.d.ts +2 -0
  182. package/build/src/cli/usage.js +12 -8
  183. package/build/src/contract-guidance.js +3 -7
  184. package/build/src/contract-worktree.d.ts +20 -28
  185. package/build/src/contract-worktree.js +18 -70
  186. package/build/src/coordination/durable-file.d.ts +2 -2
  187. package/build/src/coordination/durable-file.js +0 -27
  188. package/build/src/core/facts/codec.d.ts +1 -2
  189. package/build/src/core/facts/codec.js +6 -7
  190. package/build/src/core/facts/gate.d.ts +0 -1
  191. package/build/src/core/facts/gate.js +0 -82
  192. package/build/src/core/facts/types.d.ts +1 -2
  193. package/build/src/core/verbs/abandon.d.ts +2 -6
  194. package/build/src/core/verbs/abandon.js +0 -16
  195. package/build/src/core/verbs/amend.d.ts +0 -1
  196. package/build/src/core/verbs/amend.js +0 -20
  197. package/build/src/core/verbs/arc.d.ts +7 -8
  198. package/build/src/core/verbs/arc.js +2 -19
  199. package/build/src/core/verbs/attestation.d.ts +2 -6
  200. package/build/src/core/verbs/attestation.js +0 -16
  201. package/build/src/core/verbs/bind.d.ts +0 -1
  202. package/build/src/core/verbs/bind.js +0 -16
  203. package/build/src/core/verbs/deliver.d.ts +0 -1
  204. package/build/src/core/verbs/deliver.js +0 -16
  205. package/build/src/core/verbs/placement.d.ts +2 -1
  206. package/build/src/core/verbs/placement.js +10 -59
  207. package/build/src/git/admission.d.ts +6 -4
  208. package/build/src/git/admission.js +4 -0
  209. package/build/src/git/hooks.d.ts +55 -30
  210. package/build/src/git/hooks.js +30 -3
  211. package/build/src/git/identity.d.ts +6 -0
  212. package/build/src/git/identity.js +47 -0
  213. package/build/src/git/integration.d.ts +31 -13
  214. package/build/src/git/integration.js +32 -1
  215. package/build/src/git/nuke.d.ts +10 -1
  216. package/build/src/git/nuke.js +31 -11
  217. package/build/src/git/observe.js +2 -15
  218. package/build/src/git/private-state-seat.d.ts +6 -7
  219. package/build/src/git/private-state-seat.js +8 -6
  220. package/build/src/git/read-observation.d.ts +6 -1
  221. package/build/src/git/read-observation.js +81 -46
  222. package/build/src/git/reconcile.d.ts +117 -40
  223. package/build/src/git/reconcile.js +169 -40
  224. package/build/src/git/scratch.d.ts +7 -4
  225. package/build/src/git/scratch.js +28 -6
  226. package/build/src/git/target-placement.d.ts +53 -38
  227. package/build/src/git/target-placement.js +69 -54
  228. package/build/src/git/tender.d.ts +37 -28
  229. package/build/src/git/tender.js +39 -0
  230. package/build/src/git/terminal-reconcile.js +21 -23
  231. package/build/src/git/terminal-seal.d.ts +8 -6
  232. package/build/src/git/terminal-seal.js +10 -0
  233. package/build/src/git/workspace.d.ts +29 -15
  234. package/build/src/git/workspace.js +28 -2
  235. package/build/src/identity/normalize.js +19 -6
  236. package/build/src/index.d.ts +78 -6
  237. package/build/src/index.js +52 -3
  238. package/build/src/kanshi/read.d.ts +3 -3
  239. package/build/src/kanshi/read.js +21 -21
  240. package/build/src/kanshi/report.d.ts +9 -8
  241. package/build/src/kanshi/roster.d.ts +2 -0
  242. package/build/src/kanshi/roster.js +2 -0
  243. package/build/src/kanshi/select.js +7 -3
  244. package/build/src/library/address.d.ts +3 -7
  245. package/build/src/library/address.js +7 -7
  246. package/build/src/library/akuma-creation.d.ts +35 -33
  247. package/build/src/library/akuma-creation.js +184 -167
  248. package/build/src/library/akumas.d.ts +40 -0
  249. package/build/src/library/akumas.js +84 -0
  250. package/build/src/library/bind.d.ts +107 -13
  251. package/build/src/library/bind.js +29 -23
  252. package/build/src/library/continuation.d.ts +556 -28
  253. package/build/src/library/continuation.js +29 -54
  254. package/build/src/library/contract-composition.d.ts +40 -0
  255. package/build/src/library/contract-composition.js +105 -0
  256. package/build/src/library/contract-creation.d.ts +7 -0
  257. package/build/src/library/contract-creation.js +192 -0
  258. package/build/src/library/contract-execution.d.ts +29 -40
  259. package/build/src/library/contract-execution.js +503 -128
  260. package/build/src/library/contract-operations.d.ts +275 -134
  261. package/build/src/library/contract-operations.js +83 -92
  262. package/build/src/library/contract-outcomes.d.ts +71 -0
  263. package/build/src/library/contract-outcomes.js +32 -0
  264. package/build/src/library/contract-settings.d.ts +25 -0
  265. package/build/src/library/contract-settings.js +135 -0
  266. package/build/src/library/contract-types.d.ts +24 -38
  267. package/build/src/library/delivery.d.ts +530 -10
  268. package/build/src/library/delivery.js +20 -45
  269. package/build/src/library/input.d.ts +3 -1
  270. package/build/src/library/input.js +11 -16
  271. package/build/src/library/invocation.d.ts +87 -0
  272. package/build/src/library/invocation.js +290 -0
  273. package/build/src/library/keiyaku.d.ts +44 -437
  274. package/build/src/library/keiyaku.js +132 -20
  275. package/build/src/library/nuke.d.ts +2 -11
  276. package/build/src/library/nuke.js +70 -57
  277. package/build/src/library/outcome.d.ts +13196 -0
  278. package/build/src/library/outcome.js +487 -0
  279. package/build/src/library/reconcile.d.ts +96 -24
  280. package/build/src/library/reconcile.js +102 -42
  281. package/build/src/library/refusal.d.ts +470 -42
  282. package/build/src/library/refusal.js +55 -143
  283. package/build/src/library/region.d.ts +15 -7
  284. package/build/src/library/region.js +23 -3
  285. package/build/src/library/repo.d.ts +2 -12
  286. package/build/src/library/repo.js +1 -22
  287. package/build/src/library/selection.d.ts +121 -0
  288. package/build/src/library/{fleet.js → selection.js} +177 -160
  289. package/build/src/plugin/public.d.ts +2 -0
  290. package/build/src/protocol/abandon.d.ts +2 -2
  291. package/build/src/protocol/abandon.js +1 -0
  292. package/build/src/protocol/amend.js +1 -0
  293. package/build/src/protocol/arc.d.ts +6 -4
  294. package/build/src/protocol/attempt.d.ts +4 -2
  295. package/build/src/protocol/attempt.js +10 -0
  296. package/build/src/protocol/audit.d.ts +255 -52
  297. package/build/src/protocol/audit.js +63 -5
  298. package/build/src/protocol/bind.d.ts +18 -17
  299. package/build/src/protocol/bind.js +9 -28
  300. package/build/src/protocol/completion.d.ts +256 -22
  301. package/build/src/protocol/completion.js +100 -12
  302. package/build/src/protocol/deliver.d.ts +34 -23
  303. package/build/src/protocol/deliver.js +39 -25
  304. package/build/src/protocol/execution-observation.d.ts +36 -37
  305. package/build/src/protocol/execution-observation.js +7 -9
  306. package/build/src/protocol/intent.d.ts +101 -30
  307. package/build/src/protocol/intent.js +74 -1
  308. package/build/src/protocol/operations.d.ts +570 -64
  309. package/build/src/protocol/operations.js +189 -9
  310. package/build/src/protocol/outcome.d.ts +2 -1
  311. package/build/src/protocol/placement.d.ts +2 -2
  312. package/build/src/protocol/placement.js +3 -1
  313. package/build/src/protocol/progress.d.ts +108 -65
  314. package/build/src/protocol/progress.js +82 -132
  315. package/build/src/protocol/read/status.d.ts +4 -3
  316. package/build/src/protocol/read/status.js +6 -5
  317. package/build/src/protocol/reconcile.d.ts +3 -3
  318. package/build/src/protocol/reconcile.js +4 -0
  319. package/build/src/protocol/reintegrate.d.ts +2 -2
  320. package/build/src/protocol/review.d.ts +30 -12
  321. package/build/src/protocol/review.js +15 -24
  322. package/build/src/protocol/run.d.ts +34 -5
  323. package/build/src/protocol/run.js +24 -12
  324. package/build/src/runtime/proc/windows-launch.exe +0 -0
  325. package/build/src/settings.d.ts +0 -10
  326. package/build/src/settings.js +0 -76
  327. package/build/src/settlement/holder.d.ts +1 -1
  328. package/build/src/settlement/settle.d.ts +25 -16
  329. package/build/src/settlement/settle.js +80 -20
  330. package/build/src/task/board.d.ts +3 -1
  331. package/build/src/task/board.js +13 -17
  332. package/build/src/task/catalog.d.ts +0 -4
  333. package/build/src/task/catalog.js +0 -15
  334. package/build/src/task/compose-language.d.ts +19 -9
  335. package/build/src/task/compose-language.js +30 -20
  336. package/build/src/task/compose.d.ts +7 -37
  337. package/build/src/task/compose.js +20 -2
  338. package/build/src/task/created-observation.d.ts +0 -1
  339. package/build/src/task/created-observation.js +1 -4
  340. package/build/src/task/document.d.ts +12 -2
  341. package/build/src/task/document.js +4 -0
  342. package/build/src/task/identity.d.ts +4 -1
  343. package/build/src/task/identity.js +21 -17
  344. package/build/src/task/index.d.ts +36 -16
  345. package/build/src/task/index.js +103 -96
  346. package/build/src/task/lifecycle-operations.d.ts +1 -1
  347. package/build/src/task/mutation-result.d.ts +647 -586
  348. package/build/src/task/mutation-result.js +79 -46
  349. package/build/src/task/mutation.d.ts +298 -270
  350. package/build/src/task/mutation.js +93 -110
  351. package/build/src/task/operation-types.d.ts +6 -49
  352. package/build/src/task/operations.d.ts +2 -1
  353. package/build/src/task/operations.js +35 -12
  354. package/build/src/task/query.d.ts +9 -3
  355. package/build/src/task/query.js +42 -16
  356. package/build/src/task/store.d.ts +2 -1
  357. package/build/src/task/store.js +10 -14
  358. package/build/src/verification/declaration.d.ts +0 -1
  359. package/build/src/verification/declaration.js +1 -18
  360. package/build/src/verification/execution.d.ts +6 -2
  361. package/build/src/verification/observation.d.ts +1 -1
  362. package/package.json +2 -14
  363. package/build/src/akuma/akuma-product-symbols.d.ts +0 -1
  364. package/build/src/akuma/akuma-product-symbols.js +0 -1
  365. package/build/src/akuma/akuma-product.d.ts +0 -62
  366. package/build/src/akuma/akuma-product.js +0 -293
  367. package/build/src/akuma/fleet-execution.js +0 -181
  368. package/build/src/akuma/fleet-observation.js +0 -91
  369. package/build/src/cli/accepted.d.ts +0 -24
  370. package/build/src/cli/accepted.js +0 -167
  371. package/build/src/cli/commands/akuma-invoke.d.ts +0 -114
  372. package/build/src/cli/commands/akuma-invoke.js +0 -402
  373. package/build/src/cli/commands/contract-invoke.d.ts +0 -34
  374. package/build/src/cli/commands/contract-invoke.js +0 -259
  375. package/build/src/cli/commands/nuke.d.ts +0 -10
  376. package/build/src/cli/commands/nuke.js +0 -20
  377. package/build/src/cli/commands/status-set.d.ts +0 -4
  378. package/build/src/cli/commands/status-set.js +0 -52
  379. package/build/src/cli/commands/task-invoke.d.ts +0 -49
  380. package/build/src/cli/commands/task-invoke.js +0 -306
  381. package/build/src/cli/invoke.d.ts +0 -27
  382. package/build/src/cli/invoke.js +0 -484
  383. package/build/src/cli/render/board.d.ts +0 -3
  384. package/build/src/cli/render/board.js +0 -25
  385. package/build/src/cli/render/status-set.d.ts +0 -5
  386. package/build/src/cli/render/status-set.js +0 -19
  387. package/build/src/cli/render/text.d.ts +0 -3
  388. package/build/src/cli/render/text.js +0 -33
  389. package/build/src/cli/result.d.ts +0 -240
  390. package/build/src/cli/result.js +0 -1
  391. package/build/src/git/result-codec.d.ts +0 -29
  392. package/build/src/git/result-codec.js +0 -309
  393. package/build/src/kanshi/fleet.d.ts +0 -6
  394. package/build/src/kanshi/fleet.js +0 -27
  395. package/build/src/library/audit.d.ts +0 -29
  396. package/build/src/library/audit.js +0 -41
  397. package/build/src/library/catalog.d.ts +0 -68
  398. package/build/src/library/catalog.js +0 -130
  399. package/build/src/library/composition.d.ts +0 -403
  400. package/build/src/library/composition.js +0 -29
  401. package/build/src/library/configuration.d.ts +0 -4
  402. package/build/src/library/configuration.js +0 -2
  403. package/build/src/library/contract-bind.d.ts +0 -31
  404. package/build/src/library/contract-bind.js +0 -140
  405. package/build/src/library/contract-forwarding.d.ts +0 -55
  406. package/build/src/library/contract-forwarding.js +0 -67
  407. package/build/src/library/contract-handle.d.ts +0 -45
  408. package/build/src/library/contract-handle.js +0 -373
  409. package/build/src/library/contract.d.ts +0 -53
  410. package/build/src/library/contract.js +0 -91
  411. package/build/src/library/execution-result.d.ts +0 -243
  412. package/build/src/library/execution-result.js +0 -101
  413. package/build/src/library/execution.d.ts +0 -8
  414. package/build/src/library/execution.js +0 -102
  415. package/build/src/library/fleet.d.ts +0 -83
  416. package/build/src/library/mutation.d.ts +0 -501
  417. package/build/src/library/mutation.js +0 -248
  418. package/build/src/library/result-codec.d.ts +0 -2
  419. package/build/src/library/result-codec.js +0 -12
  420. package/build/src/protocol/result-codec.d.ts +0 -23
  421. package/build/src/protocol/result-codec.js +0 -488
  422. package/build/src/settlement/result-codec.d.ts +0 -2
  423. package/build/src/settlement/result-codec.js +0 -56
  424. package/build/src/task/public.d.ts +0 -2
  425. package/build/src/task/public.js +0 -1
@@ -0,0 +1,53 @@
1
+ import type { Settings } from "../settings.js";
2
+ import type { WorldRoot } from "../world.js";
3
+ import { type AllowedAction } from "./allowed.js";
4
+ import { type TellResult } from "./body.js";
5
+ import type { CallInitialTell } from "./call-initial-tell.js";
6
+ import { type AllocatedAkuma } from "./identity.js";
7
+ import { type ExecutionContext } from "./requests.js";
8
+ import type { Schema } from "./schema.js";
9
+ type AkumaCallExecution = Readonly<{
10
+ cwd: string;
11
+ source: "input" | "caller" | "process" | "world";
12
+ }>;
13
+ export type AkumaCallInput = Readonly<{
14
+ archetype: string;
15
+ body?: string;
16
+ cwd?: string;
17
+ allowed?: readonly AllowedAction[];
18
+ schema?: Schema<unknown>;
19
+ initiator?: string;
20
+ signal?: AbortSignal;
21
+ }>;
22
+ type AkumaCallContext = Readonly<{
23
+ initiatorCwd?: string;
24
+ cwdCanonical?: true;
25
+ }>;
26
+ export type AkumaConfiguration = Readonly<{
27
+ home?: string;
28
+ settings?: Settings;
29
+ execution?: ExecutionContext;
30
+ }>;
31
+ export type InitialCallTell = CallInitialTell;
32
+ /** One admitted call: the leading child identity plus the exact live initial Tell evidence when supplied. */
33
+ export type AdmittedAkumaCall = Readonly<{
34
+ id: AllocatedAkuma["id"];
35
+ cwd: string;
36
+ execution: AkumaCallExecution;
37
+ /** True when the serving process was reached through the one direct-parent request channel. */
38
+ requested: boolean;
39
+ tell?: TellResult;
40
+ /** The native local failure, or the request transport's diagnostic text, after a confirmed birth. */
41
+ failure?: unknown;
42
+ }>;
43
+ type AkumaCallLaunchInput = Omit<AkumaCallInput, "body" | "schema"> & Readonly<{
44
+ initialTell?: InitialCallTell;
45
+ contractId?: string;
46
+ }>;
47
+ /**
48
+ * The one lower recipe preparer and admission edge used by plural creation and
49
+ * standalone birth: load the caller Archetype/Settings, freeze allowed and cwd,
50
+ * then invoke the P3 prepared-call executor under local or request custody.
51
+ */
52
+ export declare function admitAkumaCall(path: WorldRoot, configuration: AkumaConfiguration, input: AkumaCallLaunchInput, context: AkumaCallContext): Promise<AdmittedAkumaCall>;
53
+ export {};
@@ -0,0 +1,113 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { settings as readSettings } from "../settings.js";
3
+ import { readAkumaBirthCwd } from "./akuma-observe.js";
4
+ import { AkumaOwner } from "./akuma-owner.js";
5
+ import { decodeAllowedActions, unionAllowedActions } from "./allowed.js";
6
+ import { AkumaArchetypeError, loadPreparedArchetype } from "./archetype.js";
7
+ import { spawnAkumaBody } from "./body.js";
8
+ import { canonicalBirthCwd } from "./call-input.js";
9
+ import { requestForwardedAkumaCall } from "./call-request.js";
10
+ import { archetypeName } from "./identity.js";
11
+ import { PreparedCallAdmissionError, executePreparedCall } from "./publication.js";
12
+ import { executionChannel } from "./requests.js";
13
+ async function admitBodyRequest(input) {
14
+ const cwd = input.call.cwd === undefined
15
+ ? undefined
16
+ : input.context.cwdCanonical === true
17
+ ? input.call.cwd
18
+ : await canonicalBirthCwd(input.call.cwd);
19
+ const response = await requestForwardedAkumaCall({
20
+ directory: input.execution.directory,
21
+ id: randomUUID(),
22
+ world: input.path,
23
+ archetype: input.name,
24
+ ...(input.call.initialTell === undefined ? {} : { initialTell: input.call.initialTell }),
25
+ ...(cwd === undefined ? {} : { cwd }),
26
+ recipe: input.recipe,
27
+ ...(input.call.signal === undefined ? {} : { signal: input.call.signal }),
28
+ });
29
+ const bornCwd = await readAkumaBirthCwd(input.path, response.id);
30
+ return {
31
+ id: response.id,
32
+ cwd: bornCwd,
33
+ requested: true,
34
+ execution: { cwd: bornCwd, source: cwd === undefined ? "caller" : "input" },
35
+ ...(response.kind === "live" && response.tell !== undefined ? { tell: response.tell } : {}),
36
+ ...(response.kind === "live" && response.tellFailure !== undefined ? { failure: response.tellFailure } : {}),
37
+ ...(response.kind === "reference" && input.call.initialTell !== undefined
38
+ ? { failure: `Akuma ${response.id} was born without its exact initial Tell receipt` }
39
+ : {}),
40
+ };
41
+ }
42
+ async function admitDirect(input) {
43
+ const initiatorCwd = input.context.initiatorCwd;
44
+ const selectedCwd = input.call.cwd ?? initiatorCwd ?? input.path;
45
+ const cwd = input.call.cwd !== undefined && input.context.cwdCanonical === true
46
+ ? input.call.cwd
47
+ : await canonicalBirthCwd(selectedCwd);
48
+ let result;
49
+ try {
50
+ result = await executePreparedCall({
51
+ archetype: input.archetype.name,
52
+ cwd,
53
+ ...(input.call.initialTell === undefined ? {} : { initialTell: input.call.initialTell }),
54
+ ...(input.call.signal === undefined ? {} : { signal: input.call.signal }),
55
+ custody: {
56
+ kind: "local",
57
+ world: input.path,
58
+ recipe: input.recipe,
59
+ spawn: async (launch) => await spawnAkumaBody({
60
+ paths: launch.paths,
61
+ seed: launch.seed,
62
+ ...(input.call.contractId === undefined ? {} : { completion: { contractId: input.call.contractId } }),
63
+ }),
64
+ admitInitialTell: async ({ id, initialTell, signal }) => await new AkumaOwner(id, input.path).admitInitialTell(initialTell, {
65
+ ...(signal === undefined ? {} : { signal }),
66
+ }),
67
+ },
68
+ });
69
+ }
70
+ catch (error) {
71
+ // The executor owns provider admission; this local edge restores the
72
+ // Archetype-classified refusal the initiating caller has always seen.
73
+ if (error instanceof PreparedCallAdmissionError) {
74
+ throw new AkumaArchetypeError(input.archetype.name, [input.archetype.path], error.stage === "options" ? `is unsupported: ${error.diagnostic}` : `uses ${error.diagnostic}`);
75
+ }
76
+ throw error;
77
+ }
78
+ return {
79
+ id: result.child.id,
80
+ cwd,
81
+ requested: false,
82
+ execution: {
83
+ cwd,
84
+ source: input.call.cwd !== undefined ? "input" : initiatorCwd === undefined ? "world" : "process",
85
+ },
86
+ ...(result.tell === undefined ? {} : { tell: result.tell }),
87
+ ...(result.failure === undefined ? {} : { failure: result.failure }),
88
+ };
89
+ }
90
+ /**
91
+ * The one lower recipe preparer and admission edge used by plural creation and
92
+ * standalone birth: load the caller Archetype/Settings, freeze allowed and cwd,
93
+ * then invoke the P3 prepared-call executor under local or request custody.
94
+ */
95
+ export async function admitAkumaCall(path, configuration, input, context) {
96
+ const name = archetypeName(input.archetype);
97
+ const home = configuration.home === undefined ? {} : { home: configuration.home };
98
+ const settings = configuration.settings ?? (await readSettings({ root: path, ...home }));
99
+ const archetype = await loadPreparedArchetype({ name, project: path, ...home, settings });
100
+ const allowed = input.allowed === undefined
101
+ ? archetype.allowed
102
+ : unionAllowedActions(archetype.allowed, decodeAllowedActions(input.allowed, "Akuma call allowed"));
103
+ const execution = executionChannel(configuration.execution);
104
+ const requestRecipe = Object.freeze({
105
+ ...(archetype.description === undefined ? {} : { description: archetype.description }),
106
+ provider: archetype.provider,
107
+ options: archetype.options,
108
+ allowed,
109
+ });
110
+ if (execution.kind === "body-request")
111
+ return await admitBodyRequest({ call: input, context, path, name, recipe: requestRecipe, execution });
112
+ return await admitDirect({ call: input, context, path, archetype, recipe: requestRecipe });
113
+ }
@@ -1,18 +1,19 @@
1
- import type { AllowedAction } from "./allowed.js";
2
- import type { AkumaStatus } from "./akuma.js";
3
- import type { InterruptReceipt, KillEvidence } from "./akuma.js";
4
- import { type WaitReason } from "./akuma-observe.js";
5
- import { type AkuId } from "./identity.js";
6
- import { type ActivityHistory } from "./projection.js";
7
1
  import type { Settings } from "../settings.js";
8
2
  import type { WorldRoot } from "../world.js";
3
+ import { type InterruptReceipt } from "./akuma-owner.js";
4
+ import { type AkumaStatus } from "./akuma.js";
5
+ import type { AllowedAction } from "./allowed.js";
6
+ import { type KillEvidence } from "./heart/index.js";
7
+ import { type AkuId } from "./identity.js";
8
+ import type { ActivityHistory } from "./projection.js";
9
9
  import { type Schema, type StandardSchemaV1 } from "./schema.js";
10
+ import { type AkumaAskResult, type AkumaTellResult } from "./selection-observation.js";
10
11
  export type AkumaIdleOptions = Readonly<{
11
12
  timeoutMs?: number;
12
13
  signal?: AbortSignal;
13
14
  }>;
14
15
  export type AkumaIdleResult = Readonly<{
15
- reason: WaitReason;
16
+ reason: "completed" | "deadline";
16
17
  status: AkumaStatus;
17
18
  }>;
18
19
  export type AkumaHistoryOptions = Readonly<{
@@ -28,30 +29,30 @@ export type AkumaBirthInput = Readonly<{
28
29
  cwd?: string;
29
30
  home?: string;
30
31
  settings?: Settings;
31
- readonly?: true;
32
32
  allowed?: readonly AllowedAction[];
33
33
  }>;
34
- export type AkumaTellOptions<T> = Readonly<{
35
- schema: Schema<T> | StandardSchemaV1<T>;
34
+ export type AkumaTellOptions = AkumaSignalOptions & Readonly<{
36
35
  interrupt?: boolean;
37
36
  initiator?: string;
38
37
  }>;
38
+ export type AkumaAskOptions<T> = AkumaTellOptions & Readonly<{
39
+ timeoutMs?: number;
40
+ schema?: Schema<T> | StandardSchemaV1<T>;
41
+ }>;
42
+ export type { AkumaAskResult, AkumaTellResult, InterruptReceipt, KillEvidence };
39
43
  export declare class Akuma {
40
44
  readonly id: AkuId;
41
45
  private readonly root;
42
46
  private constructor();
43
- private get paths();
47
+ private owner;
44
48
  static birth(archetype: string, input: AkumaBirthInput): Promise<Akuma>;
45
49
  static select(root: WorldRoot, selector: string): Akuma;
46
- tell(text: string, options?: Readonly<{
47
- initiator?: string;
48
- signal?: AbortSignal;
49
- }>): Promise<string>;
50
- tell<T>(text: string, options: AkumaTellOptions<T> & AkumaSignalOptions): Promise<T>;
50
+ tell(text: string, options?: AkumaTellOptions): Promise<AkumaTellResult>;
51
+ ask(text: string, options?: AkumaAskOptions<string>): Promise<AkumaAskResult<string>>;
52
+ ask<T>(text: string, options: AkumaAskOptions<T> & Readonly<{
53
+ schema: Schema<T> | StandardSchemaV1<T>;
54
+ }>): Promise<AkumaAskResult<T>>;
51
55
  status(): Promise<AkumaStatus>;
52
- interrupt(text: string, options?: AkumaSignalOptions & Readonly<{
53
- initiator?: string;
54
- }>): Promise<InterruptReceipt>;
55
56
  idle(options?: AkumaIdleOptions): Promise<AkumaIdleResult>;
56
57
  history(options?: AkumaHistoryOptions): Promise<ActivityHistory>;
57
58
  kill(options?: AkumaSignalOptions): Promise<KillEvidence>;
@@ -1,19 +1,10 @@
1
- import { randomUUID } from "node:crypto";
2
- import { callReadonly, canonicalBirthCwd } from "./call-input.js";
3
- import { spawnAkumaBody } from "./body.js";
4
- import { decodeAllowedActions, unionAllowedActions } from "./allowed.js";
5
- import { AkumaDecodeError, AkumaProviderError } from "./akuma-errors.js";
6
- import { AkumaHandle } from "./akuma-handle.js";
7
- import { bornStatus, defaultWaitComplete, waitForObservation } from "./akuma-observe.js";
8
- import { loadArchetype } from "./archetype.js";
9
- import { activitySlice } from "./heart/index.js";
10
- import { parseAkuId, pathsForAkuId } from "./identity.js";
11
- import { birthAkuma, launchAkuma } from "./publication.js";
12
- import { projectTurns, selectHistory } from "./projection.js";
13
- import { settings as readSettings } from "../settings.js";
14
- import { schemaFromStandard, schemaJsonText } from "./schema.js";
15
1
  import { abortable } from "./abort.js";
16
- const HISTORY_LIMIT = 12;
2
+ import { admitAkumaCall } from "./akuma-call.js";
3
+ import { defaultWaitComplete } from "./akuma-observe.js";
4
+ import { AkumaOwner } from "./akuma-owner.js";
5
+ import { decodeAskObservation, executeAskAkuma, executeTellAkuma } from "./akuma-selection-execution.js";
6
+ import { parseAkuId } from "./identity.js";
7
+ import { schemaFromStandard, schemaJsonText } from "./schema.js";
17
8
  function signalOption(value) {
18
9
  if (value === undefined)
19
10
  return undefined;
@@ -21,63 +12,6 @@ function signalOption(value) {
21
12
  throw new TypeError("signal must be an AbortSignal");
22
13
  return value;
23
14
  }
24
- function recordedTell(result) {
25
- if (result.wake.kind === "failed")
26
- throw new AkumaProviderError(result.wake.diagnostic);
27
- return { tellId: result.admission.tellId };
28
- }
29
- async function recordPlainTell(input) {
30
- const { id, root, body, tellId, initiator, signal } = input;
31
- const admitted = await new AkumaHandle(id, root).tell(body, tellId, undefined, undefined, {
32
- ...(initiator === undefined ? {} : { initiator }),
33
- ...(signal === undefined ? {} : { signal }),
34
- });
35
- return recordedTell(admitted);
36
- }
37
- function plainTellInput(input) {
38
- return {
39
- id: input.id,
40
- root: input.root,
41
- body: input.body,
42
- tellId: input.tellId,
43
- ...(input.options?.initiator === undefined ? {} : { initiator: input.options.initiator }),
44
- ...(input.signal === undefined ? {} : { signal: input.signal }),
45
- };
46
- }
47
- async function recordSchemaTell(input) {
48
- const { id, body, tellId, schema, root } = input;
49
- if (input.interrupt === true) {
50
- const interrupted = await new AkumaHandle(id, root).interrupt(body, {
51
- tellId,
52
- schemaJson: schemaJsonText(schema),
53
- ...(input.initiator === undefined ? {} : { initiator: input.initiator }),
54
- ...(input.signal === undefined ? {} : { signal: input.signal }),
55
- });
56
- if (interrupted.kind === "unavailable") {
57
- throw new AkumaProviderError(`schema interrupt unavailable: ${interrupted.evidence}`);
58
- }
59
- return recordedTell(interrupted.tell);
60
- }
61
- const admitted = await new AkumaHandle(id, root).tell(body, tellId, undefined, undefined, {
62
- schemaJson: schemaJsonText(schema),
63
- ...(input.initiator === undefined ? {} : { initiator: input.initiator }),
64
- ...(input.signal === undefined ? {} : { signal: input.signal }),
65
- });
66
- return recordedTell(admitted);
67
- }
68
- function outcomeError(outcome) {
69
- if (outcome.kind === "invalid-output")
70
- throw new AkumaDecodeError(outcome.diagnostic, outcome.answer);
71
- if (outcome.kind === "failed")
72
- throw new AkumaProviderError(outcome.diagnostic);
73
- throw new AkumaProviderError("Akuma answered without a value");
74
- }
75
- async function awaitTellOutcome(handle, tellId, signal) {
76
- const observed = await handle.tellOutcome(tellId, signal === undefined ? {} : { signal });
77
- if (observed.outcome !== null)
78
- return observed.outcome;
79
- throw new AkumaProviderError(`recorded Tell ${tellId} reached a terminal delivery without a Turn binding`);
80
- }
81
15
  export class Akuma {
82
16
  id;
83
17
  root;
@@ -86,8 +20,8 @@ export class Akuma {
86
20
  this.root = root;
87
21
  Object.freeze(this);
88
22
  }
89
- get paths() {
90
- return pathsForAkuId(this.root, this.id);
23
+ owner() {
24
+ return new AkumaOwner(this.id, this.root);
91
25
  }
92
26
  static async birth(archetype, input) {
93
27
  if (typeof input !== "object" || input === null || Array.isArray(input)) {
@@ -95,103 +29,72 @@ export class Akuma {
95
29
  }
96
30
  if (typeof input.root !== "string")
97
31
  throw new TypeError("Akuma birth root must be a WorldRoot");
98
- const name = archetype;
99
- const home = input.home === undefined ? {} : { home: input.home };
100
- const settings = input.settings ?? (await readSettings({ root: input.root, ...home }));
101
- const readonly = callReadonly(input.readonly, "Akuma birth readonly must be true");
102
- const loaded = await loadArchetype({ name, project: input.root, ...home, settings, ...readonly });
103
- const allowed = input.allowed === undefined
104
- ? loaded.allowed
105
- : unionAllowedActions(loaded.allowed, decodeAllowedActions(input.allowed, "Akuma birth allowed"));
106
- const cwd = input.cwd === undefined ? input.root : await canonicalBirthCwd(input.cwd);
107
- const allocated = await birthAkuma({ worldPath: input.root, archetype: loaded.name });
108
- await launchAkuma({
109
- allocated,
110
- launch: async (born) => await spawnAkumaBody({
111
- paths: born.paths,
112
- seed: {
113
- id: born.id,
114
- archetype: born.archetype,
115
- ...(loaded.description === undefined ? {} : { description: loaded.description }),
116
- provider: loaded.provider,
117
- options: loaded.options,
118
- ...(loaded.readonly === undefined ? {} : { readonly: loaded.readonly }),
119
- allowed,
120
- cwd,
121
- origin: { kind: "direct" },
122
- },
123
- }),
124
- });
125
- return new Akuma(allocated.id, input.root);
32
+ const admitted = await admitAkumaCall(input.root, {
33
+ ...(input.home === undefined ? {} : { home: input.home }),
34
+ ...(input.settings === undefined ? {} : { settings: input.settings }),
35
+ }, {
36
+ archetype,
37
+ ...(input.cwd === undefined ? {} : { cwd: input.cwd }),
38
+ ...(input.allowed === undefined ? {} : { allowed: input.allowed }),
39
+ }, {});
40
+ if (admitted.failure !== undefined)
41
+ throw admitted.failure;
42
+ return new Akuma(admitted.id, input.root);
126
43
  }
127
44
  static select(root, selector) {
128
45
  if (typeof root !== "string")
129
46
  throw new TypeError("Akuma.select root must be a WorldRoot");
130
47
  return new Akuma(parseAkuId(selector).id, root);
131
48
  }
132
- async tell(text, options) {
49
+ async tell(text, options = {}) {
133
50
  if (typeof text !== "string")
134
51
  throw new TypeError("Akuma tell text must be a string");
135
- const signal = signalOption(options?.signal);
52
+ if (typeof options !== "object" || options === null || Array.isArray(options))
53
+ throw new TypeError("Akuma tell options must be an object");
54
+ if ("schema" in options)
55
+ throw new TypeError("Akuma tell does not accept schema; use ask");
56
+ const unknown = Object.keys(options).find((key) => !["interrupt", "initiator", "signal"].includes(key));
57
+ if (unknown !== undefined)
58
+ throw new TypeError(`Akuma tell options has unknown field: ${unknown}`);
59
+ const signal = signalOption(options.signal);
136
60
  signal?.throwIfAborted();
137
- const tellId = randomUUID();
138
- const schemaOptions = options !== undefined && "schema" in options ? options : undefined;
139
- const schema = schemaOptions === undefined ? undefined : schemaFromStandard(schemaOptions.schema);
140
- const recorded = schemaOptions === undefined || schema === undefined
141
- ? await recordPlainTell(plainTellInput({
142
- id: this.id,
143
- root: this.root,
144
- body: text,
145
- tellId,
146
- options,
147
- signal,
148
- }))
149
- : await recordSchemaTell({
150
- id: this.id,
151
- body: text,
152
- tellId,
153
- schema,
154
- root: this.root,
155
- ...(schemaOptions.interrupt === undefined ? {} : { interrupt: schemaOptions.interrupt }),
156
- ...(schemaOptions.initiator === undefined ? {} : { initiator: schemaOptions.initiator }),
157
- ...(signal === undefined ? {} : { signal }),
158
- });
159
- const outcome = await awaitTellOutcome(new AkumaHandle(this.id, this.root), recorded.tellId, signal);
160
- if (outcome.kind !== "answered")
161
- outcomeError(outcome);
162
- if (schema === undefined)
163
- return outcome.answer;
164
- const raw = outcome.answerJson ?? outcome.answer;
165
- let parsed;
166
- try {
167
- parsed = JSON.parse(raw);
168
- }
169
- catch (error) {
170
- throw new AkumaDecodeError(error instanceof Error ? error.message : "Answer is not valid JSON", outcome.answer);
171
- }
172
- try {
173
- return schema.decode(parsed);
174
- }
175
- catch (error) {
176
- throw new AkumaDecodeError(error instanceof Error ? error.message : "Answer failed schema decode", outcome.answer);
177
- }
178
- }
179
- async status() {
180
- return (await bornStatus(this.paths, this.id, { aperture: "monitoring" })).status;
61
+ return await executeTellAkuma({
62
+ path: this.root,
63
+ id: this.id,
64
+ body: text,
65
+ ...(options.interrupt === true ? { interrupt: true } : {}),
66
+ ...(options.initiator === undefined ? {} : { initiator: options.initiator }),
67
+ ...(signal === undefined ? {} : { signal }),
68
+ });
181
69
  }
182
- async interrupt(text, options = {}) {
70
+ async ask(text, options = {}) {
183
71
  if (typeof text !== "string")
184
- throw new TypeError("Akuma interrupt text must be a string");
185
- if (typeof options !== "object" || options === null || Array.isArray(options)) {
186
- throw new TypeError("Akuma interrupt options must be an object");
187
- }
72
+ throw new TypeError("Akuma ask text must be a string");
73
+ if (typeof options !== "object" || options === null || Array.isArray(options))
74
+ throw new TypeError("Akuma ask options must be an object");
75
+ const unknown = Object.keys(options).find((key) => !["schema", "timeoutMs", "interrupt", "initiator", "signal"].includes(key));
76
+ if (unknown !== undefined)
77
+ throw new TypeError(`Akuma ask options has unknown field: ${unknown}`);
78
+ if (options.timeoutMs !== undefined &&
79
+ (!Number.isFinite(options.timeoutMs) || !Number.isInteger(options.timeoutMs) || options.timeoutMs < 0))
80
+ throw new TypeError("Akuma ask timeoutMs must be a nonnegative finite millisecond duration");
188
81
  const signal = signalOption(options.signal);
189
82
  signal?.throwIfAborted();
190
- const operation = new AkumaHandle(this.id, this.root).interrupt(text, {
191
- ...(signal === undefined ? {} : { signal }),
83
+ const schema = options.schema === undefined ? undefined : schemaFromStandard(options.schema);
84
+ const result = await executeAskAkuma({
85
+ path: this.root,
86
+ id: this.id,
87
+ body: text,
88
+ ...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
89
+ ...(schema === undefined ? {} : { schemaJson: schemaJsonText(schema) }),
90
+ ...(options.interrupt === true ? { interrupt: true } : {}),
192
91
  ...(options.initiator === undefined ? {} : { initiator: options.initiator }),
92
+ ...(signal === undefined ? {} : { signal }),
193
93
  });
194
- return await abortable(operation, signal ?? new AbortController().signal);
94
+ return (schema === undefined ? result : { ...result, observation: decodeAskObservation(result.observation, schema) });
95
+ }
96
+ async status() {
97
+ return await this.owner().status();
195
98
  }
196
99
  async idle(options = {}) {
197
100
  if (typeof options !== "object" || options === null || Array.isArray(options)) {
@@ -204,13 +107,11 @@ export class Akuma {
204
107
  throw new TypeError("Akuma idle timeoutMs must be a nonnegative finite millisecond duration");
205
108
  }
206
109
  const signal = signalOption(options.signal);
207
- const waited = await waitForObservation({
110
+ const waited = await this.owner().waitReceipt(defaultWaitComplete, {
208
111
  ...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
209
112
  ...(signal === undefined ? {} : { signal }),
210
- observe: async () => (await bornStatus(this.paths, this.id, { aperture: "monitoring" })).status,
211
- complete: defaultWaitComplete,
212
113
  });
213
- return { reason: waited.reason, status: waited.value };
114
+ return { reason: waited.reason, status: waited.status };
214
115
  }
215
116
  async history(options = {}) {
216
117
  if (typeof options !== "object" || options === null || Array.isArray(options)) {
@@ -222,24 +123,11 @@ export class Akuma {
222
123
  if (options.before !== undefined && options.since !== undefined) {
223
124
  throw new TypeError("Akuma history before and since are mutually exclusive");
224
125
  }
225
- for (const [name, value] of [
226
- ["before", options.before],
227
- ["since", options.since],
228
- ]) {
229
- if (value !== undefined && (!Number.isSafeInteger(value) || value <= 0)) {
230
- throw new TypeError(`Akuma history ${name} must be a positive safe integer`);
231
- }
232
- }
233
- const limit = options.limit ?? HISTORY_LIMIT;
234
- if (!Number.isSafeInteger(limit) || limit <= 0 || limit > 5_000) {
235
- throw new TypeError("Akuma history limit must be a positive safe integer no greater than 5000");
236
- }
237
- const slice = await activitySlice(this.paths);
238
- return selectHistory(projectTurns(slice.rows, { lowestRetained: slice.lowestRetained, highest: slice.highest }), {
126
+ return (await this.owner().history({
239
127
  ...(options.before === undefined ? {} : { before: options.before }),
240
128
  ...(options.since === undefined ? {} : { since: options.since }),
241
- limit,
242
- });
129
+ ...(options.limit === undefined ? {} : { limit: options.limit }),
130
+ }));
243
131
  }
244
132
  async kill(options = {}) {
245
133
  if (typeof options !== "object" || options === null || Array.isArray(options)) {
@@ -247,6 +135,6 @@ export class Akuma {
247
135
  }
248
136
  const signal = signalOption(options.signal);
249
137
  signal?.throwIfAborted();
250
- return await abortable(new AkumaHandle(this.id, this.root).kill(signal === undefined ? {} : { signal }), signal ?? new AbortController().signal);
138
+ return await abortable(this.owner().kill(signal === undefined ? {} : { signal }), signal ?? new AbortController().signal);
251
139
  }
252
140
  }
@@ -1,9 +1,10 @@
1
1
  import { type AkuId, type AkumaPaths } from "./identity.js";
2
2
  import { selectHistory, type ActivityHistory, type ActivityRow, type ActivitySnapshot } from "./projection.js";
3
3
  import type { WorldRoot } from "../world.js";
4
+ import type { AkumaAlias } from "../identity/selector.js";
4
5
  import type { AkumaListRow, AkumaStatus, UnbornAkumaListRow } from "./akuma.js";
5
- export declare function fleetListRow(paths: AkumaPaths, expected: AkuId): Promise<AkumaListRow | UnbornAkumaListRow>;
6
- export type BudgetedStatusObservation = Readonly<{
6
+ export declare function rosterListRow(paths: AkumaPaths, expected: AkuId, aliases?: readonly AkumaAlias[]): Promise<AkumaListRow | UnbornAkumaListRow>;
7
+ type BudgetedStatusObservation = Readonly<{
7
8
  status: AkumaStatus;
8
9
  ordinarySelected: number;
9
10
  }>;
@@ -26,11 +27,6 @@ export declare function bornStatus(paths: AkumaPaths, expected: AkuId, input: Re
26
27
  ordinaryBudget?: number;
27
28
  admittedTellId?: string;
28
29
  }>): Promise<BudgetedStatusObservation>;
29
- export declare function readBudgetedStatus(worldPath: WorldRoot, id: AkuId, input: Readonly<{
30
- aperture: "monitoring" | "receipt";
31
- ordinaryBudget?: number;
32
- admittedTellId?: string;
33
- }>): Promise<BudgetedStatusObservation>;
34
30
  export declare function readLiveStatus(worldPath: WorldRoot, id: AkuId, input: Readonly<{
35
31
  aperture: "monitoring" | "receipt";
36
32
  ordinaryBudget?: number;
@@ -55,19 +51,5 @@ export declare function waitForObservation<T>(input: Readonly<{
55
51
  reason: WaitReason;
56
52
  value: T;
57
53
  }>>;
58
- /**
59
- * Successive status observations of one already born Akuma until its
60
- * observation window closes. Every acquired observation is reported to
61
- * `observe` before completion or deadline judgment, including the first
62
- * already-complete observation; the last status is returned.
63
- */
64
- export declare function observeAkumaStatus(worldPath: WorldRoot, expected: AkuId, input: Readonly<{
65
- timeoutMs: number;
66
- signal?: AbortSignal;
67
- observe: (status: LiveStatusObservation) => void;
68
- }>): Promise<Readonly<{
69
- reason: WaitReason;
70
- status: AkumaStatus;
71
- }>>;
72
54
  export declare function readAkumaBirthCwd(worldPath: WorldRoot, id: AkuId): Promise<string>;
73
55
  export { selectHistory, type ActivityHistory, type ActivitySnapshot };
@@ -4,7 +4,7 @@ import { ordinarySnapshotBudget, projectTurns, selectHistory, selectSnapshot, }
4
4
  import { resolveProviderExecution } from "./providers/index.js";
5
5
  import { abortableDelay } from "./abort.js";
6
6
  import { AkumaNotBornError } from "./akuma-errors.js";
7
- export async function fleetListRow(paths, expected) {
7
+ export async function rosterListRow(paths, expected, aliases = []) {
8
8
  const snapshot = await readHeart(paths);
9
9
  if (snapshot.soul !== null) {
10
10
  const observed = await bornObservation(paths, expected, () => readHeart(paths), snapshot);
@@ -16,17 +16,20 @@ export async function fleetListRow(paths, expected) {
16
16
  lifeAt: lifeAt(observed.currentLife, observed.snapshot.latestBody, observed.snapshot.latestKill, observed.soul.createdAt),
17
17
  lastActivityAt: observed.snapshot.lastActivityAt,
18
18
  pending: observed.snapshot.pending.map((tell) => tell.id),
19
+ aliases,
19
20
  };
20
21
  }
21
22
  try {
22
23
  if ((await probeLeash(paths)) === "held")
23
- return { id: expected, life: "unborn" };
24
+ return { id: expected, life: "unborn", aliases };
24
25
  const seal = await readSeal(paths);
25
- return seal === null ? { id: expected, life: "unborn" } : { id: expected, life: "stillborn", seal };
26
+ return seal === null
27
+ ? { id: expected, life: "unborn", aliases }
28
+ : { id: expected, life: "stillborn", seal, aliases };
26
29
  }
27
30
  catch (error) {
28
31
  if (isHeartAbsent(error))
29
- return { id: expected, life: "unborn" };
32
+ return { id: expected, life: "unborn", aliases };
30
33
  throw error;
31
34
  }
32
35
  }
@@ -77,7 +80,6 @@ export async function bornLiveStatus(paths, expected, input) {
77
80
  life: currentLife,
78
81
  cwd: soul.cwd,
79
82
  allowed: soul.allowed,
80
- ...(soul.readonly === undefined ? {} : { readonly: soul.readonly }),
81
83
  ...(resumeUnsupported ? { strandedReason: "resume-unsupported" } : {}),
82
84
  timeline: selected.snapshot,
83
85
  },
@@ -89,9 +91,6 @@ export async function bornStatus(paths, expected, input) {
89
91
  const { rows: _rows, ...status } = await bornLiveStatus(paths, expected, input);
90
92
  return status;
91
93
  }
92
- export async function readBudgetedStatus(worldPath, id, input) {
93
- return await bornStatus(pathsForAkuId(worldPath, id), id, input);
94
- }
95
94
  export async function readLiveStatus(worldPath, id, input) {
96
95
  return await bornLiveStatus(pathsForAkuId(worldPath, id), id, input);
97
96
  }
@@ -136,23 +135,6 @@ export async function waitForObservation(input) {
136
135
  : Math.min(OBSERVATION_POLL_MS, Math.max(0, deadline - performance.now())), input.signal);
137
136
  }
138
137
  }
139
- /**
140
- * Successive status observations of one already born Akuma until its
141
- * observation window closes. Every acquired observation is reported to
142
- * `observe` before completion or deadline judgment, including the first
143
- * already-complete observation; the last status is returned.
144
- */
145
- export async function observeAkumaStatus(worldPath, expected, input) {
146
- const paths = pathsForAkuId(worldPath, expected);
147
- const waited = await waitForObservation({
148
- timeoutMs: input.timeoutMs,
149
- ...(input.signal === undefined ? {} : { signal: input.signal }),
150
- observe: async () => await bornLiveStatus(paths, expected, { aperture: "monitoring" }),
151
- complete: (observation) => defaultWaitComplete(observation.status),
152
- onObserve: input.observe,
153
- });
154
- return { reason: waited.reason, status: waited.value.status };
155
- }
156
138
  export async function readAkumaBirthCwd(worldPath, id) {
157
139
  const soul = await readSoul(pathsForAkuId(worldPath, id));
158
140
  if (soul === null)