visionclaw 0.1.44 → 0.1.46
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/CHANGELOG.md +30 -0
- package/dist/agent/context.d.ts +4 -0
- package/dist/agent/context.d.ts.map +1 -1
- package/dist/agent/context.js +14 -2
- package/dist/agent/context.js.map +1 -1
- package/dist/agent/fast-responder.d.ts.map +1 -1
- package/dist/agent/fast-responder.js +1 -0
- package/dist/agent/fast-responder.js.map +1 -1
- package/dist/agent/interrupt-handler.d.ts +8 -0
- package/dist/agent/interrupt-handler.d.ts.map +1 -1
- package/dist/agent/interrupt-handler.js +21 -4
- package/dist/agent/interrupt-handler.js.map +1 -1
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +138 -73
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/session.d.ts +18 -6
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +28 -29
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/stream-handler.d.ts +2 -1
- package/dist/agent/stream-handler.d.ts.map +1 -1
- package/dist/agent/stream-handler.js +39 -6
- package/dist/agent/stream-handler.js.map +1 -1
- package/dist/agent/system-prompt.d.ts.map +1 -1
- package/dist/agent/system-prompt.js +15 -0
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/channels/interface.d.ts +10 -0
- package/dist/channels/interface.d.ts.map +1 -1
- package/dist/channels/manager.d.ts.map +1 -1
- package/dist/channels/manager.js +3 -0
- package/dist/channels/manager.js.map +1 -1
- package/dist/channels/telegram.d.ts.map +1 -1
- package/dist/channels/telegram.js +13 -0
- package/dist/channels/telegram.js.map +1 -1
- package/dist/config/index.d.ts +3 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +31 -9
- package/dist/config/index.js.map +1 -1
- package/dist/config/types.d.ts +1 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +1 -0
- package/dist/config/types.js.map +1 -1
- package/dist/obs/console/ui.js +2 -2
- package/dist/obs/server.d.ts.map +1 -1
- package/dist/obs/server.js +58 -1
- package/dist/obs/server.js.map +1 -1
- package/dist/obs/ui.d.ts.map +1 -1
- package/dist/obs/ui.js +184 -3
- package/dist/obs/ui.js.map +1 -1
- package/dist/onboarding/macos-permissions.d.ts +8 -0
- package/dist/onboarding/macos-permissions.d.ts.map +1 -1
- package/dist/onboarding/macos-permissions.js +44 -0
- package/dist/onboarding/macos-permissions.js.map +1 -1
- package/dist/onboarding/onboarding-session.d.ts.map +1 -1
- package/dist/onboarding/onboarding-session.js +2 -1
- package/dist/onboarding/onboarding-session.js.map +1 -1
- package/dist/onboarding/onboarding-tools.d.ts +1 -0
- package/dist/onboarding/onboarding-tools.d.ts.map +1 -1
- package/dist/onboarding/onboarding-tools.js +6 -0
- package/dist/onboarding/onboarding-tools.js.map +1 -1
- package/dist/onboarding/set-owner.d.ts.map +1 -1
- package/dist/onboarding/set-owner.js +1 -0
- package/dist/onboarding/set-owner.js.map +1 -1
- package/dist/onboarding/telegram-onboarding.d.ts.map +1 -1
- package/dist/onboarding/telegram-onboarding.js +1 -0
- package/dist/onboarding/telegram-onboarding.js.map +1 -1
- package/dist/tools/index.d.ts +3 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -1
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,33 @@
|
|
|
1
|
+
## [0.1.46](https://github.com/babelcloud/visionclaw/compare/v0.1.45...v0.1.46) (2026-02-27)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* enhance error reporting in processAgentStream and simplify prompt length check ([1c76522](https://github.com/babelcloud/visionclaw/commit/1c76522d0d6a1dacb0bdc823c79b2db9ef1dcdc9))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* add GitHub CLI installation and authentication checks ([bf341c2](https://github.com/babelcloud/visionclaw/commit/bf341c262bf4c51e0c5e20edc61f9e4ce9e13889))
|
|
12
|
+
* enhance logs UI with raw view toggle and formatting ([5cc784e](https://github.com/babelcloud/visionclaw/commit/5cc784e2f59d07ace792945306a1d220249d8f13))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
## [0.1.45](https://github.com/babelcloud/visionclaw/compare/v0.1.44...v0.1.45) (2026-02-27)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Bug Fixes
|
|
20
|
+
|
|
21
|
+
* update favicon URLs in UI components ([aed0184](https://github.com/babelcloud/visionclaw/commit/aed0184e359a39e430d968a3cc81bf27b500c0e6))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Features
|
|
25
|
+
|
|
26
|
+
* add configuration endpoint and UI for enhanced settings management ([21dc585](https://github.com/babelcloud/visionclaw/commit/21dc58539ca6945ce941ff8f4de9ec322586aa27))
|
|
27
|
+
* implement dual-session architecture for enhanced task management ([810dba6](https://github.com/babelcloud/visionclaw/commit/810dba622b0677ee69c73fcdf99a89b12c52ee3c))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
1
31
|
## [0.1.44](https://github.com/babelcloud/visionclaw/compare/v0.1.43...v0.1.44) (2026-02-27)
|
|
2
32
|
|
|
3
33
|
|
package/dist/agent/context.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { VisionClawConfig, OwnerConfig } from "../config/types.js";
|
|
|
2
2
|
import type { CommandMessage } from "../channels/interface.js";
|
|
3
3
|
import type { FastResponse } from "./fast-responder.js";
|
|
4
4
|
import type { VersionCheckResult } from "../utils/version-check.js";
|
|
5
|
+
import type { SessionMode } from "./mailbox.js";
|
|
5
6
|
/**
|
|
6
7
|
* A content block in a multimodal user message.
|
|
7
8
|
* Matches the Anthropic Messages API content block types.
|
|
@@ -39,6 +40,9 @@ export declare function buildWakeContext(options: {
|
|
|
39
40
|
calendarSummary: string;
|
|
40
41
|
screenshot?: ScreenshotRef;
|
|
41
42
|
versionUpdate?: VersionCheckResult;
|
|
43
|
+
activeSession?: SessionMode;
|
|
44
|
+
sessionMemos?: string | null;
|
|
45
|
+
codingSessionStatus?: string | null;
|
|
42
46
|
}): Promise<ContentBlock[]>;
|
|
43
47
|
/**
|
|
44
48
|
* Build context for an interrupt message — a new user message that arrives
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD;;;GAGG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IACE,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EACF;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACzD;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAsED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAuF1B;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAoB1B;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,YAAY,EAAE,CAuCjB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,YAAY,EAAE,CAqBjB"}
|
package/dist/agent/context.js
CHANGED
|
@@ -68,13 +68,25 @@ async function emitMessageBlocks(msg, blocks) {
|
|
|
68
68
|
* All images are resized to fit Claude's vision constraints.
|
|
69
69
|
*/
|
|
70
70
|
export async function buildWakeContext(options) {
|
|
71
|
-
const { trigger, messages, calendarSummary, screenshot, versionUpdate } = options;
|
|
71
|
+
const { trigger, messages, calendarSummary, screenshot, versionUpdate, activeSession, sessionMemos, codingSessionStatus, } = options;
|
|
72
72
|
const now = new Date().toLocaleString();
|
|
73
73
|
const blocks = [];
|
|
74
|
-
// --- Header: wake event + calendar ---
|
|
74
|
+
// --- Header: wake event + session info + calendar ---
|
|
75
75
|
const header = [];
|
|
76
76
|
header.push(`[Wake Event] trigger=${trigger} time=${now}`);
|
|
77
|
+
if (activeSession) {
|
|
78
|
+
header.push(`[Active session: ${activeSession}]`);
|
|
79
|
+
}
|
|
77
80
|
header.push("");
|
|
81
|
+
if (sessionMemos) {
|
|
82
|
+
header.push(sessionMemos);
|
|
83
|
+
header.push("");
|
|
84
|
+
}
|
|
85
|
+
if (codingSessionStatus && activeSession === "general") {
|
|
86
|
+
header.push(`## Active Coding Task`);
|
|
87
|
+
header.push(codingSessionStatus);
|
|
88
|
+
header.push("");
|
|
89
|
+
}
|
|
78
90
|
if (calendarSummary) {
|
|
79
91
|
header.push("## Upcoming Calendar Events");
|
|
80
92
|
header.push(calendarSummary);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fast-responder.d.ts","sourceRoot":"","sources":["../../src/agent/fast-responder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAgB3D,QAAA,MAAM,kBAAkB;;;;;;;;iBAiBtB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"fast-responder.d.ts","sourceRoot":"","sources":["../../src/agent/fast-responder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAgB3D,QAAA,MAAM,kBAAkB;;;;;;;;iBAiBtB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAiF/B"}
|
|
@@ -71,6 +71,7 @@ export async function fastRespond(options) {
|
|
|
71
71
|
max_tokens: MAX_TOKENS,
|
|
72
72
|
output_config: {
|
|
73
73
|
format: zodOutputFormat(FastResponseSchema),
|
|
74
|
+
effort: "low",
|
|
74
75
|
},
|
|
75
76
|
system: systemPrompt + [
|
|
76
77
|
`Because you are currently working on a task, this is a side process that you should handle the incoming messages as quickly as possible.`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fast-responder.js","sourceRoot":"","sources":["../../src/agent/fast-responder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"fast-responder.js","sourceRoot":"","sources":["../../src/agent/fast-responder.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,12 @@ import type { VisionClawConfig, OwnerConfig } from "../config/types.js";
|
|
|
2
2
|
import type { ChannelManager } from "../channels/manager.js";
|
|
3
3
|
import type { MessageQueue } from "../channels/queue.js";
|
|
4
4
|
import type { AgentSession } from "./session.js";
|
|
5
|
+
import type { SessionManager } from "./session-manager.js";
|
|
5
6
|
import type { ActivityTracker } from "./activity-tracker.js";
|
|
6
7
|
import type { AgentState } from "./state.js";
|
|
7
8
|
export interface InterruptHandlerDeps {
|
|
8
9
|
session: AgentSession;
|
|
10
|
+
sessionManager: SessionManager;
|
|
9
11
|
config: VisionClawConfig;
|
|
10
12
|
ownerConfig: OwnerConfig;
|
|
11
13
|
channelManager: ChannelManager;
|
|
@@ -17,6 +19,7 @@ export declare class InterruptHandler {
|
|
|
17
19
|
private deps;
|
|
18
20
|
private timer;
|
|
19
21
|
private inFlight;
|
|
22
|
+
private lastInjectedBatch;
|
|
20
23
|
constructor(deps: InterruptHandlerDeps);
|
|
21
24
|
/**
|
|
22
25
|
* Called from the channelManager "message" event when the agent is busy.
|
|
@@ -25,6 +28,11 @@ export declare class InterruptHandler {
|
|
|
25
28
|
schedule(): void;
|
|
26
29
|
dispose(): void;
|
|
27
30
|
private requeue;
|
|
31
|
+
/**
|
|
32
|
+
* If injected messages were orphaned (accepted but never delivered to SDK),
|
|
33
|
+
* re-queue the original CommandMessages so they're handled on the next wake.
|
|
34
|
+
*/
|
|
35
|
+
requeueIfOrphaned(): void;
|
|
28
36
|
private processBatch;
|
|
29
37
|
}
|
|
30
38
|
//# sourceMappingURL=interrupt-handler.d.ts.map
|
|
@@ -1 +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;AAU7C,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;
|
|
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,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAU7C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,cAAc,EAAE,cAAc,CAAC;IAC/B,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;IACzB,OAAO,CAAC,iBAAiB,CAAiC;gBAE9C,IAAI,EAAE,oBAAoB;IAItC;;;OAGG;IACH,QAAQ,IAAI,IAAI;IAQhB,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,OAAO;IAOf;;;OAGG;IACH,iBAAiB,IAAI,IAAI;YAOX,YAAY;CAoH3B"}
|
|
@@ -3,12 +3,13 @@ import { buildInterruptContext, buildInterruptWithBriefing } from "./context.js"
|
|
|
3
3
|
import { fastRespond } from "./fast-responder.js";
|
|
4
4
|
import { transcribeVoiceMessages } from "../utils/transcribe.js";
|
|
5
5
|
import { logger } from "../logger.js";
|
|
6
|
-
const INTERRUPT_DEBOUNCE_MS =
|
|
6
|
+
const INTERRUPT_DEBOUNCE_MS = 3000;
|
|
7
7
|
const FAST_RESPONDER_TIMEOUT_MS = 6000;
|
|
8
8
|
export class InterruptHandler {
|
|
9
9
|
deps;
|
|
10
10
|
timer = null;
|
|
11
11
|
inFlight = false;
|
|
12
|
+
lastInjectedBatch = null;
|
|
12
13
|
constructor(deps) {
|
|
13
14
|
this.deps = deps;
|
|
14
15
|
}
|
|
@@ -36,12 +37,22 @@ export class InterruptHandler {
|
|
|
36
37
|
this.deps.messageQueue.enqueue(msg);
|
|
37
38
|
}
|
|
38
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* If injected messages were orphaned (accepted but never delivered to SDK),
|
|
42
|
+
* re-queue the original CommandMessages so they're handled on the next wake.
|
|
43
|
+
*/
|
|
44
|
+
requeueIfOrphaned() {
|
|
45
|
+
if (this.lastInjectedBatch) {
|
|
46
|
+
this.requeue(this.lastInjectedBatch);
|
|
47
|
+
this.lastInjectedBatch = null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
39
50
|
async processBatch() {
|
|
40
51
|
const agentState = this.deps.getAgentState();
|
|
41
52
|
if (this.inFlight || !agentState.busy)
|
|
42
53
|
return;
|
|
43
54
|
this.inFlight = true;
|
|
44
|
-
const {
|
|
55
|
+
const { sessionManager, config, ownerConfig, channelManager, messageQueue, activityTracker, } = this.deps;
|
|
45
56
|
try {
|
|
46
57
|
const batch = [];
|
|
47
58
|
while (!messageQueue.isEmpty()) {
|
|
@@ -114,7 +125,10 @@ export class InterruptHandler {
|
|
|
114
125
|
messages: batch,
|
|
115
126
|
fastResponse: fr,
|
|
116
127
|
});
|
|
117
|
-
if (
|
|
128
|
+
if (sessionManager.activeSession.injectMessage(briefingBlocks)) {
|
|
129
|
+
this.lastInjectedBatch = batch;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
118
132
|
this.requeue(batch);
|
|
119
133
|
}
|
|
120
134
|
}
|
|
@@ -128,7 +142,10 @@ export class InterruptHandler {
|
|
|
128
142
|
}
|
|
129
143
|
else {
|
|
130
144
|
const interruptBlocks = await buildInterruptContext({ messages: batch });
|
|
131
|
-
if (
|
|
145
|
+
if (sessionManager.activeSession.injectMessage(interruptBlocks)) {
|
|
146
|
+
this.lastInjectedBatch = batch;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
132
149
|
this.requeue(batch);
|
|
133
150
|
}
|
|
134
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interrupt-handler.js","sourceRoot":"","sources":["../../src/agent/interrupt-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interrupt-handler.js","sourceRoot":"","sources":["../../src/agent/interrupt-handler.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/loop.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AA+B3C;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CAibf"}
|
package/dist/agent/loop.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
2
|
-
import {
|
|
2
|
+
import { SessionManager } from "./session-manager.js";
|
|
3
3
|
import { buildWakeContext } from "./context.js";
|
|
4
4
|
import { createToolServer } from "../tools/index.js";
|
|
5
5
|
import { MessageQueue } from "../channels/queue.js";
|
|
6
6
|
import { ChannelManager } from "../channels/manager.js";
|
|
7
7
|
import { ActivityTracker } from "./activity-tracker.js";
|
|
8
8
|
import { shouldNotifyUpdate } from "../utils/version-check.js";
|
|
9
|
-
import { loadOwnerConfig, saveOwnerConfig } from "../config/index.js";
|
|
9
|
+
import { loadOwnerConfig, saveOwnerConfig, getScreenshotsDir } from "../config/index.js";
|
|
10
10
|
import { logger } from "../logger.js";
|
|
11
11
|
import { initAgentState } from "./state.js";
|
|
12
12
|
import { runOnboardingGate } from "./onboarding-gate.js";
|
|
@@ -35,9 +35,7 @@ function classifyError(err) {
|
|
|
35
35
|
}
|
|
36
36
|
function isPromptTooLong(err) {
|
|
37
37
|
const msg = err instanceof Error ? err.message : String(err);
|
|
38
|
-
|
|
39
|
-
err.statusCode;
|
|
40
|
-
return status === 400 && PROMPT_TOO_LONG_PATTERNS.test(msg);
|
|
38
|
+
return PROMPT_TOO_LONG_PATTERNS.test(msg);
|
|
41
39
|
}
|
|
42
40
|
/**
|
|
43
41
|
* Main agent loop. This is the entry point that runs forever.
|
|
@@ -78,16 +76,18 @@ export async function startAgentLoop(config) {
|
|
|
78
76
|
logger.system(`Owner: ${ownerConfig.ownerName} <${ownerConfig.ownerEmail}>`);
|
|
79
77
|
logger.system(`Heartbeat interval: ${ownerConfig.heartbeatIntervalMs / 1000}s`);
|
|
80
78
|
logger.system("");
|
|
81
|
-
// Create the in-process MCP tool
|
|
82
|
-
const
|
|
79
|
+
// Create the in-process MCP tool servers (with and without dual-session)
|
|
80
|
+
const toolServerWithDual = createToolServer({ dualSession: true });
|
|
81
|
+
const toolServerWithoutDual = createToolServer({ dualSession: false });
|
|
83
82
|
const mcpServers = {
|
|
84
|
-
visionclaw: toolServer,
|
|
85
83
|
playwright: {
|
|
86
84
|
command: "npx",
|
|
87
85
|
args: [
|
|
88
86
|
"@playwright/mcp@latest",
|
|
89
87
|
"--cdp-endpoint",
|
|
90
88
|
process.env.PLAYWRIGHT_MCP_CDP_ENDPOINT ?? "http://127.0.0.1:9222",
|
|
89
|
+
"--output-dir",
|
|
90
|
+
getScreenshotsDir(),
|
|
91
91
|
],
|
|
92
92
|
},
|
|
93
93
|
};
|
|
@@ -97,12 +97,18 @@ export async function startAgentLoop(config) {
|
|
|
97
97
|
url: `https://mcp.serpapi.com/${config.serpApiKey}/mcp`,
|
|
98
98
|
};
|
|
99
99
|
}
|
|
100
|
-
const session = new
|
|
100
|
+
const session = new SessionManager(config, () => buildSystemPrompt(config, ownerConfig), mcpServers, {
|
|
101
|
+
dualSessionEnabled: ownerConfig.dualSessionEnabled,
|
|
102
|
+
toolServerWithDual,
|
|
103
|
+
toolServerWithoutDual,
|
|
104
|
+
});
|
|
105
|
+
logger.system(`Dual session: ${ownerConfig.dualSessionEnabled ? "enabled" : "disabled"}`);
|
|
101
106
|
requestSessionStop = () => session.requestStop();
|
|
102
107
|
// --- Interrupt handling ---
|
|
103
108
|
let wakeResolver = null;
|
|
104
109
|
const interruptHandler = new InterruptHandler({
|
|
105
|
-
session,
|
|
110
|
+
session: session.activeSession,
|
|
111
|
+
sessionManager: session,
|
|
106
112
|
config,
|
|
107
113
|
ownerConfig,
|
|
108
114
|
channelManager,
|
|
@@ -162,6 +168,19 @@ export async function startAgentLoop(config) {
|
|
|
162
168
|
logger.warn(`Failed to send console URL: ${err instanceof Error ? err.message : String(err)}`);
|
|
163
169
|
});
|
|
164
170
|
});
|
|
171
|
+
channelManager.on("dual_session_request", (req) => {
|
|
172
|
+
const oldValue = ownerConfig.dualSessionEnabled;
|
|
173
|
+
ownerConfig.dualSessionEnabled = req.enabled;
|
|
174
|
+
saveOwnerConfig(ownerConfig);
|
|
175
|
+
session.setDualSessionEnabled(req.enabled);
|
|
176
|
+
const status = req.enabled ? "enabled" : "disabled";
|
|
177
|
+
logger.system(`Dual session ${status} by ${req.sender} via ${req.channel} (was: ${oldValue ? "enabled" : "disabled"})`);
|
|
178
|
+
channelManager
|
|
179
|
+
.sendMessage(req.channel, req.sender, `Dual session mode ${status}.`)
|
|
180
|
+
.catch((err) => {
|
|
181
|
+
logger.warn(`Failed to send dual-session confirmation: ${err instanceof Error ? err.message : String(err)}`);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
165
184
|
logger.system("Agent loop started. Waiting for messages or heartbeat...");
|
|
166
185
|
// --- Error handling / retry state ---
|
|
167
186
|
const MAX_RETRIES_BEFORE_NOTIFY = 5;
|
|
@@ -234,38 +253,23 @@ export async function startAgentLoop(config) {
|
|
|
234
253
|
: "heartbeat";
|
|
235
254
|
activityTracker.startTask(taskDesc);
|
|
236
255
|
logger.wake(trigger, messages.length);
|
|
256
|
+
if (session.dualSessionEnabled) {
|
|
257
|
+
logger.system(`Active session: ${session.activeMode}`);
|
|
258
|
+
}
|
|
237
259
|
if (trigger === "heartbeat") {
|
|
238
260
|
try {
|
|
239
|
-
|
|
240
|
-
?? (ownerConfig.telegramChatId !== undefined ? "telegram" : undefined);
|
|
241
|
-
const notifySender = agentState.lastMessageSender
|
|
242
|
-
?? (ownerConfig.telegramChatId !== undefined ? String(ownerConfig.telegramChatId) : undefined);
|
|
243
|
-
const sendCompactNotice = async (text) => {
|
|
244
|
-
if (notifyChannel && notifySender) {
|
|
245
|
-
await channelManager
|
|
246
|
-
.sendMessage(notifyChannel, notifySender, text)
|
|
247
|
-
.catch((err) => {
|
|
248
|
-
logger.warn(`Failed to send compaction notification: ${err instanceof Error ? err.message : String(err)}`);
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
};
|
|
252
|
-
await session.maybeCompactByTokens({
|
|
253
|
-
onBeforeCompact: () => sendCompactNotice("Context window is getting full — compacting session memory, it may take a few minutes. I may lose some older details."),
|
|
254
|
-
onAfterCompact: () => sendCompactNotice("Session memory compacted. Ready to continue."),
|
|
255
|
-
});
|
|
261
|
+
await session.activeSession.maybeCompactByTokens();
|
|
256
262
|
}
|
|
257
263
|
catch (err) {
|
|
258
264
|
logger.warn(`Compaction request failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
259
265
|
}
|
|
260
266
|
}
|
|
261
267
|
for (const msg of messages) {
|
|
262
|
-
|
|
263
|
-
logger.log("info", "incoming", `[${msg.channel}]${isVoice ? " [voice]" : ""} ${msg.sender}: ${msg.text}`, {
|
|
268
|
+
logger.log("info", "incoming", `[${msg.channel}] ${msg.sender}: ${msg.text}`, {
|
|
264
269
|
channel: msg.channel,
|
|
265
270
|
sender: msg.sender,
|
|
266
271
|
text: msg.text,
|
|
267
272
|
id: msg.id,
|
|
268
|
-
voice: isVoice,
|
|
269
273
|
});
|
|
270
274
|
}
|
|
271
275
|
// --- Gather context ---
|
|
@@ -278,63 +282,124 @@ export async function startAgentLoop(config) {
|
|
|
278
282
|
calendarSummary,
|
|
279
283
|
screenshot,
|
|
280
284
|
versionUpdate,
|
|
285
|
+
activeSession: session.dualSessionEnabled ? session.activeMode : undefined,
|
|
286
|
+
sessionMemos: session.consumeMemosForActive(),
|
|
287
|
+
codingSessionStatus: session.getCodingSessionStatus(),
|
|
281
288
|
});
|
|
289
|
+
let pendingMemoAck = true;
|
|
282
290
|
logger.sendMultimodal(contentBlocks);
|
|
283
291
|
if (trigger === "message") {
|
|
284
|
-
// send typing indicator to all channels
|
|
285
292
|
for (const msg of messages) {
|
|
286
293
|
channelManager.sendTypingIndicator(msg.channel, msg.sender).catch(() => { });
|
|
287
294
|
}
|
|
288
295
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
session.
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
296
|
+
// Session switch loop: if the agent calls switch_session, we close the
|
|
297
|
+
// current stream, switch sessions, and re-enter with a new stream.
|
|
298
|
+
let didSwitch = false;
|
|
299
|
+
let switchForwardMessage = "";
|
|
300
|
+
const currentContentBlocks = contentBlocks;
|
|
301
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- intentional infinite switch loop
|
|
302
|
+
while (true) {
|
|
303
|
+
const activeSession = session.activeSession;
|
|
304
|
+
try {
|
|
305
|
+
let messageContent;
|
|
306
|
+
if (didSwitch) {
|
|
307
|
+
const switchMemos = session.consumeMemosForActive();
|
|
308
|
+
const switchParts = [];
|
|
309
|
+
switchParts.push(`[Session Switch] time=${new Date().toLocaleString()} active_session=${session.activeMode}`);
|
|
310
|
+
if (switchMemos) {
|
|
311
|
+
switchParts.push("");
|
|
312
|
+
switchParts.push(switchMemos);
|
|
313
|
+
}
|
|
314
|
+
const codingStatus = session.getCodingSessionStatus();
|
|
315
|
+
if (codingStatus && session.activeMode === "general") {
|
|
316
|
+
switchParts.push("");
|
|
317
|
+
switchParts.push(`## Active Coding Task`);
|
|
318
|
+
switchParts.push(codingStatus);
|
|
319
|
+
}
|
|
320
|
+
if (calendarSummary) {
|
|
321
|
+
switchParts.push("");
|
|
322
|
+
switchParts.push("## Upcoming Calendar Events");
|
|
323
|
+
switchParts.push(calendarSummary);
|
|
324
|
+
}
|
|
325
|
+
if (switchForwardMessage) {
|
|
326
|
+
switchParts.push("");
|
|
327
|
+
switchParts.push(switchForwardMessage);
|
|
328
|
+
}
|
|
329
|
+
messageContent = [
|
|
330
|
+
{ type: "text", text: switchParts.join("\n") },
|
|
331
|
+
];
|
|
332
|
+
didSwitch = false;
|
|
333
|
+
switchForwardMessage = "";
|
|
334
|
+
pendingMemoAck = true;
|
|
311
335
|
}
|
|
312
|
-
|
|
313
|
-
|
|
336
|
+
else {
|
|
337
|
+
messageContent = currentContentBlocks;
|
|
314
338
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
await channelManager.sendMessage(agentState.lastMessageChannel, agentState.lastMessageSender, notice);
|
|
324
|
-
}
|
|
339
|
+
const queryStream = activeSession.sendAndStream(messageContent);
|
|
340
|
+
if (pendingMemoAck) {
|
|
341
|
+
session.ackMemosForActive();
|
|
342
|
+
pendingMemoAck = false;
|
|
343
|
+
}
|
|
344
|
+
await processAgentStream(queryStream, activeSession, activityTracker, session.dualSessionEnabled ? session : undefined);
|
|
345
|
+
if (activeSession.hasOrphanedInjections) {
|
|
346
|
+
interruptHandler.requeueIfOrphaned();
|
|
325
347
|
}
|
|
326
|
-
|
|
327
|
-
|
|
348
|
+
const switchResult = session.executePendingSwitch();
|
|
349
|
+
if (switchResult) {
|
|
350
|
+
didSwitch = true;
|
|
351
|
+
switchForwardMessage = switchResult.forwardMessage;
|
|
352
|
+
logger.system(`Re-entering wake cycle for ${switchResult.target} session`);
|
|
353
|
+
continue;
|
|
328
354
|
}
|
|
329
355
|
consecutiveErrors = 0;
|
|
330
|
-
await new Promise((r) => setTimeout(r, FATAL_SLEEP_MS));
|
|
331
356
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
357
|
+
catch (err) {
|
|
358
|
+
activeSession.closeInput();
|
|
359
|
+
if (session.isStopRequested()) {
|
|
360
|
+
logger.system("Agent stopped by user request");
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
364
|
+
const category = classifyError(err);
|
|
365
|
+
consecutiveErrors++;
|
|
366
|
+
logger.err(`Agent loop error (${category}, attempt ${consecutiveErrors}): ${errMsg}`, { stack: err instanceof Error ? err.stack : undefined });
|
|
367
|
+
if (isPromptTooLong(err) && session.activeSession.getSessionId()) {
|
|
368
|
+
logger.system("Prompt too long — forcing compaction before retry");
|
|
369
|
+
try {
|
|
370
|
+
await session.activeSession.requestCompaction();
|
|
371
|
+
consecutiveErrors = 0;
|
|
372
|
+
continue;
|
|
373
|
+
}
|
|
374
|
+
catch (compactErr) {
|
|
375
|
+
logger.warn(`Emergency compaction failed: ${compactErr instanceof Error ? compactErr.message : String(compactErr)}`);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
if (category === "fatal" || consecutiveErrors >= MAX_RETRIES_BEFORE_NOTIFY) {
|
|
379
|
+
const sleepMin = FATAL_SLEEP_MS / 60_000;
|
|
380
|
+
const notice = category === "fatal"
|
|
381
|
+
? `Agent hit a fatal error: ${errMsg}. Sleeping ${sleepMin}m before retrying.`
|
|
382
|
+
: `Agent failed ${consecutiveErrors} times in a row: ${errMsg}. Sleeping ${sleepMin}m before retrying.`;
|
|
383
|
+
try {
|
|
384
|
+
if (agentState.lastMessageChannel && agentState.lastMessageSender) {
|
|
385
|
+
await channelManager.sendMessage(agentState.lastMessageChannel, agentState.lastMessageSender, notice);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
catch {
|
|
389
|
+
logger.warn("Failed to send error notification to owner");
|
|
390
|
+
}
|
|
391
|
+
consecutiveErrors = 0;
|
|
392
|
+
await new Promise((r) => setTimeout(r, FATAL_SLEEP_MS));
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
const delay = Math.min(BASE_DELAY_MS * 2 ** (consecutiveErrors - 1), MAX_DELAY_MS);
|
|
396
|
+
logger.system(`Retrying in ${(delay / 1000).toFixed(0)}s (attempt ${consecutiveErrors})...`);
|
|
397
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
398
|
+
}
|
|
399
|
+
}
|
|
336
400
|
}
|
|
337
|
-
|
|
401
|
+
break;
|
|
402
|
+
} // end switch loop
|
|
338
403
|
}
|
|
339
404
|
}
|
|
340
405
|
//# sourceMappingURL=loop.js.map
|