@mediamonks/canopy-cli 0.7.29 → 0.7.31
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/ai-DHLnyqfq.mjs +55 -0
- package/dist/{ui-CeupNHNa.mjs → api-C4rMhE7i.mjs} +1 -122
- package/dist/{db-KTLn8J1u.mjs → db-BB6O6085.mjs} +3 -2
- package/dist/{deploy-CBf44bvG.mjs → deploy-B-znPE-v.mjs} +4 -2
- package/dist/{dev-JlzMZJow.mjs → dev-CkhBnSlv.mjs} +13 -6
- package/dist/dev-MoHHjQh1.mjs +2 -0
- package/dist/dev-server-file-Dk9pk4AR.mjs +54 -0
- package/dist/{dev-worker-DjJGSUGj.mjs → dev-worker-CaCsGBkn.mjs} +34 -2
- package/dist/docs/agent-tools.md +213 -0
- package/dist/docs/cli-ai.md +43 -0
- package/dist/docs/cli-mcp.md +88 -0
- package/dist/docs/cli.md +2 -0
- package/dist/docs/developers-agents-and-ai.md +8 -0
- package/dist/docs/index.json +15 -0
- package/dist/docs/platform-ai-usage.md +6 -4
- package/dist/docs/sdk-ai.md +41 -10
- package/dist/{docs-ZQnhFSKT.mjs → docs-YD4z70gq.mjs} +2 -2
- package/dist/{egress-Cn9zDfDT.mjs → egress-If_Gsx_M.mjs} +2 -1
- package/dist/{feedback-CNfUjjNw.mjs → feedback-Cd7Rvg9a.mjs} +3 -2
- package/dist/index.mjs +33 -28
- package/dist/{local-BA_TPWpN.mjs → local-DAYCNUyz.mjs} +3 -3
- package/dist/{login-MX0xq8UE.mjs → login-B-m-i8uu.mjs} +1 -1
- package/dist/{logs-D5RWqsWl.mjs → logs-DQQOawOG.mjs} +2 -1
- package/dist/mcp-GKwctfHN.mjs +457 -0
- package/dist/{migrations-C8yRPJIX.mjs → migrations-Czlcddyz.mjs} +1 -1
- package/dist/{open-BJgd0R61.mjs → open-DcaQKi1v.mjs} +1 -1
- package/dist/{package-DzU_2IJi.mjs → package-CiKTWo0_.mjs} +1 -1
- package/dist/{projects-BG7Injpb.mjs → projects-CN2YhCZn.mjs} +2 -1
- package/dist/{schedule-CLuksxSM.mjs → schedule-C5lMf3ny.mjs} +2 -1
- package/dist/{secrets-Bl3uOx4l.mjs → secrets-BSEjZnxg.mjs} +2 -1
- package/dist/skill/canopy/SKILL.md +10 -0
- package/dist/{skill-CQ4a__Ga.mjs → skill-BWmXiJAz.mjs} +2 -2
- package/dist/{src-C7zPhbxi.mjs → src-BkACMkol.mjs} +15 -1
- package/dist/{staging-D06zobnf.mjs → staging-BZVty57b.mjs} +2 -1
- package/dist/templates/spa/package.json +1 -1
- package/dist/templates/worker/package.json +1 -1
- package/dist/templates/worker/worker/index.ts +17 -0
- package/dist/{token-C_PFNqcv.mjs → token-HHlUR0CF.mjs} +2 -1
- package/dist/ui-C_jSc1Kz.mjs +123 -0
- package/dist/{upgrade-BzmIrnjs.mjs → upgrade-Cexs9KYX.mjs} +2 -2
- package/dist/{usage-CV7TjTO8.mjs → usage-CUYrWxv0.mjs} +2 -1
- package/package.json +4 -2
- package/dist/dev-DGCu9MjB.mjs +0 -2
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: canopy mcp
|
|
3
|
+
description: Let AI agents use a project's backend as MCP tools — check access, print client config, and run the stdio server.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`canopy mcp` connects AI agents (Claude Code, Claude Desktop, Cursor, any MCP
|
|
7
|
+
client) to a project's tools. The agent always acts as you. See
|
|
8
|
+
[Agent tools](https://docs.canopy.website/guides/agent-tools) for how a project offers tools.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
canopy mcp add [slug] [--channel staging]
|
|
14
|
+
canopy mcp serve [slug] [--channel staging] [--local]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## canopy mcp add
|
|
18
|
+
|
|
19
|
+
Checks that you're signed in and may open the project, reports how many tools
|
|
20
|
+
it serves, and prints configuration for your client: a `claude mcp add` line
|
|
21
|
+
for Claude Code, and an `mcpServers` JSON block for Claude Desktop, Cursor and
|
|
22
|
+
others. It writes nothing; copy what you need.
|
|
23
|
+
|
|
24
|
+
The printed command names the site (`--profile`) and, for staging, the
|
|
25
|
+
channel, so it keeps working whatever your default site is. It contains no
|
|
26
|
+
credentials.
|
|
27
|
+
|
|
28
|
+
## canopy mcp serve
|
|
29
|
+
|
|
30
|
+
The MCP server your client starts. It talks MCP on stdin/stdout and writes
|
|
31
|
+
nothing else there, so everything it has to say goes to stderr, where clients
|
|
32
|
+
show it as the server's log.
|
|
33
|
+
|
|
34
|
+
It uses your `canopy login`: it exchanges it for short-lived credentials for
|
|
35
|
+
this one project, keeps them in memory, and renews them as needed. If you're
|
|
36
|
+
not signed in, it exits with a message telling you to run `canopy login`.
|
|
37
|
+
|
|
38
|
+
Only the project's tools reach the agent, and the tool list stays current: a
|
|
39
|
+
redeploy with new tools reaches a running session without restarting
|
|
40
|
+
anything.
|
|
41
|
+
|
|
42
|
+
## Arguments & flags
|
|
43
|
+
|
|
44
|
+
- `slug` — the project. Defaults to the `canopy.json` in the current directory.
|
|
45
|
+
- `--channel <live|staging>` — which channel's backend to use. Default `live`.
|
|
46
|
+
- `--local` (serve only) — use the tools of the `canopy dev` running in the
|
|
47
|
+
current directory instead of the deployed project.
|
|
48
|
+
- `--profile <id>` — which Canopy site, as for every command.
|
|
49
|
+
|
|
50
|
+
## Examples
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
canopy mcp add notes
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Check you can use `notes` and print its client configuration.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
claude mcp add canopy-notes -- canopy mcp serve notes --profile main
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Add `notes` to Claude Code (the line `canopy mcp add` printed).
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
claude mcp add notes-staging -- canopy mcp serve notes --channel staging --profile main
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Try the staging channel's tools before promoting them.
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
claude mcp add notes-local -- canopy mcp serve --local
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
While developing: the tools from your working tree, served by `canopy dev`.
|
|
75
|
+
|
|
76
|
+
## When it can't connect
|
|
77
|
+
|
|
78
|
+
`canopy mcp add` and `canopy mcp serve` say what's wrong in plain words. The
|
|
79
|
+
usual cases:
|
|
80
|
+
|
|
81
|
+
- **Not signed in** — run `canopy login`.
|
|
82
|
+
- **Limited to its collaborators** — ask the owner to add you.
|
|
83
|
+
- **No backend, or serves no tools** — the project has no `worker/`, or it
|
|
84
|
+
doesn't mount any tools yet.
|
|
85
|
+
- **Redeploy required** — the backend was deployed before tools existed. Run
|
|
86
|
+
`canopy deploy`.
|
|
87
|
+
- **Invalid tool definitions** — two tools share a name, or a schema is wrong.
|
|
88
|
+
The message names the tool.
|
package/dist/docs/cli.md
CHANGED
|
@@ -60,6 +60,8 @@ has a full page per command.
|
|
|
60
60
|
`--snapshot <key>`. `--yes` skips the confirmation. **Destructive.**
|
|
61
61
|
- `canopy usage` — AI spend and storage for the project (same data as the
|
|
62
62
|
dashboard Usage tab). `--project <slug>` / `--json` for agents.
|
|
63
|
+
- `canopy ai models` — the AI models and `auto/*` aliases this site offers,
|
|
64
|
+
with prices. Works from any directory; `--json` for agents.
|
|
63
65
|
|
|
64
66
|
## CI / deploy tokens
|
|
65
67
|
|
|
@@ -64,6 +64,14 @@ already knows the rules:
|
|
|
64
64
|
use `canopy dev --local` for an offline sandbox where writes never reach
|
|
65
65
|
the platform.
|
|
66
66
|
|
|
67
|
+
## Give agents your project's tools
|
|
68
|
+
|
|
69
|
+
The other way round: your project can offer its backend to agents as MCP
|
|
70
|
+
tools, so a colleague's Claude Code or Cursor can call it (as them) without
|
|
71
|
+
opening the app. Wrap the routes you already have with `mountMcpTools`, deploy,
|
|
72
|
+
and people connect with `canopy mcp add <slug>`. See
|
|
73
|
+
[Agent tools](https://docs.canopy.website/guides/agent-tools).
|
|
74
|
+
|
|
67
75
|
## Prompts that work
|
|
68
76
|
|
|
69
77
|
With the skill installed, these are safe, copy-pasteable asks — each maps to
|
package/dist/docs/index.json
CHANGED
|
@@ -67,6 +67,11 @@
|
|
|
67
67
|
"title": "CI and deploy tokens",
|
|
68
68
|
"summary": "Push-to-main deploys using a project-scoped deploy token."
|
|
69
69
|
},
|
|
70
|
+
{
|
|
71
|
+
"slug": "agent-tools",
|
|
72
|
+
"title": "Agent tools (MCP)",
|
|
73
|
+
"summary": "Let AI agents like Claude Code and Cursor use your project's backend as tools — as the person running them."
|
|
74
|
+
},
|
|
70
75
|
{
|
|
71
76
|
"slug": "porting-nextjs",
|
|
72
77
|
"title": "Porting a Next.js app",
|
|
@@ -276,11 +281,21 @@
|
|
|
276
281
|
"title": "canopy usage",
|
|
277
282
|
"summary": "Show a project's AI spend, storage footprint, and deploy count from the terminal."
|
|
278
283
|
},
|
|
284
|
+
{
|
|
285
|
+
"slug": "cli-ai",
|
|
286
|
+
"title": "canopy ai models",
|
|
287
|
+
"summary": "List the AI models and auto/* aliases your site offers, with prices."
|
|
288
|
+
},
|
|
279
289
|
{
|
|
280
290
|
"slug": "cli-feedback",
|
|
281
291
|
"title": "canopy feedback",
|
|
282
292
|
"summary": "Read and triage a project's feedback inbox, or file a bug/feedback report — against a project or against Canopy itself."
|
|
283
293
|
},
|
|
294
|
+
{
|
|
295
|
+
"slug": "cli-mcp",
|
|
296
|
+
"title": "canopy mcp",
|
|
297
|
+
"summary": "Let AI agents use a project's backend as MCP tools — check access, print client config, and run the stdio server."
|
|
298
|
+
},
|
|
284
299
|
{
|
|
285
300
|
"slug": "cli-open",
|
|
286
301
|
"title": "canopy open",
|
|
@@ -21,10 +21,12 @@ const reply = await canopy.ai.chat({
|
|
|
21
21
|
|
|
22
22
|
- **No keys in your code.** Requests authenticate as the project; the
|
|
23
23
|
platform holds the provider credentials.
|
|
24
|
-
- **
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
- **Pick a tier, not a model.** Name `auto/low` (the default), `auto/mid`, or
|
|
25
|
+
`auto/high` and the platform answers with the best current model for it.
|
|
26
|
+
You can also name a specific model from the site's list. `canopy ai models`
|
|
27
|
+
and the Models section on your project's Usage tab show it, with prices.
|
|
28
|
+
Names that aren't on the list are refused, and retired models keep working,
|
|
29
|
+
answered by their replacement, until you switch.
|
|
28
30
|
- **Streaming** via `canopy.ai.chatStream()` for chat-style UIs.
|
|
29
31
|
- **Documents and images.** Messages can attach files — reference something
|
|
30
32
|
in the project's [blob storage](https://docs.canopy.website/sdk/blob) by key, or inline base64 — see
|
package/dist/docs/sdk-ai.md
CHANGED
|
@@ -8,6 +8,29 @@ Every request authenticates as the project and is metered against hard
|
|
|
8
8
|
per-project budgets — spend, limits, and how prompts are handled by the
|
|
9
9
|
model providers are covered in [AI access & usage](https://docs.canopy.website/platform/ai-usage).
|
|
10
10
|
|
|
11
|
+
## Picking a model
|
|
12
|
+
|
|
13
|
+
Name a quality tier instead of a model id, and the platform answers with the
|
|
14
|
+
best current model for it:
|
|
15
|
+
|
|
16
|
+
- `auto/low` — fast and cheap. The **default** when you leave `model` out.
|
|
17
|
+
- `auto/mid` — a good balance for most product features.
|
|
18
|
+
- `auto/high` — the most capable model, for hard reasoning and long documents.
|
|
19
|
+
|
|
20
|
+
Each alias moves to newer models as they arrive, without a code change. You
|
|
21
|
+
can also name a specific model from the site's list. Run
|
|
22
|
+
`canopy ai models` to see the aliases, what each answers with right now, and
|
|
23
|
+
every model with its price:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
canopy ai models
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Only names on that list work: anything else is refused with a `400` that lists
|
|
30
|
+
what is available. When a model is retired, calls naming it keep working,
|
|
31
|
+
answered by its replacement: `res.model` names the model that answered, and
|
|
32
|
+
the response carries a `deprecation` notice (below) until you switch.
|
|
33
|
+
|
|
11
34
|
## ai.chat(options)
|
|
12
35
|
|
|
13
36
|
One-shot chat completion. Takes a `ChatOptions` object, resolves to a
|
|
@@ -19,7 +42,7 @@ const res = await canopy.ai.chat({
|
|
|
19
42
|
{ role: "system", content: "You are terse." },
|
|
20
43
|
{ role: "user", content: "Say hi in five words." },
|
|
21
44
|
],
|
|
22
|
-
model: "
|
|
45
|
+
model: "auto/mid", // optional — defaults to auto/low
|
|
23
46
|
temperature: 0.7, // optional, 0–2
|
|
24
47
|
maxTokens: 256, // optional
|
|
25
48
|
});
|
|
@@ -34,10 +57,10 @@ res.usage; // { inputTokens: number, outputTokens: number }
|
|
|
34
57
|
- `messages` — required, non-empty array of `{ role, content }`. `role` is
|
|
35
58
|
`"system" | "user" | "assistant"`; `content` is a non-empty string, or an
|
|
36
59
|
array of content parts to attach documents and images (below).
|
|
37
|
-
- `model` — optional `
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
60
|
+
- `model` — optional: an alias (`auto/low`, `auto/mid`, `auto/high`) or a
|
|
61
|
+
`"{provider}/{model}"` id from the site's list (`canopy ai models`). Omit it
|
|
62
|
+
and `auto/low` answers. A name that isn't on the list fails with a message
|
|
63
|
+
listing what _is_ available.
|
|
41
64
|
- `temperature` — optional number between 0 and 2. Reasoning models (the
|
|
42
65
|
GPT-5 family) only accept their default temperature, so the platform drops
|
|
43
66
|
this setting for them rather than failing the call — it has effect on
|
|
@@ -52,7 +75,11 @@ res.usage; // { inputTokens: number, outputTokens: number }
|
|
|
52
75
|
|
|
53
76
|
**`ChatResponse`:** `{ message, model, usage: { inputTokens, outputTokens } }`.
|
|
54
77
|
`message.role` is `"assistant"` and `message.content` is always a plain
|
|
55
|
-
string, whatever went in.
|
|
78
|
+
string, whatever went in. `model` is the model that actually answered. When
|
|
79
|
+
you named a retired model, the response also has
|
|
80
|
+
`deprecation: { requested, replacement }`. Switch to the replacement or an
|
|
81
|
+
alias. Streams and the endpoints below say the same with a `Deprecation:
|
|
82
|
+
true` response header.
|
|
56
83
|
|
|
57
84
|
## Attaching documents and images
|
|
58
85
|
|
|
@@ -143,8 +170,10 @@ The compat endpoint speaks OpenAI's chat-completions dialect to every model —
|
|
|
143
170
|
portable, but the lowest common denominator. When you want a provider's own
|
|
144
171
|
protocol — Anthropic prompt caching, PDFs with citations, or OpenAI's
|
|
145
172
|
Responses API — use the native base URLs from `endpoint()`. Requests pass
|
|
146
|
-
through to the provider unchanged; auth, the model
|
|
147
|
-
|
|
173
|
+
through to the provider unchanged; auth, the model list, the daily budget,
|
|
174
|
+
and metering all still apply. Aliases work here too: on the Anthropic endpoint
|
|
175
|
+
`auto/mid` picks the best Claude model for that tier, on the OpenAI endpoint
|
|
176
|
+
the best OpenAI one.
|
|
148
177
|
|
|
149
178
|
```ts
|
|
150
179
|
import Anthropic from "@anthropic-ai/sdk";
|
|
@@ -152,7 +181,7 @@ import Anthropic from "@anthropic-ai/sdk";
|
|
|
152
181
|
const { native } = await canopy.ai.endpoint();
|
|
153
182
|
const anthropic = new Anthropic({ baseURL: native.anthropic, apiKey: "unused" });
|
|
154
183
|
const msg = await anthropic.messages.create({
|
|
155
|
-
model: "
|
|
184
|
+
model: "auto/mid", // an alias, or a model id from `canopy ai models` (bare or "anthropic/…")
|
|
156
185
|
max_tokens: 1024,
|
|
157
186
|
messages: [{ role: "user", content: "Hello" }],
|
|
158
187
|
});
|
|
@@ -188,7 +217,9 @@ as the `message`. Two worth handling:
|
|
|
188
217
|
or after a maintainer raises it). Everything else in your app keeps
|
|
189
218
|
working.
|
|
190
219
|
- **Invalid request** — status `400`, body contains `"invalid_chat"` and a
|
|
191
|
-
detail explaining which option was rejected.
|
|
220
|
+
detail explaining which option was rejected. A model that isn't on the
|
|
221
|
+
site's list lands here too, with the available aliases and models in the
|
|
222
|
+
detail.
|
|
192
223
|
|
|
193
224
|
> **Note:** Budgets are enforced before every call, so a runaway loop becomes a capped bill — see [AI access
|
|
194
225
|
> & usage](https://docs.canopy.website/platform/ai-usage) for how spend is tracked and displayed.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as version } from "./package-
|
|
1
|
+
import { t as version } from "./package-CiKTWo0_.mjs";
|
|
2
2
|
import { n as siteConfig } from "./site-DM2J10CB.mjs";
|
|
3
3
|
import { i as latestKnownVersion, r as compareSemver } from "./version-check-CcsA1QjI.mjs";
|
|
4
|
-
import { r as reportErrors } from "./ui-
|
|
4
|
+
import { r as reportErrors } from "./ui-C_jSc1Kz.mjs";
|
|
5
5
|
import { defineCommand } from "citty";
|
|
6
6
|
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
|
|
7
7
|
import { homedir } from "node:os";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { a as projectDirArgs, c as resolveProject } from "./site-DM2J10CB.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { i as apiRequest, o as withContext } from "./api-C4rMhE7i.mjs";
|
|
3
|
+
import { a as unwrap, i as requireTty, r as reportErrors, t as formatDateTime } from "./ui-C_jSc1Kz.mjs";
|
|
3
4
|
import { defineCommand } from "citty";
|
|
4
5
|
import * as p from "@clack/prompts";
|
|
5
6
|
//#region src/egress.ts
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { t as version } from "./package-
|
|
1
|
+
import { t as version } from "./package-CiKTWo0_.mjs";
|
|
2
2
|
import { a as projectDirArgs, c as resolveProject, d as tryResolveProject, n as siteConfig, u as tryReadCanopyJson } from "./site-DM2J10CB.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { a as apiUpload, i as apiRequest, r as apiDownload } from "./api-C4rMhE7i.mjs";
|
|
4
|
+
import { r as reportErrors, t as formatDateTime } from "./ui-C_jSc1Kz.mjs";
|
|
4
5
|
import { defineCommand } from "citty";
|
|
5
6
|
import { basename, extname, join } from "node:path";
|
|
6
7
|
import { readFile, writeFile } from "node:fs/promises";
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { t as version } from "./package-
|
|
2
|
+
import { t as version } from "./package-CiKTWo0_.mjs";
|
|
3
3
|
import { r as siteHeaderLine, t as setInvocationProfile } from "./site-DM2J10CB.mjs";
|
|
4
4
|
import { a as notifyOfUpdate, o as runRefresh } from "./version-check-CcsA1QjI.mjs";
|
|
5
5
|
import { defineCommand, runMain } from "citty";
|
|
@@ -17,6 +17,8 @@ import { defineCommand, runMain } from "citty";
|
|
|
17
17
|
* db pull|snapshot|restore [phase 2]
|
|
18
18
|
* logs [--follow] read the project's worker logs [phase 2]
|
|
19
19
|
* usage AI spend + storage for a project [phase 1]
|
|
20
|
+
* ai models the site's AI models and auto/* aliases
|
|
21
|
+
* mcp add|serve a project's tools for AI agents (docs/49)
|
|
20
22
|
* open open the deployed project / dashboard [phase 1]
|
|
21
23
|
*/
|
|
22
24
|
if (process.env["CANOPY_UPDATE_REFRESH"] === "1") {
|
|
@@ -60,35 +62,38 @@ const main = defineCommand({
|
|
|
60
62
|
description: "canopy — create and deploy vibecoded projects"
|
|
61
63
|
},
|
|
62
64
|
subCommands: {
|
|
63
|
-
login: () => import("./login-
|
|
64
|
-
whoami: () => import("./login-
|
|
65
|
-
logout: () => import("./login-
|
|
66
|
-
create: () => import("./projects-
|
|
67
|
-
init: () => import("./projects-
|
|
68
|
-
projects: () => import("./projects-
|
|
69
|
-
delete: () => import("./projects-
|
|
70
|
-
dev: () => import("./dev-
|
|
71
|
-
deploy: () => import("./deploy-
|
|
72
|
-
promote: () => import("./deploy-
|
|
73
|
-
staging: () => import("./staging-
|
|
74
|
-
rollback: () => import("./deploy-
|
|
75
|
-
download: () => import("./deploy-
|
|
76
|
-
token: () => import("./token-
|
|
77
|
-
egress: () => import("./egress-
|
|
78
|
-
secrets: () => import("./secrets-
|
|
79
|
-
schedule: () => import("./schedule-
|
|
80
|
-
feedback: () => import("./feedback-
|
|
81
|
-
db: () => import("./db-
|
|
82
|
-
usage: () => import("./usage-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
65
|
+
login: () => import("./login-B-m-i8uu.mjs").then((m) => m.loginCommand),
|
|
66
|
+
whoami: () => import("./login-B-m-i8uu.mjs").then((m) => m.whoamiCommand),
|
|
67
|
+
logout: () => import("./login-B-m-i8uu.mjs").then((m) => m.logoutCommand),
|
|
68
|
+
create: () => import("./projects-CN2YhCZn.mjs").then((m) => m.createCommand),
|
|
69
|
+
init: () => import("./projects-CN2YhCZn.mjs").then((m) => m.initCommand),
|
|
70
|
+
projects: () => import("./projects-CN2YhCZn.mjs").then((m) => m.projectsCommand),
|
|
71
|
+
delete: () => import("./projects-CN2YhCZn.mjs").then((m) => m.deleteCommand),
|
|
72
|
+
dev: () => import("./dev-MoHHjQh1.mjs").then((m) => m.devCommand),
|
|
73
|
+
deploy: () => import("./deploy-B-znPE-v.mjs").then((m) => m.deployCommand),
|
|
74
|
+
promote: () => import("./deploy-B-znPE-v.mjs").then((m) => m.promoteCommand),
|
|
75
|
+
staging: () => import("./staging-BZVty57b.mjs").then((m) => m.stagingCommand),
|
|
76
|
+
rollback: () => import("./deploy-B-znPE-v.mjs").then((m) => m.rollbackCommand),
|
|
77
|
+
download: () => import("./deploy-B-znPE-v.mjs").then((m) => m.downloadCommand),
|
|
78
|
+
token: () => import("./token-HHlUR0CF.mjs").then((m) => m.tokenCommand),
|
|
79
|
+
egress: () => import("./egress-If_Gsx_M.mjs").then((m) => m.egressCommand),
|
|
80
|
+
secrets: () => import("./secrets-BSEjZnxg.mjs").then((m) => m.secretsCommand),
|
|
81
|
+
schedule: () => import("./schedule-C5lMf3ny.mjs").then((m) => m.scheduleCommand),
|
|
82
|
+
feedback: () => import("./feedback-Cd7Rvg9a.mjs").then((m) => m.feedbackCommand),
|
|
83
|
+
db: () => import("./db-BB6O6085.mjs").then((m) => m.dbCommand),
|
|
84
|
+
usage: () => import("./usage-CUYrWxv0.mjs").then((m) => m.usageCommand),
|
|
85
|
+
ai: () => import("./ai-DHLnyqfq.mjs").then((m) => m.aiCommand),
|
|
86
|
+
open: () => import("./open-DcaQKi1v.mjs").then((m) => m.openCommand),
|
|
87
|
+
docs: () => import("./docs-YD4z70gq.mjs").then((m) => m.docsCommand),
|
|
88
|
+
skill: () => import("./skill-BWmXiJAz.mjs").then((m) => m.skillCommand),
|
|
89
|
+
upgrade: () => import("./upgrade-Cexs9KYX.mjs").then((m) => m.upgradeCommand),
|
|
90
|
+
logs: () => import("./logs-DQQOawOG.mjs").then((m) => m.logsCommand),
|
|
91
|
+
mcp: () => import("./mcp-GKwctfHN.mjs").then((m) => m.mcpCommand)
|
|
88
92
|
}
|
|
89
93
|
});
|
|
90
|
-
|
|
91
|
-
if (process.argv[2]
|
|
94
|
+
const quiet = process.argv[2] === "mcp" && process.argv[3] === "serve";
|
|
95
|
+
if (process.argv[2] !== "upgrade" && !quiet) notifyOfUpdate(version);
|
|
96
|
+
if (!quiet && process.argv[2] && process.argv[2] !== "--help" && process.argv[2] !== "-h") console.error(siteHeaderLine(version));
|
|
92
97
|
await runMain(main);
|
|
93
98
|
//#endregion
|
|
94
99
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as
|
|
3
|
-
import { i as rewriteApiPath } from "./dev-
|
|
1
|
+
import { n as apiDataRequest } from "./api-C4rMhE7i.mjs";
|
|
2
|
+
import { a as dbRouter, i as realtimeRouter, o as META_COLUMNS, s as blobRouter } from "./src-BkACMkol.mjs";
|
|
3
|
+
import { i as rewriteApiPath } from "./dev-CkhBnSlv.mjs";
|
|
4
4
|
import { createRequire } from "node:module";
|
|
5
5
|
import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
6
6
|
import { dirname, join, relative, sep } from "node:path";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { _ as writeConfigFile, f as clearAllProfileTokens, g as upsertProfileAuth, h as setActiveProfile, m as readConfigFile, n as siteConfig, p as listBakedProfiles, v as getBakedProfile, y as isProfileId } from "./site-DM2J10CB.mjs";
|
|
2
|
-
import { n as openBrowser, r as reportErrors } from "./ui-
|
|
2
|
+
import { n as openBrowser, r as reportErrors } from "./ui-C_jSc1Kz.mjs";
|
|
3
3
|
import { defineCommand } from "citty";
|
|
4
4
|
import { hostname } from "node:os";
|
|
5
5
|
import * as p from "@clack/prompts";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { c as resolveProject, o as projectFlagArgs } from "./site-DM2J10CB.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { i as apiRequest, o as withContext } from "./api-C4rMhE7i.mjs";
|
|
3
|
+
import { r as reportErrors } from "./ui-C_jSc1Kz.mjs";
|
|
3
4
|
import { defineCommand } from "citty";
|
|
4
5
|
//#region src/logs.ts
|
|
5
6
|
/**
|