@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.
- package/README.md +256 -298
- package/dist/core/config.d.ts +29 -11
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +65 -101
- package/dist/core/config.js.map +1 -1
- package/dist/core/llm.d.ts.map +1 -1
- package/dist/core/llm.js +14 -0
- package/dist/core/llm.js.map +1 -1
- package/dist/core/session.d.ts +3 -2
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +4 -3
- package/dist/core/session.js.map +1 -1
- package/dist/core/skills.d.ts +2 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +9 -0
- package/dist/core/skills.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +4 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +66 -124
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive.d.ts.map +1 -1
- package/dist/modes/interactive.js +272 -180
- package/dist/modes/interactive.js.map +1 -1
- package/dist/tools/browser.d.ts +10 -0
- package/dist/tools/browser.d.ts.map +1 -0
- package/dist/tools/browser.js +231 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/computer.d.ts +3 -0
- package/dist/tools/computer.d.ts.map +1 -0
- package/dist/tools/computer.js +251 -0
- package/dist/tools/computer.js.map +1 -0
- package/dist/tools/index.d.ts +5 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +11 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +29 -4
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/screenshot.d.ts +3 -0
- package/dist/tools/screenshot.d.ts.map +1 -0
- package/dist/tools/screenshot.js +113 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/package.json +2 -1
- package/skills/find-skills/SKILL.md +66 -0
- package/skills/playwright-mcp/SKILL.md +90 -0
- package/skills/self-improving-agent/SKILL.md +88 -0
- package/skills/skill-creator/SKILL.md +93 -0
- 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":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -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
|
package/dist/tools/index.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/tools/read.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/tools/read.js
CHANGED
|
@@ -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.
|
|
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");
|
package/dist/tools/read.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -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.
|
|
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
|