visionclaw 0.1.50 → 0.1.52
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 +20 -0
- package/dist/agent/fast-responder.d.ts +2 -0
- package/dist/agent/fast-responder.d.ts.map +1 -1
- package/dist/agent/fast-responder.js +17 -6
- package/dist/agent/fast-responder.js.map +1 -1
- package/dist/agent/gather-context.js +1 -1
- package/dist/agent/gather-context.js.map +1 -1
- package/dist/agent/image-pruner.d.ts +9 -0
- package/dist/agent/image-pruner.d.ts.map +1 -1
- package/dist/agent/image-pruner.js +71 -23
- package/dist/agent/image-pruner.js.map +1 -1
- package/dist/agent/interrupt-handler.d.ts +23 -0
- package/dist/agent/interrupt-handler.d.ts.map +1 -1
- package/dist/agent/interrupt-handler.js +154 -51
- package/dist/agent/interrupt-handler.js.map +1 -1
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +24 -0
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/session.d.ts +1 -0
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +30 -44
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/state.d.ts +2 -0
- package/dist/agent/state.d.ts.map +1 -1
- package/dist/agent/state.js.map +1 -1
- package/dist/agent/stream-handler.d.ts.map +1 -1
- package/dist/agent/stream-handler.js +7 -13
- package/dist/agent/stream-handler.js.map +1 -1
- package/dist/obs/ui.d.ts.map +1 -1
- package/dist/obs/ui.js +53 -20
- package/dist/obs/ui.js.map +1 -1
- package/dist/tools/desktop-executor.d.ts +2 -3
- package/dist/tools/desktop-executor.d.ts.map +1 -1
- package/dist/tools/desktop-executor.js +5 -2
- package/dist/tools/desktop-executor.js.map +1 -1
- package/dist/tools/notify.d.ts.map +1 -1
- package/dist/tools/notify.js +3 -16
- package/dist/tools/notify.js.map +1 -1
- package/dist/tools/screenshot.d.ts +13 -2
- package/dist/tools/screenshot.d.ts.map +1 -1
- package/dist/tools/screenshot.js +56 -4
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/wait.js +1 -1
- package/dist/tools/wait.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
## [0.1.52](https://github.com/babelcloud/visionclaw/compare/v0.1.51...v0.1.52) (2026-02-28)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* implement watchdog mechanism for fast responses ([9c0423d](https://github.com/babelcloud/visionclaw/commit/9c0423da15500ea206481f95880cd22b52a96284))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## [0.1.51](https://github.com/babelcloud/visionclaw/compare/v0.1.50...v0.1.51) (2026-02-28)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* add image resizing functionality to image pruner ([1e768a5](https://github.com/babelcloud/visionclaw/commit/1e768a5267b59a24fe83d852461e9538f87fe1e7))
|
|
16
|
+
* implement base64 truncation and byte formatting in JSON handling ([6bcddb0](https://github.com/babelcloud/visionclaw/commit/6bcddb0644a9f6da79fe15dd3c9594d66e69b986))
|
|
17
|
+
* implement fast response tracking in interrupt handler ([501a834](https://github.com/babelcloud/visionclaw/commit/501a834fbb7db58772a0e0786f432828c14d7f3f))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
1
21
|
## [0.1.50](https://github.com/babelcloud/visionclaw/compare/v0.1.49...v0.1.50) (2026-02-28)
|
|
2
22
|
|
|
3
23
|
|
|
@@ -11,6 +11,7 @@ declare const FastResponseSchema: z.ZodObject<{
|
|
|
11
11
|
briefForPrimary: z.ZodString;
|
|
12
12
|
}, z.core.$strip>;
|
|
13
13
|
export type FastResponse = z.infer<typeof FastResponseSchema>;
|
|
14
|
+
export type FastResponseMode = "interrupt" | "watchdog";
|
|
14
15
|
/**
|
|
15
16
|
* Make a single lightweight API call to acknowledge one or more user messages
|
|
16
17
|
* that arrived while the primary agent is busy. Handles the batch case where
|
|
@@ -28,6 +29,7 @@ export declare function fastRespond(options: {
|
|
|
28
29
|
messages: CommandMessage[];
|
|
29
30
|
activitySummary: string;
|
|
30
31
|
config: VisionClawConfig;
|
|
32
|
+
mode?: FastResponseMode;
|
|
31
33
|
}): Promise<FastResponse | null>;
|
|
32
34
|
export {};
|
|
33
35
|
//# sourceMappingURL=fast-responder.d.ts.map
|
|
@@ -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;
|
|
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,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,UAAU,CAAC;AAExD;;;;;;;;;;;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;IACzB,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA6F/B"}
|
|
@@ -39,7 +39,7 @@ const FastResponseSchema = z.object({
|
|
|
39
39
|
* interrupt-injection path.
|
|
40
40
|
*/
|
|
41
41
|
export async function fastRespond(options) {
|
|
42
|
-
const { systemPrompt, messages, activitySummary, config } = options;
|
|
42
|
+
const { systemPrompt, messages, activitySummary, config, mode = "interrupt" } = options;
|
|
43
43
|
if (messages.length === 0)
|
|
44
44
|
return null;
|
|
45
45
|
// Pre-compute unique recipients so the prompt can list them explicitly
|
|
@@ -66,6 +66,21 @@ export async function fastRespond(options) {
|
|
|
66
66
|
return parts.join("\n");
|
|
67
67
|
})
|
|
68
68
|
.join("\n");
|
|
69
|
+
const preamble = mode === "watchdog"
|
|
70
|
+
? [
|
|
71
|
+
`You are working on a task but haven't responded to the user yet. Send a quick acknowledgment so they know their message was received and you are working on it.`,
|
|
72
|
+
"1. Acknowledge the user's message(s) so they know they were received.",
|
|
73
|
+
"2. If the message is a simple greeting or conversational, respond naturally.",
|
|
74
|
+
"3. If the user sends a task or request, let them know you're starting on it.",
|
|
75
|
+
"4. Keep each reply concise and friendly (1-3 sentences).",
|
|
76
|
+
]
|
|
77
|
+
: [
|
|
78
|
+
`Because you are currently working on a task, this is a side process that you should handle the incoming messages as quickly as possible.`,
|
|
79
|
+
"1. Acknowledge the user's message(s) so they know they were received.",
|
|
80
|
+
"2. If the user is asking about status or what the agent is doing, summarize the current activity.",
|
|
81
|
+
"3. If the user sends a new task or request, tell them it has been queued.",
|
|
82
|
+
"4. Keep each reply concise and friendly (1-3 sentences).",
|
|
83
|
+
];
|
|
69
84
|
const response = await client.messages.create({
|
|
70
85
|
model: getModelId(config),
|
|
71
86
|
max_tokens: MAX_TOKENS,
|
|
@@ -74,11 +89,7 @@ export async function fastRespond(options) {
|
|
|
74
89
|
effort: "low",
|
|
75
90
|
},
|
|
76
91
|
system: systemPrompt + [
|
|
77
|
-
|
|
78
|
-
"1. Acknowledge the user's message(s) so they know they were received.",
|
|
79
|
-
"2. If the user is asking about status or what the agent is doing, summarize the current activity.",
|
|
80
|
-
"3. If the user sends a new task or request, tell them it has been queued.",
|
|
81
|
-
"4. Keep each reply concise and friendly (1-3 sentences).",
|
|
92
|
+
...preamble,
|
|
82
93
|
"",
|
|
83
94
|
`You MUST produce exactly one reply per unique recipient. The recipients are:\n${recipientList}`,
|
|
84
95
|
"Each reply should be personalized — address the sender and reference their specific message(s).",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fast-responder.js","sourceRoot":"","sources":["../../src/agent/fast-responder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG/D,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CAAC,yGAAyG,CAAC;IACtH,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,CAAC,wEAAwE,CAAC;IACrF,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,CAAC,4EAA4E,CAAC;CAC1F,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,oBAAoB,CAAC;SAC3B,QAAQ,CACP,0EAA0E;QAC1E,yGAAyG,CAC1G;IACH,kBAAkB,EAAE,CAAC;SAClB,OAAO,EAAE;SACT,QAAQ,CACP,wGAAwG,CACzG;IACH,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,CACP,iHAAiH,CAClH;CACJ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"fast-responder.js","sourceRoot":"","sources":["../../src/agent/fast-responder.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ export async function gatherWakeContext(config, doVersionCheck) {
|
|
|
11
11
|
const [screenshotResult, calendarResult, versionResult] = await Promise.allSettled([
|
|
12
12
|
(async () => {
|
|
13
13
|
const t0 = Date.now();
|
|
14
|
-
const base64 = await takeScreenshot();
|
|
14
|
+
const { base64 } = await takeScreenshot();
|
|
15
15
|
logger.debug(`Screenshot captured in ${Date.now() - t0}ms`);
|
|
16
16
|
return { base64 };
|
|
17
17
|
})(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gather-context.js","sourceRoot":"","sources":["../../src/agent/gather-context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,cAAc,EACd,wBAAwB,GAEzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAwB,EACxB,cAAuB;IAEvB,MAAM,CAAC,gBAAgB,EAAE,cAAc,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACjF,CAAC,KAAK,IAA4B,EAAE;YAClC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"gather-context.js","sourceRoot":"","sources":["../../src/agent/gather-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,17 @@ export interface PruneImagesResult {
|
|
|
2
2
|
totalImageBlocks: number;
|
|
3
3
|
keptImageBlocks: number;
|
|
4
4
|
prunedImageBlocks: number;
|
|
5
|
+
resizedImageBlocks: number;
|
|
5
6
|
fileChanged: boolean;
|
|
6
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Scan a tool output (arbitrary JSON structure) for base64 image blocks that
|
|
10
|
+
* exceed the many-image dimension limit and resize them in-place.
|
|
11
|
+
* Returns the (possibly mutated) output and how many images were resized.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resizeOversizedImagesInToolOutput(toolOutput: unknown): Promise<{
|
|
14
|
+
resizedCount: number;
|
|
15
|
+
}>;
|
|
7
16
|
export declare function pruneSessionImages(options: {
|
|
8
17
|
transcriptPath: string;
|
|
9
18
|
keepLastNBase64Images: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-pruner.d.ts","sourceRoot":"","sources":["../../src/agent/image-pruner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"image-pruner.d.ts","sourceRoot":"","sources":["../../src/agent/image-pruner.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;CACtB;AAqED;;;;GAIG;AACH,wBAAsB,iCAAiC,CACrD,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAQnC;AAqCD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;CAC/B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyH7B"}
|
|
@@ -4,6 +4,7 @@ import os from "os";
|
|
|
4
4
|
import path from "path";
|
|
5
5
|
import readline from "readline";
|
|
6
6
|
import { logger } from "../logger.js";
|
|
7
|
+
import { getImageDimensions, resizeBase64ForVision, CLAUDE_MAX_LONG_EDGE_PX } from "../tools/screenshot.js";
|
|
7
8
|
const PLACEHOLDER_PNG_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==";
|
|
8
9
|
function isObject(v) {
|
|
9
10
|
return typeof v === "object" && v !== null;
|
|
@@ -31,6 +32,51 @@ function replaceBase64ImageBlock(block) {
|
|
|
31
32
|
source.media_type = "image/png";
|
|
32
33
|
source.data = PLACEHOLDER_PNG_BASE64;
|
|
33
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if a base64 image exceeds the many-image dimension limit and resize
|
|
37
|
+
* it in-place if needed. Returns true if the image was resized.
|
|
38
|
+
*/
|
|
39
|
+
async function resizeOversizedImageBlock(block) {
|
|
40
|
+
const source = block.source;
|
|
41
|
+
if (!isObject(source))
|
|
42
|
+
return false;
|
|
43
|
+
const data = source.data;
|
|
44
|
+
if (typeof data !== "string" || data.length === 0)
|
|
45
|
+
return false;
|
|
46
|
+
try {
|
|
47
|
+
const buffer = Buffer.from(data, "base64");
|
|
48
|
+
const dims = await getImageDimensions(buffer);
|
|
49
|
+
if (!dims)
|
|
50
|
+
return false;
|
|
51
|
+
const longEdge = Math.max(dims.width, dims.height);
|
|
52
|
+
if (longEdge <= CLAUDE_MAX_LONG_EDGE_PX)
|
|
53
|
+
return false;
|
|
54
|
+
const resized = await resizeBase64ForVision(data);
|
|
55
|
+
if (resized === data)
|
|
56
|
+
return false;
|
|
57
|
+
source.data = resized;
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
logger.warn(`[image-pruner] resize check failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Scan a tool output (arbitrary JSON structure) for base64 image blocks that
|
|
67
|
+
* exceed the many-image dimension limit and resize them in-place.
|
|
68
|
+
* Returns the (possibly mutated) output and how many images were resized.
|
|
69
|
+
*/
|
|
70
|
+
export async function resizeOversizedImagesInToolOutput(toolOutput) {
|
|
71
|
+
const refs = collectBase64ImageBlockRefs(toolOutput);
|
|
72
|
+
let resizedCount = 0;
|
|
73
|
+
for (const ref of refs) {
|
|
74
|
+
const didResize = await resizeOversizedImageBlock(ref);
|
|
75
|
+
if (didResize)
|
|
76
|
+
resizedCount++;
|
|
77
|
+
}
|
|
78
|
+
return { resizedCount };
|
|
79
|
+
}
|
|
34
80
|
function collectBase64ImageBlockRefs(root) {
|
|
35
81
|
const refs = [];
|
|
36
82
|
const visit = (node) => {
|
|
@@ -68,6 +114,7 @@ export async function pruneSessionImages(options) {
|
|
|
68
114
|
totalImageBlocks: 0,
|
|
69
115
|
keptImageBlocks: 0,
|
|
70
116
|
prunedImageBlocks: 0,
|
|
117
|
+
resizedImageBlocks: 0,
|
|
71
118
|
fileChanged: false,
|
|
72
119
|
};
|
|
73
120
|
}
|
|
@@ -93,21 +140,14 @@ export async function pruneSessionImages(options) {
|
|
|
93
140
|
const keep = Math.max(0, keepLastNBase64Images);
|
|
94
141
|
const pruneCount = Math.max(0, totalImageBlocks - keep);
|
|
95
142
|
logger.debug(`[image-pruner] scanned totalBase64Images=${totalImageBlocks} prune=${pruneCount} keep=${keep}`);
|
|
96
|
-
|
|
97
|
-
logger.debug("[image-pruner] no-op (nothing to prune)");
|
|
98
|
-
return {
|
|
99
|
-
totalImageBlocks,
|
|
100
|
-
keptImageBlocks: totalImageBlocks,
|
|
101
|
-
prunedImageBlocks: 0,
|
|
102
|
-
fileChanged: false,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
// Pass 2: rewrite file with earliest base64 image blocks replaced.
|
|
143
|
+
// Pass 2: rewrite file — prune oldest images, then resize any oversized kept images.
|
|
106
144
|
const input2 = fs.createReadStream(transcriptPath, { encoding: "utf8" });
|
|
107
145
|
const rl2 = readline.createInterface({ input: input2, crlfDelay: Infinity });
|
|
108
146
|
let remainingToPrune = pruneCount;
|
|
109
147
|
let prunedImageBlocks = 0;
|
|
110
148
|
let fileChanged = false;
|
|
149
|
+
// Collect kept image refs for a separate resize pass
|
|
150
|
+
const keptImageRefs = [];
|
|
111
151
|
const outLines = [];
|
|
112
152
|
for await (const line of rl2) {
|
|
113
153
|
if (!line.trim()) {
|
|
@@ -122,32 +162,39 @@ export async function pruneSessionImages(options) {
|
|
|
122
162
|
outLines.push(line);
|
|
123
163
|
continue;
|
|
124
164
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if (
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
165
|
+
const refs = collectBase64ImageBlockRefs(parsed);
|
|
166
|
+
for (const ref of refs) {
|
|
167
|
+
if (remainingToPrune > 0) {
|
|
168
|
+
replaceBase64ImageBlock(ref);
|
|
169
|
+
remainingToPrune -= 1;
|
|
170
|
+
prunedImageBlocks += 1;
|
|
171
|
+
fileChanged = true;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
keptImageRefs.push(ref);
|
|
136
175
|
}
|
|
137
176
|
}
|
|
138
177
|
try {
|
|
139
178
|
outLines.push(JSON.stringify(parsed));
|
|
140
179
|
}
|
|
141
180
|
catch {
|
|
142
|
-
// If serialization fails, fall back to original line.
|
|
143
181
|
outLines.push(line);
|
|
144
182
|
}
|
|
145
183
|
}
|
|
146
184
|
rl2.close();
|
|
147
185
|
input2.close();
|
|
186
|
+
// Resize pass: check kept images for oversized dimensions
|
|
187
|
+
let resizedImageBlocks = 0;
|
|
188
|
+
for (const ref of keptImageRefs) {
|
|
189
|
+
const didResize = await resizeOversizedImageBlock(ref);
|
|
190
|
+
if (didResize) {
|
|
191
|
+
resizedImageBlocks += 1;
|
|
192
|
+
fileChanged = true;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
148
195
|
if (fileChanged) {
|
|
149
196
|
await writeFileAtomic(transcriptPath, outLines.join(os.EOL) + os.EOL);
|
|
150
|
-
logger.debug(`[image-pruner] wrote changes pruned=${prunedImageBlocks}
|
|
197
|
+
logger.debug(`[image-pruner] wrote changes pruned=${prunedImageBlocks} resized=${resizedImageBlocks}`);
|
|
151
198
|
}
|
|
152
199
|
else {
|
|
153
200
|
logger.debug("[image-pruner] completed without changes");
|
|
@@ -156,6 +203,7 @@ export async function pruneSessionImages(options) {
|
|
|
156
203
|
totalImageBlocks,
|
|
157
204
|
keptImageBlocks: totalImageBlocks - prunedImageBlocks,
|
|
158
205
|
prunedImageBlocks,
|
|
206
|
+
resizedImageBlocks,
|
|
159
207
|
fileChanged,
|
|
160
208
|
};
|
|
161
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-pruner.js","sourceRoot":"","sources":["../../src/agent/image-pruner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"image-pruner.js","sourceRoot":"","sources":["../../src/agent/image-pruner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { VisionClawConfig, OwnerConfig } from "../config/types.js";
|
|
2
|
+
import type { CommandMessage } from "../channels/interface.js";
|
|
2
3
|
import type { ChannelManager } from "../channels/manager.js";
|
|
3
4
|
import type { MessageQueue } from "../channels/queue.js";
|
|
4
5
|
import type { AgentSession } from "./session.js";
|
|
@@ -20,19 +21,41 @@ export declare class InterruptHandler {
|
|
|
20
21
|
private timer;
|
|
21
22
|
private inFlight;
|
|
22
23
|
private lastInjectedBatch;
|
|
24
|
+
/** Message IDs that already received a fast response in this wake cycle. */
|
|
25
|
+
private fastRespondedIds;
|
|
23
26
|
constructor(deps: InterruptHandlerDeps);
|
|
27
|
+
/**
|
|
28
|
+
* Clear fast-response tracking. Call at the start of each wake cycle
|
|
29
|
+
* so messages that were re-queued across cycles can get a fresh response.
|
|
30
|
+
*/
|
|
31
|
+
clearFastResponseTracking(): void;
|
|
24
32
|
/**
|
|
25
33
|
* Called from the channelManager "message" event when the agent is busy.
|
|
26
34
|
* Schedules a debounced interrupt batch.
|
|
27
35
|
*/
|
|
28
36
|
schedule(): void;
|
|
29
37
|
dispose(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Watchdog fallback: called when the primary agent hasn't replied within
|
|
40
|
+
* the watchdog timeout on a message-triggered wake. Runs the fast
|
|
41
|
+
* responder and injects a briefing into the active session.
|
|
42
|
+
*/
|
|
43
|
+
fireWatchdog(messages: CommandMessage[]): Promise<void>;
|
|
30
44
|
private requeue;
|
|
31
45
|
/**
|
|
32
46
|
* If injected messages were orphaned (accepted but never delivered to SDK),
|
|
33
47
|
* re-queue the original CommandMessages so they're handled on the next wake.
|
|
34
48
|
*/
|
|
35
49
|
requeueIfOrphaned(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Shared logic: call fastRespond with a timeout, match replies to actual
|
|
52
|
+
* recipients, and send them. Returns the fast response and how many
|
|
53
|
+
* recipients were sent to, or null if the call failed/timed out.
|
|
54
|
+
*
|
|
55
|
+
* @param shouldSend Optional guard checked before sending each reply.
|
|
56
|
+
* If it returns false, remaining sends are skipped.
|
|
57
|
+
*/
|
|
58
|
+
private callFastRespondAndSend;
|
|
36
59
|
private processBatch;
|
|
37
60
|
}
|
|
38
61
|
//# 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;
|
|
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;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,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;IAC1D,4EAA4E;IAC5E,OAAO,CAAC,gBAAgB,CAAqB;gBAEjC,IAAI,EAAE,oBAAoB;IAItC;;;OAGG;IACH,yBAAyB,IAAI,IAAI;IAIjC;;;OAGG;IACH,QAAQ,IAAI,IAAI;IAQhB,OAAO,IAAI,IAAI;IAOf;;;;OAIG;IACG,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC7D,OAAO,CAAC,OAAO;IAOf;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAOzB;;;;;;;OAOG;YACW,sBAAsB;YAsFtB,YAAY;CAqH3B"}
|