exai 1.6.2 → 1.7.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.
@@ -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"}
@@ -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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"}
@@ -40,9 +40,12 @@ export interface CliConfig {
40
40
  compressMode?: string;
41
41
  compressOptions?: ConfigCompressOptions;
42
42
  cache?: boolean;
43
+ contextCache?: boolean;
43
44
  cacheTtlDays?: number;
44
45
  cacheMaxEntries?: number;
45
46
  verbose?: boolean;
47
+ /** LLM request timeout in seconds (default: 120) */
48
+ timeoutSecs?: number;
46
49
  }
47
50
  /**
48
51
  * Load and validate a CLI config file.
@@ -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;CACrB;AA0ED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAyExD;AAID;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SA0C7B,CAAC"}
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,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;CACxB;AA0ED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CA2ExD;AAID;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SA4C7B,CAAC"}
package/dist/ai/config.js CHANGED
@@ -24,9 +24,9 @@ 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
30
  ]);
31
31
  const COMPRESS_OPTION_KEYS = new Set([
32
32
  'removeComments', 'minifyWhitespace', 'extractSignaturesOnly', 'maxFileLines',
@@ -163,6 +163,8 @@ export function loadConfig(configPath) {
163
163
  // Cache
164
164
  if (obj.cache !== undefined)
165
165
  config.cache = assertBoolean(obj, 'cache');
166
+ if (obj.contextCache !== undefined)
167
+ config.contextCache = assertBoolean(obj, 'contextCache');
166
168
  if (obj.cacheTtlDays !== undefined)
167
169
  config.cacheTtlDays = assertNumber(obj, 'cacheTtlDays');
168
170
  if (obj.cacheMaxEntries !== undefined)
@@ -170,6 +172,8 @@ export function loadConfig(configPath) {
170
172
  // Misc
171
173
  if (obj.verbose !== undefined)
172
174
  config.verbose = assertBoolean(obj, 'verbose');
175
+ if (obj.timeoutSecs !== undefined)
176
+ config.timeoutSecs = assertNumber(obj, 'timeoutSecs');
173
177
  return config;
174
178
  }
175
179
  // ── Default template ────────────────────────────────────────────────────────
@@ -210,9 +214,11 @@ export const CONFIG_TEMPLATE = {
210
214
  },
211
215
  // Cache
212
216
  cache: true,
217
+ contextCache: true,
213
218
  cacheTtlDays: 7,
214
219
  cacheMaxEntries: 100,
215
220
  // Misc
216
221
  verbose: false,
222
+ timeoutSecs: 120,
217
223
  };
218
224
  //# sourceMappingURL=config.js.map
@@ -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
- /** Cache TTL in days (default: 7) */
26
- cacheTtlDays?: number;
27
- /** Max cache entries (default: 100) */
28
- cacheMaxEntries?: number;
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;AAMH,OAAO,KAAK,EAAE,YAAY,IAAI,kBAAkB,EAAE,eAAe,EAAc,MAAM,qBAAqB,CAAC;AAO3G,MAAM,WAAW,cAAc;IAC7B,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,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAyDD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAsDxB"}
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;IAC7B,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;CACrB;AAED,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAkCD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,cAAmB,GAC3B,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
- const CACHE_DIR = `${tmpdir()}/exai-cache`;
15
- // ── Cache helpers ─────────────────────────────────────────────────────────────
11
+ import { cache, makeKey } from './cache.js';
12
+ // ── Cache key ─────────────────────────────────────────────────────────────────
16
13
  function generateCacheKey(paths, options) {
17
- const keyParts = [
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 = getCached(cacheKey, verbose);
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
- writeCache(cacheKey, result, verbose);
66
+ cache.set('context', cacheKey, result);
104
67
  }
105
68
  return { ...result, fromCache: false, cacheKey };
106
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context-gatherer.js","sourceRoot":"","sources":["../../src/ai/context-gatherer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-gatherer.js","sourceRoot":"","sources":["../../src/ai/context-gatherer.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,6 @@ interface FilterResult {
12
12
  * Ask AI model to filter folders from a tree structure.
13
13
  * Uses callLLM() as the underlying API call.
14
14
  */
15
- export declare function filterFolders(treeStructure: string, apiKey?: string, model?: string, verbose?: boolean, useCache?: boolean): Promise<FilterResult>;
15
+ export declare function filterFolders(treeStructure: string, apiKey?: string, model?: string, verbose?: boolean, useCache?: boolean, timeoutMs?: number): Promise<FilterResult>;
16
16
  export {};
17
17
  //# sourceMappingURL=folder-filter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"folder-filter.d.ts","sourceRoot":"","sources":["../../src/ai/folder-filter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2BH,UAAU,YAAY;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,GAAE,MAAsB,EAC7B,OAAO,GAAE,OAAe,EACxB,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,YAAY,CAAC,CAqDvB"}
1
+ {"version":3,"file":"folder-filter.d.ts","sourceRoot":"","sources":["../../src/ai/folder-filter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2BH,UAAU,YAAY;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,GAAE,MAAsB,EAC7B,OAAO,GAAE,OAAe,EACxB,QAAQ,GAAE,OAAc,EACxB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CAsDvB"}
@@ -30,7 +30,7 @@ Do NOT include explanations or other text. ONLY the JSON array.`;
30
30
  * Ask AI model to filter folders from a tree structure.
31
31
  * Uses callLLM() as the underlying API call.
32
32
  */
33
- export async function filterFolders(treeStructure, apiKey, model = DEFAULT_MODEL, verbose = false, useCache = true) {
33
+ export async function filterFolders(treeStructure, apiKey, model = DEFAULT_MODEL, verbose = false, useCache = true, timeoutMs) {
34
34
  const startTime = Date.now();
35
35
  const userMessage = `Analyze this project structure and suggest folders to exclude:\n\n${treeStructure}`;
36
36
  const output = await callLLM(userMessage, FILTER_SYSTEM_PROMPT, {
@@ -40,6 +40,7 @@ export async function filterFolders(treeStructure, apiKey, model = DEFAULT_MODEL
40
40
  verbose,
41
41
  useCache,
42
42
  cacheFormat: 'folder-filter',
43
+ timeoutMs,
43
44
  });
44
45
  // Parse JSON output
45
46
  let excludePatterns;
@@ -1 +1 @@
1
- {"version":3,"file":"folder-filter.js","sourceRoot":"","sources":["../../src/ai/folder-filter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;gEAoBmC,CAAC;AAQjE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAqB,EACrB,MAAe,EACf,QAAgB,aAAa,EAC7B,UAAmB,KAAK,EACxB,WAAoB,IAAI;IAExB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,WAAW,GAAG,qEAAqE,aAAa,EAAE,CAAC;IAEzG,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,oBAAoB,EAAE;QAC9D,MAAM;QACN,KAAK;QACL,WAAW,EAAE,CAAC;QACd,OAAO;QACP,QAAQ;QACR,WAAW,EAAE,eAAe;KAC7B,CAAC,CAAC;IAEH,oBAAoB;IACpB,IAAI,eAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAE9D,mCAAmC;QACnC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QAED,6DAA6D;QAC7D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QAEtD,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,kDAAkD,MAAM,cAAc,KAAK,CAAC,OAAO,EAAE,CACtF,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE5C,OAAO;QACL,eAAe;QACf,YAAY;QACZ,SAAS,EAAE,KAAK;KACjB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"folder-filter.js","sourceRoot":"","sources":["../../src/ai/folder-filter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;gEAoBmC,CAAC;AAQjE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAqB,EACrB,MAAe,EACf,QAAgB,aAAa,EAC7B,UAAmB,KAAK,EACxB,WAAoB,IAAI,EACxB,SAAkB;IAElB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,WAAW,GAAG,qEAAqE,aAAa,EAAE,CAAC;IAEzG,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,oBAAoB,EAAE;QAC9D,MAAM;QACN,KAAK;QACL,WAAW,EAAE,CAAC;QACd,OAAO;QACP,QAAQ;QACR,WAAW,EAAE,eAAe;QAC5B,SAAS;KACV,CAAC,CAAC;IAEH,oBAAoB;IACpB,IAAI,eAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAE9D,mCAAmC;QACnC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QAED,6DAA6D;QAC7D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QAEtD,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,kDAAkD,MAAM,cAAc,KAAK,CAAC,OAAO,EAAE,CACtF,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE5C,OAAO;QACL,eAAe;QACf,YAAY;QACZ,SAAS,EAAE,KAAK;KACjB,CAAC;AACJ,CAAC"}
@@ -4,7 +4,6 @@
4
4
  * callLLM() → generic reusable LLM call (base)
5
5
  * generateFlowchartInput() → flowchart-specific wrapper (uses callLLM)
6
6
  */
7
- import { type CacheOptions } from './query-cache.js';
8
7
  export type OutputFormat = 'dsl' | 'json';
9
8
  export interface CallLLMOptions {
10
9
  model?: string;
@@ -12,11 +11,14 @@ export interface CallLLMOptions {
12
11
  temperature?: number;
13
12
  verbose?: boolean;
14
13
  useCache?: boolean;
15
- cacheOptions?: CacheOptions;
16
14
  /** Cache format key - used to separate cache namespaces (default: 'text') */
17
15
  cacheFormat?: string;
18
16
  /** Context string hashed into cache key for more precise cache hits */
19
17
  cacheContext?: string;
18
+ /** Request timeout in milliseconds (default: 120000 = 2 min) */
19
+ timeoutMs?: number;
20
+ /** If true, only return from cache — never call the API. Throws on miss. */
21
+ cacheOnly?: boolean;
20
22
  }
21
23
  export interface GenerateOptions {
22
24
  model?: string;
@@ -25,7 +27,9 @@ export interface GenerateOptions {
25
27
  context?: string;
26
28
  verbose?: boolean;
27
29
  useCache?: boolean;
28
- cacheOptions?: CacheOptions;
30
+ timeoutMs?: number;
31
+ /** If true, only return from cache — never call the API. Throws on miss. */
32
+ cacheOnly?: boolean;
29
33
  }
30
34
  /**
31
35
  * Generic LLM call via OpenRouter.
@@ -1 +1 @@
1
- {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/ai/openrouter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA2FvF,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B;AA+CD;;;;;GAKG;AACH,wBAAsB,OAAO,CACzB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,GAAE,cAAmB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAkFjB;AAID;;;GAGG;AACH,wBAAsB,sBAAsB,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,eAAoB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAgEjB"}
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/ai/openrouter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqHH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAiDD;;;;;GAKG;AACH,wBAAsB,OAAO,CACzB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,GAAE,cAAmB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAiGjB;AAID;;;GAGG;AACH,wBAAsB,sBAAsB,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,eAAoB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAkEjB"}