visionclaw 0.1.44 → 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 +15 -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 +137 -70
- 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 +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/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
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
|
+
|
|
1
16
|
## [0.1.44](https://github.com/babelcloud/visionclaw/compare/v0.1.43...v0.1.44) (2026-02-27)
|
|
2
17
|
|
|
3
18
|
|
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;AAkC3C;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,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";
|
|
@@ -78,16 +78,18 @@ export async function startAgentLoop(config) {
|
|
|
78
78
|
logger.system(`Owner: ${ownerConfig.ownerName} <${ownerConfig.ownerEmail}>`);
|
|
79
79
|
logger.system(`Heartbeat interval: ${ownerConfig.heartbeatIntervalMs / 1000}s`);
|
|
80
80
|
logger.system("");
|
|
81
|
-
// Create the in-process MCP tool
|
|
82
|
-
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 });
|
|
83
84
|
const mcpServers = {
|
|
84
|
-
visionclaw: toolServer,
|
|
85
85
|
playwright: {
|
|
86
86
|
command: "npx",
|
|
87
87
|
args: [
|
|
88
88
|
"@playwright/mcp@latest",
|
|
89
89
|
"--cdp-endpoint",
|
|
90
90
|
process.env.PLAYWRIGHT_MCP_CDP_ENDPOINT ?? "http://127.0.0.1:9222",
|
|
91
|
+
"--output-dir",
|
|
92
|
+
getScreenshotsDir(),
|
|
91
93
|
],
|
|
92
94
|
},
|
|
93
95
|
};
|
|
@@ -97,12 +99,18 @@ export async function startAgentLoop(config) {
|
|
|
97
99
|
url: `https://mcp.serpapi.com/${config.serpApiKey}/mcp`,
|
|
98
100
|
};
|
|
99
101
|
}
|
|
100
|
-
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"}`);
|
|
101
108
|
requestSessionStop = () => session.requestStop();
|
|
102
109
|
// --- Interrupt handling ---
|
|
103
110
|
let wakeResolver = null;
|
|
104
111
|
const interruptHandler = new InterruptHandler({
|
|
105
|
-
session,
|
|
112
|
+
session: session.activeSession,
|
|
113
|
+
sessionManager: session,
|
|
106
114
|
config,
|
|
107
115
|
ownerConfig,
|
|
108
116
|
channelManager,
|
|
@@ -162,6 +170,19 @@ export async function startAgentLoop(config) {
|
|
|
162
170
|
logger.warn(`Failed to send console URL: ${err instanceof Error ? err.message : String(err)}`);
|
|
163
171
|
});
|
|
164
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
|
+
});
|
|
165
186
|
logger.system("Agent loop started. Waiting for messages or heartbeat...");
|
|
166
187
|
// --- Error handling / retry state ---
|
|
167
188
|
const MAX_RETRIES_BEFORE_NOTIFY = 5;
|
|
@@ -234,38 +255,23 @@ export async function startAgentLoop(config) {
|
|
|
234
255
|
: "heartbeat";
|
|
235
256
|
activityTracker.startTask(taskDesc);
|
|
236
257
|
logger.wake(trigger, messages.length);
|
|
258
|
+
if (session.dualSessionEnabled) {
|
|
259
|
+
logger.system(`Active session: ${session.activeMode}`);
|
|
260
|
+
}
|
|
237
261
|
if (trigger === "heartbeat") {
|
|
238
262
|
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
|
-
});
|
|
263
|
+
await session.activeSession.maybeCompactByTokens();
|
|
256
264
|
}
|
|
257
265
|
catch (err) {
|
|
258
266
|
logger.warn(`Compaction request failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
259
267
|
}
|
|
260
268
|
}
|
|
261
269
|
for (const msg of messages) {
|
|
262
|
-
|
|
263
|
-
logger.log("info", "incoming", `[${msg.channel}]${isVoice ? " [voice]" : ""} ${msg.sender}: ${msg.text}`, {
|
|
270
|
+
logger.log("info", "incoming", `[${msg.channel}] ${msg.sender}: ${msg.text}`, {
|
|
264
271
|
channel: msg.channel,
|
|
265
272
|
sender: msg.sender,
|
|
266
273
|
text: msg.text,
|
|
267
274
|
id: msg.id,
|
|
268
|
-
voice: isVoice,
|
|
269
275
|
});
|
|
270
276
|
}
|
|
271
277
|
// --- Gather context ---
|
|
@@ -278,63 +284,124 @@ export async function startAgentLoop(config) {
|
|
|
278
284
|
calendarSummary,
|
|
279
285
|
screenshot,
|
|
280
286
|
versionUpdate,
|
|
287
|
+
activeSession: session.dualSessionEnabled ? session.activeMode : undefined,
|
|
288
|
+
sessionMemos: session.consumeMemosForActive(),
|
|
289
|
+
codingSessionStatus: session.getCodingSessionStatus(),
|
|
281
290
|
});
|
|
291
|
+
let pendingMemoAck = true;
|
|
282
292
|
logger.sendMultimodal(contentBlocks);
|
|
283
293
|
if (trigger === "message") {
|
|
284
|
-
// send typing indicator to all channels
|
|
285
294
|
for (const msg of messages) {
|
|
286
295
|
channelManager.sendTypingIndicator(msg.channel, msg.sender).catch(() => { });
|
|
287
296
|
}
|
|
288
297
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
session.
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
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);
|
|
330
|
+
}
|
|
331
|
+
messageContent = [
|
|
332
|
+
{ type: "text", text: switchParts.join("\n") },
|
|
333
|
+
];
|
|
334
|
+
didSwitch = false;
|
|
335
|
+
switchForwardMessage = "";
|
|
336
|
+
pendingMemoAck = true;
|
|
311
337
|
}
|
|
312
|
-
|
|
313
|
-
|
|
338
|
+
else {
|
|
339
|
+
messageContent = currentContentBlocks;
|
|
314
340
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
? `Agent hit a fatal error: ${errMsg}. Sleeping ${sleepMin}m before retrying.`
|
|
320
|
-
: `Agent failed ${consecutiveErrors} times in a row: ${errMsg}. Sleeping ${sleepMin}m before retrying.`;
|
|
321
|
-
try {
|
|
322
|
-
if (agentState.lastMessageChannel && agentState.lastMessageSender) {
|
|
323
|
-
await channelManager.sendMessage(agentState.lastMessageChannel, agentState.lastMessageSender, notice);
|
|
324
|
-
}
|
|
341
|
+
const queryStream = activeSession.sendAndStream(messageContent);
|
|
342
|
+
if (pendingMemoAck) {
|
|
343
|
+
session.ackMemosForActive();
|
|
344
|
+
pendingMemoAck = false;
|
|
325
345
|
}
|
|
326
|
-
|
|
327
|
-
|
|
346
|
+
await processAgentStream(queryStream, activeSession, activityTracker, session.dualSessionEnabled ? session : undefined);
|
|
347
|
+
if (activeSession.hasOrphanedInjections) {
|
|
348
|
+
interruptHandler.requeueIfOrphaned();
|
|
349
|
+
}
|
|
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;
|
|
328
356
|
}
|
|
329
357
|
consecutiveErrors = 0;
|
|
330
|
-
await new Promise((r) => setTimeout(r, FATAL_SLEEP_MS));
|
|
331
358
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
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
|
+
}
|
|
336
402
|
}
|
|
337
|
-
|
|
403
|
+
break;
|
|
404
|
+
} // end switch loop
|
|
338
405
|
}
|
|
339
406
|
}
|
|
340
407
|
//# sourceMappingURL=loop.js.map
|