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.
Files changed (319) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +136 -0
  3. package/dist/agent.d.ts +46 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +393 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/built-in-agents/explore.d.ts +9 -0
  8. package/dist/built-in-agents/explore.d.ts.map +1 -0
  9. package/dist/built-in-agents/explore.js +40 -0
  10. package/dist/built-in-agents/explore.js.map +1 -0
  11. package/dist/built-in-agents/index.d.ts +15 -0
  12. package/dist/built-in-agents/index.d.ts.map +1 -0
  13. package/dist/built-in-agents/index.js +19 -0
  14. package/dist/built-in-agents/index.js.map +1 -0
  15. package/dist/built-in-agents/plan.d.ts +10 -0
  16. package/dist/built-in-agents/plan.d.ts.map +1 -0
  17. package/dist/built-in-agents/plan.js +62 -0
  18. package/dist/built-in-agents/plan.js.map +1 -0
  19. package/dist/built-in-agents/worker.d.ts +9 -0
  20. package/dist/built-in-agents/worker.d.ts.map +1 -0
  21. package/dist/built-in-agents/worker.js +53 -0
  22. package/dist/built-in-agents/worker.js.map +1 -0
  23. package/dist/constants.d.ts +7 -0
  24. package/dist/constants.d.ts.map +1 -0
  25. package/dist/constants.js +18 -0
  26. package/dist/constants.js.map +1 -0
  27. package/dist/context-manager.d.ts +65 -0
  28. package/dist/context-manager.d.ts.map +1 -0
  29. package/dist/context-manager.js +272 -0
  30. package/dist/context-manager.js.map +1 -0
  31. package/dist/context-manager.test.d.ts +2 -0
  32. package/dist/context-manager.test.d.ts.map +1 -0
  33. package/dist/context-manager.test.js +394 -0
  34. package/dist/context-manager.test.js.map +1 -0
  35. package/dist/executor.d.ts +29 -0
  36. package/dist/executor.d.ts.map +1 -0
  37. package/dist/executor.js +399 -0
  38. package/dist/executor.js.map +1 -0
  39. package/dist/index.d.ts +24 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +40 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/prompt/index.d.ts +9 -0
  44. package/dist/prompt/index.d.ts.map +1 -0
  45. package/dist/prompt/index.js +10 -0
  46. package/dist/prompt/index.js.map +1 -0
  47. package/dist/prompt/main-agent-builder.d.ts +81 -0
  48. package/dist/prompt/main-agent-builder.d.ts.map +1 -0
  49. package/dist/prompt/main-agent-builder.js +287 -0
  50. package/dist/prompt/main-agent-builder.js.map +1 -0
  51. package/dist/prompt/sub-agent-builder.d.ts +133 -0
  52. package/dist/prompt/sub-agent-builder.d.ts.map +1 -0
  53. package/dist/prompt/sub-agent-builder.js +337 -0
  54. package/dist/prompt/sub-agent-builder.js.map +1 -0
  55. package/dist/prompt/templates.d.ts +87 -0
  56. package/dist/prompt/templates.d.ts.map +1 -0
  57. package/dist/prompt/templates.js +343 -0
  58. package/dist/prompt/templates.js.map +1 -0
  59. package/dist/prompt/types.d.ts +159 -0
  60. package/dist/prompt/types.d.ts.map +1 -0
  61. package/dist/prompt/types.js +5 -0
  62. package/dist/prompt/types.js.map +1 -0
  63. package/dist/prompt.d.ts +32 -0
  64. package/dist/prompt.d.ts.map +1 -0
  65. package/dist/prompt.js +86 -0
  66. package/dist/prompt.js.map +1 -0
  67. package/dist/providers/dataset/base.d.ts +74 -0
  68. package/dist/providers/dataset/base.d.ts.map +1 -0
  69. package/dist/providers/dataset/base.js +7 -0
  70. package/dist/providers/dataset/base.js.map +1 -0
  71. package/dist/providers/dataset/index.d.ts +8 -0
  72. package/dist/providers/dataset/index.d.ts.map +1 -0
  73. package/dist/providers/dataset/index.js +8 -0
  74. package/dist/providers/dataset/index.js.map +1 -0
  75. package/dist/providers/dataset/recorder.d.ts +46 -0
  76. package/dist/providers/dataset/recorder.d.ts.map +1 -0
  77. package/dist/providers/dataset/recorder.js +105 -0
  78. package/dist/providers/dataset/recorder.js.map +1 -0
  79. package/dist/providers/dataset/replayer.d.ts +46 -0
  80. package/dist/providers/dataset/replayer.d.ts.map +1 -0
  81. package/dist/providers/dataset/replayer.js +163 -0
  82. package/dist/providers/dataset/replayer.js.map +1 -0
  83. package/dist/providers/dataset/tester.d.ts +89 -0
  84. package/dist/providers/dataset/tester.d.ts.map +1 -0
  85. package/dist/providers/dataset/tester.js +143 -0
  86. package/dist/providers/dataset/tester.js.map +1 -0
  87. package/dist/providers/env/memory.d.ts +14 -0
  88. package/dist/providers/env/memory.d.ts.map +1 -0
  89. package/dist/providers/env/memory.js +19 -0
  90. package/dist/providers/env/memory.js.map +1 -0
  91. package/dist/providers/index.d.ts +12 -0
  92. package/dist/providers/index.d.ts.map +1 -0
  93. package/dist/providers/index.js +10 -0
  94. package/dist/providers/index.js.map +1 -0
  95. package/dist/providers/llm/base.d.ts +7 -0
  96. package/dist/providers/llm/base.d.ts.map +1 -0
  97. package/dist/providers/llm/base.js +7 -0
  98. package/dist/providers/llm/base.js.map +1 -0
  99. package/dist/providers/llm/claude.d.ts +32 -0
  100. package/dist/providers/llm/claude.d.ts.map +1 -0
  101. package/dist/providers/llm/claude.js +171 -0
  102. package/dist/providers/llm/claude.js.map +1 -0
  103. package/dist/providers/llm/openai.d.ts +26 -0
  104. package/dist/providers/llm/openai.d.ts.map +1 -0
  105. package/dist/providers/llm/openai.js +174 -0
  106. package/dist/providers/llm/openai.js.map +1 -0
  107. package/dist/providers/llm/openrouter.d.ts +43 -0
  108. package/dist/providers/llm/openrouter.d.ts.map +1 -0
  109. package/dist/providers/llm/openrouter.js +288 -0
  110. package/dist/providers/llm/openrouter.js.map +1 -0
  111. package/dist/providers/logger/base.d.ts +7 -0
  112. package/dist/providers/logger/base.d.ts.map +1 -0
  113. package/dist/providers/logger/base.js +7 -0
  114. package/dist/providers/logger/base.js.map +1 -0
  115. package/dist/providers/logger/console.d.ts +29 -0
  116. package/dist/providers/logger/console.d.ts.map +1 -0
  117. package/dist/providers/logger/console.js +70 -0
  118. package/dist/providers/logger/console.js.map +1 -0
  119. package/dist/providers/repository/base.d.ts +7 -0
  120. package/dist/providers/repository/base.d.ts.map +1 -0
  121. package/dist/providers/repository/base.js +7 -0
  122. package/dist/providers/repository/base.js.map +1 -0
  123. package/dist/providers/repository/memory.d.ts +21 -0
  124. package/dist/providers/repository/memory.d.ts.map +1 -0
  125. package/dist/providers/repository/memory.js +50 -0
  126. package/dist/providers/repository/memory.js.map +1 -0
  127. package/dist/providers/workspace/file.d.ts +26 -0
  128. package/dist/providers/workspace/file.d.ts.map +1 -0
  129. package/dist/providers/workspace/file.js +151 -0
  130. package/dist/providers/workspace/file.js.map +1 -0
  131. package/dist/providers/workspace/index.d.ts +7 -0
  132. package/dist/providers/workspace/index.d.ts.map +1 -0
  133. package/dist/providers/workspace/index.js +6 -0
  134. package/dist/providers/workspace/index.js.map +1 -0
  135. package/dist/providers/workspace/memory.d.ts +26 -0
  136. package/dist/providers/workspace/memory.d.ts.map +1 -0
  137. package/dist/providers/workspace/memory.js +136 -0
  138. package/dist/providers/workspace/memory.js.map +1 -0
  139. package/dist/providers/workspace/types.d.ts +27 -0
  140. package/dist/providers/workspace/types.d.ts.map +1 -0
  141. package/dist/providers/workspace/types.js +8 -0
  142. package/dist/providers/workspace/types.js.map +1 -0
  143. package/dist/providers/workspace/workspace-provider.test.d.ts +2 -0
  144. package/dist/providers/workspace/workspace-provider.test.d.ts.map +1 -0
  145. package/dist/providers/workspace/workspace-provider.test.js +250 -0
  146. package/dist/providers/workspace/workspace-provider.test.js.map +1 -0
  147. package/dist/shell/commands/browse.d.ts +6 -0
  148. package/dist/shell/commands/browse.d.ts.map +1 -0
  149. package/dist/shell/commands/browse.js +158 -0
  150. package/dist/shell/commands/browse.js.map +1 -0
  151. package/dist/shell/commands/cat.d.ts +6 -0
  152. package/dist/shell/commands/cat.d.ts.map +1 -0
  153. package/dist/shell/commands/cat.js +104 -0
  154. package/dist/shell/commands/cat.js.map +1 -0
  155. package/dist/shell/commands/curl.d.ts +6 -0
  156. package/dist/shell/commands/curl.d.ts.map +1 -0
  157. package/dist/shell/commands/curl.js +190 -0
  158. package/dist/shell/commands/curl.js.map +1 -0
  159. package/dist/shell/commands/date.d.ts +6 -0
  160. package/dist/shell/commands/date.d.ts.map +1 -0
  161. package/dist/shell/commands/date.js +151 -0
  162. package/dist/shell/commands/date.js.map +1 -0
  163. package/dist/shell/commands/echo.d.ts +6 -0
  164. package/dist/shell/commands/echo.d.ts.map +1 -0
  165. package/dist/shell/commands/echo.js +48 -0
  166. package/dist/shell/commands/echo.js.map +1 -0
  167. package/dist/shell/commands/env.d.ts +8 -0
  168. package/dist/shell/commands/env.d.ts.map +1 -0
  169. package/dist/shell/commands/env.js +41 -0
  170. package/dist/shell/commands/env.js.map +1 -0
  171. package/dist/shell/commands/file.d.ts +6 -0
  172. package/dist/shell/commands/file.d.ts.map +1 -0
  173. package/dist/shell/commands/file.js +213 -0
  174. package/dist/shell/commands/file.js.map +1 -0
  175. package/dist/shell/commands/find.d.ts +6 -0
  176. package/dist/shell/commands/find.d.ts.map +1 -0
  177. package/dist/shell/commands/find.js +100 -0
  178. package/dist/shell/commands/find.js.map +1 -0
  179. package/dist/shell/commands/grep.d.ts +6 -0
  180. package/dist/shell/commands/grep.d.ts.map +1 -0
  181. package/dist/shell/commands/grep.js +229 -0
  182. package/dist/shell/commands/grep.js.map +1 -0
  183. package/dist/shell/commands/head.d.ts +6 -0
  184. package/dist/shell/commands/head.d.ts.map +1 -0
  185. package/dist/shell/commands/head.js +88 -0
  186. package/dist/shell/commands/head.js.map +1 -0
  187. package/dist/shell/commands/index.d.ts +25 -0
  188. package/dist/shell/commands/index.d.ts.map +1 -0
  189. package/dist/shell/commands/index.js +43 -0
  190. package/dist/shell/commands/index.js.map +1 -0
  191. package/dist/shell/commands/jq.d.ts +8 -0
  192. package/dist/shell/commands/jq.d.ts.map +1 -0
  193. package/dist/shell/commands/jq.js +233 -0
  194. package/dist/shell/commands/jq.js.map +1 -0
  195. package/dist/shell/commands/ls.d.ts +6 -0
  196. package/dist/shell/commands/ls.d.ts.map +1 -0
  197. package/dist/shell/commands/ls.js +88 -0
  198. package/dist/shell/commands/ls.js.map +1 -0
  199. package/dist/shell/commands/mkdir.d.ts +6 -0
  200. package/dist/shell/commands/mkdir.d.ts.map +1 -0
  201. package/dist/shell/commands/mkdir.js +43 -0
  202. package/dist/shell/commands/mkdir.js.map +1 -0
  203. package/dist/shell/commands/rm.d.ts +6 -0
  204. package/dist/shell/commands/rm.d.ts.map +1 -0
  205. package/dist/shell/commands/rm.js +64 -0
  206. package/dist/shell/commands/rm.js.map +1 -0
  207. package/dist/shell/commands/sed.d.ts +6 -0
  208. package/dist/shell/commands/sed.d.ts.map +1 -0
  209. package/dist/shell/commands/sed.js +414 -0
  210. package/dist/shell/commands/sed.js.map +1 -0
  211. package/dist/shell/commands/sort.d.ts +6 -0
  212. package/dist/shell/commands/sort.d.ts.map +1 -0
  213. package/dist/shell/commands/sort.js +109 -0
  214. package/dist/shell/commands/sort.js.map +1 -0
  215. package/dist/shell/commands/tail.d.ts +6 -0
  216. package/dist/shell/commands/tail.d.ts.map +1 -0
  217. package/dist/shell/commands/tail.js +68 -0
  218. package/dist/shell/commands/tail.js.map +1 -0
  219. package/dist/shell/commands/wc.d.ts +6 -0
  220. package/dist/shell/commands/wc.d.ts.map +1 -0
  221. package/dist/shell/commands/wc.js +86 -0
  222. package/dist/shell/commands/wc.js.map +1 -0
  223. package/dist/shell/index.d.ts +10 -0
  224. package/dist/shell/index.d.ts.map +1 -0
  225. package/dist/shell/index.js +10 -0
  226. package/dist/shell/index.js.map +1 -0
  227. package/dist/shell/limits.d.ts +5 -0
  228. package/dist/shell/limits.d.ts.map +1 -0
  229. package/dist/shell/limits.js +5 -0
  230. package/dist/shell/limits.js.map +1 -0
  231. package/dist/shell/parser.d.ts +8 -0
  232. package/dist/shell/parser.d.ts.map +1 -0
  233. package/dist/shell/parser.js +307 -0
  234. package/dist/shell/parser.js.map +1 -0
  235. package/dist/shell/path-validation.d.ts +35 -0
  236. package/dist/shell/path-validation.d.ts.map +1 -0
  237. package/dist/shell/path-validation.js +81 -0
  238. package/dist/shell/path-validation.js.map +1 -0
  239. package/dist/shell/shell.d.ts +66 -0
  240. package/dist/shell/shell.d.ts.map +1 -0
  241. package/dist/shell/shell.js +301 -0
  242. package/dist/shell/shell.js.map +1 -0
  243. package/dist/shell/shell.test.d.ts +2 -0
  244. package/dist/shell/shell.test.d.ts.map +1 -0
  245. package/dist/shell/shell.test.js +1088 -0
  246. package/dist/shell/shell.test.js.map +1 -0
  247. package/dist/shell/types.d.ts +82 -0
  248. package/dist/shell/types.d.ts.map +1 -0
  249. package/dist/shell/types.js +5 -0
  250. package/dist/shell/types.js.map +1 -0
  251. package/dist/summarizer.d.ts +28 -0
  252. package/dist/summarizer.d.ts.map +1 -0
  253. package/dist/summarizer.js +136 -0
  254. package/dist/summarizer.js.map +1 -0
  255. package/dist/summarizer.test.d.ts +2 -0
  256. package/dist/summarizer.test.d.ts.map +1 -0
  257. package/dist/summarizer.test.js +192 -0
  258. package/dist/summarizer.test.js.map +1 -0
  259. package/dist/tools/ask-user.d.ts +11 -0
  260. package/dist/tools/ask-user.d.ts.map +1 -0
  261. package/dist/tools/ask-user.js +35 -0
  262. package/dist/tools/ask-user.js.map +1 -0
  263. package/dist/tools/index.d.ts +11 -0
  264. package/dist/tools/index.d.ts.map +1 -0
  265. package/dist/tools/index.js +18 -0
  266. package/dist/tools/index.js.map +1 -0
  267. package/dist/tools/output.d.ts +15 -0
  268. package/dist/tools/output.d.ts.map +1 -0
  269. package/dist/tools/output.js +40 -0
  270. package/dist/tools/output.js.map +1 -0
  271. package/dist/tools/shell.d.ts +13 -0
  272. package/dist/tools/shell.d.ts.map +1 -0
  273. package/dist/tools/shell.js +166 -0
  274. package/dist/tools/shell.js.map +1 -0
  275. package/dist/tools/sub-agent.d.ts +25 -0
  276. package/dist/tools/sub-agent.d.ts.map +1 -0
  277. package/dist/tools/sub-agent.js +312 -0
  278. package/dist/tools/sub-agent.js.map +1 -0
  279. package/dist/tools/tasks.d.ts +170 -0
  280. package/dist/tools/tasks.d.ts.map +1 -0
  281. package/dist/tools/tasks.js +947 -0
  282. package/dist/tools/tasks.js.map +1 -0
  283. package/dist/trace/builder.d.ts +54 -0
  284. package/dist/trace/builder.d.ts.map +1 -0
  285. package/dist/trace/builder.js +229 -0
  286. package/dist/trace/builder.js.map +1 -0
  287. package/dist/trace/console.d.ts +45 -0
  288. package/dist/trace/console.d.ts.map +1 -0
  289. package/dist/trace/console.js +143 -0
  290. package/dist/trace/console.js.map +1 -0
  291. package/dist/trace/index.d.ts +11 -0
  292. package/dist/trace/index.d.ts.map +1 -0
  293. package/dist/trace/index.js +11 -0
  294. package/dist/trace/index.js.map +1 -0
  295. package/dist/trace/openrouter-pricing.d.ts +9 -0
  296. package/dist/trace/openrouter-pricing.d.ts.map +1 -0
  297. package/dist/trace/openrouter-pricing.js +321 -0
  298. package/dist/trace/openrouter-pricing.js.map +1 -0
  299. package/dist/trace/pricing.d.ts +13 -0
  300. package/dist/trace/pricing.d.ts.map +1 -0
  301. package/dist/trace/pricing.js +41 -0
  302. package/dist/trace/pricing.js.map +1 -0
  303. package/dist/trace/types.d.ts +142 -0
  304. package/dist/trace/types.d.ts.map +1 -0
  305. package/dist/trace/types.js +16 -0
  306. package/dist/trace/types.js.map +1 -0
  307. package/dist/trace.d.ts +5 -0
  308. package/dist/trace.d.ts.map +1 -0
  309. package/dist/trace.js +5 -0
  310. package/dist/trace.js.map +1 -0
  311. package/dist/types.d.ts +382 -0
  312. package/dist/types.d.ts.map +1 -0
  313. package/dist/types.js +5 -0
  314. package/dist/types.js.map +1 -0
  315. package/dist/workspace.d.ts +287 -0
  316. package/dist/workspace.d.ts.map +1 -0
  317. package/dist/workspace.js +560 -0
  318. package/dist/workspace.js.map +1 -0
  319. 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":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shell.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.test.d.ts","sourceRoot":"","sources":["../../src/shell/shell.test.ts"],"names":[],"mappings":""}