@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
package/dist/index.js ADDED
@@ -0,0 +1,972 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ // ABOUTME: Main MCP server entry point, including tool dispatch and startup diagnostics.
4
+ // ABOUTME: Runs an attribution self-test at boot so sender-resolution regressions surface immediately.
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.__test__ = void 0;
40
+ exports.getToolDefinitions = getToolDefinitions;
41
+ exports.summarizeValue = summarizeValue;
42
+ exports.sanitizeArgs = sanitizeArgs;
43
+ exports.buildMissionProtocolContext = buildMissionProtocolContext;
44
+ exports.registerToolHandlers = registerToolHandlers;
45
+ exports.executeMissionProtocolTool = executeMissionProtocolTool;
46
+ exports.runStartupBundledEnvCheck = runStartupBundledEnvCheck;
47
+ /**
48
+ * Mission Protocol v2 MCP Server
49
+ *
50
+ * Main entry point for the MCP server that exposes domain discovery tools.
51
+ * Uses stdio transport for Claude Desktop integration.
52
+ *
53
+ * @module index
54
+ */
55
+ const fs = __importStar(require("fs"));
56
+ const path = __importStar(require("path"));
57
+ // Load .env if present (before any other imports that read process.env).
58
+ // Resolve project root from: env var → directory containing this script.
59
+ // Overrides empty values (present-but-unset is treated as absent) so IDE
60
+ // spawns that pass empty env keys don't shadow .env values.
61
+ const __projectRoot = process.env.CMOS_PROJECT_ROOT ?? path.resolve(__dirname, '..');
62
+ const envPath = path.join(__projectRoot, '.env');
63
+ try {
64
+ if (fs.existsSync(envPath)) {
65
+ const lines = fs.readFileSync(envPath, 'utf-8').split('\n');
66
+ let loaded = 0;
67
+ for (const line of lines) {
68
+ const trimmed = line.trim();
69
+ if (!trimmed || trimmed.startsWith('#'))
70
+ continue;
71
+ const eqIdx = trimmed.indexOf('=');
72
+ if (eqIdx === -1)
73
+ continue;
74
+ const key = trimmed.slice(0, eqIdx).trim();
75
+ let value = trimmed.slice(eqIdx + 1).trim();
76
+ if ((value.startsWith('"') && value.endsWith('"')) ||
77
+ (value.startsWith("'") && value.endsWith("'"))) {
78
+ value = value.slice(1, -1);
79
+ }
80
+ if (!process.env[key]) {
81
+ process.env[key] = value;
82
+ loaded++;
83
+ }
84
+ }
85
+ process.stderr.write(`[env-loader] loaded ${loaded} vars from ${envPath}\n`);
86
+ }
87
+ else {
88
+ process.stderr.write(`[env-loader] .env not found at ${envPath}\n`);
89
+ }
90
+ }
91
+ catch (err) {
92
+ process.stderr.write(`[env-loader] failed to load ${envPath}: ${err instanceof Error ? err.message : String(err)}\n`);
93
+ }
94
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
95
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
96
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
97
+ const cmos_detector_1 = require("./intelligence/cmos-detector");
98
+ const project_registry_1 = require("./intelligence/project-registry");
99
+ const sender_context_1 = require("./intelligence/sender-context");
100
+ const client_1 = require("./tools/cmos/client");
101
+ const cmos_1 = require("./tools/cmos");
102
+ const token_counters_1 = require("./intelligence/token-counters");
103
+ const tokenizer_bootstrap_1 = require("./intelligence/tokenizer-bootstrap");
104
+ const handler_1 = require("./errors/handler");
105
+ const logger_1 = require("./errors/logger");
106
+ const server_health_1 = require("./server-health");
107
+ const project_key_capture_1 = require("./auth/project-key-capture");
108
+ /**
109
+ * MCP Server Configuration
110
+ */
111
+ const SERVER_CONFIG = {
112
+ name: 'mission-protocol',
113
+ version: '2.0.0',
114
+ };
115
+ /**
116
+ * Main server instance
117
+ */
118
+ const server = new index_js_1.Server({
119
+ name: SERVER_CONFIG.name,
120
+ version: SERVER_CONFIG.version,
121
+ }, {
122
+ capabilities: {
123
+ tools: {},
124
+ },
125
+ });
126
+ const errorLogger = new logger_1.ErrorLogger();
127
+ handler_1.ErrorHandler.useLogger(errorLogger);
128
+ /**
129
+ * Get tool definitions for the MCP surface.
130
+ *
131
+ * @returns Array of CMOS tool definitions
132
+ */
133
+ function getToolDefinitions() {
134
+ return [...cmos_1.CMOS_TOOL_DEFINITIONS];
135
+ }
136
+ function summarizeValue(value) {
137
+ if (value === null || value === undefined) {
138
+ return null;
139
+ }
140
+ if (Array.isArray(value)) {
141
+ return value.slice(0, 5).map((item) => summarizeValue(item));
142
+ }
143
+ if (typeof value === 'object') {
144
+ return '[object]';
145
+ }
146
+ if (typeof value === 'string' && value.length > 200) {
147
+ return `${value.slice(0, 197)}…`;
148
+ }
149
+ return value;
150
+ }
151
+ function sanitizeArgs(args) {
152
+ if (!args || typeof args !== 'object') {
153
+ return undefined;
154
+ }
155
+ const entries = Object.entries(args).slice(0, 10);
156
+ const sanitized = {};
157
+ for (const [key, value] of entries) {
158
+ sanitized[key] = summarizeValue(value);
159
+ }
160
+ return sanitized;
161
+ }
162
+ async function buildMissionProtocolContext(options) {
163
+ const baseDir = options?.baseDir ?? path.resolve(__dirname, '../templates');
164
+ const defaultModel = options?.defaultModel ?? 'claude';
165
+ // Initialize token counter for intelligence tools
166
+ const tokenCounter = new token_counters_1.TokenCounter();
167
+ // Detect CMOS in the project (respects CMOS_PROJECT_ROOT env var)
168
+ const projectRoot = (0, cmos_1.resolveProjectRoot)();
169
+ const detector = cmos_detector_1.CmosDetector.getInstance({ cacheTtlMs: 60000 });
170
+ const cmosResult = await detector.detect(projectRoot);
171
+ const cmosDetected = cmosResult.hasCmosDirectory && cmosResult.hasDatabase;
172
+ return {
173
+ baseDir,
174
+ defaultModel,
175
+ tokenCounter,
176
+ cmosDetected,
177
+ cmosDatabasePath: cmosResult.databasePath,
178
+ };
179
+ }
180
+ let contextBuilder = buildMissionProtocolContext;
181
+ let whoamiCliRunner = runWhoamiCli;
182
+ let startupAttributionSelfTestRunner = runStartupAttributionSelfTest;
183
+ /**
184
+ * Cached client project roots from MCP roots (all of them, not just the first).
185
+ * Updated lazily on first CMOS tool call and cleared on `notifications/roots/list_changed`.
186
+ *
187
+ * `undefined` means "never probed"; empty array means "probed, none advertised".
188
+ */
189
+ let cachedClientProjectRoots;
190
+ /**
191
+ * Get ALL client project roots from MCP roots.
192
+ *
193
+ * Sprint 53 m02: changed from `Promise<string | undefined>` (first root only) to
194
+ * `Promise<string[]>` so `resolveSenderContext` can walk every advertised root and
195
+ * pick the one that owns a valid `dashboard_project_id`. The former first-only
196
+ * behavior silently mis-attributed whenever the client advertised multiple roots
197
+ * in a different order than the operator expected.
198
+ *
199
+ * @returns Array of file-system paths. Empty when the client advertises no roots
200
+ * or does not support the roots capability.
201
+ */
202
+ async function getClientProjectRoots() {
203
+ if (cachedClientProjectRoots !== undefined) {
204
+ return cachedClientProjectRoots;
205
+ }
206
+ const roots = [];
207
+ try {
208
+ const rootsResult = await server.listRoots();
209
+ if (rootsResult.roots && rootsResult.roots.length > 0) {
210
+ for (const root of rootsResult.roots) {
211
+ if (root.uri.startsWith('file://')) {
212
+ roots.push(decodeURIComponent(root.uri.slice(7)));
213
+ }
214
+ }
215
+ if (roots.length > 0) {
216
+ console.error(`[INFO] Client project roots from MCP roots: ${roots.join(', ')}`);
217
+ }
218
+ }
219
+ }
220
+ catch (error) {
221
+ // Client may not support roots - this is fine, fall back to other methods
222
+ console.error(`[DEBUG] Could not get client roots: ${error instanceof Error ? error.message : 'unknown'}`);
223
+ }
224
+ cachedClientProjectRoots = roots;
225
+ return cachedClientProjectRoots;
226
+ }
227
+ /**
228
+ * Fan out a read-only operation across all registered CMOS instances.
229
+ *
230
+ * Returns an entry per registered project. Partial failures are included
231
+ * (not thrown) so callers can surface provenance alongside any errors.
232
+ *
233
+ * @param fn - Async service call to run for each projectRoot
234
+ * @returns Success with per-instance entries, or error if no projects registered
235
+ */
236
+ async function fanOutRead(fn) {
237
+ const registry = project_registry_1.ProjectRegistry.getInstance();
238
+ const projects = await registry.list();
239
+ if (projects.length === 0) {
240
+ return {
241
+ success: false,
242
+ error: {
243
+ code: 'CMOS_NOT_DETECTED',
244
+ message: 'No CMOS projects registered. Cannot fan out without an explicit projectRoot.',
245
+ suggestion: 'Provide an explicit projectRoot, set CMOS_PROJECT_ROOT, or register a project with cmos_project(action="register").',
246
+ },
247
+ };
248
+ }
249
+ const entries = await Promise.all(projects.map(async (project) => {
250
+ const result = await fn(project.projectRoot);
251
+ return {
252
+ resolvedFrom: project.projectRoot,
253
+ success: result.success,
254
+ data: result.data,
255
+ error: result.error,
256
+ };
257
+ }));
258
+ return { success: true, data: entries };
259
+ }
260
+ /**
261
+ * Format fan-out results for LLM consumption.
262
+ *
263
+ * Each entry is labelled with its source project and separated by a divider.
264
+ */
265
+ function formatFanOut(entries, formatEntry) {
266
+ if (entries.length === 0) {
267
+ return 'No registered CMOS instances found.';
268
+ }
269
+ return entries
270
+ .map((e) => `[${path.basename(e.resolvedFrom)}] ${e.resolvedFrom}\n${formatEntry(e)}`)
271
+ .join('\n\n---\n\n');
272
+ }
273
+ /**
274
+ * Resolve the sender context for a dispatched tool call.
275
+ *
276
+ * Sprint 53 m02: replaces the old `resolveCmosProjectRoot` (which silently fell
277
+ * back to `CMOS_PROJECT_ROOT` env) with the single audited boundary from
278
+ * `src/intelligence/sender-context.ts`. Every dispatcher case now flows through
279
+ * this function. `CMOS_PROJECT_ROOT` is no longer consulted at tool dispatch
280
+ * time — it is retained only for `.env` bootstrap at src/index.ts:17 so the
281
+ * server can locate its own environment file.
282
+ *
283
+ * @param explicitRoot - `params.projectRoot` from the tool call, if any
284
+ * @param options.requireSenderIdentity - Pass `true` for any call that will hit
285
+ * the dashboard with authoritative attribution (today: cmos_message send;
286
+ * Sprint 53 m04 adds checkpoint-backfill, registerProject, purge). Defaults to
287
+ * `false` for local-DB ops.
288
+ * @throws SenderResolutionError when no candidate produces an acceptable project.
289
+ */
290
+ async function resolveToolSenderContext(explicitRoot, options = {}) {
291
+ const mcpRoots = await getClientProjectRoots();
292
+ return (0, sender_context_1.resolveSenderContext)({
293
+ explicitProjectRoot: explicitRoot,
294
+ mcpRoots,
295
+ requireSenderIdentity: options.requireSenderIdentity ?? false,
296
+ });
297
+ }
298
+ /**
299
+ * Register tool handlers
300
+ */
301
+ function registerToolHandlers(context, serverInstance) {
302
+ const targetServer = serverInstance || server;
303
+ // Listen for roots changes and clear cache
304
+ targetServer.setNotificationHandler(types_js_1.RootsListChangedNotificationSchema, async () => {
305
+ console.error(`[INFO] Client roots changed, clearing cache`);
306
+ cachedClientProjectRoots = undefined;
307
+ });
308
+ // List available tools (includes CMOS tools when detected)
309
+ targetServer.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
310
+ return {
311
+ tools: getToolDefinitions(),
312
+ };
313
+ });
314
+ // Handle tool execution
315
+ targetServer.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
316
+ const { name, arguments: args } = request.params;
317
+ try {
318
+ if (!context) {
319
+ throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, 'Server context not initialized');
320
+ }
321
+ return await executeMissionProtocolTool(name, args, context);
322
+ }
323
+ catch (error) {
324
+ const sanitizedArgs = sanitizeArgs(args);
325
+ const data = {
326
+ tool: name,
327
+ };
328
+ if (sanitizedArgs) {
329
+ data.args = sanitizedArgs;
330
+ }
331
+ const missionError = handler_1.ErrorHandler.handle(error, 'server.execute_tool', {
332
+ module: 'server',
333
+ data,
334
+ }, {
335
+ rethrow: false,
336
+ userMessage: 'Tool execution failed. Please check inputs and try again.',
337
+ });
338
+ const publicError = handler_1.ErrorHandler.toPublicError(missionError);
339
+ const correlationFragment = publicError.correlationId
340
+ ? ` (correlationId=${publicError.correlationId})`
341
+ : '';
342
+ throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, `Tool execution failed${correlationFragment}: ${publicError.message}`);
343
+ }
344
+ });
345
+ }
346
+ async function executeMissionProtocolTool(name, args, _context) {
347
+ switch (name) {
348
+ // ========================================
349
+ // CMOS Tools (always available, return graceful error if not detected)
350
+ // ========================================
351
+ // Consolidated DB admin tool (Sprint 24)
352
+ case 'cmos_db': {
353
+ const params = args;
354
+ const projectRoot = (await resolveToolSenderContext(params.projectRoot)).projectRoot;
355
+ const result = await (0, cmos_1.cmosDb)({ ...params, projectRoot });
356
+ const formatted = (0, cmos_1.formatDbForLLM)(params.action, result);
357
+ return {
358
+ content: [{ type: 'text', text: formatted }],
359
+ structuredContent: { ...result },
360
+ isError: result.success === false,
361
+ };
362
+ }
363
+ // Consolidated mission CRUD tool (Sprint 24)
364
+ case 'cmos_mission': {
365
+ const params = args;
366
+ if (!params.projectRoot && (0, client_1.isReadAction)('cmos_mission', params.action)) {
367
+ const fanResult = await fanOutRead((root) => (0, cmos_1.cmosMission)({ ...params, projectRoot: root }));
368
+ const formatted = fanResult.success
369
+ ? formatFanOut(fanResult.data, (e) => (0, cmos_1.formatMissionForLLM)(params.action, {
370
+ success: e.success,
371
+ data: e.data,
372
+ error: e.error,
373
+ }))
374
+ : String(fanResult.error?.message ?? 'Fan-out failed');
375
+ return {
376
+ content: [{ type: 'text', text: formatted }],
377
+ structuredContent: fanResult,
378
+ isError: !fanResult.success,
379
+ };
380
+ }
381
+ const projectRoot = (await resolveToolSenderContext(params.projectRoot)).projectRoot;
382
+ const result = await (0, cmos_1.cmosMission)({ ...params, projectRoot });
383
+ const formatted = (0, cmos_1.formatMissionForLLM)(params.action, result);
384
+ return {
385
+ content: [{ type: 'text', text: formatted }],
386
+ structuredContent: { ...result },
387
+ isError: result.success === false,
388
+ };
389
+ }
390
+ // Consolidated mission transition tool (Sprint 24)
391
+ case 'cmos_mission_transition': {
392
+ const params = args;
393
+ const projectRoot = (await resolveToolSenderContext(params.projectRoot)).projectRoot;
394
+ const result = await (0, cmos_1.cmosMissionTransition)({ ...params, projectRoot });
395
+ const formatted = (0, cmos_1.formatMissionTransitionForLLM)(params.action, result);
396
+ return {
397
+ content: [{ type: 'text', text: formatted }],
398
+ structuredContent: { ...result },
399
+ isError: result.success === false,
400
+ };
401
+ }
402
+ // Consolidated context tool (Sprint 24)
403
+ case 'cmos_context': {
404
+ const params = args;
405
+ if (!params.projectRoot && (0, client_1.isReadAction)('cmos_context', params.action)) {
406
+ const fanResult = await fanOutRead((root) => (0, cmos_1.cmosContext)({ ...params, projectRoot: root }));
407
+ const formatted = fanResult.success
408
+ ? formatFanOut(fanResult.data, (e) => (0, cmos_1.formatContextForLLM)(params.action, {
409
+ success: e.success,
410
+ data: e.data,
411
+ error: e.error,
412
+ }, params.contextType))
413
+ : String(fanResult.error?.message ?? 'Fan-out failed');
414
+ return {
415
+ content: [{ type: 'text', text: formatted }],
416
+ structuredContent: fanResult,
417
+ isError: !fanResult.success,
418
+ };
419
+ }
420
+ const projectRoot = (await resolveToolSenderContext(params.projectRoot)).projectRoot;
421
+ const result = await (0, cmos_1.cmosContext)({ ...params, projectRoot });
422
+ const formatted = (0, cmos_1.formatContextForLLM)(params.action, result, params.contextType);
423
+ return {
424
+ content: [{ type: 'text', text: formatted }],
425
+ structuredContent: { ...result },
426
+ isError: result.success === false,
427
+ };
428
+ }
429
+ // Consolidated session tool (Sprint 24)
430
+ case 'cmos_session': {
431
+ const params = args;
432
+ if (!params.projectRoot && (0, client_1.isReadAction)('cmos_session', params.action)) {
433
+ const fanResult = await fanOutRead((root) => (0, cmos_1.cmosSession)({ ...params, projectRoot: root }));
434
+ const formatted = fanResult.success
435
+ ? formatFanOut(fanResult.data, (e) => (0, cmos_1.formatSessionForLLM)(params.action, {
436
+ success: e.success,
437
+ data: e.data,
438
+ error: e.error,
439
+ }))
440
+ : String(fanResult.error?.message ?? 'Fan-out failed');
441
+ return {
442
+ content: [{ type: 'text', text: formatted }],
443
+ structuredContent: fanResult,
444
+ isError: !fanResult.success,
445
+ };
446
+ }
447
+ const projectRoot = (await resolveToolSenderContext(params.projectRoot)).projectRoot;
448
+ const result = await (0, cmos_1.cmosSession)({ ...params, projectRoot });
449
+ const formatted = (0, cmos_1.formatSessionForLLM)(params.action, result);
450
+ return {
451
+ content: [{ type: 'text', text: formatted }],
452
+ structuredContent: { ...result },
453
+ isError: result.success === false,
454
+ };
455
+ }
456
+ // Consolidated decisions tool (Sprint 24)
457
+ case 'cmos_decisions': {
458
+ const params = args;
459
+ const projectRoot = (await resolveToolSenderContext(params.projectRoot)).projectRoot;
460
+ const result = await (0, cmos_1.cmosDecisions)({ ...params, projectRoot });
461
+ const formatted = (0, cmos_1.formatDecisionsForLLM)(params.action, result);
462
+ return {
463
+ content: [{ type: 'text', text: formatted }],
464
+ structuredContent: { ...result },
465
+ isError: result.success === false,
466
+ };
467
+ }
468
+ // Consolidated learnings tool (Sprint 38)
469
+ case 'cmos_learnings': {
470
+ const params = args;
471
+ const projectRoot = (await resolveToolSenderContext(params.projectRoot)).projectRoot;
472
+ const result = await (0, cmos_1.cmosLearnings)({ ...params, projectRoot });
473
+ const formatted = (0, cmos_1.formatLearningsForLLM)(params.action, result);
474
+ return {
475
+ content: [{ type: 'text', text: formatted }],
476
+ structuredContent: { ...result },
477
+ isError: result.success === false,
478
+ };
479
+ }
480
+ // Consolidated feedback tool (Sprint 56 m03)
481
+ case 'cmos_feedback': {
482
+ const params = args;
483
+ const projectRoot = (await resolveToolSenderContext(params.projectRoot)).projectRoot;
484
+ const result = await (0, cmos_1.cmosFeedback)({ ...params, projectRoot });
485
+ const formatted = (0, cmos_1.formatFeedbackForLLM)(params.action, result);
486
+ return {
487
+ content: [{ type: 'text', text: formatted }],
488
+ structuredContent: { ...result },
489
+ isError: result.success === false,
490
+ };
491
+ }
492
+ // Credential lifecycle (Sprint 57 m03)
493
+ case 'cmos_auth': {
494
+ const params = args;
495
+ const projectRoot = (await resolveToolSenderContext(params.projectRoot)).projectRoot;
496
+ const result = await (0, cmos_1.cmosAuth)({ ...params, projectRoot });
497
+ const formatted = (0, cmos_1.formatAuthForLLM)(params.action, result);
498
+ return {
499
+ content: [{ type: 'text', text: formatted }],
500
+ structuredContent: { ...result },
501
+ isError: result.success === false,
502
+ };
503
+ }
504
+ // At-a-glance status payload (Sprint 62 m06)
505
+ case 'cmos_status': {
506
+ const params = args;
507
+ const projectRoot = (await resolveToolSenderContext(params.projectRoot)).projectRoot;
508
+ const result = await (0, cmos_1.cmosStatus)({ ...params, projectRoot });
509
+ const formatted = (0, cmos_1.formatStatusForLLM)(result);
510
+ return {
511
+ content: [{ type: 'text', text: formatted }],
512
+ structuredContent: { ...result },
513
+ isError: result.success === false,
514
+ };
515
+ }
516
+ // Sprint tools
517
+ case 'cmos_sprint': {
518
+ const params = args;
519
+ if (!params.projectRoot && (0, client_1.isReadAction)('cmos_sprint', params.action)) {
520
+ const fanResult = await fanOutRead((root) => (0, cmos_1.cmosSprint)({ ...params, projectRoot: root }));
521
+ const formatted = fanResult.success
522
+ ? formatFanOut(fanResult.data, (e) => (0, cmos_1.formatSprintForLLM)(params.action, {
523
+ success: e.success,
524
+ data: e.data,
525
+ error: e.error,
526
+ }))
527
+ : String(fanResult.error?.message ?? 'Fan-out failed');
528
+ return {
529
+ content: [{ type: 'text', text: formatted }],
530
+ structuredContent: fanResult,
531
+ isError: !fanResult.success,
532
+ };
533
+ }
534
+ const projectRoot = (await resolveToolSenderContext(params.projectRoot)).projectRoot;
535
+ const result = await (0, cmos_1.cmosSprint)({ ...params, projectRoot });
536
+ const formatted = (0, cmos_1.formatSprintForLLM)(params.action, result);
537
+ return {
538
+ content: [{ type: 'text', text: formatted }],
539
+ structuredContent: { ...result },
540
+ isError: result.success === false,
541
+ };
542
+ }
543
+ case 'cmos_agent_onboard': {
544
+ const params = args;
545
+ const advertisedRoots = await getClientProjectRoots();
546
+ const callerProvidedProjectRoot = typeof params.projectRoot === 'string';
547
+ const projectRoot = (await resolveToolSenderContext(params.projectRoot)).projectRoot;
548
+ const result = await (0, cmos_1.cmosAgentOnboard)({
549
+ ...params,
550
+ projectRoot,
551
+ advertisedRoots,
552
+ callerProvidedProjectRoot,
553
+ });
554
+ const formatted = (0, cmos_1.formatAgentOnboardForLLM)(result);
555
+ return {
556
+ content: [{ type: 'text', text: formatted }],
557
+ structuredContent: { ...result },
558
+ isError: result.success === false,
559
+ };
560
+ }
561
+ // Consolidated message tool (Sprint 28)
562
+ case 'cmos_message': {
563
+ const params = args;
564
+ const advertisedRoots = await getClientProjectRoots();
565
+ if (params.action === 'whoami') {
566
+ const result = await (0, cmos_1.getWhoamiDiagnostics)({
567
+ explicitProjectRoot: params.projectRoot,
568
+ mcpRoots: advertisedRoots,
569
+ });
570
+ const formatted = (0, cmos_1.formatMessageForLLM)(params.action, result);
571
+ return {
572
+ content: [{ type: 'text', text: formatted }],
573
+ structuredContent: { ...result },
574
+ isError: result.success === false,
575
+ };
576
+ }
577
+ // Sprint 53 m02: `send` must resolve through the audited boundary with
578
+ // `requireSenderIdentity=true`. The former path bypassed root resolution
579
+ // entirely (see sprint-53-attribution-rebuild.md §Verified Root Cause #2)
580
+ // and was the structural source of the Stage1→OODS P0. Non-send actions
581
+ // (list/respond/directory) hit the dashboard directly and don't need a
582
+ // local project identity, so they skip resolution.
583
+ let projectRoot = params.projectRoot;
584
+ if (params.action === 'send') {
585
+ const ctx = await (0, sender_context_1.resolveSenderContext)({
586
+ explicitProjectRoot: params.projectRoot,
587
+ mcpRoots: advertisedRoots,
588
+ requireSenderIdentity: true,
589
+ });
590
+ projectRoot = ctx.projectRoot;
591
+ }
592
+ const result = await (0, cmos_1.cmosMessage)({ ...params, projectRoot, advertisedRoots });
593
+ const formatted = (0, cmos_1.formatMessageForLLM)(params.action, result);
594
+ return {
595
+ content: [{ type: 'text', text: formatted }],
596
+ structuredContent: { ...result },
597
+ isError: result.success === false,
598
+ };
599
+ }
600
+ // Consolidated project tool (Sprint 24)
601
+ case 'cmos_project': {
602
+ const params = args;
603
+ // init/register take a literal user-supplied path (destination for a new
604
+ // workspace, or path to register). Routing through resolveToolSenderContext
605
+ // would fall back to the caller's own project when the path has no CMOS DB,
606
+ // which for init clobbers the caller's metadata with a fresh seed. The
607
+ // action handlers validate the path themselves and reject empty/missing input.
608
+ const isLiteralPathAction = params.action === 'init' || params.action === 'register';
609
+ const projectRoot = isLiteralPathAction
610
+ ? params.projectRoot
611
+ : (await resolveToolSenderContext(params.projectRoot)).projectRoot;
612
+ const result = await (0, cmos_1.cmosProject)({ ...params, projectRoot });
613
+ const formatted = (0, cmos_1.formatProjectForLLM)(params.action, result, {
614
+ validate: params.validate,
615
+ });
616
+ return {
617
+ content: [{ type: 'text', text: formatted }],
618
+ structuredContent: { ...result },
619
+ isError: result.success === false,
620
+ };
621
+ }
622
+ default:
623
+ throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
624
+ }
625
+ }
626
+ async function runWhoamiCli() {
627
+ const result = await (0, cmos_1.getWhoamiDiagnostics)();
628
+ console.log((0, cmos_1.formatMessageForLLM)('whoami', result));
629
+ return result.success ? 0 : 1;
630
+ }
631
+ /**
632
+ * Walk the registry, drop entries whose `projectRoot` no longer contains a
633
+ * CMOS database, and emit a concise log line so the operator can see drift.
634
+ *
635
+ * Sprint 56 m01: registry pollution was blowing the fanout response cap on
636
+ * read surfaces. Auto-prune at boot keeps the registry bounded by live
637
+ * projects without requiring a manual `cmos_project(action="validate")`.
638
+ */
639
+ async function runStartupRegistryPrune() {
640
+ try {
641
+ const registry = await project_registry_1.ProjectRegistry.create();
642
+ const before = (await registry.list()).length;
643
+ const pruned = await registry.prune();
644
+ const remaining = (await registry.list()).length;
645
+ return { totalBefore: before, pruned, remaining, error: null };
646
+ }
647
+ catch (error) {
648
+ const message = error instanceof Error ? error.message : 'unknown error';
649
+ return { totalBefore: null, pruned: 0, remaining: null, error: message };
650
+ }
651
+ }
652
+ let startupRegistryPruneRunner = runStartupRegistryPrune;
653
+ // Sprint 57 m02: startup recovery for partial-failure auto-issue. Non-fatal.
654
+ let startupProjectKeyRecoveryRunner = project_key_capture_1.runStartupProjectKeyRecovery;
655
+ // Sprint 58 m02: startup credential-store empty-check. Non-fatal.
656
+ let startupCredentialCheckRunner = project_key_capture_1.runStartupCredentialCheck;
657
+ function runStartupBundledEnvCheck(serverInstallRoot = sender_context_1.SERVER_INSTALL_ROOT) {
658
+ const installedFromNpm = serverInstallRoot.includes(`${path.sep}node_modules${path.sep}`);
659
+ if (!installedFromNpm) {
660
+ return { installedFromNpm: false, envFilePath: null, envFileBundled: false };
661
+ }
662
+ const envFilePath = path.join(serverInstallRoot, '.env');
663
+ const envFileBundled = fs.existsSync(envFilePath);
664
+ return { installedFromNpm: true, envFilePath, envFileBundled };
665
+ }
666
+ let startupBundledEnvCheckRunner = runStartupBundledEnvCheck;
667
+ async function runStartupAttributionSelfTest() {
668
+ try {
669
+ const resolved = await (0, sender_context_1.resolveSenderContext)({
670
+ requireSenderIdentity: true,
671
+ });
672
+ return {
673
+ projectRoot: resolved.projectRoot,
674
+ source: resolved.source,
675
+ errorCode: null,
676
+ warning: resolved.projectRoot === sender_context_1.SERVER_INSTALL_ROOT
677
+ ? 'SERVER_INSTALL_ROOT resolved as the sender. Remediation: run the server from the client project or rely on advertised MCP roots.'
678
+ : null,
679
+ };
680
+ }
681
+ catch (error) {
682
+ if (error instanceof sender_context_1.SenderResolutionError) {
683
+ const installRootGuardCandidate = error.candidates.find((candidate) => candidate.source === 'cwd' &&
684
+ candidate.projectRoot === sender_context_1.SERVER_INSTALL_ROOT &&
685
+ candidate.rejectReason?.includes('cwd-vs-SERVER_INSTALL_ROOT guard'));
686
+ return {
687
+ projectRoot: null,
688
+ source: null,
689
+ errorCode: error.code,
690
+ warning: installRootGuardCandidate
691
+ ? 'SERVER_INSTALL_ROOT would have been the implicit sender. Remediation: run the server from the client project or rely on advertised MCP roots.'
692
+ : null,
693
+ };
694
+ }
695
+ const message = error instanceof Error ? error.message : 'unknown error';
696
+ return {
697
+ projectRoot: null,
698
+ source: null,
699
+ errorCode: 'SELF_TEST_FAILED',
700
+ warning: `Startup attribution self-test failed unexpectedly: ${message}`,
701
+ };
702
+ }
703
+ }
704
+ /**
705
+ * Initialize server components
706
+ */
707
+ async function initializeServer() {
708
+ try {
709
+ console.error(`[INFO] Initializing MCP server...`);
710
+ const context = await contextBuilder();
711
+ console.error(`[INFO] Template base directory: ${context.baseDir}`);
712
+ console.error(`[INFO] Default intelligence model: ${context.defaultModel}`);
713
+ // Sprint 53 m02 / m04: startup diagnostic for attribution. `SERVER_INSTALL_ROOT`
714
+ // is the one path that must never be the *implicit* sender for another project;
715
+ // operators see it here so they can verify before debugging misrouted sends.
716
+ const envProjectRoot = process.env[cmos_1.CMOS_PROJECT_ROOT_ENV];
717
+ console.error(`[INFO] Server install root: ${sender_context_1.SERVER_INSTALL_ROOT}`);
718
+ console.error(`[INFO] Sender attribution diagnostics: Server install root: ${sender_context_1.SERVER_INSTALL_ROOT}. ` +
719
+ `${cmos_1.CMOS_PROJECT_ROOT_ENV} env: ${envProjectRoot ?? 'unset'}. Roots support: probed on first call.`);
720
+ if (envProjectRoot) {
721
+ console.error(`[WARN] ${cmos_1.CMOS_PROJECT_ROOT_ENV}=${envProjectRoot} is set. Sprint 53 removed this from the ` +
722
+ `tool-dispatch resolution chain — it is retained only for .env bootstrap. If you relied on ` +
723
+ `this env to pin attribution, pass projectRoot explicitly or ensure your MCP client advertises ` +
724
+ `roots. Every outbound send will fail-closed rather than silently attribute to the server's ` +
725
+ `own project.`);
726
+ }
727
+ else {
728
+ console.error(`[INFO] ${cmos_1.CMOS_PROJECT_ROOT_ENV} env: unset (expected post-Sprint-53).`);
729
+ }
730
+ const registryPrune = await startupRegistryPruneRunner();
731
+ if (registryPrune.error) {
732
+ console.error(`[WARN] Registry prune skipped: ${registryPrune.error} — continuing startup with unpruned registry.`);
733
+ }
734
+ else if (registryPrune.pruned > 0) {
735
+ console.error(`[INFO] pruned ${registryPrune.pruned} stale entries from project registry (${registryPrune.remaining} remaining)`);
736
+ }
737
+ else {
738
+ console.error(`[INFO] Project registry healthy: ${registryPrune.remaining ?? 0} entries, no stale entries pruned`);
739
+ }
740
+ const attributionSelfTest = await startupAttributionSelfTestRunner();
741
+ if (attributionSelfTest.projectRoot && attributionSelfTest.source) {
742
+ console.error(`[INFO] Sender attribution self-test: ${attributionSelfTest.source} -> ${attributionSelfTest.projectRoot}`);
743
+ }
744
+ else {
745
+ console.error(`[INFO] Sender attribution self-test: unresolved (${attributionSelfTest.errorCode ?? 'unknown'})`);
746
+ }
747
+ if (attributionSelfTest.warning) {
748
+ console.error(`[P0] Sender attribution self-test warning: ${attributionSelfTest.warning}`);
749
+ }
750
+ // Sprint 57 m02: partial-failure recovery for projects registered on the
751
+ // dashboard but with no local project key. Non-fatal — startup continues
752
+ // regardless of the outcome.
753
+ try {
754
+ const recoveryRoot = attributionSelfTest.projectRoot ?? undefined;
755
+ const recovery = await startupProjectKeyRecoveryRunner({
756
+ ...(recoveryRoot ? { projectRoot: recoveryRoot } : {}),
757
+ });
758
+ if (recovery.status === 'recovered') {
759
+ console.error(`[INFO] Project key recovery: ${recovery.message}`);
760
+ }
761
+ else if (recovery.status === 'error') {
762
+ console.error(`[WARN] Project key recovery: ${recovery.message}`);
763
+ }
764
+ else {
765
+ console.error(`[INFO] Project key recovery: ${recovery.status} — ${recovery.message}`);
766
+ }
767
+ }
768
+ catch (error) {
769
+ const message = error instanceof Error ? error.message : 'unknown error';
770
+ console.error(`[WARN] Project key recovery hook threw (non-fatal): ${message}. Continuing startup.`);
771
+ }
772
+ // Sprint 58 m02: surface an empty credential store with a one-line
773
+ // [WARN] pointing at cmos_auth(action="login"). Makes the "just nothing
774
+ // happens" first-run state audible. Non-fatal.
775
+ try {
776
+ await startupCredentialCheckRunner();
777
+ }
778
+ catch (error) {
779
+ const message = error instanceof Error ? error.message : 'unknown error';
780
+ console.error(`[WARN] Startup credential check threw (non-fatal): ${message}. Continuing startup.`);
781
+ }
782
+ // Sprint 62 m02: detect a .env file accidentally bundled inside the npm
783
+ // package — protects against accidental credential leaks to the registry.
784
+ // Non-fatal; only fires when running from a node_modules install.
785
+ try {
786
+ const bundledEnv = startupBundledEnvCheckRunner();
787
+ if (bundledEnv.envFileBundled && bundledEnv.envFilePath) {
788
+ console.error(`[WARN] cmos-mcp: a .env file was found inside the installed package at ${bundledEnv.envFilePath}. ` +
789
+ `This may contain credentials that should not have been published. ` +
790
+ `Inspect the file, treat any contained secrets as compromised, and report the issue at ` +
791
+ `https://github.com/kneelinghorse/cmos-mcp/issues. The server will continue running.`);
792
+ }
793
+ }
794
+ catch (error) {
795
+ const message = error instanceof Error ? error.message : 'unknown error';
796
+ console.error(`[WARN] Startup bundled-env check threw (non-fatal): ${message}. Continuing startup.`);
797
+ }
798
+ await (0, tokenizer_bootstrap_1.ensureTokenizersReady)();
799
+ const tokenizerHealth = (0, tokenizer_bootstrap_1.getTokenizerHealth)();
800
+ console.error(`[INFO] Tokenizer preload status: GPT ready=${tokenizerHealth.models.gpt.ready} (attempts=${tokenizerHealth.models.gpt.attempts}), ` +
801
+ `Claude ready=${tokenizerHealth.models.claude.ready} (attempts=${tokenizerHealth.models.claude.attempts}), ` +
802
+ `fallbacks=${JSON.stringify(tokenizerHealth.fallbacks)}`);
803
+ // Initialize server health tracking (build staleness detection)
804
+ (0, server_health_1.initServerHealth)();
805
+ const serverHealth = (0, server_health_1.getServerHealth)();
806
+ console.error(`[INFO] Server health: pid=${serverHealth.pid} build=${serverHealth.startupBuild?.buildHash.slice(0, 12) ?? 'none'}…`);
807
+ console.error(`[INFO] Server components initialized successfully`);
808
+ return context;
809
+ }
810
+ catch (error) {
811
+ const missionError = handler_1.ErrorHandler.handle(error, 'server.initialize', {
812
+ module: 'server',
813
+ }, {
814
+ rethrow: false,
815
+ userMessage: 'Failed to initialize Mission Protocol server components.',
816
+ });
817
+ throw missionError;
818
+ }
819
+ }
820
+ /**
821
+ * Main entry point
822
+ */
823
+ async function main() {
824
+ try {
825
+ if (process.argv.includes('--whoami')) {
826
+ const exitCode = await whoamiCliRunner();
827
+ if (exitCode !== 0) {
828
+ process.exit(exitCode);
829
+ }
830
+ return;
831
+ }
832
+ // Initialize all server components
833
+ const context = await initializeServer();
834
+ // Register tool handlers
835
+ registerToolHandlers(context);
836
+ // Create stdio transport
837
+ const transport = new stdio_js_1.StdioServerTransport();
838
+ // Connect server to transport
839
+ await server.connect(transport);
840
+ console.error(`[INFO] Mission Protocol MCP server running on stdio`);
841
+ console.error(`[INFO] Server: ${SERVER_CONFIG.name} v${SERVER_CONFIG.version}`);
842
+ const totalTools = getToolDefinitions().length;
843
+ console.error(`[INFO] ${totalTools} tools registered`);
844
+ if (context.cmosDetected) {
845
+ console.error(`[INFO] CMOS detected, ${cmos_1.CMOS_TOOL_DEFINITIONS.length} CMOS tools enabled`);
846
+ console.error(`[INFO] CMOS database: ${context.cmosDatabasePath}`);
847
+ }
848
+ }
849
+ catch (error) {
850
+ const missionError = handler_1.ErrorHandler.handle(error, 'server.startup', {
851
+ module: 'server',
852
+ data: {
853
+ stage: 'startup',
854
+ },
855
+ }, {
856
+ rethrow: false,
857
+ userMessage: 'Mission Protocol server startup failed.',
858
+ });
859
+ const publicError = handler_1.ErrorHandler.toPublicError(missionError);
860
+ const correlationFragment = publicError.correlationId
861
+ ? ` (correlationId=${publicError.correlationId})`
862
+ : '';
863
+ console.error(`[FATAL] Server startup failed${correlationFragment}: ${publicError.message}`);
864
+ process.exit(1);
865
+ }
866
+ }
867
+ exports.__test__ = {
868
+ registerToolHandlers,
869
+ initializeServer,
870
+ main,
871
+ runWhoamiCli,
872
+ server,
873
+ setContextBuilder: (builder) => {
874
+ contextBuilder = builder;
875
+ },
876
+ resetContextBuilder: () => {
877
+ contextBuilder = buildMissionProtocolContext;
878
+ },
879
+ setWhoamiCliRunner: (runner) => {
880
+ whoamiCliRunner = runner;
881
+ },
882
+ resetWhoamiCliRunner: () => {
883
+ whoamiCliRunner = runWhoamiCli;
884
+ },
885
+ setStartupAttributionSelfTestRunner: (runner) => {
886
+ startupAttributionSelfTestRunner = runner;
887
+ },
888
+ resetStartupAttributionSelfTestRunner: () => {
889
+ startupAttributionSelfTestRunner = runStartupAttributionSelfTest;
890
+ },
891
+ runStartupRegistryPrune,
892
+ setStartupRegistryPruneRunner: (runner) => {
893
+ startupRegistryPruneRunner = runner;
894
+ },
895
+ resetStartupRegistryPruneRunner: () => {
896
+ startupRegistryPruneRunner = runStartupRegistryPrune;
897
+ },
898
+ setStartupProjectKeyRecoveryRunner: (runner) => {
899
+ startupProjectKeyRecoveryRunner = runner;
900
+ },
901
+ resetStartupProjectKeyRecoveryRunner: () => {
902
+ startupProjectKeyRecoveryRunner = project_key_capture_1.runStartupProjectKeyRecovery;
903
+ },
904
+ setStartupCredentialCheckRunner: (runner) => {
905
+ startupCredentialCheckRunner = runner;
906
+ },
907
+ resetStartupCredentialCheckRunner: () => {
908
+ startupCredentialCheckRunner = project_key_capture_1.runStartupCredentialCheck;
909
+ },
910
+ runStartupBundledEnvCheck,
911
+ setStartupBundledEnvCheckRunner: (runner) => {
912
+ startupBundledEnvCheckRunner = runner;
913
+ },
914
+ resetStartupBundledEnvCheckRunner: () => {
915
+ startupBundledEnvCheckRunner = runStartupBundledEnvCheck;
916
+ },
917
+ };
918
+ // Handle graceful shutdown
919
+ process.on('SIGINT', async () => {
920
+ console.error(`[INFO] Received SIGINT, shutting down gracefully...`);
921
+ try {
922
+ await server.close();
923
+ }
924
+ catch (error) {
925
+ handler_1.ErrorHandler.handle(error, 'server.shutdown', {
926
+ module: 'server',
927
+ data: {
928
+ signal: 'SIGINT',
929
+ },
930
+ }, {
931
+ rethrow: false,
932
+ userMessage: 'Graceful shutdown encountered an issue.',
933
+ });
934
+ }
935
+ process.exit(0);
936
+ });
937
+ process.on('SIGTERM', async () => {
938
+ console.error(`[INFO] Received SIGTERM, shutting down gracefully...`);
939
+ try {
940
+ await server.close();
941
+ }
942
+ catch (error) {
943
+ handler_1.ErrorHandler.handle(error, 'server.shutdown', {
944
+ module: 'server',
945
+ data: {
946
+ signal: 'SIGTERM',
947
+ },
948
+ }, {
949
+ rethrow: false,
950
+ userMessage: 'Graceful shutdown encountered an issue.',
951
+ });
952
+ }
953
+ process.exit(0);
954
+ });
955
+ // Start the server
956
+ if (require.main === module) {
957
+ main().catch((error) => {
958
+ const missionError = handler_1.ErrorHandler.handle(error, 'server.unhandled', {
959
+ module: 'server',
960
+ }, {
961
+ rethrow: false,
962
+ userMessage: 'Mission Protocol encountered an unrecoverable error.',
963
+ });
964
+ const publicError = handler_1.ErrorHandler.toPublicError(missionError);
965
+ const correlationFragment = publicError.correlationId
966
+ ? ` (correlationId=${publicError.correlationId})`
967
+ : '';
968
+ console.error(`[FATAL] Unhandled error${correlationFragment}: ${publicError.message}`);
969
+ process.exit(1);
970
+ });
971
+ }
972
+ //# sourceMappingURL=index.js.map