@koda-sl/baker-bridge 0.65.1 → 0.66.2

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.
@@ -43,6 +43,9 @@ function minimalPdf(text) {
43
43
  chunks.push(Buffer.from(`trailer << /Root 1 0 R /Size 6 >>\nstartxref\n${String(xrefOffset)}\n%%EOF\n`, "ascii"));
44
44
  return Buffer.concat(chunks);
45
45
  }
46
+ function readyPdfText(attachment) {
47
+ return attachment?.status === "ready" ? attachment.pdfText?.text : undefined;
48
+ }
46
49
  async function installFakePdftotext(script) {
47
50
  const dir = await mkdtemp(join(tmpdir(), "baker-bridge-pdftotext-"));
48
51
  tempDirs.push(dir);
@@ -61,37 +64,125 @@ describe("buildAttachmentPromptSuffix", () => {
61
64
  it("labels local attachment paths with the original filename", () => {
62
65
  const suffix = buildAttachmentPromptSuffix([
63
66
  {
67
+ status: "ready",
64
68
  originalFilename: "checkout-form-broken-mobile.png",
65
69
  localPath: "/tmp/attachments/1738256789-checkout_form_broken_mobile.png",
66
70
  kind: "file",
67
71
  },
68
72
  ]);
69
- expect(suffix).toContain("- checkout-form-broken-mobile.png: /tmp/attachments/1738256789-checkout_form_broken_mobile.png");
73
+ expect(suffix).toContain("- checkout-form-broken-mobile.png /tmp/attachments/1738256789-checkout_form_broken_mobile.png");
74
+ expect(suffix).toContain("Use the Read tool on the path above to open it.");
75
+ });
76
+ it("states the obligation to open attachments and not to search for them", () => {
77
+ const suffix = buildAttachmentPromptSuffix([
78
+ { status: "ready", originalFilename: "brief.png", localPath: "/tmp/attachments/1-brief.png", kind: "file" },
79
+ ]);
80
+ expect(suffix).toContain("=== ATTACHED FILE (1) ===");
81
+ expect(suffix).toContain("Open and use it before you answer.");
82
+ expect(suffix).toContain("do not search the workspace for it");
70
83
  });
71
- it("inlines extracted PDF text and tells the agent not to use Read for PDFs", () => {
84
+ it("inlines extracted PDF text and still permits Read as a fallback", () => {
72
85
  const suffix = buildAttachmentPromptSuffix([
73
86
  {
87
+ status: "ready",
74
88
  originalFilename: "promo brief.pdf",
75
89
  localPath: "/tmp/attachments/1738256789-promo_brief.pdf",
76
90
  kind: "pdf",
77
91
  pdfText: { text: "Monthly promo: 25% discount", truncated: false },
78
92
  },
79
93
  ]);
80
- expect(suffix).toContain("Do not use the Read tool on PDF attachments in this turn");
81
- expect(suffix).toContain("- promo brief.pdf: /tmp/attachments/1738256789-promo_brief.pdf");
94
+ expect(suffix).toContain("- promo brief.pdf /tmp/attachments/1738256789-promo_brief.pdf");
82
95
  expect(suffix).toContain("<pdf_text>");
83
96
  expect(suffix).toContain("Monthly promo: 25% discount");
97
+ expect(suffix).toContain("Use the Read tool on the path above if you need layout, images, or exact pages");
98
+ expect(suffix).not.toContain("Do not use the Read tool");
84
99
  });
85
- it("warns when a PDF cannot be extracted locally", () => {
100
+ it("sends the agent to Read the file when PDF extraction fails", () => {
86
101
  const suffix = buildAttachmentPromptSuffix([
87
102
  {
103
+ status: "ready",
88
104
  originalFilename: "locked.pdf",
89
105
  localPath: "/tmp/attachments/1738256789-locked.pdf",
90
106
  kind: "pdf",
91
107
  },
92
108
  ]);
93
- expect(suffix).toContain("PDF text extraction failed locally");
94
- expect(suffix).toContain("ask the user for a text export or an unlocked PDF");
109
+ expect(suffix).toContain("Use the Read tool on the path above to read it directly");
110
+ expect(suffix).toContain("do not answer as if you had read it");
111
+ });
112
+ it("asks for a resend only when sending the same file again could work", () => {
113
+ const suffix = buildAttachmentPromptSuffix([
114
+ {
115
+ status: "ready",
116
+ originalFilename: "ok.png",
117
+ localPath: "/tmp/attachments/1-ok.png",
118
+ kind: "file",
119
+ },
120
+ {
121
+ status: "unavailable",
122
+ originalFilename: "contract.pdf",
123
+ reason: "it could not be downloaded",
124
+ recovery: "resend",
125
+ },
126
+ ]);
127
+ expect(suffix).toContain("- contract.pdf — NOT AVAILABLE: it could not be downloaded.");
128
+ expect(suffix).toContain("ask them to send it again");
129
+ });
130
+ it("does not send the user in a loop re-sending a file that will fail identically", () => {
131
+ const suffix = buildAttachmentPromptSuffix([
132
+ {
133
+ status: "ready",
134
+ originalFilename: "ok.png",
135
+ localPath: "/tmp/attachments/1-ok.png",
136
+ kind: "file",
137
+ },
138
+ {
139
+ status: "unavailable",
140
+ originalFilename: "huge.png",
141
+ reason: "it is 9.4 MB, over the 5 MB limit for images",
142
+ recovery: "different_file",
143
+ },
144
+ ]);
145
+ expect(suffix).toContain("Sending the same file again will fail the same way");
146
+ expect(suffix).toContain("ask for a smaller or corrected version");
147
+ expect(suffix).not.toContain("send it again");
148
+ });
149
+ it("does not claim files are on disk when every attachment failed", () => {
150
+ const suffix = buildAttachmentPromptSuffix([
151
+ {
152
+ status: "unavailable",
153
+ originalFilename: "contract.pdf",
154
+ reason: "it could not be downloaded",
155
+ recovery: "resend",
156
+ },
157
+ ]);
158
+ expect(suffix).not.toContain("Open and use");
159
+ expect(suffix).not.toContain("already downloaded");
160
+ expect(suffix).toContain("could not be opened");
161
+ expect(suffix).toContain("Do not answer as if nothing was attached");
162
+ });
163
+ it("scopes the on-disk promise to the files that actually landed", () => {
164
+ const suffix = buildAttachmentPromptSuffix([
165
+ { status: "ready", originalFilename: "brief.png", localPath: "/tmp/attachments/1-brief.png", kind: "file" },
166
+ {
167
+ status: "unavailable",
168
+ originalFilename: "gone.pdf",
169
+ reason: "it could not be downloaded",
170
+ recovery: "resend",
171
+ },
172
+ ]);
173
+ expect(suffix).toContain("The file listed with a path is already downloaded at exactly that path");
174
+ });
175
+ it("truncated PDF text points the agent at the file for the rest", () => {
176
+ const suffix = buildAttachmentPromptSuffix([
177
+ {
178
+ status: "ready",
179
+ originalFilename: "long.pdf",
180
+ localPath: "/tmp/attachments/1-long.pdf",
181
+ kind: "pdf",
182
+ pdfText: { text: "start of doc", truncated: true },
183
+ },
184
+ ]);
185
+ expect(suffix).toContain("The text above is TRUNCATED");
95
186
  });
96
187
  });
97
188
  describe("pickLocalName", () => {
@@ -131,14 +222,47 @@ describe("pickLocalName", () => {
131
222
  });
132
223
  });
133
224
  describe("downloadAttachments", () => {
134
- it("drops downloaded PDFs whose body is not a PDF", async () => {
225
+ it("reports downloaded PDFs whose body is not a PDF as unavailable instead of dropping them", async () => {
135
226
  vi.stubGlobal("fetch", async () => new Response(HTML_BODY, {
136
227
  status: 200,
137
228
  headers: { "content-length": String(HTML_BODY.length), "content-type": "text/html" },
138
229
  }));
139
- await expect(downloadAttachments([
230
+ const attachments = await downloadAttachments([
140
231
  { url: "https://media.example/brief.pdf", contentType: "application/pdf", filename: "brief.pdf" },
141
- ])).resolves.toEqual([]);
232
+ ]);
233
+ expect(attachments).toMatchObject([{ status: "unavailable", originalFilename: "brief.pdf" }]);
234
+ });
235
+ it("reports a failed download as unavailable and retryable", async () => {
236
+ vi.stubGlobal("fetch", async () => new Response("nope", { status: 404 }));
237
+ const attachments = await downloadAttachments([
238
+ { url: "https://media.example/gone.pdf", contentType: "application/pdf", filename: "gone.pdf" },
239
+ ]);
240
+ expect(attachments).toMatchObject([{ status: "unavailable", originalFilename: "gone.pdf", recovery: "resend" }]);
241
+ });
242
+ it("keeps raw failure detail out of the reason the agent relays to the user", async () => {
243
+ vi.stubGlobal("fetch", () => Promise.reject(new Error("ENOENT: no such file or directory, open '/home/user/.baker/tmp/x'")));
244
+ const attachments = await downloadAttachments([
245
+ { url: "https://media.example/brief.pdf", contentType: "application/pdf", filename: "brief.pdf" },
246
+ ]);
247
+ const suffix = buildAttachmentPromptSuffix(attachments);
248
+ expect(suffix).not.toContain("ENOENT");
249
+ expect(suffix).not.toContain("/home/user");
250
+ expect(suffix).toContain("it could not be opened");
251
+ });
252
+ it("states an oversize rejection in megabytes without raw byte counts", async () => {
253
+ const oversized = Buffer.alloc(6 * 1024 * 1024, 0);
254
+ PNG_HEADER.copy(oversized);
255
+ vi.stubGlobal("fetch", async () => new Response(oversized, {
256
+ status: 200,
257
+ headers: { "content-length": String(oversized.length), "content-type": "image/png" },
258
+ }));
259
+ const attachments = await downloadAttachments([
260
+ { url: "https://media.example/huge.png", contentType: "image/png", filename: "huge.png" },
261
+ ]);
262
+ const suffix = buildAttachmentPromptSuffix(attachments);
263
+ expect(attachments).toMatchObject([{ status: "unavailable", recovery: "different_file" }]);
264
+ expect(suffix).toContain("over the 5 MB limit for images");
265
+ expect(suffix).not.toContain(String(6 * 1024 * 1024));
142
266
  });
143
267
  it("extracts text from downloaded PDFs with pdftotext", async () => {
144
268
  const pdf = minimalPdf("Monthly promo text");
@@ -167,10 +291,8 @@ describe("downloadAttachments", () => {
167
291
  const attachments = await downloadAttachments([
168
292
  { url: "https://media.example/large.pdf", contentType: "application/pdf", filename: "large.pdf" },
169
293
  ]);
170
- const attachment = attachments[0];
171
- expect(attachment?.kind).toBe("pdf");
172
- expect(attachment?.pdfText?.truncated).toBe(true);
173
- expect(attachment?.pdfText?.text).toHaveLength(30_000);
294
+ expect(attachments[0]).toMatchObject({ kind: "pdf", pdfText: { truncated: true } });
295
+ expect(readyPdfText(attachments[0])).toHaveLength(30_000);
174
296
  });
175
297
  });
176
298
  //# sourceMappingURL=attachments.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachments.test.js","sourceRoot":"","sources":["../../src/hono/attachments.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachments.test.js","sourceRoot":"","sources":["../../src/hono/attachments.test.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { type McpServersProvider } from "./mcp-servers.ts";
6
6
  import { type DirtySessionReason } from "./session-continuity.ts";
7
7
  import type { ClaudeSessionBoundary, LoadedSessionBoundary } from "./session-store.ts";
8
8
  import { type TagChangeInput, type TagChangeResolution } from "./tag-input.ts";
9
+ import { type TurnModelUsage } from "./turn-model-usage.ts";
9
10
  import type { ChatAttachment, CurrentReference, DispatchHistorySnapshot, DispatchSender } from "./types.ts";
10
11
  export type BridgeJob = {
11
12
  threadId: string;
@@ -30,16 +31,19 @@ export type BridgeJobOutcome = {
30
31
  kind: "completed";
31
32
  costUsd: number;
32
33
  model?: string;
34
+ modelUsage?: TurnModelUsage[];
33
35
  completeChat?: boolean;
34
36
  cleanBoundary?: ClaudeSessionBoundary;
35
37
  } | {
36
38
  kind: "cancelled";
37
39
  costUsd: number;
38
40
  model?: string;
41
+ modelUsage?: TurnModelUsage[];
39
42
  } | {
40
43
  kind: "errored";
41
44
  costUsd: number;
42
45
  model?: string;
46
+ modelUsage?: TurnModelUsage[];
43
47
  errors: string[];
44
48
  };
45
49
  export type PendingQuestion = {
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-job.d.ts","sourceRoot":"","sources":["../../src/hono/bridge-job.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge-job.d.ts","sourceRoot":"","sources":["../../src/hono/bridge-job.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import { bridgeRuntimeFiles } from "./runtime-files.js";
12
12
  import { applyCurrentSenderAttribution, buildCleanBoundary, buildRehydratedPrompt, emptyInProgressSession, isResumeSessionError, observeInProgressSession, prepareSessionAttempt, stallContinuationAttempt, } from "./session-continuity.js";
13
13
  import { verbatimSlashCommand } from "./slash-commands.js";
14
14
  import { createBakerUiServer, normalizeTagInputToolInput, sanitizeTagChanges, TAG_INPUT_TOOL_NAME, } from "./tag-input.js";
15
+ import { addQueryModelUsage, queryModelUsage, turnModelUsageList } from "./turn-model-usage.js";
15
16
  export function parsePlanDecision(value) {
16
17
  if (!value || typeof value !== "object") {
17
18
  return null;
@@ -105,6 +106,8 @@ function createBridgeJobState() {
105
106
  inProgressSession: emptyInProgressSession(),
106
107
  observedCostUsd: 0,
107
108
  controlChannelDenies: 0,
109
+ modelUsageTotals: new Map(),
110
+ queryModelUsage: new Map(),
108
111
  };
109
112
  }
110
113
  function errorMessage(error) {
@@ -552,11 +555,11 @@ export class BridgeJobExecutor {
552
555
  }
553
556
  catch (repairError) {
554
557
  await this.clearIfDirty(job, controls, repairState, classifyDirtyReason(repairError, controls));
555
- return this.errorOutcome(job, controls, repairState.model, this.resultWithObservedCost(repairResult, repairState), repairError);
558
+ return this.errorOutcome(job, controls, repairState, this.resultWithObservedCost(repairResult, repairState), repairError);
556
559
  }
557
560
  }
558
561
  await this.clearIfDirty(job, controls, state, classifyDirtyReason(error, controls));
559
- return this.errorOutcome(job, controls, state.model, this.resultWithObservedCost(result, state), error);
562
+ return this.errorOutcome(job, controls, state, this.resultWithObservedCost(result, state), error);
560
563
  }
561
564
  }
562
565
  async loadTrustedBoundary(job, controls) {
@@ -614,21 +617,24 @@ export class BridgeJobExecutor {
614
617
  return { costUsd, attemptedRehydration: attempt.attemptedRehydration };
615
618
  }
616
619
  async finishSuccessfulAttempt(job, controls, state, costUsd) {
620
+ const modelUsage = turnModelUsageList(state.modelUsageTotals);
617
621
  if (!controls.isActive()) {
618
622
  await this.clearIfDirty(job, controls, state, "abort");
619
- return { kind: "cancelled", costUsd, model: state.model };
623
+ return { kind: "cancelled", costUsd, model: state.model, modelUsage };
620
624
  }
621
625
  if (!state.postedAssistantEvent && state.turnText.length > 0) {
622
626
  await this.postSyntheticAssistantEvent(job, state);
623
627
  }
624
628
  if (!controls.isActive()) {
625
629
  await this.clearIfDirty(job, controls, state, "abort");
626
- return { kind: "cancelled", costUsd, model: state.model };
630
+ return { kind: "cancelled", costUsd, model: state.model, modelUsage };
627
631
  }
628
632
  const cleanBoundary = buildCleanBoundary({ inProgress: state.inProgressSession, nowMs: this.now() });
629
- return { kind: "completed", costUsd, model: state.model, cleanBoundary };
633
+ return { kind: "completed", costUsd, model: state.model, modelUsage, cleanBoundary };
630
634
  }
631
- errorOutcome(job, controls, model, result, error) {
635
+ errorOutcome(job, controls, state, result, error) {
636
+ const model = state.model;
637
+ const modelUsage = turnModelUsageList(state.modelUsageTotals);
632
638
  if (result.attemptedRehydration) {
633
639
  void this.relay.contextSource({ threadId: job.threadId, turnId: job.turnId }, "rehydration_failed", {
634
640
  historyEntryCount: job.history?.entries.length ?? 0,
@@ -638,9 +644,15 @@ export class BridgeJobExecutor {
638
644
  });
639
645
  }
640
646
  if (!controls.isActive()) {
641
- return { kind: "cancelled", costUsd: result.costUsd, model };
647
+ return { kind: "cancelled", costUsd: result.costUsd, model, modelUsage };
642
648
  }
643
- return { kind: "errored", costUsd: result.costUsd, model, errors: [enrichImageError(errorMessage(error))] };
649
+ return {
650
+ kind: "errored",
651
+ costUsd: result.costUsd,
652
+ model,
653
+ modelUsage,
654
+ errors: [enrichImageError(errorMessage(error))],
655
+ };
644
656
  }
645
657
  resultWithObservedCost(result, state) {
646
658
  return { ...result, costUsd: Math.max(result.costUsd, state.observedCostUsd) };
@@ -700,6 +712,10 @@ export class BridgeJobExecutor {
700
712
  }
701
713
  async runQueryOnce(job, controls, state, attempt, prepared) {
702
714
  let costUsd = 0;
715
+ // Fresh per-model staging for this query invocation. Result messages replace
716
+ // it (they are cumulative); it is folded into the turn totals in `finally`,
717
+ // so a stall that lands after a clean result still contributes its snapshot.
718
+ state.queryModelUsage = new Map();
703
719
  const mcpServers = await this.resolveMcpServers(job);
704
720
  const autoCompactWindow = autoCompactWindowForModel(prepared.model);
705
721
  const betas = betasForModel(prepared.model);
@@ -800,6 +816,10 @@ export class BridgeJobExecutor {
800
816
  // Release the held-open input if the turn-end policy never fired (the
801
817
  // stream ended on its own, or an error path closed the query). Idempotent.
802
818
  query.endInput?.();
819
+ // Commit this query's snapshot into the turn totals, summed across queries.
820
+ // In `finally` so a resume-triggering stall after a clean result still
821
+ // records what that query observed.
822
+ addQueryModelUsage(state.modelUsageTotals, state.queryModelUsage);
803
823
  }
804
824
  if (!controls.isActive()) {
805
825
  closeQuery();
@@ -940,6 +960,15 @@ export class BridgeJobExecutor {
940
960
  trackMainRequestUsage(state, msg);
941
961
  if (msg.type === "result") {
942
962
  state.observedCostUsd = msg.total_cost_usd;
963
+ // A query's result `modelUsage` is cumulative (like `total_cost_usd`, which
964
+ // we overwrite above), so keep the latest snapshot rather than summing —
965
+ // it is folded into the turn totals when the query settles (see
966
+ // `runQueryOnce`). Guard against a spuriously empty later result wiping a
967
+ // real earlier one.
968
+ const snapshot = queryModelUsage(msg.modelUsage);
969
+ if (snapshot.size > 0) {
970
+ state.queryModelUsage = snapshot;
971
+ }
943
972
  // Surface how full the conversation's context is. Tokens come from the last
944
973
  // main-conversation request's own usage — the real occupancy of the window
945
974
  // at that request. We deliberately do NOT use the result's per-model token