nomoreide 0.1.101 → 0.1.103
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/cli/commands.js +34 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/core/agent-profiles/types.d.ts +11 -11
- package/dist/core/cloudflare-actions.d.ts +90 -0
- package/dist/core/cloudflare-actions.js +178 -0
- package/dist/core/cloudflare-actions.js.map +1 -0
- package/dist/core/cloudflare-auth.d.ts +61 -0
- package/dist/core/cloudflare-auth.js +149 -0
- package/dist/core/cloudflare-auth.js.map +1 -0
- package/dist/core/cloudflare-context.d.ts +2 -0
- package/dist/core/cloudflare-context.js +106 -0
- package/dist/core/cloudflare-context.js.map +1 -0
- package/dist/core/cloudflare-manager.d.ts +256 -0
- package/dist/core/cloudflare-manager.js +409 -0
- package/dist/core/cloudflare-manager.js.map +1 -0
- package/dist/core/cloudflare-provider.d.ts +64 -0
- package/dist/core/cloudflare-provider.js +343 -0
- package/dist/core/cloudflare-provider.js.map +1 -0
- package/dist/core/config-store.d.ts +30 -14
- package/dist/core/config-store.js +198 -45
- package/dist/core/config-store.js.map +1 -1
- package/dist/core/context-library.js +105 -10
- package/dist/core/context-library.js.map +1 -1
- package/dist/core/db-peek.d.ts +2 -0
- package/dist/core/db-peek.js +9 -0
- package/dist/core/db-peek.js.map +1 -1
- package/dist/core/docker.d.ts +27 -0
- package/dist/core/docker.js +71 -2
- package/dist/core/docker.js.map +1 -1
- package/dist/core/extensions.d.ts +78 -0
- package/dist/core/extensions.js +41 -0
- package/dist/core/extensions.js.map +1 -0
- package/dist/core/git-worktrees.d.ts +1 -0
- package/dist/core/git-worktrees.js +11 -1
- package/dist/core/git-worktrees.js.map +1 -1
- package/dist/core/github-manager.d.ts +8 -0
- package/dist/core/github-manager.js +62 -9
- package/dist/core/github-manager.js.map +1 -1
- package/dist/core/jetbrains-import.d.ts +85 -0
- package/dist/core/jetbrains-import.js +599 -0
- package/dist/core/jetbrains-import.js.map +1 -0
- package/dist/core/log-store.d.ts +10 -0
- package/dist/core/log-store.js +10 -1
- package/dist/core/log-store.js.map +1 -1
- package/dist/core/log-volume.d.ts +41 -0
- package/dist/core/log-volume.js +81 -0
- package/dist/core/log-volume.js.map +1 -0
- package/dist/core/process-manager.js +3 -2
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/project-overview.d.ts +2 -2
- package/dist/core/project-overview.js +3 -3
- package/dist/core/project-overview.js.map +1 -1
- package/dist/core/providers/credentials.d.ts +93 -0
- package/dist/core/providers/credentials.js +88 -0
- package/dist/core/providers/credentials.js.map +1 -0
- package/dist/core/providers/deploy-provider.d.ts +327 -0
- package/dist/core/providers/deploy-provider.js +25 -0
- package/dist/core/providers/deploy-provider.js.map +1 -0
- package/dist/core/providers/egress.d.ts +58 -0
- package/dist/core/providers/egress.js +115 -0
- package/dist/core/providers/egress.js.map +1 -0
- package/dist/core/providers/host-bridge.d.ts +20 -0
- package/dist/core/providers/host-bridge.js +57 -0
- package/dist/core/providers/host-bridge.js.map +1 -0
- package/dist/core/providers/host-provider.d.ts +160 -0
- package/dist/core/providers/host-provider.js +2 -0
- package/dist/core/providers/host-provider.js.map +1 -0
- package/dist/core/providers/oauth.d.ts +97 -0
- package/dist/core/providers/oauth.js +238 -0
- package/dist/core/providers/oauth.js.map +1 -0
- package/dist/core/providers/project-resolution.d.ts +81 -0
- package/dist/core/providers/project-resolution.js +101 -0
- package/dist/core/providers/project-resolution.js.map +1 -0
- package/dist/core/providers/registry.d.ts +73 -0
- package/dist/core/providers/registry.js +53 -0
- package/dist/core/providers/registry.js.map +1 -0
- package/dist/core/providers/strings.d.ts +95 -0
- package/dist/core/providers/strings.js +59 -0
- package/dist/core/providers/strings.js.map +1 -0
- package/dist/core/public-config.d.ts +18 -0
- package/dist/core/public-config.js +76 -0
- package/dist/core/public-config.js.map +1 -0
- package/dist/core/read-only-files.d.ts +28 -0
- package/dist/core/read-only-files.js +93 -0
- package/dist/core/read-only-files.js.map +1 -0
- package/dist/core/repo-onboard.d.ts +2 -2
- package/dist/core/ssh-servers.d.ts +38 -1
- package/dist/core/ssh-servers.js +65 -8
- package/dist/core/ssh-servers.js.map +1 -1
- package/dist/core/ssh-service-runner.js +5 -0
- package/dist/core/ssh-service-runner.js.map +1 -1
- package/dist/core/types.d.ts +30 -14
- package/dist/core/vercel-auth.d.ts +18 -36
- package/dist/core/vercel-auth.js +33 -75
- package/dist/core/vercel-auth.js.map +1 -1
- package/dist/core/vercel-context.d.ts +2 -25
- package/dist/core/vercel-context.js +73 -119
- package/dist/core/vercel-context.js.map +1 -1
- package/dist/core/vercel-manager.d.ts +13 -0
- package/dist/core/vercel-manager.js +3 -5
- package/dist/core/vercel-manager.js.map +1 -1
- package/dist/core/vercel-oauth.d.ts +24 -62
- package/dist/core/vercel-oauth.js +27 -199
- package/dist/core/vercel-oauth.js.map +1 -1
- package/dist/core/vercel-provider.d.ts +23 -0
- package/dist/core/vercel-provider.js +271 -0
- package/dist/core/vercel-provider.js.map +1 -0
- package/dist/core/vultr-actions.d.ts +52 -0
- package/dist/core/vultr-actions.js +62 -0
- package/dist/core/vultr-actions.js.map +1 -0
- package/dist/core/vultr-auth.d.ts +32 -0
- package/dist/core/vultr-auth.js +54 -0
- package/dist/core/vultr-auth.js.map +1 -0
- package/dist/core/vultr-context.d.ts +2 -0
- package/dist/core/vultr-context.js +55 -0
- package/dist/core/vultr-context.js.map +1 -0
- package/dist/core/vultr-manager.d.ts +105 -0
- package/dist/core/vultr-manager.js +159 -0
- package/dist/core/vultr-manager.js.map +1 -0
- package/dist/core/vultr-provider.d.ts +69 -0
- package/dist/core/vultr-provider.js +224 -0
- package/dist/core/vultr-provider.js.map +1 -0
- package/dist/mcp/tools/docs.js +1 -1
- package/dist/mcp/tools/docs.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +1 -1
- package/dist/mcp/tools/index.js +3 -3
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/provider.d.ts +16 -0
- package/dist/mcp/tools/provider.js +110 -0
- package/dist/mcp/tools/provider.js.map +1 -0
- package/dist/mcp/tools/services.js +4 -0
- package/dist/mcp/tools/services.js.map +1 -1
- package/dist/web/client/assets/{code-editor-rHWIXkKg.js → code-editor-B2_SPkzS.js} +1 -1
- package/dist/web/client/assets/context-graph-DVrWyUaG.js +7 -0
- package/dist/web/client/assets/index-DIspyq1R.js +352 -0
- package/dist/web/client/assets/index-DT9Uq0bE.css +1 -0
- package/dist/web/client/assets/{system-process-table-S4umMSEK.js → system-process-table-CWZIisGo.js} +1 -1
- package/dist/web/client/index.html +2 -2
- package/dist/web/dashboard.d.ts +22 -3
- package/dist/web/dashboard.js +50 -5
- package/dist/web/dashboard.js.map +1 -1
- package/dist/web/routes/docker-routes.js +41 -1
- package/dist/web/routes/docker-routes.js.map +1 -1
- package/dist/web/routes/extensions-routes.d.ts +14 -0
- package/dist/web/routes/extensions-routes.js +21 -0
- package/dist/web/routes/extensions-routes.js.map +1 -0
- package/dist/web/routes/git-routes.js +4 -3
- package/dist/web/routes/git-routes.js.map +1 -1
- package/dist/web/routes/host-routes.d.ts +2 -0
- package/dist/web/routes/host-routes.js +188 -0
- package/dist/web/routes/host-routes.js.map +1 -0
- package/dist/web/routes/index.js +8 -2
- package/dist/web/routes/index.js.map +1 -1
- package/dist/web/routes/jetbrains-import-routes.d.ts +2 -0
- package/dist/web/routes/jetbrains-import-routes.js +121 -0
- package/dist/web/routes/jetbrains-import-routes.js.map +1 -0
- package/dist/web/routes/metrics-routes.js +19 -2
- package/dist/web/routes/metrics-routes.js.map +1 -1
- package/dist/web/routes/onboard-routes.js +2 -1
- package/dist/web/routes/onboard-routes.js.map +1 -1
- package/dist/web/routes/provider-routes.d.ts +2 -0
- package/dist/web/routes/provider-routes.js +558 -0
- package/dist/web/routes/provider-routes.js.map +1 -0
- package/dist/web/routes/service-routes.js +77 -4
- package/dist/web/routes/service-routes.js.map +1 -1
- package/dist/web/routes/shell-routes.d.ts +11 -0
- package/dist/web/routes/shell-routes.js +23 -4
- package/dist/web/routes/shell-routes.js.map +1 -1
- package/dist/web/routes/ssh-server-routes.d.ts +8 -1
- package/dist/web/routes/ssh-server-routes.js +48 -6
- package/dist/web/routes/ssh-server-routes.js.map +1 -1
- package/dist/web/service-tester.d.ts +3 -1
- package/dist/web/service-tester.js +9 -4
- package/dist/web/service-tester.js.map +1 -1
- package/package.json +1 -1
- package/dist/mcp/tools/vercel.d.ts +0 -12
- package/dist/mcp/tools/vercel.js +0 -103
- package/dist/mcp/tools/vercel.js.map +0 -1
- package/dist/web/client/assets/context-graph-CcfJNAob.js +0 -7
- package/dist/web/client/assets/index-BnFtcUqj.js +0 -352
- package/dist/web/client/assets/index-CqsghUD9.css +0 -1
- package/dist/web/routes/vercel-routes.d.ts +0 -2
- package/dist/web/routes/vercel-routes.js +0 -476
- package/dist/web/routes/vercel-routes.js.map +0 -1
package/dist/cli/commands.js
CHANGED
|
@@ -82,6 +82,8 @@ export async function runCli(args, options = {}) {
|
|
|
82
82
|
const kind = (flags.kind ?? "local");
|
|
83
83
|
const port = flags.port ? Number(flags.port) : undefined;
|
|
84
84
|
const description = flags.description;
|
|
85
|
+
const env = flags.env ? parseStringMapFlag(flags.env, "--env") : undefined;
|
|
86
|
+
const directArgs = flags.args ? parseStringArrayFlag(flags.args, "--args") : undefined;
|
|
85
87
|
if (kind === "docker-compose") {
|
|
86
88
|
if (!flags.composeService) {
|
|
87
89
|
throw new UsageError("--compose-service is required");
|
|
@@ -109,6 +111,7 @@ export async function runCli(args, options = {}) {
|
|
|
109
111
|
host: flags.host,
|
|
110
112
|
cwd: flags.cwd,
|
|
111
113
|
command: flags.command,
|
|
114
|
+
env,
|
|
112
115
|
port,
|
|
113
116
|
description,
|
|
114
117
|
});
|
|
@@ -119,8 +122,10 @@ export async function runCli(args, options = {}) {
|
|
|
119
122
|
await configStore.registerService({
|
|
120
123
|
name,
|
|
121
124
|
command: flags.command,
|
|
125
|
+
args: directArgs,
|
|
122
126
|
cwd: flags.cwd ?? process.cwd(),
|
|
123
127
|
port,
|
|
128
|
+
env,
|
|
124
129
|
description,
|
|
125
130
|
});
|
|
126
131
|
}
|
|
@@ -193,6 +198,35 @@ export async function runCli(args, options = {}) {
|
|
|
193
198
|
: 2;
|
|
194
199
|
}
|
|
195
200
|
}
|
|
201
|
+
function parseStringArrayFlag(value, name) {
|
|
202
|
+
let parsed;
|
|
203
|
+
try {
|
|
204
|
+
parsed = JSON.parse(value);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
throw new UsageError(`${name} must be a JSON array of strings`);
|
|
208
|
+
}
|
|
209
|
+
if (!Array.isArray(parsed) || parsed.some((entry) => typeof entry !== "string")) {
|
|
210
|
+
throw new UsageError(`${name} must be a JSON array of strings`);
|
|
211
|
+
}
|
|
212
|
+
return parsed;
|
|
213
|
+
}
|
|
214
|
+
function parseStringMapFlag(value, name) {
|
|
215
|
+
let parsed;
|
|
216
|
+
try {
|
|
217
|
+
parsed = JSON.parse(value);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
throw new UsageError(`${name} must be a JSON object with string values`);
|
|
221
|
+
}
|
|
222
|
+
if (!parsed ||
|
|
223
|
+
typeof parsed !== "object" ||
|
|
224
|
+
Array.isArray(parsed) ||
|
|
225
|
+
Object.values(parsed).some((entry) => typeof entry !== "string")) {
|
|
226
|
+
throw new UsageError(`${name} must be a JSON object with string values`);
|
|
227
|
+
}
|
|
228
|
+
return parsed;
|
|
229
|
+
}
|
|
196
230
|
function setupAgent(value) {
|
|
197
231
|
if (value === "claude" || value === "codex" || value === "gemini")
|
|
198
232
|
return value;
|
package/dist/cli/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,13 +17,13 @@ export declare const profileLocalMcpSchema: z.ZodObject<{
|
|
|
17
17
|
}, "strip", z.ZodTypeAny, {
|
|
18
18
|
command: string;
|
|
19
19
|
kind: "local";
|
|
20
|
-
env?: Record<string, string> | undefined;
|
|
21
20
|
args?: string[] | undefined;
|
|
21
|
+
env?: Record<string, string> | undefined;
|
|
22
22
|
}, {
|
|
23
23
|
command: string;
|
|
24
24
|
kind: "local";
|
|
25
|
-
env?: Record<string, string> | undefined;
|
|
26
25
|
args?: string[] | undefined;
|
|
26
|
+
env?: Record<string, string> | undefined;
|
|
27
27
|
}>;
|
|
28
28
|
export declare const profileRemoteMcpSchema: z.ZodObject<{
|
|
29
29
|
kind: z.ZodLiteral<"remote">;
|
|
@@ -52,13 +52,13 @@ export declare const profileMcpSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObj
|
|
|
52
52
|
}, "strip", z.ZodTypeAny, {
|
|
53
53
|
command: string;
|
|
54
54
|
kind: "local";
|
|
55
|
-
env?: Record<string, string> | undefined;
|
|
56
55
|
args?: string[] | undefined;
|
|
56
|
+
env?: Record<string, string> | undefined;
|
|
57
57
|
}, {
|
|
58
58
|
command: string;
|
|
59
59
|
kind: "local";
|
|
60
|
-
env?: Record<string, string> | undefined;
|
|
61
60
|
args?: string[] | undefined;
|
|
61
|
+
env?: Record<string, string> | undefined;
|
|
62
62
|
}>, z.ZodObject<{
|
|
63
63
|
kind: z.ZodLiteral<"remote">;
|
|
64
64
|
transport: z.ZodEnum<["http", "sse"]>;
|
|
@@ -141,13 +141,13 @@ export declare const profileSchema: z.ZodObject<{
|
|
|
141
141
|
}, "strip", z.ZodTypeAny, {
|
|
142
142
|
command: string;
|
|
143
143
|
kind: "local";
|
|
144
|
-
env?: Record<string, string> | undefined;
|
|
145
144
|
args?: string[] | undefined;
|
|
145
|
+
env?: Record<string, string> | undefined;
|
|
146
146
|
}, {
|
|
147
147
|
command: string;
|
|
148
148
|
kind: "local";
|
|
149
|
-
env?: Record<string, string> | undefined;
|
|
150
149
|
args?: string[] | undefined;
|
|
150
|
+
env?: Record<string, string> | undefined;
|
|
151
151
|
}>, z.ZodObject<{
|
|
152
152
|
kind: z.ZodLiteral<"remote">;
|
|
153
153
|
transport: z.ZodEnum<["http", "sse"]>;
|
|
@@ -232,8 +232,8 @@ export declare const profileSchema: z.ZodObject<{
|
|
|
232
232
|
mcps: Record<string, {
|
|
233
233
|
command: string;
|
|
234
234
|
kind: "local";
|
|
235
|
-
env?: Record<string, string> | undefined;
|
|
236
235
|
args?: string[] | undefined;
|
|
236
|
+
env?: Record<string, string> | undefined;
|
|
237
237
|
} | {
|
|
238
238
|
kind: "remote";
|
|
239
239
|
url: string;
|
|
@@ -266,8 +266,8 @@ export declare const profileSchema: z.ZodObject<{
|
|
|
266
266
|
mcps?: Record<string, {
|
|
267
267
|
command: string;
|
|
268
268
|
kind: "local";
|
|
269
|
-
env?: Record<string, string> | undefined;
|
|
270
269
|
args?: string[] | undefined;
|
|
270
|
+
env?: Record<string, string> | undefined;
|
|
271
271
|
} | {
|
|
272
272
|
kind: "remote";
|
|
273
273
|
url: string;
|
|
@@ -283,8 +283,8 @@ export declare const credentialSpecSchema: z.ZodObject<{
|
|
|
283
283
|
required: z.ZodDefault<z.ZodBoolean>;
|
|
284
284
|
description: z.ZodOptional<z.ZodString>;
|
|
285
285
|
}, "strip", z.ZodTypeAny, {
|
|
286
|
-
key: string;
|
|
287
286
|
required: boolean;
|
|
287
|
+
key: string;
|
|
288
288
|
description?: string | undefined;
|
|
289
289
|
}, {
|
|
290
290
|
key: string;
|
|
@@ -311,8 +311,8 @@ export declare const profileManifestSchema: z.ZodObject<{
|
|
|
311
311
|
required: z.ZodDefault<z.ZodBoolean>;
|
|
312
312
|
description: z.ZodOptional<z.ZodString>;
|
|
313
313
|
}, "strip", z.ZodTypeAny, {
|
|
314
|
-
key: string;
|
|
315
314
|
required: boolean;
|
|
315
|
+
key: string;
|
|
316
316
|
description?: string | undefined;
|
|
317
317
|
}, {
|
|
318
318
|
key: string;
|
|
@@ -327,8 +327,8 @@ export declare const profileManifestSchema: z.ZodObject<{
|
|
|
327
327
|
tool: string;
|
|
328
328
|
} | undefined;
|
|
329
329
|
credentials?: {
|
|
330
|
-
key: string;
|
|
331
330
|
required: boolean;
|
|
331
|
+
key: string;
|
|
332
332
|
description?: string | undefined;
|
|
333
333
|
}[] | undefined;
|
|
334
334
|
}, {
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { type CloudflareEnvVar, type CloudflareRequestAuth } from "./cloudflare-manager.js";
|
|
2
|
+
/**
|
|
3
|
+
* Write-capable Cloudflare Pages operations, deliberately separate from the
|
|
4
|
+
* read-safe {@link ./cloudflare-manager.js CloudflareManager} — the same split
|
|
5
|
+
* as `git-manager` / `git-actions` and `db-peek` / `db-write`.
|
|
6
|
+
*
|
|
7
|
+
* Everything here changes what the internet is serving, so none of it is
|
|
8
|
+
* exposed as an MCP tool: these are reached only from the dashboard's own
|
|
9
|
+
* routes, where a human clicked the button.
|
|
10
|
+
*
|
|
11
|
+
* Still intentionally excludes the irreversible ones — Cloudflare's
|
|
12
|
+
* `DELETE .../deployments/{id}` and project deletion — which would need their
|
|
13
|
+
* own guarded surface.
|
|
14
|
+
*/
|
|
15
|
+
/** The only two environments Pages has. A third would be silently created by a PATCH. */
|
|
16
|
+
export declare const CLOUDFLARE_ENVIRONMENTS: readonly ["production", "preview"];
|
|
17
|
+
export type CloudflareEnvironment = (typeof CLOUDFLARE_ENVIRONMENTS)[number];
|
|
18
|
+
export declare class CloudflareActions {
|
|
19
|
+
private readonly auth;
|
|
20
|
+
private readonly accountId;
|
|
21
|
+
constructor(auth: CloudflareRequestAuth, accountId: string);
|
|
22
|
+
/**
|
|
23
|
+
* Rebuild an existing deployment.
|
|
24
|
+
*
|
|
25
|
+
* Cloudflare calls this "retry" and mints a new deployment id, inheriting the
|
|
26
|
+
* original's branch, commit and environment — so, unlike Vercel's redeploy,
|
|
27
|
+
* nothing has to be carried through by the caller to keep a production retry
|
|
28
|
+
* in production.
|
|
29
|
+
*/
|
|
30
|
+
retry(projectName: string, deploymentId: string): Promise<{
|
|
31
|
+
id: string;
|
|
32
|
+
url: string | null;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Point the project's production alias at an earlier deployment without
|
|
36
|
+
* rebuilding it. Cloudflare records this as a rollback, and it takes effect
|
|
37
|
+
* immediately.
|
|
38
|
+
*/
|
|
39
|
+
rollback(projectName: string, deploymentId: string): Promise<{
|
|
40
|
+
id: string;
|
|
41
|
+
url: string | null;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Add a variable. `secret` (Vercel's "encrypted") is the default, and its
|
|
45
|
+
* value never reads back over the API afterwards.
|
|
46
|
+
*/
|
|
47
|
+
createEnv(projectName: string, input: {
|
|
48
|
+
key: string;
|
|
49
|
+
value: string;
|
|
50
|
+
environments: string[];
|
|
51
|
+
secret?: boolean;
|
|
52
|
+
}): Promise<CloudflareEnvVar>;
|
|
53
|
+
/**
|
|
54
|
+
* Change a variable's value and/or the environments it applies to.
|
|
55
|
+
*
|
|
56
|
+
* Adding an environment needs a value: Cloudflare stores the variable
|
|
57
|
+
* separately per environment and never hands back a secret's value, so there
|
|
58
|
+
* is nothing to copy across. Saying that is better than writing an empty
|
|
59
|
+
* string into the new environment.
|
|
60
|
+
*/
|
|
61
|
+
updateEnv(projectName: string, key: string, input: {
|
|
62
|
+
value?: string;
|
|
63
|
+
environments?: string[];
|
|
64
|
+
}): Promise<CloudflareEnvVar>;
|
|
65
|
+
/** Remove a variable from every environment it is set in. */
|
|
66
|
+
deleteEnv(projectName: string, key: string): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* The one write to a project's variables.
|
|
69
|
+
*
|
|
70
|
+
* Cloudflare merges the `env_vars` map it is sent — a key set to `null` is
|
|
71
|
+
* deleted, and keys the patch does not mention are untouched — so this never
|
|
72
|
+
* has to read-modify-write the whole map and cannot clobber a variable added
|
|
73
|
+
* between the read and the write.
|
|
74
|
+
*/
|
|
75
|
+
private patchEnv;
|
|
76
|
+
private patchProject;
|
|
77
|
+
private currentEnv;
|
|
78
|
+
private projectPath;
|
|
79
|
+
private request;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Cloudflare's action vocabulary, mapped onto the names the shared UI already
|
|
83
|
+
* knows. "retry" is Cloudflare's word for what Vercel calls a redeploy, and
|
|
84
|
+
* there is no cancel endpoint for a Pages build at all — so the manifest is
|
|
85
|
+
* two actions, not four, and the deployment row hides what it cannot do.
|
|
86
|
+
*/
|
|
87
|
+
export declare const CLOUDFLARE_ACTIONS: readonly ["redeploy", "rollback"];
|
|
88
|
+
export type CloudflareActionName = (typeof CLOUDFLARE_ACTIONS)[number];
|
|
89
|
+
/** Actions that change what production serves — the UI confirms these first. */
|
|
90
|
+
export declare const PRODUCTION_AFFECTING_ACTIONS: ReadonlySet<CloudflareActionName>;
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { cloudflareRequest, } from "./cloudflare-manager.js";
|
|
2
|
+
/**
|
|
3
|
+
* Write-capable Cloudflare Pages operations, deliberately separate from the
|
|
4
|
+
* read-safe {@link ./cloudflare-manager.js CloudflareManager} — the same split
|
|
5
|
+
* as `git-manager` / `git-actions` and `db-peek` / `db-write`.
|
|
6
|
+
*
|
|
7
|
+
* Everything here changes what the internet is serving, so none of it is
|
|
8
|
+
* exposed as an MCP tool: these are reached only from the dashboard's own
|
|
9
|
+
* routes, where a human clicked the button.
|
|
10
|
+
*
|
|
11
|
+
* Still intentionally excludes the irreversible ones — Cloudflare's
|
|
12
|
+
* `DELETE .../deployments/{id}` and project deletion — which would need their
|
|
13
|
+
* own guarded surface.
|
|
14
|
+
*/
|
|
15
|
+
/** The only two environments Pages has. A third would be silently created by a PATCH. */
|
|
16
|
+
export const CLOUDFLARE_ENVIRONMENTS = ["production", "preview"];
|
|
17
|
+
export class CloudflareActions {
|
|
18
|
+
auth;
|
|
19
|
+
accountId;
|
|
20
|
+
constructor(auth, accountId) {
|
|
21
|
+
this.auth = auth;
|
|
22
|
+
this.accountId = accountId;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Rebuild an existing deployment.
|
|
26
|
+
*
|
|
27
|
+
* Cloudflare calls this "retry" and mints a new deployment id, inheriting the
|
|
28
|
+
* original's branch, commit and environment — so, unlike Vercel's redeploy,
|
|
29
|
+
* nothing has to be carried through by the caller to keep a production retry
|
|
30
|
+
* in production.
|
|
31
|
+
*/
|
|
32
|
+
async retry(projectName, deploymentId) {
|
|
33
|
+
const created = await this.request(`${this.projectPath(projectName)}/deployments/${encodeURIComponent(deploymentId)}/retry`, { method: "POST" });
|
|
34
|
+
return { id: created.id ?? "", url: created.url ?? null };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Point the project's production alias at an earlier deployment without
|
|
38
|
+
* rebuilding it. Cloudflare records this as a rollback, and it takes effect
|
|
39
|
+
* immediately.
|
|
40
|
+
*/
|
|
41
|
+
async rollback(projectName, deploymentId) {
|
|
42
|
+
const rolled = await this.request(`${this.projectPath(projectName)}/deployments/${encodeURIComponent(deploymentId)}/rollback`, { method: "POST" });
|
|
43
|
+
return { id: rolled.id ?? deploymentId, url: rolled.url ?? null };
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Add a variable. `secret` (Vercel's "encrypted") is the default, and its
|
|
47
|
+
* value never reads back over the API afterwards.
|
|
48
|
+
*/
|
|
49
|
+
createEnv(projectName, input) {
|
|
50
|
+
const type = input.secret === false ? "plain_text" : "secret_text";
|
|
51
|
+
const patch = {};
|
|
52
|
+
for (const environment of requireEnvironments(input.environments)) {
|
|
53
|
+
patch[environment] = { [input.key]: { type, value: input.value } };
|
|
54
|
+
}
|
|
55
|
+
return this.patchEnv(projectName, input.key, patch);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Change a variable's value and/or the environments it applies to.
|
|
59
|
+
*
|
|
60
|
+
* Adding an environment needs a value: Cloudflare stores the variable
|
|
61
|
+
* separately per environment and never hands back a secret's value, so there
|
|
62
|
+
* is nothing to copy across. Saying that is better than writing an empty
|
|
63
|
+
* string into the new environment.
|
|
64
|
+
*/
|
|
65
|
+
async updateEnv(projectName, key, input) {
|
|
66
|
+
const current = await this.currentEnv(projectName, key);
|
|
67
|
+
const wanted = input.environments
|
|
68
|
+
? requireEnvironments(input.environments)
|
|
69
|
+
: current.environments;
|
|
70
|
+
const patch = {};
|
|
71
|
+
for (const environment of wanted) {
|
|
72
|
+
if (input.value !== undefined) {
|
|
73
|
+
patch[environment] = { [key]: { type: current.type, value: input.value } };
|
|
74
|
+
}
|
|
75
|
+
else if (!current.environments.includes(environment)) {
|
|
76
|
+
throw new Error(`Adding "${key}" to ${environment} needs a value — Cloudflare stores it separately per environment.`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
for (const environment of current.environments) {
|
|
80
|
+
if (!wanted.includes(environment)) {
|
|
81
|
+
patch[environment] = { [key]: null };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return this.patchEnv(projectName, key, patch);
|
|
85
|
+
}
|
|
86
|
+
/** Remove a variable from every environment it is set in. */
|
|
87
|
+
async deleteEnv(projectName, key) {
|
|
88
|
+
const current = await this.currentEnv(projectName, key);
|
|
89
|
+
const patch = {};
|
|
90
|
+
for (const environment of current.environments)
|
|
91
|
+
patch[environment] = { [key]: null };
|
|
92
|
+
await this.patchProject(projectName, patch);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The one write to a project's variables.
|
|
96
|
+
*
|
|
97
|
+
* Cloudflare merges the `env_vars` map it is sent — a key set to `null` is
|
|
98
|
+
* deleted, and keys the patch does not mention are untouched — so this never
|
|
99
|
+
* has to read-modify-write the whole map and cannot clobber a variable added
|
|
100
|
+
* between the read and the write.
|
|
101
|
+
*/
|
|
102
|
+
async patchEnv(projectName, key, patch) {
|
|
103
|
+
const updated = await this.patchProject(projectName, patch);
|
|
104
|
+
const found = updated.find((entry) => entry.key === key);
|
|
105
|
+
if (!found)
|
|
106
|
+
throw new Error(`Cloudflare did not report "${key}" after the update.`);
|
|
107
|
+
return found;
|
|
108
|
+
}
|
|
109
|
+
async patchProject(projectName, patch) {
|
|
110
|
+
const deploymentConfigs = {};
|
|
111
|
+
for (const [environment, envVars] of Object.entries(patch)) {
|
|
112
|
+
if (envVars)
|
|
113
|
+
deploymentConfigs[environment] = { env_vars: envVars };
|
|
114
|
+
}
|
|
115
|
+
const project = await this.request(this.projectPath(projectName), {
|
|
116
|
+
method: "PATCH",
|
|
117
|
+
body: { deployment_configs: deploymentConfigs },
|
|
118
|
+
});
|
|
119
|
+
return mergeEnvVars(project.deployment_configs);
|
|
120
|
+
}
|
|
121
|
+
async currentEnv(projectName, key) {
|
|
122
|
+
const project = await this.request(this.projectPath(projectName));
|
|
123
|
+
const found = mergeEnvVars(project.deployment_configs).find((entry) => entry.key === key);
|
|
124
|
+
if (!found)
|
|
125
|
+
throw new Error(`No variable named "${key}" on this project.`);
|
|
126
|
+
return found;
|
|
127
|
+
}
|
|
128
|
+
projectPath(projectName) {
|
|
129
|
+
return `/accounts/${this.accountId}/pages/projects/${encodeURIComponent(projectName)}`;
|
|
130
|
+
}
|
|
131
|
+
request(path, opts) {
|
|
132
|
+
return cloudflareRequest(this.auth, path, opts);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Rejects anything that is not one of Pages' two environments. Vercel's env
|
|
137
|
+
* dialog offers `development` as well, and a PATCH naming it would quietly
|
|
138
|
+
* create a third deployment config that nothing ever reads.
|
|
139
|
+
*/
|
|
140
|
+
function requireEnvironments(environments) {
|
|
141
|
+
const invalid = environments.filter((entry) => !CLOUDFLARE_ENVIRONMENTS.includes(entry));
|
|
142
|
+
if (invalid.length > 0) {
|
|
143
|
+
throw new Error(`Cloudflare Pages only has ${CLOUDFLARE_ENVIRONMENTS.join(" and ")} environments, not ${invalid.join(", ")}.`);
|
|
144
|
+
}
|
|
145
|
+
return environments;
|
|
146
|
+
}
|
|
147
|
+
/** The read side's flattening, applied to whatever a write handed back. */
|
|
148
|
+
function mergeEnvVars(configs) {
|
|
149
|
+
const merged = new Map();
|
|
150
|
+
for (const [environment, config] of Object.entries(configs ?? {})) {
|
|
151
|
+
for (const [key, entry] of Object.entries(config?.env_vars ?? {})) {
|
|
152
|
+
if (!entry)
|
|
153
|
+
continue;
|
|
154
|
+
const type = entry.type === "plain_text" ? "plain_text" : "secret_text";
|
|
155
|
+
const existing = merged.get(key);
|
|
156
|
+
if (existing) {
|
|
157
|
+
existing.environments.push(environment);
|
|
158
|
+
if (type === "secret_text")
|
|
159
|
+
existing.type = "secret_text";
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
merged.set(key, { key, environments: [environment], type, value: entry.value });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return [...merged.values()].sort((a, b) => a.key.localeCompare(b.key));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Cloudflare's action vocabulary, mapped onto the names the shared UI already
|
|
169
|
+
* knows. "retry" is Cloudflare's word for what Vercel calls a redeploy, and
|
|
170
|
+
* there is no cancel endpoint for a Pages build at all — so the manifest is
|
|
171
|
+
* two actions, not four, and the deployment row hides what it cannot do.
|
|
172
|
+
*/
|
|
173
|
+
export const CLOUDFLARE_ACTIONS = ["redeploy", "rollback"];
|
|
174
|
+
/** Actions that change what production serves — the UI confirms these first. */
|
|
175
|
+
export const PRODUCTION_AFFECTING_ACTIONS = new Set([
|
|
176
|
+
"rollback",
|
|
177
|
+
]);
|
|
178
|
+
//# sourceMappingURL=cloudflare-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-actions.js","sourceRoot":"","sources":["../../src/core/cloudflare-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type ProviderAuthSpec, type ProviderCliSession, type ProviderCliStatus } from "./providers/credentials.js";
|
|
2
|
+
/** Provider id this integration stores its connection under. */
|
|
3
|
+
export declare const CLOUDFLARE_PROVIDER_ID = "cloudflare";
|
|
4
|
+
/**
|
|
5
|
+
* Candidate locations of Wrangler's `config/default.toml`, newest convention
|
|
6
|
+
* first. Wrangler resolves these through `xdg-app-paths` under the app name
|
|
7
|
+
* `.wrangler`; the trailing entry is the pre-XDG path that long-lived installs
|
|
8
|
+
* still carry, and `WRANGLER_HOME` overrides all of them.
|
|
9
|
+
*/
|
|
10
|
+
export declare function wranglerConfigDirs(env?: NodeJS.ProcessEnv): string[];
|
|
11
|
+
/**
|
|
12
|
+
* The ambient Cloudflare credential, or null when there is none.
|
|
13
|
+
*
|
|
14
|
+
* Two sources, in the order Wrangler itself prefers them:
|
|
15
|
+
*
|
|
16
|
+
* 1. `CLOUDFLARE_API_TOKEN` in the environment, which is how Wrangler runs in
|
|
17
|
+
* CI and in most shells that have been set up for it;
|
|
18
|
+
* 2. the OAuth token `wrangler login` wrote to `config/default.toml`.
|
|
19
|
+
*
|
|
20
|
+
* Neither is ever copied into NoMoreIDE's config — that is the shared `cli`
|
|
21
|
+
* policy, and it is what makes `wrangler logout` revoke us too.
|
|
22
|
+
*
|
|
23
|
+
* An expired stored token reads as "not logged in" rather than being handed
|
|
24
|
+
* out: Wrangler refreshes it roughly hourly and rotates the refresh token when
|
|
25
|
+
* it does, so renewing it here would invalidate Wrangler's own copy.
|
|
26
|
+
*/
|
|
27
|
+
export declare function readWranglerSession(env?: NodeJS.ProcessEnv): Promise<ProviderCliSession | null>;
|
|
28
|
+
/**
|
|
29
|
+
* Cloudflare's half of the shared credential resolver.
|
|
30
|
+
*
|
|
31
|
+
* **No `oauth` block — because of how our flow works, not because Cloudflare
|
|
32
|
+
* has no OAuth.** The shared `providers/oauth.ts` mints its own client at
|
|
33
|
+
* runtime via dynamic client registration (RFC 7591), which is what lets
|
|
34
|
+
* NoMoreIDE ship no client id at all. Cloudflare has no registration endpoint,
|
|
35
|
+
* so `registerOAuthClient()` would throw before a browser ever opened.
|
|
36
|
+
*
|
|
37
|
+
* That is a narrower obstacle than it was, and narrower than this comment used
|
|
38
|
+
* to claim: Cloudflare *does* serve OIDC discovery, at
|
|
39
|
+
* `dash.cloudflare.com/.well-known/openid-configuration`. It advertises PKCE
|
|
40
|
+
* (S256), `none` for token endpoint auth, and both the `authorization_code` and
|
|
41
|
+
* `refresh_token` grants — but no `registration_endpoint`. Since 2026-06-03 you
|
|
42
|
+
* register the client yourself instead, and a *public* client needs no secret.
|
|
43
|
+
*
|
|
44
|
+
* Adopting it is therefore a change of model rather than a new provider entry:
|
|
45
|
+
* NoMoreIDE would ship a pre-registered client id, which `ProviderAuthSpec`
|
|
46
|
+
* has no way to express, and public visibility additionally requires a verified
|
|
47
|
+
* client domain and is irreversible once granted.
|
|
48
|
+
*
|
|
49
|
+
* Loopback redirect URIs are accepted — verified against a live client, and the
|
|
50
|
+
* thing that would otherwise have ruled this out. Cloudflare also exposes a
|
|
51
|
+
* device authorization endpoint, so a provider that ever *does* refuse loopback
|
|
52
|
+
* has a redirect-free path available.
|
|
53
|
+
*
|
|
54
|
+
* Until then Cloudflare connects with an API token or by inheriting Wrangler's
|
|
55
|
+
* own login. The three-source model survives contact with provider #2; only
|
|
56
|
+
* this provider's subset of it is smaller.
|
|
57
|
+
*
|
|
58
|
+
* @see docs/plans/2026-08-13-provider-registry-design.md §11
|
|
59
|
+
*/
|
|
60
|
+
export declare const CLOUDFLARE_AUTH: ProviderAuthSpec;
|
|
61
|
+
export declare function cloudflareCliStatus(env?: NodeJS.ProcessEnv): Promise<ProviderCliStatus>;
|