eve 0.46.0 → 0.47.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/CHANGELOG.md +25 -0
- package/dist/src/channel/schedule.d.ts +1 -0
- package/dist/src/channel/schedule.js +1 -1
- package/dist/src/chunks/{use-eve-agent-DI2j5XK8.js → use-eve-agent-CacMaX4P.js} +91 -43
- package/dist/src/chunks/{use-eve-agent-BH7Z6SDu.js → use-eve-agent-kmlFdOBB.js} +91 -43
- package/dist/src/cli/commands/info.d.ts +2 -0
- package/dist/src/cli/commands/info.js +2 -2
- package/dist/src/cli/dev/tui/prompt-commands.d.ts +2 -0
- package/dist/src/cli/dev/tui/prompt-commands.js +1 -1
- package/dist/src/cli/dev/tui/runner.d.ts +3 -0
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/client/message-reducer-primitives.d.ts +8 -0
- package/dist/src/client/message-reducer-primitives.js +1 -0
- package/dist/src/client/message-reducer-types.d.ts +2 -0
- package/dist/src/client/message-reducer.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +3 -2
- package/dist/src/compiled/@linqapp/chat-sdk-adapter/index.d.ts +2 -1
- package/dist/src/compiled/@linqapp/chat-sdk-adapter/index.js +3 -3
- package/dist/src/compiled/@vercel/sandbox/index.js +9 -15
- package/dist/src/compiled/@vercel/sandbox-delete/LICENSE +201 -0
- package/dist/src/compiled/@vercel/sandbox-delete/_async-retry.d.ts +8 -0
- package/dist/src/compiled/@vercel/sandbox-delete/_workflow-serde.d.ts +5 -0
- package/dist/src/compiled/@vercel/sandbox-delete/api-client/api-client.d.ts +1730 -0
- package/dist/src/compiled/@vercel/sandbox-delete/api-client/api-error.d.ts +29 -0
- package/dist/src/compiled/@vercel/sandbox-delete/api-client/base-client.d.ts +39 -0
- package/dist/src/compiled/@vercel/sandbox-delete/api-client/file-writer.d.ts +66 -0
- package/dist/src/compiled/@vercel/sandbox-delete/api-client/index.d.ts +2 -0
- package/dist/src/compiled/@vercel/sandbox-delete/api-client/validators.d.ts +907 -0
- package/dist/src/compiled/@vercel/sandbox-delete/api-client/with-retry.d.ts +10 -0
- package/dist/src/compiled/@vercel/sandbox-delete/auth/error.d.ts +15 -0
- package/dist/src/compiled/@vercel/sandbox-delete/auth/file.d.ts +18 -0
- package/dist/src/compiled/@vercel/sandbox-delete/auth/index.d.ts +6 -0
- package/dist/src/compiled/@vercel/sandbox-delete/auth/oauth.d.ts +111 -0
- package/dist/src/compiled/@vercel/sandbox-delete/auth/poll-for-token.d.ts +28 -0
- package/dist/src/compiled/@vercel/sandbox-delete/auth/project.d.ts +40 -0
- package/dist/src/compiled/@vercel/sandbox-delete/command.d.ts +292 -0
- package/dist/src/compiled/@vercel/sandbox-delete/constants.d.ts +15 -0
- package/dist/src/compiled/@vercel/sandbox-delete/execution-context.d.ts +116 -0
- package/dist/src/compiled/@vercel/sandbox-delete/filesystem.d.ts +258 -0
- package/dist/src/compiled/@vercel/sandbox-delete/index.d.ts +13 -0
- package/dist/src/compiled/@vercel/sandbox-delete/index.js +9 -0
- package/dist/src/compiled/@vercel/sandbox-delete/network-policy.d.ts +169 -0
- package/dist/src/compiled/@vercel/sandbox-delete/proxy.d.ts +55 -0
- package/dist/src/compiled/@vercel/sandbox-delete/sandbox-user.d.ts +211 -0
- package/dist/src/compiled/@vercel/sandbox-delete/sandbox.d.ts +1258 -0
- package/dist/src/compiled/@vercel/sandbox-delete/session.d.ts +435 -0
- package/dist/src/compiled/@vercel/sandbox-delete/snapshot.d.ts +238 -0
- package/dist/src/compiled/@vercel/sandbox-delete/utils/get-credentials.d.ts +21 -0
- package/dist/src/compiled/@vercel/sandbox-delete/utils/paginator.d.ts +16 -0
- package/dist/src/compiled/@vercel/sandbox-delete/utils/resolveSignal.d.ts +15 -0
- package/dist/src/compiled/@vercel/sandbox-delete/utils/sandbox-snapshot.d.ts +11 -0
- package/dist/src/compiled/@vercel/sandbox-delete/utils/types.d.ts +11 -0
- package/dist/src/compiled/_chunks/node/auth-DpzFWvTn.js +2 -0
- package/dist/src/compiled/_chunks/node/auth-QgeX8nBM.js +2 -0
- package/dist/src/compiled/_chunks/node/decode_jwt-Col8JOnf.js +7 -0
- package/dist/src/compiled/_chunks/node/version-DH6yRy-M.js +1 -0
- package/dist/src/compiled/_chunks/node/xdg-app-paths-Bys8q02u.js +1 -0
- package/dist/src/compiler/extension-compatibility.d.ts +20 -20
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/model-catalog.js +1 -1
- package/dist/src/context/build-callback-context.js +1 -1
- package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
- package/dist/src/context/keys.d.ts +2 -0
- package/dist/src/context/keys.js +1 -1
- package/dist/src/context/memory-tools.js +1 -1
- package/dist/src/context/providers/sandbox.js +1 -1
- package/dist/src/evals/context.js +1 -1
- package/dist/src/evals/session-content.d.ts +5 -0
- package/dist/src/evals/session-content.js +3 -0
- package/dist/src/evals/session.d.ts +1 -0
- package/dist/src/evals/session.js +1 -1
- package/dist/src/evals/types.d.ts +5 -0
- package/dist/src/execution/dispatch-runtime-actions-shared.js +1 -1
- package/dist/src/execution/eve-workflow-attributes.d.ts +3 -0
- package/dist/src/execution/eve-workflow-attributes.js +1 -1
- package/dist/src/execution/runtime-context.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker-base-setup.d.ts +4 -4
- package/dist/src/execution/sandbox/bindings/docker-base-setup.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker-session.d.ts +1 -1
- package/dist/src/execution/sandbox/bindings/docker-session.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker.js +1 -1
- package/dist/src/execution/sandbox/bindings/just-bash-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-lifecycle.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel-base-runtime.d.ts +4 -0
- package/dist/src/execution/sandbox/bindings/vercel-base-runtime.js +2 -2
- package/dist/src/execution/sandbox/bindings/vercel-lifecycle.d.ts +8 -0
- package/dist/src/execution/sandbox/bindings/vercel-lifecycle.js +1 -0
- package/dist/src/execution/sandbox/bindings/vercel-sdk-types.d.ts +3 -0
- package/dist/src/execution/sandbox/bindings/vercel.d.ts +2 -1
- package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
- package/dist/src/execution/sandbox/ensure.d.ts +2 -0
- package/dist/src/execution/sandbox/ensure.js +1 -1
- package/dist/src/execution/sandbox/require-sandbox.js +1 -1
- package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
- package/dist/src/execution/tools/connection-search.js +2 -2
- package/dist/src/execution/tools/file-state.js +1 -1
- package/dist/src/execution/tools/load-skill.js +1 -1
- package/dist/src/execution/tools/subagent/local.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/harness/approval-delivery-coordinator.js +1 -1
- package/dist/src/harness/attachment-staging.js +1 -1
- package/dist/src/harness/authorization.js +1 -1
- package/dist/src/harness/current-messages.d.ts +15 -0
- package/dist/src/harness/current-messages.js +1 -0
- package/dist/src/harness/emission.d.ts +1 -8
- package/dist/src/harness/emission.js +1 -1
- package/dist/src/harness/instrumentation/runtime-context.js +1 -1
- package/dist/src/harness/instrumentation/state.js +1 -1
- package/dist/src/harness/ordered-stream-emitter.js +1 -1
- package/dist/src/harness/step-hooks.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/harness/tools.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/model-catalog.js +1 -1
- package/dist/src/packages/eve-catalog/src/index.js +1 -1
- package/dist/src/protocol/message.d.ts +29 -2
- package/dist/src/protocol/message.js +2 -2
- package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +2 -2
- package/dist/src/public/definitions/connections/tool-call.d.ts +2 -0
- package/dist/src/public/definitions/hook.d.ts +1 -0
- package/dist/src/public/definitions/sandbox-backend.d.ts +1 -1
- package/dist/src/public/sandbox/index.d.ts +1 -1
- package/dist/src/runtime/agent/resolve-model.js +1 -1
- package/dist/src/runtime/connections/mcp-client.d.ts +1 -1
- package/dist/src/runtime/connections/mcp-client.js +1 -1
- package/dist/src/runtime/connections/openapi-client.d.ts +1 -1
- package/dist/src/runtime/connections/openapi-client.js +1 -1
- package/dist/src/runtime/connections/principal.js +1 -1
- package/dist/src/runtime/connections/provided-arguments.d.ts +1 -0
- package/dist/src/runtime/connections/provided-arguments.js +1 -1
- package/dist/src/sandbox/state.d.ts +2 -0
- package/dist/src/setup/integrations/registry.js +1 -1
- package/dist/src/setup/integrations/shopify/setup.d.ts +20 -0
- package/dist/src/setup/integrations/shopify/setup.js +1 -0
- package/dist/src/setup/integrations/shopify/templates.d.ts +1 -0
- package/dist/src/setup/integrations/shopify/templates.js +88 -0
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/setup/scaffold/create/web-template.d.ts +1 -1
- package/dist/src/setup/scaffold/create/web-template.js +4 -2
- package/dist/src/shared/connection-types.d.ts +3 -1
- package/dist/src/shared/sandbox-backend.d.ts +9 -0
- package/dist/src/shared/sandbox-definition.d.ts +5 -4
- package/dist/src/shared/sandbox-session.d.ts +4 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tasks/delivery-policy.d.ts +12 -0
- package/dist/src/tasks/delivery-policy.js +1 -0
- package/dist/src/tracing/agent-trace-context-store.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/concepts/sessions-runs-and-streaming.md +5 -2
- package/docs/connections/mcp.mdx +1 -1
- package/docs/connections/openapi.mdx +1 -1
- package/docs/evals/cases.mdx +11 -2
- package/docs/evals/judge.mdx +15 -0
- package/docs/evals/overview.mdx +2 -2
- package/docs/guides/client/streaming.mdx +18 -15
- package/docs/guides/dev-tui.md +2 -1
- package/docs/guides/instrumentation.md +1 -0
- package/docs/guides/session-context.md +2 -2
- package/docs/sandbox.mdx +25 -2
- package/docs/schedules.mdx +2 -0
- package/docs/tools/overview.mdx +2 -0
- package/package.json +3 -2
- package/dist/src/compiled/_chunks/node/auth-BaNbsImr.js +0 -2
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{createErrorId,createLogger,formatError,logError,recordErrorOnSpan}from"#internal/logging.js";import{normalizeChannelAudience}from"#shared/channel-audience.js";import{
|
|
1
|
+
import{createErrorId,createLogger,formatError,logError,recordErrorOnSpan}from"#internal/logging.js";import{normalizeChannelAudience}from"#shared/channel-audience.js";import{contextStorage}from"#context/container.js";import{AuthKey,ChannelInstrumentationKey,ParentSessionKey,ParentTraceContextKey,ScheduleIdKey,SessionCallbackKey,SessionTraceSeedKey,TurnTaskDeliveryKey,TurnTaskStateKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{resolveAgentsAnnouncement}from"#harness/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{TASK_UPDATE_TOOL_NAME}from"#tools/framework/task-contract.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createRuntimeActionRequestFromToolCall,resolvePendingRuntimeActions,setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt}from"#harness/workflow-runtime-action-state.js";import{instrumentationHooksForAudience,instrumentationHooksForDecision,shouldCaptureInstrumentationContent}from"#harness/instrumentation/content-policy.js";import{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{getInstrumentationRuntime}from"#harness/instrumentation/runtime.js";import{ASK_QUESTION_TOOL_NAME}from"#harness/request-input-tool.js";import{getSupersededAuthorizationChallenges,isAuthorizationSignal,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{activeTurnId}from"#harness/active-turn-id.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#harness/instrumentation/native-events.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{createBackgroundToolCallBatch}from"#harness/background-tools.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{resolveParentLineage}from"#harness/parent-lineage.js";import{prepareTurnTraceContext}from"#harness/prepare-trace-context.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{attemptIdempotencyKey}from"#harness/instrumentation/lifecycle.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{readToolInterrupt}from"#harness/tool-interrupts.js";import{applyAudienceCeiling}from"#shared/instrumentation-content.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";import{requireSessionModelReference}from"#harness/types.js";import{createWorkflowLifecycle}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{createCurrentMessages}from"#harness/current-messages.js";import{applySessionLimitContinuation,enforceSessionTokenLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalPolicyTools}from"#harness/approval-delivery-coordinator.js";import{buildTelemetryRuntimeContext}from"#harness/instrumentation/runtime-context.js";import{createAiSdkHookBridge}from"#harness/ai-sdk-hook-bridge.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{getInstrumentationConfig}from"#harness/instrumentation/config.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{resolveDeliveryPolicy}from"#tasks/delivery-policy.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#harness/ai-sdk-telemetry.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#harness/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function enrichTelemetry(e,t,n,r,i,a){if(e?.action===`drop`||t===void 0&&a===void 0)return;let o={};for(let e of Object.keys(i??{}))o[e]=!0;let s=e===void 0?void 0:applyAudienceCeiling(e,n);return{functionId:t?.functionId??r,includeRuntimeContext:o,integrations:a===void 0?void 0:[a,...getRegisteredTelemetryIntegrations()],isEnabled:!0,recordInputs:(s?.action===`record`?s.recordInputs:shouldCaptureInstrumentationContent(n))&&(t?.recordInputs??!1),recordOutputs:(s?.action===`record`?s.recordOutputs:shouldCaptureInstrumentationContent(n))&&(t?.recordOutputs??!1)}}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
|
|
2
2
|
|
|
3
|
-
`)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function getTurnTraceState(e){return e.state?.[TURN_TRACE_STATE_KEY]}function setTurnTraceState(e,t){let n={traceId:t.traceId,spanId:t.spanId,traceFlags:t.traceFlags};return{...e,state:{...e.state,[TURN_TRACE_STATE_KEY]:n}}}function resolveStepOtelContext(e,t,n){if(t)return trace.setSpan(context.active(),t);if(e){let e=getTurnTraceState(n);if(e){let t=trace.wrapSpanContext({isRemote:!0,traceId:e.traceId,spanId:e.spanId,traceFlags:e.traceFlags});return trace.setSpan(context.active(),t)}}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(t){let n=t.handleEvent,h=getInstrumentationRuntime(),y=h?.otelSettings,ne=getInstrumentationConfig(),re=h?.runtimeContextResolvers;y!==void 0&&ensureOtelIntegration();let x=y===void 0?void 0:trace.getTracer(`eve`),S=t.runtimeIdentity?.agentName;async function runStep(e,t){let n=resolveStepInstrumentationDecision(y,S),r;if(x&&n?.action!==`drop`&&hasStepInput(t)){let t=y?.functionId??S,n={"eve.version":eveVersion,"eve.environment":environment,"eve.session.id":e.sessionId};t&&(n[`ai.telemetry.functionId`]=t),r=x.startSpan(`ai.eve.turn`,{attributes:n})}let i=resolveStepOtelContext(x,r,e),executeStep=()=>executeStepBody(e,t,r,n);try{return i?await context.with(i,executeStep):await executeStep()}finally{r?.end()}}async function executeStepBody(h,x,C,T){let E=h,le=createHistoryViewPreparer({previous:t.historyView,projector:t.historyProjector});le(E.history,E.state);let projectHistory=(e,t)=>le(e,t).messages;C&&(E=setTurnTraceState(E,C.spanContext()));let D=getHarnessEmissionState(E.state),O=contextStorage.getStore(),ue=O?.get(ChannelInstrumentationKey),k=normalizeChannelAudience(ue?.metadata.audience),A=T===void 0?instrumentationHooksForAudience(t.instrumentation?.hooks,k):instrumentationHooksForDecision(t.instrumentation?.hooks,T,k),j=O?.get(ParentSessionKey),de=O?.get(ChannelKey),fe=O?.get(SessionCallbackKey),pe=j!==void 0||fe!==void 0,M=(fe?.taskId!==void 0||readTaskIdFromInboxToken(String(de?.state?.parentContinuationToken??``))!==void 0)&&t.tools.has(TASK_UPDATE_TOOL_NAME),me=resolveParentLineage(j,de),he=O?.get(ParentTraceContextKey),ge=O?.get(SessionTraceSeedKey),_e,N=createInstrumentationHandleEvent({agentName:t.runtimeIdentity?.agentName,channelAudience:k,channelKind:ue?.kind,getAttemptScope:()=>_e,handleEvent:n,hooks:A,parentLineage:me,parentTraceContext:he,rootSessionId:j?.rootSessionId,sessionId:E.sessionId,turnId:activeTurnId(D)}),failModelSelection=async(n,r)=>{if(throwIfTurnAborted(t.abortSignal),C&&recordErrorOnSpan(C,n),!N)throw n;let a=createErrorId(),o=toErrorMessage(n);return log.error(`model selection failed terminally`,{error:n,errorId:a,sessionId:E.sessionId,turnId:r.turnId}),await emitFailedStep(N,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:a},message:o,sessionId:E.sessionId}),{next:t.mode===`task`||pe?{done:!0,isError:!0,output:o}:{done:!0,output:``},session:E}},preparePreambleTrace=async()=>{let e=C?.spanContext(),n=e!==void 0&&isValidSpanContext(e)?{spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}:void 0;return await prepareTurnTraceContext({agentName:t.runtimeIdentity?.agentName,channelAudience:k,channelType:ue?.channelType,instrumentation:t.instrumentation,parentLineage:me,parentTraceContext:he,rootSessionId:j?.rootSessionId??E.rootSessionId??E.sessionId,sequence:D.sequence,sessionId:E.sessionId,sessionStarted:D.sessionStarted,traceContext:n,traceSeed:ge,turnId:`turn_${D.sequence}`})};if(t.clearOnly===!0)return E={...E,compaction:{recentWindowSize:E.compaction.recentWindowSize,threshold:E.compaction.threshold,thresholdPercent:E.compaction.thresholdPercent},history:[],state:clearMemorySessionState(E.state)},await N?.(createContextClearedEvent({sequence:D.sequence,sessionId:E.sessionId,turnId:activeTurnId(D)})),await N?.(createSessionWaitingEvent()),{next:null,session:E};if(t.compactOnly===!0){if(E.history.length>0)try{let e=contextStorage.getStore(),n=await resolveActiveRuntimeModel({config:t,ctx:e,session:E});E=n.session;let r=await maybeCompact({abortSignal:t.abortSignal,auth:e?.get(AuthKey)??null,emit:N,emissionState:{...D,turnId:activeTurnId(D)},force:!0,historyProjector:t.historyProjector,messages:[...E.history],model:n.model,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:E,telemetry:enrichTelemetry(T,y,k,S)??void 0});E={...r.session,compaction:{recentWindowSize:r.session.compaction.recentWindowSize,threshold:r.session.compaction.threshold,thresholdPercent:r.session.compaction.thresholdPercent},history:r.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:E.sessionId})}return await N?.(createSessionWaitingEvent()),{next:null,session:E}}let P=consumeDeferredStepInput({input:x,preferCurrentInput:t.mode!==`conversation`&&x!==void 0&&hasPendingApprovalBatch(E),session:E});E=P.session;let F=await resolvePendingRuntimeActions({emit:N,session:E,stepInput:P.input});if(F.outcome===`unresolved`)return{next:null,session:F.session};E=F.session;let ve=getPendingInputRequestIds(E.state),I=convertStaleResponsesToUserMessage({history:F.messages,pendingRequestIds:ve,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:ve,stepInput:P.input})}),L=I.stepInput,ye=I.kind===`converted`?{...L,message:I.displayMessage}:L,R=contextStorage.getStore();R!==void 0&&t.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalPolicyTools({session:E,stepInput:L})&&await t.resolveStepDynamicTools({ctx:R,event:createStepStartedEvent({modelId:E.agent.modelReference?.id??`dynamic`,sequence:D.sequence,stepIndex:D.stepIndex,turnId:D.turnId}),messages:projectHistory(F.messages,E.state)});let z=await coordinateApprovalDelivery({session:E,stepInput:L,tools:buildResponseAuthorizationTools({authoredTools:t.tools,context:R})});if(E=z.session,N){for(let e of z.feedback)await N(createMessageCompletedEvent({message:e,sequence:D.sequence,stepIndex:D.stepIndex,turnId:D.turnId}));let e=getApprovalAuditState(E.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await N(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:D.sequence,stepIndex:D.stepIndex,turnId:D.turnId})),E={...E,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:E.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await N(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:D.sequence,stepIndex:D.stepIndex,turnId:D.turnId})),E={...E,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:E.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await N(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:D.sequence,stepIndex:D.stepIndex,turnId:D.turnId})),E={...E,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:E.state})}}if(z.kind===`park`)return{next:null,session:E};if(z.kind===`continue-coordination`)return{next:runStep,session:z.stepInput===void 0?E:queueDeferredStepInput(E,z.stepInput)};if(z.challenges.length>0){if(N)for(let e of z.challenges)await N(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:D.sequence,stepIndex:D.stepIndex,turnId:D.turnId,webhookUrl:e.hookUrl}));let e=z.stepInput===void 0?E:queueDeferredStepInput(E,z.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:z.challenges})}}}let B=resolvePendingInput({deferMessagesWhileApprovalsPending:t.mode!==`conversation`,history:F.messages,resolveApprovalKey:resolveApprovalKeyFromTools(t.tools),session:E,stepInput:z.stepInput});if(B.outcome===`unresolved`){let e=F.outcome===`resolved`?{...B.session,history:[...F.messages]}:B.session;if(N&&t.mode===`conversation`&&B.deferredMessage===!0&&hasStepInput(x)){O!==void 0&&prepareDynamicInstructionPreamble(O,projectHistory(e.history,e.state));let n=[];try{let e=await preparePreambleTrace();D=await emitTurnPreamble(N,ye??{},D,t.runtimeIdentity,e)}catch(t){if(n=O===void 0?[]:drainDynamicInstructionUserMessages(O),e={...e,history:[...e.history,...n]},E=e,!isDynamicModelSelectionError(t))throw t;return failModelSelection(t,{sessionStarted:!0,sequence:D.sequence,stepIndex:0,turnId:`turn_${D.sequence}`})}return n=O===void 0?[]:drainDynamicInstructionUserMessages(O),e={...e,history:[...e.history,...n]},D=await emitTurnEpilogue(N,D,t.mode),{next:null,session:setHarnessEmissionState(e,D)}}return F.outcome===`resolved`?(N&&t.mode===`conversation`&&(D=await emitTurnEpilogue(N,D,t.mode),e=setHarnessEmissionState(e,D)),{next:null,session:e}):{next:null,session:B.session}}if(B.resolvedInputs!==void 0)for(let e of B.resolvedInputs)A!==void 0&&await publishInputResolutions({batch:e,hooks:A,sessionId:E.sessionId}),N&&await N(createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));if(N&&B.rejectedActions)for(let e of B.rejectedActions)for(let t of e.results)await N(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let V=[];if(L?.context!==void 0&&B.deferredContext!==!0)for(let e of L.context)V.push({content:e,role:`user`});let be=normalizeUserContent(L?.message),xe=be!==void 0&&!B.deferredMessage&&!B.consumedMessage?await stageAttachmentsToSandbox(be):void 0;xe!==void 0&&V.push({content:xe,role:`user`});let H=[],U;if(N&&hasStepInput(x)){O!==void 0&&(prepareDynamicInstructionPreamble(O,projectHistory(B.session.history,B.session.state)),prepareMemoryPreamble(O,{history:B.messages,input:V,state:B.session.state}));try{let e=await preparePreambleTrace();D=await emitTurnPreamble(N,ye??{},D,t.runtimeIdentity,e)}catch(e){if(H=O===void 0?[]:drainDynamicInstructionUserMessages(O),U=O===void 0?void 0:drainMemoryCommit(O),E={...B.session,history:[...U?.history??B.session.history,...H],state:U?.state??B.session.state},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:D.sequence,stepIndex:0,turnId:`turn_${D.sequence}`})}H=O===void 0?[]:drainDynamicInstructionUserMessages(O),U=O===void 0?void 0:drainMemoryCommit(O),C&&C.setAttribute(`eve.turn.id`,D.turnId)}let Se=U?.history??B.session.history,Ce=B.session.history.length;E=setHarnessEmissionState({...B.session,history:[...Se,...H],state:U?.state??B.session.state},D);let W=[...U?.history??B.messages.slice(0,Ce),...H,...U===void 0?B.messages.slice(Ce):[]],we=await applySessionLimitContinuation({config:t,emit:N,emissionState:D,limitContinuation:B.limitContinuation,session:E});if(we.result!==null)return we.result;E=we.session;let Te=getAgentHandleStore(E.state);if(Te!==void 0&&!hasUnansweredToolCall(W)&&Te.handles.some(e=>e.phase===`addressed`)!==!0){let e=resolveAgentsAnnouncement({messages:projectHistory(W,E.state),store:Te});e!==void 0&&W.push({content:e,role:`user`})}W=[...W,...V];let G=projectHistory(W,E.state),K=O,Ee;try{K!==void 0&&t.dispatchDynamicModelEvent!==void 0&&await t.dispatchDynamicModelEvent({ctx:K,event:{data:{sequence:D.sequence,stepIndex:D.stepIndex,turnId:D.turnId},type:`step.started`},messages:G}),Ee=await resolveActiveRuntimeModel({config:t,ctx:K,session:E})}catch(e){return failModelSelection(e,D)}E=Ee.session;let q=Ee.model,De=detectPromptCachePath(q),J=De.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,Oe=buildGatewayAttributionHeaders(q,t.runtimeIdentity),ke=await maybeCompact({abortSignal:t.abortSignal,auth:K?.get(AuthKey)??null,emit:N,emissionState:D,historyProjector:t.historyProjector,messages:[...W],model:q,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:E,telemetry:enrichTelemetry(T,y,k,S)??void 0});E=ke.session,ke.compacted&&(W=ke.messages),G=normalizeModelMessages(projectHistory(W,E.state)),N&&await emitStepStarted(N,D,requireSessionModelReference(E).id,G);let Ae=getApprovedTools(E),Y=K?.get(TurnTaskDeliveryKey),je=E.outputSchema!==void 0||K===void 0||K.get(ParentSessionKey)!==void 0?void 0:Y===`pending`?TASK_DELIVERY_PENDING_INSTRUCTION:Y===`settled`?TASK_DELIVERY_SETTLED_INSTRUCTION:isScheduleAppAuth(K.get(AuthKey))?CONDITIONAL_DELIVERY_INSTRUCTION:Y===`initiating`?TASK_DELIVERY_INITIATING_INSTRUCTION:void 0,Me=je!==void 0&&Y!==`initiating`,Ne=await hydrateSandboxAttachments(G),X=[],Pe=[];for(let e of Ne)e.role===`system`?X.push(e):Pe.push(e);if(K!==void 0){X.push(...buildDynamicInstructionMessages(K));let e=K.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&X.push({role:`system`,content:e});let t=K.get(TurnTaskStateKey);t!==void 0&&X.push({role:`system`,content:t})}je!==void 0&&X.push({role:`system`,content:je});let Fe=renderPendingApprovalsInstruction(getPendingInputBatches(E.state).flatMap(e=>e.requests));Fe!==void 0&&X.push({role:`system`,content:Fe});let Ie=Pe,prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=E.agent.system?[{role:`system`,content:E.agent.system}]:[],r=X.length>0||t.length>0?[...t,...n,...X]:void 0,i=r!==void 0&&J?applySystemCacheBreakpoint(r,J):r,a=i===void 0?E.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:buildTelemetryRuntimeContext({eveVersion,authored:ne,emissionState:D,environment,modelInput:{instructions:a,messages:Ie},providerResolvers:re,session:E})}},Le=t.tools,runSingleModelCall=async e=>{let{instructions:n,telemetryRuntimeContext:i={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(i[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...Ie,{role:`user`,content:e.trailingUserNote}]:Ie,o=buildHarnessToolsWithDynamicSubagents(t.tools,K),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({delegatedCaller:M,session:E,tools:o});Le=l;let u=await buildToolSetWithProviderTools({approvedTools:Ae,backgroundBatch:c,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(E),tools:l,webSearchProvider:t.webSearchProvider});if(K!==void 0){let n=getAdvertisedTools({delegatedCaller:M,session:E,tools:buildDynamicTools(K)}),r=buildToolSetFromDefinitions({approvedTools:Ae,backgroundBatch:c,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){if(l.get(e)?.runtimeAction!==void 0)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);u[e]=t}}E.outputSchema!==void 0&&(u[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(E.outputSchema));let d=N===void 0?void 0:({tools:e})=>createWorkflowLifecycle({emit:N,emissionState:D,tools:e}),f=t.workflow===!0?{lifecycle:d,maxSubagents:t.workflowMaxSubagents}:void 0,p=await getAdvertisedTools({delegatedCaller:M,modelTools:u,session:E,tools:l,workflow:f});E=p.session;let m=p.modelTools,h=J?applyLastToolCacheBreakpoint(m,J):m,g=activeTurnId(D),_=A===void 0?void 0:{attemptId:`${E.sessionId}:${g}:${D.stepIndex}:${e.attemptIndex}`,attemptIndex:e.attemptIndex,channelAudience:k,functionId:y?.functionId??S,rootSessionId:j?.rootSessionId??E.sessionId,sessionId:E.sessionId,stepIndex:D.stepIndex,turnId:g};_e=_;let ee=T?.action===`drop`||_===void 0||A===void 0?void 0:createAiSdkHookBridge(_,A,t.instrumentation?.runInContext,i),v=buildStepHooks({auth:K?.get(AuthKey)??null,cachePath:De,emit:N,emissionState:D,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:J,session:E}),te=new ToolLoopAgent({headers:Oe,instructions:n,model:q,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||c.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:v.onStepFinish,prepareStep:v.prepareStep,reasoning:E.agent.reasoning,runtimeContext:i,stopWhen:isStepCount(1),telemetry:enrichTelemetry(T,y,k,S,i,ee),toolApproval:buildToolApproval(m),tools:h}),executeModelCall=async()=>{if(N){let e=[...t.tools].filter(([e,t])=>t.runtimeAction!==void 0&&l.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await te.stream({abortSignal:t.abortSignal,messages:a}),{emittedActionCallIds:i,handledInlineToolResultCallIds:o,invalidInputToolCallIds:s,inlineAuthorizationResults:c,trailingInlineToolResultParts:u}=await emitStreamContent(N,D,r.fullStream,{excludedActionToolNames:n,tools:l});throwIfTurnAborted(t.abortSignal);let[d,f]=await Promise.all([v.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&c.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(N,D,d,{emittedActionCallIds:i,excludedActionCallIds:s,excludedActionToolNames:n,handledInlineToolResultCallIds:o,tools:l});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of c)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:s,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await te.generate({abortSignal:t.abortSignal,messages:a});throwIfTurnAborted(t.abortSignal);let n=await v.stepResult;if(isEmptyModelResponse(n)&&extractToolResultCallIds(e.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:e.responseMessages,stepResult:n})};try{let e=await executeModelCall();return _!==void 0&&await A?.publish({idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.completed`}),e}catch(e){return _!==void 0&&await A?.publish({error:e,idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.failed`}),rethrowNoOutputAsEmptyResponse(e)}},Re=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:Re++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:E.sessionId,turnId:D.turnId},t.abortSignal),ze=prepareModelCallInput(),Be=await continuePendingWorkflowInterrupt({childResults:L?.runtimeActionResults,config:t,emit:N,emissionState:D,runStep,session:E,tools:buildHarnessToolsWithDynamicSubagents(t.tools,K)});if(Be!==null)return Be;let Ve=await enforceSessionTokenLimit({config:t,emit:N,emissionState:D,messages:G,session:E});if(Ve!==null)return Ve;let Z;try{Z=await runOneModelCall({preparedInput:ze,suppressStepStartedEmission:!0})}catch(n){throwIfTurnAborted(t.abortSignal);let r=await runModelCallRecoveryPipeline({error:n,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:E.sessionId,turnId:D.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:Me,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:E.sessionId,turnId:D.turnId})]});if(throwIfTurnAborted(t.abortSignal),r.outcome===`recovered`)Z=r.result;else{let n=r.error;if(C&&recordErrorOnSpan(C,n),!N)throw n;let a=extractWorkflowStreamWriteErrorDetails(n);if(a!==null){let t=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...a,errorId:t,error:n,sessionId:E.sessionId,turnId:D.turnId}),D=await emitRecoverableFailedTurn(N,D,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:E.continuationToken,details:{...a,errorId:t},message:toErrorMessage(n)}),{next:null,session:setHarnessEmissionState(E,D)}}let o=classifyModelCallError(n),s=createErrorId(),c=summarizeKnownError(n),l=c===null?extractUpstreamRejectionMessage(n):null,u=c?.message??l?.message??toErrorMessage(n),d=c?.hint===void 0?u:`${u} ${c.hint}`,f=extractModelCallErrorDetails(n),p=buildModelCallFailureDetails({catalogSummary:c,error:n,errorId:s,modelCallDetails:f,upstreamRejection:l}),m=buildModelCallFailureLogFields({error:n,errorId:s,modelCallDetails:f,recognized:c!==null||l!==null,sessionId:E.sessionId,turnId:D.turnId});if(o===`terminal`)return c===null?log.error(l?.message??`model call failed terminally`,m):log.error(`${c.name}: ${c.message}`,{errorId:s,hint:c.hint,sessionId:E.sessionId,turnId:D.turnId}),await emitFailedStep(N,D,{code:`MODEL_CALL_FAILED`,details:p,message:u,sessionId:E.sessionId}),{next:t.mode===`task`||pe?{done:!0,isError:!0,output:d}:{done:!0,output:``},session:E};if(t.mode===`task`){if(o===`recoverable`&&!(n instanceof EmptyModelResponseError))throw log.warn(l?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,m),n;return log.error(l?.message??`model call failed; failing the task run`,m),await emitFailedStep(N,D,{code:`MODEL_CALL_FAILED`,details:p,message:u,sessionId:E.sessionId}),{next:{done:!0,isError:!0,output:d},session:E}}log.error(l?.message??`model call failed — parking session for retry by the user`,m),D=await emitRecoverableFailedTurn(N,D,{code:`MODEL_CALL_FAILED`,continuationToken:E.continuationToken,details:p,message:u});let h={isError:!0,output:d};return E={...E,outputSchema:void 0},{next:null,session:setHarnessEmissionState(E,D),settledTurn:h}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(E.state),turnId:D.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});E=setTurnUsageState(E,Q);let $;try{$=formatLanguageModelGatewayId(q)}catch{$=void 0}return await setEveAttributes({"$eve.model":$,"$eve.input_tokens":Q.inputTokens,"$eve.output_tokens":Q.outputTokens,"$eve.cache_read_tokens":Q.cacheReadTokens,"$eve.cache_write_tokens":Q.cacheWriteTokens,"$eve.cost_usd":Q.sawCost?Q.costUsd:void 0,"$eve.tool_count":t.tools.size}),handleStepResult({config:t,emit:N,emissionState:D,delegatedCaller:M,modelPromptMessageCount:G.length,promptMessages:W,result:Z,runStep,session:E,runtimeActionTools:Le})}return runStep}function resolveStepInstrumentationDecision(e,t){if(e===void 0)return;let n=contextStorage.getStore(),r=n?.get(SessionTraceSeedKey);if(r?.decision!==void 0)return r.decision;let i=n?.get(ChannelInstrumentationKey),o=normalizeChannelAudience(i?.metadata.audience);return r===void 0?resolveTracePolicy(e.tracePolicy,{agentName:t,audience:o,channelType:i?.channelType}):resolveTracePolicyDecision(isSampledTrace(r),o)}function isValidSpanContext(e){return/^[0-9a-f]{32}$/u.test(e.traceId)&&e.traceId!==`00000000000000000000000000000000`&&/^[0-9a-f]{16}$/u.test(e.spanId)&&e.spanId!==`0000000000000000`}function extractTokenUsageDelta(e){let t=e.usage;if(!(t===void 0&&e.costUsd===void 0))return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:r,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(r,i),...a}:{errorId:i,message:toErrorMessage(r),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}function hasUnansweredToolCall(e){let t=new Set,n=new Set;for(let r of e)if(Array.isArray(r.content))for(let e of r.content)typeof e!=`object`||!e||(e.type===`tool-call`&&t.add(e.toolCallId),e.type===`tool-result`&&n.add(e.toolCallId));for(let e of t)if(!n.has(e))return!0;return!1}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:a}=e,{emissionState:o,session:s}=e,c=resolveAssistantStepText(i.response.messages,i.text),l=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(c),u=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),d=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...u.map(e=>e.toolCallId)]),f=l?[]:appendMissingToolResultMessages({append:u.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),p=l?null:c,m=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&m.add(e.toolCallId);let h=normalizeProviderToolHistory({messages:f,providerExecutedOutcomeIds:m}),g=h.messages,_={...s,compaction:createNextCompactionConfig(s.compaction,e.modelPromptMessageCount,i)},ee=t.workflow===!0?readWorkflowContinuationSecurity(_):void 0;if(ee!==void 0){let e=await getWorkflowSandboxInterrupt(i,ee);if(e!==void 0){if(!isWorkflowRuntimeActionInterrupt(e))throw Error(`Unsupported Workflow interrupt kind "${e.payload.kind}".`);return parkOnWorkflowInterrupt({baseSession:_,emissionState:o,interrupt:e,promptMessages:r,responseMessages:g})}}let v=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),ne=new Set(v.map(e=>e.action.callId)),re=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...d,...ne])}),b=[...v,...re],ie=renderPendingApprovalsSnippet(v),ae=[...r,...ie===void 0?[]:[{content:ie,role:`user`}]],S=getAdvertisedTools({delegatedCaller:e.delegatedCaller,session:_,tools:e.runtimeActionTools}),oe=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.runtimeAction!==void 0).filter(e=>S.get(e.toolName)?.runtimeAction===void 0?(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:_.sessionId,toolName:e.toolName}),!1):!0).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:S}));if(oe.length>0){if(b.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:oe,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:g,session:{..._,history:[...r]}}),advanceStep(o))};let e=setPendingRuntimeActionBatch({actions:oe,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:g,session:{..._,history:ae}});return e=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:b,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:b,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(o))}}if(b.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:b,responseAuthRequiredRequestIds:v.filter(t=>{let n=e.get(t.action.toolName)?.approval;return n!==void 0&&typeof n!=`function`&&n.response!==void 0}).map(e=>e.requestId),responseMessages:g,session:{..._,history:ae}});return n&&(await n(createInputRequestedEvent({requests:b,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),r=setHarnessEmissionState(r,o))),{next:hasDeferredStepInput(r)?a:null,session:r}}let se=findAuthorizationSignalFromToolResults(i.toolResults);if(se){let{challenges:e}=se;if(n){for(let t of getSupersededAuthorizationChallenges(_.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode))}return{next:null,session:setHarnessEmissionState({..._,history:[...r],state:setPendingAuthorization(_.state,{challenges:e})},o)}}let ce=g,C=[...r,...ce],w={..._,history:C};return!(w.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(ce.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasDeferredStepInput(w))?(n&&(o=advanceStep(o),w=setHarnessEmissionState(w,o)),{next:a,session:w}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:w.outputSchema,session:w,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:w.outputSchema,session:w,stepOutput:p})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r,i){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r,i)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema:void 0},t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema:void 0},t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let i=e.emit===void 0?void 0:createWorkflowLifecycle({emit:e.emit,emissionState:e.emissionState,skipReplayed:!0,tools:e.tools}),a=getWorkflowContinuationSecurity(e.session),o;try{let t=buildWorkflowHostTools({tools:e.tools}),r=e.childResults??[],s=n,c=0;for(;;){o=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:a,interrupt:s,lifecycle:i,resolution:r[c]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(o,a);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||c+1>=r.length)break;let l=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(l===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);c++,s=l}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),o={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let s=await unwrapWorkflowSandboxResult(o,a),c=s.status===`interrupted`?s.interrupt:s.output,l=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,c),u=clearPendingWorkflowInterrupt({...e.session,history:l});if(s.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(s.interrupt))throw Error(`Unsupported Workflow interrupt kind "${s.interrupt.payload.kind}".`);let t=e.session.history.length,n=l.slice(0,t),r=l.slice(t);return u={...u,history:n},parkOnWorkflowInterrupt({baseSession:u,emissionState:e.emissionState,interrupt:s.interrupt,promptMessages:n,responseMessages:r})}return{next:e.runStep,session:u}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt)[0];if(t===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);let n={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:t,responseMessages:e.responseMessages,session:n}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,a=e.historyProjector?.({messages:r,state:i.state})??r,o=e.force===!0||shouldCompact(a,i.compaction),s=shouldCanonicalizeMemory(r);if(!o&&!s)return{compacted:!1,messages:r,session:i};let c=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),l=mergeProviderSafetyIdentifier(i.agent.compactionModelReference??requireSessionModelReference(i),c.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(c.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(a,i.compaction)}),a)}let u=canonicalizeMemoryRecords(r),d=e.historyProjector?.({messages:u.ordinary,state:i.state})??u.ordinary,f=o?await compactMessages([...d],c.model,i.compaction,l,e.telemetry,buildGatewayAttributionHeaders(c.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...d];if(r=[...u.memory,...f],e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let a=contextStorage.getStore();if(a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(c.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),a!==void 0){let e=drainMemoryCommit(a);e!==void 0&&(r=[...e.history],i={...i,state:e.state})}}return{compacted:!0,messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}function findAuthorizationSignalFromToolResults(e){let t=contextStorage.getStore();if(t!==void 0)for(let n of e??[]){let e=readToolInterrupt(t,n.toolCallId);if(e!==void 0&&isAuthorizationSignal(e))return e}for(let t of e??[])if(isAuthorizationSignal(t.output))return t.output}export{appendMissingToolResultMessages,createToolLoopHarness};
|
|
3
|
+
`)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function getTurnTraceState(e){return e.state?.[TURN_TRACE_STATE_KEY]}function setTurnTraceState(e,t){let n={traceId:t.traceId,spanId:t.spanId,traceFlags:t.traceFlags};return{...e,state:{...e.state,[TURN_TRACE_STATE_KEY]:n}}}function resolveStepOtelContext(e,t,n){if(t)return trace.setSpan(context.active(),t);if(e){let e=getTurnTraceState(n);if(e){let t=trace.wrapSpanContext({isRemote:!0,traceId:e.traceId,spanId:e.spanId,traceFlags:e.traceFlags});return trace.setSpan(context.active(),t)}}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(t){let n=t.handleEvent,g=getInstrumentationRuntime(),x=g?.otelSettings,ee=getInstrumentationConfig(),te=g?.runtimeContextResolvers;x!==void 0&&ensureOtelIntegration();let C=x===void 0?void 0:trace.getTracer(`eve`),w=t.runtimeIdentity?.agentName;async function runStep(e,t){let n=resolveStepInstrumentationDecision(x,w),r;if(C&&n?.action!==`drop`&&hasStepInput(t)){let t=x?.functionId??w,n={"eve.version":eveVersion,"eve.environment":environment,"eve.session.id":e.sessionId};t&&(n[`ai.telemetry.functionId`]=t),r=C.startSpan(`ai.eve.turn`,{attributes:n})}let i=resolveStepOtelContext(C,r,e),executeStep=()=>executeStepBody(e,t,r,n);try{return i?await context.with(i,executeStep):await executeStep()}finally{r?.end()}}async function executeStepBody(g,C,T,D){let O=g,se=createHistoryViewPreparer({previous:t.historyView,projector:t.historyProjector});se(O.history,O.state);let projectHistory=(e,t)=>se(e,t).messages;T&&(O=setTurnTraceState(O,T.spanContext()));let k=getHarnessEmissionState(O.state),A=contextStorage.getStore(),ce=A?.get(ChannelInstrumentationKey),j=normalizeChannelAudience(ce?.metadata.audience),M=D===void 0?instrumentationHooksForAudience(t.instrumentation?.hooks,j):instrumentationHooksForDecision(t.instrumentation?.hooks,D,j),N=A?.get(ParentSessionKey),le=A?.get(ChannelKey),ue=A?.get(SessionCallbackKey),de=N!==void 0||ue!==void 0,P=(ue?.taskId!==void 0||readTaskIdFromInboxToken(String(le?.state?.parentContinuationToken??``))!==void 0)&&t.tools.has(TASK_UPDATE_TOOL_NAME),fe=resolveParentLineage(N,le),pe=A?.get(ParentTraceContextKey),me=A?.get(SessionTraceSeedKey),he,F=createInstrumentationHandleEvent({agentName:t.runtimeIdentity?.agentName,channelAudience:j,channelKind:ce?.kind,getAttemptScope:()=>he,handleEvent:n,hooks:M,parentLineage:fe,parentTraceContext:pe,rootSessionId:N?.rootSessionId,sessionId:O.sessionId,turnId:activeTurnId(k)}),failModelSelection=async(n,r)=>{if(throwIfTurnAborted(t.abortSignal),T&&recordErrorOnSpan(T,n),!F)throw n;let a=createErrorId(),o=toErrorMessage(n);return log.error(`model selection failed terminally`,{error:n,errorId:a,sessionId:O.sessionId,turnId:r.turnId}),await emitFailedStep(F,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:a},message:o,sessionId:O.sessionId}),{next:t.mode===`task`||de?{done:!0,isError:!0,output:o}:{done:!0,output:``},session:O}},preparePreambleTrace=async()=>{let e=T?.spanContext(),n=e!==void 0&&isValidSpanContext(e)?{spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}:void 0;return await prepareTurnTraceContext({agentName:t.runtimeIdentity?.agentName,channelAudience:j,channelType:ce?.channelType,instrumentation:t.instrumentation,parentLineage:fe,parentTraceContext:pe,rootSessionId:N?.rootSessionId??O.rootSessionId??O.sessionId,sequence:k.sequence,sessionId:O.sessionId,sessionStarted:k.sessionStarted,traceContext:n,traceSeed:me,turnId:`turn_${k.sequence}`})};if(t.clearOnly===!0)return O={...O,compaction:{recentWindowSize:O.compaction.recentWindowSize,threshold:O.compaction.threshold,thresholdPercent:O.compaction.thresholdPercent},history:[],state:clearMemorySessionState(O.state)},await F?.(createContextClearedEvent({sequence:k.sequence,sessionId:O.sessionId,turnId:activeTurnId(k)})),await F?.(createSessionWaitingEvent()),{next:null,session:O};if(t.compactOnly===!0){if(O.history.length>0)try{let e=contextStorage.getStore(),n=await resolveActiveRuntimeModel({config:t,ctx:e,session:O});O=n.session;let r=await maybeCompact({abortSignal:t.abortSignal,auth:e?.get(AuthKey)??null,emit:F,emissionState:{...k,turnId:activeTurnId(k)},force:!0,historyProjector:t.historyProjector,messages:[...O.history],model:n.model,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:O,telemetry:enrichTelemetry(D,x,j,w)??void 0});O={...r.session,compaction:{recentWindowSize:r.session.compaction.recentWindowSize,threshold:r.session.compaction.threshold,thresholdPercent:r.session.compaction.thresholdPercent},history:r.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:O.sessionId})}return await F?.(createSessionWaitingEvent()),{next:null,session:O}}let ge=consumeDeferredStepInput({input:C,preferCurrentInput:t.mode!==`conversation`&&C!==void 0&&hasPendingApprovalBatch(O),session:O});O=ge.session;let I=await resolvePendingRuntimeActions({emit:F,session:O,stepInput:ge.input});if(I.outcome===`unresolved`)return{next:null,session:I.session};O=I.session;let _e=getPendingInputRequestIds(O.state),L=convertStaleResponsesToUserMessage({history:I.messages,pendingRequestIds:_e,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:_e,stepInput:ge.input})}),R=L.stepInput,ve=L.kind===`converted`?{...R,message:L.displayMessage}:R,ye=contextStorage.getStore();ye!==void 0&&t.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalPolicyTools({session:O,stepInput:R})&&await t.resolveStepDynamicTools({ctx:ye,event:createStepStartedEvent({modelId:O.agent.modelReference?.id??`dynamic`,sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId}),messages:projectHistory(I.messages,O.state)});let z=await coordinateApprovalDelivery({session:O,stepInput:R,tools:buildResponseAuthorizationTools({authoredTools:t.tools,context:ye})});if(O=z.session,F){for(let e of z.feedback)await F(createMessageCompletedEvent({message:e,sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId}));let e=getApprovalAuditState(O.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await F(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId})),O={...O,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:O.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await F(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId})),O={...O,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:O.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await F(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId})),O={...O,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:O.state})}}if(z.kind===`park`)return{next:null,session:O};if(z.kind===`continue-coordination`)return{next:runStep,session:z.stepInput===void 0?O:queueDeferredStepInput(O,z.stepInput)};if(z.challenges.length>0){if(F)for(let e of z.challenges)await F(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId,webhookUrl:e.hookUrl}));let e=z.stepInput===void 0?O:queueDeferredStepInput(O,z.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:z.challenges})}}}let B=resolvePendingInput({deferMessagesWhileApprovalsPending:t.mode!==`conversation`,history:I.messages,resolveApprovalKey:resolveApprovalKeyFromTools(t.tools),session:O,stepInput:z.stepInput});if(B.outcome===`unresolved`){let e=I.outcome===`resolved`?{...B.session,history:[...I.messages]}:B.session;if(F&&t.mode===`conversation`&&B.deferredMessage===!0&&hasStepInput(C)){A!==void 0&&prepareDynamicInstructionPreamble(A,projectHistory(e.history,e.state));let n=[];try{let e=await preparePreambleTrace();k=await emitTurnPreamble(F,ve??{},k,t.runtimeIdentity,e)}catch(t){if(n=A===void 0?[]:drainDynamicInstructionUserMessages(A),e={...e,history:[...e.history,...n]},O=e,!isDynamicModelSelectionError(t))throw t;return failModelSelection(t,{sessionStarted:!0,sequence:k.sequence,stepIndex:0,turnId:`turn_${k.sequence}`})}return n=A===void 0?[]:drainDynamicInstructionUserMessages(A),e={...e,history:[...e.history,...n]},k=await emitTurnEpilogue(F,k,t.mode),{next:null,session:setHarnessEmissionState(e,k)}}return I.outcome===`resolved`?(F&&t.mode===`conversation`&&(k=await emitTurnEpilogue(F,k,t.mode),e=setHarnessEmissionState(e,k)),{next:null,session:e}):{next:null,session:B.session}}if(B.resolvedInputs!==void 0)for(let e of B.resolvedInputs)M!==void 0&&await publishInputResolutions({batch:e,hooks:M,sessionId:O.sessionId}),F&&await F(createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));if(F&&B.rejectedActions)for(let e of B.rejectedActions)for(let t of e.results)await F(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let V=[];if(R?.context!==void 0&&B.deferredContext!==!0)for(let e of R.context)V.push({content:e,role:`user`});let be=normalizeUserContent(R?.message),xe=be!==void 0&&!B.deferredMessage&&!B.consumedMessage?await stageAttachmentsToSandbox(be):void 0;xe!==void 0&&V.push({content:xe,role:`user`});let H=[],U;if(F&&hasStepInput(C)){A!==void 0&&(prepareDynamicInstructionPreamble(A,projectHistory(B.session.history,B.session.state)),prepareMemoryPreamble(A,{history:B.messages,input:V,state:B.session.state}));try{let e=await preparePreambleTrace();k=await emitTurnPreamble(F,ve??{},k,t.runtimeIdentity,e)}catch(e){if(H=A===void 0?[]:drainDynamicInstructionUserMessages(A),U=A===void 0?void 0:drainMemoryCommit(A),O={...B.session,history:[...U?.history??B.session.history,...H],state:U?.state??B.session.state},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:k.sequence,stepIndex:0,turnId:`turn_${k.sequence}`})}H=A===void 0?[]:drainDynamicInstructionUserMessages(A),U=A===void 0?void 0:drainMemoryCommit(A),T&&T.setAttribute(`eve.turn.id`,k.turnId)}let Se=U?.history??B.session.history,Ce=B.session.history.length;O=setHarnessEmissionState({...B.session,history:[...Se,...H],state:U?.state??B.session.state},k);let W=[...U?.history??B.messages.slice(0,Ce),...H,...U===void 0?B.messages.slice(Ce):[]],we=await applySessionLimitContinuation({config:t,emit:F,emissionState:k,limitContinuation:B.limitContinuation,session:O});if(we.result!==null)return we.result;O=we.session;let Te=getAgentHandleStore(O.state);if(Te!==void 0&&!hasUnansweredToolCall(W)&&Te.handles.some(e=>e.phase===`addressed`)!==!0){let e=resolveAgentsAnnouncement({messages:projectHistory(W,O.state),store:Te});e!==void 0&&W.push({content:e,role:`user`})}W=[...W,...V];let G=projectHistory(W,O.state),K=A,Ee;try{K!==void 0&&t.dispatchDynamicModelEvent!==void 0&&await t.dispatchDynamicModelEvent({ctx:K,event:{data:{sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId},type:`step.started`},messages:G}),Ee=await resolveActiveRuntimeModel({config:t,ctx:K,session:O})}catch(e){return failModelSelection(e,k)}O=Ee.session;let q=Ee.model,De=detectPromptCachePath(q),J=De.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,Oe=buildGatewayAttributionHeaders(q,t.runtimeIdentity),ke=await maybeCompact({abortSignal:t.abortSignal,auth:K?.get(AuthKey)??null,emit:F,emissionState:k,historyProjector:t.historyProjector,messages:[...W],model:q,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:O,telemetry:enrichTelemetry(D,x,j,w)??void 0});O=ke.session,ke.compacted&&(W=ke.messages),G=normalizeModelMessages(projectHistory(W,O.state)),F&&await emitStepStarted(F,k,requireSessionModelReference(O).id,G);let Ae=getApprovedTools(O),je=k.sequence===0,Y=resolveDeliveryPolicy({hasScheduleProvenance:je&&K?.get(ScheduleIdKey)!==void 0,hasOutputSchema:O.outputSchema!==void 0,isChild:K?.get(ParentSessionKey)!==void 0,isFirstTurn:je,taskDeliveryPhase:K?.get(TurnTaskDeliveryKey)}),X=createCurrentMessages(G,{currentTurnMessages:V});if(K!==void 0){X.addSystem(buildDynamicInstructionMessages(K));let e=K.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&X.add(k.sequence,e);let t=K.get(TurnTaskStateKey);t!==void 0&&X.add(k.sequence,t)}Y.instruction!==void 0&&X.add(k.sequence,Y.instruction);let Me=renderPendingApprovalsInstruction(getPendingInputBatches(O.state).flatMap(e=>e.requests));Me!==void 0&&X.add(k.sequence,Me,{cacheFriendly:!1});let Ne=await hydrateSandboxAttachments(X.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=O.agent.system?[{role:`system`,content:O.agent.system}]:[],r=X.systemMessages.length>0||t.length>0?[...t,...n,...X.systemMessages]:void 0,i=r!==void 0&&J?applySystemCacheBreakpoint(r,J):r,a=i===void 0?O.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:buildTelemetryRuntimeContext({eveVersion,authored:ee,emissionState:k,environment,modelInput:{instructions:a,messages:Ne},providerResolvers:te,session:O})}},Pe=t.tools,runSingleModelCall=async e=>{let{instructions:n,telemetryRuntimeContext:i={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(i[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...Ne,{role:`user`,content:e.trailingUserNote}]:[...Ne],o=buildHarnessToolsWithDynamicSubagents(t.tools,K),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({delegatedCaller:P,session:O,tools:o});Pe=l;let u=await buildToolSetWithProviderTools({approvedTools:Ae,backgroundBatch:c,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(O),tools:l,webSearchProvider:t.webSearchProvider});if(K!==void 0){let n=getAdvertisedTools({delegatedCaller:P,session:O,tools:buildDynamicTools(K)}),r=buildToolSetFromDefinitions({approvedTools:Ae,backgroundBatch:c,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){if(l.get(e)?.runtimeAction!==void 0)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);u[e]=t}}O.outputSchema!==void 0&&(u[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(O.outputSchema));let d=F===void 0?void 0:({tools:e})=>createWorkflowLifecycle({emit:F,emissionState:k,tools:e}),f=t.workflow===!0?{lifecycle:d,maxSubagents:t.workflowMaxSubagents}:void 0,p=await getAdvertisedTools({delegatedCaller:P,modelTools:u,session:O,tools:l,workflow:f});O=p.session;let m=p.modelTools,h=J?applyLastToolCacheBreakpoint(m,J):m,g=activeTurnId(k),_=M===void 0?void 0:{attemptId:`${O.sessionId}:${g}:${k.stepIndex}:${e.attemptIndex}`,attemptIndex:e.attemptIndex,channelAudience:j,functionId:x?.functionId??w,rootSessionId:N?.rootSessionId??O.sessionId,sessionId:O.sessionId,stepIndex:k.stepIndex,turnId:g};he=_;let v=D?.action===`drop`||_===void 0||M===void 0?void 0:createAiSdkHookBridge(_,M,t.instrumentation?.runInContext,i),y=buildStepHooks({auth:K?.get(AuthKey)??null,cachePath:De,emit:F,emissionState:k,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:J,session:O}),b=new ToolLoopAgent({headers:Oe,instructions:n,model:q,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||c.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:y.onStepFinish,prepareStep:y.prepareStep,reasoning:O.agent.reasoning,runtimeContext:i,stopWhen:isStepCount(1),telemetry:enrichTelemetry(D,x,j,w,i,v),toolApproval:buildToolApproval(m),tools:h}),executeModelCall=async()=>{if(F){let e=[...t.tools].filter(([e,t])=>t.runtimeAction!==void 0&&l.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await b.stream({abortSignal:t.abortSignal,messages:a}),{emittedActionCallIds:i,handledInlineToolResultCallIds:o,invalidInputToolCallIds:s,inlineAuthorizationResults:c,trailingInlineToolResultParts:u}=await emitStreamContent(F,k,r.fullStream,{excludedActionToolNames:n,tools:l});throwIfTurnAborted(t.abortSignal);let[d,f]=await Promise.all([y.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&c.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(F,k,d,{emittedActionCallIds:i,excludedActionCallIds:s,excludedActionToolNames:n,handledInlineToolResultCallIds:o,tools:l});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of c)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:s,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await b.generate({abortSignal:t.abortSignal,messages:a});throwIfTurnAborted(t.abortSignal);let n=await y.stepResult;if(isEmptyModelResponse(n)&&extractToolResultCallIds(e.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:e.responseMessages,stepResult:n})};try{let e=await executeModelCall();return _!==void 0&&await M?.publish({idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.completed`}),e}catch(e){return _!==void 0&&await M?.publish({error:e,idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.failed`}),rethrowNoOutputAsEmptyResponse(e)}},Fe=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:Fe++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:O.sessionId,turnId:k.turnId},t.abortSignal),Ie=prepareModelCallInput(),Le=await continuePendingWorkflowInterrupt({childResults:R?.runtimeActionResults,config:t,emit:F,emissionState:k,runStep,session:O,tools:buildHarnessToolsWithDynamicSubagents(t.tools,K)});if(Le!==null)return Le;let Re=await enforceSessionTokenLimit({config:t,emit:F,emissionState:k,messages:G,session:O});if(Re!==null)return Re;let Z;try{Z=await runOneModelCall({preparedInput:Ie,suppressStepStartedEmission:!0})}catch(n){throwIfTurnAborted(t.abortSignal);let r=await runModelCallRecoveryPipeline({error:n,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:O.sessionId,turnId:k.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:Y.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:O.sessionId,turnId:k.turnId})]});if(throwIfTurnAborted(t.abortSignal),r.outcome===`recovered`)Z=r.result;else{let n=r.error;if(T&&recordErrorOnSpan(T,n),!F)throw n;let a=extractWorkflowStreamWriteErrorDetails(n);if(a!==null){let t=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...a,errorId:t,error:n,sessionId:O.sessionId,turnId:k.turnId}),k=await emitRecoverableFailedTurn(F,k,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:O.continuationToken,details:{...a,errorId:t},message:toErrorMessage(n)}),{next:null,session:setHarnessEmissionState(O,k)}}let o=classifyModelCallError(n),s=createErrorId(),c=summarizeKnownError(n),l=c===null?extractUpstreamRejectionMessage(n):null,u=c?.message??l?.message??toErrorMessage(n),d=c?.hint===void 0?u:`${u} ${c.hint}`,f=extractModelCallErrorDetails(n),p=buildModelCallFailureDetails({catalogSummary:c,error:n,errorId:s,modelCallDetails:f,upstreamRejection:l}),m=buildModelCallFailureLogFields({error:n,errorId:s,modelCallDetails:f,recognized:c!==null||l!==null,sessionId:O.sessionId,turnId:k.turnId});if(o===`terminal`)return c===null?log.error(l?.message??`model call failed terminally`,m):log.error(`${c.name}: ${c.message}`,{errorId:s,hint:c.hint,sessionId:O.sessionId,turnId:k.turnId}),await emitFailedStep(F,k,{code:`MODEL_CALL_FAILED`,details:p,message:u,sessionId:O.sessionId}),{next:t.mode===`task`||de?{done:!0,isError:!0,output:d}:{done:!0,output:``},session:O};if(t.mode===`task`){if(o===`recoverable`&&!(n instanceof EmptyModelResponseError))throw log.warn(l?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,m),n;return log.error(l?.message??`model call failed; failing the task run`,m),await emitFailedStep(F,k,{code:`MODEL_CALL_FAILED`,details:p,message:u,sessionId:O.sessionId}),{next:{done:!0,isError:!0,output:d},session:O}}log.error(l?.message??`model call failed — parking session for retry by the user`,m),k=await emitRecoverableFailedTurn(F,k,{code:`MODEL_CALL_FAILED`,continuationToken:O.continuationToken,details:p,message:u});let h={isError:!0,output:d};return O={...O,outputSchema:void 0},{next:null,session:setHarnessEmissionState(O,k),settledTurn:h}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(O.state),turnId:k.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});O=setTurnUsageState(O,Q);let $;try{$=formatLanguageModelGatewayId(q)}catch{$=void 0}return await setEveAttributes({"$eve.model":$,"$eve.input_tokens":Q.inputTokens,"$eve.output_tokens":Q.outputTokens,"$eve.cache_read_tokens":Q.cacheReadTokens,"$eve.cache_write_tokens":Q.cacheWriteTokens,"$eve.cost_usd":Q.sawCost?Q.costUsd:void 0,"$eve.tool_count":t.tools.size}),handleStepResult({config:t,emit:F,emissionState:k,delegatedCaller:P,modelPromptMessageCount:G.length,promptMessages:W,result:Z,runStep,session:O,runtimeActionTools:Pe})}return runStep}function resolveStepInstrumentationDecision(e,t){if(e===void 0)return;let n=contextStorage.getStore(),r=n?.get(SessionTraceSeedKey);if(r?.decision!==void 0)return r.decision;let i=n?.get(ChannelInstrumentationKey),s=normalizeChannelAudience(i?.metadata.audience);return r===void 0?resolveTracePolicy(e.tracePolicy,{agentName:t,audience:s,channelType:i?.channelType}):resolveTracePolicyDecision(isSampledTrace(r),s)}function isValidSpanContext(e){return/^[0-9a-f]{32}$/u.test(e.traceId)&&e.traceId!==`00000000000000000000000000000000`&&/^[0-9a-f]{16}$/u.test(e.spanId)&&e.spanId!==`0000000000000000`}function extractTokenUsageDelta(e){let t=e.usage;if(!(t===void 0&&e.costUsd===void 0))return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:r,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(r,i),...a}:{errorId:i,message:toErrorMessage(r),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}function hasUnansweredToolCall(e){let t=new Set,n=new Set;for(let r of e)if(Array.isArray(r.content))for(let e of r.content)typeof e!=`object`||!e||(e.type===`tool-call`&&t.add(e.toolCallId),e.type===`tool-result`&&n.add(e.toolCallId));for(let e of t)if(!n.has(e))return!0;return!1}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:a}=e,{emissionState:s,session:c}=e,l=resolveAssistantStepText(i.response.messages,i.text),u=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(l),d=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),f=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...d.map(e=>e.toolCallId)]),p=u?[]:appendMissingToolResultMessages({append:d.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),m=u?null:l,h=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&h.add(e.toolCallId);let g=normalizeProviderToolHistory({messages:p,providerExecutedOutcomeIds:h}),_=g.messages,v={...c,compaction:createNextCompactionConfig(c.compaction,e.modelPromptMessageCount,i)},y=t.workflow===!0?readWorkflowContinuationSecurity(v):void 0;if(y!==void 0){let e=await getWorkflowSandboxInterrupt(i,y);if(e!==void 0){if(!isWorkflowRuntimeActionInterrupt(e))throw Error(`Unsupported Workflow interrupt kind "${e.payload.kind}".`);return parkOnWorkflowInterrupt({baseSession:v,emissionState:s,interrupt:e,promptMessages:r,responseMessages:_})}}let b=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:f}),ee=new Set(b.map(e=>e.action.callId)),te=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...f,...ee])}),S=[...b,...te],ne=renderPendingApprovalsSnippet(b),re=[...r,...ne===void 0?[]:[{content:ne,role:`user`}]],w=getAdvertisedTools({delegatedCaller:e.delegatedCaller,session:v,tools:e.runtimeActionTools}),ie=(i.toolCalls??[]).filter(e=>!f.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.runtimeAction!==void 0).filter(e=>w.get(e.toolName)?.runtimeAction===void 0?(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:v.sessionId,toolName:e.toolName}),!1):!0).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:w}));if(ie.length>0){if(S.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:ie,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:_,session:{...v,history:[...r]}}),advanceStep(s))};let e=setPendingRuntimeActionBatch({actions:ie,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:_,session:{...v,history:re}});return e=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:S,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:S,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(s))}}if(S.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:S,responseAuthRequiredRequestIds:b.filter(t=>{let n=e.get(t.action.toolName)?.approval;return n!==void 0&&typeof n!=`function`&&n.response!==void 0}).map(e=>e.requestId),responseMessages:_,session:{...v,history:re}});return n&&(await n(createInputRequestedEvent({requests:S,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode),r=setHarnessEmissionState(r,s))),{next:hasDeferredStepInput(r)?a:null,session:r}}let ae=findAuthorizationSignalFromToolResults(i.toolResults);if(ae){let{challenges:e}=ae;if(n){for(let t of getSupersededAuthorizationChallenges(v.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode))}return{next:null,session:setHarnessEmissionState({...v,history:[...r],state:setPendingAuthorization(v.state,{challenges:e})},s)}}let oe=_,T=[...r,...oe],E={...v,history:T};return!(E.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(oe.at(-1)?.role===`tool`||g.outcomeEndsResponse||hasDeferredStepInput(E))?(n&&(s=advanceStep(s),E=setHarnessEmissionState(E,s)),{next:a,session:E}):t.mode===`task`?finishTaskTurn({emissionState:s,emit:n,history:r,result:i,schema:E.outputSchema,session:E,stepOutput:m}):finishConversationTurn({emissionState:s,emit:n,history:r,result:i,schema:E.outputSchema,session:E,stepOutput:m})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r,i){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r,i)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema:void 0},t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema:void 0},t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let i=e.emit===void 0?void 0:createWorkflowLifecycle({emit:e.emit,emissionState:e.emissionState,skipReplayed:!0,tools:e.tools}),a=getWorkflowContinuationSecurity(e.session),o;try{let t=buildWorkflowHostTools({tools:e.tools}),r=e.childResults??[],s=n,c=0;for(;;){o=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:a,interrupt:s,lifecycle:i,resolution:r[c]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(o,a);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||c+1>=r.length)break;let l=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(l===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);c++,s=l}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),o={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let s=await unwrapWorkflowSandboxResult(o,a),c=s.status===`interrupted`?s.interrupt:s.output,l=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,c),u=clearPendingWorkflowInterrupt({...e.session,history:l});if(s.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(s.interrupt))throw Error(`Unsupported Workflow interrupt kind "${s.interrupt.payload.kind}".`);let t=e.session.history.length,n=l.slice(0,t),r=l.slice(t);return u={...u,history:n},parkOnWorkflowInterrupt({baseSession:u,emissionState:e.emissionState,interrupt:s.interrupt,promptMessages:n,responseMessages:r})}return{next:e.runStep,session:u}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt)[0];if(t===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);let n={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:t,responseMessages:e.responseMessages,session:n}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,a=e.historyProjector?.({messages:r,state:i.state})??r,s=e.force===!0||shouldCompact(a,i.compaction),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:i};let l=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),u=mergeProviderSafetyIdentifier(i.agent.compactionModelReference??requireSessionModelReference(i),l.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(a,i.compaction)}),a)}let d=canonicalizeMemoryRecords(r),f=e.historyProjector?.({messages:d.ordinary,state:i.state})??d.ordinary,p=s?await compactMessages([...f],l.model,i.compaction,u,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...f];if(r=[...d.memory,...p],e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let a=contextStorage.getStore();if(a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),a!==void 0){let e=drainMemoryCommit(a);e!==void 0&&(r=[...e.history],i={...i,state:e.state})}}return{compacted:!0,messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}function findAuthorizationSignalFromToolResults(e){let t=contextStorage.getStore();if(t!==void 0)for(let n of e??[]){let e=readToolInterrupt(t,n.toolCallId);if(e!==void 0&&isAuthorizationSignal(e))return e}for(let t of e??[])if(isAuthorizationSignal(t.output))return t.output}export{appendMissingToolResultMessages,createToolLoopHarness};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{loadContext}from"#context/container.js";import{isObject}from"#shared/guards.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{resolveApprovalPolicy}from"#approval/definition.js";import{tool}from"ai";import{ASK_QUESTION_TOOL_NAME}from"#harness/request-input-tool.js";import{authorizationPendingModelText,isAuthorizationPendingModelOutput,isAuthorizationSignal,modelFacingAuthorizationOutput}from"#harness/authorization.js";import{createBackgroundToolCallBatch,executeBackgroundToolCall}from"#harness/background-tools.js";import{isAsyncIterable}from"#shared/async-iterable.js";import{stashToolInterrupt}from"#harness/tool-interrupts.js";import{WEB_SEARCH_TOOL_NAME}from"#harness/provider-tool-schemas.js";import{resolveWebSearchBackend,resolveWebSearchProviderTool}from"#harness/provider-tools.js";import{normalizeToolJsonOutput,normalizeToolModelOutput}from"#harness/tool-model-output.js";const toolApprovals=new WeakMap;function buildToolSet(e){let t={},n=e.backgroundBatch??createBackgroundToolCallBatch(),r=e.capabilities?.requestInput===!0,c=e.disabledProviderTools;for(let l of e.tools.values()){if(l.name===ASK_QUESTION_TOOL_NAME&&!r||c?.has(l.name))continue;n.setTool(l.name,l.execution===`background`&&l.execute!==void 0?l:void 0);let u=l.toModelOutput,d=buildApprovalFn(l,e),f=tool({description:l.description,execute:wrapToolExecute(l,n),inputSchema:l.inputSchema,...l.execution===`background`?{onInputAvailable:({input:e,toolCallId:t})=>{if(l.execute===void 0)throw Error(`Background tool "${l.name}" has no execute function.`);n.register({callId:t,input:e,toolName:l.name})}}:{},outputSchema:l.outputSchema,...l.execute===void 0?u===void 0?{}:{toModelOutput:async({output:e,toolCallId:t})=>normalizeToolModelOutput({output:await u(e),toolCallId:t,toolName:l.name})}:{toModelOutput:async({output:e,toolCallId:t})=>isAuthorizationPendingModelOutput(e)?{type:`text`,value:authorizationPendingModelText(e.connections)}:u===void 0?typeof e==`string`?{type:`text`,value:e}:normalizeToolModelOutput({output:{type:`json`,value:e??null},toolCallId:t,toolName:l.name}):normalizeToolModelOutput({output:await u(e),toolCallId:t,toolName:l.name})}});t[l.name]=f,l.approval!==void 0&&toolApprovals.set(f,d)}return t}function buildToolSetFromDefinitions(e){let t=new Map;for(let n of e.tools)t.has(n.name)||t.set(n.name,n);return buildToolSet({approvedTools:e.approvedTools,backgroundBatch:e.backgroundBatch,capabilities:e.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t})}function wrapToolExecute(e,t=createBackgroundToolCallBatch()){let n=e.execute;if(n!==void 0)return(r,i)=>{let a;try{a=e.execution===`background`?executeBackgroundToolCall({batch:t,definition:e,options:i,toolInput:r}):n(r,i)}catch(e){return Promise.reject(e)}return isAsyncIterable(a)?normalizeToolExecuteIterable(a,e.name,i):Promise.resolve(a).then(t=>normalizeToolExecuteOutput(t,e.name,i))}}async function*normalizeToolExecuteIterable(e,t,n){for await(let r of e)yield normalizeToolExecuteOutput(r,t,n)}function normalizeToolExecuteOutput(t,n,r){return isAuthorizationSignal(t)?(stashToolInterrupt(loadContext(),r.toolCallId,t),modelFacingAuthorizationOutput(t)):normalizeToolJsonOutput({boundary:`execute`,output:t,toolCallId:r.toolCallId,toolName:n})}async function buildToolSetWithProviderTools(e){let t=e.disabledProviderTools,n={...buildToolSet({approvedTools:e.approvedTools,backgroundBatch:e.backgroundBatch,capabilities:e.capabilities,disabledProviderTools:t,tools:e.tools})};if(!t?.has(WEB_SEARCH_TOOL_NAME)){let t=e.tools.get(WEB_SEARCH_TOOL_NAME);if(t!==void 0&&t.execute===void 0){let t=resolveWebSearchBackend(e.modelReference,e.webSearchProvider);t===null?delete n[WEB_SEARCH_TOOL_NAME]:n[WEB_SEARCH_TOOL_NAME]=await resolveWebSearchProviderTool(t)}}return n}function buildApprovalFn(e,i){return async(a,o)=>{if(e.approval===void 0)return;let s=isObject(a)?a:void 0,c=await resolveApprovalPolicy(e.approval)({...buildCallbackContext(),approvedTools:i.approvedTools??new Set,callId:o,toolInput:s,toolName:e.name});return typeof c==`boolean`?c?`user-approval`:`not-applicable`:c}}function buildToolApproval(e){return async({toolCall:t})=>{let n=e[t.toolName];return n===void 0?void 0:await toolApprovals.get(n)?.(t.input,t.toolCallId)}}export{buildToolApproval,buildToolSet,buildToolSetFromDefinitions,buildToolSetWithProviderTools,wrapToolExecute};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createRequire}from"node:module";import{basename,dirname,join}from"node:path";import{existsSync,readFileSync,realpathSync}from"node:fs";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.
|
|
1
|
+
import{createRequire}from"node:module";import{basename,dirname,join}from"node:path";import{existsSync,readFileSync,realpathSync}from"node:fs";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.47.0`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const require=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let i=dirname(t);if(i===t)return;t=i}}function tryResolveDirectBuildLocation(e){let i=dirname(e);for(;;){if(basename(i)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(i),`package.json`));if(e!==void 0)return{packageBuildRoot:i,packageRoot:e}}let e=dirname(i);if(e===i)return;i=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(t){return createRequire(t).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let r=realpathSync.native(e),i=tryResolveDirectBuildLocation(r);if(i!==void 0)return i;let a=findNearestVerifiedPackageRoot(dirname(r));if(a!==void 0&&isSourceCheckout(a))return{packageBuildRoot:null,packageRoot:a};try{let e=tryResolveVerifiedPackageRoot(t(r)),n=e===void 0?void 0:tryCreatePackageLocation(e);if(n!==void 0)return n}catch{}let o=a===void 0?void 0:tryCreatePackageLocation(a);if(o!==void 0)return o;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){return require.resolve(e)}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(!(typeof t.name!=`string`||typeof t.version!=`string`))return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let n=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(n?.name===t)return n}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),EVE_PACKAGE_NAME);if(e)return cachedPackageInfo=e,cachedPackageInfo}catch{}return cachedPackageInfo={...FALLBACK_PACKAGE_INFO},cachedPackageInfo}function readWorkflowVersionFromManifest(e){let t=e;for(let e of[t.devDependencies,t.dependencies,t.peerDependencies]){let t=e?.[`@workflow/core`];if(typeof t==`string`&&t.trim().length>0)return t}}function resolveExpectedWorkflowVersion(){let e=tryResolvePackageRoot();if(e!==void 0)try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(join(e,`package.json`),`utf8`)))}catch{}try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),`utf8`)))}catch{return}}function resolveWorkflowModulePath(e){if(e===`workflow`)return resolvePackageSourceFilePath(`src/internal/workflow/index.ts`);if(e===`workflow/api`||e===`workflow/runtime`)return resolvePackageSourceFilePath(`src/internal/workflow/runtime.ts`);if(e===`workflow/internal/builtins`)return resolvePackageSourceFilePath(`src/internal/workflow/builtins.ts`);let t=WORKFLOW_MODULE_ALIASES[e];return t===void 0?require.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z}from"#compiled/zod/index.js";const catalogModelProviderSchema=z.object({provider:z.string().min(1),providerModelId:z.string().min(1),contextWindowTokens:z.number().int().nonnegative().optional(),maxOutputTokens:z.number().int().nonnegative().optional()}).passthrough(),catalogModelSchema=z.object({slug:z.string().min(1),providers:z.array(catalogModelProviderSchema).min(1)}).passthrough(),modelCatalogResponseSchema=z.object({models:z.array(catalogModelSchema),providerAliases:z.record(z.string(),z.string())}).passthrough();function normalizeCatalogModelId(e){return e.endsWith(`-thinking`)?e.slice(0,-9):e}function findCatalogModelBySlug(e,t){
|
|
1
|
+
import{z}from"#compiled/zod/index.js";const catalogModelProviderSchema=z.object({provider:z.string().min(1),providerModelId:z.string().min(1),contextWindowTokens:z.number().int().nonnegative().optional(),maxOutputTokens:z.number().int().nonnegative().optional()}).passthrough(),catalogModelSchema=z.object({slug:z.string().min(1),providers:z.array(catalogModelProviderSchema).min(1)}).passthrough(),modelCatalogResponseSchema=z.object({models:z.array(catalogModelSchema),providerAliases:z.record(z.string(),z.string())}).passthrough();function normalizeCatalogModelId(e){return e.endsWith(`-thinking`)?e.slice(0,-9):e}function findCatalogModelBySlug(e,t){let n=e.find(e=>e.slug===t);if(n!==void 0)return n;let r=normalizeCatalogModelId(t);return r===t?void 0:e.find(e=>e.slug===r)}function findCatalogModelByProviderModelId(e){let t=e.provider.split(`.`)[0],n=e.providerAliases[t]??t,r=normalizeCatalogModelId(e.providerModelId);for(let t of e.models)for(let e of t.providers)if(e.provider===n&&normalizeCatalogModelId(e.providerModelId)===r)return{model:t,provider:e};return null}function modelCatalogLimitsFromProvider(e){return e.contextWindowTokens===void 0||e.contextWindowTokens<=0?null:{contextWindowTokens:e.contextWindowTokens,...e.maxOutputTokens!==void 0&&e.maxOutputTokens>0&&{maxOutputTokens:e.maxOutputTokens}}}export{catalogModelProviderSchema,catalogModelSchema,findCatalogModelByProviderModelId,findCatalogModelBySlug,modelCatalogLimitsFromProvider,modelCatalogResponseSchema,normalizeCatalogModelId};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function connectionProtocols(e){return[e.mcp?`mcp`:null,e.openapi?`openapi`:null].filter(e=>e!==null)}const INTEGRATIONS=[{slug:`slack`,name:`Slack`,kind:`channel`,tagline:`Mention your agent in channels and DMs, with Connect-managed auth.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0}},{slug:`discord`,name:`Discord`,kind:`channel`,tagline:`Run your agent as a Discord bot across servers and threads.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`teams`,name:`Microsoft Teams`,kind:`channel`,tagline:`Bring your agent into Teams chats and channels.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`telegram`,name:`Telegram`,kind:`channel`,tagline:`Connect your agent to a Telegram bot for 1:1 and group chats.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`twilio`,name:`Twilio`,kind:`channel`,tagline:`Put your agent on a phone number: SMS and speech-transcribed calls.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`github`,name:`GitHub`,kind:`channel`,tagline:`Drive your agent from issues, pull requests, and comments, with guided Connect setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`linear-agent`,name:`Linear Agent`,kind:`channel`,tagline:`Delegate Linear issues and comments through Agent Sessions, with guided Connect setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`eve`,name:`Web Chat`,kind:`channel`,tagline:`Embed a first-party web chat UI backed by your agent.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0}},{slug:`buzz`,name:`Buzz`,kind:`channel`,tagline:`Talk to your eve agent from Buzz through its ACP desktop harness.`,surfaces:{scaffoldable:!1,registry:!1,gallery:!0}},{slug:`chat-sdk-gchat`,name:`Google Chat`,kind:`channel`,tagline:`Google Chat spaces and DMs via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-whatsapp`,name:`WhatsApp`,kind:`channel`,tagline:`Customer messaging through WhatsApp Business Cloud via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-x`,name:`X`,kind:`channel`,tagline:`Public mentions and DMs on X via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-messenger`,name:`Messenger`,kind:`channel`,tagline:`Facebook Messenger bots with templates, buttons, and reactions via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-zernio`,name:`Zernio`,kind:`channel`,tagline:`Reach seven social and messaging platforms through one Zernio integration.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-velt`,name:`Velt`,kind:`channel`,tagline:`Add agents to anchored comments across documents, canvases, PDFs, and video.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-sendblue`,name:`Sendblue`,kind:`channel`,tagline:`Send and receive iMessage, SMS, and RCS through Sendblue.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-novu`,name:`Novu`,kind:`channel`,tagline:`Reach Slack, Teams, WhatsApp, Telegram, and email through Novu.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-liveblocks`,name:`Liveblocks`,kind:`channel`,tagline:`Bring your agent into Liveblocks comment threads, mentions, and reactions.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`linq`,name:`Linq`,kind:`channel`,tagline:`iMessage and SMS conversations through Linq, with guided Connect or portable setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-kapso`,name:`Kapso`,kind:`channel`,tagline:`Managed WhatsApp conversations, media, buttons, and history through Kapso.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`photon`,name:`Photon`,kind:`channel`,tagline:`iMessage through Photon, with guided project and phone setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-dial`,name:`Dial`,kind:`channel`,tagline:`Give your agent a phone number for SMS, MMS, iMessage, and voice transcripts.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-agentphone`,name:`AgentPhone`,kind:`channel`,tagline:`SMS, MMS, iMessage, and voice conversations through AgentPhone.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-lark`,name:`Lark / Feishu`,kind:`channel`,tagline:`Lark and Feishu chats with native card streaming via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-beeper`,name:`Beeper`,kind:`channel`,tagline:`Matrix rooms and bridged messaging networks through Beeper.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-resend`,name:`Resend`,kind:`channel`,tagline:`Send and receive threaded email through Resend via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`agent-browser`,name:`agent-browser`,kind:`extension`,tagline:`Add browser automation tools backed by agent-browser to an eve agent.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`browserbase`,name:`Browserbase`,kind:`extension`,tagline:`Search, fetch, and automate the web with Browserbase and Stagehand.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`github-tools`,name:`GitHub Tools`,kind:`extension`,tagline:`Add scoped GitHub tools with Vercel Connect authentication and approval rules.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`jetty`,name:`Jetty`,kind:`extension`,tagline:`Grade agent turns, compare experiments, and store durable evaluation trajectories.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`kernel`,name:`KERNEL`,kind:`extension`,tagline:`Let your eve agent use the Internet with KERNEL browser infra, o11y, and stealth. Integrated natively with Vercel Connect and AI Gateway.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`upstash-agentkit`,name:`Upstash AgentKit`,kind:`extension`,tagline:`Add long-term memory, Redis Search, and durable chat history with Upstash Redis.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`arcana`,name:`Kybernesis Arcana`,kind:`extension`,tagline:`Give your agent workspace-scoped long-term memory with recall, storage, and brain notes.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`hindsight`,name:`Hindsight`,kind:`extension`,tagline:`Recall relevant context before every turn and retain each exchange automatically.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`browser-use`,name:`Browser Use`,kind:`connection`,tagline:`Run managed browser automation tasks through Browser Use's MCP server.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Browser Use: run browser automation tasks, inspect sessions, and manage browser profiles.`,mcp:{url:`https://api.browser-use.com/v3/mcp`}}},{slug:`vercel`,name:`Vercel`,kind:`connection`,tagline:`Manage Vercel projects, deployments, and logs through Vercel's MCP server.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Vercel: manage projects and deployments, inspect logs, and search documentation.`,mcp:{url:`https://mcp.vercel.com`}}},{slug:`linear`,name:`Linear`,kind:`connection`,tagline:`Issues, projects, cycles, and comments via Linear's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Linear workspace: issues, projects, cycles, and comments.`,mcp:{url:`https://mcp.linear.app/mcp`}}},{slug:`notion`,name:`Notion`,kind:`connection`,tagline:`Search and edit Notion pages and databases over MCP or OpenAPI.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Notion workspace: search and edit pages and databases.`,mcp:{url:`https://mcp.notion.com/mcp`},openapi:{spec:`https://developers.notion.com/openapi.json`,baseUrl:`https://api.notion.com`,headers:{"Notion-Version":`2022-06-28`}}}},{slug:`datadog`,name:`Datadog`,kind:`connection`,tagline:`Query metrics, monitors, and logs through Datadog's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Datadog: query metrics, monitors, logs, and incidents.`,mcp:{url:`https://mcp.datadoghq.com/api/mcp`}}},{slug:`honeycomb`,name:`Honeycomb`,kind:`connection`,tagline:`Explore traces and run queries through Honeycomb's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Honeycomb: explore traces, run queries, and inspect datasets.`,mcp:{url:`https://mcp.honeycomb.io/mcp`}}},{slug:`agentcard`,name:`Agentcard`,kind:`connection`,tagline:`let agents buy online`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:"Agentcard: the agent's wallet. Shop and check out at real merchants (DoorDash, Good Eggs, flights) with the conversational `buy` tool (thread conversation_id on follow-ups), issue a single-use virtual card to pay at any checkout, let the user add their own card, and manage the cash that funds it: balance, top-ups, transactions, KYC, human support.",mcp:{url:`https://mcp.agentcard.sh/mcp`}}},{slug:`airtable`,name:`Airtable`,kind:`connection`,tagline:`Bases, tables, and records through Airtable's MCP server.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Airtable: bases, tables, and records.`,mcp:{url:`https://mcp.airtable.com/mcp`}}},{slug:`bitly`,name:`Bitly`,kind:`connection`,tagline:`Shorten links, generate QR Codes, and track performance.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Bitly: shorten links, generate QR Codes, and track link performance.`,mcp:{url:`https://api-ssl.bitly.com/v4/mcp`}}},{slug:`brex`,name:`Brex`,kind:`connection`,tagline:`Expenses, cards, and cash through Brex's finance automation.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Brex: expenses, cards, budgets, and cash.`,mcp:{url:`https://api.brex.com/mcp`}}},{slug:`candid`,name:`Candid`,kind:`connection`,tagline:`Research nonprofits and funders using Candid's data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Candid: research nonprofits, funders, and grants.`,mcp:{url:`https://mcp.candid.org/mcp`}}},{slug:`clickhouse`,name:`ClickHouse`,kind:`connection`,tagline:`Query and explore your ClickHouse Cloud data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`ClickHouse Cloud: query and explore databases and tables.`,mcp:{url:`https://mcp.clickhouse.cloud/mcp`}}},{slug:`cloudinary`,name:`Cloudinary`,kind:`connection`,tagline:`Manage, transform, and deliver your images and videos.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Cloudinary: manage, transform, and deliver image and video assets.`,mcp:{url:`https://asset-management.mcp.cloudinary.com/sse`}}},{slug:`coda`,name:`Coda`,kind:`connection`,tagline:`Create, search, and update docs and tables.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Coda: create, search, and update docs and tables.`,mcp:{url:`https://coda.io/apis/mcp`}}},{slug:`context`,name:`context.dev`,kind:`connection`,tagline:`search, scrape, extract, and monitor live web data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`context.dev: search the live web, scrape and crawl sites, extract structured data, parse files, retrieve brand intelligence, monitor changes, and run batch jobs.`,mcp:{url:`https://mcp.context.dev/mcp`}}},{slug:`egnyte`,name:`Egnyte`,kind:`connection`,tagline:`Securely access and analyze Egnyte content.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Egnyte: search, access, and analyze governed content.`,mcp:{url:`https://mcp-server.egnyte.com/mcp`}}},{slug:`embat`,name:`Embat`,kind:`connection`,tagline:`Ask Embat about cash, debt, payments, and accounting.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Embat: cash, debt, payments, and accounting.`,mcp:{url:`https://tellme.embat.io/mcp`}}},{slug:`hugging-face`,name:`Hugging Face`,kind:`connection`,tagline:`Access the Hugging Face Hub and thousands of Gradio apps.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Hugging Face: models, datasets, Spaces, and Gradio apps on the Hub.`,mcp:{url:`https://huggingface.co/mcp?login&gradio=none`}}},{slug:`local-falcon`,name:`Local Falcon`,kind:`connection`,tagline:`AI visibility and local search intelligence.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Local Falcon: local search rankings and AI visibility reports.`,mcp:{url:`https://mcp.localfalcon.com`}}},{slug:`make`,name:`Make`,kind:`connection`,tagline:`Run Make scenarios and manage your Make account.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Make: run scenarios and manage automations.`,mcp:{url:`https://mcp.make.com`}}},{slug:`manufact`,name:`Manufact`,kind:`connection`,tagline:`Deploy and monitor MCP servers with Manufact.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Manufact: deploy and monitor MCP servers.`,mcp:{url:`https://mcp.manufact.com/mcp`}}},{slug:`mem0`,name:`Mem0`,kind:`connection`,tagline:`Persistent memory for AI agents and assistants.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Mem0: store and retrieve persistent agent memory.`,mcp:{url:`https://mcp.mem0.ai/mcp`}}},{slug:`miro`,name:`Miro`,kind:`connection`,tagline:`Access and create content on Miro boards.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Miro: read and create content on boards.`,mcp:{url:`https://mcp.miro.com/`}}},{slug:`mixpanel`,name:`Mixpanel`,kind:`connection`,tagline:`Analyze, query, and manage your Mixpanel data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Mixpanel: analyze, query, and manage analytics data.`,mcp:{url:`https://mcp.mixpanel.com/mcp`}}},{slug:`natural`,name:`Natural`,kind:`connection`,tagline:`Send, request, and manage payments with Natural.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Natural: agentic payments — send and request payments, check balances, and move funds.`,mcp:{url:`https://mcp.natural.com/mcp`}}},{slug:`netlify`,name:`Netlify`,kind:`connection`,tagline:`Create, deploy, manage, and secure websites on Netlify.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Netlify: create, deploy, manage, and secure sites.`,mcp:{url:`https://netlify-mcp.netlify.app/mcp`}}},{slug:`oreilly`,name:`O'Reilly`,kind:`connection`,tagline:`Discover O'Reilly's expert learning content.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`O'Reilly: search books, courses, and learning content.`,mcp:{url:`https://api.oreilly.com/api/content-discovery/v1/mcp/`}}},{slug:`planetscale`,name:`PlanetScale`,kind:`connection`,tagline:`Authenticated access to your PlanetScale Postgres and MySQL databases.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`PlanetScale: query Postgres and MySQL databases.`,mcp:{url:`https://mcp.pscale.dev/mcp/planetscale`}}},{slug:`posthog`,name:`PostHog`,kind:`connection`,tagline:`Query, analyze, and manage your PostHog insights.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`PostHog: insights, events, and feature flags.`,mcp:{url:`https://mcp.posthog.com/mcp`}}},{slug:`postman`,name:`Postman`,kind:`connection`,tagline:`Give API context to your coding agents with Postman.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Postman: APIs, collections, and workspaces.`,mcp:{url:`https://mcp.postman.com/minimal`}}},{slug:`razorpay`,name:`Razorpay`,kind:`connection`,tagline:`Razorpay payments, settlements, and dashboard data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Razorpay: payments, settlements, and dashboard data.`,mcp:{url:`https://mcp.razorpay.com/mcp`}}},{slug:`sentry`,name:`Sentry`,kind:`connection`,tagline:`Search, query, and debug errors intelligently.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Sentry: search, query, and debug errors and issues.`,mcp:{url:`https://mcp.sentry.dev/mcp`}}},{slug:`similarweb`,name:`Similarweb`,kind:`connection`,tagline:`Real-time web, mobile app, and market data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Similarweb: web traffic, app, and market intelligence data.`,mcp:{url:`https://mcp.similarweb.com`}}},{slug:`stripe`,name:`Stripe`,kind:`connection`,tagline:`Payment processing and financial infrastructure tools.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Stripe: payments, customers, billing, and financial infrastructure.`,mcp:{url:`https://mcp.stripe.com`}}},{slug:`supabase`,name:`Supabase`,kind:`connection`,tagline:`Manage databases, authentication, and storage.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Supabase: databases, authentication, and storage.`,mcp:{url:`https://mcp.supabase.com/mcp`}}},{slug:`ticket-tailor`,name:`Ticket Tailor`,kind:`connection`,tagline:`Manage tickets, orders, and events with Ticket Tailor.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Ticket Tailor: events, tickets, and orders.`,mcp:{url:`https://mcp.tickettailor.ai/mcp`}}},{slug:`ticktick`,name:`TickTick`,kind:`connection`,tagline:`Search, create, and manage your tasks and habits in TickTick.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`TickTick: tasks, habits, and lists.`,mcp:{url:`https://mcp.ticktick.com`}}},{slug:`tinybird`,name:`Tinybird`,kind:`connection`,tagline:`Query pipes and data sources in your Tinybird Workspace.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Tinybird: query pipes and data sources, and run SQL. A token grants one Workspace, so add a connection per Workspace.`,mcp:{url:`https://mcp.tinybird.co`}}},{slug:`todoist`,name:`Todoist`,kind:`connection`,tagline:`Search, complete, and manage your tasks in Todoist.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Todoist: search, complete, and manage tasks.`,mcp:{url:`https://ai.todoist.net/mcp`}}},{slug:`webflow`,name:`Webflow`,kind:`connection`,tagline:`Manage Webflow CMS, pages, assets, and sites.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Webflow: CMS items, pages, assets, and sites.`,mcp:{url:`https://mcp.webflow.com/mcp`}}},{slug:`wix`,name:`Wix`,kind:`connection`,tagline:`Manage and build sites and apps on Wix.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Wix: manage and build sites and apps.`,mcp:{url:`https://mcp.wix.com/mcp`}}},{slug:`zapier`,name:`Zapier`,kind:`connection`,tagline:`Automate workflows across thousands of apps.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Zapier: run and manage automations across apps.`,mcp:{url:`https://mcp.zapier.com/api/v1/connect`}}},{slug:`zomato`,name:`Zomato`,kind:`connection`,tagline:`Online food ordering and delivery through Zomato.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Zomato: food ordering and delivery.`,mcp:{url:`https://mcp-server.zomato.com/mcp`}}},{slug:`braintrust`,name:`Braintrust`,kind:`instrumentation`,tagline:`Export AI SDK spans to Braintrust for tracing, evals, and monitoring.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`posthog-instrumentation`,name:`PostHog`,kind:`instrumentation`,tagline:`Send agent traces and generations to PostHog AI Observability.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`sentry-instrumentation`,name:`Sentry`,kind:`instrumentation`,tagline:`Send agent traces to Sentry's OTLP endpoint for tracing and debugging.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`datadog-instrumentation`,name:`Datadog`,kind:`instrumentation`,tagline:`Export agent traces to Datadog APM alongside the rest of your stack.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`honeycomb-instrumentation`,name:`Honeycomb`,kind:`instrumentation`,tagline:`Send OpenTelemetry traces to Honeycomb and query every agent turn.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`arize`,name:`Arize`,kind:`instrumentation`,tagline:`Export traces to Arize AX for LLM observability and evaluation.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`raindrop`,name:`Raindrop`,kind:`instrumentation`,tagline:`Send agent traces to Raindrop to detect and debug AI product issues.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`jaeger`,name:`Jaeger`,kind:`instrumentation`,tagline:`Trace your agent with a local or self-hosted Jaeger OTLP backend.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}}];new Map(INTEGRATIONS.map(e=>[e.slug,e]));function integrationsByKind(t){return INTEGRATIONS.filter(e=>e.kind===t)}function connectionEntries(){return integrationsByKind(`connection`)}function channelEntries(){return integrationsByKind(`channel`)}export{INTEGRATIONS,channelEntries,connectionEntries,connectionProtocols,integrationsByKind};
|
|
1
|
+
function connectionProtocols(e){return[e.mcp?`mcp`:null,e.openapi?`openapi`:null].filter(e=>e!==null)}const INTEGRATIONS=[{slug:`slack`,name:`Slack`,kind:`channel`,tagline:`Mention your agent in channels and DMs, with Connect-managed auth.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0}},{slug:`discord`,name:`Discord`,kind:`channel`,tagline:`Run your agent as a Discord bot across servers and threads.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`teams`,name:`Microsoft Teams`,kind:`channel`,tagline:`Bring your agent into Teams chats and channels.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`telegram`,name:`Telegram`,kind:`channel`,tagline:`Connect your agent to a Telegram bot for 1:1 and group chats.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`twilio`,name:`Twilio`,kind:`channel`,tagline:`Put your agent on a phone number: SMS and speech-transcribed calls.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`blooio`,name:`Blooio`,kind:`channel`,tagline:`Send and receive iMessage, RCS, and SMS through Blooio.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`github`,name:`GitHub`,kind:`channel`,tagline:`Drive your agent from issues, pull requests, and comments, with guided Connect setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`linear-agent`,name:`Linear Agent`,kind:`channel`,tagline:`Delegate Linear issues and comments through Agent Sessions, with guided Connect setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`eve`,name:`Web Chat`,kind:`channel`,tagline:`Embed a first-party web chat UI backed by your agent.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0}},{slug:`buzz`,name:`Buzz`,kind:`channel`,tagline:`Talk to your eve agent from Buzz through its ACP desktop harness.`,surfaces:{scaffoldable:!1,registry:!1,gallery:!0}},{slug:`chat-sdk-gchat`,name:`Google Chat`,kind:`channel`,tagline:`Google Chat spaces and DMs via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-whatsapp`,name:`WhatsApp`,kind:`channel`,tagline:`Customer messaging through WhatsApp Business Cloud via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-x`,name:`X`,kind:`channel`,tagline:`Public mentions and DMs on X via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-messenger`,name:`Messenger`,kind:`channel`,tagline:`Facebook Messenger bots with templates, buttons, and reactions via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-zernio`,name:`Zernio`,kind:`channel`,tagline:`Reach seven social and messaging platforms through one Zernio integration.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-velt`,name:`Velt`,kind:`channel`,tagline:`Add agents to anchored comments across documents, canvases, PDFs, and video.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-sendblue`,name:`Sendblue`,kind:`channel`,tagline:`Send and receive iMessage, SMS, and RCS through Sendblue.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-novu`,name:`Novu`,kind:`channel`,tagline:`Reach Slack, Teams, WhatsApp, Telegram, and email through Novu.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-liveblocks`,name:`Liveblocks`,kind:`channel`,tagline:`Bring your agent into Liveblocks comment threads, mentions, and reactions.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`linq`,name:`Linq`,kind:`channel`,tagline:`iMessage and SMS conversations through Linq, with guided Connect or portable setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-kapso`,name:`Kapso`,kind:`channel`,tagline:`Managed WhatsApp conversations, media, buttons, and history through Kapso.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`photon`,name:`Photon`,kind:`channel`,tagline:`iMessage through Photon, with guided project and phone setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-dial`,name:`Dial`,kind:`channel`,tagline:`Give your agent a phone number for SMS, MMS, iMessage, and voice transcripts.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-agentphone`,name:`AgentPhone`,kind:`channel`,tagline:`SMS, MMS, iMessage, and voice conversations through AgentPhone.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-lark`,name:`Lark / Feishu`,kind:`channel`,tagline:`Lark and Feishu chats with native card streaming via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-beeper`,name:`Beeper`,kind:`channel`,tagline:`Matrix rooms and bridged messaging networks through Beeper.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-resend`,name:`Resend`,kind:`channel`,tagline:`Send and receive threaded email through Resend via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`agent-browser`,name:`agent-browser`,kind:`extension`,tagline:`Add browser automation tools backed by agent-browser to an eve agent.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`blitzreels`,name:`BlitzReels`,kind:`extension`,tagline:`Turn long videos into short clips, generate media, repair edits, and export.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`browserbase`,name:`Browserbase`,kind:`extension`,tagline:`Search, fetch, and automate the web with Browserbase and Stagehand.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`github-tools`,name:`GitHub Tools`,kind:`extension`,tagline:`Add scoped GitHub tools with Vercel Connect authentication and approval rules.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`jetty`,name:`Jetty`,kind:`extension`,tagline:`Grade agent turns, compare experiments, and store durable evaluation trajectories.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`kernel`,name:`KERNEL`,kind:`extension`,tagline:`Let your eve agent use the Internet with KERNEL browser infra, o11y, and stealth. Integrated natively with Vercel Connect and AI Gateway.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`upstash-agentkit`,name:`Upstash AgentKit`,kind:`extension`,tagline:`Add long-term memory, Redis Search, and durable chat history with Upstash Redis.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`arcana`,name:`Kybernesis Arcana`,kind:`extension`,tagline:`Give your agent workspace-scoped long-term memory with recall, storage, and brain notes.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`hindsight`,name:`Hindsight`,kind:`extension`,tagline:`Recall relevant context before every turn and retain each exchange automatically.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`browser-use`,name:`Browser Use`,kind:`connection`,tagline:`Run managed browser automation tasks through Browser Use's MCP server.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Browser Use: run browser automation tasks, inspect sessions, and manage browser profiles.`,mcp:{url:`https://api.browser-use.com/v3/mcp`}}},{slug:`vercel`,name:`Vercel`,kind:`connection`,tagline:`Manage Vercel projects, deployments, and logs through Vercel's MCP server.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Vercel: manage projects and deployments, inspect logs, and search documentation.`,mcp:{url:`https://mcp.vercel.com`}}},{slug:`linear`,name:`Linear`,kind:`connection`,tagline:`Issues, projects, cycles, and comments via Linear's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Linear workspace: issues, projects, cycles, and comments.`,mcp:{url:`https://mcp.linear.app/mcp`}}},{slug:`notion`,name:`Notion`,kind:`connection`,tagline:`Search and edit Notion pages and databases over MCP or OpenAPI.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Notion workspace: search and edit pages and databases.`,mcp:{url:`https://mcp.notion.com/mcp`},openapi:{spec:`https://developers.notion.com/openapi.json`,baseUrl:`https://api.notion.com`,headers:{"Notion-Version":`2022-06-28`}}}},{slug:`datadog`,name:`Datadog`,kind:`connection`,tagline:`Query metrics, monitors, and logs through Datadog's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Datadog: query metrics, monitors, logs, and incidents.`,mcp:{url:`https://mcp.datadoghq.com/api/mcp`}}},{slug:`honeycomb`,name:`Honeycomb`,kind:`connection`,tagline:`Explore traces and run queries through Honeycomb's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Honeycomb: explore traces, run queries, and inspect datasets.`,mcp:{url:`https://mcp.honeycomb.io/mcp`}}},{slug:`agentcard`,name:`Agentcard`,kind:`connection`,tagline:`let agents buy online`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:"Agentcard: the agent's wallet. Shop and check out at real merchants (DoorDash, Good Eggs, flights) with the conversational `buy` tool (thread conversation_id on follow-ups), issue a single-use virtual card to pay at any checkout, let the user add their own card, and manage the cash that funds it: balance, top-ups, transactions, KYC, human support.",mcp:{url:`https://mcp.agentcard.sh/mcp`}}},{slug:`airtable`,name:`Airtable`,kind:`connection`,tagline:`Bases, tables, and records through Airtable's MCP server.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Airtable: bases, tables, and records.`,mcp:{url:`https://mcp.airtable.com/mcp`}}},{slug:`bitly`,name:`Bitly`,kind:`connection`,tagline:`Shorten links, generate QR Codes, and track performance.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Bitly: shorten links, generate QR Codes, and track link performance.`,mcp:{url:`https://api-ssl.bitly.com/v4/mcp`}}},{slug:`brex`,name:`Brex`,kind:`connection`,tagline:`Expenses, cards, and cash through Brex's finance automation.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Brex: expenses, cards, budgets, and cash.`,mcp:{url:`https://api.brex.com/mcp`}}},{slug:`candid`,name:`Candid`,kind:`connection`,tagline:`Research nonprofits and funders using Candid's data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Candid: research nonprofits, funders, and grants.`,mcp:{url:`https://mcp.candid.org/mcp`}}},{slug:`clickhouse`,name:`ClickHouse`,kind:`connection`,tagline:`Query and explore your ClickHouse Cloud data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`ClickHouse Cloud: query and explore databases and tables.`,mcp:{url:`https://mcp.clickhouse.cloud/mcp`}}},{slug:`cloudinary`,name:`Cloudinary`,kind:`connection`,tagline:`Manage, transform, and deliver your images and videos.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Cloudinary: manage, transform, and deliver image and video assets.`,mcp:{url:`https://asset-management.mcp.cloudinary.com/sse`}}},{slug:`coda`,name:`Coda`,kind:`connection`,tagline:`Create, search, and update docs and tables.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Coda: create, search, and update docs and tables.`,mcp:{url:`https://coda.io/apis/mcp`}}},{slug:`context`,name:`context.dev`,kind:`connection`,tagline:`search, scrape, extract, and monitor live web data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`context.dev: search the live web, scrape and crawl sites, extract structured data, parse files, retrieve brand intelligence, monitor changes, and run batch jobs.`,mcp:{url:`https://mcp.context.dev/mcp`}}},{slug:`egnyte`,name:`Egnyte`,kind:`connection`,tagline:`Securely access and analyze Egnyte content.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Egnyte: search, access, and analyze governed content.`,mcp:{url:`https://mcp-server.egnyte.com/mcp`}}},{slug:`embat`,name:`Embat`,kind:`connection`,tagline:`Ask Embat about cash, debt, payments, and accounting.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Embat: cash, debt, payments, and accounting.`,mcp:{url:`https://tellme.embat.io/mcp`}}},{slug:`hugging-face`,name:`Hugging Face`,kind:`connection`,tagline:`Access the Hugging Face Hub and thousands of Gradio apps.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Hugging Face: models, datasets, Spaces, and Gradio apps on the Hub.`,mcp:{url:`https://huggingface.co/mcp?login&gradio=none`}}},{slug:`local-falcon`,name:`Local Falcon`,kind:`connection`,tagline:`AI visibility and local search intelligence.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Local Falcon: local search rankings and AI visibility reports.`,mcp:{url:`https://mcp.localfalcon.com`}}},{slug:`make`,name:`Make`,kind:`connection`,tagline:`Run Make scenarios and manage your Make account.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Make: run scenarios and manage automations.`,mcp:{url:`https://mcp.make.com`}}},{slug:`manufact`,name:`Manufact`,kind:`connection`,tagline:`Deploy and monitor MCP servers with Manufact.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Manufact: deploy and monitor MCP servers.`,mcp:{url:`https://mcp.manufact.com/mcp`}}},{slug:`mem0`,name:`Mem0`,kind:`connection`,tagline:`Persistent memory for AI agents and assistants.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Mem0: store and retrieve persistent agent memory.`,mcp:{url:`https://mcp.mem0.ai/mcp`}}},{slug:`miro`,name:`Miro`,kind:`connection`,tagline:`Access and create content on Miro boards.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Miro: read and create content on boards.`,mcp:{url:`https://mcp.miro.com/`}}},{slug:`mixpanel`,name:`Mixpanel`,kind:`connection`,tagline:`Analyze, query, and manage your Mixpanel data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Mixpanel: analyze, query, and manage analytics data.`,mcp:{url:`https://mcp.mixpanel.com/mcp`}}},{slug:`natural`,name:`Natural`,kind:`connection`,tagline:`Send, request, and manage payments with Natural.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Natural: agentic payments — send and request payments, check balances, and move funds.`,mcp:{url:`https://mcp.natural.com/mcp`}}},{slug:`netlify`,name:`Netlify`,kind:`connection`,tagline:`Create, deploy, manage, and secure websites on Netlify.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Netlify: create, deploy, manage, and secure sites.`,mcp:{url:`https://netlify-mcp.netlify.app/mcp`}}},{slug:`oreilly`,name:`O'Reilly`,kind:`connection`,tagline:`Discover O'Reilly's expert learning content.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`O'Reilly: search books, courses, and learning content.`,mcp:{url:`https://api.oreilly.com/api/content-discovery/v1/mcp/`}}},{slug:`planetscale`,name:`PlanetScale`,kind:`connection`,tagline:`Authenticated access to your PlanetScale Postgres and MySQL databases.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`PlanetScale: query Postgres and MySQL databases.`,mcp:{url:`https://mcp.pscale.dev/mcp/planetscale`}}},{slug:`posthog`,name:`PostHog`,kind:`connection`,tagline:`Query, analyze, and manage your PostHog insights.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`PostHog: insights, events, and feature flags.`,mcp:{url:`https://mcp.posthog.com/mcp`}}},{slug:`postman`,name:`Postman`,kind:`connection`,tagline:`Give API context to your coding agents with Postman.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Postman: APIs, collections, and workspaces.`,mcp:{url:`https://mcp.postman.com/minimal`}}},{slug:`razorpay`,name:`Razorpay`,kind:`connection`,tagline:`Razorpay payments, settlements, and dashboard data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Razorpay: payments, settlements, and dashboard data.`,mcp:{url:`https://mcp.razorpay.com/mcp`}}},{slug:`sentry`,name:`Sentry`,kind:`connection`,tagline:`Search, query, and debug errors intelligently.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Sentry: search, query, and debug errors and issues.`,mcp:{url:`https://mcp.sentry.dev/mcp`}}},{slug:`similarweb`,name:`Similarweb`,kind:`connection`,tagline:`Real-time web, mobile app, and market data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Similarweb: web traffic, app, and market intelligence data.`,mcp:{url:`https://mcp.similarweb.com`}}},{slug:`shopify`,name:`Shopify`,kind:`connection`,tagline:`Search products and manage carts and checkouts on a Shopify storefront.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Search products and build carts and checkouts on a Shopify storefront.`,mcp:{url:`https://{shop}.myshopify.com/api/ucp/mcp`}}},{slug:`stripe`,name:`Stripe`,kind:`connection`,tagline:`Payment processing and financial infrastructure tools.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Stripe: payments, customers, billing, and financial infrastructure.`,mcp:{url:`https://mcp.stripe.com`}}},{slug:`supabase`,name:`Supabase`,kind:`connection`,tagline:`Manage databases, authentication, and storage.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Supabase: databases, authentication, and storage.`,mcp:{url:`https://mcp.supabase.com/mcp`}}},{slug:`ticket-tailor`,name:`Ticket Tailor`,kind:`connection`,tagline:`Manage tickets, orders, and events with Ticket Tailor.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Ticket Tailor: events, tickets, and orders.`,mcp:{url:`https://mcp.tickettailor.ai/mcp`}}},{slug:`ticktick`,name:`TickTick`,kind:`connection`,tagline:`Search, create, and manage your tasks and habits in TickTick.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`TickTick: tasks, habits, and lists.`,mcp:{url:`https://mcp.ticktick.com`}}},{slug:`tinybird`,name:`Tinybird`,kind:`connection`,tagline:`Query pipes and data sources in your Tinybird Workspace.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Tinybird: query pipes and data sources, and run SQL. A token grants one Workspace, so add a connection per Workspace.`,mcp:{url:`https://mcp.tinybird.co`}}},{slug:`todoist`,name:`Todoist`,kind:`connection`,tagline:`Search, complete, and manage your tasks in Todoist.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Todoist: search, complete, and manage tasks.`,mcp:{url:`https://ai.todoist.net/mcp`}}},{slug:`webflow`,name:`Webflow`,kind:`connection`,tagline:`Manage Webflow CMS, pages, assets, and sites.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Webflow: CMS items, pages, assets, and sites.`,mcp:{url:`https://mcp.webflow.com/mcp`}}},{slug:`wix`,name:`Wix`,kind:`connection`,tagline:`Manage and build sites and apps on Wix.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Wix: manage and build sites and apps.`,mcp:{url:`https://mcp.wix.com/mcp`}}},{slug:`zapier`,name:`Zapier`,kind:`connection`,tagline:`Automate workflows across thousands of apps.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Zapier: run and manage automations across apps.`,mcp:{url:`https://mcp.zapier.com/api/v1/connect`}}},{slug:`zomato`,name:`Zomato`,kind:`connection`,tagline:`Online food ordering and delivery through Zomato.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Zomato: food ordering and delivery.`,mcp:{url:`https://mcp-server.zomato.com/mcp`}}},{slug:`braintrust`,name:`Braintrust`,kind:`instrumentation`,tagline:`Export AI SDK spans to Braintrust for tracing, evals, and monitoring.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`posthog-instrumentation`,name:`PostHog`,kind:`instrumentation`,tagline:`Send agent traces and generations to PostHog AI Observability.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`sentry-instrumentation`,name:`Sentry`,kind:`instrumentation`,tagline:`Send agent traces to Sentry's OTLP endpoint for tracing and debugging.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`datadog-instrumentation`,name:`Datadog`,kind:`instrumentation`,tagline:`Export agent traces to Datadog APM alongside the rest of your stack.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`honeycomb-instrumentation`,name:`Honeycomb`,kind:`instrumentation`,tagline:`Send OpenTelemetry traces to Honeycomb and query every agent turn.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`arize`,name:`Arize`,kind:`instrumentation`,tagline:`Export traces to Arize AX for LLM observability and evaluation.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`raindrop`,name:`Raindrop`,kind:`instrumentation`,tagline:`Send agent traces to Raindrop to detect and debug AI product issues.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`jaeger`,name:`Jaeger`,kind:`instrumentation`,tagline:`Trace your agent with a local or self-hosted Jaeger OTLP backend.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}}];new Map(INTEGRATIONS.map(e=>[e.slug,e]));function integrationsByKind(t){return INTEGRATIONS.filter(e=>e.kind===t)}function connectionEntries(){return integrationsByKind(`connection`)}function channelEntries(){return integrationsByKind(`channel`)}export{INTEGRATIONS,channelEntries,connectionEntries,connectionProtocols,integrationsByKind};
|
|
@@ -9,7 +9,7 @@ export declare const EVE_STREAM_TAIL_INDEX_HEADER = "x-eve-stream-tail-index";
|
|
|
9
9
|
export declare const EVE_STREAM_VERSION_HEADER = "x-eve-stream-version";
|
|
10
10
|
export declare const EVE_MESSAGE_STREAM_CONTENT_TYPE = "application/x-ndjson; charset=utf-8";
|
|
11
11
|
export declare const EVE_MESSAGE_STREAM_FORMAT = "ndjson";
|
|
12
|
-
export declare const EVE_MESSAGE_STREAM_VERSION = "
|
|
12
|
+
export declare const EVE_MESSAGE_STREAM_VERSION = "24";
|
|
13
13
|
/**
|
|
14
14
|
* eve-owned finish reason for one completed assistant step.
|
|
15
15
|
*
|
|
@@ -365,6 +365,23 @@ export interface MessageAppendedStreamEvent {
|
|
|
365
365
|
};
|
|
366
366
|
type: "message.appended";
|
|
367
367
|
}
|
|
368
|
+
/**
|
|
369
|
+
* Stream event emitted while the model is generating the input for one tool
|
|
370
|
+
* call, before the validated call is announced via `actions.requested`.
|
|
371
|
+
*/
|
|
372
|
+
export interface ActionInputAppendedStreamEvent {
|
|
373
|
+
data: {
|
|
374
|
+
callId: string;
|
|
375
|
+
inputTextDelta: string;
|
|
376
|
+
/** Zero-based UTF-16 code-unit offset where `inputTextDelta` begins. */
|
|
377
|
+
inputTextOffset: number;
|
|
378
|
+
sequence: number;
|
|
379
|
+
stepIndex: number;
|
|
380
|
+
toolName: string;
|
|
381
|
+
turnId: string;
|
|
382
|
+
};
|
|
383
|
+
type: "action.input.appended";
|
|
384
|
+
}
|
|
368
385
|
/**
|
|
369
386
|
* Stream event emitted when one reasoning delta is appended to the current
|
|
370
387
|
* reasoning block for the current step.
|
|
@@ -636,7 +653,7 @@ export interface SessionCompletedStreamEvent {
|
|
|
636
653
|
* Internal emitters use this type while constructing events. Public stream
|
|
637
654
|
* consumers receive {@link MessageStreamEvent}.
|
|
638
655
|
*/
|
|
639
|
-
export type UnstampedMessageStreamEvent = ApprovalCandidateStreamEvent | ApprovalSettledStreamEvent | ContextClearedStreamEvent | CompactionCompletedStreamEvent | CompactionRequestedStreamEvent | AuthorizationCompletedStreamEvent | AuthorizationRequiredStreamEvent | MessageAppendedStreamEvent | MessageCompletedStreamEvent | MessageReceivedStreamEvent | ReasoningAppendedStreamEvent | SessionCompletedStreamEvent | SessionFailedStreamEvent | SessionStartedStreamEvent | SessionWaitingStreamEvent | ResultCompletedStreamEvent | SubagentCalledStreamEvent | SubagentChildEventStreamEvent | SubagentCompletedStreamEvent | SubagentStartedStreamEvent | ActionsRequestedStreamEvent | InputRequestedStreamEvent | InputResolvedStreamEvent | ActionPartialStreamEvent | ActionResultStreamEvent | ReasoningCompletedStreamEvent | StepCompletedStreamEvent | StepFailedStreamEvent | StepStartedStreamEvent | TurnCancelledStreamEvent | TurnCompletedStreamEvent | TurnFailedStreamEvent | TurnStartedStreamEvent;
|
|
656
|
+
export type UnstampedMessageStreamEvent = ActionInputAppendedStreamEvent | ApprovalCandidateStreamEvent | ApprovalSettledStreamEvent | ContextClearedStreamEvent | CompactionCompletedStreamEvent | CompactionRequestedStreamEvent | AuthorizationCompletedStreamEvent | AuthorizationRequiredStreamEvent | MessageAppendedStreamEvent | MessageCompletedStreamEvent | MessageReceivedStreamEvent | ReasoningAppendedStreamEvent | SessionCompletedStreamEvent | SessionFailedStreamEvent | SessionStartedStreamEvent | SessionWaitingStreamEvent | ResultCompletedStreamEvent | SubagentCalledStreamEvent | SubagentChildEventStreamEvent | SubagentCompletedStreamEvent | SubagentStartedStreamEvent | ActionsRequestedStreamEvent | InputRequestedStreamEvent | InputResolvedStreamEvent | ActionPartialStreamEvent | ActionResultStreamEvent | ReasoningCompletedStreamEvent | StepCompletedStreamEvent | StepFailedStreamEvent | StepStartedStreamEvent | TurnCancelledStreamEvent | TurnCompletedStreamEvent | TurnFailedStreamEvent | TurnStartedStreamEvent;
|
|
640
657
|
/**
|
|
641
658
|
* Stream events that represent an unrecovered turn/session failure.
|
|
642
659
|
*/
|
|
@@ -705,6 +722,16 @@ export declare function createActionsRequestedEvent(input: {
|
|
|
705
722
|
readonly stepIndex: number;
|
|
706
723
|
readonly turnId: string;
|
|
707
724
|
}): ActionsRequestedStreamEvent;
|
|
725
|
+
/** Creates an `action.input.appended` event for streamed tool input text. */
|
|
726
|
+
export declare function createActionInputAppendedEvent(input: {
|
|
727
|
+
readonly callId: string;
|
|
728
|
+
readonly inputTextDelta: string;
|
|
729
|
+
readonly inputTextOffset: number;
|
|
730
|
+
readonly sequence: number;
|
|
731
|
+
readonly stepIndex: number;
|
|
732
|
+
readonly toolName: string;
|
|
733
|
+
readonly turnId: string;
|
|
734
|
+
}): ActionInputAppendedStreamEvent;
|
|
708
735
|
/**
|
|
709
736
|
* Creates the `authorization.required` event for one authorization source
|
|
710
737
|
* that needs user authorization before it can continue.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{deserializeUrlFilePart,hasInternalRefScheme,isSerializedUrlFilePart}from"#internal/attachments/url-refs.js";import{createEveSessionStreamRoutePath,createEveSubagentStreamRoutePath}from"#protocol/routes.js";import{toChannelLocalContinuationToken}from"#shared/continuation-token.js";import{decodeSandboxRef,isSandboxRefUrl}from"#internal/attachments/sandbox-refs.js";import{createEventId}from"#protocol/event-id.js";const EVE_SESSION_ID_HEADER=`x-eve-session-id`,EVE_STREAM_FORMAT_HEADER=`x-eve-stream-format`,EVE_STREAM_TAIL_INDEX_HEADER=`x-eve-stream-tail-index`,EVE_STREAM_VERSION_HEADER=`x-eve-stream-version`,EVE_MESSAGE_STREAM_CONTENT_TYPE=`application/x-ndjson; charset=utf-8`,EVE_MESSAGE_STREAM_FORMAT=`ndjson`,EVE_MESSAGE_STREAM_VERSION=`
|
|
2
|
-
`)}function projectUserContentParts(e){if(typeof e==`string`)return[{text:e,type:`text`}];let t=[];for(let n of e)n.type===`text`?t.push({text:n.text,type:`text`}):n.type===`file`?t.push(projectFileLikePart(n.data,n.mediaType,n.filename)):n.type===`image`&&t.push(projectFileLikePart(n.image,n.mediaType??`application/octet-stream`,void 0));return t}function projectFileLikePart(e,t,n){if(isSandboxRefUrl(e)){let t=decodeSandboxRef(e);return createProjectedFilePart({filename:basenameOf(n??t.path),mediaType:t.mediaType,size:t.size})}let r=projectTaggedFileData(e,t,n);if(r!==void 0)return r;let i=byteLengthOf(e);return createProjectedFilePart(i===void 0?{filename:n,mediaType:t,...clientUrlFragment(e)}:{filename:n,mediaType:t,size:i})}function projectTaggedFileData(e,t,n){if(isTaggedFileData(e))switch(e.type){case`data`:{let r=byteLengthOf(e.data);return createProjectedFilePart(r===void 0?{filename:n,mediaType:t}:{filename:n,mediaType:t,size:r})}case`reference`:case`text`:return createProjectedFilePart({filename:n,mediaType:t});case`url`:return createProjectedFilePart({filename:n,mediaType:t,...clientUrlFragment(e.url)})}}function createProjectedFilePart(e){let t={mediaType:e.mediaType,type:`file`};return e.filename!==void 0&&(t.filename=e.filename),e.size!==void 0&&(t.size=e.size),e.url!==void 0&&(t.url=e.url),t}function isTaggedFileData(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`data`||t===`reference`||t===`text`||t===`url`}function byteLengthOf(e){if(e instanceof Uint8Array||e instanceof ArrayBuffer)return e.byteLength}function clientUrlFragment(r){if(isSerializedUrlFilePart(r))try{let t=deserializeUrlFilePart(r);return isClientResolvableUrl(t)?{url:t.href}:{}}catch{return{}}if(r instanceof URL)return isClientResolvableUrl(r)?{url:r.href}:{};if(typeof r!=`string`||hasInternalRefScheme(r))return{};if(r.startsWith(`data:`))return{url:r};try{let e=new URL(r);return isClientResolvableUrl(e)?{url:e.href}:{}}catch{return{}}}function isClientResolvableUrl(e){return e.protocol===`http:`||e.protocol===`https:`||e.protocol===`data:`}function basenameOf(e){let t=e.replaceAll(`\\`,`/`),n=t.slice(t.lastIndexOf(`/`)+1);return n.length>0?n:e}function createActionsRequestedEvent(e){return{data:{actions:e.actions,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`actions.requested`}}function createAuthorizationRequiredEvent(e){let t={description:e.description,name:e.name,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId};return e.attemptId!==void 0&&(t.attemptId=e.attemptId),e.authorization!==void 0&&(t.authorization=e.authorization),e.candidateId!==void 0&&(t.candidateId=e.candidateId),e.webhookUrl!==void 0&&(t.webhookUrl=e.webhookUrl),{data:t,type:`authorization.required`}}function createAuthorizationCompletedEvent(e){let t={name:e.name,outcome:e.outcome,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId};return e.attemptId!==void 0&&(t.attemptId=e.attemptId),e.authorization!==void 0&&(t.authorization=e.authorization),e.candidateId!==void 0&&(t.candidateId=e.candidateId),e.reason!==void 0&&(t.reason=e.reason),{data:t,type:`authorization.completed`}}function createApprovalCandidateEvent(e){return{data:e,type:`approval.candidate`}}function createApprovalSettledEvent(e){return{data:e,type:`approval.settled`}}function createInputRequestedEvent(e){return{data:{requests:e.requests,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`input.requested`}}function createInputResolvedEvent(e){return{data:{resolutions:e.resolutions,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`input.resolved`}}function createActionResultEvent(e){let t=e.rejected===!0?{error:buildActionResultError(e.result),status:`rejected`}:normalizeActionResultOutcome(e.result);return{data:{error:t.error,result:e.result,sequence:e.sequence,status:t.status,stepIndex:e.stepIndex,turnId:e.turnId},type:`action.result`}}function createActionPartialEvent(e){return{data:{result:e.result,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`action.partial`}}function createSubagentCalledEvent(e){return{data:{callId:e.callId,childSessionId:e.childSessionId,childStreamPath:e.remote===void 0?createEveSessionStreamRoutePath(e.childSessionId):createEveSubagentStreamRoutePath({callId:e.callId,childSessionId:e.childSessionId,parentSessionId:e.sessionId}),sessionId:e.sessionId,sequence:e.sequence,name:e.name,remote:e.remote,toolName:e.toolName,turnId:e.turnId,workflowId:e.workflowId},type:`subagent.called`}}function createMessageAppendedEvent(e){return{data:{messageDelta:e.messageDelta,messageSoFar:e.messageSoFar,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`message.appended`}}function createReasoningAppendedEvent(e){return{data:{reasoningDelta:e.reasoningDelta,reasoningSoFar:e.reasoningSoFar,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`reasoning.appended`}}function createMessageCompletedEvent(e){return{data:{finishReason:e.finishReason??`stop`,message:e.message,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`message.completed`}}function createReasoningCompletedEvent(e){return{data:{reasoning:e.reasoning,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`reasoning.completed`}}function createResultCompletedEvent(e){return{data:{result:e.result,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`result.completed`}}function createStepStartedEvent(e){return{data:{modelId:e.modelId,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`step.started`}}function createStepCompletedEvent(e){let t={finishReason:e.finishReason,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId};return e.usage!==void 0&&(t.usage=e.usage),e.providerMetadata!==void 0&&(t.providerMetadata=e.providerMetadata),{data:t,type:`step.completed`}}function createStepFailedEvent(e){return{data:{code:e.code,details:e.details,message:e.message,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`step.failed`}}function createTurnCompletedEvent(e){return{data:{sequence:e.sequence,turnId:e.turnId},type:`turn.completed`}}function createTurnFailedEvent(e){return{data:{code:e.code,details:e.details,message:e.message,sequence:e.sequence,turnId:e.turnId},type:`turn.failed`}}function createTurnCancelledEvent(e){return{data:{sequence:e.sequence,turnId:e.turnId},type:`turn.cancelled`}}function createContextClearedEvent(e){return{data:{sequence:e.sequence,sessionId:e.sessionId,turnId:e.turnId},type:`context.cleared`}}function createCompactionRequestedEvent(e){return{data:{modelId:e.modelId,sequence:e.sequence,sessionId:e.sessionId,turnId:e.turnId,usageInputTokens:e.usageInputTokens??null},type:`compaction.requested`}}function createCompactionCompletedEvent(e){return{data:{modelId:e.modelId,sequence:e.sequence,sessionId:e.sessionId,turnId:e.turnId},type:`compaction.completed`}}function createSessionWaitingEvent(e=``){return{data:{continuationToken:toChannelLocalContinuationToken(e),wait:`next-user-message`},type:`session.waiting`}}function createSessionFailedEvent(e){return{data:{code:e.code,details:e.details,message:e.message,sessionId:e.sessionId},type:`session.failed`}}function createSessionCompletedEvent(){return{type:`session.completed`}}function stampMessageStreamEvent(e){return{...e,meta:{at:new Date().toISOString(),id:createEventId()}}}function encodeMessageStreamEvent(e){return textEncoder.encode(`${JSON.stringify(e)}\n`)}function normalizeActionResultOutcome(e){if(e.isError===!0)return{error:buildActionResultError(e),status:`failed`};let t=readActionResultOutputError(e.output);return t===void 0?{status:`completed`}:{error:t,status:`failed`}}function buildActionResultError(e){let t=readActionResultOutputError(e.output);return t===void 0?{code:`ACTION_RESULT_FAILED`,message:formatActionResultOutput(e.output)}:t}function readActionResultOutputError(e){let t=parseActionResultOutputRecord(e);if(t===void 0)return;let n=typeof t.code==`string`&&t.code.length>0?t.code:void 0,r=typeof t.message==`string`&&t.message.length>0?t.message:void 0;if(!(n===void 0||r===void 0))return{code:n,message:r}}function parseActionResultOutputRecord(e){if(typeof e==`object`&&e)return e;if(typeof e!=`string`)return;let t=e.trim();if(t.length!==0)try{let e=JSON.parse(t);if(typeof e==`object`&&e)return e}catch{return}}function formatActionResultOutput(e){if(typeof e==`string`)return e;let t=JSON.stringify(e);return typeof t==`string`&&t.length>0?t:`Action failed.`}export{EVE_MESSAGE_STREAM_CONTENT_TYPE,EVE_MESSAGE_STREAM_FORMAT,EVE_MESSAGE_STREAM_VERSION,EVE_SESSION_ID_HEADER,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER,createActionPartialEvent,createActionResultEvent,createActionsRequestedEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageAppendedEvent,createMessageCompletedEvent,createMessageReceivedEvent,createReasoningAppendedEvent,createReasoningCompletedEvent,createResultCompletedEvent,createSessionCompletedEvent,createSessionFailedEvent,createSessionStartedEvent,createSessionWaitingEvent,createStepCompletedEvent,createStepFailedEvent,createStepStartedEvent,createSubagentCalledEvent,createTurnCancelledEvent,createTurnCompletedEvent,createTurnFailedEvent,createTurnStartedEvent,encodeMessageStreamEvent,isCurrentTurnBoundaryEvent,isTurnFailureEvent,stampMessageStreamEvent};
|
|
1
|
+
import{deserializeUrlFilePart,hasInternalRefScheme,isSerializedUrlFilePart}from"#internal/attachments/url-refs.js";import{createEveSessionStreamRoutePath,createEveSubagentStreamRoutePath}from"#protocol/routes.js";import{toChannelLocalContinuationToken}from"#shared/continuation-token.js";import{decodeSandboxRef,isSandboxRefUrl}from"#internal/attachments/sandbox-refs.js";import{createEventId}from"#protocol/event-id.js";const EVE_SESSION_ID_HEADER=`x-eve-session-id`,EVE_STREAM_FORMAT_HEADER=`x-eve-stream-format`,EVE_STREAM_TAIL_INDEX_HEADER=`x-eve-stream-tail-index`,EVE_STREAM_VERSION_HEADER=`x-eve-stream-version`,EVE_MESSAGE_STREAM_CONTENT_TYPE=`application/x-ndjson; charset=utf-8`,EVE_MESSAGE_STREAM_FORMAT=`ndjson`,EVE_MESSAGE_STREAM_VERSION=`24`,textEncoder=new TextEncoder;function isCurrentTurnBoundaryEvent(e){return e.type===`session.completed`||e.type===`session.failed`||e.type===`session.waiting`}function isTurnFailureEvent(e){return e.type===`session.failed`||e.type===`step.failed`||e.type===`turn.failed`}function createSessionStartedEvent(e){let t={};return e?.invocation!==void 0&&(t.invocation=e.invocation),e?.runtime!==void 0&&(t.runtime=e.runtime),e?.trace!==void 0&&(t.trace=e.trace),{data:t,type:`session.started`}}function createTurnStartedEvent(e){let t={sequence:e.sequence,turnId:e.turnId};return e.trace!==void 0&&(t.trace=e.trace),{data:t,type:`turn.started`}}function createMessageReceivedEvent(e){return{data:{message:summarizeUserContent(e.message),parts:projectUserContentParts(e.message),sequence:e.sequence,turnId:e.turnId},type:`message.received`}}function summarizeUserContent(e){if(typeof e==`string`)return e;let t=[];for(let n of e)if(n.type===`text`)t.push(n.text);else if(n.type===`file`){let e=n.filename??n.mediaType;t.push(`[file: ${e} (${n.mediaType})]`)}else n.type===`image`&&t.push(`[image: ${n.mediaType??`image`}]`);return t.join(`
|
|
2
|
+
`)}function projectUserContentParts(e){if(typeof e==`string`)return[{text:e,type:`text`}];let t=[];for(let n of e)n.type===`text`?t.push({text:n.text,type:`text`}):n.type===`file`?t.push(projectFileLikePart(n.data,n.mediaType,n.filename)):n.type===`image`&&t.push(projectFileLikePart(n.image,n.mediaType??`application/octet-stream`,void 0));return t}function projectFileLikePart(e,t,n){if(isSandboxRefUrl(e)){let t=decodeSandboxRef(e);return createProjectedFilePart({filename:basenameOf(n??t.path),mediaType:t.mediaType,size:t.size})}let r=projectTaggedFileData(e,t,n);if(r!==void 0)return r;let i=byteLengthOf(e);return createProjectedFilePart(i===void 0?{filename:n,mediaType:t,...clientUrlFragment(e)}:{filename:n,mediaType:t,size:i})}function projectTaggedFileData(e,t,n){if(isTaggedFileData(e))switch(e.type){case`data`:{let r=byteLengthOf(e.data);return createProjectedFilePart(r===void 0?{filename:n,mediaType:t}:{filename:n,mediaType:t,size:r})}case`reference`:case`text`:return createProjectedFilePart({filename:n,mediaType:t});case`url`:return createProjectedFilePart({filename:n,mediaType:t,...clientUrlFragment(e.url)})}}function createProjectedFilePart(e){let t={mediaType:e.mediaType,type:`file`};return e.filename!==void 0&&(t.filename=e.filename),e.size!==void 0&&(t.size=e.size),e.url!==void 0&&(t.url=e.url),t}function isTaggedFileData(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`data`||t===`reference`||t===`text`||t===`url`}function byteLengthOf(e){if(e instanceof Uint8Array||e instanceof ArrayBuffer)return e.byteLength}function clientUrlFragment(r){if(isSerializedUrlFilePart(r))try{let t=deserializeUrlFilePart(r);return isClientResolvableUrl(t)?{url:t.href}:{}}catch{return{}}if(r instanceof URL)return isClientResolvableUrl(r)?{url:r.href}:{};if(typeof r!=`string`||hasInternalRefScheme(r))return{};if(r.startsWith(`data:`))return{url:r};try{let e=new URL(r);return isClientResolvableUrl(e)?{url:e.href}:{}}catch{return{}}}function isClientResolvableUrl(e){return e.protocol===`http:`||e.protocol===`https:`||e.protocol===`data:`}function basenameOf(e){let t=e.replaceAll(`\\`,`/`),n=t.slice(t.lastIndexOf(`/`)+1);return n.length>0?n:e}function createActionsRequestedEvent(e){return{data:{actions:e.actions,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`actions.requested`}}function createActionInputAppendedEvent(e){return{data:{callId:e.callId,inputTextDelta:e.inputTextDelta,inputTextOffset:e.inputTextOffset,sequence:e.sequence,stepIndex:e.stepIndex,toolName:e.toolName,turnId:e.turnId},type:`action.input.appended`}}function createAuthorizationRequiredEvent(e){let t={description:e.description,name:e.name,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId};return e.attemptId!==void 0&&(t.attemptId=e.attemptId),e.authorization!==void 0&&(t.authorization=e.authorization),e.candidateId!==void 0&&(t.candidateId=e.candidateId),e.webhookUrl!==void 0&&(t.webhookUrl=e.webhookUrl),{data:t,type:`authorization.required`}}function createAuthorizationCompletedEvent(e){let t={name:e.name,outcome:e.outcome,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId};return e.attemptId!==void 0&&(t.attemptId=e.attemptId),e.authorization!==void 0&&(t.authorization=e.authorization),e.candidateId!==void 0&&(t.candidateId=e.candidateId),e.reason!==void 0&&(t.reason=e.reason),{data:t,type:`authorization.completed`}}function createApprovalCandidateEvent(e){return{data:e,type:`approval.candidate`}}function createApprovalSettledEvent(e){return{data:e,type:`approval.settled`}}function createInputRequestedEvent(e){return{data:{requests:e.requests,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`input.requested`}}function createInputResolvedEvent(e){return{data:{resolutions:e.resolutions,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`input.resolved`}}function createActionResultEvent(e){let t=e.rejected===!0?{error:buildActionResultError(e.result),status:`rejected`}:normalizeActionResultOutcome(e.result);return{data:{error:t.error,result:e.result,sequence:e.sequence,status:t.status,stepIndex:e.stepIndex,turnId:e.turnId},type:`action.result`}}function createActionPartialEvent(e){return{data:{result:e.result,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`action.partial`}}function createSubagentCalledEvent(e){return{data:{callId:e.callId,childSessionId:e.childSessionId,childStreamPath:e.remote===void 0?createEveSessionStreamRoutePath(e.childSessionId):createEveSubagentStreamRoutePath({callId:e.callId,childSessionId:e.childSessionId,parentSessionId:e.sessionId}),sessionId:e.sessionId,sequence:e.sequence,name:e.name,remote:e.remote,toolName:e.toolName,turnId:e.turnId,workflowId:e.workflowId},type:`subagent.called`}}function createMessageAppendedEvent(e){return{data:{messageDelta:e.messageDelta,messageSoFar:e.messageSoFar,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`message.appended`}}function createReasoningAppendedEvent(e){return{data:{reasoningDelta:e.reasoningDelta,reasoningSoFar:e.reasoningSoFar,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`reasoning.appended`}}function createMessageCompletedEvent(e){return{data:{finishReason:e.finishReason??`stop`,message:e.message,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`message.completed`}}function createReasoningCompletedEvent(e){return{data:{reasoning:e.reasoning,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`reasoning.completed`}}function createResultCompletedEvent(e){return{data:{result:e.result,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`result.completed`}}function createStepStartedEvent(e){return{data:{modelId:e.modelId,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`step.started`}}function createStepCompletedEvent(e){let t={finishReason:e.finishReason,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId};return e.usage!==void 0&&(t.usage=e.usage),e.providerMetadata!==void 0&&(t.providerMetadata=e.providerMetadata),{data:t,type:`step.completed`}}function createStepFailedEvent(e){return{data:{code:e.code,details:e.details,message:e.message,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},type:`step.failed`}}function createTurnCompletedEvent(e){return{data:{sequence:e.sequence,turnId:e.turnId},type:`turn.completed`}}function createTurnFailedEvent(e){return{data:{code:e.code,details:e.details,message:e.message,sequence:e.sequence,turnId:e.turnId},type:`turn.failed`}}function createTurnCancelledEvent(e){return{data:{sequence:e.sequence,turnId:e.turnId},type:`turn.cancelled`}}function createContextClearedEvent(e){return{data:{sequence:e.sequence,sessionId:e.sessionId,turnId:e.turnId},type:`context.cleared`}}function createCompactionRequestedEvent(e){return{data:{modelId:e.modelId,sequence:e.sequence,sessionId:e.sessionId,turnId:e.turnId,usageInputTokens:e.usageInputTokens??null},type:`compaction.requested`}}function createCompactionCompletedEvent(e){return{data:{modelId:e.modelId,sequence:e.sequence,sessionId:e.sessionId,turnId:e.turnId},type:`compaction.completed`}}function createSessionWaitingEvent(e=``){return{data:{continuationToken:toChannelLocalContinuationToken(e),wait:`next-user-message`},type:`session.waiting`}}function createSessionFailedEvent(e){return{data:{code:e.code,details:e.details,message:e.message,sessionId:e.sessionId},type:`session.failed`}}function createSessionCompletedEvent(){return{type:`session.completed`}}function stampMessageStreamEvent(e){return{...e,meta:{at:new Date().toISOString(),id:createEventId()}}}function encodeMessageStreamEvent(e){return textEncoder.encode(`${JSON.stringify(e)}\n`)}function normalizeActionResultOutcome(e){if(e.isError===!0)return{error:buildActionResultError(e),status:`failed`};let t=readActionResultOutputError(e.output);return t===void 0?{status:`completed`}:{error:t,status:`failed`}}function buildActionResultError(e){let t=readActionResultOutputError(e.output);return t===void 0?{code:`ACTION_RESULT_FAILED`,message:formatActionResultOutput(e.output)}:t}function readActionResultOutputError(e){let t=parseActionResultOutputRecord(e);if(t===void 0)return;let n=typeof t.code==`string`&&t.code.length>0?t.code:void 0,r=typeof t.message==`string`&&t.message.length>0?t.message:void 0;if(!(n===void 0||r===void 0))return{code:n,message:r}}function parseActionResultOutputRecord(e){if(typeof e==`object`&&e)return e;if(typeof e!=`string`)return;let t=e.trim();if(t.length!==0)try{let e=JSON.parse(t);if(typeof e==`object`&&e)return e}catch{return}}function formatActionResultOutput(e){if(typeof e==`string`)return e;let t=JSON.stringify(e);return typeof t==`string`&&t.length>0?t:`Action failed.`}export{EVE_MESSAGE_STREAM_CONTENT_TYPE,EVE_MESSAGE_STREAM_FORMAT,EVE_MESSAGE_STREAM_VERSION,EVE_SESSION_ID_HEADER,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER,createActionInputAppendedEvent,createActionPartialEvent,createActionResultEvent,createActionsRequestedEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageAppendedEvent,createMessageCompletedEvent,createMessageReceivedEvent,createReasoningAppendedEvent,createReasoningCompletedEvent,createResultCompletedEvent,createSessionCompletedEvent,createSessionFailedEvent,createSessionStartedEvent,createSessionWaitingEvent,createStepCompletedEvent,createStepFailedEvent,createStepStartedEvent,createSubagentCalledEvent,createTurnCancelledEvent,createTurnCompletedEvent,createTurnFailedEvent,createTurnStartedEvent,encodeMessageStreamEvent,isCurrentTurnBoundaryEvent,isTurnFailureEvent,stampMessageStreamEvent};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{createLogger,extractErrorId,formatErrorHint}from"#internal/logging.js";import{normalizeSendInput}from"#channel/send-input.js";import{INTERNAL_CHANNEL_DELIVER}from"#channel/channel-operations.js";import{
|
|
1
|
+
import{createLogger,extractErrorId,formatErrorHint}from"#internal/logging.js";import{normalizeSendInput}from"#channel/send-input.js";import{INTERNAL_CHANNEL_DELIVER}from"#channel/channel-operations.js";import{ContextContainer,contextStorage}from"#context/container.js";import{GET,POST,defineChannel}from"#public/definitions/channel.js";import{ContextKey}from"#context/key.js";import{isNotImplemented}from"#public/channels/chat-sdk/notImplemented.js";import{Actions,Button,Card,CardText,Chat,Message,ThreadImpl}from"#compiled/chat/index.js";import{defaultAuthorizationEvents}from"#public/channels/chat-sdk/authorization.js";import{chatSdkInstrumentationMetadata}from"#public/channels/chat-sdk/audience.js";const log=createLogger(`chat-sdk.channel`),ActiveWebhookKey=new ContextKey(`chat-sdk.active-webhook`);function chatSdkChannel(e){let t=new Chat(e),n=e.inputActionPrefix??`eve_input:`,r=e.streaming??!0,i=e.streamingEditIntervalMs??1e3,u={...defaultEvents(n),...e.events};return t.onAction(async r=>{let i=decodeInputAction(r.actionId,n,r.value);if(i){if(!r.thread)throw Error(`chatSdkChannel input actions require a thread on the Chat SDK action event.`);await bridgeSend(t,{inputResponses:[i]},{auth:e.resolveInputAuth?await e.resolveInputAuth(r):null,thread:r.thread})}}),{bot:t,channel:defineChannel({kindHint:`chat-sdk`,turnPolicy:e.turnPolicy,state:initialState(),metadata:chatSdkInstrumentationMetadata,context(e){return{bot:t,state:e,streaming:r,streamingEditIntervalMs:i,thread:threadFromState(t,e)}},routes:adapterNames(e.adapters).flatMap(n=>{let r=routeForAdapter(n,e),handler=async(r,i)=>{let s=t.webhooks[n],c=new ContextContainer;return c.setVirtualContext(ActiveWebhookKey,{from:i.from}),contextStorage.run(c,()=>s(r,{...e.webhook,waitUntil(e){i.waitUntil(e)}}))};return[GET(r,handler),POST(r,handler)]}),async receive(e,{from:n}){let r=serializeReceiveTarget(t,e.target);return n(r.id).send(e.message,{auth:e.auth,state:{thread:r}})},events:u}),send(e,n){return bridgeSend(t,e,n)}}}function defaultEvents(e){return{...defaultAuthorizationEvents(),async"turn.started"(e,t,n){t.state.pendingToolCallMessage=null,clearStream(t.state),await safeStartTyping(t.thread,`Working...`)},async"actions.requested"(e,t,n){let r=t.state.pendingToolCallMessage;if(t.state.pendingToolCallMessage=null,r){await safeStartTyping(t.thread,truncate(r));return}let i=e.actions.map(e=>e.kind===`tool-call`?e.toolName:e.kind);await safeStartTyping(t.thread,truncate(`Running ${i.join(`, `)}...`))},async"message.appended"(e,t,n){if(!t.thread||!e.messageSoFar||!canStream(t))return;let r=t.state.anchorMessageId;if(!r||t.state.streamStepIndex!==e.stepIndex){let n=await t.thread.post({markdown:e.messageSoFar});t.state.anchorMessageId=n.id,t.state.streamStepIndex=e.stepIndex,t.state.lastEditAtMs=Date.now();return}let i=t.state.lastEditAtMs??0;if(!(Date.now()-i<t.streamingEditIntervalMs))try{await editMessage(t.thread,r,e.messageSoFar),t.state.lastEditAtMs=Date.now()}catch(e){if(!isNotImplemented(e))throw e;t.state.editSupported=!1,clearStream(t.state)}},async"input.requested"(t,n,r){!n.thread||t.requests.length===0||await n.thread.post(renderInputRequests(t.requests,e))},async"message.completed"(e,t,n){if(e.finishReason===`tool-calls`){t.state.pendingToolCallMessage=e.message?firstNonEmptyLine(e.message)??null:null,e.message?await finalizeStreamedMessage(t,e.message,!1):clearStream(t.state);return}if(t.state.pendingToolCallMessage=null,!e.message){clearStream(t.state);return}await finalizeStreamedMessage(t,e.message,!0)},async"turn.failed"(e,t,n){await postFailure(t.thread,`I hit an error while handling your request`,e)},async"session.failed"(e,t){await postFailure(t.thread,`This session could not recover from an error`,e)}}}async function safeStartTyping(e,t){if(e)try{await e.startTyping(t)}catch(e){if(!isNotImplemented(e))throw e}}async function editMessage(e,t,n){await e.adapter.editMessage(e.id,t,{markdown:n})}async function finalizeStreamedMessage(e,t,n){let r=e.thread;if(!r){clearStream(e.state);return}let i=e.state.anchorMessageId;if(canStream(e)&&i)try{await editMessage(r,i,t)}catch(i){if(!isNotImplemented(i))throw i;e.state.editSupported=!1,n&&await r.post({markdown:t})}else n&&await r.post({markdown:t});clearStream(e.state)}function canStream(e){return e.streaming&&e.state.editSupported!==!1}function clearStream(e){e.anchorMessageId=null,e.lastEditAtMs=null,e.streamStepIndex=null}function firstNonEmptyLine(e){for(let t of e.split(/\r?\n/u)){let e=t.trim();if(e.length>0)return e}}function truncate(e,t=80){return e.length<=t?e:`${e.slice(0,t-1)}\u2026`}function renderInputRequests(e,t){return Card({children:e.flatMap(e=>renderInputRequest(e,t))})}function renderInputRequest(e,t){let n=[CardText(e.prompt)];return e.options&&e.options.length>0?(n.push(Actions(e.options.map(n=>Button({id:encodeInputAction(t,e.requestId,n.id),label:n.label,style:n.style,value:n.id})))),n):(n.push(CardText(`This request needs a freeform answer. Continue from the eve session UI.`)),n)}async function postFailure(e,r,i){if(!e)return;let a=formatErrorHint(i),o=extractErrorId(i.details);await e.post([`${r}${a}.`,`Please try again, rephrase, or reach out if it keeps failing.`,...o?[`Error id: ${o}`]:[]].join(`
|
|
2
2
|
|
|
3
|
-
`))}async function bridgeSend(e,t,n){let a=contextStorage.getStore()?.get(ActiveWebhookKey);if(!a)throw Error(`chatSdkChannel().send can only run during a Chat SDK webhook handler for this bridge.`);let
|
|
3
|
+
`))}async function bridgeSend(e,t,n){let a=contextStorage.getStore()?.get(ActiveWebhookKey);if(!a)throw Error(`chatSdkChannel().send can only run during a Chat SDK webhook handler for this bridge.`);let s=serializeThread(e,n.thread,n.adapterName),c=normalizeSendInput(t),l={auth:n.auth??null,state:{thread:s}};return n.callback!==void 0&&(l.callback=n.callback),n.mode!==void 0&&(l.mode=n.mode),n.title!==void 0&&(l.title=n.title),n.turnPolicy!==void 0&&(l.turnPolicy=n.turnPolicy),a.from(s.id)[INTERNAL_CHANNEL_DELIVER](c,l)}function initialState(){return{pendingAuthMessageIds:{},thread:null}}function threadFromState(e,t){if(!t.thread)return null;try{let n=t.thread;return new ThreadImpl({adapter:e.getAdapter(n.adapterName),channelId:n.channelId,channelVisibility:n.channelVisibility,currentMessage:n.currentMessage?Message.fromJSON(n.currentMessage):void 0,id:n.id,isDM:n.isDM,stateAdapter:e.getState()})}catch(e){return log.warn(`failed to rebuild Chat SDK thread from channel state`,{error:e}),null}}function serializeReceiveTarget(e,t){if(t.thread)return t.thread;if(!t.threadId)throw Error(`chatSdkChannel().receive requires target.thread or target.threadId.`);return serializeThread(e,t.threadId,t.adapterName)}function serializeThread(e,t,n){if(typeof t==`string`){let r=n??inferAdapterName(t),i=e.getAdapter(r);return{_type:`chat:Thread`,adapterName:r,channelId:i.channelIdFromThreadId(t),channelVisibility:i.getChannelVisibility?.(t),id:t,isDM:!1}}return isSerializedThread(t)?t:t.toJSON()}function isSerializedThread(e){return`_type`in e&&e._type===`chat:Thread`}function inferAdapterName(e){let t=e.indexOf(`:`);if(t<=0)throw Error(`chatSdkChannel string thread references require options.adapterName.`);return e.slice(0,t)}function adapterNames(e){return Object.keys(e)}function routeForAdapter(e,t){return t.routes?.[e]||`${(t.route??`/eve/v1`).replace(/\/$/u,``)}/${e}`}function encodeInputAction(e,t,n){return`${e}${encodeURIComponent(t)}:${encodeURIComponent(n)}`}function decodeInputAction(e,t,n){if(!e.startsWith(t))return null;let r=e.slice(t.length),i=r.indexOf(`:`);if(i<=0)return null;try{let e=decodeURIComponent(r.slice(0,i));return{optionId:n??decodeURIComponent(r.slice(i+1)),requestId:e}}catch{return null}}export{chatSdkChannel};
|
|
@@ -2,6 +2,8 @@ import type { SessionContext } from "#public/definitions/callback-context.js";
|
|
|
2
2
|
import type { JsonValue } from "#public/types/json.js";
|
|
3
3
|
/** Context available while resolving an application-provided connection tool argument. */
|
|
4
4
|
export type ProvidedArgumentContext = SessionContext & {
|
|
5
|
+
/** Replay-stable id of the current connection tool call. */
|
|
6
|
+
readonly callId: string;
|
|
5
7
|
/** Bare tool or operation name published by the remote connection. */
|
|
6
8
|
readonly toolName: string;
|
|
7
9
|
};
|