@antaif3ng/til-work 0.1.2 → 0.2.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 (50) hide show
  1. package/README.md +256 -298
  2. package/dist/core/config.d.ts +29 -11
  3. package/dist/core/config.d.ts.map +1 -1
  4. package/dist/core/config.js +65 -101
  5. package/dist/core/config.js.map +1 -1
  6. package/dist/core/llm.d.ts.map +1 -1
  7. package/dist/core/llm.js +14 -0
  8. package/dist/core/llm.js.map +1 -1
  9. package/dist/core/session.d.ts +3 -2
  10. package/dist/core/session.d.ts.map +1 -1
  11. package/dist/core/session.js +4 -3
  12. package/dist/core/session.js.map +1 -1
  13. package/dist/core/skills.d.ts +2 -1
  14. package/dist/core/skills.d.ts.map +1 -1
  15. package/dist/core/skills.js +9 -0
  16. package/dist/core/skills.js.map +1 -1
  17. package/dist/core/system-prompt.d.ts.map +1 -1
  18. package/dist/core/system-prompt.js +4 -1
  19. package/dist/core/system-prompt.js.map +1 -1
  20. package/dist/main.d.ts.map +1 -1
  21. package/dist/main.js +66 -124
  22. package/dist/main.js.map +1 -1
  23. package/dist/modes/interactive.d.ts.map +1 -1
  24. package/dist/modes/interactive.js +272 -180
  25. package/dist/modes/interactive.js.map +1 -1
  26. package/dist/tools/browser.d.ts +10 -0
  27. package/dist/tools/browser.d.ts.map +1 -0
  28. package/dist/tools/browser.js +231 -0
  29. package/dist/tools/browser.js.map +1 -0
  30. package/dist/tools/computer.d.ts +3 -0
  31. package/dist/tools/computer.d.ts.map +1 -0
  32. package/dist/tools/computer.js +251 -0
  33. package/dist/tools/computer.js.map +1 -0
  34. package/dist/tools/index.d.ts +5 -2
  35. package/dist/tools/index.d.ts.map +1 -1
  36. package/dist/tools/index.js +11 -2
  37. package/dist/tools/index.js.map +1 -1
  38. package/dist/tools/read.d.ts.map +1 -1
  39. package/dist/tools/read.js +29 -4
  40. package/dist/tools/read.js.map +1 -1
  41. package/dist/tools/screenshot.d.ts +3 -0
  42. package/dist/tools/screenshot.d.ts.map +1 -0
  43. package/dist/tools/screenshot.js +113 -0
  44. package/dist/tools/screenshot.js.map +1 -0
  45. package/package.json +2 -1
  46. package/skills/find-skills/SKILL.md +66 -0
  47. package/skills/playwright-mcp/SKILL.md +90 -0
  48. package/skills/self-improving-agent/SKILL.md +88 -0
  49. package/skills/skill-creator/SKILL.md +93 -0
  50. package/skills/summarize/SKILL.md +55 -0
@@ -0,0 +1,251 @@
1
+ import { execFile } from "node:child_process";
2
+ import { readFile, unlink } from "node:fs/promises";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { randomUUID } from "node:crypto";
6
+ import { platform } from "node:process";
7
+ function exec(cmd, args, timeout = 10_000) {
8
+ return new Promise((resolve, reject) => {
9
+ execFile(cmd, args, { timeout }, (err, stdout, stderr) => {
10
+ if (err)
11
+ reject(err);
12
+ else
13
+ resolve({ stdout, stderr });
14
+ });
15
+ });
16
+ }
17
+ async function takeScreenshot() {
18
+ const tmpPath = join(tmpdir(), `til-cu-${randomUUID()}.png`);
19
+ try {
20
+ if (platform === "darwin") {
21
+ await exec("screencapture", ["-x", tmpPath]);
22
+ }
23
+ else {
24
+ try {
25
+ await exec("gnome-screenshot", ["-f", tmpPath]);
26
+ }
27
+ catch {
28
+ try {
29
+ await exec("scrot", [tmpPath]);
30
+ }
31
+ catch {
32
+ await exec("import", ["-window", "root", tmpPath]);
33
+ }
34
+ }
35
+ }
36
+ const buf = await readFile(tmpPath);
37
+ return { type: "image", data: buf.toString("base64"), mimeType: "image/png" };
38
+ }
39
+ finally {
40
+ unlink(tmpPath).catch(() => { });
41
+ }
42
+ }
43
+ async function mouseMove(x, y) {
44
+ if (platform === "darwin") {
45
+ await exec("cliclick", [`m:${x},${y}`]);
46
+ }
47
+ else {
48
+ await exec("xdotool", ["mousemove", String(x), String(y)]);
49
+ }
50
+ return `Mouse moved to (${x}, ${y})`;
51
+ }
52
+ async function mouseClick(x, y, button) {
53
+ if (platform === "darwin") {
54
+ const clickCmd = button === "right" ? "rc" : "c";
55
+ await exec("cliclick", [`${clickCmd}:${x},${y}`]);
56
+ }
57
+ else {
58
+ const btn = button === "right" ? "3" : button === "middle" ? "2" : "1";
59
+ await exec("xdotool", ["mousemove", String(x), String(y), "click", btn]);
60
+ }
61
+ return `Clicked ${button} at (${x}, ${y})`;
62
+ }
63
+ async function mouseDoubleClick(x, y) {
64
+ if (platform === "darwin") {
65
+ await exec("cliclick", [`dc:${x},${y}`]);
66
+ }
67
+ else {
68
+ await exec("xdotool", ["mousemove", String(x), String(y), "click", "--repeat", "2", "1"]);
69
+ }
70
+ return `Double-clicked at (${x}, ${y})`;
71
+ }
72
+ async function mouseDrag(startX, startY, endX, endY) {
73
+ if (platform === "darwin") {
74
+ await exec("cliclick", [`dd:${startX},${startY}`, `du:${endX},${endY}`]);
75
+ }
76
+ else {
77
+ await exec("xdotool", [
78
+ "mousemove", String(startX), String(startY),
79
+ "mousedown", "1",
80
+ "mousemove", String(endX), String(endY),
81
+ "mouseup", "1",
82
+ ]);
83
+ }
84
+ return `Dragged from (${startX},${startY}) to (${endX},${endY})`;
85
+ }
86
+ async function typeText(text) {
87
+ if (platform === "darwin") {
88
+ await exec("cliclick", [`t:${text}`]);
89
+ }
90
+ else {
91
+ await exec("xdotool", ["type", "--clearmodifiers", text]);
92
+ }
93
+ return `Typed: "${text.length > 50 ? text.slice(0, 50) + "..." : text}"`;
94
+ }
95
+ const MACOS_KEY_MAP = {
96
+ enter: "return", return: "return", tab: "tab", escape: "escape", esc: "escape",
97
+ space: "space", backspace: "delete", delete: "fwd-delete",
98
+ up: "arrow-up", down: "arrow-down", left: "arrow-left", right: "arrow-right",
99
+ home: "home", end: "end", pageup: "page-up", pagedown: "page-down",
100
+ cmd: "cmd", command: "cmd", ctrl: "ctrl", control: "ctrl",
101
+ alt: "alt", option: "alt", shift: "shift",
102
+ f1: "f1", f2: "f2", f3: "f3", f4: "f4", f5: "f5", f6: "f6",
103
+ f7: "f7", f8: "f8", f9: "f9", f10: "f10", f11: "f11", f12: "f12",
104
+ };
105
+ const XDOTOOL_KEY_MAP = {
106
+ enter: "Return", return: "Return", tab: "Tab", escape: "Escape", esc: "Escape",
107
+ space: "space", backspace: "BackSpace", delete: "Delete",
108
+ up: "Up", down: "Down", left: "Left", right: "Right",
109
+ home: "Home", end: "End", pageup: "Page_Up", pagedown: "Page_Down",
110
+ cmd: "super", command: "super", ctrl: "ctrl", control: "ctrl",
111
+ alt: "alt", option: "alt", shift: "shift",
112
+ f1: "F1", f2: "F2", f3: "F3", f4: "F4", f5: "F5", f6: "F6",
113
+ f7: "F7", f8: "F8", f9: "F9", f10: "F10", f11: "F11", f12: "F12",
114
+ };
115
+ async function pressKey(keys) {
116
+ const parts = keys.split("+").map((k) => k.trim().toLowerCase());
117
+ if (platform === "darwin") {
118
+ const mapped = parts.map((k) => MACOS_KEY_MAP[k] || k);
119
+ await exec("cliclick", [`kp:${mapped.join(",")}`]);
120
+ }
121
+ else {
122
+ const mapped = parts.map((k) => XDOTOOL_KEY_MAP[k] || k);
123
+ await exec("xdotool", ["key", mapped.join("+")]);
124
+ }
125
+ return `Key pressed: ${keys}`;
126
+ }
127
+ async function scroll(direction, amount) {
128
+ if (platform === "darwin") {
129
+ const dy = direction === "up" ? amount : direction === "down" ? -amount : 0;
130
+ const dx = direction === "left" ? amount : direction === "right" ? -amount : 0;
131
+ if (dy !== 0) {
132
+ await exec("cliclick", [`scroll:0,${dy}`]);
133
+ }
134
+ if (dx !== 0) {
135
+ await exec("cliclick", [`scroll:${dx},0`]);
136
+ }
137
+ }
138
+ else {
139
+ const btn = direction === "up" ? "4" : direction === "down" ? "5" : direction === "left" ? "6" : "7";
140
+ await exec("xdotool", ["click", "--repeat", String(amount), btn]);
141
+ }
142
+ return `Scrolled ${direction} by ${amount}`;
143
+ }
144
+ export function createComputerTool() {
145
+ return {
146
+ name: "computer",
147
+ label: "Computer",
148
+ description: "Control the computer: take screenshots, move/click mouse, type text, press keys, scroll. " +
149
+ "Each action returns a screenshot of the current screen state for visual feedback. " +
150
+ "Requires: macOS (cliclick via `brew install cliclick`) or Linux (xdotool).",
151
+ parameters: {
152
+ type: "object",
153
+ properties: {
154
+ action: {
155
+ type: "string",
156
+ description: "Action to perform",
157
+ enum: [
158
+ "screenshot",
159
+ "mouse_move",
160
+ "click",
161
+ "double_click",
162
+ "drag",
163
+ "type",
164
+ "key",
165
+ "scroll",
166
+ ],
167
+ },
168
+ x: { type: "number", description: "X coordinate (for mouse actions)" },
169
+ y: { type: "number", description: "Y coordinate (for mouse actions)" },
170
+ button: {
171
+ type: "string",
172
+ description: 'Mouse button: "left" (default), "right", "middle"',
173
+ enum: ["left", "right", "middle"],
174
+ },
175
+ text: { type: "string", description: "Text to type (for type action)" },
176
+ keys: {
177
+ type: "string",
178
+ description: 'Key combination (for key action), e.g. "cmd+c", "ctrl+shift+t", "enter"',
179
+ },
180
+ direction: {
181
+ type: "string",
182
+ description: "Scroll direction",
183
+ enum: ["up", "down", "left", "right"],
184
+ },
185
+ amount: { type: "number", description: "Scroll amount (default 3)" },
186
+ endX: { type: "number", description: "End X coordinate (for drag)" },
187
+ endY: { type: "number", description: "End Y coordinate (for drag)" },
188
+ },
189
+ required: ["action"],
190
+ },
191
+ execute: async (_toolCallId, params, signal) => {
192
+ const { action, x, y, button = "left", text, keys, direction = "down", amount = 3, endX, endY, } = params;
193
+ if (signal?.aborted)
194
+ throw new Error("Operation aborted");
195
+ let actionResult;
196
+ switch (action) {
197
+ case "screenshot":
198
+ actionResult = "Screenshot taken";
199
+ break;
200
+ case "mouse_move":
201
+ if (x === undefined || y === undefined)
202
+ throw new Error("mouse_move requires x and y");
203
+ actionResult = await mouseMove(x, y);
204
+ break;
205
+ case "click":
206
+ if (x === undefined || y === undefined)
207
+ throw new Error("click requires x and y");
208
+ actionResult = await mouseClick(x, y, button);
209
+ break;
210
+ case "double_click":
211
+ if (x === undefined || y === undefined)
212
+ throw new Error("double_click requires x and y");
213
+ actionResult = await mouseDoubleClick(x, y);
214
+ break;
215
+ case "drag":
216
+ if (x === undefined || y === undefined || endX === undefined || endY === undefined)
217
+ throw new Error("drag requires x, y, endX, endY");
218
+ actionResult = await mouseDrag(x, y, endX, endY);
219
+ break;
220
+ case "type":
221
+ if (!text)
222
+ throw new Error("type requires text");
223
+ actionResult = await typeText(text);
224
+ break;
225
+ case "key":
226
+ if (!keys)
227
+ throw new Error("key requires keys");
228
+ actionResult = await pressKey(keys);
229
+ break;
230
+ case "scroll":
231
+ actionResult = await scroll(direction, amount);
232
+ break;
233
+ default:
234
+ throw new Error(`Unknown action: ${action}`);
235
+ }
236
+ if (signal?.aborted)
237
+ throw new Error("Operation aborted");
238
+ const content = [];
239
+ try {
240
+ const screenshot = await takeScreenshot();
241
+ content.push(screenshot);
242
+ }
243
+ catch {
244
+ content.push({ type: "text", text: "(screenshot unavailable)" });
245
+ }
246
+ content.push({ type: "text", text: actionResult });
247
+ return { content };
248
+ },
249
+ };
250
+ }
251
+ //# sourceMappingURL=computer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computer.js","sourceRoot":"","sources":["../../src/tools/computer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGxC,SAAS,IAAI,CAAC,GAAW,EAAE,IAAc,EAAE,OAAO,GAAG,MAAM;IAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACxD,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;gBAChB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC;QACJ,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACP,IAAI,CAAC;gBACJ,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACR,IAAI,CAAC;oBAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAC,CAAC;gBACvC,MAAM,CAAC;oBAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBAAC,CAAC;YAC9D,CAAC;QACF,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAC/E,CAAC;YAAS,CAAC;QACV,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjC,CAAC;AACF,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,CAAS,EAAE,CAAS;IAC5C,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,MAAc;IAC7D,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACjD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACP,MAAM,GAAG,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACvE,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,WAAW,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,CAAS,EAAE,CAAS;IACnD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,MAAc,EAAE,IAAY,EAAE,IAAY;IAClF,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,MAAM,IAAI,MAAM,EAAE,EAAE,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,CAAC,SAAS,EAAE;YACrB,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;YAC3C,WAAW,EAAE,GAAG;YAChB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;YACvC,SAAS,EAAE,GAAG;SACd,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,iBAAiB,MAAM,IAAI,MAAM,SAAS,IAAI,IAAI,IAAI,GAAG,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,WAAW,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AAC1E,CAAC;AAED,MAAM,aAAa,GAA2B;IAC7C,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ;IAC9E,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY;IACzD,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa;IAC5E,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW;IAClE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IACzD,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;IACzC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI;IAC1D,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK;CAChE,CAAC;AAEF,MAAM,eAAe,GAA2B;IAC/C,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ;IAC9E,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ;IACxD,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IACpD,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW;IAClE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAC7D,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;IACzC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI;IAC1D,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK;CAChE,CAAC;AAEF,KAAK,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAEjE,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACP,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,gBAAgB,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,SAAiB,EAAE,MAAc;IACtD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,EAAE,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;SAAM,CAAC;QACP,MAAM,GAAG,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACrG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,YAAY,SAAS,OAAO,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,kBAAkB;IACjC,OAAO;QACN,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EACV,2FAA2F;YAC3F,oFAAoF;YACpF,4EAA4E;QAC7E,UAAU,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACX,MAAM,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mBAAmB;oBAChC,IAAI,EAAE;wBACL,YAAY;wBACZ,YAAY;wBACZ,OAAO;wBACP,cAAc;wBACd,MAAM;wBACN,MAAM;wBACN,KAAK;wBACL,QAAQ;qBACR;iBACD;gBACD,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;gBACtE,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;gBACtE,MAAM,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mDAAmD;oBAChE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;iBACjC;gBACD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;gBACvE,IAAI,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yEAAyE;iBACtF;gBACD,SAAS,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kBAAkB;oBAC/B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;iBACrC;gBACD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;gBACpE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;gBACpE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;aACpE;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACpB;QACD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAA4B,EAAE;YACxE,MAAM,EACL,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EACzC,SAAS,GAAG,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,GAC1C,GAAG,MAIH,CAAC;YAEF,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAE1D,IAAI,YAAoB,CAAC;YAEzB,QAAQ,MAAM,EAAE,CAAC;gBAChB,KAAK,YAAY;oBAChB,YAAY,GAAG,kBAAkB,CAAC;oBAClC,MAAM;gBAEP,KAAK,YAAY;oBAChB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;wBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;oBACvF,YAAY,GAAG,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACrC,MAAM;gBAEP,KAAK,OAAO;oBACX,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;wBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;oBAClF,YAAY,GAAG,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC9C,MAAM;gBAEP,KAAK,cAAc;oBAClB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;wBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;oBACzF,YAAY,GAAG,MAAM,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC5C,MAAM;gBAEP,KAAK,MAAM;oBACV,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;wBACjF,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBACnD,YAAY,GAAG,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBACjD,MAAM;gBAEP,KAAK,MAAM;oBACV,IAAI,CAAC,IAAI;wBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;oBACjD,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACpC,MAAM;gBAEP,KAAK,KAAK;oBACT,IAAI,CAAC,IAAI;wBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;oBAChD,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACpC,MAAM;gBAEP,KAAK,QAAQ;oBACZ,YAAY,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC/C,MAAM;gBAEP;oBACC,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAE1D,MAAM,OAAO,GAAmC,EAAE,CAAC;YACnD,IAAI,CAAC;gBACJ,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAEnD,OAAO,EAAE,OAAO,EAAE,CAAC;QACpB,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -7,11 +7,14 @@ export { createSystemInfoTool } from "./system-info.js";
7
7
  export { createFileManagerTool } from "./file-manager.js";
8
8
  export { createWebSearchTool } from "./web-search.js";
9
9
  export { createWebFetchTool } from "./web-fetch.js";
10
+ export { createScreenshotTool } from "./screenshot.js";
11
+ export { createComputerTool } from "./computer.js";
12
+ export { createBrowserTool, closeBrowser } from "./browser.js";
10
13
  export declare function createDefaultTools(cwd: string): AgentTool[];
11
14
  export declare function createAllTools(cwd: string): AgentTool[];
12
15
  export declare const TOOL_NAMES: {
13
16
  DEFAULT: readonly ["bash", "read", "write", "edit"];
14
- EXTENDED: readonly ["system_info", "file_manager", "web_search", "web_fetch"];
15
- ALL: readonly ["bash", "read", "write", "edit", "system_info", "file_manager", "web_search", "web_fetch"];
17
+ EXTENDED: readonly ["system_info", "file_manager", "web_search", "web_fetch", "screenshot", "computer", "browser"];
18
+ ALL: readonly ["bash", "read", "write", "edit", "system_info", "file_manager", "web_search", "web_fetch", "screenshot", "computer", "browser"];
16
19
  };
17
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAUlD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAO3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAWvD;AAED,eAAO,MAAM,UAAU;;;;CAItB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAalD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE/D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAO3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAcvD;AAED,eAAO,MAAM,UAAU;;;;CAItB,CAAC"}
@@ -6,6 +6,9 @@ import { createSystemInfoTool } from "./system-info.js";
6
6
  import { createFileManagerTool } from "./file-manager.js";
7
7
  import { createWebSearchTool } from "./web-search.js";
8
8
  import { createWebFetchTool } from "./web-fetch.js";
9
+ import { createScreenshotTool } from "./screenshot.js";
10
+ import { createComputerTool } from "./computer.js";
11
+ import { createBrowserTool } from "./browser.js";
9
12
  export { createBashTool } from "./bash.js";
10
13
  export { createReadTool } from "./read.js";
11
14
  export { createWriteTool } from "./write.js";
@@ -14,6 +17,9 @@ export { createSystemInfoTool } from "./system-info.js";
14
17
  export { createFileManagerTool } from "./file-manager.js";
15
18
  export { createWebSearchTool } from "./web-search.js";
16
19
  export { createWebFetchTool } from "./web-fetch.js";
20
+ export { createScreenshotTool } from "./screenshot.js";
21
+ export { createComputerTool } from "./computer.js";
22
+ export { createBrowserTool, closeBrowser } from "./browser.js";
17
23
  export function createDefaultTools(cwd) {
18
24
  return [
19
25
  createBashTool(cwd),
@@ -32,11 +38,14 @@ export function createAllTools(cwd) {
32
38
  createFileManagerTool(cwd),
33
39
  createWebSearchTool(),
34
40
  createWebFetchTool(),
41
+ createScreenshotTool(),
42
+ createComputerTool(),
43
+ createBrowserTool(),
35
44
  ];
36
45
  }
37
46
  export const TOOL_NAMES = {
38
47
  DEFAULT: ["bash", "read", "write", "edit"],
39
- EXTENDED: ["system_info", "file_manager", "web_search", "web_fetch"],
40
- ALL: ["bash", "read", "write", "edit", "system_info", "file_manager", "web_search", "web_fetch"],
48
+ EXTENDED: ["system_info", "file_manager", "web_search", "web_fetch", "screenshot", "computer", "browser"],
49
+ ALL: ["bash", "read", "write", "edit", "system_info", "file_manager", "web_search", "web_fetch", "screenshot", "computer", "browser"],
41
50
  };
42
51
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC7C,OAAO;QACN,cAAc,CAAC,GAAG,CAAC;QACnB,cAAc,CAAC,GAAG,CAAC;QACnB,eAAe,CAAC,GAAG,CAAC;QACpB,cAAc,CAAC,GAAG,CAAC;KACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACzC,OAAO;QACN,cAAc,CAAC,GAAG,CAAC;QACnB,cAAc,CAAC,GAAG,CAAC;QACnB,eAAe,CAAC,GAAG,CAAC;QACpB,cAAc,CAAC,GAAG,CAAC;QACnB,oBAAoB,EAAE;QACtB,qBAAqB,CAAC,GAAG,CAAC;QAC1B,mBAAmB,EAAE;QACrB,kBAAkB,EAAE;KACpB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAU;IACnD,QAAQ,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,CAAU;IAC7E,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,CAAU;CACzG,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC7C,OAAO;QACN,cAAc,CAAC,GAAG,CAAC;QACnB,cAAc,CAAC,GAAG,CAAC;QACnB,eAAe,CAAC,GAAG,CAAC;QACpB,cAAc,CAAC,GAAG,CAAC;KACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACzC,OAAO;QACN,cAAc,CAAC,GAAG,CAAC;QACnB,cAAc,CAAC,GAAG,CAAC;QACnB,eAAe,CAAC,GAAG,CAAC;QACpB,cAAc,CAAC,GAAG,CAAC;QACnB,oBAAoB,EAAE;QACtB,qBAAqB,CAAC,GAAG,CAAC;QAC1B,mBAAmB,EAAE;QACrB,kBAAkB,EAAE;QACpB,oBAAoB,EAAE;QACtB,kBAAkB,EAAE;QACpB,iBAAiB,EAAE;KACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAU;IACnD,QAAQ,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,CAAU;IAClH,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,CAAU;CAC9I,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAInE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CA+DrD"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAYnE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAiFrD"}
@@ -1,18 +1,26 @@
1
1
  import { constants } from "node:fs";
2
- import { access, readFile } from "node:fs/promises";
2
+ import { access, readFile, stat } from "node:fs/promises";
3
+ import { extname } from "node:path";
3
4
  import { resolveToCwd } from "../utils/path.js";
4
5
  import { MAX_BYTES, MAX_LINES, truncateHead } from "../utils/truncate.js";
6
+ const IMAGE_EXTENSIONS = new Set([".png", ".jpg", ".jpeg", ".gif", ".webp", ".bmp", ".ico", ".svg"]);
7
+ const IMAGE_MIME = {
8
+ ".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg",
9
+ ".gif": "image/gif", ".webp": "image/webp", ".bmp": "image/bmp",
10
+ ".ico": "image/x-icon", ".svg": "image/svg+xml",
11
+ };
12
+ const MAX_IMAGE_BYTES = 5 * 1024 * 1024; // 5 MB
5
13
  export function createReadTool(cwd) {
6
14
  return {
7
15
  name: "read",
8
16
  label: "Read",
9
- description: `Read contents of a file. Output is truncated to ${MAX_LINES} lines or ${MAX_BYTES / 1024}KB. Use offset/limit for large files.`,
17
+ description: `Read contents of a file. Supports text files (truncated to ${MAX_LINES} lines or ${MAX_BYTES / 1024}KB, use offset/limit for large files) and image files (png/jpg/gif/webp, returned as base64 for visual analysis, max 5MB).`,
10
18
  parameters: {
11
19
  type: "object",
12
20
  properties: {
13
21
  path: { type: "string", description: "Path to the file to read (relative or absolute)" },
14
- offset: { type: "number", description: "Line number to start reading from (1-indexed)" },
15
- limit: { type: "number", description: "Maximum number of lines to read" },
22
+ offset: { type: "number", description: "Line number to start reading from (1-indexed, text files only)" },
23
+ limit: { type: "number", description: "Maximum number of lines to read (text files only)" },
16
24
  },
17
25
  required: ["path"],
18
26
  },
@@ -22,6 +30,23 @@ export function createReadTool(cwd) {
22
30
  if (signal?.aborted)
23
31
  throw new Error("Operation aborted");
24
32
  await access(absolutePath, constants.R_OK);
33
+ const ext = extname(absolutePath).toLowerCase();
34
+ if (IMAGE_EXTENSIONS.has(ext)) {
35
+ const info = await stat(absolutePath);
36
+ if (info.size > MAX_IMAGE_BYTES) {
37
+ return {
38
+ content: [{ type: "text", text: `Image too large (${(info.size / 1024 / 1024).toFixed(1)}MB). Max supported size is ${MAX_IMAGE_BYTES / 1024 / 1024}MB.` }],
39
+ };
40
+ }
41
+ const buf = await readFile(absolutePath);
42
+ const mimeType = IMAGE_MIME[ext] || "image/png";
43
+ return {
44
+ content: [
45
+ { type: "image", data: buf.toString("base64"), mimeType },
46
+ { type: "text", text: `Image file: ${path} (${ext}, ${info.size} bytes)` },
47
+ ],
48
+ };
49
+ }
25
50
  const buffer = await readFile(absolutePath);
26
51
  const textContent = buffer.toString("utf-8");
27
52
  const allLines = textContent.split("\n");
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AgentTool } from "../core/types.js";
2
+ export declare function createScreenshotTool(): AgentTool;
3
+ //# sourceMappingURL=screenshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AA4CnE,wBAAgB,oBAAoB,IAAI,SAAS,CAkEhD"}
@@ -0,0 +1,113 @@
1
+ import { execFile } from "node:child_process";
2
+ import { readFile, unlink } from "node:fs/promises";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { randomUUID } from "node:crypto";
6
+ import { platform } from "node:process";
7
+ const MAX_IMAGE_BYTES = 5 * 1024 * 1024; // 5 MB
8
+ function exec(cmd, args) {
9
+ return new Promise((resolve, reject) => {
10
+ execFile(cmd, args, { timeout: 15_000 }, (err, stdout, stderr) => {
11
+ if (err)
12
+ reject(err);
13
+ else
14
+ resolve({ stdout, stderr });
15
+ });
16
+ });
17
+ }
18
+ async function captureScreen(outputPath, displayNum) {
19
+ if (platform === "darwin") {
20
+ const args = ["-x", outputPath];
21
+ if (displayNum !== undefined)
22
+ args.unshift(`-D${displayNum}`);
23
+ await exec("screencapture", args);
24
+ }
25
+ else {
26
+ // Linux: try gnome-screenshot, then scrot, then import (ImageMagick)
27
+ try {
28
+ await exec("gnome-screenshot", ["-f", outputPath]);
29
+ }
30
+ catch {
31
+ try {
32
+ await exec("scrot", [outputPath]);
33
+ }
34
+ catch {
35
+ await exec("import", ["-window", "root", outputPath]);
36
+ }
37
+ }
38
+ }
39
+ }
40
+ async function captureWindow(outputPath) {
41
+ if (platform === "darwin") {
42
+ await exec("screencapture", ["-x", "-w", outputPath]);
43
+ }
44
+ else {
45
+ try {
46
+ await exec("gnome-screenshot", ["-w", "-f", outputPath]);
47
+ }
48
+ catch {
49
+ await exec("import", [outputPath]);
50
+ }
51
+ }
52
+ }
53
+ export function createScreenshotTool() {
54
+ return {
55
+ name: "screenshot",
56
+ label: "Screenshot",
57
+ description: "Take a screenshot of the screen or a specific window. Returns the image for visual analysis.",
58
+ parameters: {
59
+ type: "object",
60
+ properties: {
61
+ type: {
62
+ type: "string",
63
+ description: 'What to capture: "screen" (full screen, default) or "window" (focused window)',
64
+ enum: ["screen", "window"],
65
+ },
66
+ display: {
67
+ type: "number",
68
+ description: "Display number for multi-monitor setups (macOS only, 1-indexed)",
69
+ },
70
+ delay: {
71
+ type: "number",
72
+ description: "Delay in seconds before capturing",
73
+ },
74
+ },
75
+ },
76
+ execute: async (_toolCallId, params, signal) => {
77
+ const { type: captureType = "screen", display, delay } = params;
78
+ if (signal?.aborted)
79
+ throw new Error("Operation aborted");
80
+ if (delay && delay > 0) {
81
+ await new Promise((r) => setTimeout(r, delay * 1000));
82
+ }
83
+ if (signal?.aborted)
84
+ throw new Error("Operation aborted");
85
+ const tmpPath = join(tmpdir(), `til-screenshot-${randomUUID()}.png`);
86
+ try {
87
+ if (captureType === "window") {
88
+ await captureWindow(tmpPath);
89
+ }
90
+ else {
91
+ await captureScreen(tmpPath, display);
92
+ }
93
+ const buf = await readFile(tmpPath);
94
+ if (buf.length > MAX_IMAGE_BYTES) {
95
+ return {
96
+ content: [{ type: "text", text: `Screenshot too large (${(buf.length / 1024 / 1024).toFixed(1)}MB). Max is ${MAX_IMAGE_BYTES / 1024 / 1024}MB.` }],
97
+ };
98
+ }
99
+ const base64 = buf.toString("base64");
100
+ return {
101
+ content: [
102
+ { type: "image", data: base64, mimeType: "image/png" },
103
+ { type: "text", text: `Screenshot captured (${captureType}, ${buf.length} bytes)` },
104
+ ],
105
+ };
106
+ }
107
+ finally {
108
+ unlink(tmpPath).catch(() => { });
109
+ }
110
+ },
111
+ };
112
+ }
113
+ //# sourceMappingURL=screenshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/tools/screenshot.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antaif3ng/til-work",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "TIL Agent — 运行在终端里的个人 AI 助手 (Personal AI assistant CLI powered by LLM)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -10,6 +10,7 @@
10
10
  "types": "./dist/index.d.ts",
11
11
  "files": [
12
12
  "dist",
13
+ "skills",
13
14
  "README.md",
14
15
  "LICENSE"
15
16
  ],
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: find-skills
3
+ description: "Helps users discover and install agent skills. Use when the user asks 'how do I do X', 'find a skill for X', 'is there a skill that can...', or wants to extend capabilities."
4
+ ---
5
+
6
+ # Find Skills
7
+
8
+ This skill helps you discover and install skills from the open agent skills ecosystem.
9
+
10
+ ## When to Use This Skill
11
+
12
+ Use this skill when the user:
13
+ - Asks "how do I do X" where X might be a common task with an existing skill
14
+ - Says "find a skill for X" or "is there a skill for X"
15
+ - Asks "can you do X" where X is a specialized capability
16
+ - Expresses interest in extending agent capabilities
17
+ - Wants to search for tools, templates, or workflows
18
+ - Mentions they wish they had help with a specific domain (design, testing, deployment, etc.)
19
+
20
+ ## What is the Skills CLI?
21
+
22
+ The Skills CLI (`npx skills`) is the package manager for the open agent skills ecosystem.
23
+
24
+ **Key commands:**
25
+ - `npx skills find [query]` - Search for skills interactively or by keyword
26
+ - `npx skills add <package>` - Install a skill from GitHub or other sources
27
+ - `npx skills check` - Check for skill updates
28
+ - `npx skills update` - Update all installed skills
29
+
30
+ **Browse skills at:** https://skills.sh/ or https://clawhub.ai/
31
+
32
+ ## How to Help Users Find Skills
33
+
34
+ ### Step 1: Understand What They Need
35
+ Identify: domain, specific task, whether a skill likely exists.
36
+
37
+ ### Step 2: Search for Skills
38
+ ```bash
39
+ npx skills find [query]
40
+ ```
41
+
42
+ ### Step 3: Present Options to the User
43
+ Present: skill name, install command, link to learn more.
44
+
45
+ ### Step 4: Offer to Install
46
+ ```bash
47
+ npx skills add <owner/repo@skill> -g -y
48
+ ```
49
+
50
+ ## Common Skill Categories
51
+
52
+ | Category | Example Queries |
53
+ |---|---|
54
+ | Web Development | react, nextjs, typescript, css, tailwind |
55
+ | Testing | testing, jest, playwright, e2e |
56
+ | DevOps | deploy, docker, kubernetes, ci-cd |
57
+ | Documentation | docs, readme, changelog, api-docs |
58
+ | Code Quality | review, lint, refactor, best-practices |
59
+ | Design | ui, ux, design-system, accessibility |
60
+ | Productivity | workflow, automation, git |
61
+
62
+ ## When No Skills Are Found
63
+
64
+ 1. Acknowledge no skill was found
65
+ 2. Offer to help directly with your existing capabilities
66
+ 3. Suggest creating a custom skill for the task