@astrosheep/keiyaku 2.9.13 → 4.0.0

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 (670) hide show
  1. package/README.md +10 -130
  2. package/build/integrations/marketplace/.agents/plugins/marketplace.json +12 -0
  3. package/build/integrations/marketplace/.claude-plugin/marketplace.json +5 -0
  4. package/build/integrations/marketplace/plugins/keiyaku/.claude-plugin/plugin.json +7 -0
  5. package/build/integrations/marketplace/plugins/keiyaku/.codex-plugin/plugin.json +18 -0
  6. package/build/integrations/marketplace/plugins/keiyaku/opencode.js +16 -0
  7. package/build/integrations/marketplace/plugins/keiyaku/package.json +8 -0
  8. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku/SKILL.md +34 -0
  9. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/SKILL.md +50 -0
  10. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-task/SKILL.md +62 -0
  11. package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-workflow/SKILL.md +72 -0
  12. package/build/src/akuma/activity.d.ts +66 -0
  13. package/build/src/akuma/activity.js +139 -0
  14. package/build/src/akuma/akuma.d.ts +116 -0
  15. package/build/src/akuma/akuma.js +382 -0
  16. package/build/src/akuma/archetype.d.ts +31 -0
  17. package/build/src/akuma/archetype.js +188 -0
  18. package/build/src/akuma/body.d.ts +20 -0
  19. package/build/src/akuma/body.js +305 -0
  20. package/build/src/akuma/heart/facts.d.ts +150 -0
  21. package/build/src/akuma/heart/facts.js +9 -0
  22. package/build/src/akuma/heart/index.d.ts +78 -0
  23. package/build/src/akuma/heart/index.js +361 -0
  24. package/build/src/akuma/heart/rows.d.ts +189 -0
  25. package/build/src/akuma/heart/rows.js +319 -0
  26. package/build/src/akuma/heart/schema.d.ts +5 -0
  27. package/build/src/akuma/heart/schema.js +113 -0
  28. package/build/src/akuma/identity.d.ts +46 -0
  29. package/build/src/akuma/identity.js +89 -0
  30. package/build/src/akuma/index.d.ts +7 -0
  31. package/build/src/akuma/index.js +3 -0
  32. package/build/src/akuma/provider.d.ts +123 -0
  33. package/build/src/akuma/provider.js +235 -0
  34. package/build/src/akuma/providers/claude.d.ts +84 -0
  35. package/build/src/akuma/providers/claude.js +305 -0
  36. package/build/src/akuma/providers/codex-app-server/events.d.ts +110 -0
  37. package/build/src/akuma/providers/codex-app-server/events.js +337 -0
  38. package/build/src/akuma/providers/codex-app-server/index.d.ts +27 -0
  39. package/build/src/akuma/providers/codex-app-server/index.js +162 -0
  40. package/build/src/akuma/providers/index.d.ts +4 -0
  41. package/build/src/akuma/providers/index.js +71 -0
  42. package/build/src/akuma/publication.d.ts +10 -0
  43. package/build/src/akuma/publication.js +107 -0
  44. package/build/src/akuma/requests.d.ts +46 -0
  45. package/build/src/akuma/requests.js +388 -0
  46. package/build/src/alias/index.d.ts +17 -0
  47. package/build/src/alias/index.js +104 -0
  48. package/build/src/body/amend.d.ts +2 -0
  49. package/build/src/body/amend.js +289 -0
  50. package/build/src/body/arc.d.ts +2 -0
  51. package/build/src/body/arc.js +54 -0
  52. package/build/src/body/decode.d.ts +4 -0
  53. package/build/src/body/decode.js +146 -0
  54. package/build/src/body/keys.d.ts +4 -0
  55. package/build/src/body/keys.js +11 -0
  56. package/build/src/body/region.d.ts +6 -0
  57. package/build/src/body/region.js +139 -0
  58. package/build/src/body/render.d.ts +4 -0
  59. package/build/src/body/render.js +73 -0
  60. package/build/src/body/shape.d.ts +29 -0
  61. package/build/src/body/shape.js +16 -0
  62. package/build/src/body/types.d.ts +28 -0
  63. package/build/src/body/verification.d.ts +7 -0
  64. package/build/src/body/verification.js +25 -0
  65. package/build/src/cli/accepted.d.ts +16 -0
  66. package/build/src/cli/accepted.js +65 -0
  67. package/build/src/cli/actor.d.ts +8 -0
  68. package/build/src/cli/actor.js +11 -0
  69. package/build/src/cli/commands/akuma-invoke.d.ts +53 -0
  70. package/build/src/cli/commands/akuma-invoke.js +68 -0
  71. package/build/src/cli/commands/akuma.d.ts +42 -0
  72. package/build/src/cli/commands/akuma.js +224 -0
  73. package/build/src/cli/commands/amend.d.ts +13 -0
  74. package/build/src/cli/commands/amend.js +13 -0
  75. package/build/src/cli/commands/bind.d.ts +12 -0
  76. package/build/src/cli/commands/bind.js +17 -0
  77. package/build/src/cli/commands/install.d.ts +25 -0
  78. package/build/src/cli/commands/install.js +103 -0
  79. package/build/src/cli/commands/task-invoke.d.ts +9 -0
  80. package/build/src/cli/commands/task-invoke.js +92 -0
  81. package/build/src/cli/commands/task.d.ts +16 -0
  82. package/build/src/cli/commands/task.js +144 -0
  83. package/build/src/cli/index.d.ts +2 -0
  84. package/build/src/cli/index.js +3 -0
  85. package/build/src/cli/invoke.d.ts +17 -0
  86. package/build/src/cli/invoke.js +265 -0
  87. package/build/src/cli/main.d.ts +1 -0
  88. package/build/src/cli/main.js +79 -0
  89. package/build/src/cli/parse.d.ts +210 -0
  90. package/build/src/cli/parse.js +375 -0
  91. package/build/src/cli/render/akuma-tool.d.ts +11 -0
  92. package/build/src/cli/render/akuma-tool.js +68 -0
  93. package/build/src/cli/render/akuma.d.ts +6 -0
  94. package/build/src/cli/render/akuma.js +254 -0
  95. package/build/src/cli/render/board.d.ts +2 -0
  96. package/build/src/cli/render/board.js +4 -0
  97. package/build/src/cli/render/contract.d.ts +4 -0
  98. package/build/src/cli/render/contract.js +69 -0
  99. package/build/src/cli/render/kanshi.d.ts +3 -0
  100. package/build/src/cli/render/kanshi.js +204 -0
  101. package/build/src/cli/render/refusal.d.ts +2 -0
  102. package/build/src/cli/render/refusal.js +4 -0
  103. package/build/src/cli/render/settings.d.ts +3 -0
  104. package/build/src/cli/render/settings.js +30 -0
  105. package/build/src/cli/render/task.d.ts +6 -0
  106. package/build/src/cli/render/task.js +105 -0
  107. package/build/src/cli/render/terminal.d.ts +10 -0
  108. package/build/src/cli/render/terminal.js +76 -0
  109. package/build/src/cli/render/text.d.ts +3 -0
  110. package/build/src/cli/render/text.js +15 -0
  111. package/build/src/cli/result.d.ts +55 -0
  112. package/build/src/cli/selectors.d.ts +9 -0
  113. package/build/src/cli/selectors.js +66 -0
  114. package/build/src/cli/usage.d.ts +6 -0
  115. package/build/src/cli/usage.js +19 -0
  116. package/build/src/context-root.d.ts +4 -0
  117. package/build/src/context-root.js +15 -0
  118. package/build/src/coordination/durable-file.d.ts +1 -0
  119. package/build/src/coordination/durable-file.js +36 -0
  120. package/build/src/coordination/sqlite-transaction-lock.d.ts +14 -0
  121. package/build/src/coordination/sqlite-transaction-lock.js +119 -0
  122. package/build/src/core/decide.d.ts +45 -0
  123. package/build/src/core/facts/codec.d.ts +3 -0
  124. package/build/src/core/facts/codec.js +258 -0
  125. package/build/src/core/facts/eligibility.d.ts +16 -0
  126. package/build/src/core/facts/eligibility.js +75 -0
  127. package/build/src/core/facts/errors.d.ts +3 -0
  128. package/build/src/core/facts/errors.js +6 -0
  129. package/build/src/core/facts/fold.d.ts +2 -0
  130. package/build/src/core/facts/fold.js +97 -0
  131. package/build/src/core/facts/gate.d.ts +24 -0
  132. package/build/src/core/facts/gate.js +52 -0
  133. package/build/src/core/facts/observation.d.ts +12 -0
  134. package/build/src/core/facts/observation.js +23 -0
  135. package/build/src/core/facts/offer.d.ts +21 -0
  136. package/build/src/core/facts/types.d.ts +130 -0
  137. package/build/src/core/facts/types.js +66 -0
  138. package/build/src/core/subject.d.ts +21 -0
  139. package/build/src/core/subject.js +89 -0
  140. package/build/src/core/verbs/abandon.d.ts +13 -0
  141. package/build/src/core/verbs/abandon.js +17 -0
  142. package/build/src/core/verbs/amend.d.ts +14 -0
  143. package/build/src/core/verbs/amend.js +56 -0
  144. package/build/src/core/verbs/arc.d.ts +13 -0
  145. package/build/src/core/verbs/arc.js +25 -0
  146. package/build/src/core/verbs/attestation.d.ts +13 -0
  147. package/build/src/core/verbs/attestation.js +21 -0
  148. package/build/src/core/verbs/bind.d.ts +13 -0
  149. package/build/src/core/verbs/bind.js +40 -0
  150. package/build/src/core/verbs/deliver.d.ts +13 -0
  151. package/build/src/core/verbs/deliver.js +26 -0
  152. package/build/src/core/verbs/placement.d.ts +13 -0
  153. package/build/src/core/verbs/placement.js +42 -0
  154. package/build/src/dispatch/index.d.ts +31 -0
  155. package/build/src/dispatch/index.js +159 -0
  156. package/build/src/git/admission.d.ts +18 -0
  157. package/build/src/git/admission.js +116 -0
  158. package/build/src/git/delivery.d.ts +20 -0
  159. package/build/src/git/delivery.js +109 -0
  160. package/build/src/git/hooks.d.ts +34 -0
  161. package/build/src/git/hooks.js +258 -0
  162. package/build/src/git/identity.d.ts +13 -0
  163. package/build/src/git/identity.js +28 -0
  164. package/build/src/git/observe.d.ts +38 -0
  165. package/build/src/git/observe.js +227 -0
  166. package/build/src/git/reconcile.d.ts +49 -0
  167. package/build/src/git/reconcile.js +223 -0
  168. package/build/src/git/repository.d.ts +80 -0
  169. package/build/src/git/repository.js +456 -0
  170. package/build/src/git/tree.d.ts +34 -0
  171. package/build/src/git/tree.js +112 -0
  172. package/build/src/git/verification.d.ts +14 -0
  173. package/build/src/git/verification.js +56 -0
  174. package/build/src/identity/coordinates.d.ts +9 -0
  175. package/build/src/identity/coordinates.js +20 -0
  176. package/build/src/identity/normalize.d.ts +8 -0
  177. package/build/src/identity/normalize.js +45 -0
  178. package/build/src/identity/selector.d.ts +6 -0
  179. package/build/src/identity/selector.js +7 -0
  180. package/build/src/index.d.ts +4 -0
  181. package/build/src/index.js +2 -0
  182. package/build/src/kanshi/index.d.ts +5 -0
  183. package/build/src/kanshi/index.js +2 -0
  184. package/build/src/kanshi/read.d.ts +5 -0
  185. package/build/src/kanshi/read.js +100 -0
  186. package/build/src/kanshi/report.d.ts +35 -0
  187. package/build/src/kanshi/select.d.ts +8 -0
  188. package/build/src/kanshi/select.js +21 -0
  189. package/build/src/library/akuma-creation.d.ts +79 -0
  190. package/build/src/library/akuma-creation.js +151 -0
  191. package/build/src/library/configuration.d.ts +26 -0
  192. package/build/src/library/configuration.js +100 -0
  193. package/build/src/library/contract.d.ts +145 -0
  194. package/build/src/library/contract.js +325 -0
  195. package/build/src/library/input.d.ts +13 -0
  196. package/build/src/library/input.js +82 -0
  197. package/build/src/library/keiyaku.d.ts +28 -0
  198. package/build/src/library/keiyaku.js +16 -0
  199. package/build/src/library/region.d.ts +17 -0
  200. package/build/src/library/region.js +30 -0
  201. package/build/src/library/repo.d.ts +33 -0
  202. package/build/src/library/repo.js +61 -0
  203. package/build/src/markdown/diff.d.ts +1 -0
  204. package/build/src/markdown/diff.js +4 -0
  205. package/build/src/markdown/lex.d.ts +3 -0
  206. package/build/src/markdown/lex.js +221 -0
  207. package/build/src/markdown/parse.d.ts +2 -0
  208. package/build/src/markdown/parse.js +221 -0
  209. package/build/src/markdown/query.d.ts +21 -0
  210. package/build/src/markdown/query.js +51 -0
  211. package/build/src/markdown/types.d.ts +118 -0
  212. package/build/src/markdown/types.js +6 -0
  213. package/build/src/protocol/attempt.d.ts +36 -0
  214. package/build/src/protocol/attempt.js +119 -0
  215. package/build/src/protocol/bind.d.ts +25 -0
  216. package/build/src/protocol/bind.js +62 -0
  217. package/build/src/protocol/intent.d.ts +52 -0
  218. package/build/src/protocol/intent.js +129 -0
  219. package/build/src/protocol/operations.d.ts +140 -0
  220. package/build/src/protocol/operations.js +373 -0
  221. package/build/src/protocol/outcome.d.ts +18 -0
  222. package/build/src/protocol/outcome.js +15 -0
  223. package/build/src/protocol/read/audit.d.ts +25 -0
  224. package/build/src/protocol/read/audit.js +39 -0
  225. package/build/src/protocol/read/documents.d.ts +8 -0
  226. package/build/src/protocol/read/documents.js +16 -0
  227. package/build/src/protocol/read/status.d.ts +38 -0
  228. package/build/src/protocol/read/status.js +47 -0
  229. package/build/src/protocol/run.d.ts +39 -0
  230. package/build/src/protocol/run.js +36 -0
  231. package/build/src/runtime/proc/line-rpc.d.ts +37 -0
  232. package/build/src/runtime/proc/line-rpc.js +124 -0
  233. package/build/src/runtime/proc/run.d.ts +54 -0
  234. package/build/src/runtime/proc/run.js +200 -0
  235. package/build/src/settings.d.ts +45 -0
  236. package/build/src/settings.js +99 -0
  237. package/build/src/settlement/holder.d.ts +15 -0
  238. package/build/src/settlement/holder.js +113 -0
  239. package/build/src/settlement/settle.d.ts +36 -0
  240. package/build/src/settlement/settle.js +91 -0
  241. package/build/src/task/board.d.ts +65 -0
  242. package/build/src/task/board.js +155 -0
  243. package/build/src/task/compose.d.ts +25 -0
  244. package/build/src/task/compose.js +232 -0
  245. package/build/src/task/context.d.ts +4 -0
  246. package/build/src/task/context.js +56 -0
  247. package/build/src/task/document.d.ts +24 -0
  248. package/build/src/task/document.js +118 -0
  249. package/build/src/task/identity.d.ts +12 -0
  250. package/build/src/task/identity.js +47 -0
  251. package/build/src/task/index.d.ts +90 -0
  252. package/build/src/task/index.js +179 -0
  253. package/build/src/task/operations.d.ts +115 -0
  254. package/build/src/task/operations.js +194 -0
  255. package/build/src/task/store.d.ts +22 -0
  256. package/build/src/task/store.js +114 -0
  257. package/build/src/verification/declaration.d.ts +22 -0
  258. package/build/src/verification/declaration.js +14 -0
  259. package/build/src/verification/producer.d.ts +23 -0
  260. package/build/src/verification/producer.js +54 -0
  261. package/package.json +62 -44
  262. package/build/.tsbuildinfo +0 -1
  263. package/build/agents/call-terms.js +0 -32
  264. package/build/agents/harness/activity-values.js +0 -70
  265. package/build/agents/harness/control-types.js +0 -18
  266. package/build/agents/harness/event-channel.js +0 -213
  267. package/build/agents/harness/event-persistence.js +0 -220
  268. package/build/agents/harness/events.js +0 -48
  269. package/build/agents/harness/execution-handle.js +0 -172
  270. package/build/agents/harness/index.js +0 -11
  271. package/build/agents/harness/outcome-error.js +0 -81
  272. package/build/agents/harness/outcome.js +0 -220
  273. package/build/agents/harness/projection.js +0 -369
  274. package/build/agents/harness/provider-adapter.js +0 -58
  275. package/build/agents/harness/router.js +0 -30
  276. package/build/agents/harness/runtime.js +0 -85
  277. package/build/agents/harness/session.js +0 -15
  278. package/build/agents/launch-snapshot/model.js +0 -127
  279. package/build/agents/launch-snapshot/parse-helpers.js +0 -114
  280. package/build/agents/launch-snapshot/resolve.js +0 -46
  281. package/build/agents/opencode-sdk.js +0 -159
  282. package/build/agents/providers/claude-agent-sdk/adapter.js +0 -396
  283. package/build/agents/providers/claude-agent-sdk/events.js +0 -218
  284. package/build/agents/providers/claude-agent-sdk/registration.js +0 -225
  285. package/build/agents/providers/claude-agent-sdk/session-schema.js +0 -2
  286. package/build/agents/providers/claude-agent-sdk/session.js +0 -172
  287. package/build/agents/providers/codex-app-server/adapter.js +0 -387
  288. package/build/agents/providers/codex-app-server/events.js +0 -492
  289. package/build/agents/providers/codex-app-server/identity.js +0 -1
  290. package/build/agents/providers/codex-app-server/policy.js +0 -29
  291. package/build/agents/providers/codex-app-server/registration.js +0 -259
  292. package/build/agents/providers/codex-app-server/session-schema.js +0 -6
  293. package/build/agents/providers/codex-app-server/session.js +0 -273
  294. package/build/agents/providers/event-type-tail.js +0 -16
  295. package/build/agents/providers/opencode-sdk/adapter.js +0 -402
  296. package/build/agents/providers/opencode-sdk/events.js +0 -380
  297. package/build/agents/providers/opencode-sdk/registration.js +0 -146
  298. package/build/agents/providers/opencode-sdk/session-schema.js +0 -2
  299. package/build/agents/providers/opencode-sdk/session.js +0 -187
  300. package/build/agents/providers/pi/adapter.js +0 -285
  301. package/build/agents/providers/pi/checkpoint.js +0 -49
  302. package/build/agents/providers/pi/events.js +0 -285
  303. package/build/agents/providers/pi/registration.js +0 -160
  304. package/build/agents/providers/pi/session-schema.js +0 -6
  305. package/build/agents/providers/registration.js +0 -7
  306. package/build/agents/providers/registry.js +0 -76
  307. package/build/agents/selector.js +0 -120
  308. package/build/agents/session.js +0 -29
  309. package/build/agents/string-tail-buffer.js +0 -44
  310. package/build/agents/types.js +0 -30
  311. package/build/artifact-directories.js +0 -22
  312. package/build/cli/commands/akuma/akuma/handler.js +0 -5
  313. package/build/cli/commands/akuma/akuma/meta.js +0 -17
  314. package/build/cli/commands/akuma/catalog.js +0 -10
  315. package/build/cli/commands/akuma/list/handler.js +0 -15
  316. package/build/cli/commands/akuma/list/meta-list.js +0 -12
  317. package/build/cli/commands/akuma/list/meta-ls.js +0 -9
  318. package/build/cli/commands/akuma/show/handler.js +0 -27
  319. package/build/cli/commands/akuma/show/meta.js +0 -8
  320. package/build/cli/commands/akuma.js +0 -186
  321. package/build/cli/commands/contract/amend/handler.js +0 -17
  322. package/build/cli/commands/contract/amend/meta.js +0 -13
  323. package/build/cli/commands/contract/arc/handler.js +0 -16
  324. package/build/cli/commands/contract/arc/meta.js +0 -28
  325. package/build/cli/commands/contract/audit/handler.js +0 -42
  326. package/build/cli/commands/contract/audit/meta.js +0 -17
  327. package/build/cli/commands/contract/bind/handler.js +0 -39
  328. package/build/cli/commands/contract/bind/meta.js +0 -96
  329. package/build/cli/commands/contract/catalog.js +0 -18
  330. package/build/cli/commands/contract/forfeit/handler.js +0 -17
  331. package/build/cli/commands/contract/forfeit/meta.js +0 -12
  332. package/build/cli/commands/contract/log/handler.js +0 -12
  333. package/build/cli/commands/contract/log/meta.js +0 -12
  334. package/build/cli/commands/contract/petition/handler.js +0 -64
  335. package/build/cli/commands/contract/petition/meta.js +0 -23
  336. package/build/cli/commands/contract/renew/handler.js +0 -65
  337. package/build/cli/commands/contract/renew/meta.js +0 -19
  338. package/build/cli/commands/metadata.js +0 -68
  339. package/build/cli/commands/projection/call/handler.js +0 -43
  340. package/build/cli/commands/projection/call/meta.js +0 -12
  341. package/build/cli/commands/projection/catalog.js +0 -16
  342. package/build/cli/commands/projection/fork/handler.js +0 -61
  343. package/build/cli/commands/projection/fork/meta.js +0 -12
  344. package/build/cli/commands/projection/history/handler.js +0 -65
  345. package/build/cli/commands/projection/history/meta.js +0 -9
  346. package/build/cli/commands/projection/kill/handler.js +0 -20
  347. package/build/cli/commands/projection/kill/meta.js +0 -11
  348. package/build/cli/commands/projection/shared.js +0 -27
  349. package/build/cli/commands/projection/status/handler.js +0 -42
  350. package/build/cli/commands/projection/status/meta.js +0 -20
  351. package/build/cli/commands/projection/tell/handler.js +0 -32
  352. package/build/cli/commands/projection/tell/meta.js +0 -12
  353. package/build/cli/commands/projection/wait/handler.js +0 -80
  354. package/build/cli/commands/projection/wait/meta.js +0 -16
  355. package/build/cli/commands/registry.js +0 -48
  356. package/build/cli/commands/shared.js +0 -74
  357. package/build/cli/commands/skills/catalog.js +0 -6
  358. package/build/cli/commands/skills/install/handler.js +0 -7
  359. package/build/cli/commands/skills/install/meta.js +0 -9
  360. package/build/cli/commands/skills/skills/handler.js +0 -4
  361. package/build/cli/commands/skills/skills/meta.js +0 -10
  362. package/build/cli/commands/system/catalog.js +0 -10
  363. package/build/cli/commands/system/completion/handler.js +0 -10
  364. package/build/cli/commands/system/completion/meta.js +0 -9
  365. package/build/cli/commands/system/dump-env/handler.js +0 -3
  366. package/build/cli/commands/system/dump-env/meta.js +0 -10
  367. package/build/cli/commands/system/guide/handler.js +0 -4
  368. package/build/cli/commands/system/guide/meta.js +0 -9
  369. package/build/cli/commands/task/add/handler.js +0 -38
  370. package/build/cli/commands/task/add/meta.js +0 -31
  371. package/build/cli/commands/task/catalog.js +0 -32
  372. package/build/cli/commands/task/compose/handler.js +0 -18
  373. package/build/cli/commands/task/compose/meta.js +0 -10
  374. package/build/cli/commands/task/doctor/handler.js +0 -3
  375. package/build/cli/commands/task/doctor/meta.js +0 -8
  376. package/build/cli/commands/task/done/handler.js +0 -10
  377. package/build/cli/commands/task/done/meta.js +0 -8
  378. package/build/cli/commands/task/drop/handler.js +0 -8
  379. package/build/cli/commands/task/drop/meta.js +0 -11
  380. package/build/cli/commands/task/hold/handler.js +0 -3
  381. package/build/cli/commands/task/hold/meta.js +0 -8
  382. package/build/cli/commands/task/log/handler.js +0 -12
  383. package/build/cli/commands/task/log/meta.js +0 -8
  384. package/build/cli/commands/task/ls/handler.js +0 -17
  385. package/build/cli/commands/task/ls/meta.js +0 -8
  386. package/build/cli/commands/task/note/handler.js +0 -6
  387. package/build/cli/commands/task/note/meta.js +0 -11
  388. package/build/cli/commands/task/resume/handler.js +0 -3
  389. package/build/cli/commands/task/resume/meta.js +0 -8
  390. package/build/cli/commands/task/shared.js +0 -181
  391. package/build/cli/commands/task/show/handler.js +0 -13
  392. package/build/cli/commands/task/show/meta.js +0 -8
  393. package/build/cli/commands/task/start/handler.js +0 -3
  394. package/build/cli/commands/task/start/meta.js +0 -8
  395. package/build/cli/commands/task/stop/handler.js +0 -10
  396. package/build/cli/commands/task/stop/meta.js +0 -8
  397. package/build/cli/commands/task/task/handler.js +0 -5
  398. package/build/cli/commands/task/task/meta.js +0 -11
  399. package/build/cli/commands/task/update/handler.js +0 -21
  400. package/build/cli/commands/task/update/meta.js +0 -12
  401. package/build/cli/commands/verification/handler.js +0 -43
  402. package/build/cli/commands/verification/meta.js +0 -13
  403. package/build/cli/completion.js +0 -91
  404. package/build/cli/draft-artifact.js +0 -50
  405. package/build/cli/flags.js +0 -321
  406. package/build/cli/help.js +0 -99
  407. package/build/cli/index.js +0 -333
  408. package/build/cli/missing-subcommand.js +0 -7
  409. package/build/cli/output-stream-error-policy.js +0 -31
  410. package/build/cli/parse-flags.js +0 -301
  411. package/build/cli/parse-metadata.js +0 -132
  412. package/build/cli/parse-selectors.js +0 -83
  413. package/build/cli/parse.js +0 -250
  414. package/build/cli/projection-address.js +0 -105
  415. package/build/cli/render/address.js +0 -101
  416. package/build/cli/render/amendment-warning.js +0 -8
  417. package/build/cli/render/arc.js +0 -88
  418. package/build/cli/render/audit.js +0 -440
  419. package/build/cli/render/call.js +0 -70
  420. package/build/cli/render/compact-text.js +0 -3
  421. package/build/cli/render/errors.js +0 -101
  422. package/build/cli/render/format.js +0 -226
  423. package/build/cli/render/kanshi.js +0 -300
  424. package/build/cli/render/kill.js +0 -9
  425. package/build/cli/render/lifecycle.js +0 -56
  426. package/build/cli/render/line-width.js +0 -103
  427. package/build/cli/render/misc.js +0 -84
  428. package/build/cli/render/path-prefix-compaction.js +0 -131
  429. package/build/cli/render/petition.js +0 -85
  430. package/build/cli/render/projection-activity.js +0 -332
  431. package/build/cli/render/projection-history.js +0 -77
  432. package/build/cli/render/response-style.js +0 -27
  433. package/build/cli/render/shared.js +0 -232
  434. package/build/cli/render/skills.js +0 -10
  435. package/build/cli/render/status-indicator.js +0 -47
  436. package/build/cli/render/status.js +0 -243
  437. package/build/cli/render/success-response.js +0 -95
  438. package/build/cli/render/task.js +0 -175
  439. package/build/cli/render/tell.js +0 -11
  440. package/build/cli/render/terminal-failure.js +0 -65
  441. package/build/cli/render/tool-command-normalization.js +0 -137
  442. package/build/cli/render/tool-ledger-rollup.js +0 -74
  443. package/build/cli/render/tool-presentation.js +0 -98
  444. package/build/cli/render/types.js +0 -2
  445. package/build/cli/render/verification.js +0 -23
  446. package/build/cli/render/wait.js +0 -343
  447. package/build/cli/skills-install.js +0 -348
  448. package/build/cli/subagent-guard.js +0 -25
  449. package/build/cli/types.js +0 -2
  450. package/build/config/akuma-loader.js +0 -240
  451. package/build/config/env-keys.js +0 -57
  452. package/build/config/env.js +0 -304
  453. package/build/config/provider-policy-ownership.js +0 -10
  454. package/build/config/settings/disease.js +0 -33
  455. package/build/config/settings/knobs.js +0 -14
  456. package/build/config/settings/loader.js +0 -275
  457. package/build/config/settings/provider-instance-fields.js +0 -51
  458. package/build/config/settings/schema.js +0 -113
  459. package/build/core/address-carrier.js +0 -89
  460. package/build/core/addressing.js +0 -407
  461. package/build/core/amend.js +0 -321
  462. package/build/core/amendment-criteria.js +0 -17
  463. package/build/core/amendment-warning.js +0 -10
  464. package/build/core/arc.js +0 -293
  465. package/build/core/atomic-publish.js +0 -64
  466. package/build/core/audit/candidate.js +0 -141
  467. package/build/core/audit/coordinates.js +0 -230
  468. package/build/core/audit/evidence.js +0 -156
  469. package/build/core/audit/facade.js +0 -65
  470. package/build/core/audit/readiness.js +0 -4
  471. package/build/core/audit/report.js +0 -38
  472. package/build/core/audit.js +0 -1
  473. package/build/core/bind-reconciliation.js +0 -409
  474. package/build/core/bind-workspace.js +0 -115
  475. package/build/core/bind.js +0 -503
  476. package/build/core/call/call.js +0 -235
  477. package/build/core/call/context.js +0 -210
  478. package/build/core/call/execution.js +0 -255
  479. package/build/core/call/prompt.js +0 -27
  480. package/build/core/call/reference.js +0 -24
  481. package/build/core/call-persist.js +0 -76
  482. package/build/core/command-markdown.js +0 -45
  483. package/build/core/context.js +0 -104
  484. package/build/core/contract-carrier-runtime.js +0 -512
  485. package/build/core/contract-carrier.js +0 -353
  486. package/build/core/contract-view.js +0 -319
  487. package/build/core/contract.js +0 -19
  488. package/build/core/derived-replay.js +0 -340
  489. package/build/core/draft.js +0 -400
  490. package/build/core/execution-coordinate.js +0 -46
  491. package/build/core/execution-pact.js +0 -126
  492. package/build/core/forfeit.js +0 -132
  493. package/build/core/hints.js +0 -34
  494. package/build/core/identifier-slug.js +0 -116
  495. package/build/core/ids.js +0 -90
  496. package/build/core/lifecycle-history.js +0 -48
  497. package/build/core/lifecycle-recovery.js +0 -122
  498. package/build/core/lifecycle-runner.js +0 -377
  499. package/build/core/log.js +0 -50
  500. package/build/core/markdown/lex.js +0 -274
  501. package/build/core/markdown/parser.js +0 -260
  502. package/build/core/markdown/render.js +0 -68
  503. package/build/core/markdown/sections.js +0 -80
  504. package/build/core/markdown/titles.js +0 -9
  505. package/build/core/markdown/types.js +0 -6
  506. package/build/core/outcome-base.js +0 -185
  507. package/build/core/places.js +0 -175
  508. package/build/core/projection/akuma-name.js +0 -43
  509. package/build/core/projection/generation/database.js +0 -473
  510. package/build/core/projection/generation/identity.js +0 -84
  511. package/build/core/projection/generation/ledger.js +0 -91
  512. package/build/core/projection/generation/model.js +0 -261
  513. package/build/core/projection/generation/projection-generation-continuation.js +0 -84
  514. package/build/core/projection/generation/projection-generation-doorbell.js +0 -88
  515. package/build/core/projection/generation/projection-generation-execution.js +0 -241
  516. package/build/core/projection/generation/projection-generation-identity.js +0 -21
  517. package/build/core/projection/generation/projection-generation-launcher.js +0 -154
  518. package/build/core/projection/generation/projection-generation-process.js +0 -47
  519. package/build/core/projection/generation/projection-generation-runner.js +0 -489
  520. package/build/core/projection/generation/projection-generation-runtime.js +0 -46
  521. package/build/core/projection/generation/protocol.js +0 -68
  522. package/build/core/projection/generation/store.js +0 -108
  523. package/build/core/projection/generation/transitions.js +0 -463
  524. package/build/core/projection/heart.js +0 -9
  525. package/build/core/projection/index.js +0 -28
  526. package/build/core/projection/projection-activity.js +0 -273
  527. package/build/core/projection/projection-alias.js +0 -131
  528. package/build/core/projection/projection-coordinate.js +0 -61
  529. package/build/core/projection/projection-core.js +0 -127
  530. package/build/core/projection/projection-execution-observer.js +0 -270
  531. package/build/core/projection/projection-history.js +0 -474
  532. package/build/core/projection/projection-identity.js +0 -11
  533. package/build/core/projection/projection-kill.js +0 -112
  534. package/build/core/projection/projection-life-observer.js +0 -101
  535. package/build/core/projection/projection-mint.js +0 -170
  536. package/build/core/projection/projection-status-observation.js +0 -434
  537. package/build/core/projection/projection-status.js +0 -442
  538. package/build/core/projection/projection-terminal-failure.js +0 -111
  539. package/build/core/projection/projection-wait.js +0 -337
  540. package/build/core/projection/projection-wake.js +0 -298
  541. package/build/core/projection/tell/launch-store.js +0 -244
  542. package/build/core/projection/tell/model.js +0 -98
  543. package/build/core/projection/tell/store.js +0 -245
  544. package/build/core/provider-loader-ports.js +0 -4
  545. package/build/core/registry.js +0 -100
  546. package/build/core/renew-build.js +0 -554
  547. package/build/core/renew-plan.js +0 -264
  548. package/build/core/renew-rewrite.js +0 -118
  549. package/build/core/renew.js +0 -345
  550. package/build/core/repository-ledger/accepted-fold-read.js +0 -22
  551. package/build/core/repository-ledger/accepted-tail.js +0 -116
  552. package/build/core/repository-ledger/admission.js +0 -38
  553. package/build/core/repository-ledger/authoritative-transaction.js +0 -1
  554. package/build/core/repository-ledger/claim-evidence.js +0 -147
  555. package/build/core/repository-ledger/codec.js +0 -303
  556. package/build/core/repository-ledger/current-state-store.js +0 -968
  557. package/build/core/repository-ledger/fold-repository.js +0 -374
  558. package/build/core/repository-ledger/fold.js +0 -248
  559. package/build/core/repository-ledger/git-object-store.js +0 -243
  560. package/build/core/repository-ledger/history-read.js +0 -15
  561. package/build/core/repository-ledger/identity.js +0 -60
  562. package/build/core/repository-ledger/incremental-read.js +0 -153
  563. package/build/core/repository-ledger/index.js +0 -15
  564. package/build/core/repository-ledger/inventory-plan.js +0 -75
  565. package/build/core/repository-ledger/inventory.js +0 -310
  566. package/build/core/repository-ledger/publication-admission.js +0 -125
  567. package/build/core/repository-ledger/publication.js +0 -353
  568. package/build/core/repository-ledger/read-model.js +0 -517
  569. package/build/core/repository-ledger/transaction-membership.js +0 -78
  570. package/build/core/repository-ledger/traversal.js +0 -404
  571. package/build/core/repository-ledger/write-transaction.js +0 -346
  572. package/build/core/response-artifact-catalog-sqlite.js +0 -112
  573. package/build/core/response-artifact-catalog.js +0 -7
  574. package/build/core/response-artifact-id.js +0 -5
  575. package/build/core/run-control/connection-bound-close.js +0 -41
  576. package/build/core/run-control/detached-lease-bootstrap.js +0 -208
  577. package/build/core/run-control/detached-process.js +0 -14
  578. package/build/core/run-control/index.js +0 -6
  579. package/build/core/run-control/process-tree.js +0 -139
  580. package/build/core/run-control/runner-lease.js +0 -172
  581. package/build/core/run-control/sqlite-process-lifetime-lock.js +0 -174
  582. package/build/core/scope.js +0 -416
  583. package/build/core/seal.js +0 -364
  584. package/build/core/settlement/claim-delivery.js +0 -82
  585. package/build/core/settlement/claim.js +0 -258
  586. package/build/core/settlement/index.js +0 -19
  587. package/build/core/settlement/petition-claim-gates.js +0 -247
  588. package/build/core/settlement/petition-forfeit.js +0 -46
  589. package/build/core/settlement/petition-head-guard.js +0 -12
  590. package/build/core/settlement/petition-io.js +0 -1
  591. package/build/core/settlement/petition-preview.js +0 -125
  592. package/build/core/settlement/petition-window.js +0 -50
  593. package/build/core/settlement/petition.js +0 -315
  594. package/build/core/settlement/queue-read-model.js +0 -120
  595. package/build/core/settlement/queue-seat-allocation.js +0 -65
  596. package/build/core/settlement/queue.js +0 -6
  597. package/build/core/settlement/settlement.js +0 -385
  598. package/build/core/settlement/verdict.js +0 -126
  599. package/build/core/settlement/verification.js +0 -554
  600. package/build/core/status/board.js +0 -455
  601. package/build/core/status/drift.js +0 -113
  602. package/build/core/status/lifecycle.js +0 -11
  603. package/build/core/stored-agent-event.js +0 -129
  604. package/build/core/structured-query.js +0 -23
  605. package/build/core/target-ref.js +0 -10
  606. package/build/core/task/board.js +0 -248
  607. package/build/core/task/commands.js +0 -401
  608. package/build/core/task/compose.js +0 -328
  609. package/build/core/task/coordinate.js +0 -56
  610. package/build/core/task/document.js +0 -273
  611. package/build/core/task/index.js +0 -16
  612. package/build/core/task/model.js +0 -8
  613. package/build/core/task/query.js +0 -204
  614. package/build/core/task/settlement-git.js +0 -423
  615. package/build/core/task/settlement-policy.js +0 -137
  616. package/build/core/task/source-board.js +0 -104
  617. package/build/core/task/source-model.js +0 -1
  618. package/build/core/task/task-bind-preparation.js +0 -243
  619. package/build/core/task/task-contract.js +0 -371
  620. package/build/core/task/task-doctor.js +0 -14
  621. package/build/core/task/task-file-transaction.js +0 -171
  622. package/build/core/task/task-git-actor.js +0 -33
  623. package/build/core/task/task-git-runtime.js +0 -97
  624. package/build/core/task/task-git-store.js +0 -400
  625. package/build/core/task/task-repository.js +0 -1
  626. package/build/core/task/task-store-repository.js +0 -97
  627. package/build/core/task/task-store.js +0 -1
  628. package/build/core/task/task-worktree.js +0 -25
  629. package/build/core/task/task.js +0 -7
  630. package/build/core/task/tree.js +0 -37
  631. package/build/core/task/validation.js +0 -48
  632. package/build/core/transcripts.js +0 -485
  633. package/build/core/validation.js +0 -17
  634. package/build/core/verification-declaration.js +0 -95
  635. package/build/core/worktree-bootstrap.js +0 -195
  636. package/build/core/worktree-path.js +0 -371
  637. package/build/errno.js +0 -3
  638. package/build/flow-error.js +0 -191
  639. package/build/fs/durability.js +0 -27
  640. package/build/fs/path-coordinate.js +0 -16
  641. package/build/generated/version.js +0 -3
  642. package/build/git/branches.js +0 -84
  643. package/build/git/commits.js +0 -151
  644. package/build/git/core.js +0 -86
  645. package/build/git/diff/parsers.js +0 -181
  646. package/build/git/diff/pathspec.js +0 -3
  647. package/build/git/diff/preview.js +0 -38
  648. package/build/git/diff/read.js +0 -105
  649. package/build/git/diff/structured.js +0 -127
  650. package/build/git/diff/types.js +0 -1
  651. package/build/git/path-coordinate.js +0 -17
  652. package/build/git/process.js +0 -229
  653. package/build/git/refs.js +0 -250
  654. package/build/git/staging.js +0 -79
  655. package/build/git/streaming-batch.js +0 -354
  656. package/build/git/worktree.js +0 -175
  657. package/build/index.js +0 -67
  658. package/build/keiyaku-constants.js +0 -2
  659. package/build/keiyaku.js +0 -30
  660. package/build/telemetry/debug-log.js +0 -40
  661. package/build/telemetry/logger.js +0 -48
  662. package/skills/keiyaku/SKILL.md +0 -46
  663. package/skills/keiyaku-akuma/SKILL.md +0 -97
  664. package/skills/keiyaku-task/SKILL.md +0 -118
  665. package/skills/keiyaku-workflow/SKILL.md +0 -191
  666. /package/build/{agents/launch-snapshot → src/body}/types.js +0 -0
  667. /package/build/{agents/providers/claude-agent-sdk/terms.js → src/cli/result.js} +0 -0
  668. /package/build/{agents/providers/codex-app-server/terms.js → src/core/decide.js} +0 -0
  669. /package/build/{agents/providers/opencode-sdk/terms.js → src/core/facts/offer.js} +0 -0
  670. /package/build/{agents/providers/pi/terms.js → src/kanshi/report.js} +0 -0
@@ -0,0 +1,47 @@
1
+ import { observeGit, observeContract } from "../../git/observe.js";
2
+ import { deliveryWorktreePath } from "../../git/reconcile.js";
3
+ import { gateReports } from "../../core/facts/gate.js";
4
+ function phaseFor(state) {
5
+ if (state.terminal?.kind === "claimed")
6
+ return "claimed";
7
+ if (state.terminal?.kind === "abandoned")
8
+ return "abandoned";
9
+ if (state.delivery !== null)
10
+ return "pending-delivery";
11
+ if (state.bound !== null)
12
+ return "bound";
13
+ return "waiting";
14
+ }
15
+ function rowFor(repository, state) {
16
+ const workspace = state.coordinates.workspace;
17
+ const gates = gateReports(state);
18
+ return {
19
+ id: state.id,
20
+ phase: phaseFor(state),
21
+ disposition: state.terminal === null ? "active" : "terminal",
22
+ workspace,
23
+ worktreePath: workspace === "worktree" ? deliveryWorktreePath(repository, state.id) : null,
24
+ target: state.coordinates.target ?? null,
25
+ candidate: state.delivery?.data.candidate ?? null,
26
+ gates: {
27
+ reports: gates.reports.map((report) => ({ gate: report.gate, current: report.current })),
28
+ satisfied: gates.satisfied,
29
+ },
30
+ };
31
+ }
32
+ /** Build the Contract board from one immutable git observation. */
33
+ export function readContractBoard(repository) {
34
+ const observed = observeGit(repository);
35
+ const rows = [];
36
+ for (const value of observed.contracts.values()) {
37
+ if (value.state === null)
38
+ continue;
39
+ rows.push(rowFor(repository, value.state));
40
+ }
41
+ return { root: repository.primaryWorktree, rows };
42
+ }
43
+ /** Observe one Contract without enumerating the Contract world. */
44
+ export function readContractObservation(repository, id) {
45
+ const state = observeContract(repository, id).state;
46
+ return state === null ? { kind: "missing", id } : { kind: "present", row: rowFor(repository, state) };
47
+ }
@@ -0,0 +1,39 @@
1
+ import { type GitDecisionObservation } from "../git/observe.js";
2
+ import type { GitRepository } from "../git/repository.js";
3
+ import type { AttemptContext, DecideInput, OfferDecision } from "../core/decide.js";
4
+ import type { Offer, TreeUpdate } from "../core/facts/offer.js";
5
+ import { type ContractId } from "../core/facts/types.js";
6
+ import { type AcceptedAdmission, type AttemptTerminal } from "./attempt.js";
7
+ export type ProtocolTerminal = Readonly<{
8
+ kind: "exhausted";
9
+ }> | AttemptTerminal;
10
+ export type ProtocolResult<Refusal> = AcceptedAdmission | Readonly<{
11
+ kind: "refused";
12
+ refusal: Refusal;
13
+ }> | ProtocolTerminal;
14
+ export type CompanionDecorator = (input: Readonly<{
15
+ repository: GitRepository;
16
+ observation: GitDecisionObservation;
17
+ contractId: ContractId;
18
+ offer: Offer;
19
+ }>) => readonly TreeUpdate[];
20
+ type RunProtocolInput<Input extends Readonly<{
21
+ contractId: ContractId;
22
+ }>, Refusal> = Readonly<{
23
+ input: Input;
24
+ repository: GitRepository;
25
+ contracts: readonly ContractId[];
26
+ attempts: readonly AttemptContext[];
27
+ decide: (input: DecideInput<Input>) => OfferDecision<Refusal>;
28
+ /** Override the targeted observer only for intents that need a full snapshot. */
29
+ observe?: (repository: GitRepository, contracts: readonly ContractId[]) => GitDecisionObservation;
30
+ /** Mint verb-owned entries from the exact size of this attempt's observation. */
31
+ extendAttempt?: (attempt: AttemptContext, observedContractCount: number) => AttemptContext;
32
+ /** Add opaque companions from the exact immutable observation for this attempt. */
33
+ decorateOffer?: CompanionDecorator;
34
+ }>;
35
+ /** Run bounded, verb-neutral attempts and return one real admission on acceptance. */
36
+ export declare function runProtocol<Input extends Readonly<{
37
+ contractId: ContractId;
38
+ }>, Refusal>(input: RunProtocolInput<Input, Refusal>): ProtocolResult<Refusal>;
39
+ export {};
@@ -0,0 +1,36 @@
1
+ import { observeContractsForAdmission } from "../git/observe.js";
2
+ import { admitDecidedOffer } from "./attempt.js";
3
+ /** Run bounded, verb-neutral attempts and return one real admission on acceptance. */
4
+ export function runProtocol(input) {
5
+ const attempts = input.attempts;
6
+ const contracts = input.contracts;
7
+ const observe = input.observe ?? observeContractsForAdmission;
8
+ for (let index = 0; index < attempts.length; index += 1) {
9
+ const baseAttempt = attempts[index];
10
+ const decisionObservation = observe(input.repository, contracts);
11
+ const observation = decisionObservation.decision;
12
+ const attempt = input.extendAttempt === undefined
13
+ ? baseAttempt
14
+ : input.extendAttempt(baseAttempt, observation.size);
15
+ const decision = input.decide({ input: input.input, attempt, observation });
16
+ if (decision.kind === "refused")
17
+ return { kind: "refused", refusal: decision.refusal };
18
+ const companions = input.decorateOffer === undefined
19
+ ? []
20
+ : input.decorateOffer({
21
+ repository: input.repository,
22
+ observation: decisionObservation,
23
+ contractId: input.input.contractId,
24
+ offer: decision.offer,
25
+ });
26
+ const offer = companions.length === 0
27
+ ? decision.offer
28
+ : { ...decision.offer, companions: [...(decision.offer.companions ?? []), ...companions] };
29
+ const result = admitDecidedOffer(input.repository, decisionObservation, attempt, offer, input.input.contractId);
30
+ if (result.kind === "accepted" || result.kind === "publication-failed")
31
+ return result;
32
+ if (result.kind === "collision" && index + 1 === attempts.length)
33
+ return result;
34
+ }
35
+ return { kind: "exhausted" };
36
+ }
@@ -0,0 +1,37 @@
1
+ export type LineRpcNotification = Readonly<{
2
+ method: string;
3
+ params?: Readonly<Record<string, unknown>>;
4
+ }>;
5
+ export type LineRpcServerRequest = LineRpcNotification & Readonly<{
6
+ id: number | string;
7
+ }>;
8
+ export type LineRpcExit = Readonly<{
9
+ code: number | null;
10
+ signal: NodeJS.Signals | null;
11
+ stderr: string;
12
+ }>;
13
+ export declare class LineRpcProcess {
14
+ private readonly child;
15
+ private readonly pending;
16
+ private readonly notifications;
17
+ private readonly serverRequests;
18
+ private readonly exited;
19
+ private nextId;
20
+ private stdout;
21
+ private stderr;
22
+ private closed;
23
+ constructor(input: Readonly<{
24
+ argv: readonly [string, ...string[]];
25
+ cwd: string;
26
+ env?: NodeJS.ProcessEnv;
27
+ }>);
28
+ onNotification(listener: (value: LineRpcNotification) => void): void;
29
+ onServerRequest(listener: (value: LineRpcServerRequest) => void): void;
30
+ onExit(listener: (value: LineRpcExit) => void): void;
31
+ private consume;
32
+ private receive;
33
+ private fail;
34
+ request(method: string, params?: Readonly<Record<string, unknown>>): Promise<unknown>;
35
+ notify(method: string): void;
36
+ close(force?: boolean): Promise<void>;
37
+ }
@@ -0,0 +1,124 @@
1
+ import { spawn } from "node:child_process";
2
+ import { terminateProcessTree } from "./run.js";
3
+ function object(value) {
4
+ return value !== null && typeof value === "object" && !Array.isArray(value)
5
+ ? value
6
+ : undefined;
7
+ }
8
+ function text(value) {
9
+ return typeof value === "string" && value.trim().length > 0 ? value : undefined;
10
+ }
11
+ export class LineRpcProcess {
12
+ child;
13
+ pending = new Map();
14
+ notifications = new Set();
15
+ serverRequests = new Set();
16
+ exited;
17
+ nextId = 1;
18
+ stdout = "";
19
+ stderr = "";
20
+ closed = false;
21
+ constructor(input) {
22
+ this.child = spawn(input.argv[0], input.argv.slice(1), {
23
+ cwd: input.cwd,
24
+ env: input.env ?? process.env,
25
+ detached: true,
26
+ stdio: ["pipe", "pipe", "pipe"],
27
+ windowsHide: true,
28
+ });
29
+ this.child.stdout.setEncoding("utf8");
30
+ this.child.stderr.setEncoding("utf8");
31
+ this.child.stdout.on("data", (chunk) => this.consume(chunk));
32
+ this.child.stderr.on("data", (chunk) => { this.stderr = `${this.stderr}${chunk}`.slice(-4_000); });
33
+ this.child.on("error", (error) => this.fail(error));
34
+ this.exited = new Promise((resolve) => this.child.once("close", (code, signal) => {
35
+ this.closed = true;
36
+ this.fail(new Error(`line RPC process exited${code === null ? "" : ` with code ${code}`}`));
37
+ resolve({ code, signal, stderr: this.stderr.trim() });
38
+ }));
39
+ }
40
+ onNotification(listener) { this.notifications.add(listener); }
41
+ onServerRequest(listener) { this.serverRequests.add(listener); }
42
+ onExit(listener) { void this.exited.then(listener); }
43
+ consume(chunk) {
44
+ this.stdout += chunk;
45
+ for (;;) {
46
+ const newline = this.stdout.indexOf("\n");
47
+ if (newline < 0)
48
+ return;
49
+ const line = this.stdout.slice(0, newline).trim();
50
+ this.stdout = this.stdout.slice(newline + 1);
51
+ if (line.length > 0)
52
+ this.receive(line);
53
+ }
54
+ }
55
+ receive(line) {
56
+ let decoded;
57
+ try {
58
+ decoded = JSON.parse(line);
59
+ }
60
+ catch {
61
+ return;
62
+ }
63
+ const message = object(decoded);
64
+ if (message === undefined)
65
+ return;
66
+ if (typeof message.id === "number" && ("result" in message || "error" in message)) {
67
+ const pending = this.pending.get(message.id);
68
+ if (pending === undefined)
69
+ return;
70
+ this.pending.delete(message.id);
71
+ const error = object(message.error);
72
+ if (error !== undefined)
73
+ pending.reject(new Error(text(error.message) ?? "line RPC error"));
74
+ else
75
+ pending.resolve(message.result);
76
+ return;
77
+ }
78
+ const method = text(message.method);
79
+ if (method === undefined)
80
+ return;
81
+ const params = object(message.params);
82
+ if (typeof message.id === "number" || typeof message.id === "string") {
83
+ for (const listener of this.serverRequests)
84
+ listener({ id: message.id, method, ...(params === undefined ? {} : { params }) });
85
+ return;
86
+ }
87
+ for (const listener of this.notifications)
88
+ listener({ method, ...(params === undefined ? {} : { params }) });
89
+ }
90
+ fail(error) {
91
+ for (const pending of this.pending.values())
92
+ pending.reject(error);
93
+ this.pending.clear();
94
+ }
95
+ request(method, params) {
96
+ if (this.closed)
97
+ return Promise.reject(new Error("line RPC process is closed"));
98
+ const id = this.nextId++;
99
+ return new Promise((resolve, reject) => {
100
+ this.pending.set(id, { resolve, reject });
101
+ this.child.stdin.write(`${JSON.stringify({ id, method, ...(params === undefined ? {} : { params }) })}\n`, (error) => {
102
+ if (error === null || error === undefined)
103
+ return;
104
+ this.pending.delete(id);
105
+ reject(error);
106
+ });
107
+ });
108
+ }
109
+ notify(method) {
110
+ if (!this.closed)
111
+ this.child.stdin.write(`${JSON.stringify({ method })}\n`);
112
+ }
113
+ async close(force = false) {
114
+ if (this.closed) {
115
+ await this.exited;
116
+ return;
117
+ }
118
+ this.closed = true;
119
+ this.fail(new Error("line RPC process is closed"));
120
+ this.child.stdin.end();
121
+ await terminateProcessTree(this.child.pid, force);
122
+ await this.exited;
123
+ }
124
+ }
@@ -0,0 +1,54 @@
1
+ type ProcessLaunch = Readonly<{
2
+ readonly argv: readonly string[];
3
+ readonly cwd?: string;
4
+ readonly env?: NodeJS.ProcessEnv;
5
+ }>;
6
+ export type ProcessInput = ProcessLaunch & Readonly<{
7
+ readonly timeoutMs: number;
8
+ }>;
9
+ type ProcessTerminal = Readonly<{
10
+ readonly kind: "terminal";
11
+ readonly code: number;
12
+ readonly stdout: string;
13
+ readonly stderr: string;
14
+ readonly truncated: boolean;
15
+ }>;
16
+ type ProcessTimeout = Readonly<{
17
+ readonly kind: "timeout";
18
+ }>;
19
+ type ProcessSpawnError = Readonly<{
20
+ readonly kind: "spawn-error";
21
+ readonly diagnostic: string;
22
+ }>;
23
+ type ProcessUnknownExit = Readonly<{
24
+ readonly kind: "unknown-exit";
25
+ }>;
26
+ export type ProcessOutcome = ProcessTerminal | ProcessTimeout | ProcessSpawnError | ProcessUnknownExit;
27
+ export type ProcessCollar = Readonly<{
28
+ pid: number;
29
+ processGroup: number;
30
+ spawnedAt: string;
31
+ }>;
32
+ export type ProcessTreeProbe = Readonly<{
33
+ kind: "gone";
34
+ }> | Readonly<{
35
+ kind: "alive";
36
+ }> | Readonly<{
37
+ kind: "unverifiable";
38
+ diagnostic: string;
39
+ }>;
40
+ export type PutDownEvidence = "killed" | "already-dead" | "alive-after-sigkill" | "unavailable";
41
+ export type DetachedProcessInput = Readonly<{
42
+ argv: readonly string[];
43
+ cwd: string;
44
+ env?: NodeJS.ProcessEnv;
45
+ log: string;
46
+ }>;
47
+ export declare function terminateProcessTree(pid: number | undefined, force?: boolean): Promise<void>;
48
+ export declare function currentProcessCollar(): ProcessCollar;
49
+ export declare function spawnDetachedProcess(input: DetachedProcessInput): Promise<ProcessCollar>;
50
+ export declare function probeProcessTree(collar: ProcessCollar): ProcessTreeProbe;
51
+ export declare function putDownProcessTree(collar: ProcessCollar): Promise<PutDownEvidence>;
52
+ export declare function runProcess(input: ProcessInput): Promise<ProcessOutcome>;
53
+ export declare function runProcessToExit(input: ProcessLaunch): Promise<ProcessOutcome>;
54
+ export {};
@@ -0,0 +1,200 @@
1
+ import { spawn, spawnSync } from "node:child_process";
2
+ import { closeSync, openSync } from "node:fs";
3
+ const TERMINATION_GRACE_MS = 250;
4
+ const STREAM_TAIL_BYTES = 16 * 1024;
5
+ function tailCapture(limit) {
6
+ const bytes = Buffer.allocUnsafe(limit);
7
+ let total = 0;
8
+ let cursor = 0;
9
+ return {
10
+ append(chunk) {
11
+ if (chunk.length >= limit) {
12
+ chunk.copy(bytes, 0, chunk.length - limit);
13
+ total += chunk.length;
14
+ cursor = 0;
15
+ return;
16
+ }
17
+ const first = Math.min(chunk.length, limit - cursor);
18
+ chunk.copy(bytes, cursor, 0, first);
19
+ if (first < chunk.length)
20
+ chunk.copy(bytes, 0, first);
21
+ total += chunk.length;
22
+ cursor = (cursor + chunk.length) % limit;
23
+ },
24
+ result() {
25
+ const size = Math.min(total, limit);
26
+ const start = total > limit ? cursor : 0;
27
+ const value = start === 0
28
+ ? bytes.subarray(0, size)
29
+ : Buffer.concat([bytes.subarray(start), bytes.subarray(0, start)]);
30
+ return { text: value.toString("utf8"), truncated: total > limit };
31
+ },
32
+ };
33
+ }
34
+ function wait(milliseconds) {
35
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
36
+ }
37
+ function ignoreMissingProcess(error) {
38
+ if (error.code !== "ESRCH")
39
+ throw error;
40
+ }
41
+ function terminateWindowsTree(pid) {
42
+ return new Promise((resolve) => {
43
+ const taskkill = spawn("taskkill", ["/PID", String(pid), "/T", "/F"], {
44
+ stdio: "ignore",
45
+ windowsHide: true,
46
+ });
47
+ taskkill.once("error", resolve);
48
+ taskkill.once("close", resolve);
49
+ });
50
+ }
51
+ export async function terminateProcessTree(pid, force = false) {
52
+ if (pid === undefined)
53
+ return;
54
+ if (process.platform === "win32") {
55
+ await terminateWindowsTree(pid);
56
+ return;
57
+ }
58
+ if (force) {
59
+ try {
60
+ process.kill(-pid, "SIGKILL");
61
+ }
62
+ catch (error) {
63
+ ignoreMissingProcess(error);
64
+ }
65
+ return;
66
+ }
67
+ try {
68
+ process.kill(-pid, "SIGTERM");
69
+ }
70
+ catch (error) {
71
+ ignoreMissingProcess(error);
72
+ return;
73
+ }
74
+ await wait(TERMINATION_GRACE_MS);
75
+ try {
76
+ process.kill(-pid, "SIGKILL");
77
+ }
78
+ catch (error) {
79
+ ignoreMissingProcess(error);
80
+ }
81
+ }
82
+ function processStartToken(pid) {
83
+ const command = process.platform === "win32"
84
+ ? ["powershell.exe", "-NoProfile", "-Command", `(Get-CimInstance Win32_Process -Filter \"ProcessId=${pid}\").CreationDate`]
85
+ : ["ps", "-o", "lstart=", "-p", String(pid)];
86
+ const result = spawnSync(command[0], command.slice(1), { encoding: "utf8", windowsHide: true });
87
+ const token = result.status === 0 ? result.stdout.trim() : "";
88
+ return token.length === 0 ? null : token;
89
+ }
90
+ export function currentProcessCollar() {
91
+ const spawnedAt = processStartToken(process.pid);
92
+ if (spawnedAt === null)
93
+ throw new Error(`cannot read process start identity for ${process.pid}`);
94
+ return { pid: process.pid, processGroup: process.pid, spawnedAt };
95
+ }
96
+ export async function spawnDetachedProcess(input) {
97
+ const log = openSync(input.log, "a");
98
+ try {
99
+ const child = spawn(input.argv[0], input.argv.slice(1), {
100
+ cwd: input.cwd,
101
+ env: input.env,
102
+ detached: true,
103
+ stdio: ["ignore", log, log],
104
+ windowsHide: true,
105
+ });
106
+ await new Promise((resolve, reject) => {
107
+ child.once("spawn", resolve);
108
+ child.once("error", reject);
109
+ });
110
+ if (child.pid === undefined)
111
+ throw new Error("detached process spawned without a pid");
112
+ const spawnedAt = processStartToken(child.pid);
113
+ if (spawnedAt === null)
114
+ throw new Error(`cannot read process start identity for ${child.pid}`);
115
+ child.unref();
116
+ return { pid: child.pid, processGroup: child.pid, spawnedAt };
117
+ }
118
+ finally {
119
+ closeSync(log);
120
+ }
121
+ }
122
+ export function probeProcessTree(collar) {
123
+ try {
124
+ process.kill(process.platform === "win32" ? collar.pid : -collar.processGroup, 0);
125
+ }
126
+ catch (error) {
127
+ const code = error.code;
128
+ if (code === "ESRCH")
129
+ return { kind: "gone" };
130
+ return { kind: "unverifiable", diagnostic: error instanceof Error ? error.message : String(error) };
131
+ }
132
+ const current = processStartToken(collar.pid);
133
+ if (current === null && process.platform !== "win32")
134
+ return { kind: "alive" };
135
+ if (current === collar.spawnedAt)
136
+ return { kind: "alive" };
137
+ return { kind: "unverifiable", diagnostic: `process ${collar.pid} no longer matches its recorded start identity` };
138
+ }
139
+ export async function putDownProcessTree(collar) {
140
+ const before = probeProcessTree(collar);
141
+ if (before.kind === "gone")
142
+ return "already-dead";
143
+ if (before.kind === "unverifiable")
144
+ return "unavailable";
145
+ await terminateProcessTree(collar.pid);
146
+ const after = probeProcessTree(collar);
147
+ if (after.kind === "gone")
148
+ return "killed";
149
+ return after.kind === "alive" ? "alive-after-sigkill" : "unavailable";
150
+ }
151
+ async function executeProcess(input, timeoutMs) {
152
+ const child = spawn(input.argv[0], input.argv.slice(1), {
153
+ cwd: input.cwd,
154
+ env: input.env,
155
+ detached: true,
156
+ stdio: ["ignore", "pipe", "pipe"],
157
+ windowsHide: true,
158
+ });
159
+ const stdout = tailCapture(STREAM_TAIL_BYTES);
160
+ const stderr = tailCapture(STREAM_TAIL_BYTES);
161
+ child.stdout.on("data", (chunk) => stdout.append(chunk));
162
+ child.stderr.on("data", (chunk) => stderr.append(chunk));
163
+ let timedOut = false;
164
+ let termination;
165
+ const requestStop = () => {
166
+ if (timedOut)
167
+ return;
168
+ timedOut = true;
169
+ termination = terminateProcessTree(child.pid);
170
+ };
171
+ const timeout = timeoutMs === undefined ? undefined : setTimeout(requestStop, timeoutMs);
172
+ const terminal = await new Promise((resolve) => {
173
+ child.once("close", (code) => resolve({ kind: "closed", code }));
174
+ child.once("error", (error) => resolve({ kind: "spawn-error", error }));
175
+ });
176
+ if (timeout !== undefined)
177
+ clearTimeout(timeout);
178
+ await termination;
179
+ if (terminal.kind === "spawn-error")
180
+ return { kind: "spawn-error", diagnostic: terminal.error.message };
181
+ if (timedOut)
182
+ return { kind: "timeout" };
183
+ if (terminal.code === null)
184
+ return { kind: "unknown-exit" };
185
+ const capturedStdout = stdout.result();
186
+ const capturedStderr = stderr.result();
187
+ return {
188
+ kind: "terminal",
189
+ code: terminal.code,
190
+ stdout: capturedStdout.text,
191
+ stderr: capturedStderr.text,
192
+ truncated: capturedStdout.truncated || capturedStderr.truncated,
193
+ };
194
+ }
195
+ export function runProcess(input) {
196
+ return executeProcess(input, input.timeoutMs);
197
+ }
198
+ export function runProcessToExit(input) {
199
+ return executeProcess(input, undefined);
200
+ }
@@ -0,0 +1,45 @@
1
+ export type SettingsScope = "project" | "user";
2
+ export type SettingsScopeState = Readonly<{
3
+ kind: "absent";
4
+ path?: string;
5
+ }> | Readonly<{
6
+ kind: "failed";
7
+ path: string;
8
+ diagnostic: string;
9
+ }> | Readonly<{
10
+ kind: "read";
11
+ path: string;
12
+ namespaces: readonly string[];
13
+ }>;
14
+ export type SettingsEntry = Readonly<{
15
+ name: string;
16
+ value: unknown;
17
+ source: SettingsScope;
18
+ shadows: boolean;
19
+ }>;
20
+ export type SettingsNamespaceFailure = Readonly<{
21
+ scope: SettingsScope;
22
+ diagnostic: string;
23
+ }>;
24
+ export type SettingsNamespaceView = Readonly<{
25
+ kind: "read";
26
+ name: string;
27
+ entries: readonly SettingsEntry[];
28
+ }> | Readonly<{
29
+ kind: "failed";
30
+ name: string;
31
+ entries: readonly SettingsEntry[];
32
+ failures: readonly SettingsNamespaceFailure[];
33
+ }>;
34
+ export type Settings = Readonly<{
35
+ scopes: Readonly<{
36
+ project: SettingsScopeState;
37
+ user: SettingsScopeState;
38
+ }>;
39
+ namespace(name: string): SettingsNamespaceView;
40
+ }>;
41
+ export type SettingsInput = Readonly<{
42
+ root?: string;
43
+ home?: string;
44
+ }>;
45
+ export declare function settings(input?: SettingsInput): Settings;
@@ -0,0 +1,99 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join, resolve } from "node:path";
4
+ function object(value) {
5
+ return value !== null && typeof value === "object" && !Array.isArray(value);
6
+ }
7
+ function freezeJson(value) {
8
+ if (Array.isArray(value)) {
9
+ for (const item of value)
10
+ freezeJson(item);
11
+ return Object.freeze(value);
12
+ }
13
+ if (object(value)) {
14
+ for (const item of Object.values(value))
15
+ freezeJson(item);
16
+ return Object.freeze(value);
17
+ }
18
+ return value;
19
+ }
20
+ function bounded(error) {
21
+ return (error instanceof Error ? error.message : String(error)).slice(0, 500);
22
+ }
23
+ function readScope(path) {
24
+ let bytes;
25
+ try {
26
+ bytes = readFileSync(path, "utf8");
27
+ }
28
+ catch (error) {
29
+ if (error.code === "ENOENT")
30
+ return { state: { kind: "absent", path } };
31
+ return { state: { kind: "failed", path, diagnostic: bounded(error) } };
32
+ }
33
+ try {
34
+ const decoded = JSON.parse(bytes);
35
+ if (!object(decoded))
36
+ throw new TypeError("settings root must be an object");
37
+ const root = freezeJson(decoded);
38
+ return { state: { kind: "read", path, namespaces: Object.freeze(Object.keys(root).sort()) }, root };
39
+ }
40
+ catch (error) {
41
+ return { state: { kind: "failed", path, diagnostic: bounded(error) } };
42
+ }
43
+ }
44
+ function namespaceEntries(name, scope, loaded) {
45
+ if (loaded.state.kind === "failed") {
46
+ return { entries: [], failure: { scope, diagnostic: loaded.state.diagnostic } };
47
+ }
48
+ const value = loaded.root?.[name];
49
+ if (value === undefined)
50
+ return { entries: [] };
51
+ if (!object(value)) {
52
+ return { entries: [], failure: { scope, diagnostic: `${name} must be an object of named values` } };
53
+ }
54
+ return {
55
+ entries: Object.keys(value).sort().map((entryName) => ({
56
+ name: entryName,
57
+ value: value[entryName],
58
+ source: scope,
59
+ shadows: false,
60
+ })),
61
+ };
62
+ }
63
+ export function settings(input = {}) {
64
+ if (!object(input))
65
+ throw new TypeError("settings input must be an object");
66
+ if (input.root !== undefined && (typeof input.root !== "string" || input.root.trim().length === 0)) {
67
+ throw new TypeError("settings root must be a nonblank string");
68
+ }
69
+ if (input.home !== undefined && (typeof input.home !== "string" || input.home.trim().length === 0)) {
70
+ throw new TypeError("settings home must be a nonblank string");
71
+ }
72
+ const home = resolve(input.home ?? join(homedir(), ".keiyaku"));
73
+ const user = readScope(join(home, "settings.json"));
74
+ const project = input.root === undefined
75
+ ? { state: { kind: "absent" } }
76
+ : readScope(join(resolve(input.root), ".keiyaku", "settings.json"));
77
+ return Object.freeze({
78
+ scopes: Object.freeze({ project: project.state, user: user.state }),
79
+ namespace(name) {
80
+ if (typeof name !== "string" || name.trim().length === 0)
81
+ throw new TypeError("settings namespace must be nonblank");
82
+ const fromUser = namespaceEntries(name, "user", user);
83
+ const fromProject = namespaceEntries(name, "project", project);
84
+ const userByName = new Map(fromUser.entries.map((entry) => [entry.name, entry]));
85
+ const projectByName = new Map(fromProject.entries.map((entry) => [entry.name, entry]));
86
+ const names = [...new Set([...userByName.keys(), ...projectByName.keys()])].sort();
87
+ const entries = Object.freeze(names.map((entryName) => {
88
+ const higher = projectByName.get(entryName);
89
+ if (higher !== undefined)
90
+ return Object.freeze({ ...higher, shadows: userByName.has(entryName) });
91
+ return userByName.get(entryName);
92
+ }));
93
+ const failures = Object.freeze([fromUser.failure, fromProject.failure].filter((failure) => failure !== undefined));
94
+ return failures.length === 0
95
+ ? Object.freeze({ kind: "read", name, entries })
96
+ : Object.freeze({ kind: "failed", name, entries, failures });
97
+ },
98
+ });
99
+ }