@n8n/fs-proxy 0.1.0-rc1

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 (106) hide show
  1. package/LICENSE.md +88 -0
  2. package/README.md +267 -0
  3. package/dist/build.tsbuildinfo +1 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +189 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config-templates.d.ts +10 -0
  8. package/dist/config-templates.js +39 -0
  9. package/dist/config-templates.js.map +1 -0
  10. package/dist/config.d.ts +67 -0
  11. package/dist/config.js +285 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/confirm-resource-cli.d.ts +4 -0
  14. package/dist/confirm-resource-cli.js +28 -0
  15. package/dist/confirm-resource-cli.js.map +1 -0
  16. package/dist/daemon.d.ts +11 -0
  17. package/dist/daemon.js +249 -0
  18. package/dist/daemon.js.map +1 -0
  19. package/dist/gateway-client.d.ts +38 -0
  20. package/dist/gateway-client.js +401 -0
  21. package/dist/gateway-client.js.map +1 -0
  22. package/dist/logger.d.ts +26 -0
  23. package/dist/logger.js +350 -0
  24. package/dist/logger.js.map +1 -0
  25. package/dist/settings-store.d.ts +29 -0
  26. package/dist/settings-store.js +224 -0
  27. package/dist/settings-store.js.map +1 -0
  28. package/dist/startup-config-cli.d.ts +5 -0
  29. package/dist/startup-config-cli.js +185 -0
  30. package/dist/startup-config-cli.js.map +1 -0
  31. package/dist/tools/browser/index.d.ts +14 -0
  32. package/dist/tools/browser/index.js +72 -0
  33. package/dist/tools/browser/index.js.map +1 -0
  34. package/dist/tools/filesystem/constants.d.ts +1 -0
  35. package/dist/tools/filesystem/constants.js +5 -0
  36. package/dist/tools/filesystem/constants.js.map +1 -0
  37. package/dist/tools/filesystem/copy-file.d.ts +14 -0
  38. package/dist/tools/filesystem/copy-file.js +65 -0
  39. package/dist/tools/filesystem/copy-file.js.map +1 -0
  40. package/dist/tools/filesystem/create-directory.d.ts +11 -0
  41. package/dist/tools/filesystem/create-directory.js +60 -0
  42. package/dist/tools/filesystem/create-directory.js.map +1 -0
  43. package/dist/tools/filesystem/delete.d.ts +11 -0
  44. package/dist/tools/filesystem/delete.js +64 -0
  45. package/dist/tools/filesystem/delete.js.map +1 -0
  46. package/dist/tools/filesystem/edit-file.d.ts +17 -0
  47. package/dist/tools/filesystem/edit-file.js +71 -0
  48. package/dist/tools/filesystem/edit-file.js.map +1 -0
  49. package/dist/tools/filesystem/fs-utils.d.ts +15 -0
  50. package/dist/tools/filesystem/fs-utils.js +178 -0
  51. package/dist/tools/filesystem/fs-utils.js.map +1 -0
  52. package/dist/tools/filesystem/get-file-tree.d.ts +14 -0
  53. package/dist/tools/filesystem/get-file-tree.js +38 -0
  54. package/dist/tools/filesystem/get-file-tree.js.map +1 -0
  55. package/dist/tools/filesystem/index.d.ts +3 -0
  56. package/dist/tools/filesystem/index.js +28 -0
  57. package/dist/tools/filesystem/index.js.map +1 -0
  58. package/dist/tools/filesystem/list-files.d.ts +17 -0
  59. package/dist/tools/filesystem/list-files.js +76 -0
  60. package/dist/tools/filesystem/list-files.js.map +1 -0
  61. package/dist/tools/filesystem/move.d.ts +14 -0
  62. package/dist/tools/filesystem/move.js +65 -0
  63. package/dist/tools/filesystem/move.js.map +1 -0
  64. package/dist/tools/filesystem/read-file.d.ts +17 -0
  65. package/dist/tools/filesystem/read-file.js +86 -0
  66. package/dist/tools/filesystem/read-file.js.map +1 -0
  67. package/dist/tools/filesystem/search-files.d.ts +23 -0
  68. package/dist/tools/filesystem/search-files.js +128 -0
  69. package/dist/tools/filesystem/search-files.js.map +1 -0
  70. package/dist/tools/filesystem/write-file.d.ts +14 -0
  71. package/dist/tools/filesystem/write-file.js +68 -0
  72. package/dist/tools/filesystem/write-file.js.map +1 -0
  73. package/dist/tools/monitor-utils.d.ts +2 -0
  74. package/dist/tools/monitor-utils.js +11 -0
  75. package/dist/tools/monitor-utils.js.map +1 -0
  76. package/dist/tools/mouse-keyboard/index.d.ts +2 -0
  77. package/dist/tools/mouse-keyboard/index.js +70 -0
  78. package/dist/tools/mouse-keyboard/index.js.map +1 -0
  79. package/dist/tools/mouse-keyboard/mouse-keyboard.d.ts +130 -0
  80. package/dist/tools/mouse-keyboard/mouse-keyboard.js +249 -0
  81. package/dist/tools/mouse-keyboard/mouse-keyboard.js.map +1 -0
  82. package/dist/tools/screenshot/index.d.ts +2 -0
  83. package/dist/tools/screenshot/index.js +26 -0
  84. package/dist/tools/screenshot/index.js.map +1 -0
  85. package/dist/tools/screenshot/screenshot.d.ts +22 -0
  86. package/dist/tools/screenshot/screenshot.js +91 -0
  87. package/dist/tools/screenshot/screenshot.js.map +1 -0
  88. package/dist/tools/shell/build-shell-resource.d.ts +1 -0
  89. package/dist/tools/shell/build-shell-resource.js +70 -0
  90. package/dist/tools/shell/build-shell-resource.js.map +1 -0
  91. package/dist/tools/shell/index.d.ts +2 -0
  92. package/dist/tools/shell/index.js +11 -0
  93. package/dist/tools/shell/index.js.map +1 -0
  94. package/dist/tools/shell/shell-execute.d.ts +17 -0
  95. package/dist/tools/shell/shell-execute.js +88 -0
  96. package/dist/tools/shell/shell-execute.js.map +1 -0
  97. package/dist/tools/test-utils.d.ts +3 -0
  98. package/dist/tools/test-utils.js +16 -0
  99. package/dist/tools/test-utils.js.map +1 -0
  100. package/dist/tools/types.d.ts +43 -0
  101. package/dist/tools/types.js +3 -0
  102. package/dist/tools/types.js.map +1 -0
  103. package/dist/tools/utils.d.ts +3 -0
  104. package/dist/tools/utils.js +19 -0
  105. package/dist/tools/utils.js.map +1 -0
  106. package/package.json +55 -0
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.keyboardShortcutTool = exports.keyboardKeyTapTool = exports.keyboardTypeTool = exports.mouseScrollTool = exports.mouseDragTool = exports.mouseDoubleClickTool = exports.mouseClickTool = exports.mouseMoveTool = void 0;
7
+ const robotjs_1 = __importDefault(require("@jitsi/robotjs"));
8
+ const zod_1 = require("zod");
9
+ const monitor_utils_1 = require("../monitor-utils");
10
+ const IS_MACOS = process.platform === 'darwin';
11
+ const IS_WINDOWS = process.platform === 'win32';
12
+ function normalizeKey(key) {
13
+ const k = key.toLowerCase();
14
+ const aliases = {
15
+ cmd: 'command',
16
+ meta: 'command',
17
+ super: 'command',
18
+ win: 'command',
19
+ windows: 'command',
20
+ ctrl: 'control',
21
+ option: 'alt',
22
+ return: 'enter',
23
+ esc: 'escape',
24
+ del: 'delete',
25
+ pgup: 'pageup',
26
+ pgdn: 'pagedown',
27
+ ins: 'insert',
28
+ caps: 'capslock',
29
+ };
30
+ return aliases[k] ?? k;
31
+ }
32
+ const MODIFIER_KEY_NAMES = IS_MACOS
33
+ ? '"command" (⌘, aliases: "cmd", "meta", "super"), "shift", "alt" (⌥, alias: "option"), "control" (alias: "ctrl")'
34
+ : IS_WINDOWS
35
+ ? '"control" (alias: "ctrl"), "shift", "alt", "command" (Win key, aliases: "win", "windows", "super")'
36
+ : '"control" (alias: "ctrl"), "shift", "alt", "command"';
37
+ const SHORTCUT_EXAMPLE = IS_MACOS
38
+ ? '["command","t"] for ⌘T, ["command","shift","z"] for ⌘⇧Z'
39
+ : '["control","t"] for Ctrl+T, ["control","shift","z"] for Ctrl+Shift+Z';
40
+ const screenSizeParams = {
41
+ screenWidth: zod_1.z
42
+ .number()
43
+ .int()
44
+ .optional()
45
+ .describe('Width of the screen as the agent perceived it from the screenshot (pixels). ' +
46
+ 'Use the actual pixel width of the screenshot image you received.'),
47
+ screenHeight: zod_1.z
48
+ .number()
49
+ .int()
50
+ .optional()
51
+ .describe('Height of the screen as the agent perceived it from the screenshot (pixels). ' +
52
+ 'Use the actual pixel height of the screenshot image you received.'),
53
+ };
54
+ function scaleCoord(x, y, screenWidth, screenHeight) {
55
+ if (!screenWidth || !screenHeight)
56
+ return { x, y };
57
+ const monitor = (0, monitor_utils_1.getPrimaryMonitor)();
58
+ return {
59
+ x: Math.round((x * monitor.width()) / screenWidth),
60
+ y: Math.round((y * monitor.height()) / screenHeight),
61
+ };
62
+ }
63
+ const mouseMoveSchema = zod_1.z.object({
64
+ x: zod_1.z.number().int().describe('Target X coordinate in pixels'),
65
+ y: zod_1.z.number().int().describe('Target Y coordinate in pixels'),
66
+ ...screenSizeParams,
67
+ });
68
+ const COMPUTER_RESOURCE = {
69
+ toolGroup: 'computer',
70
+ resource: '*',
71
+ description: 'Access screen/input devices',
72
+ };
73
+ exports.mouseMoveTool = {
74
+ name: 'mouse_move',
75
+ description: 'Move the mouse cursor to the specified screen coordinates',
76
+ inputSchema: mouseMoveSchema,
77
+ annotations: {},
78
+ getAffectedResources() {
79
+ return [COMPUTER_RESOURCE];
80
+ },
81
+ execute({ x, y, screenWidth, screenHeight }) {
82
+ const scaled = scaleCoord(x, y, screenWidth, screenHeight);
83
+ robotjs_1.default.moveMouse(scaled.x, scaled.y);
84
+ return { content: [{ type: 'text', text: 'ok' }] };
85
+ },
86
+ };
87
+ const mouseClickSchema = zod_1.z.object({
88
+ x: zod_1.z.number().int().describe('X coordinate to click'),
89
+ y: zod_1.z.number().int().describe('Y coordinate to click'),
90
+ button: zod_1.z.enum(['left', 'right', 'middle']).optional().describe('Mouse button (default: left)'),
91
+ ...screenSizeParams,
92
+ });
93
+ exports.mouseClickTool = {
94
+ name: 'mouse_click',
95
+ description: 'Move the mouse to the specified coordinates and click',
96
+ inputSchema: mouseClickSchema,
97
+ annotations: {},
98
+ getAffectedResources() {
99
+ return [COMPUTER_RESOURCE];
100
+ },
101
+ execute({ x, y, button = 'left', screenWidth, screenHeight }) {
102
+ const scaled = scaleCoord(x, y, screenWidth, screenHeight);
103
+ robotjs_1.default.moveMouse(scaled.x, scaled.y);
104
+ robotjs_1.default.mouseClick(button);
105
+ return { content: [{ type: 'text', text: 'ok' }] };
106
+ },
107
+ };
108
+ const mouseDoubleClickSchema = zod_1.z.object({
109
+ x: zod_1.z.number().int().describe('X coordinate to double-click'),
110
+ y: zod_1.z.number().int().describe('Y coordinate to double-click'),
111
+ ...screenSizeParams,
112
+ });
113
+ exports.mouseDoubleClickTool = {
114
+ name: 'mouse_double_click',
115
+ description: 'Move the mouse to the specified coordinates and double-click',
116
+ inputSchema: mouseDoubleClickSchema,
117
+ annotations: {},
118
+ getAffectedResources() {
119
+ return [COMPUTER_RESOURCE];
120
+ },
121
+ execute({ x, y, screenWidth, screenHeight }) {
122
+ const scaled = scaleCoord(x, y, screenWidth, screenHeight);
123
+ robotjs_1.default.moveMouse(scaled.x, scaled.y);
124
+ robotjs_1.default.mouseClick('left', true);
125
+ return { content: [{ type: 'text', text: 'ok' }] };
126
+ },
127
+ };
128
+ const mouseDragSchema = zod_1.z.object({
129
+ fromX: zod_1.z.number().int().describe('Starting X coordinate'),
130
+ fromY: zod_1.z.number().int().describe('Starting Y coordinate'),
131
+ toX: zod_1.z.number().int().describe('Target X coordinate'),
132
+ toY: zod_1.z.number().int().describe('Target Y coordinate'),
133
+ ...screenSizeParams,
134
+ });
135
+ exports.mouseDragTool = {
136
+ name: 'mouse_drag',
137
+ description: 'Click-drag from one coordinate to another',
138
+ inputSchema: mouseDragSchema,
139
+ annotations: {},
140
+ getAffectedResources() {
141
+ return [COMPUTER_RESOURCE];
142
+ },
143
+ execute({ fromX, fromY, toX, toY, screenWidth, screenHeight }) {
144
+ const scaledFrom = scaleCoord(fromX, fromY, screenWidth, screenHeight);
145
+ const scaledTo = scaleCoord(toX, toY, screenWidth, screenHeight);
146
+ robotjs_1.default.moveMouse(scaledFrom.x, scaledFrom.y);
147
+ robotjs_1.default.mouseToggle('down');
148
+ robotjs_1.default.dragMouse(scaledTo.x, scaledTo.y);
149
+ robotjs_1.default.mouseToggle('up');
150
+ return { content: [{ type: 'text', text: 'ok' }] };
151
+ },
152
+ };
153
+ const mouseScrollSchema = zod_1.z.object({
154
+ x: zod_1.z.number().int().describe('X coordinate to scroll at'),
155
+ y: zod_1.z.number().int().describe('Y coordinate to scroll at'),
156
+ direction: zod_1.z.enum(['up', 'down', 'left', 'right']).describe('Scroll direction'),
157
+ amount: zod_1.z.number().int().describe('Number of scroll ticks'),
158
+ ...screenSizeParams,
159
+ });
160
+ exports.mouseScrollTool = {
161
+ name: 'mouse_scroll',
162
+ description: 'Scroll at the specified screen coordinates',
163
+ inputSchema: mouseScrollSchema,
164
+ annotations: {},
165
+ getAffectedResources() {
166
+ return [COMPUTER_RESOURCE];
167
+ },
168
+ execute({ x, y, direction, amount, screenWidth, screenHeight }) {
169
+ const scaled = scaleCoord(x, y, screenWidth, screenHeight);
170
+ robotjs_1.default.moveMouse(scaled.x, scaled.y);
171
+ const dx = direction === 'right' ? amount : direction === 'left' ? -amount : 0;
172
+ const dy = direction === 'down' ? amount : direction === 'up' ? -amount : 0;
173
+ robotjs_1.default.scrollMouse(dx, dy);
174
+ return { content: [{ type: 'text', text: 'ok' }] };
175
+ },
176
+ };
177
+ const keyboardTypeSchema = zod_1.z.object({
178
+ text: zod_1.z.string().describe('Text to type'),
179
+ delayMs: zod_1.z
180
+ .number()
181
+ .int()
182
+ .optional()
183
+ .describe('Milliseconds to wait before typing. Use this when the target input field needs time to ' +
184
+ 'gain focus after a prior action (e.g. opening a new tab). Default: 0 (type immediately).'),
185
+ });
186
+ exports.keyboardTypeTool = {
187
+ name: 'keyboard_type',
188
+ description: 'Type a string of text using the keyboard',
189
+ inputSchema: keyboardTypeSchema,
190
+ annotations: {},
191
+ getAffectedResources() {
192
+ return [COMPUTER_RESOURCE];
193
+ },
194
+ async execute({ text, delayMs }) {
195
+ if (delayMs) {
196
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
197
+ }
198
+ robotjs_1.default.typeStringDelayed(text, 60 * 4);
199
+ return { content: [{ type: 'text', text: 'ok' }] };
200
+ },
201
+ };
202
+ const keyboardKeyTapSchema = zod_1.z.object({
203
+ key: zod_1.z
204
+ .string()
205
+ .describe('Key to press. Special keys: "enter", "escape", "tab", "backspace", "delete", "space", ' +
206
+ '"up", "down", "left", "right", "home", "end", "pageup", "pagedown", "insert", ' +
207
+ '"capslock", "printscreen", "menu", "f1"–"f24". ' +
208
+ 'Numpad: "numpad_0"–"numpad_9", "numpad_+", "numpad_-", "numpad_*", "numpad_/", "numpad_.", "numpad_lock". ' +
209
+ 'Media: "audio_mute", "audio_vol_up", "audio_vol_down", "audio_play", "audio_stop", "audio_pause", "audio_prev", "audio_next". ' +
210
+ 'Aliases: "esc"→"escape", "del"→"delete", "pgup"→"pageup", "pgdn"→"pagedown", "ins"→"insert", "return"→"enter", "caps"→"capslock". ' +
211
+ 'For single characters just pass the character directly (e.g. "a", "1", ".").'),
212
+ });
213
+ exports.keyboardKeyTapTool = {
214
+ name: 'keyboard_key_tap',
215
+ description: 'Press and release a single key. Use keyboard_shortcut for key combinations.',
216
+ inputSchema: keyboardKeyTapSchema,
217
+ annotations: {},
218
+ getAffectedResources() {
219
+ return [COMPUTER_RESOURCE];
220
+ },
221
+ execute({ key }) {
222
+ robotjs_1.default.keyTap(normalizeKey(key));
223
+ return { content: [{ type: 'text', text: 'ok' }] };
224
+ },
225
+ };
226
+ const keyboardShortcutSchema = zod_1.z.object({
227
+ keys: zod_1.z
228
+ .array(zod_1.z.string())
229
+ .min(1)
230
+ .describe('Keys in the shortcut. Last element is tapped; all preceding are held as modifiers. ' +
231
+ `Modifier names: ${MODIFIER_KEY_NAMES}. ` +
232
+ `Examples: ${SHORTCUT_EXAMPLE}.`),
233
+ });
234
+ exports.keyboardShortcutTool = {
235
+ name: 'keyboard_shortcut',
236
+ description: `Press a keyboard shortcut (e.g. ${IS_MACOS ? '⌘C, ⌘⇧Z' : 'Ctrl+C, Ctrl+Shift+Z'})`,
237
+ inputSchema: keyboardShortcutSchema,
238
+ annotations: {},
239
+ getAffectedResources() {
240
+ return [COMPUTER_RESOURCE];
241
+ },
242
+ execute({ keys }) {
243
+ const modifiers = keys.slice(0, -1).map(normalizeKey);
244
+ const key = normalizeKey(keys.at(-1));
245
+ robotjs_1.default.keyTap(key, modifiers);
246
+ return { content: [{ type: 'text', text: 'ok' }] };
247
+ },
248
+ };
249
+ //# sourceMappingURL=mouse-keyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mouse-keyboard.js","sourceRoot":"","sources":["../../../src/tools/mouse-keyboard/mouse-keyboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolModule } from '../types';
2
+ export declare const ScreenshotModule: ToolModule;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScreenshotModule = void 0;
4
+ const node_screenshots_1 = require("node-screenshots");
5
+ const logger_1 = require("../../logger");
6
+ const screenshot_1 = require("./screenshot");
7
+ exports.ScreenshotModule = {
8
+ isSupported() {
9
+ try {
10
+ const monitors = node_screenshots_1.Monitor.all();
11
+ if (monitors.length === 0) {
12
+ logger_1.logger.info('Screenshot module not supported', { reason: 'no monitors detected' });
13
+ return false;
14
+ }
15
+ return true;
16
+ }
17
+ catch (error) {
18
+ logger_1.logger.info('Screenshot module not supported', {
19
+ error: error instanceof Error ? error.message : String(error),
20
+ });
21
+ return false;
22
+ }
23
+ },
24
+ definitions: [screenshot_1.screenshotTool, screenshot_1.screenshotRegionTool],
25
+ };
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/screenshot/index.ts"],"names":[],"mappings":";;;AAAA,uDAA2C;AAE3C,yCAAsC;AAEtC,6CAAoE;AAEvD,QAAA,gBAAgB,GAAe;IAC3C,WAAW;QACV,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,0BAAO,CAAC,GAAG,EAAE,CAAC;YAC/B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,eAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;gBACnF,OAAO,KAAK,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,eAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;gBAC9C,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC7D,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IACD,WAAW,EAAE,CAAC,2BAAc,EAAE,iCAAoB,CAAC;CACnD,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod';
2
+ import type { ToolDefinition } from '../types';
3
+ declare const screenshotSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
4
+ declare const screenshotRegionSchema: z.ZodObject<{
5
+ x: z.ZodNumber;
6
+ y: z.ZodNumber;
7
+ width: z.ZodNumber;
8
+ height: z.ZodNumber;
9
+ }, "strip", z.ZodTypeAny, {
10
+ x: number;
11
+ y: number;
12
+ width: number;
13
+ height: number;
14
+ }, {
15
+ x: number;
16
+ y: number;
17
+ width: number;
18
+ height: number;
19
+ }>;
20
+ export declare const screenshotTool: ToolDefinition<typeof screenshotSchema>;
21
+ export declare const screenshotRegionTool: ToolDefinition<typeof screenshotRegionSchema>;
22
+ export {};
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.screenshotRegionTool = exports.screenshotTool = void 0;
7
+ const zod_1 = require("zod");
8
+ const sharp_1 = __importDefault(require("sharp"));
9
+ const monitor_utils_1 = require("../monitor-utils");
10
+ const screenshotSchema = zod_1.z.object({});
11
+ const screenshotRegionSchema = zod_1.z.object({
12
+ x: zod_1.z.number().int().describe('Region left position in pixels (absolute screen coordinates)'),
13
+ y: zod_1.z.number().int().describe('Region top position in pixels (absolute screen coordinates)'),
14
+ width: zod_1.z.number().int().describe('Region width in pixels'),
15
+ height: zod_1.z.number().int().describe('Region height in pixels'),
16
+ });
17
+ async function toJpeg(rawBuffer, width, height, logicalWidth, logicalHeight) {
18
+ let pipeline = (0, sharp_1.default)(rawBuffer, { raw: { width, height, channels: 4 } });
19
+ if (logicalWidth && logicalHeight && (width !== logicalWidth || height !== logicalHeight)) {
20
+ pipeline = pipeline.resize(logicalWidth, logicalHeight);
21
+ }
22
+ const w = logicalWidth ?? width;
23
+ const h = logicalHeight ?? height;
24
+ const maxDim = 1024;
25
+ if (w > maxDim || h > maxDim) {
26
+ const scale = maxDim / Math.max(w, h);
27
+ pipeline = pipeline.resize(Math.round(w * scale), Math.round(h * scale));
28
+ }
29
+ return await pipeline.jpeg({ quality: 85 }).toBuffer();
30
+ }
31
+ exports.screenshotTool = {
32
+ name: 'screen_screenshot',
33
+ description: 'Capture a screenshot of the full screen and return it as a base64-encoded JPEG',
34
+ inputSchema: screenshotSchema,
35
+ annotations: { readOnlyHint: true },
36
+ getAffectedResources() {
37
+ return [{ toolGroup: 'computer', resource: '*', description: 'Capture screenshot' }];
38
+ },
39
+ async execute(_input, _context) {
40
+ const monitor = (0, monitor_utils_1.getPrimaryMonitor)();
41
+ const image = await monitor.captureImage();
42
+ const rawBuffer = await image.toRaw();
43
+ const jpegBuffer = await toJpeg(rawBuffer, image.width, image.height, monitor.width(), monitor.height());
44
+ return {
45
+ content: [
46
+ {
47
+ type: 'image',
48
+ data: jpegBuffer.toString('base64'),
49
+ mimeType: 'image/jpeg',
50
+ },
51
+ ],
52
+ };
53
+ },
54
+ };
55
+ exports.screenshotRegionTool = {
56
+ name: 'screen_screenshot_region',
57
+ description: 'Capture a specific region of the screen and return it as a base64-encoded JPEG',
58
+ inputSchema: screenshotRegionSchema,
59
+ annotations: { readOnlyHint: true },
60
+ getAffectedResources() {
61
+ return [
62
+ { toolGroup: 'computer', resource: '*', description: 'Capture screenshot region' },
63
+ ];
64
+ },
65
+ async execute({ x, y, width, height }, _context) {
66
+ const monitor = (0, monitor_utils_1.getPrimaryMonitor)();
67
+ const image = await monitor.captureImage();
68
+ const scaleFactor = monitor.scaleFactor();
69
+ const logicalRelX = Math.max(0, x - monitor.x());
70
+ const logicalRelY = Math.max(0, y - monitor.y());
71
+ const logicalClampedW = Math.min(width, monitor.width() - logicalRelX);
72
+ const logicalClampedH = Math.min(height, monitor.height() - logicalRelY);
73
+ const physRelX = Math.round(logicalRelX * scaleFactor);
74
+ const physRelY = Math.round(logicalRelY * scaleFactor);
75
+ const physW = Math.round(logicalClampedW * scaleFactor);
76
+ const physH = Math.round(logicalClampedH * scaleFactor);
77
+ const cropped = await image.crop(physRelX, physRelY, physW, physH);
78
+ const rawBuffer = await cropped.toRaw();
79
+ const jpegBuffer = await toJpeg(rawBuffer, cropped.width, cropped.height, logicalClampedW, logicalClampedH);
80
+ return {
81
+ content: [
82
+ {
83
+ type: 'image',
84
+ data: jpegBuffer.toString('base64'),
85
+ mimeType: 'image/jpeg',
86
+ },
87
+ ],
88
+ };
89
+ },
90
+ };
91
+ //# sourceMappingURL=screenshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/screenshot/screenshot.ts"],"names":[],"mappings":";;;;;;AAAA,6BAAwB;AAExB,kDAA0B;AAE1B,oDAAqD;AAGrD,MAAM,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEtC,MAAM,sBAAsB,GAAG,OAAC,CAAC,MAAM,CAAC;IACvC,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IAC5F,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IAC3F,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC1D,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CAC5D,CAAC,CAAC;AAEH,KAAK,UAAU,MAAM,CACpB,SAAiB,EACjB,KAAa,EACb,MAAc,EACd,YAAqB,EACrB,aAAsB;IAEtB,IAAI,QAAQ,GAAG,IAAA,eAAK,EAAC,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,IAAI,YAAY,IAAI,aAAa,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,MAAM,KAAK,aAAa,CAAC,EAAE,CAAC;QAC3F,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,GAAG,YAAY,IAAI,KAAK,CAAC;IAChC,MAAM,CAAC,GAAG,aAAa,IAAI,MAAM,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxD,CAAC;AAEY,QAAA,cAAc,GAA4C;IACtE,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,gFAAgF;IAC7F,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;IACnC,oBAAoB;QACnB,OAAO,CAAC,EAAE,SAAS,EAAE,UAAmB,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,MAAwC,EAAE,QAAqB;QAC5E,MAAM,OAAO,GAAG,IAAA,iCAAiB,GAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,MAAM,MAAM,CAC9B,SAAS,EACT,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,EACZ,OAAO,CAAC,KAAK,EAAE,EACf,OAAO,CAAC,MAAM,EAAE,CAChB,CAAC;QACF,OAAO;YACN,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,OAAgB;oBACtB,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACnC,QAAQ,EAAE,YAAY;iBACtB;aACD;SACD,CAAC;IACH,CAAC;CACD,CAAC;AAEW,QAAA,oBAAoB,GAAkD;IAClF,IAAI,EAAE,0BAA0B;IAChC,WAAW,EAAE,gFAAgF;IAC7F,WAAW,EAAE,sBAAsB;IACnC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;IACnC,oBAAoB;QACnB,OAAO;YACN,EAAE,SAAS,EAAE,UAAmB,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,2BAA2B,EAAE;SAC3F,CAAC;IACH,CAAC;IACD,KAAK,CAAC,OAAO,CACZ,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAA0C,EAC/D,QAAqB;QAErB,MAAM,OAAO,GAAG,IAAA,iCAAiB,GAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAI1C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,WAAW,CAAC,CAAC;QACvE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC;QAEzE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,WAAW,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,WAAW,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QAExC,MAAM,UAAU,GAAG,MAAM,MAAM,CAC9B,SAAS,EACT,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,EACd,eAAe,EACf,eAAe,CACf,CAAC;QAEF,OAAO;YACN,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,OAAgB;oBACtB,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACnC,QAAQ,EAAE,YAAY;iBACtB;aACD;SACD,CAAC;IACH,CAAC;CACD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function buildShellResource(command: string): string;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.buildShellResource = buildShellResource;
37
+ const path = __importStar(require("node:path"));
38
+ const WRAPPER_COMMANDS = new Set(['sudo', 'env', 'time', 'nice', 'nohup', 'xargs', 'doas']);
39
+ const COMPLEX_TOKENS = ['|', ';', '&', '$(', '`', '<(', '>(', '\n'];
40
+ function isComplex(command) {
41
+ return COMPLEX_TOKENS.some((token) => command.includes(token));
42
+ }
43
+ function buildShellResource(command) {
44
+ const trimmed = command.trim();
45
+ if (isComplex(trimmed))
46
+ return trimmed;
47
+ const words = trimmed.split(/\s+/);
48
+ let programIndex = -1;
49
+ for (let i = 0; i < words.length; i++) {
50
+ const word = words[i];
51
+ if (word.startsWith('-'))
52
+ continue;
53
+ if (/^[A-Z_a-z][A-Z0-9_a-z]*=/.test(word))
54
+ continue;
55
+ if (WRAPPER_COMMANDS.has(word))
56
+ continue;
57
+ programIndex = i;
58
+ break;
59
+ }
60
+ if (programIndex === -1)
61
+ return trimmed;
62
+ const program = words[programIndex];
63
+ if (program.startsWith('$') || program.startsWith('./') || program.startsWith('../')) {
64
+ return trimmed;
65
+ }
66
+ const basename = path.basename(program);
67
+ const rest = words.slice(programIndex + 1);
68
+ return rest.length > 0 ? `${basename} ${rest.join(' ')}` : basename;
69
+ }
70
+ //# sourceMappingURL=build-shell-resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-shell-resource.js","sourceRoot":"","sources":["../../../src/tools/shell/build-shell-resource.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,gDA8BC;AAxDD,gDAAkC;AAElC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAQ5F,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEpE,SAAS,SAAS,CAAC,OAAe;IACjC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE,CAAC;AAYD,SAAgB,kBAAkB,CAAC,OAAe;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,IAAI,SAAS,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAEvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACnC,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QACpD,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACzC,YAAY,GAAG,CAAC,CAAC;QACjB,MAAM;IACP,CAAC;IAED,IAAI,YAAY,KAAK,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAExC,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IAGpC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtF,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IAE3C,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrE,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolModule } from '../types';
2
+ export declare const ShellModule: ToolModule;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ShellModule = void 0;
4
+ const shell_execute_1 = require("./shell-execute");
5
+ exports.ShellModule = {
6
+ isSupported() {
7
+ return true;
8
+ },
9
+ definitions: [shell_execute_1.shellExecuteTool],
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/shell/index.ts"],"names":[],"mappings":";;;AACA,mDAAmD;AAEtC,QAAA,WAAW,GAAe;IACtC,WAAW;QACV,OAAO,IAAI,CAAC;IACb,CAAC;IACD,WAAW,EAAE,CAAC,gCAAgB,CAAC;CAC/B,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+ import type { ToolDefinition } from '../types';
3
+ declare const inputSchema: z.ZodObject<{
4
+ command: z.ZodString;
5
+ timeout: z.ZodOptional<z.ZodNumber>;
6
+ cwd: z.ZodOptional<z.ZodString>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ command: string;
9
+ timeout?: number | undefined;
10
+ cwd?: string | undefined;
11
+ }, {
12
+ command: string;
13
+ timeout?: number | undefined;
14
+ cwd?: string | undefined;
15
+ }>;
16
+ export declare const shellExecuteTool: ToolDefinition<typeof inputSchema>;
17
+ export {};
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shellExecuteTool = void 0;
4
+ const sandbox_runtime_1 = require("@anthropic-ai/sandbox-runtime");
5
+ const ripgrep_1 = require("@vscode/ripgrep");
6
+ const child_process_1 = require("child_process");
7
+ const zod_1 = require("zod");
8
+ const utils_1 = require("../utils");
9
+ const build_shell_resource_1 = require("./build-shell-resource");
10
+ async function initializeSandbox({ dir }) {
11
+ const config = {
12
+ ripgrep: {
13
+ command: ripgrep_1.rgPath,
14
+ },
15
+ network: {
16
+ allowedDomains: [],
17
+ deniedDomains: [],
18
+ },
19
+ filesystem: {
20
+ denyRead: ['~/.ssh'],
21
+ allowRead: [],
22
+ allowWrite: [dir],
23
+ denyWrite: [],
24
+ },
25
+ };
26
+ await sandbox_runtime_1.SandboxManager.initialize(config);
27
+ }
28
+ const inputSchema = zod_1.z.object({
29
+ command: zod_1.z.string().describe('Shell command to execute'),
30
+ timeout: zod_1.z.number().int().optional().describe('Timeout in milliseconds (default: 30000)'),
31
+ cwd: zod_1.z.string().optional().describe('Working directory for the command'),
32
+ });
33
+ exports.shellExecuteTool = {
34
+ name: 'shell_execute',
35
+ description: 'Execute a shell command and return stdout, stderr, and exit code',
36
+ inputSchema,
37
+ annotations: { destructiveHint: true },
38
+ getAffectedResources({ command }) {
39
+ return [
40
+ {
41
+ toolGroup: 'shell',
42
+ resource: (0, build_shell_resource_1.buildShellResource)(command),
43
+ description: `Execute shell command: ${command}`,
44
+ },
45
+ ];
46
+ },
47
+ async execute({ command, timeout = 30_000, cwd }, { dir }) {
48
+ return await runCommand(command, { timeout, dir, cwd: cwd ?? dir });
49
+ },
50
+ };
51
+ async function spawnCommand(command, { dir, cwd }) {
52
+ const isWindows = process.platform === 'win32';
53
+ const isMac = process.platform === 'darwin';
54
+ if (isWindows) {
55
+ return (0, child_process_1.spawn)('cmd.exe', ['/C', command], { cwd });
56
+ }
57
+ if (isMac) {
58
+ await initializeSandbox({ dir });
59
+ const sandboxedCommand = await sandbox_runtime_1.SandboxManager.wrapWithSandbox(command);
60
+ return (0, child_process_1.spawn)(sandboxedCommand, { shell: true, cwd });
61
+ }
62
+ return (0, child_process_1.spawn)('sh', ['-c', command], { cwd });
63
+ }
64
+ async function runCommand(command, { timeout, cwd, dir }) {
65
+ return await new Promise((resolve, reject) => {
66
+ spawnCommand(command, { dir, cwd })
67
+ .then((child) => {
68
+ let stdout = '';
69
+ let stderr = '';
70
+ child.stdout?.on('data', (chunk) => {
71
+ stdout += String(chunk);
72
+ });
73
+ child.stderr?.on('data', (chunk) => {
74
+ stderr += String(chunk);
75
+ });
76
+ const timer = setTimeout(() => {
77
+ child.kill();
78
+ resolve((0, utils_1.formatCallToolResult)({ stdout, stderr, exitCode: null, timedOut: true }));
79
+ }, timeout);
80
+ child.on('close', (code) => {
81
+ clearTimeout(timer);
82
+ resolve((0, utils_1.formatCallToolResult)({ stdout, stderr, exitCode: code }));
83
+ });
84
+ })
85
+ .catch(reject);
86
+ });
87
+ }
88
+ //# sourceMappingURL=shell-execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-execute.js","sourceRoot":"","sources":["../../../src/tools/shell/shell-execute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CallToolResult } from './types';
2
+ export declare function textOf(result: CallToolResult): string;
3
+ export declare function structuredOf(result: CallToolResult): Record<string, unknown>;