@soleri/core 9.0.4 → 9.2.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 (701) hide show
  1. package/dist/brain/intelligence.d.ts +27 -0
  2. package/dist/brain/intelligence.d.ts.map +1 -1
  3. package/dist/brain/intelligence.js +160 -14
  4. package/dist/brain/intelligence.js.map +1 -1
  5. package/dist/brain/learning-radar.d.ts +4 -0
  6. package/dist/brain/learning-radar.d.ts.map +1 -1
  7. package/dist/brain/learning-radar.js +20 -1
  8. package/dist/brain/learning-radar.js.map +1 -1
  9. package/dist/brain/strength-scorer.d.ts +31 -0
  10. package/dist/brain/strength-scorer.d.ts.map +1 -0
  11. package/dist/brain/strength-scorer.js +264 -0
  12. package/dist/brain/strength-scorer.js.map +1 -0
  13. package/dist/chat/agent-loop.d.ts.map +1 -1
  14. package/dist/chat/agent-loop.js +2 -0
  15. package/dist/chat/agent-loop.js.map +1 -1
  16. package/dist/chat/notifications.d.ts.map +1 -1
  17. package/dist/chat/notifications.js +2 -0
  18. package/dist/chat/notifications.js.map +1 -1
  19. package/dist/claudemd/compose.js +1 -1
  20. package/dist/claudemd/compose.js.map +1 -1
  21. package/dist/control/intent-router.d.ts.map +1 -1
  22. package/dist/control/intent-router.js +12 -4
  23. package/dist/control/intent-router.js.map +1 -1
  24. package/dist/curator/contradiction-detector.d.ts +27 -0
  25. package/dist/curator/contradiction-detector.d.ts.map +1 -0
  26. package/dist/curator/contradiction-detector.js +62 -0
  27. package/dist/curator/contradiction-detector.js.map +1 -0
  28. package/dist/curator/curator.d.ts +3 -4
  29. package/dist/curator/curator.d.ts.map +1 -1
  30. package/dist/curator/curator.js +90 -525
  31. package/dist/curator/curator.js.map +1 -1
  32. package/dist/curator/duplicate-detector.d.ts +14 -0
  33. package/dist/curator/duplicate-detector.d.ts.map +1 -0
  34. package/dist/curator/duplicate-detector.js +77 -0
  35. package/dist/curator/duplicate-detector.js.map +1 -0
  36. package/dist/curator/health-audit.d.ts +15 -0
  37. package/dist/curator/health-audit.d.ts.map +1 -0
  38. package/dist/curator/health-audit.js +97 -0
  39. package/dist/curator/health-audit.js.map +1 -0
  40. package/dist/curator/metadata-enricher.d.ts +17 -0
  41. package/dist/curator/metadata-enricher.d.ts.map +1 -0
  42. package/dist/curator/metadata-enricher.js +60 -0
  43. package/dist/curator/metadata-enricher.js.map +1 -0
  44. package/dist/curator/schema.d.ts +7 -0
  45. package/dist/curator/schema.d.ts.map +1 -0
  46. package/dist/curator/schema.js +62 -0
  47. package/dist/curator/schema.js.map +1 -0
  48. package/dist/curator/tag-manager.d.ts +36 -0
  49. package/dist/curator/tag-manager.d.ts.map +1 -0
  50. package/dist/curator/tag-manager.js +78 -0
  51. package/dist/curator/tag-manager.js.map +1 -0
  52. package/dist/engine/bin/soleri-engine.js +24 -3
  53. package/dist/engine/bin/soleri-engine.js.map +1 -1
  54. package/dist/engine/core-ops.d.ts.map +1 -1
  55. package/dist/engine/core-ops.js +23 -8
  56. package/dist/engine/core-ops.js.map +1 -1
  57. package/dist/engine/module-manifest.d.ts.map +1 -1
  58. package/dist/engine/module-manifest.js +22 -2
  59. package/dist/engine/module-manifest.js.map +1 -1
  60. package/dist/engine/register-engine.d.ts.map +1 -1
  61. package/dist/engine/register-engine.js +26 -2
  62. package/dist/engine/register-engine.js.map +1 -1
  63. package/dist/errors/retry.d.ts.map +1 -1
  64. package/dist/errors/retry.js +2 -0
  65. package/dist/errors/retry.js.map +1 -1
  66. package/dist/facades/types.d.ts +1 -1
  67. package/dist/flows/chain-types.d.ts +18 -18
  68. package/dist/flows/gate-evaluator.d.ts.map +1 -1
  69. package/dist/flows/gate-evaluator.js +22 -0
  70. package/dist/flows/gate-evaluator.js.map +1 -1
  71. package/dist/flows/types.d.ts +157 -28
  72. package/dist/flows/types.d.ts.map +1 -1
  73. package/dist/flows/types.js +4 -0
  74. package/dist/flows/types.js.map +1 -1
  75. package/dist/index.d.ts +10 -2
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +9 -1
  78. package/dist/index.js.map +1 -1
  79. package/dist/intake/intake-pipeline.d.ts.map +1 -1
  80. package/dist/intake/intake-pipeline.js +1 -0
  81. package/dist/intake/intake-pipeline.js.map +1 -1
  82. package/dist/intake/text-ingester.d.ts.map +1 -1
  83. package/dist/intake/text-ingester.js +2 -0
  84. package/dist/intake/text-ingester.js.map +1 -1
  85. package/dist/llm/key-pool.d.ts +1 -1
  86. package/dist/llm/key-pool.d.ts.map +1 -1
  87. package/dist/llm/key-pool.js +3 -4
  88. package/dist/llm/key-pool.js.map +1 -1
  89. package/dist/llm/utils.d.ts.map +1 -1
  90. package/dist/llm/utils.js +2 -0
  91. package/dist/llm/utils.js.map +1 -1
  92. package/dist/migrations/migration-runner.test-helpers.d.ts +13 -0
  93. package/dist/migrations/migration-runner.test-helpers.d.ts.map +1 -0
  94. package/dist/migrations/migration-runner.test-helpers.js +47 -0
  95. package/dist/migrations/migration-runner.test-helpers.js.map +1 -0
  96. package/dist/operator/operator-profile.d.ts +44 -0
  97. package/dist/operator/operator-profile.d.ts.map +1 -0
  98. package/dist/operator/operator-profile.js +377 -0
  99. package/dist/operator/operator-profile.js.map +1 -0
  100. package/dist/operator/operator-signals.d.ts +45 -0
  101. package/dist/operator/operator-signals.d.ts.map +1 -0
  102. package/dist/operator/operator-signals.js +228 -0
  103. package/dist/operator/operator-signals.js.map +1 -0
  104. package/dist/operator/operator-types.d.ts +360 -0
  105. package/dist/operator/operator-types.d.ts.map +1 -0
  106. package/dist/operator/operator-types.js +24 -0
  107. package/dist/operator/operator-types.js.map +1 -0
  108. package/dist/packs/types.d.ts +27 -27
  109. package/dist/paths.d.ts +40 -0
  110. package/dist/paths.d.ts.map +1 -0
  111. package/dist/paths.js +98 -0
  112. package/dist/paths.js.map +1 -0
  113. package/dist/persistence/index.d.ts +1 -1
  114. package/dist/persistence/index.d.ts.map +1 -1
  115. package/dist/persistence/index.js +1 -1
  116. package/dist/persistence/index.js.map +1 -1
  117. package/dist/persistence/sqlite-provider.d.ts +2 -0
  118. package/dist/persistence/sqlite-provider.d.ts.map +1 -1
  119. package/dist/persistence/sqlite-provider.js +8 -5
  120. package/dist/persistence/sqlite-provider.js.map +1 -1
  121. package/dist/planning/evidence-collector.d.ts +13 -1
  122. package/dist/planning/evidence-collector.d.ts.map +1 -1
  123. package/dist/planning/evidence-collector.js +33 -0
  124. package/dist/planning/evidence-collector.js.map +1 -1
  125. package/dist/planning/gap-analysis.d.ts +5 -4
  126. package/dist/planning/gap-analysis.d.ts.map +1 -1
  127. package/dist/planning/gap-analysis.js +7 -341
  128. package/dist/planning/gap-analysis.js.map +1 -1
  129. package/dist/planning/gap-passes.d.ts +19 -0
  130. package/dist/planning/gap-passes.d.ts.map +1 -0
  131. package/dist/planning/gap-passes.js +157 -0
  132. package/dist/planning/gap-passes.js.map +1 -0
  133. package/dist/planning/gap-patterns.d.ts +29 -0
  134. package/dist/planning/gap-patterns.d.ts.map +1 -0
  135. package/dist/planning/gap-patterns.js +129 -0
  136. package/dist/planning/gap-patterns.js.map +1 -0
  137. package/dist/planning/gap-types.d.ts +1 -1
  138. package/dist/planning/gap-types.d.ts.map +1 -1
  139. package/dist/planning/gap-types.js +1 -0
  140. package/dist/planning/gap-types.js.map +1 -1
  141. package/dist/planning/github-projection.d.ts +122 -0
  142. package/dist/planning/github-projection.d.ts.map +1 -0
  143. package/dist/planning/github-projection.js +294 -0
  144. package/dist/planning/github-projection.js.map +1 -0
  145. package/dist/planning/impact-analyzer.d.ts +26 -0
  146. package/dist/planning/impact-analyzer.d.ts.map +1 -0
  147. package/dist/planning/impact-analyzer.js +199 -0
  148. package/dist/planning/impact-analyzer.js.map +1 -0
  149. package/dist/planning/plan-lifecycle.d.ts +136 -0
  150. package/dist/planning/plan-lifecycle.d.ts.map +1 -0
  151. package/dist/planning/plan-lifecycle.js +296 -0
  152. package/dist/planning/plan-lifecycle.js.map +1 -0
  153. package/dist/planning/planner-types.d.ts +202 -0
  154. package/dist/planning/planner-types.d.ts.map +1 -0
  155. package/dist/planning/planner-types.js +6 -0
  156. package/dist/planning/planner-types.js.map +1 -0
  157. package/dist/planning/planner.d.ts +31 -383
  158. package/dist/planning/planner.d.ts.map +1 -1
  159. package/dist/planning/planner.js +154 -878
  160. package/dist/planning/planner.js.map +1 -1
  161. package/dist/planning/rationalization-detector.d.ts +32 -0
  162. package/dist/planning/rationalization-detector.d.ts.map +1 -0
  163. package/dist/planning/rationalization-detector.js +89 -0
  164. package/dist/planning/rationalization-detector.js.map +1 -0
  165. package/dist/planning/reconciliation-engine.d.ts +47 -0
  166. package/dist/planning/reconciliation-engine.d.ts.map +1 -0
  167. package/dist/planning/reconciliation-engine.js +128 -0
  168. package/dist/planning/reconciliation-engine.js.map +1 -0
  169. package/dist/planning/task-verifier.d.ts +85 -0
  170. package/dist/planning/task-verifier.d.ts.map +1 -0
  171. package/dist/planning/task-verifier.js +227 -0
  172. package/dist/planning/task-verifier.js.map +1 -0
  173. package/dist/plugins/types.d.ts +4 -4
  174. package/dist/runtime/admin-ops.d.ts +2 -2
  175. package/dist/runtime/admin-ops.d.ts.map +1 -1
  176. package/dist/runtime/admin-ops.js +44 -17
  177. package/dist/runtime/admin-ops.js.map +1 -1
  178. package/dist/runtime/admin-setup-ops.d.ts.map +1 -1
  179. package/dist/runtime/admin-setup-ops.js +21 -46
  180. package/dist/runtime/admin-setup-ops.js.map +1 -1
  181. package/dist/runtime/archive-ops.d.ts +10 -0
  182. package/dist/runtime/archive-ops.d.ts.map +1 -0
  183. package/dist/runtime/archive-ops.js +310 -0
  184. package/dist/runtime/archive-ops.js.map +1 -0
  185. package/dist/runtime/capture-ops.d.ts.map +1 -1
  186. package/dist/runtime/capture-ops.js +42 -7
  187. package/dist/runtime/capture-ops.js.map +1 -1
  188. package/dist/runtime/claude-md-helpers.js +1 -1
  189. package/dist/runtime/claude-md-helpers.js.map +1 -1
  190. package/dist/runtime/context-health.d.ts +31 -0
  191. package/dist/runtime/context-health.d.ts.map +1 -0
  192. package/dist/runtime/context-health.js +57 -0
  193. package/dist/runtime/context-health.js.map +1 -0
  194. package/dist/runtime/facades/archive-facade.d.ts +10 -0
  195. package/dist/runtime/facades/archive-facade.d.ts.map +1 -0
  196. package/dist/runtime/facades/archive-facade.js +11 -0
  197. package/dist/runtime/facades/archive-facade.js.map +1 -0
  198. package/dist/runtime/facades/brain-facade.d.ts.map +1 -1
  199. package/dist/runtime/facades/brain-facade.js +2 -0
  200. package/dist/runtime/facades/brain-facade.js.map +1 -1
  201. package/dist/runtime/facades/chat-facade.d.ts +7 -0
  202. package/dist/runtime/facades/chat-facade.d.ts.map +1 -1
  203. package/dist/runtime/facades/chat-facade.js +15 -800
  204. package/dist/runtime/facades/chat-facade.js.map +1 -1
  205. package/dist/runtime/facades/chat-service-ops.d.ts +9 -0
  206. package/dist/runtime/facades/chat-service-ops.d.ts.map +1 -0
  207. package/dist/runtime/facades/chat-service-ops.js +330 -0
  208. package/dist/runtime/facades/chat-service-ops.js.map +1 -0
  209. package/dist/runtime/facades/chat-session-ops.d.ts +8 -0
  210. package/dist/runtime/facades/chat-session-ops.d.ts.map +1 -0
  211. package/dist/runtime/facades/chat-session-ops.js +136 -0
  212. package/dist/runtime/facades/chat-session-ops.js.map +1 -0
  213. package/dist/runtime/facades/chat-state.d.ts +31 -0
  214. package/dist/runtime/facades/chat-state.d.ts.map +1 -0
  215. package/dist/runtime/facades/chat-state.js +32 -0
  216. package/dist/runtime/facades/chat-state.js.map +1 -0
  217. package/dist/runtime/facades/chat-transport-ops.d.ts +9 -0
  218. package/dist/runtime/facades/chat-transport-ops.d.ts.map +1 -0
  219. package/dist/runtime/facades/chat-transport-ops.js +337 -0
  220. package/dist/runtime/facades/chat-transport-ops.js.map +1 -0
  221. package/dist/runtime/facades/control-facade.d.ts.map +1 -1
  222. package/dist/runtime/facades/control-facade.js +4 -1
  223. package/dist/runtime/facades/control-facade.js.map +1 -1
  224. package/dist/runtime/facades/index.d.ts.map +1 -1
  225. package/dist/runtime/facades/index.js +6 -0
  226. package/dist/runtime/facades/index.js.map +1 -1
  227. package/dist/runtime/facades/memory-facade.d.ts.map +1 -1
  228. package/dist/runtime/facades/memory-facade.js +75 -6
  229. package/dist/runtime/facades/memory-facade.js.map +1 -1
  230. package/dist/runtime/facades/operator-facade.d.ts +8 -0
  231. package/dist/runtime/facades/operator-facade.d.ts.map +1 -0
  232. package/dist/runtime/facades/operator-facade.js +220 -0
  233. package/dist/runtime/facades/operator-facade.js.map +1 -0
  234. package/dist/runtime/facades/orchestrate-facade.js +3 -3
  235. package/dist/runtime/facades/orchestrate-facade.js.map +1 -1
  236. package/dist/runtime/facades/plan-facade.d.ts.map +1 -1
  237. package/dist/runtime/facades/plan-facade.js +39 -6
  238. package/dist/runtime/facades/plan-facade.js.map +1 -1
  239. package/dist/runtime/facades/review-facade.d.ts +7 -0
  240. package/dist/runtime/facades/review-facade.d.ts.map +1 -0
  241. package/dist/runtime/facades/review-facade.js +8 -0
  242. package/dist/runtime/facades/review-facade.js.map +1 -0
  243. package/dist/runtime/facades/sync-facade.d.ts +7 -0
  244. package/dist/runtime/facades/sync-facade.d.ts.map +1 -0
  245. package/dist/runtime/facades/sync-facade.js +8 -0
  246. package/dist/runtime/facades/sync-facade.js.map +1 -0
  247. package/dist/runtime/facades/vault-facade.d.ts +4 -1
  248. package/dist/runtime/facades/vault-facade.d.ts.map +1 -1
  249. package/dist/runtime/facades/vault-facade.js +13 -66
  250. package/dist/runtime/facades/vault-facade.js.map +1 -1
  251. package/dist/runtime/github-integration.d.ts +49 -0
  252. package/dist/runtime/github-integration.d.ts.map +1 -0
  253. package/dist/runtime/github-integration.js +113 -0
  254. package/dist/runtime/github-integration.js.map +1 -0
  255. package/dist/runtime/grading-ops.js +1 -1
  256. package/dist/runtime/grading-ops.js.map +1 -1
  257. package/dist/runtime/memory-extra-ops.d.ts.map +1 -1
  258. package/dist/runtime/memory-extra-ops.js +6 -2
  259. package/dist/runtime/memory-extra-ops.js.map +1 -1
  260. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  261. package/dist/runtime/orchestrate-ops.js +367 -40
  262. package/dist/runtime/orchestrate-ops.js.map +1 -1
  263. package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
  264. package/dist/runtime/planning-extra-ops.js +69 -4
  265. package/dist/runtime/planning-extra-ops.js.map +1 -1
  266. package/dist/runtime/review-ops.d.ts +10 -0
  267. package/dist/runtime/review-ops.d.ts.map +1 -0
  268. package/dist/runtime/review-ops.js +97 -0
  269. package/dist/runtime/review-ops.js.map +1 -0
  270. package/dist/runtime/runtime.d.ts.map +1 -1
  271. package/dist/runtime/runtime.js +27 -12
  272. package/dist/runtime/runtime.js.map +1 -1
  273. package/dist/runtime/session-briefing.d.ts +3 -0
  274. package/dist/runtime/session-briefing.d.ts.map +1 -1
  275. package/dist/runtime/session-briefing.js +68 -1
  276. package/dist/runtime/session-briefing.js.map +1 -1
  277. package/dist/runtime/sync-ops.d.ts +12 -0
  278. package/dist/runtime/sync-ops.d.ts.map +1 -0
  279. package/dist/runtime/sync-ops.js +288 -0
  280. package/dist/runtime/sync-ops.js.map +1 -0
  281. package/dist/runtime/types.d.ts +10 -4
  282. package/dist/runtime/types.d.ts.map +1 -1
  283. package/dist/runtime/vault-extra-ops.d.ts +5 -4
  284. package/dist/runtime/vault-extra-ops.d.ts.map +1 -1
  285. package/dist/runtime/vault-extra-ops.js +5 -300
  286. package/dist/runtime/vault-extra-ops.js.map +1 -1
  287. package/dist/runtime/vault-sharing-ops.d.ts +4 -4
  288. package/dist/runtime/vault-sharing-ops.d.ts.map +1 -1
  289. package/dist/runtime/vault-sharing-ops.js +5 -300
  290. package/dist/runtime/vault-sharing-ops.js.map +1 -1
  291. package/dist/skills/sync-skills.d.ts +27 -0
  292. package/dist/skills/sync-skills.d.ts.map +1 -0
  293. package/dist/skills/sync-skills.js +81 -0
  294. package/dist/skills/sync-skills.js.map +1 -0
  295. package/dist/update-check.d.ts +14 -0
  296. package/dist/update-check.d.ts.map +1 -0
  297. package/dist/update-check.js +96 -0
  298. package/dist/update-check.js.map +1 -0
  299. package/dist/vault/linking.d.ts +10 -12
  300. package/dist/vault/linking.d.ts.map +1 -1
  301. package/dist/vault/linking.js +104 -161
  302. package/dist/vault/linking.js.map +1 -1
  303. package/dist/vault/vault-entries.d.ts +69 -0
  304. package/dist/vault/vault-entries.d.ts.map +1 -0
  305. package/dist/vault/vault-entries.js +257 -0
  306. package/dist/vault/vault-entries.js.map +1 -0
  307. package/dist/vault/vault-interfaces.d.ts +153 -0
  308. package/dist/vault/vault-interfaces.d.ts.map +1 -0
  309. package/dist/vault/vault-interfaces.js +2 -0
  310. package/dist/vault/vault-interfaces.js.map +1 -0
  311. package/dist/vault/vault-maintenance.d.ts +40 -0
  312. package/dist/vault/vault-maintenance.d.ts.map +1 -0
  313. package/dist/vault/vault-maintenance.js +142 -0
  314. package/dist/vault/vault-maintenance.js.map +1 -0
  315. package/dist/vault/vault-markdown-sync.d.ts +22 -0
  316. package/dist/vault/vault-markdown-sync.d.ts.map +1 -0
  317. package/dist/vault/vault-markdown-sync.js +143 -0
  318. package/dist/vault/vault-markdown-sync.js.map +1 -0
  319. package/dist/vault/vault-memories.d.ts +61 -0
  320. package/dist/vault/vault-memories.d.ts.map +1 -0
  321. package/dist/vault/vault-memories.js +240 -0
  322. package/dist/vault/vault-memories.js.map +1 -0
  323. package/dist/vault/vault-schema.d.ts +9 -0
  324. package/dist/vault/vault-schema.d.ts.map +1 -0
  325. package/dist/vault/vault-schema.js +179 -0
  326. package/dist/vault/vault-schema.js.map +1 -0
  327. package/dist/vault/vault.d.ts +29 -81
  328. package/dist/vault/vault.d.ts.map +1 -1
  329. package/dist/vault/vault.js +78 -931
  330. package/dist/vault/vault.js.map +1 -1
  331. package/package.json +1 -1
  332. package/src/agency/agency-manager.test.ts +600 -0
  333. package/src/agency/default-rules.test.ts +228 -0
  334. package/src/{__tests__ → brain}/brain-intelligence.test.ts +37 -14
  335. package/src/{__tests__ → brain}/brain.test.ts +1 -1
  336. package/src/brain/intelligence.ts +196 -15
  337. package/src/brain/learning-radar.ts +22 -1
  338. package/src/{__tests__ → brain}/second-brain-features.test.ts +4 -4
  339. package/src/{__tests__ → brain}/session-lifecycle.test.ts +2 -2
  340. package/src/brain/strength-scorer.ts +404 -0
  341. package/src/capabilities/chain-mapping.test.ts +66 -0
  342. package/src/capabilities/registry.test.ts +369 -0
  343. package/src/chat/agent-loop.test.ts +394 -0
  344. package/src/chat/agent-loop.ts +2 -0
  345. package/src/{__tests__ → chat}/chat-differentiators.test.ts +3 -3
  346. package/src/{__tests__ → chat}/chat-enhanced.test.ts +4 -4
  347. package/src/{__tests__ → chat}/chat-transport.test.ts +6 -6
  348. package/src/chat/mcp-bridge.test.ts +173 -0
  349. package/src/chat/notifications.ts +2 -0
  350. package/src/chat/output-compressor.test.ts +164 -0
  351. package/src/claudemd/compose.test.ts +178 -0
  352. package/src/claudemd/compose.ts +1 -1
  353. package/src/claudemd/inject.test.ts +211 -0
  354. package/src/context/context-engine.test.ts +461 -0
  355. package/src/control/identity-manager.test.ts +305 -0
  356. package/src/control/intent-router.test.ts +360 -0
  357. package/src/control/intent-router.ts +13 -4
  358. package/src/curator/classifier.test.ts +104 -0
  359. package/src/curator/contradiction-detector.test.ts +180 -0
  360. package/src/curator/contradiction-detector.ts +87 -0
  361. package/src/{__tests__ → curator}/curator-pipeline-e2e.test.ts +10 -10
  362. package/src/{__tests__ → curator}/curator.test.ts +77 -1
  363. package/src/curator/curator.ts +115 -777
  364. package/src/curator/duplicate-detector.test.ts +183 -0
  365. package/src/curator/duplicate-detector.ts +103 -0
  366. package/src/curator/health-audit.ts +126 -0
  367. package/src/curator/metadata-enricher.ts +84 -0
  368. package/src/curator/quality-gate.test.ts +135 -0
  369. package/src/curator/schema.ts +65 -0
  370. package/src/curator/tag-manager.test.ts +165 -0
  371. package/src/curator/tag-manager.ts +109 -0
  372. package/src/domain-packs/inject-rules.test.ts +117 -0
  373. package/src/domain-packs/knowledge-installer.test.ts +171 -0
  374. package/src/domain-packs/loader.test.ts +86 -0
  375. package/src/domain-packs/pack-runtime.test.ts +140 -0
  376. package/src/domain-packs/skills-installer.test.ts +135 -0
  377. package/src/domain-packs/token-resolver.test.ts +150 -0
  378. package/src/domain-packs/types.test.ts +130 -0
  379. package/src/enforcement/adapters/claude-code.test.ts +216 -0
  380. package/src/enforcement/registry.test.ts +264 -0
  381. package/src/engine/bin/soleri-engine.ts +28 -4
  382. package/src/engine/core-ops.test.ts +254 -0
  383. package/src/engine/core-ops.ts +25 -8
  384. package/src/engine/module-manifest.test.ts +124 -0
  385. package/src/engine/module-manifest.ts +22 -2
  386. package/src/engine/register-engine.test.ts +230 -0
  387. package/src/engine/register-engine.ts +26 -2
  388. package/src/errors/classify.test.ts +199 -0
  389. package/src/errors/retry.test.ts +156 -0
  390. package/src/errors/retry.ts +2 -0
  391. package/src/errors/types.test.ts +108 -0
  392. package/src/events/event-bus.test.ts +149 -0
  393. package/src/extensions/middleware.test.ts +234 -0
  394. package/src/facades/facade-factory.test.ts +424 -0
  395. package/src/flows/chain-runner.test.ts +273 -0
  396. package/src/flows/context-router.test.ts +52 -0
  397. package/src/flows/dispatch-registry.test.ts +128 -0
  398. package/src/flows/epilogue.test.ts +107 -0
  399. package/src/flows/executor.test.ts +263 -0
  400. package/src/flows/gate-evaluator.test.ts +194 -0
  401. package/src/flows/gate-evaluator.ts +25 -0
  402. package/src/flows/types.ts +4 -0
  403. package/src/governance/governance.test.ts +726 -0
  404. package/src/health/health-registry.test.ts +186 -0
  405. package/src/health/vault-integrity.test.ts +110 -0
  406. package/src/index.ts +92 -0
  407. package/src/intake/content-classifier.test.ts +209 -0
  408. package/src/intake/dedup-gate.test.ts +131 -0
  409. package/src/intake/intake-pipeline.test.ts +506 -0
  410. package/src/intake/intake-pipeline.ts +1 -0
  411. package/src/intake/text-ingester.test.ts +194 -0
  412. package/src/intake/text-ingester.ts +2 -0
  413. package/src/llm/key-pool.test.ts +236 -0
  414. package/src/llm/key-pool.ts +3 -4
  415. package/src/llm/llm-client.test.ts +345 -0
  416. package/src/llm/oauth-discovery.test.ts +180 -0
  417. package/src/llm/utils.test.ts +327 -0
  418. package/src/llm/utils.ts +2 -0
  419. package/src/{__tests__ → logging}/logger.test.ts +41 -62
  420. package/src/loop/loop-manager.test.ts +519 -0
  421. package/src/migrations/migration-runner.edge-cases.test.ts +319 -0
  422. package/src/migrations/migration-runner.test-helpers.ts +64 -0
  423. package/src/migrations/migration-runner.test.ts +385 -0
  424. package/src/operator/auto-signal-pipeline.test.ts +207 -0
  425. package/src/operator/operator-profile-extended.test.ts +320 -0
  426. package/src/operator/operator-profile.test.ts +314 -0
  427. package/src/operator/operator-profile.ts +469 -0
  428. package/src/operator/operator-signals-extended.test.ts +245 -0
  429. package/src/operator/operator-signals.test.ts +281 -0
  430. package/src/operator/operator-signals.ts +261 -0
  431. package/src/operator/operator-types.ts +444 -0
  432. package/src/operator/prompts/hook-precompact-operator-dispatch.md +94 -0
  433. package/src/operator/prompts/subagent-soft-signal-extractor.md +125 -0
  434. package/src/operator/prompts/subagent-synthesis-cognition.md +181 -0
  435. package/src/operator/prompts/subagent-synthesis-communication.md +140 -0
  436. package/src/operator/prompts/subagent-synthesis-technical.md +160 -0
  437. package/src/operator/prompts/subagent-synthesis-trust.md +143 -0
  438. package/src/{__tests__ → packs}/pack-lockfile.test.ts +3 -3
  439. package/src/{__tests__ → packs}/pack-system.test.ts +2 -2
  440. package/src/paths.ts +115 -0
  441. package/src/persistence/index.ts +1 -1
  442. package/src/persistence/sqlite-provider.test.ts +540 -0
  443. package/src/persistence/sqlite-provider.ts +8 -5
  444. package/src/persona/defaults.test.ts +59 -0
  445. package/src/persona/loader.test.ts +67 -0
  446. package/src/persona/prompt-generator.test.ts +127 -0
  447. package/src/planning/evidence-collector.test.ts +406 -0
  448. package/src/planning/evidence-collector.ts +50 -0
  449. package/src/planning/gap-analysis-alternatives.test.ts +169 -0
  450. package/src/planning/gap-analysis.ts +21 -636
  451. package/src/planning/gap-passes.test.ts +372 -0
  452. package/src/planning/gap-passes.ts +298 -0
  453. package/src/planning/gap-patterns.test.ts +320 -0
  454. package/src/planning/gap-patterns.ts +234 -0
  455. package/src/planning/gap-types.ts +4 -1
  456. package/src/planning/github-projection.test.ts +177 -0
  457. package/src/planning/github-projection.ts +425 -0
  458. package/src/planning/impact-analyzer.test.ts +180 -0
  459. package/src/planning/impact-analyzer.ts +264 -0
  460. package/src/planning/plan-lifecycle.test.ts +312 -0
  461. package/src/planning/plan-lifecycle.ts +346 -0
  462. package/src/planning/planner-types.ts +215 -0
  463. package/src/{__tests__ → planning}/planner.test.ts +169 -15
  464. package/src/planning/planner.ts +197 -1228
  465. package/src/planning/rationalization-detector.test.ts +171 -0
  466. package/src/planning/rationalization-detector.ts +138 -0
  467. package/src/planning/reconciliation-engine.test.ts +141 -0
  468. package/src/planning/reconciliation-engine.ts +162 -0
  469. package/src/planning/task-verifier.test.ts +235 -0
  470. package/src/planning/task-verifier.ts +303 -0
  471. package/src/planning/verification-protocol.test.ts +201 -0
  472. package/src/playbooks/generic/generic-playbooks.test.ts +438 -0
  473. package/src/playbooks/index.test.ts +77 -0
  474. package/src/playbooks/playbook-executor.test.ts +255 -0
  475. package/src/playbooks/playbook-registry.test.ts +232 -0
  476. package/src/playbooks/playbook-seeder.test.ts +153 -0
  477. package/src/plugins/plugin-loader.test.ts +212 -0
  478. package/src/plugins/plugin-registry.test.ts +272 -0
  479. package/src/project/project-registry.test.ts +428 -0
  480. package/src/prompts/parser.test.ts +100 -0
  481. package/src/prompts/template-manager.test.ts +109 -0
  482. package/src/{__tests__ → queue}/async-infrastructure.test.ts +3 -3
  483. package/src/queue/job-queue.test.ts +331 -0
  484. package/src/queue/pipeline-runner.test.ts +209 -0
  485. package/src/runtime/admin-extra-ops.test.ts +527 -0
  486. package/src/runtime/admin-ops.test.ts +257 -0
  487. package/src/runtime/admin-ops.ts +45 -17
  488. package/src/runtime/admin-setup-ops.test.ts +328 -0
  489. package/src/runtime/admin-setup-ops.ts +20 -43
  490. package/src/runtime/archive-ops.test.ts +269 -0
  491. package/src/runtime/archive-ops.ts +347 -0
  492. package/src/runtime/capture-ops.test.ts +433 -0
  493. package/src/runtime/capture-ops.ts +50 -8
  494. package/src/runtime/chain-ops.test.ts +149 -0
  495. package/src/runtime/claude-md-helpers.test.ts +191 -0
  496. package/src/runtime/claude-md-helpers.ts +1 -1
  497. package/src/runtime/context-health.test.ts +78 -0
  498. package/src/runtime/context-health.ts +85 -0
  499. package/src/runtime/curator-extra-ops.test.ts +202 -0
  500. package/src/runtime/deprecation.test.ts +98 -0
  501. package/src/runtime/domain-ops.test.ts +268 -0
  502. package/src/runtime/facades/admin-facade.test.ts +333 -0
  503. package/src/runtime/facades/agency-facade.test.ts +278 -0
  504. package/src/runtime/facades/archive-facade.test.ts +294 -0
  505. package/src/runtime/facades/archive-facade.ts +14 -0
  506. package/src/runtime/facades/brain-facade.test.ts +714 -0
  507. package/src/runtime/facades/brain-facade.ts +2 -0
  508. package/src/runtime/facades/chat-facade.test.ts +166 -0
  509. package/src/runtime/facades/chat-facade.ts +15 -906
  510. package/src/runtime/facades/chat-service-ops.test.ts +276 -0
  511. package/src/runtime/facades/chat-service-ops.ts +374 -0
  512. package/src/runtime/facades/chat-session-ops.test.ts +197 -0
  513. package/src/runtime/facades/chat-session-ops.ts +146 -0
  514. package/src/runtime/facades/chat-state.ts +60 -0
  515. package/src/runtime/facades/chat-transport-ops.test.ts +269 -0
  516. package/src/runtime/facades/chat-transport-ops.ts +380 -0
  517. package/src/runtime/facades/context-facade.test.ts +108 -0
  518. package/src/runtime/facades/control-facade.test.ts +436 -0
  519. package/src/runtime/facades/control-facade.ts +6 -1
  520. package/src/runtime/facades/curator-facade.test.ts +303 -0
  521. package/src/runtime/facades/index.ts +6 -0
  522. package/src/runtime/facades/loop-facade.test.ts +245 -0
  523. package/src/runtime/facades/memory-facade.test.ts +269 -0
  524. package/src/runtime/facades/memory-facade.ts +78 -6
  525. package/src/runtime/facades/operator-facade.test.ts +208 -0
  526. package/src/runtime/facades/operator-facade.ts +236 -0
  527. package/src/runtime/facades/orchestrate-facade.test.ts +185 -0
  528. package/src/runtime/facades/orchestrate-facade.ts +3 -3
  529. package/src/runtime/facades/plan-facade.test.ts +266 -0
  530. package/src/runtime/facades/plan-facade.ts +42 -6
  531. package/src/runtime/facades/review-facade.test.ts +82 -0
  532. package/src/runtime/facades/review-facade.ts +11 -0
  533. package/src/runtime/facades/sync-facade.test.ts +113 -0
  534. package/src/runtime/facades/sync-facade.ts +11 -0
  535. package/src/runtime/facades/vault-facade.test.ts +631 -0
  536. package/src/runtime/facades/vault-facade.ts +15 -70
  537. package/src/runtime/feature-flags.test.ts +140 -0
  538. package/src/runtime/github-integration.test.ts +89 -0
  539. package/src/runtime/github-integration.ts +159 -0
  540. package/src/runtime/grading-ops.test.ts +141 -0
  541. package/src/runtime/grading-ops.ts +1 -1
  542. package/src/runtime/intake-ops.test.ts +208 -0
  543. package/src/runtime/loop-ops.test.ts +238 -0
  544. package/src/runtime/memory-cross-project-ops.test.ts +177 -0
  545. package/src/runtime/memory-extra-ops.test.ts +453 -0
  546. package/src/runtime/memory-extra-ops.ts +6 -2
  547. package/src/runtime/orchestrate-ops.test.ts +302 -0
  548. package/src/runtime/orchestrate-ops.ts +435 -46
  549. package/src/runtime/pack-ops.test.ts +158 -0
  550. package/src/runtime/planning-extra-ops.test.ts +583 -0
  551. package/src/runtime/planning-extra-ops.ts +72 -4
  552. package/src/{__tests__ → runtime}/playbook-ops-execution.test.ts +3 -3
  553. package/src/runtime/playbook-ops.test.ts +262 -0
  554. package/src/runtime/plugin-ops.test.ts +201 -0
  555. package/src/runtime/project-ops.test.ts +235 -0
  556. package/src/runtime/review-ops.test.ts +142 -0
  557. package/src/runtime/review-ops.ts +99 -0
  558. package/src/runtime/runtime.test.ts +363 -0
  559. package/src/runtime/runtime.ts +39 -12
  560. package/src/runtime/session-briefing.test.ts +302 -0
  561. package/src/runtime/session-briefing.ts +80 -1
  562. package/src/runtime/sync-ops.test.ts +221 -0
  563. package/src/runtime/sync-ops.ts +325 -0
  564. package/src/runtime/telemetry-ops.test.ts +132 -0
  565. package/src/runtime/types.ts +10 -4
  566. package/src/runtime/vault-extra-ops.test.ts +246 -0
  567. package/src/runtime/vault-extra-ops.ts +5 -332
  568. package/src/runtime/vault-linking-ops.test.ts +237 -0
  569. package/src/runtime/vault-sharing-ops.test.ts +130 -0
  570. package/src/runtime/vault-sharing-ops.ts +5 -329
  571. package/src/skills/sync-skills.ts +108 -0
  572. package/src/streams/normalize.test.ts +95 -0
  573. package/src/streams/replayable-stream.test.ts +166 -0
  574. package/src/telemetry/telemetry.test.ts +143 -0
  575. package/src/transport/http-server.test.ts +394 -0
  576. package/src/transport/lsp-server.test.ts +458 -0
  577. package/src/transport/rate-limiter.test.ts +126 -0
  578. package/src/transport/session-manager.test.ts +133 -0
  579. package/src/transport/token-auth.test.ts +136 -0
  580. package/src/transport/ws-server.test.ts +294 -0
  581. package/src/update-check.ts +111 -0
  582. package/src/vault/__tests__/vault-characterization.test.ts +168 -0
  583. package/src/vault/content-hash.test.ts +78 -0
  584. package/src/vault/git-vault-sync.test.ts +234 -0
  585. package/src/vault/knowledge-review.test.ts +269 -0
  586. package/src/vault/linking.test.ts +358 -0
  587. package/src/vault/linking.ts +149 -183
  588. package/src/vault/obsidian-sync.test.ts +342 -0
  589. package/src/vault/playbook.test.ts +152 -0
  590. package/src/vault/scope-detector.test.ts +187 -0
  591. package/src/vault/vault-branching.test.ts +250 -0
  592. package/src/{__tests__ → vault}/vault-connect.test.ts +1 -1
  593. package/src/vault/vault-entries.ts +282 -0
  594. package/src/vault/vault-interfaces.ts +56 -0
  595. package/src/vault/vault-maintenance.ts +205 -0
  596. package/src/vault/vault-manager.test.ts +206 -0
  597. package/src/vault/vault-markdown-sync.test.ts +203 -0
  598. package/src/vault/vault-markdown-sync.ts +160 -0
  599. package/src/vault/vault-memories.ts +339 -0
  600. package/src/{__tests__ → vault}/vault-scaling.test.ts +1 -1
  601. package/src/vault/vault-schema.ts +181 -0
  602. package/src/{__tests__ → vault}/vault-sharing.test.ts +4 -4
  603. package/src/{__tests__ → vault}/vault.test.ts +2 -2
  604. package/src/vault/vault.ts +89 -1171
  605. package/dist/cognee/client.d.ts +0 -43
  606. package/dist/cognee/client.d.ts.map +0 -1
  607. package/dist/cognee/client.js +0 -375
  608. package/dist/cognee/client.js.map +0 -1
  609. package/dist/cognee/sync-manager.d.ts +0 -153
  610. package/dist/cognee/sync-manager.d.ts.map +0 -1
  611. package/dist/cognee/sync-manager.js +0 -390
  612. package/dist/cognee/sync-manager.js.map +0 -1
  613. package/dist/cognee/types.d.ts +0 -62
  614. package/dist/cognee/types.d.ts.map +0 -1
  615. package/dist/cognee/types.js +0 -3
  616. package/dist/cognee/types.js.map +0 -1
  617. package/dist/governance/index.d.ts +0 -3
  618. package/dist/governance/index.d.ts.map +0 -1
  619. package/dist/governance/index.js +0 -2
  620. package/dist/governance/index.js.map +0 -1
  621. package/dist/health/doctor-checks.d.ts +0 -15
  622. package/dist/health/doctor-checks.d.ts.map +0 -1
  623. package/dist/health/doctor-checks.js +0 -98
  624. package/dist/health/doctor-checks.js.map +0 -1
  625. package/dist/persistence/postgres-provider.d.ts +0 -81
  626. package/dist/persistence/postgres-provider.d.ts.map +0 -1
  627. package/dist/persistence/postgres-provider.js +0 -256
  628. package/dist/persistence/postgres-provider.js.map +0 -1
  629. package/dist/runtime/cognee-sync-ops.d.ts +0 -12
  630. package/dist/runtime/cognee-sync-ops.d.ts.map +0 -1
  631. package/dist/runtime/cognee-sync-ops.js +0 -93
  632. package/dist/runtime/cognee-sync-ops.js.map +0 -1
  633. package/dist/runtime/core-ops.d.ts +0 -23
  634. package/dist/runtime/core-ops.d.ts.map +0 -1
  635. package/dist/runtime/core-ops.js +0 -1296
  636. package/dist/runtime/core-ops.js.map +0 -1
  637. package/dist/runtime/facades/cognee-facade.d.ts +0 -8
  638. package/dist/runtime/facades/cognee-facade.d.ts.map +0 -1
  639. package/dist/runtime/facades/cognee-facade.js +0 -156
  640. package/dist/runtime/facades/cognee-facade.js.map +0 -1
  641. package/src/__tests__/admin-extra-ops.test.ts +0 -484
  642. package/src/__tests__/admin-ops.test.ts +0 -268
  643. package/src/__tests__/admin-setup-ops.test.ts +0 -355
  644. package/src/__tests__/agency-manager.test.ts +0 -374
  645. package/src/__tests__/agent-loop.test.ts +0 -256
  646. package/src/__tests__/capture-ops.test.ts +0 -784
  647. package/src/__tests__/claudemd.test.ts +0 -282
  648. package/src/__tests__/content-hash.test.ts +0 -60
  649. package/src/__tests__/context-engine.test.ts +0 -251
  650. package/src/__tests__/core-ops.test.ts +0 -550
  651. package/src/__tests__/curator-extra-ops.test.ts +0 -383
  652. package/src/__tests__/deprecation.test.ts +0 -78
  653. package/src/__tests__/domain-ops.test.ts +0 -226
  654. package/src/__tests__/domain-packs.test.ts +0 -421
  655. package/src/__tests__/enforcement.test.ts +0 -153
  656. package/src/__tests__/errors.test.ts +0 -388
  657. package/src/__tests__/extensions.test.ts +0 -233
  658. package/src/__tests__/facade-factory.test.ts +0 -271
  659. package/src/__tests__/feature-flags.test.ts +0 -137
  660. package/src/__tests__/flows.test.ts +0 -604
  661. package/src/__tests__/git-vault-sync.test.ts +0 -230
  662. package/src/__tests__/governance.test.ts +0 -522
  663. package/src/__tests__/grading-ops.test.ts +0 -361
  664. package/src/__tests__/health-registry.test.ts +0 -173
  665. package/src/__tests__/identity-manager.test.ts +0 -243
  666. package/src/__tests__/intake-pipeline.test.ts +0 -162
  667. package/src/__tests__/intent-router.test.ts +0 -222
  668. package/src/__tests__/knowledge-review.test.ts +0 -104
  669. package/src/__tests__/llm-client.test.ts +0 -69
  670. package/src/__tests__/llm.test.ts +0 -556
  671. package/src/__tests__/loader.test.ts +0 -176
  672. package/src/__tests__/loop-ops.test.ts +0 -469
  673. package/src/__tests__/lsp-transport.test.ts +0 -442
  674. package/src/__tests__/memory-cross-project-ops.test.ts +0 -248
  675. package/src/__tests__/memory-extra-ops.test.ts +0 -352
  676. package/src/__tests__/migration-runner.test.ts +0 -170
  677. package/src/__tests__/module-manifest-drift.test.ts +0 -59
  678. package/src/__tests__/normalize.test.ts +0 -85
  679. package/src/__tests__/obsidian-sync.test.ts +0 -354
  680. package/src/__tests__/orchestrate-ops.test.ts +0 -289
  681. package/src/__tests__/pack-ops.test.ts +0 -146
  682. package/src/__tests__/persistence.test.ts +0 -291
  683. package/src/__tests__/planning-extra-ops.test.ts +0 -706
  684. package/src/__tests__/playbook-executor.test.ts +0 -249
  685. package/src/__tests__/playbook-registry.test.ts +0 -326
  686. package/src/__tests__/playbook-seeder.test.ts +0 -163
  687. package/src/__tests__/playbook.test.ts +0 -389
  688. package/src/__tests__/plugin-ops.test.ts +0 -411
  689. package/src/__tests__/plugin-system.test.ts +0 -509
  690. package/src/__tests__/project-ops.test.ts +0 -381
  691. package/src/__tests__/replayable-stream.test.ts +0 -177
  692. package/src/__tests__/runtime.test.ts +0 -95
  693. package/src/__tests__/scope-detector.test.ts +0 -121
  694. package/src/__tests__/template-manager.test.ts +0 -222
  695. package/src/__tests__/token-resolver.test.ts +0 -79
  696. package/src/__tests__/transport.test.ts +0 -758
  697. package/src/__tests__/vault-branching.test.ts +0 -274
  698. package/src/__tests__/vault-extra-ops.test.ts +0 -482
  699. package/src/__tests__/vault-integrity.test.ts +0 -71
  700. package/src/__tests__/vault-manager.test.ts +0 -238
  701. package/src/__tests__/ws-transport.test.ts +0 -479
@@ -3,7 +3,7 @@
3
3
  * Ported from Salvador MCP's plan-gap-content.ts / plan-gap-technical.ts /
4
4
  * plan-gap-domain.ts / plan-gap-antipattern.ts.
5
5
  *
6
- * 7 built-in passes (always run):
6
+ * 8 built-in passes (always run):
7
7
  * 1. Structure — required fields present and sufficiently long
8
8
  * 2. Completeness — measurable objectives, decision rationale, scope exclusions
9
9
  * 3. Feasibility — overly broad scope, missing dependency awareness
@@ -11,6 +11,7 @@
11
11
  * 5. Clarity — ambiguous language, vague criteria
12
12
  * 6. Semantic Quality — generic objectives, shallow rationale, non-concrete approach
13
13
  * 7. Knowledge Depth — BONUS: vault pattern refs, acceptance criteria, domain indicators
14
+ * 8. Alternative Analysis — rejected alternatives prevent tunnel vision (caps at ~85 without)
14
15
  *
15
16
  * Opt-in pass factories (registered via customPasses):
16
17
  * - createToolFeasibilityPass — validates tool_chain entries and ordering
@@ -18,642 +19,25 @@
18
19
  * - createAntiPatternPass — detects content anti-patterns and vague criteria
19
20
  */
20
21
 
21
- import type { Plan, PlanDecision } from './planner.js';
22
- import type { PlanGap, GapSeverity, GapCategory } from './gap-types.js';
23
- import {
24
- generateGapId,
25
- MIN_OBJECTIVE_LENGTH,
26
- MIN_SCOPE_LENGTH,
27
- MIN_DECISION_LENGTH,
28
- } from './gap-types.js';
29
-
30
- // ─── Helpers ─────────────────────────────────────────────────────
31
-
32
- function gap(
33
- severity: GapSeverity,
34
- category: GapCategory,
35
- description: string,
36
- recommendation: string,
37
- location?: string,
38
- trigger?: string,
39
- ): PlanGap {
40
- return {
41
- id: generateGapId(),
42
- severity,
43
- category,
44
- description,
45
- recommendation,
46
- ...(location ? { location } : {}),
47
- ...(trigger ? { _trigger: trigger } : {}),
48
- };
49
- }
50
-
51
- /** Combine all task descriptions + titles into a single text blob for analysis. */
52
- function taskText(plan: Plan): string {
53
- return plan.tasks.map((t) => `${t.title} ${t.description}`).join(' ');
54
- }
55
-
56
- /** Extract text from a decision (supports both string and structured format). */
57
- function decisionText(d: string | PlanDecision): string {
58
- return typeof d === 'string' ? d : `${d.decision} ${d.rationale}`;
59
- }
60
-
61
- /** Combine all decisions into a single text blob. */
62
- function decisionsText(plan: Plan): string {
63
- return plan.decisions.map(decisionText).join(' ');
64
- }
65
-
66
- /** Check if text contains any of the given patterns (case-insensitive). */
67
- function containsAny(text: string, patterns: string[]): boolean {
68
- const lower = text.toLowerCase();
69
- return patterns.some((p) => lower.includes(p.toLowerCase()));
70
- }
71
-
72
- // ─── Pass 1: Structure ───────────────────────────────────────────
73
-
74
- function analyzeStructure(plan: Plan): PlanGap[] {
75
- const gaps: PlanGap[] = [];
76
-
77
- if (!plan.objective || plan.objective.trim().length < MIN_OBJECTIVE_LENGTH) {
78
- gaps.push(
79
- gap(
80
- 'critical',
81
- 'structure',
82
- plan.objective
83
- ? `Objective too short (${plan.objective.trim().length} chars, need ${MIN_OBJECTIVE_LENGTH}+).`
84
- : 'Plan has no objective.',
85
- 'Add a clear objective describing what this plan achieves.',
86
- 'objective',
87
- 'missing_or_short_objective',
88
- ),
89
- );
90
- }
91
-
92
- if (!plan.scope || plan.scope.trim().length < MIN_SCOPE_LENGTH) {
93
- gaps.push(
94
- gap(
95
- 'critical',
96
- 'structure',
97
- plan.scope
98
- ? `Scope too short (${plan.scope.trim().length} chars, need ${MIN_SCOPE_LENGTH}+).`
99
- : 'Plan has no scope defined.',
100
- 'Define the scope — what is included and excluded.',
101
- 'scope',
102
- 'missing_or_short_scope',
103
- ),
104
- );
105
- }
106
-
107
- if (plan.tasks.length === 0) {
108
- gaps.push(
109
- gap(
110
- 'critical',
111
- 'structure',
112
- 'Plan has no tasks.',
113
- 'Add at least one task to make the plan actionable.',
114
- 'tasks',
115
- 'no_tasks',
116
- ),
117
- );
118
- }
119
-
120
- return gaps;
121
- }
122
-
123
- // ─── Pass 2: Completeness ────────────────────────────────────────
124
-
125
- const METRIC_PATTERNS = [
126
- /\d+/,
127
- /percent/i,
128
- /reduce/i,
129
- /increase/i,
130
- /measure/i,
131
- /target/i,
132
- /goal/i,
133
- /kpi/i,
134
- /metric/i,
135
- /benchmark/i,
136
- ];
137
-
138
- const EXCLUSION_KEYWORDS = [
139
- 'not',
140
- 'exclude',
141
- 'outside',
142
- 'beyond',
143
- 'limit',
144
- 'except',
145
- "won't",
146
- 'will not',
147
- ];
148
-
149
- function analyzeCompleteness(plan: Plan): PlanGap[] {
150
- const gaps: PlanGap[] = [];
151
-
152
- // Objective lacks measurable indicators
153
- if (plan.objective && !METRIC_PATTERNS.some((p) => p.test(plan.objective))) {
154
- gaps.push(
155
- gap(
156
- 'minor',
157
- 'completeness',
158
- 'Objective has no measurable targets or metrics.',
159
- 'Include quantifiable success criteria (numbers, percentages, concrete outcomes).',
160
- 'objective',
161
- 'no_metrics_in_objective',
162
- ),
163
- );
164
- }
165
-
166
- // Decisions without rationale-like content
167
- if (plan.decisions.length > 0) {
168
- for (let i = 0; i < plan.decisions.length; i++) {
169
- const d = plan.decisions[i];
170
- const text = decisionText(d);
171
- if (text.trim().length < MIN_DECISION_LENGTH) {
172
- gaps.push(
173
- gap(
174
- 'major',
175
- 'completeness',
176
- `Decision ${i + 1} is too short (${text.trim().length} chars) — lacks rationale.`,
177
- 'Expand each decision to include the reasoning (why this choice over alternatives).',
178
- `decisions[${i}]`,
179
- 'short_decision',
180
- ),
181
- );
182
- }
183
- }
184
- }
185
-
186
- // Scope missing exclusions
187
- if (plan.scope && !containsAny(plan.scope, EXCLUSION_KEYWORDS)) {
188
- gaps.push(
189
- gap(
190
- 'minor',
191
- 'completeness',
192
- 'Scope does not mention what is excluded.',
193
- 'Add explicit exclusions to prevent scope creep (e.g., "does NOT include…").',
194
- 'scope',
195
- 'no_exclusions_in_scope',
196
- ),
197
- );
198
- }
199
-
200
- return gaps;
201
- }
202
-
203
- // ─── Pass 3: Feasibility ─────────────────────────────────────────
204
-
205
- const OVERLY_BROAD_PATTERNS = [
206
- 'everything',
207
- 'all systems',
208
- 'entire codebase',
209
- 'complete rewrite',
210
- 'from scratch',
211
- 'total overhaul',
212
- 'rewrite everything',
213
- ];
214
-
215
- const DEPENDENCY_KEYWORDS = [
216
- 'depends',
217
- 'dependency',
218
- 'prerequisite',
219
- 'requires',
220
- 'blocked',
221
- 'before',
222
- ];
223
-
224
- function analyzeFeasibility(plan: Plan): PlanGap[] {
225
- const gaps: PlanGap[] = [];
226
- const scopeAndTasks = `${plan.scope} ${taskText(plan)}`;
227
-
228
- // Overly broad scope
229
- if (containsAny(scopeAndTasks, OVERLY_BROAD_PATTERNS)) {
230
- gaps.push(
231
- gap(
232
- 'major',
233
- 'feasibility',
234
- 'Scope contains overly broad indicators — risk of unrealistic delivery.',
235
- 'Narrow the scope to a well-defined subset. Prefer incremental delivery over big-bang rewrites.',
236
- 'scope',
237
- 'overly_broad_scope',
238
- ),
239
- );
240
- }
241
-
242
- // No dependency awareness in tasks
243
- if (plan.tasks.length > 3 && !containsAny(scopeAndTasks, DEPENDENCY_KEYWORDS)) {
244
- const hasDeps = plan.tasks.some((t) => t.dependsOn && t.dependsOn.length > 0);
245
- if (!hasDeps) {
246
- gaps.push(
247
- gap(
248
- 'minor',
249
- 'feasibility',
250
- `${plan.tasks.length} tasks with no dependency mentions — execution order unclear.`,
251
- 'Identify dependencies between tasks or add explicit ordering notes.',
252
- 'tasks',
253
- 'no_dependency_awareness',
254
- ),
255
- );
256
- }
257
- }
258
-
259
- return gaps;
260
- }
261
-
262
- // ─── Pass 4: Risk ────────────────────────────────────────────────
263
-
264
- const BREAKING_CHANGE_KEYWORDS = [
265
- 'breaking change',
266
- 'breaking',
267
- 'migration',
268
- 'deprecate',
269
- 'remove api',
270
- 'remove endpoint',
271
- 'schema change',
272
- 'database migration',
273
- ];
274
-
275
- const MITIGATION_KEYWORDS = [
276
- 'rollback',
277
- 'backward compatible',
278
- 'backwards compatible',
279
- 'feature flag',
280
- 'gradual',
281
- 'phased',
282
- 'fallback',
283
- 'backup',
284
- 'canary',
285
- 'blue-green',
286
- ];
287
-
288
- const VERIFICATION_KEYWORDS = [
289
- 'test',
290
- 'verify',
291
- 'validate',
292
- 'check',
293
- 'assert',
294
- 'confirm',
295
- 'spec',
296
- 'coverage',
297
- ];
298
-
299
- function analyzeRisk(plan: Plan): PlanGap[] {
300
- const gaps: PlanGap[] = [];
301
- const allText = `${plan.objective} ${plan.scope} ${taskText(plan)} ${decisionsText(plan)}`;
302
-
303
- // Breaking changes without mitigation
304
- if (
305
- containsAny(allText, BREAKING_CHANGE_KEYWORDS) &&
306
- !containsAny(allText, MITIGATION_KEYWORDS)
307
- ) {
308
- gaps.push(
309
- gap(
310
- 'major',
311
- 'risk',
312
- 'Plan involves breaking changes but mentions no mitigation strategy.',
313
- 'Add a rollback plan, feature flags, or phased migration approach.',
314
- undefined,
315
- 'breaking_without_mitigation',
316
- ),
317
- );
318
- }
319
-
320
- // No verification/testing mentioned
321
- if (plan.tasks.length > 0 && !containsAny(allText, VERIFICATION_KEYWORDS)) {
322
- gaps.push(
323
- gap(
324
- 'minor',
325
- 'risk',
326
- 'No verification or testing mentioned in the plan.',
327
- 'Add at least one task or note about testing/validation.',
328
- 'tasks',
329
- 'no_verification_mentioned',
330
- ),
331
- );
332
- }
333
-
334
- return gaps;
335
- }
336
-
337
- // ─── Pass 5: Clarity ─────────────────────────────────────────────
338
-
339
- const AMBIGUOUS_WORDS = [
340
- 'maybe',
341
- 'perhaps',
342
- 'might',
343
- 'could',
344
- 'some',
345
- 'etc',
346
- 'soon',
347
- 'simple',
348
- 'easy',
349
- 'appropriate',
350
- 'various',
351
- 'several',
352
- 'probably',
353
- 'possibly',
354
- 'somehow',
355
- ];
356
-
357
- function analyzeClarity(plan: Plan): PlanGap[] {
358
- const gaps: PlanGap[] = [];
359
- const allText = `${plan.objective} ${plan.scope} ${decisionsText(plan)}`;
360
- const lower = allText.toLowerCase();
361
-
362
- // Ambiguous language
363
- const found = AMBIGUOUS_WORDS.filter((w) => {
364
- const regex = new RegExp(`\\b${w}\\b`, 'i');
365
- return regex.test(lower);
366
- });
367
-
368
- if (found.length > 0) {
369
- gaps.push(
370
- gap(
371
- 'minor',
372
- 'clarity',
373
- `Ambiguous language detected: ${found.slice(0, 5).join(', ')}${found.length > 5 ? ` (+${found.length - 5} more)` : ''}.`,
374
- 'Replace vague terms with concrete, specific language.',
375
- undefined,
376
- `ambiguous_words:${found.join(',')}`,
377
- ),
378
- );
379
- }
380
-
381
- // Tasks with very short or missing descriptions
382
- const shortTasks = plan.tasks.filter((t) => !t.description || t.description.trim().length < 10);
383
- if (shortTasks.length > 0) {
384
- gaps.push(
385
- gap(
386
- 'minor',
387
- 'clarity',
388
- `${shortTasks.length} task(s) with very short descriptions: ${shortTasks.map((t) => t.id).join(', ')}.`,
389
- 'Add detailed descriptions to all tasks explaining what needs to be done.',
390
- 'tasks',
391
- 'short_task_descriptions',
392
- ),
393
- );
394
- }
395
-
396
- return gaps;
397
- }
398
-
399
- // ─── Pass 6: Semantic Quality ────────────────────────────────────
400
-
401
- const GENERIC_OBJECTIVE_PATTERNS = [
402
- /^(create|build|implement|add|make|do)\s+\w+$/i,
403
- /^fix\s+\w+$/i,
404
- /^update\s+\w+$/i,
405
- ];
406
-
407
- const RATIONALE_INDICATORS = [
408
- 'because',
409
- 'since',
410
- 'due to',
411
- 'in order to',
412
- 'so that',
413
- 'given that',
414
- 'as a result',
415
- ];
416
- const SHALLOW_INDICATORS = ['better', 'good', 'best', 'nice', 'great', 'improved'];
417
-
418
- function analyzeSemanticQuality(plan: Plan): PlanGap[] {
419
- const gaps: PlanGap[] = [];
420
-
421
- // Generic/too-short objective
422
- if (plan.objective) {
423
- const words = plan.objective.trim().split(/\s+/);
424
- const isGeneric = GENERIC_OBJECTIVE_PATTERNS.some((p) => p.test(plan.objective.trim()));
425
-
426
- if (isGeneric || words.length < 5) {
427
- gaps.push(
428
- gap(
429
- 'major',
430
- 'semantic-quality',
431
- `Objective is too generic${words.length < 5 ? ` (${words.length} words)` : ''}: "${plan.objective.trim()}".`,
432
- 'Expand the objective to describe the specific outcome, context, and constraints.',
433
- 'objective',
434
- 'generic_objective',
435
- ),
436
- );
437
- }
438
- }
439
-
440
- // Task granularity check (too few or too many)
441
- if (plan.tasks.length > 0 && plan.tasks.length < 3) {
442
- gaps.push(
443
- gap(
444
- 'minor',
445
- 'semantic-quality',
446
- `Only ${plan.tasks.length} task(s) — plan may lack sufficient breakdown.`,
447
- 'Break down the work into 3-15 well-defined tasks for better tracking.',
448
- 'tasks',
449
- 'too_few_tasks',
450
- ),
451
- );
452
- } else if (plan.tasks.length > 20) {
453
- gaps.push(
454
- gap(
455
- 'major',
456
- 'semantic-quality',
457
- `${plan.tasks.length} tasks — plan scope may be too large.`,
458
- 'Split into multiple plans or consolidate related tasks to stay under 20.',
459
- 'tasks',
460
- 'too_many_tasks',
461
- ),
462
- );
463
- }
464
-
465
- // Decisions with shallow rationale (uses "better/good" without "because/since")
466
- for (let i = 0; i < plan.decisions.length; i++) {
467
- const d = decisionText(plan.decisions[i]);
468
- const hasShallow = containsAny(d, SHALLOW_INDICATORS);
469
- const hasRationale = containsAny(d, RATIONALE_INDICATORS);
470
- if (hasShallow && !hasRationale) {
471
- gaps.push(
472
- gap(
473
- 'minor',
474
- 'semantic-quality',
475
- `Decision ${i + 1} uses subjective language without justification.`,
476
- 'Replace "better/good/best" with concrete reasoning using "because/since/due to".',
477
- `decisions[${i}]`,
478
- 'shallow_rationale',
479
- ),
480
- );
481
- }
482
- }
483
-
484
- // All task titles must be unique
485
- const titleSet = new Set<string>();
486
- const duplicates: string[] = [];
487
- for (const t of plan.tasks) {
488
- if (titleSet.has(t.title)) duplicates.push(t.title);
489
- titleSet.add(t.title);
490
- }
491
- if (duplicates.length > 0) {
492
- gaps.push(
493
- gap(
494
- 'minor',
495
- 'semantic-quality',
496
- `Duplicate task titles: ${[...new Set(duplicates)].join(', ')}.`,
497
- 'Give each task a unique, descriptive title.',
498
- 'tasks',
499
- 'duplicate_task_titles',
500
- ),
501
- );
502
- }
503
-
504
- // No decisions at all for multi-task plans
505
- if (plan.tasks.length >= 3 && plan.decisions.length === 0) {
506
- gaps.push(
507
- gap(
508
- 'major',
509
- 'semantic-quality',
510
- `${plan.tasks.length} tasks but no decisions documented.`,
511
- 'Document key decisions and their rationale — at least 1 per 3 tasks.',
512
- 'decisions',
513
- 'no_decisions',
514
- ),
515
- );
516
- }
517
-
518
- return gaps;
519
- }
520
-
521
- // ─── Pass 7: Knowledge Depth (Substance Bonuses) ────────────────
522
-
523
- /**
524
- * Patterns that indicate vault/knowledge-informed content in task descriptions.
525
- * Each match earns a bonus point — rewarding plans that reference specific
526
- * patterns, anti-patterns, or domain knowledge rather than generic guidance.
527
- */
528
- const KNOWLEDGE_INDICATORS = [
529
- /vault\s*pattern/i,
530
- /vault\s*patterns/i,
531
- /anti-pattern/i,
532
- /wcag\s*[\d.]+/i,
533
- /aria-[a-z]+/i,
534
- /\d+(\.\d+)?:\d+\s*(contrast|ratio)/i,
535
- /\d+px\s*(touch|target|minimum|min)/i,
536
- /acceptance\s*criteria/i,
537
- ];
538
-
539
- /** Checks if task descriptions reference specific named patterns (e.g. "zod-form-validation"). */
540
- const NAMED_PATTERN_REGEX = /[a-z]+-[a-z]+-[a-z]+/;
22
+ import type { Plan } from './planner-types.js';
23
+ import type { PlanGap, GapSeverity } from './gap-types.js';
541
24
 
542
- function analyzeKnowledgeDepth(plan: Plan): PlanGap[] {
543
- const gaps: PlanGap[] = [];
544
- const allTaskText = taskText(plan);
545
-
546
- // Bonus: tasks reference vault patterns by name
547
- let namedPatternCount = 0;
548
- for (const task of plan.tasks) {
549
- const desc = task.description || '';
550
- const matches = desc.match(/[a-z]+-[a-z]+(-[a-z]+)*/g) || [];
551
- // Filter to likely pattern IDs (hyphenated, 2+ segments, not common words)
552
- const patternRefs = matches.filter(
553
- (m) =>
554
- m.length > 8 &&
555
- NAMED_PATTERN_REGEX.test(m) &&
556
- !['front-end', 'back-end', 'real-time', 'client-side', 'server-side'].includes(m),
557
- );
558
- namedPatternCount += patternRefs.length;
559
- }
25
+ // ─── Pass imports ────────────────────────────────────────────────
560
26
 
561
- if (namedPatternCount >= 5) {
562
- gaps.push(
563
- gap(
564
- 'bonus',
565
- 'knowledge-depth',
566
- `${namedPatternCount} vault pattern references across tasks — strong knowledge-informed plan.`,
567
- '',
568
- 'tasks',
569
- 'vault_pattern_refs_high',
570
- ),
571
- );
572
- gaps.push(
573
- gap(
574
- 'bonus',
575
- 'knowledge-depth',
576
- 'Vault pattern density indicates expert-level domain knowledge.',
577
- '',
578
- 'tasks',
579
- 'vault_pattern_density',
580
- ),
581
- );
582
- } else if (namedPatternCount >= 2) {
583
- gaps.push(
584
- gap(
585
- 'bonus',
586
- 'knowledge-depth',
587
- `${namedPatternCount} vault pattern references across tasks.`,
588
- '',
589
- 'tasks',
590
- 'vault_pattern_refs_medium',
591
- ),
592
- );
593
- }
594
-
595
- // Bonus: tasks have specific acceptance criteria
596
- let tasksWithCriteria = 0;
597
- let totalCriteria = 0;
598
- for (const task of plan.tasks) {
599
- if (task.acceptanceCriteria && task.acceptanceCriteria.length > 0) {
600
- tasksWithCriteria++;
601
- totalCriteria += task.acceptanceCriteria.length;
602
- }
603
- }
604
-
605
- if (plan.tasks.length > 0 && tasksWithCriteria / plan.tasks.length >= 0.8) {
606
- gaps.push(
607
- gap(
608
- 'bonus',
609
- 'knowledge-depth',
610
- `${tasksWithCriteria}/${plan.tasks.length} tasks have acceptance criteria (${totalCriteria} total).`,
611
- '',
612
- 'tasks',
613
- 'high_acceptance_criteria',
614
- ),
615
- );
616
- }
617
-
618
- // Bonus: knowledge indicator patterns in task text
619
- let indicatorHits = 0;
620
- for (const pattern of KNOWLEDGE_INDICATORS) {
621
- if (pattern.test(allTaskText)) indicatorHits++;
622
- }
623
-
624
- if (indicatorHits >= 4) {
625
- gaps.push(
626
- gap(
627
- 'bonus',
628
- 'knowledge-depth',
629
- `${indicatorHits} domain-specific knowledge indicators found (WCAG, ARIA, contrast ratios, touch targets, etc.).`,
630
- '',
631
- 'tasks',
632
- 'domain_knowledge_indicators',
633
- ),
634
- );
635
- }
636
-
637
- // Bonus: rich task descriptions (avg > 80 chars per task)
638
- if (plan.tasks.length > 0) {
639
- const avgDescLength =
640
- plan.tasks.reduce((sum, t) => sum + (t.description?.length ?? 0), 0) / plan.tasks.length;
641
- if (avgDescLength >= 80) {
642
- gaps.push(
643
- gap(
644
- 'bonus',
645
- 'knowledge-depth',
646
- `Task descriptions average ${Math.round(avgDescLength)} chars — detailed and specific.`,
647
- '',
648
- 'tasks',
649
- 'rich_task_descriptions',
650
- ),
651
- );
652
- }
653
- }
27
+ import {
28
+ gap,
29
+ analyzeStructure,
30
+ analyzeCompleteness,
31
+ analyzeFeasibility,
32
+ analyzeRisk,
33
+ } from './gap-patterns.js';
654
34
 
655
- return gaps;
656
- }
35
+ import {
36
+ analyzeClarity,
37
+ analyzeSemanticQuality,
38
+ analyzeKnowledgeDepth,
39
+ analyzeAlternatives,
40
+ } from './gap-passes.js';
657
41
 
658
42
  // ─── Types ───────────────────────────────────────────────────────
659
43
 
@@ -661,7 +45,7 @@ function analyzeKnowledgeDepth(plan: Plan): PlanGap[] {
661
45
  export type GapAnalysisPass = (plan: Plan) => PlanGap[];
662
46
 
663
47
  export interface GapAnalysisOptions {
664
- /** Custom gap analysis passes appended after the 6 built-in passes. */
48
+ /** Custom gap analysis passes appended after the 8 built-in passes. */
665
49
  customPasses?: GapAnalysisPass[];
666
50
  }
667
51
 
@@ -886,7 +270,7 @@ export function createAntiPatternPass(
886
270
  // ─── Orchestrator ────────────────────────────────────────────────
887
271
 
888
272
  /**
889
- * Run all 6 built-in gap analysis passes on a plan, plus any custom passes.
273
+ * Run all 8 built-in gap analysis passes on a plan, plus any custom passes.
890
274
  * Returns a combined list of all gaps found, ordered by pass.
891
275
  *
892
276
  * @param plan - The plan to analyze
@@ -901,6 +285,7 @@ export function runGapAnalysis(plan: Plan, options?: GapAnalysisOptions): PlanGa
901
285
  ...analyzeClarity(plan),
902
286
  ...analyzeSemanticQuality(plan),
903
287
  ...analyzeKnowledgeDepth(plan),
288
+ ...analyzeAlternatives(plan),
904
289
  ];
905
290
 
906
291
  // Run custom passes (domain-specific checks like tool-feasibility, UI context, etc.)