@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,347 @@
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
+ import { resolve, normalize, relative, isAbsolute } from 'path';
11
+ /**
12
+ * Security validation error thrown when input fails sanitization
13
+ */
14
+ export class SecurityError extends Error {
15
+ code;
16
+ field;
17
+ constructor(message, code = 'E_SECURITY_VIOLATION', field) {
18
+ super(message);
19
+ this.code = code;
20
+ this.field = field;
21
+ this.name = 'SecurityError';
22
+ }
23
+ }
24
+ /**
25
+ * Task ID pattern: T followed by one or more digits
26
+ */
27
+ const TASK_ID_PATTERN = /^T[0-9]+$/;
28
+ /**
29
+ * Maximum task ID numeric value (prevent absurdly large IDs)
30
+ */
31
+ const MAX_TASK_ID_NUMBER = 999999;
32
+ /**
33
+ * Control character pattern (C0 and C1 control chars, excluding newline/tab/cr)
34
+ */
35
+ const CONTROL_CHAR_PATTERN = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]/g;
36
+ /**
37
+ * Default maximum content length (64KB)
38
+ */
39
+ const DEFAULT_MAX_CONTENT_LENGTH = 64 * 1024;
40
+ /**
41
+ * Sanitize and validate a task ID
42
+ *
43
+ * Validates format: ^T[0-9]+$
44
+ * Rejects empty, malformed, or excessively large IDs
45
+ *
46
+ * @param id - Raw task ID input
47
+ * @returns Sanitized task ID
48
+ * @throws SecurityError if ID is invalid
49
+ */
50
+ export function sanitizeTaskId(id) {
51
+ if (typeof id !== 'string') {
52
+ throw new SecurityError('Task ID must be a string', 'E_INVALID_TASK_ID', 'taskId');
53
+ }
54
+ // Trim whitespace
55
+ const trimmed = id.trim();
56
+ if (trimmed.length === 0) {
57
+ throw new SecurityError('Task ID cannot be empty', 'E_INVALID_TASK_ID', 'taskId');
58
+ }
59
+ if (!TASK_ID_PATTERN.test(trimmed)) {
60
+ throw new SecurityError(`Invalid task ID format: "${trimmed}". Must match pattern T[0-9]+ (e.g., T123)`, 'E_INVALID_TASK_ID', 'taskId');
61
+ }
62
+ // Check numeric portion isn't absurdly large
63
+ const numericPart = parseInt(trimmed.slice(1), 10);
64
+ if (numericPart > MAX_TASK_ID_NUMBER) {
65
+ throw new SecurityError(`Task ID numeric value exceeds maximum (${MAX_TASK_ID_NUMBER}): ${trimmed}`, 'E_INVALID_TASK_ID', 'taskId');
66
+ }
67
+ return trimmed;
68
+ }
69
+ /**
70
+ * Sanitize and validate a file path
71
+ *
72
+ * Prevents path traversal attacks by ensuring the resolved path
73
+ * stays within the project root directory.
74
+ *
75
+ * @param path - Raw path input
76
+ * @param projectRoot - Project root directory (absolute path)
77
+ * @returns Sanitized absolute path within project root
78
+ * @throws SecurityError if path escapes project root or is invalid
79
+ */
80
+ export function sanitizePath(path, projectRoot) {
81
+ if (typeof path !== 'string') {
82
+ throw new SecurityError('Path must be a string', 'E_INVALID_PATH', 'path');
83
+ }
84
+ if (typeof projectRoot !== 'string' || projectRoot.length === 0) {
85
+ throw new SecurityError('Project root must be a non-empty string', 'E_INVALID_PATH', 'projectRoot');
86
+ }
87
+ const trimmedPath = path.trim();
88
+ if (trimmedPath.length === 0) {
89
+ throw new SecurityError('Path cannot be empty', 'E_INVALID_PATH', 'path');
90
+ }
91
+ // Check for null bytes (common injection vector)
92
+ if (trimmedPath.includes('\0')) {
93
+ throw new SecurityError('Path contains null bytes', 'E_PATH_TRAVERSAL', 'path');
94
+ }
95
+ // Normalize the project root
96
+ const normalizedRoot = resolve(projectRoot);
97
+ // Resolve the path relative to project root
98
+ let resolvedPath;
99
+ if (isAbsolute(trimmedPath)) {
100
+ resolvedPath = normalize(trimmedPath);
101
+ }
102
+ else {
103
+ resolvedPath = resolve(normalizedRoot, trimmedPath);
104
+ }
105
+ // Ensure the resolved path is within the project root
106
+ const relativePath = relative(normalizedRoot, resolvedPath);
107
+ // If relative path starts with '..' or is absolute, it escapes the root
108
+ if (relativePath.startsWith('..') || isAbsolute(relativePath)) {
109
+ throw new SecurityError(`Path traversal detected: "${path}" resolves outside project root`, 'E_PATH_TRAVERSAL', 'path');
110
+ }
111
+ return resolvedPath;
112
+ }
113
+ /**
114
+ * Sanitize content string
115
+ *
116
+ * Enforces size limits and strips control characters (except newline, tab, CR).
117
+ *
118
+ * @param content - Raw content string
119
+ * @param maxLength - Maximum allowed length (default: 64KB)
120
+ * @returns Sanitized content string
121
+ * @throws SecurityError if content exceeds size limit
122
+ */
123
+ export function sanitizeContent(content, maxLength = DEFAULT_MAX_CONTENT_LENGTH) {
124
+ if (typeof content !== 'string') {
125
+ throw new SecurityError('Content must be a string', 'E_INVALID_CONTENT', 'content');
126
+ }
127
+ if (content.length > maxLength) {
128
+ throw new SecurityError(`Content exceeds maximum length (${maxLength} characters): got ${content.length}`, 'E_CONTENT_TOO_LARGE', 'content');
129
+ }
130
+ // Strip control characters (preserve \n, \t, \r)
131
+ return content.replace(CONTROL_CHAR_PATTERN, '');
132
+ }
133
+ /**
134
+ * Validate that a value is in an allowed enum set
135
+ *
136
+ * @param value - Value to validate
137
+ * @param allowed - Array of allowed values
138
+ * @param fieldName - Name of the field (for error messages)
139
+ * @returns The validated value
140
+ * @throws SecurityError if value is not in allowed set
141
+ */
142
+ export function validateEnum(value, allowed, fieldName) {
143
+ if (typeof value !== 'string') {
144
+ throw new SecurityError(`${fieldName} must be a string`, 'E_INVALID_ENUM', fieldName);
145
+ }
146
+ const trimmed = value.trim();
147
+ if (!allowed.includes(trimmed)) {
148
+ throw new SecurityError(`Invalid ${fieldName}: "${trimmed}". Allowed values: ${allowed.join(', ')}`, 'E_INVALID_ENUM', fieldName);
149
+ }
150
+ return trimmed;
151
+ }
152
+ /**
153
+ * Known enum values for CLEO domains
154
+ */
155
+ export const VALID_DOMAINS = [
156
+ 'tasks', 'session', 'orchestrate', 'research',
157
+ 'lifecycle', 'validate', 'release', 'system',
158
+ ];
159
+ export const VALID_GATEWAYS = ['cleo_query', 'cleo_mutate'];
160
+ export const VALID_STATUSES = ['pending', 'active', 'blocked', 'done'];
161
+ export const VALID_PRIORITIES = ['low', 'medium', 'high', 'critical'];
162
+ /**
163
+ * Default rate limit configurations per operation type
164
+ */
165
+ export const DEFAULT_RATE_LIMITS = {
166
+ query: { maxRequests: 100, windowMs: 60_000 },
167
+ mutate: { maxRequests: 30, windowMs: 60_000 },
168
+ spawn: { maxRequests: 10, windowMs: 60_000 },
169
+ };
170
+ /**
171
+ * In-memory sliding window rate limiter
172
+ *
173
+ * Tracks request timestamps per key and enforces configurable limits.
174
+ */
175
+ export class RateLimiter {
176
+ windows = new Map();
177
+ configs = new Map();
178
+ constructor(configs) {
179
+ // Initialize with provided or default configs
180
+ const effectiveConfigs = configs ?? DEFAULT_RATE_LIMITS;
181
+ for (const [key, config] of Object.entries(effectiveConfigs)) {
182
+ this.configs.set(key, config);
183
+ }
184
+ }
185
+ /**
186
+ * Check if a request is allowed under rate limits
187
+ *
188
+ * @param key - Rate limit bucket key (e.g., 'query', 'mutate', 'spawn')
189
+ * @returns Rate limit check result
190
+ */
191
+ check(key) {
192
+ const config = this.configs.get(key);
193
+ if (!config) {
194
+ // No config for this key - allow by default
195
+ return { allowed: true, remaining: Infinity, resetMs: 0, limit: Infinity };
196
+ }
197
+ const now = Date.now();
198
+ const windowStart = now - config.windowMs;
199
+ // Get or create window
200
+ let timestamps = this.windows.get(key);
201
+ if (!timestamps) {
202
+ timestamps = [];
203
+ this.windows.set(key, timestamps);
204
+ }
205
+ // Prune expired timestamps
206
+ const validTimestamps = timestamps.filter(t => t > windowStart);
207
+ this.windows.set(key, validTimestamps);
208
+ const remaining = Math.max(0, config.maxRequests - validTimestamps.length);
209
+ const oldestInWindow = validTimestamps.length > 0 ? validTimestamps[0] : now;
210
+ const resetMs = Math.max(0, oldestInWindow + config.windowMs - now);
211
+ return {
212
+ allowed: validTimestamps.length < config.maxRequests,
213
+ remaining,
214
+ resetMs,
215
+ limit: config.maxRequests,
216
+ };
217
+ }
218
+ /**
219
+ * Record a request (call after check returns allowed: true)
220
+ *
221
+ * @param key - Rate limit bucket key
222
+ */
223
+ record(key) {
224
+ const timestamps = this.windows.get(key) ?? [];
225
+ timestamps.push(Date.now());
226
+ this.windows.set(key, timestamps);
227
+ }
228
+ /**
229
+ * Check and record in one step
230
+ *
231
+ * @param key - Rate limit bucket key
232
+ * @returns Rate limit check result (recorded if allowed)
233
+ */
234
+ consume(key) {
235
+ const result = this.check(key);
236
+ if (result.allowed) {
237
+ this.record(key);
238
+ // Adjust remaining after recording
239
+ result.remaining = Math.max(0, result.remaining - 1);
240
+ }
241
+ return result;
242
+ }
243
+ /**
244
+ * Reset rate limit state for a specific key or all keys
245
+ *
246
+ * @param key - Optional key to reset (resets all if omitted)
247
+ */
248
+ reset(key) {
249
+ if (key) {
250
+ this.windows.delete(key);
251
+ }
252
+ else {
253
+ this.windows.clear();
254
+ }
255
+ }
256
+ /**
257
+ * Get current configuration for a key
258
+ */
259
+ getConfig(key) {
260
+ return this.configs.get(key);
261
+ }
262
+ /**
263
+ * Update configuration for a key
264
+ */
265
+ setConfig(key, config) {
266
+ this.configs.set(key, config);
267
+ }
268
+ }
269
+ /**
270
+ * Sanitize all params in a DomainRequest before routing
271
+ *
272
+ * Applies appropriate sanitization based on known field names:
273
+ * - taskId, parent, epicId -> sanitizeTaskId
274
+ * - path, file -> sanitizePath (if projectRoot provided)
275
+ * - title, description, notes, content -> sanitizeContent
276
+ * - status -> validateEnum(VALID_STATUSES)
277
+ * - priority -> validateEnum(VALID_PRIORITIES)
278
+ * - domain -> validateEnum(VALID_DOMAINS)
279
+ *
280
+ * @param params - Raw request parameters
281
+ * @param projectRoot - Project root for path sanitization
282
+ * @returns Sanitized parameters
283
+ * @throws SecurityError on validation failure
284
+ */
285
+ export function sanitizeParams(params, projectRoot) {
286
+ if (!params) {
287
+ return params;
288
+ }
289
+ const sanitized = { ...params };
290
+ for (const [key, value] of Object.entries(sanitized)) {
291
+ if (value === undefined || value === null) {
292
+ continue;
293
+ }
294
+ // Task ID fields
295
+ if (typeof value === 'string' &&
296
+ (key === 'taskId' || key === 'parent' || key === 'epicId')) {
297
+ sanitized[key] = sanitizeTaskId(value);
298
+ continue;
299
+ }
300
+ // Task ID arrays (depends)
301
+ if (key === 'depends' && Array.isArray(value)) {
302
+ sanitized[key] = value.map((v) => {
303
+ if (typeof v === 'string') {
304
+ return sanitizeTaskId(v);
305
+ }
306
+ return v;
307
+ });
308
+ continue;
309
+ }
310
+ // Path fields
311
+ if (typeof value === 'string' &&
312
+ (key === 'path' || key === 'file') &&
313
+ projectRoot) {
314
+ sanitized[key] = sanitizePath(value, projectRoot);
315
+ continue;
316
+ }
317
+ // Content fields (with size limits)
318
+ if (typeof value === 'string' &&
319
+ (key === 'title' || key === 'description' || key === 'content')) {
320
+ const maxLen = key === 'title' ? 200 : DEFAULT_MAX_CONTENT_LENGTH;
321
+ sanitized[key] = sanitizeContent(value, maxLen);
322
+ continue;
323
+ }
324
+ // Notes can be string or array of strings
325
+ if (key === 'notes') {
326
+ if (typeof value === 'string') {
327
+ sanitized[key] = sanitizeContent(value);
328
+ }
329
+ else if (Array.isArray(value)) {
330
+ sanitized[key] = value.map((v) => typeof v === 'string' ? sanitizeContent(v) : v);
331
+ }
332
+ continue;
333
+ }
334
+ // Status enum
335
+ if (typeof value === 'string' && key === 'status') {
336
+ sanitized[key] = validateEnum(value, [...VALID_STATUSES], 'status');
337
+ continue;
338
+ }
339
+ // Priority enum
340
+ if (typeof value === 'string' && key === 'priority') {
341
+ sanitized[key] = validateEnum(value, [...VALID_PRIORITIES], 'priority');
342
+ continue;
343
+ }
344
+ }
345
+ return sanitized;
346
+ }
347
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Verification Gate System for CLEO MCP Server
3
+ *
4
+ * @task T2936
5
+ * @epic T2908
6
+ *
7
+ * Implements 4-layer validation gate system:
8
+ * Layer 1: Schema Validation (JSON Schema compliance)
9
+ * Layer 2: Semantic Validation (Business rules)
10
+ * Layer 3: Referential Validation (Cross-entity integrity)
11
+ * Layer 4: Protocol Validation (RCSD-IVTR lifecycle)
12
+ *
13
+ * Reference: docs/specs/MCP-SERVER-SPECIFICATION.md Section 7
14
+ */
15
+ import { ExitCode, ErrorCategory, ErrorSeverity } from './exit-codes.js';
16
+ import { ProtocolType } from './protocol-enforcement.js';
17
+ /**
18
+ * Gate layer enumeration
19
+ */
20
+ export declare enum GateLayer {
21
+ SCHEMA = 1,
22
+ SEMANTIC = 2,
23
+ REFERENTIAL = 3,
24
+ PROTOCOL = 4
25
+ }
26
+ /**
27
+ * Gate status for each layer
28
+ */
29
+ export declare enum GateStatus {
30
+ PENDING = "pending",
31
+ PASSED = "passed",
32
+ FAILED = "failed",
33
+ BLOCKED = "blocked",
34
+ SKIPPED = "skipped"
35
+ }
36
+ /**
37
+ * Violation detail for a specific gate layer
38
+ */
39
+ export interface GateViolation {
40
+ layer: GateLayer;
41
+ severity: ErrorSeverity;
42
+ code: string;
43
+ message: string;
44
+ field?: string;
45
+ value?: unknown;
46
+ constraint?: string;
47
+ fix?: string;
48
+ }
49
+ /**
50
+ * Result from a single gate layer validation
51
+ */
52
+ export interface LayerResult {
53
+ layer: GateLayer;
54
+ status: GateStatus;
55
+ passed: boolean;
56
+ violations: GateViolation[];
57
+ duration_ms: number;
58
+ }
59
+ /**
60
+ * Complete verification result across all 4 layers
61
+ */
62
+ export interface VerificationResult {
63
+ passed: boolean;
64
+ layers: Record<GateLayer, LayerResult>;
65
+ totalViolations: number;
66
+ exitCode: ExitCode;
67
+ category: ErrorCategory;
68
+ summary: string;
69
+ blockedAt?: GateLayer;
70
+ }
71
+ /**
72
+ * Operation context for gate validation
73
+ */
74
+ export interface OperationContext {
75
+ domain: string;
76
+ operation: string;
77
+ gateway: 'cleo_query' | 'cleo_mutate';
78
+ params?: Record<string, unknown>;
79
+ taskId?: string;
80
+ protocolType?: ProtocolType;
81
+ }
82
+ /**
83
+ * Main Verification Gate class
84
+ *
85
+ * Orchestrates 4-layer validation and determines pass/fail status.
86
+ * Each layer must pass before proceeding to the next.
87
+ */
88
+ export declare class VerificationGate {
89
+ private protocolEnforcer;
90
+ private strictMode;
91
+ constructor(strictMode?: boolean);
92
+ /**
93
+ * Execute all 4 gate layers sequentially
94
+ *
95
+ * Stops at first failure unless in advisory mode.
96
+ */
97
+ verifyOperation(context: OperationContext): Promise<VerificationResult>;
98
+ /**
99
+ * Run a single validation layer with timing
100
+ */
101
+ private runLayer;
102
+ /**
103
+ * Build success result when all gates pass
104
+ */
105
+ private buildSuccessResult;
106
+ /**
107
+ * Build failure result when a gate fails
108
+ */
109
+ private buildFailureResult;
110
+ /**
111
+ * Determine semantic layer exit code from violations
112
+ */
113
+ private determineSemanticExitCode;
114
+ /**
115
+ * Determine referential layer exit code from violations
116
+ */
117
+ private determineReferentialExitCode;
118
+ /**
119
+ * Determine protocol layer exit code from violations
120
+ */
121
+ private determineProtocolExitCode;
122
+ /**
123
+ * Check if an operation requires gate validation
124
+ *
125
+ * All mutate operations require validation.
126
+ * Query operations skip validation for performance.
127
+ */
128
+ static requiresValidation(context: OperationContext): boolean;
129
+ /**
130
+ * Get human-readable layer name
131
+ */
132
+ static getLayerName(layer: GateLayer): string;
133
+ }
134
+ /**
135
+ * Factory function for creating verification gates
136
+ */
137
+ export declare function createVerificationGate(strictMode?: boolean): VerificationGate;
138
+ /**
139
+ * Export gate layer sequence for external use
140
+ */
141
+ export declare const GATE_SEQUENCE: readonly [GateLayer.SCHEMA, GateLayer.SEMANTIC, GateLayer.REFERENTIAL, GateLayer.PROTOCOL];
142
+ /**
143
+ * Workflow gate names per MCP-SERVER-SPECIFICATION.md Section 7.1
144
+ *
145
+ * Sequence: implemented → testsPassed → qaPassed → cleanupDone → securityPassed → documented
146
+ *
147
+ * @task T3141
148
+ */
149
+ export declare enum WorkflowGateName {
150
+ IMPLEMENTED = "implemented",
151
+ TESTS_PASSED = "testsPassed",
152
+ QA_PASSED = "qaPassed",
153
+ CLEANUP_DONE = "cleanupDone",
154
+ SECURITY_PASSED = "securityPassed",
155
+ DOCUMENTED = "documented"
156
+ }
157
+ /**
158
+ * Workflow gate status values per Section 7.3
159
+ *
160
+ * - null: Not yet attempted
161
+ * - passed: Gate passed successfully
162
+ * - failed: Gate failed (blocks downstream)
163
+ * - blocked: Cannot attempt (dependencies not met)
164
+ */
165
+ export type WorkflowGateStatus = null | 'passed' | 'failed' | 'blocked';
166
+ /**
167
+ * Agent responsible for each gate per Section 7.2
168
+ */
169
+ export type WorkflowGateAgent = 'coder' | 'testing' | 'qa' | 'cleanup' | 'security' | 'docs';
170
+ /**
171
+ * Individual workflow gate definition per Section 7.2
172
+ */
173
+ export interface WorkflowGateDefinition {
174
+ name: WorkflowGateName;
175
+ agent: WorkflowGateAgent;
176
+ dependsOn: WorkflowGateName[];
177
+ description: string;
178
+ }
179
+ /**
180
+ * State of a single workflow gate
181
+ */
182
+ export interface WorkflowGateState {
183
+ name: WorkflowGateName;
184
+ status: WorkflowGateStatus;
185
+ agent: WorkflowGateAgent;
186
+ updatedAt: string | null;
187
+ failureReason?: string;
188
+ }
189
+ /**
190
+ * Complete workflow gate definitions per Section 7.2
191
+ */
192
+ export declare const WORKFLOW_GATE_DEFINITIONS: WorkflowGateDefinition[];
193
+ /**
194
+ * Ordered workflow gate sequence per Section 7.1
195
+ */
196
+ export declare const WORKFLOW_GATE_SEQUENCE: WorkflowGateName[];
197
+ /**
198
+ * WorkflowGateTracker
199
+ *
200
+ * Tracks the status of all 6 workflow verification gates for a task.
201
+ * Implements Section 7.4 failure cascade behavior: when a gate fails,
202
+ * all downstream gates reset to null.
203
+ *
204
+ * @task T3141
205
+ */
206
+ export declare class WorkflowGateTracker {
207
+ private gates;
208
+ constructor();
209
+ /**
210
+ * Get the status of a specific gate
211
+ */
212
+ getGateStatus(gateName: WorkflowGateName): WorkflowGateStatus;
213
+ /**
214
+ * Get the full state of a specific gate
215
+ */
216
+ getGateState(gateName: WorkflowGateName): WorkflowGateState | undefined;
217
+ /**
218
+ * Get all gate states
219
+ */
220
+ getAllGates(): WorkflowGateState[];
221
+ /**
222
+ * Check if a gate can be attempted (all dependencies passed)
223
+ */
224
+ canAttempt(gateName: WorkflowGateName): boolean;
225
+ /**
226
+ * Mark a gate as passed.
227
+ *
228
+ * Returns false if the gate cannot be attempted (dependencies not met).
229
+ */
230
+ passGate(gateName: WorkflowGateName, agent?: string): boolean;
231
+ /**
232
+ * Mark a gate as failed.
233
+ *
234
+ * Per Section 7.4: When a gate fails, all downstream gates reset to null.
235
+ */
236
+ failGate(gateName: WorkflowGateName, reason?: string): boolean;
237
+ /**
238
+ * Reset a gate and all downstream gates to null.
239
+ *
240
+ * Used for failure cascade per Section 7.4.
241
+ */
242
+ private cascadeReset;
243
+ /**
244
+ * Update blocked status for all gates based on current state.
245
+ *
246
+ * A gate is blocked if it hasn't been attempted (null) and its
247
+ * dependencies are not all passed.
248
+ */
249
+ updateBlockedStatus(): void;
250
+ /**
251
+ * Check if all gates have passed
252
+ */
253
+ allPassed(): boolean;
254
+ /**
255
+ * Get all gates that are currently blocked or have null status
256
+ */
257
+ getPendingGates(): WorkflowGateState[];
258
+ /**
259
+ * Get the next gate that can be attempted
260
+ */
261
+ getNextAttemptable(): WorkflowGateName | null;
262
+ /**
263
+ * Get downstream gates of a given gate (not including the gate itself)
264
+ */
265
+ getDownstreamGates(gateName: WorkflowGateName): WorkflowGateName[];
266
+ /**
267
+ * Serialize gate states to a plain record
268
+ */
269
+ toRecord(): Record<string, WorkflowGateStatus>;
270
+ /**
271
+ * Restore gate states from a record
272
+ */
273
+ fromRecord(record: Record<string, WorkflowGateStatus>): void;
274
+ /**
275
+ * Check if a gate name is valid
276
+ */
277
+ private isValidGate;
278
+ }
279
+ /**
280
+ * Validate a workflow gate name string
281
+ */
282
+ export declare function isValidWorkflowGateName(name: string): name is WorkflowGateName;
283
+ /**
284
+ * Get the definition for a workflow gate
285
+ */
286
+ export declare function getWorkflowGateDefinition(name: WorkflowGateName): WorkflowGateDefinition | undefined;
287
+ //# sourceMappingURL=verification-gates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-gates.d.ts","sourceRoot":"","sources":["../../src/lib/verification-gates.ts"],"names":[],"mappings":"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"}