@calliopelabs/cli 0.4.6 → 0.6.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/README.md +258 -105
- package/dist/branching.d.ts +56 -0
- package/dist/branching.d.ts.map +1 -0
- package/dist/branching.js +211 -0
- package/dist/branching.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +235 -2
- package/dist/cli.js.map +1 -1
- package/dist/completion.d.ts +75 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +234 -0
- package/dist/completion.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +90 -0
- package/dist/config.js.map +1 -1
- package/dist/diff.d.ts +73 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +317 -0
- package/dist/diff.js.map +1 -0
- package/dist/errors.d.ts +41 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +199 -0
- package/dist/errors.js.map +1 -0
- package/dist/file-watcher.d.ts +91 -0
- package/dist/file-watcher.d.ts.map +1 -0
- package/dist/file-watcher.js +269 -0
- package/dist/file-watcher.js.map +1 -0
- package/dist/files.d.ts +49 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +191 -0
- package/dist/files.js.map +1 -0
- package/dist/fuzzy-search.d.ts +75 -0
- package/dist/fuzzy-search.d.ts.map +1 -0
- package/dist/fuzzy-search.js +240 -0
- package/dist/fuzzy-search.js.map +1 -0
- package/dist/hooks.d.ts +79 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +271 -0
- package/dist/hooks.js.map +1 -0
- package/dist/keyboard.d.ts +57 -0
- package/dist/keyboard.d.ts.map +1 -0
- package/dist/keyboard.js +265 -0
- package/dist/keyboard.js.map +1 -0
- package/dist/markdown.d.ts +14 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +248 -0
- package/dist/markdown.js.map +1 -0
- package/dist/mcp.d.ts +90 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +290 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +104 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +394 -0
- package/dist/memory.js.map +1 -0
- package/dist/model-router.d.ts +67 -0
- package/dist/model-router.d.ts.map +1 -0
- package/dist/model-router.js +289 -0
- package/dist/model-router.js.map +1 -0
- package/dist/parallel-tools.d.ts +51 -0
- package/dist/parallel-tools.d.ts.map +1 -0
- package/dist/parallel-tools.js +278 -0
- package/dist/parallel-tools.js.map +1 -0
- package/dist/project-config.d.ts +84 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +250 -0
- package/dist/project-config.js.map +1 -0
- package/dist/providers.d.ts +10 -2
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +240 -38
- package/dist/providers.js.map +1 -1
- package/dist/risk.d.ts +31 -0
- package/dist/risk.d.ts.map +1 -0
- package/dist/risk.js +367 -0
- package/dist/risk.js.map +1 -0
- package/dist/sandbox.d.ts +49 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +347 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/skills.d.ts +71 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +383 -0
- package/dist/skills.js.map +1 -0
- package/dist/storage.d.ts +139 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +508 -0
- package/dist/storage.js.map +1 -0
- package/dist/streaming.d.ts +94 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +305 -0
- package/dist/streaming.js.map +1 -0
- package/dist/summarization.d.ts +76 -0
- package/dist/summarization.d.ts.map +1 -0
- package/dist/summarization.js +242 -0
- package/dist/summarization.js.map +1 -0
- package/dist/themes.d.ts +110 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +329 -0
- package/dist/themes.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +335 -1
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +56 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +105 -0
- package/dist/types.js.map +1 -1
- package/dist/ui-cli.d.ts +9 -2
- package/dist/ui-cli.d.ts.map +1 -1
- package/dist/ui-cli.js +1315 -220
- package/dist/ui-cli.js.map +1 -1
- package/package.json +1 -1
package/dist/risk.js
ADDED
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Risk Assessment
|
|
3
|
+
*
|
|
4
|
+
* Evaluates the risk level of tool operations and shell commands.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Shell command patterns by risk level
|
|
8
|
+
*/
|
|
9
|
+
const SHELL_PATTERNS = {
|
|
10
|
+
none: [], // Shell commands are never 'none' risk
|
|
11
|
+
low: [
|
|
12
|
+
/^ls(\s|$)/,
|
|
13
|
+
/^cat\s/,
|
|
14
|
+
/^head\s/,
|
|
15
|
+
/^tail\s/,
|
|
16
|
+
/^grep\s/,
|
|
17
|
+
/^find\s/,
|
|
18
|
+
/^pwd$/,
|
|
19
|
+
/^echo\s/,
|
|
20
|
+
/^wc\s/,
|
|
21
|
+
/^sort\s/,
|
|
22
|
+
/^uniq\s/,
|
|
23
|
+
/^diff\s/,
|
|
24
|
+
/^which\s/,
|
|
25
|
+
/^whoami$/,
|
|
26
|
+
/^date$/,
|
|
27
|
+
/^cal(\s|$)/,
|
|
28
|
+
/^git\s+status/,
|
|
29
|
+
/^git\s+log/,
|
|
30
|
+
/^git\s+diff/,
|
|
31
|
+
/^git\s+branch/,
|
|
32
|
+
/^git\s+show/,
|
|
33
|
+
/^git\s+remote\s+-v/,
|
|
34
|
+
/^npm\s+list/,
|
|
35
|
+
/^npm\s+view/,
|
|
36
|
+
/^npm\s+search/,
|
|
37
|
+
/^node\s+--version/,
|
|
38
|
+
/^npm\s+--version/,
|
|
39
|
+
/^tsc\s+--version/,
|
|
40
|
+
/^python\s+--version/,
|
|
41
|
+
/^env$/,
|
|
42
|
+
/^printenv/,
|
|
43
|
+
],
|
|
44
|
+
medium: [
|
|
45
|
+
/^git\s+add/,
|
|
46
|
+
/^git\s+commit/,
|
|
47
|
+
/^git\s+checkout/,
|
|
48
|
+
/^git\s+branch\s+-[dD]/,
|
|
49
|
+
/^git\s+stash/,
|
|
50
|
+
/^git\s+merge/,
|
|
51
|
+
/^git\s+rebase/,
|
|
52
|
+
/^npm\s+install/,
|
|
53
|
+
/^npm\s+i(\s|$)/,
|
|
54
|
+
/^npm\s+update/,
|
|
55
|
+
/^npm\s+ci/,
|
|
56
|
+
/^yarn(\s+install)?/,
|
|
57
|
+
/^pnpm\s+install/,
|
|
58
|
+
/^pip\s+install/,
|
|
59
|
+
/^mkdir\s/,
|
|
60
|
+
/^touch\s/,
|
|
61
|
+
/^cp\s/,
|
|
62
|
+
/^tsc(\s|$)/,
|
|
63
|
+
/^npx\s/,
|
|
64
|
+
/^node\s/,
|
|
65
|
+
/^python\s/,
|
|
66
|
+
],
|
|
67
|
+
high: [
|
|
68
|
+
/^rm\s/,
|
|
69
|
+
/^rmdir\s/,
|
|
70
|
+
/^mv\s/,
|
|
71
|
+
/^chmod\s/,
|
|
72
|
+
/^chown\s/,
|
|
73
|
+
/^git\s+push/,
|
|
74
|
+
/^git\s+reset/,
|
|
75
|
+
/^git\s+revert/,
|
|
76
|
+
/^git\s+clean/,
|
|
77
|
+
/^git\s+fetch.*--prune/,
|
|
78
|
+
/^npm\s+publish/,
|
|
79
|
+
/^npm\s+unpublish/,
|
|
80
|
+
/^npm\s+deprecate/,
|
|
81
|
+
/^npm\s+link/,
|
|
82
|
+
/^npm\s+uninstall/,
|
|
83
|
+
/^pip\s+uninstall/,
|
|
84
|
+
/^docker\s+rm/,
|
|
85
|
+
/^docker\s+rmi/,
|
|
86
|
+
/^docker\s+stop/,
|
|
87
|
+
/^docker\s+kill/,
|
|
88
|
+
/^kill\s/,
|
|
89
|
+
/^pkill\s/,
|
|
90
|
+
/^killall\s/,
|
|
91
|
+
],
|
|
92
|
+
critical: [
|
|
93
|
+
/^sudo\s/,
|
|
94
|
+
/^su\s/,
|
|
95
|
+
/^rm\s+-rf/,
|
|
96
|
+
/^rm\s+-fr/,
|
|
97
|
+
/^rm\s+.*-rf/,
|
|
98
|
+
/^rm\s+.*-fr/,
|
|
99
|
+
/^rm\s+-r\s+\//,
|
|
100
|
+
/^chmod\s+777/,
|
|
101
|
+
/^chmod\s+-R/,
|
|
102
|
+
/^chown\s+-R/,
|
|
103
|
+
/^dd\s/,
|
|
104
|
+
/^mkfs/,
|
|
105
|
+
/^fdisk/,
|
|
106
|
+
/^parted/,
|
|
107
|
+
/^format/,
|
|
108
|
+
/>\s*\/dev\//,
|
|
109
|
+
/^git\s+push.*--force/,
|
|
110
|
+
/^git\s+push.*-f/,
|
|
111
|
+
/^git\s+reset\s+--hard/,
|
|
112
|
+
/^npm\s+exec/,
|
|
113
|
+
/^eval\s/,
|
|
114
|
+
/\|\s*sh(\s|$)/,
|
|
115
|
+
/\|\s*bash(\s|$)/,
|
|
116
|
+
/curl.*\|\s*(sh|bash)/,
|
|
117
|
+
/wget.*\|\s*(sh|bash)/,
|
|
118
|
+
],
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Paths that elevate risk to critical
|
|
122
|
+
*/
|
|
123
|
+
const CRITICAL_PATHS = [
|
|
124
|
+
'/etc',
|
|
125
|
+
'/usr',
|
|
126
|
+
'/var',
|
|
127
|
+
'/sys',
|
|
128
|
+
'/proc',
|
|
129
|
+
'/boot',
|
|
130
|
+
'/root',
|
|
131
|
+
'/bin',
|
|
132
|
+
'/sbin',
|
|
133
|
+
'/lib',
|
|
134
|
+
'/opt',
|
|
135
|
+
'~/.ssh',
|
|
136
|
+
'~/.gnupg',
|
|
137
|
+
'~/.config',
|
|
138
|
+
];
|
|
139
|
+
/**
|
|
140
|
+
* Assess risk level for a shell command
|
|
141
|
+
*/
|
|
142
|
+
export function assessShellRisk(command) {
|
|
143
|
+
const trimmed = command.trim();
|
|
144
|
+
// Check for critical patterns first
|
|
145
|
+
for (const pattern of SHELL_PATTERNS.critical) {
|
|
146
|
+
if (pattern.test(trimmed)) {
|
|
147
|
+
return {
|
|
148
|
+
level: 'critical',
|
|
149
|
+
reason: 'Potentially destructive or system-altering command',
|
|
150
|
+
requiresConfirmation: true,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Check for critical paths
|
|
155
|
+
for (const criticalPath of CRITICAL_PATHS) {
|
|
156
|
+
const expandedPath = criticalPath.replace('~', process.env.HOME || '');
|
|
157
|
+
if (trimmed.includes(expandedPath) || trimmed.includes(criticalPath)) {
|
|
158
|
+
// Only elevate if it's a write operation
|
|
159
|
+
if (/\b(rm|mv|cp|chmod|chown|write|echo.*>)\b/.test(trimmed)) {
|
|
160
|
+
return {
|
|
161
|
+
level: 'critical',
|
|
162
|
+
reason: `Operation targets sensitive path: ${criticalPath}`,
|
|
163
|
+
requiresConfirmation: true,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Check high risk
|
|
169
|
+
for (const pattern of SHELL_PATTERNS.high) {
|
|
170
|
+
if (pattern.test(trimmed)) {
|
|
171
|
+
return {
|
|
172
|
+
level: 'high',
|
|
173
|
+
reason: 'Command modifies or deletes files/resources',
|
|
174
|
+
requiresConfirmation: true,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Check medium risk
|
|
179
|
+
for (const pattern of SHELL_PATTERNS.medium) {
|
|
180
|
+
if (pattern.test(trimmed)) {
|
|
181
|
+
return {
|
|
182
|
+
level: 'medium',
|
|
183
|
+
reason: 'Command creates or modifies files',
|
|
184
|
+
requiresConfirmation: false,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Check low risk
|
|
189
|
+
for (const pattern of SHELL_PATTERNS.low) {
|
|
190
|
+
if (pattern.test(trimmed)) {
|
|
191
|
+
return {
|
|
192
|
+
level: 'low',
|
|
193
|
+
reason: 'Read-only or informational command',
|
|
194
|
+
requiresConfirmation: false,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Default to medium for unknown commands
|
|
199
|
+
return {
|
|
200
|
+
level: 'medium',
|
|
201
|
+
reason: 'Unknown command - defaulting to medium risk',
|
|
202
|
+
requiresConfirmation: false,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Base risk levels for each tool type
|
|
207
|
+
*/
|
|
208
|
+
const TOOL_BASE_RISK = {
|
|
209
|
+
think: 'none',
|
|
210
|
+
read_file: 'none',
|
|
211
|
+
list_files: 'none',
|
|
212
|
+
write_file: 'medium',
|
|
213
|
+
shell: 'low', // Will be overridden by command analysis
|
|
214
|
+
};
|
|
215
|
+
/**
|
|
216
|
+
* Assess risk level for a tool call
|
|
217
|
+
*/
|
|
218
|
+
export function assessToolRisk(toolCall) {
|
|
219
|
+
const { name, arguments: args } = toolCall;
|
|
220
|
+
// Special handling for shell commands
|
|
221
|
+
if (name === 'shell' && typeof args.command === 'string') {
|
|
222
|
+
return assessShellRisk(args.command);
|
|
223
|
+
}
|
|
224
|
+
// Special handling for write_file - check the path
|
|
225
|
+
if (name === 'write_file' && typeof args.path === 'string') {
|
|
226
|
+
const filePath = args.path;
|
|
227
|
+
// Check for critical paths
|
|
228
|
+
for (const criticalPath of CRITICAL_PATHS) {
|
|
229
|
+
const expandedPath = criticalPath.replace('~', process.env.HOME || '');
|
|
230
|
+
if (filePath.startsWith(expandedPath) || filePath.startsWith(criticalPath)) {
|
|
231
|
+
return {
|
|
232
|
+
level: 'critical',
|
|
233
|
+
reason: `Writing to sensitive path: ${criticalPath}`,
|
|
234
|
+
requiresConfirmation: true,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Check for sensitive file types
|
|
239
|
+
if (/\.(env|pem|key|crt|ssh|gpg)$/i.test(filePath)) {
|
|
240
|
+
return {
|
|
241
|
+
level: 'high',
|
|
242
|
+
reason: 'Writing to sensitive file type',
|
|
243
|
+
requiresConfirmation: true,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
level: 'medium',
|
|
248
|
+
reason: 'File write operation',
|
|
249
|
+
requiresConfirmation: false,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
// Default risk based on tool type
|
|
253
|
+
const baseRisk = TOOL_BASE_RISK[name] || 'medium';
|
|
254
|
+
return {
|
|
255
|
+
level: baseRisk,
|
|
256
|
+
reason: getRiskReason(name, baseRisk),
|
|
257
|
+
requiresConfirmation: baseRisk === 'high' || baseRisk === 'critical',
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get a human-readable reason for the risk level
|
|
262
|
+
*/
|
|
263
|
+
function getRiskReason(toolName, level) {
|
|
264
|
+
switch (toolName) {
|
|
265
|
+
case 'think':
|
|
266
|
+
return 'Pure reasoning, no side effects';
|
|
267
|
+
case 'read_file':
|
|
268
|
+
return 'Read-only file access';
|
|
269
|
+
case 'list_files':
|
|
270
|
+
return 'Read-only directory listing';
|
|
271
|
+
case 'write_file':
|
|
272
|
+
return 'File write operation';
|
|
273
|
+
case 'shell':
|
|
274
|
+
return 'Shell command execution';
|
|
275
|
+
default:
|
|
276
|
+
return `Tool operation: ${toolName}`;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Format risk level as a visual bar
|
|
281
|
+
*/
|
|
282
|
+
export function formatRiskBar(level) {
|
|
283
|
+
const bars = {
|
|
284
|
+
none: '░░░░░',
|
|
285
|
+
low: '█░░░░',
|
|
286
|
+
medium: '███░░',
|
|
287
|
+
high: '████░',
|
|
288
|
+
critical: '█████',
|
|
289
|
+
};
|
|
290
|
+
return bars[level];
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Check if an operation requires confirmation regardless of mode
|
|
294
|
+
*/
|
|
295
|
+
export function requiresConfirmation(risk, godMode) {
|
|
296
|
+
// Critical operations ALWAYS require confirmation
|
|
297
|
+
if (risk.level === 'critical') {
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
// In god mode, skip confirmation for non-critical
|
|
301
|
+
if (godMode) {
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
// Otherwise, defer to the risk assessment
|
|
305
|
+
return risk.requiresConfirmation;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Complexity triggers for hybrid mode planning
|
|
309
|
+
*/
|
|
310
|
+
const COMPLEXITY_KEYWORDS = [
|
|
311
|
+
'refactor',
|
|
312
|
+
'rewrite',
|
|
313
|
+
'migrate',
|
|
314
|
+
'upgrade',
|
|
315
|
+
'convert',
|
|
316
|
+
'restructure',
|
|
317
|
+
'reorganize',
|
|
318
|
+
'overhaul',
|
|
319
|
+
'replace all',
|
|
320
|
+
'delete all',
|
|
321
|
+
'remove all',
|
|
322
|
+
'update all',
|
|
323
|
+
'change all',
|
|
324
|
+
'fix all',
|
|
325
|
+
'across all',
|
|
326
|
+
'entire codebase',
|
|
327
|
+
'whole project',
|
|
328
|
+
'every file',
|
|
329
|
+
];
|
|
330
|
+
const AMBIGUOUS_KEYWORDS = [
|
|
331
|
+
'clean up',
|
|
332
|
+
'clean this',
|
|
333
|
+
'fix this',
|
|
334
|
+
'improve',
|
|
335
|
+
'make better',
|
|
336
|
+
'optimize',
|
|
337
|
+
'handle',
|
|
338
|
+
'deal with',
|
|
339
|
+
'sort out',
|
|
340
|
+
];
|
|
341
|
+
/**
|
|
342
|
+
* Detect if a user prompt suggests a complex operation
|
|
343
|
+
* that should trigger planning in hybrid mode
|
|
344
|
+
*/
|
|
345
|
+
export function detectComplexity(prompt) {
|
|
346
|
+
const lower = prompt.toLowerCase();
|
|
347
|
+
// Check for complexity keywords
|
|
348
|
+
for (const keyword of COMPLEXITY_KEYWORDS) {
|
|
349
|
+
if (lower.includes(keyword)) {
|
|
350
|
+
return {
|
|
351
|
+
isComplex: true,
|
|
352
|
+
reason: `Detected complex operation: "${keyword}"`,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
// Check for ambiguous requests
|
|
357
|
+
for (const keyword of AMBIGUOUS_KEYWORDS) {
|
|
358
|
+
if (lower.includes(keyword)) {
|
|
359
|
+
return {
|
|
360
|
+
isComplex: true,
|
|
361
|
+
reason: `Ambiguous request may need clarification: "${keyword}"`,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return { isComplex: false };
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=risk.js.map
|
package/dist/risk.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk.js","sourceRoot":"","sources":["../src/risk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Code Execution Sandbox
|
|
3
|
+
*
|
|
4
|
+
* Secure code execution using Docker containers.
|
|
5
|
+
*/
|
|
6
|
+
export interface SandboxConfig {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
image: string;
|
|
9
|
+
timeout: number;
|
|
10
|
+
memoryLimit: string;
|
|
11
|
+
cpuLimit: string;
|
|
12
|
+
networkEnabled: boolean;
|
|
13
|
+
mountWorkdir: boolean;
|
|
14
|
+
readOnly: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface ExecutionResult {
|
|
17
|
+
success: boolean;
|
|
18
|
+
exitCode: number;
|
|
19
|
+
stdout: string;
|
|
20
|
+
stderr: string;
|
|
21
|
+
duration: number;
|
|
22
|
+
sandboxed: boolean;
|
|
23
|
+
}
|
|
24
|
+
export type Language = 'python' | 'node' | 'bash' | 'ruby' | 'go' | 'rust';
|
|
25
|
+
/**
|
|
26
|
+
* Check if Docker is available
|
|
27
|
+
*/
|
|
28
|
+
export declare function isDockerAvailable(): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Check if Docker image exists
|
|
31
|
+
*/
|
|
32
|
+
export declare function imageExists(image: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Pull Docker image if needed
|
|
35
|
+
*/
|
|
36
|
+
export declare function ensureImage(image: string): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Execute code in Docker sandbox
|
|
39
|
+
*/
|
|
40
|
+
export declare function executeInSandbox(language: Language, code: string, config?: Partial<SandboxConfig>): Promise<ExecutionResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Execute code without sandbox (fallback)
|
|
43
|
+
*/
|
|
44
|
+
export declare function executeUnsafe(language: Language, code: string, timeout?: number): Promise<ExecutionResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Execute code (with or without sandbox based on availability)
|
|
47
|
+
*/
|
|
48
|
+
export declare function execute(language: Language, code: string, config?: Partial<SandboxConfig>): Promise<ExecutionResult>;
|
|
49
|
+
//# sourceMappingURL=sandbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAiC3E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAW3C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQjE;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM,GAClC,OAAO,CAAC,eAAe,CAAC,CAmH1B;AAoFD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAoF1B;AAMD;;GAEG;AACH,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM,GAClC,OAAO,CAAC,eAAe,CAAC,CAQ1B"}
|