network-ai 4.0.17 → 4.2.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 (34) hide show
  1. package/README.md +113 -30
  2. package/dist/adapters/a2a-adapter.d.ts +152 -0
  3. package/dist/adapters/a2a-adapter.d.ts.map +1 -0
  4. package/dist/adapters/a2a-adapter.js +235 -0
  5. package/dist/adapters/a2a-adapter.js.map +1 -0
  6. package/dist/adapters/codex-adapter.d.ts +152 -0
  7. package/dist/adapters/codex-adapter.d.ts.map +1 -0
  8. package/dist/adapters/codex-adapter.js +318 -0
  9. package/dist/adapters/codex-adapter.js.map +1 -0
  10. package/dist/adapters/custom-streaming-adapter.d.ts +68 -0
  11. package/dist/adapters/custom-streaming-adapter.d.ts.map +1 -0
  12. package/dist/adapters/custom-streaming-adapter.js +181 -0
  13. package/dist/adapters/custom-streaming-adapter.js.map +1 -0
  14. package/dist/adapters/index.d.ts +9 -0
  15. package/dist/adapters/index.d.ts.map +1 -1
  16. package/dist/adapters/index.js +15 -1
  17. package/dist/adapters/index.js.map +1 -1
  18. package/dist/adapters/langchain-streaming-adapter.d.ts +48 -0
  19. package/dist/adapters/langchain-streaming-adapter.d.ts.map +1 -0
  20. package/dist/adapters/langchain-streaming-adapter.js +161 -0
  21. package/dist/adapters/langchain-streaming-adapter.js.map +1 -0
  22. package/dist/adapters/streaming-base-adapter.d.ts +42 -0
  23. package/dist/adapters/streaming-base-adapter.d.ts.map +1 -0
  24. package/dist/adapters/streaming-base-adapter.js +68 -0
  25. package/dist/adapters/streaming-base-adapter.js.map +1 -0
  26. package/dist/index.d.ts +9 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +15 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/run.js +1 -0
  31. package/dist/run.js.map +1 -1
  32. package/package.json +7 -4
  33. package/socket.json +12 -0
  34. package/types/streaming-adapter.d.ts +63 -0
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Codex Adapter
3
+ *
4
+ * Integrates OpenAI Codex (code-davinci-002, gpt-4o, o4-mini, or any
5
+ * completions/chat-completions endpoint) with the SwarmOrchestrator.
6
+ *
7
+ * Supports three modes:
8
+ * - `completion` — legacy /v1/completions (code-davinci-002 style)
9
+ * - `chat` — /v1/chat/completions (gpt-4o, o4-mini, etc.)
10
+ * - `cli` — wraps an OpenAI Codex CLI process via a user-supplied
11
+ * executor function (for the codex CLI tool)
12
+ *
13
+ * Usage — chat mode:
14
+ * const adapter = new CodexAdapter();
15
+ * adapter.registerCodexAgent('refactor', {
16
+ * mode: 'chat',
17
+ * model: 'gpt-4o',
18
+ * systemPrompt: 'You are a refactoring assistant.',
19
+ * apiKey: process.env.OPENAI_API_KEY,
20
+ * });
21
+ *
22
+ * Usage — CLI mode (Codex CLI tool):
23
+ * adapter.registerCodexAgent('codex-cli', {
24
+ * mode: 'cli',
25
+ * executor: async (prompt) => myCodexCLIWrapper(prompt),
26
+ * });
27
+ *
28
+ * Usage — custom client (bring-your-own OpenAI SDK):
29
+ * adapter.registerCodexAgent('analyst', {
30
+ * mode: 'chat',
31
+ * model: 'gpt-4o',
32
+ * client: openaiInstance, // any object with .chat.completions.create()
33
+ * });
34
+ *
35
+ * @module CodexAdapter
36
+ * @version 1.0.0
37
+ */
38
+ import { BaseAdapter } from './base-adapter';
39
+ import type { AdapterCapabilities, AgentPayload, AgentContext, AgentResult } from '../types/agent-adapter';
40
+ /** Execution mode for a Codex agent */
41
+ export type CodexMode = 'completion' | 'chat' | 'cli';
42
+ /**
43
+ * Minimal interface for the OpenAI SDK's chat completions —
44
+ * compatible with `new OpenAI().chat.completions`.
45
+ * Users supply their own SDK instance; no hard dependency.
46
+ */
47
+ export interface CodexChatClient {
48
+ create(params: {
49
+ model: string;
50
+ messages: Array<{
51
+ role: string;
52
+ content: string;
53
+ }>;
54
+ max_tokens?: number;
55
+ temperature?: number;
56
+ stop?: string[];
57
+ }): Promise<{
58
+ choices: Array<{
59
+ message?: {
60
+ content?: string | null;
61
+ };
62
+ text?: string;
63
+ }>;
64
+ usage?: {
65
+ prompt_tokens: number;
66
+ completion_tokens: number;
67
+ total_tokens: number;
68
+ };
69
+ }>;
70
+ }
71
+ /**
72
+ * Minimal interface for the OpenAI SDK's legacy completions —
73
+ * compatible with `new OpenAI().completions`.
74
+ */
75
+ export interface CodexCompletionClient {
76
+ create(params: {
77
+ model: string;
78
+ prompt: string;
79
+ max_tokens?: number;
80
+ temperature?: number;
81
+ stop?: string[];
82
+ }): Promise<{
83
+ choices: Array<{
84
+ text?: string;
85
+ }>;
86
+ usage?: {
87
+ prompt_tokens: number;
88
+ completion_tokens: number;
89
+ total_tokens: number;
90
+ };
91
+ }>;
92
+ }
93
+ /**
94
+ * A user-supplied executor for Codex CLI mode.
95
+ * Receives the assembled prompt, returns the CLI output string.
96
+ */
97
+ export type CodexCLIExecutor = (prompt: string, options?: Record<string, unknown>) => Promise<string>;
98
+ /** Configuration for a registered Codex agent */
99
+ export interface CodexAgentConfig {
100
+ /** Execution mode (default: 'chat') */
101
+ mode?: CodexMode;
102
+ /** Model name — e.g. 'gpt-4o', 'o4-mini', 'code-davinci-002' */
103
+ model?: string;
104
+ /** OpenAI API key — falls back to OPENAI_API_KEY env var */
105
+ apiKey?: string;
106
+ /** Base URL override for Azure OpenAI, proxies, or self-hosted endpoints */
107
+ baseUrl?: string;
108
+ /** System-level prompt prepended to every request (chat mode only) */
109
+ systemPrompt?: string;
110
+ /** Maximum tokens in the completion */
111
+ maxTokens?: number;
112
+ /** Temperature (0–2). Default: 0 for code tasks */
113
+ temperature?: number;
114
+ /** Stop sequences */
115
+ stop?: string[];
116
+ /**
117
+ * Bring-your-own OpenAI SDK chat completions instance.
118
+ * If supplied, apiKey / baseUrl are ignored and this client is used directly.
119
+ * Typically `new OpenAI().chat.completions` or `openai.chat.completions`.
120
+ */
121
+ client?: CodexChatClient | CodexCompletionClient;
122
+ /**
123
+ * Executor function for CLI mode.
124
+ * Required when mode === 'cli'.
125
+ */
126
+ executor?: CodexCLIExecutor;
127
+ /** Additional headers to send with fetch-based requests */
128
+ headers?: Record<string, string>;
129
+ }
130
+ /**
131
+ * Adapter that connects OpenAI Codex / code-focused models to the
132
+ * SwarmOrchestrator. Supports chat completions, legacy completions,
133
+ * and the Codex CLI executor interface.
134
+ */
135
+ export declare class CodexAdapter extends BaseAdapter {
136
+ readonly name = "codex";
137
+ readonly version = "1.0.0";
138
+ private agents;
139
+ get capabilities(): AdapterCapabilities;
140
+ /**
141
+ * Register a Codex-powered agent.
142
+ *
143
+ * @param agentId Unique identifier used in `delegateTask` calls.
144
+ * @param config Codex agent configuration.
145
+ */
146
+ registerCodexAgent(agentId: string, config?: CodexAgentConfig): void;
147
+ executeAgent(agentId: string, payload: AgentPayload, context: AgentContext): Promise<AgentResult>;
148
+ private _executeChat;
149
+ private _executeCompletion;
150
+ private _executeCLI;
151
+ }
152
+ //# sourceMappingURL=codex-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-adapter.d.ts","sourceRoot":"","sources":["../../adapters/codex-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,318 @@
1
+ "use strict";
2
+ /**
3
+ * Codex Adapter
4
+ *
5
+ * Integrates OpenAI Codex (code-davinci-002, gpt-4o, o4-mini, or any
6
+ * completions/chat-completions endpoint) with the SwarmOrchestrator.
7
+ *
8
+ * Supports three modes:
9
+ * - `completion` — legacy /v1/completions (code-davinci-002 style)
10
+ * - `chat` — /v1/chat/completions (gpt-4o, o4-mini, etc.)
11
+ * - `cli` — wraps an OpenAI Codex CLI process via a user-supplied
12
+ * executor function (for the codex CLI tool)
13
+ *
14
+ * Usage — chat mode:
15
+ * const adapter = new CodexAdapter();
16
+ * adapter.registerCodexAgent('refactor', {
17
+ * mode: 'chat',
18
+ * model: 'gpt-4o',
19
+ * systemPrompt: 'You are a refactoring assistant.',
20
+ * apiKey: process.env.OPENAI_API_KEY,
21
+ * });
22
+ *
23
+ * Usage — CLI mode (Codex CLI tool):
24
+ * adapter.registerCodexAgent('codex-cli', {
25
+ * mode: 'cli',
26
+ * executor: async (prompt) => myCodexCLIWrapper(prompt),
27
+ * });
28
+ *
29
+ * Usage — custom client (bring-your-own OpenAI SDK):
30
+ * adapter.registerCodexAgent('analyst', {
31
+ * mode: 'chat',
32
+ * model: 'gpt-4o',
33
+ * client: openaiInstance, // any object with .chat.completions.create()
34
+ * });
35
+ *
36
+ * @module CodexAdapter
37
+ * @version 1.0.0
38
+ */
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.CodexAdapter = void 0;
41
+ const base_adapter_1 = require("./base-adapter");
42
+ // ---------------------------------------------------------------------------
43
+ // Helpers
44
+ // ---------------------------------------------------------------------------
45
+ /** Build the prompt string from an AgentPayload */
46
+ function buildPrompt(payload) {
47
+ const parts = [];
48
+ const instruction = payload.handoff?.instruction;
49
+ if (instruction)
50
+ parts.push(instruction);
51
+ if (payload.action)
52
+ parts.push(`Task: ${payload.action}`);
53
+ if (payload.params && Object.keys(payload.params).length > 0) {
54
+ parts.push(`Parameters: ${JSON.stringify(payload.params, null, 2)}`);
55
+ }
56
+ if (payload.blackboardSnapshot && Object.keys(payload.blackboardSnapshot).length > 0) {
57
+ const relevant = Object.entries(payload.blackboardSnapshot)
58
+ .slice(0, 10)
59
+ .map(([k, v]) => `${k}: ${JSON.stringify(v)}`)
60
+ .join('\n');
61
+ parts.push(`Context from blackboard:\n${relevant}`);
62
+ }
63
+ return parts.join('\n\n') || 'Complete the task.';
64
+ }
65
+ /** Safely extract text from a completion/chat response */
66
+ function extractText(choice) {
67
+ if (choice.message?.content != null)
68
+ return choice.message.content;
69
+ if (choice.text != null)
70
+ return choice.text;
71
+ return '';
72
+ }
73
+ /** Resolve API key — config first, then env */
74
+ function resolveApiKey(config) {
75
+ const key = config.apiKey ?? process.env['OPENAI_API_KEY'] ?? '';
76
+ return key;
77
+ }
78
+ // ---------------------------------------------------------------------------
79
+ // CodexAdapter
80
+ // ---------------------------------------------------------------------------
81
+ /**
82
+ * Adapter that connects OpenAI Codex / code-focused models to the
83
+ * SwarmOrchestrator. Supports chat completions, legacy completions,
84
+ * and the Codex CLI executor interface.
85
+ */
86
+ class CodexAdapter extends base_adapter_1.BaseAdapter {
87
+ name = 'codex';
88
+ version = '1.0.0';
89
+ agents = new Map();
90
+ get capabilities() {
91
+ return {
92
+ streaming: false,
93
+ parallel: true,
94
+ bidirectional: false,
95
+ discovery: true,
96
+ authentication: true,
97
+ statefulSessions: false,
98
+ };
99
+ }
100
+ // -------------------------------------------------------------------------
101
+ // Registration
102
+ // -------------------------------------------------------------------------
103
+ /**
104
+ * Register a Codex-powered agent.
105
+ *
106
+ * @param agentId Unique identifier used in `delegateTask` calls.
107
+ * @param config Codex agent configuration.
108
+ */
109
+ registerCodexAgent(agentId, config = {}) {
110
+ if (!this.ready) {
111
+ // Allow pre-initialize registration; initialize() is called lazily
112
+ this.ready = true;
113
+ }
114
+ const mode = config.mode ?? 'chat';
115
+ if (mode === 'cli' && !config.executor) {
116
+ throw new Error(`CodexAdapter: agent "${agentId}" uses mode "cli" but no executor function was provided.`);
117
+ }
118
+ this.agents.set(agentId, { config: { mode, ...config } });
119
+ this.registeredAgents.set(agentId, {
120
+ id: agentId,
121
+ name: agentId,
122
+ description: `Codex agent (${mode}, model: ${config.model ?? 'gpt-4o'})`,
123
+ capabilities: ['code-generation', 'code-review', 'refactoring', 'explanation'],
124
+ adapter: this.name,
125
+ status: 'available',
126
+ });
127
+ }
128
+ // -------------------------------------------------------------------------
129
+ // Execution
130
+ // -------------------------------------------------------------------------
131
+ async executeAgent(agentId, payload, context) {
132
+ if (!this.ready) {
133
+ throw new Error('CodexAdapter: adapter not initialized. Call initialize() first.');
134
+ }
135
+ const entry = this.agents.get(agentId);
136
+ if (!entry) {
137
+ return {
138
+ success: false,
139
+ error: {
140
+ code: 'AGENT_NOT_FOUND',
141
+ message: `CodexAdapter: no agent registered with id "${agentId}"`,
142
+ recoverable: false,
143
+ },
144
+ metadata: { adapter: this.name },
145
+ };
146
+ }
147
+ const cfg = entry.config;
148
+ const mode = cfg.mode ?? 'chat';
149
+ try {
150
+ let output;
151
+ let usage;
152
+ if (mode === 'cli') {
153
+ ({ output, usage } = await this._executeCLI(cfg, payload));
154
+ }
155
+ else if (mode === 'completion') {
156
+ ({ output, usage } = await this._executeCompletion(cfg, payload));
157
+ }
158
+ else {
159
+ ({ output, usage } = await this._executeChat(cfg, payload));
160
+ }
161
+ return {
162
+ success: true,
163
+ data: { output, mode, model: cfg.model ?? 'gpt-4o' },
164
+ metadata: {
165
+ adapter: this.name,
166
+ trace: {
167
+ mode,
168
+ taskId: context.taskId,
169
+ ...(usage ? { usage } : {}),
170
+ },
171
+ },
172
+ };
173
+ }
174
+ catch (err) {
175
+ const message = err instanceof Error ? err.message : String(err);
176
+ return {
177
+ success: false,
178
+ error: {
179
+ code: 'EXECUTION_ERROR',
180
+ message,
181
+ recoverable: true,
182
+ },
183
+ metadata: { adapter: this.name, trace: { mode } },
184
+ };
185
+ }
186
+ }
187
+ // -------------------------------------------------------------------------
188
+ // Private execution paths
189
+ // -------------------------------------------------------------------------
190
+ async _executeChat(cfg, payload) {
191
+ const prompt = buildPrompt(payload);
192
+ const model = cfg.model ?? 'gpt-4o';
193
+ // Bring-your-own SDK client
194
+ if (cfg.client) {
195
+ const client = cfg.client;
196
+ const messages = [];
197
+ if (cfg.systemPrompt)
198
+ messages.push({ role: 'system', content: cfg.systemPrompt });
199
+ messages.push({ role: 'user', content: prompt });
200
+ const resp = await client.create({
201
+ model,
202
+ messages,
203
+ max_tokens: cfg.maxTokens,
204
+ temperature: cfg.temperature ?? 0,
205
+ stop: cfg.stop,
206
+ });
207
+ const output = resp.choices[0] ? extractText(resp.choices[0]) : '';
208
+ return { output, usage: resp.usage };
209
+ }
210
+ // Built-in fetch path
211
+ const apiKey = resolveApiKey(cfg);
212
+ if (!apiKey) {
213
+ throw new Error('CodexAdapter: no API key provided. Set apiKey in config or OPENAI_API_KEY env var.');
214
+ }
215
+ const base = cfg.baseUrl ?? 'https://api.openai.com';
216
+ const url = `${base}/v1/chat/completions`;
217
+ const messages = [];
218
+ if (cfg.systemPrompt)
219
+ messages.push({ role: 'system', content: cfg.systemPrompt });
220
+ messages.push({ role: 'user', content: prompt });
221
+ const body = {
222
+ model,
223
+ messages,
224
+ ...(cfg.maxTokens != null ? { max_tokens: cfg.maxTokens } : {}),
225
+ temperature: cfg.temperature ?? 0,
226
+ ...(cfg.stop ? { stop: cfg.stop } : {}),
227
+ };
228
+ const controller = new AbortController();
229
+ const timer = setTimeout(() => controller.abort(), 60_000);
230
+ let resp;
231
+ try {
232
+ resp = await fetch(url, {
233
+ method: 'POST',
234
+ headers: {
235
+ 'Content-Type': 'application/json',
236
+ 'Authorization': `Bearer ${apiKey}`,
237
+ ...cfg.headers,
238
+ },
239
+ body: JSON.stringify(body),
240
+ signal: controller.signal,
241
+ });
242
+ }
243
+ finally {
244
+ clearTimeout(timer);
245
+ }
246
+ if (!resp.ok) {
247
+ const text = await resp.text().catch(() => '');
248
+ throw new Error(`CodexAdapter: HTTP ${resp.status} from OpenAI — ${text.slice(0, 200)}`);
249
+ }
250
+ const json = await resp.json();
251
+ const output = json.choices[0]?.message?.content ?? '';
252
+ return { output, usage: json.usage };
253
+ }
254
+ async _executeCompletion(cfg, payload) {
255
+ const prompt = buildPrompt(payload);
256
+ const model = cfg.model ?? 'code-davinci-002';
257
+ // Bring-your-own SDK client
258
+ if (cfg.client) {
259
+ const client = cfg.client;
260
+ const resp = await client.create({
261
+ model,
262
+ prompt,
263
+ max_tokens: cfg.maxTokens ?? 1024,
264
+ temperature: cfg.temperature ?? 0,
265
+ stop: cfg.stop,
266
+ });
267
+ const output = resp.choices[0]?.text ?? '';
268
+ return { output, usage: resp.usage };
269
+ }
270
+ // Built-in fetch path
271
+ const apiKey = resolveApiKey(cfg);
272
+ if (!apiKey) {
273
+ throw new Error('CodexAdapter: no API key provided. Set apiKey in config or OPENAI_API_KEY env var.');
274
+ }
275
+ const base = cfg.baseUrl ?? 'https://api.openai.com';
276
+ const url = `${base}/v1/completions`;
277
+ const body = {
278
+ model,
279
+ prompt,
280
+ max_tokens: cfg.maxTokens ?? 1024,
281
+ temperature: cfg.temperature ?? 0,
282
+ ...(cfg.stop ? { stop: cfg.stop } : {}),
283
+ };
284
+ const controller = new AbortController();
285
+ const timer = setTimeout(() => controller.abort(), 60_000);
286
+ let resp;
287
+ try {
288
+ resp = await fetch(url, {
289
+ method: 'POST',
290
+ headers: {
291
+ 'Content-Type': 'application/json',
292
+ 'Authorization': `Bearer ${apiKey}`,
293
+ ...cfg.headers,
294
+ },
295
+ body: JSON.stringify(body),
296
+ signal: controller.signal,
297
+ });
298
+ }
299
+ finally {
300
+ clearTimeout(timer);
301
+ }
302
+ if (!resp.ok) {
303
+ const text = await resp.text().catch(() => '');
304
+ throw new Error(`CodexAdapter: HTTP ${resp.status} from OpenAI — ${text.slice(0, 200)}`);
305
+ }
306
+ const json = await resp.json();
307
+ const output = json.choices[0]?.text ?? '';
308
+ return { output, usage: json.usage };
309
+ }
310
+ async _executeCLI(cfg, payload) {
311
+ const executor = cfg.executor;
312
+ const prompt = buildPrompt(payload);
313
+ const output = await executor(prompt, { model: cfg.model });
314
+ return { output };
315
+ }
316
+ }
317
+ exports.CodexAdapter = CodexAdapter;
318
+ //# sourceMappingURL=codex-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-adapter.js","sourceRoot":"","sources":["../../adapters/codex-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * CustomStreamingAdapter — CustomAdapter with streaming support.
3
+ *
4
+ * Extends {@link CustomAdapter} so that handlers can yield incremental text
5
+ * by returning an `AsyncIterable<string>` or `AsyncIterable<StreamingChunk>`.
6
+ * Plain `Promise<unknown>` handlers work unchanged (single-chunk fallback).
7
+ *
8
+ * Usage:
9
+ *
10
+ * const adapter = new CustomStreamingAdapter();
11
+ *
12
+ * // Streaming handler — yields tokens incrementally
13
+ * adapter.registerHandler('writer', async function*(payload) {
14
+ * yield 'Once ';
15
+ * yield 'upon ';
16
+ * yield 'a time…';
17
+ * });
18
+ *
19
+ * // Non-streaming handler — works exactly as before
20
+ * adapter.registerHandler('analyze', async (payload) => ({ result: 'done' }));
21
+ *
22
+ * // Consume the stream
23
+ * for await (const chunk of adapter.executeAgentStream('writer', payload, ctx)) {
24
+ * process.stdout.write(chunk.text);
25
+ * }
26
+ *
27
+ * @module CustomStreamingAdapter
28
+ * @version 1.0.0
29
+ */
30
+ import type { AgentPayload, AgentContext, AdapterCapabilities } from '../types/agent-adapter';
31
+ import type { IStreamingAdapter, StreamingChunk } from '../types/streaming-adapter';
32
+ import { CustomAdapter, AgentHandler } from './custom-adapter';
33
+ /**
34
+ * Extended handler type that may also return an async iterable of string tokens
35
+ * or full `StreamingChunk` objects.
36
+ */
37
+ export type StreamingAgentHandler = AgentHandler | ((payload: AgentPayload, context: AgentContext) => AsyncIterable<string>) | ((payload: AgentPayload, context: AgentContext) => AsyncIterable<StreamingChunk>);
38
+ export declare class CustomStreamingAdapter extends CustomAdapter implements IStreamingAdapter {
39
+ private streamingHandlers;
40
+ get capabilities(): AdapterCapabilities;
41
+ /**
42
+ * Register a handler. Streaming handlers (functions returning `AsyncIterable`)
43
+ * are detected automatically and exposed through `executeAgentStream()`.
44
+ */
45
+ registerHandler(agentId: string, handler: StreamingAgentHandler, metadata?: {
46
+ description?: string;
47
+ capabilities?: string[];
48
+ }): void;
49
+ /**
50
+ * Mark an already-registered handler as streaming.
51
+ * Useful when the handler function is not an async generator but returns
52
+ * an `AsyncIterable` (e.g. a closure around a separate generator).
53
+ */
54
+ markStreaming(agentId: string): void;
55
+ supportsStreaming(agentId: string): boolean;
56
+ /**
57
+ * Execute a handler with streaming support.
58
+ *
59
+ * - If the handler is registered as streaming (yields tokens), pipes the
60
+ * async iterable to `StreamingChunk` values.
61
+ * - Otherwise falls back to `executeAgent()` and wraps the result as a
62
+ * single chunk (same behaviour as the non-streaming `CustomAdapter`).
63
+ */
64
+ executeAgentStream(agentId: string, payload: AgentPayload, context: AgentContext): AsyncIterable<StreamingChunk>;
65
+ /** Pipe an `AsyncIterable<string | StreamingChunk>` to `StreamingChunk` values. */
66
+ private _pipeIterable;
67
+ }
68
+ //# sourceMappingURL=custom-streaming-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-streaming-adapter.d.ts","sourceRoot":"","sources":["../../adapters/custom-streaming-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE/D;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAC7B,YAAY,GACZ,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,GACzE,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,KAAK,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;AAqBtF,qBAAa,sBAAuB,SAAQ,aAAc,YAAW,iBAAiB;IAEpF,OAAO,CAAC,iBAAiB,CAAqB;IAE9C,IAAI,YAAY,IAAI,mBAAmB,CAKtC;IAED;;;OAGG;IACH,eAAe,CACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAC3D,IAAI;IAgBP;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;;;;OAOG;IACI,kBAAkB,CACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,YAAY,GACpB,aAAa,CAAC,cAAc,CAAC;IA4EhC,mFAAmF;YACpE,aAAa;CAqB7B"}