@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.
- package/LICENSE +678 -0
- package/README.md +115 -0
- package/bin/zcode +3 -0
- package/dist/apply.d.ts +44 -0
- package/dist/apply.d.ts.map +1 -0
- package/dist/apply.js +307 -0
- package/dist/apply.js.map +1 -0
- package/dist/auth.d.ts +9 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +170 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +179 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +15 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +560 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +97 -0
- package/dist/config.js.map +1 -0
- package/dist/context/context_builder.d.ts +29 -0
- package/dist/context/context_builder.d.ts.map +1 -0
- package/dist/context/context_builder.js +307 -0
- package/dist/context/context_builder.js.map +1 -0
- package/dist/context/project_memory.d.ts +14 -0
- package/dist/context/project_memory.d.ts.map +1 -0
- package/dist/context/project_memory.js +142 -0
- package/dist/context/project_memory.js.map +1 -0
- package/dist/doctor.d.ts +2 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +3 -0
- package/dist/doctor.js.map +1 -0
- package/dist/git.d.ts +10 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +90 -0
- package/dist/git.js.map +1 -0
- package/dist/history.d.ts +14 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +103 -0
- package/dist/history.js.map +1 -0
- package/dist/interactive.d.ts +6 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +83 -0
- package/dist/interactive.js.map +1 -0
- package/dist/orchestrator.d.ts +11 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +135 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/planner.d.ts +22 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +259 -0
- package/dist/planner.js.map +1 -0
- package/dist/profiles.d.ts +16 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +80 -0
- package/dist/profiles.js.map +1 -0
- package/dist/rollback.d.ts +27 -0
- package/dist/rollback.d.ts.map +1 -0
- package/dist/rollback.js +154 -0
- package/dist/rollback.js.map +1 -0
- package/dist/runtime.d.ts +131 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +374 -0
- package/dist/runtime.js.map +1 -0
- package/dist/session.d.ts +95 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +174 -0
- package/dist/session.js.map +1 -0
- package/dist/settings.d.ts +41 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +225 -0
- package/dist/settings.js.map +1 -0
- package/dist/settings_menu.d.ts +2 -0
- package/dist/settings_menu.d.ts.map +1 -0
- package/dist/settings_menu.js +265 -0
- package/dist/settings_menu.js.map +1 -0
- package/dist/shell.d.ts +18 -0
- package/dist/shell.d.ts.map +1 -0
- package/dist/shell.js +128 -0
- package/dist/shell.js.map +1 -0
- package/dist/task_runner.d.ts +22 -0
- package/dist/task_runner.d.ts.map +1 -0
- package/dist/task_runner.js +230 -0
- package/dist/task_runner.js.map +1 -0
- package/dist/ui.d.ts +15 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +160 -0
- package/dist/ui.js.map +1 -0
- package/dist/workspace.d.ts +17 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +134 -0
- package/dist/workspace.js.map +1 -0
- package/dist/workspace_model.d.ts +45 -0
- package/dist/workspace_model.d.ts.map +1 -0
- package/dist/workspace_model.js +253 -0
- package/dist/workspace_model.js.map +1 -0
- package/package.json +45 -0
package/dist/planner.js
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
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_REFINE_ITERATIONS = exports.MAX_PLAN_ITERATIONS = void 0;
|
|
37
|
+
exports.runPlannerLoop = runPlannerLoop;
|
|
38
|
+
exports.runGenerateLoop = runGenerateLoop;
|
|
39
|
+
const session_1 = require("./session");
|
|
40
|
+
const runtime_1 = require("./runtime");
|
|
41
|
+
const auth_1 = require("./auth");
|
|
42
|
+
const session_2 = require("./session");
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const context_builder_1 = require("./context/context_builder");
|
|
45
|
+
// Planner configuration
|
|
46
|
+
const MAX_PLAN_ITERATIONS = 5;
|
|
47
|
+
exports.MAX_PLAN_ITERATIONS = MAX_PLAN_ITERATIONS;
|
|
48
|
+
const MAX_REFINE_ITERATIONS = 3;
|
|
49
|
+
exports.MAX_REFINE_ITERATIONS = MAX_REFINE_ITERATIONS;
|
|
50
|
+
// Check if plan is satisfactory (basic heuristics)
|
|
51
|
+
function isPlanSatisfactory(plan) {
|
|
52
|
+
// Plan must have at least one step
|
|
53
|
+
if (!plan || plan.length === 0) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
// Each step must have a description
|
|
57
|
+
return plan.every(step => step.description && step.description.trim().length > 0);
|
|
58
|
+
}
|
|
59
|
+
// Check if generated changes are valid
|
|
60
|
+
function areChangesValid(response) {
|
|
61
|
+
// Must have either files or diffs
|
|
62
|
+
const hasFiles = (response.files?.length ?? 0) > 0;
|
|
63
|
+
const hasDiffs = (response.diffs?.length ?? 0) > 0;
|
|
64
|
+
return hasFiles || hasDiffs;
|
|
65
|
+
}
|
|
66
|
+
// Run bounded planning loop
|
|
67
|
+
async function runPlannerLoop() {
|
|
68
|
+
const session = (0, session_1.getSession)();
|
|
69
|
+
const intent = (0, session_1.getIntent)();
|
|
70
|
+
if (!intent) {
|
|
71
|
+
return {
|
|
72
|
+
success: false,
|
|
73
|
+
iterations: 0,
|
|
74
|
+
plan: null,
|
|
75
|
+
message: 'No intent set. Enter a task first.',
|
|
76
|
+
needsConfirmation: false,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const apiKey = await (0, auth_1.ensureAuthenticated)();
|
|
80
|
+
let iterations = 0;
|
|
81
|
+
let currentPlan = null;
|
|
82
|
+
// Build context from workspace
|
|
83
|
+
const context = (0, context_builder_1.buildContext)(session.workingDirectory, intent, (0, session_1.getIntentType)() || 'COMMAND', session.openFiles.map(f => path.join(session.workingDirectory, f)));
|
|
84
|
+
const filesContext = (0, context_builder_1.formatContextForModel)(context);
|
|
85
|
+
// Mode constraints
|
|
86
|
+
let modeConstraints = '';
|
|
87
|
+
switch (session.mode) {
|
|
88
|
+
case 'edit':
|
|
89
|
+
modeConstraints = 'Focus on implementing changes. May create, modify, or delete files.';
|
|
90
|
+
break;
|
|
91
|
+
case 'explain':
|
|
92
|
+
modeConstraints = 'Explain code and concepts. No file modifications.';
|
|
93
|
+
break;
|
|
94
|
+
case 'review':
|
|
95
|
+
modeConstraints = 'Analyze and review code. Identify issues and improvements.';
|
|
96
|
+
break;
|
|
97
|
+
case 'debug':
|
|
98
|
+
modeConstraints = 'Focus on finding and fixing bugs. Minimal targeted changes.';
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
// Bounded planning loop
|
|
102
|
+
while (iterations < MAX_PLAN_ITERATIONS) {
|
|
103
|
+
iterations++;
|
|
104
|
+
const instruction = `Create a plan for the following task.
|
|
105
|
+
|
|
106
|
+
Task: ${intent}
|
|
107
|
+
Intent Type: ${(0, session_1.getIntentType)() || 'COMMAND'}
|
|
108
|
+
Mode: ${session.mode}
|
|
109
|
+
Constraints: ${modeConstraints}
|
|
110
|
+
|
|
111
|
+
Working directory: ${session.workingDirectory}
|
|
112
|
+
|
|
113
|
+
${filesContext ? `Files in context:\n${filesContext}` : 'No files in context.'}
|
|
114
|
+
|
|
115
|
+
${currentPlan ? `Previous plan needs refinement:\n${currentPlan.map(s => `${s.id}. ${s.description}`).join('\n')}` : ''}
|
|
116
|
+
|
|
117
|
+
Output a plan with numbered steps. Each step should have an id, description, and optionally list affected files.`;
|
|
118
|
+
const result = await (0, runtime_1.execute)({
|
|
119
|
+
instruction,
|
|
120
|
+
schema: session_2.PLAN_SCHEMA,
|
|
121
|
+
enforceSchema: true,
|
|
122
|
+
}, apiKey);
|
|
123
|
+
if (!result.success) {
|
|
124
|
+
return {
|
|
125
|
+
success: false,
|
|
126
|
+
iterations,
|
|
127
|
+
plan: null,
|
|
128
|
+
message: `Planning failed: ${result.error}`,
|
|
129
|
+
needsConfirmation: false,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
const response = result.output;
|
|
133
|
+
if (response.status === 'error') {
|
|
134
|
+
return {
|
|
135
|
+
success: false,
|
|
136
|
+
iterations,
|
|
137
|
+
plan: null,
|
|
138
|
+
message: `Planning failed: ${response.error}`,
|
|
139
|
+
needsConfirmation: false,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
if (response.plan) {
|
|
143
|
+
currentPlan = response.plan.map(step => ({
|
|
144
|
+
id: step.id,
|
|
145
|
+
description: step.description,
|
|
146
|
+
status: 'pending',
|
|
147
|
+
}));
|
|
148
|
+
// Check if plan is satisfactory
|
|
149
|
+
if (isPlanSatisfactory(currentPlan)) {
|
|
150
|
+
(0, session_1.setLastPlan)(currentPlan);
|
|
151
|
+
return {
|
|
152
|
+
success: true,
|
|
153
|
+
iterations,
|
|
154
|
+
plan: currentPlan,
|
|
155
|
+
message: `Plan generated in ${iterations} iteration(s).`,
|
|
156
|
+
needsConfirmation: true,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Plan not satisfactory, will refine in next iteration
|
|
161
|
+
console.log(`Iteration ${iterations}: Refining plan...`);
|
|
162
|
+
}
|
|
163
|
+
// Max iterations reached
|
|
164
|
+
if (currentPlan) {
|
|
165
|
+
(0, session_1.setLastPlan)(currentPlan);
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
success: currentPlan !== null,
|
|
169
|
+
iterations,
|
|
170
|
+
plan: currentPlan,
|
|
171
|
+
message: `Max iterations (${MAX_PLAN_ITERATIONS}) reached.`,
|
|
172
|
+
needsConfirmation: currentPlan !== null,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// Run bounded generation loop
|
|
176
|
+
async function runGenerateLoop() {
|
|
177
|
+
const session = (0, session_1.getSession)();
|
|
178
|
+
const intent = (0, session_1.getIntent)();
|
|
179
|
+
if (!intent) {
|
|
180
|
+
return {
|
|
181
|
+
success: false,
|
|
182
|
+
iterations: 0,
|
|
183
|
+
changes: null,
|
|
184
|
+
message: 'No intent set. Enter a task first.',
|
|
185
|
+
needsConfirmation: false,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
if (!session.lastPlan || session.lastPlan.length === 0) {
|
|
189
|
+
return {
|
|
190
|
+
success: false,
|
|
191
|
+
iterations: 0,
|
|
192
|
+
changes: null,
|
|
193
|
+
message: 'No plan generated. Use /plan first.',
|
|
194
|
+
needsConfirmation: false,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
const apiKey = await (0, auth_1.ensureAuthenticated)();
|
|
198
|
+
let iterations = 0;
|
|
199
|
+
let currentChanges = null;
|
|
200
|
+
// Build context from workspace
|
|
201
|
+
const context = (0, context_builder_1.buildContext)(session.workingDirectory, intent, (0, session_1.getIntentType)() || 'COMMAND', session.openFiles.map(f => path.join(session.workingDirectory, f)));
|
|
202
|
+
const filesContext = (0, context_builder_1.formatContextForModel)(context);
|
|
203
|
+
const planSummary = session.lastPlan.map(step => `${step.id}. ${step.description}`).join('\n');
|
|
204
|
+
// Bounded generation loop
|
|
205
|
+
while (iterations < MAX_REFINE_ITERATIONS) {
|
|
206
|
+
iterations++;
|
|
207
|
+
const instruction = `Execute the following plan and output file changes.
|
|
208
|
+
|
|
209
|
+
Task: ${intent}
|
|
210
|
+
|
|
211
|
+
Plan:
|
|
212
|
+
${planSummary}
|
|
213
|
+
|
|
214
|
+
Working directory: ${session.workingDirectory}
|
|
215
|
+
Mode: ${session.mode}
|
|
216
|
+
|
|
217
|
+
${filesContext ? `Files:\n${filesContext}` : ''}
|
|
218
|
+
|
|
219
|
+
${currentChanges ? 'Previous output was invalid. Output valid file operations.' : ''}
|
|
220
|
+
|
|
221
|
+
Output file operations with exact paths and content. Use status, files array (with path, operation, content), or diffs array.`;
|
|
222
|
+
const result = await (0, runtime_1.execute)({
|
|
223
|
+
instruction,
|
|
224
|
+
enforceSchema: true,
|
|
225
|
+
}, apiKey);
|
|
226
|
+
if (!result.success) {
|
|
227
|
+
return {
|
|
228
|
+
success: false,
|
|
229
|
+
iterations,
|
|
230
|
+
changes: null,
|
|
231
|
+
message: `Generation failed: ${result.error}`,
|
|
232
|
+
needsConfirmation: false,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
const response = result.output;
|
|
236
|
+
if (areChangesValid(response)) {
|
|
237
|
+
(0, session_1.setLastDiff)(response);
|
|
238
|
+
(0, session_1.setPendingActions)(response);
|
|
239
|
+
return {
|
|
240
|
+
success: true,
|
|
241
|
+
iterations,
|
|
242
|
+
changes: response,
|
|
243
|
+
message: `Changes generated in ${iterations} iteration(s).`,
|
|
244
|
+
needsConfirmation: true,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
currentChanges = response;
|
|
248
|
+
console.log(`Iteration ${iterations}: Refining output...`);
|
|
249
|
+
}
|
|
250
|
+
// Max iterations reached
|
|
251
|
+
return {
|
|
252
|
+
success: false,
|
|
253
|
+
iterations,
|
|
254
|
+
changes: currentChanges,
|
|
255
|
+
message: `Max iterations (${MAX_REFINE_ITERATIONS}) reached. No valid changes generated.`,
|
|
256
|
+
needsConfirmation: false,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface Profile {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
settings: Partial<{
|
|
5
|
+
model: string;
|
|
6
|
+
contextScope: 'open' | 'touched' | 'full';
|
|
7
|
+
confirmationMode: 'strict' | 'normal';
|
|
8
|
+
maxPlanIterations: number;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export declare const BUILT_IN_PROFILES: Profile[];
|
|
12
|
+
export declare function getProfile(name: string): Profile | null;
|
|
13
|
+
export declare function listProfiles(): Profile[];
|
|
14
|
+
export declare function applyProfile(name: string): boolean;
|
|
15
|
+
export declare function getActiveProfileName(): string | null;
|
|
16
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;QAC1C,gBAAgB,EAAE,QAAQ,GAAG,QAAQ,CAAC;QACtC,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;CACJ;AAED,eAAO,MAAM,iBAAiB,EAAE,OAAO,EA+BtC,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAEvD;AAED,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAExC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAqBlD;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAgBpD"}
|
package/dist/profiles.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BUILT_IN_PROFILES = void 0;
|
|
4
|
+
exports.getProfile = getProfile;
|
|
5
|
+
exports.listProfiles = listProfiles;
|
|
6
|
+
exports.applyProfile = applyProfile;
|
|
7
|
+
exports.getActiveProfileName = getActiveProfileName;
|
|
8
|
+
const settings_1 = require("./settings");
|
|
9
|
+
exports.BUILT_IN_PROFILES = [
|
|
10
|
+
{
|
|
11
|
+
name: 'safe',
|
|
12
|
+
description: 'Conservative settings, strict confirmation',
|
|
13
|
+
settings: {
|
|
14
|
+
model: 'claude-sonnet-4-20250514',
|
|
15
|
+
contextScope: 'open',
|
|
16
|
+
confirmationMode: 'strict',
|
|
17
|
+
maxPlanIterations: 3,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'balanced',
|
|
22
|
+
description: 'Default settings for typical use',
|
|
23
|
+
settings: {
|
|
24
|
+
model: 'claude-sonnet-4-20250514',
|
|
25
|
+
contextScope: 'touched',
|
|
26
|
+
confirmationMode: 'strict',
|
|
27
|
+
maxPlanIterations: 5,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'fast',
|
|
32
|
+
description: 'Faster execution, less confirmation',
|
|
33
|
+
settings: {
|
|
34
|
+
model: 'claude-3-5-haiku-20241022',
|
|
35
|
+
contextScope: 'open',
|
|
36
|
+
confirmationMode: 'normal',
|
|
37
|
+
maxPlanIterations: 3,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
];
|
|
41
|
+
function getProfile(name) {
|
|
42
|
+
return exports.BUILT_IN_PROFILES.find(p => p.name === name) || null;
|
|
43
|
+
}
|
|
44
|
+
function listProfiles() {
|
|
45
|
+
return exports.BUILT_IN_PROFILES;
|
|
46
|
+
}
|
|
47
|
+
function applyProfile(name) {
|
|
48
|
+
const profile = getProfile(name);
|
|
49
|
+
if (!profile)
|
|
50
|
+
return false;
|
|
51
|
+
const settings = (0, settings_1.loadSettings)();
|
|
52
|
+
if (profile.settings.model) {
|
|
53
|
+
settings.model.current = profile.settings.model;
|
|
54
|
+
}
|
|
55
|
+
if (profile.settings.contextScope) {
|
|
56
|
+
settings.context.scope = profile.settings.contextScope;
|
|
57
|
+
}
|
|
58
|
+
if (profile.settings.confirmationMode) {
|
|
59
|
+
settings.execution.confirmationMode = profile.settings.confirmationMode;
|
|
60
|
+
}
|
|
61
|
+
if (profile.settings.maxPlanIterations !== undefined) {
|
|
62
|
+
settings.execution.maxPlanIterations = profile.settings.maxPlanIterations;
|
|
63
|
+
}
|
|
64
|
+
(0, settings_1.saveSettings)(settings);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
function getActiveProfileName() {
|
|
68
|
+
const settings = (0, settings_1.loadSettings)();
|
|
69
|
+
for (const profile of exports.BUILT_IN_PROFILES) {
|
|
70
|
+
const s = profile.settings;
|
|
71
|
+
if ((!s.model || settings.model.current === s.model) &&
|
|
72
|
+
(!s.contextScope || settings.context.scope === s.contextScope) &&
|
|
73
|
+
(!s.confirmationMode || settings.execution.confirmationMode === s.confirmationMode) &&
|
|
74
|
+
(s.maxPlanIterations === undefined || settings.execution.maxPlanIterations === s.maxPlanIterations)) {
|
|
75
|
+
return profile.name;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return 'custom';
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface BackupEntry {
|
|
2
|
+
path: string;
|
|
3
|
+
operation: 'create' | 'modify' | 'delete';
|
|
4
|
+
originalContent: string | null;
|
|
5
|
+
timestamp: string;
|
|
6
|
+
}
|
|
7
|
+
export interface RollbackState {
|
|
8
|
+
entries: BackupEntry[];
|
|
9
|
+
maxEntries: number;
|
|
10
|
+
}
|
|
11
|
+
declare let rollbackState: RollbackState;
|
|
12
|
+
export declare function createBackup(filePath: string, operation: 'create' | 'modify' | 'delete'): void;
|
|
13
|
+
export declare function undoLast(): {
|
|
14
|
+
success: boolean;
|
|
15
|
+
message: string;
|
|
16
|
+
entry?: BackupEntry;
|
|
17
|
+
};
|
|
18
|
+
export declare function undoN(count: number): {
|
|
19
|
+
success: boolean;
|
|
20
|
+
undone: number;
|
|
21
|
+
messages: string[];
|
|
22
|
+
};
|
|
23
|
+
export declare function getUndoHistory(): BackupEntry[];
|
|
24
|
+
export declare function getUndoCount(): number;
|
|
25
|
+
export declare function clearUndoHistory(): void;
|
|
26
|
+
export { rollbackState };
|
|
27
|
+
//# sourceMappingURL=rollback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../src/rollback.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,QAAA,IAAI,aAAa,EAAE,aAGlB,CAAC;AAGF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CA8B9F;AAGD,wBAAgB,QAAQ,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAA;CAAE,CAiDrF;AAGD,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAe7F;AAGD,wBAAgB,cAAc,IAAI,WAAW,EAAE,CAE9C;AAGD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAGD,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAGD,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/rollback.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
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.rollbackState = void 0;
|
|
37
|
+
exports.createBackup = createBackup;
|
|
38
|
+
exports.undoLast = undoLast;
|
|
39
|
+
exports.undoN = undoN;
|
|
40
|
+
exports.getUndoHistory = getUndoHistory;
|
|
41
|
+
exports.getUndoCount = getUndoCount;
|
|
42
|
+
exports.clearUndoHistory = clearUndoHistory;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const session_1 = require("./session");
|
|
46
|
+
// Global rollback state
|
|
47
|
+
let rollbackState = {
|
|
48
|
+
entries: [],
|
|
49
|
+
maxEntries: 50,
|
|
50
|
+
};
|
|
51
|
+
exports.rollbackState = rollbackState;
|
|
52
|
+
// Create backup before applying changes
|
|
53
|
+
function createBackup(filePath, operation) {
|
|
54
|
+
const session = (0, session_1.getSession)();
|
|
55
|
+
const absolutePath = path.isAbsolute(filePath)
|
|
56
|
+
? filePath
|
|
57
|
+
: path.join(session.workingDirectory, filePath);
|
|
58
|
+
let originalContent = null;
|
|
59
|
+
try {
|
|
60
|
+
if (fs.existsSync(absolutePath)) {
|
|
61
|
+
originalContent = fs.readFileSync(absolutePath, 'utf-8');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// File doesn't exist or can't be read
|
|
66
|
+
}
|
|
67
|
+
const entry = {
|
|
68
|
+
path: absolutePath,
|
|
69
|
+
operation,
|
|
70
|
+
originalContent,
|
|
71
|
+
timestamp: new Date().toISOString(),
|
|
72
|
+
};
|
|
73
|
+
// Add to stack
|
|
74
|
+
rollbackState.entries.push(entry);
|
|
75
|
+
// Limit stack size
|
|
76
|
+
if (rollbackState.entries.length > rollbackState.maxEntries) {
|
|
77
|
+
rollbackState.entries.shift();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Undo last operation
|
|
81
|
+
function undoLast() {
|
|
82
|
+
if (rollbackState.entries.length === 0) {
|
|
83
|
+
return { success: false, message: 'Nothing to undo.' };
|
|
84
|
+
}
|
|
85
|
+
const entry = rollbackState.entries.pop();
|
|
86
|
+
try {
|
|
87
|
+
switch (entry.operation) {
|
|
88
|
+
case 'create':
|
|
89
|
+
// File was created, delete it
|
|
90
|
+
if (entry.originalContent === null) {
|
|
91
|
+
if (fs.existsSync(entry.path)) {
|
|
92
|
+
fs.unlinkSync(entry.path);
|
|
93
|
+
}
|
|
94
|
+
return { success: true, message: `Deleted: ${entry.path}`, entry };
|
|
95
|
+
}
|
|
96
|
+
// File existed before, restore original
|
|
97
|
+
fs.writeFileSync(entry.path, entry.originalContent, 'utf-8');
|
|
98
|
+
return { success: true, message: `Restored: ${entry.path}`, entry };
|
|
99
|
+
case 'modify':
|
|
100
|
+
// Restore original content
|
|
101
|
+
if (entry.originalContent !== null) {
|
|
102
|
+
fs.writeFileSync(entry.path, entry.originalContent, 'utf-8');
|
|
103
|
+
return { success: true, message: `Restored: ${entry.path}`, entry };
|
|
104
|
+
}
|
|
105
|
+
return { success: false, message: `No backup content for: ${entry.path}` };
|
|
106
|
+
case 'delete':
|
|
107
|
+
// File was deleted, restore it
|
|
108
|
+
if (entry.originalContent !== null) {
|
|
109
|
+
const dir = path.dirname(entry.path);
|
|
110
|
+
if (!fs.existsSync(dir)) {
|
|
111
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
112
|
+
}
|
|
113
|
+
fs.writeFileSync(entry.path, entry.originalContent, 'utf-8');
|
|
114
|
+
return { success: true, message: `Restored: ${entry.path}`, entry };
|
|
115
|
+
}
|
|
116
|
+
return { success: false, message: `Cannot restore deleted file (no backup): ${entry.path}` };
|
|
117
|
+
default:
|
|
118
|
+
return { success: false, message: `Unknown operation: ${entry.operation}` };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
// Re-add entry if undo failed
|
|
123
|
+
rollbackState.entries.push(entry);
|
|
124
|
+
return { success: false, message: `Undo failed: ${err.message}` };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Undo multiple operations
|
|
128
|
+
function undoN(count) {
|
|
129
|
+
const messages = [];
|
|
130
|
+
let undone = 0;
|
|
131
|
+
for (let i = 0; i < count; i++) {
|
|
132
|
+
const result = undoLast();
|
|
133
|
+
if (!result.success) {
|
|
134
|
+
messages.push(result.message);
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
messages.push(result.message);
|
|
138
|
+
undone++;
|
|
139
|
+
}
|
|
140
|
+
return { success: undone > 0, undone, messages };
|
|
141
|
+
}
|
|
142
|
+
// Get undo history
|
|
143
|
+
function getUndoHistory() {
|
|
144
|
+
return [...rollbackState.entries];
|
|
145
|
+
}
|
|
146
|
+
// Get pending undo count
|
|
147
|
+
function getUndoCount() {
|
|
148
|
+
return rollbackState.entries.length;
|
|
149
|
+
}
|
|
150
|
+
// Clear undo history
|
|
151
|
+
function clearUndoHistory() {
|
|
152
|
+
rollbackState.entries = [];
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=rollback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollback.js","sourceRoot":"","sources":["../src/rollback.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,oCA8BC;AAGD,4BAiDC;AAGD,sBAeC;AAGD,wCAEC;AAGD,oCAEC;AAGD,4CAEC;AA5ID,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAuC;AAgBvC,wBAAwB;AACxB,IAAI,aAAa,GAAkB;IACjC,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;CACf,CAAC;AAyHO,sCAAa;AAvHtB,wCAAwC;AACxC,SAAgB,YAAY,CAAC,QAAgB,EAAE,SAAyC;IACtF,MAAM,OAAO,GAAG,IAAA,oBAAU,GAAE,CAAC;IAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAElD,IAAI,eAAe,GAAkB,IAAI,CAAC;IAE1C,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IAED,MAAM,KAAK,GAAgB;QACzB,IAAI,EAAE,YAAY;QAClB,SAAS;QACT,eAAe;QACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IAEF,eAAe;IACf,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAElC,mBAAmB;IACnB,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,CAAC;QAC5D,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED,sBAAsB;AACtB,SAAgB,QAAQ;IACtB,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAG,CAAC;IAE3C,IAAI,CAAC;QACH,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC;YACxB,KAAK,QAAQ;gBACX,8BAA8B;gBAC9B,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;oBACnC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC5B,CAAC;oBACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;gBACrE,CAAC;gBACD,wCAAwC;gBACxC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;gBAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;YAEtE,KAAK,QAAQ;gBACX,2BAA2B;gBAC3B,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;oBACnC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;oBAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;gBACtE,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAE7E,KAAK,QAAQ;gBACX,+BAA+B;gBAC/B,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;oBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACzC,CAAC;oBACD,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;oBAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;gBACtE,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,4CAA4C,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAE/F;gBACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;QAChF,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,8BAA8B;QAC9B,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACpE,CAAC;AACH,CAAC;AAED,2BAA2B;AAC3B,SAAgB,KAAK,CAAC,KAAa;IACjC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM;QACR,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,EAAE,CAAC;IACX,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACnD,CAAC;AAED,mBAAmB;AACnB,SAAgB,cAAc;IAC5B,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,yBAAyB;AACzB,SAAgB,YAAY;IAC1B,OAAO,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;AACtC,CAAC;AAED,qBAAqB;AACrB,SAAgB,gBAAgB;IAC9B,aAAa,CAAC,OAAO,GAAG,EAAE,CAAC;AAC7B,CAAC"}
|