visionclaw 0.1.32 → 0.1.34

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 (87) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/assets/avatars/abstract.jpg +0 -0
  3. package/assets/avatars/cat.jpg +0 -0
  4. package/assets/avatars/fox.jpg +0 -0
  5. package/assets/avatars/orb.jpg +0 -0
  6. package/assets/avatars/owl.jpg +0 -0
  7. package/assets/avatars/robot.jpg +0 -0
  8. package/assets/avatars/visionclaw.jpg +0 -0
  9. package/dist/agent/context.d.ts +2 -1
  10. package/dist/agent/context.d.ts.map +1 -1
  11. package/dist/agent/context.js +2 -2
  12. package/dist/agent/context.js.map +1 -1
  13. package/dist/agent/loop.d.ts +2 -1
  14. package/dist/agent/loop.d.ts.map +1 -1
  15. package/dist/agent/loop.js +111 -8
  16. package/dist/agent/loop.js.map +1 -1
  17. package/dist/agent/session.d.ts +3 -1
  18. package/dist/agent/session.d.ts.map +1 -1
  19. package/dist/agent/session.js +7 -4
  20. package/dist/agent/session.js.map +1 -1
  21. package/dist/agent/system-prompt.d.ts +2 -2
  22. package/dist/agent/system-prompt.d.ts.map +1 -1
  23. package/dist/agent/system-prompt.js +14 -10
  24. package/dist/agent/system-prompt.js.map +1 -1
  25. package/dist/channels/discord.d.ts +7 -0
  26. package/dist/channels/discord.d.ts.map +1 -1
  27. package/dist/channels/discord.js +10 -2
  28. package/dist/channels/discord.js.map +1 -1
  29. package/dist/channels/gmail.js +1 -1
  30. package/dist/channels/gmail.js.map +1 -1
  31. package/dist/channels/interface.d.ts +8 -0
  32. package/dist/channels/interface.d.ts.map +1 -1
  33. package/dist/channels/manager.d.ts +10 -0
  34. package/dist/channels/manager.d.ts.map +1 -1
  35. package/dist/channels/manager.js +23 -0
  36. package/dist/channels/manager.js.map +1 -1
  37. package/dist/channels/telegram.d.ts +7 -0
  38. package/dist/channels/telegram.d.ts.map +1 -1
  39. package/dist/channels/telegram.js +18 -4
  40. package/dist/channels/telegram.js.map +1 -1
  41. package/dist/config/index.d.ts +10 -1
  42. package/dist/config/index.d.ts.map +1 -1
  43. package/dist/config/index.js +56 -1
  44. package/dist/config/index.js.map +1 -1
  45. package/dist/config/types.d.ts +23 -9
  46. package/dist/config/types.d.ts.map +1 -1
  47. package/dist/config/types.js +22 -7
  48. package/dist/config/types.js.map +1 -1
  49. package/dist/index.js +31 -16
  50. package/dist/index.js.map +1 -1
  51. package/dist/obs/notify.d.ts.map +1 -1
  52. package/dist/obs/notify.js +6 -5
  53. package/dist/obs/notify.js.map +1 -1
  54. package/dist/onboarding/index.d.ts +6 -1
  55. package/dist/onboarding/index.d.ts.map +1 -1
  56. package/dist/onboarding/index.js +25 -83
  57. package/dist/onboarding/index.js.map +1 -1
  58. package/dist/onboarding/onboarding-session.d.ts +33 -0
  59. package/dist/onboarding/onboarding-session.d.ts.map +1 -0
  60. package/dist/onboarding/onboarding-session.js +207 -0
  61. package/dist/onboarding/onboarding-session.js.map +1 -0
  62. package/dist/onboarding/onboarding-tools.d.ts +43 -0
  63. package/dist/onboarding/onboarding-tools.d.ts.map +1 -0
  64. package/dist/onboarding/onboarding-tools.js +178 -0
  65. package/dist/onboarding/onboarding-tools.js.map +1 -0
  66. package/dist/onboarding/send-invite.d.ts +7 -0
  67. package/dist/onboarding/send-invite.d.ts.map +1 -0
  68. package/dist/onboarding/send-invite.js +61 -0
  69. package/dist/onboarding/send-invite.js.map +1 -0
  70. package/dist/onboarding/set-owner.d.ts +8 -0
  71. package/dist/onboarding/set-owner.d.ts.map +1 -0
  72. package/dist/onboarding/set-owner.js +53 -0
  73. package/dist/onboarding/set-owner.js.map +1 -0
  74. package/dist/onboarding/telegram-onboarding.d.ts +47 -0
  75. package/dist/onboarding/telegram-onboarding.d.ts.map +1 -0
  76. package/dist/onboarding/telegram-onboarding.js +208 -0
  77. package/dist/onboarding/telegram-onboarding.js.map +1 -0
  78. package/dist/reconfigure.d.ts.map +1 -1
  79. package/dist/reconfigure.js +49 -47
  80. package/dist/reconfigure.js.map +1 -1
  81. package/dist/tools/notify.d.ts +1 -0
  82. package/dist/tools/notify.d.ts.map +1 -1
  83. package/dist/tools/notify.js +27 -0
  84. package/dist/tools/notify.js.map +1 -1
  85. package/dist/tools/sleep-interval.js +5 -5
  86. package/dist/tools/sleep-interval.js.map +1 -1
  87. package/package.json +5 -2
@@ -0,0 +1,47 @@
1
+ import type { OwnerConfig, VisionClawConfig } from "../config/types.js";
2
+ import type { CommandMessage } from "../channels/interface.js";
3
+ import type { ChannelManager } from "../channels/manager.js";
4
+ type SendReplyFn = (chatId: number, text: string) => Promise<void>;
5
+ /**
6
+ * Agent-based Telegram onboarding handler.
7
+ *
8
+ * Phase 1 (programmatic): Validates the /start verification code.
9
+ * Phase 2 (LLM agent): Hands off to an Agent SDK session that
10
+ * conversationally collects owner name, agent name, wakeup interval,
11
+ * and profile photo through natural dialogue.
12
+ *
13
+ * Session state is persisted by the SDK, so a process restart
14
+ * mid-onboarding resumes the conversation from where it left off.
15
+ */
16
+ export declare class TelegramOnboardingHandler {
17
+ private ownerConfig;
18
+ private config;
19
+ private botToken;
20
+ private channelManager;
21
+ private capturedChatId;
22
+ private session;
23
+ private onboardingResult;
24
+ private _isComplete;
25
+ constructor(ownerConfig: OwnerConfig, config: VisionClawConfig, botToken: string, channelManager: ChannelManager);
26
+ get isComplete(): boolean;
27
+ /**
28
+ * Process a Telegram message during onboarding.
29
+ * Returns true when onboarding is complete.
30
+ */
31
+ handleMessage(msg: CommandMessage, sendReply: SendReplyFn): Promise<boolean>;
32
+ /**
33
+ * Phase 1: Programmatic verification code check.
34
+ */
35
+ private handleCodeVerification;
36
+ /**
37
+ * Phase 2: Forward messages to the LLM onboarding agent.
38
+ */
39
+ private handleAgentConversation;
40
+ private getSession;
41
+ private initSession;
42
+ private finalizeOnboarding;
43
+ private sendTypingIndicator;
44
+ private updateBotName;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=telegram-onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-onboarding.d.ts","sourceRoot":"","sources":["../../src/onboarding/telegram-onboarding.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnE;;;;;;;;;;GAUG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,WAAW,CAAS;gBAG1B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,cAAc;IAahC,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;OAGG;IACG,aAAa,CACjB,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,WAAW,GACrB,OAAO,CAAC,OAAO,CAAC;IAmBnB;;OAEG;YACW,sBAAsB;IAyDpC;;OAEG;YACW,uBAAuB;IAkDrC,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,WAAW;YAiCL,kBAAkB;YA6BlB,mBAAmB;YAiBnB,aAAa;CA2B5B"}
@@ -0,0 +1,208 @@
1
+ import { saveOwnerConfig, deleteOnboardingSession, } from "../config/index.js";
2
+ import { logger } from "../logger.js";
3
+ import { createOnboardingToolServer, } from "./onboarding-tools.js";
4
+ import { OnboardingSession } from "./onboarding-session.js";
5
+ /**
6
+ * Agent-based Telegram onboarding handler.
7
+ *
8
+ * Phase 1 (programmatic): Validates the /start verification code.
9
+ * Phase 2 (LLM agent): Hands off to an Agent SDK session that
10
+ * conversationally collects owner name, agent name, wakeup interval,
11
+ * and profile photo through natural dialogue.
12
+ *
13
+ * Session state is persisted by the SDK, so a process restart
14
+ * mid-onboarding resumes the conversation from where it left off.
15
+ */
16
+ export class TelegramOnboardingHandler {
17
+ ownerConfig;
18
+ config;
19
+ botToken;
20
+ channelManager;
21
+ capturedChatId = null;
22
+ session = null;
23
+ onboardingResult = null;
24
+ _isComplete = false;
25
+ constructor(ownerConfig, config, botToken, channelManager) {
26
+ this.ownerConfig = ownerConfig;
27
+ this.config = config;
28
+ this.botToken = botToken;
29
+ this.channelManager = channelManager;
30
+ if (ownerConfig.onboardingCodeVerified && ownerConfig.telegramChatId) {
31
+ this.capturedChatId = ownerConfig.telegramChatId;
32
+ this.initSession();
33
+ }
34
+ }
35
+ get isComplete() {
36
+ return this._isComplete;
37
+ }
38
+ /**
39
+ * Process a Telegram message during onboarding.
40
+ * Returns true when onboarding is complete.
41
+ */
42
+ async handleMessage(msg, sendReply) {
43
+ if (this._isComplete)
44
+ return true;
45
+ const chatId = typeof msg.meta?.chatId === "number" ? msg.meta.chatId : null;
46
+ if (chatId === null) {
47
+ logger.warn("Onboarding: received message without chatId metadata");
48
+ return false;
49
+ }
50
+ const text = msg.text.trim();
51
+ if (!this.ownerConfig.onboardingCodeVerified) {
52
+ return this.handleCodeVerification(text, chatId, sendReply);
53
+ }
54
+ return this.handleAgentConversation(msg, chatId, sendReply);
55
+ }
56
+ /**
57
+ * Phase 1: Programmatic verification code check.
58
+ */
59
+ async handleCodeVerification(text, chatId, sendReply) {
60
+ const match = /^\/start\s+(\S+)$/i.exec(text);
61
+ const code = match?.[1];
62
+ if (!code) {
63
+ await sendReply(chatId, "Welcome! To get started, please send your verification code:\n\n" +
64
+ "/start YOUR_CODE\n\nYou can find the code in the setup email.");
65
+ return false;
66
+ }
67
+ if (code !== this.ownerConfig.onboardingCode) {
68
+ await sendReply(chatId, "That verification code doesn't match. Please check the email and try again.\n\n" +
69
+ "/start YOUR_CODE");
70
+ return false;
71
+ }
72
+ this.capturedChatId = chatId;
73
+ this.ownerConfig.onboardingCodeVerified = true;
74
+ this.ownerConfig.telegramChatId = chatId;
75
+ saveOwnerConfig(this.ownerConfig);
76
+ logger.system(`Onboarding: code verified for chat ${chatId}`);
77
+ this.initSession();
78
+ await this.sendTypingIndicator(chatId);
79
+ const reply = await this.getSession().sendAndGetReply("The user has just verified their code successfully. " +
80
+ "Greet them warmly and start the onboarding conversation by asking for their name.", async () => {
81
+ await sendReply(chatId, "Hold on, let me try that again...");
82
+ await this.sendTypingIndicator(chatId);
83
+ });
84
+ if (reply.text) {
85
+ await sendReply(chatId, reply.text);
86
+ }
87
+ else {
88
+ await sendReply(chatId, "Sorry, I'm having trouble responding right now. Please send another message to try again.");
89
+ }
90
+ return false;
91
+ }
92
+ /**
93
+ * Phase 2: Forward messages to the LLM onboarding agent.
94
+ */
95
+ async handleAgentConversation(msg, chatId, sendReply) {
96
+ if (!this.session) {
97
+ this.initSession();
98
+ }
99
+ await this.sendTypingIndicator(chatId);
100
+ let userMessage = msg.text.trim();
101
+ if (msg.attachments.length > 0) {
102
+ const imageAtt = msg.attachments.find((a) => a.type === "image");
103
+ if (imageAtt?.url) {
104
+ userMessage +=
105
+ `\n\n[The user sent a photo. Telegram file URL: ${imageAtt.url}]`;
106
+ }
107
+ }
108
+ if (!userMessage) {
109
+ userMessage = "(empty message)";
110
+ }
111
+ const reply = await this.getSession().sendAndGetReply(userMessage, async () => {
112
+ await sendReply(chatId, "Hold on, let me try that again...");
113
+ await this.sendTypingIndicator(chatId);
114
+ });
115
+ if (reply.text) {
116
+ await sendReply(chatId, reply.text);
117
+ }
118
+ else if (!reply.completed) {
119
+ await sendReply(chatId, "Sorry, I'm having trouble responding right now. Please send another message to try again.");
120
+ }
121
+ if (reply.completed && this.onboardingResult) {
122
+ await this.finalizeOnboarding();
123
+ return true;
124
+ }
125
+ return false;
126
+ }
127
+ getSession() {
128
+ if (!this.session) {
129
+ throw new Error("Onboarding session not initialized");
130
+ }
131
+ return this.session;
132
+ }
133
+ initSession() {
134
+ if (this.session)
135
+ return;
136
+ if (!this.capturedChatId) {
137
+ throw new Error("Cannot init onboarding session without chatId");
138
+ }
139
+ const chatId = this.capturedChatId;
140
+ const channelManager = this.channelManager;
141
+ const toolServer = createOnboardingToolServer({
142
+ botToken: this.botToken,
143
+ chatId,
144
+ sendPhoto: async (targetChatId, photoPath, caption) => {
145
+ await channelManager.sendMessage("telegram", String(targetChatId), caption, [
146
+ { type: "image", localPath: photoPath, mimeType: "image/jpeg" },
147
+ ]);
148
+ },
149
+ onComplete: (result) => {
150
+ this.onboardingResult = result;
151
+ },
152
+ });
153
+ this.session = new OnboardingSession(this.config, this.ownerConfig.ownerEmail, { onboarding: toolServer });
154
+ }
155
+ async finalizeOnboarding() {
156
+ const result = this.onboardingResult;
157
+ if (!result) {
158
+ throw new Error("finalizeOnboarding called without onboardingResult");
159
+ }
160
+ this.ownerConfig.ownerName = result.ownerName;
161
+ this.ownerConfig.agentName = result.agentName;
162
+ this.ownerConfig.allowedTelegramChatIds = this.capturedChatId
163
+ ? [this.capturedChatId]
164
+ : [];
165
+ this.ownerConfig.heartbeatIntervalMs = result.wakeupIntervalMinutes * 60_000;
166
+ this.ownerConfig.onboardingComplete = true;
167
+ this.ownerConfig.onboardedAt = new Date().toISOString();
168
+ this.ownerConfig.onboardingCode = undefined;
169
+ saveOwnerConfig(this.ownerConfig);
170
+ deleteOnboardingSession();
171
+ await this.updateBotName(result.agentName);
172
+ this._isComplete = true;
173
+ logger.system(`Onboarding complete! Agent "${result.agentName}" for owner "${result.ownerName}" ` +
174
+ `(wakeup: ${result.wakeupIntervalMinutes}min)`);
175
+ }
176
+ async sendTypingIndicator(chatId) {
177
+ try {
178
+ await fetch(`https://api.telegram.org/bot${this.botToken}/sendChatAction`, {
179
+ method: "POST",
180
+ headers: { "Content-Type": "application/json" },
181
+ body: JSON.stringify({ chat_id: chatId, action: "typing" }),
182
+ });
183
+ }
184
+ catch (err) {
185
+ logger.debug(`Failed to send typing indicator: ${err instanceof Error ? err.message : String(err)}`);
186
+ }
187
+ }
188
+ async updateBotName(name) {
189
+ try {
190
+ const res = await fetch(`https://api.telegram.org/bot${this.botToken}/setMyName`, {
191
+ method: "POST",
192
+ headers: { "Content-Type": "application/json" },
193
+ body: JSON.stringify({ name }),
194
+ });
195
+ const data = (await res.json());
196
+ if (data.ok) {
197
+ logger.system(`Telegram bot name updated to "${name}"`);
198
+ }
199
+ else {
200
+ logger.warn(`Failed to update Telegram bot name: ${data.description ?? "unknown error"}`);
201
+ }
202
+ }
203
+ catch (err) {
204
+ logger.warn(`Failed to update Telegram bot name: ${err instanceof Error ? err.message : String(err)}`);
205
+ }
206
+ }
207
+ }
208
+ //# sourceMappingURL=telegram-onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-onboarding.js","sourceRoot":"","sources":["../../src/onboarding/telegram-onboarding.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reconfigure.d.ts","sourceRoot":"","sources":["../src/reconfigure.ts"],"names":[],"mappings":"AAeA,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAqN7F"}
1
+ {"version":3,"file":"reconfigure.d.ts","sourceRoot":"","sources":["../src/reconfigure.ts"],"names":[],"mappings":"AAkBA,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA4N7F"}
@@ -1,5 +1,5 @@
1
1
  import prompts from "prompts";
2
- import { setProfile, getProfile, loadConfig, saveConfig, configExists, } from "./config/index.js";
2
+ import { setProfile, getProfile, loadConfig, saveConfig, configExists, ownerConfigExists, loadOwnerConfig, saveOwnerConfig, } from "./config/index.js";
3
3
  import { runGoogleOAuth } from "./onboarding/google-auth.js";
4
4
  function parseProfileFromArgs(args) {
5
5
  const idx = args.indexOf("--profile");
@@ -9,58 +9,49 @@ export async function runReconfigureCli(args = process.argv.slice(2)) {
9
9
  const profile = parseProfileFromArgs(args);
10
10
  setProfile(profile);
11
11
  if (!configExists()) {
12
- // Keep message consistent with existing script UX
13
- // (pnpm dev supports passing args through to tsx)
14
12
  console.error(`Profile "${profile}" does not exist. Run 'pnpm dev -- --profile ${profile}' to create it.`);
15
13
  process.exit(1);
16
14
  }
17
15
  const config = loadConfig();
16
+ const hasOwner = ownerConfigExists();
17
+ const ownerConfig = hasOwner ? loadOwnerConfig() : undefined;
18
18
  console.log(`\n=== Reconfigure Profile: ${getProfile()} ===`);
19
- console.log(`Agent: ${config.agentName} <${config.gmail}>\n`);
19
+ console.log(`Agent: ${ownerConfig?.agentName ?? "VisionClaw"} <${config.gmail}>\n`);
20
+ const choices = [
21
+ { title: "Update Telegram bot token", value: "telegram" },
22
+ { title: "Add/update Discord", value: "discord" },
23
+ { title: "Update Anthropic API key", value: "apikey" },
24
+ { title: "Re-authorize Google OAuth", value: "google" },
25
+ { title: "Disable a channel", value: "disable" },
26
+ ];
27
+ if (hasOwner && ownerConfig) {
28
+ choices.splice(2, 0, { title: "Update agent name", value: "name" }, { title: "Update owner info", value: "owner" }, { title: "Update heartbeat interval", value: "heartbeat" });
29
+ }
20
30
  const { section } = (await prompts({
21
31
  type: "select",
22
32
  name: "section",
23
33
  message: "What do you want to update?",
24
- choices: [
25
- { title: "Add/update Telegram", value: "telegram" },
26
- { title: "Add/update Discord", value: "discord" },
27
- { title: "Update agent name", value: "name" },
28
- { title: "Update owner info", value: "owner" },
29
- { title: "Update Anthropic API key", value: "apikey" },
30
- { title: "Re-authorize Google OAuth", value: "google" },
31
- { title: "Update heartbeat interval", value: "heartbeat" },
32
- { title: "Disable a channel", value: "disable" },
33
- ],
34
+ choices,
34
35
  }));
35
36
  if (!section) {
36
37
  return;
37
38
  }
38
39
  switch (section) {
39
40
  case "telegram": {
40
- const result = (await prompts([
41
- {
42
- type: "text",
43
- name: "botToken",
44
- message: "Telegram Bot Token:",
45
- initial: config.channels.telegram?.botToken ?? "",
46
- validate: (v) => (v.trim().length > 0 ? true : "Required"),
47
- },
48
- {
49
- type: "text",
50
- name: "chatId",
51
- message: "Your Telegram Chat ID (message @userinfobot to find it):",
52
- initial: config.channels.telegram?.allowedChatIds[0]?.toString() ?? "",
53
- validate: (v) => (/^\d+$/.test(v.trim()) ? true : "Must be numeric"),
54
- },
55
- ]));
56
- if (result.botToken && result.chatId) {
41
+ const result = (await prompts({
42
+ type: "text",
43
+ name: "botToken",
44
+ message: "Telegram Bot Token:",
45
+ initial: config.channels.telegram?.botToken ?? "",
46
+ validate: (v) => (v.trim().length > 0 ? true : "Required"),
47
+ }));
48
+ if (result.botToken) {
57
49
  config.channels.telegram = {
58
50
  enabled: true,
59
51
  botToken: result.botToken,
60
- allowedChatIds: [Number(result.chatId)],
61
52
  };
62
53
  saveConfig(config);
63
- console.log("\nTelegram configured and enabled.");
54
+ console.log("\nTelegram bot token updated.");
64
55
  }
65
56
  break;
66
57
  }
@@ -79,53 +70,62 @@ export async function runReconfigureCli(args = process.argv.slice(2)) {
79
70
  type: "text",
80
71
  name: "channelId",
81
72
  message: "Discord channel ID (leave blank for DMs only):",
82
- initial: config.channels.discord?.allowedChannelIds[0] ?? "",
73
+ initial: ownerConfig?.allowedDiscordChannelIds[0] ?? "",
83
74
  },
84
75
  ]));
85
76
  if (result.botToken) {
86
77
  config.channels.discord = {
87
78
  enabled: true,
88
79
  botToken: result.botToken,
89
- allowedChannelIds: result.channelId?.trim() ? [result.channelId.trim()] : [],
90
80
  };
91
81
  saveConfig(config);
82
+ if (ownerConfig) {
83
+ ownerConfig.allowedDiscordChannelIds = result.channelId?.trim() ? [result.channelId.trim()] : [];
84
+ saveOwnerConfig(ownerConfig);
85
+ }
92
86
  console.log("\nDiscord configured and enabled.");
93
87
  }
94
88
  break;
95
89
  }
96
90
  case "name": {
91
+ if (!ownerConfig)
92
+ break;
97
93
  const result = (await prompts({
98
94
  type: "text",
99
95
  name: "agentName",
100
96
  message: "Agent name:",
101
- initial: config.agentName,
97
+ initial: ownerConfig.agentName,
102
98
  }));
103
99
  if (result.agentName) {
104
- config.agentName = result.agentName;
105
- saveConfig(config);
106
- console.log(`\nAgent name updated to "${config.agentName}".`);
100
+ ownerConfig.agentName = result.agentName;
101
+ saveOwnerConfig(ownerConfig);
102
+ console.log(`\nAgent name updated to "${ownerConfig.agentName}".`);
107
103
  }
108
104
  break;
109
105
  }
110
106
  case "owner": {
107
+ if (!ownerConfig)
108
+ break;
111
109
  const result = (await prompts([
112
110
  {
113
111
  type: "text",
114
112
  name: "ownerName",
115
113
  message: "Owner name:",
116
- initial: config.ownerName,
114
+ initial: ownerConfig.ownerName,
117
115
  },
118
116
  {
119
117
  type: "text",
120
118
  name: "ownerEmail",
121
119
  message: "Owner email:",
122
- initial: config.ownerEmail ?? "",
120
+ initial: ownerConfig.ownerEmail,
123
121
  },
124
122
  ]));
125
123
  if (result.ownerName !== undefined) {
126
- config.ownerName = result.ownerName;
127
- config.ownerEmail = result.ownerEmail ?? undefined;
128
- saveConfig(config);
124
+ ownerConfig.ownerName = result.ownerName;
125
+ if (result.ownerEmail) {
126
+ ownerConfig.ownerEmail = result.ownerEmail;
127
+ }
128
+ saveOwnerConfig(ownerConfig);
129
129
  console.log("\nOwner info updated.");
130
130
  }
131
131
  break;
@@ -150,16 +150,18 @@ export async function runReconfigureCli(args = process.argv.slice(2)) {
150
150
  break;
151
151
  }
152
152
  case "heartbeat": {
153
+ if (!ownerConfig)
154
+ break;
153
155
  const result = (await prompts({
154
156
  type: "number",
155
157
  name: "seconds",
156
158
  message: "Heartbeat interval (seconds):",
157
- initial: config.heartbeatIntervalMs / 1000,
159
+ initial: ownerConfig.heartbeatIntervalMs / 1000,
158
160
  min: 30,
159
161
  }));
160
162
  if (result.seconds) {
161
- config.heartbeatIntervalMs = result.seconds * 1000;
162
- saveConfig(config);
163
+ ownerConfig.heartbeatIntervalMs = result.seconds * 1000;
164
+ saveOwnerConfig(ownerConfig);
163
165
  console.log(`\nHeartbeat interval updated to ${result.seconds}s.`);
164
166
  }
165
167
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"reconfigure.js","sourceRoot":"","sources":["../src/reconfigure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconfigure.js","sourceRoot":"","sources":["../src/reconfigure.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,6 @@ export declare const notifyUserTool: import("@anthropic-ai/claude-agent-sdk").Sd
8
8
  file_url: z.ZodOptional<z.ZodString>;
9
9
  file_path: z.ZodOptional<z.ZodString>;
10
10
  file_name: z.ZodOptional<z.ZodString>;
11
+ attach_screenshot: z.ZodBoolean;
11
12
  }>;
12
13
  //# sourceMappingURL=notify.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/tools/notify.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,cAAc;;;;;;;;;;EAmJ1B,CAAC"}
@@ -1,6 +1,10 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import os from "node:os";
1
4
  import { z } from "zod";
2
5
  import { tool } from "@anthropic-ai/claude-agent-sdk";
3
6
  import { getAgentState } from "../agent/loop.js";
7
+ import { takeScreenshot } from "./screenshot.js";
4
8
  export const notifyUserTool = tool("notify_user", "Send a message to the user through a messaging channel. Supports text and optional image/file attachments. Use this to communicate results, answer questions, request help, or send files.", {
5
9
  message: z
6
10
  .string()
@@ -33,6 +37,9 @@ export const notifyUserTool = tool("notify_user", "Send a message to the user th
33
37
  .string()
34
38
  .optional()
35
39
  .describe("Display filename for the attached file"),
40
+ attach_screenshot: z
41
+ .boolean()
42
+ .describe("Should ALWAYS be true if you are sending task results."),
36
43
  }, async (args) => {
37
44
  const state = getAgentState();
38
45
  const channel = args.channel ?? state.lastMessageChannel ?? "gmail";
@@ -50,6 +57,18 @@ export const notifyUserTool = tool("notify_user", "Send a message to the user th
50
57
  }
51
58
  // Build attachments array from optional params
52
59
  const attachments = [];
60
+ let screenshotTmpPath;
61
+ if (args.attach_screenshot) {
62
+ const base64 = await takeScreenshot();
63
+ screenshotTmpPath = path.join(os.tmpdir(), `visionclaw-notify-screenshot-${Date.now()}.png`);
64
+ fs.writeFileSync(screenshotTmpPath, Buffer.from(base64, "base64"));
65
+ attachments.push({
66
+ type: "image",
67
+ localPath: screenshotTmpPath,
68
+ mimeType: "image/png",
69
+ filename: "screenshot.png",
70
+ });
71
+ }
53
72
  if (args.image_url) {
54
73
  attachments.push({
55
74
  type: "image",
@@ -104,5 +123,13 @@ export const notifyUserTool = tool("notify_user", "Send a message to the user th
104
123
  isError: true,
105
124
  };
106
125
  }
126
+ finally {
127
+ if (screenshotTmpPath) {
128
+ try {
129
+ fs.unlinkSync(screenshotTmpPath);
130
+ }
131
+ catch { /* noop */ }
132
+ }
133
+ }
107
134
  });
108
135
  //# sourceMappingURL=notify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/tools/notify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/tools/notify.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { tool } from "@anthropic-ai/claude-agent-sdk";
3
3
  import { getAgentState } from "../agent/loop.js";
4
- import { saveConfig } from "../config/index.js";
4
+ import { saveOwnerConfig } from "../config/index.js";
5
5
  export const setSleepIntervalTool = tool("set_sleep_interval", "Change how long the agent sleeps between heartbeat wake-ups. Use this when the user asks you to sleep longer or shorter, or to change the check-in frequency.", {
6
6
  minutes: z
7
7
  .number()
@@ -10,14 +10,14 @@ export const setSleepIntervalTool = tool("set_sleep_interval", "Change how long
10
10
  .describe("Sleep interval in minutes (1-1440, i.e. up to 24 hours)"),
11
11
  }, async (args) => {
12
12
  const state = await Promise.resolve(getAgentState());
13
- const oldMs = state.config.heartbeatIntervalMs;
14
- state.config.heartbeatIntervalMs = args.minutes * 60 * 1000;
15
- saveConfig(state.config);
13
+ const oldMs = state.ownerConfig.heartbeatIntervalMs;
14
+ state.ownerConfig.heartbeatIntervalMs = args.minutes * 60 * 1000;
15
+ saveOwnerConfig(state.ownerConfig);
16
16
  return {
17
17
  content: [
18
18
  {
19
19
  type: "text",
20
- text: `Sleep interval changed from ${oldMs / 60000}m to ${args.minutes}m (saved to config).`,
20
+ text: `Sleep interval changed from ${oldMs / 60000}m to ${args.minutes}m (saved to owner config).`,
21
21
  },
22
22
  ],
23
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sleep-interval.js","sourceRoot":"","sources":["../../src/tools/sleep-interval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CACtC,oBAAoB,EACpB,+JAA+J,EAC/J;IACE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CAAC,yDAAyD,CAAC;CACvE,EACD,KAAK,EAAE,IAAI,EAA2B,EAAE;IACtC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC;IAC/C,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC;IAC5D,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,+BAA+B,KAAK,GAAG,KAAK,QAAQ,IAAI,CAAC,OAAO,sBAAsB;aAC7F;SACF;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"sleep-interval.js","sourceRoot":"","sources":["../../src/tools/sleep-interval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CACtC,oBAAoB,EACpB,+JAA+J,EAC/J;IACE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CAAC,yDAAyD,CAAC;CACvE,EACD,KAAK,EAAE,IAAI,EAA2B,EAAE;IACtC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,mBAAmB,CAAC;IACpD,KAAK,CAAC,WAAW,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC;IACjE,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,+BAA+B,KAAK,GAAG,KAAK,QAAQ,IAAI,CAAC,OAAO,4BAA4B;aACnG;SACF;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}