visionclaw 0.1.167 → 0.1.169

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 (111) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/agent/api-proxy.d.ts +26 -0
  3. package/dist/agent/api-proxy.d.ts.map +1 -0
  4. package/dist/agent/api-proxy.js +165 -0
  5. package/dist/agent/api-proxy.js.map +1 -0
  6. package/dist/agent/command-dispatcher.d.ts +10 -0
  7. package/dist/agent/command-dispatcher.d.ts.map +1 -1
  8. package/dist/agent/command-dispatcher.js +14 -0
  9. package/dist/agent/command-dispatcher.js.map +1 -1
  10. package/dist/agent/context.js +3 -3
  11. package/dist/agent/context.js.map +1 -1
  12. package/dist/agent/data-collector.d.ts.map +1 -1
  13. package/dist/agent/data-collector.js +124 -20
  14. package/dist/agent/data-collector.js.map +1 -1
  15. package/dist/agent/gather-context.d.ts +2 -2
  16. package/dist/agent/gather-context.d.ts.map +1 -1
  17. package/dist/agent/gather-context.js +3 -2
  18. package/dist/agent/gather-context.js.map +1 -1
  19. package/dist/agent/image-pruner.d.ts.map +1 -1
  20. package/dist/agent/image-pruner.js +44 -2
  21. package/dist/agent/image-pruner.js.map +1 -1
  22. package/dist/agent/loop.d.ts.map +1 -1
  23. package/dist/agent/loop.js +72 -4
  24. package/dist/agent/loop.js.map +1 -1
  25. package/dist/agent/providers/claude/session.d.ts.map +1 -1
  26. package/dist/agent/providers/claude/session.js +10 -1
  27. package/dist/agent/providers/claude/session.js.map +1 -1
  28. package/dist/agent/providers/client-factory.d.ts +8 -0
  29. package/dist/agent/providers/client-factory.d.ts.map +1 -1
  30. package/dist/agent/providers/client-factory.js +34 -0
  31. package/dist/agent/providers/client-factory.js.map +1 -1
  32. package/dist/agent/providers/openai/session.d.ts.map +1 -1
  33. package/dist/agent/providers/openai/session.js +7 -0
  34. package/dist/agent/providers/openai/session.js.map +1 -1
  35. package/dist/agent/session-trimmer.d.ts +24 -6
  36. package/dist/agent/session-trimmer.d.ts.map +1 -1
  37. package/dist/agent/session-trimmer.js +115 -8
  38. package/dist/agent/session-trimmer.js.map +1 -1
  39. package/dist/agent/system-prompt.d.ts.map +1 -1
  40. package/dist/agent/system-prompt.js +2 -0
  41. package/dist/agent/system-prompt.js.map +1 -1
  42. package/dist/agent/upgrade-handler.d.ts.map +1 -1
  43. package/dist/agent/upgrade-handler.js +8 -1
  44. package/dist/agent/upgrade-handler.js.map +1 -1
  45. package/dist/agent/usage-handler.d.ts +7 -0
  46. package/dist/agent/usage-handler.d.ts.map +1 -0
  47. package/dist/agent/usage-handler.js +28 -0
  48. package/dist/agent/usage-handler.js.map +1 -0
  49. package/dist/calendar/scheduler.d.ts +8 -1
  50. package/dist/calendar/scheduler.d.ts.map +1 -1
  51. package/dist/calendar/scheduler.js +11 -2
  52. package/dist/calendar/scheduler.js.map +1 -1
  53. package/dist/channels/telegram.d.ts.map +1 -1
  54. package/dist/channels/telegram.js +4 -1
  55. package/dist/channels/telegram.js.map +1 -1
  56. package/dist/config/index.d.ts +7 -0
  57. package/dist/config/index.d.ts.map +1 -1
  58. package/dist/config/index.js +16 -0
  59. package/dist/config/index.js.map +1 -1
  60. package/dist/data-processing/convert-demo-cli.d.ts +7 -0
  61. package/dist/data-processing/convert-demo-cli.d.ts.map +1 -0
  62. package/dist/data-processing/convert-demo-cli.js +30 -0
  63. package/dist/data-processing/convert-demo-cli.js.map +1 -0
  64. package/dist/data-processing/convert-demo.d.ts +26 -0
  65. package/dist/data-processing/convert-demo.d.ts.map +1 -0
  66. package/dist/data-processing/convert-demo.js +233 -0
  67. package/dist/data-processing/convert-demo.js.map +1 -0
  68. package/dist/data-processing/convert-openai-chat-cli.d.ts +7 -0
  69. package/dist/data-processing/convert-openai-chat-cli.d.ts.map +1 -0
  70. package/dist/data-processing/convert-openai-chat-cli.js +30 -0
  71. package/dist/data-processing/convert-openai-chat-cli.js.map +1 -0
  72. package/dist/data-processing/convert-openai-chat.d.ts +23 -0
  73. package/dist/data-processing/convert-openai-chat.d.ts.map +1 -0
  74. package/dist/data-processing/convert-openai-chat.js +446 -0
  75. package/dist/data-processing/convert-openai-chat.js.map +1 -0
  76. package/dist/data-processing/image-recovery.js +1 -1
  77. package/dist/data-processing/image-recovery.js.map +1 -1
  78. package/dist/data-processing/index.d.ts +1 -0
  79. package/dist/data-processing/index.d.ts.map +1 -1
  80. package/dist/data-processing/index.js +1 -0
  81. package/dist/data-processing/index.js.map +1 -1
  82. package/dist/data-processing/record-builder.d.ts.map +1 -1
  83. package/dist/data-processing/record-builder.js +5 -0
  84. package/dist/data-processing/record-builder.js.map +1 -1
  85. package/dist/data-processing/sdk-transcript.d.ts.map +1 -1
  86. package/dist/data-processing/sdk-transcript.js +16 -5
  87. package/dist/data-processing/sdk-transcript.js.map +1 -1
  88. package/dist/data-processing/types.d.ts +7 -0
  89. package/dist/data-processing/types.d.ts.map +1 -1
  90. package/dist/data-processing/types.js +7 -0
  91. package/dist/data-processing/types.js.map +1 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/logger.d.ts.map +1 -1
  94. package/dist/logger.js +8 -4
  95. package/dist/logger.js.map +1 -1
  96. package/dist/onboarding/bot-profile.d.ts +5 -0
  97. package/dist/onboarding/bot-profile.d.ts.map +1 -1
  98. package/dist/onboarding/bot-profile.js +48 -2
  99. package/dist/onboarding/bot-profile.js.map +1 -1
  100. package/dist/onboarding/google-auth.d.ts.map +1 -1
  101. package/dist/onboarding/google-auth.js +5 -1
  102. package/dist/onboarding/google-auth.js.map +1 -1
  103. package/dist/onboarding/onboarding-service-client.d.ts +1 -0
  104. package/dist/onboarding/onboarding-service-client.d.ts.map +1 -1
  105. package/dist/onboarding/onboarding-service-client.js.map +1 -1
  106. package/dist/tools/screenshot.d.ts +1 -1
  107. package/dist/tools/screenshot.d.ts.map +1 -1
  108. package/dist/tools/screenshot.js +24 -13
  109. package/dist/tools/screenshot.js.map +1 -1
  110. package/dist-agent/bundle.cjs +2678 -1734
  111. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,47 @@
1
+ ## [0.1.169](https://github.com/babelcloud/visionclaw/compare/v0.1.168...v0.1.169) (2026-03-26)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * add 1-hour lookback grace period to calendar event fetching ([b251125](https://github.com/babelcloud/visionclaw/commit/b2511253a361167d6f32a5095ef0be5c30425288))
7
+ * add retry + placeholder for failed image downloads ([cc64f00](https://github.com/babelcloud/visionclaw/commit/cc64f009cc8c2833e8ab82f41cb15ad39329f09f)), closes [#45](https://github.com/babelcloud/visionclaw/issues/45)
8
+ * merge duplicate imports from config/types.js ([06ab7db](https://github.com/babelcloud/visionclaw/commit/06ab7db74ecaf26d4a9aa0071cb3ff4107326cbf))
9
+ * recover lost command acks on upgrade restart and heartbeat failure ([#41](https://github.com/babelcloud/visionclaw/issues/41)) ([8ca4952](https://github.com/babelcloud/visionclaw/commit/8ca49528d3c355b5ab6dfc2ebae737d693b4ae2a))
10
+ * remove URL image source fallback that causes Claude API 400 errors ([697bfaf](https://github.com/babelcloud/visionclaw/commit/697bfafb7ebbe6ff58db774fee0562efa1eca1c5))
11
+ * use heartbeat×1.2 lookback for calendar event fetching ([c3d210c](https://github.com/babelcloud/visionclaw/commit/c3d210ccfffdfa8aca3df92024501c23f75885f0))
12
+
13
+
14
+ ### Features
15
+
16
+ * **admin:** enhance agent status handling and UI updates ([0f87a11](https://github.com/babelcloud/visionclaw/commit/0f87a119326fd03bab7a4c06349298456e9d51b3))
17
+ * **agent:** add notes column and update functionality in agent management ([3ad37a9](https://github.com/babelcloud/visionclaw/commit/3ad37a983edf602091c16d028eb25f5fb1aa3909))
18
+ * **agent:** add notes functionality to agent management ([e1daaad](https://github.com/babelcloud/visionclaw/commit/e1daaad5f97abc75f07b4335fcfac5e1036bee17))
19
+ * **agent:** add onboardingComplete field to heartbeat and update logic ([3c4df4c](https://github.com/babelcloud/visionclaw/commit/3c4df4ccb565a728dcb6dff0a2416f13b5bb5585))
20
+ * **agent:** add usage command handler and UI button ([17488fe](https://github.com/babelcloud/visionclaw/commit/17488fe9b0347c80385f023d9499dee97d1ece7b))
21
+ * **agent:** integrate notes field into agent API ([0fe5d44](https://github.com/babelcloud/visionclaw/commit/0fe5d44383cc7bbbb119b837090facb413914fd3))
22
+ * **agent:** update agent status logic and heartbeat interval ([ab74498](https://github.com/babelcloud/visionclaw/commit/ab744980ab8ef245c9b8fc8cee9086dc859761e4))
23
+ * **command:** add 'convert-openai-chat' command and improve shutdown handling ([cc98717](https://github.com/babelcloud/visionclaw/commit/cc987177b91cb252e6cc00681d217bd3517fc3c1))
24
+ * **data-pipeline:** upgrade data processing pipeline for enhanced logging and retention ([0d0c436](https://github.com/babelcloud/visionclaw/commit/0d0c436655883c517df3b4dc54addb464a75bd42))
25
+ * **logger:** enhance logging functionality with new system prompt color and extended retention period ([ad4bbb5](https://github.com/babelcloud/visionclaw/commit/ad4bbb5fd94c7f0d4a79b99bf52979a0331982cc))
26
+
27
+
28
+
29
+ ## [0.1.168](https://github.com/babelcloud/visionclaw/compare/v0.1.167...v0.1.168) (2026-03-24)
30
+
31
+
32
+ ### Bug Fixes
33
+
34
+ * send periodic heartbeats during long busy periods ([#39](https://github.com/babelcloud/visionclaw/issues/39)) ([b58612a](https://github.com/babelcloud/visionclaw/commit/b58612adade301a9adea75a1f4c2a9901ee2ce17))
35
+
36
+
37
+ ### Features
38
+
39
+ * **admin:** implement sorting functionality for agent list ([19b8247](https://github.com/babelcloud/visionclaw/commit/19b8247b2522e0925a3fc8f4adc961c4da34fa72))
40
+ * auto-register Telegram bot commands on startup ([#40](https://github.com/babelcloud/visionclaw/issues/40)) ([974c5f7](https://github.com/babelcloud/visionclaw/commit/974c5f76ecd25d992372fd27c403167fc274ff55))
41
+ * **onboarding:** preload agent profile image for improved loading experience ([b9d8a18](https://github.com/babelcloud/visionclaw/commit/b9d8a18350eacecc32f479ddaea4209a00e3d193))
42
+
43
+
44
+
1
45
  ## [0.1.167](https://github.com/babelcloud/visionclaw/compare/v0.1.166...v0.1.167) (2026-03-24)
2
46
 
3
47
 
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Lightweight HTTP proxy that intercepts Anthropic API calls, logs the full
3
+ * request body (system prompt, tools, messages summary) to JSONL, and forwards
4
+ * the request to the real Anthropic API.
5
+ *
6
+ * Dev-mode only — started lazily when `buildAgentEnv()` detects dev mode and
7
+ * the Anthropic direct-API provider. The SDK subprocess (`cli.js`) is pointed
8
+ * to the proxy via `ANTHROPIC_BASE_URL=http://localhost:<port>`.
9
+ *
10
+ * Design: the proxy buffers the incoming request body, forwards it to the
11
+ * upstream via Node.js `https.request()` with explicit HTTP/1.1 ALPN, then
12
+ * pipes the response back to the SDK client.
13
+ */
14
+ export interface ApiProxyHandle {
15
+ port: number;
16
+ close: () => void;
17
+ }
18
+ /**
19
+ * Start the API logging proxy. Returns a handle with the assigned port.
20
+ * Subsequent calls return the same singleton.
21
+ */
22
+ export declare function startApiProxy(opts: {
23
+ targetBaseUrl?: string;
24
+ logDir: string;
25
+ }): Promise<ApiProxyHandle>;
26
+ //# sourceMappingURL=api-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-proxy.d.ts","sourceRoot":"","sources":["../../src/agent/api-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAuDD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,cAAc,CAAC,CA8H1B"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Lightweight HTTP proxy that intercepts Anthropic API calls, logs the full
3
+ * request body (system prompt, tools, messages summary) to JSONL, and forwards
4
+ * the request to the real Anthropic API.
5
+ *
6
+ * Dev-mode only — started lazily when `buildAgentEnv()` detects dev mode and
7
+ * the Anthropic direct-API provider. The SDK subprocess (`cli.js`) is pointed
8
+ * to the proxy via `ANTHROPIC_BASE_URL=http://localhost:<port>`.
9
+ *
10
+ * Design: the proxy buffers the incoming request body, forwards it to the
11
+ * upstream via Node.js `https.request()` with explicit HTTP/1.1 ALPN, then
12
+ * pipes the response back to the SDK client.
13
+ */
14
+ import http from "node:http";
15
+ import https from "node:https";
16
+ import fs from "node:fs";
17
+ import path from "node:path";
18
+ import { URL } from "node:url";
19
+ import { logger } from "../logger.js";
20
+ let singleton = null;
21
+ // HTTPS agent that forces HTTP/1.1 via ALPN to avoid HTTP/2 negotiation
22
+ // issues with Cloudflare/Anthropic's edge. Each request gets a fresh TLS
23
+ // connection (keepAlive off) to avoid stale-socket errors during the
24
+ // minutes-long idle periods between agent API calls.
25
+ const httpsAgent = new https.Agent({
26
+ keepAlive: false,
27
+ maxSockets: 10,
28
+ ALPNProtocols: ["http/1.1"],
29
+ });
30
+ /**
31
+ * Extract `<system-reminder>` text blocks from messages.
32
+ *
33
+ * The Claude Agent SDK injects these into user messages to provide the model
34
+ * with skill descriptions, context reminders, and other metadata. We extract
35
+ * them so the API log captures what the model actually sees.
36
+ */
37
+ function extractSystemReminders(messages) {
38
+ const reminders = [];
39
+ for (const msg of messages) {
40
+ const content = msg.content;
41
+ if (!Array.isArray(content))
42
+ continue;
43
+ for (const block of content) {
44
+ if (block.type === "text" &&
45
+ typeof block.text === "string" &&
46
+ block.text.includes("<system-reminder>")) {
47
+ reminders.push(block.text);
48
+ }
49
+ }
50
+ }
51
+ return reminders;
52
+ }
53
+ /**
54
+ * Start the API logging proxy. Returns a handle with the assigned port.
55
+ * Subsequent calls return the same singleton.
56
+ */
57
+ export async function startApiProxy(opts) {
58
+ if (singleton)
59
+ return singleton;
60
+ const targetBase = opts.targetBaseUrl ?? "https://api.anthropic.com";
61
+ const logDir = opts.logDir;
62
+ if (!fs.existsSync(logDir)) {
63
+ fs.mkdirSync(logDir, { recursive: true });
64
+ }
65
+ // Headers to strip when forwarding
66
+ const STRIP_HEADERS = new Set([
67
+ "host", "connection", "transfer-encoding",
68
+ ]);
69
+ const server = http.createServer((req, res) => {
70
+ const isMessagesEndpoint = req.method === "POST" && req.url?.startsWith("/v1/messages");
71
+ const targetUrl = new URL(req.url ?? "/", targetBase);
72
+ // Build outgoing headers
73
+ const fwdHeaders = {};
74
+ for (const [key, value] of Object.entries(req.headers)) {
75
+ if (STRIP_HEADERS.has(key))
76
+ continue;
77
+ fwdHeaders[key] = value;
78
+ }
79
+ fwdHeaders.host = targetUrl.host;
80
+ // Buffer the incoming request body, then forward
81
+ const chunks = [];
82
+ req.on("data", (chunk) => {
83
+ chunks.push(chunk);
84
+ });
85
+ req.on("error", (err) => {
86
+ logger.warn(`[api-proxy] client request error: ${err.message}`);
87
+ });
88
+ req.on("end", () => {
89
+ const body = Buffer.concat(chunks);
90
+ // Log the request (best-effort)
91
+ if (isMessagesEndpoint && body.length > 0) {
92
+ try {
93
+ const parsed = JSON.parse(body.toString("utf-8"));
94
+ const messages = parsed.messages;
95
+ const tools = parsed.tools;
96
+ const entry = {
97
+ timestamp: new Date().toISOString(),
98
+ model: parsed.model,
99
+ system: parsed.system,
100
+ tools: tools ?? [],
101
+ system_reminders: messages ? extractSystemReminders(messages) : [],
102
+ messages_count: messages?.length ?? 0,
103
+ messages_roles: messages?.map((m) => m.role ?? "unknown") ?? [],
104
+ request_size_bytes: body.length,
105
+ };
106
+ const date = new Date().toISOString().slice(0, 10);
107
+ const logPath = path.join(logDir, `api-calls-${date}.jsonl`);
108
+ fs.appendFileSync(logPath, JSON.stringify(entry) + "\n", "utf-8");
109
+ }
110
+ catch {
111
+ // Best-effort logging — don't break the proxy
112
+ }
113
+ }
114
+ // Forward the complete body to the upstream API via HTTPS.
115
+ // We set content-length explicitly since we have the full body.
116
+ fwdHeaders["content-length"] = String(body.length);
117
+ const proxyReq = https.request({
118
+ hostname: targetUrl.hostname,
119
+ port: 443,
120
+ path: targetUrl.pathname + targetUrl.search,
121
+ method: req.method,
122
+ headers: fwdHeaders,
123
+ agent: httpsAgent,
124
+ }, (proxyRes) => {
125
+ res.writeHead(proxyRes.statusCode ?? 502, proxyRes.headers);
126
+ proxyRes.pipe(res);
127
+ });
128
+ proxyReq.on("error", (err) => {
129
+ if (!req.destroyed) {
130
+ logger.warn(`[api-proxy] upstream error: ${err.message}`);
131
+ }
132
+ if (!res.headersSent) {
133
+ res.writeHead(502, { "Content-Type": "application/json" });
134
+ }
135
+ if (!res.writableEnded) {
136
+ res.end(JSON.stringify({ error: "proxy_error", message: err.message }));
137
+ }
138
+ });
139
+ // Send the buffered body and end the request
140
+ proxyReq.end(body);
141
+ });
142
+ });
143
+ return new Promise((resolve, reject) => {
144
+ server.on("error", reject);
145
+ server.listen(0, "127.0.0.1", () => {
146
+ const addr = server.address();
147
+ if (!addr || typeof addr === "string") {
148
+ reject(new Error("Failed to get proxy server address"));
149
+ return;
150
+ }
151
+ const handle = {
152
+ port: addr.port,
153
+ close: () => {
154
+ server.close();
155
+ httpsAgent.destroy();
156
+ singleton = null;
157
+ },
158
+ };
159
+ singleton = handle;
160
+ logger.system(`[api-proxy] listening on 127.0.0.1:${addr.port}`);
161
+ resolve(handle);
162
+ });
163
+ });
164
+ }
165
+ //# sourceMappingURL=api-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-proxy.js","sourceRoot":"","sources":["../../src/agent/api-proxy.ts"],"names":[],"mappings":"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"}
@@ -22,5 +22,15 @@ export declare class CommandDispatcher {
22
22
  * Drain all queued acks for inclusion in the next heartbeat.
23
23
  */
24
24
  drainAcks(): CommandAck[];
25
+ /**
26
+ * Put acks back into the queue (e.g. when the heartbeat POST fails
27
+ * and the acks were not delivered).
28
+ */
29
+ requeueAcks(acks: CommandAck[]): void;
30
+ /**
31
+ * Queue a single ack (e.g. a synthetic ack for a command whose ack was
32
+ * lost due to process restart).
33
+ */
34
+ queueAck(ack: CommandAck): void;
25
35
  }
26
36
  //# sourceMappingURL=command-dispatcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-dispatcher.d.ts","sourceRoot":"","sources":["../../src/agent/command-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAG7F,MAAM,MAAM,cAAc,GAAG,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAElE;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAE9C,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAI/D;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;IA8C1C;;OAEG;IACH,SAAS,IAAI,UAAU,EAAE;CAI1B"}
1
+ {"version":3,"file":"command-dispatcher.d.ts","sourceRoot":"","sources":["../../src/agent/command-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAG7F,MAAM,MAAM,cAAc,GAAG,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAElE;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAE9C,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAI/D;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;IA8C1C;;OAEG;IACH,SAAS,IAAI,UAAU,EAAE;IAKzB;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI;IAIrC;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;CAGhC"}
@@ -62,5 +62,19 @@ export class CommandDispatcher {
62
62
  return [];
63
63
  return this.pendingAcks.splice(0);
64
64
  }
65
+ /**
66
+ * Put acks back into the queue (e.g. when the heartbeat POST fails
67
+ * and the acks were not delivered).
68
+ */
69
+ requeueAcks(acks) {
70
+ this.pendingAcks.unshift(...acks);
71
+ }
72
+ /**
73
+ * Queue a single ack (e.g. a synthetic ack for a command whose ack was
74
+ * lost due to process restart).
75
+ */
76
+ queueAck(ack) {
77
+ this.pendingAcks.push(ack);
78
+ }
65
79
  }
66
80
  //# sourceMappingURL=command-dispatcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-dispatcher.js","sourceRoot":"","sources":["../../src/agent/command-dispatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-dispatcher.js","sourceRoot":"","sources":["../../src/agent/command-dispatcher.ts"],"names":[],"mappings":"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"}
@@ -28,10 +28,10 @@ async function resolveImageAttachment(att) {
28
28
  },
29
29
  };
30
30
  }
31
- logger.warn(`Could not resize attachment image, sending as URL: ${att.url}`);
31
+ logger.warn(`Could not download/resize attachment image after retries, using placeholder: ${att.url}`);
32
32
  return {
33
- type: "image",
34
- source: { type: "url", url: att.url },
33
+ type: "text",
34
+ text: "[Image attachment: download failed after retries, image unavailable. Ask the user to resend if needed.]",
35
35
  };
36
36
  }
37
37
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-collector.d.ts","sourceRoot":"","sources":["../../src/agent/data-collector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsBH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAkR9D,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,CA4FjF"}
1
+ {"version":3,"file":"data-collector.d.ts","sourceRoot":"","sources":["../../src/agent/data-collector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsBH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAgY9D,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,CAkGjF"}
@@ -96,31 +96,38 @@ function collectLogs(since, tmpDir) {
96
96
  }
97
97
  const allFiles = fs.readdirSync(logsDir).filter((f) => f.endsWith(".jsonl") || f.endsWith(".jsonl.gz"));
98
98
  const filtered = allFiles.filter((f) => {
99
- const match = /^(\d{4}-\d{2}-\d{2})/.exec(f);
99
+ // Date-prefixed log files (YYYY-MM-DD.jsonl, api-calls-YYYY-MM-DD.jsonl, etc.)
100
+ const match = /(\d{4}-\d{2}-\d{2})/.exec(f);
100
101
  return match ? match[1] >= since : false;
101
102
  });
102
- if (filtered.length === 0) {
103
- logger.system(`[data-collector] No log files matched since=${since} (total ${allFiles.length} files in dir)`);
103
+ // Fallback: if no date-prefixed files matched, pack everything in the folder
104
+ const toPack = filtered.length > 0 ? filtered : allFiles;
105
+ if (toPack.length === 0) {
106
+ logger.system(`[data-collector] No log files found in dir`);
104
107
  return null;
105
108
  }
109
+ if (filtered.length === 0 && allFiles.length > 0) {
110
+ logger.system(`[data-collector] No dated log files matched since=${since} — falling back to all ${allFiles.length} file(s)`);
111
+ }
106
112
  // Copy to tmp for concurrent safety
107
113
  const logsTmpDir = path.join(tmpDir, "logs-src");
108
114
  fs.mkdirSync(logsTmpDir, { recursive: true });
109
115
  let totalBytes = 0;
110
- for (const f of filtered) {
116
+ for (const f of toPack) {
111
117
  fs.copyFileSync(path.join(logsDir, f), path.join(logsTmpDir, f));
112
118
  totalBytes += fs.statSync(path.join(logsTmpDir, f)).size;
113
119
  }
114
120
  const archivePath = path.join(tmpDir, "logs.tar.gz");
115
- createTarGz(logsTmpDir, archivePath, filtered);
116
- return { archivePath, fileCount: filtered.length, totalBytes };
121
+ createTarGz(logsTmpDir, archivePath, toPack);
122
+ return { archivePath, fileCount: toPack.length, totalBytes };
117
123
  }
118
- function collectTranscripts(tmpDir) {
124
+ function collectTranscripts(since, tmpDir) {
119
125
  const configDir = getConfigDir();
120
126
  const transcriptDir = getClaudeTranscriptDirForProfileDir(configDir);
121
127
  const sessionFilePath = getSessionFile();
122
128
  logger.system(`[data-collector] Transcript dir: ${transcriptDir}`);
123
129
  logger.system(`[data-collector] Session file: ${sessionFilePath}`);
130
+ logger.system(`[data-collector] Transcript since: ${since}`);
124
131
  if (!fs.existsSync(transcriptDir)) {
125
132
  logger.system(`[data-collector] Transcript dir does not exist — skipping`);
126
133
  return null;
@@ -131,22 +138,114 @@ function collectTranscripts(tmpDir) {
131
138
  return null;
132
139
  }
133
140
  logger.system(`[data-collector] Active session IDs: ${activeSessionIds.join(", ")}`);
141
+ const sinceMs = new Date(since + "T00:00:00").getTime();
134
142
  // Copy active session files to tmp
135
143
  const transcriptTmpDir = path.join(tmpDir, "transcripts-src");
136
144
  fs.mkdirSync(transcriptTmpDir, { recursive: true });
137
145
  let totalBytes = 0;
138
146
  const filesToPack = [];
147
+ const copyFile = (src, destRelative) => {
148
+ if (!fs.existsSync(src))
149
+ return;
150
+ const destPath = path.join(transcriptTmpDir, destRelative);
151
+ const destDir = path.dirname(destPath);
152
+ if (!fs.existsSync(destDir))
153
+ fs.mkdirSync(destDir, { recursive: true });
154
+ const srcSize = fs.statSync(src).size;
155
+ logger.system(`[data-collector] Copying transcript file ${destRelative} (${formatBytes(srcSize)})`);
156
+ fs.copyFileSync(src, destPath);
157
+ totalBytes += srcSize;
158
+ filesToPack.push(destRelative);
159
+ };
160
+ // List all files in transcript dir once
161
+ const allDirEntries = fs.readdirSync(transcriptDir);
139
162
  for (const sessionId of activeSessionIds) {
140
- for (const suffix of [".jsonl", ".archive.jsonl", ".image-archive.jsonl"]) {
141
- const fileName = `${sessionId}${suffix}`;
142
- const src = path.join(transcriptDir, fileName);
143
- if (!fs.existsSync(src))
163
+ const countBefore = filesToPack.length;
164
+ // 1. Always copy live transcript (current active data)
165
+ copyFile(path.join(transcriptDir, `${sessionId}.jsonl`), `${sessionId}.jsonl`);
166
+ // Collect all files belonging to this session for date-filtered pass
167
+ const sessionFiles = allDirEntries.filter((f) => f.startsWith(sessionId));
168
+ let datedFilesFound = false;
169
+ // 2. Date-stamped archives: *.archive.YYYY-MM-DD.jsonl
170
+ // and image archives: *.image-archive.YYYY-MM-DD.jsonl
171
+ for (const f of sessionFiles) {
172
+ // Date-stamped archive
173
+ const archiveDate = /\.archive\.(\d{4}-\d{2}-\d{2})\.jsonl$/.exec(f);
174
+ if (archiveDate) {
175
+ datedFilesFound = true;
176
+ if (archiveDate[1] >= since) {
177
+ copyFile(path.join(transcriptDir, f), f);
178
+ }
144
179
  continue;
145
- const srcSize = fs.statSync(src).size;
146
- logger.system(`[data-collector] Copying transcript file ${fileName} (${formatBytes(srcSize)})`);
147
- fs.copyFileSync(src, path.join(transcriptTmpDir, fileName));
148
- totalBytes += srcSize;
149
- filesToPack.push(fileName);
180
+ }
181
+ // Date-stamped image archive
182
+ const imgArchiveDate = /\.image-archive\.(\d{4}-\d{2}-\d{2})\.jsonl$/.exec(f);
183
+ if (imgArchiveDate) {
184
+ datedFilesFound = true;
185
+ if (imgArchiveDate[1] >= since) {
186
+ copyFile(path.join(transcriptDir, f), f);
187
+ }
188
+ continue;
189
+ }
190
+ }
191
+ if (!datedFilesFound) {
192
+ // Fallback: no date-stamped files found for this session — collect all
193
+ // legacy files (undated archives) regardless of mtime so we don't miss data.
194
+ for (const f of sessionFiles) {
195
+ // Skip the live .jsonl (already copied above)
196
+ if (f === `${sessionId}.jsonl`)
197
+ continue;
198
+ if (!f.endsWith(".jsonl"))
199
+ continue;
200
+ copyFile(path.join(transcriptDir, f), f);
201
+ }
202
+ logger.system(`[data-collector] No dated archives for session ${sessionId.slice(0, 8)} — falling back to all files`);
203
+ }
204
+ else {
205
+ // Date-stamped files exist; also collect legacy undated archives if mtime matches
206
+ for (const f of sessionFiles) {
207
+ if (f === `${sessionId}.archive.jsonl` || f === `${sessionId}.image-archive.jsonl`) {
208
+ const src = path.join(transcriptDir, f);
209
+ try {
210
+ const stat = fs.statSync(src);
211
+ if (stat.mtimeMs >= sinceMs) {
212
+ copyFile(src, f);
213
+ }
214
+ }
215
+ catch { /* ignore */ }
216
+ }
217
+ }
218
+ }
219
+ // 3. Sub-agent transcripts by mtime (fallback: all if nothing matches)
220
+ const subagentsDir = path.join(transcriptDir, sessionId, "subagents");
221
+ if (fs.existsSync(subagentsDir)) {
222
+ try {
223
+ const subEntries = fs.readdirSync(subagentsDir).filter((s) => s.endsWith(".jsonl"));
224
+ const matchedSubs = [];
225
+ for (const sub of subEntries) {
226
+ const subPath = path.join(subagentsDir, sub);
227
+ try {
228
+ const stat = fs.statSync(subPath);
229
+ if (stat.mtimeMs >= sinceMs) {
230
+ matchedSubs.push(sub);
231
+ }
232
+ }
233
+ catch { /* ignore */ }
234
+ }
235
+ // Fallback: if no sub-agent files matched by mtime, pack all of them
236
+ const subsToPack = matchedSubs.length > 0 ? matchedSubs : subEntries;
237
+ if (matchedSubs.length === 0 && subEntries.length > 0) {
238
+ logger.system(`[data-collector] No sub-agent files matched since=${since} for ${sessionId.slice(0, 8)} — falling back to all ${subEntries.length} file(s)`);
239
+ }
240
+ for (const sub of subsToPack) {
241
+ const relPath = path.join(sessionId, "subagents", sub);
242
+ copyFile(path.join(subagentsDir, sub), relPath);
243
+ }
244
+ }
245
+ catch { /* ignore */ }
246
+ }
247
+ if (filesToPack.length === countBefore) {
248
+ logger.system(`[data-collector] No transcript files collected for session ${sessionId.slice(0, 8)}`);
150
249
  }
151
250
  }
152
251
  if (filesToPack.length === 0)
@@ -239,6 +338,11 @@ export function createCollectDataHandler(config) {
239
338
  .replace(/[-:]/g, "")
240
339
  .replace("T", "T")
241
340
  .slice(0, 15);
341
+ // Cross-midnight safety: subtract 1 day so trajectories spanning midnight
342
+ // are fully captured (the extra day of overlap is cheap and safe).
343
+ const sinceDate = new Date(since);
344
+ sinceDate.setDate(sinceDate.getDate() - 1);
345
+ const effectiveSince = sinceDate.toISOString().slice(0, 10);
242
346
  const creds = getTosCredentials(config);
243
347
  const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "vc-collect-"));
244
348
  let uploadedFiles = 0;
@@ -246,8 +350,8 @@ export function createCollectDataHandler(config) {
246
350
  try {
247
351
  // 1. Logs
248
352
  try {
249
- logger.system(`[data-collector] Collecting logs since ${since}...`);
250
- const logs = collectLogs(since, tmpDir);
353
+ logger.system(`[data-collector] Collecting logs since ${effectiveSince} (requested: ${since})...`);
354
+ const logs = collectLogs(effectiveSince, tmpDir);
251
355
  if (logs) {
252
356
  const key = `${agentId}/${timestamp}/logs/logs.tar.gz`;
253
357
  logger.system(`[data-collector] Uploading logs (${logs.fileCount} files, ${formatBytes(logs.totalBytes)})...`);
@@ -261,8 +365,8 @@ export function createCollectDataHandler(config) {
261
365
  }
262
366
  // 2. Transcripts
263
367
  try {
264
- logger.system("[data-collector] Collecting transcripts...");
265
- const transcripts = collectTranscripts(tmpDir);
368
+ logger.system(`[data-collector] Collecting transcripts since ${effectiveSince}...`);
369
+ const transcripts = collectTranscripts(effectiveSince, tmpDir);
266
370
  if (transcripts) {
267
371
  const key = `${agentId}/${timestamp}/transcripts/transcripts.tar.gz`;
268
372
  logger.system(`[data-collector] Uploading transcripts (${transcripts.fileCount} files, ${formatBytes(transcripts.totalBytes)} raw)...`);