@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
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/mcp-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,aAAa,CAAC;AA+BrB;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
1
+ {"version":3,"file":"mcp-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/mcp-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,aAAa,CAAC;AA0BrB;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoBf"}
@@ -1,32 +1,52 @@
1
1
  /**
2
2
  * MCP Prompt/Response Hook Handlers - Wave 2 of T5237
3
3
  *
4
- * Handlers for onPromptSubmit and onResponseComplete events.
5
- * By default, NO brain capture (too noisy). Brain observation is
6
- * opt-in via CLEO_BRAIN_CAPTURE_MCP=true environment variable.
4
+ * Handlers for onPromptSubmit, onResponseComplete, and system Notification
5
+ * events that capture ALL gateway operations (read and write) to BRAIN.
6
+ * By default, NO brain capture (too noisy). Enable via:
7
+ * - Config: brain.captureMcp = true (checked first)
8
+ * - Env: CLEO_BRAIN_CAPTURE_MCP=true (overrides config)
7
9
  * Auto-registers on module load.
10
+ *
11
+ * Note: File-change Notification events (those with filePath + changeType) are
12
+ * handled by file-hooks.ts. This module handles message-bearing system
13
+ * notifications (Notification payloads with a message field).
14
+ *
15
+ * @task T166
8
16
  */
9
17
  import { hooks } from '../registry.js';
10
- function isMissingBrainSchemaError(err) {
11
- if (!(err instanceof Error))
12
- return false;
13
- const message = String(err.message || '').toLowerCase();
14
- return message.includes('no such table') && message.includes('brain_');
15
- }
18
+ import { isAutoCaptureEnabled, isMissingBrainSchemaError } from './handler-helpers.js';
16
19
  /**
17
- * Check if brain capture is enabled for MCP events.
18
- * Defaults to false (too noisy for normal operation).
20
+ * Check whether MCP-level brain capture is enabled.
21
+ *
22
+ * Resolution order (first truthy wins):
23
+ * 1. CLEO_BRAIN_CAPTURE_MCP env var (explicit override)
24
+ * 2. brain.captureMcp project config value
25
+ *
26
+ * Defaults to false when neither is set (too noisy for normal operation).
19
27
  */
20
- function isBrainCaptureEnabled() {
21
- return process.env['CLEO_BRAIN_CAPTURE_MCP'] === 'true';
28
+ async function isBrainCaptureEnabled(projectRoot) {
29
+ const envOverride = process.env['CLEO_BRAIN_CAPTURE_MCP'];
30
+ if (envOverride !== undefined) {
31
+ return envOverride === 'true';
32
+ }
33
+ try {
34
+ const { loadConfig } = await import('../../config.js');
35
+ const config = await loadConfig(projectRoot);
36
+ return config.brain?.captureMcp ?? false;
37
+ }
38
+ catch {
39
+ return false;
40
+ }
22
41
  }
23
42
  /**
24
- * Handle onPromptSubmit - optionally capture prompt events to BRAIN
43
+ * Handle PromptSubmit - optionally capture ALL gateway prompt events to BRAIN.
25
44
  *
26
- * No-op by default. Set CLEO_BRAIN_CAPTURE_MCP=true to enable.
45
+ * No-op by default. Enable via brain.captureMcp config or CLEO_BRAIN_CAPTURE_MCP env.
46
+ * For selective mutation-only capture, use work-capture-hooks.ts instead.
27
47
  */
28
48
  export async function handlePromptSubmit(projectRoot, payload) {
29
- if (!isBrainCaptureEnabled())
49
+ if (!(await isBrainCaptureEnabled(projectRoot)))
30
50
  return;
31
51
  const { observeBrain } = await import('../../memory/brain-retrieval.js');
32
52
  try {
@@ -43,12 +63,13 @@ export async function handlePromptSubmit(projectRoot, payload) {
43
63
  }
44
64
  }
45
65
  /**
46
- * Handle onResponseComplete - optionally capture response events to BRAIN
66
+ * Handle ResponseComplete - optionally capture ALL gateway response events to BRAIN.
47
67
  *
48
- * No-op by default. Set CLEO_BRAIN_CAPTURE_MCP=true to enable.
68
+ * No-op by default. Enable via brain.captureMcp config or CLEO_BRAIN_CAPTURE_MCP env.
69
+ * For selective mutation-only capture, use work-capture-hooks.ts instead.
49
70
  */
50
71
  export async function handleResponseComplete(projectRoot, payload) {
51
- if (!isBrainCaptureEnabled())
72
+ if (!(await isBrainCaptureEnabled(projectRoot)))
52
73
  return;
53
74
  const { observeBrain } = await import('../../memory/brain-retrieval.js');
54
75
  try {
@@ -64,17 +85,63 @@ export async function handleResponseComplete(projectRoot, payload) {
64
85
  throw err;
65
86
  }
66
87
  }
88
+ /**
89
+ * Handle Notification — capture system notifications as BRAIN observations.
90
+ *
91
+ * Only fires for Notification payloads that carry a message field (i.e. system
92
+ * notifications). File-change notifications (filePath + changeType) are
93
+ * handled exclusively by file-hooks.ts and are skipped here to avoid
94
+ * double-capture.
95
+ *
96
+ * Gated behind brain.autoCapture config. Never throws.
97
+ *
98
+ * @param projectRoot - Absolute path to the project root directory.
99
+ * @param payload - Notification event payload.
100
+ *
101
+ * @task T166
102
+ */
103
+ export async function handleSystemNotification(projectRoot, payload) {
104
+ // File-change notifications are handled by file-hooks.ts
105
+ if (payload.filePath || payload.changeType)
106
+ return;
107
+ // Only handle message-bearing system notifications
108
+ if (!payload.message)
109
+ return;
110
+ if (!(await isAutoCaptureEnabled(projectRoot)))
111
+ return;
112
+ const { observeBrain } = await import('../../memory/brain-retrieval.js');
113
+ try {
114
+ await observeBrain(projectRoot, {
115
+ text: `System notification: ${payload.message}`,
116
+ title: `Notification: ${payload.message.slice(0, 60)}`,
117
+ type: 'discovery',
118
+ sourceSessionId: payload.sessionId,
119
+ sourceType: 'agent',
120
+ });
121
+ }
122
+ catch (err) {
123
+ if (!isMissingBrainSchemaError(err))
124
+ throw err;
125
+ }
126
+ }
67
127
  // Register handlers on module load
68
128
  hooks.register({
69
129
  id: 'brain-prompt-submit',
70
- event: 'onPromptSubmit',
130
+ event: 'PromptSubmit',
71
131
  handler: handlePromptSubmit,
72
132
  priority: 100,
73
133
  });
74
134
  hooks.register({
75
135
  id: 'brain-response-complete',
76
- event: 'onResponseComplete',
136
+ event: 'ResponseComplete',
77
137
  handler: handleResponseComplete,
78
138
  priority: 100,
79
139
  });
140
+ // Lower priority (90) so file-hooks.ts (100) runs first for Notification events
141
+ hooks.register({
142
+ id: 'brain-system-notification',
143
+ event: 'Notification',
144
+ handler: handleSystemNotification,
145
+ priority: 90,
146
+ });
80
147
  //# sourceMappingURL=mcp-hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/mcp-hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/mcp-hooks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/session-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAS1E;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
1
+ {"version":3,"file":"session-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/session-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAI1E;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
@@ -9,15 +9,10 @@
9
9
  * T144: Extracts transcript observations on session end.
10
10
  */
11
11
  import { hooks } from '../registry.js';
12
+ import { isMissingBrainSchemaError } from './handler-helpers.js';
12
13
  import { maybeRefreshMemoryBridge } from './memory-bridge-refresh.js';
13
- function isMissingBrainSchemaError(err) {
14
- if (!(err instanceof Error))
15
- return false;
16
- const message = String(err.message || '').toLowerCase();
17
- return message.includes('no such table') && message.includes('brain_');
18
- }
19
14
  /**
20
- * Handle onSessionStart - capture initial session context
15
+ * Handle SessionStart - capture initial session context
21
16
  *
22
17
  * T138: Refresh memory bridge on session start.
23
18
  * T139: Regenerate bridge with session scope context.
@@ -41,7 +36,7 @@ export async function handleSessionStart(projectRoot, payload) {
41
36
  await maybeRefreshMemoryBridge(projectRoot);
42
37
  }
43
38
  /**
44
- * Handle onSessionEnd - capture session summary
39
+ * Handle SessionEnd - capture session summary
45
40
  *
46
41
  * T138: Refresh memory bridge after session ends.
47
42
  * T144: Extract transcript observations via cross-provider adapter.
@@ -96,13 +91,13 @@ export async function handleSessionEnd(projectRoot, payload) {
96
91
  // Register handlers on module load
97
92
  hooks.register({
98
93
  id: 'brain-session-start',
99
- event: 'onSessionStart',
94
+ event: 'SessionStart',
100
95
  handler: handleSessionStart,
101
96
  priority: 100,
102
97
  });
103
98
  hooks.register({
104
99
  id: 'brain-session-end',
105
- event: 'onSessionEnd',
100
+ event: 'SessionEnd',
106
101
  handler: handleSessionEnd,
107
102
  priority: 100,
108
103
  });
@@ -1 +1 @@
1
- {"version":3,"file":"session-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/session-hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/session-hooks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"task-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/task-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AASzE;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAgBf"}
1
+ {"version":3,"file":"task-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/task-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIzE;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAgBf"}
@@ -7,15 +7,10 @@
7
7
  * T138: Triggers memory bridge refresh after task completion.
8
8
  */
9
9
  import { hooks } from '../registry.js';
10
+ import { isMissingBrainSchemaError } from './handler-helpers.js';
10
11
  import { maybeRefreshMemoryBridge } from './memory-bridge-refresh.js';
11
- function isMissingBrainSchemaError(err) {
12
- if (!(err instanceof Error))
13
- return false;
14
- const message = String(err.message || '').toLowerCase();
15
- return message.includes('no such table') && message.includes('brain_');
16
- }
17
12
  /**
18
- * Handle onToolStart (maps to task.start in CLEO)
13
+ * Handle PreToolUse (maps to task.start in CLEO, canonical: was onToolStart)
19
14
  */
20
15
  export async function handleToolStart(projectRoot, payload) {
21
16
  const { observeBrain } = await import('../../memory/brain-retrieval.js');
@@ -33,7 +28,7 @@ export async function handleToolStart(projectRoot, payload) {
33
28
  }
34
29
  }
35
30
  /**
36
- * Handle onToolComplete (maps to task.complete in CLEO)
31
+ * Handle PostToolUse (maps to task.complete in CLEO, canonical: was onToolComplete)
37
32
  *
38
33
  * T138: Refresh memory bridge after task completion.
39
34
  */
@@ -57,13 +52,13 @@ export async function handleToolComplete(projectRoot, payload) {
57
52
  // Register handlers
58
53
  hooks.register({
59
54
  id: 'brain-tool-start',
60
- event: 'onToolStart',
55
+ event: 'PreToolUse',
61
56
  handler: handleToolStart,
62
57
  priority: 100,
63
58
  });
64
59
  hooks.register({
65
60
  id: 'brain-tool-complete',
66
- event: 'onToolComplete',
61
+ event: 'PostToolUse',
67
62
  handler: handleToolComplete,
68
63
  priority: 100,
69
64
  });
@@ -1 +1 @@
1
- {"version":3,"file":"task-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/task-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,SAAS,yBAAyB,CAAC,GAAY;IAC7C,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,OAAO,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,OAA2B;IAE3B,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,WAAW,EAAE;YAC9B,IAAI,EAAE,mBAAmB,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE;YAC/D,KAAK,EAAE,eAAe,OAAO,CAAC,MAAM,EAAE;YACtC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,OAA8B;IAE9B,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,WAAW,EAAE;YAC9B,IAAI,EAAE,QAAQ,OAAO,CAAC,MAAM,2BAA2B,OAAO,CAAC,MAAM,EAAE;YACvE,KAAK,EAAE,kBAAkB,OAAO,CAAC,MAAM,EAAE;YACzC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;IACjD,CAAC;IAED,iEAAiE;IACjE,MAAM,wBAAwB,CAAC,WAAW,CAAC,CAAC;AAC9C,CAAC;AAED,oBAAoB;AACpB,KAAK,CAAC,QAAQ,CAAC;IACb,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,aAAa;IACpB,OAAO,EAAE,eAAe;IACxB,QAAQ,EAAE,GAAG;CACd,CAAC,CAAC;AAEH,KAAK,CAAC,QAAQ,CAAC;IACb,EAAE,EAAE,qBAAqB;IACzB,KAAK,EAAE,gBAAgB;IACvB,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,GAAG;CACd,CAAC,CAAC"}
1
+ {"version":3,"file":"task-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/task-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,OAA0B;IAE1B,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,WAAW,EAAE;YAC9B,IAAI,EAAE,mBAAmB,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE;YAC/D,KAAK,EAAE,eAAe,OAAO,CAAC,MAAM,EAAE;YACtC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,OAA2B;IAE3B,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,WAAW,EAAE;YAC9B,IAAI,EAAE,QAAQ,OAAO,CAAC,MAAM,2BAA2B,OAAO,CAAC,MAAM,EAAE;YACvE,KAAK,EAAE,kBAAkB,OAAO,CAAC,MAAM,EAAE;YACzC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;IACjD,CAAC;IAED,iEAAiE;IACjE,MAAM,wBAAwB,CAAC,WAAW,CAAC,CAAC;AAC9C,CAAC;AAED,oBAAoB;AACpB,KAAK,CAAC,QAAQ,CAAC;IACb,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,YAAY;IACnB,OAAO,EAAE,eAAe;IACxB,QAAQ,EAAE,GAAG;CACd,CAAC,CAAC;AAEH,KAAK,CAAC,QAAQ,CAAC;IACb,EAAE,EAAE,qBAAqB;IACzB,KAAK,EAAE,aAAa;IACpB,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,GAAG;CACd,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"work-capture-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/work-capture-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAkFhF;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAmBf"}
1
+ {"version":3,"file":"work-capture-hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks/handlers/work-capture-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAyEhF;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAmBf"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Active-Work Capture Hook Handlers
3
+ *
4
+ * Captures dispatch mutation events to BRAIN during active work, closing
5
+ * the gap between lifecycle-only capture (session end, task complete) and
6
+ * continuous capture. Only WRITE operations that represent meaningful work
7
+ * are captured — reads and operations already handled by lifecycle hooks
8
+ * are skipped to avoid flooding brain.db.
9
+ *
10
+ * Disabled by default. Enable via:
11
+ * - Config: brain.captureWork = true (checked first)
12
+ * - Env: CLEO_BRAIN_CAPTURE_WORK=true (overrides config)
13
+ *
14
+ * Auto-registers on module load.
15
+ *
16
+ * @task T142
17
+ */
18
+ import { hooks } from '../registry.js';
19
+ import { isMissingBrainSchemaError } from './handler-helpers.js';
20
+ /**
21
+ * Check whether active-work capture is enabled.
22
+ *
23
+ * Resolution order (first truthy wins):
24
+ * 1. CLEO_BRAIN_CAPTURE_WORK env var (explicit override)
25
+ * 2. brain.captureWork project config value
26
+ *
27
+ * Defaults to false when neither is set.
28
+ */
29
+ async function isWorkCaptureEnabled(projectRoot) {
30
+ const envOverride = process.env['CLEO_BRAIN_CAPTURE_WORK'];
31
+ if (envOverride !== undefined) {
32
+ return envOverride === 'true';
33
+ }
34
+ try {
35
+ const { loadConfig } = await import('../../config.js');
36
+ const config = await loadConfig(projectRoot);
37
+ return config.brain?.captureWork ?? false;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ // ---------------------------------------------------------------------------
44
+ // Smart-filter: which mutations to capture
45
+ // ---------------------------------------------------------------------------
46
+ /**
47
+ * Mutations that represent novel work not already captured by lifecycle hooks.
48
+ *
49
+ * Excluded (already captured elsewhere):
50
+ * - tasks.complete → task-hooks.ts (PostToolUse)
51
+ * - session.start → session-hooks.ts (SessionStart)
52
+ * - session.end → session-hooks.ts (SessionEnd)
53
+ * - memory.brain.observe → observeBrain itself writes to brain; self-loop
54
+ *
55
+ * All query gateway operations are excluded by the gateway check before
56
+ * this set is consulted.
57
+ */
58
+ const CAPTURE_OPERATIONS = new Set([
59
+ 'tasks.add',
60
+ 'tasks.update',
61
+ 'tasks.move',
62
+ 'tasks.link',
63
+ 'tasks.unlink',
64
+ 'tasks.label',
65
+ 'tasks.unlabel',
66
+ 'tasks.note',
67
+ ]);
68
+ /**
69
+ * Determine whether a mutate operation should be captured.
70
+ *
71
+ * Only `mutate` gateway operations in CAPTURE_OPERATIONS are captured.
72
+ * All `query` gateway calls are skipped (reads produce no novel work).
73
+ *
74
+ * @param gateway - 'query' or 'mutate'
75
+ * @param domain - e.g. 'tasks'
76
+ * @param operation - e.g. 'add'
77
+ */
78
+ function shouldCapture(gateway, domain, operation) {
79
+ if (gateway !== 'mutate')
80
+ return false;
81
+ const key = `${domain}.${operation}`;
82
+ return CAPTURE_OPERATIONS.has(key);
83
+ }
84
+ // ---------------------------------------------------------------------------
85
+ // Handlers
86
+ // ---------------------------------------------------------------------------
87
+ /**
88
+ * Handle PromptSubmit — log incoming mutation intents to BRAIN.
89
+ *
90
+ * Only fires for mutate operations in CAPTURE_OPERATIONS.
91
+ * Gated behind brain.captureWork config (or CLEO_BRAIN_CAPTURE_WORK env).
92
+ *
93
+ * @param projectRoot - Absolute path to the project root
94
+ * @param payload - PromptSubmit event payload
95
+ */
96
+ export async function handleWorkPromptSubmit(projectRoot, payload) {
97
+ if (!shouldCapture(payload.gateway, payload.domain, payload.operation))
98
+ return;
99
+ if (!(await isWorkCaptureEnabled(projectRoot)))
100
+ return;
101
+ const { observeBrain } = await import('../../memory/brain-retrieval.js');
102
+ try {
103
+ await observeBrain(projectRoot, {
104
+ text: `Dispatch intent: ${payload.gateway}:${payload.domain}.${payload.operation}${payload.source ? ` (from ${payload.source})` : ''}`,
105
+ title: `Work intent: ${payload.domain}.${payload.operation}`,
106
+ type: 'discovery',
107
+ sourceType: 'agent',
108
+ });
109
+ }
110
+ catch (err) {
111
+ if (!isMissingBrainSchemaError(err))
112
+ throw err;
113
+ }
114
+ }
115
+ /**
116
+ * Handle ResponseComplete — capture completed mutations to BRAIN.
117
+ *
118
+ * Only fires for successful mutate operations in CAPTURE_OPERATIONS.
119
+ * Failures are skipped — the intent was already captured by handleWorkPromptSubmit.
120
+ * Gated behind brain.captureWork config (or CLEO_BRAIN_CAPTURE_WORK env).
121
+ *
122
+ * @param projectRoot - Absolute path to the project root
123
+ * @param payload - ResponseComplete event payload
124
+ */
125
+ export async function handleWorkResponseComplete(projectRoot, payload) {
126
+ if (!shouldCapture(payload.gateway, payload.domain, payload.operation))
127
+ return;
128
+ // Only capture successful completions — failures are noise
129
+ if (!payload.success)
130
+ return;
131
+ if (!(await isWorkCaptureEnabled(projectRoot)))
132
+ return;
133
+ const { observeBrain } = await import('../../memory/brain-retrieval.js');
134
+ try {
135
+ const durationNote = payload.durationMs != null ? ` (${payload.durationMs}ms)` : '';
136
+ await observeBrain(projectRoot, {
137
+ text: `Dispatch complete: ${payload.gateway}:${payload.domain}.${payload.operation}${durationNote}`,
138
+ title: `Work done: ${payload.domain}.${payload.operation}`,
139
+ type: 'change',
140
+ sourceType: 'agent',
141
+ });
142
+ }
143
+ catch (err) {
144
+ if (!isMissingBrainSchemaError(err))
145
+ throw err;
146
+ }
147
+ }
148
+ // ---------------------------------------------------------------------------
149
+ // Auto-registration
150
+ // ---------------------------------------------------------------------------
151
+ // Register at lower priority (90) than lifecycle hooks (100) so lifecycle
152
+ // handlers always run first.
153
+ hooks.register({
154
+ id: 'work-capture-prompt-submit',
155
+ event: 'PromptSubmit',
156
+ handler: handleWorkPromptSubmit,
157
+ priority: 90,
158
+ });
159
+ hooks.register({
160
+ id: 'work-capture-response-complete',
161
+ event: 'ResponseComplete',
162
+ handler: handleWorkResponseComplete,
163
+ priority: 90,
164
+ });
165
+ //# sourceMappingURL=work-capture-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-capture-hooks.js","sourceRoot":"","sources":["../../../src/hooks/handlers/work-capture-hooks.ts"],"names":[],"mappings":"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"}
@@ -22,39 +22,53 @@ export const HookPayloadSchema = z.object({
22
22
  // ============================================================================
23
23
  // CAAMP-mapped Event Payload Schemas
24
24
  // ============================================================================
25
- /** Zod schema for {@link OnSessionStartPayload}. */
26
- export const OnSessionStartPayloadSchema = HookPayloadSchema.extend({
25
+ /** Zod schema for {@link SessionStartPayload}. */
26
+ export const SessionStartPayloadSchema = HookPayloadSchema.extend({
27
27
  sessionId: z.string(),
28
28
  name: z.string(),
29
29
  scope: z.string(),
30
30
  agent: z.string().optional(),
31
31
  });
32
- /** Zod schema for {@link OnSessionEndPayload}. */
33
- export const OnSessionEndPayloadSchema = HookPayloadSchema.extend({
32
+ /** @deprecated Use {@link SessionStartPayloadSchema}. Kept for backward compatibility. */
33
+ export const OnSessionStartPayloadSchema = SessionStartPayloadSchema;
34
+ /** Zod schema for {@link SessionEndPayload}. */
35
+ export const SessionEndPayloadSchema = HookPayloadSchema.extend({
34
36
  sessionId: z.string(),
35
37
  duration: z.number(),
36
38
  tasksCompleted: z.array(z.string()),
37
39
  });
38
- /** Zod schema for {@link OnToolStartPayload}. */
39
- export const OnToolStartPayloadSchema = HookPayloadSchema.extend({
40
+ /** @deprecated Use {@link SessionEndPayloadSchema}. Kept for backward compatibility. */
41
+ export const OnSessionEndPayloadSchema = SessionEndPayloadSchema;
42
+ /** Zod schema for {@link PreToolUsePayload}. */
43
+ export const PreToolUsePayloadSchema = HookPayloadSchema.extend({
40
44
  taskId: z.string(),
41
45
  taskTitle: z.string(),
42
46
  previousTask: z.string().optional(),
47
+ toolName: z.string().optional(),
48
+ toolInput: z.record(z.string(), z.unknown()).optional(),
43
49
  });
44
- /** Zod schema for {@link OnToolCompletePayload}. */
45
- export const OnToolCompletePayloadSchema = HookPayloadSchema.extend({
50
+ /** @deprecated Use {@link PreToolUsePayloadSchema}. Kept for backward compatibility. */
51
+ export const OnToolStartPayloadSchema = PreToolUsePayloadSchema;
52
+ /** Zod schema for {@link PostToolUsePayload}. */
53
+ export const PostToolUsePayloadSchema = HookPayloadSchema.extend({
46
54
  taskId: z.string(),
47
55
  taskTitle: z.string(),
48
56
  status: z.enum(['done', 'archived', 'cancelled']),
57
+ toolResult: z.record(z.string(), z.unknown()).optional(),
49
58
  });
50
- /** Zod schema for {@link OnFileChangePayload}. */
51
- export const OnFileChangePayloadSchema = HookPayloadSchema.extend({
52
- filePath: z.string(),
53
- changeType: z.enum(['write', 'create', 'delete']),
59
+ /** @deprecated Use {@link PostToolUsePayloadSchema}. Kept for backward compatibility. */
60
+ export const OnToolCompletePayloadSchema = PostToolUsePayloadSchema;
61
+ /** Zod schema for {@link NotificationPayload}. */
62
+ export const NotificationPayloadSchema = HookPayloadSchema.extend({
63
+ filePath: z.string().optional(),
64
+ changeType: z.enum(['write', 'create', 'delete']).optional(),
54
65
  sizeBytes: z.number().optional(),
66
+ message: z.string().optional(),
55
67
  });
56
- /** Zod schema for {@link OnErrorPayload}. */
57
- export const OnErrorPayloadSchema = HookPayloadSchema.extend({
68
+ /** @deprecated Use {@link NotificationPayloadSchema}. Kept for backward compatibility. */
69
+ export const OnFileChangePayloadSchema = NotificationPayloadSchema;
70
+ /** Zod schema for {@link PostToolUseFailurePayload}. */
71
+ export const PostToolUseFailurePayloadSchema = HookPayloadSchema.extend({
58
72
  errorCode: z.union([z.number(), z.string()]),
59
73
  message: z.string(),
60
74
  domain: z.string().optional(),
@@ -62,15 +76,19 @@ export const OnErrorPayloadSchema = HookPayloadSchema.extend({
62
76
  gateway: z.string().optional(),
63
77
  stack: z.string().optional(),
64
78
  });
65
- /** Zod schema for {@link OnPromptSubmitPayload}. */
66
- export const OnPromptSubmitPayloadSchema = HookPayloadSchema.extend({
79
+ /** @deprecated Use {@link PostToolUseFailurePayloadSchema}. Kept for backward compatibility. */
80
+ export const OnErrorPayloadSchema = PostToolUseFailurePayloadSchema;
81
+ /** Zod schema for {@link PromptSubmitPayload}. */
82
+ export const PromptSubmitPayloadSchema = HookPayloadSchema.extend({
67
83
  gateway: z.string(),
68
84
  domain: z.string(),
69
85
  operation: z.string(),
70
86
  source: z.string().optional(),
71
87
  });
72
- /** Zod schema for {@link OnResponseCompletePayload}. */
73
- export const OnResponseCompletePayloadSchema = HookPayloadSchema.extend({
88
+ /** @deprecated Use {@link PromptSubmitPayloadSchema}. Kept for backward compatibility. */
89
+ export const OnPromptSubmitPayloadSchema = PromptSubmitPayloadSchema;
90
+ /** Zod schema for {@link ResponseCompletePayload}. */
91
+ export const ResponseCompletePayloadSchema = HookPayloadSchema.extend({
74
92
  gateway: z.string(),
75
93
  domain: z.string(),
76
94
  operation: z.string(),
@@ -78,6 +96,38 @@ export const OnResponseCompletePayloadSchema = HookPayloadSchema.extend({
78
96
  durationMs: z.number().optional(),
79
97
  errorCode: z.string().optional(),
80
98
  });
99
+ /** @deprecated Use {@link ResponseCompletePayloadSchema}. Kept for backward compatibility. */
100
+ export const OnResponseCompletePayloadSchema = ResponseCompletePayloadSchema;
101
+ /** Zod schema for {@link SubagentStartPayload}. */
102
+ export const SubagentStartPayloadSchema = HookPayloadSchema.extend({
103
+ agentId: z.string(),
104
+ role: z.string().optional(),
105
+ taskId: z.string().optional(),
106
+ });
107
+ /** Zod schema for {@link SubagentStopPayload}. */
108
+ export const SubagentStopPayloadSchema = HookPayloadSchema.extend({
109
+ agentId: z.string(),
110
+ status: z.enum(['complete', 'partial', 'blocked', 'failed']).optional(),
111
+ taskId: z.string().optional(),
112
+ summary: z.string().optional(),
113
+ });
114
+ /** Zod schema for {@link PreCompactPayload}. */
115
+ export const PreCompactPayloadSchema = HookPayloadSchema.extend({
116
+ tokensBefore: z.number().optional(),
117
+ reason: z.string().optional(),
118
+ });
119
+ /** Zod schema for {@link PostCompactPayload}. */
120
+ export const PostCompactPayloadSchema = HookPayloadSchema.extend({
121
+ tokensBefore: z.number().optional(),
122
+ tokensAfter: z.number().optional(),
123
+ success: z.boolean(),
124
+ });
125
+ /** Zod schema for {@link ConfigChangePayload}. */
126
+ export const ConfigChangePayloadSchema = HookPayloadSchema.extend({
127
+ key: z.string(),
128
+ previousValue: z.unknown().optional(),
129
+ newValue: z.unknown().optional(),
130
+ });
81
131
  // ============================================================================
82
132
  // CLEO Internal Event Payload Schemas
83
133
  // ============================================================================
@@ -126,14 +176,21 @@ export const OnPatrolPayloadSchema = HookPayloadSchema.extend({
126
176
  * this map fall back to the base {@link HookPayloadSchema}.
127
177
  */
128
178
  const EVENT_SCHEMA_MAP = {
129
- onSessionStart: OnSessionStartPayloadSchema,
130
- onSessionEnd: OnSessionEndPayloadSchema,
131
- onToolStart: OnToolStartPayloadSchema,
132
- onToolComplete: OnToolCompletePayloadSchema,
133
- onFileChange: OnFileChangePayloadSchema,
134
- onError: OnErrorPayloadSchema,
135
- onPromptSubmit: OnPromptSubmitPayloadSchema,
136
- onResponseComplete: OnResponseCompletePayloadSchema,
179
+ // CAAMP canonical events (16)
180
+ SessionStart: SessionStartPayloadSchema,
181
+ SessionEnd: SessionEndPayloadSchema,
182
+ PreToolUse: PreToolUsePayloadSchema,
183
+ PostToolUse: PostToolUsePayloadSchema,
184
+ Notification: NotificationPayloadSchema,
185
+ PostToolUseFailure: PostToolUseFailurePayloadSchema,
186
+ PromptSubmit: PromptSubmitPayloadSchema,
187
+ ResponseComplete: ResponseCompletePayloadSchema,
188
+ SubagentStart: SubagentStartPayloadSchema,
189
+ SubagentStop: SubagentStopPayloadSchema,
190
+ PreCompact: PreCompactPayloadSchema,
191
+ PostCompact: PostCompactPayloadSchema,
192
+ ConfigChange: ConfigChangePayloadSchema,
193
+ // CLEO internal coordination events (5)
137
194
  onWorkAvailable: OnWorkAvailablePayloadSchema,
138
195
  onAgentSpawn: OnAgentSpawnPayloadSchema,
139
196
  onAgentComplete: OnAgentCompletePayloadSchema,