@usenaive-sdk/cli 0.3.0 → 0.4.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/README.md +48 -0
- package/dist/commands/apps.d.ts +2 -0
- package/dist/commands/apps.js +424 -0
- package/dist/commands/apps.js.map +1 -0
- package/dist/commands/ceo.d.ts +2 -0
- package/dist/commands/ceo.js +369 -0
- package/dist/commands/ceo.js.map +1 -0
- package/dist/commands/companies.js +105 -0
- package/dist/commands/companies.js.map +1 -1
- package/dist/commands/cron-jobs.d.ts +2 -0
- package/dist/commands/cron-jobs.js +208 -0
- package/dist/commands/cron-jobs.js.map +1 -0
- package/dist/commands/employees.d.ts +2 -0
- package/dist/commands/employees.js +190 -0
- package/dist/commands/employees.js.map +1 -0
- package/dist/commands/media.d.ts +2 -0
- package/dist/commands/media.js +183 -0
- package/dist/commands/media.js.map +1 -0
- package/dist/commands/memory.d.ts +2 -0
- package/dist/commands/memory.js +151 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/objectives.d.ts +2 -0
- package/dist/commands/objectives.js +243 -0
- package/dist/commands/objectives.js.map +1 -0
- package/dist/commands/register.js +4 -4
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/social.js +3 -0
- package/dist/commands/social.js.map +1 -1
- package/dist/commands/tasks.d.ts +2 -0
- package/dist/commands/tasks.js +400 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/commands/usage.js +5 -5
- package/dist/commands/video.js +259 -11
- package/dist/commands/video.js.map +1 -1
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -100,6 +100,48 @@ naive identity
|
|
|
100
100
|
naive identity emails
|
|
101
101
|
naive identity resources
|
|
102
102
|
|
|
103
|
+
# CEO (orchestration)
|
|
104
|
+
naive ceo run "Launch my product"
|
|
105
|
+
naive ceo stream <runId>
|
|
106
|
+
naive ceo message "Approved, hire the team"
|
|
107
|
+
naive ceo status
|
|
108
|
+
naive ceo sessions
|
|
109
|
+
|
|
110
|
+
# Tasks (kanban)
|
|
111
|
+
naive tasks list
|
|
112
|
+
naive tasks list --status running --assignee "Jordan Kim"
|
|
113
|
+
naive tasks create "Build landing page" --description "Responsive hero section" --assignee "Jordan Kim" --priority high
|
|
114
|
+
naive tasks show <id> # Accepts UUID or hermes task ID (t_*)
|
|
115
|
+
naive tasks complete <id> --summary "Deployed to prod"
|
|
116
|
+
naive tasks block <id> --reason "Waiting for DNS"
|
|
117
|
+
naive tasks unblock <id>
|
|
118
|
+
naive tasks comment <id> "Added SEO meta tags"
|
|
119
|
+
naive tasks dispatch
|
|
120
|
+
naive tasks stats
|
|
121
|
+
|
|
122
|
+
# Employees
|
|
123
|
+
naive employees list
|
|
124
|
+
naive employees hire --name "Jordan Kim" --role engineer --skills "typescript,react"
|
|
125
|
+
naive employees fire <id>
|
|
126
|
+
naive employees configure <id> --model gpt-4o
|
|
127
|
+
|
|
128
|
+
# Objectives
|
|
129
|
+
naive objectives list
|
|
130
|
+
naive objectives create "Launch product" --criteria "100 signups"
|
|
131
|
+
naive objectives update <id> --status completed
|
|
132
|
+
naive objectives show <id>
|
|
133
|
+
|
|
134
|
+
# Cron Jobs
|
|
135
|
+
naive cron create "0 9 * * *" "Check email and summarize"
|
|
136
|
+
naive cron list
|
|
137
|
+
naive cron trigger <id>
|
|
138
|
+
naive cron pause <id>
|
|
139
|
+
|
|
140
|
+
# Memory
|
|
141
|
+
naive memory add --target memory "Brand color is #FF6B00"
|
|
142
|
+
naive memory list
|
|
143
|
+
naive memory remove <id>
|
|
144
|
+
|
|
103
145
|
# Domains
|
|
104
146
|
naive domains # List all domains
|
|
105
147
|
naive domains connect example.com # Connect a custom domain (BYOD)
|
|
@@ -232,6 +274,12 @@ src/
|
|
|
232
274
|
├── client.ts # HTTP client (fetch wrapper with auth + error handling)
|
|
233
275
|
├── output.ts # Structured agent-native JSON output (agentOutput/agentError)
|
|
234
276
|
└── commands/
|
|
277
|
+
├── ceo.ts # naive ceo (run/message/status/sessions/stream)
|
|
278
|
+
├── tasks.ts # naive tasks (list/create/show/complete/block/unblock/comment/dispatch/stats)
|
|
279
|
+
├── employees.ts # naive employees (list/hire/fire/configure)
|
|
280
|
+
├── objectives.ts # naive objectives (list/create/update/show)
|
|
281
|
+
├── memory.ts # naive memory (add/list/remove)
|
|
282
|
+
├── cron-jobs.ts # naive cron (create/list/trigger/pause/resume/delete)
|
|
235
283
|
├── register.ts # naive register
|
|
236
284
|
├── login.ts # naive login
|
|
237
285
|
├── link.ts # naive link
|
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { apiRequest, handleApiError } from "../client.js";
|
|
3
|
+
import { agentOutput } from "../output.js";
|
|
4
|
+
export const appsCmd = new Command("apps")
|
|
5
|
+
.description("Web apps — create, deploy, manage Vercel-backed web applications with dedicated engineer agents")
|
|
6
|
+
.addHelpText("after", `
|
|
7
|
+
Subcommands:
|
|
8
|
+
naive apps list List all apps
|
|
9
|
+
naive apps create Create a new app
|
|
10
|
+
naive apps show <id> Show app details
|
|
11
|
+
naive apps delete <id> Delete an app
|
|
12
|
+
naive apps deploy <id> Trigger a preview deployment
|
|
13
|
+
naive apps publish <id> --deployment <id> Promote a deployment to production
|
|
14
|
+
naive apps deployments <id> List deployment history
|
|
15
|
+
naive apps retry <id> Retry failed provisioning
|
|
16
|
+
naive apps secrets list <id> List env variable keys
|
|
17
|
+
naive apps secrets set <id> <KEY> <VALUE> Set an env variable
|
|
18
|
+
naive apps secrets delete <id> <KEY> Delete an env variable
|
|
19
|
+
naive apps secrets reveal <id> <KEY> Reveal env variable value
|
|
20
|
+
naive apps domains list <id> List app domains
|
|
21
|
+
naive apps domains add <id> <domain> Add a custom domain
|
|
22
|
+
naive apps domains remove <id> <domainId> Remove a domain
|
|
23
|
+
naive apps domains connect <id> <domainId> Connect a company domain
|
|
24
|
+
naive apps domains disconnect <id> <domainId> Disconnect a company domain
|
|
25
|
+
naive apps domains verify-dns <id> <domainId> Verify DNS for connected domain
|
|
26
|
+
naive apps db tables <id> List database tables (fullstack only)
|
|
27
|
+
naive apps db query <id> "<sql>" Run SQL query (fullstack only)
|
|
28
|
+
|
|
29
|
+
Typical Workflow:
|
|
30
|
+
1. naive apps create --name "My Site" --type frontend_only
|
|
31
|
+
→ Creates Vercel project, provisions engineer agent
|
|
32
|
+
2. Engineer builds the app (via task system or direct instruction)
|
|
33
|
+
3. naive apps deploy <id>
|
|
34
|
+
→ Pushes code to Vercel, returns preview URL
|
|
35
|
+
4. naive apps publish <id> --deployment <deploymentId>
|
|
36
|
+
→ Promotes preview to production
|
|
37
|
+
5. naive apps domains connect <id> <domainId>
|
|
38
|
+
→ Points a custom domain to the production app
|
|
39
|
+
|
|
40
|
+
Fullstack Workflow (adds Supabase):
|
|
41
|
+
1. naive apps create --name "My App" --type fullstack
|
|
42
|
+
→ Creates Vercel + Supabase project
|
|
43
|
+
2. naive apps db tables <id> → inspect database schema
|
|
44
|
+
3. naive apps db query <id> "..." → run ad-hoc queries
|
|
45
|
+
4. naive apps secrets set <id> KEY VALUE --target production
|
|
46
|
+
→ configure environment variables
|
|
47
|
+
|
|
48
|
+
Each app gets a dedicated engineer agent that can build, deploy, and iterate
|
|
49
|
+
on the code autonomously via the kanban task system.
|
|
50
|
+
`);
|
|
51
|
+
// ─── List ────────────────────────────────────────────────────────────────────
|
|
52
|
+
appsCmd
|
|
53
|
+
.command("list")
|
|
54
|
+
.description("List all apps for the current company")
|
|
55
|
+
.action(async () => {
|
|
56
|
+
const resp = await apiRequest("GET", "/v1/apps");
|
|
57
|
+
handleApiError("apps.list", resp);
|
|
58
|
+
const data = resp.data;
|
|
59
|
+
const count = data.apps?.length ?? 0;
|
|
60
|
+
agentOutput({
|
|
61
|
+
action: "apps.list",
|
|
62
|
+
result: resp.data,
|
|
63
|
+
next_steps: [
|
|
64
|
+
...(count > 0
|
|
65
|
+
? [{ command: `naive apps show ${data.apps[0].id}`, description: "View details of the first app" }]
|
|
66
|
+
: []),
|
|
67
|
+
{ command: "naive apps create --name <name> --type frontend_only", description: "Create a new app" },
|
|
68
|
+
],
|
|
69
|
+
hints: [`${count} app${count !== 1 ? "s" : ""} found`],
|
|
70
|
+
related_commands: ["naive apps create", "naive apps show", "naive apps deploy"],
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
// ─── Create ──────────────────────────────────────────────────────────────────
|
|
74
|
+
appsCmd
|
|
75
|
+
.command("create")
|
|
76
|
+
.description("Create a new web app with a dedicated engineer agent")
|
|
77
|
+
.requiredOption("--name <name>", "App name")
|
|
78
|
+
.requiredOption("--type <type>", "App type: frontend_only or fullstack")
|
|
79
|
+
.option("--variant <variant>", "Template variant: dark-premium, clean-minimal, bold-energetic, warm-human")
|
|
80
|
+
.option("--description <desc>", "Short description")
|
|
81
|
+
.action(async (opts) => {
|
|
82
|
+
const resp = await apiRequest("POST", "/v1/apps", {
|
|
83
|
+
name: opts.name,
|
|
84
|
+
type: opts.type,
|
|
85
|
+
...(opts.variant && { variant: opts.variant }),
|
|
86
|
+
...(opts.description && { description: opts.description }),
|
|
87
|
+
});
|
|
88
|
+
handleApiError("apps.create", resp);
|
|
89
|
+
const data = resp.data;
|
|
90
|
+
agentOutput({
|
|
91
|
+
action: "apps.create",
|
|
92
|
+
result: resp.data,
|
|
93
|
+
next_steps: [
|
|
94
|
+
{ command: `naive apps show ${data.id}`, description: "View app details" },
|
|
95
|
+
{ command: `naive apps deploy ${data.id}`, description: "Trigger first deployment" },
|
|
96
|
+
],
|
|
97
|
+
hints: [
|
|
98
|
+
`App "${data.name}" created with status: ${data.status}`,
|
|
99
|
+
"An engineer agent has been provisioned and can build the app",
|
|
100
|
+
],
|
|
101
|
+
related_commands: ["naive apps deploy", "naive apps secrets set", "naive apps show"],
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
// ─── Show ────────────────────────────────────────────────────────────────────
|
|
105
|
+
appsCmd
|
|
106
|
+
.command("show <id>")
|
|
107
|
+
.description("Show full details of an app")
|
|
108
|
+
.action(async (id) => {
|
|
109
|
+
const resp = await apiRequest("GET", `/v1/apps/${id}`);
|
|
110
|
+
handleApiError("apps.show", resp);
|
|
111
|
+
agentOutput({
|
|
112
|
+
action: "apps.show",
|
|
113
|
+
result: resp.data,
|
|
114
|
+
next_steps: [
|
|
115
|
+
{ command: `naive apps deploy ${id}`, description: "Deploy latest code" },
|
|
116
|
+
{ command: `naive apps deployments ${id}`, description: "View deployment history" },
|
|
117
|
+
{ command: `naive apps secrets list ${id}`, description: "View environment variables" },
|
|
118
|
+
],
|
|
119
|
+
related_commands: ["naive apps deploy", "naive apps publish", "naive apps secrets set", "naive apps delete"],
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
// ─── Delete ──────────────────────────────────────────────────────────────────
|
|
123
|
+
appsCmd
|
|
124
|
+
.command("delete <id>")
|
|
125
|
+
.description("Permanently delete an app and all infrastructure")
|
|
126
|
+
.action(async (id) => {
|
|
127
|
+
const resp = await apiRequest("DELETE", `/v1/apps/${id}`);
|
|
128
|
+
handleApiError("apps.delete", resp);
|
|
129
|
+
agentOutput({
|
|
130
|
+
action: "apps.delete",
|
|
131
|
+
result: resp.data,
|
|
132
|
+
next_steps: [{ command: "naive apps list", description: "View remaining apps" }],
|
|
133
|
+
hints: ["App and all associated resources have been deleted"],
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
// ─── Deploy ──────────────────────────────────────────────────────────────────
|
|
137
|
+
appsCmd
|
|
138
|
+
.command("deploy <id>")
|
|
139
|
+
.description("Trigger a preview deployment from the current workspace code")
|
|
140
|
+
.option("--workspace-path <path>", "Override workspace path (relative to hermes home)")
|
|
141
|
+
.action(async (id, opts) => {
|
|
142
|
+
const body = {};
|
|
143
|
+
if (opts.workspacePath) {
|
|
144
|
+
body.workspacePath = opts.workspacePath;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
// Auto-detect: if CWD contains an app/ dir and HERMES_HOME is set,
|
|
148
|
+
// send the relative path so the API deploys from the right location
|
|
149
|
+
const hermesHome = process.env.HERMES_HOME;
|
|
150
|
+
const cwd = process.cwd();
|
|
151
|
+
if (hermesHome && cwd.startsWith(hermesHome)) {
|
|
152
|
+
const fs = await import("node:fs");
|
|
153
|
+
const appDir = `${cwd}/app`;
|
|
154
|
+
if (fs.existsSync(appDir)) {
|
|
155
|
+
body.workspacePath = cwd.slice(hermesHome.length + 1);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const resp = await apiRequest("POST", `/v1/apps/${id}/deploy`, Object.keys(body).length > 0 ? body : undefined);
|
|
160
|
+
handleApiError("apps.deploy", resp);
|
|
161
|
+
const data = resp.data;
|
|
162
|
+
agentOutput({
|
|
163
|
+
action: "apps.deploy",
|
|
164
|
+
result: resp.data,
|
|
165
|
+
next_steps: [
|
|
166
|
+
{ command: `naive apps publish ${id} --deployment ${data.id}`, description: "Promote to production" },
|
|
167
|
+
{ command: `naive apps deployments ${id}`, description: "View all deployments" },
|
|
168
|
+
],
|
|
169
|
+
hints: [`Preview deployment: ${data.url}`],
|
|
170
|
+
related_commands: ["naive apps publish", "naive apps deployments"],
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
// ─── Publish ─────────────────────────────────────────────────────────────────
|
|
174
|
+
appsCmd
|
|
175
|
+
.command("publish <id>")
|
|
176
|
+
.description("Promote a deployment to production")
|
|
177
|
+
.requiredOption("--deployment <deploymentId>", "Deployment ID to promote")
|
|
178
|
+
.action(async (id, opts) => {
|
|
179
|
+
const resp = await apiRequest("POST", `/v1/apps/${id}/publish`, {
|
|
180
|
+
deploymentId: opts.deployment,
|
|
181
|
+
});
|
|
182
|
+
handleApiError("apps.publish", resp);
|
|
183
|
+
const data = resp.data;
|
|
184
|
+
agentOutput({
|
|
185
|
+
action: "apps.publish",
|
|
186
|
+
result: resp.data,
|
|
187
|
+
next_steps: [
|
|
188
|
+
{ command: `naive apps show ${id}`, description: "View updated app details" },
|
|
189
|
+
{ command: `naive apps domains connect ${id} <domainId>`, description: "Connect a custom domain" },
|
|
190
|
+
],
|
|
191
|
+
hints: [`Production URL: ${data.url}`],
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
// ─── Deployments ─────────────────────────────────────────────────────────────
|
|
195
|
+
appsCmd
|
|
196
|
+
.command("deployments <id>")
|
|
197
|
+
.description("List deployment history for an app")
|
|
198
|
+
.action(async (id) => {
|
|
199
|
+
const resp = await apiRequest("GET", `/v1/apps/${id}/deployments`);
|
|
200
|
+
handleApiError("apps.deployments", resp);
|
|
201
|
+
const data = resp.data;
|
|
202
|
+
const count = data.deployments?.length ?? 0;
|
|
203
|
+
agentOutput({
|
|
204
|
+
action: "apps.deployments",
|
|
205
|
+
result: resp.data,
|
|
206
|
+
next_steps: count > 0
|
|
207
|
+
? [{ command: `naive apps publish ${id} --deployment ${data.deployments[0].id}`, description: "Promote latest to production" }]
|
|
208
|
+
: [{ command: `naive apps deploy ${id}`, description: "Trigger a deployment" }],
|
|
209
|
+
hints: [`${count} deployment${count !== 1 ? "s" : ""}`],
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
// ─── Secrets ─────────────────────────────────────────────────────────────────
|
|
213
|
+
const secretsCmd = appsCmd
|
|
214
|
+
.command("secrets")
|
|
215
|
+
.description("Manage app environment variables");
|
|
216
|
+
secretsCmd
|
|
217
|
+
.command("list <appId>")
|
|
218
|
+
.description("List environment variable keys (values are hidden)")
|
|
219
|
+
.action(async (appId) => {
|
|
220
|
+
const resp = await apiRequest("GET", `/v1/apps/${appId}/secrets`);
|
|
221
|
+
handleApiError("apps.secrets.list", resp);
|
|
222
|
+
agentOutput({
|
|
223
|
+
action: "apps.secrets.list",
|
|
224
|
+
result: resp.data,
|
|
225
|
+
next_steps: [
|
|
226
|
+
{ command: `naive apps secrets set ${appId} MY_KEY my_value --target preview`, description: "Add a variable" },
|
|
227
|
+
],
|
|
228
|
+
related_commands: ["naive apps secrets set", "naive apps secrets delete", "naive apps secrets reveal"],
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
secretsCmd
|
|
232
|
+
.command("set <appId> <key> <value>")
|
|
233
|
+
.description("Create or update an environment variable")
|
|
234
|
+
.requiredOption("--target <target>", "Target: preview or production")
|
|
235
|
+
.action(async (appId, key, value, opts) => {
|
|
236
|
+
const resp = await apiRequest("POST", `/v1/apps/${appId}/secrets`, {
|
|
237
|
+
key,
|
|
238
|
+
value,
|
|
239
|
+
target: opts.target,
|
|
240
|
+
});
|
|
241
|
+
handleApiError("apps.secrets.set", resp);
|
|
242
|
+
agentOutput({
|
|
243
|
+
action: "apps.secrets.set",
|
|
244
|
+
result: resp.data,
|
|
245
|
+
next_steps: [
|
|
246
|
+
{ command: `naive apps secrets list ${appId}`, description: "View all variables" },
|
|
247
|
+
{ command: `naive apps deploy ${appId}`, description: "Redeploy to apply changes" },
|
|
248
|
+
],
|
|
249
|
+
hints: [`Set ${key} for ${opts.target}. Redeploy for changes to take effect.`],
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
secretsCmd
|
|
253
|
+
.command("delete <appId> <key>")
|
|
254
|
+
.description("Delete an environment variable")
|
|
255
|
+
.requiredOption("--target <target>", "Target: preview or production")
|
|
256
|
+
.action(async (appId, key, opts) => {
|
|
257
|
+
const resp = await apiRequest("DELETE", `/v1/apps/${appId}/secrets/${encodeURIComponent(key)}?target=${opts.target}`);
|
|
258
|
+
handleApiError("apps.secrets.delete", resp);
|
|
259
|
+
agentOutput({
|
|
260
|
+
action: "apps.secrets.delete",
|
|
261
|
+
result: resp.data,
|
|
262
|
+
next_steps: [{ command: `naive apps secrets list ${appId}`, description: "View remaining variables" }],
|
|
263
|
+
hints: [`Deleted ${key} from ${opts.target}`],
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
secretsCmd
|
|
267
|
+
.command("reveal <appId> <key>")
|
|
268
|
+
.description("Reveal the value of an environment variable")
|
|
269
|
+
.requiredOption("--target <target>", "Target: preview or production")
|
|
270
|
+
.action(async (appId, key, opts) => {
|
|
271
|
+
const resp = await apiRequest("GET", `/v1/apps/${appId}/secrets/${encodeURIComponent(key)}/reveal?target=${opts.target}`);
|
|
272
|
+
handleApiError("apps.secrets.reveal", resp);
|
|
273
|
+
agentOutput({
|
|
274
|
+
action: "apps.secrets.reveal",
|
|
275
|
+
result: resp.data,
|
|
276
|
+
next_steps: [
|
|
277
|
+
{ command: `naive apps secrets set ${appId} ${key} <new-value> --target ${opts.target}`, description: "Update this variable" },
|
|
278
|
+
],
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
// ─── Domains ─────────────────────────────────────────────────────────────────
|
|
282
|
+
const domainsCmd = appsCmd
|
|
283
|
+
.command("domains")
|
|
284
|
+
.description("Manage app domains");
|
|
285
|
+
domainsCmd
|
|
286
|
+
.command("list <appId>")
|
|
287
|
+
.description("List domains attached to an app")
|
|
288
|
+
.action(async (appId) => {
|
|
289
|
+
const resp = await apiRequest("GET", `/v1/apps/${appId}/domains`);
|
|
290
|
+
handleApiError("apps.domains.list", resp);
|
|
291
|
+
agentOutput({
|
|
292
|
+
action: "apps.domains.list",
|
|
293
|
+
result: resp.data,
|
|
294
|
+
next_steps: [
|
|
295
|
+
{ command: `naive apps domains add ${appId} example.com`, description: "Add a custom domain" },
|
|
296
|
+
{ command: `naive apps domains connect ${appId} <domainId>`, description: "Connect a company domain" },
|
|
297
|
+
],
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
domainsCmd
|
|
301
|
+
.command("add <appId> <domain>")
|
|
302
|
+
.description("Add a custom domain to an app")
|
|
303
|
+
.action(async (appId, domain) => {
|
|
304
|
+
const resp = await apiRequest("POST", `/v1/apps/${appId}/domains`, { domain });
|
|
305
|
+
handleApiError("apps.domains.add", resp);
|
|
306
|
+
agentOutput({
|
|
307
|
+
action: "apps.domains.add",
|
|
308
|
+
result: resp.data,
|
|
309
|
+
next_steps: [{ command: `naive apps domains list ${appId}`, description: "View all domains" }],
|
|
310
|
+
hints: [`Added domain ${domain}. Configure DNS records to point to Vercel.`],
|
|
311
|
+
});
|
|
312
|
+
});
|
|
313
|
+
domainsCmd
|
|
314
|
+
.command("remove <appId> <domainId>")
|
|
315
|
+
.description("Remove a domain from an app")
|
|
316
|
+
.action(async (appId, domainId) => {
|
|
317
|
+
const resp = await apiRequest("DELETE", `/v1/apps/${appId}/domains/${domainId}`);
|
|
318
|
+
handleApiError("apps.domains.remove", resp);
|
|
319
|
+
agentOutput({
|
|
320
|
+
action: "apps.domains.remove",
|
|
321
|
+
result: resp.data,
|
|
322
|
+
next_steps: [{ command: `naive apps domains list ${appId}`, description: "View remaining domains" }],
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
domainsCmd
|
|
326
|
+
.command("connect <appId> <domainId>")
|
|
327
|
+
.description("Connect a company-owned domain to an app as its production domain")
|
|
328
|
+
.action(async (appId, domainId) => {
|
|
329
|
+
const resp = await apiRequest("POST", `/v1/apps/${appId}/connect-domain`, { domainId });
|
|
330
|
+
handleApiError("apps.domains.connect", resp);
|
|
331
|
+
const data = resp.data;
|
|
332
|
+
agentOutput({
|
|
333
|
+
action: "apps.domains.connect",
|
|
334
|
+
result: resp.data,
|
|
335
|
+
next_steps: data.pendingDns
|
|
336
|
+
? [{ command: `naive apps domains verify-dns ${appId} ${domainId}`, description: "Verify DNS after configuring records" }]
|
|
337
|
+
: [{ command: `naive apps show ${appId}`, description: "View updated app" }],
|
|
338
|
+
hints: data.pendingDns
|
|
339
|
+
? [`DNS records required for ${data.domain}. Add A and CNAME records, then verify.`]
|
|
340
|
+
: [`Domain ${data.domain} connected successfully`],
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
domainsCmd
|
|
344
|
+
.command("disconnect <appId> <domainId>")
|
|
345
|
+
.description("Disconnect a company domain from an app")
|
|
346
|
+
.action(async (appId, domainId) => {
|
|
347
|
+
const resp = await apiRequest("DELETE", `/v1/apps/${appId}/connect-domain/${domainId}`);
|
|
348
|
+
handleApiError("apps.domains.disconnect", resp);
|
|
349
|
+
agentOutput({
|
|
350
|
+
action: "apps.domains.disconnect",
|
|
351
|
+
result: resp.data,
|
|
352
|
+
next_steps: [{ command: `naive apps show ${appId}`, description: "View updated app" }],
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
domainsCmd
|
|
356
|
+
.command("verify-dns <appId> <domainId>")
|
|
357
|
+
.description("Verify DNS configuration for a connected domain")
|
|
358
|
+
.action(async (appId, domainId) => {
|
|
359
|
+
const resp = await apiRequest("POST", `/v1/apps/${appId}/verify-domain-dns`, { domainId });
|
|
360
|
+
handleApiError("apps.domains.verify-dns", resp);
|
|
361
|
+
const data = resp.data;
|
|
362
|
+
agentOutput({
|
|
363
|
+
action: "apps.domains.verify-dns",
|
|
364
|
+
result: resp.data,
|
|
365
|
+
next_steps: data.verified
|
|
366
|
+
? [{ command: `naive apps show ${appId}`, description: "View app with verified domain" }]
|
|
367
|
+
: [{ command: `naive apps domains verify-dns ${appId} ${domainId}`, description: "Try again after DNS propagation (up to 48h)" }],
|
|
368
|
+
hints: data.verified
|
|
369
|
+
? [`Domain ${data.domain} verified and connected`]
|
|
370
|
+
: [`DNS not ready for ${data.domain}. Propagation can take up to 48 hours.`],
|
|
371
|
+
});
|
|
372
|
+
});
|
|
373
|
+
// ─── Retry ──────────────────────────────────────────────────────────────────
|
|
374
|
+
appsCmd
|
|
375
|
+
.command("retry <id>")
|
|
376
|
+
.description("Retry failed provisioning (Vercel/Supabase setup)")
|
|
377
|
+
.action(async (id) => {
|
|
378
|
+
const resp = await apiRequest("POST", `/v1/apps/${id}/retry`);
|
|
379
|
+
handleApiError("apps.retry", resp);
|
|
380
|
+
agentOutput({
|
|
381
|
+
action: "apps.retry",
|
|
382
|
+
result: resp.data,
|
|
383
|
+
next_steps: [
|
|
384
|
+
{ command: `naive apps show ${id}`, description: "Check provisioning status" },
|
|
385
|
+
],
|
|
386
|
+
hints: ["Retrying provisioning — check status in a few seconds"],
|
|
387
|
+
related_commands: ["naive apps show", "naive apps deploy"],
|
|
388
|
+
});
|
|
389
|
+
});
|
|
390
|
+
// ─── Database (fullstack apps) ──────────────────────────────────────────────
|
|
391
|
+
const dbCmd = appsCmd
|
|
392
|
+
.command("db")
|
|
393
|
+
.description("Database operations for fullstack apps (Supabase)");
|
|
394
|
+
dbCmd
|
|
395
|
+
.command("tables <appId>")
|
|
396
|
+
.description("List database tables for a fullstack app")
|
|
397
|
+
.action(async (appId) => {
|
|
398
|
+
const resp = await apiRequest("GET", `/v1/apps/${appId}/db/tables`);
|
|
399
|
+
handleApiError("apps.db.tables", resp);
|
|
400
|
+
agentOutput({
|
|
401
|
+
action: "apps.db.tables",
|
|
402
|
+
result: resp.data,
|
|
403
|
+
next_steps: [
|
|
404
|
+
{ command: `naive apps db query ${appId} "SELECT * FROM <table> LIMIT 10"`, description: "Query a table" },
|
|
405
|
+
],
|
|
406
|
+
related_commands: ["naive apps db query"],
|
|
407
|
+
});
|
|
408
|
+
});
|
|
409
|
+
dbCmd
|
|
410
|
+
.command("query <appId> <sql>")
|
|
411
|
+
.description("Run a SQL query against the app's Supabase database")
|
|
412
|
+
.action(async (appId, sql) => {
|
|
413
|
+
const resp = await apiRequest("POST", `/v1/apps/${appId}/db/query`, { sql });
|
|
414
|
+
handleApiError("apps.db.query", resp);
|
|
415
|
+
agentOutput({
|
|
416
|
+
action: "apps.db.query",
|
|
417
|
+
result: resp.data,
|
|
418
|
+
next_steps: [
|
|
419
|
+
{ command: `naive apps db tables ${appId}`, description: "List available tables" },
|
|
420
|
+
],
|
|
421
|
+
related_commands: ["naive apps db tables"],
|
|
422
|
+
});
|
|
423
|
+
});
|
|
424
|
+
//# sourceMappingURL=apps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"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"}
|