@open-multi-agent/core 1.4.1 → 1.4.2
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 +6 -1
- package/dist/llm/ai-sdk.d.ts +3 -0
- package/dist/llm/ai-sdk.d.ts.map +1 -1
- package/dist/llm/ai-sdk.js +11 -2
- package/dist/llm/ai-sdk.js.map +1 -1
- package/dist/llm/anthropic.d.ts +3 -0
- package/dist/llm/anthropic.d.ts.map +1 -1
- package/dist/llm/anthropic.js +5 -0
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/azure-openai.d.ts +3 -0
- package/dist/llm/azure-openai.d.ts.map +1 -1
- package/dist/llm/azure-openai.js +6 -1
- package/dist/llm/azure-openai.js.map +1 -1
- package/dist/llm/bedrock.d.ts +3 -0
- package/dist/llm/bedrock.d.ts.map +1 -1
- package/dist/llm/bedrock.js +20 -2
- package/dist/llm/bedrock.js.map +1 -1
- package/dist/llm/copilot.d.ts +3 -0
- package/dist/llm/copilot.d.ts.map +1 -1
- package/dist/llm/copilot.js +6 -1
- package/dist/llm/copilot.js.map +1 -1
- package/dist/llm/gemini.d.ts +3 -0
- package/dist/llm/gemini.d.ts.map +1 -1
- package/dist/llm/gemini.js +8 -1
- package/dist/llm/gemini.js.map +1 -1
- package/dist/llm/openai-common.d.ts +24 -3
- package/dist/llm/openai-common.d.ts.map +1 -1
- package/dist/llm/openai-common.js +71 -8
- package/dist/llm/openai-common.js.map +1 -1
- package/dist/llm/openai.d.ts +3 -0
- package/dist/llm/openai.d.ts.map +1 -1
- package/dist/llm/openai.js +8 -2
- package/dist/llm/openai.js.map +1 -1
- package/dist/llm/reasoning-fallback.d.ts +67 -0
- package/dist/llm/reasoning-fallback.d.ts.map +1 -0
- package/dist/llm/reasoning-fallback.js +95 -0
- package/dist/llm/reasoning-fallback.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +37 -8
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/types.d.ts +52 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/context-management.md +41 -1
- package/docs/providers.md +2 -0
- package/package.json +1 -1
|
@@ -7,6 +7,21 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { ChatCompletion, ChatCompletionMessageParam, ChatCompletionTool } from 'openai/resources/chat/completions/index.js';
|
|
9
9
|
import type { LLMMessage, LLMResponse, LLMToolDef } from '../types.js';
|
|
10
|
+
export interface OpenAIReasoningReplayOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Opt-in switch for replaying framework `reasoning` blocks as inline
|
|
13
|
+
* `<thinking>...</thinking>` text in OpenAI-family request payloads.
|
|
14
|
+
*
|
|
15
|
+
* Defaults to `false` so existing users keep historical behavior:
|
|
16
|
+
* `reasoning` blocks are ignored on outbound assistant message conversion.
|
|
17
|
+
*/
|
|
18
|
+
readonly enableReasoningTextReplay?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Maximum character budget for each replayed reasoning block after
|
|
21
|
+
* truncation. Explicit invalid values are clamped to a minimum of 1 char.
|
|
22
|
+
*/
|
|
23
|
+
readonly maxReasoningReplayChars?: number;
|
|
24
|
+
}
|
|
10
25
|
/**
|
|
11
26
|
* Convert a framework {@link LLMToolDef} to an OpenAI {@link ChatCompletionTool}.
|
|
12
27
|
*/
|
|
@@ -30,7 +45,7 @@ export declare function getOpenAIReasoningText(source: unknown): string;
|
|
|
30
45
|
* runner's loop-detection warning injection (see {@link AgentRunner}, which
|
|
31
46
|
* appends a text warning to a tool_result message when a loop is detected).
|
|
32
47
|
*/
|
|
33
|
-
export declare function toOpenAIMessages(messages: LLMMessage[]): ChatCompletionMessageParam[];
|
|
48
|
+
export declare function toOpenAIMessages(messages: LLMMessage[], replayOptions?: OpenAIReasoningReplayOptions): ChatCompletionMessageParam[];
|
|
34
49
|
/**
|
|
35
50
|
* Convert an OpenAI {@link ChatCompletion} into a framework {@link LLMResponse}.
|
|
36
51
|
*
|
|
@@ -43,8 +58,14 @@ export declare function toOpenAIMessages(messages: LLMMessage[]): ChatCompletion
|
|
|
43
58
|
* that looks like a tool call, the fallback extractor
|
|
44
59
|
* uses this list to validate matches. Pass the names
|
|
45
60
|
* of tools sent in the request for best results.
|
|
61
|
+
* @param provenance - Optional adapter-name string stamped onto any
|
|
62
|
+
* extracted {@link ReasoningBlock}, so downstream
|
|
63
|
+
* outbound paths can distinguish native-echo eligible
|
|
64
|
+
* blocks from foreign ones (see #223). Each
|
|
65
|
+
* OpenAI-family adapter should pass its own
|
|
66
|
+
* {@link LLMAdapter.name}.
|
|
46
67
|
*/
|
|
47
|
-
export declare function fromOpenAICompletion(completion: ChatCompletion, knownToolNames?: string[]): LLMResponse;
|
|
68
|
+
export declare function fromOpenAICompletion(completion: ChatCompletion, knownToolNames?: string[], provenance?: string): LLMResponse;
|
|
48
69
|
/**
|
|
49
70
|
* Normalize an OpenAI `finish_reason` string to the framework's canonical
|
|
50
71
|
* stop-reason vocabulary.
|
|
@@ -61,5 +82,5 @@ export declare function normalizeFinishReason(reason: string): string;
|
|
|
61
82
|
* Prepend a system message when `systemPrompt` is provided, then append the
|
|
62
83
|
* converted conversation messages.
|
|
63
84
|
*/
|
|
64
|
-
export declare function buildOpenAIMessageList(messages: LLMMessage[], systemPrompt: string | undefined): ChatCompletionMessageParam[];
|
|
85
|
+
export declare function buildOpenAIMessageList(messages: LLMMessage[], systemPrompt: string | undefined, replayOptions?: OpenAIReasoningReplayOptions): ChatCompletionMessageParam[];
|
|
65
86
|
//# sourceMappingURL=openai-common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-common.d.ts","sourceRoot":"","sources":["../../src/llm/openai-common.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,cAAc,EAEd,0BAA0B,EAE1B,kBAAkB,EAGnB,MAAM,4CAA4C,CAAA;AAEnD,OAAO,KAAK,EAEV,UAAU,EACV,WAAW,EACX,UAAU,EAIX,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"openai-common.d.ts","sourceRoot":"","sources":["../../src/llm/openai-common.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,cAAc,EAEd,0BAA0B,EAE1B,kBAAkB,EAGnB,MAAM,4CAA4C,CAAA;AAEnD,OAAO,KAAK,EAEV,UAAU,EACV,WAAW,EACX,UAAU,EAIX,MAAM,aAAa,CAAA;AAKpB,MAAM,WAAW,4BAA4B;IAC3C;;;;;;OAMG;IACH,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAA;IAC5C;;;OAGG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;CAC1C;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB,CASjE;AAuBD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAG9D;AAuCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,UAAU,EAAE,EACtB,aAAa,CAAC,EAAE,4BAA4B,GAC3C,0BAA0B,EAAE,CAmC9B;AA8FD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,cAAc,EAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,EACzB,UAAU,CAAC,EAAE,MAAM,GAClB,WAAW,CAkFb;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,UAAU,EAAE,EACtB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,aAAa,CAAC,EAAE,4BAA4B,GAC3C,0BAA0B,EAAE,CAS9B"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* duplicated across adapters.
|
|
7
7
|
*/
|
|
8
8
|
import { extractToolCallsFromText } from '../tool/text-tool-extractor.js';
|
|
9
|
+
const DEFAULT_REASONING_REPLAY_MAX_CHARS = 1200;
|
|
9
10
|
// ---------------------------------------------------------------------------
|
|
10
11
|
// Framework → OpenAI
|
|
11
12
|
// ---------------------------------------------------------------------------
|
|
@@ -50,6 +51,36 @@ export function getOpenAIReasoningText(source) {
|
|
|
50
51
|
return '';
|
|
51
52
|
return extractReasoningText(source['reasoning_content']);
|
|
52
53
|
}
|
|
54
|
+
function resolveReasoningReplayMaxChars(value) {
|
|
55
|
+
if (value === undefined)
|
|
56
|
+
return DEFAULT_REASONING_REPLAY_MAX_CHARS;
|
|
57
|
+
if (!Number.isFinite(value))
|
|
58
|
+
return 1;
|
|
59
|
+
const floored = Math.floor(value);
|
|
60
|
+
if (floored < 1)
|
|
61
|
+
return 1;
|
|
62
|
+
return floored;
|
|
63
|
+
}
|
|
64
|
+
function truncateReasoningForReplay(text, maxChars) {
|
|
65
|
+
if (text.length <= maxChars)
|
|
66
|
+
return text;
|
|
67
|
+
const marker = '...[truncated]...';
|
|
68
|
+
if (marker.length >= maxChars)
|
|
69
|
+
return text.slice(0, maxChars);
|
|
70
|
+
const budget = maxChars - marker.length;
|
|
71
|
+
const head = Math.ceil(budget * 0.7);
|
|
72
|
+
const tail = budget - head;
|
|
73
|
+
return `${text.slice(0, head)}${marker}${text.slice(text.length - tail)}`;
|
|
74
|
+
}
|
|
75
|
+
function reasoningBlockToThinkingText(block, maxChars) {
|
|
76
|
+
if (typeof block.redactedData === 'string' && block.redactedData.length > 0) {
|
|
77
|
+
return '<thinking>[redacted]</thinking>';
|
|
78
|
+
}
|
|
79
|
+
if (block.text.length === 0)
|
|
80
|
+
return '';
|
|
81
|
+
const bounded = truncateReasoningForReplay(block.text, maxChars);
|
|
82
|
+
return `<thinking>${bounded}</thinking>`;
|
|
83
|
+
}
|
|
53
84
|
/**
|
|
54
85
|
* Determine whether a framework message contains any `tool_result` content
|
|
55
86
|
* blocks, which must be serialised as separate OpenAI `tool`-role messages.
|
|
@@ -75,11 +106,14 @@ function hasToolResults(msg) {
|
|
|
75
106
|
* runner's loop-detection warning injection (see {@link AgentRunner}, which
|
|
76
107
|
* appends a text warning to a tool_result message when a loop is detected).
|
|
77
108
|
*/
|
|
78
|
-
export function toOpenAIMessages(messages) {
|
|
109
|
+
export function toOpenAIMessages(messages, replayOptions) {
|
|
79
110
|
const result = [];
|
|
80
111
|
for (const msg of messages) {
|
|
81
112
|
if (msg.role === 'assistant') {
|
|
82
|
-
|
|
113
|
+
const assistantMsg = toOpenAIAssistantMessage(msg, replayOptions);
|
|
114
|
+
if (assistantMsg !== null) {
|
|
115
|
+
result.push(assistantMsg);
|
|
116
|
+
}
|
|
83
117
|
}
|
|
84
118
|
else {
|
|
85
119
|
// user role
|
|
@@ -136,9 +170,12 @@ function toOpenAIUserMessage(msg) {
|
|
|
136
170
|
* Convert an `assistant`-role framework message into an OpenAI assistant message.
|
|
137
171
|
* `tool_use` blocks become `tool_calls`; `text` blocks become message content.
|
|
138
172
|
*/
|
|
139
|
-
function toOpenAIAssistantMessage(msg) {
|
|
173
|
+
function toOpenAIAssistantMessage(msg, replayOptions) {
|
|
140
174
|
const toolCalls = [];
|
|
141
175
|
const textParts = [];
|
|
176
|
+
const pendingThinkingParts = [];
|
|
177
|
+
const enableReasoningReplay = replayOptions?.enableReasoningTextReplay === true;
|
|
178
|
+
const maxReasoningChars = resolveReasoningReplayMaxChars(replayOptions?.maxReasoningReplayChars);
|
|
142
179
|
for (const block of msg.content) {
|
|
143
180
|
if (block.type === 'tool_use') {
|
|
144
181
|
toolCalls.push({
|
|
@@ -150,10 +187,28 @@ function toOpenAIAssistantMessage(msg) {
|
|
|
150
187
|
},
|
|
151
188
|
});
|
|
152
189
|
}
|
|
190
|
+
else if (block.type === 'reasoning' && enableReasoningReplay) {
|
|
191
|
+
const serialized = reasoningBlockToThinkingText(block, maxReasoningChars);
|
|
192
|
+
if (serialized.length > 0) {
|
|
193
|
+
pendingThinkingParts.push(serialized);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
153
196
|
else if (block.type === 'text') {
|
|
154
|
-
|
|
197
|
+
if (pendingThinkingParts.length > 0) {
|
|
198
|
+
textParts.push(`${pendingThinkingParts.join('')}${block.text}`);
|
|
199
|
+
pendingThinkingParts.length = 0;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
textParts.push(block.text);
|
|
203
|
+
}
|
|
155
204
|
}
|
|
156
205
|
}
|
|
206
|
+
if (pendingThinkingParts.length > 0) {
|
|
207
|
+
textParts.push(pendingThinkingParts.join(''));
|
|
208
|
+
}
|
|
209
|
+
if (toolCalls.length === 0 && textParts.length === 0) {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
157
212
|
const assistantMsg = {
|
|
158
213
|
role: 'assistant',
|
|
159
214
|
content: textParts.length > 0 ? textParts.join('') : null,
|
|
@@ -178,8 +233,14 @@ function toOpenAIAssistantMessage(msg) {
|
|
|
178
233
|
* that looks like a tool call, the fallback extractor
|
|
179
234
|
* uses this list to validate matches. Pass the names
|
|
180
235
|
* of tools sent in the request for best results.
|
|
236
|
+
* @param provenance - Optional adapter-name string stamped onto any
|
|
237
|
+
* extracted {@link ReasoningBlock}, so downstream
|
|
238
|
+
* outbound paths can distinguish native-echo eligible
|
|
239
|
+
* blocks from foreign ones (see #223). Each
|
|
240
|
+
* OpenAI-family adapter should pass its own
|
|
241
|
+
* {@link LLMAdapter.name}.
|
|
181
242
|
*/
|
|
182
|
-
export function fromOpenAICompletion(completion, knownToolNames) {
|
|
243
|
+
export function fromOpenAICompletion(completion, knownToolNames, provenance) {
|
|
183
244
|
const choice = completion.choices?.[0];
|
|
184
245
|
if (choice === undefined) {
|
|
185
246
|
throw new Error('OpenAI returned a completion with no choices');
|
|
@@ -188,7 +249,9 @@ export function fromOpenAICompletion(completion, knownToolNames) {
|
|
|
188
249
|
const message = choice.message;
|
|
189
250
|
const reasoningText = getOpenAIReasoningText(message);
|
|
190
251
|
if (reasoningText.length > 0) {
|
|
191
|
-
const reasoningBlock =
|
|
252
|
+
const reasoningBlock = provenance !== undefined
|
|
253
|
+
? { type: 'reasoning', text: reasoningText, provenance }
|
|
254
|
+
: { type: 'reasoning', text: reasoningText };
|
|
192
255
|
content.push(reasoningBlock);
|
|
193
256
|
}
|
|
194
257
|
if (message.content !== null && message.content !== undefined) {
|
|
@@ -275,12 +338,12 @@ export function normalizeFinishReason(reason) {
|
|
|
275
338
|
* Prepend a system message when `systemPrompt` is provided, then append the
|
|
276
339
|
* converted conversation messages.
|
|
277
340
|
*/
|
|
278
|
-
export function buildOpenAIMessageList(messages, systemPrompt) {
|
|
341
|
+
export function buildOpenAIMessageList(messages, systemPrompt, replayOptions) {
|
|
279
342
|
const result = [];
|
|
280
343
|
if (systemPrompt !== undefined && systemPrompt.length > 0) {
|
|
281
344
|
result.push({ role: 'system', content: systemPrompt });
|
|
282
345
|
}
|
|
283
|
-
result.push(...toOpenAIMessages(messages));
|
|
346
|
+
result.push(...toOpenAIMessages(messages, replayOptions));
|
|
284
347
|
return result;
|
|
285
348
|
}
|
|
286
349
|
//# sourceMappingURL=openai-common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-common.js","sourceRoot":"","sources":["../../src/llm/openai-common.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsBH,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAEzE,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,WAAsC;SACxD;KACF,CAAA;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE3C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAA;YACzC,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAA;YAExD,MAAM,MAAM,GAAG,IAA+B,CAAA;YAC9C,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;YAC7D,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC,SAAS,CAAC,CAAA;YACnE,IAAI,OAAO,MAAM,CAAC,mBAAmB,CAAC,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC,mBAAmB,CAAC,CAAA;YACvF,OAAO,EAAE,CAAA;QACX,CAAC,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAA;IACb,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAe;IACpD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAA;IAC5D,OAAO,oBAAoB,CAAE,MAAkC,CAAC,mBAAmB,CAAC,CAAC,CAAA;AACvF,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,GAAe;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;AAC1D,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,
|
|
1
|
+
{"version":3,"file":"openai-common.js","sourceRoot":"","sources":["../../src/llm/openai-common.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/openai.d.ts
CHANGED
|
@@ -38,6 +38,9 @@ import type { ContentBlock, LLMAdapter, LLMChatOptions, LLMMessage, LLMResponse,
|
|
|
38
38
|
export declare class OpenAIAdapter implements LLMAdapter {
|
|
39
39
|
#private;
|
|
40
40
|
readonly name: string;
|
|
41
|
+
readonly capabilities: {
|
|
42
|
+
echoesReasoning: "never";
|
|
43
|
+
};
|
|
41
44
|
constructor(apiKey?: string, baseURL?: string);
|
|
42
45
|
/**
|
|
43
46
|
* Send a synchronous (non-streaming) chat request and return the complete
|
package/dist/llm/openai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/llm/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AASH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EAGZ,MAAM,aAAa,CAAA;AAepB;;;;GAIG;AACH,qBAAa,aAAc,YAAW,UAAU;;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAW;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/llm/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AASH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EAGZ,MAAM,aAAa,CAAA;AAepB;;;;GAIG;AACH,qBAAa,aAAc,YAAW,UAAU;;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAW;IAEhC,QAAQ,CAAC,YAAY;;MAKpB;gBAIW,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAW7C;;;;;;OAMG;IACG,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAuCjF;;;;;;;;;OASG;IACI,MAAM,CACX,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,EAAE,gBAAgB,GACxB,aAAa,CAAC,WAAW,CAAC;CA6K9B;AAGD,YAAY,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,CAAA"}
|
package/dist/llm/openai.js
CHANGED
|
@@ -42,6 +42,12 @@ import { extractToolCallsFromText } from '../tool/text-tool-extractor.js';
|
|
|
42
42
|
*/
|
|
43
43
|
export class OpenAIAdapter {
|
|
44
44
|
name = 'openai';
|
|
45
|
+
capabilities = {
|
|
46
|
+
// OpenAI Chat Completions does not accept `reasoning_content` on input;
|
|
47
|
+
// any reasoning replay must go through the `<thinking>` text fallback
|
|
48
|
+
// already shipped in #234 (see openai-common.ts replay options).
|
|
49
|
+
echoesReasoning: 'never',
|
|
50
|
+
};
|
|
45
51
|
#client;
|
|
46
52
|
constructor(apiKey, baseURL) {
|
|
47
53
|
this.#client = new OpenAI({
|
|
@@ -86,7 +92,7 @@ export class OpenAIAdapter {
|
|
|
86
92
|
signal: options.abortSignal,
|
|
87
93
|
});
|
|
88
94
|
const toolNames = options.tools?.map(t => t.name);
|
|
89
|
-
return fromOpenAICompletion(completion, toolNames);
|
|
95
|
+
return fromOpenAICompletion(completion, toolNames, this.name);
|
|
90
96
|
}
|
|
91
97
|
// -------------------------------------------------------------------------
|
|
92
98
|
// stream()
|
|
@@ -213,7 +219,7 @@ export class OpenAIAdapter {
|
|
|
213
219
|
// Build the complete content array for the done response.
|
|
214
220
|
const doneContent = [];
|
|
215
221
|
if (fullReasoning.length > 0) {
|
|
216
|
-
doneContent.push({ type: 'reasoning', text: fullReasoning });
|
|
222
|
+
doneContent.push({ type: 'reasoning', text: fullReasoning, provenance: this.name });
|
|
217
223
|
}
|
|
218
224
|
if (fullText.length > 0) {
|
|
219
225
|
const textBlock = { type: 'text', text: fullText };
|
package/dist/llm/openai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/llm/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAA;AAoB3B,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAEzE,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACf,IAAI,GAAW,QAAQ,CAAA;IAEvB,OAAO,CAAQ;IAExB,YAAY,MAAe,EAAE,OAAgB;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC;YACxB,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAC/C,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;IAED,4EAA4E;IAC5E,SAAS;IACT,4EAA4E;IAE5E;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,CAAC,QAAsB,EAAE,OAAuB;QACxD,MAAM,cAAc,GAAG,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;QAE7E,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAC3D;YACE,mEAAmE;YACnE,qEAAqE;YACrE,kDAAkD;YAClD,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,iBAAiB,EAAE,OAAO,CAAC,gBAAgB;YAC3C,gBAAgB,EAAE,OAAO,CAAC,eAAe;YACzC,KAAK,EAAE,OAAO,CAAC,IAAI;YACnB,KAAK,EAAE,OAAO,CAAC,IAAI;YACnB,KAAK,EAAE,OAAO,CAAC,IAAI;YACnB,mBAAmB,EAAE,OAAO,CAAC,iBAAiB;YAC9C,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM;YAC1C,GAAG,OAAO,CAAC,SAAS;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,cAAc;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;YAClE,MAAM,EAAE,KAAK;YACb,gEAAgE;YAChE,oEAAoE;YACpE,8CAA8C;SACL,EAC3C;YACE,MAAM,EAAE,OAAO,CAAC,WAAW;SAC5B,CACF,CAAA;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACjD,OAAO,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/llm/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Shared `<thinking>` text fallback for {@link ReasoningBlock}
|
|
3
|
+
* round-tripping across adapter boundaries.
|
|
4
|
+
*
|
|
5
|
+
* When an outbound IR-to-native conversion encounters a {@link ReasoningBlock}
|
|
6
|
+
* that the target adapter cannot natively echo — either because the wire
|
|
7
|
+
* protocol does not accept reasoning input at all
|
|
8
|
+
* ({@link LLMAdapter.capabilities.echoesReasoning} `=== 'never'`) or because
|
|
9
|
+
* the block's {@link ReasoningBlock.provenance} does not match the target
|
|
10
|
+
* adapter for an `'own-issued'` adapter — this helper converts the block to
|
|
11
|
+
* an inline `<thinking>...</thinking>` text snippet that callers prepend to
|
|
12
|
+
* the next outgoing text part.
|
|
13
|
+
*
|
|
14
|
+
* SAFETY CONTRACT (one-way invariant):
|
|
15
|
+
* The reverse direction — parsing `<thinking>` text back into a
|
|
16
|
+
* {@link ReasoningBlock} — must never happen. A reconstructed block would
|
|
17
|
+
* carry no verifiable signature and would be rejected if re-sent to
|
|
18
|
+
* Anthropic / Bedrock / Gemini 3. `ReasoningBlock` instances are only ever
|
|
19
|
+
* produced from native API extraction (and always stamped with
|
|
20
|
+
* `provenance`), never from text parsing.
|
|
21
|
+
*
|
|
22
|
+
* PHASE 1 STATUS:
|
|
23
|
+
* This helper is exported but not yet wired into any adapter outbound
|
|
24
|
+
* path. It is introduced ahead of behaviour wiring so the IR additions
|
|
25
|
+
* (`ReasoningBlock.provenance`, `LLMAdapter.capabilities`) can land
|
|
26
|
+
* independently and be reviewed in isolation. Phase 2 (#223) will:
|
|
27
|
+
* - Add `AgentConfig.preserveReasoningAcrossProviders` opt-in.
|
|
28
|
+
* - Wire each `echoesReasoning: 'never'` and `'own-issued'` adapter's
|
|
29
|
+
* outbound path to call this helper when appropriate.
|
|
30
|
+
* - Fold the OpenAI-family private helper added in #234 into this one
|
|
31
|
+
* so there is a single source of truth.
|
|
32
|
+
*/
|
|
33
|
+
import type { ReasoningBlock } from '../types.js';
|
|
34
|
+
/**
|
|
35
|
+
* Default maximum character budget per `<thinking>` block after truncation.
|
|
36
|
+
* Aligned with the value used by the OpenAI-family private replay helper
|
|
37
|
+
* shipped in #234 (`openai-common.ts:31`) so Phase 2 consolidation is
|
|
38
|
+
* behaviour-preserving.
|
|
39
|
+
*/
|
|
40
|
+
export declare const DEFAULT_REASONING_FALLBACK_MAX_CHARS = 1200;
|
|
41
|
+
export interface ReasoningFallbackOptions {
|
|
42
|
+
/**
|
|
43
|
+
* Hard upper bound on the inner text length (the `<thinking>` wrapper
|
|
44
|
+
* itself is not counted). Values below 1 are clamped to 1; non-finite
|
|
45
|
+
* values are treated as 1. When omitted, defaults to
|
|
46
|
+
* {@link DEFAULT_REASONING_FALLBACK_MAX_CHARS}.
|
|
47
|
+
*/
|
|
48
|
+
readonly maxChars?: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Convert a {@link ReasoningBlock} into its `<thinking>...</thinking>` text
|
|
52
|
+
* representation for outbound replay through adapters that cannot natively
|
|
53
|
+
* echo reasoning.
|
|
54
|
+
*
|
|
55
|
+
* Behaviour:
|
|
56
|
+
* - `redactedData` non-empty → returns {@link REDACTED_PLACEHOLDER} exactly.
|
|
57
|
+
* Plaintext is unavailable so emitting the original `text` (which is
|
|
58
|
+
* conventionally empty for redacted blocks) would yield an empty
|
|
59
|
+
* `<thinking></thinking>` and confuse the next model; the placeholder
|
|
60
|
+
* signals that reasoning occurred without leaking any content.
|
|
61
|
+
* - Empty non-redacted text → returns the empty string. Callers should
|
|
62
|
+
* skip emitting an assistant-message slot rather than pushing an empty
|
|
63
|
+
* payload.
|
|
64
|
+
* - Otherwise → returns `<thinking>${truncate(text)}</thinking>`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function reasoningBlockToInlineText(block: ReasoningBlock, options?: ReasoningFallbackOptions): string;
|
|
67
|
+
//# sourceMappingURL=reasoning-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoning-fallback.d.ts","sourceRoot":"","sources":["../../src/llm/reasoning-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,OAAO,CAAA;AAQxD,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAyBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,cAAc,EACrB,OAAO,CAAC,EAAE,wBAAwB,GACjC,MAAM,CAOR"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Shared `<thinking>` text fallback for {@link ReasoningBlock}
|
|
3
|
+
* round-tripping across adapter boundaries.
|
|
4
|
+
*
|
|
5
|
+
* When an outbound IR-to-native conversion encounters a {@link ReasoningBlock}
|
|
6
|
+
* that the target adapter cannot natively echo — either because the wire
|
|
7
|
+
* protocol does not accept reasoning input at all
|
|
8
|
+
* ({@link LLMAdapter.capabilities.echoesReasoning} `=== 'never'`) or because
|
|
9
|
+
* the block's {@link ReasoningBlock.provenance} does not match the target
|
|
10
|
+
* adapter for an `'own-issued'` adapter — this helper converts the block to
|
|
11
|
+
* an inline `<thinking>...</thinking>` text snippet that callers prepend to
|
|
12
|
+
* the next outgoing text part.
|
|
13
|
+
*
|
|
14
|
+
* SAFETY CONTRACT (one-way invariant):
|
|
15
|
+
* The reverse direction — parsing `<thinking>` text back into a
|
|
16
|
+
* {@link ReasoningBlock} — must never happen. A reconstructed block would
|
|
17
|
+
* carry no verifiable signature and would be rejected if re-sent to
|
|
18
|
+
* Anthropic / Bedrock / Gemini 3. `ReasoningBlock` instances are only ever
|
|
19
|
+
* produced from native API extraction (and always stamped with
|
|
20
|
+
* `provenance`), never from text parsing.
|
|
21
|
+
*
|
|
22
|
+
* PHASE 1 STATUS:
|
|
23
|
+
* This helper is exported but not yet wired into any adapter outbound
|
|
24
|
+
* path. It is introduced ahead of behaviour wiring so the IR additions
|
|
25
|
+
* (`ReasoningBlock.provenance`, `LLMAdapter.capabilities`) can land
|
|
26
|
+
* independently and be reviewed in isolation. Phase 2 (#223) will:
|
|
27
|
+
* - Add `AgentConfig.preserveReasoningAcrossProviders` opt-in.
|
|
28
|
+
* - Wire each `echoesReasoning: 'never'` and `'own-issued'` adapter's
|
|
29
|
+
* outbound path to call this helper when appropriate.
|
|
30
|
+
* - Fold the OpenAI-family private helper added in #234 into this one
|
|
31
|
+
* so there is a single source of truth.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Default maximum character budget per `<thinking>` block after truncation.
|
|
35
|
+
* Aligned with the value used by the OpenAI-family private replay helper
|
|
36
|
+
* shipped in #234 (`openai-common.ts:31`) so Phase 2 consolidation is
|
|
37
|
+
* behaviour-preserving.
|
|
38
|
+
*/
|
|
39
|
+
export const DEFAULT_REASONING_FALLBACK_MAX_CHARS = 1200;
|
|
40
|
+
/** Marker inserted between head and tail when reasoning text is truncated. */
|
|
41
|
+
const TRUNCATION_MARKER = '...[truncated]...';
|
|
42
|
+
/** Placeholder emitted in place of opaque encrypted (redacted) reasoning. */
|
|
43
|
+
const REDACTED_PLACEHOLDER = '<thinking>[redacted]</thinking>';
|
|
44
|
+
function resolveMaxChars(value) {
|
|
45
|
+
if (value === undefined)
|
|
46
|
+
return DEFAULT_REASONING_FALLBACK_MAX_CHARS;
|
|
47
|
+
if (!Number.isFinite(value))
|
|
48
|
+
return 1;
|
|
49
|
+
const floored = Math.floor(value);
|
|
50
|
+
if (floored < 1)
|
|
51
|
+
return 1;
|
|
52
|
+
return floored;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Truncate `text` to at most `maxChars` characters via a head+tail excerpt
|
|
56
|
+
* with a `...[truncated]...` marker. The head receives ~70% of the budget
|
|
57
|
+
* so the model sees more of the leading reasoning steps. When `maxChars` is
|
|
58
|
+
* smaller than the marker itself, falls back to a simple head slice.
|
|
59
|
+
*/
|
|
60
|
+
function truncate(text, maxChars) {
|
|
61
|
+
if (text.length <= maxChars)
|
|
62
|
+
return text;
|
|
63
|
+
if (TRUNCATION_MARKER.length >= maxChars)
|
|
64
|
+
return text.slice(0, maxChars);
|
|
65
|
+
const budget = maxChars - TRUNCATION_MARKER.length;
|
|
66
|
+
const head = Math.ceil(budget * 0.7);
|
|
67
|
+
const tail = budget - head;
|
|
68
|
+
return `${text.slice(0, head)}${TRUNCATION_MARKER}${text.slice(text.length - tail)}`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Convert a {@link ReasoningBlock} into its `<thinking>...</thinking>` text
|
|
72
|
+
* representation for outbound replay through adapters that cannot natively
|
|
73
|
+
* echo reasoning.
|
|
74
|
+
*
|
|
75
|
+
* Behaviour:
|
|
76
|
+
* - `redactedData` non-empty → returns {@link REDACTED_PLACEHOLDER} exactly.
|
|
77
|
+
* Plaintext is unavailable so emitting the original `text` (which is
|
|
78
|
+
* conventionally empty for redacted blocks) would yield an empty
|
|
79
|
+
* `<thinking></thinking>` and confuse the next model; the placeholder
|
|
80
|
+
* signals that reasoning occurred without leaking any content.
|
|
81
|
+
* - Empty non-redacted text → returns the empty string. Callers should
|
|
82
|
+
* skip emitting an assistant-message slot rather than pushing an empty
|
|
83
|
+
* payload.
|
|
84
|
+
* - Otherwise → returns `<thinking>${truncate(text)}</thinking>`.
|
|
85
|
+
*/
|
|
86
|
+
export function reasoningBlockToInlineText(block, options) {
|
|
87
|
+
if (typeof block.redactedData === 'string' && block.redactedData.length > 0) {
|
|
88
|
+
return REDACTED_PLACEHOLDER;
|
|
89
|
+
}
|
|
90
|
+
if (block.text.length === 0)
|
|
91
|
+
return '';
|
|
92
|
+
const max = resolveMaxChars(options?.maxChars);
|
|
93
|
+
return `<thinking>${truncate(block.text, max)}</thinking>`;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=reasoning-fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoning-fallback.js","sourceRoot":"","sources":["../../src/llm/reasoning-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,IAAI,CAAA;AAExD,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,mBAAmB,CAAA;AAE7C,6EAA6E;AAC7E,MAAM,oBAAoB,GAAG,iCAAiC,CAAA;AAY9D,SAAS,eAAe,CAAC,KAAyB;IAChD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,oCAAoC,CAAA;IACpE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACjC,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,CAAC,CAAA;IACzB,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,IAAY,EAAE,QAAgB;IAC9C,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAA;IACxC,IAAI,iBAAiB,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IACxE,MAAM,MAAM,GAAG,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAA;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAA;IAC1B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;AACtF,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAqB,EACrB,OAAkC;IAElC,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5E,OAAO,oBAAoB,CAAA;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACtC,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC9C,OAAO,aAAa,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,aAAa,CAAA;AAC5D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EAEd,cAAc,EACd,kBAAkB,EAElB,IAAI,EAIJ,UAAU,EAEV,aAAa,EAEd,MAAM,aAAa,CAAA;AAQpB,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAkEtC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAwBhF;AAkDD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,EAClC,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,EACtG,OAAO,GAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAS,GAC7C,OAAO,CAAC,cAAc,CAAC,CA8DzB;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -321,6 +321,21 @@ function parseTaskSpecs(raw) {
|
|
|
321
321
|
return null;
|
|
322
322
|
}
|
|
323
323
|
}
|
|
324
|
+
function buildRevealCoordinatorLines(revealContext, assignee) {
|
|
325
|
+
return [
|
|
326
|
+
'## Team context',
|
|
327
|
+
`Goal: ${revealContext.goal}`,
|
|
328
|
+
`Team: ${revealContext.rosterNames.join(', ')}`,
|
|
329
|
+
`Your role in this team: ${assignee}`,
|
|
330
|
+
'Assignment: You are responsible for the prompt below in this team run.',
|
|
331
|
+
'',
|
|
332
|
+
];
|
|
333
|
+
}
|
|
334
|
+
function prependRevealCoordinatorContext(prompt, revealContext, assignee) {
|
|
335
|
+
return revealContext
|
|
336
|
+
? [...buildRevealCoordinatorLines(revealContext, assignee), prompt].join('\n')
|
|
337
|
+
: prompt;
|
|
338
|
+
}
|
|
324
339
|
/**
|
|
325
340
|
* Build {@link TeamInfo} for tool context, including nested `runDelegatedAgent`
|
|
326
341
|
* that respects pool capacity to avoid semaphore deadlocks.
|
|
@@ -374,7 +389,7 @@ function buildTaskAgentTeamInfo(ctx, taskId, traceBase, delegationDepth, delegat
|
|
|
374
389
|
taskId,
|
|
375
390
|
team: nestedTeam,
|
|
376
391
|
};
|
|
377
|
-
return pool.runEphemeral(tempAgent, prompt, childOpts);
|
|
392
|
+
return pool.runEphemeral(tempAgent, prependRevealCoordinatorContext(prompt, ctx.revealCoordinatorContext, targetAgent), childOpts);
|
|
378
393
|
};
|
|
379
394
|
return {
|
|
380
395
|
name: ctx.team.name,
|
|
@@ -469,7 +484,7 @@ async function executeQueue(queue, ctx) {
|
|
|
469
484
|
data: task,
|
|
470
485
|
});
|
|
471
486
|
// Build the prompt: task description + dependency-only context by default.
|
|
472
|
-
const prompt = await buildTaskPrompt(task, team, queue);
|
|
487
|
+
const prompt = await buildTaskPrompt(task, team, queue, ctx.revealCoordinatorContext);
|
|
473
488
|
// Trace + abort + team tool context (delegate_to_agent)
|
|
474
489
|
const traceBase = {
|
|
475
490
|
...(config.onTrace
|
|
@@ -622,17 +637,23 @@ async function executeQueue(queue, ctx) {
|
|
|
622
637
|
* Build the agent prompt for a specific task.
|
|
623
638
|
*
|
|
624
639
|
* Injects:
|
|
640
|
+
* - Optional team-context block at the top when `revealContext` is provided
|
|
641
|
+
* (set via `RunTeamOptions.revealCoordinator`)
|
|
625
642
|
* - Task title and description
|
|
626
643
|
* - Direct dependency task results by default (clean slate when none)
|
|
627
644
|
* - Optional full shared-memory context when `task.memoryScope === 'all'`
|
|
628
645
|
* - Any messages addressed to this agent from the team bus
|
|
629
646
|
*/
|
|
630
|
-
async function buildTaskPrompt(task, team, queue) {
|
|
631
|
-
const lines = [
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
647
|
+
async function buildTaskPrompt(task, team, queue, revealContext) {
|
|
648
|
+
const lines = [];
|
|
649
|
+
// `task.assignee` is belt-and-suspenders: `executeQueue` already fails any
|
|
650
|
+
// task without an assignee before reaching this function (see the assignee
|
|
651
|
+
// check in the dispatch loop). The guard here documents the precondition and
|
|
652
|
+
// protects against future refactors that move the call site.
|
|
653
|
+
if (revealContext && task.assignee) {
|
|
654
|
+
lines.push(...buildRevealCoordinatorLines(revealContext, task.assignee));
|
|
655
|
+
}
|
|
656
|
+
lines.push(`# Task: ${task.title}`, '', task.description);
|
|
636
657
|
if (task.memoryScope === 'all') {
|
|
637
658
|
// Explicit opt-in for full visibility (legacy/shared-memory behavior).
|
|
638
659
|
const sharedMem = team.getSharedMemoryInstance();
|
|
@@ -980,6 +1001,14 @@ export class OpenMultiAgent {
|
|
|
980
1001
|
budgetExceededTriggered: false,
|
|
981
1002
|
budgetExceededReason: undefined,
|
|
982
1003
|
taskMetrics,
|
|
1004
|
+
...(options?.revealCoordinator
|
|
1005
|
+
? {
|
|
1006
|
+
revealCoordinatorContext: {
|
|
1007
|
+
goal,
|
|
1008
|
+
rosterNames: agentConfigs.map((a) => a.name),
|
|
1009
|
+
},
|
|
1010
|
+
}
|
|
1011
|
+
: {}),
|
|
983
1012
|
};
|
|
984
1013
|
const planTasks = queue.list();
|
|
985
1014
|
const planReadyStartMs = Date.now();
|