visionclaw 0.1.129 → 0.1.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/agent/client-factory.js +1 -1
  3. package/dist/agent/image-archive.d.ts +66 -0
  4. package/dist/agent/image-archive.d.ts.map +1 -0
  5. package/dist/agent/image-archive.js +278 -0
  6. package/dist/agent/image-archive.js.map +1 -0
  7. package/dist/agent/image-pruner.d.ts.map +1 -1
  8. package/dist/agent/image-pruner.js +30 -6
  9. package/dist/agent/image-pruner.js.map +1 -1
  10. package/dist/agent/openai-file-session.js +1 -1
  11. package/dist/agent/openai-session.js +1 -1
  12. package/dist/agent/openai-tools.js +1 -1
  13. package/dist/agent/providers/claude/session.d.ts.map +1 -1
  14. package/dist/agent/providers/claude/session.js.map +1 -1
  15. package/dist/agent/session.js +1 -1
  16. package/dist/channels/slack.js +1 -1
  17. package/dist/channels/sms.js +1 -1
  18. package/dist/channels/whatsapp.js +1 -1
  19. package/dist/config/types.d.ts +14 -0
  20. package/dist/config/types.d.ts.map +1 -1
  21. package/dist/config/types.js +13 -0
  22. package/dist/config/types.js.map +1 -1
  23. package/dist/data-processing/index.d.ts +6 -0
  24. package/dist/data-processing/index.d.ts.map +1 -0
  25. package/dist/data-processing/index.js +6 -0
  26. package/dist/data-processing/index.js.map +1 -0
  27. package/dist/data-processing/loader.d.ts +7 -0
  28. package/dist/data-processing/loader.d.ts.map +1 -0
  29. package/dist/data-processing/loader.js +55 -0
  30. package/dist/data-processing/loader.js.map +1 -0
  31. package/dist/data-processing/record-builder.d.ts +7 -0
  32. package/dist/data-processing/record-builder.d.ts.map +1 -0
  33. package/dist/data-processing/record-builder.js +176 -0
  34. package/dist/data-processing/record-builder.js.map +1 -0
  35. package/dist/data-processing/restructure.d.ts +11 -0
  36. package/dist/data-processing/restructure.d.ts.map +1 -0
  37. package/dist/data-processing/restructure.js +276 -0
  38. package/dist/data-processing/restructure.js.map +1 -0
  39. package/dist/data-processing/sanitize.d.ts +12 -0
  40. package/dist/data-processing/sanitize.d.ts.map +1 -0
  41. package/dist/data-processing/sanitize.js +229 -0
  42. package/dist/data-processing/sanitize.js.map +1 -0
  43. package/dist/data-processing/sdk-transcript.d.ts +13 -0
  44. package/dist/data-processing/sdk-transcript.d.ts.map +1 -0
  45. package/dist/data-processing/sdk-transcript.js +370 -0
  46. package/dist/data-processing/sdk-transcript.js.map +1 -0
  47. package/dist/data-processing/segmenter.d.ts +14 -0
  48. package/dist/data-processing/segmenter.d.ts.map +1 -0
  49. package/dist/data-processing/segmenter.js +77 -0
  50. package/dist/data-processing/segmenter.js.map +1 -0
  51. package/dist/data-processing/types.d.ts +99 -0
  52. package/dist/data-processing/types.d.ts.map +1 -0
  53. package/dist/data-processing/types.js +40 -0
  54. package/dist/data-processing/types.js.map +1 -0
  55. package/dist/files.js +1 -1
  56. package/dist/google/default-oauth-app.js +1 -1
  57. package/dist/index.js +11 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/memory/store.js +1 -1
  60. package/dist/onboarding/index.d.ts.map +1 -1
  61. package/dist/onboarding/index.js +28 -18
  62. package/dist/onboarding/index.js.map +1 -1
  63. package/dist/onboarding/provisioning-spec.d.ts +2 -0
  64. package/dist/onboarding/provisioning-spec.d.ts.map +1 -1
  65. package/dist/onboarding/provisioning-spec.js +3 -1
  66. package/dist/onboarding/provisioning-spec.js.map +1 -1
  67. package/dist/onboarding/setup-steps.d.ts.map +1 -1
  68. package/dist/onboarding/setup-steps.js +5 -3
  69. package/dist/onboarding/setup-steps.js.map +1 -1
  70. package/dist/tools/browser.js +1 -1
  71. package/dist/tools/sleep-interval.js +1 -1
  72. package/dist/tools/version-check.js +1 -1
  73. package/dist/utils/backup-paths.js +1 -1
  74. package/dist-agent/bundle.cjs +9337 -9413
  75. package/package.json +2 -1
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Image archive module: upload pruned images to S3 or TOS (Volcengine Object
3
+ * Storage) before they are replaced with placeholders in the JSONL transcript.
4
+ *
5
+ * Each archived image gets a unique placeholder PNG with the archive ID
6
+ * embedded in a PNG tEXt metadata chunk, enabling precise restoration without
7
+ * relying on positional assumptions.
8
+ *
9
+ * Archive records are appended to a sidecar JSONL file alongside the
10
+ * transcript, keeping the transcript structure untouched.
11
+ *
12
+ * Configuration lives in `config.json` under the `imageArchive` key.
13
+ * When absent, archiving is disabled and the pruner falls back to the
14
+ * standard static placeholder.
15
+ */
16
+ export interface ArchiveResult {
17
+ archiveId: string;
18
+ url: string;
19
+ placeholderBase64: string;
20
+ sha256: string;
21
+ mediaType: string;
22
+ originalSizeBytes: number;
23
+ sessionId: string;
24
+ archivedAt: string;
25
+ }
26
+ export interface SidecarRecord {
27
+ archiveId: string;
28
+ url: string;
29
+ sha256: string;
30
+ mediaType: string;
31
+ originalSizeBytes: number;
32
+ sessionId: string;
33
+ transcriptPath: string;
34
+ archivedAt: string;
35
+ }
36
+ /** Returns true when image archiving is configured and ready. */
37
+ export declare function isArchiveEnabled(): boolean;
38
+ /**
39
+ * Generate a 1x1 transparent PNG with the archive ID embedded in a tEXt
40
+ * metadata chunk. The resulting PNG is ~100 bytes — negligible overhead.
41
+ */
42
+ export declare function generatePlaceholderPng(archiveId: string): string;
43
+ /**
44
+ * Extract the `vc-archive-id` value from a placeholder PNG's tEXt chunk.
45
+ * Returns null if the PNG doesn't contain our marker.
46
+ */
47
+ export declare function extractArchiveId(pngBase64: string): string | null;
48
+ /**
49
+ * Prepare an archive entry and start a background upload.
50
+ *
51
+ * Returns the archive result (including the custom placeholder) immediately
52
+ * without waiting for the upload. The upload runs fire-and-forget — if it
53
+ * fails, the placeholder is already in place and the sidecar record still
54
+ * references the expected URL. This is acceptable: the main loop is never
55
+ * blocked by upload latency or transient failures.
56
+ *
57
+ * Returns null only when archiving is not configured.
58
+ */
59
+ export declare function archiveImage(base64Data: string, mediaType: string, sessionId: string): ArchiveResult | null;
60
+ /**
61
+ * Append an archive record to the sidecar JSONL file. Creates the file if
62
+ * it does not exist. Uses synchronous I/O so the caller is not blocked by
63
+ * a promise — the sidecar is a small local append, not a network operation.
64
+ */
65
+ export declare function appendToSidecar(sidecarPath: string, result: ArchiveResult, transcriptPath: string): void;
66
+ //# sourceMappingURL=image-archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-archive.d.ts","sourceRoot":"","sources":["../../src/agent/image-archive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAcH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAuED,iEAAiE;AACjE,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAwBD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA2BhE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8BjE;AA6BD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,IAAI,CAwCtB;AAMD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,EACrB,cAAc,EAAE,MAAM,GACrB,IAAI,CAYN"}
@@ -0,0 +1,278 @@
1
+ /**
2
+ * Image archive module: upload pruned images to S3 or TOS (Volcengine Object
3
+ * Storage) before they are replaced with placeholders in the JSONL transcript.
4
+ *
5
+ * Each archived image gets a unique placeholder PNG with the archive ID
6
+ * embedded in a PNG tEXt metadata chunk, enabling precise restoration without
7
+ * relying on positional assumptions.
8
+ *
9
+ * Archive records are appended to a sidecar JSONL file alongside the
10
+ * transcript, keeping the transcript structure untouched.
11
+ *
12
+ * Configuration lives in `config.json` under the `imageArchive` key.
13
+ * When absent, archiving is disabled and the pruner falls back to the
14
+ * standard static placeholder.
15
+ */
16
+ import { createHash } from "crypto";
17
+ import { createRequire } from "module";
18
+ import zlib from "zlib";
19
+ import fs from "fs";
20
+ import { loadConfig } from "../config/index.js";
21
+ import { logger } from "../logger.js";
22
+ function buildArchiveConfig(cfg) {
23
+ const ia = cfg.imageArchive;
24
+ if (!ia)
25
+ return null;
26
+ if (ia.provider === "tos") {
27
+ if (!ia.tosAccessKeyId || !ia.tosAccessKeySecret) {
28
+ logger.warn("[image-archive] TOS provider requires tosAccessKeyId and tosAccessKeySecret in config");
29
+ return null;
30
+ }
31
+ return {
32
+ provider: "tos",
33
+ bucket: ia.bucket,
34
+ region: ia.tosRegion,
35
+ endpoint: ia.tosEndpoint,
36
+ accessKeyId: ia.tosAccessKeyId,
37
+ accessKeySecret: ia.tosAccessKeySecret,
38
+ };
39
+ }
40
+ // provider === "s3"
41
+ if (!ia.s3AccessKeyId || !ia.s3SecretAccessKey) {
42
+ logger.warn("[image-archive] S3 provider requires s3AccessKeyId and s3SecretAccessKey in config");
43
+ return null;
44
+ }
45
+ return {
46
+ provider: "s3",
47
+ bucket: ia.bucket,
48
+ region: ia.s3Region,
49
+ accessKeyId: ia.s3AccessKeyId,
50
+ secretAccessKey: ia.s3SecretAccessKey,
51
+ };
52
+ }
53
+ let _config = undefined;
54
+ function getConfig() {
55
+ if (_config === undefined) {
56
+ try {
57
+ _config = buildArchiveConfig(loadConfig());
58
+ }
59
+ catch {
60
+ _config = null;
61
+ }
62
+ }
63
+ return _config;
64
+ }
65
+ /** Returns true when image archiving is configured and ready. */
66
+ export function isArchiveEnabled() {
67
+ return getConfig() !== null;
68
+ }
69
+ // ---------------------------------------------------------------------------
70
+ // PNG tEXt chunk helpers
71
+ // ---------------------------------------------------------------------------
72
+ const TEXT_CHUNK_KEYWORD = "vc-archive-id";
73
+ /**
74
+ * Compute CRC-32 used by PNG chunks. Node.js 22+ exposes `zlib.crc32`; for
75
+ * older runtimes we fall back to a manual table-driven implementation, but
76
+ * this project requires Node >= 24.12.0 so the native path is always taken.
77
+ */
78
+ function pngCrc32(data) {
79
+ // zlib.crc32 returns an unsigned 32-bit integer.
80
+ return zlib.crc32(data);
81
+ }
82
+ /** The canonical 1x1 transparent PNG without any tEXt chunk. */
83
+ const BASE_PNG_BYTES = Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==", "base64");
84
+ /**
85
+ * Generate a 1x1 transparent PNG with the archive ID embedded in a tEXt
86
+ * metadata chunk. The resulting PNG is ~100 bytes — negligible overhead.
87
+ */
88
+ export function generatePlaceholderPng(archiveId) {
89
+ // PNG = signature + chunks. We insert a tEXt chunk right before IEND.
90
+ // IEND is always the last 12 bytes of a valid PNG.
91
+ const iendOffset = BASE_PNG_BYTES.length - 12;
92
+ // tEXt data: keyword (null-terminated ASCII) + text value
93
+ const keywordBuf = Buffer.from(TEXT_CHUNK_KEYWORD + "\0", "ascii");
94
+ const valueBuf = Buffer.from(archiveId, "ascii");
95
+ const textData = Buffer.concat([keywordBuf, valueBuf]);
96
+ // Chunk = length(4) + type(4) + data(N) + crc(4)
97
+ const typeBuf = Buffer.from("tEXt", "ascii");
98
+ const lengthBuf = Buffer.alloc(4);
99
+ lengthBuf.writeUInt32BE(textData.length, 0);
100
+ const crcInput = Buffer.concat([typeBuf, textData]);
101
+ const crcVal = pngCrc32(crcInput);
102
+ const crcBuf = Buffer.alloc(4);
103
+ crcBuf.writeUInt32BE(crcVal >>> 0, 0);
104
+ const textChunk = Buffer.concat([lengthBuf, typeBuf, textData, crcBuf]);
105
+ // Assemble: [everything before IEND] + [tEXt chunk] + [IEND]
106
+ const beforeIend = BASE_PNG_BYTES.subarray(0, iendOffset);
107
+ const iendChunk = BASE_PNG_BYTES.subarray(iendOffset);
108
+ const png = Buffer.concat([beforeIend, textChunk, iendChunk]);
109
+ return png.toString("base64");
110
+ }
111
+ /**
112
+ * Extract the `vc-archive-id` value from a placeholder PNG's tEXt chunk.
113
+ * Returns null if the PNG doesn't contain our marker.
114
+ */
115
+ export function extractArchiveId(pngBase64) {
116
+ let buf;
117
+ try {
118
+ buf = Buffer.from(pngBase64, "base64");
119
+ }
120
+ catch {
121
+ return null;
122
+ }
123
+ // PNG signature is 8 bytes, then chunks follow.
124
+ let offset = 8;
125
+ while (offset + 8 <= buf.length) {
126
+ const chunkLen = buf.readUInt32BE(offset);
127
+ const chunkType = buf.subarray(offset + 4, offset + 8).toString("ascii");
128
+ if (chunkType === "tEXt") {
129
+ const chunkData = buf.subarray(offset + 8, offset + 8 + chunkLen);
130
+ const nullIdx = chunkData.indexOf(0);
131
+ if (nullIdx >= 0) {
132
+ const keyword = chunkData.subarray(0, nullIdx).toString("ascii");
133
+ if (keyword === TEXT_CHUNK_KEYWORD) {
134
+ return chunkData.subarray(nullIdx + 1).toString("ascii");
135
+ }
136
+ }
137
+ }
138
+ // Skip to next chunk: length(4) + type(4) + data(chunkLen) + crc(4)
139
+ offset += 12 + chunkLen;
140
+ }
141
+ return null;
142
+ }
143
+ // ---------------------------------------------------------------------------
144
+ // Object key / URL helpers
145
+ // ---------------------------------------------------------------------------
146
+ function mediaTypeToExtension(mediaType) {
147
+ if (mediaType.includes("jpeg") || mediaType.includes("jpg"))
148
+ return ".jpg";
149
+ if (mediaType.includes("gif"))
150
+ return ".gif";
151
+ if (mediaType.includes("webp"))
152
+ return ".webp";
153
+ return ".png";
154
+ }
155
+ function buildKey(date, sessionId, archiveId, mediaType) {
156
+ const ext = mediaTypeToExtension(mediaType);
157
+ return `images/${date}/${sessionId}/${archiveId}${ext}`;
158
+ }
159
+ function buildUrl(config, key) {
160
+ if (config.provider === "tos") {
161
+ return `https://${config.bucket}.${config.endpoint}/${key}`;
162
+ }
163
+ return `https://${config.bucket}.s3.${config.region}.amazonaws.com/${key}`;
164
+ }
165
+ // ---------------------------------------------------------------------------
166
+ // Upload
167
+ // ---------------------------------------------------------------------------
168
+ /**
169
+ * Prepare an archive entry and start a background upload.
170
+ *
171
+ * Returns the archive result (including the custom placeholder) immediately
172
+ * without waiting for the upload. The upload runs fire-and-forget — if it
173
+ * fails, the placeholder is already in place and the sidecar record still
174
+ * references the expected URL. This is acceptable: the main loop is never
175
+ * blocked by upload latency or transient failures.
176
+ *
177
+ * Returns null only when archiving is not configured.
178
+ */
179
+ export function archiveImage(base64Data, mediaType, sessionId) {
180
+ const config = getConfig();
181
+ if (!config)
182
+ return null;
183
+ const now = new Date();
184
+ const date = now.toISOString().slice(0, 10);
185
+ const sha256Full = createHash("sha256").update(base64Data).digest("hex");
186
+ const sha8 = sha256Full.slice(0, 8);
187
+ const archiveId = `img_${now.getTime()}_${sha8}`;
188
+ const key = buildKey(date, sessionId, archiveId, mediaType);
189
+ const url = buildUrl(config, key);
190
+ const archivedAt = now.toISOString();
191
+ const originalSizeBytes = Math.ceil(base64Data.length * 3 / 4);
192
+ // Fire-and-forget: start upload in background.
193
+ const buffer = Buffer.from(base64Data, "base64");
194
+ const upload = config.provider === "tos"
195
+ ? uploadToTos(buffer, mediaType, key, config)
196
+ : uploadToS3(buffer, mediaType, key, config);
197
+ upload
198
+ .then(() => {
199
+ logger.debug(`[image-archive] uploaded ${archiveId} (${config.provider})`);
200
+ })
201
+ .catch((err) => {
202
+ logger.warn(`[image-archive] upload failed for ${archiveId}: ${err instanceof Error ? err.message : String(err)}`);
203
+ });
204
+ return {
205
+ archiveId,
206
+ url,
207
+ placeholderBase64: generatePlaceholderPng(archiveId),
208
+ sha256: sha256Full,
209
+ mediaType,
210
+ originalSizeBytes,
211
+ sessionId,
212
+ archivedAt,
213
+ };
214
+ }
215
+ // ---------------------------------------------------------------------------
216
+ // Sidecar file
217
+ // ---------------------------------------------------------------------------
218
+ /**
219
+ * Append an archive record to the sidecar JSONL file. Creates the file if
220
+ * it does not exist. Uses synchronous I/O so the caller is not blocked by
221
+ * a promise — the sidecar is a small local append, not a network operation.
222
+ */
223
+ export function appendToSidecar(sidecarPath, result, transcriptPath) {
224
+ const record = {
225
+ archiveId: result.archiveId,
226
+ url: result.url,
227
+ sha256: result.sha256,
228
+ mediaType: result.mediaType,
229
+ originalSizeBytes: result.originalSizeBytes,
230
+ sessionId: result.sessionId,
231
+ transcriptPath,
232
+ archivedAt: result.archivedAt,
233
+ };
234
+ fs.appendFileSync(sidecarPath, JSON.stringify(record) + "\n", "utf-8");
235
+ }
236
+ // ---------------------------------------------------------------------------
237
+ // Provider implementations
238
+ // ---------------------------------------------------------------------------
239
+ async function uploadToTos(buffer, contentType, key, config) {
240
+ const _require = createRequire(import.meta.url);
241
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
242
+ const { TosClient } = _require("@volcengine/tos-sdk");
243
+ const client = new TosClient({
244
+ accessKeyId: config.accessKeyId,
245
+ accessKeySecret: config.accessKeySecret,
246
+ region: config.region,
247
+ endpoint: config.endpoint,
248
+ bucket: config.bucket,
249
+ secure: true,
250
+ });
251
+ await client.putObject({
252
+ bucket: config.bucket,
253
+ key,
254
+ body: buffer,
255
+ contentType,
256
+ });
257
+ /* eslint-enable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
258
+ }
259
+ async function uploadToS3(buffer, contentType, key, config) {
260
+ const _require = createRequire(import.meta.url);
261
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
262
+ const { S3Client, PutObjectCommand } = _require("@aws-sdk/client-s3");
263
+ const client = new S3Client({
264
+ region: config.region,
265
+ credentials: {
266
+ accessKeyId: config.accessKeyId,
267
+ secretAccessKey: config.secretAccessKey,
268
+ },
269
+ });
270
+ await client.send(new PutObjectCommand({
271
+ Bucket: config.bucket,
272
+ Key: key,
273
+ Body: buffer,
274
+ ContentType: contentType,
275
+ }));
276
+ /* eslint-enable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
277
+ }
278
+ //# sourceMappingURL=image-archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-archive.js","sourceRoot":"","sources":["../../src/agent/image-archive.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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;AA6DD;;;;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,CAsH7B"}
1
+ {"version":3,"file":"image-pruner.d.ts","sourceRoot":"","sources":["../../src/agent/image-pruner.ts"],"names":[],"mappings":"AAYA,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;AAqFD;;;;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,CAwH7B"}
@@ -5,6 +5,7 @@ import path from "path";
5
5
  import readline from "readline";
6
6
  import { logger } from "../logger.js";
7
7
  import { getImageDimensions, resizeBase64ForVision, CLAUDE_MAX_LONG_EDGE_PX } from "../tools/screenshot.js";
8
+ import { archiveImage, appendToSidecar, isArchiveEnabled, extractArchiveId } from "./image-archive.js";
8
9
  const PLACEHOLDER_PNG_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==";
9
10
  function isObject(v) {
10
11
  return typeof v === "object" && v !== null;
@@ -20,15 +21,36 @@ function isBase64ImageBlock(block) {
20
21
  if (source.type !== "base64")
21
22
  return false;
22
23
  const data = source.data;
23
- return (typeof data === "string" &&
24
- data.length > 0 &&
25
- // Ignore our own placeholder so repeated runs don't keep counting/replacing it.
26
- data !== PLACEHOLDER_PNG_BASE64);
24
+ if (typeof data !== "string" || data.length === 0)
25
+ return false;
26
+ // Ignore our own placeholders so repeated runs don't keep counting them.
27
+ if (data === PLACEHOLDER_PNG_BASE64)
28
+ return false;
29
+ if (extractArchiveId(data) !== null)
30
+ return false;
31
+ return true;
27
32
  }
28
- function replaceBase64ImageBlock(block) {
33
+ /**
34
+ * Archive the original image (if configured) and replace the block data with
35
+ * a placeholder. When archiving is enabled, uses a custom placeholder PNG
36
+ * containing the archive ID; the actual upload runs in the background.
37
+ * When archiving is disabled, falls back to the static 1x1 placeholder.
38
+ */
39
+ function replaceBase64ImageBlock(block, sessionId, sidecarPath, transcriptPath) {
29
40
  const source = block.source;
30
41
  if (!isObject(source))
31
42
  return;
43
+ const originalData = source.data;
44
+ const originalMediaType = source.media_type ?? "image/png";
45
+ if (isArchiveEnabled() && originalData) {
46
+ const result = archiveImage(originalData, originalMediaType, sessionId);
47
+ if (result) {
48
+ source.media_type = "image/png";
49
+ source.data = result.placeholderBase64;
50
+ appendToSidecar(sidecarPath, result, transcriptPath);
51
+ return;
52
+ }
53
+ }
32
54
  source.media_type = "image/png";
33
55
  source.data = PLACEHOLDER_PNG_BASE64;
34
56
  }
@@ -106,6 +128,8 @@ async function writeFileAtomic(filePath, content) {
106
128
  }
107
129
  export async function pruneSessionImages(options) {
108
130
  const { transcriptPath, keepLastNBase64Images } = options;
131
+ const sessionId = path.basename(transcriptPath, ".jsonl").slice(0, 8);
132
+ const sidecarPath = transcriptPath.replace(/\.jsonl$/, ".image-archive.jsonl");
109
133
  logger.debug(`[image-pruner] start keepLast=${keepLastNBase64Images} file=${transcriptPath}`);
110
134
  // Fast path: if file doesn't exist, nothing to do.
111
135
  if (!fs.existsSync(transcriptPath)) {
@@ -158,7 +182,7 @@ export async function pruneSessionImages(options) {
158
182
  }
159
183
  for (const ref of entry.imageRefs) {
160
184
  if (remainingToPrune > 0) {
161
- replaceBase64ImageBlock(ref);
185
+ replaceBase64ImageBlock(ref, sessionId, sidecarPath, transcriptPath);
162
186
  remainingToPrune -= 1;
163
187
  prunedImageBlocks += 1;
164
188
  fileChanged = true;
@@ -1 +1 @@
1
- {"version":3,"file":"image-pruner.js","sourceRoot":"","sources":["../../src/agent/image-pruner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"image-pruner.js","sourceRoot":"","sources":["../../src/agent/image-pruner.ts"],"names":[],"mappings":"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"}