@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,276 @@
1
+ /**
2
+ * Domain Router for CLEO MCP Server
3
+ *
4
+ * Routes operations to appropriate domain handlers based on:
5
+ * 1. Gateway type (query vs mutate)
6
+ * 2. Domain (tasks, session, orchestrate, etc.)
7
+ * 3. Operation (get, list, create, update, etc.)
8
+ *
9
+ * @task T2911
10
+ * @task T2912
11
+ * @task T3144 - Security hardening integration
12
+ */
13
+ import { TasksHandler } from '../domains/tasks.js';
14
+ import { SessionHandler } from '../domains/session.js';
15
+ import { OrchestrateHandler } from '../domains/orchestrate.js';
16
+ import { ResearchHandler } from '../domains/research.js';
17
+ import { LifecycleHandler } from '../domains/lifecycle.js';
18
+ import { ValidateHandler } from '../domains/validate.js';
19
+ import { ReleaseHandler } from '../domains/release.js';
20
+ import { SystemHandler } from '../domains/system.js';
21
+ import { formatError, createError } from './formatter.js';
22
+ import { protocolEnforcer, ProtocolType } from './protocol-enforcement.js';
23
+ import { VerificationGate } from './verification-gates.js';
24
+ import { sanitizeParams, SecurityError } from './security.js';
25
+ import { RateLimiter } from './rate-limiter.js';
26
+ /**
27
+ * Domain routing validation error
28
+ */
29
+ export class RouterError extends Error {
30
+ code;
31
+ exitCode;
32
+ constructor(message, code = 'E_ROUTING_ERROR', exitCode = 1) {
33
+ super(message);
34
+ this.code = code;
35
+ this.exitCode = exitCode;
36
+ this.name = 'RouterError';
37
+ }
38
+ }
39
+ /**
40
+ * Main domain router that dispatches operations to appropriate handlers
41
+ */
42
+ export class DomainRouter {
43
+ handlers;
44
+ useProtocolEnforcement;
45
+ verificationGate;
46
+ rateLimiter;
47
+ constructor(executor, useProtocolEnforcement = true, rateLimitConfig) {
48
+ // Initialize all domain handlers
49
+ this.handlers = new Map([
50
+ ['tasks', new TasksHandler(executor)],
51
+ ['session', new SessionHandler(executor)],
52
+ ['orchestrate', new OrchestrateHandler(executor)],
53
+ ['research', new ResearchHandler(executor)],
54
+ ['lifecycle', new LifecycleHandler(executor)],
55
+ ['validate', new ValidateHandler(executor)],
56
+ ['release', new ReleaseHandler(executor)],
57
+ ['system', new SystemHandler(executor)],
58
+ ]);
59
+ this.useProtocolEnforcement = useProtocolEnforcement;
60
+ this.verificationGate = new VerificationGate(useProtocolEnforcement);
61
+ this.rateLimiter = new RateLimiter(rateLimitConfig);
62
+ }
63
+ /**
64
+ * Route an operation to the appropriate domain handler
65
+ */
66
+ async routeOperation(request) {
67
+ const startTime = Date.now();
68
+ try {
69
+ // Validate the route
70
+ this.validateRoute(request);
71
+ // Rate limiting check (Section 13.3)
72
+ // Support bypassRateLimit param for testing
73
+ const bypassRateLimit = !!request.params?.bypassRateLimit;
74
+ const rateLimitResult = bypassRateLimit
75
+ ? { allowed: true, remaining: Infinity, limit: Infinity, resetMs: 0, category: 'bypassed' }
76
+ : this.rateLimiter.check(request.gateway, request.domain, request.operation);
77
+ if (!rateLimitResult.allowed) {
78
+ return {
79
+ _meta: {
80
+ gateway: request.gateway,
81
+ domain: request.domain,
82
+ operation: request.operation,
83
+ version: '1.0.0',
84
+ timestamp: new Date().toISOString(),
85
+ duration_ms: Date.now() - startTime,
86
+ rateLimit: {
87
+ limit: rateLimitResult.limit,
88
+ remaining: rateLimitResult.remaining,
89
+ resetMs: rateLimitResult.resetMs,
90
+ category: rateLimitResult.category,
91
+ },
92
+ },
93
+ success: false,
94
+ error: {
95
+ code: 'E_RATE_LIMITED',
96
+ exitCode: 429,
97
+ message: `Rate limit exceeded for ${rateLimitResult.category} operations. Limit: ${rateLimitResult.limit}/min. Retry after ${Math.ceil(rateLimitResult.resetMs / 1000)}s.`,
98
+ details: {
99
+ category: rateLimitResult.category,
100
+ limit: rateLimitResult.limit,
101
+ resetMs: rateLimitResult.resetMs,
102
+ },
103
+ fix: `Wait ${Math.ceil(rateLimitResult.resetMs / 1000)} seconds before retrying`,
104
+ },
105
+ };
106
+ }
107
+ // Sanitize input parameters (T3144)
108
+ if (request.params) {
109
+ try {
110
+ request = {
111
+ ...request,
112
+ params: sanitizeParams(request.params),
113
+ };
114
+ }
115
+ catch (sanitizeError) {
116
+ if (sanitizeError instanceof SecurityError) {
117
+ const response = formatError(`${request.domain}.${request.operation}`, createError(sanitizeError.code, sanitizeError.message, 2, { context: { field: sanitizeError.field } }));
118
+ response._meta.duration_ms = Date.now() - startTime;
119
+ return response;
120
+ }
121
+ throw sanitizeError;
122
+ }
123
+ }
124
+ // Get the handler
125
+ const handler = this.handlers.get(request.domain);
126
+ if (!handler) {
127
+ throw new RouterError(`Unknown domain: ${request.domain}`, 'E_INVALID_DOMAIN', 2);
128
+ }
129
+ // Apply verification gate middleware if enabled
130
+ if (this.useProtocolEnforcement && request.gateway === 'cleo_mutate') {
131
+ // Build operation context for verification
132
+ const context = {
133
+ domain: request.domain,
134
+ operation: request.operation,
135
+ gateway: request.gateway,
136
+ params: request.params,
137
+ taskId: request.params?.taskId,
138
+ protocolType: this.inferProtocolType(request),
139
+ };
140
+ // Run 4-layer verification gate
141
+ const gateResult = await this.verificationGate.verifyOperation(context);
142
+ // If verification fails, return error response
143
+ if (!gateResult.passed) {
144
+ const failedLayer = gateResult.layers[gateResult.blockedAt];
145
+ const response = formatError(`${request.domain}.${request.operation}`, createError(failedLayer.violations[0]?.code || 'E_VERIFICATION_FAILED', gateResult.summary, gateResult.exitCode));
146
+ response._meta.duration_ms = Date.now() - startTime;
147
+ response._meta.verificationGate = {
148
+ blockedAt: gateResult.blockedAt,
149
+ violations: failedLayer.violations,
150
+ };
151
+ return response;
152
+ }
153
+ // Verification passed, apply protocol enforcement
154
+ const response = await protocolEnforcer.enforceProtocol(request, async () => {
155
+ // Dispatch to appropriate gateway method
156
+ if (request.gateway === 'cleo_query') {
157
+ return await handler.query(request.operation, request.params);
158
+ }
159
+ else {
160
+ return await handler.mutate(request.operation, request.params);
161
+ }
162
+ });
163
+ // Add duration and rate limit metadata
164
+ response._meta.duration_ms = Date.now() - startTime;
165
+ this.addRateLimitMeta(response, rateLimitResult);
166
+ return response;
167
+ }
168
+ // Dispatch without middleware
169
+ let response;
170
+ if (request.gateway === 'cleo_query') {
171
+ response = await handler.query(request.operation, request.params);
172
+ }
173
+ else {
174
+ response = await handler.mutate(request.operation, request.params);
175
+ }
176
+ // Add duration and rate limit metadata
177
+ response._meta.duration_ms = Date.now() - startTime;
178
+ this.addRateLimitMeta(response, rateLimitResult);
179
+ return response;
180
+ }
181
+ catch (error) {
182
+ // Handle routing errors
183
+ if (error instanceof RouterError) {
184
+ const response = formatError(`${request.domain}.${request.operation}`, createError(error.code, error.message, error.exitCode));
185
+ response._meta.duration_ms = Date.now() - startTime;
186
+ return response;
187
+ }
188
+ // Handle unexpected errors
189
+ const response = formatError(`${request.domain}.${request.operation}`, createError('E_INTERNAL_ERROR', error instanceof Error ? error.message : String(error), 1));
190
+ response._meta.duration_ms = Date.now() - startTime;
191
+ return response;
192
+ }
193
+ }
194
+ /**
195
+ * Validate that the domain/operation combination is valid
196
+ */
197
+ validateRoute(request) {
198
+ const { gateway, domain, operation } = request;
199
+ // Validate domain exists
200
+ const handler = this.handlers.get(domain);
201
+ if (!handler) {
202
+ throw new RouterError(`Unknown domain: ${domain}`, 'E_INVALID_DOMAIN', 2);
203
+ }
204
+ // Get supported operations for this domain
205
+ const supported = handler.getSupportedOperations();
206
+ // Validate operation for gateway type
207
+ const gatewayType = gateway === 'cleo_query' ? 'query' : 'mutate';
208
+ const validOps = supported[gatewayType];
209
+ if (!validOps.includes(operation)) {
210
+ throw new RouterError(`Operation '${operation}' not supported for ${gateway} in domain '${domain}'`, 'E_INVALID_OPERATION', 2);
211
+ }
212
+ // Validate gateway/domain combination
213
+ if (gateway === 'cleo_query' && domain === 'release') {
214
+ throw new RouterError(`Domain 'release' only supports mutate operations`, 'E_INVALID_GATEWAY', 2);
215
+ }
216
+ }
217
+ /**
218
+ * Get list of all domains
219
+ */
220
+ getDomains() {
221
+ return Array.from(this.handlers.keys());
222
+ }
223
+ /**
224
+ * Get supported operations for a specific domain
225
+ */
226
+ getDomainOperations(domain) {
227
+ const handler = this.handlers.get(domain);
228
+ return handler ? handler.getSupportedOperations() : null;
229
+ }
230
+ /**
231
+ * Get the rate limiter instance (for testing/diagnostics)
232
+ */
233
+ getRateLimiter() {
234
+ return this.rateLimiter;
235
+ }
236
+ /**
237
+ * Add rate limit metadata to response _meta
238
+ */
239
+ addRateLimitMeta(response, rateLimitResult) {
240
+ response._meta.rateLimit = {
241
+ limit: rateLimitResult.limit,
242
+ remaining: rateLimitResult.remaining,
243
+ resetMs: rateLimitResult.resetMs,
244
+ category: rateLimitResult.category,
245
+ };
246
+ }
247
+ /**
248
+ * Infer protocol type from request context
249
+ *
250
+ * Used to determine which protocol validation rules apply.
251
+ */
252
+ inferProtocolType(request) {
253
+ // Orchestrate domain operations map to protocol types
254
+ if (request.domain === 'orchestrate' && request.operation === 'spawn') {
255
+ return request.params?.protocolType;
256
+ }
257
+ // Research domain operations
258
+ if (request.domain === 'research') {
259
+ return ProtocolType.RESEARCH;
260
+ }
261
+ // Lifecycle domain operations map to lifecycle stages
262
+ if (request.domain === 'lifecycle') {
263
+ return request.params?.stage;
264
+ }
265
+ // Release domain operations
266
+ if (request.domain === 'release') {
267
+ return ProtocolType.RELEASE;
268
+ }
269
+ // Validate domain operations
270
+ if (request.domain === 'validate') {
271
+ return ProtocolType.VALIDATION;
272
+ }
273
+ return undefined;
274
+ }
275
+ }
276
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/lib/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * JSON Schema constants and validation helpers for CLEO MCP Server
3
+ *
4
+ * Defines schema URLs and validation utilities for CLEO data structures.
5
+ *
6
+ * @task T2912
7
+ */
8
+ /**
9
+ * Schema URL for output response envelope
10
+ */
11
+ export declare const SCHEMA_URL_OUTPUT = "https://cleo-dev.com/schemas/v1/output.schema.json";
12
+ /**
13
+ * Schema URL for task objects
14
+ */
15
+ export declare const SCHEMA_URL_TASK = "https://cleo-dev.com/schemas/v1/task.schema.json";
16
+ /**
17
+ * Schema URL for session objects
18
+ */
19
+ export declare const SCHEMA_URL_SESSION = "https://cleo-dev.com/schemas/v1/session.schema.json";
20
+ /**
21
+ * Schema URL for manifest entries
22
+ */
23
+ export declare const SCHEMA_URL_MANIFEST = "https://cleo-dev.com/schemas/v1/manifest.schema.json";
24
+ /**
25
+ * Schema URL for config objects
26
+ */
27
+ export declare const SCHEMA_URL_CONFIG = "https://cleo-dev.com/schemas/v1/config.schema.json";
28
+ /**
29
+ * All schema URLs by type
30
+ */
31
+ export declare const SCHEMA_URLS: {
32
+ readonly output: "https://cleo-dev.com/schemas/v1/output.schema.json";
33
+ readonly task: "https://cleo-dev.com/schemas/v1/task.schema.json";
34
+ readonly session: "https://cleo-dev.com/schemas/v1/session.schema.json";
35
+ readonly manifest: "https://cleo-dev.com/schemas/v1/manifest.schema.json";
36
+ readonly config: "https://cleo-dev.com/schemas/v1/config.schema.json";
37
+ };
38
+ /**
39
+ * Get schema URL by type
40
+ */
41
+ export declare function getSchemaUrl(type: keyof typeof SCHEMA_URLS): string;
42
+ /**
43
+ * Validate that an object has the expected schema reference
44
+ */
45
+ export declare function hasValidSchema(obj: unknown, expectedType: keyof typeof SCHEMA_URLS): boolean;
46
+ /**
47
+ * Schema validation error
48
+ */
49
+ export declare class SchemaValidationError extends Error {
50
+ schemaType: string;
51
+ field: string;
52
+ constraint: string;
53
+ constructor(schemaType: string, field: string, constraint: string);
54
+ }
55
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,uDAAuD,CAAC;AAEtF;;GAEG;AACH,eAAO,MAAM,eAAe,qDAAqD,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,kBAAkB,wDAAwD,CAAC;AAExF;;GAEG;AACH,eAAO,MAAM,mBAAmB,yDAAyD,CAAC;AAE1F;;GAEG;AACH,eAAO,MAAM,iBAAiB,uDAAuD,CAAC;AAEtF;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;CAMd,CAAC;AAEX;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,OAAO,WAAW,GAAG,MAAM,CAEnE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,WAAW,GAAG,OAAO,CAS5F;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAErC,UAAU,EAAE,MAAM;IAClB,KAAK,EAAE,MAAM;IACb,UAAU,EAAE,MAAM;gBAFlB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM;CAK5B"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * JSON Schema constants and validation helpers for CLEO MCP Server
3
+ *
4
+ * Defines schema URLs and validation utilities for CLEO data structures.
5
+ *
6
+ * @task T2912
7
+ */
8
+ /**
9
+ * Schema URL for output response envelope
10
+ */
11
+ export const SCHEMA_URL_OUTPUT = 'https://cleo-dev.com/schemas/v1/output.schema.json';
12
+ /**
13
+ * Schema URL for task objects
14
+ */
15
+ export const SCHEMA_URL_TASK = 'https://cleo-dev.com/schemas/v1/task.schema.json';
16
+ /**
17
+ * Schema URL for session objects
18
+ */
19
+ export const SCHEMA_URL_SESSION = 'https://cleo-dev.com/schemas/v1/session.schema.json';
20
+ /**
21
+ * Schema URL for manifest entries
22
+ */
23
+ export const SCHEMA_URL_MANIFEST = 'https://cleo-dev.com/schemas/v1/manifest.schema.json';
24
+ /**
25
+ * Schema URL for config objects
26
+ */
27
+ export const SCHEMA_URL_CONFIG = 'https://cleo-dev.com/schemas/v1/config.schema.json';
28
+ /**
29
+ * All schema URLs by type
30
+ */
31
+ export const SCHEMA_URLS = {
32
+ output: SCHEMA_URL_OUTPUT,
33
+ task: SCHEMA_URL_TASK,
34
+ session: SCHEMA_URL_SESSION,
35
+ manifest: SCHEMA_URL_MANIFEST,
36
+ config: SCHEMA_URL_CONFIG,
37
+ };
38
+ /**
39
+ * Get schema URL by type
40
+ */
41
+ export function getSchemaUrl(type) {
42
+ return SCHEMA_URLS[type];
43
+ }
44
+ /**
45
+ * Validate that an object has the expected schema reference
46
+ */
47
+ export function hasValidSchema(obj, expectedType) {
48
+ if (typeof obj !== 'object' || obj === null) {
49
+ return false;
50
+ }
51
+ const record = obj;
52
+ const expectedUrl = SCHEMA_URLS[expectedType];
53
+ return record.$schema === expectedUrl;
54
+ }
55
+ /**
56
+ * Schema validation error
57
+ */
58
+ export class SchemaValidationError extends Error {
59
+ schemaType;
60
+ field;
61
+ constraint;
62
+ constructor(schemaType, field, constraint) {
63
+ super(`Schema validation failed for ${schemaType}.${field}: ${constraint}`);
64
+ this.schemaType = schemaType;
65
+ this.field = field;
66
+ this.constraint = constraint;
67
+ this.name = 'SchemaValidationError';
68
+ }
69
+ }
70
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,oDAAoD,CAAC;AAEtF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,kDAAkD,CAAC;AAElF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,qDAAqD,CAAC;AAExF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,sDAAsD,CAAC;AAE1F;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,oDAAoD,CAAC;AAEtF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,iBAAiB;IACzB,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,iBAAiB;CACjB,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAA8B;IACzD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY,EAAE,YAAsC;IACjF,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAE9C,OAAO,MAAM,CAAC,OAAO,KAAK,WAAW,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAErC;IACA;IACA;IAHT,YACS,UAAkB,EAClB,KAAa,EACb,UAAkB;QAEzB,KAAK,CAAC,gCAAgC,UAAU,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC,CAAC;QAJrE,eAAU,GAAV,UAAU,CAAQ;QAClB,UAAK,GAAL,KAAK,CAAQ;QACb,eAAU,GAAV,UAAU,CAAQ;QAGzB,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Security Hardening and Input Sanitization for CLEO MCP Server
3
+ *
4
+ * Provides input validation, path sanitization, content filtering,
5
+ * enum checking, and rate limiting for all MCP operations.
6
+ *
7
+ * @task T3144
8
+ * @epic T3125
9
+ */
10
+ /**
11
+ * Security validation error thrown when input fails sanitization
12
+ */
13
+ export declare class SecurityError extends Error {
14
+ code: string;
15
+ field?: string | undefined;
16
+ constructor(message: string, code?: string, field?: string | undefined);
17
+ }
18
+ /**
19
+ * Sanitize and validate a task ID
20
+ *
21
+ * Validates format: ^T[0-9]+$
22
+ * Rejects empty, malformed, or excessively large IDs
23
+ *
24
+ * @param id - Raw task ID input
25
+ * @returns Sanitized task ID
26
+ * @throws SecurityError if ID is invalid
27
+ */
28
+ export declare function sanitizeTaskId(id: string): string;
29
+ /**
30
+ * Sanitize and validate a file path
31
+ *
32
+ * Prevents path traversal attacks by ensuring the resolved path
33
+ * stays within the project root directory.
34
+ *
35
+ * @param path - Raw path input
36
+ * @param projectRoot - Project root directory (absolute path)
37
+ * @returns Sanitized absolute path within project root
38
+ * @throws SecurityError if path escapes project root or is invalid
39
+ */
40
+ export declare function sanitizePath(path: string, projectRoot: string): string;
41
+ /**
42
+ * Sanitize content string
43
+ *
44
+ * Enforces size limits and strips control characters (except newline, tab, CR).
45
+ *
46
+ * @param content - Raw content string
47
+ * @param maxLength - Maximum allowed length (default: 64KB)
48
+ * @returns Sanitized content string
49
+ * @throws SecurityError if content exceeds size limit
50
+ */
51
+ export declare function sanitizeContent(content: string, maxLength?: number): string;
52
+ /**
53
+ * Validate that a value is in an allowed enum set
54
+ *
55
+ * @param value - Value to validate
56
+ * @param allowed - Array of allowed values
57
+ * @param fieldName - Name of the field (for error messages)
58
+ * @returns The validated value
59
+ * @throws SecurityError if value is not in allowed set
60
+ */
61
+ export declare function validateEnum(value: string, allowed: string[], fieldName: string): string;
62
+ /**
63
+ * Known enum values for CLEO domains
64
+ */
65
+ export declare const VALID_DOMAINS: readonly ["tasks", "session", "orchestrate", "research", "lifecycle", "validate", "release", "system"];
66
+ export declare const VALID_GATEWAYS: readonly ["cleo_query", "cleo_mutate"];
67
+ export declare const VALID_STATUSES: readonly ["pending", "active", "blocked", "done"];
68
+ export declare const VALID_PRIORITIES: readonly ["low", "medium", "high", "critical"];
69
+ /**
70
+ * Rate limiter configuration
71
+ */
72
+ export interface RateLimitConfig {
73
+ /** Maximum requests allowed in the window */
74
+ maxRequests: number;
75
+ /** Time window in milliseconds */
76
+ windowMs: number;
77
+ }
78
+ /**
79
+ * Rate limit check result
80
+ */
81
+ export interface RateLimitResult {
82
+ /** Whether the request is allowed */
83
+ allowed: boolean;
84
+ /** Remaining requests in current window */
85
+ remaining: number;
86
+ /** Milliseconds until window resets */
87
+ resetMs: number;
88
+ /** Total limit for the window */
89
+ limit: number;
90
+ }
91
+ /**
92
+ * Default rate limit configurations per operation type
93
+ */
94
+ export declare const DEFAULT_RATE_LIMITS: Record<string, RateLimitConfig>;
95
+ /**
96
+ * In-memory sliding window rate limiter
97
+ *
98
+ * Tracks request timestamps per key and enforces configurable limits.
99
+ */
100
+ export declare class RateLimiter {
101
+ private windows;
102
+ private configs;
103
+ constructor(configs?: Record<string, RateLimitConfig>);
104
+ /**
105
+ * Check if a request is allowed under rate limits
106
+ *
107
+ * @param key - Rate limit bucket key (e.g., 'query', 'mutate', 'spawn')
108
+ * @returns Rate limit check result
109
+ */
110
+ check(key: string): RateLimitResult;
111
+ /**
112
+ * Record a request (call after check returns allowed: true)
113
+ *
114
+ * @param key - Rate limit bucket key
115
+ */
116
+ record(key: string): void;
117
+ /**
118
+ * Check and record in one step
119
+ *
120
+ * @param key - Rate limit bucket key
121
+ * @returns Rate limit check result (recorded if allowed)
122
+ */
123
+ consume(key: string): RateLimitResult;
124
+ /**
125
+ * Reset rate limit state for a specific key or all keys
126
+ *
127
+ * @param key - Optional key to reset (resets all if omitted)
128
+ */
129
+ reset(key?: string): void;
130
+ /**
131
+ * Get current configuration for a key
132
+ */
133
+ getConfig(key: string): RateLimitConfig | undefined;
134
+ /**
135
+ * Update configuration for a key
136
+ */
137
+ setConfig(key: string, config: RateLimitConfig): void;
138
+ }
139
+ /**
140
+ * Sanitize all params in a DomainRequest before routing
141
+ *
142
+ * Applies appropriate sanitization based on known field names:
143
+ * - taskId, parent, epicId -> sanitizeTaskId
144
+ * - path, file -> sanitizePath (if projectRoot provided)
145
+ * - title, description, notes, content -> sanitizeContent
146
+ * - status -> validateEnum(VALID_STATUSES)
147
+ * - priority -> validateEnum(VALID_PRIORITIES)
148
+ * - domain -> validateEnum(VALID_DOMAINS)
149
+ *
150
+ * @param params - Raw request parameters
151
+ * @param projectRoot - Project root for path sanitization
152
+ * @returns Sanitized parameters
153
+ * @throws SecurityError on validation failure
154
+ */
155
+ export declare function sanitizeParams(params: Record<string, unknown> | undefined, projectRoot?: string): Record<string, unknown> | undefined;
156
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IAG7B,IAAI,EAAE,MAAM;IACZ,KAAK,CAAC,EAAE,MAAM;gBAFrB,OAAO,EAAE,MAAM,EACR,IAAI,GAAE,MAA+B,EACrC,KAAK,CAAC,EAAE,MAAM,YAAA;CAKxB;AAsBD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAuCjD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA4DtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAmC,GAC7C,MAAM,CAmBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAoBR;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,wGAGhB,CAAC;AAEX,eAAO,MAAM,cAAc,wCAAyC,CAAC;AAErE,eAAO,MAAM,cAAc,mDAAoD,CAAC;AAEhF,eAAO,MAAM,gBAAgB,gDAAiD,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAI/D,CAAC;AAEF;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,OAAO,CAA2C;gBAE9C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAQrD;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAiCnC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMzB;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAUrC;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAQzB;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAInD;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;CAGtD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA8ErC"}