visionclaw 0.1.43 → 0.1.45
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 +24 -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 +145 -60
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/mailbox.d.ts +3 -1
- package/dist/agent/mailbox.d.ts.map +1 -1
- package/dist/agent/mailbox.js +6 -4
- package/dist/agent/mailbox.js.map +1 -1
- package/dist/agent/session-manager.d.ts +16 -7
- package/dist/agent/session-manager.d.ts.map +1 -1
- package/dist/agent/session-manager.js +51 -13
- package/dist/agent/session-manager.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 +24 -2
- 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 +143 -2
- package/dist/obs/ui.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/dist/tools/switch-session.d.ts.map +1 -1
- package/dist/tools/switch-session.js +12 -0
- package/dist/tools/switch-session.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
## [0.1.45](https://github.com/babelcloud/visionclaw/compare/v0.1.44...v0.1.45) (2026-02-27)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* update favicon URLs in UI components ([aed0184](https://github.com/babelcloud/visionclaw/commit/aed0184e359a39e430d968a3cc81bf27b500c0e6))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* add configuration endpoint and UI for enhanced settings management ([21dc585](https://github.com/babelcloud/visionclaw/commit/21dc58539ca6945ce941ff8f4de9ec322586aa27))
|
|
12
|
+
* implement dual-session architecture for enhanced task management ([810dba6](https://github.com/babelcloud/visionclaw/commit/810dba622b0677ee69c73fcdf99a89b12c52ee3c))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
## [0.1.44](https://github.com/babelcloud/visionclaw/compare/v0.1.43...v0.1.44) (2026-02-27)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* improve error handling for prompt length in agent loop ([d3307b4](https://github.com/babelcloud/visionclaw/commit/d3307b48d9395a0cdbe656eb4beadd1287f33abd))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
1
25
|
## [0.1.43](https://github.com/babelcloud/visionclaw/compare/v0.1.42...v0.1.43) (2026-02-26)
|
|
2
26
|
|
|
3
27
|
|
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":"AAKA,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAsBtC;;;GAGG;AACH,KAAK,UAAU,sBAAsB,CAAC,GAIrC;IACC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO;YACL,IAAI,EAAE,OAAO;YACb,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAgB;gBACxD,IAAI,EAAE,OAAO;aACd;SACF,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,MAAM,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,OAAO,CAAC,QAAuB;oBAC3C,IAAI,EAAE,OAAO,CAAC,MAAM;iBACrB;aACF,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,sDAAsD,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7E,OAAO;YACL,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE;SACtC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,iBAAiB,CAC9B,GAAmB,EACnB,MAAsB;IAEtB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,UAAU,GAAG,CAAC,MAAM,OAAO,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;IACvE,IAAI,GAAG,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,IAAI,YAAY,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEtD,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;YAAE,SAAS;QACnC,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAUtC;IACC,MAAM,EACJ,OAAO,EACP,QAAQ,EACR,eAAe,EACf,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,mBAAmB,GACpB,GAAG,OAAO,CAAC;IACZ,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;IAExC,MAAM,MAAM,GAAmB,EAAE,CAAC;IAElC,uDAAuD;IACvD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,wBAAwB,OAAO,SAAS,GAAG,EAAE,CAAC,CAAC;IAC3D,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,oBAAoB,aAAa,GAAG,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,mBAAmB,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,aAAa,EAAE,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CACT,6CAA6C,aAAa,CAAC,cAAc,MAAM,aAAa,CAAC,aAAa,EAAE,CAC7G,CAAC;QACF,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CACT,oLAAoL,CACrL,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEvD,mEAAmE;IACnE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,6BAA6B;IAC7B,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,OAAO;YACb,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,WAAW;gBACvB,IAAI,EAAE,UAAU,CAAC,MAAM;aACxB;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,oGAAoG;KAC3G,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAE3C;IACC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;IAExC,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,0CAA0C,GAAG,yBAAyB;KAC7E,CAAC,CAAC;IAEH,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,6EAA6E;KACpF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAG1C;IACC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,sCAAsC,GAAG,EAAE,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CACR,MAAM,GAAG,CAAC,OAAO,UAAU,GAAG,CAAC,MAAM,OAAO,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,IAAI,EAAE,CACzE,CAAC;QACF,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,IAAI,YAAY,CAAC;gBAC1D,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnG,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC3D,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IAC7D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,uBAAuB,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,YAAY,CAAC,kBAAkB,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CACR,4EAA4E,CAC7E,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAK1C;IACC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC;IAC9E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;IAExC,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,wCAAwC,GAAG;;iBAEtC,WAAW,CAAC,SAAS,KAAK,MAAM,CAAC,KAAK;YAC3C,OAAO,CAAC,QAAQ;;;EAG1B,eAAe,IAAI,qBAAqB;;;EAGxC,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,+BAA+B,CAAC,CAAC,CAAC,sBAAsB;;wEAElC;SACnE;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -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;AAkC3C;;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";
|
|
@@ -16,6 +16,7 @@ import { gatherWakeContext } from "./gather-context.js";
|
|
|
16
16
|
export { getAgentState } from "./state.js";
|
|
17
17
|
const FATAL_PATTERNS = /\b(401|403|authentication|billing|unauthorized|forbidden|api.?key)\b/i;
|
|
18
18
|
const RETRYABLE_PATTERNS = /\b(ECONNREFUSED|ETIMEDOUT|ENOTFOUND|EAI_AGAIN|ECONNRESET|fetch failed|socket hang up|429|529|rate.?limit|overloaded|throttl|timeout|50[0234]|service.?unavailable|bad.?gateway|internal.?server)\b/i;
|
|
19
|
+
const PROMPT_TOO_LONG_PATTERNS = /\b(prompt.?is.?too.?long|too.?many.?tokens|context.?length.?exceeded|max.?tokens.?exceeded|input.?too.?long)\b/i;
|
|
19
20
|
function classifyError(err) {
|
|
20
21
|
const msg = err instanceof Error ? err.message : String(err);
|
|
21
22
|
const status = err.status ??
|
|
@@ -32,6 +33,12 @@ function classifyError(err) {
|
|
|
32
33
|
// fatal-like handling if the issue persists.
|
|
33
34
|
return "retryable";
|
|
34
35
|
}
|
|
36
|
+
function isPromptTooLong(err) {
|
|
37
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
38
|
+
const status = err.status ??
|
|
39
|
+
err.statusCode;
|
|
40
|
+
return status === 400 && PROMPT_TOO_LONG_PATTERNS.test(msg);
|
|
41
|
+
}
|
|
35
42
|
/**
|
|
36
43
|
* Main agent loop. This is the entry point that runs forever.
|
|
37
44
|
*/
|
|
@@ -71,16 +78,18 @@ export async function startAgentLoop(config) {
|
|
|
71
78
|
logger.system(`Owner: ${ownerConfig.ownerName} <${ownerConfig.ownerEmail}>`);
|
|
72
79
|
logger.system(`Heartbeat interval: ${ownerConfig.heartbeatIntervalMs / 1000}s`);
|
|
73
80
|
logger.system("");
|
|
74
|
-
// Create the in-process MCP tool
|
|
75
|
-
const
|
|
81
|
+
// Create the in-process MCP tool servers (with and without dual-session)
|
|
82
|
+
const toolServerWithDual = createToolServer({ dualSession: true });
|
|
83
|
+
const toolServerWithoutDual = createToolServer({ dualSession: false });
|
|
76
84
|
const mcpServers = {
|
|
77
|
-
visionclaw: toolServer,
|
|
78
85
|
playwright: {
|
|
79
86
|
command: "npx",
|
|
80
87
|
args: [
|
|
81
88
|
"@playwright/mcp@latest",
|
|
82
89
|
"--cdp-endpoint",
|
|
83
90
|
process.env.PLAYWRIGHT_MCP_CDP_ENDPOINT ?? "http://127.0.0.1:9222",
|
|
91
|
+
"--output-dir",
|
|
92
|
+
getScreenshotsDir(),
|
|
84
93
|
],
|
|
85
94
|
},
|
|
86
95
|
};
|
|
@@ -90,12 +99,18 @@ export async function startAgentLoop(config) {
|
|
|
90
99
|
url: `https://mcp.serpapi.com/${config.serpApiKey}/mcp`,
|
|
91
100
|
};
|
|
92
101
|
}
|
|
93
|
-
const session = new
|
|
102
|
+
const session = new SessionManager(config, () => buildSystemPrompt(config, ownerConfig), mcpServers, {
|
|
103
|
+
dualSessionEnabled: ownerConfig.dualSessionEnabled,
|
|
104
|
+
toolServerWithDual,
|
|
105
|
+
toolServerWithoutDual,
|
|
106
|
+
});
|
|
107
|
+
logger.system(`Dual session: ${ownerConfig.dualSessionEnabled ? "enabled" : "disabled"}`);
|
|
94
108
|
requestSessionStop = () => session.requestStop();
|
|
95
109
|
// --- Interrupt handling ---
|
|
96
110
|
let wakeResolver = null;
|
|
97
111
|
const interruptHandler = new InterruptHandler({
|
|
98
|
-
session,
|
|
112
|
+
session: session.activeSession,
|
|
113
|
+
sessionManager: session,
|
|
99
114
|
config,
|
|
100
115
|
ownerConfig,
|
|
101
116
|
channelManager,
|
|
@@ -155,6 +170,19 @@ export async function startAgentLoop(config) {
|
|
|
155
170
|
logger.warn(`Failed to send console URL: ${err instanceof Error ? err.message : String(err)}`);
|
|
156
171
|
});
|
|
157
172
|
});
|
|
173
|
+
channelManager.on("dual_session_request", (req) => {
|
|
174
|
+
const oldValue = ownerConfig.dualSessionEnabled;
|
|
175
|
+
ownerConfig.dualSessionEnabled = req.enabled;
|
|
176
|
+
saveOwnerConfig(ownerConfig);
|
|
177
|
+
session.setDualSessionEnabled(req.enabled);
|
|
178
|
+
const status = req.enabled ? "enabled" : "disabled";
|
|
179
|
+
logger.system(`Dual session ${status} by ${req.sender} via ${req.channel} (was: ${oldValue ? "enabled" : "disabled"})`);
|
|
180
|
+
channelManager
|
|
181
|
+
.sendMessage(req.channel, req.sender, `Dual session mode ${status}.`)
|
|
182
|
+
.catch((err) => {
|
|
183
|
+
logger.warn(`Failed to send dual-session confirmation: ${err instanceof Error ? err.message : String(err)}`);
|
|
184
|
+
});
|
|
185
|
+
});
|
|
158
186
|
logger.system("Agent loop started. Waiting for messages or heartbeat...");
|
|
159
187
|
// --- Error handling / retry state ---
|
|
160
188
|
const MAX_RETRIES_BEFORE_NOTIFY = 5;
|
|
@@ -227,38 +255,23 @@ export async function startAgentLoop(config) {
|
|
|
227
255
|
: "heartbeat";
|
|
228
256
|
activityTracker.startTask(taskDesc);
|
|
229
257
|
logger.wake(trigger, messages.length);
|
|
258
|
+
if (session.dualSessionEnabled) {
|
|
259
|
+
logger.system(`Active session: ${session.activeMode}`);
|
|
260
|
+
}
|
|
230
261
|
if (trigger === "heartbeat") {
|
|
231
262
|
try {
|
|
232
|
-
|
|
233
|
-
?? (ownerConfig.telegramChatId !== undefined ? "telegram" : undefined);
|
|
234
|
-
const notifySender = agentState.lastMessageSender
|
|
235
|
-
?? (ownerConfig.telegramChatId !== undefined ? String(ownerConfig.telegramChatId) : undefined);
|
|
236
|
-
const sendCompactNotice = async (text) => {
|
|
237
|
-
if (notifyChannel && notifySender) {
|
|
238
|
-
await channelManager
|
|
239
|
-
.sendMessage(notifyChannel, notifySender, text)
|
|
240
|
-
.catch((err) => {
|
|
241
|
-
logger.warn(`Failed to send compaction notification: ${err instanceof Error ? err.message : String(err)}`);
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
};
|
|
245
|
-
await session.maybeCompactByTokens({
|
|
246
|
-
onBeforeCompact: () => sendCompactNotice("Context window is getting full — compacting session memory, it may take a few minutes. I may lose some older details."),
|
|
247
|
-
onAfterCompact: () => sendCompactNotice("Session memory compacted. Ready to continue."),
|
|
248
|
-
});
|
|
263
|
+
await session.activeSession.maybeCompactByTokens();
|
|
249
264
|
}
|
|
250
265
|
catch (err) {
|
|
251
266
|
logger.warn(`Compaction request failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
252
267
|
}
|
|
253
268
|
}
|
|
254
269
|
for (const msg of messages) {
|
|
255
|
-
|
|
256
|
-
logger.log("info", "incoming", `[${msg.channel}]${isVoice ? " [voice]" : ""} ${msg.sender}: ${msg.text}`, {
|
|
270
|
+
logger.log("info", "incoming", `[${msg.channel}] ${msg.sender}: ${msg.text}`, {
|
|
257
271
|
channel: msg.channel,
|
|
258
272
|
sender: msg.sender,
|
|
259
273
|
text: msg.text,
|
|
260
274
|
id: msg.id,
|
|
261
|
-
voice: isVoice,
|
|
262
275
|
});
|
|
263
276
|
}
|
|
264
277
|
// --- Gather context ---
|
|
@@ -271,52 +284,124 @@ export async function startAgentLoop(config) {
|
|
|
271
284
|
calendarSummary,
|
|
272
285
|
screenshot,
|
|
273
286
|
versionUpdate,
|
|
287
|
+
activeSession: session.dualSessionEnabled ? session.activeMode : undefined,
|
|
288
|
+
sessionMemos: session.consumeMemosForActive(),
|
|
289
|
+
codingSessionStatus: session.getCodingSessionStatus(),
|
|
274
290
|
});
|
|
291
|
+
let pendingMemoAck = true;
|
|
275
292
|
logger.sendMultimodal(contentBlocks);
|
|
276
293
|
if (trigger === "message") {
|
|
277
|
-
// send typing indicator to all channels
|
|
278
294
|
for (const msg of messages) {
|
|
279
295
|
channelManager.sendTypingIndicator(msg.channel, msg.sender).catch(() => { });
|
|
280
296
|
}
|
|
281
297
|
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
session.
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
298
|
+
// Session switch loop: if the agent calls switch_session, we close the
|
|
299
|
+
// current stream, switch sessions, and re-enter with a new stream.
|
|
300
|
+
let didSwitch = false;
|
|
301
|
+
let switchForwardMessage = "";
|
|
302
|
+
const currentContentBlocks = contentBlocks;
|
|
303
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- intentional infinite switch loop
|
|
304
|
+
while (true) {
|
|
305
|
+
const activeSession = session.activeSession;
|
|
306
|
+
try {
|
|
307
|
+
let messageContent;
|
|
308
|
+
if (didSwitch) {
|
|
309
|
+
const switchMemos = session.consumeMemosForActive();
|
|
310
|
+
const switchParts = [];
|
|
311
|
+
switchParts.push(`[Session Switch] time=${new Date().toLocaleString()} active_session=${session.activeMode}`);
|
|
312
|
+
if (switchMemos) {
|
|
313
|
+
switchParts.push("");
|
|
314
|
+
switchParts.push(switchMemos);
|
|
315
|
+
}
|
|
316
|
+
const codingStatus = session.getCodingSessionStatus();
|
|
317
|
+
if (codingStatus && session.activeMode === "general") {
|
|
318
|
+
switchParts.push("");
|
|
319
|
+
switchParts.push(`## Active Coding Task`);
|
|
320
|
+
switchParts.push(codingStatus);
|
|
321
|
+
}
|
|
322
|
+
if (calendarSummary) {
|
|
323
|
+
switchParts.push("");
|
|
324
|
+
switchParts.push("## Upcoming Calendar Events");
|
|
325
|
+
switchParts.push(calendarSummary);
|
|
326
|
+
}
|
|
327
|
+
if (switchForwardMessage) {
|
|
328
|
+
switchParts.push("");
|
|
329
|
+
switchParts.push(switchForwardMessage);
|
|
306
330
|
}
|
|
331
|
+
messageContent = [
|
|
332
|
+
{ type: "text", text: switchParts.join("\n") },
|
|
333
|
+
];
|
|
334
|
+
didSwitch = false;
|
|
335
|
+
switchForwardMessage = "";
|
|
336
|
+
pendingMemoAck = true;
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
messageContent = currentContentBlocks;
|
|
340
|
+
}
|
|
341
|
+
const queryStream = activeSession.sendAndStream(messageContent);
|
|
342
|
+
if (pendingMemoAck) {
|
|
343
|
+
session.ackMemosForActive();
|
|
344
|
+
pendingMemoAck = false;
|
|
345
|
+
}
|
|
346
|
+
await processAgentStream(queryStream, activeSession, activityTracker, session.dualSessionEnabled ? session : undefined);
|
|
347
|
+
if (activeSession.hasOrphanedInjections) {
|
|
348
|
+
interruptHandler.requeueIfOrphaned();
|
|
307
349
|
}
|
|
308
|
-
|
|
309
|
-
|
|
350
|
+
const switchResult = session.executePendingSwitch();
|
|
351
|
+
if (switchResult) {
|
|
352
|
+
didSwitch = true;
|
|
353
|
+
switchForwardMessage = switchResult.forwardMessage;
|
|
354
|
+
logger.system(`Re-entering wake cycle for ${switchResult.target} session`);
|
|
355
|
+
continue;
|
|
310
356
|
}
|
|
311
357
|
consecutiveErrors = 0;
|
|
312
|
-
await new Promise((r) => setTimeout(r, FATAL_SLEEP_MS));
|
|
313
358
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
359
|
+
catch (err) {
|
|
360
|
+
activeSession.closeInput();
|
|
361
|
+
if (session.isStopRequested()) {
|
|
362
|
+
logger.system("Agent stopped by user request");
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
366
|
+
const category = classifyError(err);
|
|
367
|
+
consecutiveErrors++;
|
|
368
|
+
logger.err(`Agent loop error (${category}, attempt ${consecutiveErrors}): ${errMsg}`, { stack: err instanceof Error ? err.stack : undefined });
|
|
369
|
+
if (isPromptTooLong(err) && session.activeSession.getSessionId()) {
|
|
370
|
+
logger.system("Prompt too long — forcing compaction before retry");
|
|
371
|
+
try {
|
|
372
|
+
await session.activeSession.requestCompaction();
|
|
373
|
+
consecutiveErrors = 0;
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
catch (compactErr) {
|
|
377
|
+
logger.warn(`Emergency compaction failed: ${compactErr instanceof Error ? compactErr.message : String(compactErr)}`);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
if (category === "fatal" || consecutiveErrors >= MAX_RETRIES_BEFORE_NOTIFY) {
|
|
381
|
+
const sleepMin = FATAL_SLEEP_MS / 60_000;
|
|
382
|
+
const notice = category === "fatal"
|
|
383
|
+
? `Agent hit a fatal error: ${errMsg}. Sleeping ${sleepMin}m before retrying.`
|
|
384
|
+
: `Agent failed ${consecutiveErrors} times in a row: ${errMsg}. Sleeping ${sleepMin}m before retrying.`;
|
|
385
|
+
try {
|
|
386
|
+
if (agentState.lastMessageChannel && agentState.lastMessageSender) {
|
|
387
|
+
await channelManager.sendMessage(agentState.lastMessageChannel, agentState.lastMessageSender, notice);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
logger.warn("Failed to send error notification to owner");
|
|
392
|
+
}
|
|
393
|
+
consecutiveErrors = 0;
|
|
394
|
+
await new Promise((r) => setTimeout(r, FATAL_SLEEP_MS));
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
const delay = Math.min(BASE_DELAY_MS * 2 ** (consecutiveErrors - 1), MAX_DELAY_MS);
|
|
398
|
+
logger.system(`Retrying in ${(delay / 1000).toFixed(0)}s (attempt ${consecutiveErrors})...`);
|
|
399
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
400
|
+
}
|
|
401
|
+
}
|
|
318
402
|
}
|
|
319
|
-
|
|
403
|
+
break;
|
|
404
|
+
} // end switch loop
|
|
320
405
|
}
|
|
321
406
|
}
|
|
322
407
|
//# sourceMappingURL=loop.js.map
|