@planu/cli 0.28.0 → 0.29.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 (218) hide show
  1. package/dist/config/model-routing-rules.json +98 -0
  2. package/dist/engine/ai-cost-estimator/core.d.ts.map +1 -1
  3. package/dist/engine/ai-cost-estimator/core.js +2 -202
  4. package/dist/engine/ai-cost-estimator/core.js.map +1 -1
  5. package/dist/engine/ai-cost-estimator/recommender.d.ts +8 -0
  6. package/dist/engine/ai-cost-estimator/recommender.d.ts.map +1 -0
  7. package/dist/engine/ai-cost-estimator/recommender.js +94 -0
  8. package/dist/engine/ai-cost-estimator/recommender.js.map +1 -0
  9. package/dist/engine/ai-cost-estimator/spec-loader.d.ts +13 -0
  10. package/dist/engine/ai-cost-estimator/spec-loader.d.ts.map +1 -0
  11. package/dist/engine/ai-cost-estimator/spec-loader.js +102 -0
  12. package/dist/engine/ai-cost-estimator/spec-loader.js.map +1 -0
  13. package/dist/engine/code-transforms/transform-engine.d.ts +7 -0
  14. package/dist/engine/code-transforms/transform-engine.d.ts.map +1 -0
  15. package/dist/engine/code-transforms/transform-engine.js +67 -0
  16. package/dist/engine/code-transforms/transform-engine.js.map +1 -0
  17. package/dist/engine/code-transforms/typescript/add-error-handling.d.ts +6 -0
  18. package/dist/engine/code-transforms/typescript/add-error-handling.d.ts.map +1 -0
  19. package/dist/engine/code-transforms/typescript/add-error-handling.js +92 -0
  20. package/dist/engine/code-transforms/typescript/add-error-handling.js.map +1 -0
  21. package/dist/engine/code-transforms/typescript/add-jsdoc.d.ts +6 -0
  22. package/dist/engine/code-transforms/typescript/add-jsdoc.d.ts.map +1 -0
  23. package/dist/engine/code-transforms/typescript/add-jsdoc.js +83 -0
  24. package/dist/engine/code-transforms/typescript/add-jsdoc.js.map +1 -0
  25. package/dist/engine/code-transforms/typescript/add-types.d.ts +3 -0
  26. package/dist/engine/code-transforms/typescript/add-types.d.ts.map +1 -0
  27. package/dist/engine/code-transforms/typescript/add-types.js +182 -0
  28. package/dist/engine/code-transforms/typescript/add-types.js.map +1 -0
  29. package/dist/engine/code-transforms/typescript/ast-utils.d.ts +38 -0
  30. package/dist/engine/code-transforms/typescript/ast-utils.d.ts.map +1 -0
  31. package/dist/engine/code-transforms/typescript/ast-utils.js +90 -0
  32. package/dist/engine/code-transforms/typescript/ast-utils.js.map +1 -0
  33. package/dist/engine/code-transforms/typescript/extract-interface.d.ts +6 -0
  34. package/dist/engine/code-transforms/typescript/extract-interface.d.ts.map +1 -0
  35. package/dist/engine/code-transforms/typescript/extract-interface.js +103 -0
  36. package/dist/engine/code-transforms/typescript/extract-interface.js.map +1 -0
  37. package/dist/engine/code-transforms/typescript/modernize-syntax.d.ts +3 -0
  38. package/dist/engine/code-transforms/typescript/modernize-syntax.d.ts.map +1 -0
  39. package/dist/engine/code-transforms/typescript/modernize-syntax.js +213 -0
  40. package/dist/engine/code-transforms/typescript/modernize-syntax.js.map +1 -0
  41. package/dist/engine/code-transforms/typescript/rename-symbol.d.ts +8 -0
  42. package/dist/engine/code-transforms/typescript/rename-symbol.d.ts.map +1 -0
  43. package/dist/engine/code-transforms/typescript/rename-symbol.js +40 -0
  44. package/dist/engine/code-transforms/typescript/rename-symbol.js.map +1 -0
  45. package/dist/engine/mermaid/core.d.ts +18 -0
  46. package/dist/engine/mermaid/core.d.ts.map +1 -0
  47. package/dist/engine/mermaid/core.js +88 -0
  48. package/dist/engine/mermaid/core.js.map +1 -0
  49. package/dist/engine/mermaid/diagram-generators.d.ts +22 -0
  50. package/dist/engine/mermaid/diagram-generators.d.ts.map +1 -0
  51. package/dist/engine/mermaid/diagram-generators.js +139 -0
  52. package/dist/engine/mermaid/diagram-generators.js.map +1 -0
  53. package/dist/engine/mermaid/helpers.d.ts +8 -0
  54. package/dist/engine/mermaid/helpers.d.ts.map +1 -0
  55. package/dist/engine/mermaid/helpers.js +61 -0
  56. package/dist/engine/mermaid/helpers.js.map +1 -0
  57. package/dist/engine/mermaid-generator.d.ts +2 -37
  58. package/dist/engine/mermaid-generator.d.ts.map +1 -1
  59. package/dist/engine/mermaid-generator.js +4 -276
  60. package/dist/engine/mermaid-generator.js.map +1 -1
  61. package/dist/engine/model-router/complexity-analyzer.d.ts +26 -0
  62. package/dist/engine/model-router/complexity-analyzer.d.ts.map +1 -0
  63. package/dist/engine/model-router/complexity-analyzer.js +182 -0
  64. package/dist/engine/model-router/complexity-analyzer.js.map +1 -0
  65. package/dist/engine/model-router/cost-estimator.d.ts +6 -0
  66. package/dist/engine/model-router/cost-estimator.d.ts.map +1 -0
  67. package/dist/engine/model-router/cost-estimator.js +60 -0
  68. package/dist/engine/model-router/cost-estimator.js.map +1 -0
  69. package/dist/engine/model-router/historical-learner.d.ts +26 -0
  70. package/dist/engine/model-router/historical-learner.d.ts.map +1 -0
  71. package/dist/engine/model-router/historical-learner.js +91 -0
  72. package/dist/engine/model-router/historical-learner.js.map +1 -0
  73. package/dist/engine/model-router/rules-engine.d.ts +13 -0
  74. package/dist/engine/model-router/rules-engine.d.ts.map +1 -0
  75. package/dist/engine/model-router/rules-engine.js +142 -0
  76. package/dist/engine/model-router/rules-engine.js.map +1 -0
  77. package/dist/engine/spec-coverage/criteria-mapper.d.ts +1 -2
  78. package/dist/engine/spec-coverage/criteria-mapper.d.ts.map +1 -1
  79. package/dist/engine/spec-coverage/criteria-mapper.js +4 -203
  80. package/dist/engine/spec-coverage/criteria-mapper.js.map +1 -1
  81. package/dist/engine/spec-coverage/keyword-extractor.d.ts +10 -0
  82. package/dist/engine/spec-coverage/keyword-extractor.d.ts.map +1 -0
  83. package/dist/engine/spec-coverage/keyword-extractor.js +147 -0
  84. package/dist/engine/spec-coverage/keyword-extractor.js.map +1 -0
  85. package/dist/engine/spec-coverage/test-matchers.d.ts +9 -0
  86. package/dist/engine/spec-coverage/test-matchers.d.ts.map +1 -0
  87. package/dist/engine/spec-coverage/test-matchers.js +59 -0
  88. package/dist/engine/spec-coverage/test-matchers.js.map +1 -0
  89. package/dist/engine/spec-templates/catalog-extra.d.ts +1 -1
  90. package/dist/engine/spec-templates/catalog-extra.d.ts.map +1 -1
  91. package/dist/engine/spec-templates/catalog-extra.js +8 -363
  92. package/dist/engine/spec-templates/catalog-extra.js.map +1 -1
  93. package/dist/engine/spec-templates/catalog.d.ts.map +1 -1
  94. package/dist/engine/spec-templates/catalog.js +10 -381
  95. package/dist/engine/spec-templates/catalog.js.map +1 -1
  96. package/dist/engine/spec-templates/templates-api-ui.d.ts +6 -0
  97. package/dist/engine/spec-templates/templates-api-ui.d.ts.map +1 -0
  98. package/dist/engine/spec-templates/templates-api-ui.js +188 -0
  99. package/dist/engine/spec-templates/templates-api-ui.js.map +1 -0
  100. package/dist/engine/spec-templates/templates-auth-crud.d.ts +6 -0
  101. package/dist/engine/spec-templates/templates-auth-crud.d.ts.map +1 -0
  102. package/dist/engine/spec-templates/templates-auth-crud.js +198 -0
  103. package/dist/engine/spec-templates/templates-auth-crud.js.map +1 -0
  104. package/dist/engine/spec-templates/templates-data-security.d.ts +6 -0
  105. package/dist/engine/spec-templates/templates-data-security.d.ts.map +1 -0
  106. package/dist/engine/spec-templates/templates-data-security.js +172 -0
  107. package/dist/engine/spec-templates/templates-data-security.js.map +1 -0
  108. package/dist/engine/spec-templates/templates-perf-integration.d.ts +6 -0
  109. package/dist/engine/spec-templates/templates-perf-integration.d.ts.map +1 -0
  110. package/dist/engine/spec-templates/templates-perf-integration.js +199 -0
  111. package/dist/engine/spec-templates/templates-perf-integration.js.map +1 -0
  112. package/dist/engine/vector-store/hnsw.d.ts +37 -0
  113. package/dist/engine/vector-store/hnsw.d.ts.map +1 -0
  114. package/dist/engine/vector-store/hnsw.js +294 -0
  115. package/dist/engine/vector-store/hnsw.js.map +1 -0
  116. package/dist/engine/vector-store/similarity.d.ts +21 -0
  117. package/dist/engine/vector-store/similarity.d.ts.map +1 -0
  118. package/dist/engine/vector-store/similarity.js +86 -0
  119. package/dist/engine/vector-store/similarity.js.map +1 -0
  120. package/dist/engine/vector-store/tfidf.d.ts +35 -0
  121. package/dist/engine/vector-store/tfidf.d.ts.map +1 -0
  122. package/dist/engine/vector-store/tfidf.js +255 -0
  123. package/dist/engine/vector-store/tfidf.js.map +1 -0
  124. package/dist/index.js +6 -0
  125. package/dist/index.js.map +1 -1
  126. package/dist/storage/vector-store/backend-factory.d.ts +9 -0
  127. package/dist/storage/vector-store/backend-factory.d.ts.map +1 -0
  128. package/dist/storage/vector-store/backend-factory.js +33 -0
  129. package/dist/storage/vector-store/backend-factory.js.map +1 -0
  130. package/dist/storage/vector-store/json-fallback.d.ts +21 -0
  131. package/dist/storage/vector-store/json-fallback.d.ts.map +1 -0
  132. package/dist/storage/vector-store/json-fallback.js +85 -0
  133. package/dist/storage/vector-store/json-fallback.js.map +1 -0
  134. package/dist/storage/vector-store/migrator.d.ts +10 -0
  135. package/dist/storage/vector-store/migrator.d.ts.map +1 -0
  136. package/dist/storage/vector-store/migrator.js +139 -0
  137. package/dist/storage/vector-store/migrator.js.map +1 -0
  138. package/dist/storage/vector-store/sqlite-adapter.d.ts +28 -0
  139. package/dist/storage/vector-store/sqlite-adapter.d.ts.map +1 -0
  140. package/dist/storage/vector-store/sqlite-adapter.js +142 -0
  141. package/dist/storage/vector-store/sqlite-adapter.js.map +1 -0
  142. package/dist/tools/create-spec/constitution-validator.d.ts +4 -0
  143. package/dist/tools/create-spec/constitution-validator.d.ts.map +1 -0
  144. package/dist/tools/create-spec/constitution-validator.js +37 -0
  145. package/dist/tools/create-spec/constitution-validator.js.map +1 -0
  146. package/dist/tools/create-spec/post-creation.d.ts +11 -0
  147. package/dist/tools/create-spec/post-creation.d.ts.map +1 -0
  148. package/dist/tools/create-spec/post-creation.js +48 -0
  149. package/dist/tools/create-spec/post-creation.js.map +1 -0
  150. package/dist/tools/create-spec/spec-builder.d.ts +14 -0
  151. package/dist/tools/create-spec/spec-builder.d.ts.map +1 -0
  152. package/dist/tools/create-spec/spec-builder.js +131 -0
  153. package/dist/tools/create-spec/spec-builder.js.map +1 -0
  154. package/dist/tools/create-spec.d.ts.map +1 -1
  155. package/dist/tools/create-spec.js +42 -172
  156. package/dist/tools/create-spec.js.map +1 -1
  157. package/dist/tools/recommend-model-handler.d.ts +8 -0
  158. package/dist/tools/recommend-model-handler.d.ts.map +1 -0
  159. package/dist/tools/recommend-model-handler.js +65 -0
  160. package/dist/tools/recommend-model-handler.js.map +1 -0
  161. package/dist/tools/register-model-tools.d.ts +3 -0
  162. package/dist/tools/register-model-tools.d.ts.map +1 -0
  163. package/dist/tools/register-model-tools.js +50 -0
  164. package/dist/tools/register-model-tools.js.map +1 -0
  165. package/dist/tools/register-search-tools.d.ts +7 -0
  166. package/dist/tools/register-search-tools.d.ts.map +1 -0
  167. package/dist/tools/register-search-tools.js +34 -0
  168. package/dist/tools/register-search-tools.js.map +1 -0
  169. package/dist/tools/register-transform-tools.d.ts +3 -0
  170. package/dist/tools/register-transform-tools.d.ts.map +1 -0
  171. package/dist/tools/register-transform-tools.js +29 -0
  172. package/dist/tools/register-transform-tools.js.map +1 -0
  173. package/dist/tools/semantic-search-handler.d.ts +7 -0
  174. package/dist/tools/semantic-search-handler.d.ts.map +1 -0
  175. package/dist/tools/semantic-search-handler.js +72 -0
  176. package/dist/tools/semantic-search-handler.js.map +1 -0
  177. package/dist/tools/transform-code-handler.d.ts +7 -0
  178. package/dist/tools/transform-code-handler.d.ts.map +1 -0
  179. package/dist/tools/transform-code-handler.js +58 -0
  180. package/dist/tools/transform-code-handler.js.map +1 -0
  181. package/dist/types/advanced-framework.d.ts +47 -0
  182. package/dist/types/advanced-framework.d.ts.map +1 -0
  183. package/dist/types/advanced-framework.js +3 -0
  184. package/dist/types/advanced-framework.js.map +1 -0
  185. package/dist/types/code-transforms.d.ts +114 -0
  186. package/dist/types/code-transforms.d.ts.map +1 -0
  187. package/dist/types/code-transforms.js +11 -0
  188. package/dist/types/code-transforms.js.map +1 -0
  189. package/dist/types/css-framework.d.ts +110 -0
  190. package/dist/types/css-framework.d.ts.map +1 -0
  191. package/dist/types/css-framework.js +3 -0
  192. package/dist/types/css-framework.js.map +1 -0
  193. package/dist/types/dashboard.d.ts +77 -0
  194. package/dist/types/dashboard.d.ts.map +1 -0
  195. package/dist/types/dashboard.js +2 -0
  196. package/dist/types/dashboard.js.map +1 -0
  197. package/dist/types/index.d.ts +3 -0
  198. package/dist/types/index.d.ts.map +1 -1
  199. package/dist/types/index.js +3 -0
  200. package/dist/types/index.js.map +1 -1
  201. package/dist/types/model-routing.d.ts +127 -0
  202. package/dist/types/model-routing.d.ts.map +1 -0
  203. package/dist/types/model-routing.js +3 -0
  204. package/dist/types/model-routing.js.map +1 -0
  205. package/dist/types/spec/core.d.ts +28 -1
  206. package/dist/types/spec/core.d.ts.map +1 -1
  207. package/dist/types/spec/inputs.d.ts +1 -6
  208. package/dist/types/spec/inputs.d.ts.map +1 -1
  209. package/dist/types/ui.d.ts +3 -231
  210. package/dist/types/ui.d.ts.map +1 -1
  211. package/dist/types/ui.js +7 -1
  212. package/dist/types/ui.js.map +1 -1
  213. package/dist/types/vector-store.d.ts +137 -0
  214. package/dist/types/vector-store.d.ts.map +1 -0
  215. package/dist/types/vector-store.js +3 -0
  216. package/dist/types/vector-store.js.map +1 -0
  217. package/package.json +1 -1
  218. package/src/config/model-routing-rules.json +98 -0
@@ -0,0 +1,255 @@
1
+ // engine/vector-store/tfidf.ts — TF-IDF embedding engine.
2
+ // SPEC-075 AC-01: Tokenize, compute TF-IDF, generate dense vectors.
3
+ import { normalizeVector } from './similarity.js';
4
+ const DEFAULT_STOP_WORDS = new Set([
5
+ // English
6
+ 'the',
7
+ 'a',
8
+ 'an',
9
+ 'is',
10
+ 'are',
11
+ 'was',
12
+ 'were',
13
+ 'be',
14
+ 'been',
15
+ 'being',
16
+ 'have',
17
+ 'has',
18
+ 'had',
19
+ 'do',
20
+ 'does',
21
+ 'did',
22
+ 'will',
23
+ 'would',
24
+ 'could',
25
+ 'should',
26
+ 'may',
27
+ 'might',
28
+ 'shall',
29
+ 'can',
30
+ 'need',
31
+ 'dare',
32
+ 'ought',
33
+ 'to',
34
+ 'of',
35
+ 'in',
36
+ 'for',
37
+ 'on',
38
+ 'with',
39
+ 'at',
40
+ 'by',
41
+ 'from',
42
+ 'as',
43
+ 'into',
44
+ 'through',
45
+ 'during',
46
+ 'before',
47
+ 'after',
48
+ 'above',
49
+ 'below',
50
+ 'between',
51
+ 'out',
52
+ 'off',
53
+ 'over',
54
+ 'under',
55
+ 'again',
56
+ 'further',
57
+ 'then',
58
+ 'once',
59
+ 'here',
60
+ 'there',
61
+ 'when',
62
+ 'where',
63
+ 'why',
64
+ 'how',
65
+ 'all',
66
+ 'each',
67
+ 'every',
68
+ 'both',
69
+ 'few',
70
+ 'more',
71
+ 'most',
72
+ 'other',
73
+ 'some',
74
+ 'such',
75
+ 'no',
76
+ 'nor',
77
+ 'not',
78
+ 'only',
79
+ 'own',
80
+ 'same',
81
+ 'so',
82
+ 'than',
83
+ 'too',
84
+ 'very',
85
+ 'just',
86
+ 'because',
87
+ 'but',
88
+ 'and',
89
+ 'or',
90
+ 'if',
91
+ 'while',
92
+ 'this',
93
+ 'that',
94
+ 'these',
95
+ 'those',
96
+ 'it',
97
+ 'its',
98
+ 'i',
99
+ 'me',
100
+ 'my',
101
+ 'we',
102
+ 'our',
103
+ 'you',
104
+ 'your',
105
+ 'he',
106
+ 'him',
107
+ 'his',
108
+ 'she',
109
+ 'her',
110
+ 'they',
111
+ 'them',
112
+ 'their',
113
+ 'what',
114
+ 'which',
115
+ 'who',
116
+ 'whom',
117
+ 'about',
118
+ 'up',
119
+ // Spanish
120
+ 'el',
121
+ 'la',
122
+ 'los',
123
+ 'las',
124
+ 'un',
125
+ 'una',
126
+ 'unos',
127
+ 'unas',
128
+ 'es',
129
+ 'son',
130
+ 'de',
131
+ 'del',
132
+ 'en',
133
+ 'con',
134
+ 'por',
135
+ 'para',
136
+ 'se',
137
+ 'que',
138
+ 'como',
139
+ 'pero',
140
+ 'si',
141
+ 'su',
142
+ 'al',
143
+ 'lo',
144
+ 'le',
145
+ 'les',
146
+ 'nos',
147
+ 'ya',
148
+ 'hay',
149
+ 'o',
150
+ 'y',
151
+ ]);
152
+ /** Tokenize text: split on whitespace/punctuation, split camelCase, lowercase, remove stop words. */
153
+ export function tokenize(text, stopWords = DEFAULT_STOP_WORDS) {
154
+ // Split camelCase: "camelCase" -> "camel Case" -> "camel case"
155
+ const expanded = text.replace(/([a-z])([A-Z])/g, '$1 $2');
156
+ // Split on non-alphanumeric
157
+ const raw = expanded
158
+ .toLowerCase()
159
+ .split(/[^a-z0-9]+/)
160
+ .filter(Boolean);
161
+ return raw.filter((t) => t.length > 1 && !stopWords.has(t));
162
+ }
163
+ /** TF-IDF engine: stateful, maintains vocabulary (IDF) across documents. */
164
+ export class TFIDFEngine {
165
+ config;
166
+ docFreq = new Map();
167
+ docCount = 0;
168
+ vocabulary = [];
169
+ vocabDirty = true;
170
+ constructor(config) {
171
+ this.config = {
172
+ maxDimensions: config?.maxDimensions ?? 256,
173
+ minDocFrequency: config?.minDocFrequency ?? 1,
174
+ stopWords: config?.stopWords ?? DEFAULT_STOP_WORDS,
175
+ };
176
+ }
177
+ /** Add a document to the corpus (updates IDF). */
178
+ addDocument(text) {
179
+ const tokens = tokenize(text, this.config.stopWords);
180
+ const seen = new Set(tokens);
181
+ for (const term of seen) {
182
+ this.docFreq.set(term, (this.docFreq.get(term) ?? 0) + 1);
183
+ }
184
+ this.docCount++;
185
+ this.vocabDirty = true;
186
+ }
187
+ /** Rebuild vocabulary: top-K most discriminating terms by IDF. */
188
+ rebuildVocabulary() {
189
+ if (!this.vocabDirty) {
190
+ return;
191
+ }
192
+ const entries = [...this.docFreq.entries()]
193
+ .filter(([, df]) => df >= this.config.minDocFrequency)
194
+ .map(([term, df]) => ({
195
+ term,
196
+ idf: Math.log((this.docCount + 1) / (df + 1)) + 1,
197
+ }))
198
+ .sort((a, b) => b.idf - a.idf);
199
+ this.vocabulary = entries.slice(0, this.config.maxDimensions).map((e) => e.term);
200
+ this.vocabDirty = false;
201
+ }
202
+ /** Generate a normalized TF-IDF embedding for the given text. */
203
+ embed(text) {
204
+ this.rebuildVocabulary();
205
+ const tokens = tokenize(text, this.config.stopWords);
206
+ if (tokens.length === 0) {
207
+ return new Array(this.vocabulary.length).fill(0);
208
+ }
209
+ // Compute TF
210
+ const tf = new Map();
211
+ for (const t of tokens) {
212
+ tf.set(t, (tf.get(t) ?? 0) + 1);
213
+ }
214
+ // Build vector
215
+ const vector = this.vocabulary.map((term) => {
216
+ /* v8 ignore start -- ?? fallbacks: term always in tf/docFreq from vocabulary */
217
+ const termFreq = (tf.get(term) ?? 0) / tokens.length;
218
+ const df = this.docFreq.get(term) ?? 0;
219
+ /* v8 ignore stop */
220
+ const idf = Math.log((this.docCount + 1) / (df + 1)) + 1;
221
+ return termFreq * idf;
222
+ });
223
+ return normalizeVector(vector);
224
+ }
225
+ /** Batch embed multiple texts. */
226
+ batchEmbed(texts) {
227
+ return texts.map((t) => this.embed(t));
228
+ }
229
+ /** Get current vocabulary size. */
230
+ getVocabularySize() {
231
+ this.rebuildVocabulary();
232
+ return this.vocabulary.length;
233
+ }
234
+ /** Get document count in corpus. */
235
+ getDocumentCount() {
236
+ return this.docCount;
237
+ }
238
+ /** Export state for serialization. */
239
+ exportState() {
240
+ return {
241
+ docFreq: [...this.docFreq.entries()],
242
+ docCount: this.docCount,
243
+ };
244
+ }
245
+ /** Import state from serialized form. */
246
+ importState(state) {
247
+ this.docFreq.clear();
248
+ for (const [term, freq] of state.docFreq) {
249
+ this.docFreq.set(term, freq);
250
+ }
251
+ this.docCount = state.docCount;
252
+ this.vocabDirty = true;
253
+ }
254
+ }
255
+ //# sourceMappingURL=tfidf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tfidf.js","sourceRoot":"","sources":["../../../src/engine/vector-store/tfidf.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -32,6 +32,9 @@ import { registerHooksTools } from './tools/register-hooks-tools.js';
32
32
  import { registerTemplateTools } from './tools/register-template-tools.js';
33
33
  import { registerRegistryTools } from './tools/register-registry-tools.js';
34
34
  import { registerToolGroupTools } from './tools/register-tool-groups.js';
35
+ import { registerModelTools } from './tools/register-model-tools.js';
36
+ import { registerSearchTools } from './tools/register-search-tools.js';
37
+ import { registerTransformTools } from './tools/register-transform-tools.js';
35
38
  import { PLANU_VERSION } from './config/version.js';
36
39
  import { handleActivateLicense } from './tools/activate-license.js';
37
40
  import { GroupManager } from './engine/tool-groups/group-manager.js';
@@ -128,6 +131,9 @@ registerHooksTools(server);
128
131
  registerTemplateTools(server);
129
132
  registerRegistryTools(server);
130
133
  registerToolGroupTools(server);
134
+ registerModelTools(server);
135
+ registerSearchTools(server);
136
+ registerTransformTools(server);
131
137
  // ---------------------------------------------------------------------------
132
138
  // Start server
133
139
  // ---------------------------------------------------------------------------
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { StorageBackend } from '../../types/index.js';
2
+ /**
3
+ * Get or create a storage backend for the given project.
4
+ * Tries SQLite first, falls back to JSON.
5
+ */
6
+ export declare function getOrCreateBackend(projectId: string): Promise<StorageBackend>;
7
+ /** Clear all cached backends (for testing). */
8
+ export declare function clearBackendCache(): void;
9
+ //# sourceMappingURL=backend-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-factory.d.ts","sourceRoot":"","sources":["../../../src/storage/vector-store/backend-factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAiBnF;AAED,+CAA+C;AAC/C,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC"}
@@ -0,0 +1,33 @@
1
+ // storage/vector-store/backend-factory.ts — Factory for selecting storage backend.
2
+ // SPEC-075 AC-06: Returns SQLite if available, JSON fallback otherwise.
3
+ import { createSqliteBackend } from './sqlite-adapter.js';
4
+ import { JsonFallbackBackend } from './json-fallback.js';
5
+ const backends = new Map();
6
+ /**
7
+ * Get or create a storage backend for the given project.
8
+ * Tries SQLite first, falls back to JSON.
9
+ */
10
+ export async function getOrCreateBackend(projectId) {
11
+ const existing = backends.get(projectId);
12
+ if (existing) {
13
+ return existing;
14
+ }
15
+ // Try SQLite first
16
+ const sqlite = await createSqliteBackend(projectId);
17
+ if (sqlite) {
18
+ backends.set(projectId, sqlite);
19
+ return sqlite;
20
+ }
21
+ // Fall back to JSON
22
+ const json = new JsonFallbackBackend(projectId);
23
+ backends.set(projectId, json);
24
+ return json;
25
+ }
26
+ /** Clear all cached backends (for testing). */
27
+ export function clearBackendCache() {
28
+ for (const backend of backends.values()) {
29
+ backend.close?.();
30
+ }
31
+ backends.clear();
32
+ }
33
+ //# sourceMappingURL=backend-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-factory.js","sourceRoot":"","sources":["../../../src/storage/vector-store/backend-factory.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,wEAAwE;AAGxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEnD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,mBAAmB;IACnB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,MAAM,EAAE,CAAC;QACX,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oBAAoB;IACpB,MAAM,IAAI,GAAG,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAChD,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,iBAAiB;IAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IACpB,CAAC;IACD,QAAQ,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { StorageBackend, VectorEntry, VectorEntryType, VectorSearchResult } from '../../types/index.js';
2
+ /**
3
+ * JSON fallback storage backend.
4
+ * Used when better-sqlite3 is not available.
5
+ */
6
+ export declare class JsonFallbackBackend implements StorageBackend {
7
+ private readonly filePath;
8
+ private cache;
9
+ constructor(projectId: string);
10
+ private load;
11
+ private save;
12
+ insert(entry: VectorEntry): Promise<void>;
13
+ update(id: string, partial: Partial<VectorEntry>): Promise<void>;
14
+ delete(id: string): Promise<void>;
15
+ getById(id: string): Promise<VectorEntry | undefined>;
16
+ getAll(type?: VectorEntryType): Promise<VectorEntry[]>;
17
+ searchSimilar(embedding: number[], topK: number, threshold: number, type?: VectorEntryType): Promise<VectorSearchResult[]>;
18
+ }
19
+ /** Reset the warning flag (for testing). */
20
+ export declare function resetJsonFallbackWarning(): void;
21
+ //# sourceMappingURL=json-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-fallback.d.ts","sourceRoot":"","sources":["../../../src/storage/vector-store/json-fallback.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,kBAAkB,EAEnB,MAAM,sBAAsB,CAAC;AAM9B;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,KAAK,CAAgC;gBAEjC,SAAS,EAAE,MAAM;YAWf,IAAI;YAQJ,IAAI;IAKZ,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAehE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAKrD,MAAM,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAQtD,aAAa,CACjB,SAAS,EAAE,MAAM,EAAE,EACnB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,eAAe,GACrB,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAejC;AAED,4CAA4C;AAC5C,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -0,0 +1,85 @@
1
+ // storage/vector-store/json-fallback.ts — JSON-based fallback storage backend.
2
+ // SPEC-075 AC-04: Same interface as SQLite adapter, uses JSON files.
3
+ import { readJson, writeJson, projectDataDir } from '../base-store.js';
4
+ import { cosineSimilarity } from '../../engine/vector-store/similarity.js';
5
+ let warnedOnce = false;
6
+ /**
7
+ * JSON fallback storage backend.
8
+ * Used when better-sqlite3 is not available.
9
+ */
10
+ export class JsonFallbackBackend {
11
+ filePath;
12
+ cache = null;
13
+ constructor(projectId) {
14
+ this.filePath = `${projectDataDir(projectId)}/vector-store.json`;
15
+ if (!warnedOnce) {
16
+ console.warn('[Planu] SQLite not available, using JSON fallback. ' +
17
+ 'Install better-sqlite3 for better performance.');
18
+ warnedOnce = true;
19
+ }
20
+ }
21
+ async load() {
22
+ if (this.cache) {
23
+ return this.cache;
24
+ }
25
+ this.cache = await readJson(this.filePath, { entries: [] });
26
+ return this.cache;
27
+ }
28
+ async save(data) {
29
+ this.cache = data;
30
+ await writeJson(this.filePath, data);
31
+ }
32
+ async insert(entry) {
33
+ const data = await this.load();
34
+ data.entries.push(entry);
35
+ await this.save(data);
36
+ }
37
+ async update(id, partial) {
38
+ const data = await this.load();
39
+ const idx = data.entries.findIndex((e) => e.id === id);
40
+ if (idx === -1) {
41
+ return;
42
+ }
43
+ const existing = data.entries[idx];
44
+ /* v8 ignore start -- defensive: idx found via findIndex so entry always exists */
45
+ if (existing) {
46
+ /* v8 ignore stop */
47
+ data.entries[idx] = { ...existing, ...partial, id: existing.id };
48
+ }
49
+ await this.save(data);
50
+ }
51
+ async delete(id) {
52
+ const data = await this.load();
53
+ data.entries = data.entries.filter((e) => e.id !== id);
54
+ await this.save(data);
55
+ }
56
+ async getById(id) {
57
+ const data = await this.load();
58
+ return data.entries.find((e) => e.id === id);
59
+ }
60
+ async getAll(type) {
61
+ const data = await this.load();
62
+ if (!type) {
63
+ return [...data.entries];
64
+ }
65
+ return data.entries.filter((e) => e.type === type);
66
+ }
67
+ async searchSimilar(embedding, topK, threshold, type) {
68
+ const data = await this.load();
69
+ const filtered = type ? data.entries.filter((e) => e.type === type) : data.entries;
70
+ const results = [];
71
+ for (const entry of filtered) {
72
+ const similarity = cosineSimilarity(embedding, entry.embedding);
73
+ if (similarity >= threshold) {
74
+ results.push({ entry, similarity });
75
+ }
76
+ }
77
+ results.sort((a, b) => b.similarity - a.similarity);
78
+ return results.slice(0, topK);
79
+ }
80
+ }
81
+ /** Reset the warning flag (for testing). */
82
+ export function resetJsonFallbackWarning() {
83
+ warnedOnce = false;
84
+ }
85
+ //# sourceMappingURL=json-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-fallback.js","sourceRoot":"","sources":["../../../src/storage/vector-store/json-fallback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { MigrationResult, StorageBackend } from '../../types/index.js';
2
+ /** Check if migration has already been done. */
3
+ export declare function isMigrated(projectId: string): boolean;
4
+ /**
5
+ * Migrate legacy JSON data to the vector store backend.
6
+ * Idempotent: skips if migration marker exists.
7
+ * Does NOT delete original JSON files.
8
+ */
9
+ export declare function migrateJsonToBackend(projectId: string, backend: StorageBackend): Promise<MigrationResult>;
10
+ //# sourceMappingURL=migrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../../src/storage/vector-store/migrator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EAMf,MAAM,sBAAsB,CAAC;AAU9B,gDAAgD;AAChD,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAErD;AAgFD;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAoD1B"}
@@ -0,0 +1,139 @@
1
+ // storage/vector-store/migrator.ts — JSON to SQLite migration.
2
+ // SPEC-075 AC-05: Idempotent, preserves JSON backup.
3
+ import { readJson, projectDataDir } from '../base-store.js';
4
+ import { existsSync } from 'node:fs';
5
+ import { TFIDFEngine } from '../../engine/vector-store/tfidf.js';
6
+ /** Check if a migration marker exists (idempotency). */
7
+ function migrationMarkerPath(projectId) {
8
+ return `${projectDataDir(projectId)}/.vector-migrated`;
9
+ }
10
+ /** Check if migration has already been done. */
11
+ export function isMigrated(projectId) {
12
+ return existsSync(migrationMarkerPath(projectId));
13
+ }
14
+ /** Create migration marker. */
15
+ async function markMigrated(projectId) {
16
+ const { writeFile, mkdir } = await import('node:fs/promises');
17
+ const { dirname } = await import('node:path');
18
+ const markerPath = migrationMarkerPath(projectId);
19
+ await mkdir(dirname(markerPath), { recursive: true });
20
+ await writeFile(markerPath, new Date().toISOString(), 'utf-8');
21
+ }
22
+ /** Load legacy patterns from JSON. */
23
+ async function loadPatterns(dataDir) {
24
+ const items = [];
25
+ const patternsPath = `${dataDir}/patterns.json`;
26
+ if (!existsSync(patternsPath)) {
27
+ return items;
28
+ }
29
+ const patterns = await readJson(patternsPath, []);
30
+ for (let i = 0; i < patterns.length; i++) {
31
+ const p = patterns[i];
32
+ if (p?.pattern) {
33
+ items.push({
34
+ type: 'pattern',
35
+ id: `pattern-${String(i)}`,
36
+ text: p.pattern,
37
+ meta: { category: p.category, usageCount: p.usageCount },
38
+ });
39
+ }
40
+ }
41
+ return items;
42
+ }
43
+ /** Load legacy knowledge from JSON. */
44
+ async function loadKnowledge(dataDir) {
45
+ const items = [];
46
+ const knowledgePath = `${dataDir}/knowledge.json`;
47
+ if (!existsSync(knowledgePath)) {
48
+ return items;
49
+ }
50
+ const knowledge = await readJson(knowledgePath, []);
51
+ for (let i = 0; i < knowledge.length; i++) {
52
+ const k = knowledge[i];
53
+ if (k) {
54
+ items.push({
55
+ type: 'knowledge',
56
+ id: `knowledge-${String(i)}`,
57
+ text: `${k.key}: ${k.value}`,
58
+ meta: { source: k.source },
59
+ });
60
+ }
61
+ }
62
+ return items;
63
+ }
64
+ /** Load legacy decisions from JSON. */
65
+ async function loadDecisions(dataDir) {
66
+ const items = [];
67
+ const decisionsPath = `${dataDir}/decisions.json`;
68
+ if (!existsSync(decisionsPath)) {
69
+ return items;
70
+ }
71
+ const decisions = await readJson(decisionsPath, []);
72
+ for (let i = 0; i < decisions.length; i++) {
73
+ const d = decisions[i];
74
+ if (d) {
75
+ items.push({
76
+ type: 'decision',
77
+ id: `decision-${String(i)}`,
78
+ text: `${d.decision} ${d.rationale ?? ''}`.trim(),
79
+ meta: { specId: d.specId },
80
+ });
81
+ }
82
+ }
83
+ return items;
84
+ }
85
+ /**
86
+ * Migrate legacy JSON data to the vector store backend.
87
+ * Idempotent: skips if migration marker exists.
88
+ * Does NOT delete original JSON files.
89
+ */
90
+ export async function migrateJsonToBackend(projectId, backend) {
91
+ if (isMigrated(projectId)) {
92
+ return { documentsProcessed: 0, durationMs: 0, errors: [] };
93
+ }
94
+ const start = Date.now();
95
+ const errors = [];
96
+ let processed = 0;
97
+ const dataDir = projectDataDir(projectId);
98
+ // Collect all texts, catching errors per source
99
+ const allTexts = [];
100
+ for (const loader of [loadPatterns, loadKnowledge, loadDecisions]) {
101
+ try {
102
+ const items = await loader(dataDir);
103
+ allTexts.push(...items);
104
+ }
105
+ catch (err) {
106
+ errors.push(err instanceof Error ? err.message : String(err));
107
+ }
108
+ }
109
+ // Build IDF from all texts
110
+ const tfidf = new TFIDFEngine();
111
+ for (const item of allTexts) {
112
+ tfidf.addDocument(item.text);
113
+ }
114
+ // Insert all entries with embeddings
115
+ const now = new Date().toISOString();
116
+ for (const item of allTexts) {
117
+ try {
118
+ const embedding = tfidf.embed(item.text);
119
+ const entry = {
120
+ id: item.id,
121
+ type: item.type,
122
+ content: item.text,
123
+ embedding,
124
+ metadata: item.meta,
125
+ createdAt: now,
126
+ updatedAt: now,
127
+ };
128
+ await backend.insert(entry);
129
+ processed++;
130
+ }
131
+ catch (err) {
132
+ errors.push(`${item.id}: ${err instanceof Error ? err.message : String(err)}`);
133
+ }
134
+ }
135
+ await markMigrated(projectId);
136
+ const durationMs = Date.now() - start;
137
+ return { documentsProcessed: processed, durationMs, errors };
138
+ }
139
+ //# sourceMappingURL=migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../../src/storage/vector-store/migrator.ts"],"names":[],"mappings":"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"}