@agent-native/core 0.59.1 → 0.60.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/dist/a2a/index.d.ts +2 -0
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +1 -0
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/invoke.d.ts +63 -0
- package/dist/a2a/invoke.d.ts.map +1 -0
- package/dist/a2a/invoke.js +157 -0
- package/dist/a2a/invoke.js.map +1 -0
- package/dist/agent/run-store.d.ts +15 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +28 -0
- package/dist/agent/run-store.js.map +1 -1
- package/dist/chat-threads/store.d.ts +21 -0
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +128 -0
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/cli/agent.d.ts +23 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +300 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/agents.d.ts +14 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +95 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/code-agent-executor.d.ts.map +1 -1
- package/dist/cli/code-agent-executor.js +264 -2
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/create.d.ts +3 -2
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +154 -83
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +50 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/invoke.d.ts +26 -0
- package/dist/cli/invoke.d.ts.map +1 -0
- package/dist/cli/invoke.js +227 -0
- package/dist/cli/invoke.js.map +1 -0
- package/dist/cli/templates-meta.d.ts +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +9 -8
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/cli/workspacify.d.ts +1 -1
- package/dist/cli/workspacify.d.ts.map +1 -1
- package/dist/cli/workspacify.js +6 -6
- package/dist/cli/workspacify.js.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.js +5 -4
- package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
- package/dist/client/blocks/library/diagram.d.ts.map +1 -1
- package/dist/client/blocks/library/diagram.js +23 -17
- package/dist/client/blocks/library/diagram.js.map +1 -1
- package/dist/client/blocks/types.d.ts +2 -0
- package/dist/client/blocks/types.d.ts.map +1 -1
- package/dist/client/blocks/types.js.map +1 -1
- package/dist/client/chat/index.d.ts +1 -1
- package/dist/client/chat/index.d.ts.map +1 -1
- package/dist/client/chat/index.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts +13 -0
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +41 -0
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +2 -2
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/onboarding/default-steps.d.ts.map +1 -1
- package/dist/onboarding/default-steps.js +102 -0
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/provider-api/actions/github-repo-files.d.ts +84 -0
- package/dist/provider-api/actions/github-repo-files.d.ts.map +1 -0
- package/dist/provider-api/actions/github-repo-files.js +213 -0
- package/dist/provider-api/actions/github-repo-files.js.map +1 -0
- package/dist/provider-api/github-repo.d.ts +11 -0
- package/dist/provider-api/github-repo.d.ts.map +1 -0
- package/dist/provider-api/github-repo.js +553 -0
- package/dist/provider-api/github-repo.js.map +1 -0
- package/dist/provider-api/index.d.ts +184 -11
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +519 -0
- package/dist/provider-api/index.js.map +1 -1
- package/dist/scripts/docs/search.d.ts.map +1 -1
- package/dist/scripts/docs/search.js +38 -13
- package/dist/scripts/docs/search.js.map +1 -1
- package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
- package/dist/secrets/register-framework-secrets.js +11 -0
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +32 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +297 -2
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth-marketing.d.ts.map +1 -1
- package/dist/server/auth-marketing.js +17 -7
- package/dist/server/auth-marketing.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +6 -0
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +18 -98
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/styles/blocks.css +30 -8
- package/dist/styles/rich-markdown-editor.css +10 -4
- package/dist/templates/{starter-shell-sync.spec.ts → chat-shell-sync.spec.ts} +21 -21
- package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -5
- package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +63 -0
- package/dist/templates/default/AGENTS.md +22 -1
- package/dist/templates/default/actions/hello.ts +1 -1
- package/dist/templates/default/actions/navigate.ts +1 -1
- package/dist/templates/default/actions/view-screen.ts +1 -1
- package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +63 -0
- package/dist/templates/headless/.env.example +4 -0
- package/dist/templates/headless/.prettierrc +5 -0
- package/dist/templates/headless/AGENTS.md +58 -0
- package/dist/templates/headless/DEVELOPING.md +22 -0
- package/dist/templates/headless/_gitignore +36 -0
- package/dist/templates/headless/actions/hello.ts +14 -0
- package/dist/templates/headless/actions/run.ts +3 -0
- package/dist/templates/headless/package.json +22 -0
- package/dist/templates/headless/tsconfig.json +7 -0
- package/dist/templates/ui-primitives-sync.spec.ts +2 -2
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -5
- package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +63 -0
- package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +93 -0
- package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +1 -1
- package/dist/templates/workspace-core/AGENTS.md +20 -3
- package/dist/templates/workspace-core/src/server/index.ts +1 -1
- package/dist/templates/workspace-root/AGENTS.md +25 -5
- package/dist/templates/workspace-root/README.md +7 -7
- package/dist/triggers/dispatcher.d.ts +2 -3
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +2 -3
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/triggers/routes.d.ts +38 -0
- package/dist/triggers/routes.d.ts.map +1 -0
- package/dist/triggers/routes.js +202 -0
- package/dist/triggers/routes.js.map +1 -0
- package/docs/AGENTS.md +57 -0
- package/docs/SKILL.md +40 -0
- package/docs/content/a2a-protocol.md +1 -1
- package/docs/content/actions.md +48 -8
- package/docs/content/agent-surfaces.md +76 -14
- package/docs/content/cli-adapters.md +1 -1
- package/docs/content/cloneable-saas.md +5 -4
- package/docs/content/code-agents-ui.md +1 -1
- package/docs/content/components.md +1 -1
- package/docs/content/context-awareness.md +1 -1
- package/docs/content/creating-templates.md +9 -7
- package/docs/content/drop-in-agent.md +1 -1
- package/docs/content/faq.md +6 -4
- package/docs/content/getting-started.md +63 -73
- package/docs/content/key-concepts.md +24 -24
- package/docs/content/native-chat-ui.md +4 -4
- package/docs/content/pure-agent-apps.md +34 -10
- package/docs/content/security.md +1 -1
- package/docs/content/server.md +1 -1
- package/docs/content/template-chat.md +85 -0
- package/docs/content/template-dispatch.md +1 -1
- package/docs/content/tracking.md +1 -1
- package/docs/content/what-is-agent-native.md +7 -6
- package/package.json +10 -1
- package/src/templates/{starter-shell-sync.spec.ts → chat-shell-sync.spec.ts} +21 -21
- package/src/templates/default/.agents/skills/actions/SKILL.md +5 -5
- package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +63 -0
- package/src/templates/default/AGENTS.md +22 -1
- package/src/templates/default/actions/hello.ts +1 -1
- package/src/templates/default/actions/navigate.ts +1 -1
- package/src/templates/default/actions/view-screen.ts +1 -1
- package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +63 -0
- package/src/templates/headless/.env.example +4 -0
- package/src/templates/headless/.prettierrc +5 -0
- package/src/templates/headless/AGENTS.md +58 -0
- package/src/templates/headless/DEVELOPING.md +22 -0
- package/src/templates/headless/_gitignore +36 -0
- package/src/templates/headless/actions/hello.ts +14 -0
- package/src/templates/headless/actions/run.ts +3 -0
- package/src/templates/headless/package.json +22 -0
- package/src/templates/headless/tsconfig.json +7 -0
- package/src/templates/ui-primitives-sync.spec.ts +2 -2
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -5
- package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +63 -0
- package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +93 -0
- package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +1 -1
- package/src/templates/workspace-core/AGENTS.md +20 -3
- package/src/templates/workspace-core/src/server/index.ts +1 -1
- package/src/templates/workspace-root/AGENTS.md +25 -5
- package/src/templates/workspace-root/README.md +7 -7
- package/docs/content/template-starter.md +0 -78
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Chat Template"
|
|
3
|
+
description: "A minimal chat-first agent-native app: durable chat threads, actions, application state, live sync, auth, and room to add your own UI."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Chat Template
|
|
7
|
+
|
|
8
|
+
Chat is the basic agent-native app starting point. It gives you a clean ChatGPT-style shell with chat at the center, a threads list on the left, standard app navigation, auth, live sync, actions, and one example action. Start here when you want a real browser app you can build on without committing to a domain template.
|
|
9
|
+
|
|
10
|
+
If you want the smallest action-only runtime with no browser UI, start with [Pure-Agent Apps](/docs/pure-agent-apps). If you want a finished domain product shape, start from [Calendar](/docs/template-calendar), [Mail](/docs/template-mail), [Content](/docs/template-content), [Forms](/docs/template-forms), [Analytics](/docs/template-analytics), or another domain template.
|
|
11
|
+
|
|
12
|
+
<!-- screenshot:
|
|
13
|
+
app: chat
|
|
14
|
+
view: /
|
|
15
|
+
shows: Full-page chat app with standard left sidebar, chat threads on the left, centered composer, suggested prompts, and no domain data
|
|
16
|
+
account: screenshot-account (no domain data needed — chat ships with no seed schema)
|
|
17
|
+
capture: 1400x800 viewport, cropped 90px from bottom (final 1400x710)
|
|
18
|
+
-->
|
|
19
|
+
|
|
20
|
+

|
|
21
|
+
|
|
22
|
+
## What's in it {#whats-in-it}
|
|
23
|
+
|
|
24
|
+
- **Full-page chat** on `/` using the framework chat surface and durable chat threads.
|
|
25
|
+
- **Thread list in the app sidebar** so users can create, reopen, rename, pin, and archive chats.
|
|
26
|
+
- **Agent chat plugin** pre-configured so the chat talks to the built-in app-agent loop once your agent credentials are set.
|
|
27
|
+
- **Auth** via Better Auth — login, signup, sessions, organizations. The same flow runs locally and in production; in development email verification is skipped.
|
|
28
|
+
- **Actions directory** with one example (`actions/hello.ts`) plus the standard `view-screen` and `navigate` actions.
|
|
29
|
+
- **The framework's core tables** for application state, settings, sessions, resources, chat threads, run history, and other runtime state.
|
|
30
|
+
- **Live sync** (`useDbSync`) already wired so UI auto-refreshes when the agent writes to SQL.
|
|
31
|
+
- **AGENTS.md** with chat-first guidance for adding actions, routes, skills, and application state.
|
|
32
|
+
|
|
33
|
+
## What's _not_ in it {#not-in-it}
|
|
34
|
+
|
|
35
|
+
- No domain tables or seed data.
|
|
36
|
+
- No dashboards, lists, charts, forms, or provider integrations.
|
|
37
|
+
- No domain-specific actions beyond the example stub.
|
|
38
|
+
|
|
39
|
+
That's the point. Chat is a thin, useful default shell for your own agent, not a domain product pretending to be generic.
|
|
40
|
+
|
|
41
|
+
## When to pick it {#when-to-pick}
|
|
42
|
+
|
|
43
|
+
- **You want a basic app users can talk to immediately** and then extend with actions and UI.
|
|
44
|
+
- **You have a headless app that needs chat** as the first browser surface.
|
|
45
|
+
- **You want to plug your own agent backend into a familiar chat UI** while keeping Agent-Native's actions, state, auth, and deployment shape.
|
|
46
|
+
- **You are prototyping a custom internal tool** that does not match a domain template.
|
|
47
|
+
|
|
48
|
+
## Scaffolding {#scaffolding}
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npx @agent-native/core@latest create my-chat-app --template chat
|
|
52
|
+
cd my-chat-app
|
|
53
|
+
pnpm install
|
|
54
|
+
pnpm dev
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Or start with no UI and add a chat surface later:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npx @agent-native/core@latest create my-agent --headless
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
From there, copy the Chat template's `/` route and sidebar thread list into your app, or scaffold a Chat app and move your headless actions into its `actions/` directory. The key invariant stays the same: actions are the shared surface for chat, UI, HTTP, MCP, A2A, and CLI.
|
|
64
|
+
|
|
65
|
+
## Use your own agent backend {#own-agent-backend}
|
|
66
|
+
|
|
67
|
+
The template uses the built-in app-agent loop by default. To connect a custom backend, swap the chat runtime behind the agent chat plugin instead of rewriting the UI. The Chat route should stay a thin renderer around the shared chat surface; the backend choice belongs in the server plugin/runtime adapter.
|
|
68
|
+
|
|
69
|
+
Use this when your model orchestration already lives elsewhere, but you still want an app with auth, threads, actions, UI state, and deployable pages.
|
|
70
|
+
|
|
71
|
+
## First edits {#first-edits}
|
|
72
|
+
|
|
73
|
+
After scaffolding, ask the agent:
|
|
74
|
+
|
|
75
|
+
> Add a data model for `notes`. A note has an id, title, body, and owner. Render a notes page at `/notes`, add create/list actions, and keep chat able to create notes.
|
|
76
|
+
|
|
77
|
+
The agent should add a Drizzle schema, actions, route, navigation, and instructions. Then you can use the notes feature from either the UI or chat.
|
|
78
|
+
|
|
79
|
+
## What's next
|
|
80
|
+
|
|
81
|
+
- [**Getting Started**](/docs) — choose between headless, chat, and domain templates
|
|
82
|
+
- [**Agent Surfaces**](/docs/agent-surfaces) — headless, chat, embedded, and full-app patterns
|
|
83
|
+
- [**Actions**](/docs/actions) — the action system chat and UI both call
|
|
84
|
+
- [**Native Chat UI**](/docs/native-chat-ui) — chat surface primitives and runtime options
|
|
85
|
+
- [**Pure-Agent Apps**](/docs/pure-agent-apps) — action-only apps that can grow into Chat later
|
|
@@ -44,7 +44,7 @@ Use Dispatch when:
|
|
|
44
44
|
- You want a **messaging hub** that routes Slack or Telegram into the right domain agent.
|
|
45
45
|
- You want **scheduled jobs** that pull data from several apps.
|
|
46
46
|
|
|
47
|
-
Skip it for a single-app scaffold — use the [
|
|
47
|
+
Skip it for a single-app scaffold — use the [Chat template](/docs/template-chat) or any of the domain templates directly.
|
|
48
48
|
|
|
49
49
|
Live demo: [dispatch.agent-native.com](https://dispatch.agent-native.com).
|
|
50
50
|
|
package/docs/content/tracking.md
CHANGED
|
@@ -138,7 +138,7 @@ Call `track()` from action handlers to record user or agent activity:
|
|
|
138
138
|
|
|
139
139
|
```ts
|
|
140
140
|
// actions/create-project.ts
|
|
141
|
-
import { defineAction } from "@agent-native/core";
|
|
141
|
+
import { defineAction } from "@agent-native/core/action";
|
|
142
142
|
import { track } from "@agent-native/core/tracking";
|
|
143
143
|
import { z } from "zod";
|
|
144
144
|
|
|
@@ -5,15 +5,16 @@ description: "Why most AI apps feel half-built, what makes an app truly agent-na
|
|
|
5
5
|
|
|
6
6
|
# What Is Agent-Native?
|
|
7
7
|
|
|
8
|
-
Agent-native is a way of building software where the AI agent and the
|
|
8
|
+
Agent-native is a way of building software where the AI agent and the product surface around it are **equal partners**. That surface can be one headless action, a rich chat, or a full UI. The important part is that agents and humans share the same actions, database, and state.
|
|
9
9
|
|
|
10
10
|
If you only remember one thing from this page, remember this: most AI apps today stop one step short of being useful, and that gap is the biggest mistake in the space right now.
|
|
11
11
|
|
|
12
12
|
## What it looks like as a user {#what-it-looks-like}
|
|
13
13
|
|
|
14
|
-
Picture
|
|
14
|
+
Picture a background worker, inbox, calendar, form builder, or analytics dashboard. Sometimes there is no custom screen yet: you run one action or one headless app-agent prompt. Sometimes the first screen is chat: you ask what you want, the agent guides setup, shows a table or chart, and opens the right app view. Sometimes chat is docked on the right side of a full application. Across those shapes, you can:
|
|
15
15
|
|
|
16
|
-
- **
|
|
16
|
+
- **Start with the real operation.** One durable action can run from the CLI, HTTP, MCP, A2A, the app-agent loop, and later a UI.
|
|
17
|
+
- **Click anything you'd normally click when there is a UI.** All the buttons, lists, dashboards, keyboard shortcuts — they all call the same operations the agent can call.
|
|
17
18
|
- **Or just ask.** Type "reply to the email from Sara saying I'll be there by 3" into the agent. It opens the right thread, drafts the reply, and shows it to you for approval — exactly as if you'd done it by hand.
|
|
18
19
|
- **See what it sees.** Open an email, and the agent knows which one. Select a chart, and the agent knows which chart. Highlight a paragraph and hit Cmd+I, and the agent acts on just that paragraph.
|
|
19
20
|
- **Watch it work.** As the agent does things — opens views, edits drafts, runs reports — the UI updates in real time. You can stop it, redirect it, or take over with the mouse at any moment.
|
|
@@ -138,7 +139,7 @@ Agent-native apps follow a fork-and-customize model. You start from a **template
|
|
|
138
139
|
|
|
139
140
|
Because it's _your_ app, not shared infrastructure, the agent can safely evolve the code. Your app keeps improving as you use it. See [Templates](/docs/cloneable-saas) for the full story.
|
|
140
141
|
|
|
141
|
-
Not ready to fork a whole template? You can also try agent-native by adding a **skill** to a coding agent you already use — install the Plans skill with `npx @agent-native/core@latest skills add visual-plan`. See [
|
|
142
|
+
Not ready to fork a whole template? You can also try agent-native by adding a **skill** to a coding agent you already use — install the Plans skill with `npx @agent-native/core@latest skills add visual-plan`. See the [Skills Guide](/docs/skills-guide#app-backed-skills).
|
|
142
143
|
|
|
143
144
|
## Composable agents {#composable-agents}
|
|
144
145
|
|
|
@@ -152,7 +153,7 @@ If you're building or extending an agent-native app, here's the central pattern:
|
|
|
152
153
|
|
|
153
154
|
```ts
|
|
154
155
|
// actions/reply-to-email.ts
|
|
155
|
-
import { defineAction } from "@agent-native/core";
|
|
156
|
+
import { defineAction } from "@agent-native/core/action";
|
|
156
157
|
import { z } from "zod";
|
|
157
158
|
|
|
158
159
|
export default defineAction({
|
|
@@ -185,7 +186,7 @@ One action, many surfaces: the agent calls it as a tool, the UI calls it as a ty
|
|
|
185
186
|
|
|
186
187
|
## What's next {#whats-next}
|
|
187
188
|
|
|
188
|
-
- [**Getting Started**](/docs) — pick a template
|
|
189
|
+
- [**Getting Started**](/docs) — start with one action, pick a template, or install a skill
|
|
189
190
|
- [**Agent Surfaces**](/docs/agent-surfaces) — choose headless, rich chat, embedded sidecar, or full app
|
|
190
191
|
- [**Key Concepts**](/docs/key-concepts) — the architecture: SQL, actions, polling sync, context awareness, portability
|
|
191
192
|
- [**Templates**](/docs/cloneable-saas) — templates as complete products you own
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.60.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=22"
|
|
@@ -38,6 +38,14 @@
|
|
|
38
38
|
"./brand-kit": "./dist/brand-kit/index.js",
|
|
39
39
|
"./brand-kit/fig": "./dist/brand-kit/fig/index.js",
|
|
40
40
|
"./data-widgets": "./dist/data-widgets/index.js",
|
|
41
|
+
"./action": {
|
|
42
|
+
"types": "./dist/action.d.ts",
|
|
43
|
+
"default": "./dist/action.js"
|
|
44
|
+
},
|
|
45
|
+
"./action-ui": {
|
|
46
|
+
"types": "./dist/action-ui.d.ts",
|
|
47
|
+
"default": "./dist/action-ui.js"
|
|
48
|
+
},
|
|
41
49
|
"./agent-web": "./dist/agent-web/index.js",
|
|
42
50
|
"./db": "./dist/db/index.js",
|
|
43
51
|
"./db/schema": "./dist/db/schema.js",
|
|
@@ -118,6 +126,7 @@
|
|
|
118
126
|
"./provider-api/actions/query-staged-dataset": "./dist/provider-api/actions/query-staged-dataset.js",
|
|
119
127
|
"./provider-api/actions/list-staged-datasets": "./dist/provider-api/actions/list-staged-datasets.js",
|
|
120
128
|
"./provider-api/actions/delete-staged-dataset": "./dist/provider-api/actions/delete-staged-dataset.js",
|
|
129
|
+
"./provider-api/actions/github-repo-files": "./dist/provider-api/actions/github-repo-files.js",
|
|
121
130
|
"./local-artifacts": {
|
|
122
131
|
"types": "./dist/local-artifacts/index.d.ts",
|
|
123
132
|
"default": "./dist/local-artifacts/index.js"
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Guard: the scaffold template (packages/core/src/templates/default) and
|
|
3
|
-
* templates/
|
|
4
|
-
*
|
|
3
|
+
* templates/chat must ship byte-identical shell files so that scaffolded apps
|
|
4
|
+
* start from exactly the same code as the reference chat template.
|
|
5
5
|
*
|
|
6
6
|
* When you update entry.server.tsx or entry.client.tsx in either location,
|
|
7
7
|
* update the other copy to match (copy in either direction — the content is
|
|
8
8
|
* canonical, not the direction).
|
|
9
9
|
*
|
|
10
10
|
* Sync commands:
|
|
11
|
-
* # scaffold →
|
|
11
|
+
* # scaffold → chat
|
|
12
12
|
* cp packages/core/src/templates/default/app/entry.server.tsx \
|
|
13
|
-
* templates/
|
|
13
|
+
* templates/chat/app/entry.server.tsx
|
|
14
14
|
* cp packages/core/src/templates/default/app/entry.client.tsx \
|
|
15
|
-
* templates/
|
|
15
|
+
* templates/chat/app/entry.client.tsx
|
|
16
16
|
*
|
|
17
|
-
* #
|
|
18
|
-
* cp templates/
|
|
17
|
+
* # chat → scaffold
|
|
18
|
+
* cp templates/chat/app/entry.server.tsx \
|
|
19
19
|
* packages/core/src/templates/default/app/entry.server.tsx
|
|
20
|
-
* cp templates/
|
|
20
|
+
* cp templates/chat/app/entry.client.tsx \
|
|
21
21
|
* packages/core/src/templates/default/app/entry.client.tsx
|
|
22
22
|
*/
|
|
23
23
|
|
|
@@ -40,7 +40,7 @@ function workspaceRoot(): string {
|
|
|
40
40
|
const ROOT = workspaceRoot();
|
|
41
41
|
|
|
42
42
|
const SCAFFOLD_DIR = path.join(ROOT, "packages/core/src/templates/default/app");
|
|
43
|
-
const
|
|
43
|
+
const CHAT_TEMPLATE_DIR = path.join(ROOT, "templates/chat/app");
|
|
44
44
|
|
|
45
45
|
function md5(content: string): string {
|
|
46
46
|
return crypto.createHash("md5").update(content).digest("hex");
|
|
@@ -51,7 +51,7 @@ function readFile(dir: string, filename: string): string {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
|
-
* Shell files that must be byte-identical between scaffold and
|
|
54
|
+
* Shell files that must be byte-identical between scaffold and chat template.
|
|
55
55
|
* Each entry is [filename, reason]:
|
|
56
56
|
* entry.server.tsx — both import the app-local React Router ServerRouter
|
|
57
57
|
* and pass it into the shared core handler; any future change to the
|
|
@@ -70,20 +70,20 @@ const SHELL_FILES: Array<[string, string]> = [
|
|
|
70
70
|
],
|
|
71
71
|
];
|
|
72
72
|
|
|
73
|
-
describe("
|
|
74
|
-
it("keeps scaffold and
|
|
73
|
+
describe("chat-shell sync guard", () => {
|
|
74
|
+
it("keeps scaffold and chat shell files byte-identical", () => {
|
|
75
75
|
const violations: string[] = [];
|
|
76
76
|
|
|
77
77
|
for (const [filename] of SHELL_FILES) {
|
|
78
78
|
const scaffoldContent = readFile(SCAFFOLD_DIR, filename);
|
|
79
|
-
const
|
|
79
|
+
const chatContent = readFile(CHAT_TEMPLATE_DIR, filename);
|
|
80
80
|
|
|
81
81
|
const scaffoldHash = md5(scaffoldContent);
|
|
82
|
-
const
|
|
82
|
+
const chatHash = md5(chatContent);
|
|
83
83
|
|
|
84
|
-
if (scaffoldHash !==
|
|
84
|
+
if (scaffoldHash !== chatHash) {
|
|
85
85
|
violations.push(
|
|
86
|
-
`${filename}: scaffold (packages/core/src/templates/default/app) and
|
|
86
|
+
`${filename}: scaffold (packages/core/src/templates/default/app) and chat (templates/chat/app) differ.\n` +
|
|
87
87
|
` Update both to match or copy one to the other.`,
|
|
88
88
|
);
|
|
89
89
|
}
|
|
@@ -92,7 +92,7 @@ describe("starter-shell sync guard", () => {
|
|
|
92
92
|
expect(
|
|
93
93
|
violations,
|
|
94
94
|
[
|
|
95
|
-
"Scaffold/
|
|
95
|
+
"Scaffold/chat shell files have drifted.",
|
|
96
96
|
"Copy the updated file to the other location to fix.",
|
|
97
97
|
"",
|
|
98
98
|
...violations,
|
|
@@ -100,10 +100,10 @@ describe("starter-shell sync guard", () => {
|
|
|
100
100
|
).toEqual([]);
|
|
101
101
|
});
|
|
102
102
|
|
|
103
|
-
it("every listed shell file exists in both scaffold and
|
|
103
|
+
it("every listed shell file exists in both scaffold and chat template", () => {
|
|
104
104
|
for (const [filename, reason] of SHELL_FILES) {
|
|
105
105
|
const scaffoldPath = path.join(SCAFFOLD_DIR, filename);
|
|
106
|
-
const
|
|
106
|
+
const chatPath = path.join(CHAT_TEMPLATE_DIR, filename);
|
|
107
107
|
|
|
108
108
|
expect(
|
|
109
109
|
fs.existsSync(scaffoldPath),
|
|
@@ -111,8 +111,8 @@ describe("starter-shell sync guard", () => {
|
|
|
111
111
|
).toBe(true);
|
|
112
112
|
|
|
113
113
|
expect(
|
|
114
|
-
fs.existsSync(
|
|
115
|
-
`${filename} missing from
|
|
114
|
+
fs.existsSync(chatPath),
|
|
115
|
+
`${filename} missing from chat template (${reason})`,
|
|
116
116
|
).toBe(true);
|
|
117
117
|
}
|
|
118
118
|
});
|
|
@@ -49,7 +49,7 @@ Use `defineAction` with a Zod schema (required for new actions):
|
|
|
49
49
|
```ts
|
|
50
50
|
// actions/list-meals.ts
|
|
51
51
|
import { z } from "zod";
|
|
52
|
-
import { defineAction } from "@agent-native/core";
|
|
52
|
+
import { defineAction } from "@agent-native/core/action";
|
|
53
53
|
import { getDb } from "../server/db/index.js";
|
|
54
54
|
import { meals } from "../server/db/schema.js";
|
|
55
55
|
|
|
@@ -352,7 +352,7 @@ This still works but is not auto-exposed as HTTP. Prefer `defineAction` for all
|
|
|
352
352
|
credentials belong in the encrypted secrets/credential/OAuth stores, never as
|
|
353
353
|
hardcoded literals or shared env fallbacks.
|
|
354
354
|
- **Use `fail()`** for user-friendly error messages (exits with message, no stack trace).
|
|
355
|
-
- **Import from `@agent-native/core`**
|
|
355
|
+
- **Import action primitives from `@agent-native/core/action`** and CLI helpers such as `parseArgs()` from `@agent-native/core` — do not redefine framework utilities locally.
|
|
356
356
|
- **Do not re-export actions as REST.** The mounted `/_agent-native/actions/:name` endpoint is the REST surface; duplicating it under `/api/*` creates drift and hides the operation from agents.
|
|
357
357
|
|
|
358
358
|
## Common Patterns
|
|
@@ -361,7 +361,7 @@ This still works but is not auto-exposed as HTTP. Prefer `defineAction` for all
|
|
|
361
361
|
|
|
362
362
|
```ts
|
|
363
363
|
import { z } from "zod";
|
|
364
|
-
import { defineAction } from "@agent-native/core";
|
|
364
|
+
import { defineAction } from "@agent-native/core/action";
|
|
365
365
|
|
|
366
366
|
export default defineAction({
|
|
367
367
|
description: "List calendar events",
|
|
@@ -380,7 +380,7 @@ export default defineAction({
|
|
|
380
380
|
|
|
381
381
|
```ts
|
|
382
382
|
import { z } from "zod";
|
|
383
|
-
import { defineAction } from "@agent-native/core";
|
|
383
|
+
import { defineAction } from "@agent-native/core/action";
|
|
384
384
|
|
|
385
385
|
export default defineAction({
|
|
386
386
|
description: "Log a meal",
|
|
@@ -400,7 +400,7 @@ export default defineAction({
|
|
|
400
400
|
|
|
401
401
|
```ts
|
|
402
402
|
import { z } from "zod";
|
|
403
|
-
import { defineAction } from "@agent-native/core";
|
|
403
|
+
import { defineAction } from "@agent-native/core/action";
|
|
404
404
|
|
|
405
405
|
export default defineAction({
|
|
406
406
|
description: "Navigate the UI to a view",
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-native-docs
|
|
3
|
+
description: >-
|
|
4
|
+
How to find version-matched Agent Native framework docs bundled in
|
|
5
|
+
node_modules. Use before implementing or answering questions about
|
|
6
|
+
@agent-native/core APIs, generated apps, workspaces, or advanced features.
|
|
7
|
+
metadata:
|
|
8
|
+
internal: true
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Agent Native Docs Lookup
|
|
12
|
+
|
|
13
|
+
## Rule
|
|
14
|
+
|
|
15
|
+
Before implementing or explaining non-trivial Agent Native behavior, read the
|
|
16
|
+
version-matched docs installed with `@agent-native/core`.
|
|
17
|
+
|
|
18
|
+
## Why
|
|
19
|
+
|
|
20
|
+
Generated apps and workspaces may be on a different framework version than the
|
|
21
|
+
public docs or model memory. The installed package is the source that matches
|
|
22
|
+
the app in front of you.
|
|
23
|
+
|
|
24
|
+
## How
|
|
25
|
+
|
|
26
|
+
From a generated app directory:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pnpm action docs-search --query "<feature>"
|
|
30
|
+
pnpm action docs-search --slug <slug>
|
|
31
|
+
pnpm action docs-search --list
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The headless `pnpm agent` loop and built-in app agent also expose a read-only
|
|
35
|
+
`docs-search` tool with the same `query`, `slug`, and `list` options.
|
|
36
|
+
|
|
37
|
+
If the action runner is unavailable, search the package docs directly:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
rg -n "actions|automations|a2a|sharing" node_modules/@agent-native/core/docs
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Then read `node_modules/@agent-native/core/docs/AGENTS.md` or the matching file
|
|
44
|
+
under `node_modules/@agent-native/core/docs/content/`.
|
|
45
|
+
|
|
46
|
+
## Useful Slugs
|
|
47
|
+
|
|
48
|
+
| Need | Slugs |
|
|
49
|
+
| --- | --- |
|
|
50
|
+
| Actions and typed client calls | `actions`, `client` |
|
|
51
|
+
| SQL, auth, access, sharing | `database`, `authentication`, `security`, `sharing` |
|
|
52
|
+
| UI state visible to the agent | `context-awareness` |
|
|
53
|
+
| Headless and chat-first apps | `pure-agent-apps`, `agent-surfaces`, `using-your-agent` |
|
|
54
|
+
| Automations and schedules | `automations`, `recurring-jobs` |
|
|
55
|
+
| Cross-app and external agents | `a2a-protocol`, `external-agents`, `mcp-protocol`, `mcp-apps` |
|
|
56
|
+
| Skills and instructions | `skills-guide`, `writing-agent-instructions` |
|
|
57
|
+
|
|
58
|
+
## Don't
|
|
59
|
+
|
|
60
|
+
- Do not rely on memory for framework APIs when package docs are present.
|
|
61
|
+
- Do not add custom REST wrappers for app data before reading `actions`.
|
|
62
|
+
- Do not add inline LLM calls before reading `using-your-agent` and
|
|
63
|
+
`agent-surfaces`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# {{APP_NAME}} — Agent Guide
|
|
2
2
|
|
|
3
|
-
This app follows the agent-native core philosophy: the agent and UI are equal partners. Everything the UI can do, the agent can do via actions. The agent always knows what you're looking at via application state.
|
|
3
|
+
This app follows the agent-native core philosophy: the agent and UI are equal partners. Everything the UI can do, the agent can do via actions. The agent always knows what you're looking at via application state. Use the framework docs lookup below for version-matched Agent Native documentation.
|
|
4
4
|
|
|
5
5
|
This is an **@agent-native/core** application -- the AI agent and UI share state through a SQL database, with SSE for in-process live sync and polling as the cross-process/serverless fallback.
|
|
6
6
|
|
|
@@ -13,6 +13,26 @@ This is an **@agent-native/core** application -- the AI agent and UI share state
|
|
|
13
13
|
5. **Agent can update code** -- The agent can modify this app's source code directly.
|
|
14
14
|
6. **No hardcoded secrets or private data** -- Never put API keys, tokens, webhook URLs, signing secrets, private Builder/internal data, customer data, or credential-looking literals in source, docs, tests, fixtures, prompts, screenshots, application state, action responses, or generated content. Use secrets/OAuth/runtime configuration and obvious placeholders in examples.
|
|
15
15
|
|
|
16
|
+
## Framework Docs Lookup
|
|
17
|
+
|
|
18
|
+
Version-matched Agent Native docs ship with `@agent-native/core` in
|
|
19
|
+
`node_modules/@agent-native/core/docs`.
|
|
20
|
+
|
|
21
|
+
- Use `pnpm action docs-search --query "<topic>"` to search framework docs,
|
|
22
|
+
bundled `AGENTS.md`, and codebase skills.
|
|
23
|
+
- Use `pnpm action docs-search --slug <slug>` to read a full page. Start with
|
|
24
|
+
`actions`, `database`, `context-awareness`, `client`, `automations`,
|
|
25
|
+
`recurring-jobs`, `a2a-protocol`, `external-agents`, `mcp-protocol`,
|
|
26
|
+
`sharing`, `security`, `pure-agent-apps`, or `agent-surfaces`.
|
|
27
|
+
- Use `pnpm action docs-search --list` to see everything available.
|
|
28
|
+
- If the action runner is unavailable, read
|
|
29
|
+
`node_modules/@agent-native/core/docs/AGENTS.md` and search
|
|
30
|
+
`node_modules/@agent-native/core/docs/content/` directly with `rg`.
|
|
31
|
+
|
|
32
|
+
Read these local package docs before implementing advanced Agent Native
|
|
33
|
+
features. Prefer this app's own `AGENTS.md` and `.agents/skills/` for
|
|
34
|
+
app-specific rules.
|
|
35
|
+
|
|
16
36
|
### Database Code
|
|
17
37
|
|
|
18
38
|
- Define tables with `@agent-native/core/db/schema` helpers (`table`, `text`, `integer`, `real`, `now`, sharing helpers), never `drizzle-orm/sqlite-core` or `drizzle-orm/pg-core`.
|
|
@@ -115,6 +135,7 @@ Skills in `.agents/skills/` provide detailed guidance for each architectural rul
|
|
|
115
135
|
|
|
116
136
|
| Skill | When to read |
|
|
117
137
|
| --------------------- | --------------------------------------------------------------------------------- |
|
|
138
|
+
| `agent-native-docs` | Before using advanced Agent Native framework APIs or generated-app features |
|
|
118
139
|
| `adding-a-feature` | **Read first when adding ANY new feature** — the four-area parity checklist |
|
|
119
140
|
| `real-time-sync` | Before wiring data fetching for anything the agent can mutate (must auto-refresh) |
|
|
120
141
|
| `storing-data` | Before storing or reading any app state |
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-native-docs
|
|
3
|
+
description: >-
|
|
4
|
+
How to find version-matched Agent Native framework docs bundled in
|
|
5
|
+
node_modules. Use before implementing or answering questions about
|
|
6
|
+
@agent-native/core APIs, generated apps, workspaces, or advanced features.
|
|
7
|
+
metadata:
|
|
8
|
+
internal: true
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Agent Native Docs Lookup
|
|
12
|
+
|
|
13
|
+
## Rule
|
|
14
|
+
|
|
15
|
+
Before implementing or explaining non-trivial Agent Native behavior, read the
|
|
16
|
+
version-matched docs installed with `@agent-native/core`.
|
|
17
|
+
|
|
18
|
+
## Why
|
|
19
|
+
|
|
20
|
+
Generated apps and workspaces may be on a different framework version than the
|
|
21
|
+
public docs or model memory. The installed package is the source that matches
|
|
22
|
+
the app in front of you.
|
|
23
|
+
|
|
24
|
+
## How
|
|
25
|
+
|
|
26
|
+
From a generated app directory:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pnpm action docs-search --query "<feature>"
|
|
30
|
+
pnpm action docs-search --slug <slug>
|
|
31
|
+
pnpm action docs-search --list
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The headless `pnpm agent` loop and built-in app agent also expose a read-only
|
|
35
|
+
`docs-search` tool with the same `query`, `slug`, and `list` options.
|
|
36
|
+
|
|
37
|
+
If the action runner is unavailable, search the package docs directly:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
rg -n "actions|automations|a2a|sharing" node_modules/@agent-native/core/docs
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Then read `node_modules/@agent-native/core/docs/AGENTS.md` or the matching file
|
|
44
|
+
under `node_modules/@agent-native/core/docs/content/`.
|
|
45
|
+
|
|
46
|
+
## Useful Slugs
|
|
47
|
+
|
|
48
|
+
| Need | Slugs |
|
|
49
|
+
| --- | --- |
|
|
50
|
+
| Actions and typed client calls | `actions`, `client` |
|
|
51
|
+
| SQL, auth, access, sharing | `database`, `authentication`, `security`, `sharing` |
|
|
52
|
+
| UI state visible to the agent | `context-awareness` |
|
|
53
|
+
| Headless and chat-first apps | `pure-agent-apps`, `agent-surfaces`, `using-your-agent` |
|
|
54
|
+
| Automations and schedules | `automations`, `recurring-jobs` |
|
|
55
|
+
| Cross-app and external agents | `a2a-protocol`, `external-agents`, `mcp-protocol`, `mcp-apps` |
|
|
56
|
+
| Skills and instructions | `skills-guide`, `writing-agent-instructions` |
|
|
57
|
+
|
|
58
|
+
## Don't
|
|
59
|
+
|
|
60
|
+
- Do not rely on memory for framework APIs when package docs are present.
|
|
61
|
+
- Do not add custom REST wrappers for app data before reading `actions`.
|
|
62
|
+
- Do not add inline LLM calls before reading `using-your-agent` and
|
|
63
|
+
`agent-surfaces`.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# {{APP_NAME}} - Agent Guide
|
|
2
|
+
|
|
3
|
+
This is a headless Agent Native app. It starts with actions instead of a browser UI, so the first useful primitive is callable from the agent, CLI, and action runtime.
|
|
4
|
+
|
|
5
|
+
This app is not stateless. The Agent Native runtime uses SQL-backed stores for app state, settings, auth/session data, resources, and other framework capabilities when those surfaces are used. Local development can use SQLite at `data/app.db`; hosted or long-lived deployments should set `DATABASE_URL` to a persistent database.
|
|
6
|
+
|
|
7
|
+
## Working In This App
|
|
8
|
+
|
|
9
|
+
- Prefer actions in `actions/` for every app operation. Do not create REST wrappers around actions.
|
|
10
|
+
- Keep action inputs validated with Zod and return structured data, not JSON strings.
|
|
11
|
+
- Do not hardcode API keys, tokens, webhook URLs, private data, or credential-looking literals.
|
|
12
|
+
- There is intentionally no `app/` UI shell in this scaffold. When you need a browser UI, use the Chat template as the UI on-ramp and keep `agent-native add` for integration blueprints.
|
|
13
|
+
|
|
14
|
+
## Framework Docs Lookup
|
|
15
|
+
|
|
16
|
+
Version-matched Agent Native docs ship with `@agent-native/core` in
|
|
17
|
+
`node_modules/@agent-native/core/docs`.
|
|
18
|
+
|
|
19
|
+
- Use `pnpm action docs-search --query "<topic>"` to search framework docs,
|
|
20
|
+
bundled `AGENTS.md`, and codebase skills.
|
|
21
|
+
- Use `pnpm action docs-search --slug <slug>` to read a full page. Start with
|
|
22
|
+
`actions`, `pure-agent-apps`, `automations`, `recurring-jobs`,
|
|
23
|
+
`a2a-protocol`, `external-agents`, `mcp-protocol`, `database`, `sharing`,
|
|
24
|
+
and `security` for advanced headless workflows.
|
|
25
|
+
- Use `pnpm action docs-search --list` to see everything available.
|
|
26
|
+
- If the action runner is unavailable, read
|
|
27
|
+
`node_modules/@agent-native/core/docs/AGENTS.md` and search
|
|
28
|
+
`node_modules/@agent-native/core/docs/content/` directly with `rg`.
|
|
29
|
+
|
|
30
|
+
Read these local package docs before implementing advanced Agent Native
|
|
31
|
+
features. Prefer this app's own `AGENTS.md` for app-specific rules.
|
|
32
|
+
|
|
33
|
+
## Actions
|
|
34
|
+
|
|
35
|
+
| Action | Args | Purpose |
|
|
36
|
+
| ----------- | ----------------- | ----------------------- |
|
|
37
|
+
| `hello` | `[--name <name>]` | Return a greeting |
|
|
38
|
+
| `db-schema` | | Show SQL schema |
|
|
39
|
+
| `db-query` | `--sql "SELECT"` | Run a scoped SELECT |
|
|
40
|
+
| `db-exec` | `--sql "UPDATE"` | Last-resort maintenance |
|
|
41
|
+
|
|
42
|
+
Run actions from this app root:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pnpm action hello --name Builder
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Run the app-agent loop against those actions:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pnpm agent "Call the hello action for Builder and explain the result"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Skills
|
|
55
|
+
|
|
56
|
+
Skills in `.agents/skills/` provide detailed guidance. Read
|
|
57
|
+
`.agents/skills/agent-native-docs/SKILL.md` before using advanced Agent Native
|
|
58
|
+
framework APIs, generated-app features, automations, A2A, sharing, or MCP.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Developing {{APP_NAME}}
|
|
2
|
+
|
|
3
|
+
Install dependencies, then run the hello action:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
pnpm install
|
|
7
|
+
pnpm action hello --name Builder
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Then run the production app-agent loop against this folder:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
pnpm agent "Call hello for Builder"
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Useful checks:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pnpm typecheck
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
This scaffold intentionally has no `app/` directory, React Router config, Vite config, or dev server. Add those only when you are ready for a UI surface; the Chat template is the UI-first scaffold.
|