@cleocode/cleo 2026.4.31 → 2026.4.36

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 (757) hide show
  1. package/dist/cli/commander-shim.d.ts +112 -0
  2. package/dist/cli/commander-shim.d.ts.map +1 -0
  3. package/dist/cli/commander-shim.js +233 -0
  4. package/dist/cli/commander-shim.js.map +1 -0
  5. package/dist/cli/commands/adapter.d.ts +21 -0
  6. package/dist/cli/commands/adapter.d.ts.map +1 -0
  7. package/dist/cli/commands/adapter.js +73 -0
  8. package/dist/cli/commands/adapter.js.map +1 -0
  9. package/dist/cli/commands/add-batch.d.ts +16 -0
  10. package/dist/cli/commands/add-batch.d.ts.map +1 -0
  11. package/dist/cli/commands/add-batch.js +133 -0
  12. package/dist/cli/commands/add-batch.js.map +1 -0
  13. package/dist/cli/commands/add.d.ts +12 -0
  14. package/dist/cli/commands/add.d.ts.map +1 -0
  15. package/dist/cli/commands/add.js +238 -0
  16. package/dist/cli/commands/add.js.map +1 -0
  17. package/dist/cli/commands/admin.d.ts +15 -0
  18. package/dist/cli/commands/admin.d.ts.map +1 -0
  19. package/dist/cli/commands/admin.js +143 -0
  20. package/dist/cli/commands/admin.js.map +1 -0
  21. package/dist/cli/commands/adr.d.ts +27 -0
  22. package/dist/cli/commands/adr.d.ts.map +1 -0
  23. package/dist/cli/commands/adr.js +79 -0
  24. package/dist/cli/commands/adr.js.map +1 -0
  25. package/dist/cli/commands/agent-profile-status.d.ts +98 -0
  26. package/dist/cli/commands/agent-profile-status.d.ts.map +1 -0
  27. package/dist/cli/commands/agent-profile-status.js +71 -0
  28. package/dist/cli/commands/agent-profile-status.js.map +1 -0
  29. package/dist/cli/commands/agent.d.ts +41 -0
  30. package/dist/cli/commands/agent.d.ts.map +1 -0
  31. package/dist/cli/commands/agent.js +2270 -0
  32. package/dist/cli/commands/agent.js.map +1 -0
  33. package/dist/cli/commands/agents.d.ts +17 -0
  34. package/dist/cli/commands/agents.d.ts.map +1 -0
  35. package/dist/cli/commands/agents.js +20 -0
  36. package/dist/cli/commands/agents.js.map +1 -0
  37. package/dist/cli/commands/analyze.d.ts +12 -0
  38. package/dist/cli/commands/analyze.d.ts.map +1 -0
  39. package/dist/cli/commands/analyze.js +20 -0
  40. package/dist/cli/commands/analyze.js.map +1 -0
  41. package/dist/cli/commands/archive-stats.d.ts +18 -0
  42. package/dist/cli/commands/archive-stats.d.ts.map +1 -0
  43. package/dist/cli/commands/archive-stats.js +49 -0
  44. package/dist/cli/commands/archive-stats.js.map +1 -0
  45. package/dist/cli/commands/archive.d.ts +12 -0
  46. package/dist/cli/commands/archive.d.ts.map +1 -0
  47. package/dist/cli/commands/archive.js +32 -0
  48. package/dist/cli/commands/archive.js.map +1 -0
  49. package/dist/cli/commands/backfill.d.ts +38 -0
  50. package/dist/cli/commands/backfill.d.ts.map +1 -0
  51. package/dist/cli/commands/backfill.js +144 -0
  52. package/dist/cli/commands/backfill.js.map +1 -0
  53. package/dist/cli/commands/backup-inspect.d.ts +24 -0
  54. package/dist/cli/commands/backup-inspect.d.ts.map +1 -0
  55. package/dist/cli/commands/backup-inspect.js +417 -0
  56. package/dist/cli/commands/backup-inspect.js.map +1 -0
  57. package/dist/cli/commands/backup.d.ts +13 -0
  58. package/dist/cli/commands/backup.d.ts.map +1 -0
  59. package/dist/cli/commands/backup.js +479 -0
  60. package/dist/cli/commands/backup.js.map +1 -0
  61. package/dist/cli/commands/blockers.d.ts +7 -0
  62. package/dist/cli/commands/blockers.d.ts.map +1 -0
  63. package/dist/cli/commands/blockers.js +16 -0
  64. package/dist/cli/commands/blockers.js.map +1 -0
  65. package/dist/cli/commands/brain.d.ts +29 -0
  66. package/dist/cli/commands/brain.d.ts.map +1 -0
  67. package/dist/cli/commands/brain.js +193 -0
  68. package/dist/cli/commands/brain.js.map +1 -0
  69. package/dist/cli/commands/briefing.d.ts +22 -0
  70. package/dist/cli/commands/briefing.d.ts.map +1 -0
  71. package/dist/cli/commands/briefing.js +45 -0
  72. package/dist/cli/commands/briefing.js.map +1 -0
  73. package/dist/cli/commands/bug.d.ts +12 -0
  74. package/dist/cli/commands/bug.d.ts.map +1 -0
  75. package/dist/cli/commands/bug.js +81 -0
  76. package/dist/cli/commands/bug.js.map +1 -0
  77. package/dist/cli/commands/cancel.d.ts +17 -0
  78. package/dist/cli/commands/cancel.d.ts.map +1 -0
  79. package/dist/cli/commands/cancel.js +28 -0
  80. package/dist/cli/commands/cancel.js.map +1 -0
  81. package/dist/cli/commands/cant.d.ts +32 -0
  82. package/dist/cli/commands/cant.d.ts.map +1 -0
  83. package/dist/cli/commands/cant.js +264 -0
  84. package/dist/cli/commands/cant.js.map +1 -0
  85. package/dist/cli/commands/chain.d.ts +16 -0
  86. package/dist/cli/commands/chain.d.ts.map +1 -0
  87. package/dist/cli/commands/chain.js +52 -0
  88. package/dist/cli/commands/chain.js.map +1 -0
  89. package/dist/cli/commands/check.d.ts +25 -0
  90. package/dist/cli/commands/check.d.ts.map +1 -0
  91. package/dist/cli/commands/check.js +193 -0
  92. package/dist/cli/commands/check.js.map +1 -0
  93. package/dist/cli/commands/checkpoint.d.ts +15 -0
  94. package/dist/cli/commands/checkpoint.d.ts.map +1 -0
  95. package/dist/cli/commands/checkpoint.js +91 -0
  96. package/dist/cli/commands/checkpoint.js.map +1 -0
  97. package/dist/cli/commands/claim.d.ts +27 -0
  98. package/dist/cli/commands/claim.d.ts.map +1 -0
  99. package/dist/cli/commands/claim.js +45 -0
  100. package/dist/cli/commands/claim.js.map +1 -0
  101. package/dist/cli/commands/code.d.ts +11 -0
  102. package/dist/cli/commands/code.d.ts.map +1 -0
  103. package/dist/cli/commands/code.js +114 -0
  104. package/dist/cli/commands/code.js.map +1 -0
  105. package/dist/cli/commands/commands.d.ts +13 -0
  106. package/dist/cli/commands/commands.d.ts.map +1 -0
  107. package/dist/cli/commands/commands.js +29 -0
  108. package/dist/cli/commands/commands.js.map +1 -0
  109. package/dist/cli/commands/complete.d.ts +12 -0
  110. package/dist/cli/commands/complete.d.ts.map +1 -0
  111. package/dist/cli/commands/complete.js +92 -0
  112. package/dist/cli/commands/complete.js.map +1 -0
  113. package/dist/cli/commands/complexity.d.ts +17 -0
  114. package/dist/cli/commands/complexity.d.ts.map +1 -0
  115. package/dist/cli/commands/complexity.js +25 -0
  116. package/dist/cli/commands/complexity.js.map +1 -0
  117. package/dist/cli/commands/compliance.d.ts +9 -0
  118. package/dist/cli/commands/compliance.d.ts.map +1 -0
  119. package/dist/cli/commands/compliance.js +110 -0
  120. package/dist/cli/commands/compliance.js.map +1 -0
  121. package/dist/cli/commands/config.d.ts +10 -0
  122. package/dist/cli/commands/config.d.ts.map +1 -0
  123. package/dist/cli/commands/config.js +69 -0
  124. package/dist/cli/commands/config.js.map +1 -0
  125. package/dist/cli/commands/consensus.d.ts +13 -0
  126. package/dist/cli/commands/consensus.d.ts.map +1 -0
  127. package/dist/cli/commands/consensus.js +45 -0
  128. package/dist/cli/commands/consensus.js.map +1 -0
  129. package/dist/cli/commands/context.d.ts +15 -0
  130. package/dist/cli/commands/context.d.ts.map +1 -0
  131. package/dist/cli/commands/context.js +76 -0
  132. package/dist/cli/commands/context.js.map +1 -0
  133. package/dist/cli/commands/contribution.d.ts +13 -0
  134. package/dist/cli/commands/contribution.d.ts.map +1 -0
  135. package/dist/cli/commands/contribution.js +41 -0
  136. package/dist/cli/commands/contribution.js.map +1 -0
  137. package/dist/cli/commands/current.d.ts +13 -0
  138. package/dist/cli/commands/current.d.ts.map +1 -0
  139. package/dist/cli/commands/current.js +20 -0
  140. package/dist/cli/commands/current.js.map +1 -0
  141. package/dist/cli/commands/dash.d.ts +12 -0
  142. package/dist/cli/commands/dash.d.ts.map +1 -0
  143. package/dist/cli/commands/dash.js +20 -0
  144. package/dist/cli/commands/dash.js.map +1 -0
  145. package/dist/cli/commands/decomposition.d.ts +13 -0
  146. package/dist/cli/commands/decomposition.d.ts.map +1 -0
  147. package/dist/cli/commands/decomposition.js +45 -0
  148. package/dist/cli/commands/decomposition.js.map +1 -0
  149. package/dist/cli/commands/delete.d.ts +12 -0
  150. package/dist/cli/commands/delete.d.ts.map +1 -0
  151. package/dist/cli/commands/delete.js +37 -0
  152. package/dist/cli/commands/delete.js.map +1 -0
  153. package/dist/cli/commands/deps.d.ts +24 -0
  154. package/dist/cli/commands/deps.d.ts.map +1 -0
  155. package/dist/cli/commands/deps.js +98 -0
  156. package/dist/cli/commands/deps.js.map +1 -0
  157. package/dist/cli/commands/detect-drift.d.ts +15 -0
  158. package/dist/cli/commands/detect-drift.d.ts.map +1 -0
  159. package/dist/cli/commands/detect-drift.js +428 -0
  160. package/dist/cli/commands/detect-drift.js.map +1 -0
  161. package/dist/cli/commands/detect.d.ts +13 -0
  162. package/dist/cli/commands/detect.d.ts.map +1 -0
  163. package/dist/cli/commands/detect.js +20 -0
  164. package/dist/cli/commands/detect.js.map +1 -0
  165. package/dist/cli/commands/docs.d.ts +13 -0
  166. package/dist/cli/commands/docs.d.ts.map +1 -0
  167. package/dist/cli/commands/docs.js +169 -0
  168. package/dist/cli/commands/docs.js.map +1 -0
  169. package/dist/cli/commands/doctor.d.ts +15 -0
  170. package/dist/cli/commands/doctor.d.ts.map +1 -0
  171. package/dist/cli/commands/doctor.js +133 -0
  172. package/dist/cli/commands/doctor.js.map +1 -0
  173. package/dist/cli/commands/dynamic.d.ts +24 -0
  174. package/dist/cli/commands/dynamic.d.ts.map +1 -0
  175. package/dist/cli/commands/dynamic.js +27 -0
  176. package/dist/cli/commands/dynamic.js.map +1 -0
  177. package/dist/cli/commands/env.d.ts +12 -0
  178. package/dist/cli/commands/env.d.ts.map +1 -0
  179. package/dist/cli/commands/env.js +44 -0
  180. package/dist/cli/commands/env.js.map +1 -0
  181. package/dist/cli/commands/exists.d.ts +24 -0
  182. package/dist/cli/commands/exists.d.ts.map +1 -0
  183. package/dist/cli/commands/exists.js +53 -0
  184. package/dist/cli/commands/exists.js.map +1 -0
  185. package/dist/cli/commands/export-tasks.d.ts +10 -0
  186. package/dist/cli/commands/export-tasks.d.ts.map +1 -0
  187. package/dist/cli/commands/export-tasks.js +47 -0
  188. package/dist/cli/commands/export-tasks.js.map +1 -0
  189. package/dist/cli/commands/export.d.ts +9 -0
  190. package/dist/cli/commands/export.d.ts.map +1 -0
  191. package/dist/cli/commands/export.js +46 -0
  192. package/dist/cli/commands/export.js.map +1 -0
  193. package/dist/cli/commands/find.d.ts +14 -0
  194. package/dist/cli/commands/find.d.ts.map +1 -0
  195. package/dist/cli/commands/find.js +152 -0
  196. package/dist/cli/commands/find.js.map +1 -0
  197. package/dist/cli/commands/generate-changelog.d.ts +14 -0
  198. package/dist/cli/commands/generate-changelog.d.ts.map +1 -0
  199. package/dist/cli/commands/generate-changelog.js +252 -0
  200. package/dist/cli/commands/generate-changelog.js.map +1 -0
  201. package/dist/cli/commands/grade.d.ts +13 -0
  202. package/dist/cli/commands/grade.d.ts.map +1 -0
  203. package/dist/cli/commands/grade.js +26 -0
  204. package/dist/cli/commands/grade.js.map +1 -0
  205. package/dist/cli/commands/history.d.ts +9 -0
  206. package/dist/cli/commands/history.d.ts.map +1 -0
  207. package/dist/cli/commands/history.js +33 -0
  208. package/dist/cli/commands/history.js.map +1 -0
  209. package/dist/cli/commands/implementation.d.ts +13 -0
  210. package/dist/cli/commands/implementation.d.ts.map +1 -0
  211. package/dist/cli/commands/implementation.js +41 -0
  212. package/dist/cli/commands/implementation.js.map +1 -0
  213. package/dist/cli/commands/import-tasks.d.ts +10 -0
  214. package/dist/cli/commands/import-tasks.d.ts.map +1 -0
  215. package/dist/cli/commands/import-tasks.js +38 -0
  216. package/dist/cli/commands/import-tasks.js.map +1 -0
  217. package/dist/cli/commands/import.d.ts +9 -0
  218. package/dist/cli/commands/import.d.ts.map +1 -0
  219. package/dist/cli/commands/import.js +28 -0
  220. package/dist/cli/commands/import.js.map +1 -0
  221. package/dist/cli/commands/init.d.ts +34 -0
  222. package/dist/cli/commands/init.d.ts.map +1 -0
  223. package/dist/cli/commands/init.js +96 -0
  224. package/dist/cli/commands/init.js.map +1 -0
  225. package/dist/cli/commands/inject.d.ts +8 -0
  226. package/dist/cli/commands/inject.d.ts.map +1 -0
  227. package/dist/cli/commands/inject.js +28 -0
  228. package/dist/cli/commands/inject.js.map +1 -0
  229. package/dist/cli/commands/intelligence.d.ts +22 -0
  230. package/dist/cli/commands/intelligence.d.ts.map +1 -0
  231. package/dist/cli/commands/intelligence.js +72 -0
  232. package/dist/cli/commands/intelligence.js.map +1 -0
  233. package/dist/cli/commands/issue.d.ts +17 -0
  234. package/dist/cli/commands/issue.d.ts.map +1 -0
  235. package/dist/cli/commands/issue.js +107 -0
  236. package/dist/cli/commands/issue.js.map +1 -0
  237. package/dist/cli/commands/labels.d.ts +17 -0
  238. package/dist/cli/commands/labels.d.ts.map +1 -0
  239. package/dist/cli/commands/labels.js +48 -0
  240. package/dist/cli/commands/labels.js.map +1 -0
  241. package/dist/cli/commands/lifecycle.d.ts +8 -0
  242. package/dist/cli/commands/lifecycle.d.ts.map +1 -0
  243. package/dist/cli/commands/lifecycle.js +128 -0
  244. package/dist/cli/commands/lifecycle.js.map +1 -0
  245. package/dist/cli/commands/list.d.ts +14 -0
  246. package/dist/cli/commands/list.d.ts.map +1 -0
  247. package/dist/cli/commands/list.js +143 -0
  248. package/dist/cli/commands/list.js.map +1 -0
  249. package/dist/cli/commands/log.d.ts +12 -0
  250. package/dist/cli/commands/log.d.ts.map +1 -0
  251. package/dist/cli/commands/log.js +30 -0
  252. package/dist/cli/commands/log.js.map +1 -0
  253. package/dist/cli/commands/map.d.ts +10 -0
  254. package/dist/cli/commands/map.d.ts.map +1 -0
  255. package/dist/cli/commands/map.js +23 -0
  256. package/dist/cli/commands/map.js.map +1 -0
  257. package/dist/cli/commands/memory-brain.d.ts +14 -0
  258. package/dist/cli/commands/memory-brain.d.ts.map +1 -0
  259. package/dist/cli/commands/memory-brain.js +339 -0
  260. package/dist/cli/commands/memory-brain.js.map +1 -0
  261. package/dist/cli/commands/migrate-claude-mem.d.ts +23 -0
  262. package/dist/cli/commands/migrate-claude-mem.d.ts.map +1 -0
  263. package/dist/cli/commands/migrate-claude-mem.js +79 -0
  264. package/dist/cli/commands/migrate-claude-mem.js.map +1 -0
  265. package/dist/cli/commands/next.d.ts +9 -0
  266. package/dist/cli/commands/next.d.ts.map +1 -0
  267. package/dist/cli/commands/next.js +20 -0
  268. package/dist/cli/commands/next.js.map +1 -0
  269. package/dist/cli/commands/nexus.d.ts +20 -0
  270. package/dist/cli/commands/nexus.d.ts.map +1 -0
  271. package/dist/cli/commands/nexus.js +1090 -0
  272. package/dist/cli/commands/nexus.js.map +1 -0
  273. package/dist/cli/commands/observe.d.ts +13 -0
  274. package/dist/cli/commands/observe.d.ts.map +1 -0
  275. package/dist/cli/commands/observe.js +30 -0
  276. package/dist/cli/commands/observe.js.map +1 -0
  277. package/dist/cli/commands/ops.d.ts +10 -0
  278. package/dist/cli/commands/ops.d.ts.map +1 -0
  279. package/dist/cli/commands/ops.js +19 -0
  280. package/dist/cli/commands/ops.js.map +1 -0
  281. package/dist/cli/commands/orchestrate.d.ts +24 -0
  282. package/dist/cli/commands/orchestrate.d.ts.map +1 -0
  283. package/dist/cli/commands/orchestrate.js +254 -0
  284. package/dist/cli/commands/orchestrate.js.map +1 -0
  285. package/dist/cli/commands/otel.d.ts +12 -0
  286. package/dist/cli/commands/otel.d.ts.map +1 -0
  287. package/dist/cli/commands/otel.js +128 -0
  288. package/dist/cli/commands/otel.js.map +1 -0
  289. package/dist/cli/commands/phase.d.ts +12 -0
  290. package/dist/cli/commands/phase.d.ts.map +1 -0
  291. package/dist/cli/commands/phase.js +91 -0
  292. package/dist/cli/commands/phase.js.map +1 -0
  293. package/dist/cli/commands/phases.d.ts +14 -0
  294. package/dist/cli/commands/phases.d.ts.map +1 -0
  295. package/dist/cli/commands/phases.js +42 -0
  296. package/dist/cli/commands/phases.js.map +1 -0
  297. package/dist/cli/commands/plan.d.ts +8 -0
  298. package/dist/cli/commands/plan.d.ts.map +1 -0
  299. package/dist/cli/commands/plan.js +15 -0
  300. package/dist/cli/commands/plan.js.map +1 -0
  301. package/dist/cli/commands/promote.d.ts +11 -0
  302. package/dist/cli/commands/promote.d.ts.map +1 -0
  303. package/dist/cli/commands/promote.js +18 -0
  304. package/dist/cli/commands/promote.js.map +1 -0
  305. package/dist/cli/commands/provider.d.ts +21 -0
  306. package/dist/cli/commands/provider.d.ts.map +1 -0
  307. package/dist/cli/commands/provider.js +88 -0
  308. package/dist/cli/commands/provider.js.map +1 -0
  309. package/dist/cli/commands/reason.d.ts +36 -0
  310. package/dist/cli/commands/reason.d.ts.map +1 -0
  311. package/dist/cli/commands/reason.js +85 -0
  312. package/dist/cli/commands/reason.js.map +1 -0
  313. package/dist/cli/commands/refresh-memory.d.ts +9 -0
  314. package/dist/cli/commands/refresh-memory.d.ts.map +1 -0
  315. package/dist/cli/commands/refresh-memory.js +24 -0
  316. package/dist/cli/commands/refresh-memory.js.map +1 -0
  317. package/dist/cli/commands/relates.d.ts +12 -0
  318. package/dist/cli/commands/relates.d.ts.map +1 -0
  319. package/dist/cli/commands/relates.js +53 -0
  320. package/dist/cli/commands/relates.js.map +1 -0
  321. package/dist/cli/commands/release.d.ts +8 -0
  322. package/dist/cli/commands/release.d.ts.map +1 -0
  323. package/dist/cli/commands/release.js +82 -0
  324. package/dist/cli/commands/release.js.map +1 -0
  325. package/dist/cli/commands/remote.d.ts +12 -0
  326. package/dist/cli/commands/remote.d.ts.map +1 -0
  327. package/dist/cli/commands/remote.js +207 -0
  328. package/dist/cli/commands/remote.js.map +1 -0
  329. package/dist/cli/commands/reorder.d.ts +17 -0
  330. package/dist/cli/commands/reorder.d.ts.map +1 -0
  331. package/dist/cli/commands/reorder.js +41 -0
  332. package/dist/cli/commands/reorder.js.map +1 -0
  333. package/dist/cli/commands/reparent.d.ts +10 -0
  334. package/dist/cli/commands/reparent.d.ts.map +1 -0
  335. package/dist/cli/commands/reparent.js +19 -0
  336. package/dist/cli/commands/reparent.js.map +1 -0
  337. package/dist/cli/commands/research.d.ts +8 -0
  338. package/dist/cli/commands/research.d.ts.map +1 -0
  339. package/dist/cli/commands/research.js +164 -0
  340. package/dist/cli/commands/research.js.map +1 -0
  341. package/dist/cli/commands/restore.d.ts +54 -0
  342. package/dist/cli/commands/restore.d.ts.map +1 -0
  343. package/dist/cli/commands/restore.js +470 -0
  344. package/dist/cli/commands/restore.js.map +1 -0
  345. package/dist/cli/commands/roadmap.d.ts +14 -0
  346. package/dist/cli/commands/roadmap.d.ts.map +1 -0
  347. package/dist/cli/commands/roadmap.js +26 -0
  348. package/dist/cli/commands/roadmap.js.map +1 -0
  349. package/dist/cli/commands/safestop.d.ts +14 -0
  350. package/dist/cli/commands/safestop.d.ts.map +1 -0
  351. package/dist/cli/commands/safestop.js +32 -0
  352. package/dist/cli/commands/safestop.js.map +1 -0
  353. package/dist/cli/commands/schema.d.ts +27 -0
  354. package/dist/cli/commands/schema.d.ts.map +1 -0
  355. package/dist/cli/commands/schema.js +160 -0
  356. package/dist/cli/commands/schema.js.map +1 -0
  357. package/dist/cli/commands/self-update.d.ts +15 -0
  358. package/dist/cli/commands/self-update.d.ts.map +1 -0
  359. package/dist/cli/commands/self-update.js +329 -0
  360. package/dist/cli/commands/self-update.js.map +1 -0
  361. package/dist/cli/commands/sequence.d.ts +11 -0
  362. package/dist/cli/commands/sequence.d.ts.map +1 -0
  363. package/dist/cli/commands/sequence.js +40 -0
  364. package/dist/cli/commands/sequence.js.map +1 -0
  365. package/dist/cli/commands/session.d.ts +12 -0
  366. package/dist/cli/commands/session.d.ts.map +1 -0
  367. package/dist/cli/commands/session.js +219 -0
  368. package/dist/cli/commands/session.js.map +1 -0
  369. package/dist/cli/commands/show.d.ts +13 -0
  370. package/dist/cli/commands/show.d.ts.map +1 -0
  371. package/dist/cli/commands/show.js +40 -0
  372. package/dist/cli/commands/show.js.map +1 -0
  373. package/dist/cli/commands/skills.d.ts +13 -0
  374. package/dist/cli/commands/skills.d.ts.map +1 -0
  375. package/dist/cli/commands/skills.js +161 -0
  376. package/dist/cli/commands/skills.js.map +1 -0
  377. package/dist/cli/commands/snapshot.d.ts +9 -0
  378. package/dist/cli/commands/snapshot.d.ts.map +1 -0
  379. package/dist/cli/commands/snapshot.js +50 -0
  380. package/dist/cli/commands/snapshot.js.map +1 -0
  381. package/dist/cli/commands/specification.d.ts +13 -0
  382. package/dist/cli/commands/specification.d.ts.map +1 -0
  383. package/dist/cli/commands/specification.js +45 -0
  384. package/dist/cli/commands/specification.js.map +1 -0
  385. package/dist/cli/commands/start.d.ts +13 -0
  386. package/dist/cli/commands/start.d.ts.map +1 -0
  387. package/dist/cli/commands/start.js +20 -0
  388. package/dist/cli/commands/start.js.map +1 -0
  389. package/dist/cli/commands/stats.d.ts +12 -0
  390. package/dist/cli/commands/stats.d.ts.map +1 -0
  391. package/dist/cli/commands/stats.js +35 -0
  392. package/dist/cli/commands/stats.js.map +1 -0
  393. package/dist/cli/commands/sticky.d.ts +16 -0
  394. package/dist/cli/commands/sticky.d.ts.map +1 -0
  395. package/dist/cli/commands/sticky.js +218 -0
  396. package/dist/cli/commands/sticky.js.map +1 -0
  397. package/dist/cli/commands/stop.d.ts +13 -0
  398. package/dist/cli/commands/stop.d.ts.map +1 -0
  399. package/dist/cli/commands/stop.js +20 -0
  400. package/dist/cli/commands/stop.js.map +1 -0
  401. package/dist/cli/commands/sync.d.ts +26 -0
  402. package/dist/cli/commands/sync.d.ts.map +1 -0
  403. package/dist/cli/commands/sync.js +82 -0
  404. package/dist/cli/commands/sync.js.map +1 -0
  405. package/dist/cli/commands/testing.d.ts +13 -0
  406. package/dist/cli/commands/testing.d.ts.map +1 -0
  407. package/dist/cli/commands/testing.js +65 -0
  408. package/dist/cli/commands/testing.js.map +1 -0
  409. package/dist/cli/commands/token.d.ts +10 -0
  410. package/dist/cli/commands/token.d.ts.map +1 -0
  411. package/dist/cli/commands/token.js +135 -0
  412. package/dist/cli/commands/token.js.map +1 -0
  413. package/dist/cli/commands/update.d.ts +12 -0
  414. package/dist/cli/commands/update.d.ts.map +1 -0
  415. package/dist/cli/commands/update.js +83 -0
  416. package/dist/cli/commands/update.js.map +1 -0
  417. package/dist/cli/commands/upgrade.d.ts +18 -0
  418. package/dist/cli/commands/upgrade.d.ts.map +1 -0
  419. package/dist/cli/commands/upgrade.js +103 -0
  420. package/dist/cli/commands/upgrade.js.map +1 -0
  421. package/dist/cli/commands/validate.d.ts +12 -0
  422. package/dist/cli/commands/validate.d.ts.map +1 -0
  423. package/dist/cli/commands/validate.js +24 -0
  424. package/dist/cli/commands/validate.js.map +1 -0
  425. package/dist/cli/commands/verify.d.ts +8 -0
  426. package/dist/cli/commands/verify.d.ts.map +1 -0
  427. package/dist/cli/commands/verify.js +28 -0
  428. package/dist/cli/commands/verify.js.map +1 -0
  429. package/dist/cli/commands/web.d.ts +13 -0
  430. package/dist/cli/commands/web.d.ts.map +1 -0
  431. package/dist/cli/commands/web.js +277 -0
  432. package/dist/cli/commands/web.js.map +1 -0
  433. package/dist/cli/field-context.d.ts +32 -0
  434. package/dist/cli/field-context.d.ts.map +1 -0
  435. package/dist/cli/field-context.js +47 -0
  436. package/dist/cli/field-context.js.map +1 -0
  437. package/dist/cli/format-context.d.ts +32 -0
  438. package/dist/cli/format-context.d.ts.map +1 -0
  439. package/dist/cli/format-context.js +50 -0
  440. package/dist/cli/format-context.js.map +1 -0
  441. package/dist/cli/help-generator.d.ts +74 -0
  442. package/dist/cli/help-generator.d.ts.map +1 -0
  443. package/dist/cli/help-generator.js +229 -0
  444. package/dist/cli/help-generator.js.map +1 -0
  445. package/dist/cli/help-renderer.d.ts +28 -0
  446. package/dist/cli/help-renderer.d.ts.map +1 -0
  447. package/dist/cli/help-renderer.js +301 -0
  448. package/dist/cli/help-renderer.js.map +1 -0
  449. package/dist/cli/index.d.ts +9 -0
  450. package/dist/cli/index.d.ts.map +1 -0
  451. package/dist/cli/index.js +57229 -46781
  452. package/dist/cli/index.js.map +4 -4
  453. package/dist/cli/logger-bootstrap.d.ts +6 -0
  454. package/dist/cli/logger-bootstrap.d.ts.map +1 -0
  455. package/dist/cli/logger-bootstrap.js +10 -0
  456. package/dist/cli/logger-bootstrap.js.map +1 -0
  457. package/dist/cli/middleware/output-format.d.ts +30 -0
  458. package/dist/cli/middleware/output-format.d.ts.map +1 -0
  459. package/dist/cli/middleware/output-format.js +35 -0
  460. package/dist/cli/middleware/output-format.js.map +1 -0
  461. package/dist/cli/progress.d.ts +84 -0
  462. package/dist/cli/progress.d.ts.map +1 -0
  463. package/dist/cli/progress.js +169 -0
  464. package/dist/cli/progress.js.map +1 -0
  465. package/dist/cli/renderers/colors.d.ts +32 -0
  466. package/dist/cli/renderers/colors.d.ts.map +1 -0
  467. package/dist/cli/renderers/colors.js +141 -0
  468. package/dist/cli/renderers/colors.js.map +1 -0
  469. package/dist/cli/renderers/error.d.ts +13 -0
  470. package/dist/cli/renderers/error.d.ts.map +1 -0
  471. package/dist/cli/renderers/error.js +42 -0
  472. package/dist/cli/renderers/error.js.map +1 -0
  473. package/dist/cli/renderers/index.d.ts +87 -0
  474. package/dist/cli/renderers/index.d.ts.map +1 -0
  475. package/dist/cli/renderers/index.js +262 -0
  476. package/dist/cli/renderers/index.js.map +1 -0
  477. package/dist/cli/renderers/lafs-validator.d.ts +91 -0
  478. package/dist/cli/renderers/lafs-validator.d.ts.map +1 -0
  479. package/dist/cli/renderers/lafs-validator.js +176 -0
  480. package/dist/cli/renderers/lafs-validator.js.map +1 -0
  481. package/dist/cli/renderers/normalizer.d.ts +21 -0
  482. package/dist/cli/renderers/normalizer.d.ts.map +1 -0
  483. package/dist/cli/renderers/normalizer.js +106 -0
  484. package/dist/cli/renderers/normalizer.js.map +1 -0
  485. package/dist/cli/renderers/system.d.ts +25 -0
  486. package/dist/cli/renderers/system.d.ts.map +1 -0
  487. package/dist/cli/renderers/system.js +416 -0
  488. package/dist/cli/renderers/system.js.map +1 -0
  489. package/dist/cli/renderers/tasks.d.ts +28 -0
  490. package/dist/cli/renderers/tasks.d.ts.map +1 -0
  491. package/dist/cli/renderers/tasks.js +306 -0
  492. package/dist/cli/renderers/tasks.js.map +1 -0
  493. package/dist/dispatch/adapters/cli.d.ts +67 -0
  494. package/dist/dispatch/adapters/cli.d.ts.map +1 -0
  495. package/dist/dispatch/adapters/cli.js +329 -0
  496. package/dist/dispatch/adapters/cli.js.map +1 -0
  497. package/dist/dispatch/context/session-context.d.ts +54 -0
  498. package/dist/dispatch/context/session-context.d.ts.map +1 -0
  499. package/dist/dispatch/context/session-context.js +61 -0
  500. package/dist/dispatch/context/session-context.js.map +1 -0
  501. package/dist/dispatch/dispatcher.d.ts +23 -0
  502. package/dist/dispatch/dispatcher.d.ts.map +1 -0
  503. package/dist/dispatch/dispatcher.js +84 -0
  504. package/dist/dispatch/dispatcher.js.map +1 -0
  505. package/dist/dispatch/domains/_base.d.ts +59 -0
  506. package/dist/dispatch/domains/_base.d.ts.map +1 -0
  507. package/dist/dispatch/domains/_base.js +77 -0
  508. package/dist/dispatch/domains/_base.js.map +1 -0
  509. package/dist/dispatch/domains/_meta.d.ts +23 -0
  510. package/dist/dispatch/domains/_meta.d.ts.map +1 -0
  511. package/dist/dispatch/domains/_meta.js +25 -0
  512. package/dist/dispatch/domains/_meta.js.map +1 -0
  513. package/dist/dispatch/domains/_routing.d.ts +8 -0
  514. package/dist/dispatch/domains/_routing.d.ts.map +1 -0
  515. package/dist/dispatch/domains/_routing.js +20 -0
  516. package/dist/dispatch/domains/_routing.js.map +1 -0
  517. package/dist/dispatch/domains/admin.d.ts +25 -0
  518. package/dist/dispatch/domains/admin.d.ts.map +1 -0
  519. package/dist/dispatch/domains/admin.js +791 -0
  520. package/dist/dispatch/domains/admin.js.map +1 -0
  521. package/dist/dispatch/domains/check.d.ts +22 -0
  522. package/dist/dispatch/domains/check.d.ts.map +1 -0
  523. package/dist/dispatch/domains/check.js +381 -0
  524. package/dist/dispatch/domains/check.js.map +1 -0
  525. package/dist/dispatch/domains/conduit.d.ts +38 -0
  526. package/dist/dispatch/domains/conduit.d.ts.map +1 -0
  527. package/dist/dispatch/domains/conduit.js +247 -0
  528. package/dist/dispatch/domains/conduit.js.map +1 -0
  529. package/dist/dispatch/domains/index.d.ts +28 -0
  530. package/dist/dispatch/domains/index.d.ts.map +1 -0
  531. package/dist/dispatch/domains/index.js +43 -0
  532. package/dist/dispatch/domains/index.js.map +1 -0
  533. package/dist/dispatch/domains/intelligence.d.ts +26 -0
  534. package/dist/dispatch/domains/intelligence.d.ts.map +1 -0
  535. package/dist/dispatch/domains/intelligence.js +154 -0
  536. package/dist/dispatch/domains/intelligence.js.map +1 -0
  537. package/dist/dispatch/domains/memory.d.ts +22 -0
  538. package/dist/dispatch/domains/memory.d.ts.map +1 -0
  539. package/dist/dispatch/domains/memory.js +339 -0
  540. package/dist/dispatch/domains/memory.js.map +1 -0
  541. package/dist/dispatch/domains/nexus.d.ts +22 -0
  542. package/dist/dispatch/domains/nexus.d.ts.map +1 -0
  543. package/dist/dispatch/domains/nexus.js +286 -0
  544. package/dist/dispatch/domains/nexus.js.map +1 -0
  545. package/dist/dispatch/domains/orchestrate.d.ts +26 -0
  546. package/dist/dispatch/domains/orchestrate.d.ts.map +1 -0
  547. package/dist/dispatch/domains/orchestrate.js +691 -0
  548. package/dist/dispatch/domains/orchestrate.js.map +1 -0
  549. package/dist/dispatch/domains/pipeline.d.ts +35 -0
  550. package/dist/dispatch/domains/pipeline.d.ts.map +1 -0
  551. package/dist/dispatch/domains/pipeline.js +593 -0
  552. package/dist/dispatch/domains/pipeline.js.map +1 -0
  553. package/dist/dispatch/domains/session.d.ts +22 -0
  554. package/dist/dispatch/domains/session.d.ts.map +1 -0
  555. package/dist/dispatch/domains/session.js +267 -0
  556. package/dist/dispatch/domains/session.js.map +1 -0
  557. package/dist/dispatch/domains/sticky.d.ts +20 -0
  558. package/dist/dispatch/domains/sticky.d.ts.map +1 -0
  559. package/dist/dispatch/domains/sticky.js +167 -0
  560. package/dist/dispatch/domains/sticky.js.map +1 -0
  561. package/dist/dispatch/domains/tasks.d.ts +25 -0
  562. package/dist/dispatch/domains/tasks.d.ts.map +1 -0
  563. package/dist/dispatch/domains/tasks.js +368 -0
  564. package/dist/dispatch/domains/tasks.js.map +1 -0
  565. package/dist/dispatch/domains/tools.d.ts +37 -0
  566. package/dist/dispatch/domains/tools.d.ts.map +1 -0
  567. package/dist/dispatch/domains/tools.js +481 -0
  568. package/dist/dispatch/domains/tools.js.map +1 -0
  569. package/dist/dispatch/engines/_error.d.ts +119 -0
  570. package/dist/dispatch/engines/_error.d.ts.map +1 -0
  571. package/dist/dispatch/engines/_error.js +298 -0
  572. package/dist/dispatch/engines/_error.js.map +1 -0
  573. package/dist/dispatch/engines/code-engine.d.ts +18 -0
  574. package/dist/dispatch/engines/code-engine.d.ts.map +1 -0
  575. package/dist/dispatch/engines/code-engine.js +71 -0
  576. package/dist/dispatch/engines/code-engine.js.map +1 -0
  577. package/dist/dispatch/engines/codebase-map-engine.d.ts +31 -0
  578. package/dist/dispatch/engines/codebase-map-engine.d.ts.map +1 -0
  579. package/dist/dispatch/engines/codebase-map-engine.js +43 -0
  580. package/dist/dispatch/engines/codebase-map-engine.js.map +1 -0
  581. package/dist/dispatch/engines/config-engine.d.ts +32 -0
  582. package/dist/dispatch/engines/config-engine.d.ts.map +1 -0
  583. package/dist/dispatch/engines/config-engine.js +70 -0
  584. package/dist/dispatch/engines/config-engine.js.map +1 -0
  585. package/dist/dispatch/engines/hooks-engine.d.ts +96 -0
  586. package/dist/dispatch/engines/hooks-engine.d.ts.map +1 -0
  587. package/dist/dispatch/engines/hooks-engine.js +144 -0
  588. package/dist/dispatch/engines/hooks-engine.js.map +1 -0
  589. package/dist/dispatch/engines/init-engine.d.ts +56 -0
  590. package/dist/dispatch/engines/init-engine.d.ts.map +1 -0
  591. package/dist/dispatch/engines/init-engine.js +78 -0
  592. package/dist/dispatch/engines/init-engine.js.map +1 -0
  593. package/dist/dispatch/engines/lifecycle-engine.d.ts +66 -0
  594. package/dist/dispatch/engines/lifecycle-engine.d.ts.map +1 -0
  595. package/dist/dispatch/engines/lifecycle-engine.js +224 -0
  596. package/dist/dispatch/engines/lifecycle-engine.js.map +1 -0
  597. package/dist/dispatch/engines/memory-engine.d.ts +10 -0
  598. package/dist/dispatch/engines/memory-engine.d.ts.map +1 -0
  599. package/dist/dispatch/engines/memory-engine.js +10 -0
  600. package/dist/dispatch/engines/memory-engine.js.map +1 -0
  601. package/dist/dispatch/engines/nexus-engine.d.ts +167 -0
  602. package/dist/dispatch/engines/nexus-engine.d.ts.map +1 -0
  603. package/dist/dispatch/engines/nexus-engine.js +356 -0
  604. package/dist/dispatch/engines/nexus-engine.js.map +1 -0
  605. package/dist/dispatch/engines/orchestrate-engine.d.ts +141 -0
  606. package/dist/dispatch/engines/orchestrate-engine.d.ts.map +1 -0
  607. package/dist/dispatch/engines/orchestrate-engine.js +824 -0
  608. package/dist/dispatch/engines/orchestrate-engine.js.map +1 -0
  609. package/dist/dispatch/engines/pipeline-engine.d.ts +51 -0
  610. package/dist/dispatch/engines/pipeline-engine.d.ts.map +1 -0
  611. package/dist/dispatch/engines/pipeline-engine.js +191 -0
  612. package/dist/dispatch/engines/pipeline-engine.js.map +1 -0
  613. package/dist/dispatch/engines/release-engine.d.ts +94 -0
  614. package/dist/dispatch/engines/release-engine.d.ts.map +1 -0
  615. package/dist/dispatch/engines/release-engine.js +763 -0
  616. package/dist/dispatch/engines/release-engine.js.map +1 -0
  617. package/dist/dispatch/engines/session-engine.d.ts +387 -0
  618. package/dist/dispatch/engines/session-engine.d.ts.map +1 -0
  619. package/dist/dispatch/engines/session-engine.js +924 -0
  620. package/dist/dispatch/engines/session-engine.js.map +1 -0
  621. package/dist/dispatch/engines/sticky-engine.d.ts +100 -0
  622. package/dist/dispatch/engines/sticky-engine.d.ts.map +1 -0
  623. package/dist/dispatch/engines/sticky-engine.js +181 -0
  624. package/dist/dispatch/engines/sticky-engine.js.map +1 -0
  625. package/dist/dispatch/engines/system-engine.d.ts +543 -0
  626. package/dist/dispatch/engines/system-engine.d.ts.map +1 -0
  627. package/dist/dispatch/engines/system-engine.js +1273 -0
  628. package/dist/dispatch/engines/system-engine.js.map +1 -0
  629. package/dist/dispatch/engines/task-engine.d.ts +971 -0
  630. package/dist/dispatch/engines/task-engine.d.ts.map +1 -0
  631. package/dist/dispatch/engines/task-engine.js +1255 -0
  632. package/dist/dispatch/engines/task-engine.js.map +1 -0
  633. package/dist/dispatch/engines/template-parser.d.ts +85 -0
  634. package/dist/dispatch/engines/template-parser.d.ts.map +1 -0
  635. package/dist/dispatch/engines/template-parser.js +108 -0
  636. package/dist/dispatch/engines/template-parser.js.map +1 -0
  637. package/dist/dispatch/engines/tools-engine.d.ts +270 -0
  638. package/dist/dispatch/engines/tools-engine.d.ts.map +1 -0
  639. package/dist/dispatch/engines/tools-engine.js +663 -0
  640. package/dist/dispatch/engines/tools-engine.js.map +1 -0
  641. package/dist/dispatch/engines/validate-engine.d.ts +218 -0
  642. package/dist/dispatch/engines/validate-engine.d.ts.map +1 -0
  643. package/dist/dispatch/engines/validate-engine.js +737 -0
  644. package/dist/dispatch/engines/validate-engine.js.map +1 -0
  645. package/dist/dispatch/index.d.ts +20 -0
  646. package/dist/dispatch/index.d.ts.map +1 -0
  647. package/dist/dispatch/index.js +19 -0
  648. package/dist/dispatch/index.js.map +1 -0
  649. package/dist/dispatch/lib/background-jobs.d.ts +86 -0
  650. package/dist/dispatch/lib/background-jobs.d.ts.map +1 -0
  651. package/dist/dispatch/lib/background-jobs.js +183 -0
  652. package/dist/dispatch/lib/background-jobs.js.map +1 -0
  653. package/dist/dispatch/lib/budget.d.ts +36 -0
  654. package/dist/dispatch/lib/budget.d.ts.map +1 -0
  655. package/dist/dispatch/lib/budget.js +109 -0
  656. package/dist/dispatch/lib/budget.js.map +1 -0
  657. package/dist/dispatch/lib/capability-matrix.d.ts +11 -0
  658. package/dist/dispatch/lib/capability-matrix.d.ts.map +1 -0
  659. package/dist/dispatch/lib/capability-matrix.js +10 -0
  660. package/dist/dispatch/lib/capability-matrix.js.map +1 -0
  661. package/dist/dispatch/lib/config-loader.d.ts +42 -0
  662. package/dist/dispatch/lib/config-loader.d.ts.map +1 -0
  663. package/dist/dispatch/lib/config-loader.js +217 -0
  664. package/dist/dispatch/lib/config-loader.js.map +1 -0
  665. package/dist/dispatch/lib/config.d.ts +11 -0
  666. package/dist/dispatch/lib/config.d.ts.map +1 -0
  667. package/dist/dispatch/lib/config.js +10 -0
  668. package/dist/dispatch/lib/config.js.map +1 -0
  669. package/dist/dispatch/lib/defaults.d.ts +115 -0
  670. package/dist/dispatch/lib/defaults.d.ts.map +1 -0
  671. package/dist/dispatch/lib/defaults.js +61 -0
  672. package/dist/dispatch/lib/defaults.js.map +1 -0
  673. package/dist/dispatch/lib/engine.d.ts +26 -0
  674. package/dist/dispatch/lib/engine.d.ts.map +1 -0
  675. package/dist/dispatch/lib/engine.js +46 -0
  676. package/dist/dispatch/lib/engine.js.map +1 -0
  677. package/dist/dispatch/lib/exit-codes.d.ts +35 -0
  678. package/dist/dispatch/lib/exit-codes.d.ts.map +1 -0
  679. package/dist/dispatch/lib/exit-codes.js +60 -0
  680. package/dist/dispatch/lib/exit-codes.js.map +1 -0
  681. package/dist/dispatch/lib/gateway-meta.d.ts +37 -0
  682. package/dist/dispatch/lib/gateway-meta.d.ts.map +1 -0
  683. package/dist/dispatch/lib/gateway-meta.js +50 -0
  684. package/dist/dispatch/lib/gateway-meta.js.map +1 -0
  685. package/dist/dispatch/lib/job-manager-accessor.d.ts +9 -0
  686. package/dist/dispatch/lib/job-manager-accessor.d.ts.map +1 -0
  687. package/dist/dispatch/lib/job-manager-accessor.js +13 -0
  688. package/dist/dispatch/lib/job-manager-accessor.js.map +1 -0
  689. package/dist/dispatch/lib/meta.d.ts +26 -0
  690. package/dist/dispatch/lib/meta.d.ts.map +1 -0
  691. package/dist/dispatch/lib/meta.js +37 -0
  692. package/dist/dispatch/lib/meta.js.map +1 -0
  693. package/dist/dispatch/lib/param-utils.d.ts +11 -0
  694. package/dist/dispatch/lib/param-utils.d.ts.map +1 -0
  695. package/dist/dispatch/lib/param-utils.js +10 -0
  696. package/dist/dispatch/lib/param-utils.js.map +1 -0
  697. package/dist/dispatch/lib/projections.d.ts +56 -0
  698. package/dist/dispatch/lib/projections.d.ts.map +1 -0
  699. package/dist/dispatch/lib/projections.js +65 -0
  700. package/dist/dispatch/lib/projections.js.map +1 -0
  701. package/dist/dispatch/lib/proto-envelope.d.ts +56 -0
  702. package/dist/dispatch/lib/proto-envelope.d.ts.map +1 -0
  703. package/dist/dispatch/lib/proto-envelope.js +17 -0
  704. package/dist/dispatch/lib/proto-envelope.js.map +1 -0
  705. package/dist/dispatch/lib/schema-utils.d.ts +39 -0
  706. package/dist/dispatch/lib/schema-utils.d.ts.map +1 -0
  707. package/dist/dispatch/lib/schema-utils.js +88 -0
  708. package/dist/dispatch/lib/schema-utils.js.map +1 -0
  709. package/dist/dispatch/lib/security.d.ts +11 -0
  710. package/dist/dispatch/lib/security.d.ts.map +1 -0
  711. package/dist/dispatch/lib/security.js +10 -0
  712. package/dist/dispatch/lib/security.js.map +1 -0
  713. package/dist/dispatch/middleware/audit.d.ts +23 -0
  714. package/dist/dispatch/middleware/audit.d.ts.map +1 -0
  715. package/dist/dispatch/middleware/audit.js +169 -0
  716. package/dist/dispatch/middleware/audit.js.map +1 -0
  717. package/dist/dispatch/middleware/field-filter.d.ts +25 -0
  718. package/dist/dispatch/middleware/field-filter.d.ts.map +1 -0
  719. package/dist/dispatch/middleware/field-filter.js +70 -0
  720. package/dist/dispatch/middleware/field-filter.js.map +1 -0
  721. package/dist/dispatch/middleware/pipeline.d.ts +33 -0
  722. package/dist/dispatch/middleware/pipeline.d.ts.map +1 -0
  723. package/dist/dispatch/middleware/pipeline.js +60 -0
  724. package/dist/dispatch/middleware/pipeline.js.map +1 -0
  725. package/dist/dispatch/middleware/projection.d.ts +35 -0
  726. package/dist/dispatch/middleware/projection.d.ts.map +1 -0
  727. package/dist/dispatch/middleware/projection.js +146 -0
  728. package/dist/dispatch/middleware/projection.js.map +1 -0
  729. package/dist/dispatch/middleware/protocol-enforcement.d.ts +30 -0
  730. package/dist/dispatch/middleware/protocol-enforcement.d.ts.map +1 -0
  731. package/dist/dispatch/middleware/protocol-enforcement.js +56 -0
  732. package/dist/dispatch/middleware/protocol-enforcement.js.map +1 -0
  733. package/dist/dispatch/middleware/rate-limiter.d.ts +72 -0
  734. package/dist/dispatch/middleware/rate-limiter.d.ts.map +1 -0
  735. package/dist/dispatch/middleware/rate-limiter.js +127 -0
  736. package/dist/dispatch/middleware/rate-limiter.js.map +1 -0
  737. package/dist/dispatch/middleware/sanitizer.d.ts +24 -0
  738. package/dist/dispatch/middleware/sanitizer.d.ts.map +1 -0
  739. package/dist/dispatch/middleware/sanitizer.js +56 -0
  740. package/dist/dispatch/middleware/sanitizer.js.map +1 -0
  741. package/dist/dispatch/middleware/session-resolver.d.ts +26 -0
  742. package/dist/dispatch/middleware/session-resolver.d.ts.map +1 -0
  743. package/dist/dispatch/middleware/session-resolver.js +65 -0
  744. package/dist/dispatch/middleware/session-resolver.js.map +1 -0
  745. package/dist/dispatch/middleware/verification-gates.d.ts +22 -0
  746. package/dist/dispatch/middleware/verification-gates.d.ts.map +1 -0
  747. package/dist/dispatch/middleware/verification-gates.js +59 -0
  748. package/dist/dispatch/middleware/verification-gates.js.map +1 -0
  749. package/dist/dispatch/registry.d.ts +91 -0
  750. package/dist/dispatch/registry.d.ts.map +1 -0
  751. package/dist/dispatch/registry.js +3308 -0
  752. package/dist/dispatch/registry.js.map +1 -0
  753. package/dist/dispatch/types.d.ts +206 -0
  754. package/dist/dispatch/types.d.ts.map +1 -0
  755. package/dist/dispatch/types.js +25 -0
  756. package/dist/dispatch/types.js.map +1 -0
  757. package/package.json +18 -15
@@ -0,0 +1,1090 @@
1
+ /**
2
+ * CLI nexus command group - Cross-project NEXUS operations.
3
+ *
4
+ * Thin CLI wrappers routing through the dispatch layer.
5
+ * All business logic lives in src/dispatch/domains/nexus.ts.
6
+ *
7
+ * `nexus analyze` is implemented directly here because it requires
8
+ * `@cleocode/nexus` pipeline access and `@cleocode/core` DB access together,
9
+ * and routing through the dispatch layer would create awkward coupling.
10
+ *
11
+ * @task T4554, T5323, T5330, T481, T534
12
+ * @epic T4545
13
+ */
14
+ import path from 'node:path';
15
+ import { dispatchFromCli } from '../../dispatch/adapters/cli.js';
16
+ /**
17
+ * Register the nexus command group.
18
+ * @task T4554
19
+ */
20
+ export function registerNexusCommand(program) {
21
+ const nexus = program.command('nexus').description('Cross-project NEXUS operations');
22
+ // ── nexus init ──────────────────────────────────────────────────────
23
+ nexus
24
+ .command('init')
25
+ .description('Initialize NEXUS directory structure and registry')
26
+ .action(async () => {
27
+ await dispatchFromCli('mutate', 'nexus', 'init', {}, { command: 'nexus' });
28
+ });
29
+ // ── nexus register ──────────────────────────────────────────────────
30
+ nexus
31
+ .command('register <path>')
32
+ .description('Register a project in the global registry')
33
+ .option('--name <name>', 'Custom project name (default: directory name)')
34
+ .option('--permissions <perms>', 'Permissions: read|write|execute', 'read')
35
+ .action(async (projectPath, opts) => {
36
+ await dispatchFromCli('mutate', 'nexus', 'register', {
37
+ path: projectPath,
38
+ name: opts['name'],
39
+ permission: opts['permissions'],
40
+ }, { command: 'nexus' });
41
+ });
42
+ // ── nexus unregister ────────────────────────────────────────────────
43
+ nexus
44
+ .command('unregister <nameOrHash>')
45
+ .description('Remove a project from the registry')
46
+ .action(async (nameOrHash) => {
47
+ await dispatchFromCli('mutate', 'nexus', 'unregister', {
48
+ name: nameOrHash,
49
+ }, { command: 'nexus' });
50
+ });
51
+ // ── nexus list ──────────────────────────────────────────────────────
52
+ nexus
53
+ .command('list')
54
+ .description('List all registered projects')
55
+ .action(async () => {
56
+ await dispatchFromCli('query', 'nexus', 'list', {}, { command: 'nexus' });
57
+ });
58
+ // ── nexus status ────────────────────────────────────────────────────
59
+ // Shows both NEXUS registry status AND code intelligence index freshness.
60
+ // When invoked with a path, shows index freshness for that project.
61
+ nexus
62
+ .command('status [path]')
63
+ .description('Show code intelligence index freshness: file count, node/relation counts, last indexed time, stale files. Falls back to NEXUS registry status if code-intelligence index is unavailable.')
64
+ .option('--project-id <id>', 'Override the project ID (default: auto-detected from path)')
65
+ .option('--json', 'Output as JSON (LAFS envelope format)')
66
+ .action(async (targetPath, opts) => {
67
+ const jsonOutput = !!opts['json'];
68
+ const projectIdOverride = opts['projectId'];
69
+ const repoPath = targetPath ? path.resolve(targetPath) : process.cwd();
70
+ const startTime = Date.now();
71
+ try {
72
+ const [{ getNexusDb, nexusSchema }, { getIndexStats }] = await Promise.all([
73
+ import('@cleocode/core/store/nexus-sqlite'),
74
+ import('@cleocode/nexus/pipeline'),
75
+ ]);
76
+ const projectId = projectIdOverride ?? Buffer.from(repoPath).toString('base64url').slice(0, 32);
77
+ const db = await getNexusDb();
78
+ const tables = {
79
+ nexusNodes: nexusSchema.nexusNodes,
80
+ nexusRelations: nexusSchema.nexusRelations,
81
+ };
82
+ const stats = await getIndexStats(projectId, repoPath, db, tables);
83
+ const durationMs = Date.now() - startTime;
84
+ if (jsonOutput) {
85
+ const envelope = {
86
+ success: true,
87
+ data: { projectId, repoPath, ...stats },
88
+ meta: {
89
+ operation: 'nexus.status',
90
+ duration_ms: durationMs,
91
+ timestamp: new Date().toISOString(),
92
+ },
93
+ };
94
+ process.stdout.write(JSON.stringify(envelope, null, 2) + '\n');
95
+ }
96
+ else if (!stats.indexed) {
97
+ process.stdout.write(`[nexus] Index status for: ${repoPath}\n` +
98
+ ` Status: NOT INDEXED\n` +
99
+ ` Run 'cleo nexus analyze' to build the index.\n`);
100
+ }
101
+ else {
102
+ const staleLabel = stats.staleFileCount < 0
103
+ ? 'unknown'
104
+ : stats.staleFileCount === 0
105
+ ? 'up to date'
106
+ : `${stats.staleFileCount} stale`;
107
+ process.stdout.write(`[nexus] Index status for: ${repoPath}\n` +
108
+ ` Project ID: ${projectId}\n` +
109
+ ` Nodes: ${stats.nodeCount}\n` +
110
+ ` Relations: ${stats.relationCount}\n` +
111
+ ` Files: ${stats.fileCount}\n` +
112
+ ` Last indexed: ${stats.lastIndexedAt ?? 'never'}\n` +
113
+ ` Staleness: ${staleLabel}\n`);
114
+ }
115
+ }
116
+ catch (err) {
117
+ // Fall back to NEXUS registry status on error
118
+ const msg = err instanceof Error ? err.message : String(err);
119
+ if (jsonOutput) {
120
+ process.stdout.write(JSON.stringify({
121
+ success: false,
122
+ error: { code: 'E_STATUS_FAILED', message: msg },
123
+ meta: {
124
+ operation: 'nexus.status',
125
+ duration_ms: Date.now() - startTime,
126
+ timestamp: new Date().toISOString(),
127
+ },
128
+ }, null, 2) + '\n');
129
+ }
130
+ else {
131
+ process.stderr.write(`[nexus] Error: ${msg}\n`);
132
+ await dispatchFromCli('query', 'nexus', 'status', {}, { command: 'nexus' });
133
+ }
134
+ process.exitCode = 1;
135
+ }
136
+ });
137
+ // ── nexus show ─────────────────────────────────────────────────────
138
+ nexus
139
+ .command('show <name>')
140
+ .description('Show details for a registered project by name')
141
+ .action(async (name) => {
142
+ await dispatchFromCli('query', 'nexus', 'show', {
143
+ name,
144
+ }, { command: 'nexus' });
145
+ });
146
+ // ── nexus resolve ───────────────────────────────────────────────────
147
+ nexus
148
+ .command('resolve <taskRef>')
149
+ .alias('query')
150
+ .description('Resolve a task reference across projects (project:T### or T###)')
151
+ .action(async (taskRef) => {
152
+ await dispatchFromCli('query', 'nexus', 'resolve', {
153
+ query: taskRef,
154
+ }, { command: 'nexus' });
155
+ });
156
+ // ── nexus discover ──────────────────────────────────────────────────
157
+ nexus
158
+ .command('discover <taskQuery>')
159
+ .description('Find related tasks across projects')
160
+ .option('--method <method>', 'Discovery method: labels|description|files|auto', 'auto')
161
+ .option('--limit <n>', 'Max results', parseInt, 10)
162
+ .action(async (taskQuery, opts) => {
163
+ await dispatchFromCli('query', 'nexus', 'discover', {
164
+ query: taskQuery,
165
+ method: opts['method'],
166
+ limit: opts['limit'],
167
+ }, { command: 'nexus' });
168
+ });
169
+ // ── nexus search ────────────────────────────────────────────────────
170
+ nexus
171
+ .command('search <pattern>')
172
+ .description('Search tasks across projects by pattern')
173
+ .option('--project <name>', 'Limit search to specific project')
174
+ .option('--limit <n>', 'Max results', parseInt, 20)
175
+ .action(async (pattern, opts) => {
176
+ await dispatchFromCli('query', 'nexus', 'search', {
177
+ pattern,
178
+ project: opts['project'],
179
+ limit: opts['limit'],
180
+ }, { command: 'nexus' });
181
+ });
182
+ // ── nexus deps ──────────────────────────────────────────────────────
183
+ nexus
184
+ .command('deps <taskQuery>')
185
+ .description('Show cross-project dependencies')
186
+ .option('--reverse', 'Show reverse dependencies (what depends on this)')
187
+ .action(async (taskQuery, opts) => {
188
+ await dispatchFromCli('query', 'nexus', 'deps', {
189
+ query: taskQuery,
190
+ direction: opts['reverse'] ? 'reverse' : 'forward',
191
+ }, { command: 'nexus' });
192
+ });
193
+ // ── nexus critical-path ───────────────────────────────────────────
194
+ nexus
195
+ .command('critical-path')
196
+ .description('Show global critical path across all registered projects')
197
+ .action(async () => {
198
+ await dispatchFromCli('query', 'nexus', 'path.show', {}, { command: 'nexus' });
199
+ });
200
+ // ── nexus blocking ────────────────────────────────────────────────
201
+ nexus
202
+ .command('blocking <taskQuery>')
203
+ .description('Show blocking impact analysis for a task')
204
+ .action(async (taskQuery) => {
205
+ await dispatchFromCli('query', 'nexus', 'blockers.show', {
206
+ query: taskQuery,
207
+ }, { command: 'nexus' });
208
+ });
209
+ // ── nexus orphans ─────────────────────────────────────────────────
210
+ nexus
211
+ .command('orphans')
212
+ .description('Detect broken cross-project dependency references')
213
+ .action(async () => {
214
+ await dispatchFromCli('query', 'nexus', 'orphans.list', {}, { command: 'nexus' });
215
+ });
216
+ // ── nexus sync ──────────────────────────────────────────────────────
217
+ nexus
218
+ .command('sync [project]')
219
+ .description('Sync project metadata (task count, labels)')
220
+ .action(async (project) => {
221
+ if (project) {
222
+ await dispatchFromCli('mutate', 'nexus', 'sync', {
223
+ name: project,
224
+ }, { command: 'nexus' });
225
+ }
226
+ else {
227
+ await dispatchFromCli('mutate', 'nexus', 'sync', {}, { command: 'nexus' });
228
+ }
229
+ });
230
+ // ── nexus reconcile ──────────────────────────────────────────────────
231
+ nexus
232
+ .command('reconcile')
233
+ .description('Reconcile current project with NEXUS registry (auto-register if new, update path if moved)')
234
+ .option('--path <path>', 'Project path (default: current directory)')
235
+ .action(async (opts) => {
236
+ await dispatchFromCli('mutate', 'nexus', 'reconcile', {
237
+ projectRoot: opts['path'],
238
+ }, { command: 'nexus' });
239
+ });
240
+ // ── nexus graph ───────────────────────────────────────────────────
241
+ nexus
242
+ .command('graph')
243
+ .description('Show full dependency graph across all registered projects')
244
+ .action(async () => {
245
+ await dispatchFromCli('query', 'nexus', 'graph', {}, { command: 'nexus' });
246
+ });
247
+ // ── nexus share-status ────────────────────────────────────────────
248
+ nexus
249
+ .command('share-status')
250
+ .description('Show multi-contributor sharing status for the current project')
251
+ .action(async () => {
252
+ await dispatchFromCli('query', 'nexus', 'share.status', {}, { command: 'nexus' });
253
+ });
254
+ // ── nexus transfer-preview ────────────────────────────────────────
255
+ nexus
256
+ .command('transfer-preview <taskIds...>')
257
+ .description('Preview a task transfer between projects (dry-run, no changes made)')
258
+ .requiredOption('--from <project>', 'Source project name')
259
+ .requiredOption('--to <project>', 'Target project name')
260
+ .option('--mode <mode>', 'Transfer mode: copy|move', 'copy')
261
+ .option('--scope <scope>', 'Transfer scope: single|subtree', 'subtree')
262
+ .action(async (taskIds, opts) => {
263
+ await dispatchFromCli('query', 'nexus', 'transfer.preview', {
264
+ taskIds,
265
+ sourceProject: opts['from'],
266
+ targetProject: opts['to'],
267
+ mode: opts['mode'],
268
+ scope: opts['scope'],
269
+ }, { command: 'nexus' });
270
+ });
271
+ // ── nexus transfer ────────────────────────────────────────────────
272
+ nexus
273
+ .command('transfer <taskIds...>')
274
+ .description('Transfer tasks from one project to another')
275
+ .requiredOption('--from <project>', 'Source project name')
276
+ .requiredOption('--to <project>', 'Target project name')
277
+ .option('--mode <mode>', 'Transfer mode: copy|move', 'copy')
278
+ .option('--scope <scope>', 'Transfer scope: single|subtree', 'subtree')
279
+ .option('--on-conflict <strategy>', 'Conflict strategy: rename|skip|duplicate|fail', 'rename')
280
+ .option('--transfer-brain', 'Also transfer associated brain memory entries', false)
281
+ .action(async (taskIds, opts) => {
282
+ await dispatchFromCli('mutate', 'nexus', 'transfer', {
283
+ taskIds,
284
+ sourceProject: opts['from'],
285
+ targetProject: opts['to'],
286
+ mode: opts['mode'],
287
+ scope: opts['scope'],
288
+ onConflict: opts['onConflict'],
289
+ transferBrain: opts['transferBrain'],
290
+ }, { command: 'nexus' });
291
+ });
292
+ // ── nexus permission ──────────────────────────────────────────────
293
+ const permission = nexus
294
+ .command('permission')
295
+ .description('Manage permissions for registered projects');
296
+ permission
297
+ .command('set <name> <level>')
298
+ .description('Set permission level for a registered project (read|write|execute)')
299
+ .action(async (name, level) => {
300
+ await dispatchFromCli('mutate', 'nexus', 'permission.set', {
301
+ name,
302
+ level,
303
+ }, { command: 'nexus' });
304
+ });
305
+ // ── nexus share ───────────────────────────────────────────────────
306
+ const share = nexus.command('share').description('Multi-contributor sharing operations');
307
+ share
308
+ .command('export')
309
+ .description('Export a snapshot of current project state for sharing')
310
+ .option('--output <path>', 'Output file path (default: auto-generated in current directory)')
311
+ .action(async (opts) => {
312
+ await dispatchFromCli('mutate', 'nexus', 'share.snapshot.export', {
313
+ outputPath: opts['output'],
314
+ }, { command: 'nexus' });
315
+ });
316
+ share
317
+ .command('import <file>')
318
+ .description('Import a shared project snapshot')
319
+ .action(async (file) => {
320
+ await dispatchFromCli('mutate', 'nexus', 'share.snapshot.import', {
321
+ inputPath: file,
322
+ }, { command: 'nexus' });
323
+ });
324
+ // ── nexus clusters ────────────────────────────────────────────────────────
325
+ nexus
326
+ .command('clusters [path]')
327
+ .description('List all detected communities (Louvain clusters) from the last analysis')
328
+ .option('--json', 'Output result as JSON (LAFS envelope format)')
329
+ .option('--project-id <id>', 'Override the project ID (default: auto-detected from path)')
330
+ .action(async (targetPath, opts) => {
331
+ const startTime = Date.now();
332
+ const jsonOutput = !!opts['json'];
333
+ const projectIdOverride = opts['projectId'];
334
+ const repoPath = targetPath ? path.resolve(targetPath) : process.cwd();
335
+ const projectId = projectIdOverride ?? Buffer.from(repoPath).toString('base64url').slice(0, 32);
336
+ try {
337
+ const { getNexusDb, nexusSchema } = await import('@cleocode/core/store/nexus-sqlite');
338
+ const db = await getNexusDb();
339
+ // Query all nodes for this project, filter to community kind in-memory
340
+ // (avoids complex Drizzle where clause on an enum column).
341
+ // NodeSQLiteDatabase uses sync Drizzle — .all() returns a plain array,
342
+ // not a Promise, so wrap in try-catch rather than using .catch().
343
+ let rows = [];
344
+ try {
345
+ rows = db.select().from(nexusSchema.nexusNodes).all();
346
+ }
347
+ catch {
348
+ rows = [];
349
+ }
350
+ const communities = rows.filter((r) => r['kind'] === 'community' && r['projectId'] === projectId);
351
+ const durationMs = Date.now() - startTime;
352
+ if (jsonOutput) {
353
+ process.stdout.write(JSON.stringify({
354
+ success: true,
355
+ data: {
356
+ projectId,
357
+ repoPath,
358
+ count: communities.length,
359
+ communities: communities.map((c) => {
360
+ const meta = typeof c['metaJson'] === 'string'
361
+ ? JSON.parse(c['metaJson'])
362
+ : {};
363
+ return {
364
+ id: c['id'],
365
+ label: c['label'],
366
+ symbolCount: meta['symbolCount'] ?? 0,
367
+ cohesion: meta['cohesion'] ?? 0,
368
+ };
369
+ }),
370
+ },
371
+ meta: {
372
+ operation: 'nexus.clusters',
373
+ duration_ms: durationMs,
374
+ timestamp: new Date().toISOString(),
375
+ },
376
+ }, null, 2) + '\n');
377
+ }
378
+ else {
379
+ if (communities.length === 0) {
380
+ process.stdout.write(`[nexus] No communities found for project ${projectId}.\n` +
381
+ ` Run 'cleo nexus analyze' first.\n`);
382
+ }
383
+ else {
384
+ process.stdout.write(`[nexus] Communities for project ${projectId} (${communities.length} total):\n`);
385
+ for (const c of communities) {
386
+ const meta = typeof c['metaJson'] === 'string'
387
+ ? JSON.parse(c['metaJson'])
388
+ : {};
389
+ const symbolCount = meta['symbolCount'] ?? 0;
390
+ const cohesion = typeof meta['cohesion'] === 'number'
391
+ ? meta['cohesion'].toFixed(3)
392
+ : '0.000';
393
+ process.stdout.write(` ${String(c['id']).padEnd(16)} label=${String(c['label']).padEnd(24)} symbols=${String(symbolCount).padStart(5)} cohesion=${cohesion}\n`);
394
+ }
395
+ }
396
+ }
397
+ }
398
+ catch (err) {
399
+ const msg = err instanceof Error ? err.message : String(err);
400
+ if (jsonOutput) {
401
+ process.stdout.write(JSON.stringify({
402
+ success: false,
403
+ error: { code: 'E_CLUSTERS_FAILED', message: msg },
404
+ meta: {
405
+ operation: 'nexus.clusters',
406
+ duration_ms: Date.now() - startTime,
407
+ timestamp: new Date().toISOString(),
408
+ },
409
+ }, null, 2) + '\n');
410
+ }
411
+ else {
412
+ process.stderr.write(`[nexus] Error: ${msg}\n`);
413
+ }
414
+ process.exitCode = 1;
415
+ }
416
+ });
417
+ // ── nexus flows ───────────────────────────────────────────────────────────
418
+ nexus
419
+ .command('flows [path]')
420
+ .description('List all detected execution flows (processes) from the last analysis')
421
+ .option('--json', 'Output result as JSON (LAFS envelope format)')
422
+ .option('--project-id <id>', 'Override the project ID (default: auto-detected from path)')
423
+ .action(async (targetPath, opts) => {
424
+ const startTime = Date.now();
425
+ const jsonOutput = !!opts['json'];
426
+ const projectIdOverride = opts['projectId'];
427
+ const repoPath = targetPath ? path.resolve(targetPath) : process.cwd();
428
+ const projectId = projectIdOverride ?? Buffer.from(repoPath).toString('base64url').slice(0, 32);
429
+ try {
430
+ const { getNexusDb, nexusSchema } = await import('@cleocode/core/store/nexus-sqlite');
431
+ const db = await getNexusDb();
432
+ // NodeSQLiteDatabase uses sync Drizzle — .all() returns a plain array,
433
+ // not a Promise, so wrap in try-catch rather than using .catch().
434
+ let rows = [];
435
+ try {
436
+ rows = db.select().from(nexusSchema.nexusNodes).all();
437
+ }
438
+ catch {
439
+ rows = [];
440
+ }
441
+ const processes = rows.filter((r) => r['kind'] === 'process' && r['projectId'] === projectId);
442
+ const durationMs = Date.now() - startTime;
443
+ if (jsonOutput) {
444
+ process.stdout.write(JSON.stringify({
445
+ success: true,
446
+ data: {
447
+ projectId,
448
+ repoPath,
449
+ count: processes.length,
450
+ flows: processes.map((p) => {
451
+ const meta = typeof p['metaJson'] === 'string'
452
+ ? JSON.parse(p['metaJson'])
453
+ : {};
454
+ return {
455
+ id: p['id'],
456
+ label: p['label'],
457
+ stepCount: meta['stepCount'] ?? 0,
458
+ processType: meta['processType'] ?? 'intra_community',
459
+ entryPointId: meta['entryPointId'] ?? null,
460
+ };
461
+ }),
462
+ },
463
+ meta: {
464
+ operation: 'nexus.flows',
465
+ duration_ms: durationMs,
466
+ timestamp: new Date().toISOString(),
467
+ },
468
+ }, null, 2) + '\n');
469
+ }
470
+ else {
471
+ if (processes.length === 0) {
472
+ process.stdout.write(`[nexus] No execution flows found for project ${projectId}.\n` +
473
+ ` Run 'cleo nexus analyze' first.\n`);
474
+ }
475
+ else {
476
+ process.stdout.write(`[nexus] Execution flows for project ${projectId} (${processes.length} total):\n`);
477
+ for (const p of processes) {
478
+ const meta = typeof p['metaJson'] === 'string'
479
+ ? JSON.parse(p['metaJson'])
480
+ : {};
481
+ const stepCount = meta['stepCount'] ?? 0;
482
+ const processType = String(meta['processType'] ?? 'intra').replace('_community', '');
483
+ process.stdout.write(` ${String(p['id']).padEnd(30)} steps=${String(stepCount).padStart(3)} type=${processType.padEnd(12)} ${String(p['label'])}\n`);
484
+ }
485
+ }
486
+ }
487
+ }
488
+ catch (err) {
489
+ const msg = err instanceof Error ? err.message : String(err);
490
+ if (jsonOutput) {
491
+ process.stdout.write(JSON.stringify({
492
+ success: false,
493
+ error: { code: 'E_FLOWS_FAILED', message: msg },
494
+ meta: {
495
+ operation: 'nexus.flows',
496
+ duration_ms: Date.now() - startTime,
497
+ timestamp: new Date().toISOString(),
498
+ },
499
+ }, null, 2) + '\n');
500
+ }
501
+ else {
502
+ process.stderr.write(`[nexus] Error: ${msg}\n`);
503
+ }
504
+ process.exitCode = 1;
505
+ }
506
+ });
507
+ // ── nexus context ─────────────────────────────────────────────────────────
508
+ nexus
509
+ .command('context <symbol>')
510
+ .description('Show callers, callees, community membership, and process participation for a code symbol')
511
+ .option('--json', 'Output result as JSON (LAFS envelope format)')
512
+ .option('--project-id <id>', 'Override the project ID (default: auto-detected from cwd)')
513
+ .option('--limit <n>', 'Max callers/callees to show per side', parseInt, 20)
514
+ .action(async (symbolName, opts) => {
515
+ const startTime = Date.now();
516
+ const jsonOutput = !!opts['json'];
517
+ const projectIdOverride = opts['projectId'];
518
+ const repoPath = process.cwd();
519
+ const projectId = projectIdOverride ?? Buffer.from(repoPath).toString('base64url').slice(0, 32);
520
+ const limit = opts['limit'] ?? 20;
521
+ try {
522
+ const { getNexusDb, nexusSchema } = await import('@cleocode/core/store/nexus-sqlite');
523
+ const db = await getNexusDb();
524
+ // Find nodes matching the symbol name (case-insensitive partial match).
525
+ // NodeSQLiteDatabase uses sync Drizzle — .all() returns a plain array.
526
+ let allNodes = [];
527
+ try {
528
+ allNodes = db.select().from(nexusSchema.nexusNodes).all();
529
+ }
530
+ catch {
531
+ allNodes = [];
532
+ }
533
+ const lowerSymbol = symbolName.toLowerCase();
534
+ const matchingNodes = allNodes.filter((n) => n['projectId'] === projectId &&
535
+ n['name'] != null &&
536
+ String(n['name']).toLowerCase().includes(lowerSymbol) &&
537
+ // Exclude synthetic graph-level nodes from symbol search
538
+ n['kind'] !== 'community' &&
539
+ n['kind'] !== 'process');
540
+ if (matchingNodes.length === 0) {
541
+ const durationMs = Date.now() - startTime;
542
+ if (jsonOutput) {
543
+ process.stdout.write(JSON.stringify({
544
+ success: false,
545
+ error: {
546
+ code: 'E_NOT_FOUND',
547
+ message: `No symbol found matching '${symbolName}' in project ${projectId}`,
548
+ },
549
+ meta: {
550
+ operation: 'nexus.context',
551
+ duration_ms: durationMs,
552
+ timestamp: new Date().toISOString(),
553
+ },
554
+ }, null, 2) + '\n');
555
+ }
556
+ else {
557
+ process.stdout.write(`[nexus] No symbol found matching '${symbolName}'.\n` +
558
+ ` Run 'cleo nexus analyze' first, or check the symbol name.\n`);
559
+ }
560
+ process.exitCode = 4;
561
+ return;
562
+ }
563
+ // Load all relations once — cheaper than N queries per node.
564
+ let allRelations = [];
565
+ try {
566
+ allRelations = db.select().from(nexusSchema.nexusRelations).all();
567
+ }
568
+ catch {
569
+ allRelations = [];
570
+ }
571
+ // Build a node-by-id index for fast lookups.
572
+ const nodeById = new Map();
573
+ for (const n of allNodes) {
574
+ nodeById.set(String(n['id']), n);
575
+ }
576
+ // Build context for each matching node.
577
+ const results = matchingNodes.slice(0, 5).map((node) => {
578
+ const nodeId = String(node['id']);
579
+ // Incoming: who calls/imports/references THIS node (target = nodeId)
580
+ const incoming = allRelations
581
+ .filter((r) => r['targetId'] === nodeId &&
582
+ r['projectId'] === projectId &&
583
+ (r['type'] === 'calls' || r['type'] === 'imports' || r['type'] === 'accesses'))
584
+ .slice(0, limit)
585
+ .map((r) => {
586
+ const src = nodeById.get(String(r['sourceId']));
587
+ return {
588
+ relationType: r['type'],
589
+ nodeId: r['sourceId'],
590
+ name: src?.['name'] ?? r['sourceId'],
591
+ kind: src?.['kind'] ?? 'unknown',
592
+ filePath: src?.['filePath'] ?? null,
593
+ };
594
+ });
595
+ // Outgoing: what THIS node calls/imports/accesses (source = nodeId)
596
+ const outgoing = allRelations
597
+ .filter((r) => r['sourceId'] === nodeId &&
598
+ r['projectId'] === projectId &&
599
+ (r['type'] === 'calls' || r['type'] === 'imports' || r['type'] === 'accesses'))
600
+ .slice(0, limit)
601
+ .map((r) => {
602
+ const tgt = nodeById.get(String(r['targetId']));
603
+ return {
604
+ relationType: r['type'],
605
+ nodeId: r['targetId'],
606
+ name: tgt?.['name'] ?? r['targetId'],
607
+ kind: tgt?.['kind'] ?? 'unknown',
608
+ filePath: tgt?.['filePath'] ?? null,
609
+ };
610
+ });
611
+ // Community membership
612
+ const communityId = node['communityId'];
613
+ const community = communityId ? nodeById.get(communityId) : null;
614
+ // Process participation (step_in_process or entry_point_of relations)
615
+ const processRelations = allRelations.filter((r) => r['sourceId'] === nodeId &&
616
+ r['projectId'] === projectId &&
617
+ (r['type'] === 'step_in_process' || r['type'] === 'entry_point_of'));
618
+ const processes = processRelations
619
+ .map((r) => {
620
+ const proc = nodeById.get(String(r['targetId']));
621
+ return {
622
+ processId: r['targetId'],
623
+ label: proc?.['label'] ?? r['targetId'],
624
+ role: r['type'] === 'entry_point_of' ? 'entry_point' : 'step',
625
+ step: r['step'] ?? null,
626
+ };
627
+ })
628
+ .filter((p) => p.label !== p.processId); // filter unresolved
629
+ return {
630
+ nodeId,
631
+ name: node['name'],
632
+ kind: node['kind'],
633
+ filePath: node['filePath'],
634
+ startLine: node['startLine'],
635
+ endLine: node['endLine'],
636
+ isExported: node['isExported'],
637
+ docSummary: node['docSummary'],
638
+ community: community
639
+ ? { id: communityId, label: community['label'] }
640
+ : communityId
641
+ ? { id: communityId, label: null }
642
+ : null,
643
+ callers: incoming,
644
+ callees: outgoing,
645
+ processes,
646
+ };
647
+ });
648
+ const durationMs = Date.now() - startTime;
649
+ const primary = results[0];
650
+ if (jsonOutput) {
651
+ process.stdout.write(JSON.stringify({
652
+ success: true,
653
+ data: {
654
+ query: symbolName,
655
+ projectId,
656
+ matchCount: matchingNodes.length,
657
+ results,
658
+ },
659
+ meta: {
660
+ operation: 'nexus.context',
661
+ duration_ms: durationMs,
662
+ timestamp: new Date().toISOString(),
663
+ },
664
+ }, null, 2) + '\n');
665
+ }
666
+ else {
667
+ process.stdout.write(`[nexus] Context for symbol '${symbolName}' (${matchingNodes.length} match${matchingNodes.length !== 1 ? 'es' : ''}):\n`);
668
+ for (const r of results) {
669
+ process.stdout.write(`\n Symbol: ${String(r.name)} (${String(r.kind)})\n` +
670
+ ` File: ${r.filePath ? String(r.filePath) : 'n/a'}` +
671
+ (r.startLine ? `:${String(r.startLine)}` : '') +
672
+ '\n' +
673
+ (r.docSummary ? ` Doc: ${String(r.docSummary)}\n` : '') +
674
+ (r.community
675
+ ? ` Community: ${String(r.community.label ?? r.community.id)}\n`
676
+ : '') +
677
+ ` Callers (${r.callers.length}): ${r.callers.length === 0
678
+ ? 'none'
679
+ : r.callers.map((c) => `${String(c.name)}[${String(c.kind)}]`).join(', ')}\n` +
680
+ ` Callees (${r.callees.length}): ${r.callees.length === 0
681
+ ? 'none'
682
+ : r.callees.map((c) => `${String(c.name)}[${String(c.kind)}]`).join(', ')}\n` +
683
+ (r.processes.length > 0
684
+ ? ` Processes: ${r.processes.map((p) => `${String(p.label)}(${String(p.role)})`).join(', ')}\n`
685
+ : ''));
686
+ }
687
+ if (matchingNodes.length > 5) {
688
+ process.stdout.write(`\n (Showing 5 of ${matchingNodes.length} matches — use --json for full list)\n`);
689
+ }
690
+ }
691
+ void primary; // referenced to satisfy lint
692
+ }
693
+ catch (err) {
694
+ const msg = err instanceof Error ? err.message : String(err);
695
+ if (jsonOutput) {
696
+ process.stdout.write(JSON.stringify({
697
+ success: false,
698
+ error: { code: 'E_CONTEXT_FAILED', message: msg },
699
+ meta: {
700
+ operation: 'nexus.context',
701
+ duration_ms: Date.now() - startTime,
702
+ timestamp: new Date().toISOString(),
703
+ },
704
+ }, null, 2) + '\n');
705
+ }
706
+ else {
707
+ process.stderr.write(`[nexus] Error: ${msg}\n`);
708
+ }
709
+ process.exitCode = 1;
710
+ }
711
+ });
712
+ // ── nexus impact ──────────────────────────────────────────────────────────
713
+ nexus
714
+ .command('impact <symbol>')
715
+ .description('Show blast radius for a code symbol — direct callers (d=1), indirect callers (d=2), transitive (d=3)')
716
+ .option('--json', 'Output result as JSON (LAFS envelope format)')
717
+ .option('--project-id <id>', 'Override the project ID (default: auto-detected from cwd)')
718
+ .option('--depth <n>', 'Maximum traversal depth (default: 3)', parseInt, 3)
719
+ .action(async (symbolName, opts) => {
720
+ const startTime = Date.now();
721
+ const jsonOutput = !!opts['json'];
722
+ const projectIdOverride = opts['projectId'];
723
+ const repoPath = process.cwd();
724
+ const projectId = projectIdOverride ?? Buffer.from(repoPath).toString('base64url').slice(0, 32);
725
+ const maxDepth = Math.min(opts['depth'] ?? 3, 5);
726
+ try {
727
+ const { getNexusDb, nexusSchema } = await import('@cleocode/core/store/nexus-sqlite');
728
+ const db = await getNexusDb();
729
+ // Load all nodes and relations for this project once.
730
+ let allNodes = [];
731
+ try {
732
+ allNodes = db.select().from(nexusSchema.nexusNodes).all();
733
+ }
734
+ catch {
735
+ allNodes = [];
736
+ }
737
+ const lowerSymbol = symbolName.toLowerCase();
738
+ const matchingNodes = allNodes.filter((n) => n['projectId'] === projectId &&
739
+ n['name'] != null &&
740
+ String(n['name']).toLowerCase().includes(lowerSymbol) &&
741
+ n['kind'] !== 'community' &&
742
+ n['kind'] !== 'process');
743
+ if (matchingNodes.length === 0) {
744
+ const durationMs = Date.now() - startTime;
745
+ if (jsonOutput) {
746
+ process.stdout.write(JSON.stringify({
747
+ success: false,
748
+ error: {
749
+ code: 'E_NOT_FOUND',
750
+ message: `No symbol found matching '${symbolName}' in project ${projectId}`,
751
+ },
752
+ meta: {
753
+ operation: 'nexus.impact',
754
+ duration_ms: durationMs,
755
+ timestamp: new Date().toISOString(),
756
+ },
757
+ }, null, 2) + '\n');
758
+ }
759
+ else {
760
+ process.stdout.write(`[nexus] No symbol found matching '${symbolName}'.\n` +
761
+ ` Run 'cleo nexus analyze' first, or check the symbol name.\n`);
762
+ }
763
+ process.exitCode = 4;
764
+ return;
765
+ }
766
+ let allRelations = [];
767
+ try {
768
+ allRelations = db.select().from(nexusSchema.nexusRelations).all();
769
+ }
770
+ catch {
771
+ allRelations = [];
772
+ }
773
+ // Build a node-by-id index for fast lookups.
774
+ const nodeById = new Map();
775
+ for (const n of allNodes) {
776
+ nodeById.set(String(n['id']), n);
777
+ }
778
+ // BFS upstream: find all nodes that (transitively) call/import the target.
779
+ const targetNode = matchingNodes[0];
780
+ const targetId = String(targetNode['id']);
781
+ // Build reverse adjacency: targetId → [sourceIds that call it]
782
+ const reverseAdj = new Map();
783
+ for (const r of allRelations) {
784
+ if (r['projectId'] === projectId &&
785
+ (r['type'] === 'calls' || r['type'] === 'imports' || r['type'] === 'accesses')) {
786
+ const tid = String(r['targetId']);
787
+ const sid = String(r['sourceId']);
788
+ if (!reverseAdj.has(tid))
789
+ reverseAdj.set(tid, []);
790
+ reverseAdj.get(tid).push(sid);
791
+ }
792
+ }
793
+ // BFS traversal up to maxDepth levels.
794
+ const visited = new Set([targetId]);
795
+ const depthMap = new Map(); // nodeId → depth
796
+ const queue = [{ id: targetId, depth: 0 }];
797
+ const impactByDepth = [];
798
+ while (queue.length > 0) {
799
+ const item = queue.shift();
800
+ if (item.depth >= maxDepth)
801
+ continue;
802
+ const callers = reverseAdj.get(item.id) ?? [];
803
+ for (const callerId of callers) {
804
+ if (visited.has(callerId))
805
+ continue;
806
+ visited.add(callerId);
807
+ const depth = item.depth + 1;
808
+ depthMap.set(callerId, depth);
809
+ const callerNode = nodeById.get(callerId);
810
+ if (!impactByDepth[depth - 1])
811
+ impactByDepth[depth - 1] = [];
812
+ impactByDepth[depth - 1].push({
813
+ nodeId: callerId,
814
+ name: String(callerNode?.['name'] ?? callerId),
815
+ kind: String(callerNode?.['kind'] ?? 'unknown'),
816
+ filePath: callerNode?.['filePath'] ? String(callerNode['filePath']) : null,
817
+ });
818
+ queue.push({ id: callerId, depth });
819
+ }
820
+ }
821
+ const totalImpact = visited.size - 1; // exclude the target itself
822
+ const riskLevel = totalImpact === 0
823
+ ? 'NONE'
824
+ : totalImpact <= 3
825
+ ? 'LOW'
826
+ : totalImpact <= 10
827
+ ? 'MEDIUM'
828
+ : totalImpact <= 25
829
+ ? 'HIGH'
830
+ : 'CRITICAL';
831
+ const durationMs = Date.now() - startTime;
832
+ if (jsonOutput) {
833
+ process.stdout.write(JSON.stringify({
834
+ success: true,
835
+ data: {
836
+ query: symbolName,
837
+ projectId,
838
+ targetNodeId: targetId,
839
+ targetName: targetNode['name'],
840
+ targetKind: targetNode['kind'],
841
+ targetFilePath: targetNode['filePath'],
842
+ riskLevel,
843
+ totalImpactedNodes: totalImpact,
844
+ maxDepth,
845
+ impactByDepth: impactByDepth.map((layer, i) => ({
846
+ depth: i + 1,
847
+ label: i === 0
848
+ ? 'WILL BREAK (direct callers)'
849
+ : i === 1
850
+ ? 'LIKELY AFFECTED'
851
+ : 'MAY NEED TESTING',
852
+ nodes: layer,
853
+ })),
854
+ },
855
+ meta: {
856
+ operation: 'nexus.impact',
857
+ duration_ms: durationMs,
858
+ timestamp: new Date().toISOString(),
859
+ },
860
+ }, null, 2) + '\n');
861
+ }
862
+ else {
863
+ process.stdout.write(`[nexus] Impact analysis for '${symbolName}'\n` +
864
+ ` Target: ${String(targetNode['name'])} (${String(targetNode['kind'])})\n` +
865
+ ` File: ${targetNode['filePath'] ? String(targetNode['filePath']) : 'n/a'}\n` +
866
+ ` Risk: ${riskLevel} (${totalImpact} impacted node${totalImpact !== 1 ? 's' : ''})\n`);
867
+ if (totalImpact === 0) {
868
+ process.stdout.write(' No callers found — safe to modify.\n');
869
+ }
870
+ else {
871
+ for (let i = 0; i < impactByDepth.length; i++) {
872
+ const layer = impactByDepth[i];
873
+ if (!layer || layer.length === 0)
874
+ continue;
875
+ const label = i === 0 ? 'WILL BREAK' : i === 1 ? 'LIKELY AFFECTED' : 'MAY NEED TESTING';
876
+ process.stdout.write(`\n d=${i + 1} ${label} (${layer.length}):\n`);
877
+ for (const node of layer.slice(0, 15)) {
878
+ process.stdout.write(` ${String(node.name).padEnd(36)} ${String(node.kind).padEnd(12)} ${node.filePath ?? ''}\n`);
879
+ }
880
+ if (layer.length > 15) {
881
+ process.stdout.write(` ... and ${layer.length - 15} more\n`);
882
+ }
883
+ }
884
+ }
885
+ if (matchingNodes.length > 1) {
886
+ process.stdout.write(`\n (Showing analysis for first match — ${matchingNodes.length} total matches for '${symbolName}')\n`);
887
+ }
888
+ }
889
+ }
890
+ catch (err) {
891
+ const msg = err instanceof Error ? err.message : String(err);
892
+ if (jsonOutput) {
893
+ process.stdout.write(JSON.stringify({
894
+ success: false,
895
+ error: { code: 'E_IMPACT_FAILED', message: msg },
896
+ meta: {
897
+ operation: 'nexus.impact',
898
+ duration_ms: Date.now() - startTime,
899
+ timestamp: new Date().toISOString(),
900
+ },
901
+ }, null, 2) + '\n');
902
+ }
903
+ else {
904
+ process.stderr.write(`[nexus] Error: ${msg}\n`);
905
+ }
906
+ process.exitCode = 1;
907
+ }
908
+ });
909
+ // ── nexus analyze ─────────────────────────────────────────────────────────
910
+ nexus
911
+ .command('analyze [path]')
912
+ .description('Run code intelligence pipeline on a repository directory')
913
+ .option('--json', 'Output result as JSON (LAFS envelope format)')
914
+ .option('--project-id <id>', 'Override the project ID (default: auto-detected)')
915
+ .option('--incremental', 'Only re-index files that have changed since the last run (faster)')
916
+ .action(async (targetPath, opts) => {
917
+ const startTime = Date.now();
918
+ const jsonOutput = !!opts['json'];
919
+ const projectIdOverride = opts['projectId'];
920
+ const isIncremental = !!opts['incremental'];
921
+ // Resolve target path
922
+ const repoPath = targetPath ? path.resolve(targetPath) : process.cwd();
923
+ if (!jsonOutput) {
924
+ process.stderr.write(`[nexus] Analyzing: ${repoPath}${isIncremental ? ' (incremental)' : ''}\n`);
925
+ }
926
+ try {
927
+ // Lazy imports to avoid loading heavy dependencies until needed
928
+ const [{ getNexusDb, nexusSchema }, { runPipeline }, { getProjectRoot }, { eq }] = await Promise.all([
929
+ import('@cleocode/core/store/nexus-sqlite'),
930
+ import('@cleocode/nexus/pipeline'),
931
+ import('@cleocode/core/internal'),
932
+ import('drizzle-orm'),
933
+ ]);
934
+ // Determine project ID — use override or derive from path
935
+ const projectId = projectIdOverride ?? Buffer.from(repoPath).toString('base64url').slice(0, 32);
936
+ // Get DB and table references
937
+ const db = await getNexusDb();
938
+ const tables = {
939
+ nexusNodes: nexusSchema.nexusNodes,
940
+ nexusRelations: nexusSchema.nexusRelations,
941
+ };
942
+ // For full (non-incremental) runs: delete existing index first.
943
+ // NodeSQLiteDatabase uses sync Drizzle — no await, wrap in try-catch.
944
+ if (!isIncremental) {
945
+ if (!jsonOutput) {
946
+ process.stderr.write('[nexus] Clearing existing index for project...\n');
947
+ }
948
+ try {
949
+ db.delete(nexusSchema.nexusNodes)
950
+ .where(eq(nexusSchema.nexusNodes.projectId, projectId))
951
+ .run();
952
+ }
953
+ catch {
954
+ // Table may not have rows — ignore
955
+ }
956
+ try {
957
+ db.delete(nexusSchema.nexusRelations)
958
+ .where(eq(nexusSchema.nexusRelations.projectId, projectId))
959
+ .run();
960
+ }
961
+ catch {
962
+ // Table may not have rows — ignore
963
+ }
964
+ }
965
+ // Run the pipeline (full or incremental)
966
+ const result = await runPipeline(repoPath, projectId, db, tables, jsonOutput
967
+ ? undefined
968
+ : (current, total, filePath) => {
969
+ if (current % 50 === 0 || current === total) {
970
+ const pct = total > 0 ? Math.round((current / total) * 100) : 100;
971
+ process.stderr.write(`[nexus] Progress: ${current}/${total} files (${pct}%) — ${filePath}\n`);
972
+ }
973
+ }, { incremental: isIncremental });
974
+ const durationMs = Date.now() - startTime;
975
+ // Write nexus-bridge.md after a successful pipeline run (best-effort)
976
+ try {
977
+ const { refreshNexusBridge } = await import('@cleocode/core/internal');
978
+ await refreshNexusBridge(repoPath, projectId);
979
+ if (!jsonOutput) {
980
+ process.stderr.write(`[nexus] nexus-bridge.md refreshed at ${repoPath}/.cleo/nexus-bridge.md\n`);
981
+ }
982
+ }
983
+ catch {
984
+ // Non-fatal — bridge refresh failure should not fail the analyze command
985
+ }
986
+ if (jsonOutput) {
987
+ const envelope = {
988
+ success: true,
989
+ data: {
990
+ projectId,
991
+ repoPath,
992
+ incremental: isIncremental,
993
+ nodeCount: result.nodeCount,
994
+ relationCount: result.relationCount,
995
+ fileCount: result.fileCount,
996
+ durationMs,
997
+ },
998
+ meta: {
999
+ operation: 'nexus.analyze',
1000
+ duration_ms: durationMs,
1001
+ timestamp: new Date().toISOString(),
1002
+ },
1003
+ };
1004
+ process.stdout.write(JSON.stringify(envelope, null, 2) + '\n');
1005
+ }
1006
+ else {
1007
+ process.stdout.write(`[nexus] Analysis complete${isIncremental ? ' (incremental)' : ''}:\n` +
1008
+ ` Project ID: ${projectId}\n` +
1009
+ ` Files: ${result.fileCount}\n` +
1010
+ ` Nodes: ${result.nodeCount}\n` +
1011
+ ` Relations: ${result.relationCount}\n` +
1012
+ ` Duration: ${durationMs}ms\n`);
1013
+ }
1014
+ void getProjectRoot; // referenced to satisfy import
1015
+ }
1016
+ catch (err) {
1017
+ const msg = err instanceof Error ? err.message : String(err);
1018
+ if (jsonOutput) {
1019
+ const envelope = {
1020
+ success: false,
1021
+ error: { code: 'E_PIPELINE_FAILED', message: msg },
1022
+ meta: {
1023
+ operation: 'nexus.analyze',
1024
+ duration_ms: Date.now() - startTime,
1025
+ timestamp: new Date().toISOString(),
1026
+ },
1027
+ };
1028
+ process.stdout.write(JSON.stringify(envelope, null, 2) + '\n');
1029
+ }
1030
+ else {
1031
+ process.stderr.write(`[nexus] Error: ${msg}\n`);
1032
+ }
1033
+ process.exitCode = 1;
1034
+ }
1035
+ });
1036
+ // ── nexus refresh-bridge ──────────────────────────────────────────────────
1037
+ nexus
1038
+ .command('refresh-bridge [path]')
1039
+ .description('Regenerate .cleo/nexus-bridge.md from the existing nexus.db index (does not re-index)')
1040
+ .option('--json', 'Output result as JSON (LAFS envelope format)')
1041
+ .option('--project-id <id>', 'Override the project ID (default: auto-detected from path)')
1042
+ .action(async (targetPath, opts) => {
1043
+ const startTime = Date.now();
1044
+ const jsonOutput = !!opts['json'];
1045
+ const projectIdOverride = opts['projectId'];
1046
+ const repoPath = targetPath ? path.resolve(targetPath) : process.cwd();
1047
+ const projectId = projectIdOverride ?? Buffer.from(repoPath).toString('base64url').slice(0, 32);
1048
+ try {
1049
+ const { writeNexusBridge } = await import('@cleocode/core/internal');
1050
+ const result = await writeNexusBridge(repoPath, projectId);
1051
+ const durationMs = Date.now() - startTime;
1052
+ if (jsonOutput) {
1053
+ process.stdout.write(JSON.stringify({
1054
+ success: true,
1055
+ data: { path: result.path, written: result.written, projectId, repoPath },
1056
+ meta: {
1057
+ operation: 'nexus.refresh-bridge',
1058
+ duration_ms: durationMs,
1059
+ timestamp: new Date().toISOString(),
1060
+ },
1061
+ }, null, 2) + '\n');
1062
+ }
1063
+ else if (result.written) {
1064
+ process.stdout.write(`[nexus] nexus-bridge.md refreshed at ${result.path}\n`);
1065
+ }
1066
+ else {
1067
+ process.stdout.write(`[nexus] nexus-bridge.md unchanged at ${result.path}\n`);
1068
+ }
1069
+ }
1070
+ catch (err) {
1071
+ const msg = err instanceof Error ? err.message : String(err);
1072
+ if (jsonOutput) {
1073
+ process.stdout.write(JSON.stringify({
1074
+ success: false,
1075
+ error: { code: 'E_BRIDGE_FAILED', message: msg },
1076
+ meta: {
1077
+ operation: 'nexus.refresh-bridge',
1078
+ duration_ms: Date.now() - startTime,
1079
+ timestamp: new Date().toISOString(),
1080
+ },
1081
+ }, null, 2) + '\n');
1082
+ }
1083
+ else {
1084
+ process.stderr.write(`[nexus] Error refreshing bridge: ${msg}\n`);
1085
+ }
1086
+ process.exitCode = 1;
1087
+ }
1088
+ });
1089
+ }
1090
+ //# sourceMappingURL=nexus.js.map