tuplet 2.7.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 +21 -0
- package/README.md +136 -0
- package/dist/agent.d.ts +46 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +393 -0
- package/dist/agent.js.map +1 -0
- package/dist/built-in-agents/explore.d.ts +9 -0
- package/dist/built-in-agents/explore.d.ts.map +1 -0
- package/dist/built-in-agents/explore.js +40 -0
- package/dist/built-in-agents/explore.js.map +1 -0
- package/dist/built-in-agents/index.d.ts +15 -0
- package/dist/built-in-agents/index.d.ts.map +1 -0
- package/dist/built-in-agents/index.js +19 -0
- package/dist/built-in-agents/index.js.map +1 -0
- package/dist/built-in-agents/plan.d.ts +10 -0
- package/dist/built-in-agents/plan.d.ts.map +1 -0
- package/dist/built-in-agents/plan.js +62 -0
- package/dist/built-in-agents/plan.js.map +1 -0
- package/dist/built-in-agents/worker.d.ts +9 -0
- package/dist/built-in-agents/worker.d.ts.map +1 -0
- package/dist/built-in-agents/worker.js +53 -0
- package/dist/built-in-agents/worker.js.map +1 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +18 -0
- package/dist/constants.js.map +1 -0
- package/dist/context-manager.d.ts +65 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +272 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/context-manager.test.d.ts +2 -0
- package/dist/context-manager.test.d.ts.map +1 -0
- package/dist/context-manager.test.js +394 -0
- package/dist/context-manager.test.js.map +1 -0
- package/dist/executor.d.ts +29 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +399 -0
- package/dist/executor.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/prompt/index.d.ts +9 -0
- package/dist/prompt/index.d.ts.map +1 -0
- package/dist/prompt/index.js +10 -0
- package/dist/prompt/index.js.map +1 -0
- package/dist/prompt/main-agent-builder.d.ts +81 -0
- package/dist/prompt/main-agent-builder.d.ts.map +1 -0
- package/dist/prompt/main-agent-builder.js +287 -0
- package/dist/prompt/main-agent-builder.js.map +1 -0
- package/dist/prompt/sub-agent-builder.d.ts +133 -0
- package/dist/prompt/sub-agent-builder.d.ts.map +1 -0
- package/dist/prompt/sub-agent-builder.js +337 -0
- package/dist/prompt/sub-agent-builder.js.map +1 -0
- package/dist/prompt/templates.d.ts +87 -0
- package/dist/prompt/templates.d.ts.map +1 -0
- package/dist/prompt/templates.js +343 -0
- package/dist/prompt/templates.js.map +1 -0
- package/dist/prompt/types.d.ts +159 -0
- package/dist/prompt/types.d.ts.map +1 -0
- package/dist/prompt/types.js +5 -0
- package/dist/prompt/types.js.map +1 -0
- package/dist/prompt.d.ts +32 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +86 -0
- package/dist/prompt.js.map +1 -0
- package/dist/providers/dataset/base.d.ts +74 -0
- package/dist/providers/dataset/base.d.ts.map +1 -0
- package/dist/providers/dataset/base.js +7 -0
- package/dist/providers/dataset/base.js.map +1 -0
- package/dist/providers/dataset/index.d.ts +8 -0
- package/dist/providers/dataset/index.d.ts.map +1 -0
- package/dist/providers/dataset/index.js +8 -0
- package/dist/providers/dataset/index.js.map +1 -0
- package/dist/providers/dataset/recorder.d.ts +46 -0
- package/dist/providers/dataset/recorder.d.ts.map +1 -0
- package/dist/providers/dataset/recorder.js +105 -0
- package/dist/providers/dataset/recorder.js.map +1 -0
- package/dist/providers/dataset/replayer.d.ts +46 -0
- package/dist/providers/dataset/replayer.d.ts.map +1 -0
- package/dist/providers/dataset/replayer.js +163 -0
- package/dist/providers/dataset/replayer.js.map +1 -0
- package/dist/providers/dataset/tester.d.ts +89 -0
- package/dist/providers/dataset/tester.d.ts.map +1 -0
- package/dist/providers/dataset/tester.js +143 -0
- package/dist/providers/dataset/tester.js.map +1 -0
- package/dist/providers/env/memory.d.ts +14 -0
- package/dist/providers/env/memory.d.ts.map +1 -0
- package/dist/providers/env/memory.js +19 -0
- package/dist/providers/env/memory.js.map +1 -0
- package/dist/providers/index.d.ts +12 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +10 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/llm/base.d.ts +7 -0
- package/dist/providers/llm/base.d.ts.map +1 -0
- package/dist/providers/llm/base.js +7 -0
- package/dist/providers/llm/base.js.map +1 -0
- package/dist/providers/llm/claude.d.ts +32 -0
- package/dist/providers/llm/claude.d.ts.map +1 -0
- package/dist/providers/llm/claude.js +171 -0
- package/dist/providers/llm/claude.js.map +1 -0
- package/dist/providers/llm/openai.d.ts +26 -0
- package/dist/providers/llm/openai.d.ts.map +1 -0
- package/dist/providers/llm/openai.js +174 -0
- package/dist/providers/llm/openai.js.map +1 -0
- package/dist/providers/llm/openrouter.d.ts +43 -0
- package/dist/providers/llm/openrouter.d.ts.map +1 -0
- package/dist/providers/llm/openrouter.js +288 -0
- package/dist/providers/llm/openrouter.js.map +1 -0
- package/dist/providers/logger/base.d.ts +7 -0
- package/dist/providers/logger/base.d.ts.map +1 -0
- package/dist/providers/logger/base.js +7 -0
- package/dist/providers/logger/base.js.map +1 -0
- package/dist/providers/logger/console.d.ts +29 -0
- package/dist/providers/logger/console.d.ts.map +1 -0
- package/dist/providers/logger/console.js +70 -0
- package/dist/providers/logger/console.js.map +1 -0
- package/dist/providers/repository/base.d.ts +7 -0
- package/dist/providers/repository/base.d.ts.map +1 -0
- package/dist/providers/repository/base.js +7 -0
- package/dist/providers/repository/base.js.map +1 -0
- package/dist/providers/repository/memory.d.ts +21 -0
- package/dist/providers/repository/memory.d.ts.map +1 -0
- package/dist/providers/repository/memory.js +50 -0
- package/dist/providers/repository/memory.js.map +1 -0
- package/dist/providers/workspace/file.d.ts +26 -0
- package/dist/providers/workspace/file.d.ts.map +1 -0
- package/dist/providers/workspace/file.js +151 -0
- package/dist/providers/workspace/file.js.map +1 -0
- package/dist/providers/workspace/index.d.ts +7 -0
- package/dist/providers/workspace/index.d.ts.map +1 -0
- package/dist/providers/workspace/index.js +6 -0
- package/dist/providers/workspace/index.js.map +1 -0
- package/dist/providers/workspace/memory.d.ts +26 -0
- package/dist/providers/workspace/memory.d.ts.map +1 -0
- package/dist/providers/workspace/memory.js +136 -0
- package/dist/providers/workspace/memory.js.map +1 -0
- package/dist/providers/workspace/types.d.ts +27 -0
- package/dist/providers/workspace/types.d.ts.map +1 -0
- package/dist/providers/workspace/types.js +8 -0
- package/dist/providers/workspace/types.js.map +1 -0
- package/dist/providers/workspace/workspace-provider.test.d.ts +2 -0
- package/dist/providers/workspace/workspace-provider.test.d.ts.map +1 -0
- package/dist/providers/workspace/workspace-provider.test.js +250 -0
- package/dist/providers/workspace/workspace-provider.test.js.map +1 -0
- package/dist/shell/commands/browse.d.ts +6 -0
- package/dist/shell/commands/browse.d.ts.map +1 -0
- package/dist/shell/commands/browse.js +158 -0
- package/dist/shell/commands/browse.js.map +1 -0
- package/dist/shell/commands/cat.d.ts +6 -0
- package/dist/shell/commands/cat.d.ts.map +1 -0
- package/dist/shell/commands/cat.js +104 -0
- package/dist/shell/commands/cat.js.map +1 -0
- package/dist/shell/commands/curl.d.ts +6 -0
- package/dist/shell/commands/curl.d.ts.map +1 -0
- package/dist/shell/commands/curl.js +190 -0
- package/dist/shell/commands/curl.js.map +1 -0
- package/dist/shell/commands/date.d.ts +6 -0
- package/dist/shell/commands/date.d.ts.map +1 -0
- package/dist/shell/commands/date.js +151 -0
- package/dist/shell/commands/date.js.map +1 -0
- package/dist/shell/commands/echo.d.ts +6 -0
- package/dist/shell/commands/echo.d.ts.map +1 -0
- package/dist/shell/commands/echo.js +48 -0
- package/dist/shell/commands/echo.js.map +1 -0
- package/dist/shell/commands/env.d.ts +8 -0
- package/dist/shell/commands/env.d.ts.map +1 -0
- package/dist/shell/commands/env.js +41 -0
- package/dist/shell/commands/env.js.map +1 -0
- package/dist/shell/commands/file.d.ts +6 -0
- package/dist/shell/commands/file.d.ts.map +1 -0
- package/dist/shell/commands/file.js +213 -0
- package/dist/shell/commands/file.js.map +1 -0
- package/dist/shell/commands/find.d.ts +6 -0
- package/dist/shell/commands/find.d.ts.map +1 -0
- package/dist/shell/commands/find.js +100 -0
- package/dist/shell/commands/find.js.map +1 -0
- package/dist/shell/commands/grep.d.ts +6 -0
- package/dist/shell/commands/grep.d.ts.map +1 -0
- package/dist/shell/commands/grep.js +229 -0
- package/dist/shell/commands/grep.js.map +1 -0
- package/dist/shell/commands/head.d.ts +6 -0
- package/dist/shell/commands/head.d.ts.map +1 -0
- package/dist/shell/commands/head.js +88 -0
- package/dist/shell/commands/head.js.map +1 -0
- package/dist/shell/commands/index.d.ts +25 -0
- package/dist/shell/commands/index.d.ts.map +1 -0
- package/dist/shell/commands/index.js +43 -0
- package/dist/shell/commands/index.js.map +1 -0
- package/dist/shell/commands/jq.d.ts +8 -0
- package/dist/shell/commands/jq.d.ts.map +1 -0
- package/dist/shell/commands/jq.js +233 -0
- package/dist/shell/commands/jq.js.map +1 -0
- package/dist/shell/commands/ls.d.ts +6 -0
- package/dist/shell/commands/ls.d.ts.map +1 -0
- package/dist/shell/commands/ls.js +88 -0
- package/dist/shell/commands/ls.js.map +1 -0
- package/dist/shell/commands/mkdir.d.ts +6 -0
- package/dist/shell/commands/mkdir.d.ts.map +1 -0
- package/dist/shell/commands/mkdir.js +43 -0
- package/dist/shell/commands/mkdir.js.map +1 -0
- package/dist/shell/commands/rm.d.ts +6 -0
- package/dist/shell/commands/rm.d.ts.map +1 -0
- package/dist/shell/commands/rm.js +64 -0
- package/dist/shell/commands/rm.js.map +1 -0
- package/dist/shell/commands/sed.d.ts +6 -0
- package/dist/shell/commands/sed.d.ts.map +1 -0
- package/dist/shell/commands/sed.js +414 -0
- package/dist/shell/commands/sed.js.map +1 -0
- package/dist/shell/commands/sort.d.ts +6 -0
- package/dist/shell/commands/sort.d.ts.map +1 -0
- package/dist/shell/commands/sort.js +109 -0
- package/dist/shell/commands/sort.js.map +1 -0
- package/dist/shell/commands/tail.d.ts +6 -0
- package/dist/shell/commands/tail.d.ts.map +1 -0
- package/dist/shell/commands/tail.js +68 -0
- package/dist/shell/commands/tail.js.map +1 -0
- package/dist/shell/commands/wc.d.ts +6 -0
- package/dist/shell/commands/wc.d.ts.map +1 -0
- package/dist/shell/commands/wc.js +86 -0
- package/dist/shell/commands/wc.js.map +1 -0
- package/dist/shell/index.d.ts +10 -0
- package/dist/shell/index.d.ts.map +1 -0
- package/dist/shell/index.js +10 -0
- package/dist/shell/index.js.map +1 -0
- package/dist/shell/limits.d.ts +5 -0
- package/dist/shell/limits.d.ts.map +1 -0
- package/dist/shell/limits.js +5 -0
- package/dist/shell/limits.js.map +1 -0
- package/dist/shell/parser.d.ts +8 -0
- package/dist/shell/parser.d.ts.map +1 -0
- package/dist/shell/parser.js +307 -0
- package/dist/shell/parser.js.map +1 -0
- package/dist/shell/path-validation.d.ts +35 -0
- package/dist/shell/path-validation.d.ts.map +1 -0
- package/dist/shell/path-validation.js +81 -0
- package/dist/shell/path-validation.js.map +1 -0
- package/dist/shell/shell.d.ts +66 -0
- package/dist/shell/shell.d.ts.map +1 -0
- package/dist/shell/shell.js +301 -0
- package/dist/shell/shell.js.map +1 -0
- package/dist/shell/shell.test.d.ts +2 -0
- package/dist/shell/shell.test.d.ts.map +1 -0
- package/dist/shell/shell.test.js +1088 -0
- package/dist/shell/shell.test.js.map +1 -0
- package/dist/shell/types.d.ts +82 -0
- package/dist/shell/types.d.ts.map +1 -0
- package/dist/shell/types.js +5 -0
- package/dist/shell/types.js.map +1 -0
- package/dist/summarizer.d.ts +28 -0
- package/dist/summarizer.d.ts.map +1 -0
- package/dist/summarizer.js +136 -0
- package/dist/summarizer.js.map +1 -0
- package/dist/summarizer.test.d.ts +2 -0
- package/dist/summarizer.test.d.ts.map +1 -0
- package/dist/summarizer.test.js +192 -0
- package/dist/summarizer.test.js.map +1 -0
- package/dist/tools/ask-user.d.ts +11 -0
- package/dist/tools/ask-user.d.ts.map +1 -0
- package/dist/tools/ask-user.js +35 -0
- package/dist/tools/ask-user.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +18 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/output.d.ts +15 -0
- package/dist/tools/output.d.ts.map +1 -0
- package/dist/tools/output.js +40 -0
- package/dist/tools/output.js.map +1 -0
- package/dist/tools/shell.d.ts +13 -0
- package/dist/tools/shell.d.ts.map +1 -0
- package/dist/tools/shell.js +166 -0
- package/dist/tools/shell.js.map +1 -0
- package/dist/tools/sub-agent.d.ts +25 -0
- package/dist/tools/sub-agent.d.ts.map +1 -0
- package/dist/tools/sub-agent.js +312 -0
- package/dist/tools/sub-agent.js.map +1 -0
- package/dist/tools/tasks.d.ts +170 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +947 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/trace/builder.d.ts +54 -0
- package/dist/trace/builder.d.ts.map +1 -0
- package/dist/trace/builder.js +229 -0
- package/dist/trace/builder.js.map +1 -0
- package/dist/trace/console.d.ts +45 -0
- package/dist/trace/console.d.ts.map +1 -0
- package/dist/trace/console.js +143 -0
- package/dist/trace/console.js.map +1 -0
- package/dist/trace/index.d.ts +11 -0
- package/dist/trace/index.d.ts.map +1 -0
- package/dist/trace/index.js +11 -0
- package/dist/trace/index.js.map +1 -0
- package/dist/trace/openrouter-pricing.d.ts +9 -0
- package/dist/trace/openrouter-pricing.d.ts.map +1 -0
- package/dist/trace/openrouter-pricing.js +321 -0
- package/dist/trace/openrouter-pricing.js.map +1 -0
- package/dist/trace/pricing.d.ts +13 -0
- package/dist/trace/pricing.d.ts.map +1 -0
- package/dist/trace/pricing.js +41 -0
- package/dist/trace/pricing.js.map +1 -0
- package/dist/trace/types.d.ts +142 -0
- package/dist/trace/types.d.ts.map +1 -0
- package/dist/trace/types.js +16 -0
- package/dist/trace/types.js.map +1 -0
- package/dist/trace.d.ts +5 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +5 -0
- package/dist/trace.js.map +1 -0
- package/dist/types.d.ts +382 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace.d.ts +287 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +560 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path Validation
|
|
3
|
+
*
|
|
4
|
+
* Validates and normalizes workspace paths.
|
|
5
|
+
* All workspace paths must be relative — absolute paths and '..' traversal are forbidden.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Validate and normalize a workspace path.
|
|
9
|
+
*
|
|
10
|
+
* Rules:
|
|
11
|
+
* - '.' and '' map to root ('/')
|
|
12
|
+
* - Paths starting with './' have the prefix stripped
|
|
13
|
+
* - Absolute paths (starting with '/') are rejected
|
|
14
|
+
* - Path traversal ('..') is rejected
|
|
15
|
+
* - Valid relative paths get '/' prepended for internal provider use
|
|
16
|
+
*/
|
|
17
|
+
export function validatePath(path) {
|
|
18
|
+
// Root references
|
|
19
|
+
if (path === '.' || path === '') {
|
|
20
|
+
return { fsPath: '/' };
|
|
21
|
+
}
|
|
22
|
+
// Strip './' prefix
|
|
23
|
+
let cleaned = path;
|
|
24
|
+
if (cleaned.startsWith('./')) {
|
|
25
|
+
cleaned = cleaned.slice(2);
|
|
26
|
+
}
|
|
27
|
+
// Reject absolute paths
|
|
28
|
+
if (cleaned.startsWith('/')) {
|
|
29
|
+
const suggestion = cleaned.slice(1) || '.';
|
|
30
|
+
return {
|
|
31
|
+
error: `Absolute paths are not allowed. Use relative path instead: '${suggestion}'`,
|
|
32
|
+
fsPath: ''
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Reject path traversal
|
|
36
|
+
if (cleaned.split('/').some(s => s === '..')) {
|
|
37
|
+
return {
|
|
38
|
+
error: `Path traversal ('..') is not allowed`,
|
|
39
|
+
fsPath: ''
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return { fsPath: '/' + cleaned };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a validated filesystem wrapper.
|
|
46
|
+
*
|
|
47
|
+
* Wraps a WorkspaceProvider so that all path arguments are validated
|
|
48
|
+
* (must be relative, no '..') and converted to internal format (prepended with '/').
|
|
49
|
+
* Results from glob() have the leading '/' stripped to return relative paths.
|
|
50
|
+
*
|
|
51
|
+
* Throws on invalid paths — the shell's top-level catch converts these to stderr.
|
|
52
|
+
*/
|
|
53
|
+
export function createValidatedFS(inner) {
|
|
54
|
+
function resolve(path) {
|
|
55
|
+
const result = validatePath(path);
|
|
56
|
+
if (result.error) {
|
|
57
|
+
throw new Error(result.error);
|
|
58
|
+
}
|
|
59
|
+
return result.fsPath;
|
|
60
|
+
}
|
|
61
|
+
function toRelative(path) {
|
|
62
|
+
return path.startsWith('/') ? path.slice(1) : path;
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
read: (path) => inner.read(resolve(path)),
|
|
66
|
+
write: (path, content) => inner.write(resolve(path), content),
|
|
67
|
+
delete: (path) => inner.delete(resolve(path)),
|
|
68
|
+
exists: (path) => inner.exists(resolve(path)),
|
|
69
|
+
list: (path) => inner.list(resolve(path)),
|
|
70
|
+
glob: async (pattern) => {
|
|
71
|
+
const results = await inner.glob(resolve(pattern));
|
|
72
|
+
return results.map(toRelative);
|
|
73
|
+
},
|
|
74
|
+
mkdir: (path) => inner.mkdir(resolve(path)),
|
|
75
|
+
isDirectory: (path) => inner.isDirectory(resolve(path)),
|
|
76
|
+
size: inner.size
|
|
77
|
+
? (path) => inner.size(resolve(path))
|
|
78
|
+
: undefined,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=path-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-validation.js","sourceRoot":"","sources":["../../src/shell/path-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell Emulator
|
|
3
|
+
*
|
|
4
|
+
* Main shell class that executes commands.
|
|
5
|
+
*/
|
|
6
|
+
import type { ShellConfig, ShellResult, CommandHandler } from './types.js';
|
|
7
|
+
import type { WorkspaceProvider } from '../providers/workspace/types.js';
|
|
8
|
+
import type { EnvironmentProvider } from '../types.js';
|
|
9
|
+
export interface ShellOptions extends ShellConfig {
|
|
10
|
+
/** External WorkspaceProvider to use (optional) */
|
|
11
|
+
fs?: WorkspaceProvider;
|
|
12
|
+
/** Environment provider for secure variable resolution */
|
|
13
|
+
envProvider?: EnvironmentProvider;
|
|
14
|
+
}
|
|
15
|
+
export declare class Shell {
|
|
16
|
+
private fs;
|
|
17
|
+
/** Validated FS that rejects absolute paths and '..' — used in command context */
|
|
18
|
+
private validatedFS;
|
|
19
|
+
private env;
|
|
20
|
+
private config;
|
|
21
|
+
private handlers;
|
|
22
|
+
private readOnly;
|
|
23
|
+
private writablePaths;
|
|
24
|
+
private envProvider?;
|
|
25
|
+
constructor(options?: ShellOptions);
|
|
26
|
+
/** Register a custom command handler */
|
|
27
|
+
register(handler: CommandHandler): void;
|
|
28
|
+
/**
|
|
29
|
+
* Enable or disable read-only mode.
|
|
30
|
+
* In read-only mode, write commands (rm, mkdir) and output redirections are blocked
|
|
31
|
+
* unless the target path is in the writable paths list.
|
|
32
|
+
*/
|
|
33
|
+
setReadOnly(enabled: boolean, writablePaths?: string[]): void;
|
|
34
|
+
/** Check if read-only mode is enabled */
|
|
35
|
+
isReadOnly(): boolean;
|
|
36
|
+
/** Execute a command string (supports sequential commands, pipes, heredocs, comments) */
|
|
37
|
+
execute(input: string): Promise<ShellResult>;
|
|
38
|
+
/**
|
|
39
|
+
* Check if a path is writable in read-only mode.
|
|
40
|
+
* A path is writable if it matches any of the writable paths
|
|
41
|
+
* (either exact match or starts with a writable directory path).
|
|
42
|
+
* Paths are compared in relative form (no leading '/').
|
|
43
|
+
*/
|
|
44
|
+
private isPathWritable;
|
|
45
|
+
private executeCommand;
|
|
46
|
+
/** Get the workspace provider */
|
|
47
|
+
getFS(): WorkspaceProvider;
|
|
48
|
+
/** Get environment variables */
|
|
49
|
+
getEnv(): Record<string, string>;
|
|
50
|
+
/** Set environment variable */
|
|
51
|
+
setEnv(key: string, value: string): void;
|
|
52
|
+
/** Set environment provider for secure variable resolution */
|
|
53
|
+
setEnvProvider(provider: EnvironmentProvider): void;
|
|
54
|
+
/** Get the current environment provider */
|
|
55
|
+
getEnvProvider(): EnvironmentProvider | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Expand $VAR and ${VAR} references in a string using shell env.
|
|
58
|
+
* Returns the string with variables replaced (unknown vars become empty string).
|
|
59
|
+
*/
|
|
60
|
+
private expandVars;
|
|
61
|
+
/**
|
|
62
|
+
* Expand variables in a parsed command's args, redirections, and stdin.
|
|
63
|
+
*/
|
|
64
|
+
private expandCommand;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/shell/shell.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAiC,MAAM,YAAY,CAAA;AACzG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMtD,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,mDAAmD;IACnD,EAAE,CAAC,EAAE,iBAAiB,CAAA;IACtB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,mBAAmB,CAAA;CAClC;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,EAAE,CAAmB;IAC7B,kFAAkF;IAClF,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,GAAG,CAAwB;IACnC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,WAAW,CAAC,CAAqB;gBAE7B,OAAO,GAAE,YAAiB;IAkFtC,wCAAwC;IACxC,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIvC;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAK7D,yCAAyC;IACzC,UAAU,IAAI,OAAO;IAIrB,yFAAyF;IACnF,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA8BlD;;;;;OAKG;IACH,OAAO,CAAC,cAAc;YASR,cAAc;IAoH5B,iCAAiC;IACjC,KAAK,IAAI,iBAAiB;IAI1B,gCAAgC;IAChC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAIhC,+BAA+B;IAC/B,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIxC,8DAA8D;IAC9D,cAAc,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAInD,2CAA2C;IAC3C,cAAc,IAAI,mBAAmB,GAAG,SAAS;IAIjD;;;OAGG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,aAAa;CAQtB"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell Emulator
|
|
3
|
+
*
|
|
4
|
+
* Main shell class that executes commands.
|
|
5
|
+
*/
|
|
6
|
+
import { MemoryWorkspaceProvider } from '../providers/workspace/memory.js';
|
|
7
|
+
import { parseCommand } from './parser.js';
|
|
8
|
+
import { commands } from './commands/index.js';
|
|
9
|
+
import { createValidatedFS, validatePath } from './path-validation.js';
|
|
10
|
+
export class Shell {
|
|
11
|
+
fs;
|
|
12
|
+
/** Validated FS that rejects absolute paths and '..' — used in command context */
|
|
13
|
+
validatedFS;
|
|
14
|
+
env;
|
|
15
|
+
config;
|
|
16
|
+
handlers;
|
|
17
|
+
readOnly = false;
|
|
18
|
+
writablePaths = [];
|
|
19
|
+
envProvider;
|
|
20
|
+
constructor(options = {}) {
|
|
21
|
+
const { fs: externalFS, envProvider, ...config } = options;
|
|
22
|
+
this.config = config;
|
|
23
|
+
this.fs = externalFS ?? new MemoryWorkspaceProvider(config.initialContext);
|
|
24
|
+
this.validatedFS = createValidatedFS(this.fs);
|
|
25
|
+
this.env = {};
|
|
26
|
+
this.envProvider = envProvider;
|
|
27
|
+
this.handlers = new Map();
|
|
28
|
+
// Register built-in commands
|
|
29
|
+
for (const handler of commands) {
|
|
30
|
+
this.handlers.set(handler.name, handler);
|
|
31
|
+
}
|
|
32
|
+
// Register help command (uses closure to access handlers)
|
|
33
|
+
this.handlers.set('help', {
|
|
34
|
+
name: 'help',
|
|
35
|
+
help: {
|
|
36
|
+
usage: 'help [COMMAND]',
|
|
37
|
+
description: 'Show available commands or detailed help for a specific command',
|
|
38
|
+
examples: [
|
|
39
|
+
{ command: 'help', description: 'List all available commands' },
|
|
40
|
+
{ command: 'help curl', description: 'Show detailed help for curl' }
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
execute: async (args) => {
|
|
44
|
+
if (args.length === 0) {
|
|
45
|
+
// List all commands with descriptions
|
|
46
|
+
const lines = ['Available commands:\n'];
|
|
47
|
+
const sorted = Array.from(this.handlers.values()).sort((a, b) => a.name.localeCompare(b.name));
|
|
48
|
+
for (const handler of sorted) {
|
|
49
|
+
const desc = handler.help?.description ?? '';
|
|
50
|
+
lines.push(` ${handler.name.padEnd(12)} ${desc}`);
|
|
51
|
+
}
|
|
52
|
+
lines.push('\nRun `help <command>` for detailed usage.');
|
|
53
|
+
return { exitCode: 0, stdout: lines.join('\n') + '\n', stderr: '' };
|
|
54
|
+
}
|
|
55
|
+
const cmdName = args[0];
|
|
56
|
+
const handler = this.handlers.get(cmdName);
|
|
57
|
+
if (!handler) {
|
|
58
|
+
return { exitCode: 1, stdout: '', stderr: `help: unknown command '${cmdName}'` };
|
|
59
|
+
}
|
|
60
|
+
if (!handler.help) {
|
|
61
|
+
return { exitCode: 0, stdout: `${cmdName}: no detailed help available\n`, stderr: '' };
|
|
62
|
+
}
|
|
63
|
+
const h = handler.help;
|
|
64
|
+
const lines = [];
|
|
65
|
+
lines.push(`${cmdName} - ${h.description}`);
|
|
66
|
+
lines.push(`\nUsage: ${h.usage}`);
|
|
67
|
+
if (h.flags && h.flags.length > 0) {
|
|
68
|
+
lines.push('\nFlags:');
|
|
69
|
+
for (const f of h.flags) {
|
|
70
|
+
lines.push(` ${f.flag.padEnd(20)} ${f.description}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (h.examples && h.examples.length > 0) {
|
|
74
|
+
lines.push('\nExamples:');
|
|
75
|
+
for (const e of h.examples) {
|
|
76
|
+
lines.push(` ${e.command}`);
|
|
77
|
+
lines.push(` ${e.description}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (h.notes && h.notes.length > 0) {
|
|
81
|
+
lines.push('\nNotes:');
|
|
82
|
+
for (const n of h.notes) {
|
|
83
|
+
lines.push(` - ${n}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return { exitCode: 0, stdout: lines.join('\n') + '\n', stderr: '' };
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/** Register a custom command handler */
|
|
91
|
+
register(handler) {
|
|
92
|
+
this.handlers.set(handler.name, handler);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Enable or disable read-only mode.
|
|
96
|
+
* In read-only mode, write commands (rm, mkdir) and output redirections are blocked
|
|
97
|
+
* unless the target path is in the writable paths list.
|
|
98
|
+
*/
|
|
99
|
+
setReadOnly(enabled, writablePaths) {
|
|
100
|
+
this.readOnly = enabled;
|
|
101
|
+
this.writablePaths = writablePaths ?? [];
|
|
102
|
+
}
|
|
103
|
+
/** Check if read-only mode is enabled */
|
|
104
|
+
isReadOnly() {
|
|
105
|
+
return this.readOnly;
|
|
106
|
+
}
|
|
107
|
+
/** Execute a command string (supports sequential commands, pipes, heredocs, comments) */
|
|
108
|
+
async execute(input) {
|
|
109
|
+
try {
|
|
110
|
+
const parsed = parseCommand(input);
|
|
111
|
+
if (parsed.length === 0) {
|
|
112
|
+
return { exitCode: 0, stdout: '', stderr: '' };
|
|
113
|
+
}
|
|
114
|
+
// Execute commands sequentially, stop on first error
|
|
115
|
+
let combinedStdout = '';
|
|
116
|
+
let lastResult = { exitCode: 0, stdout: '', stderr: '' };
|
|
117
|
+
for (const cmd of parsed) {
|
|
118
|
+
lastResult = await this.executeCommand(cmd);
|
|
119
|
+
combinedStdout += lastResult.stdout;
|
|
120
|
+
if (lastResult.exitCode !== 0) {
|
|
121
|
+
return { ...lastResult, stdout: combinedStdout };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return { ...lastResult, stdout: combinedStdout };
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
return {
|
|
128
|
+
exitCode: 1,
|
|
129
|
+
stdout: '',
|
|
130
|
+
stderr: error instanceof Error ? error.message : String(error)
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Check if a path is writable in read-only mode.
|
|
136
|
+
* A path is writable if it matches any of the writable paths
|
|
137
|
+
* (either exact match or starts with a writable directory path).
|
|
138
|
+
* Paths are compared in relative form (no leading '/').
|
|
139
|
+
*/
|
|
140
|
+
isPathWritable(path) {
|
|
141
|
+
if (!this.readOnly)
|
|
142
|
+
return true;
|
|
143
|
+
const normalized = path.replace(/^\//, '');
|
|
144
|
+
return this.writablePaths.some(wp => {
|
|
145
|
+
const normalizedWp = wp.replace(/^\//, '');
|
|
146
|
+
return normalized === normalizedWp || normalized.startsWith(normalizedWp + '/');
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
async executeCommand(cmd, stdin) {
|
|
150
|
+
// Handle variable assignment: VAR=value (no command after it)
|
|
151
|
+
const assignMatch = cmd.command.match(/^(\w+)=(.*)$/);
|
|
152
|
+
if (assignMatch && cmd.args.length === 0 && !cmd.pipe) {
|
|
153
|
+
this.env[assignMatch[1]] = assignMatch[2];
|
|
154
|
+
return { exitCode: 0, stdout: '', stderr: '' };
|
|
155
|
+
}
|
|
156
|
+
// Expand $VAR references before execution
|
|
157
|
+
this.expandCommand(cmd);
|
|
158
|
+
// Read-only mode enforcement
|
|
159
|
+
if (this.readOnly) {
|
|
160
|
+
// Block write commands (rm, mkdir)
|
|
161
|
+
if (cmd.command === 'rm' || cmd.command === 'mkdir') {
|
|
162
|
+
return {
|
|
163
|
+
exitCode: 1,
|
|
164
|
+
stdout: '',
|
|
165
|
+
stderr: `read-only mode: '${cmd.command}' is not allowed`
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
// Block output redirection to non-writable paths (except /dev/null)
|
|
169
|
+
if (cmd.outputFile && cmd.outputFile !== '/dev/null' && !this.isPathWritable(cmd.outputFile)) {
|
|
170
|
+
return {
|
|
171
|
+
exitCode: 1,
|
|
172
|
+
stdout: '',
|
|
173
|
+
stderr: `read-only mode: cannot write to '${cmd.outputFile}'`
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// Block append redirection to non-writable paths (except /dev/null)
|
|
177
|
+
if (cmd.appendFile && cmd.appendFile !== '/dev/null' && !this.isPathWritable(cmd.appendFile)) {
|
|
178
|
+
return {
|
|
179
|
+
exitCode: 1,
|
|
180
|
+
stdout: '',
|
|
181
|
+
stderr: `read-only mode: cannot write to '${cmd.appendFile}'`
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const handler = this.handlers.get(cmd.command);
|
|
186
|
+
if (!handler) {
|
|
187
|
+
const supported = Array.from(this.handlers.keys()).sort().join(', ');
|
|
188
|
+
return {
|
|
189
|
+
exitCode: 127,
|
|
190
|
+
stdout: '',
|
|
191
|
+
stderr: `command not found: ${cmd.command}\nAvailable commands: ${supported}`
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
const ctx = {
|
|
195
|
+
fs: this.validatedFS,
|
|
196
|
+
env: this.env,
|
|
197
|
+
config: this.config,
|
|
198
|
+
stdin: stdin !== undefined ? stdin : cmd.stdinContent,
|
|
199
|
+
envProvider: this.envProvider,
|
|
200
|
+
piped: !!cmd.pipe
|
|
201
|
+
};
|
|
202
|
+
// Validate and normalize redirection paths
|
|
203
|
+
if (cmd.inputFile) {
|
|
204
|
+
const v = validatePath(cmd.inputFile);
|
|
205
|
+
if (v.error)
|
|
206
|
+
return { exitCode: 1, stdout: '', stderr: v.error };
|
|
207
|
+
cmd.inputFile = v.fsPath;
|
|
208
|
+
}
|
|
209
|
+
if (cmd.outputFile && cmd.outputFile !== '/dev/null') {
|
|
210
|
+
const v = validatePath(cmd.outputFile);
|
|
211
|
+
if (v.error)
|
|
212
|
+
return { exitCode: 1, stdout: '', stderr: v.error };
|
|
213
|
+
cmd.outputFile = v.fsPath;
|
|
214
|
+
}
|
|
215
|
+
if (cmd.appendFile && cmd.appendFile !== '/dev/null') {
|
|
216
|
+
const v = validatePath(cmd.appendFile);
|
|
217
|
+
if (v.error)
|
|
218
|
+
return { exitCode: 1, stdout: '', stderr: v.error };
|
|
219
|
+
cmd.appendFile = v.fsPath;
|
|
220
|
+
}
|
|
221
|
+
// Handle input redirection (path is already normalized to internal format)
|
|
222
|
+
if (cmd.inputFile) {
|
|
223
|
+
const content = await this.fs.read(cmd.inputFile);
|
|
224
|
+
if (content === null) {
|
|
225
|
+
return {
|
|
226
|
+
exitCode: 1,
|
|
227
|
+
stdout: '',
|
|
228
|
+
stderr: `${cmd.inputFile}: No such file`
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
ctx.stdin = content;
|
|
232
|
+
}
|
|
233
|
+
// Execute command
|
|
234
|
+
let result = await handler.execute(cmd.args, ctx);
|
|
235
|
+
// Handle output redirection
|
|
236
|
+
if (cmd.outputFile) {
|
|
237
|
+
if (cmd.outputFile !== '/dev/null') {
|
|
238
|
+
await this.fs.write(cmd.outputFile, result.stdout);
|
|
239
|
+
}
|
|
240
|
+
result = { ...result, stdout: '' };
|
|
241
|
+
}
|
|
242
|
+
else if (cmd.appendFile) {
|
|
243
|
+
if (cmd.appendFile !== '/dev/null') {
|
|
244
|
+
const existing = await this.fs.read(cmd.appendFile) || '';
|
|
245
|
+
await this.fs.write(cmd.appendFile, existing + result.stdout);
|
|
246
|
+
}
|
|
247
|
+
result = { ...result, stdout: '' };
|
|
248
|
+
}
|
|
249
|
+
// Handle pipe
|
|
250
|
+
if (cmd.pipe && result.exitCode === 0) {
|
|
251
|
+
return this.executeCommand(cmd.pipe, result.stdout);
|
|
252
|
+
}
|
|
253
|
+
return result;
|
|
254
|
+
}
|
|
255
|
+
/** Get the workspace provider */
|
|
256
|
+
getFS() {
|
|
257
|
+
return this.fs;
|
|
258
|
+
}
|
|
259
|
+
/** Get environment variables */
|
|
260
|
+
getEnv() {
|
|
261
|
+
return this.env;
|
|
262
|
+
}
|
|
263
|
+
/** Set environment variable */
|
|
264
|
+
setEnv(key, value) {
|
|
265
|
+
this.env[key] = value;
|
|
266
|
+
}
|
|
267
|
+
/** Set environment provider for secure variable resolution */
|
|
268
|
+
setEnvProvider(provider) {
|
|
269
|
+
this.envProvider = provider;
|
|
270
|
+
}
|
|
271
|
+
/** Get the current environment provider */
|
|
272
|
+
getEnvProvider() {
|
|
273
|
+
return this.envProvider;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Expand $VAR and ${VAR} references in a string using shell env.
|
|
277
|
+
* Returns the string with variables replaced (unknown vars become empty string).
|
|
278
|
+
*/
|
|
279
|
+
expandVars(text) {
|
|
280
|
+
return text.replace(/\$\{(\w+)\}|\$(\w+)/g, (_, braced, plain) => {
|
|
281
|
+
const name = braced || plain;
|
|
282
|
+
return this.env[name] ?? this.envProvider?.get(name) ?? '';
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Expand variables in a parsed command's args, redirections, and stdin.
|
|
287
|
+
*/
|
|
288
|
+
expandCommand(cmd) {
|
|
289
|
+
cmd.command = this.expandVars(cmd.command);
|
|
290
|
+
cmd.args = cmd.args.map(arg => this.expandVars(arg));
|
|
291
|
+
if (cmd.outputFile)
|
|
292
|
+
cmd.outputFile = this.expandVars(cmd.outputFile);
|
|
293
|
+
if (cmd.appendFile)
|
|
294
|
+
cmd.appendFile = this.expandVars(cmd.appendFile);
|
|
295
|
+
if (cmd.inputFile)
|
|
296
|
+
cmd.inputFile = this.expandVars(cmd.inputFile);
|
|
297
|
+
if (cmd.stdinContent && !cmd.heredocQuoted)
|
|
298
|
+
cmd.stdinContent = this.expandVars(cmd.stdinContent);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/shell/shell.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAStE,MAAM,OAAO,KAAK;IACR,EAAE,CAAmB;IAC7B,kFAAkF;IAC1E,WAAW,CAAmB;IAC9B,GAAG,CAAwB;IAC3B,MAAM,CAAa;IACnB,QAAQ,CAA6B;IACrC,QAAQ,GAAY,KAAK,CAAA;IACzB,aAAa,GAAa,EAAE,CAAA;IAC5B,WAAW,CAAsB;IAEzC,YAAY,UAAwB,EAAE;QACpC,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,CAAA;QAC1D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,EAAE,GAAG,UAAU,IAAI,IAAI,uBAAuB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QAC1E,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC7C,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;QACb,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;QAEzB,6BAA6B;QAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC1C,CAAC;QAED,0DAA0D;QAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE;YACxB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;gBACJ,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EAAE,iEAAiE;gBAC9E,QAAQ,EAAE;oBACR,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,6BAA6B,EAAE;oBAC/D,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,6BAA6B,EAAE;iBACrE;aACF;YACD,OAAO,EAAE,KAAK,EAAE,IAAc,EAAE,EAAE;gBAChC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACtB,sCAAsC;oBACtC,MAAM,KAAK,GAAa,CAAC,uBAAuB,CAAC,CAAA;oBACjD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;oBAC9F,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;wBAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAA;wBAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;oBACpD,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;oBACxD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;gBACrE,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,0BAA0B,OAAO,GAAG,EAAE,CAAA;gBAClF,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBAClB,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,gCAAgC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;gBACxF,CAAC;gBAED,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAA;gBACtB,MAAM,KAAK,GAAa,EAAE,CAAA;gBAE1B,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;gBAC3C,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;gBAEjC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;oBACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;wBACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;oBACvD,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;oBACzB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;wBAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;wBAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;oBACtC,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;oBACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;wBACxB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;oBACxB,CAAC;gBACH,CAAC;gBAED,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;YACrE,CAAC;SACF,CAAC,CAAA;IACJ,CAAC;IAED,wCAAwC;IACxC,QAAQ,CAAC,OAAuB;QAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,OAAgB,EAAE,aAAwB;QACpD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,EAAE,CAAA;IAC1C,CAAC;IAED,yCAAyC;IACzC,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,yFAAyF;IACzF,KAAK,CAAC,OAAO,CAAC,KAAa;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;YAElC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;YAChD,CAAC;YAED,qDAAqD;YACrD,IAAI,cAAc,GAAG,EAAE,CAAA;YACvB,IAAI,UAAU,GAAgB,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;YAErE,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;gBACzB,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;gBAC3C,cAAc,IAAI,UAAU,CAAC,MAAM,CAAA;gBACnC,IAAI,UAAU,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBAC9B,OAAO,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;gBAClD,CAAC;YACH,CAAC;YAED,OAAO,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC/D,CAAA;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,IAAY;QACjC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAA;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC1C,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAClC,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YAC1C,OAAO,UAAU,KAAK,YAAY,IAAI,UAAU,CAAC,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC,CAAA;QACjF,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,GAAkB,EAAE,KAAc;QAC7D,8DAA8D;QAC9D,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QACrD,IAAI,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;YACzC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QAChD,CAAC;QAED,0CAA0C;QAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QAEvB,6BAA6B;QAC7B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,mCAAmC;YACnC,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBACpD,OAAO;oBACL,QAAQ,EAAE,CAAC;oBACX,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,oBAAoB,GAAG,CAAC,OAAO,kBAAkB;iBAC1D,CAAA;YACH,CAAC;YAED,oEAAoE;YACpE,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7F,OAAO;oBACL,QAAQ,EAAE,CAAC;oBACX,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,oCAAoC,GAAG,CAAC,UAAU,GAAG;iBAC9D,CAAA;YACH,CAAC;YAED,oEAAoE;YACpE,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7F,OAAO;oBACL,QAAQ,EAAE,CAAC;oBACX,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,oCAAoC,GAAG,CAAC,UAAU,GAAG;iBAC9D,CAAA;YACH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACpE,OAAO;gBACL,QAAQ,EAAE,GAAG;gBACb,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,sBAAsB,GAAG,CAAC,OAAO,yBAAyB,SAAS,EAAE;aAC9E,CAAA;QACH,CAAC;QAED,MAAM,GAAG,GAAmB;YAC1B,EAAE,EAAE,IAAI,CAAC,WAAW;YACpB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY;YACrD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI;SAClB,CAAA;QAED,2CAA2C;QAC3C,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YACrC,IAAI,CAAC,CAAC,KAAK;gBAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;YAChE,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,MAAM,CAAA;QAC1B,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;YACrD,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YACtC,IAAI,CAAC,CAAC,KAAK;gBAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;YAChE,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,MAAM,CAAA;QAC3B,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;YACrD,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YACtC,IAAI,CAAC,CAAC,KAAK;gBAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;YAChE,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,MAAM,CAAA;QAC3B,CAAC;QAED,2EAA2E;QAC3E,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YACjD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO;oBACL,QAAQ,EAAE,CAAC;oBACX,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,gBAAgB;iBACzC,CAAA;YACH,CAAC;YACD,GAAG,CAAC,KAAK,GAAG,OAAO,CAAA;QACrB,CAAC;QAED,kBAAkB;QAClB,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAEjD,4BAA4B;QAC5B,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,IAAI,GAAG,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACpD,CAAC;YACD,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QACpC,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YAC1B,IAAI,GAAG,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;gBACzD,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;YAC/D,CAAC;YACD,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QACpC,CAAC;QAED,cAAc;QACd,IAAI,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QACrD,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,iCAAiC;IACjC,KAAK;QACH,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IAED,gCAAgC;IAChC,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,+BAA+B;IAC/B,MAAM,CAAC,GAAW,EAAE,KAAa;QAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACvB,CAAC;IAED,8DAA8D;IAC9D,cAAc,CAAC,QAA6B;QAC1C,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAA;IAC7B,CAAC;IAED,2CAA2C;IAC3C,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED;;;OAGG;IACK,UAAU,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;YAC/D,MAAM,IAAI,GAAG,MAAM,IAAI,KAAK,CAAA;YAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QAC5D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,GAAkB;QACtC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC1C,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;QACpD,IAAI,GAAG,CAAC,UAAU;YAAE,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACpE,IAAI,GAAG,CAAC,UAAU;YAAE,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACpE,IAAI,GAAG,CAAC,SAAS;YAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACjE,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,aAAa;YAAE,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAClG,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.test.d.ts","sourceRoot":"","sources":["../../src/shell/shell.test.ts"],"names":[],"mappings":""}
|