exai 1.6.3 → 1.8.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.
- package/dist/ai/cache.d.ts +65 -0
- package/dist/ai/cache.d.ts.map +1 -0
- package/dist/ai/cache.js +197 -0
- package/dist/ai/cache.js.map +1 -0
- package/dist/ai/config.d.ts +15 -0
- package/dist/ai/config.d.ts.map +1 -1
- package/dist/ai/config.js +102 -2
- package/dist/ai/config.js.map +1 -1
- package/dist/ai/context-gatherer.d.ts +6 -6
- package/dist/ai/context-gatherer.d.ts.map +1 -1
- package/dist/ai/context-gatherer.js +15 -52
- package/dist/ai/context-gatherer.js.map +1 -1
- package/dist/ai/folder-filter.d.ts +1 -1
- package/dist/ai/folder-filter.d.ts.map +1 -1
- package/dist/ai/folder-filter.js +2 -1
- package/dist/ai/folder-filter.js.map +1 -1
- package/dist/ai/openrouter.d.ts +7 -3
- package/dist/ai/openrouter.d.ts.map +1 -1
- package/dist/ai/openrouter.js +140 -86
- package/dist/ai/openrouter.js.map +1 -1
- package/dist/ai/query-cache.d.ts +9 -24
- package/dist/ai/query-cache.d.ts.map +1 -1
- package/dist/ai/query-cache.js +21 -270
- package/dist/ai/query-cache.js.map +1 -1
- package/dist/ai/tree-generator.d.ts.map +1 -1
- package/dist/ai/tree-generator.js.map +1 -1
- package/dist/cli.js +134 -34
- package/dist/cli.js.map +1 -1
- package/dist/factory/connection-factory.d.ts.map +1 -1
- package/dist/factory/connection-factory.js +9 -6
- package/dist/factory/connection-factory.js.map +1 -1
- package/dist/factory/element-factory.d.ts.map +1 -1
- package/dist/factory/element-factory.js.map +1 -1
- package/dist/factory/image-factory.d.ts.map +1 -1
- package/dist/factory/image-factory.js.map +1 -1
- package/dist/factory/index.d.ts.map +1 -1
- package/dist/factory/index.js.map +1 -1
- package/dist/factory/node-factory.d.ts.map +1 -1
- package/dist/factory/node-factory.js +6 -1
- package/dist/factory/node-factory.js.map +1 -1
- package/dist/factory/text-factory.d.ts +2 -0
- package/dist/factory/text-factory.d.ts.map +1 -1
- package/dist/factory/text-factory.js +2 -2
- package/dist/factory/text-factory.js.map +1 -1
- package/dist/generator/excalidraw-generator.d.ts +4 -2
- package/dist/generator/excalidraw-generator.d.ts.map +1 -1
- package/dist/generator/excalidraw-generator.js +113 -9
- package/dist/generator/excalidraw-generator.js.map +1 -1
- package/dist/layout/arrow-router.d.ts +8 -0
- package/dist/layout/arrow-router.d.ts.map +1 -1
- package/dist/layout/arrow-router.js +23 -0
- package/dist/layout/arrow-router.js.map +1 -1
- package/dist/layout/elk-layout.d.ts.map +1 -1
- package/dist/layout/elk-layout.js +2 -0
- package/dist/layout/elk-layout.js.map +1 -1
- package/dist/parser/dot-parser.d.ts.map +1 -1
- package/dist/parser/dot-parser.js.map +1 -1
- package/dist/parser/dsl-parser.d.ts.map +1 -1
- package/dist/parser/dsl-parser.js +73 -1
- package/dist/parser/dsl-parser.js.map +1 -1
- package/dist/types/dsl.d.ts +20 -1
- package/dist/types/dsl.d.ts.map +1 -1
- package/dist/types/dsl.js.map +1 -1
- package/dist/types/excalidraw.d.ts +1 -1
- package/dist/types/excalidraw.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified ExaiCache
|
|
3
|
+
*
|
|
4
|
+
* All caches share one directory with namespaced files: {ns}__{key}.json
|
|
5
|
+
* Namespaces used: 'llm', 'context', 'filter'
|
|
6
|
+
*
|
|
7
|
+
* Configure the module-level singleton once at startup via cache.configure().
|
|
8
|
+
* All callers (LLM cache, context cache) share TTL, maxEntries, and verbose settings.
|
|
9
|
+
*/
|
|
10
|
+
export interface CacheConfig {
|
|
11
|
+
cacheDir?: string;
|
|
12
|
+
ttlDays?: number;
|
|
13
|
+
maxEntries?: number;
|
|
14
|
+
verbose?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build a deterministic cache key from an arbitrary list of values.
|
|
18
|
+
* Strings are hashed directly; everything else is JSON-serialised first.
|
|
19
|
+
*/
|
|
20
|
+
export declare function makeKey(...parts: unknown[]): string;
|
|
21
|
+
export declare class ExaiCache {
|
|
22
|
+
private dir;
|
|
23
|
+
private ttlMs;
|
|
24
|
+
private max;
|
|
25
|
+
private verbose;
|
|
26
|
+
constructor();
|
|
27
|
+
/** Apply configuration. Call once at startup (e.g. after loading config file). */
|
|
28
|
+
configure(config: CacheConfig): void;
|
|
29
|
+
private ensureDir;
|
|
30
|
+
private filePath;
|
|
31
|
+
/**
|
|
32
|
+
* Read a cached value. Returns null on miss or expiry.
|
|
33
|
+
* @param ns Namespace (e.g. 'llm', 'context', 'filter')
|
|
34
|
+
* @param key Cache key produced by makeKey()
|
|
35
|
+
*/
|
|
36
|
+
get<T>(ns: string, key: string): T | null;
|
|
37
|
+
/**
|
|
38
|
+
* Write a value to cache.
|
|
39
|
+
* @param ns Namespace
|
|
40
|
+
* @param key Cache key produced by makeKey()
|
|
41
|
+
* @param value Any JSON-serialisable value
|
|
42
|
+
*/
|
|
43
|
+
set<T>(ns: string, key: string, value: T): void;
|
|
44
|
+
/**
|
|
45
|
+
* Clear cache entries.
|
|
46
|
+
* @param ns Namespace to clear. Omit to clear everything (including legacy .cache files).
|
|
47
|
+
* @returns Number of files deleted.
|
|
48
|
+
*/
|
|
49
|
+
clear(ns?: string): number;
|
|
50
|
+
/**
|
|
51
|
+
* Return statistics about cached files.
|
|
52
|
+
* @param ns Namespace to scope. Omit for all files.
|
|
53
|
+
*/
|
|
54
|
+
stats(ns?: string): {
|
|
55
|
+
totalEntries: number;
|
|
56
|
+
totalSize: number;
|
|
57
|
+
oldestEntry: number | null;
|
|
58
|
+
newestEntry: number | null;
|
|
59
|
+
};
|
|
60
|
+
/** Remove oldest entries (across all namespaces) when total exceeds maxEntries. */
|
|
61
|
+
_prune(): void;
|
|
62
|
+
}
|
|
63
|
+
/** Shared cache instance. Call cache.configure() once at application startup. */
|
|
64
|
+
export declare const cache: ExaiCache;
|
|
65
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/ai/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiBH,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAID;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAMnD;AAID,qBAAa,SAAS;IAClB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAU;;IASzB,kFAAkF;IAClF,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAOpC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,QAAQ;IAIhB;;;;OAIG;IACH,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAwBzC;;;;;OAKG;IACH,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAY/C;;;;OAIG;IACH,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAkB1B;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B;IAgCD,mFAAmF;IACnF,MAAM,IAAI,IAAI;CAcjB;AAID,iFAAiF;AACjF,eAAO,MAAM,KAAK,WAAkB,CAAC"}
|
package/dist/ai/cache.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified ExaiCache
|
|
3
|
+
*
|
|
4
|
+
* All caches share one directory with namespaced files: {ns}__{key}.json
|
|
5
|
+
* Namespaces used: 'llm', 'context', 'filter'
|
|
6
|
+
*
|
|
7
|
+
* Configure the module-level singleton once at startup via cache.configure().
|
|
8
|
+
* All callers (LLM cache, context cache) share TTL, maxEntries, and verbose settings.
|
|
9
|
+
*/
|
|
10
|
+
import { createHash } from 'crypto';
|
|
11
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, statSync, unlinkSync, } from 'fs';
|
|
12
|
+
import { join } from 'path';
|
|
13
|
+
import { tmpdir } from 'os';
|
|
14
|
+
// ── Key helper ────────────────────────────────────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* Build a deterministic cache key from an arbitrary list of values.
|
|
17
|
+
* Strings are hashed directly; everything else is JSON-serialised first.
|
|
18
|
+
*/
|
|
19
|
+
export function makeKey(...parts) {
|
|
20
|
+
const hash = createHash('sha256');
|
|
21
|
+
for (const part of parts) {
|
|
22
|
+
hash.update(typeof part === 'string' ? part : JSON.stringify(part));
|
|
23
|
+
}
|
|
24
|
+
return hash.digest('hex');
|
|
25
|
+
}
|
|
26
|
+
// ── ExaiCache class ───────────────────────────────────────────────────────────
|
|
27
|
+
export class ExaiCache {
|
|
28
|
+
dir;
|
|
29
|
+
ttlMs;
|
|
30
|
+
max;
|
|
31
|
+
verbose;
|
|
32
|
+
constructor() {
|
|
33
|
+
this.dir = join(tmpdir(), 'exai-cache');
|
|
34
|
+
this.ttlMs = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
35
|
+
this.max = 100;
|
|
36
|
+
this.verbose = false;
|
|
37
|
+
}
|
|
38
|
+
/** Apply configuration. Call once at startup (e.g. after loading config file). */
|
|
39
|
+
configure(config) {
|
|
40
|
+
if (config.cacheDir !== undefined)
|
|
41
|
+
this.dir = config.cacheDir;
|
|
42
|
+
if (config.ttlDays !== undefined)
|
|
43
|
+
this.ttlMs = config.ttlDays * 24 * 60 * 60 * 1000;
|
|
44
|
+
if (config.maxEntries !== undefined)
|
|
45
|
+
this.max = config.maxEntries;
|
|
46
|
+
if (config.verbose !== undefined)
|
|
47
|
+
this.verbose = config.verbose;
|
|
48
|
+
}
|
|
49
|
+
ensureDir() {
|
|
50
|
+
if (!existsSync(this.dir))
|
|
51
|
+
mkdirSync(this.dir, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
filePath(ns, key) {
|
|
54
|
+
return join(this.dir, `${ns}__${key}.json`);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Read a cached value. Returns null on miss or expiry.
|
|
58
|
+
* @param ns Namespace (e.g. 'llm', 'context', 'filter')
|
|
59
|
+
* @param key Cache key produced by makeKey()
|
|
60
|
+
*/
|
|
61
|
+
get(ns, key) {
|
|
62
|
+
this.ensureDir();
|
|
63
|
+
const path = this.filePath(ns, key);
|
|
64
|
+
if (!existsSync(path)) {
|
|
65
|
+
if (this.verbose)
|
|
66
|
+
console.log(` Cache miss [${ns}]: ${key.slice(0, 12)}...`);
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
const entry = JSON.parse(readFileSync(path, 'utf-8'));
|
|
71
|
+
if (Date.now() - entry.timestamp > this.ttlMs) {
|
|
72
|
+
if (this.verbose)
|
|
73
|
+
console.log(` Cache expired [${ns}]: ${key.slice(0, 12)}...`);
|
|
74
|
+
try {
|
|
75
|
+
unlinkSync(path);
|
|
76
|
+
}
|
|
77
|
+
catch { /* ignore */ }
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
if (this.verbose) {
|
|
81
|
+
const ageMin = Math.floor((Date.now() - entry.timestamp) / 60_000);
|
|
82
|
+
console.log(` Cache hit [${ns}]: ${key.slice(0, 12)}... (age: ${ageMin}m)`);
|
|
83
|
+
}
|
|
84
|
+
return entry.value;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Write a value to cache.
|
|
92
|
+
* @param ns Namespace
|
|
93
|
+
* @param key Cache key produced by makeKey()
|
|
94
|
+
* @param value Any JSON-serialisable value
|
|
95
|
+
*/
|
|
96
|
+
set(ns, key, value) {
|
|
97
|
+
this.ensureDir();
|
|
98
|
+
const entry = { value, timestamp: Date.now() };
|
|
99
|
+
try {
|
|
100
|
+
writeFileSync(this.filePath(ns, key), JSON.stringify(entry), 'utf-8');
|
|
101
|
+
if (this.verbose)
|
|
102
|
+
console.log(` Cached [${ns}]: ${key.slice(0, 12)}...`);
|
|
103
|
+
this._prune();
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
if (this.verbose)
|
|
107
|
+
console.log(` Cache write error [${ns}]: ${err}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Clear cache entries.
|
|
112
|
+
* @param ns Namespace to clear. Omit to clear everything (including legacy .cache files).
|
|
113
|
+
* @returns Number of files deleted.
|
|
114
|
+
*/
|
|
115
|
+
clear(ns) {
|
|
116
|
+
if (!existsSync(this.dir))
|
|
117
|
+
return 0;
|
|
118
|
+
try {
|
|
119
|
+
const files = readdirSync(this.dir).filter(f => ns
|
|
120
|
+
? (f.startsWith(`${ns}__`) && f.endsWith('.json'))
|
|
121
|
+
: (f.endsWith('.json') || f.endsWith('.cache')));
|
|
122
|
+
let count = 0;
|
|
123
|
+
for (const f of files) {
|
|
124
|
+
try {
|
|
125
|
+
unlinkSync(join(this.dir, f));
|
|
126
|
+
count++;
|
|
127
|
+
}
|
|
128
|
+
catch { /* ignore */ }
|
|
129
|
+
}
|
|
130
|
+
return count;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return 0;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Return statistics about cached files.
|
|
138
|
+
* @param ns Namespace to scope. Omit for all files.
|
|
139
|
+
*/
|
|
140
|
+
stats(ns) {
|
|
141
|
+
if (!existsSync(this.dir)) {
|
|
142
|
+
return { totalEntries: 0, totalSize: 0, oldestEntry: null, newestEntry: null };
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
const files = readdirSync(this.dir)
|
|
146
|
+
.filter(f => ns
|
|
147
|
+
? (f.startsWith(`${ns}__`) && f.endsWith('.json'))
|
|
148
|
+
: (f.endsWith('.json') || f.endsWith('.cache')))
|
|
149
|
+
.map(f => join(this.dir, f));
|
|
150
|
+
let totalSize = 0;
|
|
151
|
+
let oldestEntry = null;
|
|
152
|
+
let newestEntry = null;
|
|
153
|
+
for (const file of files) {
|
|
154
|
+
try {
|
|
155
|
+
const s = statSync(file);
|
|
156
|
+
totalSize += s.size;
|
|
157
|
+
const mtime = s.mtime.getTime();
|
|
158
|
+
if (oldestEntry === null || mtime < oldestEntry)
|
|
159
|
+
oldestEntry = mtime;
|
|
160
|
+
if (newestEntry === null || mtime > newestEntry)
|
|
161
|
+
newestEntry = mtime;
|
|
162
|
+
}
|
|
163
|
+
catch { /* ignore */ }
|
|
164
|
+
}
|
|
165
|
+
return { totalEntries: files.length, totalSize, oldestEntry, newestEntry };
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return { totalEntries: 0, totalSize: 0, oldestEntry: null, newestEntry: null };
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/** Remove oldest entries (across all namespaces) when total exceeds maxEntries. */
|
|
172
|
+
_prune() {
|
|
173
|
+
if (!existsSync(this.dir))
|
|
174
|
+
return;
|
|
175
|
+
try {
|
|
176
|
+
const files = readdirSync(this.dir)
|
|
177
|
+
.filter(f => f.endsWith('.json'))
|
|
178
|
+
.map(f => ({ path: join(this.dir, f), mtime: statSync(join(this.dir, f)).mtime.getTime() }))
|
|
179
|
+
.sort((a, b) => b.mtime - a.mtime);
|
|
180
|
+
if (files.length <= this.max)
|
|
181
|
+
return;
|
|
182
|
+
for (const { path } of files.slice(this.max)) {
|
|
183
|
+
try {
|
|
184
|
+
unlinkSync(path);
|
|
185
|
+
if (this.verbose)
|
|
186
|
+
console.log(` Pruned: ${path}`);
|
|
187
|
+
}
|
|
188
|
+
catch { /* ignore */ }
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch { /* ignore */ }
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// ── Module-level singleton ────────────────────────────────────────────────────
|
|
195
|
+
/** Shared cache instance. Call cache.configure() once at application startup. */
|
|
196
|
+
export const cache = new ExaiCache();
|
|
197
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/ai/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/config.d.ts
CHANGED
|
@@ -11,6 +11,17 @@
|
|
|
11
11
|
*
|
|
12
12
|
* All fields optional. Priority: CLI flags > config file > env vars > hardcoded defaults.
|
|
13
13
|
*/
|
|
14
|
+
export interface ExcalidrawStyleConfig {
|
|
15
|
+
strokeWidth?: 1 | 2 | 4;
|
|
16
|
+
fillStyle?: 'hachure' | 'cross-hatch' | 'solid' | 'dots' | 'dashed' | 'zigzag' | 'none';
|
|
17
|
+
strokeStyle?: 'solid' | 'dashed' | 'dotted';
|
|
18
|
+
roughness?: 0 | 1 | 2;
|
|
19
|
+
edges?: 'round' | 'sharp';
|
|
20
|
+
arrowhead?: 'arrow' | 'bar' | 'dot' | 'triangle' | 'none';
|
|
21
|
+
fontFamily?: 'hand' | 'normal' | 'code' | 'excalifont';
|
|
22
|
+
fontSize?: number;
|
|
23
|
+
textAlign?: 'left' | 'center' | 'right';
|
|
24
|
+
}
|
|
14
25
|
export interface ConfigCompressOptions {
|
|
15
26
|
removeComments?: boolean;
|
|
16
27
|
minifyWhitespace?: boolean;
|
|
@@ -40,9 +51,13 @@ export interface CliConfig {
|
|
|
40
51
|
compressMode?: string;
|
|
41
52
|
compressOptions?: ConfigCompressOptions;
|
|
42
53
|
cache?: boolean;
|
|
54
|
+
contextCache?: boolean;
|
|
43
55
|
cacheTtlDays?: number;
|
|
44
56
|
cacheMaxEntries?: number;
|
|
45
57
|
verbose?: boolean;
|
|
58
|
+
/** LLM request timeout in seconds (default: 120) */
|
|
59
|
+
timeoutSecs?: number;
|
|
60
|
+
excalidraw?: ExcalidrawStyleConfig;
|
|
46
61
|
}
|
|
47
62
|
/**
|
|
48
63
|
* Load and validate a CLI config file.
|
package/dist/ai/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/ai/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,MAAM,WAAW,qBAAqB;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACxC;AAID,MAAM,WAAW,SAAS;IAEtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,qBAAqB,CAAC;IAGxC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/ai/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,MAAM,WAAW,qBAAqB;IAClC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACxF,WAAW,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC5C,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;IAC1D,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,CAAC;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACxC;AAID,MAAM,WAAW,SAAS;IAEtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,qBAAqB,CAAC;IAGxC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACtC;AA8ID;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CA8ExD;AAID;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SAyD7B,CAAC"}
|
package/dist/ai/config.js
CHANGED
|
@@ -24,9 +24,11 @@ const KNOWN_KEYS = new Set([
|
|
|
24
24
|
// Compression
|
|
25
25
|
'compress', 'compressMode', 'compressOptions',
|
|
26
26
|
// Cache
|
|
27
|
-
'cache', 'cacheTtlDays', 'cacheMaxEntries',
|
|
27
|
+
'cache', 'contextCache', 'cacheTtlDays', 'cacheMaxEntries',
|
|
28
28
|
// Misc
|
|
29
|
-
'verbose',
|
|
29
|
+
'verbose', 'timeoutSecs',
|
|
30
|
+
// Excalidraw visual style
|
|
31
|
+
'excalidraw',
|
|
30
32
|
]);
|
|
31
33
|
const COMPRESS_OPTION_KEYS = new Set([
|
|
32
34
|
'removeComments', 'minifyWhitespace', 'extractSignaturesOnly', 'maxFileLines',
|
|
@@ -54,6 +56,83 @@ function assertStringArray(obj, key) {
|
|
|
54
56
|
}
|
|
55
57
|
return val;
|
|
56
58
|
}
|
|
59
|
+
const EXCALIDRAW_STYLE_KEYS = new Set([
|
|
60
|
+
'strokeWidth', 'fillStyle', 'strokeStyle', 'roughness',
|
|
61
|
+
'edges', 'arrowhead', 'fontFamily', 'fontSize', 'textAlign',
|
|
62
|
+
]);
|
|
63
|
+
function parseExcalidrawStyleConfig(obj) {
|
|
64
|
+
if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {
|
|
65
|
+
throw new Error('Config "excalidraw" must be an object');
|
|
66
|
+
}
|
|
67
|
+
const raw = obj;
|
|
68
|
+
const unknowns = Object.keys(raw).filter(k => !EXCALIDRAW_STYLE_KEYS.has(k));
|
|
69
|
+
if (unknowns.length > 0) {
|
|
70
|
+
console.warn(`Warning: Unknown excalidraw style keys ignored: ${unknowns.join(', ')}`);
|
|
71
|
+
}
|
|
72
|
+
const result = {};
|
|
73
|
+
if (raw.strokeWidth !== undefined) {
|
|
74
|
+
const v = assertNumber(raw, 'strokeWidth');
|
|
75
|
+
if (v === 1 || v === 2 || v === 4)
|
|
76
|
+
result.strokeWidth = v;
|
|
77
|
+
else
|
|
78
|
+
console.warn(`Warning: excalidraw.strokeWidth must be 1, 2, or 4. Got: ${v}`);
|
|
79
|
+
}
|
|
80
|
+
if (raw.fillStyle !== undefined) {
|
|
81
|
+
const v = assertString(raw, 'fillStyle');
|
|
82
|
+
const valid = ['hachure', 'cross-hatch', 'solid', 'dots', 'dashed', 'zigzag', 'none'];
|
|
83
|
+
if (valid.includes(v))
|
|
84
|
+
result.fillStyle = v;
|
|
85
|
+
else
|
|
86
|
+
console.warn(`Warning: excalidraw.fillStyle "${v}" is not valid. Options: ${valid.join(', ')}`);
|
|
87
|
+
}
|
|
88
|
+
if (raw.strokeStyle !== undefined) {
|
|
89
|
+
const v = assertString(raw, 'strokeStyle');
|
|
90
|
+
if (v === 'solid' || v === 'dashed' || v === 'dotted')
|
|
91
|
+
result.strokeStyle = v;
|
|
92
|
+
else
|
|
93
|
+
console.warn(`Warning: excalidraw.strokeStyle "${v}" is not valid`);
|
|
94
|
+
}
|
|
95
|
+
if (raw.roughness !== undefined) {
|
|
96
|
+
const v = assertNumber(raw, 'roughness');
|
|
97
|
+
if (v === 0 || v === 1 || v === 2)
|
|
98
|
+
result.roughness = v;
|
|
99
|
+
else
|
|
100
|
+
console.warn(`Warning: excalidraw.roughness must be 0, 1, or 2. Got: ${v}`);
|
|
101
|
+
}
|
|
102
|
+
if (raw.edges !== undefined) {
|
|
103
|
+
const v = assertString(raw, 'edges');
|
|
104
|
+
if (v === 'round' || v === 'sharp')
|
|
105
|
+
result.edges = v;
|
|
106
|
+
else
|
|
107
|
+
console.warn(`Warning: excalidraw.edges "${v}" is not valid. Use 'round' or 'sharp'`);
|
|
108
|
+
}
|
|
109
|
+
if (raw.arrowhead !== undefined) {
|
|
110
|
+
const v = assertString(raw, 'arrowhead');
|
|
111
|
+
const valid = ['arrow', 'bar', 'dot', 'triangle', 'none'];
|
|
112
|
+
if (valid.includes(v))
|
|
113
|
+
result.arrowhead = v;
|
|
114
|
+
else
|
|
115
|
+
console.warn(`Warning: excalidraw.arrowhead "${v}" is not valid. Options: ${valid.join(', ')}`);
|
|
116
|
+
}
|
|
117
|
+
if (raw.fontFamily !== undefined) {
|
|
118
|
+
const v = assertString(raw, 'fontFamily');
|
|
119
|
+
const valid = ['hand', 'normal', 'code', 'excalifont'];
|
|
120
|
+
if (valid.includes(v))
|
|
121
|
+
result.fontFamily = v;
|
|
122
|
+
else
|
|
123
|
+
console.warn(`Warning: excalidraw.fontFamily "${v}" is not valid. Options: ${valid.join(', ')}`);
|
|
124
|
+
}
|
|
125
|
+
if (raw.fontSize !== undefined)
|
|
126
|
+
result.fontSize = assertNumber(raw, 'fontSize');
|
|
127
|
+
if (raw.textAlign !== undefined) {
|
|
128
|
+
const v = assertString(raw, 'textAlign');
|
|
129
|
+
if (v === 'left' || v === 'center' || v === 'right')
|
|
130
|
+
result.textAlign = v;
|
|
131
|
+
else
|
|
132
|
+
console.warn(`Warning: excalidraw.textAlign "${v}" is not valid`);
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
57
136
|
function parseCompressOptions(obj) {
|
|
58
137
|
if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {
|
|
59
138
|
throw new Error('Config "compressOptions" must be an object');
|
|
@@ -163,6 +242,8 @@ export function loadConfig(configPath) {
|
|
|
163
242
|
// Cache
|
|
164
243
|
if (obj.cache !== undefined)
|
|
165
244
|
config.cache = assertBoolean(obj, 'cache');
|
|
245
|
+
if (obj.contextCache !== undefined)
|
|
246
|
+
config.contextCache = assertBoolean(obj, 'contextCache');
|
|
166
247
|
if (obj.cacheTtlDays !== undefined)
|
|
167
248
|
config.cacheTtlDays = assertNumber(obj, 'cacheTtlDays');
|
|
168
249
|
if (obj.cacheMaxEntries !== undefined)
|
|
@@ -170,6 +251,11 @@ export function loadConfig(configPath) {
|
|
|
170
251
|
// Misc
|
|
171
252
|
if (obj.verbose !== undefined)
|
|
172
253
|
config.verbose = assertBoolean(obj, 'verbose');
|
|
254
|
+
if (obj.timeoutSecs !== undefined)
|
|
255
|
+
config.timeoutSecs = assertNumber(obj, 'timeoutSecs');
|
|
256
|
+
// Excalidraw visual style
|
|
257
|
+
if (obj.excalidraw !== undefined)
|
|
258
|
+
config.excalidraw = parseExcalidrawStyleConfig(obj.excalidraw);
|
|
173
259
|
return config;
|
|
174
260
|
}
|
|
175
261
|
// ── Default template ────────────────────────────────────────────────────────
|
|
@@ -210,9 +296,23 @@ export const CONFIG_TEMPLATE = {
|
|
|
210
296
|
},
|
|
211
297
|
// Cache
|
|
212
298
|
cache: true,
|
|
299
|
+
contextCache: true,
|
|
213
300
|
cacheTtlDays: 7,
|
|
214
301
|
cacheMaxEntries: 100,
|
|
215
302
|
// Misc
|
|
216
303
|
verbose: false,
|
|
304
|
+
timeoutSecs: 120,
|
|
305
|
+
// Excalidraw visual style (global defaults applied to every element)
|
|
306
|
+
excalidraw: {
|
|
307
|
+
strokeWidth: 2,
|
|
308
|
+
fillStyle: 'hachure',
|
|
309
|
+
strokeStyle: 'solid',
|
|
310
|
+
roughness: 1,
|
|
311
|
+
edges: 'round',
|
|
312
|
+
arrowhead: 'arrow',
|
|
313
|
+
fontFamily: 'hand',
|
|
314
|
+
fontSize: 20,
|
|
315
|
+
textAlign: 'center',
|
|
316
|
+
},
|
|
217
317
|
};
|
|
218
318
|
//# sourceMappingURL=config.js.map
|
package/dist/ai/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/ai/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/ai/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Responsibilities:
|
|
5
5
|
* - Wraps the context module with OpenRouter-based AI filtering (folder-filter.ts)
|
|
6
|
-
* - Caches full pipeline results keyed on paths + options
|
|
6
|
+
* - Caches full pipeline results keyed on paths + options (via unified ExaiCache)
|
|
7
7
|
* - Forwards all options to the context module
|
|
8
8
|
*/
|
|
9
9
|
import type { GatherResult as ModuleGatherResult, CompressOptions } from '../context/index.js';
|
|
@@ -22,10 +22,10 @@ export interface ContextOptions {
|
|
|
22
22
|
maxDepth?: number;
|
|
23
23
|
/** Max tree items before truncation (default: 1000) */
|
|
24
24
|
maxTreeItems?: number;
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
|
|
25
|
+
/** LLM request timeout in ms (default: 120000) */
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
/** If true, only return from cache — never re-gather. Returns null on miss. */
|
|
28
|
+
cacheOnly?: boolean;
|
|
29
29
|
}
|
|
30
30
|
export interface ContextResult extends ModuleGatherResult {
|
|
31
31
|
fromCache: boolean;
|
|
@@ -35,5 +35,5 @@ export interface ContextResult extends ModuleGatherResult {
|
|
|
35
35
|
* Gather context using the full pipeline:
|
|
36
36
|
* validate → pre-filter → tree → AI filter → read → compress → markdown
|
|
37
37
|
*/
|
|
38
|
-
export declare function gatherContext(paths: string[], options?: ContextOptions): Promise<ContextResult>;
|
|
38
|
+
export declare function gatherContext(paths: string[], options?: ContextOptions): Promise<ContextResult | null>;
|
|
39
39
|
//# sourceMappingURL=context-gatherer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-gatherer.d.ts","sourceRoot":"","sources":["../../src/ai/context-gatherer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"context-gatherer.d.ts","sourceRoot":"","sources":["../../src/ai/context-gatherer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,IAAI,kBAAkB,EAAE,eAAe,EAAc,MAAM,qBAAqB,CAAC;AAM3G,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACrD,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAkCD;;;GAGG;AACH,wBAAsB,aAAa,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,cAAmB,GAC7B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA6D/B"}
|
|
@@ -3,61 +3,20 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Responsibilities:
|
|
5
5
|
* - Wraps the context module with OpenRouter-based AI filtering (folder-filter.ts)
|
|
6
|
-
* - Caches full pipeline results keyed on paths + options
|
|
6
|
+
* - Caches full pipeline results keyed on paths + options (via unified ExaiCache)
|
|
7
7
|
* - Forwards all options to the context module
|
|
8
8
|
*/
|
|
9
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
10
|
-
import { createHash } from 'crypto';
|
|
11
|
-
import { tmpdir } from 'os';
|
|
12
9
|
import { validatePaths, gatherContext as gatherContextModule } from '../context/index.js';
|
|
13
10
|
import { filterFolders } from './folder-filter.js';
|
|
14
|
-
|
|
15
|
-
// ── Cache
|
|
11
|
+
import { cache, makeKey } from './cache.js';
|
|
12
|
+
// ── Cache key ─────────────────────────────────────────────────────────────────
|
|
16
13
|
function generateCacheKey(paths, options) {
|
|
17
|
-
|
|
18
|
-
[...paths].sort().join('|'),
|
|
19
|
-
options.compress ?? true,
|
|
20
|
-
options.allowTestFiles ?? false,
|
|
21
|
-
options.maxFileSize ?? 0,
|
|
22
|
-
options.maxDepth ?? 0,
|
|
23
|
-
options.maxTreeItems ?? 0,
|
|
24
|
-
(options.excludePatterns ?? []).sort().join(','),
|
|
25
|
-
JSON.stringify(options.compressOptions ?? {}),
|
|
26
|
-
];
|
|
27
|
-
return createHash('sha256').update(keyParts.join(':::')).digest('hex') + '_ctx.cache';
|
|
28
|
-
}
|
|
29
|
-
function getCached(cacheKey, verbose) {
|
|
30
|
-
try {
|
|
31
|
-
const cachePath = `${CACHE_DIR}/${cacheKey}`;
|
|
32
|
-
if (existsSync(cachePath)) {
|
|
33
|
-
if (verbose)
|
|
34
|
-
console.log(` Context cache hit: ${cacheKey}`);
|
|
35
|
-
return JSON.parse(readFileSync(cachePath, 'utf-8'));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
if (verbose)
|
|
40
|
-
console.log(` Context cache read error: ${error}`);
|
|
41
|
-
}
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
function writeCache(cacheKey, result, verbose) {
|
|
45
|
-
try {
|
|
46
|
-
if (!existsSync(CACHE_DIR))
|
|
47
|
-
mkdirSync(CACHE_DIR, { recursive: true });
|
|
48
|
-
writeFileSync(`${CACHE_DIR}/${cacheKey}`, JSON.stringify(result), 'utf-8');
|
|
49
|
-
if (verbose)
|
|
50
|
-
console.log(` Context cached: ${CACHE_DIR}/${cacheKey}`);
|
|
51
|
-
}
|
|
52
|
-
catch (error) {
|
|
53
|
-
if (verbose)
|
|
54
|
-
console.log(` Context cache write error: ${error}`);
|
|
55
|
-
}
|
|
14
|
+
return makeKey([...paths].sort().join('|'), options.compress ?? true, options.allowTestFiles ?? false, options.maxFileSize ?? 0, options.maxDepth ?? 0, options.maxTreeItems ?? 0, (options.excludePatterns ?? []).sort().join(','), JSON.stringify(options.compressOptions ?? {}));
|
|
56
15
|
}
|
|
57
16
|
// ── AI filter factory ─────────────────────────────────────────────────────────
|
|
58
|
-
function createAiFilter(apiKey, verbose = false, useCache = true, filterModel) {
|
|
17
|
+
function createAiFilter(apiKey, verbose = false, useCache = true, filterModel, timeoutMs) {
|
|
59
18
|
return async (tree) => {
|
|
60
|
-
const result = await filterFolders(tree, apiKey, filterModel, verbose, useCache);
|
|
19
|
+
const result = await filterFolders(tree, apiKey, filterModel, verbose, useCache, timeoutMs);
|
|
61
20
|
return result.excludePatterns;
|
|
62
21
|
};
|
|
63
22
|
}
|
|
@@ -67,7 +26,7 @@ function createAiFilter(apiKey, verbose = false, useCache = true, filterModel) {
|
|
|
67
26
|
* validate → pre-filter → tree → AI filter → read → compress → markdown
|
|
68
27
|
*/
|
|
69
28
|
export async function gatherContext(paths, options = {}) {
|
|
70
|
-
const { apiKey, filterModel, verbose = false, compress = true, compressOptions, useCache = true, excludePatterns = [], allowTestFiles = false, maxFileSize, maxDepth, maxTreeItems, } = options;
|
|
29
|
+
const { apiKey, filterModel, verbose = false, compress = true, compressOptions, useCache = true, excludePatterns = [], allowTestFiles = false, maxFileSize, maxDepth, maxTreeItems, timeoutMs, cacheOnly = false, } = options;
|
|
71
30
|
if (verbose) {
|
|
72
31
|
console.log(` Received ${paths.length} context path(s) to analyze:`);
|
|
73
32
|
paths.forEach(p => console.log(` - ${p}`));
|
|
@@ -76,18 +35,22 @@ export async function gatherContext(paths, options = {}) {
|
|
|
76
35
|
const validatedPaths = validatePaths(paths);
|
|
77
36
|
// Check cache (key includes all options that affect output)
|
|
78
37
|
const cacheKey = generateCacheKey(validatedPaths, options);
|
|
79
|
-
if (useCache) {
|
|
80
|
-
const cached =
|
|
38
|
+
if (useCache || cacheOnly) {
|
|
39
|
+
const cached = cache.get('context', cacheKey);
|
|
81
40
|
if (cached) {
|
|
82
41
|
if (verbose)
|
|
83
42
|
console.log(` Using cached context (${(cached.markdown.length / 1024).toFixed(1)}KB)`);
|
|
84
43
|
return { ...cached, fromCache: true, cacheKey };
|
|
85
44
|
}
|
|
86
45
|
}
|
|
46
|
+
// cacheOnly: do not re-gather, signal miss to caller
|
|
47
|
+
if (cacheOnly) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
87
50
|
// Run full pipeline via context module
|
|
88
51
|
const result = await gatherContextModule(validatedPaths, {
|
|
89
52
|
excludePatterns,
|
|
90
|
-
aiFilter: createAiFilter(apiKey, verbose, useCache, filterModel),
|
|
53
|
+
aiFilter: createAiFilter(apiKey, verbose, useCache, filterModel, timeoutMs),
|
|
91
54
|
compress,
|
|
92
55
|
compressOptions,
|
|
93
56
|
allowTestFiles,
|
|
@@ -100,7 +63,7 @@ export async function gatherContext(paths, options = {}) {
|
|
|
100
63
|
});
|
|
101
64
|
// Cache the full result
|
|
102
65
|
if (useCache) {
|
|
103
|
-
|
|
66
|
+
cache.set('context', cacheKey, result);
|
|
104
67
|
}
|
|
105
68
|
return { ...result, fromCache: false, cacheKey };
|
|
106
69
|
}
|