eve 0.76.0 → 0.76.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/src/channel/channel-address.d.ts +3 -1
  3. package/dist/src/channel/channel-address.js +1 -1
  4. package/dist/src/channel/session-stranded-error.d.ts +25 -0
  5. package/dist/src/channel/session-stranded-error.js +1 -0
  6. package/dist/src/channel/session.d.ts +13 -6
  7. package/dist/src/channel/types.d.ts +29 -1
  8. package/dist/src/chunks/{use-eve-agent-QmriPA-w.js → use-eve-agent-BtKWTEpm.js} +31 -14
  9. package/dist/src/chunks/{use-eve-agent-D2V9UhLt.js → use-eve-agent-jI6EsYAu.js} +31 -14
  10. package/dist/src/cli/commands/registry-project.d.ts +10 -3
  11. package/dist/src/cli/commands/registry-project.js +2 -2
  12. package/dist/src/cli/commands/registry.js +1 -1
  13. package/dist/src/cli/dev/tui/runner.js +3 -3
  14. package/dist/src/cli/dev/tui/stranded-session.d.ts +9 -0
  15. package/dist/src/cli/dev/tui/stranded-session.js +1 -0
  16. package/dist/src/client/client-error.d.ts +16 -0
  17. package/dist/src/client/client-error.js +1 -1
  18. package/dist/src/client/client.js +1 -1
  19. package/dist/src/client/index.d.ts +3 -2
  20. package/dist/src/client/index.js +1 -1
  21. package/dist/src/client/open-stream.d.ts +5 -3
  22. package/dist/src/client/open-stream.js +1 -1
  23. package/dist/src/client/session-controls.js +1 -1
  24. package/dist/src/client/session.js +1 -1
  25. package/dist/src/client/transcript-reducer.d.ts +46 -0
  26. package/dist/src/client/transcript-reducer.js +2 -0
  27. package/dist/src/compiled/.vendor-stamp.json +1 -1
  28. package/dist/src/compiler/extension-compatibility.d.ts +20 -20
  29. package/dist/src/compiler/extension-compatibility.js +1 -1
  30. package/dist/src/compiler/manifest.js +1 -1
  31. package/dist/src/compiler/normalize-agent-config.js +1 -1
  32. package/dist/src/context/accessors.d.ts +1 -1
  33. package/dist/src/context/build-callback-context.js +1 -1
  34. package/dist/src/context/dynamic-resolve-context.js +1 -1
  35. package/dist/src/context/keys.d.ts +5 -0
  36. package/dist/src/context/keys.js +1 -1
  37. package/dist/src/context/providers/session.d.ts +1 -0
  38. package/dist/src/context/providers/session.js +1 -1
  39. package/dist/src/context/session-context.d.ts +8 -2
  40. package/dist/src/dynamic/definition.d.ts +7 -1
  41. package/dist/src/evals/types.d.ts +2 -1
  42. package/dist/src/eve-channel/index.js +1 -1
  43. package/dist/src/eve-channel/request.js +2 -2
  44. package/dist/src/eve-channel/support.d.ts +2 -0
  45. package/dist/src/eve-channel/support.js +1 -1
  46. package/dist/src/execution/agent-sessions/steps.js +1 -1
  47. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  48. package/dist/src/execution/eve-workflow-attributes.d.ts +15 -0
  49. package/dist/src/execution/eve-workflow-attributes.js +1 -1
  50. package/dist/src/execution/install-workflow-world.d.ts +7 -0
  51. package/dist/src/execution/install-workflow-world.js +1 -0
  52. package/dist/src/execution/legacy-session/authorization.js +1 -1
  53. package/dist/src/execution/legacy-session/inbox.js +1 -1
  54. package/dist/src/execution/legacy-session/turn-workflow.js +1 -1
  55. package/dist/src/execution/session/entry.js +1 -1
  56. package/dist/src/execution/session/handoff-steps.d.ts +11 -0
  57. package/dist/src/execution/session/handoff-steps.js +1 -1
  58. package/dist/src/execution/session/program.js +1 -1
  59. package/dist/src/execution/session/timeout-steps.js +1 -1
  60. package/dist/src/execution/session-event-stream.d.ts +6 -0
  61. package/dist/src/execution/session-event-stream.js +1 -1
  62. package/dist/src/execution/session-inbox/address.d.ts +4 -0
  63. package/dist/src/execution/session-inbox/address.js +1 -1
  64. package/dist/src/execution/session-inbox/end-stranded-session.d.ts +22 -0
  65. package/dist/src/execution/session-inbox/end-stranded-session.js +1 -0
  66. package/dist/src/execution/session-inbox/hook-release.d.ts +4 -0
  67. package/dist/src/execution/session-inbox/hook-release.js +1 -0
  68. package/dist/src/execution/session-inbox/owner.d.ts +48 -0
  69. package/dist/src/execution/session-inbox/owner.js +1 -0
  70. package/dist/src/execution/session-inbox/resume.d.ts +12 -0
  71. package/dist/src/execution/session-inbox/resume.js +1 -1
  72. package/dist/src/execution/session-inbox/runnable-owner.d.ts +13 -0
  73. package/dist/src/execution/session-inbox/runnable-owner.js +1 -0
  74. package/dist/src/execution/session-inbox/stranded-replay-guard.d.ts +16 -0
  75. package/dist/src/execution/session-inbox/stranded-replay-guard.js +1 -0
  76. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  77. package/dist/src/execution/workflow-runtime.d.ts +5 -1
  78. package/dist/src/execution/workflow-runtime.js +1 -1
  79. package/dist/src/harness/compaction/step.js +1 -1
  80. package/dist/src/harness/input-request-resolution.js +1 -1
  81. package/dist/src/harness/model-call/call.d.ts +1 -1
  82. package/dist/src/harness/model-call/call.js +1 -1
  83. package/dist/src/harness/model-call/errors.d.ts +5 -6
  84. package/dist/src/harness/model-call/errors.js +1 -1
  85. package/dist/src/harness/model-call/recovery.d.ts +4 -3
  86. package/dist/src/harness/model-call/request.d.ts +2 -1
  87. package/dist/src/harness/model-call/request.js +1 -1
  88. package/dist/src/harness/model-call/tools.js +1 -1
  89. package/dist/src/harness/model-profile.d.ts +10 -3
  90. package/dist/src/harness/model-profile.js +1 -1
  91. package/dist/src/harness/prompt-cache.d.ts +6 -3
  92. package/dist/src/harness/prompt-cache.js +1 -1
  93. package/dist/src/harness/provider-safety.d.ts +2 -1
  94. package/dist/src/harness/provider-safety.js +1 -1
  95. package/dist/src/harness/provider-tools.d.ts +1 -1
  96. package/dist/src/harness/provider-tools.js +1 -1
  97. package/dist/src/harness/session-machine/transitions.d.ts +3 -1
  98. package/dist/src/harness/session-machine/transitions.js +1 -1
  99. package/dist/src/harness/step/context.js +1 -1
  100. package/dist/src/harness/step-hooks.js +1 -1
  101. package/dist/src/internal/application/compiled-artifacts.js +4 -4
  102. package/dist/src/internal/application/package.d.ts +1 -1
  103. package/dist/src/internal/application/package.js +1 -1
  104. package/dist/src/internal/application/stamped-package-version.d.ts +5 -0
  105. package/dist/src/internal/application/stamped-package-version.js +1 -0
  106. package/dist/src/internal/authored-definition/core.d.ts +3 -0
  107. package/dist/src/internal/authored-definition/core.js +1 -1
  108. package/dist/src/internal/model-auth/available-models.js +1 -1
  109. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  110. package/dist/src/internal/workflow/development-run-unavailable-error.d.ts +15 -0
  111. package/dist/src/internal/workflow/development-run-unavailable-error.js +1 -0
  112. package/dist/src/internal/workflow/development-world-server.js +1 -1
  113. package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
  114. package/dist/src/protocol/message.d.ts +14 -0
  115. package/dist/src/protocol/message.js +1 -1
  116. package/dist/src/public/channels/index.d.ts +1 -1
  117. package/dist/src/public/channels/index.js +1 -1
  118. package/dist/src/public/context/index.d.ts +1 -1
  119. package/dist/src/public/definitions/callback-context.d.ts +1 -1
  120. package/dist/src/public/definitions/channel.d.ts +1 -0
  121. package/dist/src/public/definitions/channel.js +1 -1
  122. package/dist/src/public/models/openai/chatgpt/model.js +1 -1
  123. package/dist/src/public/models/openai/chatgpt/transport.js +1 -1
  124. package/dist/src/public/tanstack/index.d.ts +40 -0
  125. package/dist/src/public/tanstack/index.js +1 -0
  126. package/dist/src/runtime/agent/resolve-model.js +1 -1
  127. package/dist/src/runtime/resolve-agent.js +1 -1
  128. package/dist/src/setup/flows/model-login.js +1 -1
  129. package/dist/src/setup/integrations/web/framework.d.ts +8 -0
  130. package/dist/src/setup/integrations/web/framework.js +1 -0
  131. package/dist/src/setup/integrations/web/hosting.d.ts +43 -0
  132. package/dist/src/setup/integrations/web/hosting.js +15 -0
  133. package/dist/src/setup/integrations/web/setup.d.ts +6 -10
  134. package/dist/src/setup/integrations/web/setup.js +23 -17
  135. package/dist/src/setup/scaffold/create/project.js +1 -1
  136. package/dist/src/setup/scaffold/create/web-template.d.ts +6 -2
  137. package/dist/src/setup/scaffold/create/web-template.js +39 -2
  138. package/dist/src/setup/scaffold/update/channels.js +1 -1
  139. package/dist/src/setup/vercel-project-framework.js +1 -1
  140. package/dist/src/shared/agent-definition.d.ts +25 -0
  141. package/dist/src/shared/agent-definition.js +1 -1
  142. package/dist/src/shared/chatgpt-model.d.ts +8 -0
  143. package/dist/src/shared/chatgpt-model.js +1 -1
  144. package/dist/src/subagents/callback-route.js +1 -1
  145. package/dist/src/svelte/index.js +1 -1
  146. package/dist/src/svelte/use-eve-agent.js +1 -1
  147. package/dist/src/tools/provided/ask-question-workflow.js +1 -1
  148. package/dist/src/tools/provided/sleep-workflow.js +1 -1
  149. package/dist/src/vue/index.js +1 -1
  150. package/dist/src/vue/use-eve-agent.js +1 -1
  151. package/docs/agent-config.md +32 -1
  152. package/docs/channels/custom.mdx +26 -0
  153. package/docs/channels/eve.mdx +8 -5
  154. package/docs/concepts/built-in-tools.md +17 -0
  155. package/docs/concepts/execution-model-and-durability.mdx +100 -0
  156. package/docs/concepts/project-structure.mdx +2 -2
  157. package/docs/concepts/sessions-runs-and-streaming.md +36 -34
  158. package/docs/guides/client/messages.mdx +10 -1
  159. package/docs/guides/deployment/overview.md +2 -2
  160. package/docs/guides/dev-tui.md +2 -0
  161. package/docs/guides/frontend/meta.json +9 -1
  162. package/docs/guides/frontend/nextjs.mdx +1 -1
  163. package/docs/guides/frontend/overview.mdx +9 -8
  164. package/docs/guides/frontend/tanstack.mdx +201 -0
  165. package/docs/guides/session-context.md +1 -0
  166. package/docs/install-integrations.mdx +1 -1
  167. package/docs/instructions.mdx +1 -1
  168. package/docs/reference/typescript-api.md +1 -1
  169. package/docs/tools/human-in-the-loop.md +2 -0
  170. package/docs/tutorial/ship-it.mdx +1 -1
  171. package/package.json +7 -1
@@ -0,0 +1,201 @@
1
+ ---
2
+ title: "TanStack Start"
3
+ description: "Run an eve agent and a TanStack Start app as one project with the eveTanStack Vite plugin."
4
+ ---
5
+
6
+ `eve/tanstack` runs a TanStack Start frontend and an eve agent as one project instead of two services. The `eveTanStack()` Vite plugin puts both on one dev server and one Vercel deploy, and [`useEveAgent`](./overview) from `eve/react` finds the mounted routes on its own. There's no CORS to configure and no URL env vars to keep in sync.
7
+
8
+ ## Prerequisites
9
+
10
+ - The `eve` package installed in your project (`npm install eve@latest`).
11
+ - An existing eve agent directory. If you don't have one, start from [Getting started](../../getting-started).
12
+ - A TanStack Start app using React, with the [Nitro Vite plugin](https://tanstack.com/start/latest/docs/framework/react/guide/hosting#nitro) (`nitro` installed and `nitro()` registered). TanStack Start deploys to Vercel through Nitro, and the plugin attaches eve to it.
13
+
14
+ ## Add the generated Web Chat app
15
+
16
+ Run the Web Chat installer and choose **TanStack Start** when it asks which framework to use:
17
+
18
+ ```bash
19
+ eve add channel/web
20
+ ```
21
+
22
+ In automation, answer the framework and hosting questions up front. Without a `web-framework` answer, non-interactive installs use Next.js:
23
+
24
+ ```bash
25
+ eve add channel/web --non-interactive \
26
+ --answer 'web-framework="tanstack"' \
27
+ --answer 'web-hosting="vercel"'
28
+ ```
29
+
30
+ The installer creates a TanStack Start app under `apps/web/` and adds the `dev:web` and `build:web` scripts. It asks how to deploy it:
31
+
32
+ - **Vercel services** (recommended) deploys Web Chat and the agent as separate services. Run both locally with `pnpm dev:all`; you don't need to link a Vercel project to do that.
33
+ - **TanStack Start** hosts the agent in the TanStack Start app through `eveTanStack()`. Run it with `pnpm dev:web`. The app lives in `apps/web/` while its dependencies are in the project root `package.json`, so a Vercel deploy from the project root doesn't build it. Choose **Vercel services** to deploy Web Chat on Vercel.
34
+
35
+ Rerun `eve add channel/web --skip-install` with the other choice to switch modes; the installer removes the `vercel.ts` and scripts it wrote for the previous one. When `apps/web/` already contains a Web Chat app, the installer keeps that app's framework and stops if you answer a different one. To switch between Next.js and TanStack Start, remove `apps/web/` first.
36
+
37
+ Sign in with Vercel setup is available only for the Next.js Web Chat app, so the TanStack Start installer doesn't ask about authentication.
38
+
39
+ The chat has the same URL-addressed durable sessions as the [Next.js Web Chat](./nextjs#use-the-generated-web-chat-routes): `/`, `/s`, and `/s/$sessionId`. Before accepting production browser traffic, replace the generated placeholder authorization policy. See [Authenticate browser requests](./overview#authenticate-browser-requests).
40
+
41
+ The installer doesn't support selecting a workspace agent for single-app hosting: a workspace agent always deploys as a separate Vercel service. If you already have a TanStack Start app, skip the installer and follow the steps below.
42
+
43
+ ## Register the Vite plugin
44
+
45
+ Add `eveTanStack()` to `vite.config.ts` next to `nitro()`:
46
+
47
+ ```ts title="vite.config.ts"
48
+ import { tanstackStart } from "@tanstack/react-start/plugin/vite";
49
+ import viteReact from "@vitejs/plugin-react";
50
+ import { eveTanStack } from "eve/tanstack";
51
+ import { nitro } from "nitro/vite";
52
+ import { defineConfig } from "vite";
53
+
54
+ export default defineConfig({
55
+ plugins: [eveTanStack(), tanstackStart(), viteReact(), nitro()],
56
+ });
57
+ ```
58
+
59
+ The plugin looks for an `agent/` folder in the TanStack Start project root. Pass `eveRoot` when the agent lives elsewhere:
60
+
61
+ ```ts
62
+ export default defineConfig({
63
+ plugins: [
64
+ eveTanStack({
65
+ eveRoot: "../my-agent",
66
+ }),
67
+ tanstackStart(),
68
+ viteReact(),
69
+ nitro(),
70
+ ],
71
+ });
72
+ ```
73
+
74
+ Without `nitro()` registered, Vite fails at startup with an error naming the missing plugin instead of serving a project whose eve routes would return 404.
75
+
76
+ ### `eveTanStack` options
77
+
78
+ All fields are optional.
79
+
80
+ | Option | Type | Default | Purpose |
81
+ | -------------------- | -------- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
82
+ | `eveRoot` | `string` | TanStack Start project root | eve project root, relative to the TanStack Start project root unless absolute. |
83
+ | `eveBuildCommand` | `string` | generated | Build command for the generated eve Vercel service. |
84
+ | `devServerTimeoutMs` | `number` | `180000` | Maximum time to wait for the eve development server to start, including when another TanStack Start process is starting it. |
85
+
86
+ For slow cold starts, increase the development timeout:
87
+
88
+ ```ts
89
+ export default defineConfig({
90
+ plugins: [
91
+ eveTanStack({
92
+ devServerTimeoutMs: 300_000,
93
+ }),
94
+ tanstackStart(),
95
+ viteReact(),
96
+ nitro(),
97
+ ],
98
+ });
99
+ ```
100
+
101
+ ## Call the hook
102
+
103
+ With the plugin in `vite.config.ts`, components call [`useEveAgent`](./overview) from `eve/react` and don't pass a host:
104
+
105
+ ```tsx title="src/routes/index.tsx"
106
+ import { createFileRoute } from "@tanstack/react-router";
107
+ import { useEveAgent } from "eve/react";
108
+ import { useState } from "react";
109
+
110
+ export const Route = createFileRoute("/")({
111
+ component: Chat,
112
+ });
113
+
114
+ function Chat() {
115
+ const agent = useEveAgent();
116
+ const [draft, setDraft] = useState("");
117
+ const isBusy = agent.status === "submitted" || agent.status === "streaming";
118
+ const isInputDisabled = isBusy || agent.status === "resuming";
119
+
120
+ return (
121
+ <form
122
+ onSubmit={(event) => {
123
+ event.preventDefault();
124
+ const text = draft.trim();
125
+ if (text.length === 0 || isInputDisabled) return;
126
+ setDraft("");
127
+ void agent.send(text);
128
+ }}
129
+ >
130
+ {agent.data.messages.map((message) => (
131
+ <article key={message.id}>
132
+ <header>{message.role}</header>
133
+ {message.parts.map((part, index) =>
134
+ part.type === "text" ? <p key={part.id ?? index}>{part.text}</p> : null,
135
+ )}
136
+ </article>
137
+ ))}
138
+ <input
139
+ disabled={isInputDisabled}
140
+ onChange={(event) => setDraft(event.currentTarget.value)}
141
+ value={draft}
142
+ />
143
+ <button disabled={isInputDisabled} type="submit">
144
+ Send
145
+ </button>
146
+ </form>
147
+ );
148
+ }
149
+ ```
150
+
151
+ The browser still needs a production authentication policy. See [Authenticate browser requests](./overview#authenticate-browser-requests) for the default fail-closed behavior and channel configuration.
152
+
153
+ eve ships hook bindings for React, Vue, and Svelte. A TanStack Start app that uses Solid can still mount the agent with this plugin and call it through the [Client SDK](../client/overview).
154
+
155
+ ## Dev vs deploy topology
156
+
157
+ - **Local dev.** `npm run dev` boots the eve dev server next to TanStack Start and Nitro proxies `/eve/v1/**` to it, so the browser only ever hits the TanStack Start origin. The plugin uses the server named by `EVE_BASE_URL` when that variable is set, then a healthy shared eve dev server already running for the app, and otherwise starts one. A server the plugin starts stops when the Vite dev server closes (Vite 8.3 or later; earlier versions stop it when the process exits). Any tool that loads `vite.config.ts` in serve mode starts or reuses this server, including test runners such as Vitest. Keep `eveTanStack()` out of a separate test config if you don't want that.
158
+ - **Vercel.** The TanStack Start app and the eve runtime deploy as a single project. On Vercel builds the plugin adds Build Output [`services`](https://vercel.com/docs/services) for eve and a `routes` entry that sends `/eve/v1/**` to that service before filesystem routing and before any routes you declare in `nitro({ vercel: { config } })`; the TanStack Start app remains the default app. No `vercel.json` is required. By default the generated service runs the installed eve binary from the TanStack Start app's dependencies, so the agent directory does not need its own `package.json`. When the agent needs its own build step, set `eveBuildCommand`:
159
+
160
+ ```ts
161
+ export default defineConfig({
162
+ plugins: [
163
+ eveTanStack({
164
+ eveBuildCommand: "npm run build:eve",
165
+ }),
166
+ tanstackStart(),
167
+ viteReact(),
168
+ nitro(),
169
+ ],
170
+ });
171
+ ```
172
+
173
+ - **Other hosts.** `vite preview` and a self-hosted `node .output/server/index.mjs` don't mount the eve routes. Run the eve service on its own origin and pass `host` directly to `useEveAgent`:
174
+
175
+ ```ts
176
+ const agent = useEveAgent({
177
+ host: "https://agent.example.com",
178
+ });
179
+ ```
180
+
181
+ `eve build` and `vite build` (with Nitro's default Node.js preset) both write `.output/`. When the agent lives in the TanStack Start project root, build and serve eve from a separate directory (set `eveRoot` to it) so the two outputs do not overwrite each other. See [Self-host eve](../deployment/self-hosting) for running the eve service.
182
+
183
+ ## Managing vercel.json yourself
184
+
185
+ When `vercel.json` declares [`services`](https://vercel.com/docs/services), the plugin generates nothing and your configuration owns routing. It must include the eve service (`framework: "eve"`) and a rewrite that exposes the eve transport, or the build fails:
186
+
187
+ ```json title="vercel.json"
188
+ {
189
+ "services": {
190
+ "web": { "root": ".", "framework": "tanstack-start" },
191
+ "eve": { "root": "agent", "framework": "eve", "buildCommand": "eve build" }
192
+ },
193
+ "rewrites": [{ "source": "/eve/v1/(.*)", "destination": { "service": "eve" } }]
194
+ }
195
+ ```
196
+
197
+ ## What to read next
198
+
199
+ - [Frontend overview](./overview): the `useEveAgent` API
200
+ - [Auth & route protection](../auth-and-route-protection)
201
+ - [Deployment](../deployment/overview)
@@ -46,6 +46,7 @@ Public fields include:
46
46
  - `auth.current`: the caller for the active inbound turn.
47
47
  - `auth.initiator`: the caller that started the session.
48
48
  - `parent`: the parent call, session, root session, and turn for a child subagent session.
49
+ - `predecessor`: present when eve started this session in place of a [stranded session](../concepts/execution-model-and-durability#stranded-sessions). Its `sessionId` names the session this one replaced. Read the earlier conversation with `sessions.attach(predecessor.sessionId)` from `eve/server`. See [What a replacement session receives](../concepts/execution-model-and-durability#what-a-replacement-session-receives).
49
50
 
50
51
  Unprotected agents expose `auth.current` and `auth.initiator` as `null`. Top-level schedule sessions use the framework app principal (`principalId: "eve:app"`, `principalType: "runtime"`). See [Authentication](./auth-and-route-protection#what-reaches-ctxsessionauth) for how inbound identity becomes session auth.
51
52
 
@@ -19,7 +19,7 @@ eve add memory/file
19
19
 
20
20
  If an item is not found, `eve add` searches the available catalogs and prints close matches without installing anything.
21
21
 
22
- Web Chat installs a shared Next.js application at `apps/web` for either a standalone agent or a selected member of an agent workspace. Choose **Vercel services** (recommended) to deploy Web Chat and agents as separate services, or **Next.js** to serve Web Chat and route agent requests through one Next.js app. Vercel services run locally without a linked Vercel project; link one when you are ready to deploy. Existing authored Next.js or Vercel configuration is preserved, and eve stops with manual composition guidance instead of overwriting it. See [Project Structure](./concepts/project-structure) for browser-app placement and [Next.js](./guides/frontend/nextjs) for Next.js-owned integration.
22
+ Web Chat installs a shared Next.js or TanStack Start application at `apps/web` for either a standalone agent or a selected member of an agent workspace. The installer asks which framework to use (`web-framework`), then how to deploy it; non-interactive runs use Next.js unless you answer `web-framework="tanstack"`. Choose **Vercel services** (recommended) to deploy Web Chat and agents as separate services, or the framework (**Next.js** or **TanStack Start**) to serve Web Chat and route agent requests through one app. Vercel services run locally without a linked Vercel project; link one when you are ready to deploy. Existing authored Next.js or Vercel configuration is preserved, and eve stops with manual composition guidance instead of overwriting it. See [Project Structure](./concepts/project-structure) for browser-app placement, and [Next.js](./guides/frontend/nextjs) or [TanStack Start](./guides/frontend/tanstack) for framework-owned integration.
23
23
 
24
24
  If you do not know an item name yet, run `eve add` without an argument. Its help output shows how to search the registry with `eve registry search <query>`.
25
25
 
@@ -80,7 +80,7 @@ A dynamic system result applies at its lifecycle scope. A dynamic user result is
80
80
 
81
81
  The `messages` snapshot passed to a `session.started` resolver includes static user instructions. A `turn.started` resolver additionally sees user instructions produced at `session.started`. Other dynamic capability resolvers keep their existing snapshots.
82
82
 
83
- See [Dynamic capabilities](./guides/dynamic-capabilities) for examples and failure behavior.
83
+ See [Dynamic capabilities](./guides/dynamic-capabilities) for examples and failure behavior. To give a session that replaced a [stranded session](./concepts/execution-model-and-durability#what-a-replacement-session-receives) the earlier conversation, read its stream with `sessions.attach()` and `transcriptReducer()` in a `session.started` user-role instruction.
84
84
 
85
85
  ## History controls and prompt caching
86
86
 
@@ -152,7 +152,7 @@ Tool definitions accept `availableInSubagents: false` to restrict the tool to to
152
152
  | `eve/evals/reporters` | `Braintrust`, `JUnit`, `EvalReporter` |
153
153
  | `eve/evals/loaders` | `loadJson`, `loadYaml` |
154
154
  | `eve/react`, `eve/vue`, `eve/svelte` | `useEveAgent` |
155
- | `eve/next`, `eve/nuxt`, `eve/sveltekit` | framework bundler plugins |
155
+ | `eve/next`, `eve/nuxt`, `eve/sveltekit`, `eve/tanstack` | framework bundler plugins |
156
156
  | [`eve/client`](../guides/client/overview) | `Client`, `ClientSession`, health and agent-info schemas, response errors |
157
157
  | [`eve/server`](../concepts/sessions-runs-and-streaming#read-a-session-in-process) | `sessions`, for reading session streams in process |
158
158
 
@@ -219,6 +219,8 @@ Approvals and questions share one protocol:
219
219
  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.
220
220
  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`.
221
221
 
222
+ To tell the model why a call was denied, send `text` with the `cancel` response, for example `{ requestId, optionId: "cancel", text: "Only the three-pack." }`. The model receives the note quoted in the denial result, marked as written by the person who denied the call, who may not be the user. The note is also visible to anyone who can read the session stream, in `input.resolved`.
223
+
222
224
  For `ctx.ask()` questions from tools and prompts proxied from subagents, a follow-up message answers the first open request, as described in [Several requests at once](#several-requests-at-once). 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.
223
225
 
224
226
  Each request includes a `kind` discriminator: `tool-approval`, `question`, or
@@ -7,7 +7,7 @@ The analytics assistant runs in the TUI. Now add a web dashboard and deploy a pr
7
7
 
8
8
  ## Add the Web Chat app
9
9
 
10
- Step 1 scaffolded the agent without a web frontend. Add one now with `eve add channel/web`, run from the `analytics-assistant/` directory:
10
+ Step 1 scaffolded the agent without a web frontend. Add one now with `eve add channel/web`, run from the `analytics-assistant/` directory, and choose **Next.js** when it asks which framework to use:
11
11
 
12
12
  ```bash
13
13
  npx eve add channel/web
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eve",
3
- "version": "0.76.0",
3
+ "version": "0.76.2",
4
4
  "private": false,
5
5
  "description": "Filesystem-first framework for durable backend AI agents that run anywhere.",
6
6
  "keywords": [
@@ -16,6 +16,7 @@
16
16
  "observability",
17
17
  "react",
18
18
  "serverless",
19
+ "tanstack",
19
20
  "tools",
20
21
  "vercel",
21
22
  "workflow"
@@ -102,6 +103,11 @@
102
103
  "import": "./dist/src/public/sveltekit/index.js",
103
104
  "default": "./dist/src/public/sveltekit/index.js"
104
105
  },
106
+ "./tanstack": {
107
+ "types": "./dist/src/public/tanstack/index.d.ts",
108
+ "import": "./dist/src/public/tanstack/index.js",
109
+ "default": "./dist/src/public/tanstack/index.js"
110
+ },
105
111
  "./tools/approval": {
106
112
  "types": "./dist/src/public/tools/approval/index.d.ts",
107
113
  "import": "./dist/src/public/tools/approval/index.js",