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,88 @@
1
+ const identifier = /^[A-Za-z0-9._:-]{1,128}$/;
2
+ const reason = /^\S[\s\S]{0,255}$/;
3
+ export function isBlockedReason(value) {
4
+ return typeof value === "string" && reason.test(value);
5
+ }
6
+ const outcomes = {
7
+ waiting_for_decision: {
8
+ keys: ["cycleId", "decisionId", "kind"],
9
+ parse: (fields) => {
10
+ const cycleId = textField(fields, {
11
+ key: "cycleId",
12
+ pattern: identifier,
13
+ });
14
+ const decisionId = textField(fields, {
15
+ key: "decisionId",
16
+ pattern: identifier,
17
+ });
18
+ if (cycleId === null || decisionId === null)
19
+ return null;
20
+ return { kind: "waiting_for_decision", cycleId, decisionId };
21
+ },
22
+ },
23
+ blocked: {
24
+ keys: ["cycleId", "evidenceId", "kind", "reason"],
25
+ parse: (fields) => {
26
+ const cycleId = textField(fields, {
27
+ key: "cycleId",
28
+ pattern: identifier,
29
+ });
30
+ const evidenceId = textField(fields, {
31
+ key: "evidenceId",
32
+ pattern: identifier,
33
+ });
34
+ const blocker = fields["reason"];
35
+ if (cycleId === null || evidenceId === null || !isBlockedReason(blocker))
36
+ return null;
37
+ return { kind: "blocked", cycleId, reason: blocker, evidenceId };
38
+ },
39
+ },
40
+ handoff_requested: {
41
+ keys: ["cycleId", "kind", "promotionId"],
42
+ parse: (fields) => {
43
+ const cycleId = textField(fields, {
44
+ key: "cycleId",
45
+ pattern: identifier,
46
+ });
47
+ const promotionId = textField(fields, {
48
+ key: "promotionId",
49
+ pattern: identifier,
50
+ });
51
+ if (cycleId === null || promotionId === null)
52
+ return null;
53
+ return { kind: "handoff_requested", cycleId, promotionId };
54
+ },
55
+ },
56
+ };
57
+ export function validateDevelopmentInput(value) {
58
+ const fields = exactFields(value, ["cycleId"]);
59
+ const cycleId = fields && textField(fields, { key: "cycleId", pattern: identifier });
60
+ if (!cycleId)
61
+ return { kind: "invalid", reason: "invalid-development-input" };
62
+ return { kind: "valid", value: { cycleId } };
63
+ }
64
+ export function validateCycleOutcome(value, input) {
65
+ const kind = exactFields(value, null)?.["kind"];
66
+ const contract = typeof kind === "string" && Object.hasOwn(outcomes, kind)
67
+ ? outcomes[kind]
68
+ : undefined;
69
+ const fields = contract && exactFields(value, contract.keys);
70
+ const outcome = fields && contract.parse(fields);
71
+ if (!outcome || outcome.cycleId !== input.cycleId)
72
+ return { kind: "invalid", reason: "invalid-cycle-outcome" };
73
+ return { kind: "valid", value: outcome };
74
+ }
75
+ function exactFields(value, keys) {
76
+ if (!value || typeof value !== "object" || Array.isArray(value))
77
+ return null;
78
+ const fields = Object.fromEntries(Object.entries(value));
79
+ if (keys &&
80
+ JSON.stringify(Object.keys(fields).sort()) !== JSON.stringify(keys))
81
+ return null;
82
+ return fields;
83
+ }
84
+ function textField(fields, field) {
85
+ const { key, pattern } = field;
86
+ const value = fields[key];
87
+ return typeof value === "string" && pattern.test(value) ? value : null;
88
+ }
@@ -0,0 +1,11 @@
1
+ import type { SubmissionContract } from "./submission.ts";
2
+ export interface WorkflowDeclaration {
3
+ readonly workflowId: string;
4
+ readonly effectLimit: number;
5
+ readonly capabilities: readonly ("claude" | "github")[];
6
+ readonly input: SubmissionContract;
7
+ }
8
+ export interface DeclaredWorkflow extends WorkflowDeclaration {
9
+ readonly functionName: string;
10
+ }
11
+ export declare function isWorkflowDeclaration(value: unknown): value is WorkflowDeclaration;
@@ -0,0 +1,57 @@
1
+ import { record } from "./protocol.js";
2
+ function keys(fields, allowed) {
3
+ return Object.keys(fields).every((key) => allowed.includes(key));
4
+ }
5
+ function integer(value, bounds) {
6
+ return (typeof value === "number" &&
7
+ Number.isInteger(value) &&
8
+ value >= bounds.minimum &&
9
+ value <= bounds.maximum);
10
+ }
11
+ function integerBounds(fields) {
12
+ const { minimum, maximum } = fields;
13
+ if (minimum !== undefined && !Number.isInteger(minimum))
14
+ return false;
15
+ if (maximum !== undefined && !Number.isInteger(maximum))
16
+ return false;
17
+ return (typeof minimum !== "number" ||
18
+ typeof maximum !== "number" ||
19
+ minimum <= maximum);
20
+ }
21
+ function isField(value) {
22
+ const fields = record(value);
23
+ if (fields === undefined ||
24
+ !keys(fields, ["type", "optional", "minimum", "maximum"]))
25
+ return false;
26
+ if (fields["optional"] !== undefined &&
27
+ typeof fields["optional"] !== "boolean")
28
+ return false;
29
+ if (fields["type"] === "integer")
30
+ return integerBounds(fields);
31
+ return ((fields["type"] === "string" || fields["type"] === "boolean") &&
32
+ !Object.hasOwn(fields, "minimum") &&
33
+ !Object.hasOwn(fields, "maximum"));
34
+ }
35
+ function isInput(value) {
36
+ const input = record(value);
37
+ if (input === undefined || !keys(input, ["maximumBytes", "fields"]))
38
+ return false;
39
+ const fields = record(input["fields"]);
40
+ return (integer(input["maximumBytes"], { minimum: 1, maximum: 1_048_576 }) &&
41
+ fields !== undefined &&
42
+ Object.values(fields).every(isField));
43
+ }
44
+ export function isWorkflowDeclaration(value) {
45
+ const declaration = record(value);
46
+ if (declaration === undefined ||
47
+ !keys(declaration, ["workflowId", "effectLimit", "capabilities", "input"]))
48
+ return false;
49
+ const { workflowId, effectLimit, capabilities, input } = declaration;
50
+ return (typeof workflowId === "string" &&
51
+ /^[A-Za-z0-9-]{1,64}$/.test(workflowId) &&
52
+ integer(effectLimit, { minimum: 1, maximum: 100 }) &&
53
+ Array.isArray(capabilities) &&
54
+ capabilities.length > 0 &&
55
+ capabilities.every((capability) => capability === "claude" || capability === "github") &&
56
+ isInput(input));
57
+ }
@@ -0,0 +1,8 @@
1
+ export type ResolvedResources = {
2
+ readonly kind: "resolved";
3
+ readonly resources: Readonly<Record<string, string>>;
4
+ } | {
5
+ readonly kind: "inaccessible";
6
+ readonly path: string;
7
+ };
8
+ export declare function resolveResources(declared: readonly string[], discovered: unknown): ResolvedResources;
@@ -0,0 +1,14 @@
1
+ const digest = /^[0-9a-f]{64}$/;
2
+ export function resolveResources(declared, discovered) {
3
+ const available = discovered && typeof discovered === "object" && !Array.isArray(discovered)
4
+ ? Object.fromEntries(Object.entries(discovered))
5
+ : {};
6
+ const entries = [];
7
+ for (const path of declared) {
8
+ const value = Object.hasOwn(available, path) ? available[path] : undefined;
9
+ if (typeof value !== "string" || !digest.test(value))
10
+ return { kind: "inaccessible", path };
11
+ entries.push([path, value]);
12
+ }
13
+ return { kind: "resolved", resources: Object.fromEntries(entries) };
14
+ }
@@ -0,0 +1,5 @@
1
+ export { loadCycle, type CycleLoad } from "./steps/load-cycle.ts";
2
+ export { protectedEffect } from "./steps/protected-effect.ts";
3
+ export { decisionGate } from "./steps/decision-gate.ts";
4
+ export type { GateRequest, GateResult, ProtectedRequest, ProtectedResult, ProtectedScope, } from "./step-bridge.ts";
5
+ export type { CycleOutcome, DevelopmentInput } from "./workflow-contracts.ts";
@@ -0,0 +1,3 @@
1
+ export { loadCycle } from "./steps/load-cycle.js";
2
+ export { protectedEffect } from "./steps/protected-effect.js";
3
+ export { decisionGate } from "./steps/decision-gate.js";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ import { BaseBuilder } from "@workflow/builders";
4
+ import { serializeManifest } from "./workflow-manifest.js";
5
+ const [sourceDirectory, outputDirectory] = process.argv.slice(2);
6
+ if (!sourceDirectory || !outputDirectory) {
7
+ throw new Error("Usage: npm run build:workflows -- SOURCE_DIRECTORY OUTPUT_DIRECTORY");
8
+ }
9
+ const output = resolve(outputDirectory);
10
+ class WorkflowBuilder extends BaseBuilder {
11
+ async build() {
12
+ const inputFiles = await this.getInputFiles();
13
+ await mkdir(output, { recursive: true });
14
+ const result = await this.createCombinedBundle({
15
+ inputFiles,
16
+ stepsOutfile: resolve(output, "steps.mjs"),
17
+ flowOutfile: resolve(output, "flow.mjs"),
18
+ format: "esm",
19
+ });
20
+ await writeFile(resolve(output, "manifest.json"), serializeManifest(result.manifest));
21
+ await this.createClientLibrary();
22
+ }
23
+ }
24
+ await new WorkflowBuilder({
25
+ buildTarget: "standalone",
26
+ workingDir: process.cwd(),
27
+ dirs: [resolve(sourceDirectory)],
28
+ stepsBundlePath: resolve(output, "steps.mjs"),
29
+ workflowsBundlePath: resolve(output, "flow.mjs"),
30
+ webhookBundlePath: resolve(output, "webhook.mjs"),
31
+ clientBundlePath: resolve(output, "client.mjs"),
32
+ sourcemap: false,
33
+ }).build();
@@ -0,0 +1,10 @@
1
+ export interface HostProcesses {
2
+ readonly project: string;
3
+ readonly product: string;
4
+ readonly runtime: string;
5
+ readonly directory: string;
6
+ readonly repository: string;
7
+ readonly watchPort: string;
8
+ readonly updateMilliseconds: number | undefined;
9
+ }
10
+ export declare function hostedPrograms(settings: HostProcesses): Promise<number>;
@@ -0,0 +1,151 @@
1
+ import { execFile, spawn } from "node:child_process";
2
+ import { addAbortListener } from "node:events";
3
+ import { extname, join } from "node:path";
4
+ import { setTimeout as delay } from "node:timers/promises";
5
+ import { promisify } from "node:util";
6
+ import { selfUpdater } from "./self-update.js";
7
+ import { workerTurnActive } from "./self-update-host.js";
8
+ function launched(argumentsList, settings) {
9
+ const child = spawn(process.execPath, argumentsList, {
10
+ cwd: settings.directory,
11
+ env: settings.environment,
12
+ stdio: "inherit",
13
+ });
14
+ const ended = new Promise((settle, reject) => {
15
+ child.once("error", reject);
16
+ child.once("close", (status) => {
17
+ settle(status ?? 1);
18
+ });
19
+ });
20
+ return { child, ended };
21
+ }
22
+ async function stopped(programs) {
23
+ for (const program of programs)
24
+ program.child.kill("SIGTERM");
25
+ await Promise.all(programs.map((program) => program.ended));
26
+ }
27
+ function updatingGit(settings, stopping) {
28
+ const git = promisify(execFile);
29
+ return async (argumentsList) => {
30
+ if (argumentsList[0] === "merge")
31
+ return (await git("git", ["-C", settings.repository, ...argumentsList], {
32
+ encoding: "utf8",
33
+ })).stdout;
34
+ const command = git("git", ["-C", settings.repository, ...argumentsList], {
35
+ encoding: "utf8",
36
+ signal: stopping,
37
+ killSignal: "SIGKILL",
38
+ timeout: argumentsList[0] === "fetch" || argumentsList[0] === "remote"
39
+ ? 30000
40
+ : 0,
41
+ });
42
+ const listener = addAbortListener(stopping, () => {
43
+ command.child.kill("SIGKILL");
44
+ });
45
+ try {
46
+ return (await command).stdout;
47
+ }
48
+ finally {
49
+ listener[Symbol.dispose]();
50
+ }
51
+ };
52
+ }
53
+ async function polled(settings, lifecycle) {
54
+ if (settings.updateMilliseconds === undefined)
55
+ return;
56
+ const cancelled = () => lifecycle.stopping.aborted;
57
+ const updater = selfUpdater({
58
+ directory: settings.directory,
59
+ git: updatingGit(settings, lifecycle.stopping),
60
+ active: async () => lifecycle.stopping.aborted ||
61
+ (await workerTurnActive(settings.directory)),
62
+ stop: async () => {
63
+ if (lifecycle.stopping.aborted)
64
+ throw new Error("self-update-stopped");
65
+ await lifecycle.stop();
66
+ },
67
+ error: (line) => {
68
+ process.stderr.write(line);
69
+ },
70
+ });
71
+ while (!cancelled()) {
72
+ await delay(settings.updateMilliseconds, undefined, {
73
+ signal: lifecycle.stopping,
74
+ }).catch((error) => {
75
+ if (!(error instanceof Error) || error.name !== "AbortError")
76
+ throw error;
77
+ });
78
+ if (cancelled())
79
+ return;
80
+ const status = await updater.check();
81
+ if (status !== undefined)
82
+ return status;
83
+ }
84
+ return undefined;
85
+ }
86
+ function hostedChildren(settings) {
87
+ const daemon = launched([join(settings.project, "start.mjs")], {
88
+ directory: settings.project,
89
+ environment: process.env,
90
+ });
91
+ if (settings.watchPort === "off")
92
+ return [daemon];
93
+ return [
94
+ daemon,
95
+ launched([
96
+ join(settings.product, `src/cli${extname(import.meta.filename)}`),
97
+ "watch",
98
+ "--port",
99
+ settings.watchPort,
100
+ ], {
101
+ directory: settings.product,
102
+ environment: {
103
+ ...process.env,
104
+ CLOVING_RUNTIME_DIR: settings.runtime,
105
+ },
106
+ }),
107
+ ];
108
+ }
109
+ export async function hostedPrograms(settings) {
110
+ const programs = hostedChildren(settings);
111
+ const daemon = programs[0];
112
+ const stopping = new AbortController();
113
+ let updating = false;
114
+ const interrupt = () => {
115
+ stopping.abort();
116
+ for (const program of programs)
117
+ program.child.kill("SIGINT");
118
+ };
119
+ const terminate = () => {
120
+ stopping.abort();
121
+ for (const program of programs)
122
+ program.child.kill("SIGTERM");
123
+ };
124
+ process.on("SIGINT", interrupt);
125
+ process.on("SIGTERM", terminate);
126
+ const polling = polled(settings, {
127
+ stopping: stopping.signal,
128
+ stop: async () => {
129
+ updating = true;
130
+ await stopped(programs);
131
+ },
132
+ });
133
+ try {
134
+ const [status, updateStatus] = await Promise.all([
135
+ daemon.ended.then((status) => {
136
+ if (!updating)
137
+ stopping.abort();
138
+ return status;
139
+ }),
140
+ polling,
141
+ ]);
142
+ return updateStatus ?? status;
143
+ }
144
+ finally {
145
+ stopping.abort();
146
+ await stopped(programs);
147
+ await polling;
148
+ process.off("SIGINT", interrupt);
149
+ process.off("SIGTERM", terminate);
150
+ }
151
+ }
@@ -0,0 +1,15 @@
1
+ import type { WorkflowManifest } from "@workflow/builders";
2
+ import { type DeclaredWorkflow } from "../src/workflow-declaration.ts";
3
+ interface HostManifest {
4
+ readonly schemaVersion: 1;
5
+ readonly name: string;
6
+ readonly workflowId: string;
7
+ readonly steps: readonly string[];
8
+ readonly capabilities: readonly string[];
9
+ readonly resources: readonly string[];
10
+ readonly artifacts: string;
11
+ }
12
+ export declare function workflowFiles(directory: string): Promise<string[]>;
13
+ export declare function workflowDeclarations(directory: string, manifests: Readonly<Record<string, HostManifest>>): Promise<readonly DeclaredWorkflow[]>;
14
+ export declare function workflowManifests(compiled: WorkflowManifest): Readonly<Record<string, HostManifest>>;
15
+ export {};
@@ -0,0 +1,78 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { basename, extname, join } from "node:path";
3
+ import { isWorkflowDeclaration, } from "../src/workflow-declaration.js";
4
+ export async function workflowFiles(directory) {
5
+ const entries = await readdir(directory, { withFileTypes: true });
6
+ return entries
7
+ .filter((entry) => entry.isFile() &&
8
+ /\.(?:ts|js)$/.test(entry.name) &&
9
+ !entry.name.endsWith(".d.ts"))
10
+ .map((entry) => entry.name)
11
+ .sort();
12
+ }
13
+ export async function workflowDeclarations(directory, manifests) {
14
+ const declarations = [];
15
+ for (const file of await workflowFiles(directory)) {
16
+ const name = basename(file, extname(file));
17
+ const declarationFile = `${name}.declaration.json`;
18
+ const text = await readFile(join(directory, declarationFile), "utf8").catch((error) => {
19
+ if (error instanceof Error &&
20
+ "code" in error &&
21
+ error.code === "ENOENT")
22
+ return undefined;
23
+ throw new Error(`invalid-workflow-declaration: ${declarationFile}`, {
24
+ cause: error,
25
+ });
26
+ });
27
+ if (text === undefined)
28
+ continue;
29
+ const entry = Object.entries(manifests).find(([, manifest]) => manifest.name === name);
30
+ try {
31
+ const value = JSON.parse(text);
32
+ if (!isWorkflowDeclaration(value) || entry === undefined)
33
+ throw new Error("Invalid declaration or missing workflow function.");
34
+ declarations.push({
35
+ ...value,
36
+ functionName: entry[0],
37
+ capabilities: [...new Set(value.capabilities)],
38
+ });
39
+ }
40
+ catch (error) {
41
+ throw new Error(`invalid-workflow-declaration: ${declarationFile}`, {
42
+ cause: error,
43
+ });
44
+ }
45
+ }
46
+ return declarations;
47
+ }
48
+ export function workflowManifests(compiled) {
49
+ const names = new Set();
50
+ const steps = Object.values(compiled.steps ?? {})
51
+ .flatMap((entries) => Object.values(entries))
52
+ .map((entry) => entry.stepId)
53
+ .filter((identifier) => identifier.startsWith("step//cloving/"));
54
+ return Object.fromEntries(Object.entries(compiled.workflows ?? {}).flatMap(([file, entries]) => {
55
+ const functions = Object.values(entries);
56
+ if (functions.length > 1)
57
+ throw new Error(`${file} must contain only one workflow function.`);
58
+ return functions.map((entry) => {
59
+ const workflowId = entry.workflowId;
60
+ const functionName = workflowId.slice(workflowId.lastIndexOf("//") + 2);
61
+ if (names.has(functionName))
62
+ throw new Error(`duplicate-workflow-function: ${functionName}`);
63
+ names.add(functionName);
64
+ return [
65
+ functionName,
66
+ {
67
+ schemaVersion: 1,
68
+ name: basename(file, extname(file)),
69
+ workflowId,
70
+ steps,
71
+ capabilities: ["claude", "github"],
72
+ resources: [],
73
+ artifacts: "artifacts",
74
+ },
75
+ ];
76
+ });
77
+ }));
78
+ }
@@ -0,0 +1 @@
1
+ export {};