@cleocode/core 2026.3.74 → 2026.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/agent-schema.d.ts.map +1 -1
  3. package/dist/agents/retry.js +26 -21
  4. package/dist/agents/retry.js.map +1 -1
  5. package/dist/cant/approval.d.ts +110 -0
  6. package/dist/cant/approval.d.ts.map +1 -0
  7. package/dist/cant/approval.js +185 -0
  8. package/dist/cant/approval.js.map +1 -0
  9. package/dist/cant/context-builder.d.ts +79 -0
  10. package/dist/cant/context-builder.d.ts.map +1 -0
  11. package/dist/cant/context-builder.js +117 -0
  12. package/dist/cant/context-builder.js.map +1 -0
  13. package/dist/cant/discretion.d.ts +95 -0
  14. package/dist/cant/discretion.d.ts.map +1 -0
  15. package/dist/cant/discretion.js +116 -0
  16. package/dist/cant/discretion.js.map +1 -0
  17. package/dist/cant/index.d.ts +25 -0
  18. package/dist/cant/index.d.ts.map +1 -0
  19. package/dist/cant/index.js +23 -0
  20. package/dist/cant/index.js.map +1 -0
  21. package/dist/cant/parallel-runner.d.ts +38 -0
  22. package/dist/cant/parallel-runner.d.ts.map +1 -0
  23. package/dist/cant/parallel-runner.js +173 -0
  24. package/dist/cant/parallel-runner.js.map +1 -0
  25. package/dist/cant/types.d.ts +127 -0
  26. package/dist/cant/types.d.ts.map +1 -0
  27. package/dist/cant/types.js +11 -0
  28. package/dist/cant/types.js.map +1 -0
  29. package/dist/cant/workflow-executor.d.ts +105 -0
  30. package/dist/cant/workflow-executor.d.ts.map +1 -0
  31. package/dist/cant/workflow-executor.js +440 -0
  32. package/dist/cant/workflow-executor.js.map +1 -0
  33. package/dist/cleo.js +21 -1
  34. package/dist/cleo.js.map +1 -1
  35. package/dist/code/index.d.ts +10 -0
  36. package/dist/code/index.d.ts.map +1 -0
  37. package/dist/code/outline.d.ts +51 -0
  38. package/dist/code/outline.d.ts.map +1 -0
  39. package/dist/code/parser.d.ts +30 -0
  40. package/dist/code/parser.d.ts.map +1 -0
  41. package/dist/code/search.d.ts +42 -0
  42. package/dist/code/search.d.ts.map +1 -0
  43. package/dist/code/unfold.d.ts +44 -0
  44. package/dist/code/unfold.d.ts.map +1 -0
  45. package/dist/conduit/conduit-client.d.ts +35 -0
  46. package/dist/conduit/conduit-client.d.ts.map +1 -0
  47. package/dist/conduit/conduit-client.js +94 -0
  48. package/dist/conduit/conduit-client.js.map +1 -0
  49. package/dist/conduit/factory.d.ts +15 -0
  50. package/dist/conduit/factory.d.ts.map +1 -0
  51. package/dist/conduit/factory.js +35 -0
  52. package/dist/conduit/factory.js.map +1 -0
  53. package/dist/conduit/http-transport.d.ts +44 -0
  54. package/dist/conduit/http-transport.d.ts.map +1 -0
  55. package/dist/conduit/http-transport.js +165 -0
  56. package/dist/conduit/http-transport.js.map +1 -0
  57. package/dist/conduit/index.d.ts +15 -0
  58. package/dist/conduit/index.d.ts.map +1 -0
  59. package/dist/conduit/index.js +12 -0
  60. package/dist/conduit/index.js.map +1 -0
  61. package/dist/conduit/local-transport.d.ts +91 -0
  62. package/dist/conduit/local-transport.d.ts.map +1 -0
  63. package/dist/conduit/sse-transport.d.ts +68 -0
  64. package/dist/conduit/sse-transport.d.ts.map +1 -0
  65. package/dist/config.js +4 -3
  66. package/dist/config.js.map +1 -1
  67. package/dist/crypto/credentials.d.ts +40 -0
  68. package/dist/crypto/credentials.d.ts.map +1 -0
  69. package/dist/crypto/credentials.js +144 -0
  70. package/dist/crypto/credentials.js.map +1 -0
  71. package/dist/engine-result.d.ts +1 -1
  72. package/dist/engine-result.d.ts.map +1 -1
  73. package/dist/error-catalog.d.ts +1 -1
  74. package/dist/error-catalog.d.ts.map +1 -1
  75. package/dist/error-registry.d.ts +1 -1
  76. package/dist/error-registry.d.ts.map +1 -1
  77. package/dist/errors.d.ts +1 -1
  78. package/dist/errors.d.ts.map +1 -1
  79. package/dist/hooks/handlers/agent-hooks.d.ts.map +1 -1
  80. package/dist/hooks/handlers/agent-hooks.js +106 -0
  81. package/dist/hooks/handlers/agent-hooks.js.map +1 -0
  82. package/dist/hooks/handlers/context-hooks.d.ts.map +1 -1
  83. package/dist/hooks/handlers/context-hooks.js +111 -0
  84. package/dist/hooks/handlers/context-hooks.js.map +1 -0
  85. package/dist/hooks/handlers/error-hooks.d.ts +14 -5
  86. package/dist/hooks/handlers/error-hooks.d.ts.map +1 -1
  87. package/dist/hooks/handlers/error-hooks.js +15 -6
  88. package/dist/hooks/handlers/error-hooks.js.map +1 -1
  89. package/dist/hooks/handlers/file-hooks.d.ts.map +1 -1
  90. package/dist/hooks/handlers/file-hooks.js +35 -11
  91. package/dist/hooks/handlers/file-hooks.js.map +1 -1
  92. package/dist/hooks/handlers/handler-helpers.d.ts +41 -0
  93. package/dist/hooks/handlers/handler-helpers.d.ts.map +1 -0
  94. package/dist/hooks/handlers/handler-helpers.js +61 -0
  95. package/dist/hooks/handlers/handler-helpers.js.map +1 -0
  96. package/dist/hooks/handlers/index.js +10 -1
  97. package/dist/hooks/handlers/index.js.map +1 -1
  98. package/dist/hooks/handlers/mcp-hooks.d.ts.map +1 -1
  99. package/dist/hooks/handlers/mcp-hooks.js +88 -21
  100. package/dist/hooks/handlers/mcp-hooks.js.map +1 -1
  101. package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
  102. package/dist/hooks/handlers/session-hooks.js +5 -10
  103. package/dist/hooks/handlers/session-hooks.js.map +1 -1
  104. package/dist/hooks/handlers/task-hooks.d.ts.map +1 -1
  105. package/dist/hooks/handlers/task-hooks.js +5 -10
  106. package/dist/hooks/handlers/task-hooks.js.map +1 -1
  107. package/dist/hooks/handlers/work-capture-hooks.d.ts.map +1 -1
  108. package/dist/hooks/handlers/work-capture-hooks.js +165 -0
  109. package/dist/hooks/handlers/work-capture-hooks.js.map +1 -0
  110. package/dist/hooks/payload-schemas.js +83 -26
  111. package/dist/hooks/payload-schemas.js.map +1 -1
  112. package/dist/hooks/provider-hooks.js +37 -5
  113. package/dist/hooks/provider-hooks.js.map +1 -1
  114. package/dist/hooks/registry.js +76 -23
  115. package/dist/hooks/registry.js.map +1 -1
  116. package/dist/hooks/types.js +17 -13
  117. package/dist/hooks/types.js.map +1 -1
  118. package/dist/index.d.ts +4 -1
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +6452 -3371
  121. package/dist/index.js.map +4 -4
  122. package/dist/init.d.ts.map +1 -1
  123. package/dist/init.js +12 -0
  124. package/dist/init.js.map +1 -1
  125. package/dist/internal.d.ts +11 -1
  126. package/dist/internal.d.ts.map +1 -1
  127. package/dist/internal.js +10 -0
  128. package/dist/internal.js.map +1 -1
  129. package/dist/lib/index.d.ts +1 -0
  130. package/dist/lib/index.d.ts.map +1 -1
  131. package/dist/lib/tree-sitter-languages.d.ts +29 -0
  132. package/dist/lib/tree-sitter-languages.d.ts.map +1 -0
  133. package/dist/memory/brain-links.d.ts.map +1 -1
  134. package/dist/memory/brain-maintenance.d.ts +13 -0
  135. package/dist/memory/brain-maintenance.d.ts.map +1 -1
  136. package/dist/memory/brain-retrieval.d.ts +3 -0
  137. package/dist/memory/brain-retrieval.d.ts.map +1 -1
  138. package/dist/memory/brain-retrieval.js +5 -0
  139. package/dist/memory/brain-retrieval.js.map +1 -1
  140. package/dist/memory/decisions.d.ts.map +1 -1
  141. package/dist/mvi-helpers.d.ts +52 -0
  142. package/dist/mvi-helpers.d.ts.map +1 -0
  143. package/dist/mvi-helpers.js +74 -0
  144. package/dist/mvi-helpers.js.map +1 -0
  145. package/dist/nexus/index.js +2 -0
  146. package/dist/nexus/index.js.map +1 -1
  147. package/dist/nexus/workspace.d.ts.map +1 -1
  148. package/dist/nexus/workspace.js +355 -0
  149. package/dist/nexus/workspace.js.map +1 -0
  150. package/dist/orchestration/hierarchy.d.ts +32 -0
  151. package/dist/orchestration/hierarchy.d.ts.map +1 -0
  152. package/dist/orchestration/index.d.ts +1 -0
  153. package/dist/orchestration/index.d.ts.map +1 -1
  154. package/dist/output.d.ts +2 -2
  155. package/dist/output.d.ts.map +1 -1
  156. package/dist/output.js +40 -8
  157. package/dist/output.js.map +1 -1
  158. package/dist/pagination.d.ts +1 -1
  159. package/dist/pagination.d.ts.map +1 -1
  160. package/dist/sessions/find.d.ts +3 -0
  161. package/dist/sessions/find.d.ts.map +1 -1
  162. package/dist/sessions/find.js +3 -1
  163. package/dist/sessions/find.js.map +1 -1
  164. package/dist/sessions/index.d.ts.map +1 -1
  165. package/dist/sessions/index.js +11 -4
  166. package/dist/sessions/index.js.map +1 -1
  167. package/dist/sessions/snapshot.js +213 -0
  168. package/dist/sessions/snapshot.js.map +1 -0
  169. package/dist/store/agent-registry-accessor.d.ts +31 -0
  170. package/dist/store/agent-registry-accessor.d.ts.map +1 -0
  171. package/dist/store/agent-registry-accessor.js +169 -0
  172. package/dist/store/agent-registry-accessor.js.map +1 -0
  173. package/dist/store/converters.d.ts.map +1 -1
  174. package/dist/store/converters.js +2 -0
  175. package/dist/store/converters.js.map +1 -1
  176. package/dist/store/cross-db-cleanup.d.ts +34 -0
  177. package/dist/store/cross-db-cleanup.d.ts.map +1 -1
  178. package/dist/store/db-helpers.d.ts.map +1 -1
  179. package/dist/store/db-helpers.js +1 -0
  180. package/dist/store/db-helpers.js.map +1 -1
  181. package/dist/store/json.js +2 -2
  182. package/dist/store/safety-data-accessor.d.ts +7 -0
  183. package/dist/store/safety-data-accessor.d.ts.map +1 -1
  184. package/dist/store/safety-data-accessor.js +14 -0
  185. package/dist/store/safety-data-accessor.js.map +1 -1
  186. package/dist/store/signaldock-sqlite.d.ts +48 -0
  187. package/dist/store/signaldock-sqlite.d.ts.map +1 -0
  188. package/dist/store/signaldock-sqlite.js +178 -0
  189. package/dist/store/signaldock-sqlite.js.map +1 -0
  190. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  191. package/dist/store/sqlite-data-accessor.js +50 -0
  192. package/dist/store/sqlite-data-accessor.js.map +1 -1
  193. package/dist/store/sqlite.d.ts.map +1 -1
  194. package/dist/store/sqlite.js +30 -1
  195. package/dist/store/sqlite.js.map +1 -1
  196. package/dist/store/task-store.d.ts.map +1 -1
  197. package/dist/store/task-store.js +2 -0
  198. package/dist/store/task-store.js.map +1 -1
  199. package/dist/store/tasks-schema.d.ts +16 -0
  200. package/dist/store/tasks-schema.d.ts.map +1 -1
  201. package/dist/store/tasks-schema.js +33 -0
  202. package/dist/store/tasks-schema.js.map +1 -1
  203. package/dist/store/validation-schemas.d.ts +32 -0
  204. package/dist/store/validation-schemas.d.ts.map +1 -1
  205. package/dist/system/health.d.ts +1 -1
  206. package/dist/system/health.d.ts.map +1 -1
  207. package/dist/system/health.js +35 -0
  208. package/dist/system/health.js.map +1 -1
  209. package/dist/task-work/index.d.ts.map +1 -1
  210. package/dist/task-work/index.js +8 -4
  211. package/dist/task-work/index.js.map +1 -1
  212. package/dist/tasks/complete.js +5 -2
  213. package/dist/tasks/complete.js.map +1 -1
  214. package/dist/tasks/find.d.ts +3 -0
  215. package/dist/tasks/find.d.ts.map +1 -1
  216. package/dist/tasks/find.js +7 -1
  217. package/dist/tasks/find.js.map +1 -1
  218. package/dist/tasks/list.d.ts +5 -2
  219. package/dist/tasks/list.d.ts.map +1 -1
  220. package/dist/tasks/list.js +9 -2
  221. package/dist/tasks/list.js.map +1 -1
  222. package/dist/tasks/show.d.ts +3 -0
  223. package/dist/tasks/show.d.ts.map +1 -1
  224. package/dist/tasks/show.js +2 -0
  225. package/dist/tasks/show.js.map +1 -1
  226. package/dist/upgrade.d.ts.map +1 -1
  227. package/dist/upgrade.js +15 -0
  228. package/dist/upgrade.js.map +1 -1
  229. package/migrations/drizzle-tasks/20260324000000_assignee-column/migration.sql +6 -0
  230. package/migrations/drizzle-tasks/20260324000000_assignee-column/snapshot.json +9 -0
  231. package/migrations/drizzle-tasks/20260327000000_agent-credentials/migration.sql +23 -0
  232. package/package.json +17 -7
  233. package/src/__tests__/cli-parity.test.js +11 -1
  234. package/src/__tests__/cli-parity.test.js.map +1 -1
  235. package/src/__tests__/cli-parity.test.ts +17 -1
  236. package/src/__tests__/human-output.test.js +11 -1
  237. package/src/__tests__/human-output.test.js.map +1 -1
  238. package/src/__tests__/human-output.test.ts +18 -1
  239. package/src/__tests__/injection-chain.test.js +3 -2
  240. package/src/__tests__/injection-chain.test.js.map +1 -1
  241. package/src/__tests__/injection-mvi-tiers.test.d.ts +2 -2
  242. package/src/__tests__/injection-mvi-tiers.test.js +15 -15
  243. package/src/__tests__/injection-mvi-tiers.test.js.map +1 -1
  244. package/src/__tests__/lafs-conformance.test.d.ts +1 -1
  245. package/src/__tests__/lafs-conformance.test.js +2 -2
  246. package/src/__tests__/sharing.test.js +19 -0
  247. package/src/__tests__/sharing.test.js.map +1 -1
  248. package/src/agents/__tests__/agent-registry.test.d.ts +12 -0
  249. package/src/agents/__tests__/agent-registry.test.d.ts.map +1 -0
  250. package/src/agents/__tests__/agent-registry.test.js +262 -0
  251. package/src/agents/__tests__/agent-registry.test.js.map +1 -0
  252. package/src/agents/__tests__/execution-learning.test.d.ts +14 -0
  253. package/src/agents/__tests__/execution-learning.test.d.ts.map +1 -0
  254. package/src/agents/__tests__/execution-learning.test.js +533 -0
  255. package/src/agents/__tests__/execution-learning.test.js.map +1 -0
  256. package/src/agents/__tests__/health-monitor.test.d.ts +10 -0
  257. package/src/agents/__tests__/health-monitor.test.d.ts.map +1 -0
  258. package/src/agents/__tests__/health-monitor.test.js +259 -0
  259. package/src/agents/__tests__/health-monitor.test.js.map +1 -0
  260. package/src/agents/__tests__/registry.test.js +27 -2
  261. package/src/agents/__tests__/registry.test.js.map +1 -1
  262. package/src/agents/agent-schema.ts +2 -5
  263. package/src/cant/__tests__/cant-agent-parse.test.ts +94 -0
  264. package/src/cant/approval.ts +218 -0
  265. package/src/cant/context-builder.ts +135 -0
  266. package/src/cant/discretion.ts +149 -0
  267. package/src/cant/index.ts +58 -0
  268. package/src/cant/parallel-runner.ts +205 -0
  269. package/src/cant/types.ts +158 -0
  270. package/src/cant/workflow-executor.ts +618 -0
  271. package/src/code/index.ts +10 -0
  272. package/src/code/outline.ts +214 -0
  273. package/src/code/parser.ts +299 -0
  274. package/src/code/search.ts +173 -0
  275. package/src/code/unfold.ts +204 -0
  276. package/src/conduit/__tests__/dual-api-e2e.test.ts +212 -0
  277. package/src/conduit/__tests__/local-credential-flow.test.ts +230 -0
  278. package/src/conduit/__tests__/local-transport.test.ts +320 -0
  279. package/src/conduit/__tests__/sse-transport.test.ts +344 -0
  280. package/src/conduit/conduit-client.ts +123 -0
  281. package/src/conduit/factory.ts +49 -0
  282. package/src/conduit/http-transport.ts +201 -0
  283. package/src/conduit/index.ts +15 -0
  284. package/src/conduit/local-transport.ts +309 -0
  285. package/src/conduit/sse-transport.ts +382 -0
  286. package/src/crypto/credentials.ts +166 -0
  287. package/src/engine-result.ts +1 -1
  288. package/src/error-catalog.ts +1 -1
  289. package/src/error-registry.ts +1 -1
  290. package/src/errors.ts +1 -1
  291. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.d.ts +13 -0
  292. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.d.ts.map +1 -0
  293. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.js +501 -0
  294. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.js.map +1 -0
  295. package/src/hooks/handlers/agent-hooks.ts +1 -30
  296. package/src/hooks/handlers/context-hooks.ts +1 -30
  297. package/src/hooks/handlers/error-hooks.ts +14 -5
  298. package/src/hooks/handlers/file-hooks.ts +1 -6
  299. package/src/hooks/handlers/handler-helpers.ts +62 -0
  300. package/src/hooks/handlers/mcp-hooks.ts +2 -14
  301. package/src/hooks/handlers/session-hooks.ts +1 -6
  302. package/src/hooks/handlers/task-hooks.ts +1 -6
  303. package/src/hooks/handlers/work-capture-hooks.ts +1 -10
  304. package/src/index.ts +12 -1
  305. package/src/init.ts +12 -0
  306. package/src/intelligence/__tests__/adaptive-validation.test.d.ts +11 -0
  307. package/src/intelligence/__tests__/adaptive-validation.test.d.ts.map +1 -0
  308. package/src/intelligence/__tests__/adaptive-validation.test.js +517 -0
  309. package/src/intelligence/__tests__/adaptive-validation.test.js.map +1 -0
  310. package/src/intelligence/__tests__/impact.test.d.ts +1 -0
  311. package/src/intelligence/__tests__/impact.test.d.ts.map +1 -1
  312. package/src/intelligence/__tests__/impact.test.js +132 -1
  313. package/src/intelligence/__tests__/impact.test.js.map +1 -1
  314. package/src/internal.ts +22 -0
  315. package/src/lib/__tests__/retry.test.d.ts +7 -0
  316. package/src/lib/__tests__/retry.test.d.ts.map +1 -0
  317. package/src/lib/__tests__/retry.test.js +225 -0
  318. package/src/lib/__tests__/retry.test.js.map +1 -0
  319. package/src/lib/index.ts +8 -0
  320. package/src/lib/tree-sitter-languages.ts +88 -0
  321. package/src/lifecycle/__tests__/chain-store.test.js +6 -0
  322. package/src/lifecycle/__tests__/chain-store.test.js.map +1 -1
  323. package/src/lifecycle/__tests__/tessera-engine.test.js +52 -0
  324. package/src/lifecycle/__tests__/tessera-engine.test.js.map +1 -1
  325. package/src/memory/__tests__/brain-automation.test.d.ts +11 -0
  326. package/src/memory/__tests__/brain-automation.test.d.ts.map +1 -0
  327. package/src/memory/__tests__/brain-automation.test.js +730 -0
  328. package/src/memory/__tests__/brain-automation.test.js.map +1 -0
  329. package/src/memory/__tests__/brain-links.test.ts +14 -0
  330. package/src/memory/__tests__/brain-retrieval.test.ts +10 -0
  331. package/src/memory/__tests__/session-memory.test.ts +17 -0
  332. package/src/memory/brain-links.ts +17 -0
  333. package/src/memory/brain-maintenance.ts +33 -1
  334. package/src/memory/brain-retrieval.ts +27 -2
  335. package/src/memory/decisions.ts +18 -2
  336. package/src/mvi-helpers.ts +81 -0
  337. package/src/nexus/workspace.ts +19 -7
  338. package/src/orchestration/hierarchy.ts +202 -0
  339. package/src/orchestration/index.ts +1 -0
  340. package/src/output.ts +43 -10
  341. package/src/pagination.ts +1 -1
  342. package/src/sessions/__tests__/session-edge-cases.test.js +20 -1
  343. package/src/sessions/__tests__/session-edge-cases.test.js.map +1 -1
  344. package/src/sessions/__tests__/session-find.test.js +1 -1
  345. package/src/sessions/__tests__/session-find.test.js.map +1 -1
  346. package/src/sessions/__tests__/session-find.test.ts +1 -1
  347. package/src/sessions/find.ts +6 -1
  348. package/src/sessions/index.ts +9 -0
  349. package/src/store/__tests__/migration-safety.test.js +3 -0
  350. package/src/store/__tests__/migration-safety.test.js.map +1 -1
  351. package/src/store/__tests__/session-store.test.js +128 -1
  352. package/src/store/__tests__/session-store.test.js.map +1 -1
  353. package/src/store/__tests__/task-store.test.js +18 -1
  354. package/src/store/__tests__/task-store.test.js.map +1 -1
  355. package/src/store/__tests__/test-db-helper.d.ts.map +1 -1
  356. package/src/store/__tests__/test-db-helper.js +12 -0
  357. package/src/store/__tests__/test-db-helper.js.map +1 -1
  358. package/src/store/agent-registry-accessor.ts +375 -0
  359. package/src/store/converters.ts +2 -0
  360. package/src/store/cross-db-cleanup.ts +175 -1
  361. package/src/store/db-helpers.ts +1 -0
  362. package/src/store/safety-data-accessor.ts +23 -0
  363. package/src/store/signaldock-sqlite.ts +429 -0
  364. package/src/store/sqlite-data-accessor.ts +72 -0
  365. package/src/store/sqlite.ts +4 -1
  366. package/src/store/task-store.ts +9 -1
  367. package/src/store/tasks-schema.ts +7 -0
  368. package/src/system/__tests__/health.test.ts +2 -2
  369. package/src/system/health.ts +54 -2
  370. package/src/task-work/index.ts +5 -0
  371. package/src/tasks/__tests__/add.test.js +19 -1
  372. package/src/tasks/__tests__/add.test.js.map +1 -1
  373. package/src/tasks/__tests__/assignee.test.d.ts +14 -0
  374. package/src/tasks/__tests__/assignee.test.d.ts.map +1 -0
  375. package/src/tasks/__tests__/assignee.test.js +125 -0
  376. package/src/tasks/__tests__/assignee.test.js.map +1 -0
  377. package/src/tasks/__tests__/assignee.test.ts +162 -0
  378. package/src/tasks/__tests__/complete-unblocks.test.js +13 -1
  379. package/src/tasks/__tests__/complete-unblocks.test.js.map +1 -1
  380. package/src/tasks/__tests__/complete.test.js +28 -7
  381. package/src/tasks/__tests__/complete.test.js.map +1 -1
  382. package/src/tasks/__tests__/epic-enforcement.test.d.ts +15 -0
  383. package/src/tasks/__tests__/epic-enforcement.test.d.ts.map +1 -0
  384. package/src/tasks/__tests__/epic-enforcement.test.js +669 -0
  385. package/src/tasks/__tests__/epic-enforcement.test.js.map +1 -0
  386. package/src/tasks/__tests__/hierarchy-policy.test.js +5 -0
  387. package/src/tasks/__tests__/hierarchy-policy.test.js.map +1 -1
  388. package/src/tasks/__tests__/minimal-test.test.d.ts +2 -0
  389. package/src/tasks/__tests__/minimal-test.test.d.ts.map +1 -0
  390. package/src/tasks/__tests__/minimal-test.test.js +25 -0
  391. package/src/tasks/__tests__/minimal-test.test.js.map +1 -0
  392. package/src/tasks/__tests__/pipeline-stage.test.d.ts +14 -0
  393. package/src/tasks/__tests__/pipeline-stage.test.d.ts.map +1 -0
  394. package/src/tasks/__tests__/pipeline-stage.test.js +277 -0
  395. package/src/tasks/__tests__/pipeline-stage.test.js.map +1 -0
  396. package/src/tasks/__tests__/update.test.js +43 -6
  397. package/src/tasks/__tests__/update.test.js.map +1 -1
  398. package/src/tasks/find.ts +11 -1
  399. package/src/tasks/list.ts +14 -3
  400. package/src/tasks/show.ts +6 -0
  401. package/src/upgrade.ts +16 -0
  402. package/dist/tasks/reparent.d.ts +0 -38
  403. package/dist/tasks/reparent.d.ts.map +0 -1
  404. package/dist/ui/injection-legacy.d.ts +0 -26
  405. package/dist/ui/injection-legacy.d.ts.map +0 -1
  406. package/dist/ui/injection-legacy.js +0 -42
  407. package/dist/ui/injection-legacy.js.map +0 -1
  408. package/src/signaldock/__tests__/claude-code-transport.test.d.ts +0 -7
  409. package/src/signaldock/__tests__/claude-code-transport.test.d.ts.map +0 -1
  410. package/src/signaldock/__tests__/claude-code-transport.test.js +0 -147
  411. package/src/signaldock/__tests__/claude-code-transport.test.js.map +0 -1
  412. package/src/signaldock/__tests__/claude-code-transport.test.ts +0 -180
  413. package/src/signaldock/__tests__/factory.test.d.ts +0 -7
  414. package/src/signaldock/__tests__/factory.test.d.ts.map +0 -1
  415. package/src/signaldock/__tests__/factory.test.js +0 -55
  416. package/src/signaldock/__tests__/factory.test.js.map +0 -1
  417. package/src/signaldock/__tests__/factory.test.ts +0 -61
  418. package/src/signaldock/__tests__/signaldock-transport.test.d.ts +0 -9
  419. package/src/signaldock/__tests__/signaldock-transport.test.d.ts.map +0 -1
  420. package/src/signaldock/__tests__/signaldock-transport.test.js +0 -321
  421. package/src/signaldock/__tests__/signaldock-transport.test.js.map +0 -1
  422. package/src/signaldock/__tests__/signaldock-transport.test.ts +0 -421
  423. package/src/signaldock/claude-code-transport.ts +0 -137
  424. package/src/signaldock/factory.ts +0 -39
  425. package/src/signaldock/index.ts +0 -28
  426. package/src/signaldock/signaldock-transport.ts +0 -194
  427. package/src/signaldock/transport.ts +0 -78
  428. package/src/signaldock/types.ts +0 -100
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Approval gate manager for CANT workflow execution.
3
+ *
4
+ * Manages the lifecycle of approval tokens: generation, validation,
5
+ * approval, rejection, and expiration. Tokens follow the state machine
6
+ * defined in CANT-DSL-SPEC.md Section 8.2.
7
+ *
8
+ * State transitions are atomic (CAS): only `pending -> approved`,
9
+ * `pending -> rejected`, and `pending -> expired` are permitted.
10
+ *
11
+ * @see docs/specs/CANT-DSL-SPEC.md Section 8 (Approval Token Protocol)
12
+ */
13
+
14
+ import { createHash, randomUUID } from 'node:crypto';
15
+ import type { ApprovalToken, ApprovalTokenStatus, TokenValidation } from './types.js';
16
+
17
+ /** Default token expiration duration: 24 hours in milliseconds. */
18
+ const DEFAULT_EXPIRY_MS = 24 * 60 * 60 * 1000;
19
+
20
+ /**
21
+ * Manages approval tokens for CANT workflow gates.
22
+ *
23
+ * Tokens are stored in-memory per instance. In production, these are
24
+ * persisted via the session's `approvalTokensJson` column in tasks.db.
25
+ */
26
+ export class ApprovalManager {
27
+ /** In-memory token store keyed by token UUID. */
28
+ private tokens: Map<string, ApprovalToken> = new Map();
29
+
30
+ /**
31
+ * Generates a new approval token for a workflow gate.
32
+ *
33
+ * @param sessionId - The session that owns this token.
34
+ * @param workflowName - The workflow containing the approval gate.
35
+ * @param gateName - The label of the specific approval gate.
36
+ * @param message - The message to display to the approver.
37
+ * @param workflowHash - SHA-256 hash of the workflow definition.
38
+ * @param requestedBy - The agent/workflow requesting approval.
39
+ * @param expiresInMs - Token lifetime in milliseconds (default: 24h).
40
+ * @returns The generated approval token.
41
+ */
42
+ generateToken(
43
+ sessionId: string,
44
+ workflowName: string,
45
+ gateName: string,
46
+ message: string,
47
+ workflowHash: string,
48
+ requestedBy: string,
49
+ expiresInMs: number = DEFAULT_EXPIRY_MS,
50
+ ): ApprovalToken {
51
+ const now = new Date();
52
+ const token: ApprovalToken = {
53
+ token: randomUUID(),
54
+ sessionId,
55
+ workflowName,
56
+ gateName,
57
+ workflowHash,
58
+ message,
59
+ createdAt: now.toISOString(),
60
+ expiresAt: new Date(now.getTime() + expiresInMs).toISOString(),
61
+ status: 'pending',
62
+ requestedBy,
63
+ };
64
+
65
+ this.tokens.set(token.token, token);
66
+ return token;
67
+ }
68
+
69
+ /**
70
+ * Validates an approval token against the current execution context.
71
+ *
72
+ * Checks: (a) token exists, (b) sessionId matches, (c) status is pending,
73
+ * (d) not expired, (e) workflowHash matches current workflow.
74
+ *
75
+ * @param tokenId - The token UUID to validate.
76
+ * @param currentSessionId - The current session to validate against.
77
+ * @param currentWorkflowHash - The current workflow hash for TOCTOU check.
78
+ * @returns Validation result with reason if invalid.
79
+ */
80
+ validateToken(
81
+ tokenId: string,
82
+ currentSessionId: string,
83
+ currentWorkflowHash: string,
84
+ ): TokenValidation {
85
+ const token = this.tokens.get(tokenId);
86
+
87
+ if (!token) {
88
+ return { valid: false, reason: 'not_found' };
89
+ }
90
+
91
+ if (token.sessionId !== currentSessionId) {
92
+ return { valid: false, reason: 'wrong_session', token };
93
+ }
94
+
95
+ if (token.status !== 'pending') {
96
+ return { valid: false, reason: 'not_pending', token };
97
+ }
98
+
99
+ // Check expiration
100
+ if (new Date(token.expiresAt).getTime() < Date.now()) {
101
+ // Atomically transition to expired
102
+ this.transitionStatus(tokenId, 'expired');
103
+ return { valid: false, reason: 'expired', token: { ...token, status: 'expired' } };
104
+ }
105
+
106
+ // TOCTOU: verify workflow has not been modified
107
+ if (token.workflowHash !== currentWorkflowHash) {
108
+ return { valid: false, reason: 'hash_mismatch', token };
109
+ }
110
+
111
+ return { valid: true, token };
112
+ }
113
+
114
+ /**
115
+ * Approves a pending token.
116
+ *
117
+ * Performs an atomic CAS transition: `pending -> approved`. If the token
118
+ * is not in `pending` state, the operation is a no-op and returns false.
119
+ *
120
+ * @param tokenId - The token UUID to approve.
121
+ * @param approvedBy - The identifier of the approving actor.
122
+ * @returns `true` if the transition succeeded, `false` if CAS failed.
123
+ */
124
+ approveToken(tokenId: string, approvedBy: string): boolean {
125
+ const token = this.tokens.get(tokenId);
126
+ if (!token || token.status !== 'pending') {
127
+ return false;
128
+ }
129
+
130
+ const now = new Date().toISOString();
131
+ token.status = 'approved';
132
+ token.approvedBy = approvedBy;
133
+ token.approvedAt = now;
134
+ token.usedAt = now;
135
+ return true;
136
+ }
137
+
138
+ /**
139
+ * Rejects a pending token.
140
+ *
141
+ * Performs an atomic CAS transition: `pending -> rejected`.
142
+ *
143
+ * @param tokenId - The token UUID to reject.
144
+ * @returns `true` if the transition succeeded, `false` if CAS failed.
145
+ */
146
+ rejectToken(tokenId: string): boolean {
147
+ const token = this.tokens.get(tokenId);
148
+ if (!token || token.status !== 'pending') {
149
+ return false;
150
+ }
151
+
152
+ token.status = 'rejected';
153
+ token.usedAt = new Date().toISOString();
154
+ return true;
155
+ }
156
+
157
+ /**
158
+ * Expires a pending token.
159
+ *
160
+ * Performs an atomic CAS transition: `pending -> expired`.
161
+ *
162
+ * @param tokenId - The token UUID to expire.
163
+ * @returns `true` if the transition succeeded, `false` if CAS failed.
164
+ */
165
+ expireToken(tokenId: string): boolean {
166
+ return this.transitionStatus(tokenId, 'expired');
167
+ }
168
+
169
+ /**
170
+ * Retrieves a token by its UUID.
171
+ *
172
+ * @param tokenId - The token UUID to look up.
173
+ * @returns The token if found, otherwise undefined.
174
+ */
175
+ getToken(tokenId: string): ApprovalToken | undefined {
176
+ return this.tokens.get(tokenId);
177
+ }
178
+
179
+ /**
180
+ * Lists all tokens for a given session.
181
+ *
182
+ * @param sessionId - The session to filter by.
183
+ * @returns Array of tokens belonging to the session.
184
+ */
185
+ getTokensForSession(sessionId: string): ApprovalToken[] {
186
+ return Array.from(this.tokens.values()).filter((t) => t.sessionId === sessionId);
187
+ }
188
+
189
+ /**
190
+ * Computes a SHA-256 hash of a workflow definition string.
191
+ *
192
+ * Used for TOCTOU protection: the hash at token creation time is compared
193
+ * against the hash at approval time.
194
+ *
195
+ * @param workflowText - The raw workflow definition text.
196
+ * @returns Hex-encoded SHA-256 hash.
197
+ */
198
+ static computeWorkflowHash(workflowText: string): string {
199
+ return createHash('sha256').update(workflowText).digest('hex');
200
+ }
201
+
202
+ /**
203
+ * Atomically transitions a token from `pending` to the target status.
204
+ *
205
+ * @param tokenId - The token UUID.
206
+ * @param targetStatus - The desired new status.
207
+ * @returns `true` if the CAS transition succeeded.
208
+ */
209
+ private transitionStatus(tokenId: string, targetStatus: ApprovalTokenStatus): boolean {
210
+ const token = this.tokens.get(tokenId);
211
+ if (!token || token.status !== 'pending') {
212
+ return false;
213
+ }
214
+ token.status = targetStatus;
215
+ token.usedAt = new Date().toISOString();
216
+ return true;
217
+ }
218
+ }
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Execution context builder for CANT workflows.
3
+ *
4
+ * Resolves variable references and manages the scope chain for workflow
5
+ * execution. Variables from workflow parameters, step outputs, and
6
+ * intermediate bindings are tracked in a hierarchical scope.
7
+ *
8
+ * @see docs/specs/CANT-DSL-SPEC.md Section 7.2 (Workflow Execution)
9
+ */
10
+
11
+ import type { ExecutionScope } from './types.js';
12
+
13
+ /**
14
+ * Creates a new root execution scope with initial variable bindings.
15
+ *
16
+ * @param initialBindings - Initial variable values (typically workflow parameters).
17
+ * @returns A new root scope.
18
+ */
19
+ export function createScope(initialBindings: Record<string, unknown> = {}): ExecutionScope {
20
+ return {
21
+ variables: { ...initialBindings },
22
+ };
23
+ }
24
+
25
+ /**
26
+ * Creates a child scope that inherits from a parent.
27
+ *
28
+ * Lookups in the child scope fall through to the parent if not found locally.
29
+ * This is used for parallel arms, loop iterations, and nested blocks.
30
+ *
31
+ * @param parent - The parent scope.
32
+ * @param localBindings - Local variable overrides for this child scope.
33
+ * @returns A new child scope.
34
+ */
35
+ export function createChildScope(
36
+ parent: ExecutionScope,
37
+ localBindings: Record<string, unknown> = {},
38
+ ): ExecutionScope {
39
+ return {
40
+ variables: { ...localBindings },
41
+ parent,
42
+ };
43
+ }
44
+
45
+ /**
46
+ * Resolves a variable name in the scope chain.
47
+ *
48
+ * Searches the current scope first, then walks up the parent chain.
49
+ *
50
+ * @param scope - The scope to search in.
51
+ * @param name - The variable name to resolve.
52
+ * @returns The variable value, or `undefined` if not found in any scope.
53
+ */
54
+ export function resolveVariable(scope: ExecutionScope, name: string): unknown {
55
+ // Check current scope
56
+ if (name in scope.variables) {
57
+ return scope.variables[name];
58
+ }
59
+
60
+ // Check parent chain
61
+ if (scope.parent) {
62
+ return resolveVariable(scope.parent, name);
63
+ }
64
+
65
+ return undefined;
66
+ }
67
+
68
+ /**
69
+ * Sets a variable in the current scope (does not affect parent scopes).
70
+ *
71
+ * @param scope - The scope to modify.
72
+ * @param name - The variable name to set.
73
+ * @param value - The value to assign.
74
+ */
75
+ export function setVariable(scope: ExecutionScope, name: string, value: unknown): void {
76
+ scope.variables[name] = value;
77
+ }
78
+
79
+ /**
80
+ * Resolves `{variable}` placeholders in a template string against the scope.
81
+ *
82
+ * Performs single-pass replacement per the T07 security rule: nested
83
+ * interpolation within resolved values is treated as literal text.
84
+ *
85
+ * @param template - The string containing `{variable}` placeholders.
86
+ * @param scope - The execution scope for variable resolution.
87
+ * @returns The string with all placeholders resolved.
88
+ * @throws {Error} If a referenced variable is not found in any scope.
89
+ */
90
+ export function resolveTemplate(template: string, scope: ExecutionScope): string {
91
+ return template.replace(/\{([^}]+)\}/g, (_match, varName: string) => {
92
+ const value = resolveVariable(scope, varName);
93
+ if (value === undefined) {
94
+ throw new Error(`Variable '${varName}' not found in execution scope`);
95
+ }
96
+ return String(value);
97
+ });
98
+ }
99
+
100
+ /**
101
+ * Merges step output into the current scope.
102
+ *
103
+ * Binds `<stepName>.stdout`, `<stepName>.stderr`, and `<stepName>.exitCode`
104
+ * for use in subsequent step variable resolution.
105
+ *
106
+ * @param scope - The scope to add bindings to.
107
+ * @param stepName - The name of the completed step.
108
+ * @param output - The step output to merge.
109
+ */
110
+ export function mergeStepOutput(
111
+ scope: ExecutionScope,
112
+ stepName: string,
113
+ output: Record<string, unknown>,
114
+ ): void {
115
+ // Bind the full output object under the step name
116
+ scope.variables[stepName] = output;
117
+
118
+ // Also bind dotted access for convenience
119
+ for (const [key, value] of Object.entries(output)) {
120
+ scope.variables[`${stepName}.${key}`] = value;
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Collects all variable bindings visible from the given scope (including parents).
126
+ *
127
+ * Parent bindings are overridden by child bindings of the same name.
128
+ *
129
+ * @param scope - The scope to flatten.
130
+ * @returns A flat record of all visible variable bindings.
131
+ */
132
+ export function flattenScope(scope: ExecutionScope): Record<string, unknown> {
133
+ const parentVars = scope.parent ? flattenScope(scope.parent) : {};
134
+ return { ...parentVars, ...scope.variables };
135
+ }
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Discretion evaluation for CANT workflow conditionals.
3
+ *
4
+ * Discretion conditions (`**prose text**`) are AI-evaluated logic gates
5
+ * in CANT workflows. The evaluation is pluggable: the default evaluator
6
+ * stubs `true` (real LLM integration is a separate task), while custom
7
+ * evaluators can be injected for testing, rule-based shortcuts, or
8
+ * alternative model backends.
9
+ *
10
+ * @see docs/specs/CANT-DSL-SPEC.md Section 7.3 (Discretion Evaluation)
11
+ */
12
+
13
+ import type { DiscretionContext } from './types.js';
14
+
15
+ // ---------------------------------------------------------------------------
16
+ // Evaluator Interface
17
+ // ---------------------------------------------------------------------------
18
+
19
+ /** Evaluates a discretion condition and returns a boolean judgment. */
20
+ export interface DiscretionEvaluator {
21
+ /**
22
+ * Evaluate whether a discretion condition is met.
23
+ *
24
+ * @param condition - The prose text between `**` delimiters.
25
+ * @param context - Execution context including session, variables, and prior results.
26
+ * @returns `true` if the condition is judged to be met.
27
+ */
28
+ evaluate(condition: string, context: DiscretionContext): Promise<boolean>;
29
+ }
30
+
31
+ // ---------------------------------------------------------------------------
32
+ // Default Evaluator (Stub)
33
+ // ---------------------------------------------------------------------------
34
+
35
+ /**
36
+ * Default discretion evaluator that always returns `true`.
37
+ *
38
+ * This is a stub implementation. The real LLM-backed evaluator will be
39
+ * implemented as a separate task. In production, this should be replaced
40
+ * with an evaluator that:
41
+ * - Calls the LLM API with the condition in a structured field
42
+ * - Uses structured prompting (tool use / JSON mode)
43
+ * - Returns a boolean judgment
44
+ */
45
+ export class DefaultDiscretionEvaluator implements DiscretionEvaluator {
46
+ /** Always returns `true` (stub). */
47
+ async evaluate(_condition: string, _context: DiscretionContext): Promise<boolean> {
48
+ return true;
49
+ }
50
+ }
51
+
52
+ // ---------------------------------------------------------------------------
53
+ // Mock Evaluator (Testing)
54
+ // ---------------------------------------------------------------------------
55
+
56
+ /**
57
+ * Mock discretion evaluator with configurable responses for testing.
58
+ *
59
+ * Responses can be set per condition text or as a blanket default.
60
+ */
61
+ export class MockDiscretionEvaluator implements DiscretionEvaluator {
62
+ private responses: Map<string, boolean> = new Map();
63
+ private defaultResponse: boolean;
64
+ private evaluationLog: Array<{ condition: string; context: DiscretionContext; result: boolean }> =
65
+ [];
66
+
67
+ /**
68
+ * Creates a mock evaluator.
69
+ *
70
+ * @param defaultResponse - The response for conditions without a specific mapping.
71
+ */
72
+ constructor(defaultResponse = true) {
73
+ this.defaultResponse = defaultResponse;
74
+ }
75
+
76
+ /** Set the response for a specific condition text. */
77
+ setResponse(condition: string, result: boolean): void {
78
+ this.responses.set(condition, result);
79
+ }
80
+
81
+ /** Evaluate using the configured response map. */
82
+ async evaluate(condition: string, context: DiscretionContext): Promise<boolean> {
83
+ const result = this.responses.get(condition) ?? this.defaultResponse;
84
+ this.evaluationLog.push({ condition, context, result });
85
+ return result;
86
+ }
87
+
88
+ /** Get the log of all evaluations performed. */
89
+ getLog(): ReadonlyArray<{ condition: string; context: DiscretionContext; result: boolean }> {
90
+ return this.evaluationLog;
91
+ }
92
+
93
+ /** Reset the evaluation log. */
94
+ clearLog(): void {
95
+ this.evaluationLog = [];
96
+ }
97
+ }
98
+
99
+ // ---------------------------------------------------------------------------
100
+ // Rate-Limited Evaluator (Decorator)
101
+ // ---------------------------------------------------------------------------
102
+
103
+ /**
104
+ * Wraps a discretion evaluator with rate limiting.
105
+ *
106
+ * Enforces a configurable maximum number of discretion evaluations per
107
+ * workflow execution. Default limit is 100 per the spec. This prevents
108
+ * runaway costs from loops containing discretion conditions.
109
+ */
110
+ export class RateLimitedDiscretionEvaluator implements DiscretionEvaluator {
111
+ private evaluationCount = 0;
112
+
113
+ /**
114
+ * Creates a rate-limited evaluator wrapper.
115
+ *
116
+ * @param inner - The underlying evaluator to delegate to.
117
+ * @param maxEvaluations - Maximum evaluations allowed (default: 100).
118
+ */
119
+ constructor(
120
+ private readonly inner: DiscretionEvaluator,
121
+ private readonly maxEvaluations: number = 100,
122
+ ) {}
123
+
124
+ /**
125
+ * Evaluate with rate limiting.
126
+ *
127
+ * @throws {Error} If the evaluation count exceeds the configured maximum.
128
+ */
129
+ async evaluate(condition: string, context: DiscretionContext): Promise<boolean> {
130
+ this.evaluationCount++;
131
+ if (this.evaluationCount > this.maxEvaluations) {
132
+ throw new Error(
133
+ `Discretion evaluation limit exceeded: ${this.evaluationCount} > ${this.maxEvaluations}. ` +
134
+ 'This prevents runaway costs from loops containing discretion conditions.',
135
+ );
136
+ }
137
+ return this.inner.evaluate(condition, context);
138
+ }
139
+
140
+ /** Get the current evaluation count. */
141
+ getEvaluationCount(): number {
142
+ return this.evaluationCount;
143
+ }
144
+
145
+ /** Reset the evaluation counter (for reuse across workflow runs). */
146
+ resetCount(): void {
147
+ this.evaluationCount = 0;
148
+ }
149
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * CANT DSL runtime — TypeScript workflow executor.
3
+ *
4
+ * This module provides the TypeScript side of the CANT hybrid runtime:
5
+ * - Workflow execution (sessions, parallel, conditionals, loops, try/catch)
6
+ * - Discretion evaluation (pluggable AI-judged conditions)
7
+ * - Approval gate management (token generation, validation, state machine)
8
+ * - Parallel arm execution (all/race/settle strategies)
9
+ * - Execution context and scope management
10
+ *
11
+ * Pipeline execution is handled by the Rust `cant-runtime` crate and
12
+ * bridged via napi-rs.
13
+ *
14
+ * @see docs/specs/CANT-DSL-SPEC.md Section 7 (Runtime) and Section 8 (Approval Tokens)
15
+ */
16
+
17
+ // Approval gate management
18
+ export { ApprovalManager } from './approval.js';
19
+
20
+ // Execution context and scope
21
+ export {
22
+ createChildScope,
23
+ createScope,
24
+ flattenScope,
25
+ mergeStepOutput,
26
+ resolveTemplate,
27
+ resolveVariable,
28
+ setVariable,
29
+ } from './context-builder.js';
30
+
31
+ // Discretion evaluation
32
+ export type { DiscretionEvaluator } from './discretion.js';
33
+ export {
34
+ DefaultDiscretionEvaluator,
35
+ MockDiscretionEvaluator,
36
+ RateLimitedDiscretionEvaluator,
37
+ } from './discretion.js';
38
+
39
+ // Parallel execution
40
+ export type { ParallelArm, ParallelResult } from './parallel-runner.js';
41
+ export { executeParallel } from './parallel-runner.js';
42
+
43
+ // Runtime types
44
+ export type {
45
+ ApprovalToken,
46
+ ApprovalTokenStatus,
47
+ DiscretionContext,
48
+ ExecutionResult,
49
+ ExecutionScope,
50
+ JoinStrategy,
51
+ SettleResult,
52
+ StepResult,
53
+ TokenValidation,
54
+ } from './types.js';
55
+
56
+ // Workflow executor
57
+ export type { WorkflowExecutorConfig } from './workflow-executor.js';
58
+ export { WorkflowExecutor } from './workflow-executor.js';