@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
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.openSettingsMenu = openSettingsMenu;
|
|
4
|
+
const settings_1 = require("./settings");
|
|
5
|
+
// Build menu sections
|
|
6
|
+
function buildSections() {
|
|
7
|
+
return [
|
|
8
|
+
{
|
|
9
|
+
name: 'Model',
|
|
10
|
+
items: [
|
|
11
|
+
{ type: 'label', text: 'Select AI model for execution' },
|
|
12
|
+
{
|
|
13
|
+
type: 'select',
|
|
14
|
+
key: 'model',
|
|
15
|
+
label: 'Model',
|
|
16
|
+
options: settings_1.AVAILABLE_MODELS,
|
|
17
|
+
getValue: (s) => s.model.current,
|
|
18
|
+
setValue: (s, v) => { s.model.current = v; }
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'UI',
|
|
24
|
+
items: [
|
|
25
|
+
{ type: 'toggle', key: 'asciiLogo', label: 'ASCII Logo', values: ['on', 'off'], getValue: (s) => s.ui.asciiLogo, setValue: (s, v) => { s.ui.asciiLogo = v; } },
|
|
26
|
+
{ type: 'toggle', key: 'color', label: 'Color Output', values: ['auto', 'on', 'off'], getValue: (s) => s.ui.color, setValue: (s, v) => { s.ui.color = v; } },
|
|
27
|
+
{ type: 'toggle', key: 'promptStyle', label: 'Prompt Style', values: ['compact', 'verbose'], getValue: (s) => s.ui.promptStyle, setValue: (s, v) => { s.ui.promptStyle = v; } },
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'Execution',
|
|
32
|
+
items: [
|
|
33
|
+
{ type: 'toggle', key: 'confirmationMode', label: 'Confirmation', values: ['strict', 'normal'], getValue: (s) => s.execution.confirmationMode, setValue: (s, v) => { s.execution.confirmationMode = v; } },
|
|
34
|
+
{ type: 'number', key: 'maxPlanIterations', label: 'Max Iterations', min: 1, max: 5, getValue: (s) => s.execution.maxPlanIterations, setValue: (s, v) => { s.execution.maxPlanIterations = v; } },
|
|
35
|
+
{ type: 'toggle', key: 'allowShellExec', label: 'Shell Execution', values: ['off', 'on'], getValue: (s) => s.execution.allowShellExec ? 'on' : 'off', setValue: (s, v) => { s.execution.allowShellExec = v === 'on'; } },
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Context',
|
|
40
|
+
items: [
|
|
41
|
+
{ type: 'toggle', key: 'scope', label: 'Scope', values: ['open', 'touched', 'full'], getValue: (s) => s.context.scope, setValue: (s, v) => { s.context.scope = v; } },
|
|
42
|
+
{ type: 'number', key: 'maxTokens', label: 'Max Tokens', min: 10000, max: 100000, getValue: (s) => s.context.maxTokens, setValue: (s, v) => { s.context.maxTokens = v; } },
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'Debug',
|
|
47
|
+
items: [
|
|
48
|
+
{ type: 'toggle', key: 'logging', label: 'Debug Logging', values: ['off', 'on'], getValue: (s) => s.debug.logging ? 'on' : 'off', setValue: (s, v) => { s.debug.logging = v === 'on'; } },
|
|
49
|
+
{ type: 'toggle', key: 'errorDetail', label: 'Error Detail', values: ['brief', 'full'], getValue: (s) => s.debug.errorDetail, setValue: (s, v) => { s.debug.errorDetail = v; } },
|
|
50
|
+
{ type: 'toggle', key: 'dumpState', label: 'Dump State', values: ['off', 'on'], getValue: (s) => s.debug.dumpState ? 'on' : 'off', setValue: (s, v) => { s.debug.dumpState = v === 'on'; } },
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'Exit',
|
|
55
|
+
items: [
|
|
56
|
+
{ type: 'action', key: 'save', label: 'Save & Exit', action: () => true },
|
|
57
|
+
{ type: 'action', key: 'cancel', label: 'Exit Without Saving', action: () => false },
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
// Clear screen and move cursor to top
|
|
63
|
+
function clearScreen() {
|
|
64
|
+
process.stdout.write('\x1b[2J\x1b[H');
|
|
65
|
+
}
|
|
66
|
+
// Render the menu
|
|
67
|
+
function render(sections, sectionIndex, itemIndex, settings, warning) {
|
|
68
|
+
clearScreen();
|
|
69
|
+
const section = sections[sectionIndex];
|
|
70
|
+
const width = 50;
|
|
71
|
+
// Header
|
|
72
|
+
console.log('┌' + '─'.repeat(width - 2) + '┐');
|
|
73
|
+
console.log('│' + ' Settings'.padEnd(width - 2) + '│');
|
|
74
|
+
console.log('├' + '─'.repeat(width - 2) + '┤');
|
|
75
|
+
// Section tabs
|
|
76
|
+
let tabs = '│ ';
|
|
77
|
+
for (let i = 0; i < sections.length; i++) {
|
|
78
|
+
const name = sections[i].name;
|
|
79
|
+
if (i === sectionIndex) {
|
|
80
|
+
tabs += `[${name}] `;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
tabs += `${name} `;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
tabs = tabs.padEnd(width - 1) + '│';
|
|
87
|
+
console.log(tabs);
|
|
88
|
+
console.log('├' + '─'.repeat(width - 2) + '┤');
|
|
89
|
+
// Items
|
|
90
|
+
const items = section.items;
|
|
91
|
+
for (let i = 0; i < items.length; i++) {
|
|
92
|
+
const item = items[i];
|
|
93
|
+
const selected = i === itemIndex;
|
|
94
|
+
const prefix = selected ? '│ > ' : '│ ';
|
|
95
|
+
let line = '';
|
|
96
|
+
if (item.type === 'label') {
|
|
97
|
+
line = item.text;
|
|
98
|
+
}
|
|
99
|
+
else if (item.type === 'toggle' || item.type === 'select') {
|
|
100
|
+
const value = item.getValue(settings);
|
|
101
|
+
const values = item.type === 'toggle' ? item.values : item.options;
|
|
102
|
+
const valueStr = values.map(v => v === value ? `[${v}]` : v).join(' ');
|
|
103
|
+
line = `${item.label}: ${valueStr}`;
|
|
104
|
+
}
|
|
105
|
+
else if (item.type === 'number') {
|
|
106
|
+
const value = item.getValue(settings);
|
|
107
|
+
line = `${item.label}: < ${value} > (${item.min}-${item.max})`;
|
|
108
|
+
}
|
|
109
|
+
else if (item.type === 'action') {
|
|
110
|
+
line = item.label;
|
|
111
|
+
}
|
|
112
|
+
console.log(prefix + line.padEnd(width - 5) + '│');
|
|
113
|
+
}
|
|
114
|
+
// Padding
|
|
115
|
+
const padding = Math.max(0, 8 - items.length);
|
|
116
|
+
for (let i = 0; i < padding; i++) {
|
|
117
|
+
console.log('│' + ' '.repeat(width - 2) + '│');
|
|
118
|
+
}
|
|
119
|
+
// Warning
|
|
120
|
+
console.log('├' + '─'.repeat(width - 2) + '┤');
|
|
121
|
+
if (warning) {
|
|
122
|
+
console.log('│ ' + warning.substring(0, width - 4).padEnd(width - 3) + '│');
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
console.log('│' + ' '.repeat(width - 2) + '│');
|
|
126
|
+
}
|
|
127
|
+
// Help
|
|
128
|
+
console.log('├' + '─'.repeat(width - 2) + '┤');
|
|
129
|
+
console.log('│ ↑↓ navigate ←→ change Tab section Esc exit │');
|
|
130
|
+
console.log('└' + '─'.repeat(width - 2) + '┘');
|
|
131
|
+
}
|
|
132
|
+
// Main menu loop
|
|
133
|
+
async function openSettingsMenu() {
|
|
134
|
+
const sections = buildSections();
|
|
135
|
+
const originalSettings = JSON.parse(JSON.stringify((0, settings_1.loadSettings)()));
|
|
136
|
+
let settings = (0, settings_1.loadSettings)();
|
|
137
|
+
let sectionIndex = 0;
|
|
138
|
+
let itemIndex = 0;
|
|
139
|
+
let warning = null;
|
|
140
|
+
let running = true;
|
|
141
|
+
let shouldSave = false;
|
|
142
|
+
// Setup raw mode
|
|
143
|
+
if (process.stdin.isTTY) {
|
|
144
|
+
process.stdin.setRawMode(true);
|
|
145
|
+
}
|
|
146
|
+
process.stdin.resume();
|
|
147
|
+
process.stdin.setEncoding('utf8');
|
|
148
|
+
render(sections, sectionIndex, itemIndex, settings, warning);
|
|
149
|
+
return new Promise((resolve) => {
|
|
150
|
+
const handleKey = (key) => {
|
|
151
|
+
warning = null;
|
|
152
|
+
const section = sections[sectionIndex];
|
|
153
|
+
const items = section.items;
|
|
154
|
+
const item = items[itemIndex];
|
|
155
|
+
// Escape - exit without saving
|
|
156
|
+
if (key === '\x1b' || key === '\x1b\x1b') {
|
|
157
|
+
running = false;
|
|
158
|
+
shouldSave = false;
|
|
159
|
+
}
|
|
160
|
+
// Up arrow
|
|
161
|
+
else if (key === '\x1b[A') {
|
|
162
|
+
itemIndex = Math.max(0, itemIndex - 1);
|
|
163
|
+
// Skip labels
|
|
164
|
+
while (itemIndex > 0 && items[itemIndex].type === 'label') {
|
|
165
|
+
itemIndex--;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Down arrow
|
|
169
|
+
else if (key === '\x1b[B') {
|
|
170
|
+
itemIndex = Math.min(items.length - 1, itemIndex + 1);
|
|
171
|
+
// Skip labels
|
|
172
|
+
while (itemIndex < items.length - 1 && items[itemIndex].type === 'label') {
|
|
173
|
+
itemIndex++;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// Left arrow
|
|
177
|
+
else if (key === '\x1b[D') {
|
|
178
|
+
if (item.type === 'toggle' || item.type === 'select') {
|
|
179
|
+
const values = item.type === 'toggle' ? item.values : item.options;
|
|
180
|
+
const current = item.getValue(settings);
|
|
181
|
+
const idx = values.indexOf(current);
|
|
182
|
+
const newIdx = (idx - 1 + values.length) % values.length;
|
|
183
|
+
item.setValue(settings, values[newIdx]);
|
|
184
|
+
// Warning for full repo scope
|
|
185
|
+
if (item.key === 'scope' && values[newIdx] === 'full') {
|
|
186
|
+
warning = 'Warning: Full repo may be slow';
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else if (item.type === 'number') {
|
|
190
|
+
const current = item.getValue(settings);
|
|
191
|
+
const step = item.max > 1000 ? 5000 : 1;
|
|
192
|
+
const newVal = Math.max(item.min, current - step);
|
|
193
|
+
item.setValue(settings, newVal);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Right arrow
|
|
197
|
+
else if (key === '\x1b[C') {
|
|
198
|
+
if (item.type === 'toggle' || item.type === 'select') {
|
|
199
|
+
const values = item.type === 'toggle' ? item.values : item.options;
|
|
200
|
+
const current = item.getValue(settings);
|
|
201
|
+
const idx = values.indexOf(current);
|
|
202
|
+
const newIdx = (idx + 1) % values.length;
|
|
203
|
+
item.setValue(settings, values[newIdx]);
|
|
204
|
+
if (item.key === 'scope' && values[newIdx] === 'full') {
|
|
205
|
+
warning = 'Warning: Full repo may be slow';
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else if (item.type === 'number') {
|
|
209
|
+
const current = item.getValue(settings);
|
|
210
|
+
const step = item.max > 1000 ? 5000 : 1;
|
|
211
|
+
const newVal = Math.min(item.max, current + step);
|
|
212
|
+
item.setValue(settings, newVal);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Tab - next section
|
|
216
|
+
else if (key === '\t') {
|
|
217
|
+
sectionIndex = (sectionIndex + 1) % sections.length;
|
|
218
|
+
itemIndex = 0;
|
|
219
|
+
// Skip labels
|
|
220
|
+
while (itemIndex < sections[sectionIndex].items.length - 1 && sections[sectionIndex].items[itemIndex].type === 'label') {
|
|
221
|
+
itemIndex++;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Shift+Tab - previous section (usually \x1b[Z)
|
|
225
|
+
else if (key === '\x1b[Z') {
|
|
226
|
+
sectionIndex = (sectionIndex - 1 + sections.length) % sections.length;
|
|
227
|
+
itemIndex = 0;
|
|
228
|
+
while (itemIndex < sections[sectionIndex].items.length - 1 && sections[sectionIndex].items[itemIndex].type === 'label') {
|
|
229
|
+
itemIndex++;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Enter
|
|
233
|
+
else if (key === '\r' || key === '\n') {
|
|
234
|
+
if (item.type === 'action') {
|
|
235
|
+
shouldSave = item.action();
|
|
236
|
+
running = false;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (running) {
|
|
240
|
+
render(sections, sectionIndex, itemIndex, settings, warning);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
// Cleanup
|
|
244
|
+
if (process.stdin.isTTY) {
|
|
245
|
+
process.stdin.setRawMode(false);
|
|
246
|
+
}
|
|
247
|
+
process.stdin.pause();
|
|
248
|
+
process.stdin.removeListener('data', handleKey);
|
|
249
|
+
clearScreen();
|
|
250
|
+
if (shouldSave) {
|
|
251
|
+
(0, settings_1.saveSettings)(settings);
|
|
252
|
+
console.log('Settings saved.');
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
// Restore original
|
|
256
|
+
Object.assign(settings, originalSettings);
|
|
257
|
+
console.log('Settings unchanged.');
|
|
258
|
+
}
|
|
259
|
+
resolve();
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
process.stdin.on('data', handleKey);
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=settings_menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings_menu.js","sourceRoot":"","sources":["../src/settings_menu.ts"],"names":[],"mappings":"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"}
|
package/dist/shell.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare const ALLOWED_COMMANDS: Set<string>;
|
|
2
|
+
declare const DANGEROUS_PATTERNS: RegExp[];
|
|
3
|
+
export interface ExecResult {
|
|
4
|
+
success: boolean;
|
|
5
|
+
command: string;
|
|
6
|
+
stdout: string;
|
|
7
|
+
stderr: string;
|
|
8
|
+
exitCode: number;
|
|
9
|
+
error?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function validateCommand(command: string): {
|
|
12
|
+
valid: boolean;
|
|
13
|
+
error?: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function executeCommand(command: string, cwd?: string): ExecResult;
|
|
16
|
+
export declare function getAllowedCommands(): string[];
|
|
17
|
+
export { ALLOWED_COMMANDS, DANGEROUS_PATTERNS };
|
|
18
|
+
//# sourceMappingURL=shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,gBAAgB,aAwBpB,CAAC;AAGH,QAAA,MAAM,kBAAkB,UAkBvB,CAAC;AAGF,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA4BnF;AAGD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CA4CxE;AAGD,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAGD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC"}
|
package/dist/shell.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DANGEROUS_PATTERNS = exports.ALLOWED_COMMANDS = void 0;
|
|
4
|
+
exports.validateCommand = validateCommand;
|
|
5
|
+
exports.executeCommand = executeCommand;
|
|
6
|
+
exports.getAllowedCommands = getAllowedCommands;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const session_1 = require("./session");
|
|
9
|
+
// Allowlist of permitted commands
|
|
10
|
+
const ALLOWED_COMMANDS = new Set([
|
|
11
|
+
'git',
|
|
12
|
+
'npm',
|
|
13
|
+
'pnpm',
|
|
14
|
+
'yarn',
|
|
15
|
+
'node',
|
|
16
|
+
'npx',
|
|
17
|
+
'tsc',
|
|
18
|
+
'jest',
|
|
19
|
+
'vitest',
|
|
20
|
+
'mocha',
|
|
21
|
+
'pytest',
|
|
22
|
+
'go',
|
|
23
|
+
'cargo',
|
|
24
|
+
'make',
|
|
25
|
+
'ls',
|
|
26
|
+
'cat',
|
|
27
|
+
'head',
|
|
28
|
+
'tail',
|
|
29
|
+
'wc',
|
|
30
|
+
'grep',
|
|
31
|
+
'find',
|
|
32
|
+
'pwd',
|
|
33
|
+
'echo',
|
|
34
|
+
]);
|
|
35
|
+
exports.ALLOWED_COMMANDS = ALLOWED_COMMANDS;
|
|
36
|
+
// Dangerous patterns that are never allowed
|
|
37
|
+
const DANGEROUS_PATTERNS = [
|
|
38
|
+
/\|/, // Pipes
|
|
39
|
+
/>/, // Redirects
|
|
40
|
+
/</, // Input redirects
|
|
41
|
+
/;/, // Command chaining
|
|
42
|
+
/&&/, // AND chaining
|
|
43
|
+
/\|\|/, // OR chaining
|
|
44
|
+
/`/, // Backticks
|
|
45
|
+
/\$\(/, // Command substitution
|
|
46
|
+
/\$\{/, // Variable expansion
|
|
47
|
+
/rm\s+-rf/i, // Dangerous rm
|
|
48
|
+
/rm\s+--no-preserve-root/i,
|
|
49
|
+
/sudo/i, // Sudo
|
|
50
|
+
/chmod\s+777/, // Dangerous chmod
|
|
51
|
+
/curl.*\|.*sh/i, // Curl pipe to shell
|
|
52
|
+
/wget.*\|.*sh/i, // Wget pipe to shell
|
|
53
|
+
/eval/i, // Eval
|
|
54
|
+
/exec/i, // Exec (the shell builtin)
|
|
55
|
+
];
|
|
56
|
+
exports.DANGEROUS_PATTERNS = DANGEROUS_PATTERNS;
|
|
57
|
+
// Validate command against allowlist
|
|
58
|
+
function validateCommand(command) {
|
|
59
|
+
const trimmed = command.trim();
|
|
60
|
+
if (!trimmed) {
|
|
61
|
+
return { valid: false, error: 'Empty command' };
|
|
62
|
+
}
|
|
63
|
+
// Check for dangerous patterns
|
|
64
|
+
for (const pattern of DANGEROUS_PATTERNS) {
|
|
65
|
+
if (pattern.test(trimmed)) {
|
|
66
|
+
return { valid: false, error: `Dangerous pattern detected: ${pattern.source}` };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Extract the base command
|
|
70
|
+
const parts = trimmed.split(/\s+/);
|
|
71
|
+
const baseCommand = parts[0];
|
|
72
|
+
if (!baseCommand) {
|
|
73
|
+
return { valid: false, error: 'Could not parse command' };
|
|
74
|
+
}
|
|
75
|
+
// Check allowlist
|
|
76
|
+
if (!ALLOWED_COMMANDS.has(baseCommand)) {
|
|
77
|
+
return { valid: false, error: `Command not allowed: ${baseCommand}. Allowed: ${Array.from(ALLOWED_COMMANDS).join(', ')}` };
|
|
78
|
+
}
|
|
79
|
+
return { valid: true };
|
|
80
|
+
}
|
|
81
|
+
// Execute a command safely
|
|
82
|
+
function executeCommand(command, cwd) {
|
|
83
|
+
const validation = validateCommand(command);
|
|
84
|
+
if (!validation.valid) {
|
|
85
|
+
return {
|
|
86
|
+
success: false,
|
|
87
|
+
command,
|
|
88
|
+
stdout: '',
|
|
89
|
+
stderr: '',
|
|
90
|
+
exitCode: -1,
|
|
91
|
+
error: validation.error,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const session = (0, session_1.getSession)();
|
|
95
|
+
const workingDir = cwd || session.workingDirectory;
|
|
96
|
+
const options = {
|
|
97
|
+
cwd: workingDir,
|
|
98
|
+
encoding: 'utf-8',
|
|
99
|
+
timeout: 30000, // 30 second timeout
|
|
100
|
+
maxBuffer: 1024 * 1024 * 5, // 5MB buffer
|
|
101
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
102
|
+
};
|
|
103
|
+
try {
|
|
104
|
+
const stdout = (0, child_process_1.execSync)(command, options);
|
|
105
|
+
return {
|
|
106
|
+
success: true,
|
|
107
|
+
command,
|
|
108
|
+
stdout: stdout || '',
|
|
109
|
+
stderr: '',
|
|
110
|
+
exitCode: 0,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
return {
|
|
115
|
+
success: false,
|
|
116
|
+
command,
|
|
117
|
+
stdout: err.stdout?.toString() || '',
|
|
118
|
+
stderr: err.stderr?.toString() || '',
|
|
119
|
+
exitCode: err.status || 1,
|
|
120
|
+
error: err.message,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Get list of allowed commands
|
|
125
|
+
function getAllowedCommands() {
|
|
126
|
+
return Array.from(ALLOWED_COMMANDS).sort();
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":";;;AA8DA,0CA4BC;AAGD,wCA4CC;AAGD,gDAEC;AA9ID,iDAA0D;AAC1D,uCAAuC;AAEvC,kCAAkC;AAClC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,IAAI;IACJ,OAAO;IACP,MAAM;IACN,IAAI;IACJ,KAAK;IACL,MAAM;IACN,MAAM;IACN,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;CACP,CAAC,CAAC;AAqHM,4CAAgB;AAnHzB,4CAA4C;AAC5C,MAAM,kBAAkB,GAAG;IACzB,IAAI,EAAY,QAAQ;IACxB,GAAG,EAAa,YAAY;IAC5B,GAAG,EAAa,kBAAkB;IAClC,GAAG,EAAa,mBAAmB;IACnC,IAAI,EAAY,eAAe;IAC/B,MAAM,EAAU,cAAc;IAC9B,GAAG,EAAa,YAAY;IAC5B,MAAM,EAAU,uBAAuB;IACvC,MAAM,EAAU,qBAAqB;IACrC,WAAW,EAAK,eAAe;IAC/B,0BAA0B;IAC1B,OAAO,EAAS,OAAO;IACvB,aAAa,EAAG,kBAAkB;IAClC,eAAe,EAAE,qBAAqB;IACtC,eAAe,EAAE,qBAAqB;IACtC,OAAO,EAAS,OAAO;IACvB,OAAO,EAAS,2BAA2B;CAC5C,CAAC;AAgGyB,gDAAkB;AApF7C,qCAAqC;AACrC,SAAgB,eAAe,CAAC,OAAe;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAClD,CAAC;IAED,+BAA+B;IAC/B,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAClF,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;IAC5D,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,WAAW,cAAc,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IAC7H,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,2BAA2B;AAC3B,SAAgB,cAAc,CAAC,OAAe,EAAE,GAAY;IAC1D,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO;YACP,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,CAAC,CAAC;YACZ,KAAK,EAAE,UAAU,CAAC,KAAK;SACxB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,oBAAU,GAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAEnD,MAAM,OAAO,GAAoB;QAC/B,GAAG,EAAE,UAAU;QACf,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,KAAK,EAAE,oBAAoB;QACpC,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,aAAa;QACzC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,OAAO,EAAE,OAAO,CAAW,CAAC;QACpD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO;YACP,MAAM,EAAE,MAAM,IAAI,EAAE;YACpB,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO;YACP,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACpC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACpC,QAAQ,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC;YACzB,KAAK,EAAE,GAAG,CAAC,OAAO;SACnB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,+BAA+B;AAC/B,SAAgB,kBAAkB;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TaskStep } from './session';
|
|
2
|
+
export declare function decomposeTask(): Promise<{
|
|
3
|
+
success: boolean;
|
|
4
|
+
steps: TaskStep[];
|
|
5
|
+
message: string;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function planCurrentStep(): Promise<{
|
|
8
|
+
success: boolean;
|
|
9
|
+
message: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare function printProgress(): void;
|
|
12
|
+
export declare function completeCurrentStep(): {
|
|
13
|
+
success: boolean;
|
|
14
|
+
hasMore: boolean;
|
|
15
|
+
message: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function skipCurrentStep(): {
|
|
18
|
+
success: boolean;
|
|
19
|
+
hasMore: boolean;
|
|
20
|
+
message: string;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=task_runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task_runner.d.ts","sourceRoot":"","sources":["../src/task_runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAWT,MAAM,WAAW,CAAC;AAoDnB,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAwDvG;AAGD,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAsDtF;AAGD,wBAAgB,aAAa,IAAI,IAAI,CA0BpC;AAGD,wBAAgB,mBAAmB,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAmB7F;AAGD,wBAAgB,eAAe,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAmBzF"}
|