@kernel.chat/kbot 2.5.0 → 2.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.
Files changed (56) hide show
  1. package/README.md +98 -42
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +116 -21
  4. package/dist/agent.js.map +1 -1
  5. package/dist/auth.d.ts +11 -1
  6. package/dist/auth.d.ts.map +1 -1
  7. package/dist/auth.js +165 -7
  8. package/dist/auth.js.map +1 -1
  9. package/dist/cli.js +207 -22
  10. package/dist/cli.js.map +1 -1
  11. package/dist/ide/acp-server.js +2 -2
  12. package/dist/ide/acp-server.js.map +1 -1
  13. package/dist/ide/mcp-server.js +1 -1
  14. package/dist/matrix.d.ts +6 -0
  15. package/dist/matrix.d.ts.map +1 -1
  16. package/dist/matrix.js +98 -0
  17. package/dist/matrix.js.map +1 -1
  18. package/dist/planner.d.ts.map +1 -1
  19. package/dist/planner.js +29 -0
  20. package/dist/planner.js.map +1 -1
  21. package/dist/provider-fallback.d.ts +51 -0
  22. package/dist/provider-fallback.d.ts.map +1 -0
  23. package/dist/provider-fallback.js +237 -0
  24. package/dist/provider-fallback.js.map +1 -0
  25. package/dist/repo-map.d.ts +9 -0
  26. package/dist/repo-map.d.ts.map +1 -0
  27. package/dist/repo-map.js +280 -0
  28. package/dist/repo-map.js.map +1 -0
  29. package/dist/self-eval.d.ts +45 -0
  30. package/dist/self-eval.d.ts.map +1 -0
  31. package/dist/self-eval.js +232 -0
  32. package/dist/self-eval.js.map +1 -0
  33. package/dist/streaming.d.ts.map +1 -1
  34. package/dist/streaming.js +22 -2
  35. package/dist/streaming.js.map +1 -1
  36. package/dist/task-ledger.d.ts +71 -0
  37. package/dist/task-ledger.d.ts.map +1 -0
  38. package/dist/task-ledger.js +282 -0
  39. package/dist/task-ledger.js.map +1 -0
  40. package/dist/tools/computer.js +3 -3
  41. package/dist/tools/computer.js.map +1 -1
  42. package/dist/tools/index.d.ts.map +1 -1
  43. package/dist/tools/index.js +7 -1
  44. package/dist/tools/index.js.map +1 -1
  45. package/dist/tools/memory-tools.d.ts +2 -0
  46. package/dist/tools/memory-tools.d.ts.map +1 -0
  47. package/dist/tools/memory-tools.js +228 -0
  48. package/dist/tools/memory-tools.js.map +1 -0
  49. package/dist/tools/quality.d.ts +2 -0
  50. package/dist/tools/quality.d.ts.map +1 -0
  51. package/dist/tools/quality.js +313 -0
  52. package/dist/tools/quality.js.map +1 -0
  53. package/dist/ui.d.ts.map +1 -1
  54. package/dist/ui.js +33 -18
  55. package/dist/ui.js.map +1 -1
  56. package/package.json +27 -3
@@ -1 +1 @@
1
- {"version":3,"file":"planner.js","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { ByokProvider } from './auth.js';
2
+ export declare const TIERS: {
3
+ readonly premium: ByokProvider[];
4
+ readonly standard: ByokProvider[];
5
+ readonly fast: ByokProvider[];
6
+ readonly local: ByokProvider[];
7
+ };
8
+ export type Tier = keyof typeof TIERS;
9
+ export interface ProviderHealth {
10
+ provider: ByokProvider;
11
+ consecutiveFailures: number;
12
+ lastFailure: number | null;
13
+ lastSuccess: number | null;
14
+ avgLatencyMs: number;
15
+ isHealthy: boolean;
16
+ }
17
+ /** Record a successful provider call */
18
+ export declare function recordSuccess(provider: ByokProvider, latencyMs: number): void;
19
+ /** Record a failed provider call */
20
+ export declare function recordFailure(provider: ByokProvider, _error?: Error): void;
21
+ /** Get health snapshot for all tracked providers */
22
+ export declare function getProviderHealth(): ProviderHealth[];
23
+ /** Get the healthiest provider in a tier, preferring lowest latency */
24
+ export declare function getBestProvider(tier?: string): ByokProvider;
25
+ export interface FallbackOptions {
26
+ /** Max retries on same provider (default: 3) */
27
+ maxRetries?: number;
28
+ /** Base delay in ms for exponential backoff (default: 1000) */
29
+ baseDelayMs?: number;
30
+ /** Starting provider (default: inferred from config) */
31
+ startProvider?: ByokProvider;
32
+ /** API key resolver — given a provider, return its key or null */
33
+ getKey?: (provider: ByokProvider) => string | null;
34
+ /** Skip cross-tier fallback (default: false) */
35
+ sameTierOnly?: boolean;
36
+ /** Errors that should NOT trigger fallback (e.g., 400 bad request) */
37
+ noRetryErrors?: Array<string | RegExp>;
38
+ /** Called on each retry/failover for logging */
39
+ onFallback?: (from: ByokProvider, to: ByokProvider, level: 'retry' | 'same-tier' | 'cross-tier', error: Error) => void;
40
+ }
41
+ /**
42
+ * Execute a provider call with multi-level fallback.
43
+ *
44
+ * Level 1: Retry same provider with exponential backoff
45
+ * Level 2: Failover to another provider in the same tier
46
+ * Level 3: Degrade to a cheaper tier
47
+ */
48
+ export declare function withFallback<T>(fn: (provider: ByokProvider, apiKey: string) => Promise<T>, options?: FallbackOptions): Promise<T>;
49
+ /** Reset all health data (for testing) */
50
+ export declare function resetHealth(): void;
51
+ //# sourceMappingURL=provider-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-fallback.d.ts","sourceRoot":"","sources":["../src/provider-fallback.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAI7C,eAAO,MAAM,KAAK;sBACsC,YAAY,EAAE;uBACO,YAAY,EAAE;mBACP,YAAY,EAAE;oBACzC,YAAY,EAAE;CAC7D,CAAA;AAEV,MAAM,MAAM,IAAI,GAAG,MAAM,OAAO,KAAK,CAAA;AAOrC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,YAAY,CAAA;IACtB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,OAAO,CAAA;CACnB;AAsCD,wCAAwC;AACxC,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAM7E;AAED,oCAAoC;AACpC,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,CAI1E;AAED,oDAAoD;AACpD,wBAAgB,iBAAiB,IAAI,cAAc,EAAE,CAapD;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,CAyB3D;AAID,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wDAAwD;IACxD,aAAa,CAAC,EAAE,YAAY,CAAA;IAC5B,kEAAkE;IAClE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,MAAM,GAAG,IAAI,CAAA;IAClD,gDAAgD;IAChD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sEAAsE;IACtE,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IACtC,gDAAgD;IAChD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,YAAY,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACvH;AA+CD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,EAAE,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1D,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,CAAC,CAAC,CAwFZ;AAED,0CAA0C;AAC1C,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
@@ -0,0 +1,237 @@
1
+ // K:BOT Provider Fallback — Multi-level retry, failover, and load balancing
2
+ //
3
+ // Inspired by LiteLLM's fallback strategy. Three levels of resilience:
4
+ // 1. Retry — exponential backoff on same provider (1s, 2s, 4s)
5
+ // 2. Same-tier failover — try another provider at the same quality tier
6
+ // 3. Cross-tier fallback — degrade to a cheaper tier if all same-tier fail
7
+ //
8
+ // Health tracking per provider enables smart routing: prefer low-latency,
9
+ // high-reliability providers. The /dashboard command reads this data.
10
+ // ── Tier definitions ──
11
+ export const TIERS = {
12
+ premium: ['anthropic', 'openai', 'google', 'xai'],
13
+ standard: ['mistral', 'deepseek', 'cohere', 'perplexity', 'openrouter'],
14
+ fast: ['groq', 'together', 'fireworks', 'sambanova', 'cerebras', 'nvidia'],
15
+ local: ['ollama', 'lmstudio', 'jan', 'openclaw'],
16
+ };
17
+ /** Tier degradation order — premium → standard → fast → local */
18
+ const TIER_ORDER = ['premium', 'standard', 'fast', 'local'];
19
+ const HEALTH_WINDOW_MS = 5 * 60 * 1000; // 5 minutes
20
+ const UNHEALTHY_THRESHOLD = 3;
21
+ const healthMap = new Map();
22
+ function getRecord(provider) {
23
+ let rec = healthMap.get(provider);
24
+ if (!rec) {
25
+ rec = { consecutiveFailures: 0, lastFailure: null, lastSuccess: null, totalLatencyMs: 0, requestCount: 0 };
26
+ healthMap.set(provider, rec);
27
+ }
28
+ return rec;
29
+ }
30
+ function isHealthy(rec) {
31
+ if (rec.consecutiveFailures <= UNHEALTHY_THRESHOLD)
32
+ return true;
33
+ // Unhealthy only if the failures are recent (within window)
34
+ if (rec.lastFailure && Date.now() - rec.lastFailure < HEALTH_WINDOW_MS)
35
+ return false;
36
+ // Failures are stale — give it another chance
37
+ return true;
38
+ }
39
+ function avgLatency(rec) {
40
+ if (rec.requestCount === 0)
41
+ return 0;
42
+ return Math.round(rec.totalLatencyMs / rec.requestCount);
43
+ }
44
+ /** Record a successful provider call */
45
+ export function recordSuccess(provider, latencyMs) {
46
+ const rec = getRecord(provider);
47
+ rec.consecutiveFailures = 0;
48
+ rec.lastSuccess = Date.now();
49
+ rec.totalLatencyMs += latencyMs;
50
+ rec.requestCount++;
51
+ }
52
+ /** Record a failed provider call */
53
+ export function recordFailure(provider, _error) {
54
+ const rec = getRecord(provider);
55
+ rec.consecutiveFailures++;
56
+ rec.lastFailure = Date.now();
57
+ }
58
+ /** Get health snapshot for all tracked providers */
59
+ export function getProviderHealth() {
60
+ const all = TIER_ORDER.flatMap(t => TIERS[t]);
61
+ return all.map(provider => {
62
+ const rec = getRecord(provider);
63
+ return {
64
+ provider,
65
+ consecutiveFailures: rec.consecutiveFailures,
66
+ lastFailure: rec.lastFailure,
67
+ lastSuccess: rec.lastSuccess,
68
+ avgLatencyMs: avgLatency(rec),
69
+ isHealthy: isHealthy(rec),
70
+ };
71
+ });
72
+ }
73
+ /** Get the healthiest provider in a tier, preferring lowest latency */
74
+ export function getBestProvider(tier) {
75
+ const tierKey = (tier || 'premium');
76
+ const providers = TIERS[tierKey] || TIERS.premium;
77
+ // Filter to healthy providers
78
+ const healthy = providers.filter(p => isHealthy(getRecord(p)));
79
+ const candidates = healthy.length > 0 ? healthy : providers; // fallback to all if none healthy
80
+ // Sort by: healthy first, then lowest avg latency, then fewest failures
81
+ candidates.sort((a, b) => {
82
+ const ra = getRecord(a);
83
+ const rb = getRecord(b);
84
+ // Healthy providers first
85
+ const ha = isHealthy(ra) ? 0 : 1;
86
+ const hb = isHealthy(rb) ? 0 : 1;
87
+ if (ha !== hb)
88
+ return ha - hb;
89
+ // Fewer consecutive failures
90
+ if (ra.consecutiveFailures !== rb.consecutiveFailures)
91
+ return ra.consecutiveFailures - rb.consecutiveFailures;
92
+ // Lower latency (0 means no data — sort last among healthy)
93
+ const la = avgLatency(ra) || Infinity;
94
+ const lb = avgLatency(rb) || Infinity;
95
+ return la - lb;
96
+ });
97
+ return candidates[0];
98
+ }
99
+ // ── Tier lookup ──
100
+ function getTier(provider) {
101
+ for (const [tier, providers] of Object.entries(TIERS)) {
102
+ if (providers.includes(provider))
103
+ return tier;
104
+ }
105
+ return 'premium';
106
+ }
107
+ function getSameTierAlternatives(provider) {
108
+ const tier = getTier(provider);
109
+ return TIERS[tier].filter(p => p !== provider);
110
+ }
111
+ function getCheaperTiers(provider) {
112
+ const tier = getTier(provider);
113
+ const idx = TIER_ORDER.indexOf(tier);
114
+ return TIER_ORDER.slice(idx + 1);
115
+ }
116
+ // ── Error classification ──
117
+ function isNonRetryable(error, patterns) {
118
+ const msg = error.message || '';
119
+ // Always non-retryable: auth errors, bad requests, content policy
120
+ if (/\b(401|403|invalid.api.key|unauthorized|forbidden)\b/i.test(msg))
121
+ return true;
122
+ if (/\b(400|bad.request|invalid.model|content.policy)\b/i.test(msg))
123
+ return true;
124
+ // User-specified patterns
125
+ if (patterns) {
126
+ for (const p of patterns) {
127
+ if (typeof p === 'string' && msg.includes(p))
128
+ return true;
129
+ if (p instanceof RegExp && p.test(msg))
130
+ return true;
131
+ }
132
+ }
133
+ return false;
134
+ }
135
+ // ── Sleep ──
136
+ function sleep(ms) {
137
+ return new Promise(resolve => setTimeout(resolve, ms));
138
+ }
139
+ // ── Main fallback function ──
140
+ /**
141
+ * Execute a provider call with multi-level fallback.
142
+ *
143
+ * Level 1: Retry same provider with exponential backoff
144
+ * Level 2: Failover to another provider in the same tier
145
+ * Level 3: Degrade to a cheaper tier
146
+ */
147
+ export async function withFallback(fn, options) {
148
+ const maxRetries = options?.maxRetries ?? 3;
149
+ const baseDelay = options?.baseDelayMs ?? 1000;
150
+ const getKey = options?.getKey || (() => null);
151
+ const startProvider = options?.startProvider || 'anthropic';
152
+ const onFallback = options?.onFallback;
153
+ // Collect all errors for the final throw
154
+ const allErrors = [];
155
+ // Try a single provider with retries
156
+ async function tryProvider(provider) {
157
+ const key = getKey(provider);
158
+ if (!key)
159
+ return null; // no key configured — skip
160
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
161
+ const start = Date.now();
162
+ try {
163
+ const result = await fn(provider, key);
164
+ recordSuccess(provider, Date.now() - start);
165
+ return result;
166
+ }
167
+ catch (err) {
168
+ const error = err instanceof Error ? err : new Error(String(err));
169
+ recordFailure(provider, error);
170
+ allErrors.push({ provider, error });
171
+ // Don't retry non-retryable errors
172
+ if (isNonRetryable(error, options?.noRetryErrors))
173
+ break;
174
+ // Last attempt — don't sleep
175
+ if (attempt < maxRetries - 1) {
176
+ const delay = baseDelay * Math.pow(2, attempt); // 1s, 2s, 4s
177
+ if (onFallback)
178
+ onFallback(provider, provider, 'retry', error);
179
+ await sleep(delay);
180
+ }
181
+ }
182
+ }
183
+ return null;
184
+ }
185
+ // Level 1: Try the starting provider
186
+ const result1 = await tryProvider(startProvider);
187
+ if (result1 !== null)
188
+ return result1;
189
+ // Level 2: Same-tier failover
190
+ const alternatives = getSameTierAlternatives(startProvider)
191
+ .filter(p => isHealthy(getRecord(p)))
192
+ .sort((a, b) => {
193
+ const la = avgLatency(getRecord(a)) || Infinity;
194
+ const lb = avgLatency(getRecord(b)) || Infinity;
195
+ return la - lb;
196
+ });
197
+ for (const alt of alternatives) {
198
+ if (onFallback && allErrors.length > 0) {
199
+ onFallback(startProvider, alt, 'same-tier', allErrors[allErrors.length - 1].error);
200
+ }
201
+ const result2 = await tryProvider(alt);
202
+ if (result2 !== null)
203
+ return result2;
204
+ }
205
+ // Level 3: Cross-tier fallback
206
+ if (!options?.sameTierOnly) {
207
+ const cheaperTiers = getCheaperTiers(startProvider);
208
+ for (const tier of cheaperTiers) {
209
+ const best = getBestProvider(tier);
210
+ if (onFallback && allErrors.length > 0) {
211
+ onFallback(startProvider, best, 'cross-tier', allErrors[allErrors.length - 1].error);
212
+ }
213
+ const result3 = await tryProvider(best);
214
+ if (result3 !== null)
215
+ return result3;
216
+ // Try remaining providers in this tier
217
+ const remaining = TIERS[tier].filter(p => p !== best && isHealthy(getRecord(p)));
218
+ for (const p of remaining) {
219
+ const result4 = await tryProvider(p);
220
+ if (result4 !== null)
221
+ return result4;
222
+ }
223
+ }
224
+ }
225
+ // Everything failed — throw with context
226
+ const lastErr = allErrors[allErrors.length - 1];
227
+ const providers = [...new Set(allErrors.map(e => e.provider))];
228
+ const msg = `All providers failed (tried: ${providers.join(', ')}). Last error: ${lastErr?.error.message || 'unknown'}`;
229
+ const finalError = new Error(msg);
230
+ finalError.providerErrors = allErrors;
231
+ throw finalError;
232
+ }
233
+ /** Reset all health data (for testing) */
234
+ export function resetHealth() {
235
+ healthMap.clear();
236
+ }
237
+ //# sourceMappingURL=provider-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-fallback.js","sourceRoot":"","sources":["../src/provider-fallback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface RepoMapOptions {
2
+ maxDepth?: number;
3
+ maxFiles?: number;
4
+ }
5
+ /** Generate a compact repo map for LLM context */
6
+ export declare function generateRepoMap(rootDir: string, options?: RepoMapOptions): Promise<string>;
7
+ /** Get repo map with 60s cache. Resolves git root from cwd. */
8
+ export declare function getRepoMapForContext(cwd?: string): Promise<string>;
9
+ //# sourceMappingURL=repo-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-map.d.ts","sourceRoot":"","sources":["../src/repo-map.ts"],"names":[],"mappings":"AAwQA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,kDAAkD;AAClD,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,CASjB;AAQD,+DAA+D;AAC/D,wBAAsB,oBAAoB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBxE"}
@@ -0,0 +1,280 @@
1
+ // K:BOT Repo Map — Aider-style codebase indexer
2
+ //
3
+ // Walks a repo's file tree, extracts exported symbols from TS/JS/Python,
4
+ // and produces a compact tree string for LLM context injection.
5
+ // Uses only Node.js built-ins — no AST parser, no external deps.
6
+ import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs';
7
+ import { join, relative, basename, extname } from 'node:path';
8
+ import { execSync } from 'node:child_process';
9
+ const MAX_OUTPUT_CHARS = 8000;
10
+ const CACHE_TTL_MS = 60_000;
11
+ // ── .gitignore handling ──
12
+ /** Parse .gitignore into simple match patterns */
13
+ function loadGitignorePatterns(rootDir) {
14
+ const gitignorePath = join(rootDir, '.gitignore');
15
+ if (!existsSync(gitignorePath))
16
+ return [];
17
+ try {
18
+ return readFileSync(gitignorePath, 'utf-8')
19
+ .split('\n')
20
+ .map(l => l.trim())
21
+ .filter(l => l && !l.startsWith('#'));
22
+ }
23
+ catch {
24
+ return [];
25
+ }
26
+ }
27
+ /** Check if a path should be ignored (simple .gitignore matching) */
28
+ function isIgnored(relPath, patterns, isDir) {
29
+ const name = basename(relPath);
30
+ // Always skip these
31
+ if (name === '.git' || name === 'node_modules' || name === '.DS_Store')
32
+ return true;
33
+ for (const pat of patterns) {
34
+ // Negation patterns — skip (too complex for simple matching)
35
+ if (pat.startsWith('!'))
36
+ continue;
37
+ const cleanPat = pat.replace(/\/$/, '');
38
+ // Exact directory match: "dist" matches any dir named dist
39
+ if (cleanPat === name && isDir)
40
+ return true;
41
+ // Exact file match: "foo.log" matches any file named foo.log
42
+ if (cleanPat === name && !isDir)
43
+ return true;
44
+ // Glob prefix: "*.log" matches any .log file
45
+ if (cleanPat.startsWith('*.') && !isDir) {
46
+ const ext = cleanPat.slice(1); // ".log"
47
+ if (name.endsWith(ext))
48
+ return true;
49
+ }
50
+ // Path prefix: "src/engine/AI*.ts" — match relative path
51
+ if (cleanPat.includes('/') && !cleanPat.startsWith('/')) {
52
+ // Simple wildcard: replace * with regex .*
53
+ const regex = new RegExp('^' + cleanPat.replace(/\*/g, '.*').replace(/\//g, '\\/') + '$');
54
+ if (regex.test(relPath))
55
+ return true;
56
+ }
57
+ }
58
+ return false;
59
+ }
60
+ // ── Symbol extraction ──
61
+ /** Extract exported symbol names from TypeScript/JavaScript source */
62
+ function extractTsSymbols(source) {
63
+ const symbols = [];
64
+ const seen = new Set();
65
+ const patterns = [
66
+ // export function foo / export async function foo
67
+ /export\s+(?:async\s+)?function\s+(\w+)/g,
68
+ // export class Foo
69
+ /export\s+class\s+(\w+)/g,
70
+ // export interface Foo
71
+ /export\s+interface\s+(\w+)/g,
72
+ // export type Foo
73
+ /export\s+type\s+(\w+)/g,
74
+ // export const FOO / export let foo / export var foo
75
+ /export\s+(?:const|let|var)\s+(\w+)/g,
76
+ // export enum Foo
77
+ /export\s+enum\s+(\w+)/g,
78
+ // export { foo, bar } — named re-exports
79
+ /export\s*\{([^}]+)\}/g,
80
+ // export default class/function Foo
81
+ /export\s+default\s+(?:class|function)\s+(\w+)/g,
82
+ ];
83
+ for (const regex of patterns) {
84
+ let match;
85
+ while ((match = regex.exec(source)) !== null) {
86
+ const captured = match[1];
87
+ // Handle export { foo, bar as baz }
88
+ if (regex.source.includes('\\{')) {
89
+ const names = captured.split(',').map(n => {
90
+ const parts = n.trim().split(/\s+as\s+/);
91
+ return parts[parts.length - 1].trim();
92
+ }).filter(n => n && /^\w+$/.test(n));
93
+ for (const n of names) {
94
+ if (!seen.has(n)) {
95
+ seen.add(n);
96
+ symbols.push(n);
97
+ }
98
+ }
99
+ }
100
+ else if (captured && !seen.has(captured)) {
101
+ seen.add(captured);
102
+ symbols.push(captured);
103
+ }
104
+ }
105
+ }
106
+ return symbols;
107
+ }
108
+ /** Extract class/def names from Python source */
109
+ function extractPySymbols(source) {
110
+ const symbols = [];
111
+ const seen = new Set();
112
+ const patterns = [
113
+ /^class\s+(\w+)/gm,
114
+ /^def\s+(\w+)/gm,
115
+ /^async\s+def\s+(\w+)/gm,
116
+ ];
117
+ for (const regex of patterns) {
118
+ let match;
119
+ while ((match = regex.exec(source)) !== null) {
120
+ const name = match[1];
121
+ if (name && !name.startsWith('_') && !seen.has(name)) {
122
+ seen.add(name);
123
+ symbols.push(name);
124
+ }
125
+ }
126
+ }
127
+ return symbols;
128
+ }
129
+ /** Recursively collect files from a directory */
130
+ function walkDir(dir, rootDir, patterns, maxDepth, maxFiles, depth = 0, entries = []) {
131
+ if (depth > maxDepth || entries.length >= maxFiles)
132
+ return entries;
133
+ let items;
134
+ try {
135
+ items = readdirSync(dir);
136
+ }
137
+ catch {
138
+ return entries;
139
+ }
140
+ // Sort: directories first, then files alphabetically
141
+ const sorted = items.sort((a, b) => {
142
+ try {
143
+ const aDir = statSync(join(dir, a)).isDirectory();
144
+ const bDir = statSync(join(dir, b)).isDirectory();
145
+ if (aDir !== bDir)
146
+ return aDir ? -1 : 1;
147
+ }
148
+ catch { /* ignore stat errors */ }
149
+ return a.localeCompare(b);
150
+ });
151
+ for (const name of sorted) {
152
+ if (entries.length >= maxFiles)
153
+ break;
154
+ const fullPath = join(dir, name);
155
+ const relPath = relative(rootDir, fullPath);
156
+ let stats;
157
+ try {
158
+ stats = statSync(fullPath);
159
+ }
160
+ catch {
161
+ continue;
162
+ }
163
+ if (stats.isDirectory()) {
164
+ if (isIgnored(relPath, patterns, true))
165
+ continue;
166
+ walkDir(fullPath, rootDir, patterns, maxDepth, maxFiles, depth + 1, entries);
167
+ }
168
+ else if (stats.isFile()) {
169
+ if (isIgnored(relPath, patterns, false))
170
+ continue;
171
+ const ext = extname(name).toLowerCase();
172
+ let symbols = [];
173
+ if (['.ts', '.tsx', '.js', '.jsx', '.mts', '.mjs'].includes(ext)) {
174
+ try {
175
+ const source = readFileSync(fullPath, 'utf-8');
176
+ symbols = extractTsSymbols(source);
177
+ }
178
+ catch { /* unreadable */ }
179
+ }
180
+ else if (ext === '.py') {
181
+ try {
182
+ const source = readFileSync(fullPath, 'utf-8');
183
+ symbols = extractPySymbols(source);
184
+ }
185
+ catch { /* unreadable */ }
186
+ }
187
+ entries.push({ relPath, symbols });
188
+ }
189
+ }
190
+ return entries;
191
+ }
192
+ // ── Tree formatting ──
193
+ /** Build a compact tree string from file entries */
194
+ function formatTree(entries, totalFileCount) {
195
+ const lines = [];
196
+ let charCount = 0;
197
+ for (let i = 0; i < entries.length; i++) {
198
+ const { relPath, symbols } = entries[i];
199
+ const parts = relPath.split('/');
200
+ const fileName = parts[parts.length - 1];
201
+ const dirParts = parts.slice(0, -1);
202
+ // Emit directory headers when path changes
203
+ // Check if we need to print a new directory line
204
+ if (i === 0 || dirParts.join('/') !== entries[i - 1].relPath.split('/').slice(0, -1).join('/')) {
205
+ // Find which directories are new compared to previous entry
206
+ const prevParts = i > 0 ? entries[i - 1].relPath.split('/').slice(0, -1) : [];
207
+ let commonDepth = 0;
208
+ while (commonDepth < prevParts.length && commonDepth < dirParts.length && prevParts[commonDepth] === dirParts[commonDepth]) {
209
+ commonDepth++;
210
+ }
211
+ // Print each new directory level
212
+ for (let d = commonDepth; d < dirParts.length; d++) {
213
+ const indent = ' '.repeat(d);
214
+ const dirLine = `${indent}${dirParts[d]}/\n`;
215
+ charCount += dirLine.length;
216
+ if (charCount > MAX_OUTPUT_CHARS) {
217
+ const remaining = totalFileCount - i;
218
+ lines.push(`... and ${remaining} more files`);
219
+ return lines.join('');
220
+ }
221
+ lines.push(dirLine);
222
+ }
223
+ }
224
+ // Format the file line
225
+ const indent = ' '.repeat(dirParts.length);
226
+ let line;
227
+ if (symbols.length > 0) {
228
+ line = `${indent}${fileName}: ${symbols.join(', ')}\n`;
229
+ }
230
+ else {
231
+ line = `${indent}${fileName}\n`;
232
+ }
233
+ charCount += line.length;
234
+ if (charCount > MAX_OUTPUT_CHARS) {
235
+ const remaining = totalFileCount - i;
236
+ lines.push(`... and ${remaining} more files`);
237
+ return lines.join('');
238
+ }
239
+ lines.push(line);
240
+ }
241
+ return lines.join('');
242
+ }
243
+ /** Generate a compact repo map for LLM context */
244
+ export async function generateRepoMap(rootDir, options = {}) {
245
+ const { maxDepth = 8, maxFiles = 500 } = options;
246
+ const patterns = loadGitignorePatterns(rootDir);
247
+ const entries = walkDir(rootDir, rootDir, patterns, maxDepth, maxFiles);
248
+ if (entries.length === 0)
249
+ return '(empty repository)';
250
+ return formatTree(entries, entries.length);
251
+ }
252
+ // ── Cached convenience wrapper ──
253
+ let cachedMap = null;
254
+ let cachedAt = 0;
255
+ let cachedDir = null;
256
+ /** Get repo map with 60s cache. Resolves git root from cwd. */
257
+ export async function getRepoMapForContext(cwd) {
258
+ const dir = cwd || process.cwd();
259
+ // Resolve git root
260
+ let rootDir = dir;
261
+ try {
262
+ rootDir = execSync('git rev-parse --show-toplevel', {
263
+ cwd: dir,
264
+ encoding: 'utf-8',
265
+ stdio: ['pipe', 'pipe', 'pipe'],
266
+ }).trim();
267
+ }
268
+ catch {
269
+ // Not a git repo — use cwd as root
270
+ }
271
+ const now = Date.now();
272
+ if (cachedMap && cachedDir === rootDir && (now - cachedAt) < CACHE_TTL_MS) {
273
+ return cachedMap;
274
+ }
275
+ cachedMap = await generateRepoMap(rootDir);
276
+ cachedAt = now;
277
+ cachedDir = rootDir;
278
+ return cachedMap;
279
+ }
280
+ //# sourceMappingURL=repo-map.js.map