@aquex/cmos-mcp 1.0.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 (854) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/LICENSE +15 -0
  3. package/README.md +250 -0
  4. package/cmos-seed/README.md +153 -0
  5. package/cmos-seed/context/master_context.json +27 -0
  6. package/cmos-seed/context/project_context.json +12 -0
  7. package/cmos-seed/db/schema.sql +334 -0
  8. package/cmos-seed/docs/README.md +128 -0
  9. package/cmos-seed/docs/agents-md-guide.md +253 -0
  10. package/cmos-seed/docs/build-session-prompt.md +137 -0
  11. package/cmos-seed/docs/getting-started.md +150 -0
  12. package/cmos-seed/docs/session-management-guide.md +163 -0
  13. package/cmos-seed/docs/sqlite-schema-reference.md +188 -0
  14. package/cmos-seed/foundational-docs/roadmap_template.md +365 -0
  15. package/cmos-seed/foundational-docs/tech_arch_template.md +331 -0
  16. package/cmos-seed/templates/PROJECT-README-template.md +110 -0
  17. package/cmos-seed/templates/agents.md +306 -0
  18. package/cmos-seed/tiers/build.md +110 -0
  19. package/cmos-seed/tiers/general.md +112 -0
  20. package/cmos-seed/tiers/managed.md +118 -0
  21. package/dist/.build-manifest.json +5 -0
  22. package/dist/auth/auth-state.d.ts +96 -0
  23. package/dist/auth/auth-state.d.ts.map +1 -0
  24. package/dist/auth/auth-state.js +115 -0
  25. package/dist/auth/auth-state.js.map +1 -0
  26. package/dist/auth/delivery-ack-cache.d.ts +27 -0
  27. package/dist/auth/delivery-ack-cache.d.ts.map +1 -0
  28. package/dist/auth/delivery-ack-cache.js +21 -0
  29. package/dist/auth/delivery-ack-cache.js.map +1 -0
  30. package/dist/auth/device-code.d.ts +136 -0
  31. package/dist/auth/device-code.d.ts.map +1 -0
  32. package/dist/auth/device-code.js +334 -0
  33. package/dist/auth/device-code.js.map +1 -0
  34. package/dist/auth/project-key-capture.d.ts +124 -0
  35. package/dist/auth/project-key-capture.d.ts.map +1 -0
  36. package/dist/auth/project-key-capture.js +218 -0
  37. package/dist/auth/project-key-capture.js.map +1 -0
  38. package/dist/combination/dependency-resolver.d.ts +69 -0
  39. package/dist/combination/dependency-resolver.d.ts.map +1 -0
  40. package/dist/combination/dependency-resolver.js +303 -0
  41. package/dist/combination/dependency-resolver.js.map +1 -0
  42. package/dist/combination/merge-strategies.d.ts +87 -0
  43. package/dist/combination/merge-strategies.d.ts.map +1 -0
  44. package/dist/combination/merge-strategies.js +210 -0
  45. package/dist/combination/merge-strategies.js.map +1 -0
  46. package/dist/combination/pack-combiner.d.ts +84 -0
  47. package/dist/combination/pack-combiner.d.ts.map +1 -0
  48. package/dist/combination/pack-combiner.js +288 -0
  49. package/dist/combination/pack-combiner.js.map +1 -0
  50. package/dist/combination/types.d.ts +112 -0
  51. package/dist/combination/types.d.ts.map +1 -0
  52. package/dist/combination/types.js +39 -0
  53. package/dist/combination/types.js.map +1 -0
  54. package/dist/domains/domain-pack-loader.d.ts +148 -0
  55. package/dist/domains/domain-pack-loader.d.ts.map +1 -0
  56. package/dist/domains/domain-pack-loader.js +501 -0
  57. package/dist/domains/domain-pack-loader.js.map +1 -0
  58. package/dist/domains/types.d.ts +64 -0
  59. package/dist/domains/types.d.ts.map +1 -0
  60. package/dist/domains/types.js +10 -0
  61. package/dist/domains/types.js.map +1 -0
  62. package/dist/errors/config-error.d.ts +13 -0
  63. package/dist/errors/config-error.d.ts.map +1 -0
  64. package/dist/errors/config-error.js +19 -0
  65. package/dist/errors/config-error.js.map +1 -0
  66. package/dist/errors/domain-error.d.ts +13 -0
  67. package/dist/errors/domain-error.d.ts.map +1 -0
  68. package/dist/errors/domain-error.js +19 -0
  69. package/dist/errors/domain-error.js.map +1 -0
  70. package/dist/errors/handler.d.ts +30 -0
  71. package/dist/errors/handler.d.ts.map +1 -0
  72. package/dist/errors/handler.js +63 -0
  73. package/dist/errors/handler.js.map +1 -0
  74. package/dist/errors/index.d.ts +9 -0
  75. package/dist/errors/index.d.ts.map +1 -0
  76. package/dist/errors/index.js +25 -0
  77. package/dist/errors/index.js.map +1 -0
  78. package/dist/errors/io-error.d.ts +13 -0
  79. package/dist/errors/io-error.d.ts.map +1 -0
  80. package/dist/errors/io-error.js +19 -0
  81. package/dist/errors/io-error.js.map +1 -0
  82. package/dist/errors/logger.d.ts +21 -0
  83. package/dist/errors/logger.d.ts.map +1 -0
  84. package/dist/errors/logger.js +88 -0
  85. package/dist/errors/logger.js.map +1 -0
  86. package/dist/errors/mission-error.d.ts +27 -0
  87. package/dist/errors/mission-error.d.ts.map +1 -0
  88. package/dist/errors/mission-error.js +76 -0
  89. package/dist/errors/mission-error.js.map +1 -0
  90. package/dist/errors/types.d.ts +52 -0
  91. package/dist/errors/types.d.ts.map +1 -0
  92. package/dist/errors/types.js +3 -0
  93. package/dist/errors/types.js.map +1 -0
  94. package/dist/errors/utils.d.ts +24 -0
  95. package/dist/errors/utils.d.ts.map +1 -0
  96. package/dist/errors/utils.js +64 -0
  97. package/dist/errors/utils.js.map +1 -0
  98. package/dist/errors/validation-error.d.ts +13 -0
  99. package/dist/errors/validation-error.d.ts.map +1 -0
  100. package/dist/errors/validation-error.js +19 -0
  101. package/dist/errors/validation-error.js.map +1 -0
  102. package/dist/extraction/template-extractor.d.ts +59 -0
  103. package/dist/extraction/template-extractor.d.ts.map +1 -0
  104. package/dist/extraction/template-extractor.js +553 -0
  105. package/dist/extraction/template-extractor.js.map +1 -0
  106. package/dist/extraction/types.d.ts +160 -0
  107. package/dist/extraction/types.d.ts.map +1 -0
  108. package/dist/extraction/types.js +7 -0
  109. package/dist/extraction/types.js.map +1 -0
  110. package/dist/http-server.d.ts +18 -0
  111. package/dist/http-server.d.ts.map +1 -0
  112. package/dist/http-server.js +326 -0
  113. package/dist/http-server.js.map +1 -0
  114. package/dist/import-export/hybrid-template-parser.d.ts +44 -0
  115. package/dist/import-export/hybrid-template-parser.d.ts.map +1 -0
  116. package/dist/import-export/hybrid-template-parser.js +373 -0
  117. package/dist/import-export/hybrid-template-parser.js.map +1 -0
  118. package/dist/import-export/security-validator.d.ts +93 -0
  119. package/dist/import-export/security-validator.d.ts.map +1 -0
  120. package/dist/import-export/security-validator.js +441 -0
  121. package/dist/import-export/security-validator.js.map +1 -0
  122. package/dist/import-export/template-exporter.d.ts +106 -0
  123. package/dist/import-export/template-exporter.d.ts.map +1 -0
  124. package/dist/import-export/template-exporter.js +247 -0
  125. package/dist/import-export/template-exporter.js.map +1 -0
  126. package/dist/import-export/template-importer.d.ts +97 -0
  127. package/dist/import-export/template-importer.d.ts.map +1 -0
  128. package/dist/import-export/template-importer.js +308 -0
  129. package/dist/import-export/template-importer.js.map +1 -0
  130. package/dist/import-export/types.d.ts +118 -0
  131. package/dist/import-export/types.d.ts.map +1 -0
  132. package/dist/import-export/types.js +41 -0
  133. package/dist/import-export/types.js.map +1 -0
  134. package/dist/index.d.ts +157 -0
  135. package/dist/index.d.ts.map +1 -0
  136. package/dist/index.js +972 -0
  137. package/dist/index.js.map +1 -0
  138. package/dist/intelligence/agentic-controller.d.ts +345 -0
  139. package/dist/intelligence/agentic-controller.d.ts.map +1 -0
  140. package/dist/intelligence/agentic-controller.js +1376 -0
  141. package/dist/intelligence/agentic-controller.js.map +1 -0
  142. package/dist/intelligence/agentic-observability.d.ts +43 -0
  143. package/dist/intelligence/agentic-observability.d.ts.map +1 -0
  144. package/dist/intelligence/agentic-observability.js +62 -0
  145. package/dist/intelligence/agentic-observability.js.map +1 -0
  146. package/dist/intelligence/agents-md-loader.d.ts +81 -0
  147. package/dist/intelligence/agents-md-loader.d.ts.map +1 -0
  148. package/dist/intelligence/agents-md-loader.js +298 -0
  149. package/dist/intelligence/agents-md-loader.js.map +1 -0
  150. package/dist/intelligence/attribution-verification.d.ts +58 -0
  151. package/dist/intelligence/attribution-verification.d.ts.map +1 -0
  152. package/dist/intelligence/attribution-verification.js +133 -0
  153. package/dist/intelligence/attribution-verification.js.map +1 -0
  154. package/dist/intelligence/boomerang-workflow.d.ts +87 -0
  155. package/dist/intelligence/boomerang-workflow.d.ts.map +1 -0
  156. package/dist/intelligence/boomerang-workflow.js +311 -0
  157. package/dist/intelligence/boomerang-workflow.js.map +1 -0
  158. package/dist/intelligence/cmos-detector.d.ts +42 -0
  159. package/dist/intelligence/cmos-detector.d.ts.map +1 -0
  160. package/dist/intelligence/cmos-detector.js +94 -0
  161. package/dist/intelligence/cmos-detector.js.map +1 -0
  162. package/dist/intelligence/cmos-sync.d.ts +101 -0
  163. package/dist/intelligence/cmos-sync.d.ts.map +1 -0
  164. package/dist/intelligence/cmos-sync.js +435 -0
  165. package/dist/intelligence/cmos-sync.js.map +1 -0
  166. package/dist/intelligence/complexity-scorer.d.ts +111 -0
  167. package/dist/intelligence/complexity-scorer.d.ts.map +1 -0
  168. package/dist/intelligence/complexity-scorer.js +299 -0
  169. package/dist/intelligence/complexity-scorer.js.map +1 -0
  170. package/dist/intelligence/compression-rules.d.ts +62 -0
  171. package/dist/intelligence/compression-rules.d.ts.map +1 -0
  172. package/dist/intelligence/compression-rules.js +303 -0
  173. package/dist/intelligence/compression-rules.js.map +1 -0
  174. package/dist/intelligence/content-sanitizer.d.ts +61 -0
  175. package/dist/intelligence/content-sanitizer.d.ts.map +1 -0
  176. package/dist/intelligence/content-sanitizer.js +170 -0
  177. package/dist/intelligence/content-sanitizer.js.map +1 -0
  178. package/dist/intelligence/context-propagator-v2.d.ts +23 -0
  179. package/dist/intelligence/context-propagator-v2.d.ts.map +1 -0
  180. package/dist/intelligence/context-propagator-v2.js +37 -0
  181. package/dist/intelligence/context-propagator-v2.js.map +1 -0
  182. package/dist/intelligence/context-propagator-v3.d.ts +46 -0
  183. package/dist/intelligence/context-propagator-v3.d.ts.map +1 -0
  184. package/dist/intelligence/context-propagator-v3.js +266 -0
  185. package/dist/intelligence/context-propagator-v3.js.map +1 -0
  186. package/dist/intelligence/context-propagator.d.ts +108 -0
  187. package/dist/intelligence/context-propagator.d.ts.map +1 -0
  188. package/dist/intelligence/context-propagator.js +283 -0
  189. package/dist/intelligence/context-propagator.js.map +1 -0
  190. package/dist/intelligence/context-windows.d.ts +5 -0
  191. package/dist/intelligence/context-windows.d.ts.map +1 -0
  192. package/dist/intelligence/context-windows.js +18 -0
  193. package/dist/intelligence/context-windows.js.map +1 -0
  194. package/dist/intelligence/credential-store.d.ts +145 -0
  195. package/dist/intelligence/credential-store.d.ts.map +1 -0
  196. package/dist/intelligence/credential-store.js +243 -0
  197. package/dist/intelligence/credential-store.js.map +1 -0
  198. package/dist/intelligence/dependency-analyzer.d.ts +117 -0
  199. package/dist/intelligence/dependency-analyzer.d.ts.map +1 -0
  200. package/dist/intelligence/dependency-analyzer.js +398 -0
  201. package/dist/intelligence/dependency-analyzer.js.map +1 -0
  202. package/dist/intelligence/dependency-inferrer.d.ts +68 -0
  203. package/dist/intelligence/dependency-inferrer.d.ts.map +1 -0
  204. package/dist/intelligence/dependency-inferrer.js +281 -0
  205. package/dist/intelligence/dependency-inferrer.js.map +1 -0
  206. package/dist/intelligence/enhanced-dependency-analyzer.d.ts +25 -0
  207. package/dist/intelligence/enhanced-dependency-analyzer.d.ts.map +1 -0
  208. package/dist/intelligence/enhanced-dependency-analyzer.js +207 -0
  209. package/dist/intelligence/enhanced-dependency-analyzer.js.map +1 -0
  210. package/dist/intelligence/graph-validator.d.ts +61 -0
  211. package/dist/intelligence/graph-validator.d.ts.map +1 -0
  212. package/dist/intelligence/graph-validator.js +212 -0
  213. package/dist/intelligence/graph-validator.js.map +1 -0
  214. package/dist/intelligence/lifecycle-analyzer.d.ts +64 -0
  215. package/dist/intelligence/lifecycle-analyzer.d.ts.map +1 -0
  216. package/dist/intelligence/lifecycle-analyzer.js +587 -0
  217. package/dist/intelligence/lifecycle-analyzer.js.map +1 -0
  218. package/dist/intelligence/mission-history.d.ts +56 -0
  219. package/dist/intelligence/mission-history.d.ts.map +1 -0
  220. package/dist/intelligence/mission-history.js +145 -0
  221. package/dist/intelligence/mission-history.js.map +1 -0
  222. package/dist/intelligence/mission-outcome-analytics.d.ts +84 -0
  223. package/dist/intelligence/mission-outcome-analytics.d.ts.map +1 -0
  224. package/dist/intelligence/mission-outcome-analytics.js +499 -0
  225. package/dist/intelligence/mission-outcome-analytics.js.map +1 -0
  226. package/dist/intelligence/mission-splitter.d.ts +148 -0
  227. package/dist/intelligence/mission-splitter.d.ts.map +1 -0
  228. package/dist/intelligence/mission-splitter.js +461 -0
  229. package/dist/intelligence/mission-splitter.js.map +1 -0
  230. package/dist/intelligence/model-transpilers.d.ts +59 -0
  231. package/dist/intelligence/model-transpilers.d.ts.map +1 -0
  232. package/dist/intelligence/model-transpilers.js +185 -0
  233. package/dist/intelligence/model-transpilers.js.map +1 -0
  234. package/dist/intelligence/project-registry.d.ts +265 -0
  235. package/dist/intelligence/project-registry.d.ts.map +1 -0
  236. package/dist/intelligence/project-registry.js +484 -0
  237. package/dist/intelligence/project-registry.js.map +1 -0
  238. package/dist/intelligence/rsip-loop.d.ts +52 -0
  239. package/dist/intelligence/rsip-loop.d.ts.map +1 -0
  240. package/dist/intelligence/rsip-loop.js +139 -0
  241. package/dist/intelligence/rsip-loop.js.map +1 -0
  242. package/dist/intelligence/sender-context.d.ts +114 -0
  243. package/dist/intelligence/sender-context.d.ts.map +1 -0
  244. package/dist/intelligence/sender-context.js +275 -0
  245. package/dist/intelligence/sender-context.js.map +1 -0
  246. package/dist/intelligence/sqlite-client.d.ts +144 -0
  247. package/dist/intelligence/sqlite-client.d.ts.map +1 -0
  248. package/dist/intelligence/sqlite-client.js +568 -0
  249. package/dist/intelligence/sqlite-client.js.map +1 -0
  250. package/dist/intelligence/telemetry.d.ts +44 -0
  251. package/dist/intelligence/telemetry.d.ts.map +1 -0
  252. package/dist/intelligence/telemetry.js +106 -0
  253. package/dist/intelligence/telemetry.js.map +1 -0
  254. package/dist/intelligence/token-counters.d.ts +69 -0
  255. package/dist/intelligence/token-counters.d.ts.map +1 -0
  256. package/dist/intelligence/token-counters.js +197 -0
  257. package/dist/intelligence/token-counters.js.map +1 -0
  258. package/dist/intelligence/token-optimizer.d.ts +52 -0
  259. package/dist/intelligence/token-optimizer.d.ts.map +1 -0
  260. package/dist/intelligence/token-optimizer.js +205 -0
  261. package/dist/intelligence/token-optimizer.js.map +1 -0
  262. package/dist/intelligence/tokenizer-bootstrap.d.ts +54 -0
  263. package/dist/intelligence/tokenizer-bootstrap.d.ts.map +1 -0
  264. package/dist/intelligence/tokenizer-bootstrap.js +238 -0
  265. package/dist/intelligence/tokenizer-bootstrap.js.map +1 -0
  266. package/dist/intelligence/types.d.ts +117 -0
  267. package/dist/intelligence/types.d.ts.map +1 -0
  268. package/dist/intelligence/types.js +8 -0
  269. package/dist/intelligence/types.js.map +1 -0
  270. package/dist/intelligence/worker-manifest-loader.d.ts +70 -0
  271. package/dist/intelligence/worker-manifest-loader.d.ts.map +1 -0
  272. package/dist/intelligence/worker-manifest-loader.js +387 -0
  273. package/dist/intelligence/worker-manifest-loader.js.map +1 -0
  274. package/dist/loaders/yaml-loader.d.ts +99 -0
  275. package/dist/loaders/yaml-loader.d.ts.map +1 -0
  276. package/dist/loaders/yaml-loader.js +236 -0
  277. package/dist/loaders/yaml-loader.js.map +1 -0
  278. package/dist/merge/deep-merge.d.ts +93 -0
  279. package/dist/merge/deep-merge.d.ts.map +1 -0
  280. package/dist/merge/deep-merge.js +168 -0
  281. package/dist/merge/deep-merge.js.map +1 -0
  282. package/dist/quality/analyzers/ai-readiness-analyzer.d.ts +35 -0
  283. package/dist/quality/analyzers/ai-readiness-analyzer.d.ts.map +1 -0
  284. package/dist/quality/analyzers/ai-readiness-analyzer.js +357 -0
  285. package/dist/quality/analyzers/ai-readiness-analyzer.js.map +1 -0
  286. package/dist/quality/analyzers/clarity-analyzer.d.ts +52 -0
  287. package/dist/quality/analyzers/clarity-analyzer.d.ts.map +1 -0
  288. package/dist/quality/analyzers/clarity-analyzer.js +405 -0
  289. package/dist/quality/analyzers/clarity-analyzer.js.map +1 -0
  290. package/dist/quality/analyzers/completeness-analyzer.d.ts +45 -0
  291. package/dist/quality/analyzers/completeness-analyzer.d.ts.map +1 -0
  292. package/dist/quality/analyzers/completeness-analyzer.js +331 -0
  293. package/dist/quality/analyzers/completeness-analyzer.js.map +1 -0
  294. package/dist/quality/improvement-engine.d.ts +37 -0
  295. package/dist/quality/improvement-engine.d.ts.map +1 -0
  296. package/dist/quality/improvement-engine.js +260 -0
  297. package/dist/quality/improvement-engine.js.map +1 -0
  298. package/dist/quality/quality-scorer.d.ts +36 -0
  299. package/dist/quality/quality-scorer.d.ts.map +1 -0
  300. package/dist/quality/quality-scorer.js +95 -0
  301. package/dist/quality/quality-scorer.js.map +1 -0
  302. package/dist/quality/types.d.ts +92 -0
  303. package/dist/quality/types.d.ts.map +1 -0
  304. package/dist/quality/types.js +33 -0
  305. package/dist/quality/types.js.map +1 -0
  306. package/dist/registry/registry-parser.d.ts +59 -0
  307. package/dist/registry/registry-parser.d.ts.map +1 -0
  308. package/dist/registry/registry-parser.js +161 -0
  309. package/dist/registry/registry-parser.js.map +1 -0
  310. package/dist/registry/semver-validator.d.ts +48 -0
  311. package/dist/registry/semver-validator.d.ts.map +1 -0
  312. package/dist/registry/semver-validator.js +115 -0
  313. package/dist/registry/semver-validator.js.map +1 -0
  314. package/dist/schemas/generic-mission.d.ts +120 -0
  315. package/dist/schemas/generic-mission.d.ts.map +1 -0
  316. package/dist/schemas/generic-mission.js +118 -0
  317. package/dist/schemas/generic-mission.js.map +1 -0
  318. package/dist/security/workspace-guard.d.ts +10 -0
  319. package/dist/security/workspace-guard.d.ts.map +1 -0
  320. package/dist/security/workspace-guard.js +116 -0
  321. package/dist/security/workspace-guard.js.map +1 -0
  322. package/dist/server-health.d.ts +73 -0
  323. package/dist/server-health.d.ts.map +1 -0
  324. package/dist/server-health.js +181 -0
  325. package/dist/server-health.js.map +1 -0
  326. package/dist/tools/analyze-dependencies.d.ts +99 -0
  327. package/dist/tools/analyze-dependencies.d.ts.map +1 -0
  328. package/dist/tools/analyze-dependencies.js +329 -0
  329. package/dist/tools/analyze-dependencies.js.map +1 -0
  330. package/dist/tools/cmos/agent-feedback.d.ts +25 -0
  331. package/dist/tools/cmos/agent-feedback.d.ts.map +1 -0
  332. package/dist/tools/cmos/agent-feedback.js +50 -0
  333. package/dist/tools/cmos/agent-feedback.js.map +1 -0
  334. package/dist/tools/cmos/blob-migrations.d.ts +77 -0
  335. package/dist/tools/cmos/blob-migrations.d.ts.map +1 -0
  336. package/dist/tools/cmos/blob-migrations.js +210 -0
  337. package/dist/tools/cmos/blob-migrations.js.map +1 -0
  338. package/dist/tools/cmos/checkpoint-backfill.d.ts +33 -0
  339. package/dist/tools/cmos/checkpoint-backfill.d.ts.map +1 -0
  340. package/dist/tools/cmos/checkpoint-backfill.js +186 -0
  341. package/dist/tools/cmos/checkpoint-backfill.js.map +1 -0
  342. package/dist/tools/cmos/client.d.ts +293 -0
  343. package/dist/tools/cmos/client.d.ts.map +1 -0
  344. package/dist/tools/cmos/client.js +669 -0
  345. package/dist/tools/cmos/client.js.map +1 -0
  346. package/dist/tools/cmos/cmos-agent-onboard.d.ts +344 -0
  347. package/dist/tools/cmos/cmos-agent-onboard.d.ts.map +1 -0
  348. package/dist/tools/cmos/cmos-agent-onboard.js +1533 -0
  349. package/dist/tools/cmos/cmos-agent-onboard.js.map +1 -0
  350. package/dist/tools/cmos/cmos-auth.d.ts +283 -0
  351. package/dist/tools/cmos/cmos-auth.d.ts.map +1 -0
  352. package/dist/tools/cmos/cmos-auth.js +687 -0
  353. package/dist/tools/cmos/cmos-auth.js.map +1 -0
  354. package/dist/tools/cmos/cmos-backlog-export.d.ts +142 -0
  355. package/dist/tools/cmos/cmos-backlog-export.d.ts.map +1 -0
  356. package/dist/tools/cmos/cmos-backlog-export.js +340 -0
  357. package/dist/tools/cmos/cmos-backlog-export.js.map +1 -0
  358. package/dist/tools/cmos/cmos-constraints.d.ts +58 -0
  359. package/dist/tools/cmos/cmos-constraints.d.ts.map +1 -0
  360. package/dist/tools/cmos/cmos-constraints.js +227 -0
  361. package/dist/tools/cmos/cmos-constraints.js.map +1 -0
  362. package/dist/tools/cmos/cmos-context-condense.d.ts +129 -0
  363. package/dist/tools/cmos/cmos-context-condense.d.ts.map +1 -0
  364. package/dist/tools/cmos/cmos-context-condense.js +649 -0
  365. package/dist/tools/cmos/cmos-context-condense.js.map +1 -0
  366. package/dist/tools/cmos/cmos-context-history.d.ts +145 -0
  367. package/dist/tools/cmos/cmos-context-history.d.ts.map +1 -0
  368. package/dist/tools/cmos/cmos-context-history.js +235 -0
  369. package/dist/tools/cmos/cmos-context-history.js.map +1 -0
  370. package/dist/tools/cmos/cmos-context-project-identity.d.ts +34 -0
  371. package/dist/tools/cmos/cmos-context-project-identity.d.ts.map +1 -0
  372. package/dist/tools/cmos/cmos-context-project-identity.js +145 -0
  373. package/dist/tools/cmos/cmos-context-project-identity.js.map +1 -0
  374. package/dist/tools/cmos/cmos-context-search.d.ts +44 -0
  375. package/dist/tools/cmos/cmos-context-search.d.ts.map +1 -0
  376. package/dist/tools/cmos/cmos-context-search.js +79 -0
  377. package/dist/tools/cmos/cmos-context-search.js.map +1 -0
  378. package/dist/tools/cmos/cmos-context-snapshot.d.ts +105 -0
  379. package/dist/tools/cmos/cmos-context-snapshot.d.ts.map +1 -0
  380. package/dist/tools/cmos/cmos-context-snapshot.js +213 -0
  381. package/dist/tools/cmos/cmos-context-snapshot.js.map +1 -0
  382. package/dist/tools/cmos/cmos-context-update.d.ts +193 -0
  383. package/dist/tools/cmos/cmos-context-update.d.ts.map +1 -0
  384. package/dist/tools/cmos/cmos-context-update.js +710 -0
  385. package/dist/tools/cmos/cmos-context-update.js.map +1 -0
  386. package/dist/tools/cmos/cmos-context-view.d.ts +159 -0
  387. package/dist/tools/cmos/cmos-context-view.d.ts.map +1 -0
  388. package/dist/tools/cmos/cmos-context-view.js +531 -0
  389. package/dist/tools/cmos/cmos-context-view.js.map +1 -0
  390. package/dist/tools/cmos/cmos-context.d.ts +325 -0
  391. package/dist/tools/cmos/cmos-context.d.ts.map +1 -0
  392. package/dist/tools/cmos/cmos-context.js +424 -0
  393. package/dist/tools/cmos/cmos-context.js.map +1 -0
  394. package/dist/tools/cmos/cmos-db-backfill.d.ts +119 -0
  395. package/dist/tools/cmos/cmos-db-backfill.d.ts.map +1 -0
  396. package/dist/tools/cmos/cmos-db-backfill.js +889 -0
  397. package/dist/tools/cmos/cmos-db-backfill.js.map +1 -0
  398. package/dist/tools/cmos/cmos-db-health.d.ts +76 -0
  399. package/dist/tools/cmos/cmos-db-health.d.ts.map +1 -0
  400. package/dist/tools/cmos/cmos-db-health.js +226 -0
  401. package/dist/tools/cmos/cmos-db-health.js.map +1 -0
  402. package/dist/tools/cmos/cmos-db-restore.d.ts +92 -0
  403. package/dist/tools/cmos/cmos-db-restore.d.ts.map +1 -0
  404. package/dist/tools/cmos/cmos-db-restore.js +359 -0
  405. package/dist/tools/cmos/cmos-db-restore.js.map +1 -0
  406. package/dist/tools/cmos/cmos-db-snapshot.d.ts +108 -0
  407. package/dist/tools/cmos/cmos-db-snapshot.d.ts.map +1 -0
  408. package/dist/tools/cmos/cmos-db-snapshot.js +359 -0
  409. package/dist/tools/cmos/cmos-db-snapshot.js.map +1 -0
  410. package/dist/tools/cmos/cmos-db.d.ts +103 -0
  411. package/dist/tools/cmos/cmos-db.d.ts.map +1 -0
  412. package/dist/tools/cmos/cmos-db.js +182 -0
  413. package/dist/tools/cmos/cmos-db.js.map +1 -0
  414. package/dist/tools/cmos/cmos-decisions-batch-update.d.ts +34 -0
  415. package/dist/tools/cmos/cmos-decisions-batch-update.d.ts.map +1 -0
  416. package/dist/tools/cmos/cmos-decisions-batch-update.js +90 -0
  417. package/dist/tools/cmos/cmos-decisions-batch-update.js.map +1 -0
  418. package/dist/tools/cmos/cmos-decisions-list.d.ts +134 -0
  419. package/dist/tools/cmos/cmos-decisions-list.d.ts.map +1 -0
  420. package/dist/tools/cmos/cmos-decisions-list.js +153 -0
  421. package/dist/tools/cmos/cmos-decisions-list.js.map +1 -0
  422. package/dist/tools/cmos/cmos-decisions-review.d.ts +21 -0
  423. package/dist/tools/cmos/cmos-decisions-review.d.ts.map +1 -0
  424. package/dist/tools/cmos/cmos-decisions-review.js +83 -0
  425. package/dist/tools/cmos/cmos-decisions-review.js.map +1 -0
  426. package/dist/tools/cmos/cmos-decisions-search.d.ts +119 -0
  427. package/dist/tools/cmos/cmos-decisions-search.d.ts.map +1 -0
  428. package/dist/tools/cmos/cmos-decisions-search.js +219 -0
  429. package/dist/tools/cmos/cmos-decisions-search.js.map +1 -0
  430. package/dist/tools/cmos/cmos-decisions-update.d.ts +34 -0
  431. package/dist/tools/cmos/cmos-decisions-update.d.ts.map +1 -0
  432. package/dist/tools/cmos/cmos-decisions-update.js +121 -0
  433. package/dist/tools/cmos/cmos-decisions-update.js.map +1 -0
  434. package/dist/tools/cmos/cmos-decisions.d.ts +156 -0
  435. package/dist/tools/cmos/cmos-decisions.d.ts.map +1 -0
  436. package/dist/tools/cmos/cmos-decisions.js +223 -0
  437. package/dist/tools/cmos/cmos-decisions.js.map +1 -0
  438. package/dist/tools/cmos/cmos-feedback.d.ts +127 -0
  439. package/dist/tools/cmos/cmos-feedback.d.ts.map +1 -0
  440. package/dist/tools/cmos/cmos-feedback.js +259 -0
  441. package/dist/tools/cmos/cmos-feedback.js.map +1 -0
  442. package/dist/tools/cmos/cmos-learnings-list.d.ts +81 -0
  443. package/dist/tools/cmos/cmos-learnings-list.d.ts.map +1 -0
  444. package/dist/tools/cmos/cmos-learnings-list.js +120 -0
  445. package/dist/tools/cmos/cmos-learnings-list.js.map +1 -0
  446. package/dist/tools/cmos/cmos-learnings-reaffirm.d.ts +27 -0
  447. package/dist/tools/cmos/cmos-learnings-reaffirm.d.ts.map +1 -0
  448. package/dist/tools/cmos/cmos-learnings-reaffirm.js +69 -0
  449. package/dist/tools/cmos/cmos-learnings-reaffirm.js.map +1 -0
  450. package/dist/tools/cmos/cmos-learnings-search.d.ts +69 -0
  451. package/dist/tools/cmos/cmos-learnings-search.d.ts.map +1 -0
  452. package/dist/tools/cmos/cmos-learnings-search.js +130 -0
  453. package/dist/tools/cmos/cmos-learnings-search.js.map +1 -0
  454. package/dist/tools/cmos/cmos-learnings-update.d.ts +52 -0
  455. package/dist/tools/cmos/cmos-learnings-update.d.ts.map +1 -0
  456. package/dist/tools/cmos/cmos-learnings-update.js +122 -0
  457. package/dist/tools/cmos/cmos-learnings-update.js.map +1 -0
  458. package/dist/tools/cmos/cmos-learnings.d.ts +137 -0
  459. package/dist/tools/cmos/cmos-learnings.d.ts.map +1 -0
  460. package/dist/tools/cmos/cmos-learnings.js +197 -0
  461. package/dist/tools/cmos/cmos-learnings.js.map +1 -0
  462. package/dist/tools/cmos/cmos-message.d.ts +257 -0
  463. package/dist/tools/cmos/cmos-message.d.ts.map +1 -0
  464. package/dist/tools/cmos/cmos-message.js +729 -0
  465. package/dist/tools/cmos/cmos-message.js.map +1 -0
  466. package/dist/tools/cmos/cmos-mission-add.d.ts +186 -0
  467. package/dist/tools/cmos/cmos-mission-add.d.ts.map +1 -0
  468. package/dist/tools/cmos/cmos-mission-add.js +328 -0
  469. package/dist/tools/cmos/cmos-mission-add.js.map +1 -0
  470. package/dist/tools/cmos/cmos-mission-block.d.ts +104 -0
  471. package/dist/tools/cmos/cmos-mission-block.d.ts.map +1 -0
  472. package/dist/tools/cmos/cmos-mission-block.js +248 -0
  473. package/dist/tools/cmos/cmos-mission-block.js.map +1 -0
  474. package/dist/tools/cmos/cmos-mission-complete.d.ts +127 -0
  475. package/dist/tools/cmos/cmos-mission-complete.d.ts.map +1 -0
  476. package/dist/tools/cmos/cmos-mission-complete.js +529 -0
  477. package/dist/tools/cmos/cmos-mission-complete.js.map +1 -0
  478. package/dist/tools/cmos/cmos-mission-defer.d.ts +41 -0
  479. package/dist/tools/cmos/cmos-mission-defer.d.ts.map +1 -0
  480. package/dist/tools/cmos/cmos-mission-defer.js +169 -0
  481. package/dist/tools/cmos/cmos-mission-defer.js.map +1 -0
  482. package/dist/tools/cmos/cmos-mission-depends.d.ts +98 -0
  483. package/dist/tools/cmos/cmos-mission-depends.d.ts.map +1 -0
  484. package/dist/tools/cmos/cmos-mission-depends.js +221 -0
  485. package/dist/tools/cmos/cmos-mission-depends.js.map +1 -0
  486. package/dist/tools/cmos/cmos-mission-drop.d.ts +36 -0
  487. package/dist/tools/cmos/cmos-mission-drop.d.ts.map +1 -0
  488. package/dist/tools/cmos/cmos-mission-drop.js +139 -0
  489. package/dist/tools/cmos/cmos-mission-drop.js.map +1 -0
  490. package/dist/tools/cmos/cmos-mission-list.d.ts +127 -0
  491. package/dist/tools/cmos/cmos-mission-list.d.ts.map +1 -0
  492. package/dist/tools/cmos/cmos-mission-list.js +277 -0
  493. package/dist/tools/cmos/cmos-mission-list.js.map +1 -0
  494. package/dist/tools/cmos/cmos-mission-show.d.ts +115 -0
  495. package/dist/tools/cmos/cmos-mission-show.d.ts.map +1 -0
  496. package/dist/tools/cmos/cmos-mission-show.js +278 -0
  497. package/dist/tools/cmos/cmos-mission-show.js.map +1 -0
  498. package/dist/tools/cmos/cmos-mission-start.d.ts +94 -0
  499. package/dist/tools/cmos/cmos-mission-start.d.ts.map +1 -0
  500. package/dist/tools/cmos/cmos-mission-start.js +347 -0
  501. package/dist/tools/cmos/cmos-mission-start.js.map +1 -0
  502. package/dist/tools/cmos/cmos-mission-status.d.ts +152 -0
  503. package/dist/tools/cmos/cmos-mission-status.d.ts.map +1 -0
  504. package/dist/tools/cmos/cmos-mission-status.js +420 -0
  505. package/dist/tools/cmos/cmos-mission-status.js.map +1 -0
  506. package/dist/tools/cmos/cmos-mission-transition.d.ts +126 -0
  507. package/dist/tools/cmos/cmos-mission-transition.d.ts.map +1 -0
  508. package/dist/tools/cmos/cmos-mission-transition.js +222 -0
  509. package/dist/tools/cmos/cmos-mission-transition.js.map +1 -0
  510. package/dist/tools/cmos/cmos-mission-unblock.d.ts +102 -0
  511. package/dist/tools/cmos/cmos-mission-unblock.d.ts.map +1 -0
  512. package/dist/tools/cmos/cmos-mission-unblock.js +242 -0
  513. package/dist/tools/cmos/cmos-mission-unblock.js.map +1 -0
  514. package/dist/tools/cmos/cmos-mission-undepends.d.ts +39 -0
  515. package/dist/tools/cmos/cmos-mission-undepends.d.ts.map +1 -0
  516. package/dist/tools/cmos/cmos-mission-undepends.js +94 -0
  517. package/dist/tools/cmos/cmos-mission-undepends.js.map +1 -0
  518. package/dist/tools/cmos/cmos-mission-update.d.ts +225 -0
  519. package/dist/tools/cmos/cmos-mission-update.d.ts.map +1 -0
  520. package/dist/tools/cmos/cmos-mission-update.js +350 -0
  521. package/dist/tools/cmos/cmos-mission-update.js.map +1 -0
  522. package/dist/tools/cmos/cmos-mission.d.ts +300 -0
  523. package/dist/tools/cmos/cmos-mission.d.ts.map +1 -0
  524. package/dist/tools/cmos/cmos-mission.js +318 -0
  525. package/dist/tools/cmos/cmos-mission.js.map +1 -0
  526. package/dist/tools/cmos/cmos-next-steps.d.ts +57 -0
  527. package/dist/tools/cmos/cmos-next-steps.d.ts.map +1 -0
  528. package/dist/tools/cmos/cmos-next-steps.js +154 -0
  529. package/dist/tools/cmos/cmos-next-steps.js.map +1 -0
  530. package/dist/tools/cmos/cmos-project-init.d.ts +283 -0
  531. package/dist/tools/cmos/cmos-project-init.d.ts.map +1 -0
  532. package/dist/tools/cmos/cmos-project-init.js +502 -0
  533. package/dist/tools/cmos/cmos-project-init.js.map +1 -0
  534. package/dist/tools/cmos/cmos-project-list.d.ts +79 -0
  535. package/dist/tools/cmos/cmos-project-list.d.ts.map +1 -0
  536. package/dist/tools/cmos/cmos-project-list.js +150 -0
  537. package/dist/tools/cmos/cmos-project-list.js.map +1 -0
  538. package/dist/tools/cmos/cmos-project-register.d.ts +90 -0
  539. package/dist/tools/cmos/cmos-project-register.d.ts.map +1 -0
  540. package/dist/tools/cmos/cmos-project-register.js +199 -0
  541. package/dist/tools/cmos/cmos-project-register.js.map +1 -0
  542. package/dist/tools/cmos/cmos-project-sweep.d.ts +34 -0
  543. package/dist/tools/cmos/cmos-project-sweep.d.ts.map +1 -0
  544. package/dist/tools/cmos/cmos-project-sweep.js +210 -0
  545. package/dist/tools/cmos/cmos-project-sweep.js.map +1 -0
  546. package/dist/tools/cmos/cmos-project-unregister.d.ts +66 -0
  547. package/dist/tools/cmos/cmos-project-unregister.d.ts.map +1 -0
  548. package/dist/tools/cmos/cmos-project-unregister.js +108 -0
  549. package/dist/tools/cmos/cmos-project-unregister.js.map +1 -0
  550. package/dist/tools/cmos/cmos-project-update.d.ts +21 -0
  551. package/dist/tools/cmos/cmos-project-update.d.ts.map +1 -0
  552. package/dist/tools/cmos/cmos-project-update.js +46 -0
  553. package/dist/tools/cmos/cmos-project-update.js.map +1 -0
  554. package/dist/tools/cmos/cmos-project-validate.d.ts +89 -0
  555. package/dist/tools/cmos/cmos-project-validate.d.ts.map +1 -0
  556. package/dist/tools/cmos/cmos-project-validate.js +155 -0
  557. package/dist/tools/cmos/cmos-project-validate.js.map +1 -0
  558. package/dist/tools/cmos/cmos-project.d.ts +225 -0
  559. package/dist/tools/cmos/cmos-project.d.ts.map +1 -0
  560. package/dist/tools/cmos/cmos-project.js +255 -0
  561. package/dist/tools/cmos/cmos-project.js.map +1 -0
  562. package/dist/tools/cmos/cmos-resolve-references.d.ts +145 -0
  563. package/dist/tools/cmos/cmos-resolve-references.d.ts.map +1 -0
  564. package/dist/tools/cmos/cmos-resolve-references.js +273 -0
  565. package/dist/tools/cmos/cmos-resolve-references.js.map +1 -0
  566. package/dist/tools/cmos/cmos-session-capture.d.ts +228 -0
  567. package/dist/tools/cmos/cmos-session-capture.d.ts.map +1 -0
  568. package/dist/tools/cmos/cmos-session-capture.js +552 -0
  569. package/dist/tools/cmos/cmos-session-capture.js.map +1 -0
  570. package/dist/tools/cmos/cmos-session-complete.d.ts +201 -0
  571. package/dist/tools/cmos/cmos-session-complete.d.ts.map +1 -0
  572. package/dist/tools/cmos/cmos-session-complete.js +816 -0
  573. package/dist/tools/cmos/cmos-session-complete.js.map +1 -0
  574. package/dist/tools/cmos/cmos-session-list.d.ts +150 -0
  575. package/dist/tools/cmos/cmos-session-list.d.ts.map +1 -0
  576. package/dist/tools/cmos/cmos-session-list.js +234 -0
  577. package/dist/tools/cmos/cmos-session-list.js.map +1 -0
  578. package/dist/tools/cmos/cmos-session-search.d.ts +176 -0
  579. package/dist/tools/cmos/cmos-session-search.d.ts.map +1 -0
  580. package/dist/tools/cmos/cmos-session-search.js +374 -0
  581. package/dist/tools/cmos/cmos-session-search.js.map +1 -0
  582. package/dist/tools/cmos/cmos-session-start.d.ts +136 -0
  583. package/dist/tools/cmos/cmos-session-start.d.ts.map +1 -0
  584. package/dist/tools/cmos/cmos-session-start.js +305 -0
  585. package/dist/tools/cmos/cmos-session-start.js.map +1 -0
  586. package/dist/tools/cmos/cmos-session.d.ts +223 -0
  587. package/dist/tools/cmos/cmos-session.d.ts.map +1 -0
  588. package/dist/tools/cmos/cmos-session.js +255 -0
  589. package/dist/tools/cmos/cmos-session.js.map +1 -0
  590. package/dist/tools/cmos/cmos-sprint-add.d.ts +114 -0
  591. package/dist/tools/cmos/cmos-sprint-add.d.ts.map +1 -0
  592. package/dist/tools/cmos/cmos-sprint-add.js +164 -0
  593. package/dist/tools/cmos/cmos-sprint-add.js.map +1 -0
  594. package/dist/tools/cmos/cmos-sprint-analytics.d.ts +66 -0
  595. package/dist/tools/cmos/cmos-sprint-analytics.d.ts.map +1 -0
  596. package/dist/tools/cmos/cmos-sprint-analytics.js +289 -0
  597. package/dist/tools/cmos/cmos-sprint-analytics.js.map +1 -0
  598. package/dist/tools/cmos/cmos-sprint-carry-forward.d.ts +55 -0
  599. package/dist/tools/cmos/cmos-sprint-carry-forward.d.ts.map +1 -0
  600. package/dist/tools/cmos/cmos-sprint-carry-forward.js +271 -0
  601. package/dist/tools/cmos/cmos-sprint-carry-forward.js.map +1 -0
  602. package/dist/tools/cmos/cmos-sprint-complete.d.ts +155 -0
  603. package/dist/tools/cmos/cmos-sprint-complete.d.ts.map +1 -0
  604. package/dist/tools/cmos/cmos-sprint-complete.js +768 -0
  605. package/dist/tools/cmos/cmos-sprint-complete.js.map +1 -0
  606. package/dist/tools/cmos/cmos-sprint-list.d.ts +115 -0
  607. package/dist/tools/cmos/cmos-sprint-list.d.ts.map +1 -0
  608. package/dist/tools/cmos/cmos-sprint-list.js +225 -0
  609. package/dist/tools/cmos/cmos-sprint-list.js.map +1 -0
  610. package/dist/tools/cmos/cmos-sprint-retro.d.ts +114 -0
  611. package/dist/tools/cmos/cmos-sprint-retro.d.ts.map +1 -0
  612. package/dist/tools/cmos/cmos-sprint-retro.js +331 -0
  613. package/dist/tools/cmos/cmos-sprint-retro.js.map +1 -0
  614. package/dist/tools/cmos/cmos-sprint-show.d.ts +109 -0
  615. package/dist/tools/cmos/cmos-sprint-show.d.ts.map +1 -0
  616. package/dist/tools/cmos/cmos-sprint-show.js +238 -0
  617. package/dist/tools/cmos/cmos-sprint-show.js.map +1 -0
  618. package/dist/tools/cmos/cmos-sprint-update.d.ts +150 -0
  619. package/dist/tools/cmos/cmos-sprint-update.d.ts.map +1 -0
  620. package/dist/tools/cmos/cmos-sprint-update.js +191 -0
  621. package/dist/tools/cmos/cmos-sprint-update.js.map +1 -0
  622. package/dist/tools/cmos/cmos-sprint.d.ts +219 -0
  623. package/dist/tools/cmos/cmos-sprint.d.ts.map +1 -0
  624. package/dist/tools/cmos/cmos-sprint.js +304 -0
  625. package/dist/tools/cmos/cmos-sprint.js.map +1 -0
  626. package/dist/tools/cmos/cmos-status.d.ts +69 -0
  627. package/dist/tools/cmos/cmos-status.d.ts.map +1 -0
  628. package/dist/tools/cmos/cmos-status.js +136 -0
  629. package/dist/tools/cmos/cmos-status.js.map +1 -0
  630. package/dist/tools/cmos/context-freshness.d.ts +67 -0
  631. package/dist/tools/cmos/context-freshness.d.ts.map +1 -0
  632. package/dist/tools/cmos/context-freshness.js +352 -0
  633. package/dist/tools/cmos/context-freshness.js.map +1 -0
  634. package/dist/tools/cmos/context-retention.d.ts +58 -0
  635. package/dist/tools/cmos/context-retention.d.ts.map +1 -0
  636. package/dist/tools/cmos/context-retention.js +507 -0
  637. package/dist/tools/cmos/context-retention.js.map +1 -0
  638. package/dist/tools/cmos/dashboard-client.d.ts +513 -0
  639. package/dist/tools/cmos/dashboard-client.d.ts.map +1 -0
  640. package/dist/tools/cmos/dashboard-client.js +800 -0
  641. package/dist/tools/cmos/dashboard-client.js.map +1 -0
  642. package/dist/tools/cmos/decision-memory.d.ts +39 -0
  643. package/dist/tools/cmos/decision-memory.d.ts.map +1 -0
  644. package/dist/tools/cmos/decision-memory.js +263 -0
  645. package/dist/tools/cmos/decision-memory.js.map +1 -0
  646. package/dist/tools/cmos/errors.d.ts +113 -0
  647. package/dist/tools/cmos/errors.d.ts.map +1 -0
  648. package/dist/tools/cmos/errors.js +315 -0
  649. package/dist/tools/cmos/errors.js.map +1 -0
  650. package/dist/tools/cmos/fts5-retriever.d.ts +101 -0
  651. package/dist/tools/cmos/fts5-retriever.d.ts.map +1 -0
  652. package/dist/tools/cmos/fts5-retriever.js +210 -0
  653. package/dist/tools/cmos/fts5-retriever.js.map +1 -0
  654. package/dist/tools/cmos/index.d.ts +1238 -0
  655. package/dist/tools/cmos/index.d.ts.map +1 -0
  656. package/dist/tools/cmos/index.js +359 -0
  657. package/dist/tools/cmos/index.js.map +1 -0
  658. package/dist/tools/cmos/learning-reaffirm.d.ts +74 -0
  659. package/dist/tools/cmos/learning-reaffirm.d.ts.map +1 -0
  660. package/dist/tools/cmos/learning-reaffirm.js +145 -0
  661. package/dist/tools/cmos/learning-reaffirm.js.map +1 -0
  662. package/dist/tools/cmos/orphan-detection.d.ts +55 -0
  663. package/dist/tools/cmos/orphan-detection.d.ts.map +1 -0
  664. package/dist/tools/cmos/orphan-detection.js +139 -0
  665. package/dist/tools/cmos/orphan-detection.js.map +1 -0
  666. package/dist/tools/cmos/owner-resolution.d.ts +21 -0
  667. package/dist/tools/cmos/owner-resolution.d.ts.map +1 -0
  668. package/dist/tools/cmos/owner-resolution.js +162 -0
  669. package/dist/tools/cmos/owner-resolution.js.map +1 -0
  670. package/dist/tools/cmos/project-identity.d.ts +112 -0
  671. package/dist/tools/cmos/project-identity.d.ts.map +1 -0
  672. package/dist/tools/cmos/project-identity.js +261 -0
  673. package/dist/tools/cmos/project-identity.js.map +1 -0
  674. package/dist/tools/cmos/relevance-surfacing.d.ts +40 -0
  675. package/dist/tools/cmos/relevance-surfacing.d.ts.map +1 -0
  676. package/dist/tools/cmos/relevance-surfacing.js +153 -0
  677. package/dist/tools/cmos/relevance-surfacing.js.map +1 -0
  678. package/dist/tools/cmos/schema-migrations.d.ts +157 -0
  679. package/dist/tools/cmos/schema-migrations.d.ts.map +1 -0
  680. package/dist/tools/cmos/schema-migrations.js +678 -0
  681. package/dist/tools/cmos/schema-migrations.js.map +1 -0
  682. package/dist/tools/cmos/schema.d.ts +76 -0
  683. package/dist/tools/cmos/schema.d.ts.map +1 -0
  684. package/dist/tools/cmos/schema.js +462 -0
  685. package/dist/tools/cmos/schema.js.map +1 -0
  686. package/dist/tools/cmos/sender-identity.d.ts +87 -0
  687. package/dist/tools/cmos/sender-identity.d.ts.map +1 -0
  688. package/dist/tools/cmos/sender-identity.js +207 -0
  689. package/dist/tools/cmos/sender-identity.js.map +1 -0
  690. package/dist/tools/cmos/staleness-detection.d.ts +128 -0
  691. package/dist/tools/cmos/staleness-detection.d.ts.map +1 -0
  692. package/dist/tools/cmos/staleness-detection.js +381 -0
  693. package/dist/tools/cmos/staleness-detection.js.map +1 -0
  694. package/dist/tools/cmos/supersession-detection.d.ts +46 -0
  695. package/dist/tools/cmos/supersession-detection.d.ts.map +1 -0
  696. package/dist/tools/cmos/supersession-detection.js +235 -0
  697. package/dist/tools/cmos/supersession-detection.js.map +1 -0
  698. package/dist/tools/cmos/sync-event-payloads.d.ts +576 -0
  699. package/dist/tools/cmos/sync-event-payloads.d.ts.map +1 -0
  700. package/dist/tools/cmos/sync-event-payloads.js +521 -0
  701. package/dist/tools/cmos/sync-event-payloads.js.map +1 -0
  702. package/dist/tools/cmos/sync-health-check.d.ts +43 -0
  703. package/dist/tools/cmos/sync-health-check.d.ts.map +1 -0
  704. package/dist/tools/cmos/sync-health-check.js +93 -0
  705. package/dist/tools/cmos/sync-health-check.js.map +1 -0
  706. package/dist/tools/cmos/sync-hooks.d.ts +82 -0
  707. package/dist/tools/cmos/sync-hooks.d.ts.map +1 -0
  708. package/dist/tools/cmos/sync-hooks.js +162 -0
  709. package/dist/tools/cmos/sync-hooks.js.map +1 -0
  710. package/dist/tools/cmos/sync-pusher.d.ts +128 -0
  711. package/dist/tools/cmos/sync-pusher.d.ts.map +1 -0
  712. package/dist/tools/cmos/sync-pusher.js +248 -0
  713. package/dist/tools/cmos/sync-pusher.js.map +1 -0
  714. package/dist/tools/cmos/sync-queue.d.ts +87 -0
  715. package/dist/tools/cmos/sync-queue.d.ts.map +1 -0
  716. package/dist/tools/cmos/sync-queue.js +208 -0
  717. package/dist/tools/cmos/sync-queue.js.map +1 -0
  718. package/dist/tools/cmos/tier-config.d.ts +32 -0
  719. package/dist/tools/cmos/tier-config.d.ts.map +1 -0
  720. package/dist/tools/cmos/tier-config.js +123 -0
  721. package/dist/tools/cmos/tier-config.js.map +1 -0
  722. package/dist/tools/cmos/types.d.ts +164 -0
  723. package/dist/tools/cmos/types.d.ts.map +1 -0
  724. package/dist/tools/cmos/types.js +11 -0
  725. package/dist/tools/cmos/types.js.map +1 -0
  726. package/dist/tools/combine-packs.d.ts +194 -0
  727. package/dist/tools/combine-packs.d.ts.map +1 -0
  728. package/dist/tools/combine-packs.js +283 -0
  729. package/dist/tools/combine-packs.js.map +1 -0
  730. package/dist/tools/create-mission.d.ts +192 -0
  731. package/dist/tools/create-mission.d.ts.map +1 -0
  732. package/dist/tools/create-mission.js +453 -0
  733. package/dist/tools/create-mission.js.map +1 -0
  734. package/dist/tools/export-template.d.ts +175 -0
  735. package/dist/tools/export-template.d.ts.map +1 -0
  736. package/dist/tools/export-template.js +212 -0
  737. package/dist/tools/export-template.js.map +1 -0
  738. package/dist/tools/extract-template.d.ts +106 -0
  739. package/dist/tools/extract-template.d.ts.map +1 -0
  740. package/dist/tools/extract-template.js +322 -0
  741. package/dist/tools/extract-template.js.map +1 -0
  742. package/dist/tools/formatters/mission-protocol-json.d.ts +122 -0
  743. package/dist/tools/formatters/mission-protocol-json.d.ts.map +1 -0
  744. package/dist/tools/formatters/mission-protocol-json.js +155 -0
  745. package/dist/tools/formatters/mission-protocol-json.js.map +1 -0
  746. package/dist/tools/import-template.d.ts +170 -0
  747. package/dist/tools/import-template.d.ts.map +1 -0
  748. package/dist/tools/import-template.js +203 -0
  749. package/dist/tools/import-template.js.map +1 -0
  750. package/dist/tools/list-domains.d.ts +70 -0
  751. package/dist/tools/list-domains.d.ts.map +1 -0
  752. package/dist/tools/list-domains.js +110 -0
  753. package/dist/tools/list-domains.js.map +1 -0
  754. package/dist/tools/optimize-tokens.d.ts +190 -0
  755. package/dist/tools/optimize-tokens.d.ts.map +1 -0
  756. package/dist/tools/optimize-tokens.js +193 -0
  757. package/dist/tools/optimize-tokens.js.map +1 -0
  758. package/dist/tools/score-quality.d.ts +76 -0
  759. package/dist/tools/score-quality.d.ts.map +1 -0
  760. package/dist/tools/score-quality.js +191 -0
  761. package/dist/tools/score-quality.js.map +1 -0
  762. package/dist/tools/split-mission.d.ts +181 -0
  763. package/dist/tools/split-mission.d.ts.map +1 -0
  764. package/dist/tools/split-mission.js +416 -0
  765. package/dist/tools/split-mission.js.map +1 -0
  766. package/dist/tools/suggest-splits.d.ts +162 -0
  767. package/dist/tools/suggest-splits.d.ts.map +1 -0
  768. package/dist/tools/suggest-splits.js +344 -0
  769. package/dist/tools/suggest-splits.js.map +1 -0
  770. package/dist/tools/tool-execution.d.ts +4 -0
  771. package/dist/tools/tool-execution.d.ts.map +1 -0
  772. package/dist/tools/tool-execution.js +3 -0
  773. package/dist/tools/tool-execution.js.map +1 -0
  774. package/dist/tools/version-template.d.ts +515 -0
  775. package/dist/tools/version-template.d.ts.map +1 -0
  776. package/dist/tools/version-template.js +338 -0
  777. package/dist/tools/version-template.js.map +1 -0
  778. package/dist/types/errors.d.ts +19 -0
  779. package/dist/types/errors.d.ts.map +1 -0
  780. package/dist/types/errors.js +52 -0
  781. package/dist/types/errors.js.map +1 -0
  782. package/dist/types/mission-types.d.ts +8 -0
  783. package/dist/types/mission-types.d.ts.map +1 -0
  784. package/dist/types/mission-types.js +12 -0
  785. package/dist/types/mission-types.js.map +1 -0
  786. package/dist/types/registry.d.ts +55 -0
  787. package/dist/types/registry.d.ts.map +1 -0
  788. package/dist/types/registry.js +10 -0
  789. package/dist/types/registry.js.map +1 -0
  790. package/dist/types/schemas.d.ts +25 -0
  791. package/dist/types/schemas.d.ts.map +1 -0
  792. package/dist/types/schemas.js +6 -0
  793. package/dist/types/schemas.js.map +1 -0
  794. package/dist/types/tools.d.ts +22 -0
  795. package/dist/types/tools.d.ts.map +1 -0
  796. package/dist/types/tools.js +10 -0
  797. package/dist/types/tools.js.map +1 -0
  798. package/dist/utils/abort.d.ts +16 -0
  799. package/dist/utils/abort.d.ts.map +1 -0
  800. package/dist/utils/abort.js +89 -0
  801. package/dist/utils/abort.js.map +1 -0
  802. package/dist/utils/fs.d.ts +14 -0
  803. package/dist/utils/fs.d.ts.map +1 -0
  804. package/dist/utils/fs.js +114 -0
  805. package/dist/utils/fs.js.map +1 -0
  806. package/dist/utils/workspace-io.d.ts +18 -0
  807. package/dist/utils/workspace-io.d.ts.map +1 -0
  808. package/dist/utils/workspace-io.js +40 -0
  809. package/dist/utils/workspace-io.js.map +1 -0
  810. package/dist/validation/common.d.ts +21 -0
  811. package/dist/validation/common.d.ts.map +1 -0
  812. package/dist/validation/common.js +241 -0
  813. package/dist/validation/common.js.map +1 -0
  814. package/dist/validation/errors.d.ts +21 -0
  815. package/dist/validation/errors.d.ts.map +1 -0
  816. package/dist/validation/errors.js +122 -0
  817. package/dist/validation/errors.js.map +1 -0
  818. package/dist/validation/middleware.d.ts +6 -0
  819. package/dist/validation/middleware.d.ts.map +1 -0
  820. package/dist/validation/middleware.js +26 -0
  821. package/dist/validation/middleware.js.map +1 -0
  822. package/dist/validation/schemas/config-schema.d.ts +25 -0
  823. package/dist/validation/schemas/config-schema.d.ts.map +1 -0
  824. package/dist/validation/schemas/config-schema.js +22 -0
  825. package/dist/validation/schemas/config-schema.js.map +1 -0
  826. package/dist/validation/schemas/domain-schema.d.ts +129 -0
  827. package/dist/validation/schemas/domain-schema.d.ts.map +1 -0
  828. package/dist/validation/schemas/domain-schema.js +28 -0
  829. package/dist/validation/schemas/domain-schema.js.map +1 -0
  830. package/dist/validation/schemas/file-path-schema.d.ts +10 -0
  831. package/dist/validation/schemas/file-path-schema.d.ts.map +1 -0
  832. package/dist/validation/schemas/file-path-schema.js +29 -0
  833. package/dist/validation/schemas/file-path-schema.js.map +1 -0
  834. package/dist/validation/schemas/mission-schema.d.ts +65 -0
  835. package/dist/validation/schemas/mission-schema.d.ts.map +1 -0
  836. package/dist/validation/schemas/mission-schema.js +24 -0
  837. package/dist/validation/schemas/mission-schema.js.map +1 -0
  838. package/dist/validation/schemas/template-schema.d.ts +364 -0
  839. package/dist/validation/schemas/template-schema.d.ts.map +1 -0
  840. package/dist/validation/schemas/template-schema.js +64 -0
  841. package/dist/validation/schemas/template-schema.js.map +1 -0
  842. package/dist/versioning/migration-engine.d.ts +82 -0
  843. package/dist/versioning/migration-engine.d.ts.map +1 -0
  844. package/dist/versioning/migration-engine.js +352 -0
  845. package/dist/versioning/migration-engine.js.map +1 -0
  846. package/dist/versioning/types.d.ts +236 -0
  847. package/dist/versioning/types.d.ts.map +1 -0
  848. package/dist/versioning/types.js +57 -0
  849. package/dist/versioning/types.js.map +1 -0
  850. package/dist/versioning/version-manager.d.ts +76 -0
  851. package/dist/versioning/version-manager.d.ts.map +1 -0
  852. package/dist/versioning/version-manager.js +386 -0
  853. package/dist/versioning/version-manager.js.map +1 -0
  854. package/package.json +117 -0
@@ -0,0 +1,800 @@
1
+ "use strict";
2
+ /**
3
+ * Dashboard HTTP Client & Credential-Based Authentication
4
+ *
5
+ * Reusable HTTP client for calling the cmos-dashboard REST API.
6
+ * Authenticates via POST /api/auth/login with user credentials,
7
+ * caches the JWT, and re-authenticates when it expires.
8
+ *
9
+ * @module tools/cmos/dashboard-client
10
+ */
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DashboardClient = exports.CMOS_DASHBOARD_SECRET_ENV = exports.DEFAULT_DASHBOARD_URL = exports.CMOS_DASHBOARD_API_KEY_ENV = exports.CMOS_DASHBOARD_PASSWORD_ENV = exports.CMOS_DASHBOARD_USER_ENV = exports.CMOS_DASHBOARD_URL_ENV = void 0;
16
+ exports.resolveDashboardBaseUrl = resolveDashboardBaseUrl;
17
+ exports.__resetLegacyAuthWarnSeen = __resetLegacyAuthWarnSeen;
18
+ const fs_1 = require("fs");
19
+ const path_1 = __importDefault(require("path"));
20
+ const errors_1 = require("./errors");
21
+ const credential_store_1 = require("../../intelligence/credential-store");
22
+ // ─── Environment Variable Names ──────────────────────────────────────────────
23
+ exports.CMOS_DASHBOARD_URL_ENV = 'CMOS_DASHBOARD_URL';
24
+ exports.CMOS_DASHBOARD_USER_ENV = 'CMOS_DASHBOARD_USER';
25
+ exports.CMOS_DASHBOARD_PASSWORD_ENV = 'CMOS_DASHBOARD_PASSWORD';
26
+ exports.CMOS_DASHBOARD_API_KEY_ENV = 'CMOS_DASHBOARD_API_KEY';
27
+ /**
28
+ * Default dashboard URL used when CMOS_DASHBOARD_URL is unset or empty.
29
+ * Sprint 62 m02: bakes the canonical aquex.ai endpoint into the npm-shipped
30
+ * package so fresh installs reach the right host without env config. The 402
31
+ * graceful-degradation path (m05) is the actual fresh-user UX when the user
32
+ * has no account yet — they hit the default URL, dashboard returns 402, and
33
+ * cmos_message etc surface https://cmos.aquex.ai for sign-up.
34
+ */
35
+ exports.DEFAULT_DASHBOARD_URL = 'https://cmos.aquex.ai';
36
+ /** @deprecated Use CMOS_DASHBOARD_USER_ENV + CMOS_DASHBOARD_PASSWORD_ENV instead */
37
+ exports.CMOS_DASHBOARD_SECRET_ENV = 'CMOS_DASHBOARD_SECRET';
38
+ /**
39
+ * Resolve the dashboard base URL from explicit override → env var → baked default.
40
+ * Treats empty string as unset (per IDE-spawn empty-string env trap).
41
+ *
42
+ * Exported so downstream tools (cmos_status, future hosts) can read the same
43
+ * effective URL without re-implementing the precedence chain.
44
+ */
45
+ function resolveDashboardBaseUrl(override) {
46
+ if (override)
47
+ return override;
48
+ const envValue = process.env[exports.CMOS_DASHBOARD_URL_ENV];
49
+ if (envValue)
50
+ return envValue;
51
+ return exports.DEFAULT_DASHBOARD_URL;
52
+ }
53
+ // ─── Sprint 58 m02: legacy-auth migration WARN ───────────────────────────────
54
+ /**
55
+ * Tracks whether we've already emitted a [WARN] line for each legacy arm in
56
+ * this process, so the warning fires exactly once per arm per run — loud
57
+ * enough to be seen, quiet enough that repeated calls don't spam logs.
58
+ *
59
+ * Visible to tests via `__resetLegacyAuthWarnSeen` so assertions can force
60
+ * a clean slate per case.
61
+ */
62
+ const legacyAuthWarnSeen = new Set();
63
+ function warnLegacyAuth(arm) {
64
+ if (legacyAuthWarnSeen.has(arm))
65
+ return;
66
+ legacyAuthWarnSeen.add(arm);
67
+ const armLabel = arm === 'legacy-env' ? 'legacy-env' : 'password-fallback';
68
+ process.stderr.write(`[WARN] cmos-mcp: authenticating via ${armLabel}; run cmos_auth(action="login") to migrate to device-code credentials\n`);
69
+ }
70
+ /** Test helper — reset the per-process WARN seen-set. */
71
+ function __resetLegacyAuthWarnSeen() {
72
+ legacyAuthWarnSeen.clear();
73
+ }
74
+ function canonicalizeSlug(value) {
75
+ return value.trim().toLowerCase().replace(/\s+/g, '-');
76
+ }
77
+ function expectedSlugMismatchError(operation, expectedSlug, actualSlug) {
78
+ return (0, errors_1.createError)({
79
+ code: 'EXPECTED_SLUG_MISMATCH',
80
+ message: `Refusing ${operation}: expected slug '${expectedSlug}' but resolved '${actualSlug}'.`,
81
+ suggestion: 'Verify the call is targeting the intended project and pass the canonical slug from the trusted local project context.',
82
+ });
83
+ }
84
+ function pickNewestUserScopedKey(keys) {
85
+ const entries = Object.entries(keys);
86
+ if (entries.length === 0)
87
+ return undefined;
88
+ const best = entries.reduce((a, b) => ((b[1].issuedAt ?? '') > (a[1].issuedAt ?? '') ? b : a));
89
+ return { keyId: best[0], record: best[1] };
90
+ }
91
+ function parseOwnerFromAddress(address) {
92
+ if (!address || !address.startsWith('cmos://')) {
93
+ return undefined;
94
+ }
95
+ const body = address.slice('cmos://'.length);
96
+ const [owner] = body.split('/');
97
+ return owner && owner.trim().length > 0 ? owner.trim() : undefined;
98
+ }
99
+ function normalizeDirectoryProject(project) {
100
+ const address = project.address ?? project.cmosAddress ?? '';
101
+ const owner = project.owner ?? parseOwnerFromAddress(address) ?? 'unknown';
102
+ return {
103
+ id: project.id ?? '',
104
+ name: project.name ?? '',
105
+ address,
106
+ owner,
107
+ ...(project.description ? { description: project.description } : {}),
108
+ ...(project.slug ? { slug: project.slug } : {}),
109
+ ...(project.isOwner !== undefined ? { isOwner: project.isOwner } : {}),
110
+ };
111
+ }
112
+ function normalizeProjectListResult(data) {
113
+ const projects = (data.projects ?? []).map((project) => normalizeDirectoryProject(project));
114
+ return {
115
+ projects,
116
+ totalCount: data.totalCount ?? projects.length,
117
+ };
118
+ }
119
+ // ─── DashboardClient ─────────────────────────────────────────────────────────
120
+ /**
121
+ * HTTP client for the cmos-dashboard REST API.
122
+ *
123
+ * Authenticates with user credentials via /api/auth/login,
124
+ * caches the JWT, and re-authenticates when expired.
125
+ * All methods return CmosToolResult for consistent error handling.
126
+ */
127
+ class DashboardClient {
128
+ constructor(config) {
129
+ /** Cached auth token */
130
+ this.cachedToken = null;
131
+ /** Token expiry time (ms since epoch) */
132
+ this.tokenExpiresAt = 0;
133
+ /** Cached user identity from last login */
134
+ this.cachedIdentity = null;
135
+ this.baseUrl = config.baseUrl.replace(/\/+$/, '');
136
+ this.timeoutMs = config.timeoutMs ?? 10000;
137
+ if (config.apiKey) {
138
+ this.authMethod = 'apiKey';
139
+ this.cachedToken = config.apiKey;
140
+ this.tokenExpiresAt = Infinity;
141
+ this.email = '';
142
+ this.password = '';
143
+ }
144
+ else {
145
+ this.authMethod = 'jwt';
146
+ this.email = config.email ?? '';
147
+ this.password = config.password ?? '';
148
+ }
149
+ }
150
+ /**
151
+ * Create a DashboardClient from environment variables.
152
+ * Returns an error result if not configured.
153
+ */
154
+ static fromEnv(overrides) {
155
+ const baseUrl = resolveDashboardBaseUrl(overrides?.baseUrl);
156
+ const apiKey = overrides?.apiKey ?? process.env[exports.CMOS_DASHBOARD_API_KEY_ENV];
157
+ // API key auth takes precedence over email/password
158
+ if (apiKey) {
159
+ return (0, errors_1.createSuccess)(new DashboardClient({
160
+ baseUrl,
161
+ apiKey,
162
+ timeoutMs: overrides?.timeoutMs,
163
+ }));
164
+ }
165
+ // Fallback to email/password auth
166
+ const email = overrides?.email ?? process.env[exports.CMOS_DASHBOARD_USER_ENV];
167
+ const password = overrides?.password ?? process.env[exports.CMOS_DASHBOARD_PASSWORD_ENV];
168
+ if (!email || !password) {
169
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardNotConfigured());
170
+ }
171
+ return (0, errors_1.createSuccess)(new DashboardClient({
172
+ baseUrl,
173
+ email,
174
+ password,
175
+ timeoutMs: overrides?.timeoutMs,
176
+ }));
177
+ }
178
+ /**
179
+ * Create a DashboardClient using the local CredentialStore minted by the
180
+ * Sprint 57 device code flow.
181
+ *
182
+ * Resolution order:
183
+ * 1. Explicit `apiKey` override (tests / callers bypassing the store).
184
+ * 2. Project-scoped key in CredentialStore for `projectRoot` (set by m02
185
+ * auto-issue capture on `POST /api/projects/register`).
186
+ * 3. Newest user-scoped key in CredentialStore (minted by device code
187
+ * flow; used before a project-scoped key has been issued for this root).
188
+ * 4. Legacy `CMOS_DASHBOARD_API_KEY` env var — carried forward so users
189
+ * who configured the env var directly before device code landed keep
190
+ * working.
191
+ * 5. Email/password env vars — terminal fallback.
192
+ *
193
+ * `keySource` surfaces which arm fired so the eventual whoami + onboard
194
+ * surface (m04) can show identitySource to the agent.
195
+ */
196
+ static async fromEnvForProject(projectRoot, overrides) {
197
+ const baseUrl = resolveDashboardBaseUrl(overrides?.baseUrl);
198
+ const buildConfig = (apiKey) => ({
199
+ baseUrl,
200
+ apiKey,
201
+ ...(overrides?.timeoutMs !== undefined ? { timeoutMs: overrides.timeoutMs } : {}),
202
+ });
203
+ // (1) Explicit override.
204
+ if (overrides?.apiKey) {
205
+ return (0, errors_1.createSuccess)({
206
+ client: new DashboardClient(buildConfig(overrides.apiKey)),
207
+ keySource: 'user-scoped',
208
+ matchedProjectRoot: null,
209
+ });
210
+ }
211
+ const store = overrides?.credentialStore ?? (await credential_store_1.CredentialStore.create());
212
+ // (2) Project-scoped key in the credential store.
213
+ if (projectRoot) {
214
+ const projectKey = await store.getProjectKey(projectRoot);
215
+ if (projectKey) {
216
+ return (0, errors_1.createSuccess)({
217
+ client: new DashboardClient(buildConfig(projectKey.key)),
218
+ keySource: 'project-scoped',
219
+ matchedProjectRoot: path_1.default.resolve(projectRoot),
220
+ });
221
+ }
222
+ }
223
+ // (3) Newest user-scoped key in the credential store.
224
+ const userScopedKeys = await store.listUserScopedKeys();
225
+ const pick = pickNewestUserScopedKey(userScopedKeys);
226
+ if (pick) {
227
+ const client = new DashboardClient(buildConfig(pick.record.key));
228
+ client.setAuthenticatingKeyId(pick.keyId);
229
+ return (0, errors_1.createSuccess)({
230
+ client,
231
+ keySource: 'user-scoped',
232
+ matchedProjectRoot: null,
233
+ });
234
+ }
235
+ // (4) Legacy env-var user-scoped key.
236
+ const envKey = process.env[exports.CMOS_DASHBOARD_API_KEY_ENV];
237
+ if (envKey) {
238
+ warnLegacyAuth('legacy-env');
239
+ return (0, errors_1.createSuccess)({
240
+ client: new DashboardClient(buildConfig(envKey)),
241
+ keySource: 'legacy-env',
242
+ matchedProjectRoot: null,
243
+ });
244
+ }
245
+ // (5) Email/password terminal fallback.
246
+ const email = overrides?.email ?? process.env[exports.CMOS_DASHBOARD_USER_ENV];
247
+ const password = overrides?.password ?? process.env[exports.CMOS_DASHBOARD_PASSWORD_ENV];
248
+ if (!email || !password) {
249
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardNotConfigured());
250
+ }
251
+ warnLegacyAuth('password-fallback');
252
+ return (0, errors_1.createSuccess)({
253
+ client: new DashboardClient({
254
+ baseUrl,
255
+ email,
256
+ password,
257
+ ...(overrides?.timeoutMs !== undefined ? { timeoutMs: overrides.timeoutMs } : {}),
258
+ }),
259
+ keySource: 'password-fallback',
260
+ matchedProjectRoot: null,
261
+ });
262
+ }
263
+ /**
264
+ * Authenticate with the dashboard and cache the token.
265
+ */
266
+ async authenticate() {
267
+ const url = `${this.baseUrl}/api/auth/login`;
268
+ const controller = new AbortController();
269
+ const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
270
+ try {
271
+ const response = await fetch(url, {
272
+ method: 'POST',
273
+ headers: {
274
+ 'Content-Type': 'application/json',
275
+ Accept: 'application/json',
276
+ },
277
+ body: JSON.stringify({ email: this.email, password: this.password }),
278
+ signal: controller.signal,
279
+ });
280
+ clearTimeout(timeout);
281
+ if (response.status === 401 || response.status === 403) {
282
+ this.cachedToken = null;
283
+ this.tokenExpiresAt = 0;
284
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardAuthFailed(this.baseUrl));
285
+ }
286
+ if (!response.ok) {
287
+ const text = await response.text().catch(() => 'Unknown error');
288
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError(`Login failed: HTTP ${response.status}: ${text}`));
289
+ }
290
+ const loginResponse = (await response.json());
291
+ this.cachedToken = loginResponse.data.token;
292
+ this.tokenExpiresAt = new Date(loginResponse.data.expiresAt).getTime();
293
+ this.cachedIdentity = {
294
+ userId: loginResponse.data.user.id,
295
+ email: loginResponse.data.user.email,
296
+ username: loginResponse.data.user.username ?? null,
297
+ };
298
+ return (0, errors_1.createSuccess)(this.cachedToken);
299
+ }
300
+ catch (error) {
301
+ clearTimeout(timeout);
302
+ if (error instanceof Error) {
303
+ if (error.name === 'AbortError') {
304
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUnreachable(this.baseUrl, `Login timed out after ${this.timeoutMs}ms`));
305
+ }
306
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUnreachable(this.baseUrl, error.message));
307
+ }
308
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUnreachable(this.baseUrl, 'Unknown network error'));
309
+ }
310
+ }
311
+ /**
312
+ * Get a valid auth token, re-authenticating if needed.
313
+ */
314
+ async getAuthToken() {
315
+ // API keys are permanent — no expiry check, no login needed
316
+ if (this.authMethod === 'apiKey') {
317
+ return (0, errors_1.createSuccess)(this.cachedToken);
318
+ }
319
+ const now = Date.now();
320
+ if (this.cachedToken && now < this.tokenExpiresAt - DashboardClient.EXPIRY_BUFFER_MS) {
321
+ return (0, errors_1.createSuccess)(this.cachedToken);
322
+ }
323
+ return this.authenticate();
324
+ }
325
+ /**
326
+ * Make an authenticated HTTP request to the dashboard.
327
+ */
328
+ async request(method, path, body) {
329
+ const tokenResult = await this.getAuthToken();
330
+ if (!tokenResult.success) {
331
+ return (0, errors_1.createError)(tokenResult.error);
332
+ }
333
+ const url = `${this.baseUrl}${path}`;
334
+ const token = tokenResult.data;
335
+ const headers = {
336
+ Authorization: `Bearer ${token}`,
337
+ 'Content-Type': 'application/json',
338
+ Accept: 'application/json',
339
+ };
340
+ const controller = new AbortController();
341
+ const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
342
+ try {
343
+ const response = await fetch(url, {
344
+ method,
345
+ headers,
346
+ body: body ? JSON.stringify(body) : undefined,
347
+ signal: controller.signal,
348
+ });
349
+ clearTimeout(timeout);
350
+ if (response.status === 401 || response.status === 403) {
351
+ // Token may have expired server-side — clear cache and retry once
352
+ this.cachedToken = null;
353
+ this.tokenExpiresAt = 0;
354
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardAuthFailed(this.baseUrl));
355
+ }
356
+ if (response.status === 402) {
357
+ const text = await response.text().catch(() => '');
358
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUpgradeRequired(text || undefined));
359
+ }
360
+ if (response.status === 404) {
361
+ const errorBody = (await response.json().catch(() => null));
362
+ const detail = errorBody?.error ? String(errorBody.error) : undefined;
363
+ const hint = errorBody?.hint ? String(errorBody.hint) : undefined;
364
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardNotFound(path, detail, hint));
365
+ }
366
+ if (response.status >= 500) {
367
+ const text = await response.text().catch(() => 'Unknown server error');
368
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError(`Server error ${response.status}: ${text}`));
369
+ }
370
+ if (!response.ok) {
371
+ const text = await response.text().catch(() => 'Unknown error');
372
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError(`HTTP ${response.status}: ${text}`));
373
+ }
374
+ const json = (await response.json());
375
+ // Dashboard API wraps responses in {success, data} envelope — unwrap it
376
+ const data = (json && typeof json === 'object' && 'data' in json ? json.data : json);
377
+ return (0, errors_1.createSuccess)(data);
378
+ }
379
+ catch (error) {
380
+ clearTimeout(timeout);
381
+ if (error instanceof Error) {
382
+ if (error.name === 'AbortError') {
383
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUnreachable(this.baseUrl, `Request timed out after ${this.timeoutMs}ms`));
384
+ }
385
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUnreachable(this.baseUrl, error.message));
386
+ }
387
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUnreachable(this.baseUrl, 'Unknown network error'));
388
+ }
389
+ }
390
+ // ─── Public API Methods ──────────────────────────────────────────────────
391
+ /**
392
+ * Get the cached user identity from the last login.
393
+ * Returns null if not yet authenticated.
394
+ */
395
+ get userIdentity() {
396
+ return this.cachedIdentity;
397
+ }
398
+ /**
399
+ * `keyId` of the user-scoped credential that authenticated this client, if known.
400
+ * Sprint 57 m02 — populated by `fromEnvForProject()` when a user-scoped key is
401
+ * picked from the credential store. Callers capturing the auto-issued register
402
+ * response stamp this into `parentKeyId` on the resulting project-scoped record.
403
+ */
404
+ get authenticatingKeyId() {
405
+ return this._authenticatingKeyId;
406
+ }
407
+ /** Internal setter used by the factories when they know the keyId. */
408
+ setAuthenticatingKeyId(keyId) {
409
+ this._authenticatingKeyId = keyId;
410
+ }
411
+ /**
412
+ * Send a message to a target address.
413
+ */
414
+ async sendMessage(params) {
415
+ const body = {
416
+ targetAddress: params.targetAddress,
417
+ type: params.type,
418
+ summary: params.summary,
419
+ body: params.body,
420
+ evidence: params.evidence,
421
+ };
422
+ if (params.senderProjectId) {
423
+ body.senderProjectId = params.senderProjectId;
424
+ }
425
+ if (params.fromProjectId) {
426
+ body.fromProjectId = params.fromProjectId;
427
+ }
428
+ if (params.toProjectId) {
429
+ body.toProjectId = params.toProjectId;
430
+ }
431
+ if (params.senderAddress) {
432
+ body.senderAddress = params.senderAddress;
433
+ }
434
+ const result = await this.request('POST', '/api/messages', body);
435
+ if (result.success &&
436
+ result.data &&
437
+ params.senderAddress &&
438
+ result.data.senderAddress &&
439
+ result.data.senderAddress !== params.senderAddress) {
440
+ console.warn(`[dashboard-client] senderAddress echo mismatch: sent ${params.senderAddress}, dashboard echoed ${result.data.senderAddress}`);
441
+ }
442
+ // Sprint 57 m04: capture the dashboard's identitySource ACK so whoami +
443
+ // onboard can surface "still on legacy user-scoped key" as a warning.
444
+ if (result.success && result.data?.deliveryAck?.identitySource) {
445
+ // Lazy import to keep the dashboard-client free of upstream auth coupling
446
+ // and to avoid a require cycle with src/auth.
447
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
448
+ const { recordDeliveryAck } = require('../../auth/delivery-ack-cache');
449
+ recordDeliveryAck(result.data.deliveryAck.identitySource);
450
+ }
451
+ return result;
452
+ }
453
+ /**
454
+ * List messages (inbox or sent).
455
+ */
456
+ async listMessages(params) {
457
+ const query = new URLSearchParams();
458
+ if (params?.tab)
459
+ query.set('tab', params.tab);
460
+ if (params?.status)
461
+ query.set('status', params.status);
462
+ if (params?.limit !== undefined)
463
+ query.set('limit', String(params.limit));
464
+ const queryString = query.toString();
465
+ const path = `/api/messages${queryString ? `?${queryString}` : ''}`;
466
+ return this.request('GET', path);
467
+ }
468
+ /**
469
+ * Respond to a message (accept, decline, or reply).
470
+ */
471
+ async respondToMessage(params) {
472
+ return this.request('POST', `/api/messages/${params.messageId}/respond`, {
473
+ status: params.status,
474
+ notes: params.notes,
475
+ });
476
+ }
477
+ /**
478
+ * Resolve a cmos:// address to verify it exists.
479
+ */
480
+ async resolveAddress(params) {
481
+ return this.request('GET', `/api/messages/resolve?address=${encodeURIComponent(params.address)}`);
482
+ }
483
+ /**
484
+ * List all addressable projects in the dashboard directory.
485
+ */
486
+ async listDirectory() {
487
+ const result = await this.request('GET', '/api/projects/directory/public');
488
+ if (!result.success || !result.data) {
489
+ return result;
490
+ }
491
+ return (0, errors_1.createSuccess)(normalizeProjectListResult(result.data));
492
+ }
493
+ /**
494
+ * Get projects owned by the authenticated user.
495
+ */
496
+ async getMyProjects() {
497
+ const result = await this.request('GET', '/api/projects/me');
498
+ if (!result.success || !result.data) {
499
+ return result;
500
+ }
501
+ return (0, errors_1.createSuccess)(normalizeProjectListResult(result.data));
502
+ }
503
+ /**
504
+ * Push a sync event to the dashboard.
505
+ * Used by checkpoint backfill.
506
+ */
507
+ async pushSyncEvent(envelope) {
508
+ return this.request('POST', '/api/sync/events', envelope);
509
+ }
510
+ /**
511
+ * Get sync reconciliation status from the dashboard.
512
+ * Returns per-table row counts in the PG mirror.
513
+ */
514
+ async getSyncStatus(projectSlug) {
515
+ const query = projectSlug ? `?projectSlug=${encodeURIComponent(projectSlug)}` : '';
516
+ return this.request('GET', `/api/sync/status${query}`);
517
+ }
518
+ /**
519
+ * Get full project sync state from the dashboard.
520
+ * Returns all synced entities for a specific project.
521
+ */
522
+ async getSyncProjectState(slug) {
523
+ return this.request('GET', `/api/sync/projects/${encodeURIComponent(slug)}/state`);
524
+ }
525
+ /**
526
+ * Purge all mirrored data for a project from the PG mirror.
527
+ * Used before re-backfill to ensure clean state.
528
+ */
529
+ async purgeMirror(projectSlug, expectedSlug) {
530
+ if (expectedSlug && canonicalizeSlug(projectSlug) !== canonicalizeSlug(expectedSlug)) {
531
+ return expectedSlugMismatchError('mirror purge', canonicalizeSlug(expectedSlug), canonicalizeSlug(projectSlug));
532
+ }
533
+ const result = await this.request('POST', '/api/sync/purge', {
534
+ projectSlug,
535
+ confirm: true,
536
+ });
537
+ // 404 means the project doesn't exist in PG yet — nothing to purge, treat as success
538
+ if (!result.success && result.error?.code === 'DASHBOARD_NOT_FOUND') {
539
+ return (0, errors_1.createSuccess)({
540
+ purgedProject: projectSlug,
541
+ tablesCleared: [],
542
+ rowsDeleted: 0,
543
+ });
544
+ }
545
+ return result;
546
+ }
547
+ /**
548
+ * Register a project with the dashboard by uploading the SQLite database.
549
+ * Used for auto-registration on first checkpoint.
550
+ *
551
+ * Endpoint: POST /api/projects/register (multipart/form-data)
552
+ * - 201: New registration
553
+ * - 200: Re-registration (purges and re-backfills)
554
+ */
555
+ /**
556
+ * POST the local SQLite file as multipart/form-data to /api/sync/sqlite-backfill.
557
+ * This is the bulk reconciliation path — idempotent, returns per-entity counts.
558
+ * Uses an extended timeout (60s minimum) to accommodate large file uploads.
559
+ */
560
+ async syncSqliteFile(filePath, projectSlug, expectedSlug) {
561
+ if (expectedSlug && canonicalizeSlug(projectSlug) !== canonicalizeSlug(expectedSlug)) {
562
+ return expectedSlugMismatchError('SQLite sync', canonicalizeSlug(expectedSlug), canonicalizeSlug(projectSlug));
563
+ }
564
+ const tokenResult = await this.getAuthToken();
565
+ if (!tokenResult.success) {
566
+ return (0, errors_1.createError)(tokenResult.error);
567
+ }
568
+ // Read the SQLite file
569
+ let fileBuffer;
570
+ try {
571
+ fileBuffer = (0, fs_1.readFileSync)(filePath);
572
+ }
573
+ catch (err) {
574
+ const msg = err instanceof Error ? err.message : 'Unknown error';
575
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError(`Failed to read SQLite file: ${msg}`));
576
+ }
577
+ // Build multipart form
578
+ const blob = new Blob([fileBuffer], { type: 'application/x-sqlite3' });
579
+ const formData = new FormData();
580
+ formData.append('database', blob, 'cmos.sqlite');
581
+ formData.append('projectSlug', projectSlug);
582
+ const url = `${this.baseUrl}/api/sync/sqlite-backfill`;
583
+ const token = tokenResult.data;
584
+ const controller = new AbortController();
585
+ // Use longer timeout for file upload (60s minimum)
586
+ const uploadTimeoutMs = Math.max(this.timeoutMs, 60000);
587
+ const timeout = setTimeout(() => controller.abort(), uploadTimeoutMs);
588
+ try {
589
+ const response = await fetch(url, {
590
+ method: 'POST',
591
+ headers: {
592
+ Authorization: `Bearer ${token}`,
593
+ Accept: 'application/json',
594
+ // Content-Type is set automatically by fetch for FormData
595
+ },
596
+ body: formData,
597
+ signal: controller.signal,
598
+ });
599
+ clearTimeout(timeout);
600
+ if (response.status === 401 || response.status === 403) {
601
+ this.cachedToken = null;
602
+ this.tokenExpiresAt = 0;
603
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardAuthFailed(this.baseUrl));
604
+ }
605
+ if (response.status === 402) {
606
+ const text = await response.text().catch(() => '');
607
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUpgradeRequired(text || undefined));
608
+ }
609
+ if (!response.ok) {
610
+ const text = await response.text().catch(() => 'Unknown error');
611
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError(`SQLite backfill failed: HTTP ${response.status}: ${text}`));
612
+ }
613
+ const json = (await response.json());
614
+ const data = (json && typeof json === 'object' && 'data' in json ? json.data : json);
615
+ return (0, errors_1.createSuccess)(data);
616
+ }
617
+ catch (error) {
618
+ clearTimeout(timeout);
619
+ if (error instanceof Error) {
620
+ if (error.name === 'AbortError') {
621
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUnreachable(this.baseUrl, `SQLite backfill timed out after ${uploadTimeoutMs}ms`));
622
+ }
623
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUnreachable(this.baseUrl, error.message));
624
+ }
625
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUnreachable(this.baseUrl, 'Unknown network error'));
626
+ }
627
+ }
628
+ async registerProject(params) {
629
+ const derivedSlug = canonicalizeSlug(params.projectName);
630
+ if (params.expectedSlug && derivedSlug !== canonicalizeSlug(params.expectedSlug)) {
631
+ return expectedSlugMismatchError('project registration', canonicalizeSlug(params.expectedSlug), derivedSlug);
632
+ }
633
+ const tokenResult = await this.getAuthToken();
634
+ if (!tokenResult.success) {
635
+ return (0, errors_1.createError)(tokenResult.error);
636
+ }
637
+ // Read the SQLite file
638
+ let fileBuffer;
639
+ try {
640
+ fileBuffer = (0, fs_1.readFileSync)(params.sqlitePath);
641
+ }
642
+ catch (err) {
643
+ const msg = err instanceof Error ? err.message : 'Unknown error';
644
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError(`Failed to read SQLite file: ${msg}`));
645
+ }
646
+ // Build multipart form
647
+ const blob = new Blob([fileBuffer], { type: 'application/x-sqlite3' });
648
+ const formData = new FormData();
649
+ formData.append('database', blob, 'cmos.sqlite');
650
+ formData.append('projectName', params.projectName);
651
+ if (params.localDbPath) {
652
+ formData.append('localDbPath', params.localDbPath);
653
+ }
654
+ const url = `${this.baseUrl}/api/projects/register`;
655
+ const token = tokenResult.data;
656
+ const controller = new AbortController();
657
+ // Use longer timeout for file upload (60s minimum)
658
+ const uploadTimeoutMs = Math.max(this.timeoutMs, 60000);
659
+ const timeout = setTimeout(() => controller.abort(), uploadTimeoutMs);
660
+ try {
661
+ const response = await fetch(url, {
662
+ method: 'POST',
663
+ headers: {
664
+ Authorization: `Bearer ${token}`,
665
+ Accept: 'application/json',
666
+ // Content-Type is set automatically by fetch for FormData
667
+ },
668
+ body: formData,
669
+ signal: controller.signal,
670
+ });
671
+ clearTimeout(timeout);
672
+ if (response.status === 401 || response.status === 403) {
673
+ this.cachedToken = null;
674
+ this.tokenExpiresAt = 0;
675
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardAuthFailed(this.baseUrl));
676
+ }
677
+ if (response.status === 402) {
678
+ const text = await response.text().catch(() => '');
679
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUpgradeRequired(text || undefined));
680
+ }
681
+ if (!response.ok) {
682
+ const text = await response.text().catch(() => 'Unknown error');
683
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError(`Registration failed: HTTP ${response.status}: ${text}`));
684
+ }
685
+ const json = (await response.json());
686
+ const data = (json && typeof json === 'object' && 'data' in json ? json.data : json);
687
+ return (0, errors_1.createSuccess)(data);
688
+ }
689
+ catch (error) {
690
+ clearTimeout(timeout);
691
+ if (error instanceof Error) {
692
+ if (error.name === 'AbortError') {
693
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUnreachable(this.baseUrl, `Registration timed out after ${uploadTimeoutMs}ms`));
694
+ }
695
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUnreachable(this.baseUrl, error.message));
696
+ }
697
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardUnreachable(this.baseUrl, 'Unknown network error'));
698
+ }
699
+ }
700
+ /**
701
+ * Reissue a project-scoped key after partial-failure recovery.
702
+ *
703
+ * POSTs `/api/projects/:id/keys/reissue` with user-scoped `cmk_...` Bearer
704
+ * auth (same auth mode as `/rotate`, `/revoke`, `/register`, `/keys`).
705
+ * Dashboard revokes all prior project-scoped keys bound to the caller's
706
+ * `parent_key_id` for this project and mints a fresh one, returning the
707
+ * plaintext exactly once in the response body. No grace window — reissue
708
+ * implies the current key is lost or compromised.
709
+ *
710
+ * Originally landed in Sprint 57 m02. Sprint 58 m03 live verification
711
+ * (2026-04-22) exposed that the dashboard endpoint was rejecting user-scoped
712
+ * Bearer with HTTP 400 "Reissue requires a logged-in dashboard session".
713
+ * Sprint 59 m01 + dashboard s34-m02 (2026-04-23) fixed the drift — removed
714
+ * the api-key rejection at dashboard projects.ts:740 and added an ownership
715
+ * check matching the existing revoke route. The MCP-side contract
716
+ * (cmk_ Bearer + `{key, keyId, label, revokedKeyIds}` response) did not
717
+ * change — only the dashboard-side acceptance did.
718
+ */
719
+ async reissueProjectKey(projectId) {
720
+ if (!projectId) {
721
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError('reissueProjectKey: projectId is required'));
722
+ }
723
+ return this.request('POST', `/api/projects/${encodeURIComponent(projectId)}/keys/reissue`, {});
724
+ }
725
+ /**
726
+ * Rotate a project-scoped key with an optional grace window.
727
+ *
728
+ * Sprint 57 m03 — `POST /api/projects/:id/keys/rotate` mints a new project
729
+ * key and schedules the old one for revocation in `graceSeconds` (default
730
+ * 300 dashboard-side). Response fields: `newKey`, `newKeyId`, `oldKeyId`,
731
+ * `revokeAt`. Local callers store the new key and hold the old one in
732
+ * `pendingRevoke` so in-flight requests survive the grace window.
733
+ */
734
+ async rotateProjectKey(projectId, options = {}) {
735
+ if (!projectId) {
736
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError('rotateProjectKey: projectId is required'));
737
+ }
738
+ const body = {};
739
+ if (options.graceSeconds !== undefined) {
740
+ body.graceSeconds = options.graceSeconds;
741
+ }
742
+ return this.request('POST', `/api/projects/${encodeURIComponent(projectId)}/keys/rotate`, body);
743
+ }
744
+ /**
745
+ * Scope-aware unified revoke.
746
+ *
747
+ * Sprint 59 m02 / dashboard s34-m03 — `POST /api/keys/:keyId/revoke`. Works
748
+ * for both user-scoped (`projectId IS NULL`) and project-scoped rows; the
749
+ * dashboard infers scope from the key row and enforces ownership:
750
+ * - user-scoped: requester's `userId` must equal the key row's `user_id`
751
+ * - project-scoped: requester must own the project (same check as
752
+ * `/api/projects/:id/keys/revoke/:keyId`)
753
+ *
754
+ * Response envelope `{keyId, revokedAt}` matches the legacy project-scoped
755
+ * endpoint byte-for-byte — deliberate parser-reuse per dashboard team
756
+ * message 335c3a34 (2026-04-23). The inferred scope is NOT echoed back;
757
+ * callers determine it from their own credential store before invoking.
758
+ *
759
+ * No grace window — the key is invalid as soon as this returns. Use `rotate`
760
+ * when a grace window is wanted instead.
761
+ */
762
+ async revokeKey(keyId) {
763
+ if (!keyId) {
764
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError('revokeKey: keyId is required'));
765
+ }
766
+ return this.request('POST', `/api/keys/${encodeURIComponent(keyId)}/revoke`, {});
767
+ }
768
+ /**
769
+ * Hard-revoke a project-scoped key immediately via the legacy project-scoped endpoint.
770
+ *
771
+ * Sprint 57 m03 — `POST /api/projects/:id/keys/revoke/:keyId`. No grace
772
+ * window; the key is invalid from the dashboard's perspective as soon as
773
+ * this returns. Kept unchanged per dashboard team commitment — the
774
+ * profile.ejs key-management UI calls this endpoint directly and existing
775
+ * callers keep working. New callers should prefer `revokeKey(keyId)` (the
776
+ * Sprint 59 m02 unified surface), which also handles user-scoped rows.
777
+ */
778
+ async revokeProjectKey(projectId, keyId) {
779
+ if (!projectId || !keyId) {
780
+ return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError('revokeProjectKey: projectId and keyId are required'));
781
+ }
782
+ return this.request('POST', `/api/projects/${encodeURIComponent(projectId)}/keys/revoke/${encodeURIComponent(keyId)}`, {});
783
+ }
784
+ /**
785
+ * List every key the authenticated credential can see.
786
+ *
787
+ * Sprint 57 m03 — `GET /api/keys`. Response is the full credential tree
788
+ * (user-scoped rows where `projectId === null` plus their spawned
789
+ * project-scoped children via `parentKeyId`). Callers apply the "mine-only"
790
+ * filter locally by matching `parentKeyId` against their own credential
791
+ * store's `userScopedKeys`.
792
+ */
793
+ async listKeys() {
794
+ return this.request('GET', '/api/keys');
795
+ }
796
+ }
797
+ exports.DashboardClient = DashboardClient;
798
+ /** Buffer before expiry to trigger re-auth (30 seconds) */
799
+ DashboardClient.EXPIRY_BUFFER_MS = 30000;
800
+ //# sourceMappingURL=dashboard-client.js.map