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