@autonome-research/thread-phase-agents 3.0.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.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +207 -0
  3. package/dist/acp/adapter.d.ts +89 -0
  4. package/dist/acp/adapter.d.ts.map +1 -0
  5. package/dist/acp/adapter.js +461 -0
  6. package/dist/acp/adapter.js.map +1 -0
  7. package/dist/acp/index.d.ts +12 -0
  8. package/dist/acp/index.d.ts.map +1 -0
  9. package/dist/acp/index.js +10 -0
  10. package/dist/acp/index.js.map +1 -0
  11. package/dist/acp/transport.d.ts +82 -0
  12. package/dist/acp/transport.d.ts.map +1 -0
  13. package/dist/acp/transport.js +199 -0
  14. package/dist/acp/transport.js.map +1 -0
  15. package/dist/acp/types.d.ts +157 -0
  16. package/dist/acp/types.d.ts.map +1 -0
  17. package/dist/acp/types.js +34 -0
  18. package/dist/acp/types.js.map +1 -0
  19. package/dist/anthropic/adapter.d.ts +55 -0
  20. package/dist/anthropic/adapter.d.ts.map +1 -0
  21. package/dist/anthropic/adapter.js +259 -0
  22. package/dist/anthropic/adapter.js.map +1 -0
  23. package/dist/anthropic/index.d.ts +8 -0
  24. package/dist/anthropic/index.d.ts.map +1 -0
  25. package/dist/anthropic/index.js +8 -0
  26. package/dist/anthropic/index.js.map +1 -0
  27. package/dist/claude-code/adapter.d.ts +56 -0
  28. package/dist/claude-code/adapter.d.ts.map +1 -0
  29. package/dist/claude-code/adapter.js +319 -0
  30. package/dist/claude-code/adapter.js.map +1 -0
  31. package/dist/claude-code/index.d.ts +8 -0
  32. package/dist/claude-code/index.d.ts.map +1 -0
  33. package/dist/claude-code/index.js +8 -0
  34. package/dist/claude-code/index.js.map +1 -0
  35. package/dist/codex/adapter.d.ts +62 -0
  36. package/dist/codex/adapter.d.ts.map +1 -0
  37. package/dist/codex/adapter.js +258 -0
  38. package/dist/codex/adapter.js.map +1 -0
  39. package/dist/codex/index.d.ts +9 -0
  40. package/dist/codex/index.d.ts.map +1 -0
  41. package/dist/codex/index.js +9 -0
  42. package/dist/codex/index.js.map +1 -0
  43. package/dist/codex-cli/adapter.d.ts +70 -0
  44. package/dist/codex-cli/adapter.d.ts.map +1 -0
  45. package/dist/codex-cli/adapter.js +368 -0
  46. package/dist/codex-cli/adapter.js.map +1 -0
  47. package/dist/codex-cli/index.d.ts +10 -0
  48. package/dist/codex-cli/index.d.ts.map +1 -0
  49. package/dist/codex-cli/index.js +10 -0
  50. package/dist/codex-cli/index.js.map +1 -0
  51. package/dist/hermes/index.d.ts +50 -0
  52. package/dist/hermes/index.d.ts.map +1 -0
  53. package/dist/hermes/index.js +43 -0
  54. package/dist/hermes/index.js.map +1 -0
  55. package/dist/index.d.ts +11 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +14 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/injectors.d.ts +104 -0
  60. package/dist/injectors.d.ts.map +1 -0
  61. package/dist/injectors.js +219 -0
  62. package/dist/injectors.js.map +1 -0
  63. package/dist/openclaw/index.d.ts +54 -0
  64. package/dist/openclaw/index.d.ts.map +1 -0
  65. package/dist/openclaw/index.js +61 -0
  66. package/dist/openclaw/index.js.map +1 -0
  67. package/dist/pi/adapter.d.ts +79 -0
  68. package/dist/pi/adapter.d.ts.map +1 -0
  69. package/dist/pi/adapter.js +396 -0
  70. package/dist/pi/adapter.js.map +1 -0
  71. package/dist/pi/index.d.ts +14 -0
  72. package/dist/pi/index.d.ts.map +1 -0
  73. package/dist/pi/index.js +14 -0
  74. package/dist/pi/index.js.map +1 -0
  75. package/dist/thread-bridge.d.ts +83 -0
  76. package/dist/thread-bridge.d.ts.map +1 -0
  77. package/dist/thread-bridge.js +143 -0
  78. package/dist/thread-bridge.js.map +1 -0
  79. package/package.json +46 -0
@@ -0,0 +1,396 @@
1
+ /**
2
+ * Pi adapter — in-process via `@mariozechner/pi-coding-agent`.
3
+ *
4
+ * Pi is a fully-featured TypeScript coding agent SDK. Unlike the
5
+ * subprocess-based adapters (claude-code, codex-cli, ACP), pi runs in
6
+ * the same Node process: the adapter calls `createAgentSession`,
7
+ * subscribes to its event stream, and forwards each event into the
8
+ * canonical AgentEvent vocabulary.
9
+ *
10
+ * The headline difference from every other adapter: **pi supports
11
+ * native mid-stream steering and follow-up.** This is the first
12
+ * adapter where both `steer()` and `followUp()` on
13
+ * `SteerableAgentRun` actually work at runtime — pi accepts new
14
+ * messages while the model is still generating.
15
+ *
16
+ * Capabilities:
17
+ * streaming 'text'
18
+ * cancellation 'cooperative' (session.abort())
19
+ * resumption 'session-file' (pi's SessionManager persists to disk)
20
+ * structuredOutput 'prompted'
21
+ *
22
+ * Event translation:
23
+ * pi agent_start -> canonical agent_start
24
+ * pi message_update + text_delta -> canonical text
25
+ * pi message_update + thinking_* -> canonical thinking
26
+ * pi tool_execution_start -> canonical tool_call
27
+ * pi tool_execution_end -> canonical tool_result
28
+ * pi turn_end -> canonical turn_end (via endTurn)
29
+ * pi agent_end -> canonical agent_end
30
+ * everything else -> native events (kind: 'pi:*')
31
+ *
32
+ * @internal
33
+ */
34
+ import { applyStructuredOutputPrompt, composeAbort, createEventQueue, defineAgentAdapter, lazyEvents, parseStructuredFromText, serializeError, TurnAccumulator, } from '@autonome-research/thread-phase/agents';
35
+ const ADAPTER_ID = 'pi';
36
+ /** @internal */
37
+ export const piAgent = defineAgentAdapter({
38
+ id: ADAPTER_ID,
39
+ capabilities: {
40
+ streaming: 'text',
41
+ cancellation: 'cooperative',
42
+ resumption: 'session-file',
43
+ structuredOutput: 'prompted',
44
+ },
45
+ adapter: createPiAdapter,
46
+ });
47
+ function createPiAdapter(config, options = {}) {
48
+ const source = ADAPTER_ID;
49
+ const traceId = options.traceId;
50
+ const { signal: compositeSignal, controller } = composeAbort(options.signal);
51
+ const queue = createEventQueue(options.eventBus);
52
+ const turns = new TurnAccumulator(queue.push, source, traceId);
53
+ // Track session for steer/followUp/abort.
54
+ let activeSession = null;
55
+ let hasEnded = false;
56
+ let started = false;
57
+ let runPromise = null;
58
+ const startIfNeeded = () => {
59
+ if (runPromise)
60
+ return runPromise;
61
+ started = true;
62
+ runPromise = runOnce();
63
+ return runPromise;
64
+ };
65
+ async function runOnce() {
66
+ let resumeToken = config.resumeSessionFile
67
+ ? { kind: 'session-file', path: config.resumeSessionFile }
68
+ : undefined;
69
+ queue.push({ type: 'agent_start', source, traceId, resumeToken });
70
+ const effectivePrompt = config.outputSchema
71
+ ? `${config.prompt}\n\n${applyStructuredOutputPrompt('', config.outputSchema)}`
72
+ : config.prompt;
73
+ let assembledText = '';
74
+ let finishReason = 'unknown';
75
+ let inputTokens = 0;
76
+ let outputTokens = 0;
77
+ const executedToolCalls = [];
78
+ let sessionId;
79
+ let ownsSession = false;
80
+ try {
81
+ let session;
82
+ if (config.session) {
83
+ session = config.session;
84
+ }
85
+ else {
86
+ // Dynamic import keeps pi-coding-agent out of the type/runtime
87
+ // path for consumers who don't use this adapter.
88
+ const piModule = await import('@mariozechner/pi-coding-agent');
89
+ const factory = piModule.createAgentSession;
90
+ if (typeof factory !== 'function') {
91
+ throw new Error('@mariozechner/pi-coding-agent: createAgentSession not exported');
92
+ }
93
+ const result = await factory({
94
+ cwd: config.cwd ?? process.cwd(),
95
+ continueSession: config.continueSession,
96
+ resumeSessionFile: config.resumeSessionFile,
97
+ model: config.model,
98
+ thinkingLevel: config.thinkingLevel,
99
+ ...config.sessionOptions,
100
+ });
101
+ session = result.session;
102
+ ownsSession = true;
103
+ }
104
+ activeSession = session;
105
+ // Subscribe and translate events.
106
+ const unsubscribe = session.subscribe((event) => {
107
+ try {
108
+ translateEvent(event);
109
+ }
110
+ catch (err) {
111
+ queue.push({
112
+ type: 'error',
113
+ source,
114
+ traceId,
115
+ error: serializeError(err),
116
+ transient: false,
117
+ });
118
+ }
119
+ });
120
+ function translateEvent(event) {
121
+ if (event === null || typeof event !== 'object')
122
+ return;
123
+ const eventType = event.type;
124
+ switch (eventType) {
125
+ case 'agent_start': {
126
+ // pi emits its own agent_start; we already emitted ours.
127
+ // Forward as native so the audit log keeps both.
128
+ turns.native('pi:agent_start', event);
129
+ return;
130
+ }
131
+ case 'agent_end': {
132
+ // Stop reason comes from the last assistant message. Usage is
133
+ // captured per-turn via turn_end events — DO NOT re-add it
134
+ // here, since agent_end.messages contains every assistant
135
+ // message of the run and would double-count.
136
+ const messages = event.messages ?? [];
137
+ const last = messages[messages.length - 1];
138
+ if (last) {
139
+ finishReason = mapStopReason(last.stopReason);
140
+ if (typeof last.errorMessage === 'string' && last.errorMessage) {
141
+ queue.push({
142
+ type: 'error',
143
+ source,
144
+ traceId,
145
+ error: { name: 'PiAgentError', message: last.errorMessage },
146
+ transient: false,
147
+ });
148
+ }
149
+ if (typeof last.sessionId === 'string')
150
+ sessionId = last.sessionId;
151
+ }
152
+ turns.native('pi:agent_end', event);
153
+ return;
154
+ }
155
+ case 'turn_start': {
156
+ turns.native('pi:turn_start', event);
157
+ return;
158
+ }
159
+ case 'turn_end': {
160
+ const turnMsg = event.message;
161
+ if (turnMsg?.usage) {
162
+ const usage = {
163
+ promptTokens: Number(turnMsg.usage.input) || 0,
164
+ completionTokens: Number(turnMsg.usage.output) || 0,
165
+ totalTokens: (Number(turnMsg.usage.input) || 0) + (Number(turnMsg.usage.output) || 0),
166
+ };
167
+ turns.endTurn(usage);
168
+ inputTokens += usage.promptTokens;
169
+ outputTokens += usage.completionTokens;
170
+ }
171
+ else {
172
+ turns.endTurn();
173
+ }
174
+ return;
175
+ }
176
+ case 'message_update': {
177
+ const inner = event.assistantMessageEvent;
178
+ if (!inner)
179
+ return;
180
+ switch (inner.type) {
181
+ case 'text_delta': {
182
+ const delta = typeof inner.delta === 'string' ? inner.delta : '';
183
+ if (delta) {
184
+ assembledText += delta;
185
+ turns.text(delta);
186
+ }
187
+ return;
188
+ }
189
+ case 'thinking_delta': {
190
+ const delta = typeof inner.delta === 'string' ? inner.delta : '';
191
+ if (delta)
192
+ turns.thinking(delta);
193
+ return;
194
+ }
195
+ case 'toolcall_end': {
196
+ // Tool call args finalized inside the message stream.
197
+ // The canonical tool_call event fires from
198
+ // `tool_execution_start` below — surface the inner
199
+ // event as native for audit.
200
+ turns.native('pi:toolcall_end', inner);
201
+ return;
202
+ }
203
+ default: {
204
+ turns.native(`pi:message_update:${inner.type}`, inner);
205
+ return;
206
+ }
207
+ }
208
+ }
209
+ case 'tool_execution_start': {
210
+ const e = event;
211
+ const input = e.args && typeof e.args === 'object' && !Array.isArray(e.args)
212
+ ? e.args
213
+ : { value: e.args };
214
+ turns.toolCall(e.toolCallId, e.toolName, input);
215
+ executedToolCalls.push({ id: e.toolCallId, name: e.toolName, input });
216
+ return;
217
+ }
218
+ case 'tool_execution_end': {
219
+ const e = event;
220
+ turns.toolResult(e.toolCallId, e.toolName, e.result, e.isError === true);
221
+ return;
222
+ }
223
+ case 'tool_execution_update': {
224
+ turns.native('pi:tool_execution_update', event);
225
+ return;
226
+ }
227
+ case 'message_start':
228
+ case 'message_end': {
229
+ turns.native(`pi:${eventType}`, event);
230
+ return;
231
+ }
232
+ default: {
233
+ turns.native(`pi:${eventType ?? 'unknown'}`, event);
234
+ return;
235
+ }
236
+ }
237
+ }
238
+ // Wire abort. Pi's session.abort() is async and graceful.
239
+ const onAbort = () => {
240
+ try {
241
+ void session.abort();
242
+ }
243
+ catch {
244
+ // best-effort
245
+ }
246
+ };
247
+ if (compositeSignal.aborted) {
248
+ onAbort();
249
+ }
250
+ else {
251
+ compositeSignal.addEventListener('abort', onAbort, { once: true });
252
+ }
253
+ try {
254
+ await session.prompt(effectivePrompt);
255
+ }
256
+ catch (err) {
257
+ queue.push({
258
+ type: 'error',
259
+ source,
260
+ traceId,
261
+ error: serializeError(err),
262
+ transient: false,
263
+ });
264
+ if (compositeSignal.aborted && finishReason === 'unknown') {
265
+ finishReason = 'aborted';
266
+ }
267
+ else if (finishReason === 'unknown') {
268
+ finishReason = 'error';
269
+ }
270
+ }
271
+ unsubscribe();
272
+ // If agent_end never fired (rare), close the accumulator.
273
+ turns.close();
274
+ if (finishReason === 'unknown' && compositeSignal.aborted) {
275
+ finishReason = 'aborted';
276
+ }
277
+ if (sessionId) {
278
+ // Pi sessions can be looked up by id via SessionManager. Surface
279
+ // the id alongside the session file when available.
280
+ resumeToken = { kind: 'opaque', data: sessionId };
281
+ }
282
+ let parsed = undefined;
283
+ let parseError = undefined;
284
+ // finishReason can be any AgentFinishReason (set via translateEvent
285
+ // callback which TS can't flow-analyze); cast through unknown to
286
+ // bypass the narrowed view TS infers from the catch path.
287
+ if (config.outputSchema && finishReason === 'stop') {
288
+ try {
289
+ parsed = parseStructuredFromText(assembledText, config.outputSchema);
290
+ }
291
+ catch (err) {
292
+ parseError = serializeError(err);
293
+ }
294
+ }
295
+ queue.push({ type: 'agent_end', source, traceId, reason: finishReason, resumeToken });
296
+ hasEnded = true;
297
+ queue.close();
298
+ if (ownsSession) {
299
+ try {
300
+ session.dispose();
301
+ }
302
+ catch {
303
+ // ignore disposal errors
304
+ }
305
+ }
306
+ return {
307
+ text: assembledText,
308
+ finishReason,
309
+ usage: {
310
+ promptTokens: inputTokens,
311
+ completionTokens: outputTokens,
312
+ totalTokens: inputTokens + outputTokens,
313
+ },
314
+ executedToolCalls,
315
+ parsed,
316
+ parseError,
317
+ resumeToken,
318
+ };
319
+ }
320
+ catch (err) {
321
+ const aborted = compositeSignal.aborted;
322
+ turns.close();
323
+ queue.push({
324
+ type: 'error',
325
+ source,
326
+ traceId,
327
+ error: serializeError(err),
328
+ transient: false,
329
+ });
330
+ const reason = aborted ? 'aborted' : 'error';
331
+ queue.push({ type: 'agent_end', source, traceId, reason, resumeToken });
332
+ hasEnded = true;
333
+ queue.close();
334
+ return {
335
+ text: assembledText,
336
+ finishReason: reason,
337
+ usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
338
+ executedToolCalls: [],
339
+ resumeToken,
340
+ };
341
+ }
342
+ }
343
+ // Returned object includes the SteerableAgentRun shape — pi natively
344
+ // supports both steer() and followUp().
345
+ const run = {
346
+ events: lazyEvents(queue.events, startIfNeeded),
347
+ get result() {
348
+ return startIfNeeded();
349
+ },
350
+ abort(reason) {
351
+ controller.abort(reason);
352
+ if (!started)
353
+ startIfNeeded();
354
+ },
355
+ async steer(message) {
356
+ if (hasEnded) {
357
+ throw new Error('cannot steer after agent_end');
358
+ }
359
+ const session = activeSession;
360
+ if (!session) {
361
+ throw new Error('cannot steer before the pi session has started');
362
+ }
363
+ await session.steer(message);
364
+ },
365
+ async followUp(message) {
366
+ if (hasEnded) {
367
+ throw new Error('cannot followUp after agent_end');
368
+ }
369
+ const session = activeSession;
370
+ if (!session) {
371
+ throw new Error('cannot followUp before the pi session has started');
372
+ }
373
+ await session.followUp(message);
374
+ },
375
+ };
376
+ return run;
377
+ }
378
+ function mapStopReason(reason) {
379
+ if (typeof reason !== 'string')
380
+ return 'unknown';
381
+ switch (reason) {
382
+ case 'stop':
383
+ return 'stop';
384
+ case 'length':
385
+ return 'length';
386
+ case 'toolUse':
387
+ return 'tool_calls';
388
+ case 'error':
389
+ return 'error';
390
+ case 'aborted':
391
+ return 'aborted';
392
+ default:
393
+ return 'unknown';
394
+ }
395
+ }
396
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/pi/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Pi adapter entry. In-process via `@mariozechner/pi-coding-agent`.
3
+ *
4
+ * The first adapter in this package that natively supports
5
+ * `SteerableAgentRun.steer()` and `.followUp()`. Use `isSteerable`
6
+ * from `thread-phase/agents` to narrow at the call site:
7
+ *
8
+ * const run = piAgent.adapter({ cwd, prompt });
9
+ * if (isSteerable(run)) await run.steer('reconsider this');
10
+ *
11
+ * @internal
12
+ */
13
+ export { piAgent, type PiAgentConfig } from './adapter.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pi/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Pi adapter entry. In-process via `@mariozechner/pi-coding-agent`.
3
+ *
4
+ * The first adapter in this package that natively supports
5
+ * `SteerableAgentRun.steer()` and `.followUp()`. Use `isSteerable`
6
+ * from `thread-phase/agents` to narrow at the call site:
7
+ *
8
+ * const run = piAgent.adapter({ cwd, prompt });
9
+ * if (isSteerable(run)) await run.steer('reconsider this');
10
+ *
11
+ * @internal
12
+ */
13
+ export { piAgent } from './adapter.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pi/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Render a `Thread` into the input shape each adapter expects.
3
+ *
4
+ * Same-adapter handoff (claude-code → claude-code) uses the resume
5
+ * token; native fidelity. Cross-adapter handoff (claude-code →
6
+ * anthropic) loses the per-adapter native log and falls back to a
7
+ * text rendering of the canonical event stream.
8
+ *
9
+ * These helpers turn `thread.events` into the next adapter's input
10
+ * format. They're lossy by design — preserve the gist, not the
11
+ * adapter-specific structure. For tighter fidelity, pass the
12
+ * adapter's resume token via `injectResume.<adapter>` instead.
13
+ *
14
+ * @internal
15
+ */
16
+ import { threadToMessages, type Thread } from '@autonome-research/thread-phase/agents';
17
+ import type { ContentBlock } from './acp/index.js';
18
+ /**
19
+ * Produce a text transcript of the thread suitable for splicing into
20
+ * any adapter's prompt. Format is "[<source>] <text>" for assistant
21
+ * turns, "[<source>:tool] <name>(<input>)" for tool calls,
22
+ * "[<source>:result] <output>" for tool results. Skips native /
23
+ * thinking / lifecycle events.
24
+ *
25
+ * Output is bounded by the thread's content; very long threads
26
+ * produce very long transcripts — callers managing token budgets
27
+ * should pre-trim or summarize.
28
+ *
29
+ * @internal
30
+ */
31
+ export declare function threadToTranscript(thread: Thread): string;
32
+ /**
33
+ * Render a thread as a single ACP `ContentBlock[]` (one text block).
34
+ * Suitable for `acpAgent.adapter({ ..., prompt: threadToAcpPrompt(thread) })`
35
+ * when a downstream adapter call shouldn't try same-session resume.
36
+ *
37
+ * @internal
38
+ */
39
+ export declare function threadToAcpPrompt(thread: Thread): ContentBlock[];
40
+ /**
41
+ * Render a thread as a plain string. Suitable for `claudeCodeAgent` or
42
+ * any adapter that takes a single user-prompt string.
43
+ *
44
+ * @internal
45
+ */
46
+ export declare function threadToClaudeCodePrompt(thread: Thread): string;
47
+ /**
48
+ * Render a thread as a single text input for the OpenAI Responses API.
49
+ * The Responses API's `input` field accepts a string or an items array;
50
+ * we use the string form for cross-adapter handoff.
51
+ *
52
+ * @internal
53
+ */
54
+ export declare function threadToCodexInput(thread: Thread): string;
55
+ /**
56
+ * Render a thread as Anthropic `MessageParam[]` — currently a single
57
+ * user message wrapping the transcript. Anthropic's role-based
58
+ * conversation structure doesn't round-trip from canonical events
59
+ * losslessly; for tighter fidelity, use Anthropic's own messages
60
+ * array directly rather than crossing adapter boundaries.
61
+ *
62
+ * The return type is intentionally typed loosely as `unknown[]` to
63
+ * avoid importing `@anthropic-ai/sdk` types from this module — the
64
+ * runtime shape matches `MessageParam[]` (role: 'user' | 'assistant',
65
+ * content: string), which is the broadly-compatible subset across
66
+ * Anthropic SDK versions.
67
+ *
68
+ * @internal
69
+ */
70
+ export declare function threadToAnthropicMessages(thread: Thread): Array<{
71
+ role: 'user' | 'assistant';
72
+ content: string;
73
+ }>;
74
+ /**
75
+ * Render the thread's canonical event log to thread-phase's internal
76
+ * `Message[]` shape. Re-exports the upstream `threadToMessages` so
77
+ * sibling-package consumers can find all the bridge helpers in one
78
+ * place.
79
+ *
80
+ * @internal
81
+ */
82
+ export { threadToMessages };
83
+ //# sourceMappingURL=thread-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-bridge.d.ts","sourceRoot":"","sources":["../src/thread-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,gBAAgB,EAChB,KAAK,MAAM,EACZ,MAAM,wCAAwC,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMnD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAmCzD;AAeD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAGhE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,GACb,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAMxD;AAED;;;;;;;GAOG;AACH,OAAO,EAAE,gBAAgB,EAAE,CAAC"}