eve 0.12.2 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/dist/src/cli/commands/agent-instructions.d.ts +15 -3
- package/dist/src/cli/commands/agent-instructions.js +3 -1
- package/dist/src/cli/commands/agent-prompt/build-and-verify.md +33 -0
- package/dist/src/cli/commands/agent-prompt/collect-intent.md +18 -0
- package/dist/src/cli/commands/agent-prompt/intro-handoff.md +4 -0
- package/dist/src/cli/commands/agent-prompt/intro-setup.md +5 -0
- package/dist/src/cli/commands/agent-prompt/scaffold.md +19 -0
- package/dist/src/cli/commands/agent-prompt/vercel-connect.md +3 -0
- package/dist/src/cli/commands/deploy.js +1 -1
- package/dist/src/cli/commands/init-repl.d.ts +79 -0
- package/dist/src/cli/commands/init-repl.js +1 -0
- package/dist/src/cli/commands/init.d.ts +6 -0
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/cli/commands/link.d.ts +2 -2
- package/dist/src/cli/commands/link.js +1 -1
- package/dist/src/cli/dev/tui/line-editor.d.ts +2 -0
- package/dist/src/cli/dev/tui/line-editor.js +2 -2
- package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
- package/dist/src/cli/dev/tui/setup-commands.d.ts +26 -7
- package/dist/src/cli/dev/tui/setup-commands.js +2 -2
- package/dist/src/cli/dev/tui/setup-flow.d.ts +10 -3
- package/dist/src/cli/dev/tui/setup-panel.d.ts +16 -8
- package/dist/src/cli/dev/tui/setup-panel.js +3 -3
- package/dist/src/cli/dev/tui/setup-selection-input.d.ts +2 -1
- package/dist/src/cli/dev/tui/setup-selection-input.js +2 -2
- package/dist/src/cli/dev/tui/terminal-renderer.js +10 -10
- package/dist/src/cli/dev/tui/terminal-text.d.ts +11 -0
- package/dist/src/cli/dev/tui/terminal-text.js +1 -1
- package/dist/src/cli/dev/tui/tui-prompter.js +1 -1
- package/dist/src/cli/run.d.ts +1 -0
- package/dist/src/cli/run.js +2 -2
- package/dist/src/cli/ui/live-row.js +1 -1
- package/dist/src/cli/ui/progress-pulse.d.ts +10 -0
- package/dist/src/cli/ui/progress-pulse.js +1 -0
- package/dist/src/discover/discover-agent.js +1 -1
- package/dist/src/evals/target.js +1 -1
- package/dist/src/execution/node-step.js +1 -1
- package/dist/src/execution/sandbox/bindings/just-bash-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel-sdk-types.d.ts +0 -1
- package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
- package/dist/src/execution/sandbox/multiplexed-command.d.ts +22 -0
- package/dist/src/execution/sandbox/multiplexed-command.js +1 -0
- package/dist/src/execution/tool-auth.d.ts +17 -30
- package/dist/src/execution/tool-auth.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/harness/tool-loop.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-module-loader.js +2 -2
- package/dist/src/internal/nitro/dev-runtime-artifacts.js +1 -1
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
- package/dist/src/public/channels/github/api.d.ts +5 -0
- package/dist/src/public/channels/github/api.js +1 -1
- package/dist/src/public/channels/github/dispatch.js +1 -1
- package/dist/src/public/channels/github/pr-context.d.ts +10 -0
- package/dist/src/public/channels/github/pr-context.js +2 -2
- package/dist/src/public/channels/slack/connections.d.ts +16 -18
- package/dist/src/public/channels/slack/defaults.d.ts +1 -1
- package/dist/src/public/channels/slack/defaults.js +1 -1
- package/dist/src/public/channels/slack/slackChannel.d.ts +6 -7
- package/dist/src/public/definitions/tool.d.ts +40 -41
- package/dist/src/public/definitions/tool.js +1 -1
- package/dist/src/public/tools/index.d.ts +1 -1
- package/dist/src/runtime/connections/scoped-authorization.js +1 -1
- package/dist/src/runtime/connections/validate-authorization.js +1 -1
- package/dist/src/runtime/framework-tools/connection-search-dynamic.js +1 -1
- package/dist/src/runtime/resolve-tool.js +1 -1
- package/dist/src/runtime/types.d.ts +0 -10
- package/dist/src/setup/ai-gateway-api-key.d.ts +15 -0
- package/dist/src/setup/ai-gateway-api-key.js +1 -0
- package/dist/src/setup/boxes/apply-ai-gateway-credential.js +1 -1
- package/dist/src/setup/boxes/detect-ai-gateway.js +2 -2
- package/dist/src/setup/boxes/link-project.d.ts +8 -14
- package/dist/src/setup/boxes/link-project.js +1 -1
- package/dist/src/setup/boxes/resolve-provisioning.d.ts +2 -1
- package/dist/src/setup/boxes/resolve-provisioning.js +1 -1
- package/dist/src/setup/cli/select-component.d.ts +7 -1
- package/dist/src/setup/cli/select-component.js +1 -1
- package/dist/src/setup/cli/select-option-codec.d.ts +1 -0
- package/dist/src/setup/cli/select-option-codec.js +1 -1
- package/dist/src/setup/cli/select-state.d.ts +14 -1
- package/dist/src/setup/cli/select-state.js +1 -1
- package/dist/src/setup/flows/channels.js +1 -1
- package/dist/src/setup/flows/deploy.js +1 -1
- package/dist/src/setup/flows/install-vercel-cli.js +1 -1
- package/dist/src/setup/flows/link.d.ts +2 -1
- package/dist/src/setup/flows/link.js +1 -1
- package/dist/src/setup/flows/login.js +1 -1
- package/dist/src/setup/flows/model.d.ts +5 -4
- package/dist/src/setup/flows/model.js +1 -1
- package/dist/src/setup/flows/vercel.js +2 -2
- package/dist/src/setup/index.d.ts +1 -1
- package/dist/src/setup/package-manager.d.ts +2 -1
- package/dist/src/setup/package-manager.js +1 -1
- package/dist/src/setup/primitives/pm/index.d.ts +1 -1
- package/dist/src/setup/primitives/pm/pnpm.d.ts +11 -1
- package/dist/src/setup/primitives/pm/pnpm.js +5 -2
- package/dist/src/setup/primitives/pm/types.d.ts +10 -1
- package/dist/src/setup/project-resolution.d.ts +9 -6
- package/dist/src/setup/project-resolution.js +1 -1
- package/dist/src/setup/prompter.d.ts +13 -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.d.ts +8 -0
- package/dist/src/setup/scaffold/create/project.js +8 -7
- package/dist/src/setup/scaffold/update/channels.d.ts +8 -0
- package/dist/src/setup/scaffold/update/channels.js +2 -2
- package/dist/src/setup/scaffold/update/package-json.d.ts +3 -0
- package/dist/src/setup/scaffold/update/package-json.js +1 -1
- package/dist/src/setup/scaffold/workspace-glob.d.ts +5 -0
- package/dist/src/setup/scaffold/workspace-glob.js +1 -0
- package/dist/src/setup/scaffold/workspace-root.d.ts +29 -0
- package/dist/src/setup/scaffold/workspace-root.js +1 -0
- package/dist/src/setup/state.d.ts +7 -2
- package/dist/src/setup/vercel-api-failure.d.ts +9 -0
- package/dist/src/setup/vercel-api-failure.js +1 -0
- package/dist/src/setup/vercel-deployment.js +1 -1
- package/dist/src/setup/vercel-project-api.d.ts +25 -0
- package/dist/src/setup/vercel-project-api.js +1 -0
- package/dist/src/setup/vercel-project.d.ts +11 -57
- package/dist/src/setup/vercel-project.js +1 -1
- package/dist/src/setup/with-spinner.d.ts +3 -0
- package/dist/src/setup/with-spinner.js +1 -0
- package/dist/src/shared/package-name.d.ts +4 -0
- package/dist/src/shared/package-name.js +1 -0
- package/docs/channels/slack.mdx +1 -1
- package/docs/connections.mdx +9 -6
- package/docs/getting-started.mdx +8 -3
- package/docs/guides/auth-and-route-protection.md +57 -10
- package/docs/guides/dev-tui.md +3 -3
- package/docs/reference/cli.md +3 -3
- package/docs/reference/typescript-api.md +7 -7
- package/package.json +1 -1
- package/dist/src/cli/commands/init-agent-handoff.md +0 -12
- package/dist/src/cli/commands/init-agent-instructions.md +0 -16
package/docs/getting-started.mdx
CHANGED
|
@@ -38,10 +38,15 @@ The command:
|
|
|
38
38
|
|
|
39
39
|
- Creates a child directory using the current workspace or launcher package manager, and uses eve's default model
|
|
40
40
|
- Installs dependencies and initializes Git
|
|
41
|
-
-
|
|
41
|
+
- When a supported coding-agent REPL (Claude Code, Codex, Cursor, Droid, Gemini CLI, opencode, or Pi) is on `PATH`, asks whether to open an available REPL or start the development server; otherwise starts the server and opens the interactive [terminal UI](./guides/dev-tui)
|
|
42
42
|
|
|
43
43
|
Type a message and watch the model loop run. Pass `--channel-web-nextjs` to add the Web Chat application. Every app ships the built-in HTTP channel (`agent/channels/eve.ts`) regardless.
|
|
44
44
|
|
|
45
|
+
When you choose one of those REPLs, eve starts it with a project-specific
|
|
46
|
+
prompt that guides the setup. The prompt distinguishes `eve dev`, which starts
|
|
47
|
+
eve's HMR server and the agent's terminal REPL, from `eve dev --no-ui`, which is
|
|
48
|
+
the controllable background mode for verification.
|
|
49
|
+
|
|
45
50
|
`eve init` holds the terminal, so stop it with Ctrl+C to get your shell back before editing the generated agent. The command does not create a Vercel project or deploy.
|
|
46
51
|
|
|
47
52
|
To add eve to an existing project, run `eve init .` from a directory that already has a `package.json` and no `agent/` files yet. eve adds the missing `eve`, `ai`, and `zod` dependencies without touching anything else the project owns. The eve dependency and the Node engine come from the same release. eve pins `engines.node` to the lowest major that release supports (for example `24.x`). It keeps an existing range only when every version that range allows stays within that major; otherwise it replaces the range and prints a warning.
|
|
@@ -186,10 +191,10 @@ See [Sessions, runs and streaming](./concepts/sessions-runs-and-streaming) for t
|
|
|
186
191
|
|
|
187
192
|
If a coding agent (Claude Code, Cursor, and the like) is doing the setup, hand it this prompt:
|
|
188
193
|
|
|
189
|
-
<CopyPrompt text="Set up an eve agent for the user. eve is a filesystem-first TypeScript framework for durable agents, published as the npm package eve. Read its docs: once eve is installed they are bundled in the package at node_modules/eve/docs; before eve is installed, read the published Introduction and Getting Started pages. If the project has no eve app, scaffold one with `npx eve@latest init <name>`; add `--channel-web-nextjs` only when the user wants Web Chat.
|
|
194
|
+
<CopyPrompt text="Set up an eve agent for the user. eve is a filesystem-first TypeScript framework for durable agents, published as the npm package eve. Read its docs: once eve is installed they are bundled in the package at node_modules/eve/docs; before eve is installed, read the published Introduction and Getting Started pages. If the project has no eve app, scaffold one with `npx eve@latest init <name>`; add `--channel-web-nextjs` only when the user wants Web Chat. In a coding-agent launch, init installs dependencies and prints the project-specific dev command instead of starting the interactive terminal UI. A fresh project also initializes Git; an existing app keeps its repository and scripts. To add eve to an existing app, run `eve init .`, or install the dependencies by hand with `npm install eve@latest ai zod` (init adds ai and zod; the by-hand path needs all three). Make sure agent/agent.ts and agent/instructions.md exist, then add a first typed tool at agent/tools/get_weather.ts using defineTool from eve/tools with a Zod inputSchema and an inline execute. Start eve in a controllable background process with `npx eve dev --no-ui`, wait for the server URL, then exercise the HTTP API: create a session with POST /eve/v1/session, attach to GET /eve/v1/session/:id/stream, and send a follow-up with the returned continuationToken. Stop the dev process after verification. Verify with the project's typecheck, adapt model and provider choices to the project, and do not commit unless the user asks.">
|
|
190
195
|
Set up an eve agent: read the eve docs (bundled at node_modules/eve/docs once eve is
|
|
191
196
|
installed), scaffold with `npx eve@latest init <name>` (or `npm install eve@latest ai zod` in an existing app), add
|
|
192
|
-
a typed tool at agent/tools/get_weather.ts, run it with `
|
|
197
|
+
a typed tool at agent/tools/get_weather.ts, run it with `npx eve dev --no-ui`, then create a session, stream
|
|
193
198
|
it, and send a follow-up.
|
|
194
199
|
</CopyPrompt>
|
|
195
200
|
|
|
@@ -222,7 +222,7 @@ Route auth does not enforce session ownership. If multiple users or tenants can
|
|
|
222
222
|
|
|
223
223
|
## Tool and connection auth
|
|
224
224
|
|
|
225
|
-
Tool and connection auth is how your agent reaches an external service that wants an interactive sign-in, like an OAuth MCP server.
|
|
225
|
+
Tool and connection auth is how your agent reaches an external service that wants an interactive sign-in, like an OAuth MCP server. Connections declare `auth` on the connection definition. Tools should resolve providers inline with `ctx.getToken(provider)` and call `ctx.requireAuth(provider)` only when a downstream service rejects a token; eve drives the sign-in, caches the token per step, and re-runs the call once the caller authorizes.
|
|
226
226
|
|
|
227
227
|
### On a connection
|
|
228
228
|
|
|
@@ -236,7 +236,7 @@ import { once } from "eve/tools/approval";
|
|
|
236
236
|
export default defineMcpClientConnection({
|
|
237
237
|
url: "https://mcp.linear.app/mcp",
|
|
238
238
|
description: "Linear: project management, issue tracking, and team workflows.",
|
|
239
|
-
auth: connect("
|
|
239
|
+
auth: connect("linear/myagent"),
|
|
240
240
|
approval: once(),
|
|
241
241
|
});
|
|
242
242
|
```
|
|
@@ -245,19 +245,20 @@ The first call that needs the connection kicks off an OAuth sign-in, surfaced as
|
|
|
245
245
|
|
|
246
246
|
### On a single tool
|
|
247
247
|
|
|
248
|
-
When one tool calls a service behind OAuth,
|
|
248
|
+
When one tool calls a service behind OAuth, keep the auth provider at the call site and skip the separate connection. Providers take the same shapes as connection `auth`: `connect("...")` for Vercel Connect-backed OAuth, a custom interactive definition, or a plain `{ getToken }` for static credentials.
|
|
249
249
|
|
|
250
250
|
```ts title="agent/tools/list_okta_groups.ts"
|
|
251
251
|
import { defineTool } from "eve/tools";
|
|
252
252
|
import { connect } from "@vercel/connect/eve";
|
|
253
253
|
import { z } from "zod";
|
|
254
254
|
|
|
255
|
+
const oktaAuth = connect("okta/myagent");
|
|
256
|
+
|
|
255
257
|
export default defineTool({
|
|
256
258
|
description: "List the caller's Okta groups.",
|
|
257
259
|
inputSchema: z.object({}),
|
|
258
|
-
auth: connect("okta"),
|
|
259
260
|
async execute(_input, ctx) {
|
|
260
|
-
const { token } = await ctx.getToken();
|
|
261
|
+
const { token } = await ctx.getToken(oktaAuth);
|
|
261
262
|
const res = await fetch("https://api.okta-proxy.internal/groups", {
|
|
262
263
|
headers: { authorization: `Bearer ${token}` },
|
|
263
264
|
});
|
|
@@ -266,14 +267,60 @@ export default defineTool({
|
|
|
266
267
|
});
|
|
267
268
|
```
|
|
268
269
|
|
|
269
|
-
|
|
270
|
+
This same inline shape naturally handles tools that need more than one credential:
|
|
271
|
+
|
|
272
|
+
```ts title="agent/tools/sync_ticket.ts"
|
|
273
|
+
import { connect } from "@vercel/connect/eve";
|
|
274
|
+
import { defineTool } from "eve/tools";
|
|
275
|
+
import { z } from "zod";
|
|
276
|
+
|
|
277
|
+
const githubAuth = connect("github/myagent");
|
|
278
|
+
const linearAuth = connect("linear/myagent");
|
|
279
|
+
|
|
280
|
+
export default defineTool({
|
|
281
|
+
description: "Sync GitHub context into Linear.",
|
|
282
|
+
inputSchema: z.object({ issueId: z.string() }),
|
|
283
|
+
async execute({ issueId }, ctx) {
|
|
284
|
+
const { token: githubToken } = await ctx.getToken(githubAuth);
|
|
285
|
+
const { token: linearToken } = await ctx.getToken(linearAuth);
|
|
286
|
+
|
|
287
|
+
const repo = await fetch("https://api.github.com/user/repos", {
|
|
288
|
+
headers: { authorization: `Bearer ${githubToken}` },
|
|
289
|
+
});
|
|
290
|
+
if (repo.status === 401) ctx.requireAuth(githubAuth);
|
|
291
|
+
|
|
292
|
+
return updateLinearIssue(issueId, linearToken, await repo.json());
|
|
293
|
+
},
|
|
294
|
+
});
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Configure provider-specific OAuth targeting on the provider itself. For Vercel Connect, pass `tokenParams` to `connect(...)` when you need explicit OAuth scopes, resource indicators, or rich authorization requests:
|
|
298
|
+
|
|
299
|
+
```ts
|
|
300
|
+
const githubAuth = connect({
|
|
301
|
+
connector: "github/myagent",
|
|
302
|
+
tokenParams: {
|
|
303
|
+
authorizationDetails: [
|
|
304
|
+
{
|
|
305
|
+
type: "github_app_installation",
|
|
306
|
+
org: "acme",
|
|
307
|
+
repositories: ["agent-runtime"],
|
|
308
|
+
},
|
|
309
|
+
],
|
|
310
|
+
},
|
|
311
|
+
});
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
The tool's `ctx` exposes provider-scoped auth accessors:
|
|
315
|
+
|
|
316
|
+
- `ctx.getToken(provider, options?)` resolves an inline provider such as `connect("github/myagent")`. It uses the same cache, callback, and sign-in machinery as connection auth, scoped to that provider's tool-qualified auth key.
|
|
317
|
+
- `ctx.requireAuth(provider, options?)` evicts the cached token for that inline provider and starts a fresh authorization challenge. Use it after a downstream `401` rejects a token returned by `ctx.getToken(provider)`.
|
|
270
318
|
|
|
271
|
-
|
|
272
|
-
- `ctx.requireAuth()` throws `ConnectionAuthorizationRequiredError` to gate the tool on authorization before any token resolves. The runtime turns that into the same consent prompt.
|
|
319
|
+
Throw `ConnectionAuthorizationRequiredError` from an inline provider's `getToken` to trigger the consent flow for that provider. If a downstream request later rejects an already-resolved token, call `ctx.requireAuth(provider)` to evict and re-authorize it.
|
|
273
320
|
|
|
274
|
-
|
|
321
|
+
Vercel Connect providers usually supply their own display name in the authorization challenge. Set `displayName` in the inline options only when you need to override what users see, for example `ctx.getToken(customAuth, { displayName: "Salesforce" })`. It is presentation-only.
|
|
275
322
|
|
|
276
|
-
|
|
323
|
+
Inline providers derive a stable tool-qualified auth key from Vercel Connect metadata when available. If you pass multiple custom providers that do not carry provider metadata, give each one an explicit auth key, for example `ctx.getToken(auth, { authKey: "github" })`. This `authKey` controls eve's cache and callback keys; it is not an OAuth scope.
|
|
277
324
|
|
|
278
325
|
## What to read next
|
|
279
326
|
|
package/docs/guides/dev-tui.md
CHANGED
|
@@ -22,7 +22,7 @@ If agent discovery reported problems, an error and warning count renders between
|
|
|
22
22
|
|
|
23
23
|
The conversation streams straight into your terminal's normal scrollback, so you keep native scrolling, copy and paste, and a transcript that persists after you exit. The scrollback holds your prompts, the agent's replies, reasoning, tool calls, nested subagents, connection-authorization prompts, and any captured `stdout`, `stderr`, or sandbox lifecycle lines.
|
|
24
24
|
|
|
25
|
-
Each turn renders without boxes. A colored gutter glyph marks who is speaking, tool calls collapse to a one-line summary (`✓ get_weather city="SF" → 73°F`), and a subagent's work is indented beneath its `◆` header. When input is ready, the prompt stays bare until you type.
|
|
25
|
+
Each turn renders without boxes. A colored gutter glyph marks who is speaking, tool calls collapse to a one-line summary (`✓ get_weather city="SF" → 73°F`), and a subagent's work is indented beneath its `◆` header. When input is ready, the prompt stays bare until you type. A green circle-dot pulses while the agent is waiting to answer and disappears when reasoning or answer content begins.
|
|
26
26
|
|
|
27
27
|
A persistent line beneath the prompt or status shows the model, the session's token flow (`↑ 394.4K ↓ 4.3K`), the linked Vercel project and team (`▲ my-agent (acme)`), and a yellow `/deploy pending` marker once a channel added this session still needs `/deploy`. The Vercel segment stays hidden until the directory is linked.
|
|
28
28
|
|
|
@@ -30,7 +30,7 @@ Errors render compactly with docs links highlighted. A code bug escaping your ag
|
|
|
30
30
|
|
|
31
31
|
## Slash commands
|
|
32
32
|
|
|
33
|
-
Each command echoes as an invocation line, asks through a bordered panel that takes the input area's place (one question at a time, separate from the chat transcript), and finishes with a one-line `⎿` result. Loading states stay on the ephemeral status line instead of piling into the transcript. Setup menus render the selected option with a filled arrow and an inverse label padded by one space on each side. The label is blue normally and yellow for warning rows.
|
|
33
|
+
Each command echoes as an invocation line, asks through a bordered panel that takes the input area's place (one question at a time, separate from the chat transcript), and finishes with a one-line `⎿` result. Loading states stay on the ephemeral status line instead of piling into the transcript; model and channel setup use the same green square pulse as the build phase. Setup menus render the selected option with a filled arrow and an inverse label padded by one space on each side. Text prompts use a blinking block cursor over the character at the caret. The selected label is blue normally and yellow for warning rows.
|
|
34
34
|
|
|
35
35
|
| Command | Does |
|
|
36
36
|
| ----------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -48,7 +48,7 @@ Each command echoes as an invocation line, asks through a bordered panel that ta
|
|
|
48
48
|
|
|
49
49
|
Bare `/model` opens the configure menu. When no provider is configured, it opens the provider questions directly; Esc returns to the configure menu. "Change model" runs the same searchable model picker setup uses (the Vercel AI Gateway catalog, pre-selected on the model the runtime is serving). A model change is written into your agent's authored source, and the command reports success only after eve confirms the new id. `/model <provider/model-id>` applies one directly, skipping the menu.
|
|
50
50
|
|
|
51
|
-
The provider row opens the provider questions: which model provider to use, and how to connect. Picking something other than Vercel AI Gateway shows wiring instructions for your own provider and stops there, leaving any existing setup untouched. For Vercel AI Gateway, you either paste your own `AI_GATEWAY_API_KEY` (saved straight to `.env.local`) or connect via a project. Connecting via a project asks for a Vercel team, opens that team's
|
|
51
|
+
The provider row opens the provider questions: which model provider to use, and how to connect. Picking something other than Vercel AI Gateway shows wiring instructions for your own provider and stops there, leaving any existing setup untouched. For Vercel AI Gateway, you either paste your own `AI_GATEWAY_API_KEY` (saved straight to `.env.local`) or connect via a project. Connecting via a project asks for a Vercel team, opens that team's recent projects, and lets you search all projects for older matches. Vercel links the selected project, eve verifies its project ID, then pulls its environment into `.env.local`. The dev TUI reloads env files, re-reads the runtime's model endpoint, and clears the setup warning automatically; no restart is needed.
|
|
52
52
|
|
|
53
53
|
The provider row demands attention (a bold yellow "Configure provider" with "Required to enable the agent") until a link or gateway credential is detected, then names the connection afterward (for example "AI Gateway (Linked to my-project in my-team)"). Each action's latest outcome stays visible beneath the menu (for example "✓ Model changed to openai/gpt-5.5"). When a turn fails because AI Gateway authentication is missing or stale, the error points you at `/model` directly.
|
|
54
54
|
|
package/docs/reference/cli.md
CHANGED
|
@@ -33,9 +33,9 @@ The optional `target` decides the mode:
|
|
|
33
33
|
|
|
34
34
|
- A name (`eve init my-agent`) scaffolds a fresh project in a new `my-agent/` directory.
|
|
35
35
|
- An existing directory, including `.` for the current one (`eve init .`), adds an agent to that project. The project needs a `package.json`, the `agent/` files must not exist yet, and the missing `eve`, `ai`, and `zod` dependencies are added without touching anything else.
|
|
36
|
-
- Omitting the target scaffolds or updates the current directory, the same as `eve init .`.
|
|
36
|
+
- Omitting the target scaffolds or updates the current directory, the same as `eve init .`. The exception is a coding agent (Claude Code, Cursor, and the like): running `eve init` with no target prints a setup guide instead of scaffolding, since a bare invocation means the agent has not chosen what to build yet.
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
Both scaffold modes install dependencies. A fresh project initializes Git; an existing project keeps its repository and scripts. On an interactive human terminal, when a supported coding-agent CLI (`claude`, `codex`, `cursor-agent`, `droid`, `gemini`, `opencode`, or `pi`) is on `PATH`, `eve init` offers the available REPLs and `eve dev` (the default). Each REPL receives a project-specific prompt that guides the user through building the agent. It also explains that bare `eve dev` starts HMR and the agent's terminal REPL, while `eve dev --no-ui` is the controllable verification path. Without any of those executables, human invocations run `eve dev` through the detected project package manager. Fresh projects inherit a parent workspace manager when one is present; otherwise they use the manager that launched `eve init`. Coding-agent invocations print the same project-specific handoff, and the agent can run that command with `--no-ui` for headless verification.
|
|
39
39
|
|
|
40
40
|
| Flag | Type | Default | Description |
|
|
41
41
|
| ---------------------- | ---- | ------- | -------------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -119,7 +119,7 @@ Local dev keeps immutable runtime source snapshots under `.eve/dev-runtime/snaps
|
|
|
119
119
|
eve link
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
-
Links the current directory to an existing Vercel project. You select a team and then a project
|
|
122
|
+
Links the current directory to an existing Vercel project. You select a team and then one of its recent projects; type a project name and choose **Search for '<name>'** to search the rest of that team's projects. Vercel links the selected project, eve verifies its project ID, and then pulls the project's environment so an AI Gateway credential (`VERCEL_OIDC_TOKEN` or `AI_GATEWAY_API_KEY`) lands in `.env.local`. Running it again re-links: the pickers always run, and the new choice wins. The command is interactive only; in CI, use `vercel link --project <name> --yes --non-interactive` instead. A running `eve dev` reloads env files automatically, so you don't need to restart after the pull.
|
|
123
123
|
|
|
124
124
|
## `eve deploy`
|
|
125
125
|
|
|
@@ -56,13 +56,13 @@ A few non-`define*` helpers round out the set: `disableTool` and `ExperimentalWo
|
|
|
56
56
|
|
|
57
57
|
`ctx` is passed to your tool `execute`, hook handlers, and channel event handlers. It is live only while authored code is running, so reaching for it at module top level throws. See [Session context](../guides/session-context) for the full model.
|
|
58
58
|
|
|
59
|
-
| Member
|
|
60
|
-
|
|
|
61
|
-
| `ctx.session`
|
|
62
|
-
| `ctx.getSandbox()`
|
|
63
|
-
| `ctx.getSkill(identifier)`
|
|
64
|
-
| `ctx.getToken()`
|
|
65
|
-
| `ctx.requireAuth()`
|
|
59
|
+
| Member | Use |
|
|
60
|
+
| --------------------------- | ---------------------------------------------------------------------------- |
|
|
61
|
+
| `ctx.session` | Current session, turn, auth, and optional parent lineage (read-only) |
|
|
62
|
+
| `ctx.getSandbox()` | Live sandbox handle for the current agent |
|
|
63
|
+
| `ctx.getSkill(identifier)` | Handle for a named skill visible to the current agent |
|
|
64
|
+
| `ctx.getToken(provider)` | Resolve a bearer token for an inline auth provider such as `connect("...")` |
|
|
65
|
+
| `ctx.requireAuth(provider)` | Evict and re-authorize an inline provider, commonly after a downstream `401` |
|
|
66
66
|
|
|
67
67
|
## Imports at a glance
|
|
68
68
|
|
package/package.json
CHANGED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
Before editing the scaffold, read the relevant guide in
|
|
2
|
-
`{{projectPath}}/node_modules/eve/docs/`.
|
|
3
|
-
|
|
4
|
-
Then open `{{projectPath}}/agent/instructions.md` and replace the placeholder
|
|
5
|
-
with what the user said the agent should do (the purpose you collected). This
|
|
6
|
-
is the agent's always-on system prompt.
|
|
7
|
-
|
|
8
|
-
Do not start `eve dev` because it is interactive. Give the user this command to
|
|
9
|
-
run when they are ready:
|
|
10
|
-
|
|
11
|
-
cd {{projectPath}}
|
|
12
|
-
{{devCommand}}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# Set up an eve agent
|
|
2
|
-
|
|
3
|
-
Ask the user these questions one at a time. Use the coding harness's prompt
|
|
4
|
-
tools when available. Do not guess.
|
|
5
|
-
|
|
6
|
-
1. What should the agent do?
|
|
7
|
-
2. Create a new project or add the agent to an existing directory?
|
|
8
|
-
For a new project, propose a name and ask the user to confirm it. For an
|
|
9
|
-
existing project, ask for the directory.
|
|
10
|
-
3. For a new project, include Web Chat?
|
|
11
|
-
|
|
12
|
-
Then run:
|
|
13
|
-
|
|
14
|
-
{{initCommand}} <target>
|
|
15
|
-
|
|
16
|
-
Add `--channel-web-nextjs` if the user wants Web Chat.
|