cloving 0.3.19 → 1.0.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 (507) hide show
  1. package/{LICENSE.md → LICENSE} +1 -1
  2. package/README.md +475 -182
  3. package/dist/src/authority/budgets.d.ts +12 -0
  4. package/dist/src/authority/budgets.js +42 -0
  5. package/dist/src/authority/commands.d.ts +7 -0
  6. package/dist/src/authority/commands.js +263 -0
  7. package/dist/src/authority/details.d.ts +28 -0
  8. package/dist/src/authority/details.js +33 -0
  9. package/dist/src/authority/dispatch-decision.d.ts +40 -0
  10. package/dist/src/authority/dispatch-decision.js +47 -0
  11. package/dist/src/authority/effect-requests.d.ts +2 -0
  12. package/dist/src/authority/effect-requests.js +139 -0
  13. package/dist/src/authority/effect-results.d.ts +4 -0
  14. package/dist/src/authority/effect-results.js +236 -0
  15. package/dist/src/authority/events.d.ts +2 -0
  16. package/dist/src/authority/events.js +45 -0
  17. package/dist/src/authority/gate-reduction.d.ts +8 -0
  18. package/dist/src/authority/gate-reduction.js +109 -0
  19. package/dist/src/authority/gates.d.ts +48 -0
  20. package/dist/src/authority/gates.js +77 -0
  21. package/dist/src/authority/history-state.d.ts +15 -0
  22. package/dist/src/authority/history-state.js +61 -0
  23. package/dist/src/authority/history.d.ts +13 -0
  24. package/dist/src/authority/history.js +37 -0
  25. package/dist/src/authority/instants.d.ts +3 -0
  26. package/dist/src/authority/instants.js +38 -0
  27. package/dist/src/authority/leases.d.ts +15 -0
  28. package/dist/src/authority/leases.js +113 -0
  29. package/dist/src/authority/operations.d.ts +101 -0
  30. package/dist/src/authority/operations.js +75 -0
  31. package/dist/src/authority/reconciliation.d.ts +27 -0
  32. package/dist/src/authority/reconciliation.js +147 -0
  33. package/dist/src/authority/reducer.d.ts +41 -0
  34. package/dist/src/authority/reducer.js +139 -0
  35. package/dist/src/authority/reduction-state.d.ts +36 -0
  36. package/dist/src/authority/reduction-state.js +68 -0
  37. package/dist/src/authority/reduction.d.ts +6 -0
  38. package/dist/src/authority/reduction.js +160 -0
  39. package/dist/src/authority/status-closure.d.ts +4 -0
  40. package/dist/src/authority/status-closure.js +57 -0
  41. package/dist/src/authority/status-effects.d.ts +17 -0
  42. package/dist/src/authority/status-effects.js +43 -0
  43. package/dist/src/authority/status-input.d.ts +45 -0
  44. package/dist/src/authority/status-input.js +9 -0
  45. package/dist/src/authority/status.d.ts +32 -0
  46. package/dist/src/authority/status.js +256 -0
  47. package/dist/src/authority/stop-sequence.d.ts +37 -0
  48. package/dist/src/authority/stop-sequence.js +91 -0
  49. package/dist/src/authority/transitions.d.ts +63 -0
  50. package/dist/src/authority/transitions.js +122 -0
  51. package/dist/src/broker/actor/adapter-calls.d.ts +13 -0
  52. package/dist/src/broker/actor/adapter-calls.js +34 -0
  53. package/dist/src/broker/actor/adapter-outcomes.d.ts +28 -0
  54. package/dist/src/broker/actor/adapter-outcomes.js +80 -0
  55. package/dist/src/broker/actor/authority-actor.d.ts +25 -0
  56. package/dist/src/broker/actor/authority-actor.js +169 -0
  57. package/dist/src/broker/actor/authority-changes.d.ts +31 -0
  58. package/dist/src/broker/actor/authority-changes.js +46 -0
  59. package/dist/src/broker/actor/authority-connection.d.ts +15 -0
  60. package/dist/src/broker/actor/authority-connection.js +44 -0
  61. package/dist/src/broker/actor/authority-conversion.d.ts +10 -0
  62. package/dist/src/broker/actor/authority-conversion.js +72 -0
  63. package/dist/src/broker/actor/authority-delivery.d.ts +13 -0
  64. package/dist/src/broker/actor/authority-delivery.js +162 -0
  65. package/dist/src/broker/actor/authority-logger.d.ts +2 -0
  66. package/dist/src/broker/actor/authority-logger.js +19 -0
  67. package/dist/src/broker/actor/authority-policy.d.ts +9 -0
  68. package/dist/src/broker/actor/authority-policy.js +11 -0
  69. package/dist/src/broker/actor/authority-queries.d.ts +45 -0
  70. package/dist/src/broker/actor/authority-queries.js +85 -0
  71. package/dist/src/broker/actor/authority-receipts.d.ts +28 -0
  72. package/dist/src/broker/actor/authority-receipts.js +84 -0
  73. package/dist/src/broker/actor/authority-release.d.ts +13 -0
  74. package/dist/src/broker/actor/authority-release.js +69 -0
  75. package/dist/src/broker/actor/authority-runtime.d.ts +60 -0
  76. package/dist/src/broker/actor/authority-runtime.js +204 -0
  77. package/dist/src/broker/actor/authority-session.d.ts +65 -0
  78. package/dist/src/broker/actor/authority-session.js +252 -0
  79. package/dist/src/broker/actor/authority-settings.d.ts +33 -0
  80. package/dist/src/broker/actor/authority-settings.js +63 -0
  81. package/dist/src/broker/actor/authority-upgrades.d.ts +16 -0
  82. package/dist/src/broker/actor/authority-upgrades.js +12 -0
  83. package/dist/src/broker/actor/authority-watchdog.d.ts +14 -0
  84. package/dist/src/broker/actor/authority-watchdog.js +41 -0
  85. package/dist/src/broker/actor/authority.d.ts +14 -0
  86. package/dist/src/broker/actor/authority.js +115 -0
  87. package/dist/src/broker/actor/delivery-intents.d.ts +68 -0
  88. package/dist/src/broker/actor/delivery-intents.js +77 -0
  89. package/dist/src/broker/actor/delivery-plan.d.ts +2 -0
  90. package/dist/src/broker/actor/delivery-plan.js +109 -0
  91. package/dist/src/broker/actor/delivery-results.d.ts +11 -0
  92. package/dist/src/broker/actor/delivery-results.js +63 -0
  93. package/dist/src/broker/actor/effect-delivery.d.ts +19 -0
  94. package/dist/src/broker/actor/effect-delivery.js +118 -0
  95. package/dist/src/broker/actor/effect-plan.d.ts +41 -0
  96. package/dist/src/broker/actor/effect-plan.js +173 -0
  97. package/dist/src/broker/actor/effect-queries.d.ts +27 -0
  98. package/dist/src/broker/actor/effect-queries.js +80 -0
  99. package/dist/src/broker/actor/effect-turn.d.ts +25 -0
  100. package/dist/src/broker/actor/effect-turn.js +84 -0
  101. package/dist/src/broker/actor/pin-check.d.ts +6 -0
  102. package/dist/src/broker/actor/pin-check.js +12 -0
  103. package/dist/src/broker/actor/runtime-parts.d.ts +23 -0
  104. package/dist/src/broker/actor/runtime-parts.js +34 -0
  105. package/dist/src/broker/actor/stop-plan.d.ts +20 -0
  106. package/dist/src/broker/actor/stop-plan.js +46 -0
  107. package/dist/src/broker/actor/stop-turn.d.ts +17 -0
  108. package/dist/src/broker/actor/stop-turn.js +42 -0
  109. package/dist/src/broker/actor/turn-draft.d.ts +31 -0
  110. package/dist/src/broker/actor/turn-draft.js +138 -0
  111. package/dist/src/broker/actor/turn-plan.d.ts +17 -0
  112. package/dist/src/broker/actor/turn-plan.js +136 -0
  113. package/dist/src/broker/actor/turn-refusals.d.ts +8 -0
  114. package/dist/src/broker/actor/turn-refusals.js +35 -0
  115. package/dist/src/broker/actor/turn-staging.d.ts +78 -0
  116. package/dist/src/broker/actor/turn-staging.js +34 -0
  117. package/dist/src/broker/actor/turn-state.d.ts +34 -0
  118. package/dist/src/broker/actor/turn-state.js +208 -0
  119. package/dist/src/broker/authority-admission.d.ts +21 -0
  120. package/dist/src/broker/authority-admission.js +70 -0
  121. package/dist/src/broker/authority-restore.d.ts +30 -0
  122. package/dist/src/broker/authority-restore.js +165 -0
  123. package/dist/src/broker/decision-restore.d.ts +16 -0
  124. package/dist/src/broker/decision-restore.js +158 -0
  125. package/dist/src/broker/decision-upgrade.d.ts +3 -0
  126. package/dist/src/broker/decision-upgrade.js +12 -0
  127. package/dist/src/broker/effect-restore.d.ts +20 -0
  128. package/dist/src/broker/effect-restore.js +111 -0
  129. package/dist/src/broker/effect-upgrade.d.ts +3 -0
  130. package/dist/src/broker/effect-upgrade.js +9 -0
  131. package/dist/src/broker/operation-digest.d.ts +1 -0
  132. package/dist/src/broker/operation-digest.js +4 -0
  133. package/dist/src/broker/socket-address.d.ts +9 -0
  134. package/dist/src/broker/socket-address.js +14 -0
  135. package/dist/src/broker/workflow-pin.d.ts +2 -0
  136. package/dist/src/broker/workflow-pin.js +5 -0
  137. package/dist/src/chats/destination.d.ts +4 -0
  138. package/dist/src/chats/destination.js +94 -0
  139. package/dist/src/chats/import.d.ts +13 -0
  140. package/dist/src/chats/import.js +71 -0
  141. package/dist/src/chats/normalize.d.ts +20 -0
  142. package/dist/src/chats/normalize.js +139 -0
  143. package/dist/src/chats/reader.d.ts +15 -0
  144. package/dist/src/chats/reader.js +87 -0
  145. package/dist/src/cli/arguments.d.ts +23 -0
  146. package/dist/src/cli/arguments.js +154 -0
  147. package/dist/src/cli/client.d.ts +15 -0
  148. package/dist/src/cli/client.js +122 -0
  149. package/dist/src/cli/commands.d.ts +14 -0
  150. package/dist/src/cli/commands.js +253 -0
  151. package/dist/src/cli/main.d.ts +1 -0
  152. package/dist/src/cli/main.js +80 -0
  153. package/dist/src/cli/render.d.ts +8 -0
  154. package/dist/src/cli/render.js +186 -0
  155. package/dist/src/cli/runtime-arguments.d.ts +73 -0
  156. package/dist/src/cli/runtime-arguments.js +248 -0
  157. package/dist/src/cli/runtime-directory.d.ts +4 -0
  158. package/dist/src/cli/runtime-directory.js +25 -0
  159. package/dist/src/cli/toolchain.d.ts +3 -0
  160. package/dist/src/cli/toolchain.js +74 -0
  161. package/dist/src/cli/usage.d.ts +4 -0
  162. package/dist/src/cli/usage.js +124 -0
  163. package/dist/src/cli/validate.d.ts +38 -0
  164. package/dist/src/cli/validate.js +116 -0
  165. package/dist/src/cli/watch-board-view.d.ts +22 -0
  166. package/dist/src/cli/watch-board-view.js +128 -0
  167. package/dist/src/cli/watch-board.d.ts +15 -0
  168. package/dist/src/cli/watch-board.js +174 -0
  169. package/dist/src/cli/watch-element.d.ts +11 -0
  170. package/dist/src/cli/watch-element.js +6 -0
  171. package/dist/src/cli/watch-model.d.ts +29 -0
  172. package/dist/src/cli/watch-model.js +261 -0
  173. package/dist/src/cli/watch-navigation.d.ts +9 -0
  174. package/dist/src/cli/watch-navigation.js +40 -0
  175. package/dist/src/cli/watch-page.d.ts +1 -0
  176. package/dist/src/cli/watch-page.js +272 -0
  177. package/dist/src/cli/watch-paths.d.ts +2 -0
  178. package/dist/src/cli/watch-paths.js +52 -0
  179. package/dist/src/cli/watch-phases.d.ts +7 -0
  180. package/dist/src/cli/watch-phases.js +148 -0
  181. package/dist/src/cli/watch-reads.d.ts +28 -0
  182. package/dist/src/cli/watch-reads.js +244 -0
  183. package/dist/src/cli/watch-render.d.ts +139 -0
  184. package/dist/src/cli/watch-render.js +95 -0
  185. package/dist/src/cli/watch-server.d.ts +10 -0
  186. package/dist/src/cli/watch-server.js +176 -0
  187. package/dist/src/cli/watch-stream.d.ts +11 -0
  188. package/dist/src/cli/watch-stream.js +128 -0
  189. package/dist/src/cli/watch-turn.d.ts +29 -0
  190. package/dist/src/cli/watch-turn.js +130 -0
  191. package/dist/src/cli/watch-view.d.ts +39 -0
  192. package/dist/src/cli/watch-view.js +223 -0
  193. package/dist/src/cli.d.ts +2 -0
  194. package/dist/src/cli.js +62 -0
  195. package/dist/src/daemon/claude-turn.d.ts +28 -0
  196. package/dist/src/daemon/claude-turn.js +135 -0
  197. package/dist/src/daemon/claude-worker.d.ts +26 -0
  198. package/dist/src/daemon/claude-worker.js +224 -0
  199. package/dist/src/daemon/codex-stream.d.ts +4 -0
  200. package/dist/src/daemon/codex-stream.js +113 -0
  201. package/dist/src/daemon/daemon.d.ts +46 -0
  202. package/dist/src/daemon/daemon.js +186 -0
  203. package/dist/src/daemon/delivery-router.d.ts +10 -0
  204. package/dist/src/daemon/delivery-router.js +34 -0
  205. package/dist/src/daemon/github-calls.d.ts +29 -0
  206. package/dist/src/daemon/github-calls.js +127 -0
  207. package/dist/src/daemon/github-issue-methods.d.ts +3 -0
  208. package/dist/src/daemon/github-issue-methods.js +99 -0
  209. package/dist/src/daemon/github-issue-privacy.d.ts +6 -0
  210. package/dist/src/daemon/github-issue-privacy.js +131 -0
  211. package/dist/src/daemon/github-merge.d.ts +18 -0
  212. package/dist/src/daemon/github-merge.js +259 -0
  213. package/dist/src/daemon/github-methods.d.ts +5 -0
  214. package/dist/src/daemon/github-methods.js +198 -0
  215. package/dist/src/daemon/github-operation.d.ts +38 -0
  216. package/dist/src/daemon/github-operation.js +57 -0
  217. package/dist/src/daemon/github-worker.d.ts +17 -0
  218. package/dist/src/daemon/github-worker.js +281 -0
  219. package/dist/src/daemon/host-environment.d.ts +8 -0
  220. package/dist/src/daemon/host-environment.js +14 -0
  221. package/dist/src/daemon/issue-queue.d.ts +9 -0
  222. package/dist/src/daemon/issue-queue.js +163 -0
  223. package/dist/src/daemon/notify-message.d.ts +14 -0
  224. package/dist/src/daemon/notify-message.js +48 -0
  225. package/dist/src/daemon/notify.d.ts +12 -0
  226. package/dist/src/daemon/notify.js +161 -0
  227. package/dist/src/daemon/operation-journal.d.ts +42 -0
  228. package/dist/src/daemon/operation-journal.js +53 -0
  229. package/dist/src/daemon/ticket-registration.d.ts +33 -0
  230. package/dist/src/daemon/ticket-registration.js +177 -0
  231. package/dist/src/daemon/ticket-source.d.ts +17 -0
  232. package/dist/src/daemon/ticket-source.js +36 -0
  233. package/dist/src/daemon/work-tree.d.ts +26 -0
  234. package/dist/src/daemon/work-tree.js +206 -0
  235. package/dist/src/effect-authorization.d.ts +21 -0
  236. package/dist/src/effect-authorization.js +14 -0
  237. package/dist/src/execution-pin.d.ts +4 -0
  238. package/dist/src/execution-pin.js +68 -0
  239. package/dist/src/host/start-delivery.d.ts +41 -0
  240. package/dist/src/host/start-delivery.js +68 -0
  241. package/dist/src/host/step-bridge-host.d.ts +79 -0
  242. package/dist/src/host/step-bridge-host.js +205 -0
  243. package/dist/src/host/step-claims.d.ts +31 -0
  244. package/dist/src/host/step-claims.js +85 -0
  245. package/dist/src/host/world-host.d.ts +21 -0
  246. package/dist/src/host/world-host.js +51 -0
  247. package/dist/src/host/world-reconciliation.d.ts +37 -0
  248. package/dist/src/host/world-reconciliation.js +75 -0
  249. package/dist/src/host/world-runs.d.ts +14 -0
  250. package/dist/src/host/world-runs.js +61 -0
  251. package/dist/src/operation-identity.d.ts +7 -0
  252. package/dist/src/operation-identity.js +59 -0
  253. package/dist/src/protocol.d.ts +35 -0
  254. package/dist/src/protocol.js +64 -0
  255. package/dist/src/resource-files.d.ts +1 -0
  256. package/dist/src/resource-files.js +29 -0
  257. package/dist/src/service/changes.d.ts +11 -0
  258. package/dist/src/service/changes.js +32 -0
  259. package/dist/src/service/decision-handler.d.ts +9 -0
  260. package/dist/src/service/decision-handler.js +233 -0
  261. package/dist/src/service/event-handler.d.ts +10 -0
  262. package/dist/src/service/event-handler.js +70 -0
  263. package/dist/src/service/expiry.d.ts +13 -0
  264. package/dist/src/service/expiry.js +53 -0
  265. package/dist/src/service/gateway.d.ts +21 -0
  266. package/dist/src/service/gateway.js +120 -0
  267. package/dist/src/service/registry.d.ts +40 -0
  268. package/dist/src/service/registry.js +13 -0
  269. package/dist/src/service/replies.d.ts +26 -0
  270. package/dist/src/service/replies.js +56 -0
  271. package/dist/src/service/run-handlers.d.ts +4 -0
  272. package/dist/src/service/run-handlers.js +271 -0
  273. package/dist/src/service/service.d.ts +58 -0
  274. package/dist/src/service/service.js +212 -0
  275. package/dist/src/service/submission-handler.d.ts +4 -0
  276. package/dist/src/service/submission-handler.js +206 -0
  277. package/dist/src/service/transport.d.ts +16 -0
  278. package/dist/src/service/transport.js +141 -0
  279. package/dist/src/service/worker-port.d.ts +85 -0
  280. package/dist/src/service/worker-port.js +126 -0
  281. package/dist/src/step-bridge.d.ts +57 -0
  282. package/dist/src/step-bridge.js +4 -0
  283. package/dist/src/steps/decision-gate.d.ts +2 -0
  284. package/dist/src/steps/decision-gate.js +8 -0
  285. package/dist/src/steps/load-cycle.d.ts +10 -0
  286. package/dist/src/steps/load-cycle.js +11 -0
  287. package/dist/src/steps/protected-effect.d.ts +2 -0
  288. package/dist/src/steps/protected-effect.js +8 -0
  289. package/dist/src/storage/decision-rows.d.ts +54 -0
  290. package/dist/src/storage/decision-rows.js +72 -0
  291. package/dist/src/storage/decision-snapshots.d.ts +17 -0
  292. package/dist/src/storage/decision-snapshots.js +25 -0
  293. package/dist/src/storage/domain-changes.d.ts +48 -0
  294. package/dist/src/storage/domain-changes.js +213 -0
  295. package/dist/src/storage/domain-rows.d.ts +85 -0
  296. package/dist/src/storage/domain-rows.js +129 -0
  297. package/dist/src/storage/domain-schema.d.ts +32 -0
  298. package/dist/src/storage/domain-schema.js +193 -0
  299. package/dist/src/storage/effect-changes.d.ts +5 -0
  300. package/dist/src/storage/effect-changes.js +105 -0
  301. package/dist/src/storage/effect-rows.d.ts +67 -0
  302. package/dist/src/storage/effect-rows.js +74 -0
  303. package/dist/src/storage/effect-schema.d.ts +1 -0
  304. package/dist/src/storage/effect-schema.js +59 -0
  305. package/dist/src/storage/statements.d.ts +9 -0
  306. package/dist/src/storage/statements.js +8 -0
  307. package/dist/src/submission.d.ts +42 -0
  308. package/dist/src/submission.js +71 -0
  309. package/dist/src/turn-profile.d.ts +13 -0
  310. package/dist/src/turn-profile.js +100 -0
  311. package/dist/src/workflow-admission.d.ts +45 -0
  312. package/dist/src/workflow-admission.js +151 -0
  313. package/dist/src/workflow-contracts.d.ts +27 -0
  314. package/dist/src/workflow-contracts.js +88 -0
  315. package/dist/src/workflow-declaration.d.ts +11 -0
  316. package/dist/src/workflow-declaration.js +57 -0
  317. package/dist/src/workflow-resources.d.ts +8 -0
  318. package/dist/src/workflow-resources.js +14 -0
  319. package/dist/src/workflows.d.ts +5 -0
  320. package/dist/src/workflows.js +3 -0
  321. package/dist/tools/compile-workflows.d.ts +1 -0
  322. package/dist/tools/compile-workflows.js +33 -0
  323. package/dist/tools/self-host-processes.d.ts +10 -0
  324. package/dist/tools/self-host-processes.js +151 -0
  325. package/dist/tools/self-host-workflows.d.ts +15 -0
  326. package/dist/tools/self-host-workflows.js +78 -0
  327. package/dist/tools/self-host.d.ts +1 -0
  328. package/dist/tools/self-host.js +261 -0
  329. package/dist/tools/self-update-host.d.ts +6 -0
  330. package/dist/tools/self-update-host.js +41 -0
  331. package/dist/tools/self-update.d.ts +10 -0
  332. package/dist/tools/self-update.js +105 -0
  333. package/dist/tools/workflow-manifest.d.ts +3 -0
  334. package/dist/tools/workflow-manifest.js +34 -0
  335. package/dist/workflows/develop-prd.d.ts +7 -0
  336. package/dist/workflows/develop-prd.js +97 -0
  337. package/dist/workflows/develop-ticket.d.ts +15 -0
  338. package/dist/workflows/develop-ticket.js +301 -0
  339. package/dist/workflows/issue-labels.d.ts +14 -0
  340. package/dist/workflows/issue-labels.js +36 -0
  341. package/package.json +82 -75
  342. package/.DS_Store +0 -0
  343. package/.aider.chat.history.md +0 -16978
  344. package/.aider.input.history +0 -15
  345. package/.aider.tags.cache.v3/cache.db +0 -0
  346. package/.aider.tags.cache.v3/cache.db-shm +0 -0
  347. package/.aider.tags.cache.v3/cache.db-wal +0 -0
  348. package/.cursorrules +0 -77
  349. package/.github/workflows/auto-release.yml +0 -83
  350. package/.github/workflows/ci.yml +0 -32
  351. package/.github/workflows/npm-publish.yml +0 -34
  352. package/.gitignore +0 -67
  353. package/.husky/_/.gitignore +0 -1
  354. package/.husky/_/applypatch-msg +0 -2
  355. package/.husky/_/commit-msg +0 -2
  356. package/.husky/_/h +0 -22
  357. package/.husky/_/husky.sh +0 -9
  358. package/.husky/_/post-applypatch +0 -2
  359. package/.husky/_/post-checkout +0 -2
  360. package/.husky/_/post-commit +0 -2
  361. package/.husky/_/post-merge +0 -2
  362. package/.husky/_/post-rewrite +0 -2
  363. package/.husky/_/pre-applypatch +0 -2
  364. package/.husky/_/pre-auto-gc +0 -2
  365. package/.husky/_/pre-commit +0 -2
  366. package/.husky/_/pre-merge-commit +0 -2
  367. package/.husky/_/pre-push +0 -2
  368. package/.husky/_/pre-rebase +0 -2
  369. package/.husky/_/prepare-commit-msg +0 -2
  370. package/.husky/pre-commit +0 -1
  371. package/.husky/pre-push +0 -1
  372. package/.prettierrc.json +0 -7
  373. package/.tool-versions +0 -2
  374. package/SECURITY.md +0 -15
  375. package/cloving.json +0 -67
  376. package/dist/abstract_gpt/index.js +0 -55
  377. package/dist/cloving_gpt/adapters/Adapter.js +0 -2
  378. package/dist/cloving_gpt/adapters/azureopenai.js +0 -69
  379. package/dist/cloving_gpt/adapters/claude.js +0 -128
  380. package/dist/cloving_gpt/adapters/gemini.js +0 -135
  381. package/dist/cloving_gpt/adapters/gpt4all.js +0 -29
  382. package/dist/cloving_gpt/adapters/index.js +0 -2
  383. package/dist/cloving_gpt/adapters/mistral.js +0 -128
  384. package/dist/cloving_gpt/adapters/ollama.js +0 -128
  385. package/dist/cloving_gpt/adapters/openai.js +0 -100
  386. package/dist/cloving_gpt/index.js +0 -192
  387. package/dist/commands/analyze.js +0 -47
  388. package/dist/commands/chat.js +0 -14
  389. package/dist/commands/check.js +0 -7
  390. package/dist/commands/commit.js +0 -44
  391. package/dist/commands/config.js +0 -167
  392. package/dist/commands/describe.js +0 -235
  393. package/dist/commands/generate/code.js +0 -21
  394. package/dist/commands/generate/commit.js +0 -11
  395. package/dist/commands/generate/context.js +0 -82
  396. package/dist/commands/generate/docs.js +0 -11
  397. package/dist/commands/generate/documentation.js +0 -11
  398. package/dist/commands/generate/fizzbuzz.js +0 -35
  399. package/dist/commands/generate/init.js +0 -15
  400. package/dist/commands/generate/review.js +0 -11
  401. package/dist/commands/generate/sh.js +0 -95
  402. package/dist/commands/generate/shell.js +0 -11
  403. package/dist/commands/generate/unit_tests.js +0 -11
  404. package/dist/commands/init.js +0 -13
  405. package/dist/commands/models.js +0 -22
  406. package/dist/commands/project/build.js +0 -88
  407. package/dist/commands/project/complete.js +0 -12
  408. package/dist/commands/project/init.js +0 -82
  409. package/dist/commands/project/plan.js +0 -108
  410. package/dist/commands/proxy.js +0 -11
  411. package/dist/commands/review.js +0 -50
  412. package/dist/commands/tokens.js +0 -75
  413. package/dist/commands/unit_tests.js +0 -150
  414. package/dist/commands/update.js +0 -7
  415. package/dist/file2.js +0 -4
  416. package/dist/index.js +0 -134
  417. package/dist/managers/BlockManager.js +0 -120
  418. package/dist/managers/ChatManager.js +0 -653
  419. package/dist/managers/ChunkManager.js +0 -32
  420. package/dist/managers/CodeManager.js +0 -185
  421. package/dist/managers/CommitManager.js +0 -64
  422. package/dist/managers/DocsManager.js +0 -88
  423. package/dist/managers/DocumentationManager.js +0 -114
  424. package/dist/managers/InitManager.js +0 -230
  425. package/dist/managers/ProxyManager.js +0 -210
  426. package/dist/managers/ReviewManager.js +0 -131
  427. package/dist/managers/ShellManager.js +0 -163
  428. package/dist/managers/StreamManager.js +0 -308
  429. package/dist/managers/UnitTestManager.js +0 -243
  430. package/dist/managers/src/managers/ProxyManager.js +0 -1
  431. package/dist/newfile.js +0 -2
  432. package/dist/package.json +0 -86
  433. package/dist/utils/command_utils.js +0 -384
  434. package/dist/utils/config_utils.js +0 -249
  435. package/dist/utils/gitUtils.js +0 -42
  436. package/dist/utils/git_utils.js +0 -217
  437. package/dist/utils/modelUtils.js +0 -7
  438. package/dist/utils/model_utils.js +0 -7
  439. package/dist/utils/prompt_utils.js +0 -333
  440. package/dist/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
  441. package/dist/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
  442. package/dist/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
  443. package/dist/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
  444. package/dist/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
  445. package/dist/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
  446. package/dist/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
  447. package/dist/utils/prompts/SPECIAL_FILES.md +0 -66
  448. package/dist/utils/prompts/index.js +0 -27
  449. package/dist/utils/string_utils.js +0 -505
  450. package/dist/utils/types.js +0 -2
  451. package/jest.config.js +0 -11
  452. package/src/cloving_gpt/adapters/azureopenai.ts +0 -83
  453. package/src/cloving_gpt/adapters/claude.ts +0 -140
  454. package/src/cloving_gpt/adapters/gemini.ts +0 -146
  455. package/src/cloving_gpt/adapters/index.ts +0 -43
  456. package/src/cloving_gpt/adapters/mistral.ts +0 -142
  457. package/src/cloving_gpt/adapters/ollama.ts +0 -136
  458. package/src/cloving_gpt/adapters/openai.ts +0 -113
  459. package/src/cloving_gpt/index.ts +0 -229
  460. package/src/commands/chat.ts +0 -12
  461. package/src/commands/config.ts +0 -192
  462. package/src/commands/generate/code.ts +0 -18
  463. package/src/commands/generate/commit.ts +0 -9
  464. package/src/commands/generate/context.ts +0 -93
  465. package/src/commands/generate/docs.ts +0 -9
  466. package/src/commands/generate/review.ts +0 -9
  467. package/src/commands/generate/shell.ts +0 -9
  468. package/src/commands/generate/unit_tests.ts +0 -9
  469. package/src/commands/init.ts +0 -9
  470. package/src/commands/models.ts +0 -21
  471. package/src/commands/proxy.ts +0 -9
  472. package/src/commands/tokens.ts +0 -82
  473. package/src/index.ts +0 -197
  474. package/src/managers/BlockManager.ts +0 -126
  475. package/src/managers/ChatManager.ts +0 -755
  476. package/src/managers/ChunkManager.ts +0 -31
  477. package/src/managers/CodeManager.ts +0 -226
  478. package/src/managers/CommitManager.ts +0 -71
  479. package/src/managers/DocsManager.ts +0 -101
  480. package/src/managers/InitManager.ts +0 -263
  481. package/src/managers/ProxyManager.ts +0 -240
  482. package/src/managers/ReviewManager.ts +0 -154
  483. package/src/managers/ShellManager.ts +0 -172
  484. package/src/managers/StreamManager.ts +0 -353
  485. package/src/managers/UnitTestManager.ts +0 -293
  486. package/src/utils/config_utils.ts +0 -271
  487. package/src/utils/git_utils.ts +0 -230
  488. package/src/utils/model_utils.ts +0 -3
  489. package/src/utils/prompt_utils.ts +0 -375
  490. package/src/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
  491. package/src/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
  492. package/src/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
  493. package/src/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
  494. package/src/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
  495. package/src/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
  496. package/src/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
  497. package/src/utils/prompts/SPECIAL_FILES.md +0 -66
  498. package/src/utils/prompts/index.ts +0 -37
  499. package/src/utils/string_utils.ts +0 -552
  500. package/src/utils/types.ts +0 -127
  501. package/tests/commands/generate/unit_tests.test.ts +0 -27
  502. package/tests/utils/git_utils.test.ts +0 -116
  503. package/tests/utils/model_utils.test.ts +0 -27
  504. package/tests/utils/prompt_utils.test.ts +0 -33
  505. package/tests/utils/string_utils.test.ts +0 -560
  506. package/tsconfig.json +0 -14
  507. package/yarn.lock +0 -5823
@@ -0,0 +1,186 @@
1
+ import { record } from "../protocol.js";
2
+ function show(value) {
3
+ return typeof value === "string" ? value : JSON.stringify(value);
4
+ }
5
+ function escaped(character) {
6
+ return `\\u${(character.codePointAt(0) ?? 0).toString(16).padStart(4, "0")}`;
7
+ }
8
+ const hiddenRanges = [
9
+ [0x00, 0x1f],
10
+ [0x7f, 0x9f],
11
+ [0x061c, 0x061c],
12
+ [0x200b, 0x200f],
13
+ [0x2028, 0x202e],
14
+ [0x2060, 0x2069],
15
+ [0xfeff, 0xfeff],
16
+ ];
17
+ function hidden(character) {
18
+ const code = character.codePointAt(0) ?? 0;
19
+ return hiddenRanges.some(([first, last]) => code >= first && code <= last);
20
+ }
21
+ function visible(value) {
22
+ return show(value)
23
+ .split("\n")
24
+ .map((line) => Array.from(line, (character) => hidden(character) ? escaped(character) : character).join(""))
25
+ .join("\n ");
26
+ }
27
+ export function errorText(error) {
28
+ const { candidates } = error;
29
+ const lines = [`${visible(error["code"])}: ${visible(error["detail"])}`];
30
+ if (Array.isArray(candidates))
31
+ lines.push(`Candidates: ${candidates.map(visible).join(", ")}`);
32
+ return lines.map((line) => `${line}\n`).join("");
33
+ }
34
+ function part(value, name) {
35
+ return record(value)?.[name];
36
+ }
37
+ function listing(value) {
38
+ const items = Array.isArray(value) ? value.map(show) : [];
39
+ return items.length === 0 ? "none" : items.join(", ");
40
+ }
41
+ function receiptLines(result) {
42
+ const receipt = result["receipt"];
43
+ return [
44
+ `Command ID: ${show(result["commandId"])}`,
45
+ `Receipt: sequence ${show(part(receipt, "sequence"))}, recorded at ${show(part(receipt, "recordedAt"))}`,
46
+ ...(result["replayed"] === true
47
+ ? ["This is the receipt of the earlier equal command."]
48
+ : []),
49
+ ];
50
+ }
51
+ function admitted(result) {
52
+ return [
53
+ `Run ${show(result["runId"])} is admitted.`,
54
+ ...receiptLines(result),
55
+ "The run is queued. Admission is not completed work.",
56
+ ];
57
+ }
58
+ function runLine(run) {
59
+ return ` ${show(part(run, "runId"))} ${show(part(run, "workflowId"))} ${show(part(run, "condition"))} revision ${show(part(run, "revision"))} latest at ${show(part(run, "latestAt") ?? "none")}`;
60
+ }
61
+ function runList(result) {
62
+ const runs = result["runs"];
63
+ const lines = Array.isArray(runs) ? runs.map(runLine) : [];
64
+ return [
65
+ `Workflows: ${visible(listing(result["workflows"]))}`,
66
+ "Runs:",
67
+ ...(lines.length === 0 ? [" none"] : lines),
68
+ ];
69
+ }
70
+ function observation(value) {
71
+ if (record(value) === undefined)
72
+ return "none";
73
+ return `${show(part(value, "at"))} (sequence ${show(part(value, "sequence"))}, ${show(part(value, "source"))})`;
74
+ }
75
+ function feedbackLines(value) {
76
+ return (Array.isArray(value) ? value : []).map((item) => `Feedback of ${show(part(item, "decisionId"))}: ${visible(part(item, "text"))}`);
77
+ }
78
+ function outcome(value) {
79
+ if (record(value) === undefined)
80
+ return "none";
81
+ const reason = part(value, "reason");
82
+ const kind = visible(part(value, "kind"));
83
+ return typeof reason === "string" ? `${kind}: ${visible(reason)}` : kind;
84
+ }
85
+ export function runStatus(result) {
86
+ const run = result["run"];
87
+ const reason = part(run, "reason");
88
+ const recovery = part(run, "recovery");
89
+ const at = part(run, "nextActionAt") ?? null;
90
+ const cost = part(run, "claudeCostUsd");
91
+ return [
92
+ `Run ${show(part(run, "runId"))} (${show(part(run, "workflowId"))})`,
93
+ `Title: ${visible(part(run, "title") ?? "none")}`,
94
+ `State: ${show(part(run, "state"))}`,
95
+ `Outcome: ${outcome(part(run, "outcome"))}`,
96
+ `Condition: ${show(part(run, "condition"))}`,
97
+ `Reason: ${show(part(reason, "code"))}: ${show(part(reason, "detail"))}`,
98
+ `Revision: ${show(part(run, "revision"))}, latest sequence ${show(part(run, "latestSequence"))}`,
99
+ `Latest at: ${show(part(run, "latestAt") ?? "none")}`,
100
+ `Pending decisions: ${listing(part(run, "pendingDecisions"))}`,
101
+ `Evidence: ${listing(part(run, "evidence"))}`,
102
+ `Last confirmed observation: ${observation(part(run, "lastConfirmedObservation"))}`,
103
+ `Recovery: ${show(part(recovery, "attempts"))} of ${show(part(recovery, "limit") ?? "no limit")}`,
104
+ `Claude cost: ${(typeof cost === "number" ? cost : 0).toFixed(2)} USD`,
105
+ `Next action: ${show(part(run, "nextAction") ?? "none")}${at === null ? "" : ` at ${show(at)}`}`,
106
+ `Human input can help: ${part(run, "humanInputCanHelp") === true ? "yes" : "no"}`,
107
+ ...feedbackLines(part(run, "feedback")),
108
+ ];
109
+ }
110
+ function binding(decision) {
111
+ return `--expected-revision ${show(part(decision, "revision"))} --generation ${show(part(decision, "generation"))} --subject-digest ${show(part(decision, "subjectDigest"))}`;
112
+ }
113
+ function suggestion(decision, command) {
114
+ const reference = part(decision, "label") ?? part(decision, "decisionId");
115
+ const head = ` cloving ${show(command)} ${show(reference)}`;
116
+ const tail = binding(decision);
117
+ if (command === "answer")
118
+ return `${head} --text <answer> ${tail}`;
119
+ if (command === "deny")
120
+ return `${head} --text "<feedback>" ${tail}`;
121
+ return `${head} ${tail}`;
122
+ }
123
+ export function decisionLines(decision) {
124
+ const allowed = part(decision, "allowed");
125
+ const label = part(decision, "label");
126
+ return [
127
+ `${label === null ? "" : `${show(label)} `}${show(part(decision, "type"))} ${show(part(decision, "decisionId"))}`,
128
+ ` Prompt: ${visible(part(decision, "prompt"))}`,
129
+ ...feedbackLines(part(decision, "feedback")).map((line) => ` ${line}`),
130
+ ...(Array.isArray(allowed) ? allowed : []).map((command) => suggestion(decision, command)),
131
+ ];
132
+ }
133
+ export function decisionList(result) {
134
+ const decisions = result["decisions"];
135
+ const lines = Array.isArray(decisions)
136
+ ? decisions.flatMap(decisionLines)
137
+ : [];
138
+ return lines.length === 0 ? ["No decision waits."] : lines;
139
+ }
140
+ function decisionRecorded(result) {
141
+ const run = result["run"];
142
+ return [
143
+ `Decision ${show(result["decisionId"])} is recorded as ${show(result["decision"])}.`,
144
+ ...receiptLines(result),
145
+ `Run state: ${show(part(run, "state"))}, revision ${show(part(run, "revision"))}`,
146
+ `Continuation: ${show(result["continuation"])}`,
147
+ ];
148
+ }
149
+ function runCommand(result) {
150
+ const committed = result["committed"];
151
+ const observed = result["observed"];
152
+ return [
153
+ `Run ${show(result["runId"])}: ${show(result["command"])} is committed. State ${show(part(committed, "state"))}, revision ${show(part(committed, "revision"))}.`,
154
+ ...receiptLines(result),
155
+ `Revoked intents: ${show(part(committed, "revokedIntents"))}`,
156
+ `Observed: ${show(part(observed, "condition"))}`,
157
+ `Unresolved effects: ${listing(part(observed, "unresolvedEffects"))}`,
158
+ ];
159
+ }
160
+ export function eventText(event) {
161
+ return `${show(event["sequence"])} ${show(event["recordedAt"])} ${show(event["type"])} ${show(event["runId"])} ${JSON.stringify(event["payload"])}`;
162
+ }
163
+ function eventPage(result) {
164
+ const events = result["events"];
165
+ return (Array.isArray(events) ? events : []).map((event) => eventText(record(event) ?? {}));
166
+ }
167
+ const renderers = new Map([
168
+ ["run-admitted", admitted],
169
+ ["run-list", runList],
170
+ ["run-status", runStatus],
171
+ ["decision-list", decisionList],
172
+ ["decision-recorded", decisionRecorded],
173
+ ["run-command", runCommand],
174
+ ["event-page", eventPage],
175
+ ]);
176
+ export function rendered(result) {
177
+ const lines = renderers.get(show(result["kind"]))?.(result) ?? [];
178
+ return lines.map((line) => `${line}\n`).join("");
179
+ }
180
+ export function pendingSummary(result) {
181
+ const decisions = result["decisions"];
182
+ const lines = (Array.isArray(decisions) ? decisions : []).map((decision) => ` ${show(part(decision, "label") ?? part(decision, "type"))} ${show(part(decision, "decisionId"))}: ${visible(part(decision, "prompt"))}`);
183
+ return ["Pending decisions:", ...(lines.length === 0 ? [" none"] : lines)]
184
+ .map((line) => `${line}\n`)
185
+ .join("");
186
+ }
@@ -0,0 +1,73 @@
1
+ export type RunSource = {
2
+ readonly kind: "prompt";
3
+ readonly text: string;
4
+ } | {
5
+ readonly kind: "ticket";
6
+ readonly id: string;
7
+ } | {
8
+ readonly kind: "input";
9
+ readonly file: string;
10
+ };
11
+ type DecisionCommand = "answer" | "approve" | "deny";
12
+ type RunCommand = "pause" | "resume" | "drop";
13
+ export type RuntimeInvocation = {
14
+ readonly kind: "command-help";
15
+ readonly command: string;
16
+ } | {
17
+ readonly kind: "run";
18
+ readonly workflowId: string;
19
+ readonly source: RunSource;
20
+ readonly commandId: string | null;
21
+ readonly json: boolean;
22
+ } | {
23
+ readonly kind: "status";
24
+ readonly runId: string | null;
25
+ readonly limit: number | null;
26
+ readonly after: string | null;
27
+ readonly json: boolean;
28
+ } | {
29
+ readonly kind: "questions";
30
+ readonly runId: string | null;
31
+ readonly json: boolean;
32
+ } | {
33
+ readonly kind: "decision";
34
+ readonly command: DecisionCommand;
35
+ readonly reference: string;
36
+ readonly text: string | null;
37
+ readonly expectedRevision: number;
38
+ readonly generation: number;
39
+ readonly subjectDigest: string;
40
+ readonly commandId: string | null;
41
+ readonly json: boolean;
42
+ } | {
43
+ readonly kind: "run-command";
44
+ readonly command: RunCommand;
45
+ readonly runId: string;
46
+ readonly expectedRevision: number;
47
+ readonly commandId: string | null;
48
+ readonly json: boolean;
49
+ } | {
50
+ readonly kind: "events";
51
+ readonly runId: string | null;
52
+ readonly after: number;
53
+ readonly limit: number | null;
54
+ readonly follow: boolean;
55
+ readonly json: boolean;
56
+ } | {
57
+ readonly kind: "watch";
58
+ readonly port: number | null;
59
+ readonly json: boolean;
60
+ };
61
+ export interface GivenOption {
62
+ readonly name: string;
63
+ readonly value: string | undefined;
64
+ }
65
+ export interface RuntimeRequest {
66
+ readonly command: string;
67
+ readonly positionals: readonly string[];
68
+ readonly options: readonly GivenOption[];
69
+ }
70
+ type Outcome = RuntimeInvocation | string;
71
+ export declare function isRuntimeCommand(command: string): boolean;
72
+ export declare function runtimeInvocation(request: RuntimeRequest): Outcome;
73
+ export {};
@@ -0,0 +1,248 @@
1
+ import { isRecordKey } from "../authority/commands.js";
2
+ const identifier = /^[A-Za-z0-9._:/-]{1,128}$/;
3
+ const decisionReference = /^[A-Za-z0-9._:/-]{1,256}$/;
4
+ const sha256Digest = /^sha256:[0-9a-f]{64}$/;
5
+ const wholeNumber = /^(?:0|[1-9][0-9]*)$/;
6
+ const invalid = Symbol("invalid");
7
+ const revisions = { minimum: 1, maximum: Number.MAX_SAFE_INTEGER };
8
+ const sequences = { minimum: 0, maximum: Number.MAX_SAFE_INTEGER };
9
+ const bindingOptions = ["expected-revision", "generation", "subject-digest"];
10
+ const mutationOptions = ["command-id", "json"];
11
+ const shapes = new Map([
12
+ [
13
+ "run",
14
+ {
15
+ subject: "required",
16
+ required: [],
17
+ allowed: () => ["prompt", "input", "ticket", "next", ...mutationOptions],
18
+ build: run,
19
+ },
20
+ ],
21
+ [
22
+ "status",
23
+ {
24
+ subject: "optional",
25
+ required: [],
26
+ allowed: statusOptions,
27
+ build: status,
28
+ },
29
+ ],
30
+ [
31
+ "questions",
32
+ {
33
+ subject: "optional",
34
+ required: [],
35
+ allowed: () => ["json"],
36
+ build: questions,
37
+ },
38
+ ],
39
+ ["answer", decisionShape("answer")],
40
+ ["approve", decisionShape("approve")],
41
+ ["deny", decisionShape("deny")],
42
+ ["pause", runCommandShape("pause")],
43
+ ["resume", runCommandShape("resume")],
44
+ ["drop", runCommandShape("drop")],
45
+ [
46
+ "events",
47
+ {
48
+ subject: "optional",
49
+ required: [],
50
+ allowed: eventOptions,
51
+ build: events,
52
+ },
53
+ ],
54
+ [
55
+ "watch",
56
+ {
57
+ subject: "none",
58
+ required: [],
59
+ allowed: () => ["port"],
60
+ build: watch,
61
+ },
62
+ ],
63
+ ]);
64
+ export function isRuntimeCommand(command) {
65
+ return shapes.has(command);
66
+ }
67
+ export function runtimeInvocation(request) {
68
+ const shape = shapes.get(request.command);
69
+ if (shape === undefined)
70
+ return "unknown-command";
71
+ const names = request.options.map((option) => option.name);
72
+ if (new Set(names).size !== names.length)
73
+ return "repeated-option";
74
+ if (names.includes("help"))
75
+ return { kind: "command-help", command: request.command };
76
+ return shapeFailure(shape, request) ?? shape.build(request);
77
+ }
78
+ function shapeFailure(shape, request) {
79
+ const names = request.options.map((option) => option.name);
80
+ const allowed = shape.allowed(request);
81
+ const count = request.positionals.length;
82
+ if (names.some((name) => !allowed.includes(name)))
83
+ return "unexpected-option";
84
+ if (shape.subject === "required" && count === 0)
85
+ return "missing-argument";
86
+ if (count > (shape.subject === "none" ? 0 : 1))
87
+ return "unexpected-argument";
88
+ if (shape.required.some((name) => !names.includes(name)))
89
+ return "missing-option";
90
+ return undefined;
91
+ }
92
+ function decisionShape(command) {
93
+ const required = command === "answer" ? [...bindingOptions, "text"] : bindingOptions;
94
+ const optional = command === "deny" ? ["text"] : [];
95
+ return {
96
+ subject: "required",
97
+ required,
98
+ allowed: () => [...required, ...optional, ...mutationOptions],
99
+ build: (request) => decision(command, request),
100
+ };
101
+ }
102
+ function runCommandShape(command) {
103
+ return {
104
+ subject: "required",
105
+ required: ["expected-revision"],
106
+ allowed: () => ["expected-revision", ...mutationOptions],
107
+ build: (request) => runCommand(command, request),
108
+ };
109
+ }
110
+ function statusOptions(request) {
111
+ return request.positionals.length === 0
112
+ ? ["limit", "after", "json"]
113
+ : ["json"];
114
+ }
115
+ function eventOptions(request) {
116
+ return given(request, "follow")
117
+ ? ["after", "follow", "json"]
118
+ : ["after", "limit", "follow", "json"];
119
+ }
120
+ function given(request, name) {
121
+ return request.options.some((option) => option.name === name);
122
+ }
123
+ function valueOf(request, name) {
124
+ return request.options.find((option) => option.name === name)?.value;
125
+ }
126
+ function blank(value) {
127
+ return value?.trim() === "";
128
+ }
129
+ function matching(value, pattern) {
130
+ if (value === undefined)
131
+ return null;
132
+ return pattern.test(value) ? value : invalid;
133
+ }
134
+ function key(value) {
135
+ if (value === undefined)
136
+ return null;
137
+ return isRecordKey(value) ? value : invalid;
138
+ }
139
+ function whole(value, range) {
140
+ if (value === undefined)
141
+ return null;
142
+ if (!wholeNumber.test(value))
143
+ return invalid;
144
+ const number = Number(value);
145
+ return number >= range.minimum && number <= range.maximum ? number : invalid;
146
+ }
147
+ function inputSource(request) {
148
+ const prompt = valueOf(request, "prompt");
149
+ const input = valueOf(request, "input");
150
+ const ticket = valueOf(request, "ticket");
151
+ const next = given(request, "next");
152
+ const sources = [prompt, input, ticket].filter((value) => value !== undefined);
153
+ if (sources.length + Number(next) > 1)
154
+ return "conflicting-input-sources";
155
+ if (prompt !== undefined)
156
+ return { kind: "prompt", text: prompt };
157
+ if (input !== undefined)
158
+ return { kind: "input", file: input };
159
+ if (ticket !== undefined)
160
+ return { kind: "ticket", id: ticket };
161
+ if (next)
162
+ return { kind: "ticket", id: "next" };
163
+ return "missing-input-source";
164
+ }
165
+ function run(request) {
166
+ const source = inputSource(request);
167
+ if (typeof source === "string")
168
+ return source;
169
+ if (blank(valueOf(request, "prompt")))
170
+ return "empty-prompt";
171
+ const workflowId = matching(request.positionals[0], identifier);
172
+ const commandId = key(valueOf(request, "command-id"));
173
+ const unusable = typeof workflowId !== "string" ||
174
+ key(valueOf(request, "ticket")) === invalid;
175
+ if (unusable || commandId === invalid)
176
+ return "invalid-option-value";
177
+ const json = given(request, "json");
178
+ return { kind: "run", workflowId, source, commandId, json };
179
+ }
180
+ function status(request) {
181
+ const runId = key(request.positionals[0]);
182
+ const limit = whole(valueOf(request, "limit"), { minimum: 1, maximum: 500 });
183
+ const after = matching(valueOf(request, "after"), identifier);
184
+ if (runId === invalid || limit === invalid || after === invalid)
185
+ return "invalid-option-value";
186
+ const json = given(request, "json");
187
+ return { kind: "status", runId, limit, after, json };
188
+ }
189
+ function watch(request) {
190
+ const port = whole(valueOf(request, "port"), { minimum: 0, maximum: 65535 });
191
+ if (port === invalid)
192
+ return "invalid-option-value";
193
+ return { kind: "watch", port, json: false };
194
+ }
195
+ function questions(request) {
196
+ const runId = key(request.positionals[0]);
197
+ if (runId === invalid)
198
+ return "invalid-option-value";
199
+ return { kind: "questions", runId, json: given(request, "json") };
200
+ }
201
+ function decision(command, request) {
202
+ const answer = valueOf(request, "text");
203
+ if (blank(answer))
204
+ return "empty-prompt";
205
+ const reference = matching(request.positionals[0], decisionReference);
206
+ const expectedRevision = whole(valueOf(request, "expected-revision"), revisions);
207
+ const generation = whole(valueOf(request, "generation"), revisions);
208
+ const subjectDigest = matching(valueOf(request, "subject-digest"), sha256Digest);
209
+ const commandId = key(valueOf(request, "command-id"));
210
+ if (typeof reference !== "string" ||
211
+ typeof expectedRevision !== "number" ||
212
+ typeof generation !== "number" ||
213
+ typeof subjectDigest !== "string" ||
214
+ commandId === invalid)
215
+ return "invalid-option-value";
216
+ const subject = { command, reference, text: answer ?? null };
217
+ const binding = { expectedRevision, generation, subjectDigest };
218
+ const json = given(request, "json");
219
+ return { kind: "decision", ...subject, ...binding, commandId, json };
220
+ }
221
+ function runCommand(command, request) {
222
+ const runId = key(request.positionals[0]);
223
+ const expectedRevision = whole(valueOf(request, "expected-revision"), revisions);
224
+ const commandId = key(valueOf(request, "command-id"));
225
+ if (typeof runId !== "string" ||
226
+ typeof expectedRevision !== "number" ||
227
+ commandId === invalid)
228
+ return "invalid-option-value";
229
+ const json = given(request, "json");
230
+ return {
231
+ kind: "run-command",
232
+ command,
233
+ runId,
234
+ expectedRevision,
235
+ commandId,
236
+ json,
237
+ };
238
+ }
239
+ function events(request) {
240
+ const runId = key(request.positionals[0]);
241
+ const after = whole(valueOf(request, "after"), sequences);
242
+ const limit = whole(valueOf(request, "limit"), { minimum: 1, maximum: 1000 });
243
+ if (runId === invalid || after === invalid || limit === invalid)
244
+ return "invalid-option-value";
245
+ const follow = given(request, "follow");
246
+ const json = given(request, "json");
247
+ return { kind: "events", runId, after: after ?? 0, limit, follow, json };
248
+ }
@@ -0,0 +1,4 @@
1
+ type Environment = Readonly<Record<string, string | undefined>>;
2
+ export declare function clientCommand(environment: Environment): string;
3
+ export declare function runtimeDirectory(environment: Environment): string | undefined;
4
+ export {};
@@ -0,0 +1,25 @@
1
+ import { join } from "node:path";
2
+ function given(value) {
3
+ return value !== undefined && value.length > 0;
4
+ }
5
+ export function clientCommand(environment) {
6
+ const explicit = environment["CLOVING_RUNTIME_DIR"];
7
+ return given(explicit)
8
+ ? `CLOVING_RUNTIME_DIR=${explicit} cloving`
9
+ : "cloving";
10
+ }
11
+ export function runtimeDirectory(environment) {
12
+ const explicit = environment["CLOVING_RUNTIME_DIR"];
13
+ if (given(explicit))
14
+ return explicit;
15
+ const runtime = environment["XDG_RUNTIME_DIR"];
16
+ if (given(runtime))
17
+ return join(runtime, "cloving");
18
+ const state = environment["XDG_STATE_HOME"];
19
+ if (given(state))
20
+ return join(state, "cloving", "run");
21
+ const home = environment["HOME"];
22
+ return given(home)
23
+ ? join(home, ".local", "state", "cloving", "run")
24
+ : undefined;
25
+ }
@@ -0,0 +1,3 @@
1
+ import type { ToolchainIdentity } from "../workflow-admission.ts";
2
+ export declare function observedToolchain(start: string): Promise<ToolchainIdentity>;
3
+ export declare function qualifiedToolchain(observed: ToolchainIdentity, start: string): Promise<ToolchainIdentity>;
@@ -0,0 +1,74 @@
1
+ import { findPackageJSON } from "node:module";
2
+ import { createHash } from "node:crypto";
3
+ import { access, readFile, realpath } from "node:fs/promises";
4
+ import { dirname, join } from "node:path";
5
+ import packageMetadata from "#package" with { type: "json" };
6
+ const qualifiedNode = "v26.9.0";
7
+ export async function observedToolchain(start) {
8
+ const root = await projectRoot(start);
9
+ const sdk = await packageDirectory(start, "workflow");
10
+ const core = sdk === undefined
11
+ ? undefined
12
+ : await packageDirectory(sdk, "@workflow/core");
13
+ const lock = await readFile(join(root, "package-lock.json")).catch(() => null);
14
+ return {
15
+ sdk: `workflow@${await installedVersion(start, "workflow")}`,
16
+ world: `@workflow/world-local@${await installedVersion(core ?? start, "@workflow/world-local")}`,
17
+ builder: `@workflow/builders@${await installedVersion(start, "@workflow/builders")}`,
18
+ node: process.version,
19
+ dependencies: lock === null
20
+ ? "missing"
21
+ : createHash("sha256").update(lock).digest("hex"),
22
+ };
23
+ }
24
+ export async function qualifiedToolchain(observed, start) {
25
+ const sdk = await packageDirectory(start, "workflow");
26
+ const core = await packageFields(sdk ?? start, "@workflow/core");
27
+ const declared = fields(core["dependencies"])["@workflow/world-local"];
28
+ return {
29
+ sdk: `workflow@${packageMetadata.dependencies.workflow}`,
30
+ world: `@workflow/world-local@${typeof declared === "string" ? declared : "undeclared"}`,
31
+ builder: `@workflow/builders@${packageMetadata.dependencies["@workflow/builders"]}`,
32
+ node: qualifiedNode,
33
+ dependencies: observed.dependencies,
34
+ };
35
+ }
36
+ async function projectRoot(start) {
37
+ let directory = start;
38
+ for (;;) {
39
+ const found = await access(join(directory, "package-lock.json")).then(() => true, () => false);
40
+ const parent = dirname(directory);
41
+ if (found || parent === directory)
42
+ return directory;
43
+ directory = parent;
44
+ }
45
+ }
46
+ async function installedVersion(root, name) {
47
+ const version = (await packageFields(root, name))["version"];
48
+ return typeof version === "string" ? version : "missing";
49
+ }
50
+ async function packageFields(root, name) {
51
+ const directory = await packageDirectory(root, name);
52
+ if (directory === undefined)
53
+ return {};
54
+ const text = await readFile(join(directory, "package.json"), "utf8").catch(() => "{}");
55
+ return fields(JSON.parse(text));
56
+ }
57
+ function fields(value) {
58
+ if (!value || typeof value !== "object" || Array.isArray(value))
59
+ return {};
60
+ return Object.fromEntries(Object.entries(value));
61
+ }
62
+ async function packageDirectory(start, name) {
63
+ try {
64
+ const file = findPackageJSON(name, join(start, "package.json"));
65
+ return file === undefined ? undefined : dirname(await realpath(file));
66
+ }
67
+ catch (error) {
68
+ if (error instanceof Error &&
69
+ "code" in error &&
70
+ error.code === "ERR_MODULE_NOT_FOUND")
71
+ return undefined;
72
+ throw error;
73
+ }
74
+ }
@@ -0,0 +1,4 @@
1
+ export declare const commandUsage: Readonly<Record<string, string>>;
2
+ export declare const usage = "Usage: cloving [--help] [--version]\n cloving workflows validate <manifest-path> [--input <json-file>] [--json]\n cloving <command> [--help]\n\nCommands:\n workflows validate Check a compiled workflow manifest, its artifacts and optional runtime input.\n chats import Import explicitly selected Claude Code transcripts into private runtime files.\n run Submit one run of an admitted workflow.\n status List the runs or show one run.\n questions List the pending decisions.\n answer Answer one design question.\n approve Approve one pending approval.\n deny Deny one pending approval.\n pause Stop new dispatch for a run.\n resume Resume a paused run.\n drop Cancel a run and keep its files.\n events Print the committed events.\n watch Serve a page that shows the runs live.\n start Start the service for a repository.\n\nThe runtime commands need a Cloving service. CLOVING_RUNTIME_DIR names its runtime directory.\nUse npm exec -- cloving ... for a project-local installation.\n";
3
+ export declare const chatsImportUsage = "Usage: cloving chats import [--] <path> [<path> ...]\n\nImports only the selected Claude Code JSONL files. Relative paths use the current directory.\nThis local command needs no service. It does not expand globs or scan directories.\nThe file limit is 10 MiB (10,485,760 bytes). Links and nonregular files are refused.\nPrivate corpus.jsonl and coverage.json files go into a new import directory under the runtime directory's chats directory.\nThe runtime selection is CLOVING_RUNTIME_DIR, XDG_RUNTIME_DIR, XDG_STATE_HOME, then HOME.\nOutput contains only counts, fixed codes and an opaque import ID. Source paths stay in the private manifest.\nExit codes: 0 for complete coverage, 1 for refused sources or output failure, 2 for invalid usage.\n";
4
+ export declare const validateUsage = "Usage: cloving workflows validate <manifest-path> [--input <json-file>] [--json]\n\nChecks a Cloving workflow manifest, its compiled SDK artifacts, declared resources and toolchain, and an optional runtime input file. Relative paths resolve against the current directory.\n\nOptions:\n --input <json-file> Validate this runtime input file.\n --json Print one versioned JSON result on stdout.\n\nValidation does not admit a run, dispatch effects, import workflow code or call a model.\n\nExample:\n cloving workflows validate cloving.workflow.json --input input.json\n";