@arden-hq/loop 0.0.0-stage → 0.1.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/LICENSE +202 -0
- package/README.md +121 -2
- package/dist/abort.d.ts +9 -0
- package/dist/abort.d.ts.map +1 -0
- package/dist/abort.js +31 -0
- package/dist/abort.js.map +1 -0
- package/dist/agent/agent.d.ts +48 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +146 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/background-tools.d.ts +51 -0
- package/dist/agent/background-tools.d.ts.map +1 -0
- package/dist/agent/background-tools.js +257 -0
- package/dist/agent/background-tools.js.map +1 -0
- package/dist/agent/budget.d.ts +5 -0
- package/dist/agent/budget.d.ts.map +1 -0
- package/dist/agent/budget.js +48 -0
- package/dist/agent/budget.js.map +1 -0
- package/dist/agent/config.d.ts +61 -0
- package/dist/agent/config.d.ts.map +1 -0
- package/dist/agent/config.js +99 -0
- package/dist/agent/config.js.map +1 -0
- package/dist/agent/guards.d.ts +10 -0
- package/dist/agent/guards.d.ts.map +1 -0
- package/dist/agent/guards.js +136 -0
- package/dist/agent/guards.js.map +1 -0
- package/dist/agent/history-journal.d.ts +18 -0
- package/dist/agent/history-journal.d.ts.map +1 -0
- package/dist/agent/history-journal.js +87 -0
- package/dist/agent/history-journal.js.map +1 -0
- package/dist/agent/history-projection.d.ts +6 -0
- package/dist/agent/history-projection.d.ts.map +1 -0
- package/dist/agent/history-projection.js +62 -0
- package/dist/agent/history-projection.js.map +1 -0
- package/dist/agent/interactions.d.ts +14 -0
- package/dist/agent/interactions.d.ts.map +1 -0
- package/dist/agent/interactions.js +85 -0
- package/dist/agent/interactions.js.map +1 -0
- package/dist/agent/middleware.d.ts +5 -0
- package/dist/agent/middleware.d.ts.map +1 -0
- package/dist/agent/middleware.js +55 -0
- package/dist/agent/middleware.js.map +1 -0
- package/dist/agent/model-output-projection.d.ts +27 -0
- package/dist/agent/model-output-projection.d.ts.map +1 -0
- package/dist/agent/model-output-projection.js +138 -0
- package/dist/agent/model-output-projection.js.map +1 -0
- package/dist/agent/model-output.d.ts +19 -0
- package/dist/agent/model-output.d.ts.map +1 -0
- package/dist/agent/model-output.js +172 -0
- package/dist/agent/model-output.js.map +1 -0
- package/dist/agent/model-turn.d.ts +29 -0
- package/dist/agent/model-turn.d.ts.map +1 -0
- package/dist/agent/model-turn.js +401 -0
- package/dist/agent/model-turn.js.map +1 -0
- package/dist/agent/policy.d.ts +28 -0
- package/dist/agent/policy.d.ts.map +1 -0
- package/dist/agent/policy.js +109 -0
- package/dist/agent/policy.js.map +1 -0
- package/dist/agent/provider-capabilities.d.ts +12 -0
- package/dist/agent/provider-capabilities.d.ts.map +1 -0
- package/dist/agent/provider-capabilities.js +76 -0
- package/dist/agent/provider-capabilities.js.map +1 -0
- package/dist/agent/recovery.d.ts +8 -0
- package/dist/agent/recovery.d.ts.map +1 -0
- package/dist/agent/recovery.js +21 -0
- package/dist/agent/recovery.js.map +1 -0
- package/dist/agent/replies.d.ts +3 -0
- package/dist/agent/replies.d.ts.map +1 -0
- package/dist/agent/replies.js +24 -0
- package/dist/agent/replies.js.map +1 -0
- package/dist/agent/run-state.d.ts +98 -0
- package/dist/agent/run-state.d.ts.map +1 -0
- package/dist/agent/run-state.js +454 -0
- package/dist/agent/run-state.js.map +1 -0
- package/dist/agent/run.d.ts +6 -0
- package/dist/agent/run.d.ts.map +1 -0
- package/dist/agent/run.js +462 -0
- package/dist/agent/run.js.map +1 -0
- package/dist/agent/streamed-call-history.d.ts +20 -0
- package/dist/agent/streamed-call-history.d.ts.map +1 -0
- package/dist/agent/streamed-call-history.js +71 -0
- package/dist/agent/streamed-call-history.js.map +1 -0
- package/dist/agent/streaming-tools.d.ts +23 -0
- package/dist/agent/streaming-tools.d.ts.map +1 -0
- package/dist/agent/streaming-tools.js +67 -0
- package/dist/agent/streaming-tools.js.map +1 -0
- package/dist/agent/structured-output.d.ts +27 -0
- package/dist/agent/structured-output.d.ts.map +1 -0
- package/dist/agent/structured-output.js +26 -0
- package/dist/agent/structured-output.js.map +1 -0
- package/dist/agent/tool-admission.d.ts +18 -0
- package/dist/agent/tool-admission.d.ts.map +1 -0
- package/dist/agent/tool-admission.js +22 -0
- package/dist/agent/tool-admission.js.map +1 -0
- package/dist/contracts/events.d.ts +236 -0
- package/dist/contracts/events.d.ts.map +1 -0
- package/dist/contracts/events.js +13 -0
- package/dist/contracts/events.js.map +1 -0
- package/dist/contracts/messages.d.ts +234 -0
- package/dist/contracts/messages.d.ts.map +1 -0
- package/dist/contracts/messages.js +11 -0
- package/dist/contracts/messages.js.map +1 -0
- package/dist/contracts/provider.d.ts +177 -0
- package/dist/contracts/provider.d.ts.map +1 -0
- package/dist/contracts/provider.js +26 -0
- package/dist/contracts/provider.js.map +1 -0
- package/dist/contracts/tools.d.ts +217 -0
- package/dist/contracts/tools.d.ts.map +1 -0
- package/dist/contracts/tools.js +16 -0
- package/dist/contracts/tools.js.map +1 -0
- package/dist/errors.d.ts +112 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +190 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/concurrency.d.ts +11 -0
- package/dist/internal/concurrency.d.ts.map +1 -0
- package/dist/internal/concurrency.js +86 -0
- package/dist/internal/concurrency.js.map +1 -0
- package/dist/internal/stream.d.ts +25 -0
- package/dist/internal/stream.d.ts.map +1 -0
- package/dist/internal/stream.js +97 -0
- package/dist/internal/stream.js.map +1 -0
- package/dist/internal/validate.d.ts +30 -0
- package/dist/internal/validate.d.ts.map +1 -0
- package/dist/internal/validate.js +480 -0
- package/dist/internal/validate.js.map +1 -0
- package/dist/providers/kit/errors.d.ts +40 -0
- package/dist/providers/kit/errors.d.ts.map +1 -0
- package/dist/providers/kit/errors.js +48 -0
- package/dist/providers/kit/errors.js.map +1 -0
- package/dist/providers/kit/index.d.ts +10 -0
- package/dist/providers/kit/index.d.ts.map +1 -0
- package/dist/providers/kit/index.js +10 -0
- package/dist/providers/kit/index.js.map +1 -0
- package/dist/providers/kit/retry.d.ts +43 -0
- package/dist/providers/kit/retry.d.ts.map +1 -0
- package/dist/providers/kit/retry.js +118 -0
- package/dist/providers/kit/retry.js.map +1 -0
- package/dist/providers/kit/sse.d.ts +22 -0
- package/dist/providers/kit/sse.d.ts.map +1 -0
- package/dist/providers/kit/sse.js +70 -0
- package/dist/providers/kit/sse.js.map +1 -0
- package/dist/providers/openai-responses/citations.d.ts +21 -0
- package/dist/providers/openai-responses/citations.d.ts.map +1 -0
- package/dist/providers/openai-responses/citations.js +65 -0
- package/dist/providers/openai-responses/citations.js.map +1 -0
- package/dist/providers/openai-responses/continuation.d.ts +19 -0
- package/dist/providers/openai-responses/continuation.d.ts.map +1 -0
- package/dist/providers/openai-responses/continuation.js +28 -0
- package/dist/providers/openai-responses/continuation.js.map +1 -0
- package/dist/providers/openai-responses/errors.d.ts +28 -0
- package/dist/providers/openai-responses/errors.d.ts.map +1 -0
- package/dist/providers/openai-responses/errors.js +103 -0
- package/dist/providers/openai-responses/errors.js.map +1 -0
- package/dist/providers/openai-responses/history.d.ts +8 -0
- package/dist/providers/openai-responses/history.d.ts.map +1 -0
- package/dist/providers/openai-responses/history.js +93 -0
- package/dist/providers/openai-responses/history.js.map +1 -0
- package/dist/providers/openai-responses/items.d.ts +106 -0
- package/dist/providers/openai-responses/items.d.ts.map +1 -0
- package/dist/providers/openai-responses/items.js +124 -0
- package/dist/providers/openai-responses/items.js.map +1 -0
- package/dist/providers/openai-responses/parameter-schema.d.ts +11 -0
- package/dist/providers/openai-responses/parameter-schema.d.ts.map +1 -0
- package/dist/providers/openai-responses/parameter-schema.js +186 -0
- package/dist/providers/openai-responses/parameter-schema.js.map +1 -0
- package/dist/providers/openai-responses/provider.d.ts +54 -0
- package/dist/providers/openai-responses/provider.d.ts.map +1 -0
- package/dist/providers/openai-responses/provider.js +270 -0
- package/dist/providers/openai-responses/provider.js.map +1 -0
- package/dist/providers/openai-responses/request.d.ts +41 -0
- package/dist/providers/openai-responses/request.d.ts.map +1 -0
- package/dist/providers/openai-responses/request.js +276 -0
- package/dist/providers/openai-responses/request.js.map +1 -0
- package/dist/providers/openai-responses/response.d.ts +7 -0
- package/dist/providers/openai-responses/response.d.ts.map +1 -0
- package/dist/providers/openai-responses/response.js +354 -0
- package/dist/providers/openai-responses/response.js.map +1 -0
- package/dist/providers/openai-responses/stored-items.d.ts +9 -0
- package/dist/providers/openai-responses/stored-items.d.ts.map +1 -0
- package/dist/providers/openai-responses/stored-items.js +133 -0
- package/dist/providers/openai-responses/stored-items.js.map +1 -0
- package/dist/providers/openai-responses/tool-search.d.ts +12 -0
- package/dist/providers/openai-responses/tool-search.d.ts.map +1 -0
- package/dist/providers/openai-responses/tool-search.js +68 -0
- package/dist/providers/openai-responses/tool-search.js.map +1 -0
- package/dist/providers/openai-responses/tools.d.ts +33 -0
- package/dist/providers/openai-responses/tools.d.ts.map +1 -0
- package/dist/providers/openai-responses/tools.js +53 -0
- package/dist/providers/openai-responses/tools.js.map +1 -0
- package/dist/providers/openai-responses/web-search.d.ts +5 -0
- package/dist/providers/openai-responses/web-search.d.ts.map +1 -0
- package/dist/providers/openai-responses/web-search.js +114 -0
- package/dist/providers/openai-responses/web-search.js.map +1 -0
- package/dist/providers/openai-responses/websocket.d.ts +29 -0
- package/dist/providers/openai-responses/websocket.d.ts.map +1 -0
- package/dist/providers/openai-responses/websocket.js +400 -0
- package/dist/providers/openai-responses/websocket.js.map +1 -0
- package/dist/tools/dispatch.d.ts +65 -0
- package/dist/tools/dispatch.d.ts.map +1 -0
- package/dist/tools/dispatch.js +536 -0
- package/dist/tools/dispatch.js.map +1 -0
- package/dist/tools/display-title.d.ts +18 -0
- package/dist/tools/display-title.d.ts.map +1 -0
- package/dist/tools/display-title.js +50 -0
- package/dist/tools/display-title.js.map +1 -0
- package/dist/tools/search.d.ts +36 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +224 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/tool.d.ts +200 -0
- package/dist/tools/tool.d.ts.map +1 -0
- package/dist/tools/tool.js +275 -0
- package/dist/tools/tool.js.map +1 -0
- package/dist/tools/truncate.d.ts +18 -0
- package/dist/tools/truncate.d.ts.map +1 -0
- package/dist/tools/truncate.js +76 -0
- package/dist/tools/truncate.js.map +1 -0
- package/package.json +67 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/providers/openai-responses/websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type FairReadWriteLock, type Semaphore } from "../internal/concurrency.js";
|
|
2
|
+
import { type ChatMessage, type ToolCall } from "../contracts/messages.js";
|
|
3
|
+
import { type PendingToolCall, type ToolCallMiddleware, type ToolCallRequest, type ToolDisplayTitle, type ToolMeta, type ToolResult, type Toolset } from "../contracts/tools.js";
|
|
4
|
+
import type { AgentEvent, ToolCompleted, ToolPaused } from "../contracts/events.js";
|
|
5
|
+
/** Parse provider tool arguments without throwing or accepting arrays/primitives. */
|
|
6
|
+
export declare const parseToolCalls: (calls: ReadonlyArray<ToolCall>, displayTitleArgument: ToolDisplayTitle | undefined) => ReadonlyArray<PendingToolCall>;
|
|
7
|
+
export declare const gateUnavailableCalls: (calls: ReadonlyArray<PendingToolCall>, advertisedNames: ReadonlySet<string>, visibleNames: ReadonlyArray<string>) => ReadonlyArray<PendingToolCall>;
|
|
8
|
+
export interface DispatchInput {
|
|
9
|
+
readonly messages: ChatMessage[];
|
|
10
|
+
readonly calls: ReadonlyArray<PendingToolCall>;
|
|
11
|
+
readonly rawCalls: ReadonlyArray<ToolCall>;
|
|
12
|
+
readonly metas: ReadonlyMap<string, ToolMeta>;
|
|
13
|
+
readonly toolset: Toolset;
|
|
14
|
+
readonly beforeExecute?: () => Promise<ToolResult | undefined>;
|
|
15
|
+
readonly middleware: ReadonlyArray<ToolCallMiddleware>;
|
|
16
|
+
readonly groups?: Map<string, FairReadWriteLock>;
|
|
17
|
+
/** One permit, shared by the run: state-changing calls run one at a time,
|
|
18
|
+
* in the order they reach dispatch (the order the model asked for them). */
|
|
19
|
+
readonly stateChanges?: Semaphore;
|
|
20
|
+
readonly semaphore: Semaphore;
|
|
21
|
+
readonly clock: () => number;
|
|
22
|
+
readonly signal: AbortSignal;
|
|
23
|
+
readonly emit: (event: AgentEvent) => Promise<void>;
|
|
24
|
+
/** Lossy, non-suspending emit for progress; a full buffer drops the event. */
|
|
25
|
+
readonly tryEmit?: (event: AgentEvent) => boolean;
|
|
26
|
+
readonly recoveredResults?: ReadonlyMap<string, Required<ToolResult>>;
|
|
27
|
+
readonly rejection?: ToolResult;
|
|
28
|
+
/**
|
|
29
|
+
* A call that can run in the background and is still executing `afterMs`
|
|
30
|
+
* after its effect began moves there: the batch settles it with a launch
|
|
31
|
+
* receipt and hands the in-flight call to `adopt`.
|
|
32
|
+
*/
|
|
33
|
+
readonly background?: {
|
|
34
|
+
readonly afterMs: number;
|
|
35
|
+
/** Stops moved calls once their batch has ended. */
|
|
36
|
+
readonly signal: AbortSignal;
|
|
37
|
+
readonly adopt: (call: BackgroundedCall) => void;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export interface DispatchOutput {
|
|
41
|
+
readonly completions: ReadonlyArray<ToolCompleted>;
|
|
42
|
+
readonly paused: ReadonlyArray<ToolPaused>;
|
|
43
|
+
}
|
|
44
|
+
/** What one call settles into: its events and the history records it appends. */
|
|
45
|
+
export interface CallSettlement {
|
|
46
|
+
readonly output: DispatchOutput;
|
|
47
|
+
readonly messages: ReadonlyArray<ChatMessage>;
|
|
48
|
+
}
|
|
49
|
+
/** A call moved to the background mid-execution; `settled` follows the same call. */
|
|
50
|
+
export interface BackgroundedCall {
|
|
51
|
+
readonly call: PendingToolCall;
|
|
52
|
+
readonly settled: Promise<CallSettlement>;
|
|
53
|
+
}
|
|
54
|
+
/** The portable receipt that closes a background call on the wire; its result arrives later. */
|
|
55
|
+
export declare const launchReceipt: (id: string) => ChatMessage;
|
|
56
|
+
/** Decoration is advisory and must never erase an already-settled tool outcome. */
|
|
57
|
+
export declare const decorateToolResult: (request: ToolCallRequest, result: ToolResult, toolset: Toolset) => Required<ToolResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Execute and settle one tool batch into the loop's private history.
|
|
60
|
+
* All starts are emitted before any execution; settlements stream in
|
|
61
|
+
* completion order. Paused calls deliberately receive no tool-result
|
|
62
|
+
* message so recovery can see the trailing incomplete assistant step.
|
|
63
|
+
*/
|
|
64
|
+
export declare const dispatchToolCalls: (input: DispatchInput) => Promise<DispatchOutput>;
|
|
65
|
+
//# sourceMappingURL=dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/tools/dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
import { abortError, isAbortError, raceAbort } from "../abort.js";
|
|
2
|
+
import { makeFairReadWriteLock, makeSemaphore } from "../internal/concurrency.js";
|
|
3
|
+
import { failedToolResult, PauseRequested, ToolExecutionError, toToolFailure } from "../errors.js";
|
|
4
|
+
import { applyToolCallMiddleware } from "../agent/middleware.js";
|
|
5
|
+
import { messageId } from "../contracts/messages.js";
|
|
6
|
+
import { callEndsTurn, canRunInBackground } from "../contracts/tools.js";
|
|
7
|
+
import { EventQueue } from "../internal/stream.js";
|
|
8
|
+
import { normalizeToolResult } from "../internal/validate.js";
|
|
9
|
+
import { sanitizeToolDisplayTitle, splitToolArguments } from "./display-title.js";
|
|
10
|
+
import { errorMessage } from "@arden-hq/std/errors";
|
|
11
|
+
import { isRecord } from "@arden-hq/std/json";
|
|
12
|
+
const invalidArguments = (message) => ({
|
|
13
|
+
code: "invalid_tool_arguments",
|
|
14
|
+
message
|
|
15
|
+
});
|
|
16
|
+
const malformedJsonMessage = (source, cause) => {
|
|
17
|
+
const detail = errorMessage(cause);
|
|
18
|
+
return (`Malformed JSON at character ${malformedJsonPosition(source, detail)}: ${normalizedJsonError(detail)}. ` +
|
|
19
|
+
"Retry the tool call with one valid JSON object matching its schema.");
|
|
20
|
+
};
|
|
21
|
+
const expectsPropertyName = /(?:property name|property\s+name|expected ['"]?\})/i;
|
|
22
|
+
const malformedJsonPosition = (source, detail) => {
|
|
23
|
+
const explicitPosition = /position\s+(\d+)/i.exec(detail)?.[1];
|
|
24
|
+
if (explicitPosition !== undefined)
|
|
25
|
+
return Number(explicitPosition);
|
|
26
|
+
if (/(?:unexpected\s+(?:eof|end)|unexpected end)/i.test(detail))
|
|
27
|
+
return source.length;
|
|
28
|
+
if (expectsPropertyName.test(detail)) {
|
|
29
|
+
return Math.max(0, Math.max(source.lastIndexOf(","), source.lastIndexOf("{")) + 1);
|
|
30
|
+
}
|
|
31
|
+
return 0;
|
|
32
|
+
};
|
|
33
|
+
const normalizedJsonError = (detail) => {
|
|
34
|
+
if (expectsPropertyName.test(detail))
|
|
35
|
+
return "Expecting property name enclosed in double quotes";
|
|
36
|
+
if (/(?:unexpected\s+(?:eof|end))/i.test(detail))
|
|
37
|
+
return "Expecting value";
|
|
38
|
+
return detail.replace(/\s+at position\s+\d+.*$/i, "");
|
|
39
|
+
};
|
|
40
|
+
const nonObjectArguments = () => invalidArguments("Tool arguments must be a JSON object. Retry the tool call with one valid JSON object matching its schema.");
|
|
41
|
+
/** Parse provider tool arguments without throwing or accepting arrays/primitives. */
|
|
42
|
+
export const parseToolCalls = (calls, displayTitleArgument) => calls.map((toolCall) => {
|
|
43
|
+
if (toolCall.function.arguments.length === 0) {
|
|
44
|
+
const displayTitle = displayTitleArgument === undefined
|
|
45
|
+
? undefined
|
|
46
|
+
: sanitizeToolDisplayTitle(toolCall.display_title, displayTitleArgument);
|
|
47
|
+
return {
|
|
48
|
+
toolCall,
|
|
49
|
+
name: toolCall.function.name,
|
|
50
|
+
args: {},
|
|
51
|
+
...(displayTitle === undefined ? {} : { displayTitle })
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
let decoded;
|
|
55
|
+
try {
|
|
56
|
+
decoded = JSON.parse(toolCall.function.arguments);
|
|
57
|
+
}
|
|
58
|
+
catch (cause) {
|
|
59
|
+
return {
|
|
60
|
+
toolCall,
|
|
61
|
+
name: toolCall.function.name,
|
|
62
|
+
args: {},
|
|
63
|
+
argumentError: invalidArguments(malformedJsonMessage(toolCall.function.arguments, cause))
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (!isRecord(decoded)) {
|
|
67
|
+
return {
|
|
68
|
+
toolCall,
|
|
69
|
+
name: toolCall.function.name,
|
|
70
|
+
args: {},
|
|
71
|
+
argumentError: nonObjectArguments()
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const projected = splitToolArguments(decoded, toolCall.display_title, displayTitleArgument);
|
|
75
|
+
return {
|
|
76
|
+
toolCall,
|
|
77
|
+
name: toolCall.function.name,
|
|
78
|
+
args: projected.args,
|
|
79
|
+
...(projected.displayTitle === undefined ? {} : { displayTitle: projected.displayTitle })
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
const visibleToolList = (visibleNames) => {
|
|
83
|
+
if (visibleNames.length === 0)
|
|
84
|
+
return "none";
|
|
85
|
+
return visibleNames.length <= 10
|
|
86
|
+
? visibleNames.join(", ")
|
|
87
|
+
: `${visibleNames.slice(0, 10).join(", ")}, ... (${visibleNames.length} tools total)`;
|
|
88
|
+
};
|
|
89
|
+
export const gateUnavailableCalls = (calls, advertisedNames, visibleNames) => {
|
|
90
|
+
const visible = visibleToolList(visibleNames);
|
|
91
|
+
return calls.map((call) => call.argumentError !== undefined || advertisedNames.has(call.name)
|
|
92
|
+
? call
|
|
93
|
+
: {
|
|
94
|
+
...call,
|
|
95
|
+
argumentError: {
|
|
96
|
+
code: "unavailable_tool",
|
|
97
|
+
message: `Tool '${call.name}' is not available in this step: it is not in the current tool list. Use one of: ${visible}.`
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
/** The portable receipt that closes a background call on the wire; its result arrives later. */
|
|
102
|
+
export const launchReceipt = (id) => ({
|
|
103
|
+
role: "tool",
|
|
104
|
+
message_id: `async-launch:${id}`,
|
|
105
|
+
tool_call_id: id,
|
|
106
|
+
async_tool_launch: { call_id: id, delivery: "message" },
|
|
107
|
+
content: JSON.stringify({
|
|
108
|
+
status: "running",
|
|
109
|
+
tool_call_id: id,
|
|
110
|
+
instruction: "Continue independent work. The tool result will arrive in an internal completion message."
|
|
111
|
+
})
|
|
112
|
+
});
|
|
113
|
+
const unexpectedMissingResult = "Tool result unexpectedly missing — this is an internal error, not proof the tool did not run. " +
|
|
114
|
+
"Check the target's current state before retrying.";
|
|
115
|
+
const argumentPreview = {
|
|
116
|
+
invalid_tool_arguments: "Invalid tool arguments",
|
|
117
|
+
unavailable_tool: "Tool unavailable"
|
|
118
|
+
};
|
|
119
|
+
const sanitizeFailure = (call, failure) => normalizeToolResult(failure === undefined
|
|
120
|
+
? {
|
|
121
|
+
content: `Tool execution failed unexpectedly. Diagnostic reference: tool-call:${call.toolCall.id}. ` +
|
|
122
|
+
"Check the target's current state before retrying.",
|
|
123
|
+
preview: "Tool execution failed",
|
|
124
|
+
is_error: true,
|
|
125
|
+
retryable: false
|
|
126
|
+
}
|
|
127
|
+
: failedToolResult(failure));
|
|
128
|
+
const toolRequest = (resolved, input) => ({
|
|
129
|
+
name: resolved.call.name,
|
|
130
|
+
args: structuredClone(resolved.call.args),
|
|
131
|
+
toolCallId: resolved.call.toolCall.id,
|
|
132
|
+
signal: input.signal,
|
|
133
|
+
messages: input.messages
|
|
134
|
+
});
|
|
135
|
+
/** Decoration is advisory and must never erase an already-settled tool outcome. */
|
|
136
|
+
export const decorateToolResult = (request, result, toolset) => {
|
|
137
|
+
const normalized = normalizeToolResult(result);
|
|
138
|
+
if (toolset.decorateResult === undefined)
|
|
139
|
+
return normalized;
|
|
140
|
+
try {
|
|
141
|
+
return normalizeToolResult(toolset.decorateResult(request, normalized));
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return normalized;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const makeResolved = (call, metas) => ({
|
|
148
|
+
call,
|
|
149
|
+
meta: metas.get(call.name) ?? { name: call.name }
|
|
150
|
+
});
|
|
151
|
+
const callHost = (resolved) => ({
|
|
152
|
+
...(resolved.meta.host ?? {}),
|
|
153
|
+
...(resolved.call.displayTitle === undefined ? {} : { display_title: resolved.call.displayTitle })
|
|
154
|
+
});
|
|
155
|
+
const started = (resolved, timestamp) => ({
|
|
156
|
+
timestamp,
|
|
157
|
+
_tag: "ToolStarted",
|
|
158
|
+
depth: 0,
|
|
159
|
+
parent_id: null,
|
|
160
|
+
tool_id: resolved.call.toolCall.id,
|
|
161
|
+
name: resolved.call.name,
|
|
162
|
+
args: { ...resolved.call.args },
|
|
163
|
+
host: callHost(resolved)
|
|
164
|
+
});
|
|
165
|
+
const completed = (resolved, result, durationMs) => ({
|
|
166
|
+
_tag: "ToolCompleted",
|
|
167
|
+
depth: 0,
|
|
168
|
+
parent_id: null,
|
|
169
|
+
tool_id: resolved.call.toolCall.id,
|
|
170
|
+
name: resolved.call.name,
|
|
171
|
+
result: result.content,
|
|
172
|
+
preview: result.preview,
|
|
173
|
+
duration_ms: durationMs,
|
|
174
|
+
is_error: result.is_error ?? false,
|
|
175
|
+
data: result.data ?? null,
|
|
176
|
+
retryable: result.retryable ?? null,
|
|
177
|
+
message_extras: { ...(result.message_extras ?? {}) },
|
|
178
|
+
host: { ...callHost(resolved), ...(result.host ?? {}) },
|
|
179
|
+
model_content: result.model_content ?? [],
|
|
180
|
+
ends_turn: callEndsTurn(resolved.meta, resolved.call.args)
|
|
181
|
+
});
|
|
182
|
+
const paused = (resolved, pause) => ({
|
|
183
|
+
_tag: "ToolPaused",
|
|
184
|
+
depth: 0,
|
|
185
|
+
parent_id: null,
|
|
186
|
+
tool_id: resolved.call.toolCall.id,
|
|
187
|
+
name: resolved.call.name,
|
|
188
|
+
args: { ...resolved.call.args },
|
|
189
|
+
reason: pause.reason,
|
|
190
|
+
detail: pause.detail ?? ""
|
|
191
|
+
});
|
|
192
|
+
const appendResults = (messages, rawCalls, results, extras, missingContent, skipIds, receiptIds = new Set()) => {
|
|
193
|
+
for (const call of rawCalls) {
|
|
194
|
+
if (skipIds.has(call.id))
|
|
195
|
+
continue;
|
|
196
|
+
if (receiptIds.has(call.id)) {
|
|
197
|
+
messages.push(launchReceipt(call.id));
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
messages.push({
|
|
201
|
+
...extras.get(call.id),
|
|
202
|
+
message_id: messageId("tool"),
|
|
203
|
+
role: "tool",
|
|
204
|
+
tool_call_id: call.id,
|
|
205
|
+
content: results.get(call.id) ?? missingContent
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
const appendModelContent = (messages, rawCalls, content) => {
|
|
210
|
+
for (const call of rawCalls) {
|
|
211
|
+
const blocks = content.get(call.id);
|
|
212
|
+
if (blocks === undefined || blocks.length === 0)
|
|
213
|
+
continue;
|
|
214
|
+
messages.push({
|
|
215
|
+
message_id: messageId("tool-media"),
|
|
216
|
+
role: "user",
|
|
217
|
+
client_id: `tool-media:${call.id}`,
|
|
218
|
+
is_meta: true,
|
|
219
|
+
content: [
|
|
220
|
+
{
|
|
221
|
+
type: "context",
|
|
222
|
+
content_type: "tool_result_media",
|
|
223
|
+
content: `Media returned by tool ${call.function.name}.`,
|
|
224
|
+
metadata: {
|
|
225
|
+
tool_call_id: call.id,
|
|
226
|
+
tool_name: call.function.name
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
...blocks
|
|
230
|
+
]
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
const executeOne = async (resolved, input, group, stateChanges) => {
|
|
235
|
+
const changesState = resolved.meta.changes_state === true;
|
|
236
|
+
const unorder = changesState ? await stateChanges.acquire() : undefined;
|
|
237
|
+
try {
|
|
238
|
+
return await executeInGroup(resolved, input, group, changesState);
|
|
239
|
+
}
|
|
240
|
+
finally {
|
|
241
|
+
unorder?.();
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
const executeInGroup = async (resolved, input, group, changesState) => {
|
|
245
|
+
const unlock = await group.acquire(changesState);
|
|
246
|
+
let release;
|
|
247
|
+
let handedOff = false;
|
|
248
|
+
try {
|
|
249
|
+
release = await input.semaphore.acquire();
|
|
250
|
+
const startedAt = input.clock();
|
|
251
|
+
const background = canRunInBackground(resolved.meta) && resolved.call.argumentError === undefined
|
|
252
|
+
? input.background
|
|
253
|
+
: undefined;
|
|
254
|
+
if (background === undefined)
|
|
255
|
+
return await executeCall(resolved, input, startedAt, {});
|
|
256
|
+
const budget = foregroundBudget(background.afterMs);
|
|
257
|
+
let moved = () => { };
|
|
258
|
+
const backgrounded = new Promise((resolve) => {
|
|
259
|
+
moved = resolve;
|
|
260
|
+
});
|
|
261
|
+
budget.phase("executing");
|
|
262
|
+
const execution = executeCall(resolved, input, startedAt, {
|
|
263
|
+
phase: budget.phase,
|
|
264
|
+
backgrounded
|
|
265
|
+
});
|
|
266
|
+
const first = await Promise.race([execution, budget.expired]);
|
|
267
|
+
budget.stop();
|
|
268
|
+
if (first !== "expired")
|
|
269
|
+
return first;
|
|
270
|
+
handedOff = true;
|
|
271
|
+
const finish = release;
|
|
272
|
+
void execution.finally(() => {
|
|
273
|
+
finish();
|
|
274
|
+
unlock();
|
|
275
|
+
});
|
|
276
|
+
moved();
|
|
277
|
+
background.adopt({
|
|
278
|
+
call: resolved.call,
|
|
279
|
+
settled: execution.then((settlement) => backgroundSettlement(resolved, input, settlement))
|
|
280
|
+
});
|
|
281
|
+
return { kind: "backgrounded", toolId: resolved.call.toolCall.id };
|
|
282
|
+
}
|
|
283
|
+
finally {
|
|
284
|
+
if (!handedOff) {
|
|
285
|
+
release?.();
|
|
286
|
+
unlock();
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
const executeCall = async (resolved, input, startedAt, hooks) => {
|
|
291
|
+
let settledCall = false;
|
|
292
|
+
const baseRequest = toolRequest(resolved, input);
|
|
293
|
+
try {
|
|
294
|
+
if (input.signal.aborted)
|
|
295
|
+
return { kind: "cancelled" };
|
|
296
|
+
await input.emit(started(resolved, startedAt));
|
|
297
|
+
if (resolved.call.argumentError !== undefined) {
|
|
298
|
+
const result = decorateToolResult(baseRequest, {
|
|
299
|
+
content: resolved.call.argumentError.message,
|
|
300
|
+
preview: argumentPreview[resolved.call.argumentError.code],
|
|
301
|
+
is_error: true,
|
|
302
|
+
retryable: false
|
|
303
|
+
}, input.toolset);
|
|
304
|
+
const duration = Math.max(0, Math.trunc(input.clock() - startedAt));
|
|
305
|
+
return { kind: "event", event: completed(resolved, result, duration) };
|
|
306
|
+
}
|
|
307
|
+
const progress = (update) => {
|
|
308
|
+
try {
|
|
309
|
+
if (settledCall || input.signal.aborted)
|
|
310
|
+
return;
|
|
311
|
+
if (typeof update?.message !== "string")
|
|
312
|
+
return;
|
|
313
|
+
const event = {
|
|
314
|
+
_tag: "ToolProgress",
|
|
315
|
+
depth: 0,
|
|
316
|
+
parent_id: null,
|
|
317
|
+
tool_call_id: resolved.call.toolCall.id,
|
|
318
|
+
name: resolved.call.name,
|
|
319
|
+
message: update.message,
|
|
320
|
+
...(update.data === undefined ? {} : { data: structuredClone(update.data) })
|
|
321
|
+
};
|
|
322
|
+
if (input.tryEmit !== undefined)
|
|
323
|
+
input.tryEmit(event);
|
|
324
|
+
else
|
|
325
|
+
void input.emit(event).catch(() => undefined);
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
// emit is a contract-free sink: a failing consumer never reaches the tool.
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
const request = {
|
|
332
|
+
...baseRequest,
|
|
333
|
+
...hooks,
|
|
334
|
+
...(input.beforeExecute === undefined ? {} : { beforeExecute: input.beforeExecute }),
|
|
335
|
+
emit: progress
|
|
336
|
+
};
|
|
337
|
+
const outcome = await applyToolCallMiddleware(request, async (current) => {
|
|
338
|
+
const refusal = await current.beforeExecute?.();
|
|
339
|
+
if (refusal !== undefined)
|
|
340
|
+
return normalizeToolResult(await (input.toolset.settleRefusal?.(current, refusal) ?? refusal));
|
|
341
|
+
return normalizeToolResult(await input.toolset.execute(current));
|
|
342
|
+
}, input.middleware);
|
|
343
|
+
const result = decorateToolResult(request, outcome, input.toolset);
|
|
344
|
+
const duration = Math.max(0, Math.trunc(input.clock() - startedAt));
|
|
345
|
+
return { kind: "event", event: completed(resolved, result, duration) };
|
|
346
|
+
}
|
|
347
|
+
catch (cause) {
|
|
348
|
+
if (input.signal.aborted)
|
|
349
|
+
return { kind: "cancelled" };
|
|
350
|
+
const duration = Math.max(0, Math.trunc(input.clock() - startedAt));
|
|
351
|
+
const failure = toToolFailure(cause);
|
|
352
|
+
if (failure instanceof PauseRequested)
|
|
353
|
+
return { kind: "event", event: paused(resolved, failure) };
|
|
354
|
+
const result = decorateToolResult(baseRequest, sanitizeFailure(resolved.call, failure), input.toolset);
|
|
355
|
+
return { kind: "event", event: completed(resolved, result, duration) };
|
|
356
|
+
}
|
|
357
|
+
finally {
|
|
358
|
+
settledCall = true;
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
const foregroundBudget = (afterMs) => {
|
|
362
|
+
let timer;
|
|
363
|
+
let stopped = false;
|
|
364
|
+
let expire = () => { };
|
|
365
|
+
const expired = new Promise((resolve) => {
|
|
366
|
+
expire = () => resolve("expired");
|
|
367
|
+
});
|
|
368
|
+
return {
|
|
369
|
+
expired,
|
|
370
|
+
stop: () => {
|
|
371
|
+
stopped = true;
|
|
372
|
+
clearTimeout(timer);
|
|
373
|
+
},
|
|
374
|
+
phase: (phase) => {
|
|
375
|
+
clearTimeout(timer);
|
|
376
|
+
if (stopped || phase === "waiting" || !Number.isFinite(afterMs))
|
|
377
|
+
return;
|
|
378
|
+
timer = setTimeout(expire, afterMs);
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
};
|
|
382
|
+
const backgroundSettlement = async (resolved, input, settlement) => {
|
|
383
|
+
if (settlement.kind !== "event")
|
|
384
|
+
throw abortError();
|
|
385
|
+
const event = settlement.event;
|
|
386
|
+
await input.emit(event);
|
|
387
|
+
const messages = [];
|
|
388
|
+
if (event._tag === "ToolPaused")
|
|
389
|
+
return { output: { completions: [], paused: [event] }, messages };
|
|
390
|
+
const id = event.tool_id;
|
|
391
|
+
appendResults(messages, [resolved.call.toolCall], new Map([[id, event.result]]), new Map(Object.keys(event.message_extras).length > 0 ? [[id, event.message_extras]] : []), unexpectedMissingResult, new Set());
|
|
392
|
+
appendModelContent(messages, [resolved.call.toolCall], new Map(event.model_content.length > 0 ? [[id, event.model_content]] : []));
|
|
393
|
+
return { output: { completions: [event], paused: [] }, messages };
|
|
394
|
+
};
|
|
395
|
+
/**
|
|
396
|
+
* Execute and settle one tool batch into the loop's private history.
|
|
397
|
+
* All starts are emitted before any execution; settlements stream in
|
|
398
|
+
* completion order. Paused calls deliberately receive no tool-result
|
|
399
|
+
* message so recovery can see the trailing incomplete assistant step.
|
|
400
|
+
*/
|
|
401
|
+
export const dispatchToolCalls = async (input) => {
|
|
402
|
+
const results = new Map();
|
|
403
|
+
const extras = new Map();
|
|
404
|
+
const modelContent = new Map();
|
|
405
|
+
const pausedIds = new Set();
|
|
406
|
+
const backgroundedIds = new Set();
|
|
407
|
+
const completions = [];
|
|
408
|
+
const pausedEvents = [];
|
|
409
|
+
const resolved = input.calls.map((call) => makeResolved(call, input.metas));
|
|
410
|
+
for (const [toolId, result] of input.recoveredResults ?? []) {
|
|
411
|
+
results.set(toolId, result.content);
|
|
412
|
+
if (Object.keys(result.message_extras).length > 0)
|
|
413
|
+
extras.set(toolId, result.message_extras);
|
|
414
|
+
if (result.model_content.length > 0)
|
|
415
|
+
modelContent.set(toolId, result.model_content);
|
|
416
|
+
}
|
|
417
|
+
const record = (event) => {
|
|
418
|
+
if (event._tag === "ToolPaused") {
|
|
419
|
+
pausedIds.add(event.tool_id);
|
|
420
|
+
pausedEvents.push(event);
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
completions.push(event);
|
|
424
|
+
results.set(event.tool_id, event.result);
|
|
425
|
+
if (Object.keys(event.message_extras).length > 0)
|
|
426
|
+
extras.set(event.tool_id, event.message_extras);
|
|
427
|
+
if (event.model_content.length > 0)
|
|
428
|
+
modelContent.set(event.tool_id, event.model_content);
|
|
429
|
+
};
|
|
430
|
+
const emitEvent = async (event) => {
|
|
431
|
+
await input.emit(event);
|
|
432
|
+
};
|
|
433
|
+
let aborted = false;
|
|
434
|
+
try {
|
|
435
|
+
if (input.rejection !== undefined) {
|
|
436
|
+
for (const item of resolved) {
|
|
437
|
+
await emitEvent(started(item, input.clock()));
|
|
438
|
+
const result = decorateToolResult(toolRequest(item, input), input.rejection, input.toolset);
|
|
439
|
+
const event = completed(item, result, 0);
|
|
440
|
+
record(event);
|
|
441
|
+
await emitEvent(event);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
await runBatch();
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
catch (cause) {
|
|
449
|
+
if (input.signal.aborted || isAbortError(cause)) {
|
|
450
|
+
aborted = true;
|
|
451
|
+
settle();
|
|
452
|
+
}
|
|
453
|
+
throw cause;
|
|
454
|
+
}
|
|
455
|
+
settle();
|
|
456
|
+
if (aborted)
|
|
457
|
+
throw abortError();
|
|
458
|
+
return { completions, paused: pausedEvents };
|
|
459
|
+
function settle() {
|
|
460
|
+
appendResults(input.messages, input.rawCalls, results, extras, aborted || input.signal.aborted ? "Tool call cancelled." : unexpectedMissingResult, pausedIds, backgroundedIds);
|
|
461
|
+
appendModelContent(input.messages, input.rawCalls, modelContent);
|
|
462
|
+
}
|
|
463
|
+
async function runBatch() {
|
|
464
|
+
const groups = input.groups ?? new Map();
|
|
465
|
+
const stateChanges = input.stateChanges ?? makeSemaphore(1);
|
|
466
|
+
const settled = new EventQueue(Number.POSITIVE_INFINITY);
|
|
467
|
+
const controller = new AbortController();
|
|
468
|
+
const forwardAbort = () => controller.abort();
|
|
469
|
+
if (input.signal.aborted) {
|
|
470
|
+
aborted = true;
|
|
471
|
+
forwardAbort();
|
|
472
|
+
}
|
|
473
|
+
else
|
|
474
|
+
input.signal.addEventListener("abort", forwardAbort, { once: true });
|
|
475
|
+
const following = [];
|
|
476
|
+
const background = input.background;
|
|
477
|
+
const batchInput = {
|
|
478
|
+
...input,
|
|
479
|
+
signal: controller.signal,
|
|
480
|
+
...(background === undefined
|
|
481
|
+
? {}
|
|
482
|
+
: {
|
|
483
|
+
background: {
|
|
484
|
+
...background,
|
|
485
|
+
adopt: (call) => {
|
|
486
|
+
following.push(call.settled);
|
|
487
|
+
background.adopt(call);
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
})
|
|
491
|
+
};
|
|
492
|
+
try {
|
|
493
|
+
for (const item of resolved) {
|
|
494
|
+
const key = item.meta.concurrency_group ?? item.call.name;
|
|
495
|
+
const group = groups.get(key) ?? makeFairReadWriteLock();
|
|
496
|
+
groups.set(key, group);
|
|
497
|
+
void executeOne(item, batchInput, group, stateChanges)
|
|
498
|
+
.then((settlement) => settled.push(settlement))
|
|
499
|
+
.catch(() => settled.push({ kind: "cancelled" }));
|
|
500
|
+
}
|
|
501
|
+
let remaining = resolved.length;
|
|
502
|
+
while (remaining > 0) {
|
|
503
|
+
const next = await raceAbort(settled.next(), input.signal);
|
|
504
|
+
if (next.done)
|
|
505
|
+
break;
|
|
506
|
+
remaining -= 1;
|
|
507
|
+
if (next.value.kind === "cancelled")
|
|
508
|
+
continue;
|
|
509
|
+
if (next.value.kind === "backgrounded") {
|
|
510
|
+
backgroundedIds.add(next.value.toolId);
|
|
511
|
+
continue;
|
|
512
|
+
}
|
|
513
|
+
record(next.value.event);
|
|
514
|
+
await emitEvent(next.value.event);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
catch (cause) {
|
|
518
|
+
if (input.signal.aborted) {
|
|
519
|
+
aborted = true;
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
throw cause;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
finally {
|
|
526
|
+
input.signal.removeEventListener("abort", forwardAbort);
|
|
527
|
+
if (background !== undefined && following.length > 0) {
|
|
528
|
+
if (background.signal.aborted)
|
|
529
|
+
forwardAbort();
|
|
530
|
+
background.signal.addEventListener("abort", forwardAbort, { once: true });
|
|
531
|
+
void Promise.allSettled(following).then(() => background.signal.removeEventListener("abort", forwardAbort));
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
};
|
|
536
|
+
//# sourceMappingURL=dispatch.js.map
|