visionclaw 0.1.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 (158) hide show
  1. package/README.md +116 -0
  2. package/dist/agent/context.d.ts +56 -0
  3. package/dist/agent/context.d.ts.map +1 -0
  4. package/dist/agent/context.js +142 -0
  5. package/dist/agent/context.js.map +1 -0
  6. package/dist/agent/loop.d.ts +18 -0
  7. package/dist/agent/loop.d.ts.map +1 -0
  8. package/dist/agent/loop.js +323 -0
  9. package/dist/agent/loop.js.map +1 -0
  10. package/dist/agent/session.d.ts +49 -0
  11. package/dist/agent/session.d.ts.map +1 -0
  12. package/dist/agent/session.js +200 -0
  13. package/dist/agent/session.js.map +1 -0
  14. package/dist/agent/system-prompt.d.ts +10 -0
  15. package/dist/agent/system-prompt.d.ts.map +1 -0
  16. package/dist/agent/system-prompt.js +167 -0
  17. package/dist/agent/system-prompt.js.map +1 -0
  18. package/dist/calendar/google-calendar.d.ts +46 -0
  19. package/dist/calendar/google-calendar.d.ts.map +1 -0
  20. package/dist/calendar/google-calendar.js +132 -0
  21. package/dist/calendar/google-calendar.js.map +1 -0
  22. package/dist/calendar/scheduler.d.ts +7 -0
  23. package/dist/calendar/scheduler.d.ts.map +1 -0
  24. package/dist/calendar/scheduler.js +33 -0
  25. package/dist/calendar/scheduler.js.map +1 -0
  26. package/dist/channels/discord.d.ts +19 -0
  27. package/dist/channels/discord.d.ts.map +1 -0
  28. package/dist/channels/discord.js +169 -0
  29. package/dist/channels/discord.js.map +1 -0
  30. package/dist/channels/gmail.d.ts +31 -0
  31. package/dist/channels/gmail.d.ts.map +1 -0
  32. package/dist/channels/gmail.js +300 -0
  33. package/dist/channels/gmail.js.map +1 -0
  34. package/dist/channels/interface.d.ts +45 -0
  35. package/dist/channels/interface.d.ts.map +1 -0
  36. package/dist/channels/interface.js +2 -0
  37. package/dist/channels/interface.js.map +1 -0
  38. package/dist/channels/manager.d.ts +36 -0
  39. package/dist/channels/manager.d.ts.map +1 -0
  40. package/dist/channels/manager.js +108 -0
  41. package/dist/channels/manager.js.map +1 -0
  42. package/dist/channels/queue.d.ts +17 -0
  43. package/dist/channels/queue.d.ts.map +1 -0
  44. package/dist/channels/queue.js +85 -0
  45. package/dist/channels/queue.js.map +1 -0
  46. package/dist/channels/slack.d.ts +17 -0
  47. package/dist/channels/slack.d.ts.map +1 -0
  48. package/dist/channels/slack.js +142 -0
  49. package/dist/channels/slack.js.map +1 -0
  50. package/dist/channels/sms.d.ts +19 -0
  51. package/dist/channels/sms.d.ts.map +1 -0
  52. package/dist/channels/sms.js +111 -0
  53. package/dist/channels/sms.js.map +1 -0
  54. package/dist/channels/telegram.d.ts +28 -0
  55. package/dist/channels/telegram.d.ts.map +1 -0
  56. package/dist/channels/telegram.js +246 -0
  57. package/dist/channels/telegram.js.map +1 -0
  58. package/dist/channels/whatsapp.d.ts +28 -0
  59. package/dist/channels/whatsapp.d.ts.map +1 -0
  60. package/dist/channels/whatsapp.js +292 -0
  61. package/dist/channels/whatsapp.js.map +1 -0
  62. package/dist/config/index.d.ts +24 -0
  63. package/dist/config/index.d.ts.map +1 -0
  64. package/dist/config/index.js +104 -0
  65. package/dist/config/index.js.map +1 -0
  66. package/dist/config/types.d.ts +227 -0
  67. package/dist/config/types.d.ts.map +1 -0
  68. package/dist/config/types.js +45 -0
  69. package/dist/config/types.js.map +1 -0
  70. package/dist/files.d.ts +20 -0
  71. package/dist/files.d.ts.map +1 -0
  72. package/dist/files.js +82 -0
  73. package/dist/files.js.map +1 -0
  74. package/dist/index.d.ts +3 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +54 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/logger.d.ts +76 -0
  79. package/dist/logger.d.ts.map +1 -0
  80. package/dist/logger.js +384 -0
  81. package/dist/logger.js.map +1 -0
  82. package/dist/memory/store.d.ts +24 -0
  83. package/dist/memory/store.d.ts.map +1 -0
  84. package/dist/memory/store.js +71 -0
  85. package/dist/memory/store.js.map +1 -0
  86. package/dist/obs/server.d.ts +10 -0
  87. package/dist/obs/server.d.ts.map +1 -0
  88. package/dist/obs/server.js +406 -0
  89. package/dist/obs/server.js.map +1 -0
  90. package/dist/onboarding/google-auth.d.ts +11 -0
  91. package/dist/onboarding/google-auth.d.ts.map +1 -0
  92. package/dist/onboarding/google-auth.js +113 -0
  93. package/dist/onboarding/google-auth.js.map +1 -0
  94. package/dist/onboarding/index.d.ts +2 -0
  95. package/dist/onboarding/index.d.ts.map +1 -0
  96. package/dist/onboarding/index.js +213 -0
  97. package/dist/onboarding/index.js.map +1 -0
  98. package/dist/onboarding/macos-permissions.d.ts +37 -0
  99. package/dist/onboarding/macos-permissions.d.ts.map +1 -0
  100. package/dist/onboarding/macos-permissions.js +207 -0
  101. package/dist/onboarding/macos-permissions.js.map +1 -0
  102. package/dist/skills/install.d.ts +7 -0
  103. package/dist/skills/install.d.ts.map +1 -0
  104. package/dist/skills/install.js +63 -0
  105. package/dist/skills/install.js.map +1 -0
  106. package/dist/tools/browser.d.ts +7 -0
  107. package/dist/tools/browser.d.ts.map +1 -0
  108. package/dist/tools/browser.js +202 -0
  109. package/dist/tools/browser.js.map +1 -0
  110. package/dist/tools/calendar.d.ts +12 -0
  111. package/dist/tools/calendar.d.ts.map +1 -0
  112. package/dist/tools/calendar.js +210 -0
  113. package/dist/tools/calendar.js.map +1 -0
  114. package/dist/tools/computer-use.d.ts +28 -0
  115. package/dist/tools/computer-use.d.ts.map +1 -0
  116. package/dist/tools/computer-use.js +311 -0
  117. package/dist/tools/computer-use.js.map +1 -0
  118. package/dist/tools/coordinate-resolver.d.ts +26 -0
  119. package/dist/tools/coordinate-resolver.d.ts.map +1 -0
  120. package/dist/tools/coordinate-resolver.js +157 -0
  121. package/dist/tools/coordinate-resolver.js.map +1 -0
  122. package/dist/tools/desktop-executor.d.ts +52 -0
  123. package/dist/tools/desktop-executor.d.ts.map +1 -0
  124. package/dist/tools/desktop-executor.js +202 -0
  125. package/dist/tools/desktop-executor.js.map +1 -0
  126. package/dist/tools/finish.d.ts +5 -0
  127. package/dist/tools/finish.d.ts.map +1 -0
  128. package/dist/tools/finish.js +18 -0
  129. package/dist/tools/finish.js.map +1 -0
  130. package/dist/tools/index.d.ts +7 -0
  131. package/dist/tools/index.d.ts.map +1 -0
  132. package/dist/tools/index.js +37 -0
  133. package/dist/tools/index.js.map +1 -0
  134. package/dist/tools/memory.d.ts +14 -0
  135. package/dist/tools/memory.d.ts.map +1 -0
  136. package/dist/tools/memory.js +269 -0
  137. package/dist/tools/memory.js.map +1 -0
  138. package/dist/tools/notify.d.ts +12 -0
  139. package/dist/tools/notify.d.ts.map +1 -0
  140. package/dist/tools/notify.js +108 -0
  141. package/dist/tools/notify.js.map +1 -0
  142. package/dist/tools/screenshot.d.ts +7 -0
  143. package/dist/tools/screenshot.d.ts.map +1 -0
  144. package/dist/tools/screenshot.js +189 -0
  145. package/dist/tools/screenshot.js.map +1 -0
  146. package/dist/tools/skill.d.ts +8 -0
  147. package/dist/tools/skill.d.ts.map +1 -0
  148. package/dist/tools/skill.js +133 -0
  149. package/dist/tools/skill.js.map +1 -0
  150. package/dist/tools/upgrade.d.ts +5 -0
  151. package/dist/tools/upgrade.d.ts.map +1 -0
  152. package/dist/tools/upgrade.js +89 -0
  153. package/dist/tools/upgrade.js.map +1 -0
  154. package/dist/tools/wait.d.ts +5 -0
  155. package/dist/tools/wait.d.ts.map +1 -0
  156. package/dist/tools/wait.js +21 -0
  157. package/dist/tools/wait.js.map +1 -0
  158. package/package.json +61 -0
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Low-level macOS desktop executor using cliclick, osascript, and screencapture.
3
+ * Used by computer_use MCP tools to perform mouse, keyboard, and screenshot actions.
4
+ */
5
+ import { exec } from "node:child_process";
6
+ import { promisify } from "node:util";
7
+ import { takeScreenshot } from "./screenshot.js";
8
+ import { logger } from "../logger.js";
9
+ const execAsync = promisify(exec);
10
+ /** Capture the screen. Returns base64 PNG. Re-exports takeScreenshot for consistency. */
11
+ export const captureScreen = takeScreenshot;
12
+ /** Cached display size, set once at agent startup. */
13
+ let cachedDisplaySize = null;
14
+ /**
15
+ * Initialize display size cache. Call once at agent startup.
16
+ */
17
+ export async function initDisplaySize() {
18
+ cachedDisplaySize = await fetchDisplaySize();
19
+ }
20
+ /** Return cached display size. Use after initDisplaySize() has been called. */
21
+ export function getDisplaySize() {
22
+ return cachedDisplaySize ?? { width: 1920, height: 1080 };
23
+ }
24
+ /**
25
+ * Fetch display dimensions via system_profiler SPDisplaysDataType (JSON).
26
+ * Structure: SPDisplaysDataType[] -> spdisplays_ndrvs[] -> _spdisplays_resolution or _spdisplays_pixels
27
+ */
28
+ async function fetchDisplaySize() {
29
+ const fallback = { width: 1920, height: 1080 };
30
+ try {
31
+ const { stdout } = await execAsync("system_profiler SPDisplaysDataType -json 2>/dev/null");
32
+ const json = JSON.parse(stdout);
33
+ const gpus = json.SPDisplaysDataType;
34
+ if (!Array.isArray(gpus)) {
35
+ logger.debug(`getDisplaySize: SPDisplaysDataType missing or not array (keys: ${Object.keys(json).join(", ")})`, {
36
+ keys: Object.keys(json),
37
+ });
38
+ return fallback;
39
+ }
40
+ const candidates = [];
41
+ for (const gpu of gpus) {
42
+ const ndrvs = gpu.spdisplays_ndrvs;
43
+ if (!Array.isArray(ndrvs))
44
+ continue;
45
+ for (const ndrv of ndrvs) {
46
+ const res = ndrv._spdisplays_resolution ?? ndrv._spdisplays_pixels;
47
+ if (!res)
48
+ continue;
49
+ const re = /(\d+)\s*x\s*(\d+)/i;
50
+ const m = re.exec(res);
51
+ if (m?.[1] && m[2]) {
52
+ candidates.push({
53
+ width: parseInt(m[1], 10),
54
+ height: parseInt(m[2], 10),
55
+ isMain: ndrv.spdisplays_main === "spdisplays_yes",
56
+ });
57
+ }
58
+ }
59
+ }
60
+ if (candidates.length === 0) {
61
+ logger.debug(`getDisplaySize: no resolution found in system_profiler (${gpus.length} GPUs, keys: ${gpus[0] ? Object.keys(gpus[0]).join(", ") : "none"})`, {
62
+ gpuCount: gpus.length,
63
+ sampleKeys: gpus[0] ? Object.keys(gpus[0]) : [],
64
+ });
65
+ return fallback;
66
+ }
67
+ const chosen = candidates.find((c) => c.isMain) ?? candidates[0];
68
+ logger.debug(`getDisplaySize: ${chosen.width}x${chosen.height} (main=${String(chosen.isMain)}, ${candidates.length} displays)`, {
69
+ rawCount: candidates.length,
70
+ mainCount: candidates.filter((c) => c.isMain).length,
71
+ width: chosen.width,
72
+ height: chosen.height,
73
+ isMain: chosen.isMain,
74
+ });
75
+ return { width: chosen.width, height: chosen.height };
76
+ }
77
+ catch (e) {
78
+ logger.debug(`getDisplaySize: failed - ${e instanceof Error ? e.message : String(e)}`, {
79
+ error: e instanceof Error ? e.message : String(e),
80
+ });
81
+ return fallback;
82
+ }
83
+ }
84
+ /**
85
+ * Run cliclick. Throws if cliclick is not installed.
86
+ */
87
+ async function cliclick(args) {
88
+ await execAsync(`cliclick ${args}`);
89
+ }
90
+ /**
91
+ * Left click at (x, y).
92
+ */
93
+ export async function click(x, y) {
94
+ await cliclick(`c:${Math.round(x)},${Math.round(y)}`);
95
+ }
96
+ /**
97
+ * Double click at (x, y).
98
+ */
99
+ export async function doubleClick(x, y) {
100
+ await cliclick(`dc:${Math.round(x)},${Math.round(y)}`);
101
+ }
102
+ /**
103
+ * Right click at (x, y).
104
+ */
105
+ export async function rightClick(x, y) {
106
+ await cliclick(`rc:${Math.round(x)},${Math.round(y)}`);
107
+ }
108
+ /**
109
+ * Move cursor to (x, y).
110
+ */
111
+ export async function moveTo(x, y) {
112
+ await cliclick(`m:${Math.round(x)},${Math.round(y)}`);
113
+ }
114
+ /**
115
+ * Drag from (x1, y1) to (x2, y2).
116
+ */
117
+ export async function drag(x1, y1, x2, y2) {
118
+ await cliclick(`dd:${Math.round(x1)},${Math.round(y1)} du:${Math.round(x2)},${Math.round(y2)}`);
119
+ }
120
+ /**
121
+ * Type text (use cliclick t: for plain text, or osascript for special chars).
122
+ */
123
+ export async function typeText(text) {
124
+ // cliclick t: handles plain ASCII; escape for safety
125
+ const escaped = text.replace(/\\/g, "\\\\").replace(/:/g, "\\:");
126
+ await cliclick(`t:${escaped}`);
127
+ }
128
+ /** cliclick key names for kp: command */
129
+ const CLICLICK_KEYS = {
130
+ enter: "return",
131
+ return: "return",
132
+ tab: "tab",
133
+ escape: "esc",
134
+ esc: "esc",
135
+ space: "space",
136
+ backspace: "delete",
137
+ delete: "fwd-delete",
138
+ up: "arrow-up",
139
+ down: "arrow-down",
140
+ left: "arrow-left",
141
+ right: "arrow-right",
142
+ };
143
+ /** cliclick modifier names for kd:/ku: */
144
+ const CLICLICK_MODS = {
145
+ cmd: "cmd",
146
+ meta: "cmd",
147
+ ctrl: "ctrl",
148
+ alt: "alt",
149
+ option: "alt",
150
+ shift: "shift",
151
+ };
152
+ /**
153
+ * Press a key or key combination (e.g. "enter", "escape", "cmd+s", "ctrl+shift+t").
154
+ * Uses cliclick: kd:mods for modifiers, kp: for special keys, t: for character keys.
155
+ */
156
+ export async function pressKey(key) {
157
+ const parts = key.toLowerCase().split("+");
158
+ const lastPart = parts[parts.length - 1] ?? key;
159
+ const keyName = lastPart;
160
+ const modifiers = [];
161
+ for (let i = 0; i < parts.length - 1; i++) {
162
+ const mod = CLICLICK_MODS[parts[i] ?? ""];
163
+ if (mod)
164
+ modifiers.push(mod);
165
+ }
166
+ const cliclickMod = modifiers.join(",");
167
+ const specialKey = CLICLICK_KEYS[keyName];
168
+ if (modifiers.length === 0 && specialKey) {
169
+ await cliclick(`kp:${specialKey}`);
170
+ return;
171
+ }
172
+ if (modifiers.length > 0) {
173
+ await cliclick(`kd:${cliclickMod}`);
174
+ }
175
+ if (specialKey) {
176
+ await cliclick(`kp:${specialKey}`);
177
+ }
178
+ else if (keyName.length === 1) {
179
+ await cliclick(`t:${keyName}`);
180
+ }
181
+ else {
182
+ await cliclick(`kp:${keyName}`);
183
+ }
184
+ if (modifiers.length > 0) {
185
+ await cliclick(`ku:${cliclickMod}`);
186
+ }
187
+ }
188
+ /**
189
+ * Scroll at (x, y) in direction. Amount is number of scroll steps (default 3).
190
+ * cliclick does not support scroll; we use osascript with key code 116/121 (page up/down)
191
+ * after moving the mouse to the target. This works in many apps (browsers, text editors).
192
+ */
193
+ export async function scroll(x, y, direction, amount = 3) {
194
+ await cliclick(`m:${Math.round(x)},${Math.round(y)}`);
195
+ await execAsync("sleep 0.1");
196
+ const code = direction === "up" ? 116 : direction === "down" ? 121 : direction === "left" ? 115 : 119;
197
+ for (let i = 0; i < amount; i++) {
198
+ await execAsync(`osascript -e 'tell application "System Events" to key code ${code}'`);
199
+ await execAsync("sleep 0.05");
200
+ }
201
+ }
202
+ //# sourceMappingURL=desktop-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-executor.js","sourceRoot":"","sources":["../../src/tools/desktop-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { z } from "zod";
2
+ export declare const finishTool: import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
3
+ reason: z.ZodOptional<z.ZodString>;
4
+ }>;
5
+ //# sourceMappingURL=finish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finish.d.ts","sourceRoot":"","sources":["../../src/tools/finish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,UAAU;;EAmBtB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ import { tool } from "@anthropic-ai/claude-agent-sdk";
3
+ export const finishTool = tool("finish", "Signal that the current task is complete and the agent should go back to sleep. Call this when there is nothing more to do in the current wake cycle. IMPORTANT: After calling this tool, you MUST immediately end your turn with no further tool calls or text. Do not call any more tools after finish.", {
4
+ reason: z
5
+ .string()
6
+ .optional()
7
+ .describe("Optional reason for finishing (e.g. 'task completed', 'nothing to do')"),
8
+ }, (args) => {
9
+ return Promise.resolve({
10
+ content: [
11
+ {
12
+ type: "text",
13
+ text: `Finished: ${args.reason ?? "No further action needed."}\n\nIMPORTANT: You have called finish. Do NOT call any more tools. End your turn immediately with no further output.`,
14
+ },
15
+ ],
16
+ });
17
+ });
18
+ //# sourceMappingURL=finish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finish.js","sourceRoot":"","sources":["../../src/tools/finish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAGtD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAC5B,QAAQ,EACR,2SAA2S,EAC3S;IACE,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,wEAAwE,CAAC;CACtF,EACD,CAAC,IAAI,EAA2B,EAAE;IAChC,OAAO,OAAO,CAAC,OAAO,CAAC;QACrB,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa,IAAI,CAAC,MAAM,IAAI,2BAA2B,sHAAsH;aACpL;SACF;KACF,CAAC,CAAC;AACL,CAAC,CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";
2
+ /**
3
+ * Create the in-process MCP server that provides all
4
+ * VisionClaw system tools to the Claude Agent SDK session.
5
+ */
6
+ export declare function createToolServer(): ReturnType<typeof createSdkMcpServer>;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAkBpE;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAqBxE"}
@@ -0,0 +1,37 @@
1
+ import { createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";
2
+ import { waitTool } from "./wait.js";
3
+ import { notifyUserTool } from "./notify.js";
4
+ import { finishTool } from "./finish.js";
5
+ import { screenshotTool } from "./screenshot.js";
6
+ import { manageSkillsTool } from "./skill.js";
7
+ import { upgradeTool } from "./upgrade.js";
8
+ import { manageCalendarTool } from "./calendar.js";
9
+ import { memoryTool } from "./memory.js";
10
+ import { computerUseClickTool, computerUseScrollTool, computerUseDragTool, computerUseTypeTool, computerUseKeyTool, computerUseScreenshotTool, } from "./computer-use.js";
11
+ /**
12
+ * Create the in-process MCP server that provides all
13
+ * VisionClaw system tools to the Claude Agent SDK session.
14
+ */
15
+ export function createToolServer() {
16
+ return createSdkMcpServer({
17
+ name: "visionclaw",
18
+ version: "0.1.0",
19
+ tools: [
20
+ waitTool,
21
+ notifyUserTool,
22
+ finishTool,
23
+ screenshotTool,
24
+ manageSkillsTool,
25
+ upgradeTool,
26
+ manageCalendarTool,
27
+ memoryTool,
28
+ computerUseClickTool,
29
+ computerUseScrollTool,
30
+ computerUseDragTool,
31
+ computerUseTypeTool,
32
+ computerUseKeyTool,
33
+ computerUseScreenshotTool,
34
+ ],
35
+ });
36
+ }
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,kBAAkB,CAAC;QACxB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE;YACL,QAAQ;YACR,cAAc;YACd,UAAU;YACV,cAAc;YACd,gBAAgB;YAChB,WAAW;YACX,kBAAkB;YAClB,UAAU;YACV,oBAAoB;YACpB,qBAAqB;YACrB,mBAAmB;YACnB,mBAAmB;YACnB,kBAAkB;YAClB,yBAAyB;SAC1B;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from "zod";
2
+ export declare const memoryTool: import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
3
+ command: z.ZodEnum<["view", "create", "str_replace", "insert", "delete", "rename"]>;
4
+ path: z.ZodOptional<z.ZodString>;
5
+ file_text: z.ZodOptional<z.ZodString>;
6
+ old_str: z.ZodOptional<z.ZodString>;
7
+ new_str: z.ZodOptional<z.ZodString>;
8
+ insert_line: z.ZodOptional<z.ZodNumber>;
9
+ insert_text: z.ZodOptional<z.ZodString>;
10
+ view_range: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
11
+ old_path: z.ZodOptional<z.ZodString>;
12
+ new_path: z.ZodOptional<z.ZodString>;
13
+ }>;
14
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgQxB,eAAO,MAAM,UAAU;;;;;;;;;;;EAgGtB,CAAC"}
@@ -0,0 +1,269 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { z } from "zod";
4
+ import { tool } from "@anthropic-ai/claude-agent-sdk";
5
+ import { getMemoriesDir } from "../config/index.js";
6
+ /**
7
+ * Validate that a path stays within the memories directory.
8
+ * Maps `/memories/...` paths to the actual filesystem path.
9
+ */
10
+ function resolveSafePath(memoryPath) {
11
+ const memoriesDir = getMemoriesDir();
12
+ if (!memoryPath.startsWith("/memories")) {
13
+ throw new Error(`Path must start with /memories, got: ${memoryPath}`);
14
+ }
15
+ const relative = memoryPath.slice("/memories".length).replace(/^\//, "");
16
+ const fullPath = relative ? path.join(memoriesDir, relative) : memoriesDir;
17
+ const resolved = path.resolve(fullPath);
18
+ const resolvedRoot = path.resolve(memoriesDir);
19
+ if (!resolved.startsWith(resolvedRoot)) {
20
+ throw new Error(`Path ${memoryPath} would escape /memories directory`);
21
+ }
22
+ return resolved;
23
+ }
24
+ function formatSize(bytes) {
25
+ if (bytes < 1024)
26
+ return `${bytes}`;
27
+ if (bytes < 1024 * 1024)
28
+ return `${(bytes / 1024).toFixed(1)}K`;
29
+ return `${(bytes / (1024 * 1024)).toFixed(1)}M`;
30
+ }
31
+ function ok(text) {
32
+ return { content: [{ type: "text", text }] };
33
+ }
34
+ function err(text) {
35
+ return { content: [{ type: "text", text }], isError: true };
36
+ }
37
+ // --- Command handlers ---
38
+ function handleView(memoryPath, viewRange) {
39
+ const fullPath = resolveSafePath(memoryPath);
40
+ if (!fs.existsSync(fullPath)) {
41
+ return err(`The path ${memoryPath} does not exist. Please provide a valid path.`);
42
+ }
43
+ const stat = fs.statSync(fullPath);
44
+ if (stat.isDirectory()) {
45
+ const lines = [];
46
+ lines.push(`Here're the files and directories up to 2 levels deep in ${memoryPath}, excluding hidden items and node_modules:`);
47
+ lines.push(`${formatSize(stat.size)}\t${memoryPath}`);
48
+ const entries = fs.readdirSync(fullPath, { withFileTypes: true });
49
+ for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
50
+ if (entry.name.startsWith(".") || entry.name === "node_modules")
51
+ continue;
52
+ const entryPath = path.join(fullPath, entry.name);
53
+ const entryStat = fs.statSync(entryPath);
54
+ const entryMemPath = `${memoryPath}/${entry.name}`;
55
+ lines.push(`${formatSize(entryStat.size)}\t${entryMemPath}`);
56
+ // Second level
57
+ if (entry.isDirectory()) {
58
+ const subEntries = fs.readdirSync(entryPath, { withFileTypes: true });
59
+ for (const sub of subEntries.sort((a, b) => a.name.localeCompare(b.name))) {
60
+ if (sub.name.startsWith(".") || sub.name === "node_modules")
61
+ continue;
62
+ const subPath = path.join(entryPath, sub.name);
63
+ const subStat = fs.statSync(subPath);
64
+ lines.push(`${formatSize(subStat.size)}\t${entryMemPath}/${sub.name}`);
65
+ }
66
+ }
67
+ }
68
+ return ok(lines.join("\n"));
69
+ }
70
+ // File: return content with line numbers
71
+ const content = fs.readFileSync(fullPath, "utf-8");
72
+ const allLines = content.split("\n");
73
+ if (allLines.length > 999_999) {
74
+ return err(`File ${memoryPath} exceeds maximum line limit of 999,999 lines.`);
75
+ }
76
+ let displayLines = allLines;
77
+ let startNum = 1;
78
+ if (viewRange) {
79
+ const startLine = Math.max(1, viewRange[0]) - 1;
80
+ const endLine = viewRange[1] === -1 ? allLines.length : viewRange[1];
81
+ displayLines = allLines.slice(startLine, endLine);
82
+ startNum = startLine + 1;
83
+ }
84
+ const numbered = displayLines.map((line, i) => `${String(i + startNum).padStart(6, " ")}\t${line}`);
85
+ return ok(`Here's the content of ${memoryPath} with line numbers:\n${numbered.join("\n")}`);
86
+ }
87
+ function handleCreate(memoryPath, fileText) {
88
+ const fullPath = resolveSafePath(memoryPath);
89
+ if (fs.existsSync(fullPath)) {
90
+ return err(`Error: File ${memoryPath} already exists`);
91
+ }
92
+ const dir = path.dirname(fullPath);
93
+ if (!fs.existsSync(dir)) {
94
+ fs.mkdirSync(dir, { recursive: true });
95
+ }
96
+ fs.writeFileSync(fullPath, fileText, "utf-8");
97
+ return ok(`File created successfully at: ${memoryPath}`);
98
+ }
99
+ function handleStrReplace(memoryPath, oldStr, newStr) {
100
+ const fullPath = resolveSafePath(memoryPath);
101
+ if (!fs.existsSync(fullPath)) {
102
+ return err(`Error: The path ${memoryPath} does not exist. Please provide a valid path.`);
103
+ }
104
+ const stat = fs.statSync(fullPath);
105
+ if (!stat.isFile()) {
106
+ return err(`Error: The path ${memoryPath} does not exist. Please provide a valid path.`);
107
+ }
108
+ const content = fs.readFileSync(fullPath, "utf-8");
109
+ const lines = content.split("\n");
110
+ // Find all occurrences
111
+ const matchLines = [];
112
+ let searchPos = 0;
113
+ for (;;) {
114
+ const idx = content.indexOf(oldStr, searchPos);
115
+ if (idx === -1)
116
+ break;
117
+ const lineNum = content.substring(0, idx).split("\n").length;
118
+ matchLines.push(lineNum);
119
+ searchPos = idx + 1;
120
+ }
121
+ if (matchLines.length === 0) {
122
+ return err(`No replacement was performed, old_str \`${oldStr}\` did not appear verbatim in ${memoryPath}.`);
123
+ }
124
+ if (matchLines.length > 1) {
125
+ return err(`No replacement was performed. Multiple occurrences of old_str \`${oldStr}\` in lines: ${matchLines.join(", ")}. Please ensure it is unique`);
126
+ }
127
+ const newContent = content.replace(oldStr, newStr);
128
+ fs.writeFileSync(fullPath, newContent, "utf-8");
129
+ // Show snippet around the edit
130
+ const editLine = matchLines[0] - 1;
131
+ const snippetStart = Math.max(0, editLine - 2);
132
+ const snippetEnd = Math.min(lines.length, editLine + 5);
133
+ const newLines = newContent.split("\n");
134
+ const snippet = newLines
135
+ .slice(snippetStart, snippetEnd)
136
+ .map((l, i) => `${String(snippetStart + i + 1).padStart(6, " ")}\t${l}`)
137
+ .join("\n");
138
+ return ok(`The memory file has been edited.\n${snippet}`);
139
+ }
140
+ function handleInsert(memoryPath, insertLine, insertText) {
141
+ const fullPath = resolveSafePath(memoryPath);
142
+ if (!fs.existsSync(fullPath)) {
143
+ return err(`Error: The path ${memoryPath} does not exist`);
144
+ }
145
+ const stat = fs.statSync(fullPath);
146
+ if (!stat.isFile()) {
147
+ return err(`Error: The path ${memoryPath} does not exist`);
148
+ }
149
+ const content = fs.readFileSync(fullPath, "utf-8");
150
+ const lines = content.split("\n");
151
+ if (insertLine < 0 || insertLine > lines.length) {
152
+ return err(`Error: Invalid \`insert_line\` parameter: ${insertLine}. It should be within the range of lines of the file: [0, ${lines.length}]`);
153
+ }
154
+ lines.splice(insertLine, 0, insertText.replace(/\n$/, ""));
155
+ fs.writeFileSync(fullPath, lines.join("\n"), "utf-8");
156
+ return ok(`The file ${memoryPath} has been edited.`);
157
+ }
158
+ function handleDelete(memoryPath) {
159
+ const fullPath = resolveSafePath(memoryPath);
160
+ if (memoryPath === "/memories") {
161
+ return err("Error: Cannot delete the /memories directory itself");
162
+ }
163
+ if (!fs.existsSync(fullPath)) {
164
+ return err(`Error: The path ${memoryPath} does not exist`);
165
+ }
166
+ fs.rmSync(fullPath, { recursive: true });
167
+ return ok(`Successfully deleted ${memoryPath}`);
168
+ }
169
+ function handleRename(oldPath, newPath) {
170
+ const fullOldPath = resolveSafePath(oldPath);
171
+ const fullNewPath = resolveSafePath(newPath);
172
+ if (!fs.existsSync(fullOldPath)) {
173
+ return err(`Error: The path ${oldPath} does not exist`);
174
+ }
175
+ if (fs.existsSync(fullNewPath)) {
176
+ return err(`Error: The destination ${newPath} already exists`);
177
+ }
178
+ const newDir = path.dirname(fullNewPath);
179
+ if (!fs.existsSync(newDir)) {
180
+ fs.mkdirSync(newDir, { recursive: true });
181
+ }
182
+ fs.renameSync(fullOldPath, fullNewPath);
183
+ return ok(`Successfully renamed ${oldPath} to ${newPath}`);
184
+ }
185
+ // --- MCP tool definition ---
186
+ export const memoryTool = tool("memory", "Persistent memory storage. Use this to store and retrieve information across conversations. ALWAYS view /memories at the start of each wake cycle to check for earlier context. Commands: view, create, str_replace, insert, delete, rename.", {
187
+ command: z
188
+ .enum(["view", "create", "str_replace", "insert", "delete", "rename"])
189
+ .describe("Memory command to execute"),
190
+ path: z
191
+ .string()
192
+ .optional()
193
+ .describe("Path starting with /memories (e.g. /memories/notes.txt)"),
194
+ file_text: z
195
+ .string()
196
+ .optional()
197
+ .describe("File content for 'create' command"),
198
+ old_str: z
199
+ .string()
200
+ .optional()
201
+ .describe("Text to find for 'str_replace' command"),
202
+ new_str: z
203
+ .string()
204
+ .optional()
205
+ .describe("Replacement text for 'str_replace' command"),
206
+ insert_line: z
207
+ .number()
208
+ .optional()
209
+ .describe("Line number for 'insert' command (0-indexed)"),
210
+ insert_text: z
211
+ .string()
212
+ .optional()
213
+ .describe("Text to insert for 'insert' command"),
214
+ view_range: z
215
+ .tuple([z.number(), z.number()])
216
+ .optional()
217
+ .describe("Line range [start, end] for 'view' command (-1 for end of file)"),
218
+ old_path: z
219
+ .string()
220
+ .optional()
221
+ .describe("Source path for 'rename' command"),
222
+ new_path: z
223
+ .string()
224
+ .optional()
225
+ .describe("Destination path for 'rename' command"),
226
+ }, (args) => {
227
+ try {
228
+ switch (args.command) {
229
+ case "view":
230
+ return Promise.resolve(handleView(args.path ?? "/memories", args.view_range));
231
+ case "create": {
232
+ if (!args.path || args.file_text === undefined) {
233
+ return Promise.resolve(err("Error: path and file_text are required for create"));
234
+ }
235
+ return Promise.resolve(handleCreate(args.path, args.file_text));
236
+ }
237
+ case "str_replace": {
238
+ if (!args.path || args.old_str === undefined || args.new_str === undefined) {
239
+ return Promise.resolve(err("Error: path, old_str, and new_str are required for str_replace"));
240
+ }
241
+ return Promise.resolve(handleStrReplace(args.path, args.old_str, args.new_str));
242
+ }
243
+ case "insert": {
244
+ if (!args.path || args.insert_line === undefined || args.insert_text === undefined) {
245
+ return Promise.resolve(err("Error: path, insert_line, and insert_text are required for insert"));
246
+ }
247
+ return Promise.resolve(handleInsert(args.path, args.insert_line, args.insert_text));
248
+ }
249
+ case "delete": {
250
+ if (!args.path) {
251
+ return Promise.resolve(err("Error: path is required for delete"));
252
+ }
253
+ return Promise.resolve(handleDelete(args.path));
254
+ }
255
+ case "rename": {
256
+ if (!args.old_path || !args.new_path) {
257
+ return Promise.resolve(err("Error: old_path and new_path are required for rename"));
258
+ }
259
+ return Promise.resolve(handleRename(args.old_path, args.new_path));
260
+ }
261
+ default:
262
+ return Promise.resolve(err(`Unknown command: ${args.command}`));
263
+ }
264
+ }
265
+ catch (e) {
266
+ return Promise.resolve(err(`Memory error: ${e instanceof Error ? e.message : String(e)}`));
267
+ }
268
+ });
269
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ export declare const notifyUserTool: import("@anthropic-ai/claude-agent-sdk").SdkMcpToolDefinition<{
3
+ message: z.ZodString;
4
+ channel: z.ZodOptional<z.ZodString>;
5
+ to: z.ZodOptional<z.ZodString>;
6
+ image_url: z.ZodOptional<z.ZodString>;
7
+ image_path: z.ZodOptional<z.ZodString>;
8
+ file_url: z.ZodOptional<z.ZodString>;
9
+ file_path: z.ZodOptional<z.ZodString>;
10
+ file_name: z.ZodOptional<z.ZodString>;
11
+ }>;
12
+ //# sourceMappingURL=notify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/tools/notify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,cAAc;;;;;;;;;EAyH1B,CAAC"}