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.
Files changed (66) hide show
  1. package/dist/ai/cache.d.ts +65 -0
  2. package/dist/ai/cache.d.ts.map +1 -0
  3. package/dist/ai/cache.js +197 -0
  4. package/dist/ai/cache.js.map +1 -0
  5. package/dist/ai/config.d.ts +15 -0
  6. package/dist/ai/config.d.ts.map +1 -1
  7. package/dist/ai/config.js +102 -2
  8. package/dist/ai/config.js.map +1 -1
  9. package/dist/ai/context-gatherer.d.ts +6 -6
  10. package/dist/ai/context-gatherer.d.ts.map +1 -1
  11. package/dist/ai/context-gatherer.js +15 -52
  12. package/dist/ai/context-gatherer.js.map +1 -1
  13. package/dist/ai/folder-filter.d.ts +1 -1
  14. package/dist/ai/folder-filter.d.ts.map +1 -1
  15. package/dist/ai/folder-filter.js +2 -1
  16. package/dist/ai/folder-filter.js.map +1 -1
  17. package/dist/ai/openrouter.d.ts +7 -3
  18. package/dist/ai/openrouter.d.ts.map +1 -1
  19. package/dist/ai/openrouter.js +140 -86
  20. package/dist/ai/openrouter.js.map +1 -1
  21. package/dist/ai/query-cache.d.ts +9 -24
  22. package/dist/ai/query-cache.d.ts.map +1 -1
  23. package/dist/ai/query-cache.js +21 -270
  24. package/dist/ai/query-cache.js.map +1 -1
  25. package/dist/ai/tree-generator.d.ts.map +1 -1
  26. package/dist/ai/tree-generator.js.map +1 -1
  27. package/dist/cli.js +134 -34
  28. package/dist/cli.js.map +1 -1
  29. package/dist/factory/connection-factory.d.ts.map +1 -1
  30. package/dist/factory/connection-factory.js +9 -6
  31. package/dist/factory/connection-factory.js.map +1 -1
  32. package/dist/factory/element-factory.d.ts.map +1 -1
  33. package/dist/factory/element-factory.js.map +1 -1
  34. package/dist/factory/image-factory.d.ts.map +1 -1
  35. package/dist/factory/image-factory.js.map +1 -1
  36. package/dist/factory/index.d.ts.map +1 -1
  37. package/dist/factory/index.js.map +1 -1
  38. package/dist/factory/node-factory.d.ts.map +1 -1
  39. package/dist/factory/node-factory.js +6 -1
  40. package/dist/factory/node-factory.js.map +1 -1
  41. package/dist/factory/text-factory.d.ts +2 -0
  42. package/dist/factory/text-factory.d.ts.map +1 -1
  43. package/dist/factory/text-factory.js +2 -2
  44. package/dist/factory/text-factory.js.map +1 -1
  45. package/dist/generator/excalidraw-generator.d.ts +4 -2
  46. package/dist/generator/excalidraw-generator.d.ts.map +1 -1
  47. package/dist/generator/excalidraw-generator.js +113 -9
  48. package/dist/generator/excalidraw-generator.js.map +1 -1
  49. package/dist/layout/arrow-router.d.ts +8 -0
  50. package/dist/layout/arrow-router.d.ts.map +1 -1
  51. package/dist/layout/arrow-router.js +23 -0
  52. package/dist/layout/arrow-router.js.map +1 -1
  53. package/dist/layout/elk-layout.d.ts.map +1 -1
  54. package/dist/layout/elk-layout.js +2 -0
  55. package/dist/layout/elk-layout.js.map +1 -1
  56. package/dist/parser/dot-parser.d.ts.map +1 -1
  57. package/dist/parser/dot-parser.js.map +1 -1
  58. package/dist/parser/dsl-parser.d.ts.map +1 -1
  59. package/dist/parser/dsl-parser.js +73 -1
  60. package/dist/parser/dsl-parser.js.map +1 -1
  61. package/dist/types/dsl.d.ts +20 -1
  62. package/dist/types/dsl.d.ts.map +1 -1
  63. package/dist/types/dsl.js.map +1 -1
  64. package/dist/types/excalidraw.d.ts +1 -1
  65. package/dist/types/excalidraw.d.ts.map +1 -1
  66. 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"}
@@ -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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"}
@@ -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.
@@ -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,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
@@ -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;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
- 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
  }