visionclaw 0.1.36 → 0.1.37

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 (60) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/agent/gather-context.d.ts +15 -0
  3. package/dist/agent/gather-context.d.ts.map +1 -0
  4. package/dist/agent/gather-context.js +55 -0
  5. package/dist/agent/gather-context.js.map +1 -0
  6. package/dist/agent/interrupt-handler.d.ts +30 -0
  7. package/dist/agent/interrupt-handler.d.ts.map +1 -0
  8. package/dist/agent/interrupt-handler.js +141 -0
  9. package/dist/agent/interrupt-handler.js.map +1 -0
  10. package/dist/agent/loop.d.ts +3 -19
  11. package/dist/agent/loop.d.ts.map +1 -1
  12. package/dist/agent/loop.js +36 -531
  13. package/dist/agent/loop.js.map +1 -1
  14. package/dist/agent/onboarding-gate.d.ts +14 -0
  15. package/dist/agent/onboarding-gate.d.ts.map +1 -0
  16. package/dist/agent/onboarding-gate.js +70 -0
  17. package/dist/agent/onboarding-gate.js.map +1 -0
  18. package/dist/agent/state.d.ts +21 -0
  19. package/dist/agent/state.d.ts.map +1 -0
  20. package/dist/agent/state.js +11 -0
  21. package/dist/agent/state.js.map +1 -0
  22. package/dist/agent/stream-handler.d.ts +10 -0
  23. package/dist/agent/stream-handler.d.ts.map +1 -0
  24. package/dist/agent/stream-handler.js +232 -0
  25. package/dist/agent/stream-handler.js.map +1 -0
  26. package/dist/agent/system-prompt.d.ts.map +1 -1
  27. package/dist/agent/system-prompt.js +20 -77
  28. package/dist/agent/system-prompt.js.map +1 -1
  29. package/dist/channels/discord.d.ts +1 -0
  30. package/dist/channels/discord.d.ts.map +1 -1
  31. package/dist/channels/discord.js +13 -0
  32. package/dist/channels/discord.js.map +1 -1
  33. package/dist/channels/interface.d.ts +2 -0
  34. package/dist/channels/interface.d.ts.map +1 -1
  35. package/dist/channels/manager.d.ts +4 -0
  36. package/dist/channels/manager.d.ts.map +1 -1
  37. package/dist/channels/manager.js +9 -0
  38. package/dist/channels/manager.js.map +1 -1
  39. package/dist/channels/telegram.d.ts +1 -0
  40. package/dist/channels/telegram.d.ts.map +1 -1
  41. package/dist/channels/telegram.js +14 -0
  42. package/dist/channels/telegram.js.map +1 -1
  43. package/dist/index.js +2 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/obs/notify.js +1 -1
  46. package/dist/obs/notify.js.map +1 -1
  47. package/dist/onboarding/telegram-onboarding.d.ts.map +1 -1
  48. package/dist/onboarding/telegram-onboarding.js +1 -5
  49. package/dist/onboarding/telegram-onboarding.js.map +1 -1
  50. package/dist/tools/calendar.js +1 -1
  51. package/dist/tools/calendar.js.map +1 -1
  52. package/dist/tools/drive.js +1 -1
  53. package/dist/tools/drive.js.map +1 -1
  54. package/dist/tools/email.js +1 -1
  55. package/dist/tools/email.js.map +1 -1
  56. package/dist/tools/memory.d.ts +1 -1
  57. package/dist/tools/notify.js +1 -1
  58. package/dist/tools/notify.js.map +1 -1
  59. package/dist/tools/skill.d.ts +1 -1
  60. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## [0.1.37](https://github.com/babelcloud/visionclaw/compare/v0.1.36...v0.1.37) (2026-02-25)
2
+
3
+
4
+ ### Features
5
+
6
+ * add typing indicator functionality across channels ([74aaf4d](https://github.com/babelcloud/visionclaw/commit/74aaf4d2012642358689005ea48ae12d71ec5bbe))
7
+ * enhance agent functionality with new context gathering and interrupt handling ([08a5938](https://github.com/babelcloud/visionclaw/commit/08a59384203759882ee582659753456fcf0b4b98))
8
+
9
+
10
+
1
11
  ## [0.1.36](https://github.com/babelcloud/visionclaw/compare/v0.1.35...v0.1.36) (2026-02-25)
2
12
 
3
13
 
@@ -0,0 +1,15 @@
1
+ import type { VisionClawConfig } from "../config/types.js";
2
+ import type { ScreenshotRef } from "./context.js";
3
+ import { type VersionCheckResult } from "../utils/version-check.js";
4
+ export interface GatheredContext {
5
+ screenshot?: ScreenshotRef;
6
+ calendarSummary: string;
7
+ versionUpdate?: VersionCheckResult;
8
+ }
9
+ /**
10
+ * Gather screenshot, calendar, and (optionally) version-check data in
11
+ * parallel. Failures in individual sources are logged and swallowed so
12
+ * the agent can still proceed with whatever data is available.
13
+ */
14
+ export declare function gatherWakeContext(config: VisionClawConfig, doVersionCheck: boolean): Promise<GatheredContext>;
15
+ //# sourceMappingURL=gather-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gather-context.d.ts","sourceRoot":"","sources":["../../src/agent/gather-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,2BAA2B,CAAC;AAGnC,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,eAAe,CAAC,CAmD1B"}
@@ -0,0 +1,55 @@
1
+ import { takeScreenshot } from "../tools/screenshot.js";
2
+ import { getCalendarSummary } from "../calendar/scheduler.js";
3
+ import { checkForUpdate, recordUpdateNotification, } from "../utils/version-check.js";
4
+ import { logger } from "../logger.js";
5
+ /**
6
+ * Gather screenshot, calendar, and (optionally) version-check data in
7
+ * parallel. Failures in individual sources are logged and swallowed so
8
+ * the agent can still proceed with whatever data is available.
9
+ */
10
+ export async function gatherWakeContext(config, doVersionCheck) {
11
+ const [screenshotResult, calendarResult, versionResult] = await Promise.allSettled([
12
+ (async () => {
13
+ const t0 = Date.now();
14
+ const base64 = await takeScreenshot();
15
+ logger.debug(`Screenshot captured in ${Date.now() - t0}ms`);
16
+ return { base64 };
17
+ })(),
18
+ (async () => {
19
+ const t0 = Date.now();
20
+ const summary = await getCalendarSummary(config);
21
+ logger.debug(`Calendar fetched in ${Date.now() - t0}ms`);
22
+ return summary;
23
+ })(),
24
+ (async () => {
25
+ if (!doVersionCheck)
26
+ return undefined;
27
+ const t0 = Date.now();
28
+ const result = await checkForUpdate();
29
+ logger.debug(`Version check completed in ${Date.now() - t0}ms`);
30
+ if (result.hasUpdate) {
31
+ recordUpdateNotification(result.latestVersion);
32
+ logger.system(`Update available: ${result.currentVersion} → ${result.latestVersion}`);
33
+ }
34
+ return result;
35
+ })(),
36
+ ]);
37
+ const screenshot = screenshotResult.status === "fulfilled" ? screenshotResult.value : undefined;
38
+ if (screenshotResult.status === "rejected") {
39
+ logger.warn(`Screenshot failed: ${screenshotResult.reason instanceof Error ? screenshotResult.reason.message : String(screenshotResult.reason)}`);
40
+ }
41
+ if (screenshot?.base64) {
42
+ logger.screenshot(screenshot.base64);
43
+ }
44
+ // TODO: Maybe we should fetch unread emails here?
45
+ const calendarSummary = calendarResult.status === "fulfilled" ? calendarResult.value : "";
46
+ if (calendarResult.status === "rejected") {
47
+ logger.warn(`Calendar fetch failed: ${calendarResult.reason instanceof Error ? calendarResult.reason.message : String(calendarResult.reason)}`);
48
+ }
49
+ const versionUpdate = versionResult.status === "fulfilled" ? versionResult.value : undefined;
50
+ if (versionResult.status === "rejected") {
51
+ logger.debug(`Version check failed: ${versionResult.reason instanceof Error ? versionResult.reason.message : String(versionResult.reason)}`);
52
+ }
53
+ return { screenshot, calendarSummary, versionUpdate };
54
+ }
55
+ //# sourceMappingURL=gather-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gather-context.js","sourceRoot":"","sources":["../../src/agent/gather-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { VisionClawConfig, OwnerConfig } from "../config/types.js";
2
+ import type { ChannelManager } from "../channels/manager.js";
3
+ import type { MessageQueue } from "../channels/queue.js";
4
+ import type { AgentSession } from "./session.js";
5
+ import type { ActivityTracker } from "./activity-tracker.js";
6
+ import type { AgentState } from "./state.js";
7
+ export interface InterruptHandlerDeps {
8
+ session: AgentSession;
9
+ config: VisionClawConfig;
10
+ ownerConfig: OwnerConfig;
11
+ channelManager: ChannelManager;
12
+ messageQueue: MessageQueue;
13
+ activityTracker: ActivityTracker;
14
+ getAgentState: () => AgentState;
15
+ }
16
+ export declare class InterruptHandler {
17
+ private deps;
18
+ private timer;
19
+ private inFlight;
20
+ constructor(deps: InterruptHandlerDeps);
21
+ /**
22
+ * Called from the channelManager "message" event when the agent is busy.
23
+ * Schedules a debounced interrupt batch.
24
+ */
25
+ schedule(): void;
26
+ dispose(): void;
27
+ private requeue;
28
+ private processBatch;
29
+ }
30
+ //# sourceMappingURL=interrupt-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interrupt-handler.d.ts","sourceRoot":"","sources":["../../src/agent/interrupt-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS7C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,MAAM,UAAU,CAAC;CACjC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,QAAQ,CAAS;gBAEb,IAAI,EAAE,oBAAoB;IAItC;;;OAGG;IACH,QAAQ,IAAI,IAAI;IAQhB,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,OAAO;YAOD,YAAY;CA4G3B"}
@@ -0,0 +1,141 @@
1
+ import { buildSystemPrompt } from "./system-prompt.js";
2
+ import { buildInterruptContext, buildInterruptWithBriefing } from "./context.js";
3
+ import { fastRespond } from "./fast-responder.js";
4
+ import { logger } from "../logger.js";
5
+ const INTERRUPT_DEBOUNCE_MS = 80000;
6
+ const FAST_RESPONDER_TIMEOUT_MS = 6000;
7
+ export class InterruptHandler {
8
+ deps;
9
+ timer = null;
10
+ inFlight = false;
11
+ constructor(deps) {
12
+ this.deps = deps;
13
+ }
14
+ /**
15
+ * Called from the channelManager "message" event when the agent is busy.
16
+ * Schedules a debounced interrupt batch.
17
+ */
18
+ schedule() {
19
+ if (this.timer !== null)
20
+ return;
21
+ this.timer = setTimeout(() => {
22
+ this.timer = null;
23
+ void this.processBatch();
24
+ }, INTERRUPT_DEBOUNCE_MS);
25
+ }
26
+ dispose() {
27
+ if (this.timer !== null) {
28
+ clearTimeout(this.timer);
29
+ this.timer = null;
30
+ }
31
+ }
32
+ requeue(batch) {
33
+ logger.warn(`Session closed before inject — re-queuing ${batch.length} message(s) for next wake cycle`);
34
+ for (const msg of batch) {
35
+ this.deps.messageQueue.enqueue(msg);
36
+ }
37
+ }
38
+ async processBatch() {
39
+ const agentState = this.deps.getAgentState();
40
+ if (this.inFlight || !agentState.busy)
41
+ return;
42
+ this.inFlight = true;
43
+ const { session, config, ownerConfig, channelManager, messageQueue, activityTracker, } = this.deps;
44
+ try {
45
+ const batch = [];
46
+ while (!messageQueue.isEmpty()) {
47
+ const msg = messageQueue.dequeue();
48
+ if (msg)
49
+ batch.push(msg);
50
+ }
51
+ if (batch.length === 0)
52
+ return;
53
+ const last = batch[batch.length - 1];
54
+ agentState.lastMessageChannel = last.channel;
55
+ agentState.lastMessageSender = last.sender;
56
+ for (const msg of batch) {
57
+ logger.log("info", "incoming", `[interrupt] [${msg.channel}] ${msg.sender}: ${msg.text}`, {
58
+ channel: msg.channel,
59
+ sender: msg.sender,
60
+ text: msg.text,
61
+ id: msg.id,
62
+ interrupt: true,
63
+ });
64
+ }
65
+ const typingSent = new Set();
66
+ for (const msg of batch) {
67
+ const key = `${msg.channel}::${msg.sender}`;
68
+ if (typingSent.has(key))
69
+ continue;
70
+ typingSent.add(key);
71
+ channelManager.sendTypingIndicator(msg.channel, msg.sender).catch(() => { });
72
+ }
73
+ const fr = await Promise.race([
74
+ fastRespond({
75
+ systemPrompt: buildSystemPrompt(config, ownerConfig),
76
+ messages: batch,
77
+ activitySummary: activityTracker.getSummary(),
78
+ config,
79
+ }),
80
+ new Promise((resolve) => setTimeout(() => resolve(null), FAST_RESPONDER_TIMEOUT_MS)),
81
+ ]);
82
+ if (fr) {
83
+ const replyMap = new Map();
84
+ for (const r of fr.replies) {
85
+ replyMap.set(`${r.channel}::${r.sender}`, r.reply);
86
+ }
87
+ const sent = new Set();
88
+ for (const msg of batch) {
89
+ const key = `${msg.channel}::${msg.sender}`;
90
+ if (sent.has(key))
91
+ continue;
92
+ sent.add(key);
93
+ const reply = replyMap.get(key);
94
+ if (!reply)
95
+ continue;
96
+ try {
97
+ await channelManager.sendMessage(msg.channel, msg.sender, reply);
98
+ }
99
+ catch (sendErr) {
100
+ logger.warn(`Failed to send fast response: ${sendErr instanceof Error ? sendErr.message : String(sendErr)}`);
101
+ }
102
+ }
103
+ logger.log("info", "fast_response", `Replied to ${sent.size} recipient(s) for ${batch.length} message(s)`, {
104
+ messageCount: batch.length,
105
+ recipientCount: sent.size,
106
+ needsPrimaryAction: fr.needsPrimaryAction,
107
+ });
108
+ if (fr.needsPrimaryAction) {
109
+ const briefingBlocks = buildInterruptWithBriefing({
110
+ messages: batch,
111
+ fastResponse: fr,
112
+ });
113
+ if (!session.injectMessage(briefingBlocks)) {
114
+ this.requeue(batch);
115
+ }
116
+ }
117
+ else {
118
+ logger.log("info", "fast_response", `No follow-up needed for ${batch.length} message(s)`, {
119
+ messageCount: batch.length,
120
+ recipientCount: sent.size,
121
+ needsPrimaryAction: fr.needsPrimaryAction,
122
+ });
123
+ }
124
+ }
125
+ else {
126
+ const interruptBlocks = await buildInterruptContext({ messages: batch });
127
+ if (!session.injectMessage(interruptBlocks)) {
128
+ this.requeue(batch);
129
+ }
130
+ }
131
+ }
132
+ finally {
133
+ this.inFlight = false;
134
+ const agentStateNow = this.deps.getAgentState();
135
+ if (!messageQueue.isEmpty() && agentStateNow.busy) {
136
+ this.schedule();
137
+ }
138
+ }
139
+ }
140
+ }
141
+ //# sourceMappingURL=interrupt-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interrupt-handler.js","sourceRoot":"","sources":["../../src/agent/interrupt-handler.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,6 @@
1
- import type { VisionClawConfig, OwnerConfig } from "../config/types.js";
2
- import { MessageQueue } from "../channels/queue.js";
3
- import { ChannelManager } from "../channels/manager.js";
4
- import { ActivityTracker } from "./activity-tracker.js";
5
- /** Shared state visible to tools (e.g. notify_user needs channel access) */
6
- export interface AgentState {
7
- config: VisionClawConfig;
8
- ownerConfig: OwnerConfig;
9
- channelManager: ChannelManager;
10
- messageQueue: MessageQueue;
11
- activityTracker: ActivityTracker;
12
- busy: boolean;
13
- stopRequested: boolean;
14
- requestStop: () => void;
15
- lastMessageChannel?: string;
16
- lastMessageSender?: string;
17
- consoleUrl?: string;
18
- }
19
- export declare function getAgentState(): AgentState;
1
+ import type { VisionClawConfig } from "../config/types.js";
2
+ export type { AgentState } from "./state.js";
3
+ export { getAgentState } from "./state.js";
20
4
  /**
21
5
  * Main agent loop. This is the entry point that runs forever.
22
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMxE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAQxD,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAiFD;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CAivBf"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAoB3D,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CA+Pf"}