@animalabs/membrane 0.5.69 → 0.5.70

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.
@@ -4,6 +4,7 @@
4
4
  export type { PrefillFormatter, StreamParser, FormatterConfig, BuildOptions, BuildResult, ParseResult, BlockType, ProviderMessage, } from './types.js';
5
5
  export { AnthropicXmlFormatter, type AnthropicXmlFormatterConfig } from './anthropic-xml.js';
6
6
  export { NativeFormatter, type NativeFormatterConfig } from './native.js';
7
+ export { OpenAIResponsesFormatter, OPENAI_RESPONSES_ITEMS_METADATA_KEY, } from './openai-responses.js';
7
8
  export { CompletionsFormatter, type CompletionsFormatterConfig } from './completions.js';
8
9
  export { normalizeToolPairs, MembraneNormalizerError, type NormalizeOptions, type NormalizeResult, type ProviderBlock, } from './normalize-tool-pairs.js';
9
10
  export type { NormalizeEvent } from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,EACT,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,KAAK,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,KAAK,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,EACT,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,KAAK,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,wBAAwB,EACxB,mCAAmC,GACpC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,KAAK,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  export { AnthropicXmlFormatter } from './anthropic-xml.js';
5
5
  export { NativeFormatter } from './native.js';
6
+ export { OpenAIResponsesFormatter, OPENAI_RESPONSES_ITEMS_METADATA_KEY, } from './openai-responses.js';
6
7
  export { CompletionsFormatter } from './completions.js';
7
8
  export { normalizeToolPairs, MembraneNormalizerError, } from './normalize-tool-pairs.js';
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,EAAE,qBAAqB,EAAoC,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAA8B,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAmC,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GAIxB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,EAAE,qBAAqB,EAAoC,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAA8B,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,wBAAwB,EACxB,mCAAmC,GACpC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAmC,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GAIxB,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Formatter for stateless, provider-native OpenAI Responses histories.
3
+ *
4
+ * Imported/native items are carried either in message metadata under
5
+ * `openaiResponsesItems` or on content blocks as `rawItem`. Those items are
6
+ * emitted verbatim and in order. Normalized messages created after import are
7
+ * converted to Responses input items without rewriting the native prefix.
8
+ */
9
+ import type { ContentBlock, NormalizedMessage, ToolCall, ToolResult } from '../types/index.js';
10
+ import type { BuildOptions, BuildResult, PrefillFormatter, StreamParser } from './types.js';
11
+ export declare const OPENAI_RESPONSES_ITEMS_METADATA_KEY = "openaiResponsesItems";
12
+ export declare class OpenAIResponsesFormatter implements PrefillFormatter {
13
+ readonly name = "openai-responses";
14
+ readonly usesPrefill = false;
15
+ buildMessages(messages: NormalizedMessage[], options: BuildOptions): BuildResult;
16
+ private convertBlocks;
17
+ formatToolResults(results: ToolResult[]): string;
18
+ createStreamParser(): StreamParser;
19
+ parseToolCalls(_content: string): ToolCall[];
20
+ hasToolUse(_content: string): boolean;
21
+ parseContentBlocks(content: string): ContentBlock[];
22
+ }
23
+ //# sourceMappingURL=openai-responses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../src/formatters/openai-responses.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAGX,gBAAgB,EAEhB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,mCAAmC,yBAAyB,CAAC;AAgD1E,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,WAAW,SAAS;IAE7B,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW;IA0DhF,OAAO,CAAC,aAAa;IAwDrB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;IAQhD,kBAAkB,IAAI,YAAY;IAClC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IAC5C,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IACrC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;CAGpD"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Formatter for stateless, provider-native OpenAI Responses histories.
3
+ *
4
+ * Imported/native items are carried either in message metadata under
5
+ * `openaiResponsesItems` or on content blocks as `rawItem`. Those items are
6
+ * emitted verbatim and in order. Normalized messages created after import are
7
+ * converted to Responses input items without rewriting the native prefix.
8
+ */
9
+ export const OPENAI_RESPONSES_ITEMS_METADATA_KEY = 'openaiResponsesItems';
10
+ class ResponsesPassthroughParser {
11
+ accumulated = '';
12
+ blockIndex = 0;
13
+ blockStarted = false;
14
+ push(chunk) { this.accumulated += chunk; }
15
+ processChunk(chunk) {
16
+ this.accumulated += chunk;
17
+ const meta = { type: 'text', visible: true, blockIndex: this.blockIndex };
18
+ const emissions = [];
19
+ const blockEvents = [];
20
+ if (!this.blockStarted) {
21
+ const event = { event: 'block_start', index: this.blockIndex, block: { type: 'text' } };
22
+ emissions.push({ kind: 'blockEvent', event });
23
+ blockEvents.push(event);
24
+ this.blockStarted = true;
25
+ }
26
+ emissions.push({ kind: 'content', text: chunk, meta });
27
+ return { emissions, content: [{ text: chunk, meta }], blockEvents };
28
+ }
29
+ flush() {
30
+ const emissions = [];
31
+ const blockEvents = [];
32
+ if (this.blockStarted) {
33
+ const event = {
34
+ event: 'block_complete', index: this.blockIndex,
35
+ block: { type: 'text', content: this.accumulated },
36
+ };
37
+ emissions.push({ kind: 'blockEvent', event });
38
+ blockEvents.push(event);
39
+ this.blockStarted = false;
40
+ }
41
+ return { emissions, content: [], blockEvents };
42
+ }
43
+ getAccumulated() { return this.accumulated; }
44
+ reset() { this.accumulated = ''; this.blockIndex = 0; this.blockStarted = false; }
45
+ isInsideBlock() { return false; }
46
+ getCurrentBlockType() { return 'text'; }
47
+ getBlockIndex() { return this.blockIndex; }
48
+ incrementBlockIndex() { this.blockIndex++; }
49
+ getDepths() { return { functionCalls: 0, functionResults: 0, thinking: 0 }; }
50
+ resetForNewIteration() { }
51
+ }
52
+ export class OpenAIResponsesFormatter {
53
+ name = 'openai-responses';
54
+ usesPrefill = false;
55
+ buildMessages(messages, options) {
56
+ const items = [];
57
+ let hasNativeHistory = false;
58
+ for (const message of messages) {
59
+ const nativeItems = message.metadata?.[OPENAI_RESPONSES_ITEMS_METADATA_KEY];
60
+ if (Array.isArray(nativeItems)) {
61
+ items.push(...nativeItems);
62
+ hasNativeHistory = true;
63
+ continue;
64
+ }
65
+ const seenRawItems = new Set();
66
+ let pendingParts = [];
67
+ const flushPending = () => {
68
+ if (pendingParts.length === 0)
69
+ return;
70
+ items.push(...this.convertBlocks(message, pendingParts, options.assistantParticipant));
71
+ pendingParts = [];
72
+ };
73
+ for (const block of message.content) {
74
+ const rawItem = block.rawItem;
75
+ if (!rawItem || typeof rawItem !== 'object') {
76
+ pendingParts.push(block);
77
+ continue;
78
+ }
79
+ flushPending();
80
+ hasNativeHistory = true;
81
+ const key = typeof rawItem.id === 'string'
82
+ ? `${rawItem.type ?? ''}:${rawItem.id}`
83
+ : JSON.stringify(rawItem);
84
+ if (!seenRawItems.has(key)) {
85
+ items.push(rawItem);
86
+ seenRawItems.add(key);
87
+ }
88
+ }
89
+ flushPending();
90
+ }
91
+ return {
92
+ // BuildResult's historical type says chat envelopes, but Membrane's
93
+ // provider boundary deliberately accepts unknown provider-native items.
94
+ messages: items,
95
+ // An imported rollout already contains its developer/system items.
96
+ // Re-injecting the recipe prompt would alter the stable prefix.
97
+ systemContent: hasNativeHistory ? undefined : options.systemPrompt,
98
+ stopSequences: options.additionalStopSequences ?? [],
99
+ nativeTools: options.tools?.map(tool => ({
100
+ type: 'function',
101
+ name: tool.name,
102
+ description: tool.description,
103
+ parameters: tool.inputSchema,
104
+ })),
105
+ ready: true,
106
+ };
107
+ }
108
+ convertBlocks(message, blocks, assistantParticipant) {
109
+ const isAssistant = message.participant === assistantParticipant;
110
+ const out = [];
111
+ let messageParts = [];
112
+ const flushMessage = () => {
113
+ if (messageParts.length === 0)
114
+ return;
115
+ out.push({
116
+ type: 'message',
117
+ role: isAssistant ? 'assistant' : 'user',
118
+ content: messageParts,
119
+ });
120
+ messageParts = [];
121
+ };
122
+ for (const block of blocks) {
123
+ if (block.type === 'text') {
124
+ messageParts.push({
125
+ type: isAssistant ? 'output_text' : 'input_text',
126
+ text: block.text,
127
+ });
128
+ }
129
+ else if (block.type === 'image' && !isAssistant) {
130
+ const source = block.source;
131
+ messageParts.push(source.type === 'url'
132
+ ? { type: 'input_image', image_url: source.url }
133
+ : { type: 'input_image', image_url: `data:${source.mediaType};base64,${source.data}` });
134
+ }
135
+ else if (block.type === 'tool_use') {
136
+ flushMessage();
137
+ out.push({
138
+ type: 'function_call',
139
+ call_id: block.id,
140
+ name: block.name,
141
+ arguments: JSON.stringify(block.input ?? {}),
142
+ });
143
+ }
144
+ else if (block.type === 'tool_result') {
145
+ flushMessage();
146
+ out.push({
147
+ type: 'function_call_output',
148
+ call_id: block.toolUseId,
149
+ output: typeof block.content === 'string'
150
+ ? block.content
151
+ : JSON.stringify(block.content),
152
+ });
153
+ }
154
+ else if (block.type === 'redacted_thinking') {
155
+ flushMessage();
156
+ out.push({ type: 'reasoning', encrypted_content: block.data });
157
+ }
158
+ }
159
+ flushMessage();
160
+ return out;
161
+ }
162
+ formatToolResults(results) {
163
+ return JSON.stringify(results.map(result => ({
164
+ type: 'function_call_output',
165
+ call_id: result.toolUseId,
166
+ output: result.content,
167
+ })));
168
+ }
169
+ createStreamParser() { return new ResponsesPassthroughParser(); }
170
+ parseToolCalls(_content) { return []; }
171
+ hasToolUse(_content) { return false; }
172
+ parseContentBlocks(content) {
173
+ return content ? [{ type: 'text', text: content }] : [];
174
+ }
175
+ }
176
+ //# sourceMappingURL=openai-responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-responses.js","sourceRoot":"","sources":["../../src/formatters/openai-responses.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"membrane.d.ts","sourceRoot":"","sources":["../src/membrane.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAEf,eAAe,EAEf,cAAc,EACd,aAAa,EACb,eAAe,EAYhB,MAAM,kBAAkB,CAAC;AAmB1B,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EAGtB,MAAM,4BAA4B,CAAC;AAiBpC,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAmB;gBAGlC,OAAO,EAAE,eAAe,EACxB,MAAM,GAAE,cAAmB;IAc7B;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,kBAAkB,CAAC;IA6E9B;;;;;;;;;;;;;;;;;OAiBG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,kBAAkB,GAAG,eAAe,CAAC;IA+BhD;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;;;;;OAMG;YACW,kBAAkB;IAwehC;;OAEG;YACW,qBAAqB;IAwOnC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsL9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0C5B;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAkBrC;;;;;;;;;OASG;IACH,OAAO,CAAC,2BAA2B;IA+BnC;;;;;;;OAOG;YACW,sBAAsB;IASpC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAIpC;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAmEV,UAAU;IA+BxB,OAAO,CAAC,wBAAwB;IA8ChC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,kCAAkC;IAoD1C,OAAO,CAAC,iBAAiB;IAqIzB,OAAO,CAAC,kBAAkB;IAkF1B,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,cAAc;IAItB,qFAAqF;IACrF,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,KAAK;IAcb;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,cAAc,CACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,qBAA0B,GAClC,cAAc;IAWjB;;OAEG;YACW,mBAAmB;IAwdjC;;OAEG;YACW,sBAAsB;CAmSrC"}
1
+ {"version":3,"file":"membrane.d.ts","sourceRoot":"","sources":["../src/membrane.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAEf,eAAe,EAEf,cAAc,EACd,aAAa,EACb,eAAe,EAYhB,MAAM,kBAAkB,CAAC;AAmB1B,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EAGtB,MAAM,4BAA4B,CAAC;AAiBpC,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAmB;gBAGlC,OAAO,EAAE,eAAe,EACxB,MAAM,GAAE,cAAmB;IAc7B;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,kBAAkB,CAAC;IA6E9B;;;;;;;;;;;;;;;;;OAiBG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,kBAAkB,GAAG,eAAe,CAAC;IA+BhD;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;;;;;OAMG;YACW,kBAAkB;IAwehC;;OAEG;YACW,qBAAqB;IAwOnC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA8L9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqD5B;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAkBrC;;;;;;;;;OASG;IACH,OAAO,CAAC,2BAA2B;IA+BnC;;;;;;;OAOG;YACW,sBAAsB;IASpC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAIpC;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAmEV,UAAU;IA+BxB,OAAO,CAAC,wBAAwB;IA8ChC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,kCAAkC;IAoD1C,OAAO,CAAC,iBAAiB;IAqIzB,OAAO,CAAC,kBAAkB;IAkF1B,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,cAAc;IAItB,qFAAqF;IACrF,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,KAAK;IAcb;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,cAAc,CACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,qBAA0B,GAClC,cAAc;IAWjB;;OAEG;YACW,mBAAmB;IAwdjC;;OAEG;YACW,sBAAsB;CAmSrC"}
package/dist/membrane.js CHANGED
@@ -149,7 +149,7 @@ export class Membrane {
149
149
  // Auto mode: choose based on formatter
150
150
  // NativeFormatter → native tools via API
151
151
  // AnthropicXmlFormatter (default) → XML tools in prefill
152
- if (this.formatter.name === 'native') {
152
+ if (this.formatter.name === 'native' || this.formatter.name === 'openai-responses') {
153
153
  return 'native';
154
154
  }
155
155
  // Also handle known native-tool providers regardless of formatter
@@ -731,6 +731,13 @@ export class Membrane {
731
731
  * Build a provider request with native tool support
732
732
  */
733
733
  buildNativeToolRequest(request, messages) {
734
+ // Provider-native formatters own their complete input-item shape. The
735
+ // legacy implementation below is intentionally Anthropic-specific; using
736
+ // it for Responses would normalize away item IDs, encrypted reasoning,
737
+ // assistant phases, and compaction items.
738
+ if (this.formatter.name === 'openai-responses') {
739
+ return this.transformRequest({ ...request, messages }, this.formatter).providerRequest;
740
+ }
734
741
  // Convert messages to provider format
735
742
  const providerMessages = [];
736
743
  const assistantName = request.assistantParticipant
@@ -910,7 +917,10 @@ export class Membrane {
910
917
  const blocks = [];
911
918
  for (const item of content) {
912
919
  if (item.type === 'text') {
913
- blocks.push({ type: 'text', text: item.text });
920
+ blocks.push({
921
+ type: 'text', text: item.text,
922
+ ...(item.rawItem ? { rawItem: item.rawItem } : {}),
923
+ });
914
924
  }
915
925
  else if (item.type === 'tool_use') {
916
926
  blocks.push({
@@ -918,6 +928,7 @@ export class Membrane {
918
928
  id: item.id,
919
929
  name: unsanitizeToolName(item.name),
920
930
  input: item.input,
931
+ ...(item.rawItem ? { rawItem: item.rawItem } : {}),
921
932
  });
922
933
  }
923
934
  else if (item.type === 'thinking') {
@@ -925,6 +936,7 @@ export class Membrane {
925
936
  type: 'thinking',
926
937
  thinking: item.thinking ?? '',
927
938
  ...(item.signature ? { signature: item.signature } : {}),
939
+ ...(item.rawItem ? { rawItem: item.rawItem } : {}),
928
940
  });
929
941
  }
930
942
  else if (item.type === 'redacted_thinking') {
@@ -938,6 +950,13 @@ export class Membrane {
938
950
  mimeType: item.mimeType,
939
951
  });
940
952
  }
953
+ else if (item.rawItem) {
954
+ // Opaque Responses items such as encrypted compaction or custom
955
+ // tool records have no normalized ContentBlock equivalent. Retain a
956
+ // zero-width carrier so Chronicle and the Responses formatter can
957
+ // replay the raw item without surfacing synthetic prompt text.
958
+ blocks.push({ type: 'text', text: '', rawItem: item.rawItem });
959
+ }
941
960
  }
942
961
  return blocks;
943
962
  }