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.
- package/README.md +113 -30
- package/dist/adapters/a2a-adapter.d.ts +152 -0
- package/dist/adapters/a2a-adapter.d.ts.map +1 -0
- package/dist/adapters/a2a-adapter.js +235 -0
- package/dist/adapters/a2a-adapter.js.map +1 -0
- package/dist/adapters/codex-adapter.d.ts +152 -0
- package/dist/adapters/codex-adapter.d.ts.map +1 -0
- package/dist/adapters/codex-adapter.js +318 -0
- package/dist/adapters/codex-adapter.js.map +1 -0
- package/dist/adapters/custom-streaming-adapter.d.ts +68 -0
- package/dist/adapters/custom-streaming-adapter.d.ts.map +1 -0
- package/dist/adapters/custom-streaming-adapter.js +181 -0
- package/dist/adapters/custom-streaming-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +9 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +15 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/langchain-streaming-adapter.d.ts +48 -0
- package/dist/adapters/langchain-streaming-adapter.d.ts.map +1 -0
- package/dist/adapters/langchain-streaming-adapter.js +161 -0
- package/dist/adapters/langchain-streaming-adapter.js.map +1 -0
- package/dist/adapters/streaming-base-adapter.d.ts +42 -0
- package/dist/adapters/streaming-base-adapter.d.ts.map +1 -0
- package/dist/adapters/streaming-base-adapter.js +68 -0
- package/dist/adapters/streaming-base-adapter.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -1
- package/dist/index.js.map +1 -1
- package/dist/run.js +1 -0
- package/dist/run.js.map +1 -1
- package/package.json +7 -4
- package/socket.json +12 -0
- 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"}
|