eve 0.71.3 → 0.72.1
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 +37 -0
- package/README.md +22 -6
- package/dist/src/acp/adapter.js +1 -1
- package/dist/src/ai/decide.d.ts +7 -0
- package/dist/src/ai/decide.js +1 -0
- package/dist/src/chunks/{use-eve-agent-CFCaYnrI.js → use-eve-agent-C1GYGCtb.js} +698 -388
- package/dist/src/chunks/{use-eve-agent-DcDhXNv1.js → use-eve-agent-hZJ7CB8t.js} +698 -388
- package/dist/src/cli/commands/integration-setup.js +1 -1
- package/dist/src/cli/commands/registry.js +1 -1
- package/dist/src/cli/commands/trace-detail.d.ts +1 -1
- package/dist/src/cli/commands/trace-detail.js +1 -1
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/setup-flow.d.ts +1 -0
- package/dist/src/cli/dev/tui/setup-panel.d.ts +1 -0
- package/dist/src/cli/dev/tui/setup-panel.js +2 -1
- package/dist/src/cli/dev/tui/traces/trace-conversation.d.ts +2 -2
- package/dist/src/cli/dev/tui/traces/trace-conversation.js +2 -2
- package/dist/src/cli/dev/tui/transcript-parts.d.ts +2 -1
- package/dist/src/cli/dev/tui/transcript-parts.js +1 -1
- package/dist/src/cli/dev/tui/transcript.js +1 -1
- package/dist/src/cli/dev/tui/tui-prompter.js +1 -1
- package/dist/src/client/conversation-projection.d.ts +4 -0
- package/dist/src/client/conversation-projection.js +1 -0
- package/dist/src/client/conversation-reducer.js +1 -1
- package/dist/src/client/conversation-state.d.ts +5 -26
- package/dist/src/client/conversation-state.js +1 -1
- package/dist/src/client/index.d.ts +1 -0
- package/dist/src/client/index.js +1 -1
- package/dist/src/client/message-action-parts.d.ts +1 -11
- package/dist/src/client/message-action-parts.js +1 -1
- package/dist/src/client/message-reducer.d.ts +3 -1
- package/dist/src/client/message-reducer.js +1 -1
- package/dist/src/client/session-utils.js +1 -1
- package/dist/src/client/session.js +1 -1
- package/dist/src/client/tool-call-state.d.ts +23 -0
- package/dist/src/client/tool-call-state.js +1 -0
- package/dist/src/client/tool-part-state.d.ts +7 -0
- package/dist/src/client/tool-part-state.js +1 -0
- package/dist/src/compiled/.vendor-stamp.json +10 -10
- package/dist/src/compiled/@ai-sdk/anthropic/index.d.ts +1453 -1358
- package/dist/src/compiled/@ai-sdk/anthropic/index.js +1 -2
- package/dist/src/compiled/@ai-sdk/code-mode/index.d.ts +172 -163
- package/dist/src/compiled/@ai-sdk/code-mode/index.js +15 -20
- package/dist/src/compiled/@ai-sdk/google/index.d.ts +772 -733
- package/dist/src/compiled/@ai-sdk/google/index.js +6 -8
- package/dist/src/compiled/@ai-sdk/mcp/index.d.ts +887 -790
- package/dist/src/compiled/@ai-sdk/mcp/index.js +1 -1
- package/dist/src/compiled/@ai-sdk/openai/index.d.ts +1722 -1691
- package/dist/src/compiled/@ai-sdk/openai/index.js +3 -14
- package/dist/src/compiled/@ai-sdk/otel/index.d.ts +216 -159
- package/dist/src/compiled/@ai-sdk/otel/index.js +3 -3
- package/dist/src/compiled/@ai-sdk/provider/index.d.ts +7542 -7271
- package/dist/src/compiled/@ai-sdk/provider/index.js +1 -3
- package/dist/src/compiled/@ai-sdk/provider-utils/index.d.ts +1799 -1600
- package/dist/src/compiled/@eve/catalog/index.js +1 -1
- package/dist/src/compiled/_chunks/workflow/dist-DXLdlucM.js +15 -0
- package/dist/src/compiled/_chunks/workflow/experimental-decision-BrfWf6-n.js +3 -0
- package/dist/src/compiler/extension-compatibility.d.ts +36 -20
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/context/build-dynamic-tools.js +1 -1
- package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
- package/dist/src/context/dynamic-tool-metadata.d.ts +1 -0
- package/dist/src/context/providers/session.js +1 -1
- package/dist/src/evals/define-eval.d.ts +1 -1
- package/dist/src/evals/judge.d.ts +1 -1
- package/dist/src/evals/judge.js +2 -2
- package/dist/src/evals/mock-model.js +1 -1
- package/dist/src/evals/types.d.ts +8 -8
- package/dist/src/execution/cancel-descendant-turns-step.d.ts +1 -0
- package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
- package/dist/src/execution/cancelled-model-call-batch.js +1 -1
- package/dist/src/execution/coordination-dispatch-shared.js +1 -1
- package/dist/src/execution/coordination-dispatch-step.js +1 -1
- package/dist/src/execution/durable-session-read.d.ts +5 -0
- package/dist/src/execution/durable-session-read.js +1 -0
- package/dist/src/execution/durable-session-store.d.ts +4 -10
- package/dist/src/execution/durable-session-store.js +1 -1
- package/dist/src/execution/dynamic-connections.d.ts +3 -3
- package/dist/src/execution/dynamic-connections.js +1 -1
- package/dist/src/execution/dynamic-workflow/tool.js +1 -1
- package/dist/src/execution/legacy-session/interrupt-step.js +1 -1
- package/dist/src/execution/legacy-session/snapshot.d.ts +3 -0
- package/dist/src/execution/legacy-session/snapshot.js +1 -1
- package/dist/src/execution/model-call-batching.js +1 -1
- package/dist/src/execution/node-step.d.ts +2 -0
- package/dist/src/execution/node-step.js +1 -1
- package/dist/src/execution/proxied-deliver-step.js +1 -1
- package/dist/src/execution/publish-session-events.d.ts +7 -2
- package/dist/src/execution/publish-session-events.js +1 -1
- package/dist/src/execution/session/active-turn.js +1 -1
- package/dist/src/execution/session/answer-caller.js +1 -1
- package/dist/src/execution/session/checkpoint-migrations.js +1 -1
- package/dist/src/execution/session/finalization.js +1 -1
- package/dist/src/execution/session/handoff-steps.d.ts +3 -1
- package/dist/src/execution/session/handoff-steps.js +1 -1
- package/dist/src/execution/session/handoff.d.ts +1 -1
- package/dist/src/execution/session/handoff.js +1 -1
- package/dist/src/execution/session/pending-turn-state.d.ts +8 -3
- package/dist/src/execution/session/pending-turn-state.js +1 -1
- package/dist/src/execution/session/task-tool-tracing-step.d.ts +5 -0
- package/dist/src/execution/session/task-tool-tracing-step.js +1 -0
- package/dist/src/execution/session/turn-step-result.js +1 -1
- package/dist/src/execution/session/turn-step.js +1 -1
- package/dist/src/execution/session/turn-waiting-step.js +1 -1
- package/dist/src/execution/session/turn.d.ts +1 -0
- package/dist/src/execution/session/turn.js +1 -1
- package/dist/src/execution/settle-cancelled-turn-step.d.ts +4 -6
- package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
- package/dist/src/execution/tasks/start.d.ts +3 -3
- package/dist/src/execution/tasks/start.js +1 -1
- package/dist/src/execution/tasks/steps.d.ts +1 -1
- package/dist/src/execution/tasks/steps.js +1 -1
- package/dist/src/execution/terminal-session-completion-step.d.ts +5 -1
- package/dist/src/execution/terminal-session-completion-step.js +1 -1
- package/dist/src/execution/terminal-session-failure-step.js +1 -1
- package/dist/src/execution/tools/agent-router-workflow.js +1 -1
- package/dist/src/execution/tools/connection-tools.js +2 -2
- package/dist/src/execution/tools/workflow/harness-definition.js +1 -1
- package/dist/src/execution/tools/workflow/step.js +1 -1
- package/dist/src/execution/tools/workflow/withdraw-step.d.ts +7 -9
- package/dist/src/execution/tools/workflow/withdraw-step.js +1 -1
- package/dist/src/execution/workflow-trace-context.d.ts +2 -2
- package/dist/src/harness/authorization.d.ts +4 -2
- package/dist/src/harness/authorization.js +1 -1
- package/dist/src/harness/{compaction.js → compaction/engine.js} +1 -1
- package/dist/src/harness/compaction/step.d.ts +46 -0
- package/dist/src/harness/compaction/step.js +1 -0
- package/dist/src/harness/coordination.d.ts +32 -68
- package/dist/src/harness/coordination.js +1 -1
- package/dist/src/harness/current-messages.d.ts +1 -3
- package/dist/src/harness/current-messages.js +1 -1
- package/dist/src/harness/emission.d.ts +4 -52
- package/dist/src/harness/emission.js +1 -1
- package/dist/src/harness/execute-tool.d.ts +1 -0
- package/dist/src/harness/final-output.d.ts +5 -0
- package/dist/src/harness/final-output.js +1 -1
- package/dist/src/harness/hitl/approvals.d.ts +115 -0
- package/dist/src/harness/hitl/approvals.js +1 -0
- package/dist/src/harness/hitl/approved-call-callers.d.ts +14 -0
- package/dist/src/harness/hitl/approved-call-callers.js +1 -0
- package/dist/src/harness/hitl/approved-calls.d.ts +37 -0
- package/dist/src/harness/hitl/approved-calls.js +1 -0
- package/dist/src/harness/hitl/budget.d.ts +21 -0
- package/dist/src/harness/hitl/budget.js +1 -0
- package/dist/src/harness/{approval-candidates.d.ts → hitl/candidates.d.ts} +9 -18
- package/dist/src/harness/hitl/candidates.js +1 -0
- package/dist/src/harness/hitl/coordinator.js +1 -0
- package/dist/src/harness/hitl/delivery.d.ts +37 -0
- package/dist/src/harness/hitl/delivery.js +1 -0
- package/dist/src/harness/hitl/index.d.ts +49 -0
- package/dist/src/harness/hitl/index.js +1 -0
- package/dist/src/harness/hitl/intake.d.ts +67 -0
- package/dist/src/harness/hitl/intake.js +1 -0
- package/dist/src/harness/{stale-input-responses.d.ts → hitl/stale-responses.d.ts} +5 -3
- package/dist/src/harness/hitl/stale-responses.js +3 -0
- package/dist/src/harness/inline-tool-authorization.d.ts +4 -0
- package/dist/src/harness/inline-tool-authorization.js +1 -1
- package/dist/src/harness/input-extraction.d.ts +1 -10
- package/dist/src/harness/input-extraction.js +1 -1
- package/dist/src/harness/input-request-resolution.d.ts +1 -5
- package/dist/src/harness/input-request-resolution.js +1 -1
- package/dist/src/harness/model-call/call.d.ts +78 -0
- package/dist/src/harness/model-call/call.js +1 -0
- package/dist/src/harness/{model-call-error.d.ts → model-call/errors.d.ts} +1 -1
- package/dist/src/harness/model-call/failure.d.ts +52 -0
- package/dist/src/harness/model-call/failure.js +1 -0
- package/dist/src/harness/model-call/model.d.ts +18 -0
- package/dist/src/harness/model-call/model.js +1 -0
- package/dist/src/harness/model-call/recovery.d.ts +52 -0
- package/dist/src/harness/model-call/recovery.js +1 -0
- package/dist/src/harness/model-call/request.d.ts +30 -0
- package/dist/src/harness/model-call/request.js +3 -0
- package/dist/src/harness/model-call/response.d.ts +39 -0
- package/dist/src/harness/model-call/response.js +1 -0
- package/dist/src/harness/model-call/retry.d.ts +11 -0
- package/dist/src/harness/model-call/retry.js +1 -0
- package/dist/src/harness/model-call/run.d.ts +38 -0
- package/dist/src/harness/model-call/run.js +1 -0
- package/dist/src/harness/model-call/tools.d.ts +48 -0
- package/dist/src/harness/model-call/tools.js +1 -0
- package/dist/src/harness/model-call/usage.d.ts +23 -0
- package/dist/src/harness/model-call/usage.js +1 -0
- package/dist/src/harness/nested-actions.d.ts +2 -2
- package/dist/src/harness/provider-tools.d.ts +2 -2
- package/dist/src/harness/provider-tools.js +1 -1
- package/dist/src/harness/proxy-input-requests.d.ts +4 -12
- package/dist/src/harness/proxy-input-requests.js +1 -1
- package/dist/src/harness/session-machine/commit.d.ts +28 -0
- package/dist/src/harness/session-machine/commit.js +1 -0
- package/dist/src/harness/session-machine/current.d.ts +29 -0
- package/dist/src/harness/session-machine/current.js +1 -0
- package/dist/src/harness/session-machine/events.d.ts +6 -0
- package/dist/src/harness/session-machine/events.js +1 -0
- package/dist/src/harness/session-machine/resolver-events.d.ts +12 -0
- package/dist/src/harness/session-machine/resolver-events.js +1 -0
- package/dist/src/harness/session-machine/state.d.ts +47 -0
- package/dist/src/harness/session-machine/state.js +1 -0
- package/dist/src/harness/session-machine/transitions.d.ts +188 -0
- package/dist/src/harness/session-machine/transitions.js +1 -0
- package/dist/src/harness/session-machine/view.d.ts +58 -0
- package/dist/src/harness/session-machine/view.js +1 -0
- package/dist/src/harness/step/after-model.d.ts +7 -0
- package/dist/src/harness/step/after-model.js +1 -0
- package/dist/src/harness/step/context.d.ts +59 -0
- package/dist/src/harness/step/context.js +1 -0
- package/dist/src/harness/step/intake.d.ts +34 -0
- package/dist/src/harness/step/intake.js +1 -0
- package/dist/src/harness/step/prompt.d.ts +37 -0
- package/dist/src/harness/step/prompt.js +1 -0
- package/dist/src/harness/step-hooks.d.ts +8 -13
- package/dist/src/harness/step-hooks.js +1 -1
- package/dist/src/harness/tool-loop.d.ts +7 -22
- package/dist/src/harness/tool-loop.js +1 -3
- package/dist/src/harness/tools.d.ts +13 -0
- package/dist/src/harness/tools.js +1 -1
- package/dist/src/harness/turn-tag-state.d.ts +1 -1
- package/dist/src/harness/types.d.ts +6 -0
- package/dist/src/instrumentation/ai-sdk-hook-bridge.d.ts +1 -1
- package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -1
- package/dist/src/instrumentation/content.js +1 -1
- package/dist/src/instrumentation/dispatch.js +1 -1
- package/dist/src/instrumentation/lifecycle.d.ts +28 -56
- package/dist/src/instrumentation/native-events.d.ts +2 -1
- package/dist/src/instrumentation/native-events.js +1 -1
- package/dist/src/instrumentation/provider.d.ts +1 -1
- package/dist/src/instrumentation/runtime-context.d.ts +2 -3
- package/dist/src/instrumentation/runtime-context.js +1 -1
- package/dist/src/instrumentation/runtime.d.ts +11 -1
- package/dist/src/instrumentation/runtime.js +1 -1
- package/dist/src/instrumentation/state.d.ts +6 -1
- package/dist/src/instrumentation/state.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/attachments/limited-read.d.ts +16 -0
- package/dist/src/internal/attachments/limited-read.js +1 -0
- package/dist/src/internal/authored-definition/schema-backed.d.ts +2 -1
- package/dist/src/internal/authored-definition/schema-backed.js +1 -1
- package/dist/src/internal/mcp/published-tools.d.ts +13 -0
- package/dist/src/internal/mcp/published-tools.js +1 -0
- package/dist/src/internal/mcp/request-trace-context.d.ts +12 -0
- package/dist/src/internal/mcp/request-trace-context.js +1 -0
- package/dist/src/internal/mcp/streamable-http-server.d.ts +7 -3
- package/dist/src/internal/mcp/streamable-http-server.js +1 -1
- package/dist/src/internal/model-auth/transport.d.ts +3 -3
- package/dist/src/internal/model-auth/transport.js +1 -1
- package/dist/src/models/auto.d.ts +5 -5
- package/dist/src/models/auto.js +2 -2
- package/dist/src/protocol/message.d.ts +7 -0
- package/dist/src/protocol/message.js +1 -1
- package/dist/src/protocol/session-projection.d.ts +159 -0
- package/dist/src/protocol/session-projection.js +1 -0
- package/dist/src/public/ai/index.d.ts +1 -1
- package/dist/src/public/ai/index.js +1 -1
- package/dist/src/public/channels/chat-sdk/attachment-refs.d.ts +15 -0
- package/dist/src/public/channels/chat-sdk/attachment-refs.js +1 -0
- package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +2 -2
- package/dist/src/public/channels/chat-sdk/messageToUserContent.d.ts +11 -5
- package/dist/src/public/channels/chat-sdk/messageToUserContent.js +1 -1
- package/dist/src/public/channels/discord/attachments.d.ts +15 -0
- package/dist/src/public/channels/discord/attachments.js +1 -0
- package/dist/src/public/channels/discord/discordChannel.js +1 -1
- package/dist/src/public/channels/discord/inbound.d.ts +13 -0
- package/dist/src/public/channels/discord/inbound.js +1 -1
- package/dist/src/public/channels/linear/inbound-uploads.d.ts +21 -0
- package/dist/src/public/channels/linear/inbound-uploads.js +1 -0
- package/dist/src/public/channels/linear/linearChannel.js +1 -1
- package/dist/src/public/channels/linq/inboundContent.d.ts +7 -1
- package/dist/src/public/channels/linq/inboundContent.js +1 -1
- package/dist/src/public/channels/linq/linqChannel.js +1 -1
- package/dist/src/public/channels/mcp.d.ts +17 -2
- package/dist/src/public/channels/mcp.js +1 -1
- package/dist/src/public/channels/photon/attachments.d.ts +21 -0
- package/dist/src/public/channels/photon/attachments.js +1 -0
- package/dist/src/public/channels/photon/photonIMessageChannel.js +1 -1
- package/dist/src/public/channels/slack/attachments.d.ts +3 -1
- package/dist/src/public/channels/slack/attachments.js +1 -1
- package/dist/src/public/channels/slack/slackChannel.js +1 -1
- package/dist/src/public/channels/teams/attachments.d.ts +4 -4
- package/dist/src/public/channels/teams/attachments.js +1 -1
- package/dist/src/public/channels/telegram/attachments.js +1 -1
- package/dist/src/public/channels/twilio/api.d.ts +7 -0
- package/dist/src/public/channels/twilio/api.js +1 -1
- package/dist/src/public/channels/twilio/inbound.d.ts +7 -0
- package/dist/src/public/channels/twilio/inbound.js +2 -2
- package/dist/src/public/channels/twilio/twilioChannel.js +1 -1
- package/dist/src/public/definitions/connections/mcp.d.ts +1 -1
- package/dist/src/public/definitions/connections/openapi.d.ts +1 -1
- package/dist/src/react/index.d.ts +1 -0
- package/dist/src/react/index.js +1 -1
- package/dist/src/runtime/agent/mock-model-adapter.js +2 -2
- package/dist/src/runtime/connections/mcp-client.d.ts +18 -1
- package/dist/src/runtime/connections/mcp-client.js +1 -1
- package/dist/src/runtime/resolve-tool.js +1 -1
- package/dist/src/setup/boxes/resolve-provisioning.d.ts +2 -0
- package/dist/src/setup/boxes/resolve-provisioning.js +1 -1
- package/dist/src/setup/cli/prompt-ui.d.ts +3 -0
- package/dist/src/setup/cli/prompt-ui.js +3 -1
- package/dist/src/setup/cli/select-component.d.ts +1 -0
- package/dist/src/setup/cli/select-component.js +1 -1
- package/dist/src/setup/flows/ensure-vercel-project.d.ts +2 -0
- package/dist/src/setup/flows/ensure-vercel-project.js +1 -1
- package/dist/src/setup/integrations/discord/api.js +1 -1
- package/dist/src/setup/integrations/web/auth-options.d.ts +4 -0
- package/dist/src/setup/integrations/web/auth-options.js +1 -0
- package/dist/src/setup/integrations/web/auth-scaffold.d.ts +7 -0
- package/dist/src/setup/integrations/web/auth-scaffold.js +1 -0
- package/dist/src/setup/integrations/web/provision-auth.d.ts +3 -0
- package/dist/src/setup/integrations/web/provision-auth.js +1 -0
- package/dist/src/setup/integrations/web/setup.d.ts +11 -6
- package/dist/src/setup/integrations/web/setup.js +3 -3
- package/dist/src/setup/prompter.d.ts +2 -0
- package/dist/src/setup/prompter.js +1 -1
- package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +2 -2
- package/dist/src/setup/scaffold/create/web-template.d.ts +1 -1
- package/dist/src/setup/scaffold/create/web-template.js +1 -0
- package/dist/src/setup/scaffold/update/web-options.js +1 -1
- package/dist/src/setup/vercel-project-api.d.ts +9 -0
- package/dist/src/setup/vercel-project-api.js +1 -1
- package/dist/src/setup/vercel-project.d.ts +4 -2
- package/dist/src/setup/vercel-project.js +0 -0
- package/dist/src/shared/web-search.d.ts +1 -1
- package/dist/src/subagents/adapter.js +1 -1
- package/dist/src/subagents/event-proxy-step.js +1 -1
- package/dist/src/subagents/hitl-proxy.d.ts +4 -28
- package/dist/src/subagents/hitl-proxy.js +1 -1
- package/dist/src/svelte/index.d.ts +2 -0
- package/dist/src/svelte/index.js +39 -2
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tools/approval/policies.d.ts +5 -5
- package/dist/src/tools/approval/policies.js +1 -1
- package/dist/src/tools/framework/agent.js +1 -1
- package/dist/src/tools/provided/agent-router.js +1 -1
- package/dist/src/tools/provided/ask-question-workflow.js +1 -1
- package/dist/src/tools/provided/ask-question.js +2 -2
- package/dist/src/tools/provided/bash.js +1 -1
- package/dist/src/tools/provided/framework-tool.d.ts +3 -0
- package/dist/src/tools/provided/framework-tool.js +1 -0
- package/dist/src/tools/provided/glob.js +2 -2
- package/dist/src/tools/provided/grep.js +2 -2
- package/dist/src/tools/provided/load-skill.js +1 -1
- package/dist/src/tools/provided/no-reply.js +1 -1
- package/dist/src/tools/provided/read-file.js +2 -2
- package/dist/src/tools/provided/sleep-workflow.js +1 -1
- package/dist/src/tools/provided/sleep.js +1 -1
- package/dist/src/tools/provided/task-cancel.js +1 -1
- package/dist/src/tools/provided/task-wait.js +1 -1
- package/dist/src/tools/provided/web-fetch.js +2 -2
- package/dist/src/tools/provided/web-search.js +1 -1
- package/dist/src/tools/provided/workflow.js +1 -1
- package/dist/src/tools/provided/write-file.js +2 -2
- package/dist/src/tracing/agent-approval-instrumentation.d.ts +2 -2
- package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
- package/dist/src/tracing/agent-otel-provider.js +2 -2
- package/dist/src/tracing/agent-otel-usage.d.ts +1 -1
- package/dist/src/tracing/agent-otel-usage.js +1 -1
- package/dist/src/tracing/agent-span-contract.d.ts +0 -1
- package/dist/src/tracing/agent-span-contract.js +1 -1
- package/dist/src/tracing/agent-tool-instrumentation.d.ts +16 -6
- package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
- package/dist/src/tracing/agent-trace-context-codec.js +1 -1
- package/dist/src/tracing/agent-trace-state.d.ts +7 -3
- package/dist/src/tracing/invoke-tool-span.js +1 -1
- package/dist/src/tracing/local-trace-analysis.js +1 -1
- package/dist/src/vue/index.d.ts +2 -0
- package/dist/src/vue/index.js +39 -2
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/agent-config.md +2 -2
- package/docs/channels/chat-sdk.mdx +3 -1
- package/docs/channels/custom.mdx +2 -0
- package/docs/channels/discord.mdx +5 -4
- package/docs/channels/eve.mdx +65 -0
- package/docs/channels/linear.mdx +1 -1
- package/docs/channels/linq.mdx +2 -0
- package/docs/channels/mcp.mdx +39 -1
- package/docs/channels/photon.mdx +5 -0
- package/docs/channels/teams.mdx +4 -7
- package/docs/channels/twilio.mdx +1 -1
- package/docs/concepts/built-in-tools.md +14 -2
- package/docs/concepts/sessions-runs-and-streaming.md +3 -3
- package/docs/connections/mcp.mdx +11 -0
- package/docs/connections/overview.mdx +2 -2
- package/docs/dynamic-configuration/meta.json +1 -1
- package/docs/evals/judge.mdx +16 -16
- package/docs/evals/overview.mdx +1 -1
- package/docs/guides/{evaluate.md → decide.md} +35 -35
- package/docs/guides/dynamic-capabilities.md +1 -1
- package/docs/guides/frontend/overview.mdx +3 -1
- package/docs/guides/hooks.md +1 -1
- package/docs/guides/instrumentation/instrumentation.mdx +23 -22
- package/docs/guides/instrumentation/otel.mdx +13 -2
- package/docs/reference/cli.md +3 -3
- package/docs/reference/typescript-api.md +4 -2
- package/docs/tools/human-in-the-loop.md +6 -4
- package/docs/tools/workflows.mdx +4 -4
- package/package.json +11 -11
- package/dist/src/ai/evaluate.d.ts +0 -7
- package/dist/src/ai/evaluate.js +0 -1
- package/dist/src/client/message-task-parts.d.ts +0 -8
- package/dist/src/client/message-task-parts.js +0 -1
- package/dist/src/compiled/_chunks/workflow/dist-C3ZE62yI.js +0 -25
- package/dist/src/compiled/_chunks/workflow/experimental-evaluation-Dm32egEG.js +0 -5
- package/dist/src/harness/active-turn-id.d.ts +0 -11
- package/dist/src/harness/active-turn-id.js +0 -1
- package/dist/src/harness/approval-candidates.js +0 -1
- package/dist/src/harness/approval-delivery-coordinator.js +0 -1
- package/dist/src/harness/approved-call-callers.d.ts +0 -11
- package/dist/src/harness/approved-call-callers.js +0 -1
- package/dist/src/harness/cancelled-turn-emission.d.ts +0 -12
- package/dist/src/harness/cancelled-turn-emission.js +0 -1
- package/dist/src/harness/emission-state.d.ts +0 -36
- package/dist/src/harness/emission-state.js +0 -1
- package/dist/src/harness/held-requests.d.ts +0 -18
- package/dist/src/harness/held-requests.js +0 -1
- package/dist/src/harness/hitl/approval-input-requests.d.ts +0 -27
- package/dist/src/harness/hitl/approval-input-requests.js +0 -1
- package/dist/src/harness/hitl/pending-input-resolution.d.ts +0 -54
- package/dist/src/harness/hitl/pending-input-resolution.js +0 -1
- package/dist/src/harness/hitl/session-limit-input-requests.d.ts +0 -12
- package/dist/src/harness/hitl/session-limit-input-requests.js +0 -1
- package/dist/src/harness/input-requests.d.ts +0 -37
- package/dist/src/harness/input-requests.js +0 -1
- package/dist/src/harness/pending-input-batches.d.ts +0 -81
- package/dist/src/harness/pending-input-batches.js +0 -1
- package/dist/src/harness/session-limit-enforcement.d.ts +0 -45
- package/dist/src/harness/session-limit-enforcement.js +0 -1
- package/dist/src/harness/stale-input-responses.js +0 -3
- package/dist/src/harness/workflow-dispatch.d.ts +0 -30
- package/dist/src/harness/workflow-dispatch.js +0 -1
- package/dist/src/public/channels/linear/inbound-images.d.ts +0 -19
- package/dist/src/public/channels/linear/inbound-images.js +0 -1
- package/dist/src/tracing/agent-action-instrumentation.d.ts +0 -26
- package/dist/src/tracing/agent-action-instrumentation.js +0 -1
- /package/dist/src/harness/{compaction.d.ts → compaction/engine.d.ts} +0 -0
- /package/dist/src/harness/{compaction-prompt.d.ts → compaction/prompt.d.ts} +0 -0
- /package/dist/src/harness/{compaction-prompt.js → compaction/prompt.js} +0 -0
- /package/dist/src/harness/{session-limit-continuation.d.ts → hitl/budget-request.d.ts} +0 -0
- /package/dist/src/harness/{session-limit-continuation.js → hitl/budget-request.js} +0 -0
- /package/dist/src/harness/{approval-delivery-coordinator.d.ts → hitl/coordinator.d.ts} +0 -0
- /package/dist/src/harness/{model-call-error.js → model-call/errors.js} +0 -0
|
@@ -682,6 +682,464 @@ function isTurnFailureEvent(event) {
|
|
|
682
682
|
return event.type === "session.failed" || event.type === "step.failed" || event.type === "turn.failed";
|
|
683
683
|
}
|
|
684
684
|
|
|
685
|
+
//#endregion
|
|
686
|
+
//#region src/protocol/session-projection.ts
|
|
687
|
+
function initialSessionProjection() {
|
|
688
|
+
return {
|
|
689
|
+
authorizations: {},
|
|
690
|
+
calls: {},
|
|
691
|
+
candidates: {},
|
|
692
|
+
inputs: {},
|
|
693
|
+
nextSequence: 0,
|
|
694
|
+
tasks: {},
|
|
695
|
+
turns: {}
|
|
696
|
+
};
|
|
697
|
+
}
|
|
698
|
+
function updateTurn(state, turnId, update) {
|
|
699
|
+
const turn = state.turns[turnId];
|
|
700
|
+
if (turn === void 0) return state;
|
|
701
|
+
const next = update(turn);
|
|
702
|
+
return next === turn ? state : {
|
|
703
|
+
...state,
|
|
704
|
+
turns: {
|
|
705
|
+
...state.turns,
|
|
706
|
+
[turnId]: next
|
|
707
|
+
}
|
|
708
|
+
};
|
|
709
|
+
}
|
|
710
|
+
function putTask(state, task) {
|
|
711
|
+
return state.tasks[task.taskId] === task ? state : {
|
|
712
|
+
...state,
|
|
713
|
+
tasks: {
|
|
714
|
+
...state.tasks,
|
|
715
|
+
[task.taskId]: task
|
|
716
|
+
}
|
|
717
|
+
};
|
|
718
|
+
}
|
|
719
|
+
function putTaskCall(task, call) {
|
|
720
|
+
return task.calls[call.callId] === call ? task : {
|
|
721
|
+
...task,
|
|
722
|
+
calls: {
|
|
723
|
+
...task.calls,
|
|
724
|
+
[call.callId]: call
|
|
725
|
+
}
|
|
726
|
+
};
|
|
727
|
+
}
|
|
728
|
+
function putCall(state, call) {
|
|
729
|
+
return state.calls[call.callId] === call ? state : {
|
|
730
|
+
...state,
|
|
731
|
+
calls: {
|
|
732
|
+
...state.calls,
|
|
733
|
+
[call.callId]: call
|
|
734
|
+
}
|
|
735
|
+
};
|
|
736
|
+
}
|
|
737
|
+
function updateTask(state, taskId, update) {
|
|
738
|
+
const task = state.tasks[taskId];
|
|
739
|
+
if (task === void 0) return state;
|
|
740
|
+
return putTask(state, update(task));
|
|
741
|
+
}
|
|
742
|
+
function updateCall(state, callId, update) {
|
|
743
|
+
const call = state.calls[callId];
|
|
744
|
+
if (call === void 0) return state;
|
|
745
|
+
return putCall(state, update(call));
|
|
746
|
+
}
|
|
747
|
+
const SETTLED_CALL_STATUSES = /* @__PURE__ */ new Set([
|
|
748
|
+
"completed",
|
|
749
|
+
"failed",
|
|
750
|
+
"rejected",
|
|
751
|
+
"cancelled"
|
|
752
|
+
]);
|
|
753
|
+
function isSettledCallStatus(status) {
|
|
754
|
+
return SETTLED_CALL_STATUSES.has(status);
|
|
755
|
+
}
|
|
756
|
+
function settleCall(call, status, error) {
|
|
757
|
+
if (call.taskId !== void 0 || isSettledCallStatus(call.status)) return call;
|
|
758
|
+
const { requestId: _requestId, error: _error, ...rest } = call;
|
|
759
|
+
const settled = {
|
|
760
|
+
...rest,
|
|
761
|
+
status
|
|
762
|
+
};
|
|
763
|
+
if (call.requestId !== void 0) settled.requestId = call.requestId;
|
|
764
|
+
if (error !== void 0) settled.error = error;
|
|
765
|
+
return settled;
|
|
766
|
+
}
|
|
767
|
+
function actionName(action) {
|
|
768
|
+
switch (action.kind) {
|
|
769
|
+
case "load-skill": return "load_skill";
|
|
770
|
+
case "subagent-call":
|
|
771
|
+
case "remote-agent-call": return action.name;
|
|
772
|
+
case "tool-call":
|
|
773
|
+
case "workflow-tool-call": return action.toolName;
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
function resultName(result) {
|
|
777
|
+
switch (result.kind) {
|
|
778
|
+
case "load-skill-result": return "load_skill";
|
|
779
|
+
case "subagent-result": return result.subagentName;
|
|
780
|
+
default: return result.toolName;
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
function callStatusAfterApproval(outcome) {
|
|
784
|
+
switch (outcome) {
|
|
785
|
+
case "approved": return "running";
|
|
786
|
+
case "denied": return "rejected";
|
|
787
|
+
case "cancelled": return "cancelled";
|
|
788
|
+
default: return;
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
const TOOL_EXECUTION_DENIED = "TOOL_EXECUTION_DENIED";
|
|
792
|
+
function foldSession(state, event) {
|
|
793
|
+
const typed = event;
|
|
794
|
+
switch (typed.type) {
|
|
795
|
+
case "session.started": return state.started ? state : {
|
|
796
|
+
...state,
|
|
797
|
+
started: true
|
|
798
|
+
};
|
|
799
|
+
case "turn.started": {
|
|
800
|
+
const { sequence, turnId } = typed.data;
|
|
801
|
+
const turn = {
|
|
802
|
+
turnId,
|
|
803
|
+
sequence,
|
|
804
|
+
status: "active"
|
|
805
|
+
};
|
|
806
|
+
return {
|
|
807
|
+
...state,
|
|
808
|
+
activeTurnId: turnId,
|
|
809
|
+
nextSequence: Math.max(state.nextSequence, sequence + 1),
|
|
810
|
+
turns: {
|
|
811
|
+
...state.turns,
|
|
812
|
+
[turnId]: turn
|
|
813
|
+
}
|
|
814
|
+
};
|
|
815
|
+
}
|
|
816
|
+
case "step.started": return updateTurn(state, typed.data.turnId, (turn) => {
|
|
817
|
+
if (!turn.waiting && turn.stepIndex === typed.data.stepIndex) return turn;
|
|
818
|
+
const { waiting: _waiting, ...rest } = turn;
|
|
819
|
+
return {
|
|
820
|
+
...rest,
|
|
821
|
+
stepIndex: typed.data.stepIndex
|
|
822
|
+
};
|
|
823
|
+
});
|
|
824
|
+
case "turn.waiting": return updateTurn(state, typed.data.turnId, (turn) => turn.status === "active" && !turn.waiting ? {
|
|
825
|
+
...turn,
|
|
826
|
+
waiting: true
|
|
827
|
+
} : turn);
|
|
828
|
+
case "message.appended":
|
|
829
|
+
case "message.completed":
|
|
830
|
+
case "result.completed":
|
|
831
|
+
if (!(typed.type === "message.appended" ? typed.data.messageDelta.length > 0 : typed.type === "message.completed" ? (typed.data.message?.length ?? 0) > 0 : true)) return state;
|
|
832
|
+
return updateTurn(state, typed.data.turnId, (turn) => turn.outputStarted ? turn : {
|
|
833
|
+
...turn,
|
|
834
|
+
outputStarted: true
|
|
835
|
+
});
|
|
836
|
+
case "turn.completed":
|
|
837
|
+
case "turn.cancelled":
|
|
838
|
+
case "turn.failed": {
|
|
839
|
+
const { turnId } = typed.data;
|
|
840
|
+
const status = typed.type === "turn.completed" ? "completed" : typed.type === "turn.failed" ? "failed" : "cancelled";
|
|
841
|
+
const { waiting: _waiting, ...rest } = state.turns[turnId] ?? {
|
|
842
|
+
turnId,
|
|
843
|
+
sequence: typed.data.sequence
|
|
844
|
+
};
|
|
845
|
+
return {
|
|
846
|
+
...state,
|
|
847
|
+
activeTurnId: state.activeTurnId === turnId ? void 0 : state.activeTurnId,
|
|
848
|
+
turns: {
|
|
849
|
+
...state.turns,
|
|
850
|
+
[turnId]: {
|
|
851
|
+
...rest,
|
|
852
|
+
status
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
};
|
|
856
|
+
}
|
|
857
|
+
case "context.cleared": return {
|
|
858
|
+
...state,
|
|
859
|
+
calls: Object.fromEntries(Object.entries(state.calls).filter(([, call]) => call.taskId !== void 0))
|
|
860
|
+
};
|
|
861
|
+
case "session.waiting": return state.activeTurnId === void 0 ? state : {
|
|
862
|
+
...state,
|
|
863
|
+
activeTurnId: void 0
|
|
864
|
+
};
|
|
865
|
+
case "session.completed":
|
|
866
|
+
case "session.failed": {
|
|
867
|
+
const { activeTurnId: _activeTurnId, ...rest } = state;
|
|
868
|
+
return {
|
|
869
|
+
...rest,
|
|
870
|
+
ended: true
|
|
871
|
+
};
|
|
872
|
+
}
|
|
873
|
+
case "actions.requested": {
|
|
874
|
+
let calls;
|
|
875
|
+
for (const action of typed.data.actions) {
|
|
876
|
+
if (state.calls[action.callId] !== void 0) continue;
|
|
877
|
+
calls ??= { ...state.calls };
|
|
878
|
+
calls[action.callId] = {
|
|
879
|
+
callId: action.callId,
|
|
880
|
+
name: actionName(action),
|
|
881
|
+
turnId: typed.data.turnId,
|
|
882
|
+
stepIndex: typed.data.stepIndex,
|
|
883
|
+
status: "running"
|
|
884
|
+
};
|
|
885
|
+
}
|
|
886
|
+
return calls === void 0 ? state : {
|
|
887
|
+
...state,
|
|
888
|
+
calls
|
|
889
|
+
};
|
|
890
|
+
}
|
|
891
|
+
case "action.result": {
|
|
892
|
+
const { result, status, error } = typed.data;
|
|
893
|
+
const call = state.calls[result.callId];
|
|
894
|
+
if (call?.taskId !== void 0) return state;
|
|
895
|
+
const settled = status === "rejected" || error?.code === TOOL_EXECUTION_DENIED ? "rejected" : status === "failed" || result.isError === true ? "failed" : "completed";
|
|
896
|
+
if (call === void 0) {
|
|
897
|
+
const unannounced = {
|
|
898
|
+
callId: result.callId,
|
|
899
|
+
name: resultName(result),
|
|
900
|
+
turnId: typed.data.turnId,
|
|
901
|
+
stepIndex: typed.data.stepIndex,
|
|
902
|
+
status: settled
|
|
903
|
+
};
|
|
904
|
+
if (error !== void 0) unannounced.error = error;
|
|
905
|
+
return putCall(state, unannounced);
|
|
906
|
+
}
|
|
907
|
+
return updateCall(state, result.callId, (current) => settleCall(current, settled, error));
|
|
908
|
+
}
|
|
909
|
+
case "task.started": {
|
|
910
|
+
const { callId, kind, name, taskId, turnId } = typed.data;
|
|
911
|
+
const task = state.tasks[taskId] ?? {
|
|
912
|
+
taskId,
|
|
913
|
+
name,
|
|
914
|
+
kind,
|
|
915
|
+
calls: {}
|
|
916
|
+
};
|
|
917
|
+
let next = state;
|
|
918
|
+
if (task.calls[callId] === void 0) next = putTask(next, putTaskCall(task, {
|
|
919
|
+
callId,
|
|
920
|
+
turnId,
|
|
921
|
+
status: "working"
|
|
922
|
+
}));
|
|
923
|
+
const call = next.calls[callId];
|
|
924
|
+
if (call?.taskId === taskId) return next;
|
|
925
|
+
const linked = {
|
|
926
|
+
callId,
|
|
927
|
+
name: call?.name ?? name,
|
|
928
|
+
stepIndex: call?.stepIndex ?? 0,
|
|
929
|
+
taskId,
|
|
930
|
+
turnId: call?.turnId ?? turnId
|
|
931
|
+
};
|
|
932
|
+
if (call?.requestId !== void 0) linked.requestId = call.requestId;
|
|
933
|
+
return putCall(next, linked);
|
|
934
|
+
}
|
|
935
|
+
case "task.settled": {
|
|
936
|
+
const { callId, error, output, status, taskId } = typed.data;
|
|
937
|
+
return updateTask(state, taskId, (task) => {
|
|
938
|
+
const call = task.calls[callId];
|
|
939
|
+
if (call === void 0 || call.status !== "working") return task;
|
|
940
|
+
const settled = {
|
|
941
|
+
callId,
|
|
942
|
+
turnId: call.turnId,
|
|
943
|
+
status
|
|
944
|
+
};
|
|
945
|
+
return putTaskCall(task, status === "completed" && output !== void 0 ? {
|
|
946
|
+
...settled,
|
|
947
|
+
output
|
|
948
|
+
} : status === "failed" && error !== void 0 ? {
|
|
949
|
+
...settled,
|
|
950
|
+
error
|
|
951
|
+
} : settled);
|
|
952
|
+
});
|
|
953
|
+
}
|
|
954
|
+
case "input.requested": {
|
|
955
|
+
const inputs = { ...state.inputs };
|
|
956
|
+
let calls;
|
|
957
|
+
for (const request of typed.data.requests) {
|
|
958
|
+
if (inputs[request.requestId] !== void 0) continue;
|
|
959
|
+
const input = {
|
|
960
|
+
request,
|
|
961
|
+
sequence: typed.data.sequence,
|
|
962
|
+
turnId: typed.data.turnId,
|
|
963
|
+
stepIndex: typed.data.stepIndex,
|
|
964
|
+
status: "open"
|
|
965
|
+
};
|
|
966
|
+
if (typed.data.taskId !== void 0) input.taskId = typed.data.taskId;
|
|
967
|
+
if (typed.data.callId !== void 0) input.callId = typed.data.callId;
|
|
968
|
+
inputs[request.requestId] = input;
|
|
969
|
+
if (request.kind !== "tool-approval" || isRelayed(typed.data)) continue;
|
|
970
|
+
const { callId, toolName } = request.action;
|
|
971
|
+
calls ??= { ...state.calls };
|
|
972
|
+
const call = calls[callId];
|
|
973
|
+
if (call?.taskId !== void 0) continue;
|
|
974
|
+
if (call !== void 0 && isSettledCallStatus(call.status)) continue;
|
|
975
|
+
calls[callId] = {
|
|
976
|
+
...call ?? {
|
|
977
|
+
callId,
|
|
978
|
+
name: toolName,
|
|
979
|
+
turnId: typed.data.turnId,
|
|
980
|
+
stepIndex: typed.data.stepIndex
|
|
981
|
+
},
|
|
982
|
+
requestId: request.requestId,
|
|
983
|
+
status: "awaiting-input"
|
|
984
|
+
};
|
|
985
|
+
}
|
|
986
|
+
return calls === void 0 ? {
|
|
987
|
+
...state,
|
|
988
|
+
inputs
|
|
989
|
+
} : {
|
|
990
|
+
...state,
|
|
991
|
+
calls,
|
|
992
|
+
inputs
|
|
993
|
+
};
|
|
994
|
+
}
|
|
995
|
+
case "approval.candidate": {
|
|
996
|
+
const { candidateId, outcome, requestId } = typed.data;
|
|
997
|
+
state = {
|
|
998
|
+
...state,
|
|
999
|
+
candidates: {
|
|
1000
|
+
...state.candidates,
|
|
1001
|
+
[candidateId]: {
|
|
1002
|
+
candidateId,
|
|
1003
|
+
outcome,
|
|
1004
|
+
requestId
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
};
|
|
1008
|
+
const current = state.inputs[typed.data.requestId];
|
|
1009
|
+
if (current === void 0 || current.status === "settled") return state;
|
|
1010
|
+
if (typed.data.outcome === "pending" || current.status === "open") return state;
|
|
1011
|
+
const { response: _response, ...rest } = current;
|
|
1012
|
+
return {
|
|
1013
|
+
...state,
|
|
1014
|
+
inputs: {
|
|
1015
|
+
...state.inputs,
|
|
1016
|
+
[typed.data.requestId]: {
|
|
1017
|
+
...rest,
|
|
1018
|
+
status: "open"
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
};
|
|
1022
|
+
}
|
|
1023
|
+
case "approval.settled": {
|
|
1024
|
+
const current = state.inputs[typed.data.requestId];
|
|
1025
|
+
if (current === void 0 || current.status === "settled") return state;
|
|
1026
|
+
const outcome = typed.data.outcome === "approved" ? "approved" : "denied";
|
|
1027
|
+
return settleApprovalCall({
|
|
1028
|
+
...state,
|
|
1029
|
+
inputs: {
|
|
1030
|
+
...state.inputs,
|
|
1031
|
+
[typed.data.requestId]: {
|
|
1032
|
+
...current,
|
|
1033
|
+
status: "settled",
|
|
1034
|
+
outcome
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
}, current, outcome);
|
|
1038
|
+
}
|
|
1039
|
+
case "input.resolved": {
|
|
1040
|
+
let next = state;
|
|
1041
|
+
for (const resolution of typed.data.resolutions) {
|
|
1042
|
+
const current = next.inputs[resolution.requestId];
|
|
1043
|
+
if (current === void 0 || current.status === "settled") continue;
|
|
1044
|
+
const response = resolution.response ?? current.response;
|
|
1045
|
+
const settled = {
|
|
1046
|
+
...current,
|
|
1047
|
+
status: "settled",
|
|
1048
|
+
outcome: resolution.outcome
|
|
1049
|
+
};
|
|
1050
|
+
if (response !== void 0) settled.response = response;
|
|
1051
|
+
next = {
|
|
1052
|
+
...next,
|
|
1053
|
+
inputs: {
|
|
1054
|
+
...next.inputs,
|
|
1055
|
+
[resolution.requestId]: settled
|
|
1056
|
+
}
|
|
1057
|
+
};
|
|
1058
|
+
next = settleApprovalCall(next, current, resolution.outcome);
|
|
1059
|
+
}
|
|
1060
|
+
return next;
|
|
1061
|
+
}
|
|
1062
|
+
case "authorization.required": {
|
|
1063
|
+
const attemptId = typed.data.attemptId ?? typed.data.name;
|
|
1064
|
+
const authorization = {
|
|
1065
|
+
attemptId,
|
|
1066
|
+
name: typed.data.name,
|
|
1067
|
+
sequence: typed.data.sequence,
|
|
1068
|
+
turnId: typed.data.turnId,
|
|
1069
|
+
stepIndex: typed.data.stepIndex,
|
|
1070
|
+
status: "required"
|
|
1071
|
+
};
|
|
1072
|
+
if (typed.data.taskId !== void 0) authorization.taskId = typed.data.taskId;
|
|
1073
|
+
if (typed.data.principalId !== void 0) authorization.principalId = typed.data.principalId;
|
|
1074
|
+
if (typed.data.candidateId !== void 0) authorization.candidateId = typed.data.candidateId;
|
|
1075
|
+
if (typed.data.webhookUrl !== void 0) authorization.awaitsCallback = true;
|
|
1076
|
+
return {
|
|
1077
|
+
...state,
|
|
1078
|
+
authorizations: {
|
|
1079
|
+
...state.authorizations,
|
|
1080
|
+
[attemptId]: authorization
|
|
1081
|
+
}
|
|
1082
|
+
};
|
|
1083
|
+
}
|
|
1084
|
+
case "authorization.completed": {
|
|
1085
|
+
const attemptId = typed.data.attemptId ?? typed.data.name;
|
|
1086
|
+
const completed = {
|
|
1087
|
+
...state.authorizations[attemptId] ?? {
|
|
1088
|
+
attemptId,
|
|
1089
|
+
name: typed.data.name,
|
|
1090
|
+
sequence: typed.data.sequence,
|
|
1091
|
+
turnId: typed.data.turnId,
|
|
1092
|
+
stepIndex: typed.data.stepIndex
|
|
1093
|
+
},
|
|
1094
|
+
status: typed.data.outcome
|
|
1095
|
+
};
|
|
1096
|
+
return {
|
|
1097
|
+
...state,
|
|
1098
|
+
authorizations: {
|
|
1099
|
+
...state.authorizations,
|
|
1100
|
+
[attemptId]: completed
|
|
1101
|
+
}
|
|
1102
|
+
};
|
|
1103
|
+
}
|
|
1104
|
+
default: return state;
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
function isRelayed(request) {
|
|
1108
|
+
return request.callId !== void 0 || request.taskId !== void 0;
|
|
1109
|
+
}
|
|
1110
|
+
function settleApprovalCall(state, input, outcome) {
|
|
1111
|
+
if (input.request.kind !== "tool-approval" || isRelayed(input)) return state;
|
|
1112
|
+
const status = callStatusAfterApproval(outcome);
|
|
1113
|
+
if (status === void 0) return state;
|
|
1114
|
+
return updateCall(state, input.request.action.callId, (call) => {
|
|
1115
|
+
if (call.status !== "awaiting-input" || call.requestId !== input.request.requestId) return call;
|
|
1116
|
+
return status === "running" ? {
|
|
1117
|
+
...call,
|
|
1118
|
+
status
|
|
1119
|
+
} : settleCall(call, status);
|
|
1120
|
+
});
|
|
1121
|
+
}
|
|
1122
|
+
function openInputs(state) {
|
|
1123
|
+
return Object.values(state.inputs).filter((input) => input.status !== "settled");
|
|
1124
|
+
}
|
|
1125
|
+
function openSignIns(state) {
|
|
1126
|
+
return Object.values(state.authorizations).filter((attempt) => attempt.status === "required");
|
|
1127
|
+
}
|
|
1128
|
+
function callStatus(state, callId, options = {}) {
|
|
1129
|
+
const call = state.calls[callId];
|
|
1130
|
+
if (call === void 0) return void 0;
|
|
1131
|
+
const status = reportedCallStatus(state, call);
|
|
1132
|
+
if (status !== "running" || call.taskId !== void 0) return status;
|
|
1133
|
+
const turn = state.turns[call.turnId];
|
|
1134
|
+
if (options.streaming === false || turn !== void 0 && turn.status !== "active") return "interrupted";
|
|
1135
|
+
return status;
|
|
1136
|
+
}
|
|
1137
|
+
function reportedCallStatus(state, call) {
|
|
1138
|
+
if (call.taskId === void 0) return call.status;
|
|
1139
|
+
const status = state.tasks[call.taskId]?.calls[call.callId]?.status;
|
|
1140
|
+
return status === void 0 || status === "working" ? "running" : status;
|
|
1141
|
+
}
|
|
1142
|
+
|
|
685
1143
|
//#endregion
|
|
686
1144
|
//#region src/client/session-utils.ts
|
|
687
1145
|
function summarizeTurnEvents(events) {
|
|
@@ -714,46 +1172,30 @@ function endsTurnSegment(event, open) {
|
|
|
714
1172
|
return isCurrentTurnBoundaryEvent(event) && (event.type !== "session.waiting" || !open.callbacks);
|
|
715
1173
|
}
|
|
716
1174
|
var TurnSegment = class {
|
|
1175
|
+
#projection = initialSessionProjection();
|
|
717
1176
|
#authorizations = /* @__PURE__ */ new Map();
|
|
718
1177
|
#followCallbacks;
|
|
719
|
-
#requests = /* @__PURE__ */ new Map();
|
|
720
1178
|
constructor(options = {}) {
|
|
721
1179
|
this.#followCallbacks = options.followCallbacks === true;
|
|
722
1180
|
}
|
|
723
1181
|
get inputRequests() {
|
|
724
|
-
return
|
|
1182
|
+
return openInputs(this.#projection).map((input) => input.request);
|
|
725
1183
|
}
|
|
726
1184
|
get pendingAuthorizations() {
|
|
727
|
-
return
|
|
1185
|
+
return openSignIns(this.#projection).flatMap((attempt) => this.#authorizations.get(attempt.attemptId) ?? []);
|
|
728
1186
|
}
|
|
729
1187
|
observe(event) {
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
for (const request of event.data.requests) this.#requests.set(request.requestId, request);
|
|
733
|
-
break;
|
|
734
|
-
case "approval.settled":
|
|
735
|
-
this.#requests.delete(event.data.requestId);
|
|
736
|
-
break;
|
|
737
|
-
case "input.resolved":
|
|
738
|
-
for (const resolution of event.data.resolutions) this.#requests.delete(resolution.requestId);
|
|
739
|
-
break;
|
|
740
|
-
case "authorization.required":
|
|
741
|
-
this.#authorizations.set(authorizationKey(event.data), event.data);
|
|
742
|
-
break;
|
|
743
|
-
case "authorization.completed": this.#authorizations.delete(authorizationKey(event.data));
|
|
744
|
-
}
|
|
1188
|
+
this.#projection = foldSession(this.#projection, event);
|
|
1189
|
+
if (event.type === "authorization.required") this.#authorizations.set(event.data.attemptId ?? event.data.name, event.data);
|
|
745
1190
|
return endsTurnSegment(event, {
|
|
746
|
-
callbacks: this.#followCallbacks &&
|
|
747
|
-
requests: this.#
|
|
1191
|
+
callbacks: this.#followCallbacks && openSignIns(this.#projection).some((attempt) => attempt.awaitsCallback === true),
|
|
1192
|
+
requests: openInputs(this.#projection).length > 0
|
|
748
1193
|
});
|
|
749
1194
|
}
|
|
750
1195
|
};
|
|
751
1196
|
function isFinalMessageCompleted(event) {
|
|
752
1197
|
return event.type === "message.completed" && event.data.finishReason !== "tool-calls";
|
|
753
1198
|
}
|
|
754
|
-
function authorizationKey(data) {
|
|
755
|
-
return data.attemptId === void 0 ? `name:${data.name}` : `attempt:${data.attemptId}`;
|
|
756
|
-
}
|
|
757
1199
|
|
|
758
1200
|
//#endregion
|
|
759
1201
|
//#region src/protocol/message-version.ts
|
|
@@ -1930,7 +2372,8 @@ var ClientSession = class ClientSession {
|
|
|
1930
2372
|
const terminal = event.type === "session.failed" || event.type === "session.completed";
|
|
1931
2373
|
if (!matches && terminal && (!started || event.type === "session.completed")) throw new Error("The session ended before the accepted message reached its turn boundary.");
|
|
1932
2374
|
if (!started && !matches) continue;
|
|
1933
|
-
|
|
2375
|
+
const attributed = event.meta?.deliveryIds !== void 0;
|
|
2376
|
+
if (!terminal && attributed && !matches) continue;
|
|
1934
2377
|
started = true;
|
|
1935
2378
|
}
|
|
1936
2379
|
reachedBoundary = segment.observe(event);
|
|
@@ -2240,16 +2683,24 @@ var EveAgentProjection = class {
|
|
|
2240
2683
|
}
|
|
2241
2684
|
};
|
|
2242
2685
|
|
|
2686
|
+
//#endregion
|
|
2687
|
+
//#region src/client/conversation-projection.ts
|
|
2688
|
+
const projectionKey = Symbol("eve.conversationProjection");
|
|
2689
|
+
function conversationProjection(state) {
|
|
2690
|
+
return state[projectionKey] ?? initialSessionProjection();
|
|
2691
|
+
}
|
|
2692
|
+
function withConversationProjection(state, projection) {
|
|
2693
|
+
if (state[projectionKey] === projection) return state;
|
|
2694
|
+
return Object.defineProperty({ ...state }, projectionKey, { value: projection });
|
|
2695
|
+
}
|
|
2696
|
+
|
|
2243
2697
|
//#endregion
|
|
2244
2698
|
//#region src/client/conversation-state.ts
|
|
2245
2699
|
function openConversationInputs(state) {
|
|
2246
2700
|
return Object.values(state.inputs).filter((input) => input.status === "open");
|
|
2247
2701
|
}
|
|
2248
|
-
function conversationAuthorizations(state) {
|
|
2249
|
-
return state.messages.flatMap((message) => message.role === "assistant" ? message.parts.filter((part) => part.type === "authorization") : []);
|
|
2250
|
-
}
|
|
2251
2702
|
function hasPendingAuthorizations(state) {
|
|
2252
|
-
return
|
|
2703
|
+
return openSignIns(conversationProjection(state)).some((attempt) => attempt.awaitsCallback === true);
|
|
2253
2704
|
}
|
|
2254
2705
|
function agentToolTask(state, agent) {
|
|
2255
2706
|
const task = agent.taskId === void 0 ? void 0 : state.tasks[agent.taskId];
|
|
@@ -2656,15 +3107,6 @@ function mergeToolMetadata(current, next) {
|
|
|
2656
3107
|
name
|
|
2657
3108
|
} };
|
|
2658
3109
|
}
|
|
2659
|
-
function approvedApproval(part) {
|
|
2660
|
-
if (!part?.approval?.id) return;
|
|
2661
|
-
return {
|
|
2662
|
-
approved: true,
|
|
2663
|
-
id: part.approval.id,
|
|
2664
|
-
isAutomatic: part.approval.isAutomatic,
|
|
2665
|
-
reason: part.approval.reason
|
|
2666
|
-
};
|
|
2667
|
-
}
|
|
2668
3110
|
function normalizeActionRequest(action) {
|
|
2669
3111
|
const name = actionRequestName(action);
|
|
2670
3112
|
switch (action.kind) {
|
|
@@ -2803,33 +3245,104 @@ function transition(message, input) {
|
|
|
2803
3245
|
const messageRun = { transition };
|
|
2804
3246
|
|
|
2805
3247
|
//#endregion
|
|
2806
|
-
//#region src/client/
|
|
2807
|
-
function
|
|
2808
|
-
const
|
|
2809
|
-
|
|
2810
|
-
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
|
-
|
|
2814
|
-
|
|
3248
|
+
//#region src/client/tool-part-state.ts
|
|
3249
|
+
function toolPartState(data, part) {
|
|
3250
|
+
const content = part;
|
|
3251
|
+
const projection = conversationProjection(data);
|
|
3252
|
+
const call = projection.calls[part.toolCallId];
|
|
3253
|
+
const requestId = content.approval?.id;
|
|
3254
|
+
const input = requestId === void 0 ? void 0 : projection.inputs[requestId];
|
|
3255
|
+
const base = {
|
|
3256
|
+
input: part.input,
|
|
3257
|
+
stepIndex: part.stepIndex,
|
|
3258
|
+
toolCallId: part.toolCallId,
|
|
3259
|
+
toolMetadata: part.toolMetadata,
|
|
3260
|
+
toolName: part.toolName,
|
|
2815
3261
|
type: "dynamic-tool"
|
|
2816
3262
|
};
|
|
2817
|
-
|
|
3263
|
+
const requested = requestId === void 0 ? void 0 : {
|
|
3264
|
+
id: requestId,
|
|
3265
|
+
...content.approval?.isAutomatic !== void 0 && { isAutomatic: content.approval.isAutomatic }
|
|
3266
|
+
};
|
|
3267
|
+
const responded = (approved, reason) => ({
|
|
3268
|
+
...base,
|
|
3269
|
+
approval: {
|
|
3270
|
+
...requested,
|
|
3271
|
+
...approved && { approved: true },
|
|
3272
|
+
...reason !== void 0 && { reason }
|
|
3273
|
+
},
|
|
3274
|
+
state: "approval-responded"
|
|
3275
|
+
});
|
|
3276
|
+
const approvedTrue = requested === void 0 ? void 0 : {
|
|
3277
|
+
...requested,
|
|
3278
|
+
approved: true
|
|
3279
|
+
};
|
|
3280
|
+
if (requested !== void 0 && input !== void 0 && input.status !== "settled" && (call === void 0 || !isSettledCallStatus(reportedCallStatus(projection, call)))) return {
|
|
3281
|
+
...base,
|
|
3282
|
+
approval: requested,
|
|
3283
|
+
state: "approval-requested"
|
|
3284
|
+
};
|
|
3285
|
+
const task = call?.taskId === void 0 ? void 0 : projection.tasks[call.taskId]?.calls[part.toolCallId];
|
|
3286
|
+
if (call === void 0) {
|
|
3287
|
+
if (input === void 0) return part;
|
|
3288
|
+
return input.response === void 0 ? {
|
|
3289
|
+
...base,
|
|
3290
|
+
output: { status: input.outcome },
|
|
3291
|
+
state: "output-available"
|
|
3292
|
+
} : responded(input.outcome === "approved", input.response.text);
|
|
3293
|
+
}
|
|
3294
|
+
switch (reportedCallStatus(projection, call)) {
|
|
3295
|
+
case "running":
|
|
3296
|
+
case "awaiting-input":
|
|
3297
|
+
if (content.partial === true) return {
|
|
3298
|
+
...base,
|
|
3299
|
+
approval: approvedTrue,
|
|
3300
|
+
output: content.output,
|
|
3301
|
+
partial: true,
|
|
3302
|
+
state: "output-available"
|
|
3303
|
+
};
|
|
3304
|
+
if (input !== void 0 && (input.outcome === "approved" || input.response !== void 0)) return responded(input.outcome === "approved", input.response?.text);
|
|
3305
|
+
return {
|
|
3306
|
+
...base,
|
|
3307
|
+
state: "input-available"
|
|
3308
|
+
};
|
|
2818
3309
|
case "completed": return {
|
|
2819
|
-
...
|
|
2820
|
-
|
|
3310
|
+
...base,
|
|
3311
|
+
approval: approvedTrue,
|
|
3312
|
+
output: task?.output ?? content.output,
|
|
2821
3313
|
state: "output-available"
|
|
2822
3314
|
};
|
|
2823
3315
|
case "failed": return {
|
|
2824
|
-
...
|
|
2825
|
-
|
|
3316
|
+
...base,
|
|
3317
|
+
approval: approvedTrue,
|
|
3318
|
+
errorText: task?.error?.message ?? content.errorText ?? call.error?.message ?? (call.taskId === void 0 ? "Action failed." : "Task failed."),
|
|
2826
3319
|
state: "output-error"
|
|
2827
3320
|
};
|
|
2828
|
-
case "
|
|
2829
|
-
...
|
|
2830
|
-
|
|
2831
|
-
|
|
3321
|
+
case "rejected": return {
|
|
3322
|
+
...base,
|
|
3323
|
+
approval: {
|
|
3324
|
+
id: requestId ?? part.toolCallId,
|
|
3325
|
+
approved: false,
|
|
3326
|
+
reason: call.error?.message ?? content.errorText
|
|
3327
|
+
},
|
|
3328
|
+
state: "output-denied"
|
|
2832
3329
|
};
|
|
3330
|
+
case "cancelled":
|
|
3331
|
+
if (requestId !== void 0 && input?.outcome === "cancelled") return {
|
|
3332
|
+
...base,
|
|
3333
|
+
approval: {
|
|
3334
|
+
id: requestId,
|
|
3335
|
+
approved: false,
|
|
3336
|
+
reason: "Tool execution was cancelled."
|
|
3337
|
+
},
|
|
3338
|
+
state: "output-denied"
|
|
3339
|
+
};
|
|
3340
|
+
return {
|
|
3341
|
+
...base,
|
|
3342
|
+
approval: approvedTrue,
|
|
3343
|
+
errorText: call.taskId === void 0 ? content.errorText ?? call.error?.message ?? "Action was cancelled." : "Task was cancelled.",
|
|
3344
|
+
state: "output-error"
|
|
3345
|
+
};
|
|
2833
3346
|
}
|
|
2834
3347
|
}
|
|
2835
3348
|
|
|
@@ -2841,7 +3354,7 @@ function receivedMessageEventId(event) {
|
|
|
2841
3354
|
function defaultMessageReducer() {
|
|
2842
3355
|
return {
|
|
2843
3356
|
initial() {
|
|
2844
|
-
return { messages: [] };
|
|
3357
|
+
return withConversationProjection({ messages: [] }, initialSessionProjection());
|
|
2845
3358
|
},
|
|
2846
3359
|
reduce(data, event) {
|
|
2847
3360
|
return reduceMessageData(data, event);
|
|
@@ -2849,6 +3362,12 @@ function defaultMessageReducer() {
|
|
|
2849
3362
|
};
|
|
2850
3363
|
}
|
|
2851
3364
|
function reduceMessageData(data, event) {
|
|
3365
|
+
const projection = foldSession(conversationProjection(data), event);
|
|
3366
|
+
const content = withConversationProjection(reduceContent(data, event), projection);
|
|
3367
|
+
const callIds = toolCallIds(content, event);
|
|
3368
|
+
return withConversationProjection(callIds.length === 0 ? content : withToolPartStates(content, callIds), projection);
|
|
3369
|
+
}
|
|
3370
|
+
function reduceContent(data, event) {
|
|
2852
3371
|
switch (event.type) {
|
|
2853
3372
|
case "client.message.submitted":
|
|
2854
3373
|
case "client.message.failed": return upsertMessage(data, {
|
|
@@ -2863,11 +3382,6 @@ function reduceMessageData(data, event) {
|
|
|
2863
3382
|
}],
|
|
2864
3383
|
role: "user"
|
|
2865
3384
|
}, event.data.turnId);
|
|
2866
|
-
case "input.resolved": {
|
|
2867
|
-
let next = data;
|
|
2868
|
-
for (const resolution of event.data.resolutions) next = resolveInputRequest(next, resolution);
|
|
2869
|
-
return next;
|
|
2870
|
-
}
|
|
2871
3385
|
case "message.received": return upsertMessage(data, {
|
|
2872
3386
|
id: `${receivedMessageEventId(event)}:user`,
|
|
2873
3387
|
metadata: {
|
|
@@ -2901,9 +3415,10 @@ function reduceMessageData(data, event) {
|
|
|
2901
3415
|
case "action.input.appended": {
|
|
2902
3416
|
const existing = findToolPart(data, event.data.callId);
|
|
2903
3417
|
if (existing !== void 0 && existing.state !== "input-streaming") return data;
|
|
2904
|
-
const
|
|
3418
|
+
const inputText = (existing?.state === "input-streaming" ? existing.inputText : "") + event.data.inputTextDelta;
|
|
3419
|
+
return upsertToolPart(data, event.data.turnId, event.data.stepIndex, {
|
|
2905
3420
|
input: void 0,
|
|
2906
|
-
inputText
|
|
3421
|
+
inputText,
|
|
2907
3422
|
state: "input-streaming",
|
|
2908
3423
|
stepIndex: event.data.stepIndex,
|
|
2909
3424
|
toolCallId: event.data.callId,
|
|
@@ -2913,8 +3428,7 @@ function reduceMessageData(data, event) {
|
|
|
2913
3428
|
} },
|
|
2914
3429
|
toolName: event.data.toolName,
|
|
2915
3430
|
type: "dynamic-tool"
|
|
2916
|
-
};
|
|
2917
|
-
return upsertToolPart(data, event.data.turnId, event.data.stepIndex, nextPart);
|
|
3431
|
+
});
|
|
2918
3432
|
}
|
|
2919
3433
|
case "actions.requested": {
|
|
2920
3434
|
let next = data;
|
|
@@ -2941,10 +3455,11 @@ function reduceMessageData(data, event) {
|
|
|
2941
3455
|
if (existing?.approval?.id === request.requestId || existing !== void 0 && isSettledToolPart(existing)) continue;
|
|
2942
3456
|
const descriptor = normalizeActionRequest(request.action);
|
|
2943
3457
|
next = updateAssistantMessage(next, event.data.turnId, (message) => upsertPart(ensureStepStartPart(message, event.data.stepIndex), {
|
|
3458
|
+
...existing,
|
|
2944
3459
|
approval: { id: request.requestId },
|
|
2945
3460
|
input: request.action.input,
|
|
2946
3461
|
state: "approval-requested",
|
|
2947
|
-
stepIndex: event.data.stepIndex,
|
|
3462
|
+
stepIndex: existing?.stepIndex ?? event.data.stepIndex,
|
|
2948
3463
|
toolCallId: request.action.callId,
|
|
2949
3464
|
toolMetadata: createToolMetadata(descriptor, { inputRequest: toMessageInputRequest(request) }),
|
|
2950
3465
|
toolName: descriptor.toolName,
|
|
@@ -2953,97 +3468,75 @@ function reduceMessageData(data, event) {
|
|
|
2953
3468
|
}
|
|
2954
3469
|
return next;
|
|
2955
3470
|
}
|
|
2956
|
-
case "approval.candidate": return data;
|
|
2957
|
-
case "approval.settled": {
|
|
2958
|
-
const existing = findToolPartByApprovalId(data, event.data.requestId);
|
|
2959
|
-
if (existing === void 0) return data;
|
|
2960
|
-
if (event.data.outcome === "approved") {
|
|
2961
|
-
const approval = {
|
|
2962
|
-
approved: true,
|
|
2963
|
-
id: event.data.requestId,
|
|
2964
|
-
reason: void 0
|
|
2965
|
-
};
|
|
2966
|
-
return updateToolPart(data, existing.toolCallId, existing.state === "output-available" ? {
|
|
2967
|
-
...existing,
|
|
2968
|
-
approval
|
|
2969
|
-
} : {
|
|
2970
|
-
...toolPartIdentity(existing),
|
|
2971
|
-
approval,
|
|
2972
|
-
state: "approval-responded"
|
|
2973
|
-
});
|
|
2974
|
-
}
|
|
2975
|
-
if (existing.state === "output-available") return data;
|
|
2976
|
-
return updateToolPart(data, existing.toolCallId, {
|
|
2977
|
-
...toolPartIdentity(existing),
|
|
2978
|
-
approval: {
|
|
2979
|
-
approved: false,
|
|
2980
|
-
id: event.data.requestId,
|
|
2981
|
-
reason: "Tool execution was cancelled."
|
|
2982
|
-
},
|
|
2983
|
-
state: "output-denied"
|
|
2984
|
-
});
|
|
2985
|
-
}
|
|
2986
3471
|
case "action.result": {
|
|
2987
|
-
|
|
3472
|
+
if (conversationProjection(data).calls[event.data.result.callId]?.taskId !== void 0) return data;
|
|
2988
3473
|
const existing = findToolPart(data, event.data.result.callId);
|
|
2989
|
-
const
|
|
2990
|
-
const
|
|
2991
|
-
const
|
|
2992
|
-
|
|
2993
|
-
const resultPartBase = {
|
|
3474
|
+
const descriptor = normalizeActionResult(event.data.result);
|
|
3475
|
+
const succeeded = event.data.status === void 0 || event.data.status === "completed" ? event.data.result.isError !== true && event.data.error === void 0 : false;
|
|
3476
|
+
const part = {
|
|
3477
|
+
...existing,
|
|
2994
3478
|
input: existing?.input,
|
|
2995
|
-
stepIndex: event.data.stepIndex,
|
|
3479
|
+
stepIndex: existing?.stepIndex ?? event.data.stepIndex,
|
|
2996
3480
|
toolCallId: event.data.result.callId,
|
|
2997
|
-
toolMetadata,
|
|
3481
|
+
toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor)),
|
|
2998
3482
|
toolName: existing?.toolName ?? descriptor.toolName,
|
|
2999
3483
|
type: "dynamic-tool"
|
|
3000
3484
|
};
|
|
3001
|
-
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
approved: false,
|
|
3006
|
-
id: approvalId,
|
|
3007
|
-
reason: event.data.error?.message
|
|
3008
|
-
},
|
|
3009
|
-
state: "output-denied"
|
|
3010
|
-
};
|
|
3011
|
-
else if (failed) nextPart = {
|
|
3012
|
-
...resultPartBase,
|
|
3013
|
-
approval: approvedApproval(existing),
|
|
3485
|
+
const outcome = succeeded ? {
|
|
3486
|
+
errorText: void 0,
|
|
3487
|
+
output: event.data.result.output
|
|
3488
|
+
} : {
|
|
3014
3489
|
errorText: event.data.error?.message ?? stringifyUnknown(event.data.result.output),
|
|
3015
|
-
|
|
3490
|
+
output: void 0
|
|
3016
3491
|
};
|
|
3017
|
-
|
|
3018
|
-
...
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
};
|
|
3023
|
-
return upsertToolPart(data, event.data.turnId, event.data.stepIndex, nextPart);
|
|
3492
|
+
return upsertToolPart(data, event.data.turnId, event.data.stepIndex, {
|
|
3493
|
+
...part,
|
|
3494
|
+
...outcome,
|
|
3495
|
+
partial: void 0
|
|
3496
|
+
});
|
|
3024
3497
|
}
|
|
3025
3498
|
case "action.partial": {
|
|
3026
3499
|
const existing = findToolPart(data, event.data.result.callId);
|
|
3027
3500
|
if (existing !== void 0 && isSettledToolPart(existing)) return data;
|
|
3028
3501
|
const descriptor = normalizeActionResult(event.data.result);
|
|
3029
|
-
|
|
3030
|
-
|
|
3502
|
+
return upsertToolPart(data, event.data.turnId, event.data.stepIndex, {
|
|
3503
|
+
...existing,
|
|
3031
3504
|
input: existing?.input,
|
|
3032
3505
|
output: event.data.result.output,
|
|
3033
3506
|
partial: true,
|
|
3034
3507
|
state: "output-available",
|
|
3035
|
-
stepIndex: event.data.stepIndex,
|
|
3508
|
+
stepIndex: existing?.stepIndex ?? event.data.stepIndex,
|
|
3036
3509
|
toolCallId: event.data.result.callId,
|
|
3037
3510
|
toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor)),
|
|
3038
3511
|
toolName: existing?.toolName ?? descriptor.toolName,
|
|
3039
3512
|
type: "dynamic-tool"
|
|
3040
|
-
};
|
|
3041
|
-
|
|
3513
|
+
});
|
|
3514
|
+
}
|
|
3515
|
+
case "input.resolved": {
|
|
3516
|
+
let next = data;
|
|
3517
|
+
for (const { requestId, response } of event.data.resolutions) {
|
|
3518
|
+
const existing = response === void 0 ? void 0 : findToolPartByApprovalId(next, requestId);
|
|
3519
|
+
if (existing === void 0) continue;
|
|
3520
|
+
next = replaceToolPart(next, {
|
|
3521
|
+
...existing,
|
|
3522
|
+
toolMetadata: mergeToolMetadata(existing.toolMetadata, { eve: {
|
|
3523
|
+
inputResponse: response,
|
|
3524
|
+
kind: existing.toolMetadata?.eve?.kind ?? "unknown",
|
|
3525
|
+
name: existing.toolMetadata?.eve?.name ?? existing.toolName
|
|
3526
|
+
} })
|
|
3527
|
+
});
|
|
3528
|
+
}
|
|
3529
|
+
return next;
|
|
3042
3530
|
}
|
|
3043
3531
|
case "task.settled": {
|
|
3044
3532
|
const existing = findToolPart(data, event.data.callId);
|
|
3045
3533
|
if (existing === void 0) return data;
|
|
3046
|
-
|
|
3534
|
+
const { error, output, status } = event.data;
|
|
3535
|
+
const outcome = status === "completed" ? { output } : { errorText: error?.message };
|
|
3536
|
+
return replaceToolPart(data, {
|
|
3537
|
+
...existing,
|
|
3538
|
+
...outcome
|
|
3539
|
+
});
|
|
3047
3540
|
}
|
|
3048
3541
|
case "authorization.required": return updateAssistantMessage(data, event.data.turnId, (message) => upsertPart(ensureStepStartPart(message, event.data.stepIndex), createAuthorizationRequiredPart(event)));
|
|
3049
3542
|
case "authorization.completed": return completeAuthorization(data, event);
|
|
@@ -3068,24 +3561,10 @@ function reduceMessageData(data, event) {
|
|
|
3068
3561
|
result: event.data.result
|
|
3069
3562
|
}
|
|
3070
3563
|
}));
|
|
3071
|
-
case "turn.completed":
|
|
3072
|
-
|
|
3073
|
-
metadata: {
|
|
3074
|
-
...message.metadata,
|
|
3075
|
-
status: "complete"
|
|
3076
|
-
},
|
|
3077
|
-
parts: removeStreamingToolParts(closeStreamingRuns(message.parts))
|
|
3078
|
-
}));
|
|
3079
|
-
case "turn.cancelled": return updateAssistantMessage(data, event.data.turnId, (message) => ({
|
|
3080
|
-
...message,
|
|
3081
|
-
metadata: {
|
|
3082
|
-
...message.metadata,
|
|
3083
|
-
status: "complete"
|
|
3084
|
-
},
|
|
3085
|
-
parts: removeStreamingToolParts(closeStreamingRuns(message.parts))
|
|
3086
|
-
}));
|
|
3564
|
+
case "turn.completed":
|
|
3565
|
+
case "turn.cancelled":
|
|
3087
3566
|
case "turn.failed":
|
|
3088
|
-
if (data.messages.
|
|
3567
|
+
if (event.type === "turn.failed" && !data.messages.some((message) => message.role === "assistant" && message.metadata?.turnId === event.data.turnId)) return data;
|
|
3089
3568
|
return updateAssistantMessage(data, event.data.turnId, (message) => ({
|
|
3090
3569
|
...message,
|
|
3091
3570
|
metadata: {
|
|
@@ -3094,10 +3573,33 @@ function reduceMessageData(data, event) {
|
|
|
3094
3573
|
},
|
|
3095
3574
|
parts: removeStreamingToolParts(closeStreamingRuns(message.parts))
|
|
3096
3575
|
}));
|
|
3097
|
-
case "session.failed": return data;
|
|
3098
3576
|
default: return data;
|
|
3099
3577
|
}
|
|
3100
3578
|
}
|
|
3579
|
+
function toolCallIds(data, event) {
|
|
3580
|
+
const byRequest = (requestId) => findToolPartByApprovalId(data, requestId)?.toolCallId ?? [];
|
|
3581
|
+
switch (event.type) {
|
|
3582
|
+
case "actions.requested": return event.data.actions.map((action) => action.callId);
|
|
3583
|
+
case "input.requested": return event.data.requests.map((request) => request.action.callId);
|
|
3584
|
+
case "action.result":
|
|
3585
|
+
case "action.partial": return [event.data.result.callId];
|
|
3586
|
+
case "task.started":
|
|
3587
|
+
case "task.settled": return [event.data.callId];
|
|
3588
|
+
case "input.resolved": return event.data.resolutions.flatMap((resolution) => byRequest(resolution.requestId));
|
|
3589
|
+
case "approval.settled": return [byRequest(event.data.requestId)].flat();
|
|
3590
|
+
default: return [];
|
|
3591
|
+
}
|
|
3592
|
+
}
|
|
3593
|
+
function withToolPartStates(data, callIds) {
|
|
3594
|
+
let next = data;
|
|
3595
|
+
for (const callId of new Set(callIds)) {
|
|
3596
|
+
const part = findToolPart(next, callId);
|
|
3597
|
+
if (part === void 0) continue;
|
|
3598
|
+
const derived = toolPartState(next, part);
|
|
3599
|
+
if (derived !== part) next = withConversationProjection(replaceToolPart(next, derived), conversationProjection(data));
|
|
3600
|
+
}
|
|
3601
|
+
return next;
|
|
3602
|
+
}
|
|
3101
3603
|
function closeStreamingRuns(parts, stepIndex) {
|
|
3102
3604
|
return parts.map((part) => (part.type === "text" || part.type === "reasoning") && part.state === "streaming" && (stepIndex === void 0 || part.stepIndex === stepIndex) ? {
|
|
3103
3605
|
...part,
|
|
@@ -3107,50 +3609,6 @@ function closeStreamingRuns(parts, stepIndex) {
|
|
|
3107
3609
|
function removeStreamingToolParts(parts) {
|
|
3108
3610
|
return parts.filter((part) => part.type !== "dynamic-tool" || part.state !== "input-streaming");
|
|
3109
3611
|
}
|
|
3110
|
-
function respondToInputRequest(data, response) {
|
|
3111
|
-
const existing = findToolPartByApprovalId(data, response.requestId);
|
|
3112
|
-
if (!existing) return data;
|
|
3113
|
-
const approval = { id: response.requestId };
|
|
3114
|
-
if (response.text !== void 0) approval.reason = response.text;
|
|
3115
|
-
const toolMetadata = mergeToolMetadata(existing.toolMetadata, { eve: {
|
|
3116
|
-
inputResponse: response,
|
|
3117
|
-
kind: existing.toolMetadata?.eve?.kind ?? "unknown",
|
|
3118
|
-
name: existing.toolMetadata?.eve?.name ?? existing.toolName
|
|
3119
|
-
} });
|
|
3120
|
-
return updateToolPart(data, existing.toolCallId, existing.state === "output-available" ? {
|
|
3121
|
-
...existing,
|
|
3122
|
-
approval: {
|
|
3123
|
-
...approval,
|
|
3124
|
-
approved: true
|
|
3125
|
-
},
|
|
3126
|
-
toolMetadata
|
|
3127
|
-
} : {
|
|
3128
|
-
...toolPartIdentity(existing),
|
|
3129
|
-
approval,
|
|
3130
|
-
state: "approval-responded",
|
|
3131
|
-
toolMetadata
|
|
3132
|
-
});
|
|
3133
|
-
}
|
|
3134
|
-
function resolveInputRequest(data, resolution) {
|
|
3135
|
-
if (resolution.response !== void 0) return findToolPartByApprovalId(data, resolution.requestId)?.approval?.approved === void 0 ? respondToInputRequest(data, resolution.response) : data;
|
|
3136
|
-
const existing = findToolPartByApprovalId(data, resolution.requestId);
|
|
3137
|
-
if (!existing) return data;
|
|
3138
|
-
return updateToolPart(data, existing.toolCallId, {
|
|
3139
|
-
...toolPartIdentity(existing),
|
|
3140
|
-
output: { status: resolution.outcome },
|
|
3141
|
-
state: "output-available"
|
|
3142
|
-
});
|
|
3143
|
-
}
|
|
3144
|
-
function toolPartIdentity(part) {
|
|
3145
|
-
return {
|
|
3146
|
-
input: part.input,
|
|
3147
|
-
stepIndex: part.stepIndex,
|
|
3148
|
-
toolCallId: part.toolCallId,
|
|
3149
|
-
toolMetadata: part.toolMetadata,
|
|
3150
|
-
toolName: part.toolName,
|
|
3151
|
-
type: part.type
|
|
3152
|
-
};
|
|
3153
|
-
}
|
|
3154
3612
|
function updateAssistantMessage(data, turnId, update) {
|
|
3155
3613
|
const message = data.messages.find((message) => message.role === "assistant" && message.metadata?.turnId === turnId) ?? createAssistantMessage(turnId);
|
|
3156
3614
|
return upsertMessage(data, update(message));
|
|
@@ -3236,37 +3694,13 @@ function findToolPartByApprovalId(data, approvalId) {
|
|
|
3236
3694
|
//#endregion
|
|
3237
3695
|
//#region src/client/conversation-reducer.ts
|
|
3238
3696
|
function initialConversationState() {
|
|
3239
|
-
return {
|
|
3240
|
-
messages: [],
|
|
3697
|
+
return withConversationProjection({
|
|
3241
3698
|
turns: {},
|
|
3242
3699
|
inputs: {},
|
|
3243
3700
|
tasks: {},
|
|
3701
|
+
messages: [],
|
|
3244
3702
|
agents: {}
|
|
3245
|
-
};
|
|
3246
|
-
}
|
|
3247
|
-
function updateTurn(state, turnId, update) {
|
|
3248
|
-
const turn = state.turns[turnId];
|
|
3249
|
-
if (turn === void 0) return state;
|
|
3250
|
-
const next = update(turn);
|
|
3251
|
-
return next === turn ? state : {
|
|
3252
|
-
...state,
|
|
3253
|
-
turns: {
|
|
3254
|
-
...state.turns,
|
|
3255
|
-
[turnId]: next
|
|
3256
|
-
}
|
|
3257
|
-
};
|
|
3258
|
-
}
|
|
3259
|
-
function updateTask(state, taskId, update) {
|
|
3260
|
-
const task = state.tasks[taskId];
|
|
3261
|
-
if (task === void 0) return state;
|
|
3262
|
-
const next = update(task);
|
|
3263
|
-
return next === task ? state : {
|
|
3264
|
-
...state,
|
|
3265
|
-
tasks: {
|
|
3266
|
-
...state.tasks,
|
|
3267
|
-
[taskId]: next
|
|
3268
|
-
}
|
|
3269
|
-
};
|
|
3703
|
+
}, initialSessionProjection());
|
|
3270
3704
|
}
|
|
3271
3705
|
function updateObservation(state, sessionId, update) {
|
|
3272
3706
|
const agent = state.agents[sessionId];
|
|
@@ -3289,99 +3723,6 @@ function observedConversation(observation) {
|
|
|
3289
3723
|
}
|
|
3290
3724
|
function reduceConversationLifecycle(state, event) {
|
|
3291
3725
|
switch (event.type) {
|
|
3292
|
-
case "turn.started": return {
|
|
3293
|
-
...state,
|
|
3294
|
-
activeTurnId: event.data.turnId,
|
|
3295
|
-
turns: {
|
|
3296
|
-
...state.turns,
|
|
3297
|
-
[event.data.turnId]: {
|
|
3298
|
-
turnId: event.data.turnId,
|
|
3299
|
-
status: "active"
|
|
3300
|
-
}
|
|
3301
|
-
}
|
|
3302
|
-
};
|
|
3303
|
-
case "turn.waiting": return updateTurn(state, event.data.turnId, (turn) => turn.status === "active" && !turn.waiting ? {
|
|
3304
|
-
...turn,
|
|
3305
|
-
waiting: true
|
|
3306
|
-
} : turn);
|
|
3307
|
-
case "step.started": return updateTurn(state, event.data.turnId, (turn) => turn.waiting ? {
|
|
3308
|
-
turnId: turn.turnId,
|
|
3309
|
-
status: turn.status
|
|
3310
|
-
} : turn);
|
|
3311
|
-
case "turn.completed":
|
|
3312
|
-
case "turn.cancelled":
|
|
3313
|
-
case "turn.failed": {
|
|
3314
|
-
const { turnId } = event.data;
|
|
3315
|
-
return {
|
|
3316
|
-
...state,
|
|
3317
|
-
activeTurnId: state.activeTurnId === turnId ? void 0 : state.activeTurnId,
|
|
3318
|
-
turns: {
|
|
3319
|
-
...state.turns,
|
|
3320
|
-
[turnId]: {
|
|
3321
|
-
turnId,
|
|
3322
|
-
status: event.type === "turn.completed" ? "completed" : event.type === "turn.failed" ? "failed" : "cancelled"
|
|
3323
|
-
}
|
|
3324
|
-
}
|
|
3325
|
-
};
|
|
3326
|
-
}
|
|
3327
|
-
case "session.waiting":
|
|
3328
|
-
case "session.completed":
|
|
3329
|
-
case "session.failed": return state.activeTurnId === void 0 ? state : {
|
|
3330
|
-
...state,
|
|
3331
|
-
activeTurnId: void 0
|
|
3332
|
-
};
|
|
3333
|
-
case "task.started": {
|
|
3334
|
-
const { callId, kind, name, taskId, turnId } = event.data;
|
|
3335
|
-
const task = state.tasks[taskId] ?? {
|
|
3336
|
-
taskId,
|
|
3337
|
-
name,
|
|
3338
|
-
kind,
|
|
3339
|
-
calls: {}
|
|
3340
|
-
};
|
|
3341
|
-
if (task.calls[callId] !== void 0) return state;
|
|
3342
|
-
return {
|
|
3343
|
-
...state,
|
|
3344
|
-
tasks: {
|
|
3345
|
-
...state.tasks,
|
|
3346
|
-
[taskId]: {
|
|
3347
|
-
...task,
|
|
3348
|
-
calls: {
|
|
3349
|
-
...task.calls,
|
|
3350
|
-
[callId]: {
|
|
3351
|
-
callId,
|
|
3352
|
-
turnId,
|
|
3353
|
-
status: "working"
|
|
3354
|
-
}
|
|
3355
|
-
}
|
|
3356
|
-
}
|
|
3357
|
-
}
|
|
3358
|
-
};
|
|
3359
|
-
}
|
|
3360
|
-
case "task.settled": {
|
|
3361
|
-
const { callId, error, output, status, taskId } = event.data;
|
|
3362
|
-
return updateTask(state, taskId, (task) => {
|
|
3363
|
-
const call = task.calls[callId];
|
|
3364
|
-
if (call === void 0 || call.status !== "working") return task;
|
|
3365
|
-
const settled = {
|
|
3366
|
-
callId,
|
|
3367
|
-
turnId: call.turnId,
|
|
3368
|
-
status
|
|
3369
|
-
};
|
|
3370
|
-
return {
|
|
3371
|
-
...task,
|
|
3372
|
-
calls: {
|
|
3373
|
-
...task.calls,
|
|
3374
|
-
[callId]: status === "completed" && output !== void 0 ? {
|
|
3375
|
-
...settled,
|
|
3376
|
-
output
|
|
3377
|
-
} : status === "failed" && error !== void 0 ? {
|
|
3378
|
-
...settled,
|
|
3379
|
-
error
|
|
3380
|
-
} : settled
|
|
3381
|
-
}
|
|
3382
|
-
};
|
|
3383
|
-
});
|
|
3384
|
-
}
|
|
3385
3726
|
case "agent.started": {
|
|
3386
3727
|
const { callId, name, sessionId, taskId, turnId } = event.data;
|
|
3387
3728
|
if (state.agents[sessionId] !== void 0) return state;
|
|
@@ -3393,31 +3734,13 @@ function reduceConversationLifecycle(state, event) {
|
|
|
3393
3734
|
observation: { status: "not-followed" }
|
|
3394
3735
|
};
|
|
3395
3736
|
if (taskId !== void 0) agent.taskId = taskId;
|
|
3396
|
-
return {
|
|
3737
|
+
return withConversationProjection({
|
|
3397
3738
|
...state,
|
|
3398
3739
|
agents: {
|
|
3399
3740
|
...state.agents,
|
|
3400
3741
|
[sessionId]: agent
|
|
3401
3742
|
}
|
|
3402
|
-
};
|
|
3403
|
-
}
|
|
3404
|
-
case "input.requested": {
|
|
3405
|
-
const inputs = { ...state.inputs };
|
|
3406
|
-
for (const request of event.data.requests) {
|
|
3407
|
-
if (inputs[request.requestId] !== void 0) continue;
|
|
3408
|
-
const input = {
|
|
3409
|
-
request,
|
|
3410
|
-
turnId: event.data.turnId,
|
|
3411
|
-
stepIndex: event.data.stepIndex,
|
|
3412
|
-
status: "open"
|
|
3413
|
-
};
|
|
3414
|
-
if (event.data.taskId !== void 0) input.taskId = event.data.taskId;
|
|
3415
|
-
inputs[request.requestId] = input;
|
|
3416
|
-
}
|
|
3417
|
-
return {
|
|
3418
|
-
...state,
|
|
3419
|
-
inputs
|
|
3420
|
-
};
|
|
3743
|
+
}, conversationProjection(state));
|
|
3421
3744
|
}
|
|
3422
3745
|
case "client.input.responded": {
|
|
3423
3746
|
const inputs = { ...state.inputs };
|
|
@@ -3430,64 +3753,33 @@ function reduceConversationLifecycle(state, event) {
|
|
|
3430
3753
|
status: "responded"
|
|
3431
3754
|
};
|
|
3432
3755
|
}
|
|
3433
|
-
|
|
3434
|
-
|
|
3435
|
-
|
|
3436
|
-
|
|
3437
|
-
|
|
3438
|
-
case "approval.candidate": {
|
|
3439
|
-
const current = state.inputs[event.data.requestId];
|
|
3440
|
-
if (current === void 0 || current.status === "settled") return state;
|
|
3441
|
-
if (event.data.outcome === "pending") return state;
|
|
3442
|
-
return {
|
|
3443
|
-
...state,
|
|
3444
|
-
inputs: {
|
|
3445
|
-
...state.inputs,
|
|
3446
|
-
[event.data.requestId]: {
|
|
3447
|
-
...current,
|
|
3448
|
-
status: "open",
|
|
3449
|
-
response: void 0
|
|
3450
|
-
}
|
|
3451
|
-
}
|
|
3452
|
-
};
|
|
3453
|
-
}
|
|
3454
|
-
case "approval.settled": {
|
|
3455
|
-
const current = state.inputs[event.data.requestId];
|
|
3456
|
-
if (current === void 0 || current.status === "settled") return state;
|
|
3457
|
-
return {
|
|
3458
|
-
...state,
|
|
3459
|
-
inputs: {
|
|
3460
|
-
...state.inputs,
|
|
3461
|
-
[event.data.requestId]: {
|
|
3462
|
-
...current,
|
|
3463
|
-
status: "settled",
|
|
3464
|
-
outcome: event.data.outcome
|
|
3465
|
-
}
|
|
3466
|
-
}
|
|
3467
|
-
};
|
|
3468
|
-
}
|
|
3469
|
-
case "input.resolved": {
|
|
3470
|
-
const inputs = { ...state.inputs };
|
|
3471
|
-
for (const resolution of event.data.resolutions) {
|
|
3472
|
-
const current = inputs[resolution.requestId];
|
|
3473
|
-
if (current === void 0 || current.status === "settled") continue;
|
|
3474
|
-
inputs[resolution.requestId] = {
|
|
3756
|
+
const projection = conversationProjection(state);
|
|
3757
|
+
const projectedInputs = { ...projection.inputs };
|
|
3758
|
+
for (const response of event.data.responses) {
|
|
3759
|
+
const current = projectedInputs[response.requestId];
|
|
3760
|
+
if (current?.status === "open") projectedInputs[response.requestId] = {
|
|
3475
3761
|
...current,
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
response: resolution.response ?? current.response
|
|
3762
|
+
response,
|
|
3763
|
+
status: "responded"
|
|
3479
3764
|
};
|
|
3480
3765
|
}
|
|
3481
|
-
return {
|
|
3766
|
+
return withConversationProjection({
|
|
3482
3767
|
...state,
|
|
3483
3768
|
inputs
|
|
3484
|
-
}
|
|
3769
|
+
}, {
|
|
3770
|
+
...projection,
|
|
3771
|
+
inputs: projectedInputs
|
|
3772
|
+
});
|
|
3485
3773
|
}
|
|
3486
3774
|
default: return state;
|
|
3487
3775
|
}
|
|
3488
3776
|
}
|
|
3489
3777
|
const messageReducer = defaultMessageReducer();
|
|
3490
3778
|
function reduceConversation(state, event) {
|
|
3779
|
+
const next = reduceConversationEvent(state, event);
|
|
3780
|
+
return event.type.startsWith("client.agent.") ? withConversationProjection(next, conversationProjection(state)) : next;
|
|
3781
|
+
}
|
|
3782
|
+
function reduceConversationEvent(state, event) {
|
|
3491
3783
|
switch (event.type) {
|
|
3492
3784
|
case "client.agent.following": return updateObservation(state, event.data.sessionId, (observation) => observation.status === "following" ? observation : {
|
|
3493
3785
|
status: "following",
|
|
@@ -3508,13 +3800,31 @@ function reduceConversation(state, event) {
|
|
|
3508
3800
|
conversation
|
|
3509
3801
|
};
|
|
3510
3802
|
});
|
|
3511
|
-
default:
|
|
3512
|
-
const
|
|
3513
|
-
|
|
3514
|
-
|
|
3515
|
-
|
|
3516
|
-
|
|
3517
|
-
|
|
3803
|
+
default:
|
|
3804
|
+
const messages = messageReducer.reduce(state, event);
|
|
3805
|
+
const projection = conversationProjection(messages);
|
|
3806
|
+
const { activeTurnId: _activeTurnId, ...rest } = state;
|
|
3807
|
+
const { activeTurnId: _messageTurnId, ...messageData } = messages;
|
|
3808
|
+
const conversation = {
|
|
3809
|
+
...rest,
|
|
3810
|
+
...messageData,
|
|
3811
|
+
turns: Object.fromEntries(Object.entries(projection.turns).map(([id, turn]) => {
|
|
3812
|
+
const { turnId, status, waiting } = turn;
|
|
3813
|
+
const publicTurn = {
|
|
3814
|
+
turnId,
|
|
3815
|
+
status
|
|
3816
|
+
};
|
|
3817
|
+
if (waiting !== void 0) publicTurn.waiting = waiting;
|
|
3818
|
+
return [id, publicTurn];
|
|
3819
|
+
})),
|
|
3820
|
+
inputs: Object.fromEntries(Object.entries(projection.inputs).map(([id, input]) => {
|
|
3821
|
+
const { sequence: _sequence, callId: _callId, ...publicInput } = input;
|
|
3822
|
+
return [id, publicInput];
|
|
3823
|
+
})),
|
|
3824
|
+
tasks: projection.tasks
|
|
3825
|
+
};
|
|
3826
|
+
if (projection.activeTurnId !== void 0) conversation.activeTurnId = projection.activeTurnId;
|
|
3827
|
+
return reduceConversationLifecycle(withConversationProjection(conversation, projection), event);
|
|
3518
3828
|
}
|
|
3519
3829
|
}
|
|
3520
3830
|
const canonicalConversationReducer = {
|
|
@@ -4411,4 +4721,4 @@ function useEveAgent(options = {}) {
|
|
|
4411
4721
|
}
|
|
4412
4722
|
|
|
4413
4723
|
//#endregion
|
|
4414
|
-
export { openConversationInputs as i, conversationReducer as n, defaultMessageReducer as r, useEveAgent as t };
|
|
4724
|
+
export { conversationProjection as a, openConversationInputs as i, conversationReducer as n, callStatus as o, defaultMessageReducer as r, useEveAgent as t };
|