@milo4jo/contextkit 0.3.0 → 0.5.1

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 (59) hide show
  1. package/README.md +43 -11
  2. package/dist/commands/cache.d.ts +3 -0
  3. package/dist/commands/cache.d.ts.map +1 -0
  4. package/dist/commands/cache.js +50 -0
  5. package/dist/commands/cache.js.map +1 -0
  6. package/dist/commands/select.d.ts.map +1 -1
  7. package/dist/commands/select.js +17 -9
  8. package/dist/commands/select.js.map +1 -1
  9. package/dist/config/index.d.ts +11 -0
  10. package/dist/config/index.d.ts.map +1 -1
  11. package/dist/config/index.js +11 -0
  12. package/dist/config/index.js.map +1 -1
  13. package/dist/config/validation.d.ts +33 -0
  14. package/dist/config/validation.d.ts.map +1 -0
  15. package/dist/config/validation.js +241 -0
  16. package/dist/config/validation.js.map +1 -0
  17. package/dist/db/index.d.ts +47 -0
  18. package/dist/db/index.d.ts.map +1 -1
  19. package/dist/db/index.js +98 -0
  20. package/dist/db/index.js.map +1 -1
  21. package/dist/index.js +3 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/indexer/chunker.d.ts +15 -2
  24. package/dist/indexer/chunker.d.ts.map +1 -1
  25. package/dist/indexer/chunker.js +222 -3
  26. package/dist/indexer/chunker.js.map +1 -1
  27. package/dist/parsers/index.d.ts +45 -0
  28. package/dist/parsers/index.d.ts.map +1 -0
  29. package/dist/parsers/index.js +71 -0
  30. package/dist/parsers/index.js.map +1 -0
  31. package/dist/parsers/typescript.d.ts +43 -0
  32. package/dist/parsers/typescript.d.ts.map +1 -0
  33. package/dist/parsers/typescript.js +306 -0
  34. package/dist/parsers/typescript.js.map +1 -0
  35. package/dist/retrieval/imports.d.ts +76 -0
  36. package/dist/retrieval/imports.d.ts.map +1 -0
  37. package/dist/retrieval/imports.js +258 -0
  38. package/dist/retrieval/imports.js.map +1 -0
  39. package/dist/selector/formatter.d.ts +15 -0
  40. package/dist/selector/formatter.d.ts.map +1 -1
  41. package/dist/selector/formatter.js +132 -0
  42. package/dist/selector/formatter.js.map +1 -1
  43. package/dist/selector/index.d.ts +15 -4
  44. package/dist/selector/index.d.ts.map +1 -1
  45. package/dist/selector/index.js +100 -12
  46. package/dist/selector/index.js.map +1 -1
  47. package/dist/selector/scoring.d.ts +20 -0
  48. package/dist/selector/scoring.d.ts.map +1 -1
  49. package/dist/selector/scoring.js +103 -10
  50. package/dist/selector/scoring.js.map +1 -1
  51. package/package.json +1 -1
  52. package/dist/commands/source.d.ts +0 -3
  53. package/dist/commands/source.d.ts.map +0 -1
  54. package/dist/commands/source.js +0 -153
  55. package/dist/commands/source.js.map +0 -1
  56. package/dist/utils/output.d.ts +0 -42
  57. package/dist/utils/output.d.ts.map +0 -1
  58. package/dist/utils/output.js +0 -62
  59. package/dist/utils/output.js.map +0 -1
@@ -0,0 +1,258 @@
1
+ /**
2
+ * Import Parser Module
3
+ *
4
+ * Parses TypeScript/JavaScript import statements to find related files.
5
+ * Uses regex patterns instead of AST parsing for simplicity and speed.
6
+ */
7
+ import { resolve, dirname, extname } from 'path';
8
+ import { existsSync } from 'fs';
9
+ /**
10
+ * Supported import patterns:
11
+ * - import { foo, bar } from './module'
12
+ * - import * as name from './module'
13
+ * - import name from './module'
14
+ * - import './module'
15
+ * - import type { Foo } from './module'
16
+ * - export { foo } from './module'
17
+ * - export * from './module'
18
+ * - const x = require('./module')
19
+ * - const x = await import('./module')
20
+ */
21
+ /**
22
+ * Parse imports from source code
23
+ */
24
+ export function parseImports(content) {
25
+ const imports = [];
26
+ const lines = content.split('\n');
27
+ for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {
28
+ const line = lines[lineIdx];
29
+ const lineNum = lineIdx + 1;
30
+ // Skip comments
31
+ const trimmed = line.trim();
32
+ if (trimmed.startsWith('//') || trimmed.startsWith('*'))
33
+ continue;
34
+ // Try each import pattern
35
+ parseLineImports(line, lineNum, imports);
36
+ }
37
+ return imports;
38
+ }
39
+ /**
40
+ * Parse imports from a single line
41
+ */
42
+ function parseLineImports(line, lineNum, imports) {
43
+ // ES6 imports with named imports
44
+ const namedImportMatch = line.match(/^import\s+(type\s+)?{([^}]+)}\s+from\s+['"]([^'"]+)['"]/);
45
+ if (namedImportMatch) {
46
+ const isTypeOnly = !!namedImportMatch[1];
47
+ const namedImports = namedImportMatch[2]
48
+ .split(',')
49
+ .map((n) => n.trim().split(/\s+as\s+/)[0].trim())
50
+ .filter(Boolean);
51
+ const specifier = namedImportMatch[3];
52
+ imports.push({
53
+ specifier,
54
+ type: classifyImportType(specifier),
55
+ line: lineNum,
56
+ namedImports,
57
+ isTypeOnly,
58
+ });
59
+ return;
60
+ }
61
+ // ES6 import with default + named: import Default, { named } from 'specifier'
62
+ const mixedImportMatch = line.match(/^import\s+(\w+)\s*,\s*{([^}]+)}\s+from\s+['"]([^'"]+)['"]/);
63
+ if (mixedImportMatch) {
64
+ const defaultImport = mixedImportMatch[1];
65
+ const namedImports = mixedImportMatch[2]
66
+ .split(',')
67
+ .map((n) => n.trim().split(/\s+as\s+/)[0].trim())
68
+ .filter(Boolean);
69
+ const specifier = mixedImportMatch[3];
70
+ imports.push({
71
+ specifier,
72
+ type: classifyImportType(specifier),
73
+ line: lineNum,
74
+ defaultImport,
75
+ namedImports,
76
+ isTypeOnly: false,
77
+ });
78
+ return;
79
+ }
80
+ // ES6 namespace import: import * as name from 'specifier'
81
+ const namespaceMatch = line.match(/^import\s+\*\s+as\s+(\w+)\s+from\s+['"]([^'"]+)['"]/);
82
+ if (namespaceMatch) {
83
+ imports.push({
84
+ specifier: namespaceMatch[2],
85
+ type: classifyImportType(namespaceMatch[2]),
86
+ line: lineNum,
87
+ defaultImport: namespaceMatch[1],
88
+ isTypeOnly: false,
89
+ });
90
+ return;
91
+ }
92
+ // ES6 default import: import name from 'specifier'
93
+ const defaultImportMatch = line.match(/^import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/);
94
+ if (defaultImportMatch) {
95
+ imports.push({
96
+ specifier: defaultImportMatch[2],
97
+ type: classifyImportType(defaultImportMatch[2]),
98
+ line: lineNum,
99
+ defaultImport: defaultImportMatch[1],
100
+ isTypeOnly: false,
101
+ });
102
+ return;
103
+ }
104
+ // Side-effect only import: import 'specifier'
105
+ const sideEffectMatch = line.match(/^import\s+['"]([^'"]+)['"]/);
106
+ if (sideEffectMatch) {
107
+ imports.push({
108
+ specifier: sideEffectMatch[1],
109
+ type: classifyImportType(sideEffectMatch[1]),
110
+ line: lineNum,
111
+ isTypeOnly: false,
112
+ });
113
+ return;
114
+ }
115
+ // Export from: export { foo } from 'specifier' or export * from 'specifier'
116
+ const exportFromMatch = line.match(/^export\s+(?:type\s+)?(?:{[^}]*}|\*(?:\s+as\s+\w+)?)\s+from\s+['"]([^'"]+)['"]/);
117
+ if (exportFromMatch) {
118
+ const isTypeOnly = line.includes('export type');
119
+ imports.push({
120
+ specifier: exportFromMatch[1],
121
+ type: classifyImportType(exportFromMatch[1]),
122
+ line: lineNum,
123
+ isTypeOnly,
124
+ });
125
+ return;
126
+ }
127
+ // CommonJS require
128
+ const requireMatch = line.match(/require\s*\(\s*['"]([^'"]+)['"]\s*\)/);
129
+ if (requireMatch) {
130
+ imports.push({
131
+ specifier: requireMatch[1],
132
+ type: classifyImportType(requireMatch[1]),
133
+ line: lineNum,
134
+ isTypeOnly: false,
135
+ });
136
+ return;
137
+ }
138
+ // Dynamic import
139
+ const dynamicMatch = line.match(/import\s*\(\s*['"]([^'"]+)['"]\s*\)/);
140
+ if (dynamicMatch) {
141
+ imports.push({
142
+ specifier: dynamicMatch[1],
143
+ type: classifyImportType(dynamicMatch[1]),
144
+ line: lineNum,
145
+ isTypeOnly: false,
146
+ });
147
+ }
148
+ }
149
+ /**
150
+ * Classify import type based on specifier
151
+ */
152
+ export function classifyImportType(specifier) {
153
+ if (specifier.startsWith('.')) {
154
+ return 'relative';
155
+ }
156
+ if (specifier.startsWith('/') || /^[a-zA-Z]:/.test(specifier)) {
157
+ return 'absolute';
158
+ }
159
+ return 'package';
160
+ }
161
+ /**
162
+ * Resolve a relative import specifier to an actual file path
163
+ */
164
+ export function resolveImport(specifier, fromFile, basePath) {
165
+ // Only handle relative imports
166
+ if (!specifier.startsWith('.')) {
167
+ return null;
168
+ }
169
+ const fromDir = dirname(fromFile);
170
+ const resolvedBase = resolve(basePath, fromDir, specifier);
171
+ // Try different extensions and index files
172
+ const candidates = [
173
+ resolvedBase,
174
+ `${resolvedBase}.ts`,
175
+ `${resolvedBase}.tsx`,
176
+ `${resolvedBase}.js`,
177
+ `${resolvedBase}.jsx`,
178
+ `${resolvedBase}.mjs`,
179
+ `${resolvedBase}/index.ts`,
180
+ `${resolvedBase}/index.tsx`,
181
+ `${resolvedBase}/index.js`,
182
+ `${resolvedBase}/index.jsx`,
183
+ ];
184
+ for (const candidate of candidates) {
185
+ if (existsSync(candidate)) {
186
+ // Return path relative to basePath
187
+ return candidate.replace(basePath + '/', '');
188
+ }
189
+ }
190
+ return null;
191
+ }
192
+ /**
193
+ * Parse imports and resolve related files
194
+ */
195
+ export function parseImportsWithResolution(content, filePath, basePath) {
196
+ const imports = parseImports(content);
197
+ const relatedFiles = [];
198
+ for (const imp of imports) {
199
+ if (imp.type === 'relative') {
200
+ const resolved = resolveImport(imp.specifier, filePath, basePath);
201
+ if (resolved && !relatedFiles.includes(resolved)) {
202
+ relatedFiles.push(resolved);
203
+ }
204
+ }
205
+ }
206
+ return { imports, relatedFiles };
207
+ }
208
+ /**
209
+ * Extract all import specifiers from content (quick extraction without full parsing)
210
+ */
211
+ export function extractImportSpecifiers(content) {
212
+ const specifiers = [];
213
+ // Combined pattern for common import forms
214
+ const importPattern = /(?:import|require|from)\s*\(?['"]([^'"]+)['"]\)?/g;
215
+ let match;
216
+ while ((match = importPattern.exec(content)) !== null) {
217
+ const spec = match[1];
218
+ if (!specifiers.includes(spec)) {
219
+ specifiers.push(spec);
220
+ }
221
+ }
222
+ return specifiers;
223
+ }
224
+ /**
225
+ * Check if a file is TypeScript/JavaScript
226
+ */
227
+ export function isJsTsFile(filePath) {
228
+ const ext = extname(filePath).toLowerCase();
229
+ return ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'].includes(ext);
230
+ }
231
+ /**
232
+ * Build a simple dependency graph for files
233
+ */
234
+ export function buildDependencyGraph(files, basePath) {
235
+ const graph = new Map();
236
+ for (const file of files) {
237
+ if (!isJsTsFile(file.path)) {
238
+ graph.set(file.path, []);
239
+ continue;
240
+ }
241
+ const { relatedFiles } = parseImportsWithResolution(file.content, file.path, basePath);
242
+ graph.set(file.path, relatedFiles);
243
+ }
244
+ return graph;
245
+ }
246
+ /**
247
+ * Find files that import a given file (reverse dependencies)
248
+ */
249
+ export function findImporters(targetFile, dependencyGraph) {
250
+ const importers = [];
251
+ for (const [file, deps] of dependencyGraph) {
252
+ if (deps.includes(targetFile)) {
253
+ importers.push(file);
254
+ }
255
+ }
256
+ return importers;
257
+ }
258
+ //# sourceMappingURL=imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/retrieval/imports.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AA0BhC;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;QAE5B,gBAAgB;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAElE,0BAA0B;QAC1B,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAY,EAAE,OAAe,EAAE,OAAuB;IAC9E,iCAAiC;IACjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CACjC,yDAAyD,CAC1D,CAAC;IACF,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,CAAC;aACrC,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAChD,MAAM,CAAC,OAAO,CAAC,CAAC;QACnB,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAEtC,OAAO,CAAC,IAAI,CAAC;YACX,SAAS;YACT,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC;YACnC,IAAI,EAAE,OAAO;YACb,YAAY;YACZ,UAAU;SACX,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,8EAA8E;IAC9E,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CACjC,2DAA2D,CAC5D,CAAC;IACF,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,CAAC;aACrC,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAChD,MAAM,CAAC,OAAO,CAAC,CAAC;QACnB,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAEtC,OAAO,CAAC,IAAI,CAAC;YACX,SAAS;YACT,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC;YACnC,IAAI,EAAE,OAAO;YACb,aAAa;YACb,YAAY;YACZ,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,0DAA0D;IAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzF,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YAC5B,IAAI,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,EAAE,OAAO;YACb,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;YAChC,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,mDAAmD;IACnD,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACnF,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;YAChC,IAAI,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,EAAE,OAAO;YACb,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;YACpC,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,8CAA8C;IAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACjE,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;YAC7B,IAAI,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,4EAA4E;IAC5E,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAC;IACrH,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;YAC7B,IAAI,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,EAAE,OAAO;YACb,UAAU;SACX,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,mBAAmB;IACnB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACxE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;YAC1B,IAAI,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,iBAAiB;IACjB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACvE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;YAC1B,IAAI,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9D,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAiB,EACjB,QAAgB,EAChB,QAAgB;IAEhB,+BAA+B;IAC/B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAE3D,2CAA2C;IAC3C,MAAM,UAAU,GAAG;QACjB,YAAY;QACZ,GAAG,YAAY,KAAK;QACpB,GAAG,YAAY,MAAM;QACrB,GAAG,YAAY,KAAK;QACpB,GAAG,YAAY,MAAM;QACrB,GAAG,YAAY,MAAM;QACrB,GAAG,YAAY,WAAW;QAC1B,GAAG,YAAY,YAAY;QAC3B,GAAG,YAAY,WAAW;QAC1B,GAAG,YAAY,YAAY;KAC5B,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,mCAAmC;YACnC,OAAO,SAAS,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAe,EACf,QAAgB,EAChB,QAAgB;IAEhB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAClE,IAAI,QAAQ,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjD,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,2CAA2C;IAC3C,MAAM,aAAa,GAAG,mDAAmD,CAAC;IAE1E,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAA+C,EAC/C,QAAgB;IAEhB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QAED,MAAM,EAAE,YAAY,EAAE,GAAG,0BAA0B,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,UAAkB,EAClB,eAAsC;IAEtC,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -2,8 +2,11 @@
2
2
  * Output Formatter Module
3
3
  *
4
4
  * Formats selected chunks for display.
5
+ * Supports multiple output formats: markdown, xml, json, plain
5
6
  */
6
7
  import type { BudgetResult } from './budget.js';
8
+ /** Supported output formats */
9
+ export type OutputFormat = 'markdown' | 'xml' | 'json' | 'plain';
7
10
  /** Formatted output */
8
11
  export interface FormattedOutput {
9
12
  /** Human-readable text output */
@@ -41,4 +44,16 @@ export declare function formatOutput(query: string, result: BudgetResult, totalC
41
44
  * Format output with --explain details
42
45
  */
43
46
  export declare function formatWithExplanation(query: string, result: BudgetResult, totalConsidered: number, timeMs: number): FormattedOutput;
47
+ /**
48
+ * Format output as XML (Claude prefers XML for structured content)
49
+ */
50
+ export declare function formatAsXml(query: string, result: BudgetResult, totalConsidered: number, timeMs: number): FormattedOutput;
51
+ /**
52
+ * Format output as plain text (optimized for clipboard/pasting)
53
+ */
54
+ export declare function formatAsPlain(query: string, result: BudgetResult, totalConsidered: number, timeMs: number): FormattedOutput;
55
+ /**
56
+ * Format output in specified format
57
+ */
58
+ export declare function formatInFormat(format: OutputFormat, query: string, result: BudgetResult, totalConsidered: number, timeMs: number, explain?: boolean): FormattedOutput;
44
59
  //# sourceMappingURL=formatter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/selector/formatter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,uBAAuB;AACvB,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,iCAAiC;AACjC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAqDjB;AA8CD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAqBjB"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/selector/formatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,+BAA+B;AAC/B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjE,uBAAuB;AACvB,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,iCAAiC;AACjC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAqDjB;AA8CD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAqBjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CA2DjB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,eAAe,CAgDjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAe,GACvB,eAAe,CAoBjB"}
@@ -2,6 +2,7 @@
2
2
  * Output Formatter Module
3
3
  *
4
4
  * Formats selected chunks for display.
5
+ * Supports multiple output formats: markdown, xml, json, plain
5
6
  */
6
7
  /**
7
8
  * Format selection results for output
@@ -113,4 +114,135 @@ export function formatWithExplanation(query, result, totalConsidered, timeMs) {
113
114
  data: base.data,
114
115
  };
115
116
  }
117
+ /**
118
+ * Format output as XML (Claude prefers XML for structured content)
119
+ */
120
+ export function formatAsXml(query, result, totalConsidered, timeMs) {
121
+ const { chunks, totalTokens } = result;
122
+ // Group chunks by file
123
+ const fileGroups = new Map();
124
+ for (const chunk of chunks) {
125
+ const existing = fileGroups.get(chunk.filePath) || [];
126
+ existing.push(chunk);
127
+ fileGroups.set(chunk.filePath, existing);
128
+ }
129
+ // Build XML output
130
+ const xmlParts = ['<context>'];
131
+ xmlParts.push(` <query>${escapeXml(query)}</query>`);
132
+ xmlParts.push(' <files>');
133
+ for (const [filePath, fileChunks] of fileGroups) {
134
+ // Sort chunks by line number within file
135
+ fileChunks.sort((a, b) => a.startLine - b.startLine);
136
+ xmlParts.push(` <file path="${escapeXml(filePath)}">`);
137
+ for (const chunk of fileChunks) {
138
+ xmlParts.push(` <chunk lines="${chunk.startLine}-${chunk.endLine}" tokens="${chunk.tokens}">`);
139
+ xmlParts.push(`<![CDATA[${chunk.content}]]>`);
140
+ xmlParts.push(' </chunk>');
141
+ }
142
+ xmlParts.push(' </file>');
143
+ }
144
+ xmlParts.push(' </files>');
145
+ xmlParts.push(` <stats tokens="${totalTokens}" chunks="${chunks.length}" files="${fileGroups.size}" time_ms="${timeMs}" />`);
146
+ xmlParts.push('</context>');
147
+ const text = xmlParts.join('\n');
148
+ // Build structured data (same as markdown)
149
+ const chunkInfos = chunks.map((c) => ({
150
+ file: c.filePath,
151
+ lines: [c.startLine, c.endLine],
152
+ tokens: c.tokens,
153
+ score: Math.round(c.score * 1000) / 1000,
154
+ }));
155
+ const data = {
156
+ query,
157
+ context: text,
158
+ chunks: chunkInfos,
159
+ stats: {
160
+ totalTokens,
161
+ chunksConsidered: totalConsidered,
162
+ chunksIncluded: chunks.length,
163
+ filesIncluded: fileGroups.size,
164
+ timeMs,
165
+ },
166
+ };
167
+ return { text, data };
168
+ }
169
+ /**
170
+ * Format output as plain text (optimized for clipboard/pasting)
171
+ */
172
+ export function formatAsPlain(query, result, totalConsidered, timeMs) {
173
+ const { chunks, totalTokens } = result;
174
+ // Group chunks by file
175
+ const fileGroups = new Map();
176
+ for (const chunk of chunks) {
177
+ const existing = fileGroups.get(chunk.filePath) || [];
178
+ existing.push(chunk);
179
+ fileGroups.set(chunk.filePath, existing);
180
+ }
181
+ // Build plain text output (no markdown formatting)
182
+ const textParts = [];
183
+ for (const [filePath, fileChunks] of fileGroups) {
184
+ // Sort chunks by line number within file
185
+ fileChunks.sort((a, b) => a.startLine - b.startLine);
186
+ for (const chunk of fileChunks) {
187
+ const header = `// ${filePath} (lines ${chunk.startLine}-${chunk.endLine})`;
188
+ textParts.push(`${header}\n${chunk.content}`);
189
+ }
190
+ }
191
+ const text = textParts.join('\n\n');
192
+ // Build structured data
193
+ const chunkInfos = chunks.map((c) => ({
194
+ file: c.filePath,
195
+ lines: [c.startLine, c.endLine],
196
+ tokens: c.tokens,
197
+ score: Math.round(c.score * 1000) / 1000,
198
+ }));
199
+ const data = {
200
+ query,
201
+ context: text,
202
+ chunks: chunkInfos,
203
+ stats: {
204
+ totalTokens,
205
+ chunksConsidered: totalConsidered,
206
+ chunksIncluded: chunks.length,
207
+ filesIncluded: fileGroups.size,
208
+ timeMs,
209
+ },
210
+ };
211
+ return { text, data };
212
+ }
213
+ /**
214
+ * Format output in specified format
215
+ */
216
+ export function formatInFormat(format, query, result, totalConsidered, timeMs, explain = false) {
217
+ switch (format) {
218
+ case 'xml':
219
+ return formatAsXml(query, result, totalConsidered, timeMs);
220
+ case 'json': {
221
+ // JSON format returns the data structure directly
222
+ const base = formatOutput(query, result, totalConsidered, timeMs);
223
+ return {
224
+ text: JSON.stringify(base.data, null, 2),
225
+ data: base.data,
226
+ };
227
+ }
228
+ case 'plain':
229
+ return formatAsPlain(query, result, totalConsidered, timeMs);
230
+ case 'markdown':
231
+ default:
232
+ return explain
233
+ ? formatWithExplanation(query, result, totalConsidered, timeMs)
234
+ : formatOutput(query, result, totalConsidered, timeMs);
235
+ }
236
+ }
237
+ /**
238
+ * Escape XML special characters
239
+ */
240
+ function escapeXml(str) {
241
+ return str
242
+ .replace(/&/g, '&amp;')
243
+ .replace(/</g, '&lt;')
244
+ .replace(/>/g, '&gt;')
245
+ .replace(/"/g, '&quot;')
246
+ .replace(/'/g, '&apos;');
247
+ }
116
248
  //# sourceMappingURL=formatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/selector/formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/selector/formatter.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,12 @@
3
3
  *
4
4
  * Orchestrates the selection pipeline:
5
5
  * 1. Search for similar chunks
6
- * 2. Score and rank
6
+ * 2. Score and rank (with optional import boosting)
7
7
  * 3. Fit to budget
8
8
  * 4. Format output
9
9
  */
10
10
  import Database from 'better-sqlite3';
11
- import { type FormattedOutput } from './formatter.js';
11
+ import { type FormattedOutput, type OutputFormat } from './formatter.js';
12
12
  /** Selection options */
13
13
  export interface SelectOptions {
14
14
  /** Query to find context for */
@@ -19,6 +19,14 @@ export interface SelectOptions {
19
19
  sources?: string[];
20
20
  /** Show scoring explanation */
21
21
  explain?: boolean;
22
+ /** Output format */
23
+ format?: OutputFormat;
24
+ /** Include imported files in selection */
25
+ includeImports?: boolean;
26
+ /** Base path for resolving imports */
27
+ basePath?: string;
28
+ /** Skip cache lookup */
29
+ noCache?: boolean;
22
30
  }
23
31
  /** Selection result */
24
32
  export interface SelectResult {
@@ -26,12 +34,15 @@ export interface SelectResult {
26
34
  output: FormattedOutput;
27
35
  /** Whether index is empty */
28
36
  isEmpty: boolean;
37
+ /** Whether result came from cache */
38
+ fromCache: boolean;
29
39
  }
30
40
  /**
31
41
  * Select optimal context for a query
32
42
  */
33
43
  export declare function selectContext(db: Database.Database, options: SelectOptions): Promise<SelectResult>;
34
- export type { FormattedOutput, SelectionData, SelectionStats, ChunkInfo } from './formatter.js';
44
+ export type { FormattedOutput, SelectionData, SelectionStats, ChunkInfo, OutputFormat } from './formatter.js';
35
45
  export type { ScoredChunk } from './search.js';
36
- export type { RankedChunk } from './scoring.js';
46
+ export type { RankedChunk, ImportGraph, ScoringOptions } from './scoring.js';
47
+ export { buildImportGraph, getRelatedImports } from './scoring.js';
37
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/selector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,OAAO,EAAuC,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE3F,wBAAwB;AACxB,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,uBAAuB;AACvB,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAwDvB;AAGD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChG,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/selector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,OAAO,EAAkB,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AASzF,wBAAwB;AACxB,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,uBAAuB;AACvB,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAmIvB;AAwCD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9G,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}