@soleri/core 2.4.0 → 2.6.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 (328) hide show
  1. package/dist/brain/brain.d.ts +7 -0
  2. package/dist/brain/brain.d.ts.map +1 -1
  3. package/dist/brain/brain.js +56 -9
  4. package/dist/brain/brain.js.map +1 -1
  5. package/dist/brain/intelligence.d.ts +1 -0
  6. package/dist/brain/intelligence.d.ts.map +1 -1
  7. package/dist/brain/intelligence.js +164 -148
  8. package/dist/brain/intelligence.js.map +1 -1
  9. package/dist/brain/types.d.ts +2 -2
  10. package/dist/brain/types.d.ts.map +1 -1
  11. package/dist/cognee/client.d.ts +3 -0
  12. package/dist/cognee/client.d.ts.map +1 -1
  13. package/dist/cognee/client.js +17 -0
  14. package/dist/cognee/client.js.map +1 -1
  15. package/dist/cognee/sync-manager.d.ts +94 -0
  16. package/dist/cognee/sync-manager.d.ts.map +1 -0
  17. package/dist/cognee/sync-manager.js +293 -0
  18. package/dist/cognee/sync-manager.js.map +1 -0
  19. package/dist/control/identity-manager.d.ts +3 -1
  20. package/dist/control/identity-manager.d.ts.map +1 -1
  21. package/dist/control/identity-manager.js +49 -51
  22. package/dist/control/identity-manager.js.map +1 -1
  23. package/dist/control/intent-router.d.ts +1 -0
  24. package/dist/control/intent-router.d.ts.map +1 -1
  25. package/dist/control/intent-router.js +32 -32
  26. package/dist/control/intent-router.js.map +1 -1
  27. package/dist/curator/curator.d.ts +9 -1
  28. package/dist/curator/curator.d.ts.map +1 -1
  29. package/dist/curator/curator.js +104 -92
  30. package/dist/curator/curator.js.map +1 -1
  31. package/dist/errors/classify.d.ts +13 -0
  32. package/dist/errors/classify.d.ts.map +1 -0
  33. package/dist/errors/classify.js +97 -0
  34. package/dist/errors/classify.js.map +1 -0
  35. package/dist/errors/index.d.ts +6 -0
  36. package/dist/errors/index.d.ts.map +1 -0
  37. package/dist/errors/index.js +4 -0
  38. package/dist/errors/index.js.map +1 -0
  39. package/dist/errors/retry.d.ts +40 -0
  40. package/dist/errors/retry.d.ts.map +1 -0
  41. package/dist/errors/retry.js +97 -0
  42. package/dist/errors/retry.js.map +1 -0
  43. package/dist/errors/types.d.ts +48 -0
  44. package/dist/errors/types.d.ts.map +1 -0
  45. package/dist/errors/types.js +59 -0
  46. package/dist/errors/types.js.map +1 -0
  47. package/dist/governance/governance.d.ts +1 -0
  48. package/dist/governance/governance.d.ts.map +1 -1
  49. package/dist/governance/governance.js +51 -68
  50. package/dist/governance/governance.js.map +1 -1
  51. package/dist/index.d.ts +26 -5
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +22 -3
  54. package/dist/index.js.map +1 -1
  55. package/dist/intake/content-classifier.d.ts +14 -0
  56. package/dist/intake/content-classifier.d.ts.map +1 -0
  57. package/dist/intake/content-classifier.js +125 -0
  58. package/dist/intake/content-classifier.js.map +1 -0
  59. package/dist/intake/dedup-gate.d.ts +17 -0
  60. package/dist/intake/dedup-gate.d.ts.map +1 -0
  61. package/dist/intake/dedup-gate.js +66 -0
  62. package/dist/intake/dedup-gate.js.map +1 -0
  63. package/dist/intake/intake-pipeline.d.ts +63 -0
  64. package/dist/intake/intake-pipeline.d.ts.map +1 -0
  65. package/dist/intake/intake-pipeline.js +373 -0
  66. package/dist/intake/intake-pipeline.js.map +1 -0
  67. package/dist/intake/types.d.ts +65 -0
  68. package/dist/intake/types.d.ts.map +1 -0
  69. package/dist/intake/types.js +3 -0
  70. package/dist/intake/types.js.map +1 -0
  71. package/dist/intelligence/loader.js +1 -1
  72. package/dist/intelligence/loader.js.map +1 -1
  73. package/dist/intelligence/types.d.ts +3 -1
  74. package/dist/intelligence/types.d.ts.map +1 -1
  75. package/dist/loop/loop-manager.d.ts +58 -7
  76. package/dist/loop/loop-manager.d.ts.map +1 -1
  77. package/dist/loop/loop-manager.js +280 -6
  78. package/dist/loop/loop-manager.js.map +1 -1
  79. package/dist/loop/types.d.ts +69 -1
  80. package/dist/loop/types.d.ts.map +1 -1
  81. package/dist/loop/types.js +4 -1
  82. package/dist/loop/types.js.map +1 -1
  83. package/dist/persistence/index.d.ts +4 -0
  84. package/dist/persistence/index.d.ts.map +1 -0
  85. package/dist/persistence/index.js +3 -0
  86. package/dist/persistence/index.js.map +1 -0
  87. package/dist/persistence/postgres-provider.d.ts +46 -0
  88. package/dist/persistence/postgres-provider.d.ts.map +1 -0
  89. package/dist/persistence/postgres-provider.js +115 -0
  90. package/dist/persistence/postgres-provider.js.map +1 -0
  91. package/dist/persistence/sqlite-provider.d.ts +28 -0
  92. package/dist/persistence/sqlite-provider.d.ts.map +1 -0
  93. package/dist/persistence/sqlite-provider.js +97 -0
  94. package/dist/persistence/sqlite-provider.js.map +1 -0
  95. package/dist/persistence/types.d.ts +58 -0
  96. package/dist/persistence/types.d.ts.map +1 -0
  97. package/dist/persistence/types.js +8 -0
  98. package/dist/persistence/types.js.map +1 -0
  99. package/dist/planning/gap-analysis.d.ts +47 -4
  100. package/dist/planning/gap-analysis.d.ts.map +1 -1
  101. package/dist/planning/gap-analysis.js +190 -13
  102. package/dist/planning/gap-analysis.js.map +1 -1
  103. package/dist/planning/gap-types.d.ts +1 -1
  104. package/dist/planning/gap-types.d.ts.map +1 -1
  105. package/dist/planning/gap-types.js.map +1 -1
  106. package/dist/planning/planner.d.ts +277 -9
  107. package/dist/planning/planner.d.ts.map +1 -1
  108. package/dist/planning/planner.js +611 -46
  109. package/dist/planning/planner.js.map +1 -1
  110. package/dist/playbooks/generic/brainstorming.d.ts +9 -0
  111. package/dist/playbooks/generic/brainstorming.d.ts.map +1 -0
  112. package/dist/playbooks/generic/brainstorming.js +105 -0
  113. package/dist/playbooks/generic/brainstorming.js.map +1 -0
  114. package/dist/playbooks/generic/code-review.d.ts +11 -0
  115. package/dist/playbooks/generic/code-review.d.ts.map +1 -0
  116. package/dist/playbooks/generic/code-review.js +176 -0
  117. package/dist/playbooks/generic/code-review.js.map +1 -0
  118. package/dist/playbooks/generic/subagent-execution.d.ts +9 -0
  119. package/dist/playbooks/generic/subagent-execution.d.ts.map +1 -0
  120. package/dist/playbooks/generic/subagent-execution.js +68 -0
  121. package/dist/playbooks/generic/subagent-execution.js.map +1 -0
  122. package/dist/playbooks/generic/systematic-debugging.d.ts +9 -0
  123. package/dist/playbooks/generic/systematic-debugging.d.ts.map +1 -0
  124. package/dist/playbooks/generic/systematic-debugging.js +87 -0
  125. package/dist/playbooks/generic/systematic-debugging.js.map +1 -0
  126. package/dist/playbooks/generic/tdd.d.ts +9 -0
  127. package/dist/playbooks/generic/tdd.d.ts.map +1 -0
  128. package/dist/playbooks/generic/tdd.js +70 -0
  129. package/dist/playbooks/generic/tdd.js.map +1 -0
  130. package/dist/playbooks/generic/verification.d.ts +9 -0
  131. package/dist/playbooks/generic/verification.d.ts.map +1 -0
  132. package/dist/playbooks/generic/verification.js +74 -0
  133. package/dist/playbooks/generic/verification.js.map +1 -0
  134. package/dist/playbooks/index.d.ts +4 -0
  135. package/dist/playbooks/index.d.ts.map +1 -0
  136. package/dist/playbooks/index.js +5 -0
  137. package/dist/playbooks/index.js.map +1 -0
  138. package/dist/playbooks/playbook-registry.d.ts +42 -0
  139. package/dist/playbooks/playbook-registry.d.ts.map +1 -0
  140. package/dist/playbooks/playbook-registry.js +227 -0
  141. package/dist/playbooks/playbook-registry.js.map +1 -0
  142. package/dist/playbooks/playbook-seeder.d.ts +47 -0
  143. package/dist/playbooks/playbook-seeder.d.ts.map +1 -0
  144. package/dist/playbooks/playbook-seeder.js +104 -0
  145. package/dist/playbooks/playbook-seeder.js.map +1 -0
  146. package/dist/playbooks/playbook-types.d.ts +132 -0
  147. package/dist/playbooks/playbook-types.d.ts.map +1 -0
  148. package/dist/playbooks/playbook-types.js +12 -0
  149. package/dist/playbooks/playbook-types.js.map +1 -0
  150. package/dist/project/project-registry.d.ts +4 -4
  151. package/dist/project/project-registry.d.ts.map +1 -1
  152. package/dist/project/project-registry.js +30 -57
  153. package/dist/project/project-registry.js.map +1 -1
  154. package/dist/prompts/index.d.ts +4 -0
  155. package/dist/prompts/index.d.ts.map +1 -0
  156. package/dist/prompts/index.js +3 -0
  157. package/dist/prompts/index.js.map +1 -0
  158. package/dist/prompts/parser.d.ts +17 -0
  159. package/dist/prompts/parser.d.ts.map +1 -0
  160. package/dist/prompts/parser.js +47 -0
  161. package/dist/prompts/parser.js.map +1 -0
  162. package/dist/prompts/template-manager.d.ts +25 -0
  163. package/dist/prompts/template-manager.d.ts.map +1 -0
  164. package/dist/prompts/template-manager.js +71 -0
  165. package/dist/prompts/template-manager.js.map +1 -0
  166. package/dist/prompts/types.d.ts +26 -0
  167. package/dist/prompts/types.d.ts.map +1 -0
  168. package/dist/prompts/types.js +5 -0
  169. package/dist/prompts/types.js.map +1 -0
  170. package/dist/runtime/admin-extra-ops.d.ts +5 -3
  171. package/dist/runtime/admin-extra-ops.d.ts.map +1 -1
  172. package/dist/runtime/admin-extra-ops.js +348 -11
  173. package/dist/runtime/admin-extra-ops.js.map +1 -1
  174. package/dist/runtime/admin-ops.d.ts.map +1 -1
  175. package/dist/runtime/admin-ops.js +10 -3
  176. package/dist/runtime/admin-ops.js.map +1 -1
  177. package/dist/runtime/capture-ops.d.ts.map +1 -1
  178. package/dist/runtime/capture-ops.js +20 -2
  179. package/dist/runtime/capture-ops.js.map +1 -1
  180. package/dist/runtime/cognee-sync-ops.d.ts +12 -0
  181. package/dist/runtime/cognee-sync-ops.d.ts.map +1 -0
  182. package/dist/runtime/cognee-sync-ops.js +55 -0
  183. package/dist/runtime/cognee-sync-ops.js.map +1 -0
  184. package/dist/runtime/core-ops.d.ts +8 -6
  185. package/dist/runtime/core-ops.d.ts.map +1 -1
  186. package/dist/runtime/core-ops.js +226 -9
  187. package/dist/runtime/core-ops.js.map +1 -1
  188. package/dist/runtime/curator-extra-ops.d.ts +2 -2
  189. package/dist/runtime/curator-extra-ops.d.ts.map +1 -1
  190. package/dist/runtime/curator-extra-ops.js +15 -3
  191. package/dist/runtime/curator-extra-ops.js.map +1 -1
  192. package/dist/runtime/domain-ops.js +2 -2
  193. package/dist/runtime/domain-ops.js.map +1 -1
  194. package/dist/runtime/grading-ops.d.ts.map +1 -1
  195. package/dist/runtime/grading-ops.js.map +1 -1
  196. package/dist/runtime/intake-ops.d.ts +14 -0
  197. package/dist/runtime/intake-ops.d.ts.map +1 -0
  198. package/dist/runtime/intake-ops.js +110 -0
  199. package/dist/runtime/intake-ops.js.map +1 -0
  200. package/dist/runtime/loop-ops.d.ts +5 -4
  201. package/dist/runtime/loop-ops.d.ts.map +1 -1
  202. package/dist/runtime/loop-ops.js +84 -12
  203. package/dist/runtime/loop-ops.js.map +1 -1
  204. package/dist/runtime/memory-cross-project-ops.d.ts.map +1 -1
  205. package/dist/runtime/memory-cross-project-ops.js.map +1 -1
  206. package/dist/runtime/memory-extra-ops.js +5 -5
  207. package/dist/runtime/memory-extra-ops.js.map +1 -1
  208. package/dist/runtime/orchestrate-ops.d.ts.map +1 -1
  209. package/dist/runtime/orchestrate-ops.js +8 -2
  210. package/dist/runtime/orchestrate-ops.js.map +1 -1
  211. package/dist/runtime/planning-extra-ops.d.ts +13 -5
  212. package/dist/runtime/planning-extra-ops.d.ts.map +1 -1
  213. package/dist/runtime/planning-extra-ops.js +381 -18
  214. package/dist/runtime/planning-extra-ops.js.map +1 -1
  215. package/dist/runtime/playbook-ops.d.ts +14 -0
  216. package/dist/runtime/playbook-ops.d.ts.map +1 -0
  217. package/dist/runtime/playbook-ops.js +141 -0
  218. package/dist/runtime/playbook-ops.js.map +1 -0
  219. package/dist/runtime/project-ops.d.ts.map +1 -1
  220. package/dist/runtime/project-ops.js +7 -2
  221. package/dist/runtime/project-ops.js.map +1 -1
  222. package/dist/runtime/runtime.d.ts.map +1 -1
  223. package/dist/runtime/runtime.js +28 -9
  224. package/dist/runtime/runtime.js.map +1 -1
  225. package/dist/runtime/types.d.ts +8 -0
  226. package/dist/runtime/types.d.ts.map +1 -1
  227. package/dist/runtime/vault-extra-ops.d.ts +4 -2
  228. package/dist/runtime/vault-extra-ops.d.ts.map +1 -1
  229. package/dist/runtime/vault-extra-ops.js +383 -4
  230. package/dist/runtime/vault-extra-ops.js.map +1 -1
  231. package/dist/vault/playbook.d.ts +34 -0
  232. package/dist/vault/playbook.d.ts.map +1 -0
  233. package/dist/vault/playbook.js +60 -0
  234. package/dist/vault/playbook.js.map +1 -0
  235. package/dist/vault/vault.d.ts +52 -32
  236. package/dist/vault/vault.d.ts.map +1 -1
  237. package/dist/vault/vault.js +300 -181
  238. package/dist/vault/vault.js.map +1 -1
  239. package/package.json +9 -3
  240. package/src/__tests__/admin-extra-ops.test.ts +62 -15
  241. package/src/__tests__/admin-ops.test.ts +2 -2
  242. package/src/__tests__/brain.test.ts +3 -3
  243. package/src/__tests__/cognee-integration.test.ts +80 -0
  244. package/src/__tests__/cognee-sync-manager.test.ts +103 -0
  245. package/src/__tests__/core-ops.test.ts +36 -4
  246. package/src/__tests__/curator-extra-ops.test.ts +24 -2
  247. package/src/__tests__/errors.test.ts +388 -0
  248. package/src/__tests__/grading-ops.test.ts +28 -7
  249. package/src/__tests__/intake-pipeline.test.ts +162 -0
  250. package/src/__tests__/loop-ops.test.ts +74 -3
  251. package/src/__tests__/memory-cross-project-ops.test.ts +3 -1
  252. package/src/__tests__/orchestrate-ops.test.ts +8 -3
  253. package/src/__tests__/persistence.test.ts +291 -0
  254. package/src/__tests__/planner.test.ts +99 -21
  255. package/src/__tests__/planning-extra-ops.test.ts +168 -10
  256. package/src/__tests__/playbook-registry.test.ts +326 -0
  257. package/src/__tests__/playbook-seeder.test.ts +163 -0
  258. package/src/__tests__/playbook.test.ts +389 -0
  259. package/src/__tests__/postgres-provider.test.ts +58 -0
  260. package/src/__tests__/project-ops.test.ts +18 -4
  261. package/src/__tests__/template-manager.test.ts +222 -0
  262. package/src/__tests__/vault-extra-ops.test.ts +82 -7
  263. package/src/__tests__/vault.test.ts +184 -0
  264. package/src/brain/brain.ts +71 -9
  265. package/src/brain/intelligence.ts +258 -307
  266. package/src/brain/types.ts +2 -2
  267. package/src/cognee/client.ts +18 -0
  268. package/src/cognee/sync-manager.ts +389 -0
  269. package/src/control/identity-manager.ts +77 -75
  270. package/src/control/intent-router.ts +55 -57
  271. package/src/curator/curator.ts +199 -139
  272. package/src/errors/classify.ts +102 -0
  273. package/src/errors/index.ts +5 -0
  274. package/src/errors/retry.ts +132 -0
  275. package/src/errors/types.ts +81 -0
  276. package/src/governance/governance.ts +90 -107
  277. package/src/index.ts +116 -3
  278. package/src/intake/content-classifier.ts +146 -0
  279. package/src/intake/dedup-gate.ts +92 -0
  280. package/src/intake/intake-pipeline.ts +503 -0
  281. package/src/intake/types.ts +69 -0
  282. package/src/intelligence/loader.ts +1 -1
  283. package/src/intelligence/types.ts +3 -1
  284. package/src/loop/loop-manager.ts +325 -7
  285. package/src/loop/types.ts +72 -1
  286. package/src/persistence/index.ts +9 -0
  287. package/src/persistence/postgres-provider.ts +157 -0
  288. package/src/persistence/sqlite-provider.ts +115 -0
  289. package/src/persistence/types.ts +74 -0
  290. package/src/planning/gap-analysis.ts +286 -17
  291. package/src/planning/gap-types.ts +4 -1
  292. package/src/planning/planner.ts +828 -55
  293. package/src/playbooks/generic/brainstorming.ts +110 -0
  294. package/src/playbooks/generic/code-review.ts +181 -0
  295. package/src/playbooks/generic/subagent-execution.ts +74 -0
  296. package/src/playbooks/generic/systematic-debugging.ts +92 -0
  297. package/src/playbooks/generic/tdd.ts +75 -0
  298. package/src/playbooks/generic/verification.ts +79 -0
  299. package/src/playbooks/index.ts +27 -0
  300. package/src/playbooks/playbook-registry.ts +284 -0
  301. package/src/playbooks/playbook-seeder.ts +119 -0
  302. package/src/playbooks/playbook-types.ts +162 -0
  303. package/src/project/project-registry.ts +81 -74
  304. package/src/prompts/index.ts +3 -0
  305. package/src/prompts/parser.ts +59 -0
  306. package/src/prompts/template-manager.ts +77 -0
  307. package/src/prompts/types.ts +28 -0
  308. package/src/runtime/admin-extra-ops.ts +391 -13
  309. package/src/runtime/admin-ops.ts +17 -6
  310. package/src/runtime/capture-ops.ts +25 -6
  311. package/src/runtime/cognee-sync-ops.ts +63 -0
  312. package/src/runtime/core-ops.ts +258 -8
  313. package/src/runtime/curator-extra-ops.ts +17 -3
  314. package/src/runtime/domain-ops.ts +2 -2
  315. package/src/runtime/grading-ops.ts +11 -2
  316. package/src/runtime/intake-ops.ts +126 -0
  317. package/src/runtime/loop-ops.ts +96 -13
  318. package/src/runtime/memory-cross-project-ops.ts +1 -2
  319. package/src/runtime/memory-extra-ops.ts +5 -5
  320. package/src/runtime/orchestrate-ops.ts +8 -2
  321. package/src/runtime/planning-extra-ops.ts +414 -23
  322. package/src/runtime/playbook-ops.ts +169 -0
  323. package/src/runtime/project-ops.ts +9 -3
  324. package/src/runtime/runtime.ts +36 -10
  325. package/src/runtime/types.ts +8 -0
  326. package/src/runtime/vault-extra-ops.ts +425 -4
  327. package/src/vault/playbook.ts +87 -0
  328. package/src/vault/vault.ts +419 -235
@@ -0,0 +1,46 @@
1
+ /**
2
+ * PostgreSQL persistence provider (working stub).
3
+ *
4
+ * Implements PersistenceProvider with pg.Pool. The translateSql() function
5
+ * converts SQLite-style queries to PostgreSQL-compatible syntax.
6
+ *
7
+ * NOTE: PersistenceProvider is synchronous (better-sqlite3 heritage).
8
+ * This provider wraps async pg calls synchronously for interface compliance.
9
+ * Full async provider support is planned for v7.0.
10
+ */
11
+ import type { PersistenceProvider, PersistenceParams, RunResult, FtsSearchOptions } from './types.js';
12
+ /**
13
+ * Translate SQLite-style SQL to PostgreSQL-compatible SQL.
14
+ *
15
+ * - Converts positional `?` params to `$1, $2, ...`
16
+ * - Converts named `@name` params to `$N` positional, returns ordered values
17
+ * - Replaces `unixepoch()` with `EXTRACT(EPOCH FROM NOW())::integer`
18
+ */
19
+ export declare function translateSql(sql: string, params?: PersistenceParams): {
20
+ sql: string;
21
+ values: unknown[];
22
+ };
23
+ /**
24
+ * PostgreSQL persistence provider.
25
+ *
26
+ * Uses pg.Pool for connection management. Created via async factory
27
+ * `PostgresPersistenceProvider.create()`.
28
+ */
29
+ export declare class PostgresPersistenceProvider implements PersistenceProvider {
30
+ readonly backend: "postgres";
31
+ private pool;
32
+ private constructor();
33
+ /**
34
+ * Async factory. Dynamically imports `pg` (optional dependency).
35
+ */
36
+ static create(connectionString: string, poolSize?: number): Promise<PostgresPersistenceProvider>;
37
+ execSql(sql: string): void;
38
+ run(sql: string, params?: PersistenceParams): RunResult;
39
+ get<T = Record<string, unknown>>(sql: string, params?: PersistenceParams): T | undefined;
40
+ all<T = Record<string, unknown>>(sql: string, params?: PersistenceParams): T[];
41
+ transaction<T>(fn: () => T): T;
42
+ ftsSearch<T = Record<string, unknown>>(table: string, query: string, options?: FtsSearchOptions): T[];
43
+ ftsRebuild(table: string): void;
44
+ close(): void;
45
+ }
46
+ //# sourceMappingURL=postgres-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-provider.d.ts","sourceRoot":"","sources":["../../src/persistence/postgres-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,iBAAiB,GACzB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CAsBpC;AAED;;;;;GAKG;AACH,qBAAa,2BAA4B,YAAW,mBAAmB;IACrE,QAAQ,CAAC,OAAO,EAAG,UAAU,CAAU;IAEvC,OAAO,CAAC,IAAI,CAAM;IAGlB,OAAO;IAIP;;OAEG;WACU,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAUlG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAW1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,SAAS;IAQvD,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,CAAC,GAAG,SAAS;IAQxF,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,CAAC,EAAE;IAQ9E,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAQ9B,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,CAAC,EAAE;IAcN,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/B,KAAK,IAAI,IAAI;CAMd"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * PostgreSQL persistence provider (working stub).
3
+ *
4
+ * Implements PersistenceProvider with pg.Pool. The translateSql() function
5
+ * converts SQLite-style queries to PostgreSQL-compatible syntax.
6
+ *
7
+ * NOTE: PersistenceProvider is synchronous (better-sqlite3 heritage).
8
+ * This provider wraps async pg calls synchronously for interface compliance.
9
+ * Full async provider support is planned for v7.0.
10
+ */
11
+ /**
12
+ * Translate SQLite-style SQL to PostgreSQL-compatible SQL.
13
+ *
14
+ * - Converts positional `?` params to `$1, $2, ...`
15
+ * - Converts named `@name` params to `$N` positional, returns ordered values
16
+ * - Replaces `unixepoch()` with `EXTRACT(EPOCH FROM NOW())::integer`
17
+ */
18
+ export function translateSql(sql, params) {
19
+ let translated = sql.replace(/unixepoch\(\)/gi, 'EXTRACT(EPOCH FROM NOW())::integer');
20
+ if (!params)
21
+ return { sql: translated, values: [] };
22
+ if (Array.isArray(params)) {
23
+ let idx = 0;
24
+ translated = translated.replace(/\?/g, () => `$${++idx}`);
25
+ return { sql: translated, values: params };
26
+ }
27
+ // Named params: @name -> $N
28
+ const values = [];
29
+ const nameMap = new Map();
30
+ translated = translated.replace(/@(\w+)/g, (_match, name) => {
31
+ if (!nameMap.has(name)) {
32
+ nameMap.set(name, values.length + 1);
33
+ values.push(params[name]);
34
+ }
35
+ return `$${nameMap.get(name)}`;
36
+ });
37
+ return { sql: translated, values };
38
+ }
39
+ /**
40
+ * PostgreSQL persistence provider.
41
+ *
42
+ * Uses pg.Pool for connection management. Created via async factory
43
+ * `PostgresPersistenceProvider.create()`.
44
+ */
45
+ export class PostgresPersistenceProvider {
46
+ backend = 'postgres';
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
+ pool;
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ constructor(pool) {
51
+ this.pool = pool;
52
+ }
53
+ /**
54
+ * Async factory. Dynamically imports `pg` (optional dependency).
55
+ */
56
+ static async create(connectionString, poolSize = 10) {
57
+ const { default: pg } = await import('pg');
58
+ const pool = new pg.Pool({
59
+ connectionString,
60
+ max: poolSize,
61
+ idleTimeoutMillis: 30_000,
62
+ });
63
+ return new PostgresPersistenceProvider(pool);
64
+ }
65
+ execSql(sql) {
66
+ // Sync wrapper -- logs warning in non-test env
67
+ // Full async support in v7.0
68
+ void sql;
69
+ throw new Error('PostgresPersistenceProvider.execSql() is not yet implemented. ' +
70
+ 'Use SQLitePersistenceProvider for synchronous operations. ' +
71
+ 'Full PostgreSQL support requires async PersistenceProvider (v7.0).');
72
+ }
73
+ run(sql, params) {
74
+ const _translated = translateSql(sql, params);
75
+ throw new Error('PostgresPersistenceProvider.run() is not yet implemented. ' +
76
+ 'Full PostgreSQL support requires async PersistenceProvider (v7.0).');
77
+ }
78
+ get(sql, params) {
79
+ const _translated = translateSql(sql, params);
80
+ throw new Error('PostgresPersistenceProvider.get() is not yet implemented. ' +
81
+ 'Full PostgreSQL support requires async PersistenceProvider (v7.0).');
82
+ }
83
+ all(sql, params) {
84
+ const _translated = translateSql(sql, params);
85
+ throw new Error('PostgresPersistenceProvider.all() is not yet implemented. ' +
86
+ 'Full PostgreSQL support requires async PersistenceProvider (v7.0).');
87
+ }
88
+ transaction(fn) {
89
+ void fn;
90
+ throw new Error('PostgresPersistenceProvider.transaction() is not yet implemented. ' +
91
+ 'Full PostgreSQL support requires async PersistenceProvider (v7.0).');
92
+ }
93
+ ftsSearch(table, query, options) {
94
+ const _cols = options?.columns?.length ? options.columns.join(', ') : '*';
95
+ const _limit = options?.limit ?? 50;
96
+ const _offset = options?.offset ?? 0;
97
+ void table;
98
+ void query;
99
+ // Would generate: SELECT cols FROM table WHERE tsvector_col @@ to_tsquery($1)
100
+ // ORDER BY ts_rank(tsvector_col, to_tsquery($1)) DESC LIMIT $2 OFFSET $3
101
+ throw new Error('PostgresPersistenceProvider.ftsSearch() is not yet implemented. ' +
102
+ 'Full PostgreSQL support requires async PersistenceProvider (v7.0).');
103
+ }
104
+ ftsRebuild(table) {
105
+ // Would run: REINDEX INDEX idx_{table}_fts
106
+ void table;
107
+ }
108
+ close() {
109
+ if (this.pool) {
110
+ // Fire-and-forget pool end; sync interface constraint
111
+ void this.pool.end();
112
+ }
113
+ }
114
+ }
115
+ //# sourceMappingURL=postgres-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-provider.js","sourceRoot":"","sources":["../../src/persistence/postgres-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * SQLite persistence provider backed by better-sqlite3.
3
+ *
4
+ * Supports both positional (array) and named (object) parameters.
5
+ * Exposes getDatabase() for backward-compat consumers that need the raw db.
6
+ */
7
+ import Database from 'better-sqlite3';
8
+ import type { PersistenceProvider, PersistenceParams, RunResult, FtsSearchOptions } from './types.js';
9
+ export declare class SQLitePersistenceProvider implements PersistenceProvider {
10
+ readonly backend: "sqlite";
11
+ private db;
12
+ constructor(path?: string);
13
+ execSql(sql: string): void;
14
+ run(sql: string, params?: PersistenceParams): RunResult;
15
+ get<T = Record<string, unknown>>(sql: string, params?: PersistenceParams): T | undefined;
16
+ all<T = Record<string, unknown>>(sql: string, params?: PersistenceParams): T[];
17
+ transaction<T>(fn: () => T): T;
18
+ ftsSearch<T = Record<string, unknown>>(table: string, query: string, options?: FtsSearchOptions): T[];
19
+ ftsRebuild(table: string): void;
20
+ close(): void;
21
+ /**
22
+ * Escape hatch: get the raw better-sqlite3 Database.
23
+ * Used by modules that need direct db access (ProjectRegistry, BrainIntelligence, etc.).
24
+ * @deprecated Use provider methods instead.
25
+ */
26
+ getDatabase(): Database.Database;
27
+ }
28
+ //# sourceMappingURL=sqlite-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-provider.d.ts","sourceRoot":"","sources":["../../src/persistence/sqlite-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEtG,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE,QAAQ,CAAC,OAAO,EAAG,QAAQ,CAAU;IACrC,OAAO,CAAC,EAAE,CAAoB;gBAElB,IAAI,GAAE,MAAmB;IAUrC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,SAAS;IAOvD,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,CAAC,GAAG,SAAS;IAOxF,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,CAAC,EAAE;IAO9E,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAI9B,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,CAAC,EAAE;IA0BN,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS/B,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,WAAW,IAAI,QAAQ,CAAC,QAAQ;CAMjC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * SQLite persistence provider backed by better-sqlite3.
3
+ *
4
+ * Supports both positional (array) and named (object) parameters.
5
+ * Exposes getDatabase() for backward-compat consumers that need the raw db.
6
+ */
7
+ import Database from 'better-sqlite3';
8
+ import { mkdirSync } from 'node:fs';
9
+ import { dirname } from 'node:path';
10
+ export class SQLitePersistenceProvider {
11
+ backend = 'sqlite';
12
+ db;
13
+ constructor(path = ':memory:') {
14
+ if (path !== ':memory:')
15
+ mkdirSync(dirname(path), { recursive: true });
16
+ this.db = new Database(path);
17
+ if (path !== ':memory:') {
18
+ this.db.pragma('cache_size = -64000'); // 64MB
19
+ this.db.pragma('temp_store = MEMORY');
20
+ this.db.pragma('mmap_size = 268435456'); // 256MB
21
+ }
22
+ }
23
+ execSql(sql) {
24
+ this.db.exec(sql);
25
+ }
26
+ run(sql, params) {
27
+ const stmt = this.db.prepare(sql);
28
+ if (!params)
29
+ return stmt.run();
30
+ if (Array.isArray(params))
31
+ return stmt.run(...params);
32
+ return stmt.run(params);
33
+ }
34
+ get(sql, params) {
35
+ const stmt = this.db.prepare(sql);
36
+ if (!params)
37
+ return stmt.get();
38
+ if (Array.isArray(params))
39
+ return stmt.get(...params);
40
+ return stmt.get(params);
41
+ }
42
+ all(sql, params) {
43
+ const stmt = this.db.prepare(sql);
44
+ if (!params)
45
+ return stmt.all();
46
+ if (Array.isArray(params))
47
+ return stmt.all(...params);
48
+ return stmt.all(params);
49
+ }
50
+ transaction(fn) {
51
+ return this.db.transaction(fn)();
52
+ }
53
+ ftsSearch(table, query, options) {
54
+ const ftsTable = `${table}_fts`;
55
+ const cols = options?.columns?.length ? options.columns.join(', ') : `${table}.*`;
56
+ const orderBy = options?.orderByRank !== false ? `ORDER BY rank` : '';
57
+ const limit = options?.limit ? `LIMIT ${options.limit}` : '';
58
+ const offset = options?.offset ? `OFFSET ${options.offset}` : '';
59
+ const filterClauses = [];
60
+ const filterParams = [query];
61
+ if (options?.filters) {
62
+ for (const [key, value] of Object.entries(options.filters)) {
63
+ filterClauses.push(`${table}.${key} = ?`);
64
+ filterParams.push(value);
65
+ }
66
+ }
67
+ const filterSql = filterClauses.length
68
+ ? `AND ${filterClauses.join(' AND ')}`
69
+ : '';
70
+ const sql = `SELECT ${cols} FROM ${ftsTable} JOIN ${table} ON ${table}.rowid = ${ftsTable}.rowid WHERE ${ftsTable} MATCH ? ${filterSql} ${orderBy} ${limit} ${offset}`;
71
+ return this.all(sql, filterParams);
72
+ }
73
+ ftsRebuild(table) {
74
+ const ftsTable = `${table}_fts`;
75
+ try {
76
+ this.execSql(`INSERT INTO ${ftsTable}(${ftsTable}) VALUES('rebuild')`);
77
+ }
78
+ catch {
79
+ // Graceful degradation: FTS table may not exist
80
+ }
81
+ }
82
+ close() {
83
+ this.db.close();
84
+ }
85
+ /**
86
+ * Escape hatch: get the raw better-sqlite3 Database.
87
+ * Used by modules that need direct db access (ProjectRegistry, BrainIntelligence, etc.).
88
+ * @deprecated Use provider methods instead.
89
+ */
90
+ getDatabase() {
91
+ if (process.env.NODE_ENV !== 'test' && process.env.VITEST !== 'true') {
92
+ console.warn('SQLitePersistenceProvider.getDatabase() is deprecated. Use provider methods instead.');
93
+ }
94
+ return this.db;
95
+ }
96
+ }
97
+ //# sourceMappingURL=sqlite-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-provider.js","sourceRoot":"","sources":["../../src/persistence/sqlite-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Abstract persistence layer.
3
+ *
4
+ * Decouples Vault (and future modules) from any specific database engine.
5
+ * The default implementation is SQLitePersistenceProvider (better-sqlite3).
6
+ */
7
+ export type PersistenceParams = unknown[] | Record<string, unknown>;
8
+ export interface RunResult {
9
+ changes: number;
10
+ lastInsertRowid: number | bigint;
11
+ }
12
+ /**
13
+ * Minimal database provider interface.
14
+ *
15
+ * Supports both positional (`?`) and named (`@param`) parameter styles.
16
+ * Implementations must handle both array and object params.
17
+ */
18
+ export interface PersistenceProvider {
19
+ /** Run raw SQL (DDL, multi-statement). No return value. */
20
+ execSql(sql: string): void;
21
+ /** Run a parameterized statement (INSERT, UPDATE, DELETE). */
22
+ run(sql: string, params?: PersistenceParams): RunResult;
23
+ /** Get a single row. Returns undefined if no match. */
24
+ get<T = Record<string, unknown>>(sql: string, params?: PersistenceParams): T | undefined;
25
+ /** Get all matching rows. */
26
+ all<T = Record<string, unknown>>(sql: string, params?: PersistenceParams): T[];
27
+ /** Run a function inside a transaction. Commits on success, rolls back on error. */
28
+ transaction<T>(fn: () => T): T;
29
+ /** Identifies the backend engine. */
30
+ readonly backend: 'sqlite' | 'postgres';
31
+ /** Full-text search abstraction. */
32
+ ftsSearch<T = Record<string, unknown>>(table: string, query: string, options?: FtsSearchOptions): T[];
33
+ /** Rebuild FTS index for a table. */
34
+ ftsRebuild(table: string): void;
35
+ /** Close the connection. */
36
+ close(): void;
37
+ }
38
+ export interface PersistenceConfig {
39
+ type: 'sqlite' | 'postgres';
40
+ path: string;
41
+ /** PostgreSQL connection string. */
42
+ connectionString?: string;
43
+ /** PostgreSQL pool size. */
44
+ poolSize?: number;
45
+ }
46
+ export interface FtsSearchOptions {
47
+ /** Columns to search (default: all FTS columns). */
48
+ columns?: string[];
49
+ /** Max results. */
50
+ limit?: number;
51
+ /** Skip N results. */
52
+ offset?: number;
53
+ /** Additional WHERE conditions on the base table. */
54
+ filters?: Record<string, unknown>;
55
+ /** Order by FTS relevance rank (default: true). */
56
+ orderByRank?: boolean;
57
+ }
58
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/persistence/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,iBAAiB,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC;CAClC;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B,8DAA8D;IAC9D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAExD,uDAAuD;IACvD,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,CAAC,GAAG,SAAS,CAAC;IAEzF,6BAA6B;IAC7B,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,CAAC,EAAE,CAAC;IAE/E,oFAAoF;IACpF,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAE/B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAC;IAExC,oCAAoC;IACpC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,CAAC,EAAE,CAAC;IAEtG,qCAAqC;IACrC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC,4BAA4B;IAC5B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,mDAAmD;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Abstract persistence layer.
3
+ *
4
+ * Decouples Vault (and future modules) from any specific database engine.
5
+ * The default implementation is SQLitePersistenceProvider (better-sqlite3).
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/persistence/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,23 +1,66 @@
1
1
  /**
2
- * 6-pass gap analysis engine for plan grading.
3
- * Ported from Salvador MCP's plan-gap-content.ts / plan-gap-technical.ts.
2
+ * Gap analysis engine for plan grading.
3
+ * Ported from Salvador MCP's plan-gap-content.ts / plan-gap-technical.ts /
4
+ * plan-gap-domain.ts / plan-gap-antipattern.ts.
4
5
  *
5
- * Passes:
6
+ * 6 built-in passes (always run):
6
7
  * 1. Structure — required fields present and sufficiently long
7
8
  * 2. Completeness — measurable objectives, decision rationale, scope exclusions
8
9
  * 3. Feasibility — overly broad scope, missing dependency awareness
9
10
  * 4. Risk — breaking changes without mitigation, missing verification
10
11
  * 5. Clarity — ambiguous language, vague criteria
11
12
  * 6. Semantic Quality — generic objectives, shallow rationale, non-concrete approach
13
+ *
14
+ * Opt-in pass factories (registered via customPasses):
15
+ * - createToolFeasibilityPass — validates tool_chain entries and ordering
16
+ * - createFlowAlignmentPass — validates flow and target_mode against registries
17
+ * - createAntiPatternPass — detects content anti-patterns and vague criteria
12
18
  */
13
19
  import type { Plan } from './planner.js';
14
- import type { PlanGap } from './gap-types.js';
20
+ import type { PlanGap, GapSeverity } from './gap-types.js';
15
21
  /** A custom gap analysis pass that agents can register. */
16
22
  export type GapAnalysisPass = (plan: Plan) => PlanGap[];
17
23
  export interface GapAnalysisOptions {
18
24
  /** Custom gap analysis passes appended after the 6 built-in passes. */
19
25
  customPasses?: GapAnalysisPass[];
20
26
  }
27
+ /**
28
+ * Factory: tool chain feasibility pass.
29
+ * Validates that tool_chain entries are known and ordering rules are respected.
30
+ * Ported from Salvador's analyzeToolFeasibility.
31
+ *
32
+ * @param validTools - Set of valid tool names for this agent
33
+ * @param orderingRules - Ordering constraints (e.g., search before create)
34
+ */
35
+ export declare function createToolFeasibilityPass(validTools: Set<string>, orderingRules?: Array<{
36
+ before: string;
37
+ after: string;
38
+ reason: string;
39
+ }>): GapAnalysisPass;
40
+ /**
41
+ * Factory: flow and mode alignment pass.
42
+ * Validates flow and target_mode against known values and intent alignment.
43
+ * Ported from Salvador's analyzeFlowAlignment.
44
+ *
45
+ * @param validFlows - Set of valid flow names for this agent
46
+ * @param validModes - Set of valid operational modes for this agent
47
+ * @param intentFlowMap - Maps detected intents to expected flows
48
+ */
49
+ export declare function createFlowAlignmentPass(validFlows: Set<string>, validModes: Set<string>, intentFlowMap?: Record<string, string[]>): GapAnalysisPass;
50
+ /**
51
+ * Factory: content anti-pattern pass.
52
+ * Detects common anti-patterns in plan content.
53
+ * Ported from Salvador's analyzeContentAntiPatterns.
54
+ *
55
+ * @param antiPatterns - Regex patterns to check against approach text
56
+ * @param mitigationPatterns - Patterns that indicate the plan is already mitigating
57
+ */
58
+ export declare function createAntiPatternPass(antiPatterns?: Array<{
59
+ pattern: RegExp;
60
+ severity: GapSeverity;
61
+ description: string;
62
+ recommendation: string;
63
+ }>, mitigationPatterns?: RegExp[]): GapAnalysisPass;
21
64
  /**
22
65
  * Run all 6 built-in gap analysis passes on a plan, plus any custom passes.
23
66
  * Returns a combined list of all gaps found, ordered by pass.
@@ -1 +1 @@
1
- {"version":3,"file":"gap-analysis.d.ts","sourceRoot":"","sources":["../../src/planning/gap-analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAA4B,MAAM,gBAAgB,CAAC;AAwcxE,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;CAClC;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,EAAE,CAkBlF"}
1
+ {"version":3,"file":"gap-analysis.d.ts","sourceRoot":"","sources":["../../src/planning/gap-analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAgB,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAe,MAAM,gBAAgB,CAAC;AAqfxE,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;CAClC;AAOD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,aAAa,CAAC,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GACvE,eAAe,CA2CjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACvC,eAAe,CAoEjB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,CAAC,EAAE,KAAK,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC,EACF,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAC5B,eAAe,CAwDjB;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,EAAE,CAkBlF"}