@moxxy/sdk 0.43.0 → 0.44.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"project-messages.js","sourceRoot":"","sources":["../../src/mode/project-messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-messages.js","sourceRoot":"","sources":["../../src/mode/project-messages.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moxxy/sdk",
3
- "version": "0.43.0",
3
+ "version": "0.44.0",
4
4
  "description": "Typed public surface for the moxxy framework: event types, define* factories, lifecycle hook signatures.",
5
5
  "keywords": [
6
6
  "moxxy",
@@ -53,6 +53,10 @@
53
53
  "types": "./dist/tool-display.d.ts",
54
54
  "import": "./dist/tool-display.js"
55
55
  },
56
+ "./attachment-payload": {
57
+ "types": "./dist/attachment-payload.d.ts",
58
+ "import": "./dist/attachment-payload.js"
59
+ },
56
60
  "./workflow-approval": {
57
61
  "types": "./dist/workflow-approval.d.ts",
58
62
  "import": "./dist/workflow-approval.js"
@@ -0,0 +1,165 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
3
+ import { assertDefined } from './assert.js';
4
+
5
+ import {
6
+ ATTACHMENT_READ_CHUNK_CHARS,
7
+ CLIENT_INLINE_ATTACHMENT_CHARS,
8
+ CLIENT_INLINE_EVENT_CHARS,
9
+ HISTORY_PAGE_MAX_CHARS,
10
+ attachmentBytes,
11
+ eventForClient,
12
+ findAttachment,
13
+ historyPageForClient,
14
+ listAttachments,
15
+ readAttachmentChunk,
16
+ restoredAttachmentRef,
17
+ } from './attachment-payload.js';
18
+ import type { MoxxyEvent, UserPromptAttachment, UserPromptEvent } from './events.js';
19
+
20
+ function prompt(attachments: ReadonlyArray<UserPromptAttachment>): UserPromptEvent {
21
+ return {
22
+ type: 'user_prompt',
23
+ seq: 7,
24
+ ts: 0,
25
+ turnId: 't1',
26
+ text: 'look at these',
27
+ attachments,
28
+ } as unknown as UserPromptEvent;
29
+ }
30
+
31
+ const base64Of = (chars: number): string => 'A'.repeat(chars);
32
+
33
+ function firstAttachment(event: UserPromptEvent): UserPromptAttachment {
34
+ const first = event.attachments?.[0];
35
+ assertDefined(first, 'first attachment');
36
+ return first;
37
+ }
38
+
39
+ describe('eventForClient', () => {
40
+ it('leaves an event without large attachments untouched (same object)', () => {
41
+ const event = prompt([{ kind: 'image', content: base64Of(1000), mediaType: 'image/png', name: 'a.png' }]);
42
+ expect(eventForClient(event)).toBe(event);
43
+ const chunk = { type: 'assistant_chunk', seq: 1, ts: 0, turnId: 't1', delta: 'hi' } as unknown as MoxxyEvent;
44
+ expect(eventForClient(chunk)).toBe(chunk);
45
+ });
46
+
47
+ it('replaces the bytes of a large attachment with its size, keeping name and type', () => {
48
+ const big = base64Of(CLIENT_INLINE_ATTACHMENT_CHARS + 4);
49
+ const event = prompt([{ kind: 'document', content: big, mediaType: 'application/pdf', name: 'scan.pdf' }]);
50
+ const slim = eventForClient(event) as UserPromptEvent;
51
+ expect(slim).not.toBe(event);
52
+ expect(slim.attachments).toEqual([
53
+ { kind: 'document', content: '', mediaType: 'application/pdf', name: 'scan.pdf', omittedBytes: attachmentBytes(firstAttachment(event)) },
54
+ ]);
55
+ // The original event keeps its bytes — the runner's log is never changed.
56
+ expect(firstAttachment(event).content).toBe(big);
57
+ });
58
+
59
+ it('caps the bytes one event carries even when each attachment is small', () => {
60
+ const each = Math.floor(CLIENT_INLINE_ATTACHMENT_CHARS * 0.9);
61
+ const count = Math.ceil(CLIENT_INLINE_EVENT_CHARS / each) + 1;
62
+ const event = prompt(
63
+ Array.from({ length: count }, (_, i) => ({ kind: 'image' as const, content: base64Of(each), mediaType: 'image/png', name: `${i}.png` })),
64
+ );
65
+ const slim = eventForClient(event) as UserPromptEvent;
66
+ const sent = slim.attachments ?? [];
67
+ const inline = sent.reduce((n, a) => n + a.content.length, 0);
68
+ expect(inline).toBeLessThanOrEqual(CLIENT_INLINE_EVENT_CHARS);
69
+ expect(firstAttachment(slim).content.length).toBe(each);
70
+ expect(sent.at(-1)?.omittedBytes).toBeGreaterThan(0);
71
+ });
72
+ });
73
+
74
+ describe('attachmentBytes', () => {
75
+ it('decodes base64 length for binary kinds and reports the omitted size when present', () => {
76
+ expect(attachmentBytes({ kind: 'image', content: 'QUJD', mediaType: 'image/png' })).toBe(3);
77
+ expect(attachmentBytes({ kind: 'image', content: 'QUI=', mediaType: 'image/png' })).toBe(2);
78
+ expect(attachmentBytes({ kind: 'file', content: 'hello' })).toBe(5);
79
+ expect(attachmentBytes({ kind: 'document', content: '', omittedBytes: 1234 })).toBe(1234);
80
+ });
81
+ });
82
+
83
+ describe('readAttachmentChunk', () => {
84
+ it('returns one bounded slice and the total, so a client can rebuild the content', () => {
85
+ const content = base64Of(ATTACHMENT_READ_CHUNK_CHARS * 2 + 10);
86
+ const event = prompt([{ kind: 'document', content, mediaType: 'application/pdf' }]);
87
+ let rebuilt = '';
88
+ let offset = 0;
89
+ for (;;) {
90
+ const chunk = readAttachmentChunk(event, 0, offset);
91
+ expect(chunk.total).toBe(content.length);
92
+ expect(chunk.data.length).toBeLessThanOrEqual(ATTACHMENT_READ_CHUNK_CHARS);
93
+ rebuilt += chunk.data;
94
+ offset += chunk.data.length;
95
+ if (offset >= chunk.total) break;
96
+ }
97
+ expect(rebuilt).toBe(content);
98
+ });
99
+
100
+ it('throws for an event or index that has no such attachment', () => {
101
+ const chunk = { type: 'assistant_chunk', seq: 1, ts: 0, turnId: 't1', delta: 'hi' } as unknown as MoxxyEvent;
102
+ expect(() => readAttachmentChunk(chunk, 0, 0)).toThrow(/no attachments/);
103
+ expect(() => readAttachmentChunk(prompt([]), 0, 0)).toThrow(/no attachment 0/);
104
+ });
105
+ });
106
+
107
+ describe('historyPageForClient', () => {
108
+ const text = (seq: number, chars: number): MoxxyEvent =>
109
+ ({ type: 'assistant_message', seq, ts: 0, turnId: 't1', content: 'x'.repeat(chars) }) as unknown as MoxxyEvent;
110
+
111
+ it('passes a small page through with its cursor', () => {
112
+ const page = { events: [text(3, 10), text(4, 10)], prevCursor: 3 };
113
+ expect(historyPageForClient(page)).toEqual(page);
114
+ });
115
+
116
+ it('drops the oldest events until the page fits, pointing the cursor at the oldest kept', () => {
117
+ const quarter = Math.floor(HISTORY_PAGE_MAX_CHARS / 4);
118
+ const page = historyPageForClient({
119
+ events: [0, 1, 2, 3, 4, 5].map((seq) => text(seq, quarter)),
120
+ prevCursor: null,
121
+ });
122
+ expect(page.events.map((e) => e.seq)).toEqual([3, 4, 5]);
123
+ expect(page.prevCursor).toBe(3);
124
+ });
125
+
126
+ it('always keeps the newest event so paging advances', () => {
127
+ const page = historyPageForClient({
128
+ events: [text(8, 10), text(9, HISTORY_PAGE_MAX_CHARS * 2)],
129
+ prevCursor: 8,
130
+ });
131
+ expect(page.events.map((e) => e.seq)).toEqual([9]);
132
+ expect(page.prevCursor).toBe(9);
133
+ });
134
+ });
135
+
136
+ describe('finding an earlier attachment', () => {
137
+ const at = (seq: number, attachments: ReadonlyArray<UserPromptAttachment>): MoxxyEvent =>
138
+ ({ ...prompt(attachments), seq }) as MoxxyEvent;
139
+ const events = [
140
+ at(2, [{ kind: 'document', content: 'OLD', mediaType: 'application/pdf', name: 'umowa.pdf' }]),
141
+ at(5, [
142
+ { kind: 'image', content: 'IMG', mediaType: 'image/png', name: 'shot.png' },
143
+ { kind: 'document', content: 'NEW', mediaType: 'application/pdf', name: 'Umowa.pdf' },
144
+ ]),
145
+ ];
146
+
147
+ it('finds one by its key or, newest first, by its name whatever the case', () => {
148
+ expect(findAttachment(events, '2:0')).toMatchObject({ seq: 2, index: 0, attachment: { content: 'OLD' } });
149
+ expect(findAttachment(events, 'umowa.pdf')).toMatchObject({ seq: 5, index: 1, attachment: { content: 'NEW' } });
150
+ expect(findAttachment(events, 'shot.png')).toMatchObject({ seq: 5, index: 0 });
151
+ expect(findAttachment(events, 'missing.pdf')).toBeNull();
152
+ expect(findAttachment(events, '9:0')).toBeNull();
153
+ });
154
+
155
+ it('lists every attachment of the conversation by key and name', () => {
156
+ expect(listAttachments(events)).toEqual(['2:0 umowa.pdf', '5:0 shot.png', '5:1 Umowa.pdf']);
157
+ });
158
+
159
+ it('reads the reference out of a restoring recall result, and nothing out of anything else', () => {
160
+ expect(restoredAttachmentRef({ forModel: 'restored', restoredAttachment: { seq: 2, index: 0 } })).toEqual({ seq: 2, index: 0 });
161
+ expect(restoredAttachmentRef('text')).toBeNull();
162
+ expect(restoredAttachmentRef({ restoredAttachment: { seq: '2', index: 0 } })).toBeNull();
163
+ expect(restoredAttachmentRef(null)).toBeNull();
164
+ });
165
+ });
@@ -0,0 +1,187 @@
1
+ import type { MoxxyEvent, UserPromptAttachment } from './events.js';
2
+
3
+ /**
4
+ * Attachment bytes travel two very different roads. The model needs them in
5
+ * full; a client that only DRAWS the conversation (desktop, mobile, a channel
6
+ * bot) does not, and pushing a scanned 30 MB PDF through the client link on
7
+ * every reconnect is what once wedged a chat in a reconnect loop. So the runner
8
+ * sends clients {@link eventForClient} — large payloads swapped for their size —
9
+ * and a client that wants the bytes (an image preview) reads them back in
10
+ * bounded slices with {@link readAttachmentChunk}. The log itself never changes.
11
+ */
12
+
13
+ /**
14
+ * The most attachment payload (base64 characters) one model request carries.
15
+ * Every request resends the whole conversation, so without a cap a chat with a
16
+ * few scanned PDFs outgrows the provider's request limit (Anthropic: 32 MB) and
17
+ * EVERY later turn fails. The newest attachments go in full; older ones that no
18
+ * longer fit become a note naming them.
19
+ */
20
+ export const MODEL_ATTACHMENT_BUDGET_CHARS = 20 * 1024 * 1024;
21
+
22
+ /** One attachment's payload above this travels to clients by size only. */
23
+ export const CLIENT_INLINE_ATTACHMENT_CHARS = 512 * 1024;
24
+ /** All of one event's inline attachment payloads together stay under this. */
25
+ export const CLIENT_INLINE_EVENT_CHARS = 1024 * 1024;
26
+ /** The largest slice one attachment read returns. */
27
+ export const ATTACHMENT_READ_CHUNK_CHARS = 1024 * 1024;
28
+
29
+ /** Whether `content` is base64 bytes rather than text. Raw audio carries a media type; a transcript does not. */
30
+ function isBase64Payload(att: UserPromptAttachment): boolean {
31
+ return att.kind === 'image' || att.kind === 'document' || (att.kind === 'audio' && att.mediaType !== undefined);
32
+ }
33
+
34
+ /** The attachment's size in bytes — its real size even on a client copy whose bytes were left out. */
35
+ export function attachmentBytes(att: UserPromptAttachment): number {
36
+ if (att.omittedBytes !== undefined) return att.omittedBytes;
37
+ if (!isBase64Payload(att)) return att.content.length;
38
+ const padding = att.content.endsWith('==') ? 2 : att.content.endsWith('=') ? 1 : 0;
39
+ return Math.max(0, Math.floor((att.content.length * 3) / 4) - padding);
40
+ }
41
+
42
+ /**
43
+ * The copy of `event` a client receives: every attachment payload too large for
44
+ * the client link becomes `content: ''` plus `omittedBytes`. Returns `event`
45
+ * itself when nothing had to change, so the common case allocates nothing.
46
+ */
47
+ export function eventForClient(event: MoxxyEvent): MoxxyEvent {
48
+ if (event.type !== 'user_prompt' || !event.attachments || event.attachments.length === 0) return event;
49
+ let room = CLIENT_INLINE_EVENT_CHARS;
50
+ let changed = false;
51
+ const attachments = event.attachments.map((att) => {
52
+ const size = att.content.length;
53
+ if (size <= CLIENT_INLINE_ATTACHMENT_CHARS && size <= room) {
54
+ room -= size;
55
+ return att;
56
+ }
57
+ changed = true;
58
+ return { ...att, content: '', omittedBytes: attachmentBytes(att) };
59
+ });
60
+ return changed ? { ...event, attachments } : event;
61
+ }
62
+
63
+ /**
64
+ * The most one history page may weigh on the wire, in JSON characters. Paging
65
+ * counts events, and a few hundred events with screenshots or attachments can
66
+ * add up to tens of megabytes — one frame the client has to swallow whole.
67
+ */
68
+ export const HISTORY_PAGE_MAX_CHARS = 4 * 1024 * 1024;
69
+
70
+ /** One newest-first history page: ascending events plus the cursor to the next older page. */
71
+ export interface HistoryPage {
72
+ readonly events: ReadonlyArray<MoxxyEvent>;
73
+ readonly prevCursor: number | null;
74
+ }
75
+
76
+ /**
77
+ * The page as a client receives it: every event in its client form, and the
78
+ * oldest events dropped until the page fits {@link HISTORY_PAGE_MAX_CHARS}. The
79
+ * newest event always stays, so paging always advances; the dropped events
80
+ * come back on the next older page.
81
+ */
82
+ export function historyPageForClient(page: HistoryPage): HistoryPage {
83
+ const events = page.events.map(eventForClient);
84
+ let room = HISTORY_PAGE_MAX_CHARS;
85
+ let start = events.length;
86
+ while (start > 0) {
87
+ const event = events[start - 1];
88
+ if (event === undefined) break;
89
+ const size = JSON.stringify(event).length + 1;
90
+ if (size > room && start < events.length) break;
91
+ room -= size;
92
+ start -= 1;
93
+ }
94
+ if (start === 0) return { events, prevCursor: page.prevCursor };
95
+ const kept = events.slice(start);
96
+ const oldest = kept[0];
97
+ return { events: kept, prevCursor: oldest === undefined ? page.prevCursor : oldest.seq };
98
+ }
99
+
100
+ /** One slice of an attachment's `content`, starting at `offset` (in characters). */
101
+ export interface AttachmentChunk {
102
+ readonly data: string;
103
+ /** The full `content` length, so the reader knows when it has everything. */
104
+ readonly total: number;
105
+ }
106
+
107
+ /**
108
+ * Slice attachment `index` of `event`. Slices start on a multiple of four
109
+ * characters when `offset` does, so base64 slices decode on their own too.
110
+ */
111
+ export function readAttachmentChunk(event: MoxxyEvent, index: number, offset: number): AttachmentChunk {
112
+ if (event.type !== 'user_prompt' || !event.attachments) {
113
+ throw new Error(`event ${event.seq} has no attachments`);
114
+ }
115
+ const att = event.attachments[index];
116
+ if (!att) throw new Error(`event ${event.seq} has no attachment ${index}`);
117
+ const start = Math.max(0, Math.floor(offset));
118
+ return { data: att.content.slice(start, start + ATTACHMENT_READ_CHUNK_CHARS), total: att.content.length };
119
+ }
120
+
121
+ /** How an attachment is named across the conversation: `seq:index` of the prompt that carried it. */
122
+ export function attachmentKey(seq: number, index: number): string {
123
+ return `${seq}:${index}`;
124
+ }
125
+
126
+ /** One attachment found in the log, with where it sits. */
127
+ export interface FoundAttachment {
128
+ readonly seq: number;
129
+ readonly index: number;
130
+ readonly attachment: UserPromptAttachment;
131
+ }
132
+
133
+ function* attachmentsNewestFirst(events: ReadonlyArray<MoxxyEvent>): Generator<FoundAttachment> {
134
+ for (let i = events.length - 1; i >= 0; i -= 1) {
135
+ const e = events[i];
136
+ if (!e || e.type !== 'user_prompt' || !e.attachments) continue;
137
+ for (let index = e.attachments.length - 1; index >= 0; index -= 1) {
138
+ const attachment = e.attachments[index];
139
+ if (attachment) yield { seq: e.seq, index, attachment };
140
+ }
141
+ }
142
+ }
143
+
144
+ /**
145
+ * The attachment `query` names: its key (`seq:index`) or its file name, the
146
+ * newest one of that name, whatever the case. Null when none matches.
147
+ */
148
+ export function findAttachment(events: ReadonlyArray<MoxxyEvent>, query: string): FoundAttachment | null {
149
+ const wanted = query.trim();
150
+ const byKey = /^(\d+):(\d+)$/u.exec(wanted);
151
+ const name = wanted.toLowerCase();
152
+ for (const found of attachmentsNewestFirst(events)) {
153
+ if (byKey) {
154
+ if (found.seq === Number(byKey[1]) && found.index === Number(byKey[2])) return found;
155
+ } else if (found.attachment.name?.toLowerCase() === name) {
156
+ return found;
157
+ }
158
+ }
159
+ return null;
160
+ }
161
+
162
+ /** Every attachment of the conversation, oldest first, as `seq:index name`. */
163
+ export function listAttachments(events: ReadonlyArray<MoxxyEvent>): string[] {
164
+ return [...attachmentsNewestFirst(events)]
165
+ .reverse()
166
+ .map(({ seq, index, attachment }) => `${attachmentKey(seq, index)} ${attachment.name ?? attachment.kind}`);
167
+ }
168
+
169
+ /**
170
+ * What `recall({ attachment })` returns for an image or a document: a pointer,
171
+ * not the bytes, which stay once in the log. The projection puts the
172
+ * attachment itself beside this result, so the model sees the original again
173
+ * even after its turn was summarized away.
174
+ */
175
+ export interface RestoredAttachmentOutput {
176
+ readonly forModel: string;
177
+ readonly restoredAttachment: { readonly seq: number; readonly index: number };
178
+ }
179
+
180
+ /** The attachment a recall result restores, or null for any other output. */
181
+ export function restoredAttachmentRef(output: unknown): { seq: number; index: number } | null {
182
+ if (typeof output !== 'object' || output === null) return null;
183
+ const ref = (output as { restoredAttachment?: unknown }).restoredAttachment;
184
+ if (typeof ref !== 'object' || ref === null) return null;
185
+ const { seq, index } = ref as { seq?: unknown; index?: unknown };
186
+ return typeof seq === 'number' && typeof index === 'number' ? { seq, index } : null;
187
+ }
package/src/events.ts CHANGED
@@ -48,6 +48,12 @@ export interface UserPromptAttachment {
48
48
  readonly name?: string;
49
49
  /** MIME type — required for `image`, `document`, and raw `audio` so providers translate correctly. */
50
50
  readonly mediaType?: string;
51
+ /**
52
+ * Set only on a client's copy of the event: the payload was too large to send
53
+ * to clients, so `content` is empty and this is the real size in bytes. The
54
+ * bytes stay in the runner's log; `session.readAttachment` reads them back.
55
+ */
56
+ readonly omittedBytes?: number;
51
57
  }
52
58
 
53
59
  /**
package/src/index.ts CHANGED
@@ -312,6 +312,25 @@ export {
312
312
  type JsonFileStoreOptions,
313
313
  } from './json-file-store.js';
314
314
  export { assertDefined, assertNever, invariant } from './assert.js';
315
+ export {
316
+ ATTACHMENT_READ_CHUNK_CHARS,
317
+ CLIENT_INLINE_ATTACHMENT_CHARS,
318
+ CLIENT_INLINE_EVENT_CHARS,
319
+ HISTORY_PAGE_MAX_CHARS,
320
+ MODEL_ATTACHMENT_BUDGET_CHARS,
321
+ attachmentBytes,
322
+ attachmentKey,
323
+ eventForClient,
324
+ findAttachment,
325
+ historyPageForClient,
326
+ listAttachments,
327
+ readAttachmentChunk,
328
+ restoredAttachmentRef,
329
+ type AttachmentChunk,
330
+ type FoundAttachment,
331
+ type HistoryPage,
332
+ type RestoredAttachmentOutput,
333
+ } from './attachment-payload.js';
315
334
  export { compareSemver, parseSemverCore } from './semver.js';
316
335
  // readRequestBody/bearerTokenMatches (http-utils) and the channel-auth value
317
336
  // helpers live on the './server' subpath — they reach node:http/crypto/fs/path.
@@ -1,5 +1,11 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { projectMessagesFromLog, projectUserPrompt, resolvedCallIdSet, skillsWithinReach } from './project-messages.js';
2
+ import { MODEL_ATTACHMENT_BUDGET_CHARS } from '../attachment-payload.js';
3
+ import {
4
+ projectMessagesFromLog,
5
+ projectUserPrompt,
6
+ resolvedCallIdSet,
7
+ skillsWithinReach,
8
+ } from './project-messages.js';
3
9
  import type { Skill } from '../skill.js';
4
10
  import { computeElisionState } from '../elision-state.js';
5
11
  import { asEventId, asSessionId, asTurnId } from '../ids.js';
@@ -252,3 +258,103 @@ describe('projectMessagesFromLog tool pairing across a compaction boundary', ()
252
258
  });
253
259
  });
254
260
  });
261
+
262
+ describe('projectMessagesFromLog attachment budget', () => {
263
+ const pdf = (name: string, chars: number) => ({
264
+ kind: 'document' as const,
265
+ content: 'A'.repeat(chars),
266
+ mediaType: 'application/pdf',
267
+ name,
268
+ });
269
+ const blocksOf = (events: ReadonlyArray<MoxxyEvent>) =>
270
+ projectMessagesFromLog({ log: reader(events) }).flatMap((m) => m.content);
271
+
272
+ it('sends the newest attachments in full and names the older ones that no longer fit', () => {
273
+ const half = Math.floor(MODEL_ATTACHMENT_BUDGET_CHARS * 0.6);
274
+ const blocks = blocksOf([
275
+ userPrompt(0, { text: 'first scan', attachments: [pdf('old-scan.pdf', half)] }),
276
+ userPrompt(1, { text: 'second scan', attachments: [pdf('new-scan.pdf', half)] }),
277
+ ]);
278
+ const documents = blocks.filter((b) => b.type === 'document');
279
+ expect(documents).toHaveLength(1);
280
+ expect(documents[0]).toMatchObject({ name: 'new-scan.pdf' });
281
+ const note = blocks.find((b) => b.type === 'text' && b.text.includes('old-scan.pdf'));
282
+ expect(note).toBeDefined();
283
+ const sent = blocks.reduce((n, b) => n + (b.type === 'document' ? b.data.length : 0), 0);
284
+ expect(sent).toBeLessThanOrEqual(MODEL_ATTACHMENT_BUDGET_CHARS);
285
+ });
286
+
287
+ it('tells the model how to bring a left-out attachment back', () => {
288
+ const half = Math.floor(MODEL_ATTACHMENT_BUDGET_CHARS * 0.6);
289
+ const blocks = blocksOf([
290
+ userPrompt(0, { text: 'first scan', attachments: [pdf('old-scan.pdf', half)] }),
291
+ userPrompt(1, { text: 'second scan', attachments: [pdf('new-scan.pdf', half)] }),
292
+ ]);
293
+ const note = blocks.find((b) => b.type === 'text' && b.text.includes('old-scan.pdf'));
294
+ expect(note).toMatchObject({ text: expect.stringContaining('recall({ attachment: "0:0" })') });
295
+ });
296
+
297
+ const restore = (seq: number, callId: string, ref: { seq: number; index: number }): MoxxyEvent[] => [
298
+ event(seq, { type: 'tool_call_requested', turnId: t1, source: 'model', callId, name: 'recall', input: { attachment: `${ref.seq}:${ref.index}` } }),
299
+ event(seq + 1, {
300
+ type: 'tool_result',
301
+ turnId: t1,
302
+ source: 'tool',
303
+ callId,
304
+ ok: true,
305
+ output: { forModel: 'restored old-scan.pdf', restoredAttachment: ref },
306
+ }),
307
+ ];
308
+
309
+ it('shows a restored attachment again beside the recall result, within the same budget', () => {
310
+ const half = Math.floor(MODEL_ATTACHMENT_BUDGET_CHARS * 0.6);
311
+ const messages = projectMessagesFromLog({
312
+ log: reader([
313
+ userPrompt(0, { text: 'first scan', attachments: [pdf('old-scan.pdf', half)] }),
314
+ userPrompt(1, { text: 'second scan', attachments: [pdf('new-scan.pdf', half)] }),
315
+ userPrompt(2, { text: 'back to the first one' }),
316
+ ...restore(3, 'r1', { seq: 0, index: 0 }),
317
+ ]),
318
+ });
319
+ const result = messages.find((m) => m.role === 'tool_result');
320
+ expect(result?.content).toEqual([
321
+ { type: 'tool_result', toolUseId: 'r1', content: 'restored old-scan.pdf', isError: false },
322
+ { type: 'document', mediaType: 'application/pdf', data: 'A'.repeat(half), name: 'old-scan.pdf' },
323
+ ]);
324
+ const blocks = messages.flatMap((m) => m.content);
325
+ expect(blocks.filter((b) => b.type === 'document')).toHaveLength(1);
326
+ expect(blocks.some((b) => b.type === 'text' && b.text.includes('new-scan.pdf'))).toBe(true);
327
+ });
328
+
329
+ it('restores an attachment whose turn a compaction summarized away', () => {
330
+ const messages = projectMessagesFromLog({
331
+ log: reader([
332
+ userPrompt(0, { text: 'the contract', attachments: [pdf('umowa.pdf', 100)] }),
333
+ event(1, {
334
+ type: 'compaction',
335
+ turnId: t1,
336
+ source: 'compactor',
337
+ compactor: 'segments',
338
+ replacedRange: [0, 0],
339
+ summary: 'the person shared umowa.pdf',
340
+ tokensSaved: 10,
341
+ }),
342
+ userPrompt(2, { text: 'what was in point 7?' }),
343
+ ...restore(3, 'r1', { seq: 0, index: 0 }),
344
+ ]),
345
+ });
346
+ const documents = messages.flatMap((m) => m.content).filter((b) => b.type === 'document');
347
+ expect(documents).toEqual([{ type: 'document', mediaType: 'application/pdf', data: 'A'.repeat(100), name: 'umowa.pdf' }]);
348
+ });
349
+
350
+ it('never sends an empty payload for an attachment whose bytes were left out', () => {
351
+ const blocks = projectUserPrompt(
352
+ userPrompt(0, {
353
+ attachments: [{ kind: 'image', content: '', mediaType: 'image/png', name: 'shot.png', omittedBytes: 2048 }],
354
+ }),
355
+ noElision,
356
+ );
357
+ expect(blocks.some((b) => b.type === 'image')).toBe(false);
358
+ expect(blocks.some((b) => b.type === 'text' && b.text.includes('shot.png'))).toBe(true);
359
+ });
360
+ });