@agent-native/dispatch 0.11.4 → 0.11.6
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/README.md +57 -120
- package/dist/actions/create-vault-secret.d.ts.map +1 -1
- package/dist/actions/create-vault-secret.js +5 -0
- package/dist/actions/create-vault-secret.js.map +1 -1
- package/dist/actions/update-vault-secret.d.ts.map +1 -1
- package/dist/actions/update-vault-secret.js +3 -0
- package/dist/actions/update-vault-secret.js.map +1 -1
- package/dist/routes/pages/_index.d.ts +7 -0
- package/dist/routes/pages/_index.d.ts.map +1 -1
- package/dist/routes/pages/_index.js +9 -2
- package/dist/routes/pages/_index.js.map +1 -1
- package/dist/routes/pages/overview.d.ts +15 -2
- package/dist/routes/pages/overview.d.ts.map +1 -1
- package/dist/routes/pages/overview.js +11 -1
- package/dist/routes/pages/overview.js.map +1 -1
- package/package.json +2 -2
- package/src/actions/create-vault-secret.ts +5 -0
- package/src/actions/update-vault-secret.ts +3 -0
- package/src/routes/pages/_index.tsx +12 -3
- package/src/routes/pages/overview.tsx +14 -1
package/README.md
CHANGED
|
@@ -1,33 +1,8 @@
|
|
|
1
1
|
# Agent-Native
|
|
2
2
|
|
|
3
|
-
### Open-source framework for agentic applications you own.
|
|
4
|
-
|
|
5
|
-
Don't choose between rich user interfaces and autonomous agents. Every Agent-Native app is both.
|
|
6
|
-
|
|
7
|
-
## Agents and UIs — Fully Connected
|
|
8
|
-
|
|
9
|
-
The agent and the UI are equal citizens of the same system. Every action works both ways — click it or ask for it.
|
|
10
|
-
|
|
11
|
-

|
|
12
|
-
|
|
13
|
-
- **Everything syncs** — Agent and UI share one database and one state. Changes from either side show up instantly on the other.
|
|
14
|
-
- **Real-time multiplayer** — Humans and agents collaborate in the same document simultaneously: CRDT merging, live presence (cursors, selection rings, who's on which slide), and the agent as a first-class peer editor. Works on any SQL database and any host, including serverless.
|
|
15
|
-
- **Context-aware** — The agent knows what you're looking at. Select text, hit Cmd+I, and tell it what to do.
|
|
16
|
-
- **Per-user workspace** — Skills, memory, instructions, sub-agents, and MCP servers — SQL-backed, customizable per user. Claude-Code-level flexibility, SaaS-grade economics.
|
|
17
|
-
- **Agents call agents** — Tag another agent from any app. They discover each other over A2A and take action across your stack.
|
|
18
|
-
- **Reusable integrations** — Connect a provider once in Dispatch, keep secret values in the vault, then grant apps like Brain, Analytics, Mail, and Dispatch access to the shared account metadata and credential refs.
|
|
19
|
-
- **Three shapes** — Build the same agent as a headless API, a rich chat experience, or a full application where agent and UI stay in sync.
|
|
20
|
-
- **Apps that improve themselves** — Your apps get better on their own. The agent can add features, fix bugs, and refine the UI over time.
|
|
21
|
-
- **Any database, any host** — Any SQL database Drizzle supports. Any hosting target Nitro supports. No lock-in.
|
|
22
|
-
- **Bring the agent surface you need** — MCP-compatible hosts can call your apps, coding agents can install skills, native chat renders reusable app outputs, and BYO agent runtimes can stream into the Agent-Native chat shell.
|
|
23
|
-
|
|
24
3
|
## The framework for agent-native apps
|
|
25
4
|
|
|
26
|
-
Agent-Native is an open-source framework for building robust agents that
|
|
27
|
-
|
|
28
|
-
It gives you primitives for product-grade agentic software: shared actions, SQL-backed state, identity, tools, skills, jobs, observability, and UI surfaces that all work together.
|
|
29
|
-
|
|
30
|
-
Backend agnostic: bring your own database, hosting provider, model stack, and app code.
|
|
5
|
+
Agent-Native is an open-source framework for building robust agents that act inside real apps, not just chat next to them. It gives you primitives for product-grade agentic software: shared actions, SQL-backed state, identity, tools, skills, jobs, observability, and UI surfaces that all work together. Bring your own database, hosting provider, model stack, and app code.
|
|
31
6
|
|
|
32
7
|
```ts
|
|
33
8
|
// One action powers UI, agent, HTTP, MCP, A2A, and CLI.
|
|
@@ -42,58 +17,51 @@ export default defineAction({
|
|
|
42
17
|
});
|
|
43
18
|
```
|
|
44
19
|
|
|
45
|
-
- **Actions
|
|
46
|
-
- **Agent runtime
|
|
47
|
-
- **Backend agnostic
|
|
20
|
+
- **Actions**: Define work once. Use it from UI, agent, API, MCP, A2A, and CLI.
|
|
21
|
+
- **Agent runtime**: Chat, tools, skills, memory, jobs, observability, and handoffs ship together.
|
|
22
|
+
- **Backend agnostic**: Plug in any Drizzle-supported SQL database and Nitro-compatible host.
|
|
48
23
|
|
|
49
|
-
##
|
|
50
|
-
|
|
51
|
-
Agent-Native primitives let you choose how much UI to put around an agent without rebuilding the agent contract:
|
|
52
|
-
|
|
53
|
-
| Shape | What you ship | Same primitives underneath |
|
|
54
|
-
| ------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
|
|
55
|
-
| **Headless** | Call the agent and actions from code, CLI, HTTP, MCP, or A2A. | `defineAction`, auth, skills, memory, jobs, observability |
|
|
56
|
-
| **Rich chat** | A standalone or embedded chat with native tables, charts, approvals, setup flows, and tool results. | Shared chat runtime, BYO runtime adapters, action-declared native renderers |
|
|
57
|
-
| **Whole app** | A full SaaS/product UI where chat can start central, move to the sidebar, and stay synced with app state. | SQL state, actions, context awareness, deep links, live sync |
|
|
24
|
+
## Templates
|
|
58
25
|
|
|
59
|
-
|
|
26
|
+
Start with a full featured template. Each one is a complete, 100% free and open-source SaaS app: cloneable, not scaffolded, except you own the code and can customize everything.
|
|
60
27
|
|
|
61
|
-
|
|
28
|
+
<table>
|
|
29
|
+
<tr>
|
|
30
|
+
<td width="33%" align="center" valign="top">
|
|
62
31
|
|
|
63
|
-
|
|
32
|
+
**Clips**
|
|
64
33
|
|
|
65
|
-
|
|
34
|
+
<a href="https://agent-native.com/templates/clips"><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F189ebd9b2f2b4f0ead3b33138d4e4c10?format=webp&width=800" alt="Clips template" width="100%" /></a>
|
|
66
35
|
|
|
67
|
-
|
|
36
|
+
**Agent-Native Loom + Jam**
|
|
68
37
|
|
|
69
|
-
|
|
70
|
-
npx @agent-native/core@latest skills add visual-plan
|
|
71
|
-
```
|
|
38
|
+
Record your screen with auto-transcripts and captured browser debug logs, share a link, and let an agent read the transcript, see timestamped frames, and fix the bug.
|
|
72
39
|
|
|
73
|
-
|
|
40
|
+
</td>
|
|
41
|
+
<td width="33%" align="center" valign="top">
|
|
74
42
|
|
|
75
|
-
|
|
76
|
-
- **`/visual-recap`** — after changes land, it turns a PR or git diff into a high-altitude visual recap: schema, API, and file changes rendered as grounded before/after blocks with a shareable review link, instead of scrolling a raw diff.
|
|
43
|
+
**Plans**
|
|
77
44
|
|
|
78
|
-
|
|
45
|
+
<a href="https://agent-native.com/templates/plan"><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb6f4213ac7cc42eeb10c12e8ccda8936?format=webp&width=800" alt="Plans template" width="100%" /></a>
|
|
79
46
|
|
|
80
|
-
|
|
47
|
+
**Visual plan mode for coding agents**
|
|
81
48
|
|
|
82
|
-
|
|
49
|
+
Install `/visual-plan` and `/visual-recap` so your coding agent can plan before it builds and recap changes after they land. High-level code reviews with diagrams, wireframes, annotations, and review links.
|
|
83
50
|
|
|
84
|
-
|
|
85
|
-
<tr>
|
|
51
|
+
</td>
|
|
86
52
|
<td width="33%" align="center" valign="top">
|
|
87
53
|
|
|
88
|
-
**
|
|
54
|
+
**Design**
|
|
89
55
|
|
|
90
|
-
<a href="https://agent-native.com/templates/
|
|
56
|
+
<a href="https://agent-native.com/templates/design"><img src="https://cdn.builder.io/api/v1/image/assets%2F348da13fcd8b414c87de9066196f7266%2F961bedb713a94463b834c1f2f4643bcf?format=webp&width=800" alt="Design template" width="100%" /></a>
|
|
91
57
|
|
|
92
|
-
**Agent-Native
|
|
58
|
+
**Agent-Native design prototyping**
|
|
93
59
|
|
|
94
|
-
|
|
60
|
+
Generate interactive HTML prototypes, compare variants, refine controls, and export the result.
|
|
95
61
|
|
|
96
62
|
</td>
|
|
63
|
+
</tr>
|
|
64
|
+
<tr>
|
|
97
65
|
<td width="33%" align="center" valign="top">
|
|
98
66
|
|
|
99
67
|
**Content**
|
|
@@ -107,19 +75,6 @@ Edit local Markdown/MDX files, generate rich interactive custom blocks, and draf
|
|
|
107
75
|
</td>
|
|
108
76
|
<td width="33%" align="center" valign="top">
|
|
109
77
|
|
|
110
|
-
**Plans**
|
|
111
|
-
|
|
112
|
-
<a href="https://agent-native.com/templates/plan"><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb6f4213ac7cc42eeb10c12e8ccda8936?format=webp&width=800" alt="Plans template" width="100%" /></a>
|
|
113
|
-
|
|
114
|
-
**Visual plan mode for coding agents**
|
|
115
|
-
|
|
116
|
-
Install `/visual-plan` and `/visual-recap` so your coding agent can plan before it builds and recap changes after they land — high-level code reviews with diagrams, wireframes, annotations, and review links.
|
|
117
|
-
|
|
118
|
-
</td>
|
|
119
|
-
</tr>
|
|
120
|
-
<tr>
|
|
121
|
-
<td width="33%" align="center" valign="top">
|
|
122
|
-
|
|
123
78
|
**Slides**
|
|
124
79
|
|
|
125
80
|
<a href="https://agent-native.com/templates/slides"><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2c09b451d40c4a74a89a38d69170c2d8?format=webp&width=800" alt="Slides template" width="100%" /></a>
|
|
@@ -137,79 +92,61 @@ Generate and edit React-based presentations via prompt or point-and-click.
|
|
|
137
92
|
|
|
138
93
|
**Agent-Native Amplitude, Mixpanel**
|
|
139
94
|
|
|
140
|
-
Connect analytics data sources, prompt for real charts, and build reusable dashboards.
|
|
141
|
-
|
|
142
|
-
</td>
|
|
143
|
-
<td width="33%" align="center" valign="top">
|
|
144
|
-
|
|
145
|
-
**Clips**
|
|
146
|
-
|
|
147
|
-
<a href="https://agent-native.com/templates/clips"><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F678be5a501a14ab8a508e5f7bc92c468?format=webp&width=800" alt="Clips template" width="100%" /></a>
|
|
148
|
-
|
|
149
|
-
**Agent-Native Loom**
|
|
150
|
-
|
|
151
|
-
Record your screen with auto-transcripts, shareable links, and an agent that summarizes, captions, and edits clips on demand.
|
|
95
|
+
Connect analytics data sources, prompt for real charts, and build reusable dashboards.
|
|
152
96
|
|
|
153
97
|
</td>
|
|
154
98
|
</tr>
|
|
155
99
|
</table>
|
|
156
100
|
|
|
157
|
-
Every template is a complete cloneable SaaS — fork it, customize it with the agent, own it. Try them with example data before connecting your own sources.
|
|
158
|
-
|
|
159
101
|
View the full template gallery at **[agent-native.com/templates](https://agent-native.com/templates)**.
|
|
160
102
|
|
|
161
|
-
##
|
|
103
|
+
## Agents and UIs, Fully Connected
|
|
162
104
|
|
|
163
|
-
|
|
105
|
+
The agent and the UI are equal citizens of one system. Every action works both ways: click it or ask for it.
|
|
164
106
|
|
|
165
|
-
|
|
166
|
-
npx @agent-native/core@latest create my-platform
|
|
167
|
-
cd my-platform
|
|
168
|
-
pnpm install
|
|
169
|
-
pnpm dev
|
|
170
|
-
```
|
|
107
|
+

|
|
171
108
|
|
|
172
|
-
|
|
109
|
+
- **Everything syncs**: One database, one state. Changes from either side show up instantly on the other.
|
|
110
|
+
- **Real-time multiplayer**: Humans and agents edit the same document together, with the agent as a first-class peer.
|
|
111
|
+
- **Context-aware**: The agent knows what you're looking at. Select text, hit Cmd+I, and tell it what to do.
|
|
112
|
+
- **Agents call agents**: Tag another agent from any app and they coordinate over A2A.
|
|
113
|
+
- **Self-improving**: The agent can add features, fix bugs, and refine the UI over time.
|
|
173
114
|
|
|
174
|
-
|
|
115
|
+
## Try it with a skill
|
|
116
|
+
|
|
117
|
+
Don't want to scaffold a whole app yet? Add visual planning and PR recaps to Claude Code, Codex, Cursor, Pi, OpenCode, GitHub Copilot / VS Code, and similar agents with one command:
|
|
175
118
|
|
|
176
119
|
```bash
|
|
177
|
-
npx @agent-native/core@latest
|
|
120
|
+
npx @agent-native/core@latest skills add visual-plan
|
|
178
121
|
```
|
|
179
122
|
|
|
180
|
-
|
|
123
|
+

|
|
181
124
|
|
|
182
|
-
|
|
125
|
+
You get two slash commands:
|
|
183
126
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
├── package.json # declares `agent-native.workspaceCore`
|
|
187
|
-
├── pnpm-workspace.yaml
|
|
188
|
-
├── .env # shared secrets: ANTHROPIC_API_KEY, BUILDER_PRIVATE_KEY, A2A_SECRET, ...
|
|
189
|
-
├── packages/
|
|
190
|
-
│ └── shared/ # optional shared custom code
|
|
191
|
-
└── apps/
|
|
192
|
-
├── mail/
|
|
193
|
-
├── calendar/
|
|
194
|
-
└── forms/
|
|
195
|
-
```
|
|
127
|
+
- **`/visual-plan`**: before the agent writes code, it opens a structured, reviewable plan with inline diagrams, UI wireframes, file-by-file implementation maps, and annotations you can comment on and approve.
|
|
128
|
+
- **`/visual-recap`**: after changes land, it turns a PR or git diff into a high-altitude visual recap with a shareable review link instead of a raw diff.
|
|
196
129
|
|
|
197
|
-
|
|
130
|
+
See the **[Skills Guide](https://agent-native.com/docs/skills-guide#app-backed-skills)** for more.
|
|
198
131
|
|
|
199
|
-
|
|
200
|
-
npx @agent-native/core@latest add-app notes --template content
|
|
201
|
-
```
|
|
132
|
+
## Quick Start
|
|
202
133
|
|
|
203
|
-
|
|
134
|
+
One command to start a new project locally.
|
|
204
135
|
|
|
205
136
|
```bash
|
|
206
|
-
npx @agent-native/core@latest
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
137
|
+
npx @agent-native/core@latest create my-app
|
|
138
|
+
cd my-app
|
|
139
|
+
pnpm install
|
|
140
|
+
pnpm dev
|
|
210
141
|
```
|
|
211
142
|
|
|
212
|
-
|
|
143
|
+
`create` first asks how you want to start:
|
|
144
|
+
|
|
145
|
+
- **Full template(s)**: clone one or more complete apps into a workspace. Pick Mail + Calendar + Forms and you get all three wired up and sharing auth.
|
|
146
|
+
- **Chat**: a single app with a minimal chat UI and the browser shell already wired, the simplest way to get a UI.
|
|
147
|
+
- **Headless**: a single action-first app with no UI shell. The CLI walks you through calling your first action and agent, and you can add a UI later.
|
|
148
|
+
|
|
149
|
+
Prefer flags? `create my-app --template mail`, `--headless`, or `--standalone` skip the prompt.
|
|
213
150
|
|
|
214
151
|
## The Best of Both Worlds
|
|
215
152
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-vault-secret.d.ts","sourceRoot":"","sources":["../../src/actions/create-vault-secret.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAIA,
|
|
1
|
+
{"version":3,"file":"create-vault-secret.d.ts","sourceRoot":"","sources":["../../src/actions/create-vault-secret.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAIA,wBAsBG"}
|
|
@@ -16,6 +16,11 @@ export default defineAction({
|
|
|
16
16
|
.describe("Provider grouping tag, e.g. google, sendgrid, slack"),
|
|
17
17
|
description: z.string().optional().describe("Optional description"),
|
|
18
18
|
}),
|
|
19
|
+
// This action's whole purpose is to carry a secret `value`. The vault owns
|
|
20
|
+
// secret storage; the audit log must record THAT a secret was created — never
|
|
21
|
+
// the value. Opt out of input capture so the trail can't become a second
|
|
22
|
+
// durable credential store.
|
|
23
|
+
audit: { recordInputs: false },
|
|
19
24
|
run: async (args) => createSecret(args),
|
|
20
25
|
});
|
|
21
26
|
//# sourceMappingURL=create-vault-secret.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-vault-secret.js","sourceRoot":"","sources":["../../src/actions/create-vault-secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,8LAA8L;IAChM,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,kDAAkD,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACrD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QACxE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,qDAAqD,CAAC;QAClE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KACpE,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;CACxC,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core\";\nimport { z } from \"zod\";\nimport { createSecret } from \"../server/lib/vault-store.js\";\n\nexport default defineAction({\n description:\n \"Store a secret in the workspace vault. Admin only. Existing credential keys are updated. By default, saved vault keys are available to every workspace app; manual mode uses per-app grants.\",\n schema: z.object({\n credentialKey: z\n .string()\n .min(1)\n .describe(\"Environment variable name, e.g. GOOGLE_CLIENT_ID\"),\n value: z.string().min(1).describe(\"The secret value\"),\n name: z.string().min(1).describe(\"Human-readable label for this secret\"),\n provider: z\n .string()\n .optional()\n .describe(\"Provider grouping tag, e.g. google, sendgrid, slack\"),\n description: z.string().optional().describe(\"Optional description\"),\n }),\n run: async (args) => createSecret(args),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"create-vault-secret.js","sourceRoot":"","sources":["../../src/actions/create-vault-secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,8LAA8L;IAChM,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,kDAAkD,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACrD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QACxE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,qDAAqD,CAAC;QAClE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KACpE,CAAC;IACF,2EAA2E;IAC3E,8EAA8E;IAC9E,yEAAyE;IACzE,4BAA4B;IAC5B,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;IAC9B,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;CACxC,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core\";\nimport { z } from \"zod\";\nimport { createSecret } from \"../server/lib/vault-store.js\";\n\nexport default defineAction({\n description:\n \"Store a secret in the workspace vault. Admin only. Existing credential keys are updated. By default, saved vault keys are available to every workspace app; manual mode uses per-app grants.\",\n schema: z.object({\n credentialKey: z\n .string()\n .min(1)\n .describe(\"Environment variable name, e.g. GOOGLE_CLIENT_ID\"),\n value: z.string().min(1).describe(\"The secret value\"),\n name: z.string().min(1).describe(\"Human-readable label for this secret\"),\n provider: z\n .string()\n .optional()\n .describe(\"Provider grouping tag, e.g. google, sendgrid, slack\"),\n description: z.string().optional().describe(\"Optional description\"),\n }),\n // This action's whole purpose is to carry a secret `value`. The vault owns\n // secret storage; the audit log must record THAT a secret was created — never\n // the value. Opt out of input capture so the trail can't become a second\n // durable credential store.\n audit: { recordInputs: false },\n run: async (args) => createSecret(args),\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-vault-secret.d.ts","sourceRoot":"","sources":["../../src/actions/update-vault-secret.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAIA,
|
|
1
|
+
{"version":3,"file":"update-vault-secret.d.ts","sourceRoot":"","sources":["../../src/actions/update-vault-secret.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAIA,wBA2CG"}
|
|
@@ -35,6 +35,9 @@ export default defineAction({
|
|
|
35
35
|
name !== undefined ||
|
|
36
36
|
provider !== undefined ||
|
|
37
37
|
description !== undefined, "At least one secret field must be updated"),
|
|
38
|
+
// Carries a secret `value`. Record THAT the secret changed, never the value —
|
|
39
|
+
// keep the audit trail from becoming a second credential store.
|
|
40
|
+
audit: { recordInputs: false },
|
|
38
41
|
run: async (args) => updateSecret(args.id, args),
|
|
39
42
|
});
|
|
40
43
|
//# sourceMappingURL=update-vault-secret.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-vault-secret.js","sourceRoot":"","sources":["../../src/actions/update-vault-secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,uGAAuG;IACzG,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC3C,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,kDAAkD,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAChE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,sCAAsC,CAAC;QACnD,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,qDAAqD,CAAC;QAClE,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,sBAAsB,CAAC;KACpC,CAAC;SACD,MAAM,CACL,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CACxD,aAAa,KAAK,SAAS;QAC3B,KAAK,KAAK,SAAS;QACnB,IAAI,KAAK,SAAS;QAClB,QAAQ,KAAK,SAAS;QACtB,WAAW,KAAK,SAAS,EAC3B,2CAA2C,CAC5C;IACH,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;CACjD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core\";\nimport { z } from \"zod\";\nimport { updateSecret } from \"../server/lib/vault-store.js\";\n\nexport default defineAction({\n description:\n \"Update an existing vault secret's label, credential key, value, provider, or description. Admin only.\",\n schema: z\n .object({\n id: z.string().min(1).describe(\"Secret ID\"),\n credentialKey: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"Environment variable name, e.g. GOOGLE_CLIENT_ID\"),\n value: z.string().min(1).optional().describe(\"New secret value\"),\n name: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"Human-readable label for this secret\"),\n provider: z\n .string()\n .nullable()\n .optional()\n .describe(\"Provider grouping tag, e.g. google, sendgrid, slack\"),\n description: z\n .string()\n .nullable()\n .optional()\n .describe(\"Optional description\"),\n })\n .refine(\n ({ credentialKey, value, name, provider, description }) =>\n credentialKey !== undefined ||\n value !== undefined ||\n name !== undefined ||\n provider !== undefined ||\n description !== undefined,\n \"At least one secret field must be updated\",\n ),\n run: async (args) => updateSecret(args.id, args),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"update-vault-secret.js","sourceRoot":"","sources":["../../src/actions/update-vault-secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,uGAAuG;IACzG,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC3C,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,kDAAkD,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAChE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,sCAAsC,CAAC;QACnD,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,qDAAqD,CAAC;QAClE,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,sBAAsB,CAAC;KACpC,CAAC;SACD,MAAM,CACL,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CACxD,aAAa,KAAK,SAAS;QAC3B,KAAK,KAAK,SAAS;QACnB,IAAI,KAAK,SAAS;QAClB,QAAQ,KAAK,SAAS;QACtB,WAAW,KAAK,SAAS,EAC3B,2CAA2C,CAC5C;IACH,8EAA8E;IAC9E,gEAAgE;IAChE,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;IAC9B,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;CACjD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core\";\nimport { z } from \"zod\";\nimport { updateSecret } from \"../server/lib/vault-store.js\";\n\nexport default defineAction({\n description:\n \"Update an existing vault secret's label, credential key, value, provider, or description. Admin only.\",\n schema: z\n .object({\n id: z.string().min(1).describe(\"Secret ID\"),\n credentialKey: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"Environment variable name, e.g. GOOGLE_CLIENT_ID\"),\n value: z.string().min(1).optional().describe(\"New secret value\"),\n name: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"Human-readable label for this secret\"),\n provider: z\n .string()\n .nullable()\n .optional()\n .describe(\"Provider grouping tag, e.g. google, sendgrid, slack\"),\n description: z\n .string()\n .nullable()\n .optional()\n .describe(\"Optional description\"),\n })\n .refine(\n ({ credentialKey, value, name, provider, description }) =>\n credentialKey !== undefined ||\n value !== undefined ||\n name !== undefined ||\n provider !== undefined ||\n description !== undefined,\n \"At least one secret field must be updated\",\n ),\n // Carries a secret `value`. Record THAT the secret changed, never the value —\n // keep the audit trail from becoming a second credential store.\n audit: { recordInputs: false },\n run: async (args) => updateSecret(args.id, args),\n});\n"]}
|
|
@@ -3,10 +3,17 @@ export declare function meta(): ({
|
|
|
3
3
|
title: string;
|
|
4
4
|
name?: undefined;
|
|
5
5
|
content?: undefined;
|
|
6
|
+
property?: undefined;
|
|
6
7
|
} | {
|
|
7
8
|
name: string;
|
|
8
9
|
content: string;
|
|
9
10
|
title?: undefined;
|
|
11
|
+
property?: undefined;
|
|
12
|
+
} | {
|
|
13
|
+
property: string;
|
|
14
|
+
content: string;
|
|
15
|
+
title?: undefined;
|
|
16
|
+
name?: undefined;
|
|
10
17
|
})[];
|
|
11
18
|
export declare function loader({ request }: LoaderFunctionArgs): void;
|
|
12
19
|
export declare function clientLoader({ request }: LoaderFunctionArgs): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_index.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/_index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"_index.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/_index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AASjE,wBAAgB,IAAI;;;;;;;;;;;;;;;KAanB;AAmBD,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,QAErD;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,QAE3D;AAED,wBAAgB,eAAe,4CAM9B;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,SAEhC"}
|
|
@@ -2,13 +2,20 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { redirect } from "react-router";
|
|
3
3
|
import { appPath } from "@agent-native/core/client";
|
|
4
4
|
import { Spinner } from "../../components/ui/spinner.js";
|
|
5
|
+
const SEO_TITLE = "Agent-Native Dispatch - Open Source workspace control plane for AI agents";
|
|
6
|
+
const SEO_DESCRIPTION = "Open Source workspace control plane for AI agents to manage apps, secrets, approvals, messages, jobs, and cross-app delegation.";
|
|
5
7
|
export function meta() {
|
|
6
8
|
return [
|
|
7
|
-
{ title:
|
|
9
|
+
{ title: SEO_TITLE },
|
|
8
10
|
{
|
|
9
11
|
name: "description",
|
|
10
|
-
content:
|
|
12
|
+
content: SEO_DESCRIPTION,
|
|
11
13
|
},
|
|
14
|
+
{ property: "og:title", content: SEO_TITLE },
|
|
15
|
+
{ property: "og:description", content: SEO_DESCRIPTION },
|
|
16
|
+
{ name: "twitter:card", content: "summary" },
|
|
17
|
+
{ name: "twitter:title", content: SEO_TITLE },
|
|
18
|
+
{ name: "twitter:description", content: SEO_DESCRIPTION },
|
|
12
19
|
];
|
|
13
20
|
}
|
|
14
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_index.js","sourceRoot":"","sources":["../../../src/routes/pages/_index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAA2B,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,MAAM,UAAU,IAAI;IAClB,OAAO;QACL,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"_index.js","sourceRoot":"","sources":["../../../src/routes/pages/_index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAA2B,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,MAAM,SAAS,GACb,2EAA2E,CAAC;AAC9E,MAAM,eAAe,GACnB,iIAAiI,CAAC;AAEpI,MAAM,UAAU,IAAI;IAClB,OAAO;QACL,EAAE,KAAK,EAAE,SAAS,EAAE;QACpB;YACE,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,eAAe;SACzB;QACD,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE;QAC5C,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe,EAAE;QACxD,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE;QAC5C,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE;QAC7C,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,eAAe,EAAE;KAC1D,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,WAAW,CAAC,OAAgB;IACnC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,OAAO,CAAC,YAAY,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAE,OAAO,EAAsB;IACpD,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,OAAO,EAAsB;IAC1D,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CACL,cAAK,SAAS,EAAC,kDAAkD,YAC/D,KAAC,OAAO,IAAC,SAAS,EAAC,QAAQ,GAAG,GAC1B,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,SAAS;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { redirect, type LoaderFunctionArgs } from \"react-router\";\nimport { appPath } from \"@agent-native/core/client\";\nimport { Spinner } from \"@/components/ui/spinner\";\n\nconst SEO_TITLE =\n \"Agent-Native Dispatch - Open Source workspace control plane for AI agents\";\nconst SEO_DESCRIPTION =\n \"Open Source workspace control plane for AI agents to manage apps, secrets, approvals, messages, jobs, and cross-app delegation.\";\n\nexport function meta() {\n return [\n { title: SEO_TITLE },\n {\n name: \"description\",\n content: SEO_DESCRIPTION,\n },\n { property: \"og:title\", content: SEO_TITLE },\n { property: \"og:description\", content: SEO_DESCRIPTION },\n { name: \"twitter:card\", content: \"summary\" },\n { name: \"twitter:title\", content: SEO_TITLE },\n { name: \"twitter:description\", content: SEO_DESCRIPTION },\n ];\n}\n\n/**\n * Run the redirect on both the server and the client. A client-only\n * `<Navigate>` can drop during hydration (before the route tree is fully\n * attached), leaving the user stranded on `/` with a blank main area while\n * the layout chrome around it still renders. A `loader` redirect runs as\n * part of the server response and the navigation completes before the app\n * hydrates; `clientLoader` covers SPA-style navigations to `/`.\n *\n * We preserve `?` and `#` so deep-links like `?thread=<id>` from a Slack\n * \"Open thread\" button survive the bounce — `useThreadDeepLink` in\n * `root.tsx` reads them after the redirect lands and opens `/chat`.\n */\nfunction buildTarget(request: Request): string {\n const url = new URL(request.url);\n return appPath(`/overview${url.search}${url.hash}`);\n}\n\nexport function loader({ request }: LoaderFunctionArgs) {\n throw redirect(buildTarget(request));\n}\n\nexport function clientLoader({ request }: LoaderFunctionArgs) {\n throw redirect(buildTarget(request));\n}\n\nexport function HydrateFallback() {\n return (\n <div className=\"flex items-center justify-center h-screen w-full\">\n <Spinner className=\"size-8\" />\n </div>\n );\n}\n\nexport default function IndexPage() {\n return null;\n}\n"]}
|
|
@@ -1,5 +1,18 @@
|
|
|
1
|
-
export declare function meta(): {
|
|
1
|
+
export declare function meta(): ({
|
|
2
2
|
title: string;
|
|
3
|
-
|
|
3
|
+
name?: undefined;
|
|
4
|
+
content?: undefined;
|
|
5
|
+
property?: undefined;
|
|
6
|
+
} | {
|
|
7
|
+
name: string;
|
|
8
|
+
content: string;
|
|
9
|
+
title?: undefined;
|
|
10
|
+
property?: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
property: string;
|
|
13
|
+
content: string;
|
|
14
|
+
title?: undefined;
|
|
15
|
+
name?: undefined;
|
|
16
|
+
})[];
|
|
4
17
|
export default function OverviewRoute(): import("react/jsx-runtime").JSX.Element;
|
|
5
18
|
//# sourceMappingURL=overview.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/overview.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/overview.tsx"],"names":[],"mappings":"AAOA,wBAAgB,IAAI;;;;;;;;;;;;;;;KAUnB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,4CAEpC"}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { DispatchControlPlane } from "../../components/dispatch-control-plane.js";
|
|
3
|
+
const SEO_TITLE = "Agent-Native Dispatch - Open Source workspace control plane for AI agents";
|
|
4
|
+
const SEO_DESCRIPTION = "Open Source workspace control plane for AI agents to manage apps, secrets, approvals, messages, jobs, and cross-app delegation.";
|
|
3
5
|
export function meta() {
|
|
4
|
-
return [
|
|
6
|
+
return [
|
|
7
|
+
{ title: SEO_TITLE },
|
|
8
|
+
{ name: "description", content: SEO_DESCRIPTION },
|
|
9
|
+
{ property: "og:title", content: SEO_TITLE },
|
|
10
|
+
{ property: "og:description", content: SEO_DESCRIPTION },
|
|
11
|
+
{ name: "twitter:card", content: "summary" },
|
|
12
|
+
{ name: "twitter:title", content: SEO_TITLE },
|
|
13
|
+
{ name: "twitter:description", content: SEO_DESCRIPTION },
|
|
14
|
+
];
|
|
5
15
|
}
|
|
6
16
|
export default function OverviewRoute() {
|
|
7
17
|
return _jsx(DispatchControlPlane, {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../src/routes/pages/overview.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,UAAU,IAAI;IAClB,OAAO,
|
|
1
|
+
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../src/routes/pages/overview.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,SAAS,GACb,2EAA2E,CAAC;AAC9E,MAAM,eAAe,GACnB,iIAAiI,CAAC;AAEpI,MAAM,UAAU,IAAI;IAClB,OAAO;QACL,EAAE,KAAK,EAAE,SAAS,EAAE;QACpB,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE;QACjD,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE;QAC5C,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe,EAAE;QACxD,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE;QAC5C,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE;QAC7C,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,eAAe,EAAE;KAC1D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,aAAa;IACnC,OAAO,KAAC,oBAAoB,KAAG,CAAC;AAClC,CAAC","sourcesContent":["import { DispatchControlPlane } from \"@/components/dispatch-control-plane\";\n\nconst SEO_TITLE =\n \"Agent-Native Dispatch - Open Source workspace control plane for AI agents\";\nconst SEO_DESCRIPTION =\n \"Open Source workspace control plane for AI agents to manage apps, secrets, approvals, messages, jobs, and cross-app delegation.\";\n\nexport function meta() {\n return [\n { title: SEO_TITLE },\n { name: \"description\", content: SEO_DESCRIPTION },\n { property: \"og:title\", content: SEO_TITLE },\n { property: \"og:description\", content: SEO_DESCRIPTION },\n { name: \"twitter:card\", content: \"summary\" },\n { name: \"twitter:title\", content: SEO_TITLE },\n { name: \"twitter:description\", content: SEO_DESCRIPTION },\n ];\n}\n\nexport default function OverviewRoute() {\n return <DispatchControlPlane />;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/dispatch",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Dispatch — workspace control plane for agent-native apps. Vault, integrations, destinations, scheduled jobs, and cross-app delegation, shipped as a single drop-in package.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"typescript": "^6.0.3",
|
|
101
101
|
"vite": "8.0.3",
|
|
102
102
|
"vitest": "^4.1.5",
|
|
103
|
-
"@agent-native/core": "0.
|
|
103
|
+
"@agent-native/core": "0.72.0"
|
|
104
104
|
},
|
|
105
105
|
"scripts": {
|
|
106
106
|
"build": "tsc && tsc-alias --resolve-full-paths",
|
|
@@ -18,5 +18,10 @@ export default defineAction({
|
|
|
18
18
|
.describe("Provider grouping tag, e.g. google, sendgrid, slack"),
|
|
19
19
|
description: z.string().optional().describe("Optional description"),
|
|
20
20
|
}),
|
|
21
|
+
// This action's whole purpose is to carry a secret `value`. The vault owns
|
|
22
|
+
// secret storage; the audit log must record THAT a secret was created — never
|
|
23
|
+
// the value. Opt out of input capture so the trail can't become a second
|
|
24
|
+
// durable credential store.
|
|
25
|
+
audit: { recordInputs: false },
|
|
21
26
|
run: async (args) => createSecret(args),
|
|
22
27
|
});
|
|
@@ -41,5 +41,8 @@ export default defineAction({
|
|
|
41
41
|
description !== undefined,
|
|
42
42
|
"At least one secret field must be updated",
|
|
43
43
|
),
|
|
44
|
+
// Carries a secret `value`. Record THAT the secret changed, never the value —
|
|
45
|
+
// keep the audit trail from becoming a second credential store.
|
|
46
|
+
audit: { recordInputs: false },
|
|
44
47
|
run: async (args) => updateSecret(args.id, args),
|
|
45
48
|
});
|
|
@@ -2,14 +2,23 @@ import { redirect, type LoaderFunctionArgs } from "react-router";
|
|
|
2
2
|
import { appPath } from "@agent-native/core/client";
|
|
3
3
|
import { Spinner } from "@/components/ui/spinner";
|
|
4
4
|
|
|
5
|
+
const SEO_TITLE =
|
|
6
|
+
"Agent-Native Dispatch - Open Source workspace control plane for AI agents";
|
|
7
|
+
const SEO_DESCRIPTION =
|
|
8
|
+
"Open Source workspace control plane for AI agents to manage apps, secrets, approvals, messages, jobs, and cross-app delegation.";
|
|
9
|
+
|
|
5
10
|
export function meta() {
|
|
6
11
|
return [
|
|
7
|
-
{ title:
|
|
12
|
+
{ title: SEO_TITLE },
|
|
8
13
|
{
|
|
9
14
|
name: "description",
|
|
10
|
-
content:
|
|
11
|
-
"Your AI agent manages secrets, orchestrates other agents, and routes messages across your workspace.",
|
|
15
|
+
content: SEO_DESCRIPTION,
|
|
12
16
|
},
|
|
17
|
+
{ property: "og:title", content: SEO_TITLE },
|
|
18
|
+
{ property: "og:description", content: SEO_DESCRIPTION },
|
|
19
|
+
{ name: "twitter:card", content: "summary" },
|
|
20
|
+
{ name: "twitter:title", content: SEO_TITLE },
|
|
21
|
+
{ name: "twitter:description", content: SEO_DESCRIPTION },
|
|
13
22
|
];
|
|
14
23
|
}
|
|
15
24
|
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
import { DispatchControlPlane } from "@/components/dispatch-control-plane";
|
|
2
2
|
|
|
3
|
+
const SEO_TITLE =
|
|
4
|
+
"Agent-Native Dispatch - Open Source workspace control plane for AI agents";
|
|
5
|
+
const SEO_DESCRIPTION =
|
|
6
|
+
"Open Source workspace control plane for AI agents to manage apps, secrets, approvals, messages, jobs, and cross-app delegation.";
|
|
7
|
+
|
|
3
8
|
export function meta() {
|
|
4
|
-
return [
|
|
9
|
+
return [
|
|
10
|
+
{ title: SEO_TITLE },
|
|
11
|
+
{ name: "description", content: SEO_DESCRIPTION },
|
|
12
|
+
{ property: "og:title", content: SEO_TITLE },
|
|
13
|
+
{ property: "og:description", content: SEO_DESCRIPTION },
|
|
14
|
+
{ name: "twitter:card", content: "summary" },
|
|
15
|
+
{ name: "twitter:title", content: SEO_TITLE },
|
|
16
|
+
{ name: "twitter:description", content: SEO_DESCRIPTION },
|
|
17
|
+
];
|
|
5
18
|
}
|
|
6
19
|
|
|
7
20
|
export default function OverviewRoute() {
|