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,213 @@
1
+ /**
2
+ * file - Determine file type
3
+ */
4
+ export const fileCommand = {
5
+ name: 'file',
6
+ help: {
7
+ usage: 'file [OPTIONS] [FILE...]',
8
+ description: 'Determine file type',
9
+ flags: [
10
+ { flag: '-b', description: 'Brief mode (do not prepend filename)' },
11
+ { flag: '-i', description: 'Output MIME type string' }
12
+ ],
13
+ examples: [
14
+ { command: 'file data.json', description: 'Identify file type' },
15
+ { command: 'file -i script.ts', description: 'Show MIME type' },
16
+ { command: 'file -b readme.md', description: 'Show type without filename' },
17
+ { command: 'file src', description: 'Identify directory' }
18
+ ]
19
+ },
20
+ async execute(args, ctx) {
21
+ let brief = false;
22
+ let mime = false;
23
+ const paths = [];
24
+ for (const arg of args) {
25
+ if (arg === '-b') {
26
+ brief = true;
27
+ }
28
+ else if (arg === '-i' || arg === '--mime') {
29
+ mime = true;
30
+ }
31
+ else if (!arg.startsWith('-')) {
32
+ paths.push(arg);
33
+ }
34
+ }
35
+ if (paths.length === 0) {
36
+ return { exitCode: 1, stdout: '', stderr: 'file: missing file operand' };
37
+ }
38
+ const results = [];
39
+ let hasError = false;
40
+ for (const path of paths) {
41
+ const exists = await ctx.fs.exists(path);
42
+ if (!exists) {
43
+ results.push(`file: ${path}: No such file or directory`);
44
+ hasError = true;
45
+ continue;
46
+ }
47
+ const isDir = await ctx.fs.isDirectory(path);
48
+ if (isDir) {
49
+ results.push(format(path, mime ? 'inode/directory; charset=binary' : 'directory', brief));
50
+ continue;
51
+ }
52
+ const content = await ctx.fs.read(path);
53
+ if (content === null) {
54
+ results.push(`file: ${path}: No such file or directory`);
55
+ hasError = true;
56
+ continue;
57
+ }
58
+ const type = mime ? detectMime(path, content) : detectType(path, content);
59
+ results.push(format(path, type, brief));
60
+ }
61
+ return {
62
+ exitCode: hasError ? 1 : 0,
63
+ stdout: results.join('\n') + '\n',
64
+ stderr: ''
65
+ };
66
+ }
67
+ };
68
+ function format(path, type, brief) {
69
+ return brief ? type : `${path}: ${type}`;
70
+ }
71
+ // --- MIME type detection ---
72
+ const MIME_BY_EXT = {
73
+ json: 'application/json; charset=utf-8',
74
+ js: 'application/javascript; charset=utf-8',
75
+ mjs: 'application/javascript; charset=utf-8',
76
+ ts: 'application/typescript; charset=utf-8',
77
+ mts: 'application/typescript; charset=utf-8',
78
+ tsx: 'application/typescript; charset=utf-8',
79
+ jsx: 'application/javascript; charset=utf-8',
80
+ html: 'text/html; charset=utf-8',
81
+ htm: 'text/html; charset=utf-8',
82
+ css: 'text/css; charset=utf-8',
83
+ xml: 'application/xml; charset=utf-8',
84
+ svg: 'image/svg+xml; charset=utf-8',
85
+ md: 'text/markdown; charset=utf-8',
86
+ csv: 'text/csv; charset=utf-8',
87
+ yaml: 'text/yaml; charset=utf-8',
88
+ yml: 'text/yaml; charset=utf-8',
89
+ toml: 'application/toml; charset=utf-8',
90
+ txt: 'text/plain; charset=utf-8',
91
+ sh: 'text/x-shellscript; charset=utf-8',
92
+ bash: 'text/x-shellscript; charset=utf-8',
93
+ py: 'text/x-python; charset=utf-8',
94
+ rb: 'text/x-ruby; charset=utf-8',
95
+ java: 'text/x-java; charset=utf-8',
96
+ c: 'text/x-c; charset=utf-8',
97
+ h: 'text/x-c; charset=utf-8',
98
+ cpp: 'text/x-c++; charset=utf-8',
99
+ go: 'text/x-go; charset=utf-8',
100
+ rs: 'text/x-rust; charset=utf-8',
101
+ };
102
+ function detectMime(path, content) {
103
+ const ext = extOf(path);
104
+ if (ext && MIME_BY_EXT[ext])
105
+ return MIME_BY_EXT[ext];
106
+ // Content-based fallback
107
+ if (looksLikeJSON(content))
108
+ return 'application/json; charset=utf-8';
109
+ if (looksLikeHTML(content))
110
+ return 'text/html; charset=utf-8';
111
+ if (looksLikeXML(content))
112
+ return 'application/xml; charset=utf-8';
113
+ return 'text/plain; charset=utf-8';
114
+ }
115
+ // --- Human-readable type detection ---
116
+ const TYPE_BY_EXT = {
117
+ js: 'JavaScript source, UTF-8 Unicode text',
118
+ mjs: 'JavaScript source, UTF-8 Unicode text',
119
+ jsx: 'JavaScript source, UTF-8 Unicode text',
120
+ ts: 'TypeScript source, UTF-8 Unicode text',
121
+ mts: 'TypeScript source, UTF-8 Unicode text',
122
+ tsx: 'TypeScript source, UTF-8 Unicode text',
123
+ py: 'Python source, UTF-8 Unicode text',
124
+ rb: 'Ruby source, UTF-8 Unicode text',
125
+ java: 'Java source, UTF-8 Unicode text',
126
+ c: 'C source, UTF-8 Unicode text',
127
+ h: 'C source header, UTF-8 Unicode text',
128
+ cpp: 'C++ source, UTF-8 Unicode text',
129
+ go: 'Go source, UTF-8 Unicode text',
130
+ rs: 'Rust source, UTF-8 Unicode text',
131
+ css: 'CSS stylesheet, UTF-8 Unicode text',
132
+ md: 'Markdown document, UTF-8 Unicode text',
133
+ yaml: 'YAML document, UTF-8 Unicode text',
134
+ yml: 'YAML document, UTF-8 Unicode text',
135
+ toml: 'TOML document, UTF-8 Unicode text',
136
+ csv: 'CSV text',
137
+ sh: 'Bourne-Again shell script text executable',
138
+ bash: 'Bourne-Again shell script text executable',
139
+ };
140
+ function detectType(path, content) {
141
+ const ext = extOf(path);
142
+ if (content.length === 0)
143
+ return 'empty';
144
+ // JSON
145
+ if (ext === 'json' || (!ext && looksLikeJSON(content))) {
146
+ return 'JSON text data';
147
+ }
148
+ // HTML
149
+ if (ext === 'html' || ext === 'htm' || (!ext && looksLikeHTML(content))) {
150
+ return 'HTML document, UTF-8 Unicode text';
151
+ }
152
+ // XML / SVG
153
+ if (ext === 'svg')
154
+ return 'SVG Scalable Vector Graphics image';
155
+ if (ext === 'xml' || (!ext && looksLikeXML(content))) {
156
+ return 'XML document text';
157
+ }
158
+ // Shebang detection
159
+ if (content.startsWith('#!')) {
160
+ const firstLine = content.split('\n', 1)[0];
161
+ if (firstLine.includes('python'))
162
+ return 'Python script text executable';
163
+ if (firstLine.includes('node'))
164
+ return 'Node.js script text executable';
165
+ if (firstLine.includes('bash') || firstLine.includes('/sh'))
166
+ return 'Bourne-Again shell script text executable';
167
+ if (firstLine.includes('ruby'))
168
+ return 'Ruby script text executable';
169
+ if (firstLine.includes('perl'))
170
+ return 'Perl script text executable';
171
+ return 'script text executable';
172
+ }
173
+ // Known language by extension
174
+ if (ext && TYPE_BY_EXT[ext])
175
+ return TYPE_BY_EXT[ext];
176
+ // Generic text
177
+ const lines = content.split('\n');
178
+ const hasVeryLongLines = lines.some(l => l.length > 500);
179
+ if (hasVeryLongLines)
180
+ return 'UTF-8 Unicode text, with very long lines';
181
+ return 'UTF-8 Unicode text';
182
+ }
183
+ // --- Helpers ---
184
+ function extOf(path) {
185
+ const name = path.split('/').pop() ?? '';
186
+ const dot = name.lastIndexOf('.');
187
+ if (dot <= 0)
188
+ return '';
189
+ return name.slice(dot + 1).toLowerCase();
190
+ }
191
+ function looksLikeJSON(content) {
192
+ const t = content.trimStart();
193
+ if (!t.startsWith('{') && !t.startsWith('['))
194
+ return false;
195
+ // Only attempt parse on reasonably sized content
196
+ if (content.length > 65_536)
197
+ return false;
198
+ try {
199
+ JSON.parse(content);
200
+ return true;
201
+ }
202
+ catch {
203
+ return false;
204
+ }
205
+ }
206
+ function looksLikeHTML(content) {
207
+ const t = content.trimStart().slice(0, 50).toLowerCase();
208
+ return t.startsWith('<!doctype html') || t.startsWith('<html');
209
+ }
210
+ function looksLikeXML(content) {
211
+ return content.trimStart().startsWith('<?xml');
212
+ }
213
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/shell/commands/file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * find - Search for files
3
+ */
4
+ import type { CommandHandler } from '../types.js';
5
+ export declare const findCommand: CommandHandler;
6
+ //# sourceMappingURL=find.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/find.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAA+B,MAAM,aAAa,CAAA;AAU9E,eAAO,MAAM,WAAW,EAAE,cA4FzB,CAAA"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * find - Search for files
3
+ */
4
+ function matchPattern(name, pattern) {
5
+ const regexPattern = pattern
6
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
7
+ .replace(/\*/g, '.*')
8
+ .replace(/\?/g, '.');
9
+ return new RegExp(`^${regexPattern}$`).test(name);
10
+ }
11
+ export const findCommand = {
12
+ name: 'find',
13
+ help: {
14
+ usage: 'find [PATH] [OPTIONS]',
15
+ description: 'Search for files in a directory hierarchy',
16
+ flags: [
17
+ { flag: '-name PATTERN', description: 'Match filename against pattern (supports * and ? wildcards)' },
18
+ { flag: '-type f', description: 'Only match regular files' },
19
+ { flag: '-type d', description: 'Only match directories' },
20
+ { flag: '-maxdepth NUM', description: 'Descend at most NUM levels below the start path' }
21
+ ],
22
+ examples: [
23
+ { command: 'find . -name "*.json"', description: 'Find all JSON files' },
24
+ { command: 'find . -type d', description: 'Find all directories' },
25
+ { command: 'find reports -name "*.csv" -type f', description: 'Find CSV files in reports' }
26
+ ],
27
+ notes: [
28
+ 'Defaults to workspace root if no path given',
29
+ 'Searches recursively',
30
+ 'All paths are relative — absolute paths (starting with /) are not allowed'
31
+ ]
32
+ },
33
+ async execute(args, ctx) {
34
+ let basePath = '.';
35
+ const namePatterns = [];
36
+ let typeFilter = null;
37
+ let maxDepth = null;
38
+ for (let i = 0; i < args.length; i++) {
39
+ const arg = args[i];
40
+ if (arg === '-name') {
41
+ namePatterns.push(args[++i]);
42
+ }
43
+ else if (arg === '-type') {
44
+ const t = args[++i];
45
+ if (t === 'f' || t === 'd') {
46
+ typeFilter = t;
47
+ }
48
+ }
49
+ else if (arg === '-maxdepth') {
50
+ maxDepth = parseInt(args[++i], 10);
51
+ }
52
+ else if (arg === '-o' || arg === '-or') {
53
+ // OR operator — handled implicitly: multiple -name patterns are OR'd
54
+ }
55
+ else if (!arg.startsWith('-')) {
56
+ basePath = arg;
57
+ }
58
+ }
59
+ // Get all files recursively (construct glob pattern for relative paths)
60
+ const globPattern = (basePath === '.' || basePath === '') ? '**/*' : basePath + '/**/*';
61
+ const allFiles = await ctx.fs.glob(globPattern);
62
+ const outputs = [];
63
+ // Calculate base depth for maxdepth filtering (relative paths)
64
+ const baseDepth = (basePath === '.' || basePath === '') ? 0 : basePath.replace(/\/$/, '').split('/').length;
65
+ for (const file of allFiles) {
66
+ // Apply maxdepth filter (relative path depth = number of segments)
67
+ if (maxDepth !== null) {
68
+ const fileDepth = file.split('/').length;
69
+ if (fileDepth - baseDepth > maxDepth)
70
+ continue;
71
+ }
72
+ // Apply type filter
73
+ if (typeFilter === 'f' && await ctx.fs.isDirectory(file))
74
+ continue;
75
+ if (typeFilter === 'd' && !await ctx.fs.isDirectory(file))
76
+ continue;
77
+ // Apply name filter (multiple patterns are OR'd)
78
+ if (namePatterns.length > 0) {
79
+ const fileName = file.split('/').pop() || '';
80
+ if (!namePatterns.some(p => matchPattern(fileName, p)))
81
+ continue;
82
+ }
83
+ outputs.push(file);
84
+ }
85
+ // Also include base path if it matches
86
+ if (await ctx.fs.exists(basePath)) {
87
+ if (!typeFilter || (typeFilter === 'd' && await ctx.fs.isDirectory(basePath))) {
88
+ if (namePatterns.length === 0 || namePatterns.some(p => matchPattern(basePath.split('/').pop() || '', p))) {
89
+ outputs.unshift(basePath);
90
+ }
91
+ }
92
+ }
93
+ return {
94
+ exitCode: 0,
95
+ stdout: outputs.join('\n') + (outputs.length ? '\n' : ''),
96
+ stderr: ''
97
+ };
98
+ }
99
+ };
100
+ //# sourceMappingURL=find.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/shell/commands/find.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * grep - Search for patterns
3
+ */
4
+ import type { CommandHandler } from '../types.js';
5
+ export declare const grepCommand: CommandHandler;
6
+ //# sourceMappingURL=grep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/grep.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAA+B,MAAM,aAAa,CAAA;AAG9E,eAAO,MAAM,WAAW,EAAE,cAqNzB,CAAA"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * grep - Search for patterns
3
+ */
4
+ import { MAX_LINE_LENGTH, MAX_OUTPUT_CHARS } from '../limits.js';
5
+ export const grepCommand = {
6
+ name: 'grep',
7
+ help: {
8
+ usage: 'grep [OPTIONS] PATTERN [FILE...]',
9
+ description: 'Search for patterns in files or stdin',
10
+ flags: [
11
+ { flag: '-i', description: 'Case-insensitive matching' },
12
+ { flag: '-n', description: 'Show line numbers' },
13
+ { flag: '-o', description: 'Only output the matched parts of a line' },
14
+ { flag: '-v', description: 'Invert match (show non-matching lines)' },
15
+ { flag: '-l', description: 'Only list filenames with matches' },
16
+ { flag: '-r', description: 'Recursive search' },
17
+ { flag: '-E', description: 'Extended regex (enabled by default)' },
18
+ { flag: '-P', description: 'Perl-compatible regex (treated as extended regex)' }
19
+ ],
20
+ examples: [
21
+ { command: 'grep "error" log', description: 'Search for pattern in file' },
22
+ { command: 'grep -i "warn" **/*.log', description: 'Case-insensitive search across files' },
23
+ { command: 'grep -n "TODO" notes.txt', description: 'Show matching line numbers' },
24
+ { command: 'cat data | grep "key"', description: 'Search piped input' }
25
+ ],
26
+ notes: [
27
+ 'Supports JavaScript regex syntax',
28
+ 'Exit code 1 when no matches found',
29
+ `Lines are truncated to ${MAX_LINE_LENGTH} characters`,
30
+ `Total output is capped at ${MAX_OUTPUT_CHARS} characters`
31
+ ]
32
+ },
33
+ async execute(args, ctx) {
34
+ let caseInsensitive = false;
35
+ let showLineNumbers = false;
36
+ let recursive = false;
37
+ let filesOnly = false;
38
+ let invertMatch = false;
39
+ let extendedRegex = false;
40
+ let onlyMatching = false;
41
+ let pattern = null;
42
+ const paths = [];
43
+ for (const arg of args) {
44
+ if (arg === '-i') {
45
+ caseInsensitive = true;
46
+ }
47
+ else if (arg === '-n') {
48
+ showLineNumbers = true;
49
+ }
50
+ else if (arg === '-o') {
51
+ onlyMatching = true;
52
+ }
53
+ else if (arg === '-r' || arg === '-R') {
54
+ recursive = true;
55
+ }
56
+ else if (arg === '-l') {
57
+ filesOnly = true;
58
+ }
59
+ else if (arg === '-v') {
60
+ invertMatch = true;
61
+ }
62
+ else if (arg === '-E' || arg === '-P') {
63
+ extendedRegex = true;
64
+ }
65
+ else if (arg.startsWith('-') && /^-[a-zA-Z]+$/.test(arg)) {
66
+ // Handle combined flags like -oE, -oP, -in, etc.
67
+ for (const ch of arg.slice(1)) {
68
+ if (ch === 'i')
69
+ caseInsensitive = true;
70
+ else if (ch === 'n')
71
+ showLineNumbers = true;
72
+ else if (ch === 'o')
73
+ onlyMatching = true;
74
+ else if (ch === 'r' || ch === 'R')
75
+ recursive = true;
76
+ else if (ch === 'l')
77
+ filesOnly = true;
78
+ else if (ch === 'v')
79
+ invertMatch = true;
80
+ else if (ch === 'E' || ch === 'P')
81
+ extendedRegex = true;
82
+ }
83
+ }
84
+ else if (arg.startsWith('-')) {
85
+ // Ignore unknown flags
86
+ }
87
+ else if (pattern === null) {
88
+ pattern = arg;
89
+ }
90
+ else {
91
+ paths.push(arg);
92
+ }
93
+ }
94
+ if (pattern === null) {
95
+ // Check stdin
96
+ if (ctx.stdin) {
97
+ return { exitCode: 1, stdout: '', stderr: 'grep: missing pattern' };
98
+ }
99
+ return { exitCode: 1, stdout: '', stderr: 'grep: missing pattern' };
100
+ }
101
+ // Convert BRE-style syntax to ERE/JS regex when -E is not specified.
102
+ // BRE uses \|, \(, \), \+, \? for special meaning; ERE/JS uses |, (, ), +, ?
103
+ let effectivePattern = pattern;
104
+ if (!extendedRegex) {
105
+ effectivePattern = pattern
106
+ .replace(/\\\|/g, '|')
107
+ .replace(/\\\(/g, '(')
108
+ .replace(/\\\)/g, ')');
109
+ }
110
+ const flags = caseInsensitive ? 'gi' : 'g';
111
+ let regex;
112
+ try {
113
+ regex = new RegExp(effectivePattern, flags);
114
+ }
115
+ catch {
116
+ return { exitCode: 1, stdout: '', stderr: `grep: Invalid pattern: ${pattern}` };
117
+ }
118
+ const outputs = [];
119
+ const matchingFiles = new Set();
120
+ let totalChars = 0;
121
+ let outputTruncated = false;
122
+ function truncateLine(line) {
123
+ return line.length > MAX_LINE_LENGTH ? line.slice(0, MAX_LINE_LENGTH) + '...' : line;
124
+ }
125
+ function addOutput(line) {
126
+ const truncated = truncateLine(line);
127
+ if (totalChars + truncated.length + 1 > MAX_OUTPUT_CHARS) {
128
+ outputTruncated = true;
129
+ return false;
130
+ }
131
+ outputs.push(truncated);
132
+ totalChars += truncated.length + 1; // +1 for newline
133
+ return true;
134
+ }
135
+ /** Process a single line, adding output as appropriate */
136
+ function processLine(line, lineNum, filePrefix) {
137
+ if (onlyMatching && !invertMatch) {
138
+ // -o mode: output each match separately
139
+ let match;
140
+ regex.lastIndex = 0;
141
+ while ((match = regex.exec(line)) !== null) {
142
+ const prefix = filePrefix ? `${filePrefix}:` : '';
143
+ const num = showLineNumbers ? `${lineNum}:` : '';
144
+ if (!addOutput(`${prefix}${num}${match[0]}`))
145
+ return false;
146
+ // Prevent infinite loop on zero-length matches
147
+ if (match[0].length === 0)
148
+ regex.lastIndex++;
149
+ }
150
+ }
151
+ else {
152
+ const matches = regex.test(line);
153
+ regex.lastIndex = 0;
154
+ if (matches !== invertMatch) {
155
+ if (filesOnly) {
156
+ // handled by caller
157
+ return true;
158
+ }
159
+ const prefix = filePrefix ? `${filePrefix}:` : '';
160
+ const num = showLineNumbers ? `${lineNum}:` : '';
161
+ if (!addOutput(`${prefix}${num}${line}`))
162
+ return false;
163
+ }
164
+ }
165
+ return true;
166
+ }
167
+ // Search in stdin if no paths
168
+ if (paths.length === 0 && ctx.stdin !== undefined) {
169
+ const lines = ctx.stdin.split('\n');
170
+ for (let i = 0; i < lines.length; i++) {
171
+ if (!processLine(lines[i], i + 1, ''))
172
+ break;
173
+ }
174
+ }
175
+ else {
176
+ // Search in files
177
+ for (const path of paths) {
178
+ if (outputTruncated)
179
+ break;
180
+ const files = path.includes('*') || recursive
181
+ ? await ctx.fs.glob(recursive ? path.replace(/\/?$/, '/**/*') : path)
182
+ : [path];
183
+ for (const file of files) {
184
+ if (outputTruncated)
185
+ break;
186
+ if (await ctx.fs.isDirectory(file))
187
+ continue;
188
+ const content = await ctx.fs.read(file);
189
+ if (content === null)
190
+ continue;
191
+ const filePrefix = paths.length > 1 || recursive ? file : '';
192
+ const lines = content.split('\n');
193
+ for (let i = 0; i < lines.length; i++) {
194
+ const line = lines[i];
195
+ if (filesOnly) {
196
+ const matches = regex.test(line);
197
+ regex.lastIndex = 0;
198
+ if (matches !== invertMatch) {
199
+ matchingFiles.add(file);
200
+ break;
201
+ }
202
+ }
203
+ else {
204
+ if (!processLine(line, i + 1, filePrefix))
205
+ break;
206
+ }
207
+ }
208
+ }
209
+ }
210
+ }
211
+ if (filesOnly) {
212
+ return {
213
+ exitCode: matchingFiles.size > 0 ? 0 : 1,
214
+ stdout: Array.from(matchingFiles).join('\n') + (matchingFiles.size ? '\n' : ''),
215
+ stderr: ''
216
+ };
217
+ }
218
+ let stdout = outputs.join('\n') + (outputs.length ? '\n' : '');
219
+ if (outputTruncated) {
220
+ stdout += `[Output truncated at ${MAX_OUTPUT_CHARS} characters. Narrow your search pattern or target specific files.]\n`;
221
+ }
222
+ return {
223
+ exitCode: outputs.length > 0 ? 0 : 1,
224
+ stdout,
225
+ stderr: ''
226
+ };
227
+ }
228
+ };
229
+ //# sourceMappingURL=grep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../src/shell/commands/grep.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * head - Output the first part of files
3
+ */
4
+ import type { CommandHandler } from '../types.js';
5
+ export declare const headCommand: CommandHandler;
6
+ //# sourceMappingURL=head.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"head.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/head.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAA+B,MAAM,aAAa,CAAA;AAG9E,eAAO,MAAM,WAAW,EAAE,cA8FzB,CAAA"}