@cleocode/mcp-server 0.86.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 (374) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +306 -0
  3. package/dist/domains/index.d.ts +16 -0
  4. package/dist/domains/index.d.ts.map +1 -0
  5. package/dist/domains/index.js +16 -0
  6. package/dist/domains/index.js.map +1 -0
  7. package/dist/domains/lifecycle.d.ts +147 -0
  8. package/dist/domains/lifecycle.d.ts.map +1 -0
  9. package/dist/domains/lifecycle.js +452 -0
  10. package/dist/domains/lifecycle.js.map +1 -0
  11. package/dist/domains/orchestrate.d.ts +133 -0
  12. package/dist/domains/orchestrate.d.ts.map +1 -0
  13. package/dist/domains/orchestrate.js +465 -0
  14. package/dist/domains/orchestrate.js.map +1 -0
  15. package/dist/domains/release.d.ts +109 -0
  16. package/dist/domains/release.d.ts.map +1 -0
  17. package/dist/domains/release.js +400 -0
  18. package/dist/domains/release.js.map +1 -0
  19. package/dist/domains/research.d.ts +139 -0
  20. package/dist/domains/research.d.ts.map +1 -0
  21. package/dist/domains/research.js +606 -0
  22. package/dist/domains/research.js.map +1 -0
  23. package/dist/domains/session.d.ts +129 -0
  24. package/dist/domains/session.d.ts.map +1 -0
  25. package/dist/domains/session.js +433 -0
  26. package/dist/domains/session.js.map +1 -0
  27. package/dist/domains/system.d.ts +92 -0
  28. package/dist/domains/system.d.ts.map +1 -0
  29. package/dist/domains/system.js +473 -0
  30. package/dist/domains/system.js.map +1 -0
  31. package/dist/domains/tasks.d.ts +180 -0
  32. package/dist/domains/tasks.d.ts.map +1 -0
  33. package/dist/domains/tasks.js +704 -0
  34. package/dist/domains/tasks.js.map +1 -0
  35. package/dist/domains/validate.d.ts +150 -0
  36. package/dist/domains/validate.d.ts.map +1 -0
  37. package/dist/domains/validate.js +568 -0
  38. package/dist/domains/validate.js.map +1 -0
  39. package/dist/gateways/mutate.d.ts +100 -0
  40. package/dist/gateways/mutate.d.ts.map +1 -0
  41. package/dist/gateways/mutate.js +937 -0
  42. package/dist/gateways/mutate.js.map +1 -0
  43. package/dist/gateways/query.d.ts +91 -0
  44. package/dist/gateways/query.d.ts.map +1 -0
  45. package/dist/gateways/query.js +245 -0
  46. package/dist/gateways/query.js.map +1 -0
  47. package/dist/index.d.ts +21 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +299 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/lib/audit.d.ts +118 -0
  52. package/dist/lib/audit.d.ts.map +1 -0
  53. package/dist/lib/audit.js +311 -0
  54. package/dist/lib/audit.js.map +1 -0
  55. package/dist/lib/background-jobs.d.ts +86 -0
  56. package/dist/lib/background-jobs.d.ts.map +1 -0
  57. package/dist/lib/background-jobs.js +183 -0
  58. package/dist/lib/background-jobs.js.map +1 -0
  59. package/dist/lib/cache.d.ts +78 -0
  60. package/dist/lib/cache.d.ts.map +1 -0
  61. package/dist/lib/cache.js +204 -0
  62. package/dist/lib/cache.js.map +1 -0
  63. package/dist/lib/command-builder.d.ts +52 -0
  64. package/dist/lib/command-builder.d.ts.map +1 -0
  65. package/dist/lib/command-builder.js +280 -0
  66. package/dist/lib/command-builder.js.map +1 -0
  67. package/dist/lib/config.d.ts +42 -0
  68. package/dist/lib/config.d.ts.map +1 -0
  69. package/dist/lib/config.js +248 -0
  70. package/dist/lib/config.js.map +1 -0
  71. package/dist/lib/defaults.d.ts +115 -0
  72. package/dist/lib/defaults.d.ts.map +1 -0
  73. package/dist/lib/defaults.js +61 -0
  74. package/dist/lib/defaults.js.map +1 -0
  75. package/dist/lib/error-handler.d.ts +101 -0
  76. package/dist/lib/error-handler.d.ts.map +1 -0
  77. package/dist/lib/error-handler.js +277 -0
  78. package/dist/lib/error-handler.js.map +1 -0
  79. package/dist/lib/executor.d.ts +110 -0
  80. package/dist/lib/executor.d.ts.map +1 -0
  81. package/dist/lib/executor.js +362 -0
  82. package/dist/lib/executor.js.map +1 -0
  83. package/dist/lib/exit-codes.d.ts +190 -0
  84. package/dist/lib/exit-codes.d.ts.map +1 -0
  85. package/dist/lib/exit-codes.js +1027 -0
  86. package/dist/lib/exit-codes.js.map +1 -0
  87. package/dist/lib/formatter.d.ts +196 -0
  88. package/dist/lib/formatter.d.ts.map +1 -0
  89. package/dist/lib/formatter.js +260 -0
  90. package/dist/lib/formatter.js.map +1 -0
  91. package/dist/lib/gate-validators.d.ts +103 -0
  92. package/dist/lib/gate-validators.d.ts.map +1 -0
  93. package/dist/lib/gate-validators.js +689 -0
  94. package/dist/lib/gate-validators.js.map +1 -0
  95. package/dist/lib/manifest-parser.d.ts +61 -0
  96. package/dist/lib/manifest-parser.d.ts.map +1 -0
  97. package/dist/lib/manifest-parser.js +338 -0
  98. package/dist/lib/manifest-parser.js.map +1 -0
  99. package/dist/lib/manifest.d.ts +177 -0
  100. package/dist/lib/manifest.d.ts.map +1 -0
  101. package/dist/lib/manifest.js +301 -0
  102. package/dist/lib/manifest.js.map +1 -0
  103. package/dist/lib/protocol-enforcement.d.ts +105 -0
  104. package/dist/lib/protocol-enforcement.d.ts.map +1 -0
  105. package/dist/lib/protocol-enforcement.js +331 -0
  106. package/dist/lib/protocol-enforcement.js.map +1 -0
  107. package/dist/lib/protocol-rules.d.ts +55 -0
  108. package/dist/lib/protocol-rules.d.ts.map +1 -0
  109. package/dist/lib/protocol-rules.js +760 -0
  110. package/dist/lib/protocol-rules.js.map +1 -0
  111. package/dist/lib/rate-limiter.d.ts +110 -0
  112. package/dist/lib/rate-limiter.d.ts.map +1 -0
  113. package/dist/lib/rate-limiter.js +208 -0
  114. package/dist/lib/rate-limiter.js.map +1 -0
  115. package/dist/lib/router.d.ts +126 -0
  116. package/dist/lib/router.d.ts.map +1 -0
  117. package/dist/lib/router.js +276 -0
  118. package/dist/lib/router.js.map +1 -0
  119. package/dist/lib/schema.d.ts +55 -0
  120. package/dist/lib/schema.d.ts.map +1 -0
  121. package/dist/lib/schema.js +70 -0
  122. package/dist/lib/schema.js.map +1 -0
  123. package/dist/lib/security.d.ts +156 -0
  124. package/dist/lib/security.d.ts.map +1 -0
  125. package/dist/lib/security.js +347 -0
  126. package/dist/lib/security.js.map +1 -0
  127. package/dist/lib/verification-gates.d.ts +287 -0
  128. package/dist/lib/verification-gates.d.ts.map +1 -0
  129. package/dist/lib/verification-gates.js +548 -0
  130. package/dist/lib/verification-gates.js.map +1 -0
  131. package/dist/types/domain.d.ts +29 -0
  132. package/dist/types/domain.d.ts.map +1 -0
  133. package/dist/types/domain.js +7 -0
  134. package/dist/types/domain.js.map +1 -0
  135. package/dist/types/error.d.ts +101 -0
  136. package/dist/types/error.d.ts.map +1 -0
  137. package/dist/types/error.js +61 -0
  138. package/dist/types/error.js.map +1 -0
  139. package/dist/types/gateway.d.ts +78 -0
  140. package/dist/types/gateway.d.ts.map +1 -0
  141. package/dist/types/gateway.js +7 -0
  142. package/dist/types/gateway.js.map +1 -0
  143. package/dist/types/index.d.ts +21 -0
  144. package/dist/types/index.d.ts.map +1 -0
  145. package/dist/types/index.js +11 -0
  146. package/dist/types/index.js.map +1 -0
  147. package/dist/types/operations/lifecycle.d.ts +140 -0
  148. package/dist/types/operations/lifecycle.d.ts.map +1 -0
  149. package/dist/types/operations/lifecycle.js +8 -0
  150. package/dist/types/operations/lifecycle.js.map +1 -0
  151. package/dist/types/operations/orchestrate.d.ts +140 -0
  152. package/dist/types/operations/orchestrate.d.ts.map +1 -0
  153. package/dist/types/operations/orchestrate.js +8 -0
  154. package/dist/types/operations/orchestrate.js.map +1 -0
  155. package/dist/types/operations/release.d.ts +97 -0
  156. package/dist/types/operations/release.d.ts.map +1 -0
  157. package/dist/types/operations/release.js +7 -0
  158. package/dist/types/operations/release.js.map +1 -0
  159. package/dist/types/operations/research.d.ts +122 -0
  160. package/dist/types/operations/research.d.ts.map +1 -0
  161. package/dist/types/operations/research.js +8 -0
  162. package/dist/types/operations/research.js.map +1 -0
  163. package/dist/types/operations/session.d.ts +108 -0
  164. package/dist/types/operations/session.d.ts.map +1 -0
  165. package/dist/types/operations/session.js +8 -0
  166. package/dist/types/operations/session.js.map +1 -0
  167. package/dist/types/operations/system.d.ts +147 -0
  168. package/dist/types/operations/system.d.ts.map +1 -0
  169. package/dist/types/operations/system.js +8 -0
  170. package/dist/types/operations/system.js.map +1 -0
  171. package/dist/types/operations/tasks.d.ts +186 -0
  172. package/dist/types/operations/tasks.d.ts.map +1 -0
  173. package/dist/types/operations/tasks.js +8 -0
  174. package/dist/types/operations/tasks.js.map +1 -0
  175. package/dist/types/operations/validate.d.ts +170 -0
  176. package/dist/types/operations/validate.d.ts.map +1 -0
  177. package/dist/types/operations/validate.js +8 -0
  178. package/dist/types/operations/validate.js.map +1 -0
  179. package/package.json +67 -0
  180. package/schemas/IMPLEMENTATION-SUMMARY.md +250 -0
  181. package/schemas/README.md +284 -0
  182. package/schemas/common/error.schema.json +54 -0
  183. package/schemas/common/meta.schema.json +39 -0
  184. package/schemas/common/pagination.schema.json +32 -0
  185. package/schemas/index.json +159 -0
  186. package/schemas/requests/lifecycle/check.schema.json +20 -0
  187. package/schemas/requests/lifecycle/gate.fail.schema.json +25 -0
  188. package/schemas/requests/lifecycle/gate.pass.schema.json +28 -0
  189. package/schemas/requests/lifecycle/gates.schema.json +15 -0
  190. package/schemas/requests/lifecycle/history.schema.json +15 -0
  191. package/schemas/requests/lifecycle/prerequisites.schema.json +15 -0
  192. package/schemas/requests/lifecycle/progress.schema.json +29 -0
  193. package/schemas/requests/lifecycle/reset.schema.json +25 -0
  194. package/schemas/requests/lifecycle/skip.schema.json +25 -0
  195. package/schemas/requests/lifecycle/status.schema.json +23 -0
  196. package/schemas/requests/orchestrate/analyze.schema.json +15 -0
  197. package/schemas/requests/orchestrate/context.schema.json +13 -0
  198. package/schemas/requests/orchestrate/next.schema.json +15 -0
  199. package/schemas/requests/orchestrate/parallel.end.schema.json +20 -0
  200. package/schemas/requests/orchestrate/parallel.start.schema.json +20 -0
  201. package/schemas/requests/orchestrate/ready.schema.json +15 -0
  202. package/schemas/requests/orchestrate/skill.list.schema.json +13 -0
  203. package/schemas/requests/orchestrate/spawn.schema.json +25 -0
  204. package/schemas/requests/orchestrate/startup.schema.json +15 -0
  205. package/schemas/requests/orchestrate/status.schema.json +15 -0
  206. package/schemas/requests/orchestrate/validate.schema.json +15 -0
  207. package/schemas/requests/orchestrate/waves.schema.json +15 -0
  208. package/schemas/requests/release/changelog.schema.json +23 -0
  209. package/schemas/requests/release/commit.schema.json +22 -0
  210. package/schemas/requests/release/gates.run.schema.json +17 -0
  211. package/schemas/requests/release/prepare.schema.json +20 -0
  212. package/schemas/requests/release/push.schema.json +20 -0
  213. package/schemas/requests/release/rollback.schema.json +20 -0
  214. package/schemas/requests/release/tag.schema.json +19 -0
  215. package/schemas/requests/research/inject.schema.json +24 -0
  216. package/schemas/requests/research/link.schema.json +25 -0
  217. package/schemas/requests/research/list.schema.json +19 -0
  218. package/schemas/requests/research/manifest.append.schema.json +20 -0
  219. package/schemas/requests/research/manifest.archive.schema.json +19 -0
  220. package/schemas/requests/research/manifest.read.schema.json +21 -0
  221. package/schemas/requests/research/pending.schema.json +14 -0
  222. package/schemas/requests/research/query.schema.json +21 -0
  223. package/schemas/requests/research/show.schema.json +14 -0
  224. package/schemas/requests/research/stats.schema.json +14 -0
  225. package/schemas/requests/session/end.schema.json +13 -0
  226. package/schemas/requests/session/focus.clear.schema.json +7 -0
  227. package/schemas/requests/session/focus.get.schema.json +7 -0
  228. package/schemas/requests/session/focus.set.schema.json +15 -0
  229. package/schemas/requests/session/gc.schema.json +14 -0
  230. package/schemas/requests/session/history.schema.json +16 -0
  231. package/schemas/requests/session/list.schema.json +13 -0
  232. package/schemas/requests/session/resume.schema.json +14 -0
  233. package/schemas/requests/session/show.schema.json +14 -0
  234. package/schemas/requests/session/start.schema.json +23 -0
  235. package/schemas/requests/session/status.schema.json +7 -0
  236. package/schemas/requests/session/suspend.schema.json +13 -0
  237. package/schemas/requests/system/backup.schema.json +19 -0
  238. package/schemas/requests/system/cleanup.schema.json +20 -0
  239. package/schemas/requests/system/config.get.schema.json +14 -0
  240. package/schemas/requests/system/config.set.schema.json +24 -0
  241. package/schemas/requests/system/context.schema.json +7 -0
  242. package/schemas/requests/system/doctor.schema.json +7 -0
  243. package/schemas/requests/system/init.schema.json +18 -0
  244. package/schemas/requests/system/migrate.schema.json +19 -0
  245. package/schemas/requests/system/restore.schema.json +14 -0
  246. package/schemas/requests/system/stats.schema.json +7 -0
  247. package/schemas/requests/system/sync.schema.json +15 -0
  248. package/schemas/requests/system/version.schema.json +7 -0
  249. package/schemas/requests/tasks/analyze.schema.json +14 -0
  250. package/schemas/requests/tasks/archive.schema.json +19 -0
  251. package/schemas/requests/tasks/blockers.schema.json +15 -0
  252. package/schemas/requests/tasks/complete.schema.json +24 -0
  253. package/schemas/requests/tasks/create.schema.json +48 -0
  254. package/schemas/requests/tasks/delete.schema.json +20 -0
  255. package/schemas/requests/tasks/deps.schema.json +21 -0
  256. package/schemas/requests/tasks/exists.schema.json +15 -0
  257. package/schemas/requests/tasks/find.schema.json +22 -0
  258. package/schemas/requests/tasks/get.schema.json +15 -0
  259. package/schemas/requests/tasks/list.schema.json +26 -0
  260. package/schemas/requests/tasks/next.schema.json +21 -0
  261. package/schemas/requests/tasks/promote.schema.json +15 -0
  262. package/schemas/requests/tasks/reopen.schema.json +15 -0
  263. package/schemas/requests/tasks/reorder.schema.json +20 -0
  264. package/schemas/requests/tasks/reparent.schema.json +20 -0
  265. package/schemas/requests/tasks/tree.schema.json +21 -0
  266. package/schemas/requests/tasks/unarchive.schema.json +15 -0
  267. package/schemas/requests/tasks/update.schema.json +41 -0
  268. package/schemas/requests/validate/compliance.record.schema.json +20 -0
  269. package/schemas/requests/validate/compliance.summary.schema.json +18 -0
  270. package/schemas/requests/validate/compliance.violations.schema.json +19 -0
  271. package/schemas/requests/validate/manifest.schema.json +23 -0
  272. package/schemas/requests/validate/output.schema.json +19 -0
  273. package/schemas/requests/validate/protocol.schema.json +20 -0
  274. package/schemas/requests/validate/schema.schema.json +19 -0
  275. package/schemas/requests/validate/task.schema.json +21 -0
  276. package/schemas/requests/validate/test.coverage.schema.json +14 -0
  277. package/schemas/requests/validate/test.run.schema.json +22 -0
  278. package/schemas/requests/validate/test.status.schema.json +14 -0
  279. package/schemas/responses/common-error.schema.json +20 -0
  280. package/schemas/responses/common-success.schema.json +21 -0
  281. package/schemas/responses/lifecycle/check.schema.json +18 -0
  282. package/schemas/responses/lifecycle/gate.fail.schema.json +18 -0
  283. package/schemas/responses/lifecycle/gate.pass.schema.json +18 -0
  284. package/schemas/responses/lifecycle/gates.schema.json +18 -0
  285. package/schemas/responses/lifecycle/history.schema.json +18 -0
  286. package/schemas/responses/lifecycle/prerequisites.schema.json +18 -0
  287. package/schemas/responses/lifecycle/progress.schema.json +18 -0
  288. package/schemas/responses/lifecycle/reset.schema.json +18 -0
  289. package/schemas/responses/lifecycle/skip.schema.json +18 -0
  290. package/schemas/responses/lifecycle/status.schema.json +18 -0
  291. package/schemas/responses/orchestrate/analyze.schema.json +18 -0
  292. package/schemas/responses/orchestrate/context.schema.json +18 -0
  293. package/schemas/responses/orchestrate/next.schema.json +18 -0
  294. package/schemas/responses/orchestrate/parallel.end.schema.json +18 -0
  295. package/schemas/responses/orchestrate/parallel.start.schema.json +18 -0
  296. package/schemas/responses/orchestrate/ready.schema.json +18 -0
  297. package/schemas/responses/orchestrate/skill.list.schema.json +18 -0
  298. package/schemas/responses/orchestrate/spawn.schema.json +18 -0
  299. package/schemas/responses/orchestrate/startup.schema.json +18 -0
  300. package/schemas/responses/orchestrate/status.schema.json +18 -0
  301. package/schemas/responses/orchestrate/validate.schema.json +18 -0
  302. package/schemas/responses/orchestrate/waves.schema.json +18 -0
  303. package/schemas/responses/release/changelog.schema.json +18 -0
  304. package/schemas/responses/release/commit.schema.json +18 -0
  305. package/schemas/responses/release/gates.run.schema.json +18 -0
  306. package/schemas/responses/release/prepare.schema.json +18 -0
  307. package/schemas/responses/release/push.schema.json +18 -0
  308. package/schemas/responses/release/rollback.schema.json +18 -0
  309. package/schemas/responses/release/tag.schema.json +18 -0
  310. package/schemas/responses/research/inject.schema.json +18 -0
  311. package/schemas/responses/research/link.schema.json +18 -0
  312. package/schemas/responses/research/list.schema.json +18 -0
  313. package/schemas/responses/research/manifest.append.schema.json +18 -0
  314. package/schemas/responses/research/manifest.archive.schema.json +18 -0
  315. package/schemas/responses/research/manifest.read.schema.json +18 -0
  316. package/schemas/responses/research/pending.schema.json +18 -0
  317. package/schemas/responses/research/query.schema.json +18 -0
  318. package/schemas/responses/research/show.schema.json +18 -0
  319. package/schemas/responses/research/stats.schema.json +18 -0
  320. package/schemas/responses/session/end.schema.json +18 -0
  321. package/schemas/responses/session/focus.clear.schema.json +18 -0
  322. package/schemas/responses/session/focus.get.schema.json +18 -0
  323. package/schemas/responses/session/focus.set.schema.json +18 -0
  324. package/schemas/responses/session/gc.schema.json +18 -0
  325. package/schemas/responses/session/history.schema.json +18 -0
  326. package/schemas/responses/session/list.schema.json +18 -0
  327. package/schemas/responses/session/resume.schema.json +18 -0
  328. package/schemas/responses/session/show.schema.json +18 -0
  329. package/schemas/responses/session/start.schema.json +18 -0
  330. package/schemas/responses/session/status.schema.json +18 -0
  331. package/schemas/responses/session/suspend.schema.json +18 -0
  332. package/schemas/responses/system/backup.schema.json +18 -0
  333. package/schemas/responses/system/cleanup.schema.json +18 -0
  334. package/schemas/responses/system/config.get.schema.json +18 -0
  335. package/schemas/responses/system/config.set.schema.json +18 -0
  336. package/schemas/responses/system/context.schema.json +18 -0
  337. package/schemas/responses/system/doctor.schema.json +18 -0
  338. package/schemas/responses/system/init.schema.json +18 -0
  339. package/schemas/responses/system/migrate.schema.json +18 -0
  340. package/schemas/responses/system/restore.schema.json +18 -0
  341. package/schemas/responses/system/stats.schema.json +18 -0
  342. package/schemas/responses/system/sync.schema.json +18 -0
  343. package/schemas/responses/system/version.schema.json +18 -0
  344. package/schemas/responses/tasks/analyze.schema.json +18 -0
  345. package/schemas/responses/tasks/archive.schema.json +18 -0
  346. package/schemas/responses/tasks/blockers.schema.json +18 -0
  347. package/schemas/responses/tasks/complete.schema.json +18 -0
  348. package/schemas/responses/tasks/create.schema.json +18 -0
  349. package/schemas/responses/tasks/delete.schema.json +18 -0
  350. package/schemas/responses/tasks/deps.schema.json +18 -0
  351. package/schemas/responses/tasks/exists.schema.json +18 -0
  352. package/schemas/responses/tasks/find.schema.json +18 -0
  353. package/schemas/responses/tasks/get.schema.json +87 -0
  354. package/schemas/responses/tasks/list.schema.json +18 -0
  355. package/schemas/responses/tasks/next.schema.json +18 -0
  356. package/schemas/responses/tasks/promote.schema.json +18 -0
  357. package/schemas/responses/tasks/reopen.schema.json +18 -0
  358. package/schemas/responses/tasks/reorder.schema.json +18 -0
  359. package/schemas/responses/tasks/reparent.schema.json +18 -0
  360. package/schemas/responses/tasks/tree.schema.json +18 -0
  361. package/schemas/responses/tasks/unarchive.schema.json +18 -0
  362. package/schemas/responses/tasks/update.schema.json +18 -0
  363. package/schemas/responses/validate/compliance.record.schema.json +18 -0
  364. package/schemas/responses/validate/compliance.summary.schema.json +18 -0
  365. package/schemas/responses/validate/compliance.violations.schema.json +18 -0
  366. package/schemas/responses/validate/manifest.schema.json +18 -0
  367. package/schemas/responses/validate/output.schema.json +18 -0
  368. package/schemas/responses/validate/protocol.schema.json +18 -0
  369. package/schemas/responses/validate/schema.schema.json +18 -0
  370. package/schemas/responses/validate/task.schema.json +18 -0
  371. package/schemas/responses/validate/test.coverage.schema.json +18 -0
  372. package/schemas/responses/validate/test.run.schema.json +18 -0
  373. package/schemas/responses/validate/test.status.schema.json +18 -0
  374. package/server.json +53 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,KAAK,CAMX;IACF,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,YAAY,CAA+C;gBAEvD,KAAK,GAAE,MAAc,EAAE,OAAO,GAAE,OAAc;IAc1D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAOrF;;OAEG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS;IA0BpG;;OAEG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAyBhH;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAmBxC;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,QAAQ,IAAI,UAAU;IAItB;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB;;OAEG;IACH,YAAY,IAAI,MAAM;IAoBtB;;OAEG;IACH,OAAO,IAAI,IAAI;IAQf;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,OAAO,CAAC,MAAM;CASf"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * In-memory query cache for CLEO MCP Server
3
+ *
4
+ * Caches cleo_query responses with configurable TTL.
5
+ * Cache key = domain + operation + hash(params).
6
+ * Invalidated on any cleo_mutate operation for the relevant domain.
7
+ *
8
+ * @task T3145
9
+ */
10
+ import { createHash } from 'crypto';
11
+ /**
12
+ * Query cache with per-domain invalidation
13
+ */
14
+ export class QueryCache {
15
+ store = new Map();
16
+ domainKeys = new Map();
17
+ stats = {
18
+ hits: 0,
19
+ misses: 0,
20
+ evictions: 0,
21
+ size: 0,
22
+ domains: {},
23
+ };
24
+ ttl;
25
+ enabled;
26
+ cleanupTimer = null;
27
+ constructor(ttlMs = 30000, enabled = true) {
28
+ this.ttl = ttlMs;
29
+ this.enabled = enabled;
30
+ // Periodic cleanup of expired entries every TTL interval
31
+ if (enabled && ttlMs > 0) {
32
+ this.cleanupTimer = setInterval(() => this.evictExpired(), ttlMs);
33
+ // Allow Node to exit even if timer is running
34
+ if (this.cleanupTimer.unref) {
35
+ this.cleanupTimer.unref();
36
+ }
37
+ }
38
+ }
39
+ /**
40
+ * Build cache key from domain, operation, and params
41
+ */
42
+ buildKey(domain, operation, params) {
43
+ const paramsHash = params
44
+ ? createHash('md5').update(JSON.stringify(sortObject(params))).digest('hex').slice(0, 12)
45
+ : 'no-params';
46
+ return `${domain}:${operation}:${paramsHash}`;
47
+ }
48
+ /**
49
+ * Get cached value, or undefined if not found/expired
50
+ */
51
+ get(domain, operation, params) {
52
+ if (!this.enabled) {
53
+ this.stats.misses++;
54
+ return undefined;
55
+ }
56
+ const key = this.buildKey(domain, operation, params);
57
+ const entry = this.store.get(key);
58
+ if (!entry) {
59
+ this.stats.misses++;
60
+ return undefined;
61
+ }
62
+ // Check TTL expiration
63
+ if (Date.now() > entry.expiresAt) {
64
+ this.delete(key, domain);
65
+ this.stats.misses++;
66
+ this.stats.evictions++;
67
+ return undefined;
68
+ }
69
+ this.stats.hits++;
70
+ return entry.value;
71
+ }
72
+ /**
73
+ * Store a value in the cache
74
+ */
75
+ set(domain, operation, params, value) {
76
+ if (!this.enabled || this.ttl <= 0) {
77
+ return;
78
+ }
79
+ const key = this.buildKey(domain, operation, params);
80
+ const now = Date.now();
81
+ this.store.set(key, {
82
+ value,
83
+ expiresAt: now + this.ttl,
84
+ createdAt: now,
85
+ });
86
+ // Track key under its domain for bulk invalidation
87
+ if (!this.domainKeys.has(domain)) {
88
+ this.domainKeys.set(domain, new Set());
89
+ }
90
+ this.domainKeys.get(domain).add(key);
91
+ // Update stats
92
+ this.stats.size = this.store.size;
93
+ this.stats.domains[domain] = this.domainKeys.get(domain).size;
94
+ }
95
+ /**
96
+ * Invalidate all cached entries for a domain
97
+ *
98
+ * Called on any cleo_mutate operation to ensure consistency.
99
+ */
100
+ invalidateDomain(domain) {
101
+ const keys = this.domainKeys.get(domain);
102
+ if (!keys || keys.size === 0) {
103
+ return 0;
104
+ }
105
+ const count = keys.size;
106
+ for (const key of keys) {
107
+ this.store.delete(key);
108
+ }
109
+ keys.clear();
110
+ this.stats.evictions += count;
111
+ this.stats.size = this.store.size;
112
+ this.stats.domains[domain] = 0;
113
+ return count;
114
+ }
115
+ /**
116
+ * Clear entire cache
117
+ */
118
+ clear() {
119
+ const count = this.store.size;
120
+ this.store.clear();
121
+ this.domainKeys.clear();
122
+ this.stats.evictions += count;
123
+ this.stats.size = 0;
124
+ this.stats.domains = {};
125
+ }
126
+ /**
127
+ * Get cache statistics
128
+ */
129
+ getStats() {
130
+ return { ...this.stats, size: this.store.size };
131
+ }
132
+ /**
133
+ * Reset statistics counters
134
+ */
135
+ resetStats() {
136
+ this.stats.hits = 0;
137
+ this.stats.misses = 0;
138
+ this.stats.evictions = 0;
139
+ }
140
+ /**
141
+ * Evict all expired entries
142
+ */
143
+ evictExpired() {
144
+ const now = Date.now();
145
+ let count = 0;
146
+ for (const [key, entry] of this.store) {
147
+ if (now > entry.expiresAt) {
148
+ // Find the domain for this key
149
+ const domain = key.split(':')[0];
150
+ this.delete(key, domain);
151
+ count++;
152
+ }
153
+ }
154
+ if (count > 0) {
155
+ this.stats.evictions += count;
156
+ }
157
+ return count;
158
+ }
159
+ /**
160
+ * Stop the cleanup timer (call on shutdown)
161
+ */
162
+ destroy() {
163
+ if (this.cleanupTimer) {
164
+ clearInterval(this.cleanupTimer);
165
+ this.cleanupTimer = null;
166
+ }
167
+ this.clear();
168
+ }
169
+ /**
170
+ * Check if cache is enabled
171
+ */
172
+ isEnabled() {
173
+ return this.enabled;
174
+ }
175
+ /**
176
+ * Delete a single key and update domain tracking
177
+ */
178
+ delete(key, domain) {
179
+ this.store.delete(key);
180
+ const keys = this.domainKeys.get(domain);
181
+ if (keys) {
182
+ keys.delete(key);
183
+ this.stats.domains[domain] = keys.size;
184
+ }
185
+ this.stats.size = this.store.size;
186
+ }
187
+ }
188
+ /**
189
+ * Sort object keys recursively for deterministic hashing
190
+ */
191
+ function sortObject(obj) {
192
+ const sorted = {};
193
+ for (const key of Object.keys(obj).sort()) {
194
+ const val = obj[key];
195
+ if (val !== null && typeof val === 'object' && !Array.isArray(val)) {
196
+ sorted[key] = sortObject(val);
197
+ }
198
+ else {
199
+ sorted[key] = val;
200
+ }
201
+ }
202
+ return sorted;
203
+ }
204
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * CLI Command Builder
3
+ *
4
+ * Constructs safe CLI commands with proper argument escaping and flag formatting.
5
+ * Prevents shell injection attacks by properly escaping all arguments.
6
+ *
7
+ * @task T2914
8
+ */
9
+ /**
10
+ * Escape shell argument to prevent injection
11
+ *
12
+ * Wraps argument in single quotes and escapes any embedded single quotes.
13
+ * This is safe for all shell interpreters (bash, sh, zsh).
14
+ */
15
+ export declare function escapeArg(arg: string | number | boolean): string;
16
+ /**
17
+ * Format CLI flags from key-value object
18
+ *
19
+ * Converts {json: true, parent: "T001"} to ["--json", "--parent", "T001"]
20
+ */
21
+ export declare function formatFlags(flags: Record<string, unknown>): string[];
22
+ /**
23
+ * Map domain+operation to CLI command
24
+ *
25
+ * Maps MCP domain/operation pairs to the actual CLI command structure.
26
+ * For example: domain='tasks', operation='add' -> command='add', addOperationAsSubcommand=false
27
+ */
28
+ export declare function mapDomainToCommand(domain: string, operation: string): {
29
+ command: string;
30
+ addOperationAsSubcommand: boolean;
31
+ };
32
+ /**
33
+ * Build complete CLI command
34
+ *
35
+ * @param cliPath - Path to CLEO CLI executable
36
+ * @param domain - Domain name (e.g., 'tasks', 'session') OR direct command (e.g., 'show', 'add')
37
+ * @param operation - Operation name (e.g., 'show', 'list') OR first argument
38
+ * @param args - Positional arguments
39
+ * @param flags - Named flags/options
40
+ * @returns Complete command string ready for execution
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * buildCLICommand('cleo', 'tasks', 'show', ['T2914'], {json: true})
45
+ * // Returns: "cleo show 'T2914' --json"
46
+ *
47
+ * buildCLICommand('cleo', 'show', 'T2914', [], {json: true})
48
+ * // Returns: "cleo show 'T2914' --json"
49
+ * ```
50
+ */
51
+ export declare function buildCLICommand(cliPath: string, domain: string, operation: string, args?: Array<string | number>, flags?: Record<string, unknown>): string;
52
+ //# sourceMappingURL=command-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-builder.d.ts","sourceRoot":"","sources":["../../src/lib/command-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAUhE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAqCpE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,wBAAwB,EAAE,OAAO,CAAA;CAAE,CA2J5H;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAM,EACjC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAClC,MAAM,CA+CR"}
@@ -0,0 +1,280 @@
1
+ /**
2
+ * CLI Command Builder
3
+ *
4
+ * Constructs safe CLI commands with proper argument escaping and flag formatting.
5
+ * Prevents shell injection attacks by properly escaping all arguments.
6
+ *
7
+ * @task T2914
8
+ */
9
+ /**
10
+ * Escape shell argument to prevent injection
11
+ *
12
+ * Wraps argument in single quotes and escapes any embedded single quotes.
13
+ * This is safe for all shell interpreters (bash, sh, zsh).
14
+ */
15
+ export function escapeArg(arg) {
16
+ // Convert to string
17
+ const str = String(arg);
18
+ // Escape single quotes by replacing ' with '\''
19
+ // This closes the quote, adds an escaped quote, and reopens the quote
20
+ const escaped = str.replace(/'/g, "'\\''");
21
+ // Wrap in single quotes
22
+ return `'${escaped}'`;
23
+ }
24
+ /**
25
+ * Format CLI flags from key-value object
26
+ *
27
+ * Converts {json: true, parent: "T001"} to ["--json", "--parent", "T001"]
28
+ */
29
+ export function formatFlags(flags) {
30
+ const result = [];
31
+ for (const [key, value] of Object.entries(flags)) {
32
+ // Skip undefined/null values
33
+ if (value === undefined || value === null) {
34
+ continue;
35
+ }
36
+ // Boolean flags
37
+ if (typeof value === 'boolean') {
38
+ if (value === true) {
39
+ result.push(`--${key}`);
40
+ }
41
+ // Skip false boolean flags (don't add anything)
42
+ continue;
43
+ }
44
+ // Array flags (multiple values)
45
+ if (Array.isArray(value)) {
46
+ for (const item of value) {
47
+ result.push(`--${key}`, escapeArg(item));
48
+ }
49
+ continue;
50
+ }
51
+ // Object flags (JSON stringify)
52
+ if (typeof value === 'object') {
53
+ result.push(`--${key}`, escapeArg(JSON.stringify(value)));
54
+ continue;
55
+ }
56
+ // Regular flags (string/number)
57
+ result.push(`--${key}`, escapeArg(value));
58
+ }
59
+ return result;
60
+ }
61
+ /**
62
+ * Map domain+operation to CLI command
63
+ *
64
+ * Maps MCP domain/operation pairs to the actual CLI command structure.
65
+ * For example: domain='tasks', operation='add' -> command='add', addOperationAsSubcommand=false
66
+ */
67
+ export function mapDomainToCommand(domain, operation) {
68
+ // For tasks domain, the operation IS the command
69
+ // For session/lifecycle domains, we need both (e.g., 'session start')
70
+ const domainOperationMap = {
71
+ tasks: {
72
+ show: { command: 'show', addOperationAsSubcommand: false },
73
+ list: { command: 'list', addOperationAsSubcommand: false },
74
+ find: { command: 'find', addOperationAsSubcommand: false },
75
+ add: { command: 'add', addOperationAsSubcommand: false },
76
+ update: { command: 'update', addOperationAsSubcommand: false },
77
+ complete: { command: 'complete', addOperationAsSubcommand: false },
78
+ delete: { command: 'delete', addOperationAsSubcommand: false },
79
+ archive: { command: 'archive', addOperationAsSubcommand: false },
80
+ unarchive: { command: 'unarchive', addOperationAsSubcommand: false },
81
+ restore: { command: 'restore', addOperationAsSubcommand: false },
82
+ reopen: { command: 'reopen', addOperationAsSubcommand: false },
83
+ exists: { command: 'exists', addOperationAsSubcommand: false },
84
+ next: { command: 'next', addOperationAsSubcommand: false },
85
+ deps: { command: 'deps', addOperationAsSubcommand: false },
86
+ blockers: { command: 'blockers', addOperationAsSubcommand: false },
87
+ tree: { command: 'tree', addOperationAsSubcommand: false },
88
+ analyze: { command: 'analyze', addOperationAsSubcommand: false },
89
+ },
90
+ session: {
91
+ start: { command: 'session', addOperationAsSubcommand: true },
92
+ end: { command: 'session', addOperationAsSubcommand: true },
93
+ status: { command: 'session', addOperationAsSubcommand: true },
94
+ list: { command: 'session', addOperationAsSubcommand: true },
95
+ show: { command: 'session', addOperationAsSubcommand: true },
96
+ focus: { command: 'focus', addOperationAsSubcommand: false },
97
+ suspend: { command: 'session', addOperationAsSubcommand: true },
98
+ resume: { command: 'session', addOperationAsSubcommand: true },
99
+ history: { command: 'session', addOperationAsSubcommand: true },
100
+ archive: { command: 'session', addOperationAsSubcommand: true },
101
+ cleanup: { command: 'session', addOperationAsSubcommand: true },
102
+ doctor: { command: 'session', addOperationAsSubcommand: true },
103
+ switch: { command: 'session', addOperationAsSubcommand: true },
104
+ // Compound focus operations from MCP (session.focus.set → cleo focus set)
105
+ 'focus.set': { command: 'focus set', addOperationAsSubcommand: false },
106
+ 'focus.clear': { command: 'focus clear', addOperationAsSubcommand: false },
107
+ 'focus.get': { command: 'focus show', addOperationAsSubcommand: false },
108
+ 'focus.show': { command: 'focus show', addOperationAsSubcommand: false },
109
+ 'focus.note': { command: 'focus note', addOperationAsSubcommand: false },
110
+ 'focus.next': { command: 'focus next', addOperationAsSubcommand: false },
111
+ },
112
+ // Focus operations mapped to 'cleo focus <subcommand>'
113
+ // These handle 'focus.set' / 'focus.clear' / 'focus.get' operations
114
+ // from the session domain in MCP
115
+ focus: {
116
+ set: { command: 'focus', addOperationAsSubcommand: true },
117
+ clear: { command: 'focus', addOperationAsSubcommand: true },
118
+ show: { command: 'focus', addOperationAsSubcommand: true },
119
+ get: { command: 'focus show', addOperationAsSubcommand: false },
120
+ note: { command: 'focus', addOperationAsSubcommand: true },
121
+ next: { command: 'focus', addOperationAsSubcommand: true },
122
+ },
123
+ lifecycle: {
124
+ status: { command: 'lifecycle', addOperationAsSubcommand: true },
125
+ stages: { command: 'lifecycle', addOperationAsSubcommand: true },
126
+ validate: { command: 'lifecycle', addOperationAsSubcommand: true },
127
+ record: { command: 'lifecycle', addOperationAsSubcommand: true },
128
+ enforce: { command: 'lifecycle', addOperationAsSubcommand: true },
129
+ skip: { command: 'lifecycle', addOperationAsSubcommand: true },
130
+ unskip: { command: 'lifecycle', addOperationAsSubcommand: true },
131
+ report: { command: 'lifecycle', addOperationAsSubcommand: true },
132
+ export: { command: 'lifecycle', addOperationAsSubcommand: true },
133
+ import: { command: 'lifecycle', addOperationAsSubcommand: true },
134
+ // Map MCP operation aliases to CLI equivalents
135
+ progress: { command: 'lifecycle record', addOperationAsSubcommand: false },
136
+ check: { command: 'lifecycle validate', addOperationAsSubcommand: false },
137
+ gate: { command: 'lifecycle enforce', addOperationAsSubcommand: false },
138
+ gates: { command: 'lifecycle stages', addOperationAsSubcommand: false },
139
+ prerequisites: { command: 'lifecycle stages', addOperationAsSubcommand: false },
140
+ history: { command: 'lifecycle export', addOperationAsSubcommand: false },
141
+ reset: { command: 'lifecycle record', addOperationAsSubcommand: false },
142
+ 'gate.pass': { command: 'lifecycle enforce', addOperationAsSubcommand: false },
143
+ 'gate.fail': { command: 'lifecycle enforce', addOperationAsSubcommand: false },
144
+ },
145
+ // Orchestrate domain maps to 'cleo orchestrator <subcommand>'
146
+ orchestrate: {
147
+ analyze: { command: 'orchestrator', addOperationAsSubcommand: true },
148
+ start: { command: 'orchestrator', addOperationAsSubcommand: true },
149
+ startup: { command: 'orchestrator', addOperationAsSubcommand: true },
150
+ status: { command: 'orchestrator', addOperationAsSubcommand: true },
151
+ next: { command: 'orchestrator', addOperationAsSubcommand: true },
152
+ ready: { command: 'orchestrator', addOperationAsSubcommand: true },
153
+ spawn: { command: 'orchestrator', addOperationAsSubcommand: true },
154
+ waves: { command: 'orchestrator', addOperationAsSubcommand: true },
155
+ parallel: { command: 'orchestrator', addOperationAsSubcommand: true },
156
+ check: { command: 'orchestrator', addOperationAsSubcommand: true },
157
+ validate: { command: 'orchestrator', addOperationAsSubcommand: true },
158
+ context: { command: 'orchestrator', addOperationAsSubcommand: true },
159
+ skill: { command: 'orchestrator', addOperationAsSubcommand: true },
160
+ },
161
+ // Research domain maps to 'cleo research <subcommand>'
162
+ research: {
163
+ link: { command: 'research', addOperationAsSubcommand: true },
164
+ links: { command: 'research', addOperationAsSubcommand: true },
165
+ unlink: { command: 'research', addOperationAsSubcommand: true },
166
+ list: { command: 'research', addOperationAsSubcommand: true },
167
+ show: { command: 'research', addOperationAsSubcommand: true },
168
+ get: { command: 'research', addOperationAsSubcommand: true },
169
+ add: { command: 'research', addOperationAsSubcommand: true },
170
+ query: { command: 'research', addOperationAsSubcommand: false },
171
+ stats: { command: 'research', addOperationAsSubcommand: true },
172
+ pending: { command: 'research', addOperationAsSubcommand: true },
173
+ inject: { command: 'research', addOperationAsSubcommand: true },
174
+ archive: { command: 'research', addOperationAsSubcommand: true },
175
+ 'archive-list': { command: 'research', addOperationAsSubcommand: true },
176
+ status: { command: 'research', addOperationAsSubcommand: true },
177
+ compact: { command: 'research', addOperationAsSubcommand: true },
178
+ validate: { command: 'research', addOperationAsSubcommand: true },
179
+ // Manifest sub-operations map to actual CLI subcommands
180
+ 'manifest.append': { command: 'research add', addOperationAsSubcommand: false },
181
+ 'manifest.read': { command: 'research list', addOperationAsSubcommand: false },
182
+ 'manifest.archive': { command: 'research archive', addOperationAsSubcommand: false },
183
+ },
184
+ system: {
185
+ version: { command: 'version', addOperationAsSubcommand: false },
186
+ config: { command: 'config', addOperationAsSubcommand: false },
187
+ backup: { command: 'backup', addOperationAsSubcommand: false },
188
+ cleanup: { command: 'cleanup', addOperationAsSubcommand: false },
189
+ doctor: { command: 'doctor', addOperationAsSubcommand: false },
190
+ stats: { command: 'stats', addOperationAsSubcommand: false },
191
+ context: { command: 'context', addOperationAsSubcommand: false },
192
+ },
193
+ validate: {
194
+ schema: { command: 'validate', addOperationAsSubcommand: false },
195
+ task: { command: 'validate', addOperationAsSubcommand: false },
196
+ compliance: { command: 'compliance', addOperationAsSubcommand: false },
197
+ test: { command: 'test', addOperationAsSubcommand: false },
198
+ },
199
+ };
200
+ const mapping = domainOperationMap[domain]?.[operation];
201
+ if (mapping) {
202
+ return mapping;
203
+ }
204
+ // Handle compound operations (e.g., 'focus.set' in 'session' domain)
205
+ // Split on first dot and try to resolve via a sub-domain
206
+ if (operation.includes('.')) {
207
+ const dotIndex = operation.indexOf('.');
208
+ const subDomain = operation.substring(0, dotIndex);
209
+ const subOp = operation.substring(dotIndex + 1);
210
+ // Check if there's a dedicated domain for the sub-operation
211
+ const subMapping = domainOperationMap[subDomain]?.[subOp];
212
+ if (subMapping) {
213
+ return subMapping;
214
+ }
215
+ }
216
+ // Default: use domain as command, operation as subcommand
217
+ return { command: domain, addOperationAsSubcommand: true };
218
+ }
219
+ /**
220
+ * Build complete CLI command
221
+ *
222
+ * @param cliPath - Path to CLEO CLI executable
223
+ * @param domain - Domain name (e.g., 'tasks', 'session') OR direct command (e.g., 'show', 'add')
224
+ * @param operation - Operation name (e.g., 'show', 'list') OR first argument
225
+ * @param args - Positional arguments
226
+ * @param flags - Named flags/options
227
+ * @returns Complete command string ready for execution
228
+ *
229
+ * @example
230
+ * ```typescript
231
+ * buildCLICommand('cleo', 'tasks', 'show', ['T2914'], {json: true})
232
+ * // Returns: "cleo show 'T2914' --json"
233
+ *
234
+ * buildCLICommand('cleo', 'show', 'T2914', [], {json: true})
235
+ * // Returns: "cleo show 'T2914' --json"
236
+ * ```
237
+ */
238
+ export function buildCLICommand(cliPath, domain, operation, args = [], flags = {}) {
239
+ const parts = [cliPath];
240
+ // Check if we need to map domain+operation to CLI command
241
+ // This handles E2E tests that use domain='tasks', operation='add'
242
+ // versus domain handlers that use domain='add', operation=title
243
+ // Valid CLI commands that can be used directly as the first command word.
244
+ // These are commands where domain IS the command itself (e.g., domain='add', operation='My Task Title').
245
+ // Do NOT include domain names that need mapDomainToCommand lookup (like 'session', 'lifecycle',
246
+ // 'orchestrate', 'research', 'tasks', 'focus', 'system', 'validate').
247
+ const validCliCommands = [
248
+ 'add', 'list', 'show', 'find', 'update', 'complete', 'delete', 'archive',
249
+ 'restore', 'exists', 'next', 'version', 'dash', 'analyze', 'config',
250
+ 'backup', 'init', 'blockers', 'deps', 'tree',
251
+ ];
252
+ if (!validCliCommands.includes(domain)) {
253
+ // This looks like domain='tasks', operation='add' pattern from E2E tests
254
+ // Map it to the proper CLI command
255
+ const mapping = mapDomainToCommand(domain, operation);
256
+ parts.push(mapping.command);
257
+ // For commands that need the operation as a subcommand (session, lifecycle)
258
+ if (mapping.addOperationAsSubcommand) {
259
+ parts.push(escapeArg(operation));
260
+ }
261
+ // For tasks domain, the operation IS already the command, so don't add it again
262
+ }
263
+ else {
264
+ // This is already a direct CLI command (domain='add', operation=title)
265
+ parts.push(domain);
266
+ // Add operation (may be user-controlled, e.g., task title, so escape it)
267
+ if (operation) {
268
+ parts.push(escapeArg(operation));
269
+ }
270
+ }
271
+ // Add positional arguments (escaped)
272
+ for (const arg of args) {
273
+ parts.push(escapeArg(arg));
274
+ }
275
+ // Add flags (escaped)
276
+ const flagParts = formatFlags(flags);
277
+ parts.push(...flagParts);
278
+ return parts.join(' ');
279
+ }
280
+ //# sourceMappingURL=command-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-builder.js","sourceRoot":"","sources":["../../src/lib/command-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Configuration loader for CLEO MCP Server
3
+ *
4
+ * Loads configuration from:
5
+ * 1. Environment variables (CLEO_MCP_*)
6
+ * 2. Config file (.cleo/config.json)
7
+ * 3. Defaults (fallback values)
8
+ *
9
+ * @task T2928
10
+ */
11
+ import { MCPConfig } from './defaults.js';
12
+ /**
13
+ * Configuration validation error
14
+ */
15
+ export declare class ConfigValidationError extends Error {
16
+ field: string;
17
+ value: unknown;
18
+ constraint: string;
19
+ constructor(field: string, value: unknown, constraint: string);
20
+ }
21
+ /**
22
+ * Validate complete configuration
23
+ */
24
+ export declare function validateConfig(config: MCPConfig): void;
25
+ /**
26
+ * Load configuration from all sources
27
+ *
28
+ * Priority order:
29
+ * 1. Environment variables (CLEO_MCP_*)
30
+ * 2. Config file (.cleo/config.json)
31
+ * 3. Defaults
32
+ */
33
+ export declare function loadConfig(projectRoot?: string): MCPConfig;
34
+ /**
35
+ * Get global configuration (singleton)
36
+ */
37
+ export declare function getConfig(): MCPConfig;
38
+ /**
39
+ * Reset global configuration (for testing)
40
+ */
41
+ export declare function resetConfig(): void;
42
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EACL,SAAS,EASV,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAErC,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,MAAM;gBAFlB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM;CAK5B;AAuJD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAatD;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAuD1D;AAQD;;GAEG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAKrC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC"}