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,23 @@
1
+ import { type RuntimeInvocation } from "./runtime-arguments.ts";
2
+ export type Invocation = {
3
+ readonly kind: "help";
4
+ } | {
5
+ readonly kind: "version";
6
+ } | {
7
+ readonly kind: "validate-help";
8
+ } | {
9
+ readonly kind: "chats-import-help";
10
+ } | {
11
+ readonly kind: "chats-import";
12
+ readonly paths: readonly string[];
13
+ } | {
14
+ readonly kind: "validate";
15
+ readonly manifest: string;
16
+ readonly input: string | null;
17
+ readonly json: boolean;
18
+ } | RuntimeInvocation | {
19
+ readonly kind: "usage-error";
20
+ readonly code: string;
21
+ readonly json: boolean;
22
+ };
23
+ export declare function parseInvocation(given: readonly string[]): Invocation;
@@ -0,0 +1,154 @@
1
+ import { parseArgs } from "node:util";
2
+ import { isRuntimeCommand, runtimeInvocation, } from "./runtime-arguments.js";
3
+ const errorCodes = {
4
+ ERR_PARSE_ARGS_UNKNOWN_OPTION: "unknown-option",
5
+ ERR_PARSE_ARGS_INVALID_OPTION_VALUE: "missing-value",
6
+ };
7
+ const options = {
8
+ help: { type: "boolean", short: "h" },
9
+ version: { type: "boolean", short: "v" },
10
+ input: { type: "string" },
11
+ json: { type: "boolean" },
12
+ prompt: { type: "string" },
13
+ ticket: { type: "string" },
14
+ next: { type: "boolean" },
15
+ port: { type: "string" },
16
+ text: { type: "string" },
17
+ "command-id": { type: "string" },
18
+ "expected-revision": { type: "string" },
19
+ generation: { type: "string" },
20
+ "subject-digest": { type: "string" },
21
+ limit: { type: "string" },
22
+ after: { type: "string" },
23
+ follow: { type: "boolean" },
24
+ };
25
+ const textOptions = ["--prompt", "--text"];
26
+ function knownFlag(token) {
27
+ if (token.startsWith("--"))
28
+ return Object.hasOwn(options, token.slice(2));
29
+ return token === "-h" || token === "-v";
30
+ }
31
+ function attached(option, value) {
32
+ return value.startsWith("-") && !knownFlag(value)
33
+ ? [`${option}=${value}`]
34
+ : [option, value];
35
+ }
36
+ function textValues(argumentsList) {
37
+ const joined = [];
38
+ let option;
39
+ for (const token of argumentsList) {
40
+ const pending = option;
41
+ option =
42
+ pending === undefined && textOptions.includes(token) ? token : undefined;
43
+ if (pending !== undefined)
44
+ joined.push(...attached(pending, token));
45
+ else if (option === undefined)
46
+ joined.push(token);
47
+ }
48
+ return option === undefined ? joined : [...joined, option];
49
+ }
50
+ export function parseInvocation(given) {
51
+ if (given[0] === "chats" && given[1] === "import")
52
+ return chatsImport(given.slice(2));
53
+ const argumentsList = textValues(given);
54
+ const json = given.includes("--json");
55
+ const parsed = parsedArguments(argumentsList);
56
+ if (typeof parsed === "string")
57
+ return { kind: "usage-error", code: parsed, json };
58
+ const { values, positionals, tokens } = parsed;
59
+ const [command, ...remaining] = positionals;
60
+ if (command === undefined)
61
+ return topLevel(values);
62
+ if (command === "workflows" && remaining[0] === "validate")
63
+ return validation(values, remaining.slice(1));
64
+ const outcome = runtimeInvocation({
65
+ command,
66
+ positionals: remaining,
67
+ options: givenOptions(tokens),
68
+ });
69
+ if (typeof outcome === "string")
70
+ return { kind: "usage-error", code: outcome, json };
71
+ return outcome;
72
+ }
73
+ function chatsImport(argumentsList) {
74
+ const error = (code) => ({
75
+ kind: "usage-error",
76
+ code,
77
+ json: false,
78
+ });
79
+ if (argumentsList.length === 1 &&
80
+ ["--help", "-h"].includes(String(argumentsList[0])))
81
+ return { kind: "chats-import-help" };
82
+ const paths = [];
83
+ let literal = false;
84
+ for (const argument of argumentsList) {
85
+ if (!literal && argument === "--")
86
+ literal = true;
87
+ else if (!literal && argument.startsWith("-"))
88
+ return error("unexpected-option");
89
+ else if (argument === "")
90
+ return error("missing-argument");
91
+ else
92
+ paths.push(argument);
93
+ }
94
+ return paths.length === 0
95
+ ? error("missing-argument")
96
+ : { kind: "chats-import", paths };
97
+ }
98
+ function parsedArguments(argumentsList) {
99
+ try {
100
+ return parseArgs({
101
+ args: [...argumentsList],
102
+ allowPositionals: true,
103
+ options,
104
+ tokens: true,
105
+ });
106
+ }
107
+ catch (error) {
108
+ if (!knownCommand(lenientPositionals(argumentsList)))
109
+ return "unknown-command";
110
+ const code = error instanceof Error && "code" in error ? String(error.code) : "";
111
+ return errorCodes[code] ?? "invalid-invocation";
112
+ }
113
+ }
114
+ function lenientPositionals(argumentsList) {
115
+ return parseArgs({
116
+ args: [...argumentsList],
117
+ allowPositionals: true,
118
+ options,
119
+ strict: false,
120
+ }).positionals;
121
+ }
122
+ function knownCommand(positionals) {
123
+ const [command, subcommand] = positionals;
124
+ if (command === undefined)
125
+ return true;
126
+ if (command === "workflows")
127
+ return subcommand === "validate";
128
+ return isRuntimeCommand(command);
129
+ }
130
+ function givenOptions(tokens) {
131
+ return tokens.flatMap((token) => token.kind === "option" ? [{ name: token.name, value: token.value }] : []);
132
+ }
133
+ function unexpected(values, allowed) {
134
+ return Object.keys(values).some((name) => !allowed.includes(name));
135
+ }
136
+ function validation(values, remaining) {
137
+ const json = values.json === true;
138
+ if (unexpected(values, ["help", "input", "json"]))
139
+ return { kind: "usage-error", code: "unexpected-option", json };
140
+ if (values.help)
141
+ return { kind: "validate-help" };
142
+ const [manifest, ...extra] = remaining;
143
+ if (manifest === undefined)
144
+ return { kind: "usage-error", code: "missing-argument", json };
145
+ if (extra.length > 0)
146
+ return { kind: "usage-error", code: "unexpected-argument", json };
147
+ return { kind: "validate", manifest, input: values.input ?? null, json };
148
+ }
149
+ function topLevel(values) {
150
+ const json = values.json === true;
151
+ if (unexpected(values, ["help", "version"]))
152
+ return { kind: "usage-error", code: "unexpected-option", json };
153
+ return values.version ? { kind: "version" } : { kind: "help" };
154
+ }
@@ -0,0 +1,15 @@
1
+ import { type Fields, type Reply, type ServiceRequest } from "../protocol.ts";
2
+ export interface Interruption {
3
+ readonly signal: Promise<void>;
4
+ readonly reply: Reply;
5
+ }
6
+ export declare function send(runtimeDirectory: string, request: ServiceRequest): Promise<Reply>;
7
+ export declare function mutate(runtimeDirectory: string, mutation: {
8
+ readonly request: ServiceRequest;
9
+ readonly signal: Promise<void>;
10
+ }): Promise<Reply>;
11
+ export declare function follow(runtimeDirectory: string, stream: {
12
+ readonly request: ServiceRequest;
13
+ readonly onEvent: (event: Fields) => void;
14
+ readonly signal: Promise<void>;
15
+ }): Promise<Reply>;
@@ -0,0 +1,122 @@
1
+ import net from "node:net";
2
+ import { join } from "node:path";
3
+ import { socketAddress } from "../broker/socket-address.js";
4
+ import { parseReplyLine, requestLine, } from "../protocol.js";
5
+ const mutations = ["run", "decision", "run-command"];
6
+ function unavailable(runtimeDirectory) {
7
+ return {
8
+ kind: "error",
9
+ error: {
10
+ code: "service-unavailable",
11
+ detail: `No Cloving service answers in ${runtimeDirectory}. Start the service, or set CLOVING_RUNTIME_DIR to its runtime directory.`,
12
+ },
13
+ };
14
+ }
15
+ function refused(runtimeDirectory) {
16
+ return {
17
+ kind: "error",
18
+ error: {
19
+ code: "permission-denied",
20
+ detail: `The service socket in ${runtimeDirectory} refused this account.`,
21
+ },
22
+ };
23
+ }
24
+ function lost(request, runtimeDirectory) {
25
+ if (!mutations.includes(request.operation))
26
+ return unavailable(runtimeDirectory);
27
+ return {
28
+ kind: "error",
29
+ error: {
30
+ code: "outcome-unknown",
31
+ detail: "The connection ended before the reply. Send the command again with the same command ID.",
32
+ },
33
+ };
34
+ }
35
+ function exchange(context) {
36
+ const { runtimeDirectory, request, onEvent, interruption } = context;
37
+ const address = socketAddress(join(runtimeDirectory, "control.sock"));
38
+ if (address.kind === "refused")
39
+ return Promise.resolve({
40
+ kind: "error",
41
+ error: { code: address.reason, detail: address.detail },
42
+ });
43
+ return new Promise((settle) => {
44
+ const socket = net.connect(address.path);
45
+ let buffered = "";
46
+ let written = false;
47
+ socket.setEncoding("utf8");
48
+ socket.on("connect", () => {
49
+ socket.write(requestLine(request), () => {
50
+ written = true;
51
+ });
52
+ });
53
+ socket.on("data", (data) => {
54
+ buffered += data;
55
+ const lines = buffered.split("\n");
56
+ buffered = lines.pop() ?? "";
57
+ for (const line of lines) {
58
+ const parsed = parseReplyLine(line);
59
+ if (parsed?.kind === "event")
60
+ onEvent(parsed.event);
61
+ if (parsed?.kind === "result" || parsed?.kind === "error") {
62
+ settle(parsed);
63
+ socket.destroy();
64
+ }
65
+ }
66
+ });
67
+ const stopped = (reply) => () => {
68
+ settle(reply);
69
+ socket.destroy();
70
+ };
71
+ if (interruption !== undefined)
72
+ interruption.signal.then(stopped(interruption.reply), stopped(interruption.reply));
73
+ const ended = (code) => {
74
+ if (code === "EACCES")
75
+ return refused(runtimeDirectory);
76
+ return written
77
+ ? lost(request, runtimeDirectory)
78
+ : unavailable(runtimeDirectory);
79
+ };
80
+ socket.on("error", (error) => {
81
+ settle(ended(Reflect.get(error, "code")));
82
+ });
83
+ socket.on("close", () => {
84
+ settle(ended(undefined));
85
+ });
86
+ });
87
+ }
88
+ const unobserved = () => undefined;
89
+ export function send(runtimeDirectory, request) {
90
+ return exchange({ runtimeDirectory, request, onEvent: unobserved });
91
+ }
92
+ export function mutate(runtimeDirectory, mutation) {
93
+ return exchange({
94
+ runtimeDirectory,
95
+ request: mutation.request,
96
+ onEvent: unobserved,
97
+ interruption: {
98
+ signal: mutation.signal,
99
+ reply: {
100
+ kind: "error",
101
+ error: {
102
+ code: "outcome-unknown",
103
+ detail: "A signal ended the command before the reply. Send the command again with the same command ID.",
104
+ },
105
+ },
106
+ },
107
+ });
108
+ }
109
+ export function follow(runtimeDirectory, stream) {
110
+ return exchange({
111
+ runtimeDirectory,
112
+ request: stream.request,
113
+ onEvent: stream.onEvent,
114
+ interruption: {
115
+ signal: stream.signal,
116
+ reply: {
117
+ kind: "result",
118
+ result: { schemaVersion: 1, kind: "event-page", events: [] },
119
+ },
120
+ },
121
+ });
122
+ }
@@ -0,0 +1,14 @@
1
+ import type { RuntimeInvocation } from "./runtime-arguments.ts";
2
+ export interface Terminal {
3
+ readonly out: (text: string) => void;
4
+ readonly error: (text: string) => void;
5
+ }
6
+ export interface CommandEnvironment {
7
+ readonly runtimeDirectory: string | undefined;
8
+ readonly client?: string;
9
+ readonly workingDirectory: string;
10
+ readonly terminal: Terminal;
11
+ readonly identifier: () => string;
12
+ readonly interrupted: () => Promise<void>;
13
+ }
14
+ export declare function runtimeCommand(invocation: RuntimeInvocation, environment: CommandEnvironment): Promise<number>;
@@ -0,0 +1,253 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ import { record, } from "../protocol.js";
4
+ import { follow, mutate, send } from "./client.js";
5
+ import { errorText, eventText, pendingSummary, rendered } from "./render.js";
6
+ import { commandUsage } from "./usage.js";
7
+ import { defaultWatchPort, watchServer } from "./watch-server.js";
8
+ function errorObject(error, format) {
9
+ if (error.code === "event-gap")
10
+ return {
11
+ schemaVersion: 1,
12
+ kind: "event-gap",
13
+ after: error["after"],
14
+ earliestAvailable: error["earliestAvailable"],
15
+ latestSequence: error["latestSequence"],
16
+ };
17
+ return {
18
+ schemaVersion: 1,
19
+ kind: "error",
20
+ ...error,
21
+ commandId: error["commandId"] ?? format.commandId ?? null,
22
+ runId: error["runId"] ?? null,
23
+ currentRevision: error["currentRevision"] ?? null,
24
+ };
25
+ }
26
+ function failed(environment, failure) {
27
+ const { terminal } = environment;
28
+ const shown = errorObject(failure.error, failure.format);
29
+ if (failure.format.json) {
30
+ terminal.out(`${JSON.stringify(shown)}\n`);
31
+ return 1;
32
+ }
33
+ terminal.error(errorText(failure.error));
34
+ if (typeof shown["commandId"] === "string" && !failure.format.announced)
35
+ terminal.error(`Command ID: ${shown["commandId"]}\n`);
36
+ return 1;
37
+ }
38
+ function presented(environment, outcome) {
39
+ const { reply, format } = outcome;
40
+ if (reply.kind === "error")
41
+ return failed(environment, { error: reply.error, format });
42
+ environment.terminal.out(format.json ? `${JSON.stringify(reply.result)}\n` : rendered(reply.result));
43
+ return 0;
44
+ }
45
+ async function requested(environment, exchange) {
46
+ return presented(environment, {
47
+ reply: await send(environment.runtimeDirectory, exchange.request),
48
+ format: exchange.format,
49
+ });
50
+ }
51
+ async function mutated(environment, exchange) {
52
+ return presented(environment, {
53
+ reply: await mutate(environment.runtimeDirectory, {
54
+ request: exchange.request,
55
+ signal: environment.interrupted(),
56
+ }),
57
+ format: exchange.format,
58
+ });
59
+ }
60
+ function identified(environment, invocation) {
61
+ const { json } = invocation;
62
+ if (invocation.commandId !== null)
63
+ return { json, commandId: invocation.commandId, announced: false };
64
+ const commandId = environment.identifier();
65
+ if (!json)
66
+ environment.terminal.error(`Command ID: ${commandId}\n`);
67
+ return { json, commandId, announced: !json };
68
+ }
69
+ async function inputFile(environment, file) {
70
+ let text;
71
+ try {
72
+ text = await readFile(resolve(environment.workingDirectory, file), "utf8");
73
+ }
74
+ catch {
75
+ return {
76
+ kind: "error",
77
+ error: {
78
+ code: "unreadable-input",
79
+ detail: `The input file ${file} is not readable.`,
80
+ },
81
+ };
82
+ }
83
+ try {
84
+ return { kind: "read", submission: JSON.parse(text) };
85
+ }
86
+ catch {
87
+ return {
88
+ kind: "error",
89
+ error: {
90
+ code: "malformed-input",
91
+ detail: `The input file ${file} is not JSON.`,
92
+ },
93
+ };
94
+ }
95
+ }
96
+ function typed(source) {
97
+ return source.kind === "prompt"
98
+ ? { prompt: source.text }
99
+ : { ticket: source.id };
100
+ }
101
+ async function run(environment, invocation) {
102
+ const format = identified(environment, invocation);
103
+ const { commandId } = format;
104
+ const { source } = invocation;
105
+ const read = source.kind === "input"
106
+ ? await inputFile(environment, source.file)
107
+ : { kind: "read", submission: typed(source) };
108
+ if (read.kind === "error")
109
+ return failed(environment, { error: read.error, format });
110
+ return mutated(environment, {
111
+ format,
112
+ request: {
113
+ operation: "run",
114
+ parameters: {
115
+ workflowId: invocation.workflowId,
116
+ source: source.kind,
117
+ submission: read.submission,
118
+ commandId,
119
+ },
120
+ },
121
+ });
122
+ }
123
+ function present(values) {
124
+ return Object.fromEntries(Object.entries(values).filter(([, value]) => value !== null));
125
+ }
126
+ async function summarized(environment) {
127
+ const pending = await send(environment.runtimeDirectory, {
128
+ operation: "questions",
129
+ parameters: {},
130
+ });
131
+ if (pending.kind === "result")
132
+ environment.terminal.out(pendingSummary(pending.result));
133
+ }
134
+ async function status(environment, invocation) {
135
+ const { runId, limit, after, json } = invocation;
136
+ if (!json && runId === null)
137
+ await summarized(environment);
138
+ return requested(environment, {
139
+ format: { json },
140
+ request: {
141
+ operation: "status",
142
+ parameters: present({ runId, limit, after }),
143
+ },
144
+ });
145
+ }
146
+ function decision(environment, invocation) {
147
+ const format = identified(environment, invocation);
148
+ const { commandId } = format;
149
+ return mutated(environment, {
150
+ format,
151
+ request: {
152
+ operation: "decision",
153
+ parameters: present({
154
+ command: invocation.command,
155
+ reference: invocation.reference,
156
+ text: invocation.text,
157
+ expectedRevision: invocation.expectedRevision,
158
+ generation: invocation.generation,
159
+ subjectDigest: invocation.subjectDigest,
160
+ commandId,
161
+ }),
162
+ },
163
+ });
164
+ }
165
+ function runCommand(environment, invocation) {
166
+ const format = identified(environment, invocation);
167
+ const { commandId } = format;
168
+ return mutated(environment, {
169
+ format,
170
+ request: {
171
+ operation: "run-command",
172
+ parameters: {
173
+ command: invocation.command,
174
+ runId: invocation.runId,
175
+ expectedRevision: invocation.expectedRevision,
176
+ commandId,
177
+ },
178
+ },
179
+ });
180
+ }
181
+ async function events(environment, invocation) {
182
+ const { json, follow: following } = invocation;
183
+ const { terminal } = environment;
184
+ const print = (event) => {
185
+ terminal.out(json ? `${JSON.stringify(event)}\n` : `${eventText(event)}\n`);
186
+ };
187
+ const request = {
188
+ operation: "events",
189
+ parameters: present({
190
+ runId: invocation.runId,
191
+ after: invocation.after,
192
+ limit: invocation.limit,
193
+ follow: following,
194
+ }),
195
+ };
196
+ const reply = following
197
+ ? await follow(environment.runtimeDirectory, {
198
+ request,
199
+ onEvent: print,
200
+ signal: environment.interrupted(),
201
+ })
202
+ : await send(environment.runtimeDirectory, request);
203
+ if (reply.kind === "error")
204
+ return failed(environment, { error: reply.error, format: { json } });
205
+ const page = reply.result["events"];
206
+ for (const event of Array.isArray(page) ? page : [])
207
+ print(record(event) ?? {});
208
+ return 0;
209
+ }
210
+ export function runtimeCommand(invocation, environment) {
211
+ if (invocation.kind === "command-help") {
212
+ environment.terminal.out(commandUsage[invocation.command] ?? "");
213
+ return Promise.resolve(0);
214
+ }
215
+ const { runtimeDirectory } = environment;
216
+ if (runtimeDirectory === undefined)
217
+ return Promise.resolve(failed(environment, {
218
+ error: {
219
+ code: "runtime-directory-unknown",
220
+ detail: "No runtime directory is known. Set CLOVING_RUNTIME_DIR to the runtime directory of the service.",
221
+ },
222
+ format: { json: invocation.json },
223
+ }));
224
+ return located(invocation, { ...environment, runtimeDirectory });
225
+ }
226
+ function located(invocation, environment) {
227
+ if (invocation.kind === "run")
228
+ return run(environment, invocation);
229
+ if (invocation.kind === "status")
230
+ return status(environment, invocation);
231
+ if (invocation.kind === "decision")
232
+ return decision(environment, invocation);
233
+ if (invocation.kind === "run-command")
234
+ return runCommand(environment, invocation);
235
+ if (invocation.kind === "events")
236
+ return events(environment, invocation);
237
+ if (invocation.kind === "watch")
238
+ return watchServer({
239
+ runtimeDirectory: environment.runtimeDirectory,
240
+ port: invocation.port ?? defaultWatchPort,
241
+ client: environment.client ?? "cloving",
242
+ announce: environment.terminal.out,
243
+ complain: environment.terminal.error,
244
+ stopped: environment.interrupted(),
245
+ });
246
+ return requested(environment, {
247
+ format: { json: invocation.json },
248
+ request: {
249
+ operation: "questions",
250
+ parameters: present({ runId: invocation.runId }),
251
+ },
252
+ });
253
+ }
@@ -0,0 +1 @@
1
+ export declare function main(argumentsList: readonly string[]): Promise<void>;
@@ -0,0 +1,80 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import packageMetadata from "#package" with { type: "json" };
3
+ import { importChats } from "../chats/import.js";
4
+ import { parseInvocation } from "./arguments.js";
5
+ import { runtimeCommand } from "./commands.js";
6
+ import { clientCommand, runtimeDirectory } from "./runtime-directory.js";
7
+ import { chatsImportUsage, usage, validateUsage } from "./usage.js";
8
+ import { validateWorkflow } from "./validate.js";
9
+ export async function main(argumentsList) {
10
+ const invocation = parseInvocation(argumentsList);
11
+ if (invocation.kind === "usage-error") {
12
+ presentUsageError(invocation);
13
+ }
14
+ else if (invocation.kind === "validate") {
15
+ await validationCommand(invocation);
16
+ }
17
+ else if (invocation.kind === "version") {
18
+ process.stdout.write(`${packageMetadata.version}\n`);
19
+ }
20
+ else if (invocation.kind === "help") {
21
+ process.stdout.write(usage);
22
+ }
23
+ else if (invocation.kind === "validate-help") {
24
+ process.stdout.write(validateUsage);
25
+ }
26
+ else if (invocation.kind === "chats-import-help") {
27
+ process.stdout.write(chatsImportUsage);
28
+ }
29
+ else if (invocation.kind === "chats-import") {
30
+ const result = await importChats({
31
+ paths: invocation.paths,
32
+ workingDirectory: process.cwd(),
33
+ runtimeDirectory: runtimeDirectory(process.env),
34
+ });
35
+ process.stdout.write(`${JSON.stringify(result)}\n`);
36
+ process.exitCode = result.code === "import-complete" ? 0 : 1;
37
+ }
38
+ else {
39
+ process.exitCode = await runtimeCommand(invocation, {
40
+ runtimeDirectory: runtimeDirectory(process.env),
41
+ client: clientCommand(process.env),
42
+ workingDirectory: process.cwd(),
43
+ terminal: {
44
+ out: (text) => process.stdout.write(text),
45
+ error: (text) => process.stderr.write(text),
46
+ },
47
+ identifier: randomUUID,
48
+ interrupted: () => new Promise((settle) => {
49
+ for (const signal of ["SIGINT", "SIGTERM"])
50
+ process.once(signal, () => {
51
+ settle();
52
+ });
53
+ }),
54
+ });
55
+ }
56
+ }
57
+ function presentUsageError(invocation) {
58
+ if (invocation.json)
59
+ process.stdout.write(`${JSON.stringify({ schemaVersion: 1, kind: "usage-error", code: invocation.code })}\n`);
60
+ else
61
+ process.stderr.write(`${invocation.code}: run cloving --help for usage.\n`);
62
+ process.exitCode = 2;
63
+ }
64
+ async function validationCommand(invocation) {
65
+ const report = await validateWorkflow(process.cwd(), invocation);
66
+ present(report, invocation.json ? "json" : "human");
67
+ process.exitCode = report.status === "valid" ? 0 : 1;
68
+ }
69
+ function present(report, format) {
70
+ if (format === "json") {
71
+ process.stdout.write(`${JSON.stringify(report)}\n`);
72
+ return;
73
+ }
74
+ if (report.status === "valid") {
75
+ process.stdout.write(`Workflow ${report.workflow.name} is valid.\nWorkflow ID: ${report.workflow.workflowId}\nPinned identity: ${report.pinnedIdentity}\n`);
76
+ return;
77
+ }
78
+ for (const error of report.errors)
79
+ process.stderr.write(`${error.code}: ${error.file}: ${error.detail}\n`);
80
+ }
@@ -0,0 +1,8 @@
1
+ import { type Fields } from "../protocol.ts";
2
+ export declare function errorText(error: Fields): string;
3
+ export declare function runStatus(result: Fields): readonly string[];
4
+ export declare function decisionLines(decision: unknown): readonly string[];
5
+ export declare function decisionList(result: Fields): readonly string[];
6
+ export declare function eventText(event: Fields): string;
7
+ export declare function rendered(result: Fields): string;
8
+ export declare function pendingSummary(result: Fields): string;