@staticpayload/zai-code 1.0.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 (100) hide show
  1. package/LICENSE +678 -0
  2. package/README.md +115 -0
  3. package/bin/zcode +3 -0
  4. package/dist/apply.d.ts +44 -0
  5. package/dist/apply.d.ts.map +1 -0
  6. package/dist/apply.js +307 -0
  7. package/dist/apply.js.map +1 -0
  8. package/dist/auth.d.ts +9 -0
  9. package/dist/auth.d.ts.map +1 -0
  10. package/dist/auth.js +170 -0
  11. package/dist/auth.js.map +1 -0
  12. package/dist/cli.d.ts +3 -0
  13. package/dist/cli.d.ts.map +1 -0
  14. package/dist/cli.js +179 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/commands.d.ts +15 -0
  17. package/dist/commands.d.ts.map +1 -0
  18. package/dist/commands.js +560 -0
  19. package/dist/commands.js.map +1 -0
  20. package/dist/config.d.ts +9 -0
  21. package/dist/config.d.ts.map +1 -0
  22. package/dist/config.js +97 -0
  23. package/dist/config.js.map +1 -0
  24. package/dist/context/context_builder.d.ts +29 -0
  25. package/dist/context/context_builder.d.ts.map +1 -0
  26. package/dist/context/context_builder.js +307 -0
  27. package/dist/context/context_builder.js.map +1 -0
  28. package/dist/context/project_memory.d.ts +14 -0
  29. package/dist/context/project_memory.d.ts.map +1 -0
  30. package/dist/context/project_memory.js +142 -0
  31. package/dist/context/project_memory.js.map +1 -0
  32. package/dist/doctor.d.ts +2 -0
  33. package/dist/doctor.d.ts.map +1 -0
  34. package/dist/doctor.js +3 -0
  35. package/dist/doctor.js.map +1 -0
  36. package/dist/git.d.ts +10 -0
  37. package/dist/git.d.ts.map +1 -0
  38. package/dist/git.js +90 -0
  39. package/dist/git.js.map +1 -0
  40. package/dist/history.d.ts +14 -0
  41. package/dist/history.d.ts.map +1 -0
  42. package/dist/history.js +103 -0
  43. package/dist/history.js.map +1 -0
  44. package/dist/interactive.d.ts +6 -0
  45. package/dist/interactive.d.ts.map +1 -0
  46. package/dist/interactive.js +83 -0
  47. package/dist/interactive.js.map +1 -0
  48. package/dist/orchestrator.d.ts +11 -0
  49. package/dist/orchestrator.d.ts.map +1 -0
  50. package/dist/orchestrator.js +135 -0
  51. package/dist/orchestrator.js.map +1 -0
  52. package/dist/planner.d.ts +22 -0
  53. package/dist/planner.d.ts.map +1 -0
  54. package/dist/planner.js +259 -0
  55. package/dist/planner.js.map +1 -0
  56. package/dist/profiles.d.ts +16 -0
  57. package/dist/profiles.d.ts.map +1 -0
  58. package/dist/profiles.js +80 -0
  59. package/dist/profiles.js.map +1 -0
  60. package/dist/rollback.d.ts +27 -0
  61. package/dist/rollback.d.ts.map +1 -0
  62. package/dist/rollback.js +154 -0
  63. package/dist/rollback.js.map +1 -0
  64. package/dist/runtime.d.ts +131 -0
  65. package/dist/runtime.d.ts.map +1 -0
  66. package/dist/runtime.js +374 -0
  67. package/dist/runtime.js.map +1 -0
  68. package/dist/session.d.ts +95 -0
  69. package/dist/session.d.ts.map +1 -0
  70. package/dist/session.js +174 -0
  71. package/dist/session.js.map +1 -0
  72. package/dist/settings.d.ts +41 -0
  73. package/dist/settings.d.ts.map +1 -0
  74. package/dist/settings.js +225 -0
  75. package/dist/settings.js.map +1 -0
  76. package/dist/settings_menu.d.ts +2 -0
  77. package/dist/settings_menu.d.ts.map +1 -0
  78. package/dist/settings_menu.js +265 -0
  79. package/dist/settings_menu.js.map +1 -0
  80. package/dist/shell.d.ts +18 -0
  81. package/dist/shell.d.ts.map +1 -0
  82. package/dist/shell.js +128 -0
  83. package/dist/shell.js.map +1 -0
  84. package/dist/task_runner.d.ts +22 -0
  85. package/dist/task_runner.d.ts.map +1 -0
  86. package/dist/task_runner.js +230 -0
  87. package/dist/task_runner.js.map +1 -0
  88. package/dist/ui.d.ts +15 -0
  89. package/dist/ui.d.ts.map +1 -0
  90. package/dist/ui.js +160 -0
  91. package/dist/ui.js.map +1 -0
  92. package/dist/workspace.d.ts +17 -0
  93. package/dist/workspace.d.ts.map +1 -0
  94. package/dist/workspace.js +134 -0
  95. package/dist/workspace.js.map +1 -0
  96. package/dist/workspace_model.d.ts +45 -0
  97. package/dist/workspace_model.d.ts.map +1 -0
  98. package/dist/workspace_model.js +253 -0
  99. package/dist/workspace_model.js.map +1 -0
  100. package/package.json +45 -0
package/dist/config.js ADDED
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.STATE_PATH = exports.CONFIG_PATH = exports.CONFIG_DIR = void 0;
37
+ exports.ensureConfigDir = ensureConfigDir;
38
+ exports.loadConfig = loadConfig;
39
+ exports.saveConfig = saveConfig;
40
+ exports.loadState = loadState;
41
+ exports.saveState = saveState;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const os = __importStar(require("os"));
45
+ exports.CONFIG_DIR = path.join(os.homedir(), '.zai');
46
+ exports.CONFIG_PATH = path.join(exports.CONFIG_DIR, 'config.json');
47
+ exports.STATE_PATH = path.join(exports.CONFIG_DIR, 'state.json');
48
+ const DEFAULT_CONFIG = {
49
+ api: {
50
+ baseUrl: 'https://api.z.ai/api/paas/v4/',
51
+ },
52
+ };
53
+ const DEFAULT_STATE = {
54
+ initialized: false,
55
+ };
56
+ function ensureConfigDir() {
57
+ if (!fs.existsSync(exports.CONFIG_DIR)) {
58
+ fs.mkdirSync(exports.CONFIG_DIR, { mode: 0o755 });
59
+ }
60
+ }
61
+ function loadConfig() {
62
+ ensureConfigDir();
63
+ if (!fs.existsSync(exports.CONFIG_PATH)) {
64
+ saveConfig(DEFAULT_CONFIG);
65
+ return { ...DEFAULT_CONFIG };
66
+ }
67
+ try {
68
+ const content = fs.readFileSync(exports.CONFIG_PATH, 'utf-8');
69
+ return JSON.parse(content);
70
+ }
71
+ catch (error) {
72
+ return { ...DEFAULT_CONFIG };
73
+ }
74
+ }
75
+ function saveConfig(config) {
76
+ ensureConfigDir();
77
+ fs.writeFileSync(exports.CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8');
78
+ }
79
+ function loadState() {
80
+ ensureConfigDir();
81
+ if (!fs.existsSync(exports.STATE_PATH)) {
82
+ saveState(DEFAULT_STATE);
83
+ return { ...DEFAULT_STATE };
84
+ }
85
+ try {
86
+ const content = fs.readFileSync(exports.STATE_PATH, 'utf-8');
87
+ return JSON.parse(content);
88
+ }
89
+ catch (error) {
90
+ return { ...DEFAULT_STATE };
91
+ }
92
+ }
93
+ function saveState(state) {
94
+ ensureConfigDir();
95
+ fs.writeFileSync(exports.STATE_PATH, JSON.stringify(state, null, 2), 'utf-8');
96
+ }
97
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,0CAIC;AAED,gCAYC;AAED,gCAGC;AAED,8BAYC;AAED,8BAGC;AA5DD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEZ,QAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7C,QAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,aAAa,CAAC,CAAC;AACnD,QAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,YAAY,CAAC,CAAC;AAE9D,MAAM,cAAc,GAAG;IACrB,GAAG,EAAE;QACH,OAAO,EAAE,+BAA+B;KACzC;CACF,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,SAAgB,eAAe;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,kBAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAgB,UAAU;IACxB,eAAe,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,mBAAW,CAAC,EAAE,CAAC;QAChC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC3B,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAW,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,MAA+B;IACxD,eAAe,EAAE,CAAC;IAClB,EAAE,CAAC,aAAa,CAAC,mBAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED,SAAgB,SAAS;IACvB,eAAe,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAU,CAAC,EAAE,CAAC;QAC/B,SAAS,CAAC,aAAa,CAAC,CAAC;QACzB,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAU,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAC,KAA8B;IACtD,eAAe,EAAE,CAAC;IAClB,EAAE,CAAC,aAAa,CAAC,kBAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,29 @@
1
+ declare const MAX_CONTEXT_TOKENS = 50000;
2
+ declare const MAX_FILE_SIZE = 50000;
3
+ declare const MAX_FILES = 50;
4
+ export interface FileScore {
5
+ path: string;
6
+ score: number;
7
+ size: number;
8
+ extension: string;
9
+ }
10
+ export interface ContextResult {
11
+ files: Array<{
12
+ path: string;
13
+ content: string;
14
+ truncated: boolean;
15
+ }>;
16
+ totalTokens: number;
17
+ fileCount: number;
18
+ truncatedCount: number;
19
+ }
20
+ export declare function indexWorkspace(rootPath: string): FileScore[];
21
+ export declare function scoreFileRelevance(file: FileScore, intent: string, intentType: string): number;
22
+ export declare function summarizeFile(content: string, maxChars: number): {
23
+ summary: string;
24
+ truncated: boolean;
25
+ };
26
+ export declare function buildContext(rootPath: string, intent: string, intentType: string, additionalFiles?: string[]): ContextResult;
27
+ export declare function formatContextForModel(context: ContextResult): string;
28
+ export { MAX_CONTEXT_TOKENS, MAX_FILE_SIZE, MAX_FILES };
29
+ //# sourceMappingURL=context_builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context_builder.d.ts","sourceRoot":"","sources":["../../src/context/context_builder.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,kBAAkB,QAAQ,CAAC;AACjC,QAAA,MAAM,aAAa,QAAQ,CAAC;AAC5B,QAAA,MAAM,SAAS,KAAK,CAAC;AAIrB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AA6DD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAkD5D;AAGD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,MAAM,CA+CR;AAGD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAexG;AAGD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,eAAe,GAAE,MAAM,EAAO,GAC7B,aAAa,CAkFf;AAGD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAkBpE;AAGD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MAX_FILES = exports.MAX_FILE_SIZE = exports.MAX_CONTEXT_TOKENS = void 0;
37
+ exports.indexWorkspace = indexWorkspace;
38
+ exports.scoreFileRelevance = scoreFileRelevance;
39
+ exports.summarizeFile = summarizeFile;
40
+ exports.buildContext = buildContext;
41
+ exports.formatContextForModel = formatContextForModel;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ // Context size limits
45
+ const MAX_CONTEXT_TOKENS = 50000; // Approximate max tokens
46
+ exports.MAX_CONTEXT_TOKENS = MAX_CONTEXT_TOKENS;
47
+ const MAX_FILE_SIZE = 50000; // Max bytes per file
48
+ exports.MAX_FILE_SIZE = MAX_FILE_SIZE;
49
+ const MAX_FILES = 50; // Max files to include
50
+ exports.MAX_FILES = MAX_FILES;
51
+ const CHARS_PER_TOKEN = 4; // Approximate chars per token
52
+ // File extensions by priority
53
+ const EXTENSION_PRIORITY = {
54
+ '.ts': 10,
55
+ '.tsx': 10,
56
+ '.js': 9,
57
+ '.jsx': 9,
58
+ '.py': 9,
59
+ '.go': 9,
60
+ '.rs': 9,
61
+ '.java': 8,
62
+ '.c': 8,
63
+ '.cpp': 8,
64
+ '.h': 7,
65
+ '.hpp': 7,
66
+ '.json': 6,
67
+ '.yaml': 6,
68
+ '.yml': 6,
69
+ '.toml': 6,
70
+ '.md': 5,
71
+ '.txt': 4,
72
+ '.css': 4,
73
+ '.scss': 4,
74
+ '.html': 4,
75
+ '.sql': 5,
76
+ '.sh': 5,
77
+ '.bash': 5,
78
+ };
79
+ // Directories to always skip
80
+ const SKIP_DIRS = new Set([
81
+ 'node_modules',
82
+ '.git',
83
+ '.svn',
84
+ '.hg',
85
+ 'dist',
86
+ 'build',
87
+ 'out',
88
+ 'target',
89
+ '__pycache__',
90
+ '.cache',
91
+ '.next',
92
+ '.nuxt',
93
+ 'vendor',
94
+ 'coverage',
95
+ '.nyc_output',
96
+ ]);
97
+ // Files to always skip
98
+ const SKIP_FILES = new Set([
99
+ 'package-lock.json',
100
+ 'yarn.lock',
101
+ 'pnpm-lock.yaml',
102
+ 'composer.lock',
103
+ 'Gemfile.lock',
104
+ 'Cargo.lock',
105
+ 'go.sum',
106
+ ]);
107
+ // Index workspace and return file list with metadata
108
+ function indexWorkspace(rootPath) {
109
+ const files = [];
110
+ function walk(dir, depth = 0) {
111
+ if (depth > 10)
112
+ return; // Max depth
113
+ try {
114
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
115
+ for (const entry of entries) {
116
+ const fullPath = path.join(dir, entry.name);
117
+ const relativePath = path.relative(rootPath, fullPath);
118
+ if (entry.isDirectory()) {
119
+ if (!SKIP_DIRS.has(entry.name) && !entry.name.startsWith('.')) {
120
+ walk(fullPath, depth + 1);
121
+ }
122
+ }
123
+ else if (entry.isFile()) {
124
+ if (SKIP_FILES.has(entry.name))
125
+ continue;
126
+ try {
127
+ const stats = fs.statSync(fullPath);
128
+ const ext = path.extname(entry.name).toLowerCase();
129
+ // Skip binary and very large files
130
+ if (stats.size > MAX_FILE_SIZE * 2)
131
+ continue;
132
+ const priority = EXTENSION_PRIORITY[ext] || 1;
133
+ // Score based on extension priority and inverse of depth
134
+ const score = priority * (10 - Math.min(depth, 9));
135
+ files.push({
136
+ path: relativePath,
137
+ score,
138
+ size: stats.size,
139
+ extension: ext,
140
+ });
141
+ }
142
+ catch {
143
+ // Skip files we can't stat
144
+ }
145
+ }
146
+ }
147
+ }
148
+ catch {
149
+ // Skip directories we can't read
150
+ }
151
+ }
152
+ walk(rootPath);
153
+ return files;
154
+ }
155
+ // Score file relevance to a task
156
+ function scoreFileRelevance(file, intent, intentType) {
157
+ let score = file.score;
158
+ const intentLower = intent.toLowerCase();
159
+ const pathLower = file.path.toLowerCase();
160
+ // Boost if path contains words from intent
161
+ const intentWords = intentLower.split(/\s+/).filter(w => w.length > 3);
162
+ for (const word of intentWords) {
163
+ if (pathLower.includes(word)) {
164
+ score += 5;
165
+ }
166
+ }
167
+ // Boost based on intent type
168
+ switch (intentType) {
169
+ case 'DEBUG':
170
+ // Prefer test files and error-related files
171
+ if (pathLower.includes('test') || pathLower.includes('spec')) {
172
+ score += 3;
173
+ }
174
+ if (pathLower.includes('error') || pathLower.includes('exception')) {
175
+ score += 3;
176
+ }
177
+ break;
178
+ case 'REFACTOR':
179
+ // Prefer main source files
180
+ if (pathLower.includes('src/') || pathLower.includes('lib/')) {
181
+ score += 3;
182
+ }
183
+ break;
184
+ case 'REVIEW':
185
+ // Prefer config and doc files
186
+ if (file.extension === '.md' || file.extension === '.json') {
187
+ score += 2;
188
+ }
189
+ break;
190
+ }
191
+ // Penalize very large files
192
+ if (file.size > 10000) {
193
+ score -= 2;
194
+ }
195
+ if (file.size > 30000) {
196
+ score -= 3;
197
+ }
198
+ return score;
199
+ }
200
+ // Summarize a large file to fit in context
201
+ function summarizeFile(content, maxChars) {
202
+ if (content.length <= maxChars) {
203
+ return { summary: content, truncated: false };
204
+ }
205
+ // Include first portion and last portion
206
+ const headSize = Math.floor(maxChars * 0.7);
207
+ const tailSize = Math.floor(maxChars * 0.2);
208
+ const head = content.slice(0, headSize);
209
+ const tail = content.slice(-tailSize);
210
+ const summary = `${head}\n\n... [${content.length - headSize - tailSize} chars truncated] ...\n\n${tail}`;
211
+ return { summary, truncated: true };
212
+ }
213
+ // Build context for a task
214
+ function buildContext(rootPath, intent, intentType, additionalFiles = []) {
215
+ // Index workspace
216
+ const allFiles = indexWorkspace(rootPath);
217
+ // Score files by relevance
218
+ const scoredFiles = allFiles.map(f => ({
219
+ ...f,
220
+ relevanceScore: scoreFileRelevance(f, intent, intentType),
221
+ }));
222
+ // Sort by relevance score descending
223
+ scoredFiles.sort((a, b) => b.relevanceScore - a.relevanceScore);
224
+ // Add additional files with high priority
225
+ const additionalSet = new Set(additionalFiles.map(f => path.relative(rootPath, f)));
226
+ // Select files within token budget
227
+ const result = {
228
+ files: [],
229
+ totalTokens: 0,
230
+ fileCount: 0,
231
+ truncatedCount: 0,
232
+ };
233
+ const maxChars = MAX_CONTEXT_TOKENS * CHARS_PER_TOKEN;
234
+ let currentChars = 0;
235
+ // First, add explicitly requested files
236
+ for (const relPath of additionalSet) {
237
+ const fullPath = path.join(rootPath, relPath);
238
+ try {
239
+ const content = fs.readFileSync(fullPath, 'utf-8');
240
+ const { summary, truncated } = summarizeFile(content, Math.min(content.length, MAX_FILE_SIZE));
241
+ if (currentChars + summary.length > maxChars)
242
+ break;
243
+ result.files.push({
244
+ path: relPath,
245
+ content: summary,
246
+ truncated,
247
+ });
248
+ currentChars += summary.length;
249
+ result.fileCount++;
250
+ if (truncated)
251
+ result.truncatedCount++;
252
+ }
253
+ catch {
254
+ // Skip files we can't read
255
+ }
256
+ }
257
+ // Then add scored files
258
+ for (const file of scoredFiles) {
259
+ if (result.fileCount >= MAX_FILES)
260
+ break;
261
+ if (currentChars >= maxChars)
262
+ break;
263
+ if (additionalSet.has(file.path))
264
+ continue;
265
+ const fullPath = path.join(rootPath, file.path);
266
+ try {
267
+ const content = fs.readFileSync(fullPath, 'utf-8');
268
+ const maxFileChars = Math.min(MAX_FILE_SIZE, Math.floor((maxChars - currentChars) / 2) // Leave room for other files
269
+ );
270
+ const { summary, truncated } = summarizeFile(content, maxFileChars);
271
+ if (currentChars + summary.length > maxChars)
272
+ break;
273
+ result.files.push({
274
+ path: file.path,
275
+ content: summary,
276
+ truncated,
277
+ });
278
+ currentChars += summary.length;
279
+ result.fileCount++;
280
+ if (truncated)
281
+ result.truncatedCount++;
282
+ }
283
+ catch {
284
+ // Skip files we can't read
285
+ }
286
+ }
287
+ result.totalTokens = Math.ceil(currentChars / CHARS_PER_TOKEN);
288
+ return result;
289
+ }
290
+ // Format context for model input
291
+ function formatContextForModel(context) {
292
+ if (context.files.length === 0) {
293
+ return 'No files in context.';
294
+ }
295
+ let output = `Context: ${context.fileCount} files (~${context.totalTokens} tokens)`;
296
+ if (context.truncatedCount > 0) {
297
+ output += ` [${context.truncatedCount} truncated]`;
298
+ }
299
+ output += '\n\n';
300
+ for (const file of context.files) {
301
+ output += `--- ${file.path}${file.truncated ? ' [truncated]' : ''} ---\n`;
302
+ output += file.content;
303
+ output += '\n\n';
304
+ }
305
+ return output;
306
+ }
307
+ //# sourceMappingURL=context_builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context_builder.js","sourceRoot":"","sources":["../../src/context/context_builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ declare const MEMORY_FILE = ".zai/context.md";
2
+ declare const BASE_SYSTEM_PROMPT = "You are an execution engine. Follow these rules exactly:\n\nRULES:\n- Output ONLY what is explicitly requested\n- No explanations unless requested\n- No apologies or acknowledgments\n- No conversational language\n- No first-person references\n- No preamble or postamble\n- No markdown formatting unless requested\n- Raw output only\n\nBEHAVIOR:\n- Execute instructions literally\n- Be deterministic and consistent\n- If a schema is provided, output valid JSON matching that schema exactly\n- If output format is specified, follow it precisely\n\nVIOLATIONS:\n- Do not say \"I\", \"I'll\", \"I can\", \"Sure\", \"Certainly\", \"Of course\"\n- Do not say \"Here is\", \"Here's\", \"Let me\"\n- Do not apologize or explain limitations\n- Do not add commentary or suggestions unless requested";
3
+ export declare function loadProjectContext(workingDir?: string): string;
4
+ export declare function saveProjectContext(content: string, workingDir?: string): void;
5
+ export declare function appendProjectRule(rule: string, workingDir?: string): void;
6
+ export declare function getSystemPrompt(workingDir?: string): string;
7
+ export interface ProjectMemory {
8
+ load(): Promise<string>;
9
+ append(rule: string): Promise<void>;
10
+ getSystemPrompt(): Promise<string>;
11
+ }
12
+ export declare function createProjectMemory(workingDir?: string): ProjectMemory;
13
+ export { MEMORY_FILE, BASE_SYSTEM_PROMPT };
14
+ //# sourceMappingURL=project_memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project_memory.d.ts","sourceRoot":"","sources":["../../src/context/project_memory.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,WAAW,oBAAoB,CAAC;AAGtC,QAAA,MAAM,kBAAkB,yxBAsBgC,CAAC;AAkBzD,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAW9D;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ7E;AAGD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAIzE;AAGD,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAY3D;AAGD,MAAM,WAAW,aAAa;IAC5B,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACpC;AAGD,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAYtE;AAGD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BASE_SYSTEM_PROMPT = exports.MEMORY_FILE = void 0;
37
+ exports.loadProjectContext = loadProjectContext;
38
+ exports.saveProjectContext = saveProjectContext;
39
+ exports.appendProjectRule = appendProjectRule;
40
+ exports.getSystemPrompt = getSystemPrompt;
41
+ exports.createProjectMemory = createProjectMemory;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const os = __importStar(require("os"));
45
+ // Memory file location (relative to working directory)
46
+ const MEMORY_FILE = '.zai/context.md';
47
+ exports.MEMORY_FILE = MEMORY_FILE;
48
+ // Base system prompt (deterministic execution engine)
49
+ const BASE_SYSTEM_PROMPT = `You are an execution engine. Follow these rules exactly:
50
+
51
+ RULES:
52
+ - Output ONLY what is explicitly requested
53
+ - No explanations unless requested
54
+ - No apologies or acknowledgments
55
+ - No conversational language
56
+ - No first-person references
57
+ - No preamble or postamble
58
+ - No markdown formatting unless requested
59
+ - Raw output only
60
+
61
+ BEHAVIOR:
62
+ - Execute instructions literally
63
+ - Be deterministic and consistent
64
+ - If a schema is provided, output valid JSON matching that schema exactly
65
+ - If output format is specified, follow it precisely
66
+
67
+ VIOLATIONS:
68
+ - Do not say "I", "I'll", "I can", "Sure", "Certainly", "Of course"
69
+ - Do not say "Here is", "Here's", "Let me"
70
+ - Do not apologize or explain limitations
71
+ - Do not add commentary or suggestions unless requested`;
72
+ exports.BASE_SYSTEM_PROMPT = BASE_SYSTEM_PROMPT;
73
+ // Get the full path to memory file
74
+ function getMemoryPath(workingDir) {
75
+ const baseDir = workingDir || process.cwd();
76
+ return path.join(baseDir, MEMORY_FILE);
77
+ }
78
+ // Ensure .zai directory exists
79
+ function ensureMemoryDir(workingDir) {
80
+ const baseDir = workingDir || process.cwd();
81
+ const zaiDir = path.join(baseDir, '.zai');
82
+ if (!fs.existsSync(zaiDir)) {
83
+ fs.mkdirSync(zaiDir, { recursive: true });
84
+ }
85
+ }
86
+ // Load project context from .zai/context.md
87
+ function loadProjectContext(workingDir) {
88
+ try {
89
+ const memoryPath = getMemoryPath(workingDir);
90
+ if (fs.existsSync(memoryPath)) {
91
+ return fs.readFileSync(memoryPath, 'utf-8');
92
+ }
93
+ return '';
94
+ }
95
+ catch {
96
+ // Fail gracefully on permission errors
97
+ return '';
98
+ }
99
+ }
100
+ // Save project context to .zai/context.md
101
+ function saveProjectContext(content, workingDir) {
102
+ try {
103
+ ensureMemoryDir(workingDir);
104
+ const memoryPath = getMemoryPath(workingDir);
105
+ fs.writeFileSync(memoryPath, content, 'utf-8');
106
+ }
107
+ catch {
108
+ // Fail gracefully on permission errors
109
+ }
110
+ }
111
+ // Append a rule to project context
112
+ function appendProjectRule(rule, workingDir) {
113
+ const existing = loadProjectContext(workingDir);
114
+ const newContent = existing ? `${existing}\n${rule}` : rule;
115
+ saveProjectContext(newContent, workingDir);
116
+ }
117
+ // Get the complete system prompt with project rules
118
+ function getSystemPrompt(workingDir) {
119
+ const projectContext = loadProjectContext(workingDir);
120
+ const osInfo = `OS: ${process.platform} (${os.arch()})`;
121
+ let systemPrompt = BASE_SYSTEM_PROMPT;
122
+ systemPrompt += `\n\n${osInfo}`;
123
+ if (projectContext.trim()) {
124
+ systemPrompt += `\n\n<project_rules>\n${projectContext}\n</project_rules>`;
125
+ }
126
+ return systemPrompt;
127
+ }
128
+ // Create a ProjectMemory instance for a working directory
129
+ function createProjectMemory(workingDir) {
130
+ return {
131
+ async load() {
132
+ return loadProjectContext(workingDir);
133
+ },
134
+ async append(rule) {
135
+ appendProjectRule(rule, workingDir);
136
+ },
137
+ async getSystemPrompt() {
138
+ return getSystemPrompt(workingDir);
139
+ },
140
+ };
141
+ }
142
+ //# sourceMappingURL=project_memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project_memory.js","sourceRoot":"","sources":["../../src/context/project_memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC"}
package/dist/doctor.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":""}
package/dist/git.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ export interface GitInfo {
2
+ isRepo: boolean;
3
+ branch: string | null;
4
+ isDirty: boolean;
5
+ uncommittedFiles: number;
6
+ repoName: string | null;
7
+ }
8
+ export declare function getGitInfo(cwd: string): GitInfo;
9
+ export declare function formatGitStatus(info: GitInfo): string;
10
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CA4C/C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAIrD"}