@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,421 +0,0 @@
1
- /**
2
- * Unit tests for SignalDockTransport HTTP client.
3
- *
4
- * All HTTP calls are mocked via vi.stubGlobal('fetch') — no daemon needed.
5
- *
6
- * @task T5671
7
- */
8
-
9
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
10
- import type { SignalDockTransportConfig } from '../signaldock-transport.js';
11
- import { SignalDockTransport } from '../signaldock-transport.js';
12
- import type { Agent, ApiResponse, Conversation, Message } from '../types.js';
13
-
14
- function makeConfig(overrides?: Partial<SignalDockTransportConfig>): SignalDockTransportConfig {
15
- return {
16
- endpoint: 'http://localhost:4000',
17
- agentPrefix: 'cleo-',
18
- privacyTier: 'private',
19
- ...overrides,
20
- };
21
- }
22
-
23
- function mockFetchResponse<T>(data: T, status = 200): Response {
24
- const envelope: ApiResponse<T> = { success: true, data };
25
- return {
26
- ok: status >= 200 && status < 300,
27
- status,
28
- json: () => Promise.resolve(envelope),
29
- text: () => Promise.resolve(JSON.stringify(envelope)),
30
- } as unknown as Response;
31
- }
32
-
33
- function mockFetchError(status: number, body = 'Internal Server Error'): Response {
34
- return {
35
- ok: false,
36
- status,
37
- json: () => Promise.reject(new Error('not json')),
38
- text: () => Promise.resolve(body),
39
- } as unknown as Response;
40
- }
41
-
42
- function mock204Response(): Response {
43
- return {
44
- ok: true,
45
- status: 204,
46
- json: () => Promise.reject(new Error('no content')),
47
- text: () => Promise.resolve(''),
48
- } as unknown as Response;
49
- }
50
-
51
- function mockFetchEnvelopeError<T>(code: string, message: string): Response {
52
- const envelope: ApiResponse<T> = {
53
- success: false,
54
- error: { code, message },
55
- };
56
- return {
57
- ok: true,
58
- status: 200,
59
- json: () => Promise.resolve(envelope),
60
- text: () => Promise.resolve(JSON.stringify(envelope)),
61
- } as unknown as Response;
62
- }
63
-
64
- const mockAgent: Agent = {
65
- id: 'agent-uuid-1',
66
- name: 'cleo-orchestrator',
67
- agentClass: 'code_dev',
68
- privacyTier: 'private',
69
- status: 'online',
70
- createdAt: '2026-03-08T00:00:00Z',
71
- updatedAt: '2026-03-08T00:00:00Z',
72
- };
73
-
74
- const mockConversation: Conversation = {
75
- id: 'conv-uuid-1',
76
- participants: ['agent-1', 'agent-2'],
77
- visibility: 'private',
78
- messageCount: 0,
79
- createdAt: '2026-03-08T00:00:00Z',
80
- updatedAt: '2026-03-08T00:00:00Z',
81
- };
82
-
83
- const mockMessage: Message = {
84
- id: 'msg-uuid-1',
85
- conversationId: 'conv-uuid-1',
86
- fromAgentId: 'agent-1',
87
- toAgentId: 'agent-2',
88
- content: 'Hello from CLEO',
89
- contentType: 'text',
90
- status: 'delivered',
91
- createdAt: '2026-03-08T00:00:00Z',
92
- deliveredAt: '2026-03-08T00:00:01Z',
93
- };
94
-
95
- describe('SignalDockTransport', () => {
96
- let transport: SignalDockTransport;
97
- let fetchMock: ReturnType<typeof vi.fn>;
98
-
99
- beforeEach(() => {
100
- transport = new SignalDockTransport(makeConfig());
101
- fetchMock = vi.fn();
102
- vi.stubGlobal('fetch', fetchMock);
103
- });
104
-
105
- afterEach(() => {
106
- vi.restoreAllMocks();
107
- });
108
-
109
- it('has name "signaldock"', () => {
110
- expect(transport.name).toBe('signaldock');
111
- });
112
-
113
- describe('register', () => {
114
- it('registers an agent with prefixed name', async () => {
115
- fetchMock.mockResolvedValueOnce(mockFetchResponse(mockAgent));
116
-
117
- const result = await transport.register('orchestrator', 'code_dev', 'private');
118
-
119
- expect(fetchMock).toHaveBeenCalledOnce();
120
- const [url, init] = fetchMock.mock.calls[0];
121
- expect(url).toBe('http://localhost:4000/agents');
122
- expect(init.method).toBe('POST');
123
- const body = JSON.parse(init.body);
124
- expect(body.name).toBe('cleo-orchestrator');
125
- expect(body.agentClass).toBe('code_dev');
126
- expect(body.privacyTier).toBe('private');
127
-
128
- expect(result).toEqual({
129
- agentId: 'agent-uuid-1',
130
- name: 'cleo-orchestrator',
131
- agentClass: 'code_dev',
132
- privacyTier: 'private',
133
- });
134
- });
135
-
136
- it('uses custom prefix from config', async () => {
137
- const customTransport = new SignalDockTransport(makeConfig({ agentPrefix: 'test-' }));
138
- fetchMock.mockResolvedValueOnce(mockFetchResponse({ ...mockAgent, name: 'test-worker' }));
139
-
140
- await customTransport.register('worker', 'code_dev', 'private');
141
- const body = JSON.parse(fetchMock.mock.calls[0][1].body);
142
- expect(body.name).toBe('test-worker');
143
- });
144
-
145
- it('throws on non-200 response', async () => {
146
- fetchMock.mockResolvedValueOnce(mockFetchError(409, 'Agent already exists'));
147
-
148
- await expect(transport.register('orchestrator', 'code_dev', 'private')).rejects.toThrow(
149
- /SignalDock API error.*409.*Agent already exists/,
150
- );
151
- });
152
-
153
- it('throws on envelope error with success:false', async () => {
154
- fetchMock.mockResolvedValueOnce(
155
- mockFetchEnvelopeError('DUPLICATE', 'Agent name already taken'),
156
- );
157
-
158
- await expect(transport.register('orchestrator', 'code_dev', 'private')).rejects.toThrow(
159
- /SignalDock error \[DUPLICATE\]: Agent name already taken/,
160
- );
161
- });
162
- });
163
-
164
- describe('deregister', () => {
165
- it('sends DELETE request for agent ID', async () => {
166
- fetchMock.mockResolvedValueOnce(mock204Response());
167
-
168
- await transport.deregister('agent-uuid-1');
169
-
170
- expect(fetchMock).toHaveBeenCalledOnce();
171
- const [url, init] = fetchMock.mock.calls[0];
172
- expect(url).toBe('http://localhost:4000/agents/agent-uuid-1');
173
- expect(init.method).toBe('DELETE');
174
- });
175
-
176
- it('encodes agent ID in URL', async () => {
177
- fetchMock.mockResolvedValueOnce(mock204Response());
178
-
179
- await transport.deregister('agent/with special+chars');
180
-
181
- const [url] = fetchMock.mock.calls[0];
182
- expect(url).toBe('http://localhost:4000/agents/agent%2Fwith%20special%2Bchars');
183
- });
184
-
185
- it('throws on non-200 DELETE response', async () => {
186
- fetchMock.mockResolvedValueOnce(mockFetchError(404, 'Not found'));
187
-
188
- await expect(transport.deregister('nonexistent')).rejects.toThrow(
189
- /SignalDock API error.*404/,
190
- );
191
- });
192
- });
193
-
194
- describe('send', () => {
195
- it('creates a conversation then sends message when no conversationId given', async () => {
196
- // First call: createConversation
197
- fetchMock.mockResolvedValueOnce(mockFetchResponse(mockConversation));
198
- // Second call: send message
199
- fetchMock.mockResolvedValueOnce(mockFetchResponse(mockMessage));
200
-
201
- const result = await transport.send('agent-1', 'agent-2', 'Hello from CLEO');
202
-
203
- expect(fetchMock).toHaveBeenCalledTimes(2);
204
-
205
- // First call was POST /conversations
206
- const [convUrl, convInit] = fetchMock.mock.calls[0];
207
- expect(convUrl).toBe('http://localhost:4000/conversations');
208
- expect(convInit.method).toBe('POST');
209
-
210
- // Second call was POST /messages
211
- const [msgUrl, msgInit] = fetchMock.mock.calls[1];
212
- expect(msgUrl).toBe('http://localhost:4000/messages');
213
- expect(msgInit.method).toBe('POST');
214
- const msgBody = JSON.parse(msgInit.body);
215
- expect(msgBody.conversationId).toBe('conv-uuid-1');
216
- expect(msgBody.fromAgentId).toBe('agent-1');
217
- expect(msgBody.toAgentId).toBe('agent-2');
218
- expect(msgBody.content).toBe('Hello from CLEO');
219
-
220
- expect(result).toEqual({
221
- messageId: 'msg-uuid-1',
222
- conversationId: 'conv-uuid-1',
223
- status: 'delivered',
224
- });
225
- });
226
-
227
- it('skips conversation creation when conversationId is provided', async () => {
228
- fetchMock.mockResolvedValueOnce(mockFetchResponse(mockMessage));
229
-
230
- await transport.send('agent-1', 'agent-2', 'Hello', 'existing-conv-id');
231
-
232
- expect(fetchMock).toHaveBeenCalledOnce();
233
- const [url] = fetchMock.mock.calls[0];
234
- expect(url).toBe('http://localhost:4000/messages');
235
- });
236
-
237
- it('maps non-delivered status to pending', async () => {
238
- fetchMock.mockResolvedValueOnce(mockFetchResponse({ ...mockMessage, status: 'pending' }));
239
-
240
- const result = await transport.send('agent-1', 'agent-2', 'Hello', 'conv-id');
241
- expect(result.status).toBe('pending');
242
- });
243
-
244
- it('maps read status to pending (not delivered)', async () => {
245
- fetchMock.mockResolvedValueOnce(mockFetchResponse({ ...mockMessage, status: 'read' }));
246
-
247
- const result = await transport.send('agent-1', 'agent-2', 'Hello', 'conv-id');
248
- // 'read' !== 'delivered', so maps to 'pending' per the ternary
249
- expect(result.status).toBe('pending');
250
- });
251
-
252
- it('sends X-Agent-Id header as fromAgentId', async () => {
253
- fetchMock.mockResolvedValueOnce(mockFetchResponse(mockMessage));
254
-
255
- await transport.send('agent-1', 'agent-2', 'test', 'conv-id');
256
-
257
- const headers = fetchMock.mock.calls[0][1].headers;
258
- expect(headers['X-Agent-Id']).toBe('agent-1');
259
- });
260
- });
261
-
262
- describe('poll', () => {
263
- it('polls new messages for an agent', async () => {
264
- fetchMock.mockResolvedValueOnce(mockFetchResponse([mockMessage]));
265
-
266
- const result = await transport.poll('agent-2');
267
-
268
- expect(fetchMock).toHaveBeenCalledOnce();
269
- const [url, init] = fetchMock.mock.calls[0];
270
- expect(url).toBe('http://localhost:4000/messages/poll/new');
271
- expect(init.method).toBe('GET');
272
- expect(init.headers['X-Agent-Id']).toBe('agent-2');
273
- expect(result).toEqual([mockMessage]);
274
- });
275
-
276
- it('returns empty array when no messages', async () => {
277
- fetchMock.mockResolvedValueOnce(mockFetchResponse([]));
278
-
279
- const result = await transport.poll('agent-2');
280
- expect(result).toEqual([]);
281
- });
282
-
283
- it('throws on server error during poll', async () => {
284
- fetchMock.mockResolvedValueOnce(mockFetchError(500, 'Server error'));
285
-
286
- await expect(transport.poll('agent-2')).rejects.toThrow(/SignalDock API error.*500/);
287
- });
288
- });
289
-
290
- describe('heartbeat', () => {
291
- it('sends heartbeat POST for agent', async () => {
292
- fetchMock.mockResolvedValueOnce(mock204Response());
293
-
294
- await transport.heartbeat('agent-uuid-1');
295
-
296
- expect(fetchMock).toHaveBeenCalledOnce();
297
- const [url, init] = fetchMock.mock.calls[0];
298
- expect(url).toBe('http://localhost:4000/agents/agent-uuid-1/heartbeat');
299
- expect(init.method).toBe('POST');
300
- expect(init.headers['X-Agent-Id']).toBe('agent-uuid-1');
301
- });
302
-
303
- it('throws on heartbeat failure', async () => {
304
- fetchMock.mockResolvedValueOnce(mockFetchError(404, 'Agent not found'));
305
-
306
- await expect(transport.heartbeat('nonexistent')).rejects.toThrow(/SignalDock API error.*404/);
307
- });
308
- });
309
-
310
- describe('createConversation', () => {
311
- it('creates a private conversation with sorted participants', async () => {
312
- fetchMock.mockResolvedValueOnce(mockFetchResponse(mockConversation));
313
-
314
- const result = await transport.createConversation(['agent-2', 'agent-1'], 'private');
315
-
316
- const body = JSON.parse(fetchMock.mock.calls[0][1].body);
317
- expect(body.participants).toEqual(['agent-1', 'agent-2']);
318
- expect(body.visibility).toBe('private');
319
- expect(result).toEqual(mockConversation);
320
- });
321
-
322
- it('defaults visibility to private', async () => {
323
- fetchMock.mockResolvedValueOnce(mockFetchResponse(mockConversation));
324
-
325
- await transport.createConversation(['a', 'b']);
326
-
327
- const body = JSON.parse(fetchMock.mock.calls[0][1].body);
328
- expect(body.visibility).toBe('private');
329
- });
330
- });
331
-
332
- describe('getAgent', () => {
333
- it('returns agent data for valid ID', async () => {
334
- fetchMock.mockResolvedValueOnce(mockFetchResponse(mockAgent));
335
-
336
- const result = await transport.getAgent('agent-uuid-1');
337
-
338
- expect(fetchMock).toHaveBeenCalledOnce();
339
- const [url, init] = fetchMock.mock.calls[0];
340
- expect(url).toBe('http://localhost:4000/agents/agent-uuid-1');
341
- expect(init.method).toBe('GET');
342
- expect(result).toEqual(mockAgent);
343
- });
344
-
345
- it('returns null when agent not found (swallows error)', async () => {
346
- fetchMock.mockResolvedValueOnce(mockFetchError(404, 'Not found'));
347
-
348
- const result = await transport.getAgent('nonexistent');
349
- expect(result).toBeNull();
350
- });
351
-
352
- it('returns null on network failure', async () => {
353
- fetchMock.mockRejectedValueOnce(new Error('Network error'));
354
-
355
- const result = await transport.getAgent('agent-uuid-1');
356
- expect(result).toBeNull();
357
- });
358
- });
359
-
360
- describe('error handling edge cases', () => {
361
- it('handles network failure (fetch throws)', async () => {
362
- fetchMock.mockRejectedValueOnce(new TypeError('fetch failed'));
363
-
364
- await expect(transport.register('test', 'code_dev', 'private')).rejects.toThrow(
365
- 'fetch failed',
366
- );
367
- });
368
-
369
- it('handles response.text() failure gracefully', async () => {
370
- fetchMock.mockResolvedValueOnce({
371
- ok: false,
372
- status: 500,
373
- text: () => Promise.reject(new Error('body read failed')),
374
- });
375
-
376
- await expect(transport.register('test', 'code_dev', 'private')).rejects.toThrow(
377
- /SignalDock API error.*500/,
378
- );
379
- });
380
-
381
- it('handles malformed JSON response', async () => {
382
- fetchMock.mockResolvedValueOnce({
383
- ok: true,
384
- status: 200,
385
- json: () => Promise.reject(new SyntaxError('Unexpected token')),
386
- text: () => Promise.resolve('not json'),
387
- });
388
-
389
- await expect(transport.register('test', 'code_dev', 'private')).rejects.toThrow();
390
- });
391
-
392
- it('sets Content-Type and Accept headers on all requests', async () => {
393
- fetchMock.mockResolvedValueOnce(mockFetchResponse(mockAgent));
394
-
395
- await transport.register('test', 'code_dev', 'private');
396
-
397
- const headers = fetchMock.mock.calls[0][1].headers;
398
- expect(headers['Content-Type']).toBe('application/json');
399
- expect(headers['Accept']).toBe('application/json');
400
- });
401
-
402
- it('does not set X-Agent-Id when agentId param is not provided', async () => {
403
- fetchMock.mockResolvedValueOnce(mockFetchResponse(mockAgent));
404
-
405
- // register() does not pass agentId to request()
406
- await transport.register('test', 'code_dev', 'private');
407
-
408
- const headers = fetchMock.mock.calls[0][1].headers;
409
- expect(headers['X-Agent-Id']).toBeUndefined();
410
- });
411
-
412
- it('does not include body for GET requests', async () => {
413
- fetchMock.mockResolvedValueOnce(mockFetchResponse([mockMessage]));
414
-
415
- await transport.poll('agent-1');
416
-
417
- const init = fetchMock.mock.calls[0][1];
418
- expect(init.body).toBeUndefined();
419
- });
420
- });
421
- });
@@ -1,137 +0,0 @@
1
- /**
2
- * Claude Code transport — provider-specific adapter wrapping the current SendMessage pattern.
3
- *
4
- * This is the Phase 0 transport that maps the AgentTransport interface onto
5
- * Claude Code's native Agent SDK tools (SendMessage, TaskUpdate, etc.).
6
- *
7
- * It serves as the default transport when SignalDock is not enabled,
8
- * preserving backward compatibility with the existing orchestration model.
9
- *
10
- * @task T5671
11
- */
12
-
13
- import type { AgentRegistration, AgentTransport, MessageResult } from './transport.js';
14
- import type {
15
- Agent,
16
- AgentClass,
17
- Conversation,
18
- ConversationVisibility,
19
- Message,
20
- PrivacyTier,
21
- } from './types.js';
22
-
23
- /**
24
- * Claude Code transport — wraps the current provider-specific messaging.
25
- *
26
- * Registration and deregistration are no-ops because the Claude Code Agent SDK
27
- * manages agent identity internally. Message sending is logged but actual
28
- * delivery happens through the SDK's SendMessage tool at the agent level.
29
- */
30
- export class ClaudeCodeTransport implements AgentTransport {
31
- readonly name = 'claude-code';
32
-
33
- private agents = new Map<string, AgentRegistration>();
34
- private conversations = new Map<string, Conversation>();
35
- private messages: Message[] = [];
36
-
37
- async register(
38
- name: string,
39
- agentClass: AgentClass,
40
- privacyTier: PrivacyTier,
41
- ): Promise<AgentRegistration> {
42
- const registration: AgentRegistration = {
43
- agentId: `cc-${name}`,
44
- name,
45
- agentClass,
46
- privacyTier,
47
- };
48
- this.agents.set(registration.agentId, registration);
49
- return registration;
50
- }
51
-
52
- async deregister(agentId: string): Promise<void> {
53
- this.agents.delete(agentId);
54
- }
55
-
56
- async send(
57
- fromAgentId: string,
58
- toAgentId: string,
59
- content: string,
60
- conversationId?: string,
61
- ): Promise<MessageResult> {
62
- const resolvedConversationId = conversationId ?? `cc-conv-${fromAgentId}-${toAgentId}`;
63
- const now = new Date().toISOString();
64
- const messageId = `cc-msg-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
65
-
66
- const message: Message = {
67
- id: messageId,
68
- conversationId: resolvedConversationId,
69
- fromAgentId,
70
- toAgentId,
71
- content,
72
- contentType: 'text',
73
- status: 'delivered',
74
- createdAt: now,
75
- deliveredAt: now,
76
- };
77
- this.messages.push(message);
78
-
79
- return {
80
- messageId,
81
- conversationId: resolvedConversationId,
82
- status: 'delivered',
83
- };
84
- }
85
-
86
- async poll(agentId: string, since?: string): Promise<Message[]> {
87
- return this.messages.filter((m) => {
88
- if (m.toAgentId !== agentId) return false;
89
- if (since && m.createdAt <= since) return false;
90
- return true;
91
- });
92
- }
93
-
94
- async heartbeat(agentId: string): Promise<void> {
95
- const agent = this.agents.get(agentId);
96
- if (agent) {
97
- this.agents.set(agentId, { ...agent });
98
- }
99
- }
100
-
101
- async createConversation(
102
- participants: string[],
103
- visibility?: ConversationVisibility,
104
- ): Promise<Conversation> {
105
- const now = new Date().toISOString();
106
- const id = `cc-conv-${participants.sort().join('-')}`;
107
- const existing = this.conversations.get(id);
108
- if (existing) return existing;
109
-
110
- const conversation: Conversation = {
111
- id,
112
- participants,
113
- visibility: visibility ?? 'private',
114
- messageCount: 0,
115
- createdAt: now,
116
- updatedAt: now,
117
- };
118
- this.conversations.set(id, conversation);
119
- return conversation;
120
- }
121
-
122
- async getAgent(agentId: string): Promise<Agent | null> {
123
- const registration = this.agents.get(agentId);
124
- if (!registration) return null;
125
-
126
- const now = new Date().toISOString();
127
- return {
128
- id: registration.agentId,
129
- name: registration.name,
130
- agentClass: registration.agentClass,
131
- privacyTier: registration.privacyTier,
132
- status: 'online',
133
- createdAt: now,
134
- updatedAt: now,
135
- };
136
- }
137
- }
@@ -1,39 +0,0 @@
1
- /**
2
- * Transport factory — selects the appropriate AgentTransport based on configuration.
3
- *
4
- * @task T5671
5
- */
6
-
7
- import { ClaudeCodeTransport } from './claude-code-transport.js';
8
- import type { SignalDockTransportConfig } from './signaldock-transport.js';
9
- import { SignalDockTransport } from './signaldock-transport.js';
10
- import type { AgentTransport } from './transport.js';
11
-
12
- /** Configuration for transport selection. */
13
- export interface TransportFactoryConfig {
14
- enabled: boolean;
15
- mode: 'http' | 'native';
16
- endpoint: string;
17
- agentPrefix: string;
18
- privacyTier: 'public' | 'discoverable' | 'private';
19
- }
20
-
21
- /**
22
- * Create an AgentTransport instance based on configuration.
23
- *
24
- * Returns SignalDockTransport if signaldock is enabled,
25
- * otherwise returns ClaudeCodeTransport as the default.
26
- */
27
- export function createTransport(config?: TransportFactoryConfig): AgentTransport {
28
- if (!config?.enabled) {
29
- return new ClaudeCodeTransport();
30
- }
31
-
32
- const sdConfig: SignalDockTransportConfig = {
33
- endpoint: config.endpoint,
34
- agentPrefix: config.agentPrefix,
35
- privacyTier: config.privacyTier,
36
- };
37
-
38
- return new SignalDockTransport(sdConfig);
39
- }
@@ -1,28 +0,0 @@
1
- /**
2
- * SignalDock integration module — provider-neutral agent transport layer.
3
- *
4
- * @task T5671
5
- */
6
-
7
- export { ClaudeCodeTransport } from './claude-code-transport.js';
8
- export type { TransportFactoryConfig } from './factory.js';
9
- export { createTransport } from './factory.js';
10
- export type { SignalDockTransportConfig } from './signaldock-transport.js';
11
- export { SignalDockTransport } from './signaldock-transport.js';
12
- export type { AgentRegistration, AgentTransport, MessageResult } from './transport.js';
13
-
14
- export type {
15
- Agent,
16
- AgentClass,
17
- AgentStatus,
18
- ApiResponse,
19
- ContentType,
20
- Conversation,
21
- ConversationVisibility,
22
- Message,
23
- MessageStatus,
24
- NewAgent,
25
- NewConversation,
26
- NewMessage,
27
- PrivacyTier,
28
- } from './types.js';