@mediamonks/canopy-cli 0.7.42 → 0.7.43
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-DpQ1nLka.mjs → ai-FBHTSCLZ.mjs} +2 -2
- package/dist/{api-Do9c8tZ_.mjs → api-Bl6SG8Oq.mjs} +2 -2
- package/dist/{browse-Dp5HytqK.mjs → browse-dyOThTyf.mjs} +1 -1
- package/dist/{db-BNsX7sXo.mjs → db-BJJGydgL.mjs} +3 -3
- package/dist/{deploy-CXMLABvH.mjs → deploy-ExrIeX_m.mjs} +22 -3
- package/dist/dev-BmI5kwoG.mjs +2 -0
- package/dist/{dev-CPR-9slK.mjs → dev-adLLSY1F.mjs} +7 -7
- package/dist/{dev-worker-D78leKBJ.mjs → dev-worker-DJekKSdb.mjs} +1 -1
- package/dist/docs/developers-architecture.md +12 -0
- package/dist/docs/platform-egress.md +14 -7
- package/dist/docs/static-serving.md +13 -4
- package/dist/{docs-CkJGcCpR.mjs → docs-CaAgJWK3.mjs} +3 -3
- package/dist/{egress-D6qyaaAn.mjs → egress-C2amvqmE.mjs} +2 -2
- package/dist/{feedback-DMgUUl0V.mjs → feedback-CMnG2Zvs.mjs} +3 -3
- package/dist/index.mjs +32 -32
- package/dist/{local-w2wXfE1d.mjs → local-2xtxtoUd.mjs} +3 -3
- package/dist/{login-CeNvHLUv.mjs → login-CREcZfLH.mjs} +2 -2
- package/dist/{logs-BzgJfWNP.mjs → logs-BnrNZvLc.mjs} +2 -2
- package/dist/{mcp-DFLaXiY_.mjs → mcp-BVIU4j9N.mjs} +2 -2
- package/dist/{migrations-Bsu4quya.mjs → migrations-D8NqjC5I.mjs} +1 -1
- package/dist/{open-D71Ms1nG.mjs → open-Bpz4C2Sr.mjs} +1 -1
- package/dist/{package-CVDpzGgA.mjs → package-XOtqboS1.mjs} +1 -1
- package/dist/project-template-715H_lnu.mjs +2 -0
- package/dist/{project-template-BXfHpsI8.mjs → project-template-Cdr1uwwE.mjs} +2 -2
- package/dist/{projects-BWTIk80a.mjs → projects-BRG2HnBs.mjs} +4 -4
- package/dist/{rename-BdIFrqvG.mjs → rename-BGKa25Rq.mjs} +2 -2
- package/dist/{repo-LSOxnmUk.mjs → repo-CwT2RDoW.mjs} +2 -2
- package/dist/repo-DmFs6H9m.mjs +2 -0
- package/dist/{schedule-DpMIpCGC.mjs → schedule-BcqBspn3.mjs} +2 -2
- package/dist/{secrets-BVx8L0Gj.mjs → secrets-BjbIi7Gp.mjs} +2 -2
- package/dist/{skill-D58yV6K8.mjs → skill-Ct-aCOzg.mjs} +2 -2
- package/dist/{src-RUf3Gfuh.mjs → src-CScXotBB.mjs} +727 -1
- package/dist/{staging-ynPlMiHW.mjs → staging-_2Js0Fkc.mjs} +2 -2
- package/dist/{token-CxiPrKn_.mjs → token-7vSNuz-X.mjs} +2 -2
- package/dist/{ui-CDUJq-X-.mjs → ui-CLnICOne.mjs} +1 -1
- package/dist/{upgrade-Dll5rhOQ.mjs → upgrade-DJogeXAF.mjs} +2 -2
- package/dist/{usage-BtPsb7Iu.mjs → usage-DGGmTwjJ.mjs} +2 -2
- package/package.json +1 -1
- package/dist/dev-Dj3wFKHe.mjs +0 -2
- package/dist/project-template-BbmSmraT.mjs +0 -2
- package/dist/repo-JBKJqyoS.mjs +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as apiRequest, f as withContext } from "./api-
|
|
2
|
-
import { r as reportErrors } from "./ui-
|
|
1
|
+
import { a as apiRequest, f as withContext } from "./api-Bl6SG8Oq.mjs";
|
|
2
|
+
import { r as reportErrors } from "./ui-CLnICOne.mjs";
|
|
3
3
|
import { defineCommand } from "citty";
|
|
4
4
|
//#region src/ai.ts
|
|
5
5
|
/**
|
|
@@ -57,11 +57,11 @@ const ERROR_COPY = {
|
|
|
57
57
|
fix: "Per-project workers, schedules and secrets are capability-gated per target — remove the unsupported part (e.g. the worker bundle) or run against a target that supports it."
|
|
58
58
|
},
|
|
59
59
|
deploy_too_large: {
|
|
60
|
-
why: "the deploy bundle exceeds the
|
|
60
|
+
why: "the deploy bundle exceeds the 50 MB limit",
|
|
61
61
|
fix: "Trim large assets from the build output (or move them to blob storage), then redeploy."
|
|
62
62
|
},
|
|
63
63
|
too_many_files: {
|
|
64
|
-
why: "the deploy has more than
|
|
64
|
+
why: "the deploy has more than 1000 files",
|
|
65
65
|
fix: "Reduce the file count — bundle/minify assets or drop what isn't served — then redeploy."
|
|
66
66
|
},
|
|
67
67
|
empty_deploy: {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { p as tryResolveProject, r as siteConfig } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { a as apiRequest, t as ApiError } from "./api-
|
|
2
|
+
import { a as apiRequest, t as ApiError } from "./api-Bl6SG8Oq.mjs";
|
|
3
3
|
import { defineCommand } from "citty";
|
|
4
4
|
//#region src/browse.ts
|
|
5
5
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { l as resolveProject, s as projectFlagArgs } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { a as apiRequest, f as withContext, r as apiDataRequest } from "./api-
|
|
3
|
-
import { a as unwrap, i as requireTty, r as reportErrors } from "./ui-
|
|
4
|
-
import { n as migrateProject, r as readMigrationFiles, t as describeMigrateResult } from "./migrations-
|
|
2
|
+
import { a as apiRequest, f as withContext, r as apiDataRequest } from "./api-Bl6SG8Oq.mjs";
|
|
3
|
+
import { a as unwrap, i as requireTty, r as reportErrors } from "./ui-CLnICOne.mjs";
|
|
4
|
+
import { n as migrateProject, r as readMigrationFiles, t as describeMigrateResult } from "./migrations-D8NqjC5I.mjs";
|
|
5
5
|
import { defineCommand } from "citty";
|
|
6
6
|
import { readFileSync, writeFileSync } from "node:fs";
|
|
7
7
|
import * as p from "@clack/prompts";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { c as projectUrl, d as stagingUrl, f as tryReadCanopyJson, l as resolveProject, o as projectDirArgs, r as siteConfig, s as projectFlagArgs } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { a as apiRequest, f as withContext, i as apiDownload, l as currentSlug, r as apiDataRequest } from "./api-
|
|
3
|
-
import { a as unwrap, r as reportErrors, t as formatDateTime } from "./ui-
|
|
4
|
-
import { n as migrateProject, r as readMigrationFiles, t as describeMigrateResult } from "./migrations-
|
|
2
|
+
import { a as apiRequest, f as withContext, i as apiDownload, l as currentSlug, r as apiDataRequest } from "./api-Bl6SG8Oq.mjs";
|
|
3
|
+
import { a as unwrap, r as reportErrors, t as formatDateTime } from "./ui-CLnICOne.mjs";
|
|
4
|
+
import { n as migrateProject, r as readMigrationFiles, t as describeMigrateResult } from "./migrations-D8NqjC5I.mjs";
|
|
5
5
|
import { builtinModules } from "node:module";
|
|
6
6
|
import { defineCommand } from "citty";
|
|
7
7
|
import { mkdtempSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
@@ -290,6 +290,11 @@ const deployCommand = defineCommand({
|
|
|
290
290
|
channel
|
|
291
291
|
}, void 0, source), { action: `deploy "${slug}"` });
|
|
292
292
|
stagingCreated = upload.stagingCreated === true;
|
|
293
|
+
const overLimit = bundleLimitError(files, upload);
|
|
294
|
+
if (overLimit) {
|
|
295
|
+
spin.error("Deploy refused — nothing was uploaded.");
|
|
296
|
+
throw new Error(overLimit);
|
|
297
|
+
}
|
|
293
298
|
const uploads = [...files, ...workerBytes ? [{
|
|
294
299
|
path: WORKER_BUNDLE_PATH,
|
|
295
300
|
data: workerBytes
|
|
@@ -377,6 +382,20 @@ const promoteCommand = defineCommand({
|
|
|
377
382
|
})
|
|
378
383
|
});
|
|
379
384
|
const UPLOAD_CONCURRENCY = 8;
|
|
385
|
+
/**
|
|
386
|
+
* Why the asset files exceed the limits the platform stated, or null. The
|
|
387
|
+
* worker bundle has its own key and isn't counted, as on the server. A server
|
|
388
|
+
* that states no limits isn't checked here; completion still enforces them.
|
|
389
|
+
*/
|
|
390
|
+
function bundleLimitError(files, limits) {
|
|
391
|
+
if (limits.maxFiles !== void 0 && files.length > limits.maxFiles) return `This deploy has ${files.length} files; the limit is ${limits.maxFiles}. Bundle/minify assets or drop what isn't served, then redeploy.`;
|
|
392
|
+
const bytes = files.reduce((sum, f) => sum + f.data.byteLength, 0);
|
|
393
|
+
if (limits.maxTotalBytes !== void 0 && bytes > limits.maxTotalBytes) {
|
|
394
|
+
const mb = (n) => `${(n / 1024 / 1024).toFixed(1)} MB`;
|
|
395
|
+
return `This deploy is ${mb(bytes)}; the limit is ${mb(limits.maxTotalBytes)}. Move large images or fonts to file storage, then redeploy.`;
|
|
396
|
+
}
|
|
397
|
+
return null;
|
|
398
|
+
}
|
|
380
399
|
/** PUT each file to /data/v1/uploads/<grant> — the grant is the credential. */
|
|
381
400
|
async function uploadFiles(grant, files) {
|
|
382
401
|
const { apiUrl } = siteConfig();
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { a as projectDialect, f as tryReadCanopyJson, l as resolveProject, o as projectDirArgs, r as siteConfig } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { a as apiRequest, f as withContext, t as ApiError } from "./api-
|
|
3
|
-
import { r as reportErrors, t as formatDateTime } from "./ui-
|
|
4
|
-
import { r as readMigrationFiles } from "./migrations-
|
|
5
|
-
import { i as stampWorkerHeaders, n as WORKER_ATTEST_HEADER } from "./src-
|
|
2
|
+
import { a as apiRequest, f as withContext, t as ApiError } from "./api-Bl6SG8Oq.mjs";
|
|
3
|
+
import { r as reportErrors, t as formatDateTime } from "./ui-CLnICOne.mjs";
|
|
4
|
+
import { r as readMigrationFiles } from "./migrations-D8NqjC5I.mjs";
|
|
5
|
+
import { i as stampWorkerHeaders, n as WORKER_ATTEST_HEADER } from "./src-CScXotBB.mjs";
|
|
6
6
|
import { n as writeDevServerRecord } from "./dev-server-file-Dk9pk4AR.mjs";
|
|
7
7
|
import { createRequire } from "node:module";
|
|
8
8
|
import { defineCommand } from "citty";
|
|
@@ -41,7 +41,7 @@ async function workerPlugin(flags, slug, workerAttest, remoteUser) {
|
|
|
41
41
|
console.log(`note: canopy.json points "worker" at ${entry}, which does not exist — skipping.`);
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
|
-
const { missingSecretNames, readDevVars, workerDevPlugin } = await import("./dev-worker-
|
|
44
|
+
const { missingSecretNames, readDevVars, workerDevPlugin } = await import("./dev-worker-DJekKSdb.mjs");
|
|
45
45
|
const secrets = readDevVars(flags.dir);
|
|
46
46
|
const email = siteConfig().email;
|
|
47
47
|
const user = await remoteUser?.() ?? (email ? {
|
|
@@ -251,7 +251,7 @@ async function devRemote(flags, slug) {
|
|
|
251
251
|
async function devLocal(flags, slug) {
|
|
252
252
|
let dump;
|
|
253
253
|
if (flags.pull) {
|
|
254
|
-
const { fetchProjectDump } = await import("./local-
|
|
254
|
+
const { fetchProjectDump } = await import("./local-2xtxtoUd.mjs");
|
|
255
255
|
console.log(`Pulling a fresh export of ${slug}${flags.staging ? " [staging]" : ""}…`);
|
|
256
256
|
dump = await fetchProjectDump(slug, flags.staging ? "staging" : "live");
|
|
257
257
|
}
|
|
@@ -267,7 +267,7 @@ async function devLocal(flags, slug) {
|
|
|
267
267
|
console.log(`Note: ai/services will be unavailable — could not reach the platform (${reason}).`);
|
|
268
268
|
}
|
|
269
269
|
const workerAttest = randomBytes(24).toString("base64url");
|
|
270
|
-
const { createSandbox } = await import("./local-
|
|
270
|
+
const { createSandbox } = await import("./local-2xtxtoUd.mjs");
|
|
271
271
|
const sandbox = await createSandbox({
|
|
272
272
|
slug,
|
|
273
273
|
persistDir: join(flags.dir, ".canopy", "local"),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as stampWorkerHeaders, n as WORKER_ATTEST_HEADER, r as redactCanopyCredentials, t as CALLER_HEADER } from "./src-
|
|
1
|
+
import { i as stampWorkerHeaders, n as WORKER_ATTEST_HEADER, r as redactCanopyCredentials, t as CALLER_HEADER } from "./src-CScXotBB.mjs";
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { relative, resolve, sep } from "node:path";
|
|
4
4
|
//#region src/dev-worker.ts
|
|
@@ -103,6 +103,18 @@ else is still static serving. A few things to know:
|
|
|
103
103
|
`process.env`); dashboard Schedules invoke an exported
|
|
104
104
|
`scheduled(event, env)` — switch on `event.name`.
|
|
105
105
|
|
|
106
|
+
- **Backends run as Workers, on every site.** Your worker runs in its own
|
|
107
|
+
isolated runtime, with the rules Workers have everywhere:
|
|
108
|
+
- no file system to write to, and no child processes;
|
|
109
|
+
- `eval` and `new Function` don't work;
|
|
110
|
+
- a connection or stream belongs to the request that opened it;
|
|
111
|
+
- work you start but don't await stops when the response is sent. Hand it to
|
|
112
|
+
`c.executionCtx.waitUntil(...)` if it has to finish.
|
|
113
|
+
|
|
114
|
+
Node built-ins from the `nodejs_compat` set work (`node:crypto`,
|
|
115
|
+
`node:buffer`, `node:https`, …). `process.env` holds your secrets and the
|
|
116
|
+
project's own names, never the platform's.
|
|
117
|
+
|
|
106
118
|
> **Note:** Backends run on the `main` and `gcp-pilot` sites. On a site without backend support, a deploy that
|
|
107
119
|
> includes one answers with a clear "not supported here" rather than failing obscurely;
|
|
108
120
|
> frontend-only projects deploy everywhere.
|
|
@@ -3,11 +3,11 @@ title: Outbound requests
|
|
|
3
3
|
description: Which external hosts your project's backend may fetch — a per-project allowlist you manage yourself, or open mode for apps that fetch arbitrary URLs.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Outbound
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
Outbound requests from a project's backend worker are **deny-by-default**,
|
|
7
|
+
whatever the code uses to make them: `fetch`, `node:https`, or a raw socket.
|
|
8
|
+
The platform only lets them through to platform infrastructure (your
|
|
9
|
+
database, files, AI, the Canopy API) and to the hosts on your project's own
|
|
10
|
+
**egress allowlist**. Anything else is stopped before it leaves the runtime.
|
|
11
11
|
|
|
12
12
|
That default is deliberate: a thousand idle vibecoded projects should not be
|
|
13
13
|
able to call arbitrary internet hosts. When your project genuinely needs an
|
|
@@ -48,8 +48,8 @@ punycode form. A project can list up to **32** hosts.
|
|
|
48
48
|
|
|
49
49
|
Everything you reach through the SDK — `canopy.db`, `canopy.blob`,
|
|
50
50
|
`canopy.ai`, and `env.CANOPY.fetch` — goes through the platform and is always
|
|
51
|
-
allowed. The allowlist
|
|
52
|
-
|
|
51
|
+
allowed. The allowlist governs every connection your worker code opens to the
|
|
52
|
+
outside world. (Frontend code in the browser is unaffected — this is
|
|
53
53
|
about the worker.)
|
|
54
54
|
|
|
55
55
|
## When a request is denied
|
|
@@ -64,6 +64,13 @@ body:
|
|
|
64
64
|
Allow the host and retry — see the
|
|
65
65
|
[troubleshooting entry](https://docs.canopy.website/guides/troubleshooting#egress_denied-403).
|
|
66
66
|
|
|
67
|
+
That answer is for `fetch` and the libraries built on it. Other clients get a
|
|
68
|
+
plain connection failure instead: a `node:http` or `node:https` request, or a
|
|
69
|
+
raw TCP socket (`connect()` from `cloudflare:sockets`, `node:net`). Raw sockets
|
|
70
|
+
to allowed hosts work on sites that support them and fail on the rest. A host
|
|
71
|
+
on your list that resolves to a private or internal address is refused too,
|
|
72
|
+
so an allowed name can't lead your worker into the platform's own network.
|
|
73
|
+
|
|
67
74
|
## Recently blocked hosts
|
|
68
75
|
|
|
69
76
|
You don't have to guess what got denied: the runtime reports every blocked
|
|
@@ -22,8 +22,16 @@ in [members and access](https://docs.canopy.website/platform/members-and-access)
|
|
|
22
22
|
|
|
23
23
|
## Deep links work — routing is yours
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
A path is looked up in this order:
|
|
26
|
+
|
|
27
|
+
1. **The exact file.** `/logo.svg` serves `logo.svg`.
|
|
28
|
+
2. **A folder's `index.html`.** `/widgets/foo/` serves `widgets/foo/index.html`,
|
|
29
|
+
and `/widgets/foo` redirects to `/widgets/foo/` first. This is how
|
|
30
|
+
prerendered and multi-page builds work: every page is its own file, and
|
|
31
|
+
reloading any of them gets that page, not your homepage.
|
|
32
|
+
3. **Your root `index.html`.** Anything else gets the app's entry point instead
|
|
33
|
+
of a 404. That's what makes client-side routing work: someone can bookmark
|
|
34
|
+
`/reports/42`, reload it, and your app boots and handles the route.
|
|
27
35
|
|
|
28
36
|
The trade-off is that a **typo'd asset also gets `index.html`** rather than an
|
|
29
37
|
error. If a script or image comes back as your homepage HTML, you're looking at
|
|
@@ -57,12 +65,13 @@ without deploying anything.
|
|
|
57
65
|
|
|
58
66
|
## What a deploy may contain
|
|
59
67
|
|
|
60
|
-
- Up to **
|
|
68
|
+
- Up to **1000 files** and **50 MB** in total.
|
|
61
69
|
- An `index.html` — a bundle without one is rejected.
|
|
62
70
|
- Each file's type is fixed at deploy time from its extension. Unknown
|
|
63
71
|
extensions are sent as a download rather than run as code.
|
|
64
72
|
|
|
65
|
-
|
|
73
|
+
`canopy deploy` checks both limits before it uploads anything. If you're over
|
|
74
|
+
the file count, it's almost always un-bundled assets that a build
|
|
66
75
|
step would combine; over the size limit, it's usually images or fonts that
|
|
67
76
|
belong in [file storage](https://docs.canopy.website/sdk/files) instead of the bundle.
|
|
68
77
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as version } from "./package-
|
|
1
|
+
import { t as version } from "./package-XOtqboS1.mjs";
|
|
2
2
|
import { r as siteConfig } from "./site-0i7wAJqg.mjs";
|
|
3
3
|
import { i as latestKnownVersion, r as compareSemver } from "./version-check-CcsA1QjI.mjs";
|
|
4
|
-
import { n as agentHeaders } from "./api-
|
|
5
|
-
import { r as reportErrors } from "./ui-
|
|
4
|
+
import { n as agentHeaders } from "./api-Bl6SG8Oq.mjs";
|
|
5
|
+
import { r as reportErrors } from "./ui-CLnICOne.mjs";
|
|
6
6
|
import { defineCommand } from "citty";
|
|
7
7
|
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
|
|
8
8
|
import { homedir } from "node:os";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { l as resolveProject, o as projectDirArgs } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { a as apiRequest, f as withContext } from "./api-
|
|
3
|
-
import { a as unwrap, i as requireTty, r as reportErrors, t as formatDateTime } from "./ui-
|
|
2
|
+
import { a as apiRequest, f as withContext } from "./api-Bl6SG8Oq.mjs";
|
|
3
|
+
import { a as unwrap, i as requireTty, r as reportErrors, t as formatDateTime } from "./ui-CLnICOne.mjs";
|
|
4
4
|
import { defineCommand } from "citty";
|
|
5
5
|
import * as p from "@clack/prompts";
|
|
6
6
|
//#region src/egress.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as version } from "./package-
|
|
1
|
+
import { t as version } from "./package-XOtqboS1.mjs";
|
|
2
2
|
import { f as tryReadCanopyJson, l as resolveProject, o as projectDirArgs, p as tryResolveProject, r as siteConfig } from "./site-0i7wAJqg.mjs";
|
|
3
|
-
import { a as apiRequest, c as credentials, i as apiDownload, o as apiUpload, s as commonHeaders } from "./api-
|
|
4
|
-
import { r as reportErrors, t as formatDateTime } from "./ui-
|
|
3
|
+
import { a as apiRequest, c as credentials, i as apiDownload, o as apiUpload, s as commonHeaders } from "./api-Bl6SG8Oq.mjs";
|
|
4
|
+
import { r as reportErrors, t as formatDateTime } from "./ui-CLnICOne.mjs";
|
|
5
5
|
import { defineCommand } from "citty";
|
|
6
6
|
import { basename, extname, join } from "node:path";
|
|
7
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-XOtqboS1.mjs";
|
|
3
3
|
import { i as siteHeaderLine, n as setInvocationProfile } from "./site-0i7wAJqg.mjs";
|
|
4
4
|
import { a as notifyOfUpdate, o as runRefresh } from "./version-check-CcsA1QjI.mjs";
|
|
5
5
|
import { defineCommand, runMain } from "citty";
|
|
@@ -63,37 +63,37 @@ const main = defineCommand({
|
|
|
63
63
|
description: "canopy — create and deploy vibecoded projects"
|
|
64
64
|
},
|
|
65
65
|
subCommands: {
|
|
66
|
-
login: () => import("./login-
|
|
67
|
-
whoami: () => import("./login-
|
|
68
|
-
logout: () => import("./login-
|
|
69
|
-
create: () => import("./projects-
|
|
70
|
-
init: () => import("./projects-
|
|
71
|
-
projects: () => import("./projects-
|
|
72
|
-
delete: () => import("./projects-
|
|
73
|
-
rename: () => import("./rename-
|
|
74
|
-
dev: () => import("./dev-
|
|
75
|
-
deploy: () => import("./deploy-
|
|
76
|
-
promote: () => import("./deploy-
|
|
77
|
-
staging: () => import("./staging-
|
|
78
|
-
rollback: () => import("./deploy-
|
|
79
|
-
download: () => import("./deploy-
|
|
80
|
-
token: () => import("./token-
|
|
81
|
-
egress: () => import("./egress-
|
|
82
|
-
secrets: () => import("./secrets-
|
|
83
|
-
schedule: () => import("./schedule-
|
|
84
|
-
feedback: () => import("./feedback-
|
|
85
|
-
db: () => import("./db-
|
|
86
|
-
usage: () => import("./usage-
|
|
87
|
-
ai: () => import("./ai-
|
|
88
|
-
open: () => import("./open-
|
|
89
|
-
browse: () => import("./browse-
|
|
90
|
-
docs: () => import("./docs-
|
|
91
|
-
skill: () => import("./skill-
|
|
92
|
-
upgrade: () => import("./upgrade-
|
|
93
|
-
logs: () => import("./logs-
|
|
94
|
-
mcp: () => import("./mcp-
|
|
95
|
-
repo: () => import("./repo-
|
|
96
|
-
template: () => import("./project-template-
|
|
66
|
+
login: () => import("./login-CREcZfLH.mjs").then((m) => m.loginCommand),
|
|
67
|
+
whoami: () => import("./login-CREcZfLH.mjs").then((m) => m.whoamiCommand),
|
|
68
|
+
logout: () => import("./login-CREcZfLH.mjs").then((m) => m.logoutCommand),
|
|
69
|
+
create: () => import("./projects-BRG2HnBs.mjs").then((m) => m.createCommand),
|
|
70
|
+
init: () => import("./projects-BRG2HnBs.mjs").then((m) => m.initCommand),
|
|
71
|
+
projects: () => import("./projects-BRG2HnBs.mjs").then((m) => m.projectsCommand),
|
|
72
|
+
delete: () => import("./projects-BRG2HnBs.mjs").then((m) => m.deleteCommand),
|
|
73
|
+
rename: () => import("./rename-BGKa25Rq.mjs").then((m) => m.renameCommand),
|
|
74
|
+
dev: () => import("./dev-BmI5kwoG.mjs").then((m) => m.devCommand),
|
|
75
|
+
deploy: () => import("./deploy-ExrIeX_m.mjs").then((m) => m.deployCommand),
|
|
76
|
+
promote: () => import("./deploy-ExrIeX_m.mjs").then((m) => m.promoteCommand),
|
|
77
|
+
staging: () => import("./staging-_2Js0Fkc.mjs").then((m) => m.stagingCommand),
|
|
78
|
+
rollback: () => import("./deploy-ExrIeX_m.mjs").then((m) => m.rollbackCommand),
|
|
79
|
+
download: () => import("./deploy-ExrIeX_m.mjs").then((m) => m.downloadCommand),
|
|
80
|
+
token: () => import("./token-7vSNuz-X.mjs").then((m) => m.tokenCommand),
|
|
81
|
+
egress: () => import("./egress-C2amvqmE.mjs").then((m) => m.egressCommand),
|
|
82
|
+
secrets: () => import("./secrets-BjbIi7Gp.mjs").then((m) => m.secretsCommand),
|
|
83
|
+
schedule: () => import("./schedule-BcqBspn3.mjs").then((m) => m.scheduleCommand),
|
|
84
|
+
feedback: () => import("./feedback-CMnG2Zvs.mjs").then((m) => m.feedbackCommand),
|
|
85
|
+
db: () => import("./db-BJJGydgL.mjs").then((m) => m.dbCommand),
|
|
86
|
+
usage: () => import("./usage-DGGmTwjJ.mjs").then((m) => m.usageCommand),
|
|
87
|
+
ai: () => import("./ai-FBHTSCLZ.mjs").then((m) => m.aiCommand),
|
|
88
|
+
open: () => import("./open-Bpz4C2Sr.mjs").then((m) => m.openCommand),
|
|
89
|
+
browse: () => import("./browse-dyOThTyf.mjs").then((m) => m.browseCommand),
|
|
90
|
+
docs: () => import("./docs-CaAgJWK3.mjs").then((m) => m.docsCommand),
|
|
91
|
+
skill: () => import("./skill-Ct-aCOzg.mjs").then((m) => m.skillCommand),
|
|
92
|
+
upgrade: () => import("./upgrade-DJogeXAF.mjs").then((m) => m.upgradeCommand),
|
|
93
|
+
logs: () => import("./logs-BnrNZvLc.mjs").then((m) => m.logsCommand),
|
|
94
|
+
mcp: () => import("./mcp-BVIU4j9N.mjs").then((m) => m.mcpCommand),
|
|
95
|
+
repo: () => import("./repo-DmFs6H9m.mjs").then((m) => m.repoCommand),
|
|
96
|
+
template: () => import("./project-template-715H_lnu.mjs").then((m) => m.templateCommand)
|
|
97
97
|
}
|
|
98
98
|
});
|
|
99
99
|
const quiet = process.argv[2] === "mcp" && process.argv[3] === "serve" || process.argv[2] === "repo" && process.argv[3] === "credential";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { r as apiDataRequest } from "./api-
|
|
2
|
-
import { a as realtimeRouter, c as META_COLUMNS, l as blobRouter, n as WORKER_ATTEST_HEADER, o as dbRouter, s as hasPrivateNames } from "./src-
|
|
3
|
-
import { a as rewriteApiPath } from "./dev-
|
|
1
|
+
import { r as apiDataRequest } from "./api-Bl6SG8Oq.mjs";
|
|
2
|
+
import { a as realtimeRouter, c as META_COLUMNS, l as blobRouter, n as WORKER_ATTEST_HEADER, o as dbRouter, s as hasPrivateNames } from "./src-CScXotBB.mjs";
|
|
3
|
+
import { a as rewriteApiPath } from "./dev-adLLSY1F.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,6 +1,6 @@
|
|
|
1
1
|
import { _ as setActiveProfile, b as getBakedProfile, g as readConfigFile, h as listBakedProfiles, m as clearAllProfileTokens, r as siteConfig, v as upsertProfileAuth, x as isProfileId, y as writeConfigFile } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { n as agentHeaders } from "./api-
|
|
3
|
-
import { n as openBrowser, r as reportErrors } from "./ui-
|
|
2
|
+
import { n as agentHeaders } from "./api-Bl6SG8Oq.mjs";
|
|
3
|
+
import { n as openBrowser, r as reportErrors } from "./ui-CLnICOne.mjs";
|
|
4
4
|
import { n as clearRepoTokenCache } from "./repo-credential-CNDRM-tG.mjs";
|
|
5
5
|
import { defineCommand } from "citty";
|
|
6
6
|
import { hostname } from "node:os";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { l as resolveProject, s as projectFlagArgs } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { a as apiRequest, f as withContext } from "./api-
|
|
3
|
-
import { r as reportErrors } from "./ui-
|
|
2
|
+
import { a as apiRequest, f as withContext } from "./api-Bl6SG8Oq.mjs";
|
|
3
|
+
import { r as reportErrors } from "./ui-CLnICOne.mjs";
|
|
4
4
|
import { defineCommand } from "citty";
|
|
5
5
|
//#region src/logs.ts
|
|
6
6
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as version } from "./package-
|
|
1
|
+
import { t as version } from "./package-XOtqboS1.mjs";
|
|
2
2
|
import { c as projectUrl, d as stagingUrl, p as tryResolveProject, r as siteConfig } from "./site-0i7wAJqg.mjs";
|
|
3
|
-
import { a as apiRequest, d as noticeRenamesOnly, l as currentSlug, t as ApiError } from "./api-
|
|
3
|
+
import { a as apiRequest, d as noticeRenamesOnly, l as currentSlug, t as ApiError } from "./api-Bl6SG8Oq.mjs";
|
|
4
4
|
import { t as liveDevServer } from "./dev-server-file-Dk9pk4AR.mjs";
|
|
5
5
|
import { defineCommand } from "citty";
|
|
6
6
|
import { serveStdio } from "@modelcontextprotocol/server/stdio";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { f as tryReadCanopyJson } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { r as apiDataRequest } from "./api-
|
|
2
|
+
import { r as apiDataRequest } from "./api-Bl6SG8Oq.mjs";
|
|
3
3
|
import { readFileSync, readdirSync } from "node:fs";
|
|
4
4
|
import { join, resolve } from "node:path";
|
|
5
5
|
//#region src/migrations.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as projectUrl, d as stagingUrl, l as resolveProject, o as projectDirArgs } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { n as openBrowser, r as reportErrors } from "./ui-
|
|
2
|
+
import { n as openBrowser, r as reportErrors } from "./ui-CLnICOne.mjs";
|
|
3
3
|
import { defineCommand } from "citty";
|
|
4
4
|
//#region src/open.ts
|
|
5
5
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { l as resolveProject, o as projectDirArgs } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { a as apiRequest, f as withContext } from "./api-
|
|
3
|
-
import { a as unwrap, i as requireTty, r as reportErrors } from "./ui-
|
|
2
|
+
import { a as apiRequest, f as withContext } from "./api-Bl6SG8Oq.mjs";
|
|
3
|
+
import { a as unwrap, i as requireTty, r as reportErrors } from "./ui-CLnICOne.mjs";
|
|
4
4
|
import { defineCommand } from "citty";
|
|
5
5
|
import * as p from "@clack/prompts";
|
|
6
6
|
/** Plain words for the API's template errors. */
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { c as projectUrl, f as tryReadCanopyJson, r as siteConfig } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { a as apiRequest, f as withContext } from "./api-
|
|
3
|
-
import { a as unwrap, i as requireTty, r as reportErrors } from "./ui-
|
|
4
|
-
import { i as nextSteps, n as describeCopy, r as fetchTemplate, t as TEMPLATE_FIXES } from "./project-template-
|
|
5
|
-
import { i as offerRepoOnCreate, n as cloneProjectRepo } from "./repo-
|
|
2
|
+
import { a as apiRequest, f as withContext } from "./api-Bl6SG8Oq.mjs";
|
|
3
|
+
import { a as unwrap, i as requireTty, r as reportErrors } from "./ui-CLnICOne.mjs";
|
|
4
|
+
import { i as nextSteps, n as describeCopy, r as fetchTemplate, t as TEMPLATE_FIXES } from "./project-template-Cdr1uwwE.mjs";
|
|
5
|
+
import { i as offerRepoOnCreate, n as cloneProjectRepo } from "./repo-CwT2RDoW.mjs";
|
|
6
6
|
import { defineCommand } from "citty";
|
|
7
7
|
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
|
|
8
8
|
import { join, relative, resolve, sep } from "node:path";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as projectUrl, l as resolveProject, o as projectDirArgs, u as rewriteCanopyJsonSlug } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { a as apiRequest, f as withContext } from "./api-
|
|
3
|
-
import { a as unwrap, i as requireTty, r as reportErrors } from "./ui-
|
|
2
|
+
import { a as apiRequest, f as withContext } from "./api-Bl6SG8Oq.mjs";
|
|
3
|
+
import { a as unwrap, i as requireTty, r as reportErrors } from "./ui-CLnICOne.mjs";
|
|
4
4
|
import { defineCommand } from "citty";
|
|
5
5
|
import * as p from "@clack/prompts";
|
|
6
6
|
//#region src/rename.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { f as tryReadCanopyJson, l as resolveProject, o as projectDirArgs, r as siteConfig } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { a as apiRequest, d as noticeRenamesOnly, f as withContext, n as agentHeaders, u as followRename } from "./api-
|
|
3
|
-
import { a as unwrap, i as requireTty, r as reportErrors, t as formatDateTime } from "./ui-
|
|
2
|
+
import { a as apiRequest, d as noticeRenamesOnly, f as withContext, n as agentHeaders, u as followRename } from "./api-Bl6SG8Oq.mjs";
|
|
3
|
+
import { a as unwrap, i as requireTty, r as reportErrors, t as formatDateTime } from "./ui-CLnICOne.mjs";
|
|
4
4
|
import { a as parseCredentialInput, i as helperCommand, o as runCredentialHelper, r as fileTokenCache, t as RepoCredentialError } from "./repo-credential-CNDRM-tG.mjs";
|
|
5
5
|
import { defineCommand } from "citty";
|
|
6
6
|
import { existsSync, realpathSync } from "node:fs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { l as resolveProject, s as projectFlagArgs } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { a as apiRequest, f as withContext } from "./api-
|
|
3
|
-
import { r as reportErrors, t as formatDateTime } from "./ui-
|
|
2
|
+
import { a as apiRequest, f as withContext } from "./api-Bl6SG8Oq.mjs";
|
|
3
|
+
import { r as reportErrors, t as formatDateTime } from "./ui-CLnICOne.mjs";
|
|
4
4
|
import { defineCommand } from "citty";
|
|
5
5
|
//#region src/schedule.ts
|
|
6
6
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { l as resolveProject, o as projectDirArgs } from "./site-0i7wAJqg.mjs";
|
|
2
|
-
import { a as apiRequest, f as withContext } from "./api-
|
|
3
|
-
import { a as unwrap, r as reportErrors, t as formatDateTime } from "./ui-
|
|
2
|
+
import { a as apiRequest, f as withContext } from "./api-Bl6SG8Oq.mjs";
|
|
3
|
+
import { a as unwrap, r as reportErrors, t as formatDateTime } from "./ui-CLnICOne.mjs";
|
|
4
4
|
import { defineCommand } from "citty";
|
|
5
5
|
import * as p from "@clack/prompts";
|
|
6
6
|
//#region src/secrets.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as version } from "./package-
|
|
2
|
-
import { r as reportErrors } from "./ui-
|
|
1
|
+
import { t as version } from "./package-XOtqboS1.mjs";
|
|
2
|
+
import { r as reportErrors } from "./ui-CLnICOne.mjs";
|
|
3
3
|
import { defineCommand } from "citty";
|
|
4
4
|
import { cpSync, existsSync, mkdirSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { homedir } from "node:os";
|