@openrouter/agent 0.7.2 → 0.9.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 +728 -19
- package/esm/index.d.ts +24 -6
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +20 -5
- package/esm/index.js.map +1 -1
- package/esm/inner-loop/call-model.d.ts +8 -5
- package/esm/inner-loop/call-model.d.ts.map +1 -1
- package/esm/inner-loop/call-model.js +49 -40
- package/esm/inner-loop/call-model.js.map +1 -1
- package/esm/inner-loop/resume-tool-results.d.ts +128 -0
- package/esm/inner-loop/resume-tool-results.d.ts.map +1 -0
- package/esm/inner-loop/resume-tool-results.js +244 -0
- package/esm/inner-loop/resume-tool-results.js.map +1 -0
- package/esm/lib/agent-tool.d.ts +92 -0
- package/esm/lib/agent-tool.d.ts.map +1 -0
- package/esm/lib/agent-tool.js +211 -0
- package/esm/lib/agent-tool.js.map +1 -0
- package/esm/lib/async-params.d.ts +107 -6
- package/esm/lib/async-params.d.ts.map +1 -1
- package/esm/lib/async-params.js +8 -1
- package/esm/lib/async-params.js.map +1 -1
- package/esm/lib/async-tool-registry.d.ts +134 -0
- package/esm/lib/async-tool-registry.d.ts.map +1 -0
- package/esm/lib/async-tool-registry.js +352 -0
- package/esm/lib/async-tool-registry.js.map +1 -0
- package/esm/lib/async-tools.d.ts +23 -0
- package/esm/lib/async-tools.d.ts.map +1 -0
- package/esm/lib/async-tools.js +19 -0
- package/esm/lib/async-tools.js.map +1 -0
- package/esm/lib/conversation-state.d.ts +45 -1
- package/esm/lib/conversation-state.d.ts.map +1 -1
- package/esm/lib/conversation-state.js +119 -0
- package/esm/lib/conversation-state.js.map +1 -1
- package/esm/lib/doom-loop.d.ts +533 -0
- package/esm/lib/doom-loop.d.ts.map +1 -0
- package/esm/lib/doom-loop.js +1221 -0
- package/esm/lib/doom-loop.js.map +1 -0
- package/esm/lib/hooks-emit.d.ts +50 -0
- package/esm/lib/hooks-emit.d.ts.map +1 -0
- package/esm/lib/hooks-emit.js +307 -0
- package/esm/lib/hooks-emit.js.map +1 -0
- package/esm/lib/hooks-manager.d.ts +141 -0
- package/esm/lib/hooks-manager.d.ts.map +1 -0
- package/esm/lib/hooks-manager.js +282 -0
- package/esm/lib/hooks-manager.js.map +1 -0
- package/esm/lib/hooks-matchers.d.ts +12 -0
- package/esm/lib/hooks-matchers.d.ts.map +1 -0
- package/esm/lib/hooks-matchers.js +26 -0
- package/esm/lib/hooks-matchers.js.map +1 -0
- package/esm/lib/hooks-resolve.d.ts +17 -0
- package/esm/lib/hooks-resolve.d.ts.map +1 -0
- package/esm/lib/hooks-resolve.js +42 -0
- package/esm/lib/hooks-resolve.js.map +1 -0
- package/esm/lib/hooks-schemas.d.ts +221 -0
- package/esm/lib/hooks-schemas.d.ts.map +1 -0
- package/esm/lib/hooks-schemas.js +238 -0
- package/esm/lib/hooks-schemas.js.map +1 -0
- package/esm/lib/hooks-types.d.ts +178 -0
- package/esm/lib/hooks-types.d.ts.map +1 -0
- package/esm/lib/hooks-types.js +45 -0
- package/esm/lib/hooks-types.js.map +1 -0
- package/esm/lib/model-result.d.ts +848 -12
- package/esm/lib/model-result.d.ts.map +1 -1
- package/esm/lib/model-result.js +4055 -410
- package/esm/lib/model-result.js.map +1 -1
- package/esm/lib/reusable-stream.d.ts +15 -0
- package/esm/lib/reusable-stream.d.ts.map +1 -1
- package/esm/lib/reusable-stream.js +25 -0
- package/esm/lib/reusable-stream.js.map +1 -1
- package/esm/lib/stream-transformers.d.ts +20 -0
- package/esm/lib/stream-transformers.d.ts.map +1 -1
- package/esm/lib/stream-transformers.js +45 -0
- package/esm/lib/stream-transformers.js.map +1 -1
- package/esm/lib/tool-check.d.ts +76 -0
- package/esm/lib/tool-check.d.ts.map +1 -0
- package/esm/lib/tool-check.js +241 -0
- package/esm/lib/tool-check.js.map +1 -0
- package/esm/lib/tool-concurrency.d.ts +42 -0
- package/esm/lib/tool-concurrency.d.ts.map +1 -0
- package/esm/lib/tool-concurrency.js +80 -0
- package/esm/lib/tool-concurrency.js.map +1 -0
- package/esm/lib/tool-context.d.ts +45 -1
- package/esm/lib/tool-context.d.ts.map +1 -1
- package/esm/lib/tool-context.js +60 -1
- package/esm/lib/tool-context.js.map +1 -1
- package/esm/lib/tool-executor.d.ts +52 -9
- package/esm/lib/tool-executor.d.ts.map +1 -1
- package/esm/lib/tool-executor.js +263 -21
- package/esm/lib/tool-executor.js.map +1 -1
- package/esm/lib/tool-orchestrator.d.ts.map +1 -1
- package/esm/lib/tool-orchestrator.js +87 -47
- package/esm/lib/tool-orchestrator.js.map +1 -1
- package/esm/lib/tool-task.d.ts +157 -0
- package/esm/lib/tool-task.d.ts.map +1 -0
- package/esm/lib/tool-task.js +206 -0
- package/esm/lib/tool-task.js.map +1 -0
- package/esm/lib/tool-types.d.ts +609 -58
- package/esm/lib/tool-types.d.ts.map +1 -1
- package/esm/lib/tool-types.js +72 -10
- package/esm/lib/tool-types.js.map +1 -1
- package/esm/lib/tool.d.ts +217 -25
- package/esm/lib/tool.d.ts.map +1 -1
- package/esm/lib/tool.js +210 -1
- package/esm/lib/tool.js.map +1 -1
- package/package.json +35 -3
package/esm/index.d.ts
CHANGED
|
@@ -4,25 +4,43 @@ export type { RequestOptions } from '@openrouter/sdk/lib/sdks';
|
|
|
4
4
|
export type { BaseInputsUnion, ChatAssistantMessage, ChatMessages, EasyInputMessage, EasyInputMessageContentInputImage, EasyInputMessageContentUnion1, EasyInputMessageRoleUnion, ErrorEvent, FunctionCallItem, FunctionCallOutputItem, InputAudio, InputFile, InputImage, InputMessageItem, InputsUnion, InputText, InputVideo, OpenAIResponsesToolChoiceUnion, OpenResponsesResult, OutputFileSearchCallItem, OutputFunctionCallItem, OutputImage, OutputImage as OutputInputImage, OutputImageGenerationCallItem, OutputItems, OutputMessage, OutputReasoningItem, OutputWebSearchCallItem, ResponseOutputText, ResponsesRequest, ResponsesRequestToolUnion, StreamEvents, Usage, } from '@openrouter/sdk/models';
|
|
5
5
|
export type { AssistantMessageItem, CallFileSearchItem, CallFunctionToolItem, CallImageGenerationItem, CallWebSearchItem, DeveloperMessageItem, ErrorItem, FunctionProgressItem, FunctionResultItem, Item, NewUserMessageItem, ReasoningItem, SystemMessageItem, UserMessageItem, } from './lib/item-types.js';
|
|
6
6
|
export { callModel } from './inner-loop/call-model.js';
|
|
7
|
+
export type { ResumeRunConfig, ResumeToolResultEntry, ToolTaskResultEnvelope, } from './inner-loop/resume-tool-results.js';
|
|
8
|
+
export { resumeToolResults, ToolTaskAlreadySettledError, } from './inner-loop/resume-tool-results.js';
|
|
9
|
+
export type { AgentRunSpec, AgentToolConfig } from './lib/agent-tool.js';
|
|
10
|
+
export { AgentTranscriptSource } from './lib/agent-tool.js';
|
|
7
11
|
export { fromClaudeMessages, toClaudeMessage } from './lib/anthropic-compat.js';
|
|
8
12
|
export type { CallModelInput, CallModelInputWithState, ResolvedCallModelInput, } from './lib/async-params.js';
|
|
9
13
|
export { hasAsyncFunctions, resolveAsyncFunctions } from './lib/async-params.js';
|
|
14
|
+
export type { SettledToolTask } from './lib/async-tool-registry.js';
|
|
15
|
+
export { AsyncToolRegistry } from './lib/async-tool-registry.js';
|
|
10
16
|
export { fromChatMessages, toChatMessage } from './lib/chat-compat.js';
|
|
11
17
|
export { ClaudeContentBlockType, NonClaudeMessageRole } from './lib/claude-constants.js';
|
|
12
18
|
export { isClaudeStyleMessages } from './lib/claude-type-guards.js';
|
|
13
|
-
export { appendToMessages, createInitialState, createRejectedResult, createUnsentResult, generateConversationId, partitionToolCalls, toolRequiresApproval, updateState, } from './lib/conversation-state.js';
|
|
19
|
+
export { appendToMessages, CONVERSATION_STATE_VERSION, createInitialState, createRejectedResult, createUnsentResult, deserializeConversationState, generateConversationId, InvalidStateError, partitionToolCalls, serializeConversationState, toolRequiresApproval, UnsupportedStateVersionError, updateState, } from './lib/conversation-state.js';
|
|
20
|
+
export type { DoomLoopAction, DoomLoopCallRecord, DoomLoopConfig, DoomLoopDetectorKind, DoomLoopEscalationConfig, DoomLoopLadder, DoomLoopOption, DoomLoopSerializedState, DoomLoopStreak, DoomLoopTextOptions, DoomLoopVerdict, LoopKeyResolution, ResolvedDoomLoopConfig, ResolvedEscalationConfig, TextRepetitionResult, } from './lib/doom-loop.js';
|
|
21
|
+
export { canonicalizeKeyMaterial, DEFAULT_DOOM_LOOP_LADDER, DEFAULT_MAX_ESCALATIONS, DoomLoopMonitor, detectTextRepetition, fingerprintKeyMaterial, fingerprintToolCall, MAX_CANONICALIZE_DEPTH, resolveDoomLoopOption, resolveLoopKeyMaterial, } from './lib/doom-loop.js';
|
|
22
|
+
export { HooksManager } from './lib/hooks-manager.js';
|
|
23
|
+
export type { AsyncOutput, BuiltInHookDefinitions, DoomLoopDetectedPayload, DoomLoopDetectedResult, EmitResult, HookDefinition, HookEntry, HookHandler, HookRegistry, HookReturn, HooksManagerOptions, InlineHookConfig, LifecycleHookContext, ModelCallUsage, PermissionRequestPayload, PermissionRequestResult, PostModelCallPayload, PostToolUseFailurePayload, PostToolUsePayload, PreToolUsePayload, PreToolUseResult, SessionEndPayload, SessionStartPayload, SessionUsageTotals, StopPayload, StopResult, ToolMatcher, UserPromptSubmitPayload, UserPromptSubmitResult, } from './lib/hooks-types.js';
|
|
24
|
+
export { HookName, isAsyncOutput } from './lib/hooks-types.js';
|
|
14
25
|
export type { GetResponseOptions } from './lib/model-result.js';
|
|
15
|
-
export { ModelResult } from './lib/model-result.js';
|
|
26
|
+
export { DEFAULT_FINAL_RESPONSE_DIRECTIVE, ModelResult } from './lib/model-result.js';
|
|
16
27
|
export { applyNextTurnParamsToRequest, buildNextTurnParamsContext, executeNextTurnParamsFunctions, } from './lib/next-turn-params.js';
|
|
17
28
|
export { finishReasonIs, hasToolCall, isStopConditionMet, maxCost, maxTokensUsed, stepCountIs, } from './lib/stop-conditions.js';
|
|
18
29
|
export type { StreamableOutputItem } from './lib/stream-transformers.js';
|
|
19
30
|
export { extractUnsupportedContent, getUnsupportedContentSummary, hasUnsupportedContent, } from './lib/stream-transformers.js';
|
|
20
|
-
export {
|
|
21
|
-
export
|
|
31
|
+
export type { BuiltDeferredTool, DeferredToolMethods } from './lib/tool.js';
|
|
32
|
+
export { markMcp, serverTool, tool } from './lib/tool.js';
|
|
33
|
+
export type { TaskToolInput } from './lib/tool-check.js';
|
|
34
|
+
export { TASK_TOOL_NAME, TaskToolInputSchema } from './lib/tool-check.js';
|
|
35
|
+
export type { SemaphoreRelease } from './lib/tool-concurrency.js';
|
|
36
|
+
export { acquireAll, Semaphore } from './lib/tool-concurrency.js';
|
|
37
|
+
export type { ContextInput, ToolExecutionExtras } from './lib/tool-context.js';
|
|
22
38
|
export { buildToolExecuteContext, ToolContextStore } from './lib/tool-context.js';
|
|
23
39
|
export { ToolEventBroadcaster } from './lib/tool-event-broadcaster.js';
|
|
24
|
-
export type {
|
|
25
|
-
export {
|
|
40
|
+
export type { TaskLogEntry, TaskLogLimits, TaskTranscriptSource, ToolTaskMode, ToolTaskStatusView, } from './lib/tool-task.js';
|
|
41
|
+
export { DEFAULT_TASK_LOG_LIMITS, ToolTask } from './lib/tool-task.js';
|
|
42
|
+
export type { AsyncToolAck, ChatStreamEvent, ClientTool, ConversationState, ConversationStatus, DeferOptions, DeferredHandle, HasApprovalTools, HITLTool, HITLToolFunction, InferToolEvent, InferToolEventsUnion, InferToolInput, InferToolOutput, InferToolOutputsUnion, ManualTool, McpBranded, NextTurnParamsContext, NextTurnParamsFunctions, ParsedToolCall, PartialResponse, PendingAsyncTool, ResponseStreamEvent, ResponseStreamEvent as EnhancedResponseStreamEvent, ServerTool, ServerToolConfig, ServerToolResultItem, ServerToolType, StateAccessor, StepResult, StopCondition, StopWhen, ToModelOutputFunction, ToModelOutputResult, Tool, ToolApprovalCheck, ToolAsyncSettledEvent, ToolAsyncStartedEvent, ToolCallOutputEvent, ToolCheckConfig, ToolExecutionResult, ToolExecutionResultUnion, ToolHasApproval, ToolLifecycle, ToolLoopKey, ToolLoopKeyFn, ToolOutputContentItem, ToolPreliminaryResultEvent, ToolResultEvent, ToolResultItem, ToolRunContext, ToolStreamEvent, ToolTaskHandle, ToolTaskStatus, ToolWithExecute, ToolWithGenerator, TurnContext, TurnEndEvent, TurnStartEvent, TypedToolCall, TypedToolCallUnion, UnifiedTool, UnifiedToolFunction, UnsentToolResult, Warning, } from './lib/tool-types.js';
|
|
43
|
+
export { hasApprovalRequiredTools, hasExecuteFunction, isAgentTool, isAutoResolvableTool, isClientTool, isDeferredHandle, isGeneratorTool, isHITLTool, isLongRunningTool, isManualTool, isMcpTool, isRegularExecuteTool, isServerTool, isToolAsyncSettledEvent, isToolAsyncStartedEvent, isToolCallOutputEvent, isToolPreliminaryResultEvent, isToolResultEvent, isTurnEndEvent, isTurnStartEvent, isUnifiedTool, ToolType, toolHasApprovalConfigured, } from './lib/tool-types.js';
|
|
26
44
|
export { buildTurnContext, normalizeInputToArray } from './lib/turn-context.js';
|
|
27
45
|
export type { Hook, OpenRouterOptions, SDKOptions } from './openrouter.js';
|
|
28
46
|
export { OpenRouter } from './openrouter.js';
|
package/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,WAAW,GACZ,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,YAAY,EAEV,eAAe,EAEf,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,iCAAiC,EACjC,6BAA6B,EAC7B,yBAAyB,EAEzB,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EAEtB,UAAU,EACV,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,UAAU,EACV,8BAA8B,EAC9B,mBAAmB,EAEnB,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,WAAW,IAAI,gBAAgB,EAC/B,6BAA6B,EAC7B,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EAEvB,kBAAkB,EAClB,gBAAgB,EAChB,yBAAyB,EACzB,YAAY,EACZ,KAAK,GACN,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,oBAAoB,EACpB,kBAAkB,EAClB,IAAI,EACJ,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/esm/index.js
CHANGED
|
@@ -5,27 +5,42 @@ export { SDKHooks } from '@openrouter/sdk/hooks/hooks';
|
|
|
5
5
|
// Message format compatibility helpers
|
|
6
6
|
// High-level model calling
|
|
7
7
|
export { callModel } from './inner-loop/call-model.js';
|
|
8
|
+
export { resumeToolResults, ToolTaskAlreadySettledError, } from './inner-loop/resume-tool-results.js';
|
|
9
|
+
export { AgentTranscriptSource } from './lib/agent-tool.js';
|
|
8
10
|
export { fromClaudeMessages, toClaudeMessage } from './lib/anthropic-compat.js';
|
|
9
11
|
export { hasAsyncFunctions, resolveAsyncFunctions } from './lib/async-params.js';
|
|
12
|
+
export { AsyncToolRegistry } from './lib/async-tool-registry.js';
|
|
10
13
|
export { fromChatMessages, toChatMessage } from './lib/chat-compat.js';
|
|
11
14
|
// Claude constants and type guards
|
|
12
15
|
export { ClaudeContentBlockType, NonClaudeMessageRole } from './lib/claude-constants.js';
|
|
13
16
|
export { isClaudeStyleMessages } from './lib/claude-type-guards.js';
|
|
14
17
|
// Conversation state helpers
|
|
15
|
-
export { appendToMessages, createInitialState, createRejectedResult, createUnsentResult, generateConversationId, partitionToolCalls, toolRequiresApproval, updateState, } from './lib/conversation-state.js';
|
|
16
|
-
export {
|
|
18
|
+
export { appendToMessages, CONVERSATION_STATE_VERSION, createInitialState, createRejectedResult, createUnsentResult, deserializeConversationState, generateConversationId, InvalidStateError, partitionToolCalls, serializeConversationState, toolRequiresApproval, UnsupportedStateVersionError, updateState, } from './lib/conversation-state.js';
|
|
19
|
+
export { canonicalizeKeyMaterial, DEFAULT_DOOM_LOOP_LADDER, DEFAULT_MAX_ESCALATIONS, DoomLoopMonitor, detectTextRepetition, fingerprintKeyMaterial, fingerprintToolCall, MAX_CANONICALIZE_DEPTH, resolveDoomLoopOption, resolveLoopKeyMaterial, } from './lib/doom-loop.js';
|
|
20
|
+
// Lifecycle hooks system (PreToolUse, PostToolUse, Stop, SessionStart, ...).
|
|
21
|
+
// Distinct from the SDK transport hooks re-exported above (SDKHooks,
|
|
22
|
+
// BeforeRequestHook, HookContext, ...), which intercept HTTP requests.
|
|
23
|
+
// Internals (matchesTool, resolveHooks, BUILT_IN_HOOKS, raw Zod schemas) are
|
|
24
|
+
// deliberately NOT exported: everything here is semver surface, and the raw
|
|
25
|
+
// schema objects are mutable.
|
|
26
|
+
export { HooksManager } from './lib/hooks-manager.js';
|
|
27
|
+
export { HookName, isAsyncOutput } from './lib/hooks-types.js';
|
|
28
|
+
export { DEFAULT_FINAL_RESPONSE_DIRECTIVE, ModelResult } from './lib/model-result.js';
|
|
17
29
|
// Next turn params helpers
|
|
18
30
|
export { applyNextTurnParamsToRequest, buildNextTurnParamsContext, executeNextTurnParamsFunctions, } from './lib/next-turn-params.js';
|
|
19
31
|
// Stop condition helpers
|
|
20
32
|
export { finishReasonIs, hasToolCall, isStopConditionMet, maxCost, maxTokensUsed, stepCountIs, } from './lib/stop-conditions.js';
|
|
21
33
|
export { extractUnsupportedContent, getUnsupportedContentSummary, hasUnsupportedContent, } from './lib/stream-transformers.js';
|
|
22
|
-
// Tool creation helpers
|
|
23
|
-
export { serverTool, tool } from './lib/tool.js';
|
|
34
|
+
// Tool creation helpers (tool also carries tool.background / tool.deferred)
|
|
35
|
+
export { markMcp, serverTool, tool } from './lib/tool.js';
|
|
36
|
+
export { TASK_TOOL_NAME, TaskToolInputSchema } from './lib/tool-check.js';
|
|
37
|
+
export { acquireAll, Semaphore } from './lib/tool-concurrency.js';
|
|
24
38
|
// Tool context helpers
|
|
25
39
|
export { buildToolExecuteContext, ToolContextStore } from './lib/tool-context.js';
|
|
26
40
|
// Real-time tool event broadcasting
|
|
27
41
|
export { ToolEventBroadcaster } from './lib/tool-event-broadcaster.js';
|
|
28
|
-
export {
|
|
42
|
+
export { DEFAULT_TASK_LOG_LIMITS, ToolTask } from './lib/tool-task.js';
|
|
43
|
+
export { hasApprovalRequiredTools, hasExecuteFunction, isAgentTool, isAutoResolvableTool, isClientTool, isDeferredHandle, isGeneratorTool, isHITLTool, isLongRunningTool, isManualTool, isMcpTool, isRegularExecuteTool, isServerTool, isToolAsyncSettledEvent, isToolAsyncStartedEvent, isToolCallOutputEvent, isToolPreliminaryResultEvent, isToolResultEvent, isTurnEndEvent, isTurnStartEvent, isUnifiedTool, ToolType, toolHasApprovalConfigured, } from './lib/tool-types.js';
|
|
29
44
|
// Turn context helpers
|
|
30
45
|
export { buildTurnContext, normalizeInputToArray } from './lib/turn-context.js';
|
|
31
46
|
export { OpenRouter } from './openrouter.js';
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,iEAAiE;AAEjE,yDAAyD;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AA2EvD,uCAAuC;AAEvC,2BAA2B;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,iEAAiE;AAEjE,yDAAyD;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AA2EvD,uCAAuC;AAEvC,2BAA2B;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAOvD,OAAO,EACL,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAMhF,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACvE,mCAAmC;AACnC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,6BAA6B;AAC7B,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,4BAA4B,EAC5B,WAAW,GACZ,MAAM,6BAA6B,CAAC;AAmBrC,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,6EAA6E;AAC7E,qEAAqE;AACrE,uEAAuE;AACvE,6EAA6E;AAC7E,4EAA4E;AAC5E,8BAA8B;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAgCtD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,gCAAgC,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACtF,2BAA2B;AAC3B,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC;AACnC,yBAAyB;AACzB,OAAO,EACL,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AAEtC,4EAA4E;AAC5E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAElE,uBAAuB;AACvB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAClF,oCAAoC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AASvE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAoEvE,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,4BAA4B,EAC5B,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,uBAAuB;AACvB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -64,11 +64,14 @@ export type { CallModelInput } from '../lib/async-params.js';
|
|
|
64
64
|
*
|
|
65
65
|
* **Final Response After Stop:**
|
|
66
66
|
*
|
|
67
|
-
* When `stopWhen` fires while the model is still emitting tool calls,
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* than a half-finished tool call.
|
|
71
|
-
*
|
|
67
|
+
* When `stopWhen` fires while the model is still emitting tool calls, the
|
|
68
|
+
* loop makes one final model turn with `toolChoice: 'none'` (tools stay in
|
|
69
|
+
* the request to preserve the prompt cache) so the run ends with a
|
|
70
|
+
* natural-language answer rather than a half-finished tool call. This is
|
|
71
|
+
* the default; `allowFinalResponse` tunes it: `true`/omitted appends a
|
|
72
|
+
* default final-answer directive as a user message, a non-empty string
|
|
73
|
+
* replaces the wording, `''` appends nothing, `false` disables the final
|
|
74
|
+
* turn entirely.
|
|
72
75
|
*/
|
|
73
76
|
export declare function callModel<TTools extends readonly Tool[], TSharedSchema extends $ZodObject<$ZodShape> | undefined = undefined, TShared extends Record<string, unknown> = TSharedSchema extends $ZodObject<$ZodShape> ? zodInfer<TSharedSchema> : Record<string, never>>(client: OpenRouterCore, request: CallModelInput<TTools, TShared> & {
|
|
74
77
|
sharedContextSchema?: TSharedSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-model.d.ts","sourceRoot":"","sources":["../../src/inner-loop/call-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"call-model.d.ts","sourceRoot":"","sources":["../../src/inner-loop/call-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGjD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,wBAAgB,SAAS,CACvB,MAAM,SAAS,SAAS,IAAI,EAAE,EAC9B,aAAa,SAAS,UAAU,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,SAAS,EACnE,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,SAAS,UAAU,CAAC,SAAS,CAAC,GACjF,QAAQ,CAAC,aAAa,CAAC,GACvB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAEzB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACzC,mBAAmB,CAAC,EAAE,aAAa,CAAC;CACrC,EACD,OAAO,CAAC,EAAE,cAAc,GACvB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CA8F9B"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { resolveHooks } from '../lib/hooks-resolve.js';
|
|
1
2
|
import { ModelResult } from '../lib/model-result.js';
|
|
2
|
-
import {
|
|
3
|
+
import { buildTaskToolApiDefinition, needsTaskTool } from '../lib/tool-check.js';
|
|
4
|
+
import { convertToolsToAPIFormat, convertZodToJsonSchema } from '../lib/tool-executor.js';
|
|
3
5
|
/**
|
|
4
6
|
* Get a response with multiple consumption patterns
|
|
5
7
|
*
|
|
@@ -59,17 +61,29 @@ import { convertToolsToAPIFormat } from '../lib/tool-executor.js';
|
|
|
59
61
|
*
|
|
60
62
|
* **Final Response After Stop:**
|
|
61
63
|
*
|
|
62
|
-
* When `stopWhen` fires while the model is still emitting tool calls,
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* than a half-finished tool call.
|
|
66
|
-
*
|
|
64
|
+
* When `stopWhen` fires while the model is still emitting tool calls, the
|
|
65
|
+
* loop makes one final model turn with `toolChoice: 'none'` (tools stay in
|
|
66
|
+
* the request to preserve the prompt cache) so the run ends with a
|
|
67
|
+
* natural-language answer rather than a half-finished tool call. This is
|
|
68
|
+
* the default; `allowFinalResponse` tunes it: `true`/omitted appends a
|
|
69
|
+
* default final-answer directive as a user message, a non-empty string
|
|
70
|
+
* replaces the wording, `''` appends nothing, `false` disables the final
|
|
71
|
+
* turn entirely.
|
|
67
72
|
*/
|
|
68
73
|
export function callModel(client, request, options) {
|
|
69
74
|
// Destructure state management options along with tools and stopWhen
|
|
70
|
-
const { tools, stopWhen, state, requireApproval, approveToolCalls, rejectToolCalls, context, sharedContextSchema, onTurnStart, onTurnEnd, allowFinalResponse, ...apiRequest } = request;
|
|
75
|
+
const { tools, stopWhen, state, requireApproval, approveToolCalls, rejectToolCalls, context, sharedContextSchema, onTurnStart, onTurnEnd, allowFinalResponse, strictFinalResponse, hooks, doomLoop, signal, toolTimeoutMs, toolConcurrency, asyncTools, ...apiRequest } = request;
|
|
71
76
|
// Convert tools to API format - no cast needed now that convertToolsToAPIFormat accepts readonly
|
|
72
77
|
const apiTools = tools ? convertToolsToAPIFormat(tools) : undefined;
|
|
78
|
+
// Append the single universal `task` tool when any long-running tool is
|
|
79
|
+
// registered (and check-ins aren't disabled): ONE static wire definition
|
|
80
|
+
// for check/steer/result/cancel across every async tool — per-tool
|
|
81
|
+
// context cost stays constant regardless of the tool count. Appended
|
|
82
|
+
// here (not per-request in ModelResult) so `resolvedRequest.tools` stays
|
|
83
|
+
// stable across turns. Calls to it are engine-intercepted.
|
|
84
|
+
if (apiTools && tools && asyncTools?.checkins !== false && needsTaskTool(tools)) {
|
|
85
|
+
apiTools.push(buildTaskToolApiDefinition(convertZodToJsonSchema));
|
|
86
|
+
}
|
|
73
87
|
// Build the request with converted tools
|
|
74
88
|
// Note: async functions are resolved later in ModelResult.executeToolsIfNeeded()
|
|
75
89
|
// The request can have async fields (functions) or sync fields, and the tools are converted to API format
|
|
@@ -87,42 +101,37 @@ export function callModel(client, request, options) {
|
|
|
87
101
|
'x-openrouter-callmodel': 'true',
|
|
88
102
|
},
|
|
89
103
|
};
|
|
90
|
-
|
|
104
|
+
// Assemble engine options, then drop undefined entries so optional keys
|
|
105
|
+
// are ABSENT (not present-as-undefined) — same semantics as the previous
|
|
106
|
+
// per-key conditional spreads without a branch per option.
|
|
107
|
+
const engineOptions = {
|
|
91
108
|
client,
|
|
92
109
|
request: finalRequest,
|
|
93
110
|
options: callModelOptions,
|
|
94
111
|
tools,
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}),
|
|
120
|
-
...(onTurnEnd !== undefined && {
|
|
121
|
-
onTurnEnd,
|
|
122
|
-
}),
|
|
123
|
-
...(allowFinalResponse !== undefined && {
|
|
124
|
-
allowFinalResponse,
|
|
125
|
-
}),
|
|
126
|
-
});
|
|
112
|
+
stopWhen,
|
|
113
|
+
state,
|
|
114
|
+
requireApproval,
|
|
115
|
+
approveToolCalls,
|
|
116
|
+
rejectToolCalls,
|
|
117
|
+
context,
|
|
118
|
+
sharedContextSchema,
|
|
119
|
+
onTurnStart,
|
|
120
|
+
onTurnEnd,
|
|
121
|
+
allowFinalResponse,
|
|
122
|
+
strictFinalResponse,
|
|
123
|
+
hooks: hooks !== undefined ? resolveHooks(hooks) : undefined,
|
|
124
|
+
doomLoop,
|
|
125
|
+
signal,
|
|
126
|
+
toolTimeoutMs,
|
|
127
|
+
toolConcurrency,
|
|
128
|
+
asyncTools,
|
|
129
|
+
};
|
|
130
|
+
for (const key of Object.keys(engineOptions)) {
|
|
131
|
+
if (engineOptions[key] === undefined) {
|
|
132
|
+
delete engineOptions[key];
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return new ModelResult(engineOptions);
|
|
127
136
|
}
|
|
128
137
|
//# sourceMappingURL=call-model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-model.js","sourceRoot":"","sources":["../../src/inner-loop/call-model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"call-model.js","sourceRoot":"","sources":["../../src/inner-loop/call-model.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAM1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,MAAM,UAAU,SAAS,CAOvB,MAAsB,EACtB,OAEC,EACD,OAAwB;IAExB,qEAAqE;IACrE,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,KAAK,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,aAAa,EACb,eAAe,EACf,UAAU,EACV,GAAG,UAAU,EACd,GAAG,OAAO,CAAC;IAEZ,iGAAiG;IACjG,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpE,wEAAwE;IACxE,yEAAyE;IACzE,mEAAmE;IACnE,qEAAqE;IACrE,yEAAyE;IACzE,2DAA2D;IAC3D,IAAI,QAAQ,IAAI,KAAK,IAAI,UAAU,EAAE,QAAQ,KAAK,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAChF,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,yCAAyC;IACzC,iFAAiF;IACjF,0GAA0G;IAC1G,MAAM,YAAY,GAA4B;QAC5C,GAAG,UAAU;KACd,CAAC;IAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,YAAY,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;IACnC,CAAC;IAED,oEAAoE;IACpE,MAAM,gBAAgB,GAAmB;QACvC,GAAG,OAAO;QACV,OAAO,EAAE;YACP,GAAG,MAAM,CAAC,WAAW,CACnB,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,YAAY,EAAE,OAAO,IAAI,SAAS,CAAC,CAC7E;YACD,wBAAwB,EAAE,MAAM;SACjC;KACF,CAAC;IAEF,wEAAwE;IACxE,yEAAyE;IACzE,2DAA2D;IAC3D,MAAM,aAAa,GAA4B;QAC7C,MAAM;QACN,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,gBAAgB;QACzB,KAAK;QACL,QAAQ;QACR,KAAK;QACL,eAAe;QACf,gBAAgB;QAChB,eAAe;QACf,OAAO;QACP,mBAAmB;QACnB,WAAW;QACX,SAAS;QACT,kBAAkB;QAClB,mBAAmB;QACnB,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5D,QAAQ;QACR,MAAM;QACN,aAAa;QACb,eAAe;QACf,UAAU;KACX,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7C,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,WAAW,CACpB,aAA+D,CAChE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import type { OpenRouterCore } from '@openrouter/sdk/core';
|
|
2
|
+
import type { RequestOptions } from '@openrouter/sdk/lib/sdks';
|
|
3
|
+
import type * as models from '@openrouter/sdk/models';
|
|
4
|
+
import type { CallModelInput } from '../lib/async-params.js';
|
|
5
|
+
import type { ModelResult } from '../lib/model-result.js';
|
|
6
|
+
import type { StateAccessor, Tool } from '../lib/tool-types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Thrown by {@link resumeToolResults} (and the deferred tool `.resolve()` /
|
|
9
|
+
* `.fail()` / `.cancel()` methods) when the target task was already settled —
|
|
10
|
+
* the at-most-once guard against double resolution and replayed webhooks.
|
|
11
|
+
* Opt out per call with `ifSettled: 'ignore'`.
|
|
12
|
+
*/
|
|
13
|
+
export declare class ToolTaskAlreadySettledError extends Error {
|
|
14
|
+
readonly taskId: string;
|
|
15
|
+
readonly callId: string;
|
|
16
|
+
constructor(taskId: string, callId: string);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* One task resolution: identified by `taskId` (typical — it's what the
|
|
20
|
+
* external system knows) or `callId`, carrying either a successful `output`
|
|
21
|
+
* or an `error`. `status` refines error deliveries (default `'failed'`).
|
|
22
|
+
*/
|
|
23
|
+
export type ResumeToolResultEntry = ({
|
|
24
|
+
taskId: string;
|
|
25
|
+
callId?: never;
|
|
26
|
+
} | {
|
|
27
|
+
callId: string;
|
|
28
|
+
taskId?: never;
|
|
29
|
+
}) & ({
|
|
30
|
+
output: unknown;
|
|
31
|
+
error?: never;
|
|
32
|
+
} | {
|
|
33
|
+
error: string;
|
|
34
|
+
output?: never;
|
|
35
|
+
status?: 'failed' | 'cancelled' | 'expired';
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* Run configuration for continuing the conversation immediately after
|
|
39
|
+
* recording the results. Any `CallModelInput` field except `state` / `input`
|
|
40
|
+
* (the SDK supplies both — the resumed history already carries everything).
|
|
41
|
+
*/
|
|
42
|
+
export type ResumeRunConfig<TTools extends readonly Tool[]> = Omit<CallModelInput<TTools>, 'state' | 'input' | 'approveToolCalls' | 'rejectToolCalls'>;
|
|
43
|
+
/**
|
|
44
|
+
* The `tool_task_result` envelope injected as a user-role message when an
|
|
45
|
+
* async tool's result arrives. Never a second `function_call_output` — the
|
|
46
|
+
* pending placeholder already paired the original `function_call` in
|
|
47
|
+
* history, and providers reject duplicate outputs for one callId.
|
|
48
|
+
*/
|
|
49
|
+
export interface ToolTaskResultEnvelope {
|
|
50
|
+
type: 'tool_task_result';
|
|
51
|
+
tool: string;
|
|
52
|
+
taskId: string;
|
|
53
|
+
callId: string;
|
|
54
|
+
status: 'completed' | 'failed' | 'cancelled' | 'timed_out' | 'expired';
|
|
55
|
+
result?: unknown;
|
|
56
|
+
error?: string;
|
|
57
|
+
}
|
|
58
|
+
/** Build the user-role message carrying a task-result envelope. */
|
|
59
|
+
export declare function buildTaskResultMessage(envelope: ToolTaskResultEnvelope): models.BaseInputsUnion;
|
|
60
|
+
/**
|
|
61
|
+
* Deliver results for pending async tool tasks (started by `tool.deferred`,
|
|
62
|
+
* or background tasks orphaned across a run boundary) into a persisted
|
|
63
|
+
* conversation — typically from a different process than the one that
|
|
64
|
+
* started them (a webhook handler, a queue worker).
|
|
65
|
+
*
|
|
66
|
+
* This is the low-level, untyped entry point; prefer the typed `.resolve()`
|
|
67
|
+
* / `.fail()` / `.cancel()` methods on the deferred tool itself, which
|
|
68
|
+
* check `output` against the tool's `outputSchema` at compile time.
|
|
69
|
+
*
|
|
70
|
+
* Behavior:
|
|
71
|
+
* 1. Loads the conversation via `state`, resolves each entry to a pending
|
|
72
|
+
* task (by `taskId` or `callId`).
|
|
73
|
+
* 2. Enforces at-most-once settlement: an already-settled task throws
|
|
74
|
+
* {@link ToolTaskAlreadySettledError} (or is skipped with
|
|
75
|
+
* `ifSettled: 'ignore'`).
|
|
76
|
+
* 3. Validates each `output` against the named tool's `outputSchema` when
|
|
77
|
+
* the tool is present in `tools` — an invalid payload throws before
|
|
78
|
+
* anything is persisted or dispatched.
|
|
79
|
+
* 4. Appends a `tool_task_result` envelope (user-role message) per entry,
|
|
80
|
+
* marks the tasks settled, and persists the state. The conversation
|
|
81
|
+
* status becomes `'in_progress'` (or stays `'awaiting_async_tools'` when
|
|
82
|
+
* other tasks are still pending).
|
|
83
|
+
* 5. With `run` config: continues the conversation immediately and returns
|
|
84
|
+
* the `ModelResult`. Without: returns `null` — the recorded results ride
|
|
85
|
+
* along on the next `callModel({ state })`. When every entry was skipped
|
|
86
|
+
* under `ifSettled: 'ignore'` there is nothing new to deliver, so the
|
|
87
|
+
* function returns `null` WITHOUT running — a replayed webhook never
|
|
88
|
+
* triggers a duplicate continuation.
|
|
89
|
+
*
|
|
90
|
+
* SECURITY: this call injects a value the model will treat as a tool
|
|
91
|
+
* result. Authenticate the webhook/caller BEFORE invoking it — the SDK
|
|
92
|
+
* cannot do that for you. And PASS `tools`: without it the output is
|
|
93
|
+
* appended UNVALIDATED (no outputSchema to check against) — prefer the
|
|
94
|
+
* typed `.resolve()` methods, which always carry the tool's schema.
|
|
95
|
+
*
|
|
96
|
+
* CONCURRENCY: this is a read-modify-write over the StateAccessor. Two
|
|
97
|
+
* concurrent calls for the SAME conversation (e.g. two webhooks resolving
|
|
98
|
+
* two different tasks) can interleave load/save and the later save wins,
|
|
99
|
+
* silently dropping the earlier envelope. Serialize calls per conversation
|
|
100
|
+
* — a per-conversation lock or queue in your StateAccessor, or batch
|
|
101
|
+
* concurrent completions into one call via `results: [...]` (which settles
|
|
102
|
+
* any number of tasks atomically).
|
|
103
|
+
*
|
|
104
|
+
* HOOKS: PostToolUse / PostToolUseFailure do NOT fire here — hooks are
|
|
105
|
+
* run-scoped (a HooksManager passed to `callModel`), and this entry point
|
|
106
|
+
* runs outside any run, typically in another process. Deployments that
|
|
107
|
+
* audit tool outputs via hooks should scan webhook payloads in the webhook
|
|
108
|
+
* handler itself. In-process settlements (background tasks) DO fire these
|
|
109
|
+
* hooks at delivery.
|
|
110
|
+
*/
|
|
111
|
+
export declare function resumeToolResults<TTools extends readonly Tool[]>(client: OpenRouterCore, request: {
|
|
112
|
+
state: StateAccessor<TTools>;
|
|
113
|
+
/** Tools list — used to validate outputs against each tool's outputSchema. */
|
|
114
|
+
tools?: TTools;
|
|
115
|
+
results: ReadonlyArray<ResumeToolResultEntry>;
|
|
116
|
+
/** Behavior when a task is already settled. Default 'throw'. */
|
|
117
|
+
ifSettled?: 'throw' | 'ignore';
|
|
118
|
+
/** Continue the conversation immediately with this run configuration. */
|
|
119
|
+
run?: ResumeRunConfig<TTools>;
|
|
120
|
+
/**
|
|
121
|
+
* Ownership guard: every resolved task must belong to this tool (by
|
|
122
|
+
* name) or the call throws BEFORE anything is persisted. Set by the
|
|
123
|
+
* typed `.resolve()`/`.fail()`/`.cancel()` methods — a taskId from a
|
|
124
|
+
* webhook cannot settle a different tool's task through them.
|
|
125
|
+
*/
|
|
126
|
+
expectToolName?: string;
|
|
127
|
+
}, options?: RequestOptions): Promise<ModelResult<TTools> | null>;
|
|
128
|
+
//# sourceMappingURL=resume-tool-results.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume-tool-results.d.ts","sourceRoot":"","sources":["../../src/inner-loop/resume-tool-results.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,KAAK,MAAM,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAoB,aAAa,EAAE,IAAI,EAAkB,MAAM,sBAAsB,CAAC;AAIlG;;;;;GAKG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAM3C;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAChC;IACE,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB,GACD;IACE,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB,CACJ,GACC,CACI;IACE,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,GACD;IACE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,MAAM,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;CAC7C,CACJ,CAAC;AAEJ;;;;GAIG;AACH,MAAM,MAAM,eAAe,CAAC,MAAM,SAAS,SAAS,IAAI,EAAE,IAAI,IAAI,CAChE,cAAc,CAAC,MAAM,CAAC,EACtB,OAAO,GAAG,OAAO,GAAG,kBAAkB,GAAG,iBAAiB,CAC3D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mEAAmE;AACnE,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,CAAC,eAAe,CAK/F;AAqDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,SAAS,SAAS,IAAI,EAAE,EACpE,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE;IACP,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9C,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC/B,yEAAyE;IACzE,GAAG,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,EACD,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAkHrC"}
|