@defai.digital/ax-cli 3.0.2 → 3.1.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 (81) hide show
  1. package/README.md +74 -0
  2. package/dist/agent/llm-agent.d.ts +21 -0
  3. package/dist/agent/llm-agent.js +64 -15
  4. package/dist/agent/llm-agent.js.map +1 -1
  5. package/dist/agent/subagent-orchestrator.js +4 -0
  6. package/dist/agent/subagent-orchestrator.js.map +1 -1
  7. package/dist/commands/mcp.js +10 -6
  8. package/dist/commands/mcp.js.map +1 -1
  9. package/dist/commands/memory.d.ts +1 -0
  10. package/dist/commands/memory.js +285 -1
  11. package/dist/commands/memory.js.map +1 -1
  12. package/dist/hooks/use-enhanced-input.js +3 -1
  13. package/dist/hooks/use-enhanced-input.js.map +1 -1
  14. package/dist/hooks/use-input-handler.js +18 -7
  15. package/dist/hooks/use-input-handler.js.map +1 -1
  16. package/dist/index.js +4 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/llm/client.js +52 -5
  19. package/dist/llm/client.js.map +1 -1
  20. package/dist/llm/tools.js +12 -2
  21. package/dist/llm/tools.js.map +1 -1
  22. package/dist/llm/types.d.ts +93 -1
  23. package/dist/llm/types.js +60 -0
  24. package/dist/llm/types.js.map +1 -1
  25. package/dist/mcp/client.d.ts +1 -1
  26. package/dist/mcp/client.js +8 -3
  27. package/dist/mcp/client.js.map +1 -1
  28. package/dist/memory/context-generator.d.ts +84 -0
  29. package/dist/memory/context-generator.js +537 -0
  30. package/dist/memory/context-generator.js.map +1 -0
  31. package/dist/memory/context-injector.d.ts +83 -0
  32. package/dist/memory/context-injector.js +142 -0
  33. package/dist/memory/context-injector.js.map +1 -0
  34. package/dist/memory/context-store.d.ts +76 -0
  35. package/dist/memory/context-store.js +212 -0
  36. package/dist/memory/context-store.js.map +1 -0
  37. package/dist/memory/index.d.ts +42 -0
  38. package/dist/memory/index.js +47 -0
  39. package/dist/memory/index.js.map +1 -0
  40. package/dist/memory/schemas.d.ts +316 -0
  41. package/dist/memory/schemas.js +103 -0
  42. package/dist/memory/schemas.js.map +1 -0
  43. package/dist/memory/stats-collector.d.ts +73 -0
  44. package/dist/memory/stats-collector.js +170 -0
  45. package/dist/memory/stats-collector.js.map +1 -0
  46. package/dist/memory/types.d.ts +175 -0
  47. package/dist/memory/types.js +70 -0
  48. package/dist/memory/types.js.map +1 -0
  49. package/dist/planner/task-planner.js +19 -2
  50. package/dist/planner/task-planner.js.map +1 -1
  51. package/dist/schemas/api-schemas.js +1 -1
  52. package/dist/schemas/api-schemas.js.map +1 -1
  53. package/dist/schemas/index.d.ts +4 -4
  54. package/dist/schemas/settings-schemas.d.ts +14 -0
  55. package/dist/schemas/settings-schemas.js +10 -0
  56. package/dist/schemas/settings-schemas.js.map +1 -1
  57. package/dist/tools/bash.js +28 -7
  58. package/dist/tools/bash.js.map +1 -1
  59. package/dist/ui/components/chat-history.js +4 -2
  60. package/dist/ui/components/chat-history.js.map +1 -1
  61. package/dist/ui/components/chat-interface.js +9 -4
  62. package/dist/ui/components/chat-interface.js.map +1 -1
  63. package/dist/ui/components/toast-notification.d.ts +3 -0
  64. package/dist/ui/components/toast-notification.js +18 -12
  65. package/dist/ui/components/toast-notification.js.map +1 -1
  66. package/dist/utils/background-task-manager.js +31 -9
  67. package/dist/utils/background-task-manager.js.map +1 -1
  68. package/dist/utils/custom-instructions.js +9 -1
  69. package/dist/utils/custom-instructions.js.map +1 -1
  70. package/dist/utils/prompt-builder.d.ts +4 -0
  71. package/dist/utils/prompt-builder.js +15 -0
  72. package/dist/utils/prompt-builder.js.map +1 -1
  73. package/dist/utils/settings-manager.d.ts +16 -1
  74. package/dist/utils/settings-manager.js +49 -0
  75. package/dist/utils/settings-manager.js.map +1 -1
  76. package/dist/utils/token-counter.js +4 -0
  77. package/dist/utils/token-counter.js.map +1 -1
  78. package/dist/utils/usage-tracker.d.ts +19 -0
  79. package/dist/utils/usage-tracker.js +22 -1
  80. package/dist/utils/usage-tracker.js.map +1 -1
  81. package/package.json +1 -1
@@ -0,0 +1,537 @@
1
+ /**
2
+ * Context Generator - Scans project and generates context for GLM caching
3
+ *
4
+ * Produces a standardized context string that z.ai can automatically cache
5
+ * when used as a consistent system prompt prefix.
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import * as crypto from 'crypto';
10
+ import { MEMORY_DEFAULTS, DEFAULT_IGNORE_PATTERNS, DEFAULT_INCLUDE_FILES, DEFAULT_SCAN_DIRECTORIES, } from './types.js';
11
+ import { createTokenCounter } from '../utils/token-counter.js';
12
+ import { ProjectAnalyzer } from '../utils/project-analyzer.js';
13
+ /**
14
+ * ContextGenerator - Creates project memory context
15
+ */
16
+ export class ContextGenerator {
17
+ projectRoot;
18
+ tokenCounter;
19
+ warnings = [];
20
+ constructor(projectRoot = process.cwd()) {
21
+ this.projectRoot = projectRoot;
22
+ this.tokenCounter = createTokenCounter();
23
+ }
24
+ /**
25
+ * Generate project memory from scanning the codebase
26
+ */
27
+ async generate(options = {}) {
28
+ const { depth = MEMORY_DEFAULTS.DEPTH, maxTokens = MEMORY_DEFAULTS.MAX_TOKENS, verbose = false, } = options;
29
+ this.warnings = [];
30
+ try {
31
+ // Build source configuration
32
+ const source = this.buildSourceConfig(depth);
33
+ if (verbose) {
34
+ console.log(` Scanning ${source.directories.length} directories...`);
35
+ }
36
+ // Generate each section
37
+ const sections = {};
38
+ // 1. Directory structure
39
+ if (verbose)
40
+ console.log(' Generating directory structure...');
41
+ const structure = this.generateStructure(source.directories);
42
+ sections.structure = {
43
+ content: structure,
44
+ tokens: this.tokenCounter.countTokens(structure),
45
+ };
46
+ // 2. README content
47
+ if (verbose)
48
+ console.log(' Reading README...');
49
+ const readme = this.generateReadmeSummary();
50
+ if (readme) {
51
+ sections.readme = {
52
+ content: readme,
53
+ tokens: this.tokenCounter.countTokens(readme),
54
+ };
55
+ }
56
+ // 3. Config files summary
57
+ if (verbose)
58
+ console.log(' Analyzing config files...');
59
+ const config = this.generateConfigSummary(source.files);
60
+ if (config) {
61
+ sections.config = {
62
+ content: config,
63
+ tokens: this.tokenCounter.countTokens(config),
64
+ };
65
+ }
66
+ // 4. Architecture patterns
67
+ if (verbose)
68
+ console.log(' Detecting architecture patterns...');
69
+ const patterns = await this.generatePatternsSummary();
70
+ if (patterns) {
71
+ sections.patterns = {
72
+ content: patterns,
73
+ tokens: this.tokenCounter.countTokens(patterns),
74
+ };
75
+ }
76
+ // Assemble final context
77
+ const formatted = this.assembleContext(sections, maxTokens);
78
+ const tokenEstimate = this.tokenCounter.countTokens(formatted);
79
+ // Calculate content hash
80
+ const contentHash = this.calculateHash(formatted);
81
+ // Build section token counts
82
+ const sectionTokens = {
83
+ structure: sections.structure?.tokens,
84
+ readme: sections.readme?.tokens,
85
+ config: sections.config?.tokens,
86
+ patterns: sections.patterns?.tokens,
87
+ };
88
+ // Create memory object
89
+ const memory = {
90
+ version: 1,
91
+ created_at: new Date().toISOString(),
92
+ updated_at: new Date().toISOString(),
93
+ project_root: this.projectRoot,
94
+ content_hash: contentHash,
95
+ source,
96
+ context: {
97
+ formatted,
98
+ token_estimate: tokenEstimate,
99
+ sections: sectionTokens,
100
+ },
101
+ };
102
+ return {
103
+ success: true,
104
+ memory,
105
+ warnings: this.warnings.length > 0 ? this.warnings : undefined,
106
+ };
107
+ }
108
+ catch (error) {
109
+ return {
110
+ success: false,
111
+ error: error instanceof Error ? error.message : 'Unknown generation error',
112
+ warnings: this.warnings.length > 0 ? this.warnings : undefined,
113
+ };
114
+ }
115
+ }
116
+ /**
117
+ * Build source configuration based on project structure
118
+ */
119
+ buildSourceConfig(depth) {
120
+ // Find existing directories from defaults
121
+ const directories = [];
122
+ for (const defaultDir of DEFAULT_SCAN_DIRECTORIES) {
123
+ const fullPath = path.join(this.projectRoot, defaultDir.path);
124
+ if (fs.existsSync(fullPath) && fs.statSync(fullPath).isDirectory()) {
125
+ directories.push({
126
+ path: defaultDir.path,
127
+ max_depth: Math.min(defaultDir.max_depth, depth),
128
+ });
129
+ }
130
+ }
131
+ // If no default directories found, scan from root with limited depth
132
+ if (directories.length === 0) {
133
+ directories.push({ path: '.', max_depth: Math.min(2, depth) });
134
+ }
135
+ // Find existing files from defaults
136
+ const files = [];
137
+ for (const defaultFile of DEFAULT_INCLUDE_FILES) {
138
+ const fullPath = path.join(this.projectRoot, defaultFile);
139
+ if (fs.existsSync(fullPath)) {
140
+ files.push(defaultFile);
141
+ }
142
+ }
143
+ return {
144
+ directories,
145
+ files,
146
+ ignore: [...DEFAULT_IGNORE_PATTERNS],
147
+ };
148
+ }
149
+ /**
150
+ * Generate directory tree structure
151
+ */
152
+ generateStructure(directories) {
153
+ const lines = ['## Directory Structure', '```'];
154
+ for (const dir of directories) {
155
+ const tree = this.buildTree(dir.path, dir.max_depth);
156
+ if (tree.length > 0) {
157
+ if (dir.path !== '.') {
158
+ lines.push(`${dir.path}/`);
159
+ }
160
+ lines.push(...tree);
161
+ }
162
+ }
163
+ lines.push('```');
164
+ return lines.join('\n');
165
+ }
166
+ /**
167
+ * Recursively build tree representation
168
+ */
169
+ buildTree(dirPath, maxDepth, prefix = '', currentDepth = 0) {
170
+ if (currentDepth >= maxDepth)
171
+ return [];
172
+ const fullPath = path.join(this.projectRoot, dirPath);
173
+ if (!fs.existsSync(fullPath))
174
+ return [];
175
+ let entries;
176
+ try {
177
+ entries = fs.readdirSync(fullPath, { withFileTypes: true });
178
+ }
179
+ catch {
180
+ return [];
181
+ }
182
+ const lines = [];
183
+ // Filter and sort entries
184
+ const filtered = entries
185
+ .filter((e) => !this.shouldIgnore(e.name))
186
+ .sort((a, b) => {
187
+ // Directories first
188
+ if (a.isDirectory() && !b.isDirectory())
189
+ return -1;
190
+ if (!a.isDirectory() && b.isDirectory())
191
+ return 1;
192
+ return a.name.localeCompare(b.name);
193
+ });
194
+ // Limit entries per directory to avoid huge trees
195
+ const maxEntries = 30;
196
+ const limited = filtered.slice(0, maxEntries);
197
+ const hasMore = filtered.length > maxEntries;
198
+ limited.forEach((entry, index) => {
199
+ const isLast = index === limited.length - 1 && !hasMore;
200
+ const connector = isLast ? '└── ' : '├── ';
201
+ const childPrefix = isLast ? ' ' : '│ ';
202
+ const displayName = entry.name + (entry.isDirectory() ? '/' : '');
203
+ lines.push(`${prefix}${connector}${displayName}`);
204
+ if (entry.isDirectory() && currentDepth + 1 < maxDepth) {
205
+ const childPath = path.join(dirPath, entry.name);
206
+ const childLines = this.buildTree(childPath, maxDepth, prefix + childPrefix, currentDepth + 1);
207
+ lines.push(...childLines);
208
+ }
209
+ });
210
+ if (hasMore) {
211
+ lines.push(`${prefix}└── ... (${filtered.length - maxEntries} more)`);
212
+ }
213
+ return lines;
214
+ }
215
+ /**
216
+ * Check if a file/directory should be ignored
217
+ */
218
+ shouldIgnore(name) {
219
+ for (const pattern of DEFAULT_IGNORE_PATTERNS) {
220
+ if (pattern.startsWith('*.')) {
221
+ // Extension pattern
222
+ if (name.endsWith(pattern.slice(1)))
223
+ return true;
224
+ }
225
+ else if (name === pattern) {
226
+ return true;
227
+ }
228
+ }
229
+ return false;
230
+ }
231
+ /**
232
+ * Generate README summary
233
+ */
234
+ generateReadmeSummary() {
235
+ const readmePaths = ['README.md', 'readme.md', 'Readme.md', 'README.rst'];
236
+ for (const readmePath of readmePaths) {
237
+ const fullPath = path.join(this.projectRoot, readmePath);
238
+ if (fs.existsSync(fullPath)) {
239
+ try {
240
+ const content = fs.readFileSync(fullPath, 'utf-8');
241
+ const maxSize = MEMORY_DEFAULTS.MAX_FILE_SIZE;
242
+ const truncated = content.slice(0, maxSize);
243
+ const isTruncated = content.length > maxSize;
244
+ const lines = [
245
+ '## README Summary',
246
+ '',
247
+ truncated.trim(),
248
+ ];
249
+ if (isTruncated) {
250
+ lines.push('', '[...truncated]');
251
+ }
252
+ return lines.join('\n');
253
+ }
254
+ catch (error) {
255
+ this.warnings.push(`Failed to read ${readmePath}: ${error}`);
256
+ }
257
+ }
258
+ }
259
+ return null;
260
+ }
261
+ /**
262
+ * Generate config files summary
263
+ */
264
+ generateConfigSummary(files) {
265
+ const summaries = ['## Key Configuration'];
266
+ let hasContent = false;
267
+ for (const file of files) {
268
+ const fullPath = path.join(this.projectRoot, file);
269
+ if (!fs.existsSync(fullPath))
270
+ continue;
271
+ try {
272
+ const content = fs.readFileSync(fullPath, 'utf-8');
273
+ const summary = this.summarizeConfigFile(file, content);
274
+ if (summary) {
275
+ summaries.push('', `### ${file}`, '', summary);
276
+ hasContent = true;
277
+ }
278
+ }
279
+ catch (error) {
280
+ this.warnings.push(`Failed to read ${file}: ${error}`);
281
+ }
282
+ }
283
+ return hasContent ? summaries.join('\n') : null;
284
+ }
285
+ /**
286
+ * Summarize a config file based on its type
287
+ */
288
+ summarizeConfigFile(filename, content) {
289
+ const basename = path.basename(filename);
290
+ try {
291
+ if (basename === 'package.json') {
292
+ return this.summarizePackageJson(content);
293
+ }
294
+ if (basename === 'tsconfig.json') {
295
+ return this.summarizeTsConfig(content);
296
+ }
297
+ if (basename === 'pyproject.toml') {
298
+ return this.summarizePyproject(content);
299
+ }
300
+ if (basename === 'Cargo.toml') {
301
+ return this.summarizeCargoToml(content);
302
+ }
303
+ if (basename === 'go.mod') {
304
+ return this.summarizeGoMod(content);
305
+ }
306
+ if (basename.startsWith('docker-compose') || basename === 'Dockerfile') {
307
+ // Just show first few lines
308
+ const lines = content.split('\n').slice(0, 15);
309
+ return '```\n' + lines.join('\n') + '\n```';
310
+ }
311
+ if (basename === 'CUSTOM.md') {
312
+ // Show first portion of custom instructions
313
+ const truncated = content.slice(0, 1000);
314
+ return truncated + (content.length > 1000 ? '\n[...truncated]' : '');
315
+ }
316
+ // Default: show first 500 chars
317
+ const maxLen = 500;
318
+ const truncated = content.slice(0, maxLen);
319
+ return '```\n' + truncated + (content.length > maxLen ? '\n...' : '') + '\n```';
320
+ }
321
+ catch {
322
+ return null;
323
+ }
324
+ }
325
+ /**
326
+ * Summarize package.json
327
+ */
328
+ summarizePackageJson(content) {
329
+ const pkg = JSON.parse(content);
330
+ const parts = [];
331
+ if (pkg.name)
332
+ parts.push(`- **Name**: ${pkg.name}`);
333
+ if (pkg.version)
334
+ parts.push(`- **Version**: ${pkg.version}`);
335
+ if (pkg.description)
336
+ parts.push(`- **Description**: ${pkg.description}`);
337
+ if (pkg.type)
338
+ parts.push(`- **Type**: ${pkg.type}`);
339
+ if (pkg.bin)
340
+ parts.push(`- **CLI**: Yes`);
341
+ if (pkg.dependencies) {
342
+ const deps = Object.keys(pkg.dependencies);
343
+ const display = deps.slice(0, 10).join(', ');
344
+ const more = deps.length > 10 ? ` (+${deps.length - 10} more)` : '';
345
+ parts.push(`- **Dependencies**: ${display}${more}`);
346
+ }
347
+ if (pkg.devDependencies) {
348
+ const deps = Object.keys(pkg.devDependencies);
349
+ const display = deps.slice(0, 8).join(', ');
350
+ const more = deps.length > 8 ? ` (+${deps.length - 8} more)` : '';
351
+ parts.push(`- **Dev Dependencies**: ${display}${more}`);
352
+ }
353
+ if (pkg.scripts) {
354
+ const scripts = Object.keys(pkg.scripts).slice(0, 6);
355
+ parts.push(`- **Scripts**: ${scripts.join(', ')}`);
356
+ }
357
+ return parts.join('\n');
358
+ }
359
+ /**
360
+ * Summarize tsconfig.json
361
+ */
362
+ summarizeTsConfig(content) {
363
+ const config = JSON.parse(content);
364
+ const opts = config.compilerOptions || {};
365
+ const parts = [];
366
+ if (opts.target)
367
+ parts.push(`- **Target**: ${opts.target}`);
368
+ if (opts.module)
369
+ parts.push(`- **Module**: ${opts.module}`);
370
+ if (opts.moduleResolution)
371
+ parts.push(`- **Module Resolution**: ${opts.moduleResolution}`);
372
+ if (opts.strict !== undefined)
373
+ parts.push(`- **Strict**: ${opts.strict}`);
374
+ if (opts.outDir)
375
+ parts.push(`- **Output**: ${opts.outDir}`);
376
+ return parts.join('\n') || '(minimal configuration)';
377
+ }
378
+ /**
379
+ * Summarize pyproject.toml (basic extraction)
380
+ */
381
+ summarizePyproject(content) {
382
+ const parts = [];
383
+ // Simple regex extraction for common fields
384
+ const nameMatch = content.match(/name\s*=\s*"([^"]+)"/);
385
+ if (nameMatch)
386
+ parts.push(`- **Name**: ${nameMatch[1]}`);
387
+ const versionMatch = content.match(/version\s*=\s*"([^"]+)"/);
388
+ if (versionMatch)
389
+ parts.push(`- **Version**: ${versionMatch[1]}`);
390
+ const pythonMatch = content.match(/python\s*=\s*"([^"]+)"/);
391
+ if (pythonMatch)
392
+ parts.push(`- **Python**: ${pythonMatch[1]}`);
393
+ return parts.join('\n') || content.slice(0, 300);
394
+ }
395
+ /**
396
+ * Summarize Cargo.toml (basic extraction)
397
+ */
398
+ summarizeCargoToml(content) {
399
+ const parts = [];
400
+ const nameMatch = content.match(/name\s*=\s*"([^"]+)"/);
401
+ if (nameMatch)
402
+ parts.push(`- **Name**: ${nameMatch[1]}`);
403
+ const versionMatch = content.match(/version\s*=\s*"([^"]+)"/);
404
+ if (versionMatch)
405
+ parts.push(`- **Version**: ${versionMatch[1]}`);
406
+ const editionMatch = content.match(/edition\s*=\s*"([^"]+)"/);
407
+ if (editionMatch)
408
+ parts.push(`- **Edition**: ${editionMatch[1]}`);
409
+ return parts.join('\n') || content.slice(0, 300);
410
+ }
411
+ /**
412
+ * Summarize go.mod
413
+ */
414
+ summarizeGoMod(content) {
415
+ const parts = [];
416
+ const moduleMatch = content.match(/module\s+(\S+)/);
417
+ if (moduleMatch)
418
+ parts.push(`- **Module**: ${moduleMatch[1]}`);
419
+ const goMatch = content.match(/go\s+(\S+)/);
420
+ if (goMatch)
421
+ parts.push(`- **Go Version**: ${goMatch[1]}`);
422
+ return parts.join('\n') || content.slice(0, 300);
423
+ }
424
+ /**
425
+ * Generate architecture patterns summary using ProjectAnalyzer
426
+ */
427
+ async generatePatternsSummary() {
428
+ try {
429
+ const analyzer = new ProjectAnalyzer(this.projectRoot);
430
+ const result = await analyzer.analyze();
431
+ if (!result.success || !result.projectInfo) {
432
+ return null;
433
+ }
434
+ const info = result.projectInfo;
435
+ const lines = ['## Architecture Patterns'];
436
+ if (info.projectType) {
437
+ lines.push(`- **Project Type**: ${info.projectType}`);
438
+ }
439
+ if (info.primaryLanguage) {
440
+ lines.push(`- **Primary Language**: ${info.primaryLanguage}`);
441
+ }
442
+ if (info.techStack && info.techStack.length > 0) {
443
+ lines.push(`- **Tech Stack**: ${info.techStack.join(', ')}`);
444
+ }
445
+ if (info.packageManager) {
446
+ lines.push(`- **Package Manager**: ${info.packageManager}`);
447
+ }
448
+ if (info.entryPoint) {
449
+ lines.push(`- **Entry Point**: ${info.entryPoint}`);
450
+ }
451
+ // Add conventions
452
+ if (info.conventions) {
453
+ const conv = info.conventions;
454
+ if (conv.moduleSystem)
455
+ lines.push(`- **Module System**: ${conv.moduleSystem.toUpperCase()}`);
456
+ if (conv.testFramework)
457
+ lines.push(`- **Test Framework**: ${conv.testFramework}`);
458
+ if (conv.validation)
459
+ lines.push(`- **Validation**: ${conv.validation}`);
460
+ if (conv.linter)
461
+ lines.push(`- **Linter**: ${conv.linter}`);
462
+ }
463
+ // Add directories
464
+ if (info.directories) {
465
+ const dirs = info.directories;
466
+ const dirList = [];
467
+ if (dirs.source)
468
+ dirList.push(`source: ${dirs.source}`);
469
+ if (dirs.tests)
470
+ dirList.push(`tests: ${dirs.tests}`);
471
+ if (dirList.length > 0) {
472
+ lines.push(`- **Key Directories**: ${dirList.join(', ')}`);
473
+ }
474
+ }
475
+ return lines.length > 1 ? lines.join('\n') : null;
476
+ }
477
+ catch (error) {
478
+ this.warnings.push(`Pattern analysis failed: ${error}`);
479
+ return null;
480
+ }
481
+ }
482
+ /**
483
+ * Assemble final context from sections, respecting token limit
484
+ */
485
+ assembleContext(sections, maxTokens) {
486
+ const projectName = path.basename(this.projectRoot);
487
+ const header = `# Project: ${projectName}\n\n`;
488
+ let currentTokens = this.tokenCounter.countTokens(header);
489
+ const parts = [header];
490
+ // Priority order for sections
491
+ const priority = ['patterns', 'structure', 'config', 'readme'];
492
+ for (const key of priority) {
493
+ const section = sections[key];
494
+ if (!section)
495
+ continue;
496
+ if (currentTokens + section.tokens <= maxTokens) {
497
+ parts.push(section.content, '\n');
498
+ currentTokens += section.tokens;
499
+ }
500
+ else {
501
+ // Try to fit partial content
502
+ const remaining = maxTokens - currentTokens - 50; // Buffer for truncation note
503
+ if (remaining > 200) {
504
+ const truncated = this.truncateToTokens(section.content, remaining);
505
+ parts.push(truncated, '\n[...truncated due to token limit]\n');
506
+ this.warnings.push(`Section '${key}' was truncated to fit token limit`);
507
+ }
508
+ break; // Stop adding more sections
509
+ }
510
+ }
511
+ return parts.join('\n').trim();
512
+ }
513
+ /**
514
+ * Truncate text to approximate token count
515
+ */
516
+ truncateToTokens(text, maxTokens) {
517
+ // Rough estimate: ~4 chars per token
518
+ const estimatedChars = maxTokens * 4;
519
+ if (text.length <= estimatedChars)
520
+ return text;
521
+ // Find a good break point (end of line)
522
+ const truncated = text.slice(0, estimatedChars);
523
+ const lastNewline = truncated.lastIndexOf('\n');
524
+ if (lastNewline > estimatedChars * 0.8) {
525
+ return truncated.slice(0, lastNewline);
526
+ }
527
+ return truncated;
528
+ }
529
+ /**
530
+ * Calculate SHA-256 hash of content
531
+ */
532
+ calculateHash(content) {
533
+ const hash = crypto.createHash('sha256').update(content).digest('hex');
534
+ return `sha256:${hash}`;
535
+ }
536
+ }
537
+ //# sourceMappingURL=context-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-generator.js","sourceRoot":"","sources":["../../src/memory/context-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Context Injector - Injects project memory into system prompts
3
+ *
4
+ * Handles loading and injection of memory context as a prefix
5
+ * to enable z.ai automatic caching of repeated content.
6
+ */
7
+ import type { ProjectMemory } from './types.js';
8
+ /**
9
+ * Memory metadata for quick access without loading full context
10
+ */
11
+ export interface MemoryMetadata {
12
+ exists: boolean;
13
+ tokenEstimate?: number;
14
+ updatedAt?: string;
15
+ contentHash?: string;
16
+ usageCount?: number;
17
+ }
18
+ /**
19
+ * ContextInjector - Manages memory context injection
20
+ */
21
+ export declare class ContextInjector {
22
+ private store;
23
+ private cachedMemory;
24
+ private enabled;
25
+ constructor(projectRoot?: string);
26
+ /**
27
+ * Enable or disable memory injection
28
+ */
29
+ setEnabled(enabled: boolean): void;
30
+ /**
31
+ * Check if memory injection is enabled
32
+ */
33
+ isEnabled(): boolean;
34
+ /**
35
+ * Get project memory context string
36
+ * Returns null if no memory exists or injection is disabled
37
+ */
38
+ getContext(): string | null;
39
+ /**
40
+ * Inject memory context into a system prompt
41
+ *
42
+ * Memory context is prepended as a prefix to enable z.ai
43
+ * automatic caching when the same prefix is used across requests.
44
+ *
45
+ * @param basePrompt - The base system prompt
46
+ * @returns Modified prompt with memory context prefix
47
+ */
48
+ injectIntoPrompt(basePrompt: string): string;
49
+ /**
50
+ * Check if project memory exists
51
+ */
52
+ hasMemory(): boolean;
53
+ /**
54
+ * Get memory metadata without loading full context
55
+ */
56
+ getMetadata(): MemoryMetadata;
57
+ /**
58
+ * Get the full memory object (loads from disk if not cached)
59
+ */
60
+ getMemory(): ProjectMemory | null;
61
+ /**
62
+ * Clear the cached memory
63
+ * Call this when memory is updated externally
64
+ */
65
+ clearCache(): void;
66
+ /**
67
+ * Get estimated token count of the memory context
68
+ */
69
+ getTokenEstimate(): number;
70
+ /**
71
+ * Format a reminder message about missing memory
72
+ * Returns null if memory exists
73
+ */
74
+ getMissingMemoryHint(): string | null;
75
+ }
76
+ /**
77
+ * Get the default context injector instance
78
+ */
79
+ export declare function getContextInjector(projectRoot?: string): ContextInjector;
80
+ /**
81
+ * Reset the default injector (mainly for testing)
82
+ */
83
+ export declare function resetDefaultInjector(): void;