eve 0.69.0 → 0.70.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 +49 -0
- package/dist/src/acp/adapter.js +1 -1
- package/dist/src/channel/task-card.d.ts +3 -3
- package/dist/src/channel/task-card.js +1 -1
- package/dist/src/channel/types.d.ts +18 -0
- package/dist/src/chunks/{use-eve-agent-Dab2MnT2.js → use-eve-agent-CJQeE7-t.js} +1873 -1236
- package/dist/src/chunks/{use-eve-agent-D_5129A9.js → use-eve-agent-DdemtY6C.js} +1874 -1234
- package/dist/src/cli/dev/command.js +1 -1
- package/dist/src/cli/dev/console-records-preload.d.ts +1 -0
- package/dist/src/cli/dev/console-records-preload.js +1 -0
- package/dist/src/cli/dev/console-records.d.ts +17 -0
- package/dist/src/cli/dev/console-records.js +3 -0
- package/dist/src/cli/dev/diagnostic-sink.d.ts +1 -0
- package/dist/src/cli/dev/local-server-process.js +1 -1
- package/dist/src/cli/dev/tui/blocks.d.ts +2 -1
- package/dist/src/cli/dev/tui/blocks.js +3 -3
- package/dist/src/cli/dev/tui/conversation-view.d.ts +54 -0
- package/dist/src/cli/dev/tui/conversation-view.js +1 -0
- package/dist/src/cli/dev/tui/flow-drawer.d.ts +5 -2
- package/dist/src/cli/dev/tui/flow-drawer.js +1 -1
- package/dist/src/cli/dev/tui/log-display-mode.d.ts +4 -10
- package/dist/src/cli/dev/tui/log-display-mode.js +1 -1
- package/dist/src/cli/dev/tui/message-queue.d.ts +7 -63
- package/dist/src/cli/dev/tui/message-queue.js +3 -1
- package/dist/src/cli/dev/tui/prompt-commands.d.ts +7 -7
- package/dist/src/cli/dev/tui/prompt-commands.js +1 -1
- package/dist/src/cli/dev/tui/question-panel.d.ts +3 -1
- package/dist/src/cli/dev/tui/question-panel.js +1 -1
- package/dist/src/cli/dev/tui/runner.d.ts +58 -195
- package/dist/src/cli/dev/tui/runner.js +3 -3
- package/dist/src/cli/dev/tui/task-activity.d.ts +11 -24
- package/dist/src/cli/dev/tui/task-activity.js +1 -1
- package/dist/src/cli/dev/tui/task-records.d.ts +17 -0
- package/dist/src/cli/dev/tui/task-records.js +1 -0
- package/dist/src/cli/dev/tui/terminal-renderer.d.ts +15 -37
- package/dist/src/cli/dev/tui/terminal-renderer.js +10 -13
- package/dist/src/cli/dev/tui/terminal-tool-part.d.ts +2 -0
- package/dist/src/cli/dev/tui/terminal-tool-part.js +1 -0
- package/dist/src/cli/dev/tui/test/fake-eve-server.d.ts +34 -0
- package/dist/src/cli/dev/tui/test/fake-eve-server.js +1 -0
- package/dist/src/cli/dev/tui/test/index.d.ts +1 -0
- package/dist/src/cli/dev/tui/test/index.js +1 -1
- package/dist/src/cli/dev/tui/tool-block-groups.js +1 -1
- package/dist/src/cli/dev/tui/tool-presentation.d.ts +1 -0
- package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
- package/dist/src/cli/dev/tui/tool-rows.d.ts +1 -0
- package/dist/src/cli/dev/tui/tool-rows.js +2 -2
- package/dist/src/cli/dev/tui/transcript-parts.d.ts +81 -0
- package/dist/src/cli/dev/tui/transcript-parts.js +3 -0
- package/dist/src/cli/dev/tui/transcript.d.ts +47 -0
- package/dist/src/cli/dev/tui/transcript.js +1 -0
- package/dist/src/cli/dev/tui/tui.js +1 -1
- package/dist/src/cli/dev/tui/turn-clock.d.ts +11 -26
- package/dist/src/cli/dev/tui/turn-clock.js +1 -1
- package/dist/src/cli/dev/tui/types.d.ts +2 -4
- package/dist/src/cli/dev/ui-options.js +1 -1
- package/dist/src/client/agent-stream-follower.d.ts +26 -0
- package/dist/src/client/agent-stream-follower.js +1 -0
- package/dist/src/client/authorization-message-parts.js +1 -1
- package/dist/src/client/conversation-client.d.ts +40 -0
- package/dist/src/client/conversation-client.js +1 -0
- package/dist/src/client/conversation-reducer.d.ts +29 -0
- package/dist/src/client/conversation-reducer.js +1 -0
- package/dist/src/client/conversation-state.d.ts +110 -0
- package/dist/src/client/conversation-state.js +1 -0
- package/dist/src/client/eve-agent-projection.d.ts +24 -7
- package/dist/src/client/eve-agent-projection.js +1 -1
- package/dist/src/client/eve-agent-store-helpers.d.ts +21 -2
- package/dist/src/client/eve-agent-store-helpers.js +2 -2
- package/dist/src/client/eve-agent-store-state.d.ts +15 -3
- package/dist/src/client/eve-agent-store.d.ts +10 -1
- package/dist/src/client/eve-agent-store.js +1 -1
- package/dist/src/client/index.d.ts +4 -1
- package/dist/src/client/index.js +1 -1
- package/dist/src/client/message-reducer-primitives.d.ts +1 -2
- package/dist/src/client/message-reducer-primitives.js +1 -1
- package/dist/src/client/message-reducer-types.d.ts +9 -2
- package/dist/src/client/message-reducer.js +1 -1
- package/dist/src/client/message-response.js +1 -1
- package/dist/src/client/message-run-parts.d.ts +10 -6
- package/dist/src/client/message-run-parts.js +1 -1
- package/dist/src/client/optimistic-message-submissions.d.ts +6 -4
- package/dist/src/client/optimistic-message-submissions.js +1 -1
- package/dist/src/client/reducer.d.ts +5 -1
- package/dist/src/client/session-turn-dispatch.d.ts +15 -0
- package/dist/src/client/session-turn-dispatch.js +1 -0
- package/dist/src/client/session-utils.d.ts +27 -10
- package/dist/src/client/session-utils.js +1 -1
- package/dist/src/client/session.js +1 -1
- package/dist/src/client/types.d.ts +2 -1
- package/dist/src/compiled/.vendor-stamp.json +2 -2
- package/dist/src/compiled/{gray-matter → js-yaml}/LICENSE +2 -2
- package/dist/src/compiled/js-yaml/index.d.ts +12 -0
- package/dist/src/compiled/js-yaml/index.js +34 -0
- package/dist/src/compiler/extension-compatibility.d.ts +18 -18
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/load-binding-namespace.js +1 -1
- package/dist/src/context/keys.d.ts +5 -2
- package/dist/src/context/keys.js +1 -1
- package/dist/src/context/provider.d.ts +5 -9
- package/dist/src/context/run-step.d.ts +4 -4
- package/dist/src/context/run-step.js +1 -1
- package/dist/src/context/serialize.d.ts +5 -1
- package/dist/src/context/serialize.js +1 -1
- package/dist/src/evals/loaders/yaml.js +1 -1
- package/dist/src/evals/runner/derive-run-facts.js +1 -1
- package/dist/src/evals/runner/execute-task.js +1 -1
- package/dist/src/evals/session.js +2 -2
- package/dist/src/evals/types.d.ts +16 -0
- package/dist/src/eve-channel/index.js +1 -1
- package/dist/src/execution/agent-sessions/context.d.ts +4 -2
- package/dist/src/execution/agent-sessions/context.js +1 -1
- package/dist/src/execution/agent-sessions/steps.js +1 -1
- package/dist/src/execution/cancelled-model-call-batch.js +1 -1
- package/dist/src/execution/coordination-dispatch-shared.d.ts +6 -4
- package/dist/src/execution/coordination-dispatch-shared.js +1 -1
- package/dist/src/execution/create-session-step.d.ts +4 -2
- package/dist/src/execution/create-session-step.js +1 -1
- package/dist/src/execution/durable-session-store.d.ts +10 -4
- package/dist/src/execution/durable-session-store.js +1 -1
- package/dist/src/execution/dynamic-workflow/tool.js +1 -1
- package/dist/src/execution/legacy-remote-agent/protocol.d.ts +8 -0
- package/dist/src/execution/legacy-remote-agent/protocol.js +1 -1
- package/dist/src/execution/legacy-session/completion-step.d.ts +2 -0
- package/dist/src/execution/legacy-session/completion-step.js +1 -1
- package/dist/src/execution/legacy-session/interrupt-step.js +1 -1
- package/dist/src/execution/legacy-session/prepare-step.d.ts +1 -0
- package/dist/src/execution/legacy-session/prepare-step.js +1 -1
- package/dist/src/execution/legacy-session/snapshot.d.ts +8 -4
- package/dist/src/execution/legacy-session/snapshot.js +1 -1
- package/dist/src/execution/legacy-session/turn-workflow.js +1 -1
- package/dist/src/execution/proxied-deliver-step.js +1 -1
- package/dist/src/execution/publish-session-events.d.ts +27 -7
- package/dist/src/execution/publish-session-events.js +1 -1
- package/dist/src/execution/reconcile-session-continuation-token.d.ts +2 -2
- package/dist/src/execution/runtime-context.js +1 -1
- package/dist/src/execution/session/active-turn.d.ts +97 -0
- package/dist/src/execution/session/active-turn.js +1 -0
- package/dist/src/execution/session/checkpoint-migrations.d.ts +23 -0
- package/dist/src/execution/session/checkpoint-migrations.js +1 -0
- package/dist/src/execution/session/entry.js +1 -1
- package/dist/src/execution/session/finalization.js +1 -1
- package/dist/src/execution/session/handoff-steps.d.ts +24 -5
- package/dist/src/execution/session/handoff-steps.js +1 -1
- package/dist/src/execution/session/handoff.d.ts +10 -6
- package/dist/src/execution/session/handoff.js +1 -1
- package/dist/src/execution/session/input-queue.d.ts +19 -13
- package/dist/src/execution/session/input-queue.js +1 -1
- package/dist/src/execution/session/next-input.d.ts +2 -10
- package/dist/src/execution/session/next-input.js +1 -1
- package/dist/src/execution/session/pending-turn-state.d.ts +2 -0
- package/dist/src/execution/session/pending-turn-state.js +1 -1
- package/dist/src/execution/session/program.d.ts +2 -0
- package/dist/src/execution/session/program.js +1 -1
- package/dist/src/execution/session/state-cursor.d.ts +22 -16
- package/dist/src/execution/session/state-cursor.js +1 -1
- package/dist/src/execution/session/state-delta.d.ts +8 -1
- package/dist/src/execution/session/state-delta.js +1 -1
- package/dist/src/execution/session/turn-event-handler.js +1 -1
- package/dist/src/execution/session/turn-step-result.js +1 -1
- package/dist/src/execution/session/turn-step-types.d.ts +20 -4
- 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 +22 -3
- package/dist/src/execution/session/turn.js +1 -1
- package/dist/src/execution/session.d.ts +5 -5
- package/dist/src/execution/session.js +2 -2
- package/dist/src/execution/settle-cancelled-turn-step.d.ts +5 -4
- package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
- package/dist/src/execution/tasks/start.d.ts +2 -2
- package/dist/src/execution/tasks/task-id-input.d.ts +1 -1
- package/dist/src/execution/tasks/task-id-input.js +1 -1
- package/dist/src/execution/terminal-session-completion-step.d.ts +2 -0
- package/dist/src/execution/terminal-session-completion-step.js +1 -1
- package/dist/src/execution/terminal-session-failure-step.d.ts +2 -0
- 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-target.d.ts +5 -0
- package/dist/src/execution/tools/connection-target.js +1 -1
- package/dist/src/execution/tools/connection-tools.js +2 -2
- package/dist/src/execution/tools/workflow/start.d.ts +3 -3
- package/dist/src/harness/authorization.d.ts +15 -2
- package/dist/src/harness/authorization.js +1 -1
- package/dist/src/harness/cancelled-turn-emission.d.ts +2 -1
- package/dist/src/harness/cancelled-turn-emission.js +1 -1
- package/dist/src/harness/coordination.d.ts +5 -3
- package/dist/src/harness/emission.d.ts +5 -2
- package/dist/src/harness/emission.js +1 -1
- package/dist/src/harness/held-requests.d.ts +18 -0
- package/dist/src/harness/held-requests.js +1 -0
- package/dist/src/harness/hitl/approval-input-requests.d.ts +16 -0
- package/dist/src/harness/hitl/approval-input-requests.js +1 -1
- package/dist/src/harness/input-extraction.js +1 -1
- package/dist/src/harness/input-requests.d.ts +0 -4
- package/dist/src/harness/input-requests.js +1 -1
- package/dist/src/harness/model-call-error.js +1 -1
- package/dist/src/harness/proxy-input-requests.d.ts +4 -4
- package/dist/src/harness/session-limit-enforcement.js +1 -1
- package/dist/src/harness/stale-input-responses.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/harness/turn-tag-state.d.ts +2 -0
- package/dist/src/harness/turn-tag-state.js +1 -1
- package/dist/src/harness/types.d.ts +23 -11
- package/dist/src/instrumentation/channel-delivery.d.ts +1 -0
- package/dist/src/instrumentation/channel-delivery.js +1 -1
- package/dist/src/instrumentation/lifecycle.d.ts +4 -0
- package/dist/src/instrumentation/memory.d.ts +2 -0
- package/dist/src/instrumentation/memory.js +1 -1
- package/dist/src/instrumentation/native-events.d.ts +1 -0
- package/dist/src/instrumentation/native-events.js +1 -1
- package/dist/src/instrumentation/runtime.d.ts +4 -3
- package/dist/src/instrumentation/runtime.js +1 -1
- package/dist/src/instrumentation/session-init.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-module-loader.d.ts +14 -6
- package/dist/src/internal/authored-module-loader.js +1 -1
- package/dist/src/internal/authored-package-boundary.d.ts +1 -1
- package/dist/src/internal/authored-package-boundary.js +1 -1
- package/dist/src/internal/bundler/extension-mount-plugin.js +1 -1
- package/dist/src/internal/helpers/frontmatter.d.ts +24 -0
- package/dist/src/internal/helpers/frontmatter.js +1 -0
- package/dist/src/internal/helpers/markdown.js +1 -3
- package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
- package/dist/src/internal/nitro/host/nitro-bundler-config.js +1 -1
- package/dist/src/internal/node-esm-compat-banner.js +1 -1
- package/dist/src/internal/workflow-bundle/dynamic-remote-agent-transform.js +1 -1
- package/dist/src/internal/workflow-bundle/dynamic-tool-ast-references.d.ts +27 -1
- package/dist/src/internal/workflow-bundle/dynamic-tool-ast-references.js +1 -1
- package/dist/src/internal/workflow-bundle/dynamic-tool-transform.js +2 -2
- package/dist/src/protocol/message.d.ts +41 -3
- package/dist/src/protocol/message.js +2 -2
- package/dist/src/public/channels/slack/action-status.d.ts +2 -2
- package/dist/src/public/channels/slack/action-status.js +1 -1
- package/dist/src/public/channels/slack/approval-cards.d.ts +15 -0
- package/dist/src/public/channels/slack/approval-cards.js +2 -0
- package/dist/src/public/channels/slack/auth.d.ts +2 -0
- package/dist/src/public/channels/slack/auth.js +1 -1
- package/dist/src/public/channels/slack/connections.d.ts +15 -11
- package/dist/src/public/channels/slack/connections.js +1 -1
- package/dist/src/public/channels/slack/defaults.d.ts +1 -15
- package/dist/src/public/channels/slack/defaults.js +3 -4
- package/dist/src/public/channels/slack/hitl.js +1 -1
- package/dist/src/public/channels/slack/inbound.d.ts +10 -2
- package/dist/src/public/channels/slack/inbound.js +1 -1
- package/dist/src/public/channels/slack/index.d.ts +2 -0
- package/dist/src/public/channels/slack/index.js +1 -1
- package/dist/src/public/channels/slack/input-response.js +1 -1
- package/dist/src/public/channels/slack/interaction-cards.js +1 -1
- package/dist/src/public/channels/slack/interactions.js +1 -1
- package/dist/src/public/channels/slack/limits.d.ts +5 -3
- package/dist/src/public/channels/slack/private-approval-delivery.js +1 -1
- package/dist/src/public/channels/slack/renderers.d.ts +1 -1
- package/dist/src/public/channels/slack/renderers.js +1 -1
- package/dist/src/public/channels/slack/reply-delivery.d.ts +72 -0
- package/dist/src/public/channels/slack/reply-delivery.js +1 -0
- package/dist/src/public/channels/slack/sign-in-cancel.d.ts +20 -0
- package/dist/src/public/channels/slack/sign-in-cancel.js +1 -0
- package/dist/src/public/channels/slack/slackChannel.d.ts +15 -0
- package/dist/src/public/channels/slack/slackChannel.js +1 -1
- package/dist/src/public/channels/slack/task-card.js +1 -1
- package/dist/src/public/channels/teams/defaults.d.ts +1 -1
- package/dist/src/public/channels/teams/defaults.js +2 -2
- package/dist/src/public/definitions/channel.d.ts +1 -0
- package/dist/src/public/definitions/channel.js +1 -1
- package/dist/src/public/definitions/state.d.ts +2 -0
- package/dist/src/public/definitions/state.js +1 -1
- package/dist/src/public/next/index.js +1 -1
- package/dist/src/public/next/server.d.ts +2 -0
- package/dist/src/public/next/server.js +1 -2
- package/dist/src/public/nuxt/module.d.ts +6 -0
- package/dist/src/public/nuxt/module.js +1 -1
- package/dist/src/react/index.d.ts +3 -0
- package/dist/src/react/index.js +1 -1
- package/dist/src/react/use-eve-agent.d.ts +7 -5
- package/dist/src/react/use-eve-agent.js +1 -1
- package/dist/src/runtime/connections/openapi-spec.d.ts +1 -4
- package/dist/src/runtime/connections/openapi-spec.js +1 -1
- package/dist/src/runtime/connections/scoped-authorization.d.ts +2 -0
- package/dist/src/runtime/connections/scoped-authorization.js +1 -1
- package/dist/src/setup/boxes/deploy-project.js +1 -1
- package/dist/src/setup/integrations/web/setup.js +6 -2
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/setup/scaffold/create/web-template.d.ts +5 -5
- package/dist/src/setup/scaffold/create/web-template.js +61 -35
- package/dist/src/setup/vercel-project-framework.js +1 -1
- package/dist/src/shared/display-name.d.ts +15 -0
- package/dist/src/shared/display-name.js +1 -0
- package/dist/src/shared/framework-eve-server.d.ts +43 -0
- package/dist/src/shared/framework-eve-server.js +2 -0
- package/dist/src/shared/token-usage.d.ts +2 -0
- package/dist/src/shared/token-usage.js +1 -1
- package/dist/src/shared/trace-root.d.ts +8 -0
- package/dist/src/shared/trace-root.js +1 -0
- package/dist/src/subagents/callback-route.js +1 -1
- package/dist/src/subagents/hitl-proxy.d.ts +3 -3
- package/dist/src/subagents/hitl-proxy.js +1 -1
- package/dist/src/subagents/invocation.d.ts +3 -1
- package/dist/src/subagents/parent-notification.d.ts +7 -7
- package/dist/src/subagents/parent-notification.js +1 -1
- package/dist/src/subagents/tool.js +1 -1
- package/dist/src/svelte/index.d.ts +3 -0
- package/dist/src/svelte/index.js +2 -2
- package/dist/src/svelte/use-eve-agent.d.ts +7 -4
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tools/provided/ask-question-workflow.js +1 -1
- package/dist/src/tools/provided/load-skill.js +1 -1
- package/dist/src/tools/provided/sleep-workflow.js +1 -1
- package/dist/src/tracing/agent-action-instrumentation.js +1 -1
- package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
- package/dist/src/tracing/agent-memory-instrumentation.js +1 -1
- package/dist/src/tracing/agent-otel-attributes.d.ts +6 -0
- package/dist/src/tracing/agent-otel-attributes.js +1 -1
- package/dist/src/tracing/agent-otel-provider.js +2 -2
- package/dist/src/tracing/agent-otel-runtime-context.d.ts +1 -1
- package/dist/src/tracing/agent-otel-runtime-context.js +1 -1
- package/dist/src/tracing/agent-otel-session-context.js +1 -1
- package/dist/src/tracing/agent-span-contract.js +1 -1
- package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
- package/dist/src/tracing/agent-trace-context-codec.d.ts +4 -0
- package/dist/src/tracing/agent-trace-context-codec.js +1 -1
- package/dist/src/tracing/agent-trace-span-processor.js +1 -1
- package/dist/src/tracing/agent-trace-state.d.ts +3 -0
- package/dist/src/tracing/conversation-context.d.ts +10 -0
- package/dist/src/tracing/conversation-context.js +1 -1
- package/dist/src/tracing/otel-registration.js +1 -1
- package/dist/src/vue/index.d.ts +3 -0
- package/dist/src/vue/index.js +2 -2
- package/dist/src/vue/use-eve-agent.d.ts +7 -3
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/channels/slack.mdx +60 -13
- package/docs/concepts/built-in-tools.md +3 -2
- package/docs/concepts/execution-model-and-durability.mdx +3 -1
- package/docs/concepts/sessions-runs-and-streaming.md +4 -4
- package/docs/connections/overview.mdx +9 -3
- package/docs/evals/reporters.mdx +4 -0
- package/docs/extensions.md +15 -3
- package/docs/guides/client/streaming.mdx +7 -6
- package/docs/guides/deployment/vercel.mdx +2 -1
- package/docs/guides/dev-tui.md +17 -17
- package/docs/guides/dynamic-capabilities.md +1 -1
- package/docs/guides/frontend/nuxt.mdx +24 -4
- package/docs/guides/frontend/overview.mdx +44 -38
- package/docs/guides/frontend/use-eve-agent-svelte.mdx +4 -10
- package/docs/guides/frontend/use-eve-agent-vue.mdx +4 -10
- package/docs/guides/instrumentation/otel.mdx +24 -6
- package/docs/guides/remote-agents.md +26 -8
- package/docs/reference/cli.md +4 -4
- package/docs/tools/human-in-the-loop.md +4 -4
- package/docs/tools/overview.mdx +1 -1
- package/docs/tools/tasks.md +8 -8
- package/package.json +2 -2
- package/dist/src/cli/dev/tui/steering-stream.d.ts +0 -15
- package/dist/src/cli/dev/tui/steering-stream.js +0 -1
- package/dist/src/cli/dev/tui/subagent-pump.d.ts +0 -134
- package/dist/src/cli/dev/tui/subagent-pump.js +0 -1
- package/dist/src/compiled/gray-matter/index.d.ts +0 -62
- package/dist/src/compiled/gray-matter/index.js +0 -48
- package/dist/src/internal/helpers/gray-matter.d.ts +0 -25
- package/dist/src/internal/helpers/gray-matter.js +0 -1
- package/dist/src/public/nuxt/dev-server.d.ts +0 -25
- package/dist/src/public/nuxt/dev-server.js +0 -1
|
@@ -53,7 +53,7 @@ export function Chat() {
|
|
|
53
53
|
<article key={message.id}>
|
|
54
54
|
<header>{message.role}</header>
|
|
55
55
|
{message.parts.map((part, index) =>
|
|
56
|
-
part.type === "text" ? <p key={index}>{part.text}</p> : null,
|
|
56
|
+
part.type === "text" ? <p key={part.id ?? index}>{part.text}</p> : null,
|
|
57
57
|
)}
|
|
58
58
|
</article>
|
|
59
59
|
))}
|
|
@@ -70,21 +70,22 @@ export function Chat() {
|
|
|
70
70
|
|
|
71
71
|
`useEveAgent()` returns the current UI state plus commands:
|
|
72
72
|
|
|
73
|
-
| Field
|
|
74
|
-
|
|
|
75
|
-
| `data`
|
|
76
|
-
| `
|
|
77
|
-
| `
|
|
78
|
-
| `
|
|
79
|
-
| `
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
82
|
-
| `
|
|
83
|
-
| `
|
|
84
|
-
| `
|
|
85
|
-
| `
|
|
86
|
-
|
|
87
|
-
|
|
73
|
+
| Field | What it is |
|
|
74
|
+
| -------------- | ----------------------------------------------------------------------------------------- |
|
|
75
|
+
| `data` | The selected projection: `ConversationState` by default, or your custom reducer's state. |
|
|
76
|
+
| `conversation` | Canonical conversation state, including messages, root turns and inputs, and child state. |
|
|
77
|
+
| `status` | `"ready"`, `"resuming"`, `"submitted"`, `"streaming"`, or `"error"`. Drives the composer. |
|
|
78
|
+
| `error` | The latest session creation, stream, resume, or turn failure. |
|
|
79
|
+
| `events` | Raw eve stream events for this session. |
|
|
80
|
+
| `session` | Serializable fixed session cursor (`sessionId`, `streamIndex`). |
|
|
81
|
+
| `prewarm` | Create the durable session without starting a turn. |
|
|
82
|
+
| `send` | Send text or a multi-part message, with per-turn options. |
|
|
83
|
+
| `respond` | Answer pending HITL input requests, with per-turn options. |
|
|
84
|
+
| `resume` | Replay an attached session and follow its in-flight turn. |
|
|
85
|
+
| `cancel` | Request durable cancellation of the active turn. |
|
|
86
|
+
| `reset` | Clear local events, data, errors, and the local session cursor. |
|
|
87
|
+
|
|
88
|
+
Most chat UIs only need `data.messages` and `status` with the default reducer. Use `conversation` for session state when a custom reducer shapes `data`. Drop down to `events` when you need the authoritative wire events directly, for example to persist an audit log or build a custom projection.
|
|
88
89
|
|
|
89
90
|
Pass `prewarm: true` to start a workflow when the chat mounts and after each reset:
|
|
90
91
|
|
|
@@ -157,9 +158,10 @@ change the option from `false` to `true` again, reset, or send a message to reco
|
|
|
157
158
|
|
|
158
159
|
The hook keeps consuming one session stream across turns and idle periods. Replies,
|
|
159
160
|
authorization updates, and turns started elsewhere all update the same projection. Separately
|
|
160
|
-
delivered participant messages remain separate bubbles
|
|
161
|
-
|
|
162
|
-
close the connection. The transport reconnects from
|
|
161
|
+
delivered participant messages remain separate bubbles before that turn's assistant response, even
|
|
162
|
+
when they arrive after the response begins. A single event that coalesces multiple deliveries
|
|
163
|
+
remains one bubble. A turn settling does not close the connection. The transport reconnects from
|
|
164
|
+
its cursor after a disconnect or the
|
|
163
165
|
server's renewable 60-second lease; lease renewal does not start a turn or clear UI state.
|
|
164
166
|
Unmounting or resetting closes the local stream without cancelling the old durable session.
|
|
165
167
|
|
|
@@ -168,9 +170,15 @@ the reset, it prepares the next owned session; otherwise, the next send creates
|
|
|
168
170
|
supplied `session` remains externally owned and is never replaced by prewarming or reset. Use
|
|
169
171
|
`initialSession` with `resume: true` to restore a saved chat.
|
|
170
172
|
|
|
171
|
-
`data.messages` are eve-owned `EveMessage[]`.
|
|
173
|
+
`data.messages` are eve-owned `EveMessage[]`. Assistant text and reasoning parts have a stable `id` from the event that created the part. Appends and completion retain that ID. Use `part.id` to key streamed assistant content, including successive text parts within one step. Older events without an ID get a best-effort fallback. User text parts may not have an ID.
|
|
172
174
|
|
|
173
|
-
|
|
175
|
+
Common text, reasoning, file, and dynamic-tool parts follow the [AI SDK `UIMessage`](https://ai-sdk.dev/docs/reference/ai-sdk-core/ui-message) rendering convention, but the types are not interchangeable. eve also exposes authorization and HITL metadata, and a file part's URL can be absent. Adapt those parts before passing messages to an API typed as `UIMessage[]`.
|
|
176
|
+
|
|
177
|
+
When the root agent delegates, its stream emits `task.started` for the call, `agent.started` with the child's `sessionId`, and `task.settled` with the call's result, failure, or cancellation. The default reducer settles the subagent's tool part from `task.settled`, so the part shows the call's outcome rather than its start receipt. `data.tasks[taskId].calls[callId]` records each call's `status`, `output`, and `error`, and `data.agents[sessionId]` records each session a call opened, with its `taskId` and opening `callId`. These records come from the root stream alone.
|
|
178
|
+
|
|
179
|
+
Detailed child progress lives on the child session's stream, not in the root `data.messages`. Pass `followSubagents: true` to follow the session each subagent call reaches while the component is mounted; following is off by default. Narrow `data.agents[sessionId].observation.status` before reading its `conversation`: `"not-followed"` has no child detail, `"following"` has live detail, and `"idle"` has everything the calls so far produced and resumes when another call reaches the task. `"unavailable"` means the stream failed, not that the child failed. Calls that continue a task with its `taskId` reach the same session, so one session's `conversation.messages`, `inputs`, and `turns` span all of them. Sessions that a custom task opens with `ctx.agent` are recorded but not followed.
|
|
180
|
+
|
|
181
|
+
If you manage your own session rather than using the hook, pass an `agent.started` event from `events` to [`session.agent()`](../client/streaming#follow-a-subagent) and follow the child with `stream()`. It follows local and remote children through the parent, so the browser never calls a remote deployment directly. See [What the parent sees](../../subagents#what-the-parent-sees) for the complete contract.
|
|
174
182
|
|
|
175
183
|
## Sending and streaming
|
|
176
184
|
|
|
@@ -192,13 +200,15 @@ await agent.send([
|
|
|
192
200
|
|
|
193
201
|
Assistant text, reasoning, tool calls, and tool results stream into `data` as they arrive, and a new turn moves `status` from `ready` to `submitted` to `streaming` and back. Resuming an attached session uses `resuming` while eve performs bounded catch-up. Disable message and HITL submission in that state. A settled tail moves directly to `ready`; an in-flight tail moves to `streaming` before eve follows it.
|
|
194
202
|
|
|
203
|
+
A turn stays open while tasks it started are working. `status` stays `streaming` until the turn ends, and `data.turns[turnId].waiting` is `true` while the turn is parked, until its next step starts. When a call the turn runs asks a question, `send()` resolves at that point, as `session.send().result()` does; answer with `respond()` while the turn stays open.
|
|
204
|
+
|
|
195
205
|
To steer an active turn with a follow-up, send the message with `turnPolicy: "steer"`. Before answer output or local tool execution begins, eve interrupts pending model generation and continues the same turn with the correction. Executing tools finish and checkpoint their results first; after answer output starts, steering waits for the next committed workflow boundary. Reasoning and search progress do not count as answer output. The hook stays attached through completion:
|
|
196
206
|
|
|
197
207
|
```tsx
|
|
198
208
|
await agent.send(message, { turnPolicy: "steer" });
|
|
199
209
|
```
|
|
200
210
|
|
|
201
|
-
Other message sends
|
|
211
|
+
Other message sends reject while the hook is processing a turn. Answers to open input requests are accepted at any time; see [Human-in-the-loop prompts](#human-in-the-loop-prompts). The default `data.inputs` ledger keeps each request's originating `turnId` and `stepIndex`, response and settlement status, including requests left open after their originating turn ends; `data.activeTurnId` tracks the current root turn when known. A request from a task's run also carries that task's `taskId`. Each followed session keeps its own ledger in `data.agents[sessionId].observation.conversation`. Call `cancel()` to stop the durable server-side turn without replacing it, and `reset()` to clear local state so the next send starts a fresh durable session.
|
|
202
212
|
|
|
203
213
|
`cancel()` can be called as soon as `status` is `"submitted"`; the hook waits for the active response to identify its turn when necessary, sends one guarded cancellation request, and keeps the event stream attached. The promise resolves when eve accepts the request or reports that no turn is active, and rejects if the cancellation request fails. The turn then settles on the same stream as `turn.cancelled` followed by `session.waiting`, so the session is safe to continue.
|
|
204
214
|
|
|
@@ -216,18 +226,14 @@ received attachment as a `file` part on the user message. The part includes `med
|
|
|
216
226
|
|
|
217
227
|
## Human-in-the-loop prompts
|
|
218
228
|
|
|
219
|
-
Tools opt into approval with `approval`, and workflow tools such as the opt-in `ask_question` tool ask the user a question with `ctx.ask()` — see [Human-in-the-loop](/docs/human-in-the-loop) for the server-side model. Either way the stream emits an `input.requested` event
|
|
229
|
+
Tools opt into approval with `approval`, and workflow tools such as the opt-in `ask_question` tool ask the user a question with `ctx.ask()` — see [Human-in-the-loop](/docs/human-in-the-loop) for the server-side model. Either way the stream emits an `input.requested` event. The default projection keeps open requests in `data.inputs`, including a request that sits on an earlier message than the latest one. Render from that ledger and answer through the same session with `respond()`. The request also appears on its originating `dynamic-tool` part at `part.toolMetadata?.eve?.inputRequest` for inline display:
|
|
220
230
|
|
|
221
231
|
```tsx
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
if (part.type !== "dynamic-tool" || part.state !== "approval-requested") return [];
|
|
226
|
-
const request = part.toolMetadata?.eve?.inputRequest;
|
|
227
|
-
return request ? [request] : [];
|
|
228
|
-
});
|
|
232
|
+
import { openConversationInputs } from "eve/react";
|
|
233
|
+
|
|
234
|
+
const pendingRequests = openConversationInputs(agent.data).map((input) => input.request);
|
|
229
235
|
|
|
230
|
-
const inputDisabled =
|
|
236
|
+
const inputDisabled = agent.status === "resuming";
|
|
231
237
|
|
|
232
238
|
return pendingRequests.map((request) => (
|
|
233
239
|
<fieldset disabled={inputDisabled} key={request.requestId}>
|
|
@@ -252,11 +258,11 @@ return pendingRequests.map((request) => (
|
|
|
252
258
|
));
|
|
253
259
|
```
|
|
254
260
|
|
|
255
|
-
For a question with `allowFreeform`, render a text input and send `{ requestId, text }`.
|
|
261
|
+
For a question with `allowFreeform`, render a text input and send `{ requestId, text }`. You can answer while other work runs. For example, when one model step asks to approve two tools, the first approval settles on its own and the second stays answerable while the batch waits for it. `respond()` marks each answered request `responded` in `data.inputs` until the server settles it through `approval.settled` or `input.resolved`, so `openConversationInputs()` no longer returns it. Answering a request that is no longer open rejects without contacting the server. A refused approval attempt, or a response that never reaches the server, reopens the request. Approved tools update again when eve streams their result.
|
|
256
262
|
|
|
257
263
|
## Authorization prompts
|
|
258
264
|
|
|
259
|
-
Connections and tools that need OAuth or another grant emit `authorization.required`. The default reducer projects that into an `authorization` message part with the display name, instructions, device code, and user-facing sign-in URL.
|
|
265
|
+
Connections and tools that need OAuth or another grant emit `authorization.required`. The default reducer projects that into an `authorization` message part with the display name, instructions, device code, and user-facing sign-in URL. When multiple people authorize the same connection in one session, the client matches completion to the corresponding `attemptId`, not merely the connection name. The part stays `required` until eve reports the outcome, then becomes `completed`. `awaitsCallback` is `true` when the sign-in's callback settles the attempt and resumes the parked turn. Render the part as a normal chat message and keep the session cursor so eve can resume the parked turn:
|
|
260
266
|
|
|
261
267
|
```tsx
|
|
262
268
|
import type { EveMessagePart } from "eve/react";
|
|
@@ -284,7 +290,7 @@ function AuthorizationPrompt({ part }: { part: EveMessagePart }) {
|
|
|
284
290
|
}
|
|
285
291
|
```
|
|
286
292
|
|
|
287
|
-
|
|
293
|
+
With a custom reducer, authorization attempts remain available in `conversation.messages`; `authorization.required` and `authorization.completed` are also available on `events` and `onEvent`.
|
|
288
294
|
|
|
289
295
|
## Attach page context per turn
|
|
290
296
|
|
|
@@ -324,11 +330,11 @@ const agent = useEveAgent({
|
|
|
324
330
|
});
|
|
325
331
|
```
|
|
326
332
|
|
|
327
|
-
The `optimistic` option (default `true`) projects submitted user messages into `data` before eve confirms them with a `message.received` event. These are reducer-facing projection events only. `events` stays the authoritative eve stream. For an existing session, the hook reconciles each placeholder with the server's delivery ID, so an unrelated or identical message cannot consume it.
|
|
333
|
+
The `optimistic` option (default `true`) projects submitted user messages into `data` before eve confirms them with a `message.received` event. Steered follow-ups appear before the active turn's assistant response once the turn is known; if the send fails, the failed placeholder stays in place. These are reducer-facing projection events only. `events` stays the authoritative eve stream. For an existing session, the hook reconciles each placeholder with the server's delivery ID, so an unrelated or identical message cannot consume it.
|
|
328
334
|
|
|
329
335
|
## Custom reducer
|
|
330
336
|
|
|
331
|
-
The default
|
|
337
|
+
The default hook uses `conversationReducer`, which includes the `EveMessageData` message fields plus turn and input state (`ConversationState`). When you want `data` shaped differently, pass a `reducer` implementing `EveAgentReducer<TData>`:
|
|
332
338
|
|
|
333
339
|
```tsx
|
|
334
340
|
import { useEveAgent } from "eve/react";
|
|
@@ -345,10 +351,10 @@ const toolCounter: EveAgentReducer<ToolLog> = {
|
|
|
345
351
|
};
|
|
346
352
|
|
|
347
353
|
const agent = useEveAgent({ reducer: toolCounter });
|
|
348
|
-
// agent.data is ToolLog
|
|
354
|
+
// agent.data is ToolLog; agent.conversation remains ConversationState.
|
|
349
355
|
```
|
|
350
356
|
|
|
351
|
-
`reduce(data, event)` receives
|
|
357
|
+
`reduce(data, event)` receives authoritative eve stream events and client projection events (`client.message.submitted`, `client.message.failed`, `client.input.responded`). The custom reducer only shapes `data`: the client maintains `conversation` separately for authorization, input requests, turns, and child following. Agent-session observations update `conversation.agents`, not the custom reducer. The built-in reducer makes `data` and `conversation` the same state. `client.input.responded` tells a custom reducer an answer was submitted, not that the server accepted it; the durable `input.resolved` event confirms settlement. Return `data` unchanged for events your reducer does not handle.
|
|
352
358
|
|
|
353
359
|
## Resumable sessions
|
|
354
360
|
|
|
@@ -62,21 +62,15 @@ Call `agent.send(text)` for text or pass content parts for attachments. The API
|
|
|
62
62
|
|
|
63
63
|
## Human-in-the-loop prompts
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
Open requests appear in the `agent.data.inputs` ledger. Read them with `openConversationInputs()`, then answer through `agent.respond()`. An answered request leaves the list right away, so its buttons can't be pressed twice:
|
|
66
66
|
|
|
67
67
|
```svelte
|
|
68
68
|
<script lang="ts">
|
|
69
|
-
import { useEveAgent } from "eve/svelte";
|
|
69
|
+
import { openConversationInputs, useEveAgent } from "eve/svelte";
|
|
70
70
|
|
|
71
71
|
const agent = useEveAgent();
|
|
72
72
|
const pendingRequests = $derived(
|
|
73
|
-
agent.data.
|
|
74
|
-
message.parts.flatMap((part) => {
|
|
75
|
-
if (part.type !== "dynamic-tool" || part.state !== "approval-requested") return [];
|
|
76
|
-
const request = part.toolMetadata?.eve?.inputRequest;
|
|
77
|
-
return request ? [request] : [];
|
|
78
|
-
}),
|
|
79
|
-
),
|
|
73
|
+
openConversationInputs(agent.data).map((input) => input.request),
|
|
80
74
|
);
|
|
81
75
|
</script>
|
|
82
76
|
|
|
@@ -128,7 +122,7 @@ Pass `onEvent`, `onError`, `onFinish`, or `onSessionChange` when the application
|
|
|
128
122
|
|
|
129
123
|
## Custom reducer
|
|
130
124
|
|
|
131
|
-
Import `EveAgentReducer` from `eve/svelte` when projecting events into application-specific state. The resulting `agent.data` uses the reducer's `TData` type. See [Custom reducer](./overview#custom-reducer) for the reducer contract and client projection events.
|
|
125
|
+
Import `EveAgentReducer` from `eve/svelte` when projecting events into application-specific state. The resulting `agent.data` uses the reducer's `TData` type; `agent.conversation` remains `ConversationState`. See [Custom reducer](./overview#custom-reducer) for the reducer contract and client projection events.
|
|
132
126
|
|
|
133
127
|
## What to read next
|
|
134
128
|
|
|
@@ -61,23 +61,17 @@ Call `send(text)` for text or pass content parts for attachments. The API and tr
|
|
|
61
61
|
|
|
62
62
|
## Human-in-the-loop prompts
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
Open requests appear in the `data.value.inputs` ledger. Read them with `openConversationInputs()`, then answer through `respond()`. An answered request leaves the list right away, so its buttons can't be pressed twice:
|
|
65
65
|
|
|
66
66
|
```vue
|
|
67
67
|
<script setup lang="ts">
|
|
68
68
|
import { computed } from "vue";
|
|
69
|
-
import { useEveAgent } from "eve/vue";
|
|
69
|
+
import { openConversationInputs, useEveAgent } from "eve/vue";
|
|
70
70
|
|
|
71
71
|
const { data, respond } = useEveAgent();
|
|
72
72
|
|
|
73
73
|
const pendingRequests = computed(() =>
|
|
74
|
-
data.value.
|
|
75
|
-
message.parts.flatMap((part) => {
|
|
76
|
-
if (part.type !== "dynamic-tool" || part.state !== "approval-requested") return [];
|
|
77
|
-
const request = part.toolMetadata?.eve?.inputRequest;
|
|
78
|
-
return request ? [request] : [];
|
|
79
|
-
}),
|
|
80
|
-
),
|
|
74
|
+
openConversationInputs(data.value).map((input) => input.request),
|
|
81
75
|
);
|
|
82
76
|
</script>
|
|
83
77
|
|
|
@@ -130,7 +124,7 @@ Pass `onEvent`, `onError`, `onFinish`, or `onSessionChange` when the application
|
|
|
130
124
|
|
|
131
125
|
## Custom reducer
|
|
132
126
|
|
|
133
|
-
Import `EveAgentReducer` from `eve/vue` when projecting events into application-specific state. The resulting `data` remains a `ComputedRef<TData
|
|
127
|
+
Import `EveAgentReducer` from `eve/vue` when projecting events into application-specific state. The resulting `data` remains a `ComputedRef<TData>`; `conversation` remains a `ComputedRef<ConversationState>` regardless of your reducer. See [Custom reducer](./overview#custom-reducer) for the reducer contract and client projection events.
|
|
134
128
|
|
|
135
129
|
## What to read next
|
|
136
130
|
|
|
@@ -139,12 +139,30 @@ invoke_agent <agent>
|
|
|
139
139
|
└── execute_tool <tool>
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
-
Each turn starts a new trace.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
142
|
+
Each root agent turn starts a new trace. If eve receives a local caller's trace
|
|
143
|
+
context, the first local subagent turn uses that trace. Its span is a
|
|
144
|
+
child of the dispatch span and has a different span ID. Without caller trace
|
|
145
|
+
context, the first subagent turn starts a new trace. Later turns in the child
|
|
146
|
+
session start new traces. They do not use the original dispatch span as their
|
|
147
|
+
parent.
|
|
148
|
+
|
|
149
|
+
A remote child starts a separate trace with a root `invoke_agent` span. Its first
|
|
150
|
+
turn links to the caller with `eve.link.type=agent.dispatch`. The receiving
|
|
151
|
+
deployment applies its sampler. Queries for local dispatches must use
|
|
152
|
+
`parentSpanId` or `agent.parent_run.id` and `agent.parent_call.id` instead of a
|
|
153
|
+
dispatch link.
|
|
154
|
+
|
|
155
|
+
Use `gen_ai.conversation.id` to find the root session and its child sessions
|
|
156
|
+
across traces. eve adds this ID to spans created during model, tool, and memory
|
|
157
|
+
execution. This includes spans from third-party instrumentation. `agent.run.id`
|
|
158
|
+
identifies one agent session, not the full conversation.
|
|
159
|
+
|
|
160
|
+
The shared conversation ID does not give access to message history, agent state,
|
|
161
|
+
or credentials. It does not give authorization or require the same worker for
|
|
162
|
+
each turn. Remote requests carry the conversation ID in W3C Baggage.
|
|
163
|
+
`trustedForwarders` controls whether the receiver accepts parent session data
|
|
164
|
+
and the trace-content policy. See
|
|
165
|
+
[Remote agents](../guides/remote-agents#preserving-trace-content).
|
|
148
166
|
|
|
149
167
|
## Local traces
|
|
150
168
|
|
|
@@ -59,9 +59,16 @@ remain lazy and resolve before each outbound request without entering durable
|
|
|
59
59
|
workflow state.
|
|
60
60
|
|
|
61
61
|
Author `auth` and `headers` directly in the `defineRemoteAgent({ ... })` object
|
|
62
|
-
and keep their functions self-contained with module imports
|
|
63
|
-
variables. They are rehydrated outside the event
|
|
64
|
-
over `_event`, `ctx`, or handler-local values.
|
|
62
|
+
and keep their functions self-contained with module imports, module-level
|
|
63
|
+
constants, or environment variables. They are rehydrated outside the event
|
|
64
|
+
handler, so they cannot close over `_event`, `ctx`, or handler-local values. The
|
|
65
|
+
build fails with an error that names the handler-local value when they do.
|
|
66
|
+
|
|
67
|
+
eve compiles only `auth` and `headers` written directly in the
|
|
68
|
+
`defineRemoteAgent({ ... })` object in the subagent file. When they arrive
|
|
69
|
+
through a spread, a variable passed as the argument, or a definition built in
|
|
70
|
+
another module, eve rejects the definition at runtime, logs the error, and runs
|
|
71
|
+
the agent without that subagent.
|
|
65
72
|
|
|
66
73
|
## Runtime URLs
|
|
67
74
|
|
|
@@ -141,16 +148,27 @@ Forwarding identity is explicit on both sides. The receiver names which deployme
|
|
|
141
148
|
|
|
142
149
|
## Trace propagation
|
|
143
150
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
151
|
+
A remote child starts its own trace with a root `invoke_agent` span. When caller
|
|
152
|
+
trace context is available, the first turn links to the dispatch span with
|
|
153
|
+
`eve.link.type=agent.dispatch`. The receiving deployment applies its sampler.
|
|
154
|
+
Later turns start new traces without the original dispatch link. The first turn
|
|
155
|
+
of a local child can use the remote agent's trace as a nested span.
|
|
156
|
+
|
|
157
|
+
Use `gen_ai.conversation.id` to find all turns and child sessions for one
|
|
158
|
+
conversation. The child has its own session ID, message history, and agent
|
|
159
|
+
state. Trace context identifies related work. It does not give authorization.
|
|
160
|
+
See [OpenTelemetry](../observability/otel#trace-topology) for the trace structure.
|
|
149
161
|
|
|
150
162
|
eve carries parent session lineage separately. The receiver accepts it only
|
|
151
163
|
when `trustedForwarders` approves the authenticated caller; otherwise, trace
|
|
152
164
|
correlation continues without it.
|
|
153
165
|
|
|
166
|
+
On Vercel, a remote agent's spans and its local subagents' spans carry the
|
|
167
|
+
remote session's ID as `vercel.session_id`, so the receiving project groups
|
|
168
|
+
them as their own session. `gen_ai.conversation.id` still names the sender's
|
|
169
|
+
conversation, and the remote agent's `agent.parent_run.id` names the calling
|
|
170
|
+
session.
|
|
171
|
+
|
|
154
172
|
## Preserving trace content
|
|
155
173
|
|
|
156
174
|
With `forwardPrincipal: true`, a sampled remote dispatch forwards its original
|
package/docs/reference/cli.md
CHANGED
|
@@ -276,7 +276,7 @@ Starts a local development server and terminal UI. To connect the UI to an exist
|
|
|
276
276
|
| `--connection-auth <mode>` | enum | `full` | Connection-authorization rendering |
|
|
277
277
|
| `--assistant-response-stats <mode>` | enum | `tokensPerSecond` | Assistant header statistic |
|
|
278
278
|
| `--context-size <tokens>` | number | none | Model context window size |
|
|
279
|
-
| `--logs <mode>` | enum | `
|
|
279
|
+
| `--logs <mode>` | enum | `error` | Display `none`, `error`, `warn`, `debug`, or `all` logs |
|
|
280
280
|
|
|
281
281
|
Local development mounts bundled development extensions without adding files to your project. Pass `--no-default-extensions` to disable them. See [Self-Modification](../guides/self-modification) for details.
|
|
282
282
|
|
|
@@ -391,13 +391,13 @@ Reads the immutable OTLP/JSON segments under `.eve/traces/v1`, so `eve dev` need
|
|
|
391
391
|
|
|
392
392
|
Span rows carry inline metrics when the span recorded them — `↑input`/`↓output` token counts, gateway cost, and the tool name for `execute_tool` spans. The header lists models across the trace, sums token usage and cost from step spans, and counts all error-bearing spans. `--verbose` expands each span under its tree row: status (with the error message on failures), timing, ids, every attribute (prompts, responses, and tool payloads as transcripts or pretty-printed JSON), and every span event with its offset from span start. `--json` prints the same records as JSON, one object per selected trace.
|
|
393
393
|
|
|
394
|
-
|
|
394
|
+
With local caller trace context, the first local subagent turn uses the caller's trace. Its span is a child of the dispatch span. A remote child starts a separate root trace and links its first turn to the dispatch with `eve.link.type=agent.dispatch`. Remote requests use W3C `tracestate` to identify that dispatch span if platform HTTP handling changes `traceparent`. Later child turns start new traces. All related sessions have the same `gen_ai.conversation.id`. `agent.subagent.name` identifies the subagent.
|
|
395
395
|
|
|
396
|
-
Each workflow tool call has
|
|
396
|
+
Each workflow tool call has an `agent.action` span and an `execute_tool <tool>` span. The first turn of each local session it opens with `ctx.agent` is a child of the call's `agent.action` span. A remote session links to that action from its own trace. An individual `ctx.agent` call does not create a separate dispatch span. Only agent execution uses `invoke_agent`.
|
|
397
397
|
|
|
398
398
|
Outbound MCP `tools/call` requests add MCP semantic attributes to the matching `execute_tool` span. When eve has no tool span to enrich, it creates a `CLIENT` `tools/call <tool>` span. Each `tools/list` discovery also has a `CLIENT` span. Configured OpenTelemetry propagation fields are injected into MCP `params._meta` for JSON-RPC bodies up to 1 MiB and propagation metadata up to 8 KiB; larger requests are sent unchanged. eve removes its audience and session-lineage baggage before forwarding, and keeps the input/output content-capture policy local.
|
|
399
399
|
|
|
400
|
-
|
|
400
|
+
Each root agent turn starts a new trace. With local caller trace context, that trace includes the first turn of each local subagent it starts. Remote child turns and later local child turns start separate traces. If a worker is replaced, the new worker uses the prepared trace context for the same turn. Supply the conversation ID to show all related traces, oldest first.
|
|
401
401
|
|
|
402
402
|
Every span carries a real duration. A turn's root `invoke_agent` span is written when the turn settles, so a running turn shows only its steps.
|
|
403
403
|
|
|
@@ -9,7 +9,7 @@ Human-in-the-loop (HITL) is any point where the agent durably pauses and waits f
|
|
|
9
9
|
- **Approvals** — a tool policy allows, denies, or pauses a call for a person to review. The agent decides to call the tool; the policy decides whether it runs automatically or needs a human decision.
|
|
10
10
|
- **Questions** — the agent itself asks the user a clarifying question or a choice mid-turn, and parks until they answer.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Both keep the turn open, and the stream reports `turn.waiting`. The run waits durably, for as long as it takes — seconds or days — and picks back up exactly where it left off once the answer arrives. Channels render the request for you.
|
|
13
13
|
|
|
14
14
|
## Approvals
|
|
15
15
|
|
|
@@ -212,7 +212,7 @@ Approvals and questions share one protocol:
|
|
|
212
212
|
|
|
213
213
|
1. A tool call needs approval, or a workflow tool such as `ask_question` calls `ctx.ask()`.
|
|
214
214
|
2. eve emits an `input.requested` stream event carrying the pending requests.
|
|
215
|
-
3. The run parks durably, for as long as it takes.
|
|
215
|
+
3. The run parks durably, for as long as it takes. The turn stays open: the stream emits `turn.waiting`, and after the answer the turn resumes under the same `turnId`. That `turn.waiting` carries `on: "input"`, since a person must act.
|
|
216
216
|
4. The client answers with `inputResponses` (structured, keyed by `requestId`) or a normal follow-up `message`. A follow-up whose text matches an option ID, option label, or numeric option index resolves automatically, including approval options such as `approve` and `cancel`.
|
|
217
217
|
|
|
218
218
|
For `ctx.ask()` questions from tools, a follow-up message answers the question only when exactly one question is pending. The message must match an option, or the question must allow free text. Otherwise the message follows the session's `turnPolicy`. A steering message, the default, aborts the `ctx.abortSignal` of each `execute` workflow tool call the turn waits on, so a question such a call asked, such as `ask_question`'s, is withdrawn and resolves as `cancelled`. The model reads the message once those calls settle. Questions from subagents need a structured response.
|
|
@@ -226,7 +226,7 @@ The run picks back up exactly where it parked. Because the pause is durable, not
|
|
|
226
226
|
|
|
227
227
|
When a subagent requests input, eve emits the same `input.requested` event on its parent session. Answering through that parent session routes the response directly to the blocked child without invoking the parent model.
|
|
228
228
|
|
|
229
|
-
For approval requests,
|
|
229
|
+
For approval requests, a follow-up message that doesn't match an option steers the turn instead of answering it. eve cancels the turn's pending approval, so the call doesn't run and `input.resolved` reports `outcome: "ignored"`, and the model reads the message next. This happens even when the message is sent with `turnPolicy: "queue"`, because a turn held on a person can't end until they act. Calls the person already approved in the same batch still run. A message from someone other than the person the turn serves waits until the turn ends. Cancelling the turn withdraws its approval: the call doesn't run, `input.resolved` reports `outcome: "cancelled"`, and a later answer to it approves nothing.
|
|
230
230
|
|
|
231
231
|
See [Sessions, runs & streaming](/docs/concepts/sessions-runs-and-streaming) for the full event and resume contract that this builds on.
|
|
232
232
|
|
|
@@ -236,7 +236,7 @@ Channels turn requests into native UI: the Slack adapter renders approvals as bu
|
|
|
236
236
|
|
|
237
237
|
From your own frontend, scan all messages for pending requests and answer through the same session — see [Building a frontend](/docs/guides/frontend/overview#human-in-the-loop-prompts) for the client-side reducer and `inputResponses` shape.
|
|
238
238
|
|
|
239
|
-
The default message reducer waits for server confirmation before marking any input request answered.
|
|
239
|
+
You can answer while a turn is running, such as the second approval of a batch while the first answer is still settling. The default message reducer waits for server confirmation before marking any input request answered. A submitted answer marks its request `responded` in `data.inputs` until `approval.settled` or `input.resolved` arrives; submitting a response alone does not resolve an approval, question, or session-limit prompt. Answering a request that is no longer open rejects without a server request. The `client.input.responded` event remains a submission notification for custom reducers, not confirmation that the server accepted the answer.
|
|
240
240
|
|
|
241
241
|
## What to read next
|
|
242
242
|
|
package/docs/tools/overview.mdx
CHANGED
|
@@ -126,7 +126,7 @@ export default defineTool({
|
|
|
126
126
|
});
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
The label is presentation only. It does not replace the path-derived tool name, enter model input, or change execution. eve records the bounded label on the corresponding public action event so activity renderers and other authorized stream consumers can use it without interpreting raw tool data. Built-in channel activity can show `Deploy storefront to production` instead of `
|
|
129
|
+
The label is presentation only. It does not replace the path-derived tool name, enter model input, or change execution. eve records the bounded label on the corresponding public action event so activity renderers and other authorized stream consumers can use it without interpreting raw tool data. Built-in channel activity can show `Deploy storefront to production` instead of `Deploy`; if the callback throws or returns an empty label, activity falls back to a readable form of the tool name, such as `Sync accounts` for `sync_accounts`.
|
|
130
130
|
|
|
131
131
|
Provided tools define labels for `bash`, `glob`, `grep`, `load_skill`, `read_file`, `web_fetch`, `web_search`, and `write_file`.
|
|
132
132
|
|
package/docs/tools/tasks.md
CHANGED
|
@@ -233,8 +233,8 @@ continues once the person answers or signs in.
|
|
|
233
233
|
In every session, `turn.completed` comes only when the turn really ends. The TypeScript client's
|
|
234
234
|
`send(...).result()` and the MCP channel's `agent_get` read past `turn.waiting` and report the
|
|
235
235
|
final reply rather than the text written before the wait. `result()` stops at `turn.waiting` only
|
|
236
|
-
while a question is pending
|
|
237
|
-
same turn to its end. See [Aggregate a turn](/docs/guides/client/streaming#aggregate-a-turn).
|
|
236
|
+
while a question is pending or the turn waits on a sign-in or approval, and returns
|
|
237
|
+
`status: "waiting"`; `respond()` then reads the same turn to its end. See [Aggregate a turn](/docs/guides/client/streaming#aggregate-a-turn).
|
|
238
238
|
Channels such as [Slack](/docs/channels/slack) post a root session's text before the wait as an
|
|
239
239
|
ordinary reply, then post the reply after the results as another message. Slack also shows each
|
|
240
240
|
turn's tasks in a live [task card](/docs/channels/slack#task-card).
|
|
@@ -263,12 +263,12 @@ same `taskId` continues where it left off. A `serve` body that doesn't return to
|
|
|
263
263
|
|
|
264
264
|
## Stream events
|
|
265
265
|
|
|
266
|
-
| Event | When
|
|
267
|
-
| --------------- |
|
|
268
|
-
| `task.started` | A call starts a task, or reaches a resumable task by its `taskId`
|
|
269
|
-
| `task.settled` | A reply, return, failure, or cancel settles one call
|
|
270
|
-
| `agent.started` | A workflow run, including an agent tool's, opens a session with an agent
|
|
271
|
-
| `turn.waiting` | An open turn parks on its tasks, a `task_wait`, a question,
|
|
266
|
+
| Event | When | Data |
|
|
267
|
+
| --------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
|
|
268
|
+
| `task.started` | A call starts a task, or reaches a resumable task by its `taskId` | `taskId`, `callId`, `turnId`, the tool `name`, and `kind` |
|
|
269
|
+
| `task.settled` | A reply, return, failure, or cancel settles one call | `taskId`, `callId`, `turnId`, `name`, `kind`, `status`, and `output`, `error`, or `cancel` |
|
|
270
|
+
| `agent.started` | A workflow run, including an agent tool's, opens a session with an agent | `callId`, `turnId`, `taskId`, `name`, `sessionId`, `streamPath` |
|
|
271
|
+
| `turn.waiting` | An open turn parks on its tasks, a `task_wait`, a question, a sign-in, or an approval | `turnId`, `sequence`, and `on`: `"input"` when a person must act, otherwise `"tasks"` |
|
|
272
272
|
|
|
273
273
|
`task.started` and `task.settled` come once each per call, and `(taskId, callId)` identifies the
|
|
274
274
|
call. Both carry that call's `turnId`, which for a resumable task's later call can be a later turn
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eve",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.70.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Filesystem-first framework for durable backend AI agents that run anywhere.",
|
|
6
6
|
"keywords": [
|
|
@@ -561,8 +561,8 @@
|
|
|
561
561
|
"emulate": "0.6.0",
|
|
562
562
|
"env-runner": "0.1.16",
|
|
563
563
|
"eventsource-parser": "3.1.0",
|
|
564
|
-
"gray-matter": "4.0.3",
|
|
565
564
|
"jose": "6.2.3",
|
|
565
|
+
"js-yaml": "4.3.2",
|
|
566
566
|
"jsonc-parser": "3.3.1",
|
|
567
567
|
"just-bash": "3.1.0",
|
|
568
568
|
"just-secrets": "0.0.2",
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type MessageStreamEvent } from "#protocol/message.js";
|
|
2
|
-
/**
|
|
3
|
-
* Follows accepted messages through their boundary, including a send racing
|
|
4
|
-
* settlement. Delivery responses may overlap; stream event IDs deduplicate them.
|
|
5
|
-
*/
|
|
6
|
-
export declare class SteeringStream implements AsyncIterable<MessageStreamEvent> {
|
|
7
|
-
private readonly session;
|
|
8
|
-
private readonly streams;
|
|
9
|
-
private closed;
|
|
10
|
-
private readonly controller;
|
|
11
|
-
constructor(initial: AsyncIterable<MessageStreamEvent>, session: SteeringStream["session"]);
|
|
12
|
-
send(message: string): Promise<void>;
|
|
13
|
-
abort(): void;
|
|
14
|
-
[Symbol.asyncIterator](): AsyncGenerator<MessageStreamEvent>;
|
|
15
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{createEventDeduper}from"#protocol/event-dedupe.js";import{isCurrentTurnBoundaryEvent}from"#protocol/message.js";var SteeringStream=class{session;streams;closed=!1;controller=new AbortController;constructor(e,t){this.session=t,this.streams=[Promise.resolve(e)]}async send(e){if(this.closed)throw Error(`The active stream ended before steering was sent.`);let t=this.session.send(e,{turnPolicy:`steer`,signal:this.controller.signal});this.streams.push(t.then(e=>e,()=>void 0)),await t}abort(){this.closed=!0,this.controller.abort()}async*[Symbol.asyncIterator](){let e=createEventDeduper(),t;try{for(;this.streams.length>0;){let n=await this.streams.shift();if(n!==void 0){for await(let r of n)if(e.admit(r)){if(isCurrentTurnBoundaryEvent(r)){t=r;break}yield r}}}t!==void 0&&(yield t)}finally{this.abort()}}};export{SteeringStream};
|