@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
@@ -0,0 +1,230 @@
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.decomposeTask = decomposeTask;
37
+ exports.planCurrentStep = planCurrentStep;
38
+ exports.printProgress = printProgress;
39
+ exports.completeCurrentStep = completeCurrentStep;
40
+ exports.skipCurrentStep = skipCurrentStep;
41
+ const session_1 = require("./session");
42
+ const runtime_1 = require("./runtime");
43
+ const auth_1 = require("./auth");
44
+ const context_builder_1 = require("./context/context_builder");
45
+ const ui_1 = require("./ui");
46
+ const path = __importStar(require("path"));
47
+ // Task decomposition schema
48
+ const TASK_DECOMPOSITION_SCHEMA = {
49
+ type: 'object',
50
+ required: ['status', 'steps'],
51
+ properties: {
52
+ status: { type: 'string', enum: ['success', 'error'] },
53
+ steps: {
54
+ type: 'array',
55
+ items: {
56
+ type: 'object',
57
+ required: ['id', 'description'],
58
+ properties: {
59
+ id: { type: 'string' },
60
+ description: { type: 'string' },
61
+ dependencies: { type: 'array', items: { type: 'string' } },
62
+ },
63
+ },
64
+ },
65
+ error: { type: 'string' },
66
+ },
67
+ };
68
+ // Plan response schema
69
+ const PLAN_RESPONSE_SCHEMA = {
70
+ type: 'object',
71
+ required: ['status', 'plan'],
72
+ properties: {
73
+ status: { type: 'string', enum: ['success', 'error'] },
74
+ plan: {
75
+ type: 'array',
76
+ items: {
77
+ type: 'object',
78
+ required: ['id', 'description'],
79
+ properties: {
80
+ id: { type: 'string' },
81
+ description: { type: 'string' },
82
+ files: { type: 'array', items: { type: 'string' } },
83
+ },
84
+ },
85
+ },
86
+ error: { type: 'string' },
87
+ },
88
+ };
89
+ // Decompose a large task into steps
90
+ async function decomposeTask() {
91
+ const session = (0, session_1.getSession)();
92
+ const intent = (0, session_1.getIntent)();
93
+ if (!intent) {
94
+ return { success: false, steps: [], message: 'No intent set.' };
95
+ }
96
+ const apiKey = await (0, auth_1.ensureAuthenticated)();
97
+ // Build context
98
+ const context = (0, context_builder_1.buildContext)(session.workingDirectory, intent, (0, session_1.getIntentType)() || 'COMMAND', session.openFiles.map(f => path.isAbsolute(f) ? f : path.join(session.workingDirectory, f)));
99
+ const filesContext = (0, context_builder_1.formatContextForModel)(context);
100
+ const instruction = `Break down this task into discrete, sequential steps.
101
+ Each step should be a single, focused unit of work.
102
+
103
+ Task: ${intent}
104
+ Mode: ${session.mode}
105
+ Working directory: ${session.workingDirectory}
106
+
107
+ ${filesContext}
108
+
109
+ Output 2-5 steps. Each step should have an id (step1, step2, ...) and a clear description.
110
+ Order steps by dependency - prerequisites first.`;
111
+ const result = await (0, runtime_1.execute)({
112
+ instruction,
113
+ schema: TASK_DECOMPOSITION_SCHEMA,
114
+ enforceSchema: true,
115
+ }, apiKey);
116
+ if (!result.success) {
117
+ return { success: false, steps: [], message: `Decomposition failed: ${result.error}` };
118
+ }
119
+ const response = result.output;
120
+ if (response.status === 'error' || !response.steps) {
121
+ return { success: false, steps: [], message: `Decomposition failed: ${response.error}` };
122
+ }
123
+ const taskSteps = response.steps.map(s => ({
124
+ id: s.id,
125
+ description: s.description,
126
+ status: 'pending',
127
+ }));
128
+ (0, session_1.setTaskSteps)(taskSteps);
129
+ return { success: true, steps: taskSteps, message: `Task decomposed into ${taskSteps.length} steps.` };
130
+ }
131
+ // Plan current step
132
+ async function planCurrentStep() {
133
+ const step = (0, session_1.getCurrentStep)();
134
+ if (!step) {
135
+ return { success: false, message: 'No current step. Use /decompose first.' };
136
+ }
137
+ const session = (0, session_1.getSession)();
138
+ const apiKey = await (0, auth_1.ensureAuthenticated)();
139
+ const context = (0, context_builder_1.buildContext)(session.workingDirectory, step.description, (0, session_1.getIntentType)() || 'COMMAND', session.openFiles.map(f => path.isAbsolute(f) ? f : path.join(session.workingDirectory, f)));
140
+ const filesContext = (0, context_builder_1.formatContextForModel)(context);
141
+ const instruction = `Create a plan for this step:
142
+
143
+ Step: ${step.description}
144
+ Overall task: ${(0, session_1.getIntent)()}
145
+ Mode: ${session.mode}
146
+
147
+ ${filesContext}
148
+
149
+ Output a detailed plan for this step only.`;
150
+ const result = await (0, runtime_1.execute)({
151
+ instruction,
152
+ schema: PLAN_RESPONSE_SCHEMA,
153
+ enforceSchema: true,
154
+ }, apiKey);
155
+ if (!result.success) {
156
+ return { success: false, message: `Planning failed: ${result.error}` };
157
+ }
158
+ const response = result.output;
159
+ if (response.status === 'error' || !response.plan) {
160
+ return { success: false, message: `Planning failed: ${response.error}` };
161
+ }
162
+ step.plan = response.plan.map(p => ({
163
+ id: p.id,
164
+ description: p.description,
165
+ status: 'pending',
166
+ }));
167
+ (0, session_1.setLastPlan)(step.plan);
168
+ (0, session_1.updateStepStatus)(step.id, 'planned');
169
+ return { success: true, message: `Step ${step.id} planned.` };
170
+ }
171
+ // Print step progress
172
+ function printProgress() {
173
+ const session = (0, session_1.getSession)();
174
+ const progress = (0, session_1.getStepProgress)();
175
+ if (session.taskSteps.length === 0) {
176
+ console.log('No task decomposed.');
177
+ return;
178
+ }
179
+ console.log(`Progress: Step ${progress.current}/${progress.total} (${progress.completed} completed)`);
180
+ console.log('');
181
+ for (let i = 0; i < session.taskSteps.length; i++) {
182
+ const step = session.taskSteps[i];
183
+ const isCurrent = i === session.currentStepIndex;
184
+ const marker = step.status === 'applied' ? '[x]'
185
+ : step.status === 'skipped' ? '[-]'
186
+ : isCurrent ? '[>]'
187
+ : '[ ]';
188
+ const prefix = step.status === 'applied' || step.status === 'skipped'
189
+ ? (0, ui_1.dim)(marker)
190
+ : isCurrent
191
+ ? (0, ui_1.info)(marker)
192
+ : (0, ui_1.dim)(marker);
193
+ console.log(`${prefix} ${step.id}: ${step.description}`);
194
+ }
195
+ }
196
+ // Mark current step complete and advance
197
+ function completeCurrentStep() {
198
+ const step = (0, session_1.getCurrentStep)();
199
+ if (!step) {
200
+ return { success: false, hasMore: false, message: 'No current step.' };
201
+ }
202
+ (0, session_1.updateStepStatus)(step.id, 'applied');
203
+ const nextStep = (0, session_1.advanceStep)();
204
+ if (nextStep) {
205
+ return {
206
+ success: true,
207
+ hasMore: true,
208
+ message: `Step ${step.id} complete. Next: ${nextStep.description}`,
209
+ };
210
+ }
211
+ return { success: true, hasMore: false, message: 'All steps complete.' };
212
+ }
213
+ // Skip current step
214
+ function skipCurrentStep() {
215
+ const step = (0, session_1.getCurrentStep)();
216
+ if (!step) {
217
+ return { success: false, hasMore: false, message: 'No current step.' };
218
+ }
219
+ (0, session_1.updateStepStatus)(step.id, 'skipped');
220
+ const nextStep = (0, session_1.advanceStep)();
221
+ if (nextStep) {
222
+ return {
223
+ success: true,
224
+ hasMore: true,
225
+ message: `Step ${step.id} skipped. Next: ${nextStep.description}`,
226
+ };
227
+ }
228
+ return { success: true, hasMore: false, message: 'All steps complete.' };
229
+ }
230
+ //# sourceMappingURL=task_runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task_runner.js","sourceRoot":"","sources":["../src/task_runner.ts"],"names":[],"mappings":"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"}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { SessionState } from './session';
2
+ declare const ASCII_LOGO = "\n _____ ___ ___\n|__ // _ |/ /\n / // __ | __|\n /___\\___|___| code\n";
3
+ export declare function renderStartup(projectName: string): string;
4
+ export declare function getPrompt(session: SessionState): string;
5
+ export declare function renderStatus(session: SessionState): string;
6
+ export declare function renderStatusBar(session: SessionState): string;
7
+ export declare function getWarnings(session: SessionState): string[];
8
+ export declare function success(msg: string): string;
9
+ export declare function warning(msg: string): string;
10
+ export declare function error(msg: string): string;
11
+ export declare function dim(msg: string): string;
12
+ export declare function info(msg: string): string;
13
+ export declare function hint(msg: string): string;
14
+ export { ASCII_LOGO };
15
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAoBzC,QAAA,MAAM,UAAU,iFAKf,CAAC;AAGF,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAczD;AAwBD,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAevD;AAGD,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAI1D;AAGD,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAmB7D;AAGD,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,CAuB3D;AAGD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG3C;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG3C;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGzC;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGvC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGxC;AAGD,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGxC;AAGD,OAAO,EAAE,UAAU,EAAE,CAAC"}
package/dist/ui.js ADDED
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ASCII_LOGO = void 0;
4
+ exports.renderStartup = renderStartup;
5
+ exports.getPrompt = getPrompt;
6
+ exports.renderStatus = renderStatus;
7
+ exports.renderStatusBar = renderStatusBar;
8
+ exports.getWarnings = getWarnings;
9
+ exports.success = success;
10
+ exports.warning = warning;
11
+ exports.error = error;
12
+ exports.dim = dim;
13
+ exports.info = info;
14
+ exports.hint = hint;
15
+ const settings_1 = require("./settings");
16
+ const git_1 = require("./git");
17
+ const profiles_1 = require("./profiles");
18
+ // Colors - only if enabled
19
+ function getColors() {
20
+ const enabled = (0, settings_1.shouldShowColor)();
21
+ return {
22
+ reset: enabled ? '\x1b[0m' : '',
23
+ dim: enabled ? '\x1b[2m' : '',
24
+ bold: enabled ? '\x1b[1m' : '',
25
+ green: enabled ? '\x1b[32m' : '',
26
+ yellow: enabled ? '\x1b[33m' : '',
27
+ red: enabled ? '\x1b[31m' : '',
28
+ cyan: enabled ? '\x1b[36m' : '',
29
+ };
30
+ }
31
+ // ASCII logo - minimal, 3 lines
32
+ const ASCII_LOGO = `
33
+ _____ ___ ___
34
+ |__ // _ |/ /
35
+ / // __ | __|
36
+ /___\\___|___| code
37
+ `;
38
+ exports.ASCII_LOGO = ASCII_LOGO;
39
+ // Show logo on startup (only if enabled and first run or setting is on)
40
+ function renderStartup(projectName) {
41
+ const c = getColors();
42
+ const lines = [];
43
+ // Logo (optional)
44
+ if ((0, settings_1.shouldShowLogo)()) {
45
+ lines.push(c.dim + ASCII_LOGO.trim() + c.reset);
46
+ lines.push('');
47
+ }
48
+ // Header
49
+ lines.push(`Z.ai Code ${c.dim}— project: ${projectName}${c.reset}`);
50
+ return lines.join('\n');
51
+ }
52
+ // Get state label
53
+ function getStateLabel(session) {
54
+ if (session.pendingActions)
55
+ return 'dirty';
56
+ if (session.lastDiff)
57
+ return 'dirty';
58
+ if (session.lastPlan && session.lastPlan.length > 0)
59
+ return 'pending';
60
+ return 'clean';
61
+ }
62
+ // Get focus (current file or step)
63
+ function getFocus(session) {
64
+ if (session.openFiles.length === 1) {
65
+ const file = session.openFiles[0];
66
+ // Return just filename
67
+ return file.split('/').pop() || null;
68
+ }
69
+ if (session.taskSteps.length > 0 && session.currentStepIndex < session.taskSteps.length) {
70
+ return `step${session.currentStepIndex + 1}`;
71
+ }
72
+ return null;
73
+ }
74
+ // Build prompt: [mode][dry-run?][state][focus]>
75
+ function getPrompt(session) {
76
+ const state = getStateLabel(session);
77
+ const focus = getFocus(session);
78
+ let prompt = `[${session.mode}]`;
79
+ if (session.dryRun) {
80
+ prompt += '[dry-run]';
81
+ }
82
+ prompt += `[${state}]`;
83
+ if (focus) {
84
+ prompt += `[${focus}]`;
85
+ }
86
+ prompt += '> ';
87
+ return prompt;
88
+ }
89
+ // Status line: Mode: <mode> | State: <state>
90
+ function renderStatus(session) {
91
+ const c = getColors();
92
+ const state = getStateLabel(session);
93
+ return `${c.dim}Mode: ${session.mode} | State: ${state}${c.reset}`;
94
+ }
95
+ // Status bar: git | model | profile | pending
96
+ function renderStatusBar(session) {
97
+ const c = getColors();
98
+ const gitInfo = (0, git_1.getGitInfo)(session.workingDirectory);
99
+ const gitStatus = (0, git_1.formatGitStatus)(gitInfo);
100
+ const model = (0, settings_1.getModel)().split('-').slice(0, 2).join('-'); // Shorten model name
101
+ const profile = (0, profiles_1.getActiveProfileName)();
102
+ const pending = session.pendingActions ? (session.pendingActions.files?.length || 0) + (session.pendingActions.diffs?.length || 0) : 0;
103
+ const parts = [
104
+ gitStatus,
105
+ `model:${model}`,
106
+ `profile:${profile}`,
107
+ ];
108
+ if (pending > 0) {
109
+ parts.push(`pending:${pending}`);
110
+ }
111
+ return c.dim + parts.join(' | ') + c.reset;
112
+ }
113
+ // Contextual warnings
114
+ function getWarnings(session) {
115
+ const warnings = [];
116
+ const fs = require('fs');
117
+ const path = require('path');
118
+ const os = require('os');
119
+ // Check: running in home directory
120
+ if (session.workingDirectory === os.homedir()) {
121
+ warnings.push('Warning: running in home directory');
122
+ }
123
+ // Check: not in a git repo
124
+ const gitDir = path.join(session.workingDirectory, '.git');
125
+ if (!fs.existsSync(gitDir)) {
126
+ warnings.push('Note: not a git repository');
127
+ }
128
+ // Check: pending changes
129
+ if (session.pendingActions) {
130
+ warnings.push('Pending changes exist. Use /diff to review.');
131
+ }
132
+ return warnings;
133
+ }
134
+ // Output helpers
135
+ function success(msg) {
136
+ const c = getColors();
137
+ return `${c.green}${msg}${c.reset}`;
138
+ }
139
+ function warning(msg) {
140
+ const c = getColors();
141
+ return `${c.yellow}${msg}${c.reset}`;
142
+ }
143
+ function error(msg) {
144
+ const c = getColors();
145
+ return `${c.red}${msg}${c.reset}`;
146
+ }
147
+ function dim(msg) {
148
+ const c = getColors();
149
+ return `${c.dim}${msg}${c.reset}`;
150
+ }
151
+ function info(msg) {
152
+ const c = getColors();
153
+ return `${c.cyan}${msg}${c.reset}`;
154
+ }
155
+ // Hint for next action
156
+ function hint(msg) {
157
+ const c = getColors();
158
+ return `${c.dim}next: ${msg}${c.reset}`;
159
+ }
160
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface WorkspaceContext {
2
+ root: string;
3
+ files: Array<{
4
+ path: string;
5
+ size: number;
6
+ }>;
7
+ gitStatus?: string;
8
+ }
9
+ export interface CollectOptions {
10
+ maxFiles?: number;
11
+ maxFileSize?: number;
12
+ extensions?: string[];
13
+ }
14
+ export declare function collectWorkspace(rootPath: string, options?: CollectOptions): WorkspaceContext;
15
+ export declare function getFileContent(filePath: string, maxSize?: number): string | null;
16
+ export declare function buildContextString(workspace: WorkspaceContext, includeContent?: boolean): string;
17
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAiBD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,gBAAgB,CA8D7F;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYhF;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAahG"}
@@ -0,0 +1,134 @@
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.collectWorkspace = collectWorkspace;
37
+ exports.getFileContent = getFileContent;
38
+ exports.buildContextString = buildContextString;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const DEFAULT_EXTENSIONS = ['.ts', '.js', '.tsx', '.jsx', '.json', '.md', '.py', '.go', '.rs', '.java', '.c', '.cpp', '.h', '.css', '.html'];
42
+ const DEFAULT_MAX_FILES = 100;
43
+ const DEFAULT_MAX_FILE_SIZE = 100 * 1024;
44
+ const IGNORED_DIRS = ['node_modules', '.git', '.svn', 'dist', 'build', 'out', 'target', 'vendor', '.venv', 'venv', '__pycache__', '.next', '.nuxt'];
45
+ function shouldIgnore(dirName) {
46
+ return IGNORED_DIRS.includes(dirName);
47
+ }
48
+ function hasAllowedExtension(filePath, extensions) {
49
+ const ext = path.extname(filePath).toLowerCase();
50
+ return extensions.includes(ext);
51
+ }
52
+ function collectWorkspace(rootPath, options) {
53
+ const maxFiles = options?.maxFiles ?? DEFAULT_MAX_FILES;
54
+ const maxFileSize = options?.maxFileSize ?? DEFAULT_MAX_FILE_SIZE;
55
+ const extensions = options?.extensions ?? DEFAULT_EXTENSIONS;
56
+ const files = [];
57
+ function walkDirectory(dir) {
58
+ if (files.length >= maxFiles) {
59
+ return;
60
+ }
61
+ try {
62
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
63
+ for (const entry of entries) {
64
+ if (files.length >= maxFiles) {
65
+ break;
66
+ }
67
+ const fullPath = path.join(dir, entry.name);
68
+ if (entry.isDirectory()) {
69
+ if (!shouldIgnore(entry.name)) {
70
+ walkDirectory(fullPath);
71
+ }
72
+ }
73
+ else if (entry.isFile()) {
74
+ if (hasAllowedExtension(entry.name, extensions)) {
75
+ try {
76
+ const stats = fs.statSync(fullPath);
77
+ if (stats.size <= maxFileSize) {
78
+ const relativePath = path.relative(rootPath, fullPath);
79
+ files.push({ path: relativePath, size: stats.size });
80
+ }
81
+ }
82
+ catch {
83
+ // Skip files that can't be read
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ catch {
90
+ // Skip directories that can't be read
91
+ }
92
+ }
93
+ walkDirectory(rootPath);
94
+ let gitStatus;
95
+ try {
96
+ const gitDir = path.join(rootPath, '.git');
97
+ if (fs.existsSync(gitDir)) {
98
+ gitStatus = 'git';
99
+ }
100
+ }
101
+ catch {
102
+ // Not a git repo or can't check
103
+ }
104
+ return {
105
+ root: rootPath,
106
+ files,
107
+ gitStatus,
108
+ };
109
+ }
110
+ function getFileContent(filePath, maxSize) {
111
+ const max = maxSize ?? DEFAULT_MAX_FILE_SIZE;
112
+ try {
113
+ const stats = fs.statSync(filePath);
114
+ if (stats.size > max) {
115
+ return null;
116
+ }
117
+ return fs.readFileSync(filePath, 'utf-8');
118
+ }
119
+ catch {
120
+ return null;
121
+ }
122
+ }
123
+ function buildContextString(workspace, includeContent) {
124
+ let result = `Working directory: ${workspace.root}\n`;
125
+ result += `Files (${workspace.files.length}):\n`;
126
+ for (const file of workspace.files) {
127
+ result += ` - ${file.path}\n`;
128
+ }
129
+ if (workspace.gitStatus) {
130
+ result += `\nGit repository: ${workspace.gitStatus}\n`;
131
+ }
132
+ return result;
133
+ }
134
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { SessionMode, PlanStep, IntentType } from './session';
2
+ import { ResponseSchema } from './runtime';
3
+ import { FileScore } from './context/context_builder';
4
+ declare const WORKSPACE_STATE_FILE = ".zai/workspace.json";
5
+ export interface WorkspaceState {
6
+ version: number;
7
+ workingDirectory: string;
8
+ mode: SessionMode;
9
+ openFiles: string[];
10
+ currentIntent: string | null;
11
+ intentType: IntentType | null;
12
+ lastPlan: PlanStep[] | null;
13
+ lastDiff: ResponseSchema | null;
14
+ pendingActions: ResponseSchema | null;
15
+ dryRun: boolean;
16
+ lastUpdated: string;
17
+ }
18
+ export interface FileTreeNode {
19
+ name: string;
20
+ path: string;
21
+ type: 'file' | 'directory';
22
+ size?: number;
23
+ children?: FileTreeNode[];
24
+ extension?: string;
25
+ }
26
+ export declare class Workspace {
27
+ private rootPath;
28
+ private fileTree;
29
+ private fileIndex;
30
+ constructor(rootPath?: string);
31
+ getRoot(): string;
32
+ indexFileTree(maxDepth?: number): FileTreeNode;
33
+ getFileTree(): FileTreeNode | null;
34
+ getFileIndex(): FileScore[];
35
+ getCurrentState(): WorkspaceState;
36
+ saveState(): void;
37
+ loadState(): WorkspaceState | null;
38
+ restoreState(): boolean;
39
+ clearState(): void;
40
+ printTreeSummary(): string;
41
+ }
42
+ export declare function getWorkspace(rootPath?: string): Workspace;
43
+ export declare function resetWorkspace(): void;
44
+ export { WORKSPACE_STATE_FILE };
45
+ //# sourceMappingURL=workspace_model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace_model.d.ts","sourceRoot":"","sources":["../src/workspace_model.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,WAAW,EAAE,QAAQ,EAA+G,UAAU,EAAE,MAAM,WAAW,CAAC;AACrM,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAkB,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGtE,QAAA,MAAM,oBAAoB,wBAAwB,CAAC;AAGnD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,SAAS,CAAmB;gBAExB,QAAQ,CAAC,EAAE,MAAM;IAK7B,OAAO,IAAI,MAAM;IAKjB,aAAa,CAAC,QAAQ,GAAE,MAAU,GAAG,YAAY;IA6DjD,WAAW,IAAI,YAAY,GAAG,IAAI;IAKlC,YAAY,IAAI,SAAS,EAAE;IAK3B,eAAe,IAAI,cAAc;IAkBjC,SAAS,IAAI,IAAI;IAgBjB,SAAS,IAAI,cAAc,GAAG,IAAI;IAelC,YAAY,IAAI,OAAO;IAwCvB,UAAU,IAAI,IAAI;IAYlB,gBAAgB,IAAI,MAAM;CAsB3B;AAMD,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAKzD;AAGD,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}