@vm0/cli 9.245.2 → 9.245.4
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/{agent-Y4IBUXSH.js → agent-PXNWCGY4.js} +5 -6
- package/{agent-Y4IBUXSH.js.map → agent-PXNWCGY4.js.map} +1 -1
- package/{banking-6ZH3HO5R.js → banking-5ACZP3VS.js} +3 -4
- package/{banking-6ZH3HO5R.js.map → banking-5ACZP3VS.js.map} +1 -1
- package/{chat-WYYQC23N.js → chat-EJL2XZIJ.js} +4 -5
- package/{chat-WYYQC23N.js.map → chat-EJL2XZIJ.js.map} +1 -1
- package/{chunk-R5TGEYFS.js → chunk-6EOYIE2E.js} +2 -2
- package/{chunk-PM3ANOL6.js → chunk-GDNV2HYG.js} +2 -2
- package/{chunk-HLEMRLRY.js → chunk-MMJ6XDBL.js} +2 -2
- package/{chunk-462GZSDP.js → chunk-OODKKB56.js} +4 -4
- package/{chunk-QFYTVVYX.js → chunk-QC4J3CFT.js} +249 -393
- package/chunk-QC4J3CFT.js.map +1 -0
- package/{chunk-MNL5ZATJ.js → chunk-RNN4FGKY.js} +2 -2
- package/{chunk-I37LCNCV.js → chunk-SFGQESIU.js} +329 -218
- package/chunk-SFGQESIU.js.map +1 -0
- package/{chunk-S7RGM5X6.js → chunk-WWB36O7Z.js} +15955 -15369
- package/chunk-WWB36O7Z.js.map +1 -0
- package/{computer-use-E4R7GXCN.js → computer-use-FDARSXIK.js} +3 -4
- package/{computer-use-E4R7GXCN.js.map → computer-use-FDARSXIK.js.map} +1 -1
- package/{connector-MBMPF5RX.js → connector-HXEV4XUR.js} +6 -7
- package/{connector-MBMPF5RX.js.map → connector-HXEV4XUR.js.map} +1 -1
- package/{credit-PPE5TDPI.js → credit-6L763IAP.js} +4 -5
- package/{credit-PPE5TDPI.js.map → credit-6L763IAP.js.map} +1 -1
- package/{developer-support-EYWPPNRP.js → developer-support-MC6FHKCX.js} +3 -4
- package/{developer-support-EYWPPNRP.js.map → developer-support-MC6FHKCX.js.map} +1 -1
- package/{doctor-ECDE7LIK.js → doctor-Q7YVMF4F.js} +3 -4
- package/{doctor-ECDE7LIK.js.map → doctor-Q7YVMF4F.js.map} +1 -1
- package/{generate-DJDLYQ64.js → generate-VBGAZ3BL.js} +6 -8
- package/{generate-DJDLYQ64.js.map → generate-VBGAZ3BL.js.map} +1 -1
- package/{github-ZM75ZPOB.js → github-S2LQCATW.js} +3 -4
- package/{github-ZM75ZPOB.js.map → github-S2LQCATW.js.map} +1 -1
- package/{goal-EZOH2CGO.js → goal-J2EXB3QM.js} +3 -4
- package/{goal-EZOH2CGO.js.map → goal-J2EXB3QM.js.map} +1 -1
- package/{host-YNP6XAPV.js → host-3R74WQBY.js} +3 -4
- package/{host-YNP6XAPV.js.map → host-3R74WQBY.js.map} +1 -1
- package/{logs-NRQCRIE7.js → logs-TQGRAO7V.js} +4 -5
- package/{logs-NRQCRIE7.js.map → logs-TQGRAO7V.js.map} +1 -1
- package/{mail-V5CBBII5.js → mail-J3UEHNZN.js} +5 -6
- package/{mail-V5CBBII5.js.map → mail-J3UEHNZN.js.map} +1 -1
- package/{maps-753YZBUF.js → maps-5I6XE6R6.js} +3 -4
- package/{maps-753YZBUF.js.map → maps-5I6XE6R6.js.map} +1 -1
- package/{model-4G2736SH.js → model-OZJLUEAQ.js} +4 -5
- package/{model-4G2736SH.js.map → model-OZJLUEAQ.js.map} +1 -1
- package/{model-provider-HD3TF2IU.js → model-provider-NUDST4DX.js} +4 -5
- package/{model-provider-HD3TF2IU.js.map → model-provider-NUDST4DX.js.map} +1 -1
- package/{org-XNIYZFU3.js → org-ZYNRFMZD.js} +5 -45
- package/org-ZYNRFMZD.js.map +1 -0
- package/package.json +1 -2
- package/{phone-C7J24IVA.js → phone-GUGPVVLS.js} +3 -4
- package/{phone-C7J24IVA.js.map → phone-GUGPVVLS.js.map} +1 -1
- package/{preference-FZWREF3S.js → preference-5D6ZSXXS.js} +3 -4
- package/{preference-FZWREF3S.js.map → preference-5D6ZSXXS.js.map} +1 -1
- package/{resource-S4PPLX3A.js → resource-CEKY6LB3.js} +3 -4
- package/{resource-S4PPLX3A.js.map → resource-CEKY6LB3.js.map} +1 -1
- package/{scrape-SD7WZGRZ.js → scrape-KJNDNP4E.js} +3 -4
- package/{scrape-SD7WZGRZ.js.map → scrape-KJNDNP4E.js.map} +1 -1
- package/{search-GAR47AEJ.js → search-GKTQNGXG.js} +4 -5
- package/{search-GAR47AEJ.js.map → search-GKTQNGXG.js.map} +1 -1
- package/{secret-O253FYZR.js → secret-FKIPUAH7.js} +3 -4
- package/{secret-O253FYZR.js.map → secret-FKIPUAH7.js.map} +1 -1
- package/{slack-ZTJWGFHQ.js → slack-DKJ7MSS5.js} +3 -4
- package/{slack-ZTJWGFHQ.js.map → slack-DKJ7MSS5.js.map} +1 -1
- package/{teams-526UBPFQ.js → teams-E2BKTN65.js} +3 -4
- package/{teams-526UBPFQ.js.map → teams-E2BKTN65.js.map} +1 -1
- package/{telegram-46KXR257.js → telegram-JML5HERS.js} +3 -4
- package/{telegram-46KXR257.js.map → telegram-JML5HERS.js.map} +1 -1
- package/{variable-LUQEU4QR.js → variable-BMNSMR4W.js} +3 -4
- package/{variable-LUQEU4QR.js.map → variable-BMNSMR4W.js.map} +1 -1
- package/{video-I7ULZOPN.js → video-7ZRCPEQG.js} +4 -6
- package/{video-I7ULZOPN.js.map → video-7ZRCPEQG.js.map} +1 -1
- package/{web-C32RSDLJ.js → web-ZE72R657.js} +5 -7
- package/{web-C32RSDLJ.js.map → web-ZE72R657.js.map} +1 -1
- package/{web-search-3F5SDLMG.js → web-search-T6YN3MHX.js} +3 -4
- package/{web-search-3F5SDLMG.js.map → web-search-T6YN3MHX.js.map} +1 -1
- package/{whoami-O63BTFVG.js → whoami-MRFWSOOF.js} +16 -12
- package/{whoami-O63BTFVG.js.map → whoami-MRFWSOOF.js.map} +1 -1
- package/{workflow-I6ZG7WBH.js → workflow-VT33EXF3.js} +3 -4
- package/{workflow-I6ZG7WBH.js.map → workflow-VT33EXF3.js.map} +1 -1
- package/zero.js +174 -37
- package/zero.js.map +1 -1
- package/chunk-I37LCNCV.js.map +0 -1
- package/chunk-LC4G5YDA.js +0 -678
- package/chunk-LC4G5YDA.js.map +0 -1
- package/chunk-QFYTVVYX.js.map +0 -1
- package/chunk-S7RGM5X6.js.map +0 -1
- package/chunk-ZBN5RDRS.js +0 -149
- package/chunk-ZBN5RDRS.js.map +0 -1
- package/index.js +0 -267
- package/index.js.map +0 -1
- package/org-XNIYZFU3.js.map +0 -1
- /package/{chunk-R5TGEYFS.js.map → chunk-6EOYIE2E.js.map} +0 -0
- /package/{chunk-PM3ANOL6.js.map → chunk-GDNV2HYG.js.map} +0 -0
- /package/{chunk-HLEMRLRY.js.map → chunk-MMJ6XDBL.js.map} +0 -0
- /package/{chunk-462GZSDP.js.map → chunk-OODKKB56.js.map} +0 -0
- /package/{chunk-MNL5ZATJ.js.map → chunk-RNN4FGKY.js.map} +0 -0
package/chunk-ZBN5RDRS.js
DELETED
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as __createRequire } from "node:module";
|
|
3
|
-
const require = __createRequire(import.meta.url);
|
|
4
|
-
import {
|
|
5
|
-
init_esm_shims
|
|
6
|
-
} from "./chunk-DIRAZ3YX.js";
|
|
7
|
-
|
|
8
|
-
// src/instrument.ts
|
|
9
|
-
init_esm_shims();
|
|
10
|
-
var DSN = process.env.SENTRY_DSN ?? "https://268d9b4cd051531805af76a5b3934dca@o4510583739777024.ingest.us.sentry.io/4510832047947776";
|
|
11
|
-
var OPERATIONAL_ERROR_PATTERNS = [
|
|
12
|
-
/not authenticated/i,
|
|
13
|
-
/not found/i,
|
|
14
|
-
/agent not found/i,
|
|
15
|
-
/version not found/i,
|
|
16
|
-
/checkpoint not found/i,
|
|
17
|
-
/session not found/i,
|
|
18
|
-
/file not found/i,
|
|
19
|
-
/environment file not found/i,
|
|
20
|
-
/invalid format/i,
|
|
21
|
-
/invalid.*config/i,
|
|
22
|
-
/rate limit/i,
|
|
23
|
-
/concurrent run limit/i,
|
|
24
|
-
/insufficient.*credit/i,
|
|
25
|
-
/no model provider/i,
|
|
26
|
-
/network error/i,
|
|
27
|
-
/network issue/i,
|
|
28
|
-
/fetch failed/i,
|
|
29
|
-
/connection refused/i,
|
|
30
|
-
/timeout/i,
|
|
31
|
-
/ECONNREFUSED/i,
|
|
32
|
-
/ETIMEDOUT/i,
|
|
33
|
-
/forbidden/i,
|
|
34
|
-
/access denied/i
|
|
35
|
-
];
|
|
36
|
-
function isOperationalError(error) {
|
|
37
|
-
if (!(error instanceof Error)) {
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
const message = error.message;
|
|
41
|
-
return OPERATIONAL_ERROR_PATTERNS.some((pattern) => {
|
|
42
|
-
return pattern.test(message);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
if (DSN) {
|
|
46
|
-
const [Sentry, os] = await Promise.all([
|
|
47
|
-
import("./esm-PZKPCIYJ.js"),
|
|
48
|
-
import("os")
|
|
49
|
-
]);
|
|
50
|
-
Sentry.init({
|
|
51
|
-
dsn: DSN,
|
|
52
|
-
environment: process.env.SENTRY_ENVIRONMENT ?? "production",
|
|
53
|
-
release: "9.245.2",
|
|
54
|
-
sendDefaultPii: false,
|
|
55
|
-
tracesSampleRate: 0,
|
|
56
|
-
shutdownTimeout: 500,
|
|
57
|
-
initialScope: {
|
|
58
|
-
tags: {
|
|
59
|
-
app: "cli"
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
// Filter out operational errors - only send programmer errors (bugs)
|
|
63
|
-
beforeSend(event, hint) {
|
|
64
|
-
const error = hint.originalException;
|
|
65
|
-
if (isOperationalError(error)) {
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
return event;
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
Sentry.setContext("cli", {
|
|
72
|
-
version: "9.245.2",
|
|
73
|
-
command: process.argv.slice(2).join(" ")
|
|
74
|
-
});
|
|
75
|
-
Sentry.setContext("runtime", {
|
|
76
|
-
node_version: process.version,
|
|
77
|
-
os_platform: os.platform(),
|
|
78
|
-
os_release: os.release()
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
function handleEpipe(err) {
|
|
82
|
-
if (err.code === "EPIPE") {
|
|
83
|
-
process.exit(0);
|
|
84
|
-
}
|
|
85
|
-
throw err;
|
|
86
|
-
}
|
|
87
|
-
process.stdout.on("error", handleEpipe);
|
|
88
|
-
process.stderr.on("error", handleEpipe);
|
|
89
|
-
|
|
90
|
-
// src/lib/network/proxy.ts
|
|
91
|
-
init_esm_shims();
|
|
92
|
-
var configured = false;
|
|
93
|
-
function getEnvValue(lowercaseKey, uppercaseKey) {
|
|
94
|
-
const lowercaseValue = process.env[lowercaseKey]?.trim();
|
|
95
|
-
if (lowercaseValue) {
|
|
96
|
-
return lowercaseValue;
|
|
97
|
-
}
|
|
98
|
-
const uppercaseValue = process.env[uppercaseKey]?.trim();
|
|
99
|
-
if (uppercaseValue) {
|
|
100
|
-
return uppercaseValue;
|
|
101
|
-
}
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
function getProxyConfigFromEnv() {
|
|
105
|
-
const httpProxy = getEnvValue("http_proxy", "HTTP_PROXY");
|
|
106
|
-
const httpsProxy = getEnvValue("https_proxy", "HTTPS_PROXY");
|
|
107
|
-
if (!httpProxy && !httpsProxy) {
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
const noProxy = getEnvValue("no_proxy", "NO_PROXY");
|
|
111
|
-
const config = {};
|
|
112
|
-
if (httpProxy) {
|
|
113
|
-
config.httpProxy = httpProxy;
|
|
114
|
-
}
|
|
115
|
-
if (httpsProxy) {
|
|
116
|
-
config.httpsProxy = httpsProxy;
|
|
117
|
-
}
|
|
118
|
-
if (noProxy) {
|
|
119
|
-
config.noProxy = noProxy;
|
|
120
|
-
}
|
|
121
|
-
return config;
|
|
122
|
-
}
|
|
123
|
-
async function configureGlobalProxyFromEnv() {
|
|
124
|
-
if (configured) {
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
const config = getProxyConfigFromEnv();
|
|
128
|
-
if (!config) {
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
try {
|
|
132
|
-
const { EnvHttpProxyAgent, setGlobalDispatcher } = await import("./undici-ZMFN7TNU.js");
|
|
133
|
-
const dispatcher = new EnvHttpProxyAgent(config);
|
|
134
|
-
setGlobalDispatcher(dispatcher);
|
|
135
|
-
configured = true;
|
|
136
|
-
} catch (error) {
|
|
137
|
-
throw new Error(
|
|
138
|
-
"Invalid proxy configuration. Check HTTP_PROXY/HTTPS_PROXY/NO_PROXY values.",
|
|
139
|
-
{
|
|
140
|
-
cause: error instanceof Error ? error : void 0
|
|
141
|
-
}
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
export {
|
|
147
|
-
configureGlobalProxyFromEnv
|
|
148
|
-
};
|
|
149
|
-
//# sourceMappingURL=chunk-ZBN5RDRS.js.map
|
package/chunk-ZBN5RDRS.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/instrument.ts","../src/lib/network/proxy.ts"],"sourcesContent":["declare const __CLI_VERSION__: string;\ndeclare const __DEFAULT_SENTRY_DSN__: string;\n\nconst DSN = process.env.SENTRY_DSN ?? __DEFAULT_SENTRY_DSN__;\n\nconst OPERATIONAL_ERROR_PATTERNS = [\n /not authenticated/i,\n /not found/i,\n /agent not found/i,\n /version not found/i,\n /checkpoint not found/i,\n /session not found/i,\n /file not found/i,\n /environment file not found/i,\n /invalid format/i,\n /invalid.*config/i,\n /rate limit/i,\n /concurrent run limit/i,\n /insufficient.*credit/i,\n /no model provider/i,\n /network error/i,\n /network issue/i,\n /fetch failed/i,\n /connection refused/i,\n /timeout/i,\n /ECONNREFUSED/i,\n /ETIMEDOUT/i,\n /forbidden/i,\n /access denied/i,\n];\n\nfunction isOperationalError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n const message = error.message;\n return OPERATIONAL_ERROR_PATTERNS.some((pattern) => {\n return pattern.test(message);\n });\n}\n\nif (DSN) {\n const [Sentry, os] = await Promise.all([\n import(\"@sentry/node\"),\n import(\"node:os\"),\n ]);\n\n Sentry.init({\n dsn: DSN,\n environment: process.env.SENTRY_ENVIRONMENT ?? \"production\",\n release: __CLI_VERSION__,\n sendDefaultPii: false,\n tracesSampleRate: 0,\n shutdownTimeout: 500,\n initialScope: {\n tags: {\n app: \"cli\",\n },\n },\n // Filter out operational errors - only send programmer errors (bugs)\n beforeSend(event, hint) {\n const error = hint.originalException;\n if (isOperationalError(error)) {\n return null; // Drop operational errors\n }\n return event;\n },\n });\n\n Sentry.setContext(\"cli\", {\n version: __CLI_VERSION__,\n command: process.argv.slice(2).join(\" \"),\n });\n\n Sentry.setContext(\"runtime\", {\n node_version: process.version,\n os_platform: os.platform(),\n os_release: os.release(),\n });\n}\n\nfunction handleEpipe(err: NodeJS.ErrnoException) {\n if (err.code === \"EPIPE\") {\n process.exit(0);\n }\n throw err;\n}\n\nprocess.stdout.on(\"error\", handleEpipe);\nprocess.stderr.on(\"error\", handleEpipe);\n","interface ProxyConfig {\n httpProxy?: string;\n httpsProxy?: string;\n noProxy?: string;\n}\n\nlet configured = false;\n\nfunction getEnvValue(\n lowercaseKey: string,\n uppercaseKey: string,\n): string | null {\n const lowercaseValue = process.env[lowercaseKey]?.trim();\n if (lowercaseValue) {\n return lowercaseValue;\n }\n\n const uppercaseValue = process.env[uppercaseKey]?.trim();\n if (uppercaseValue) {\n return uppercaseValue;\n }\n\n return null;\n}\n\nfunction getProxyConfigFromEnv(): ProxyConfig | null {\n const httpProxy = getEnvValue(\"http_proxy\", \"HTTP_PROXY\");\n const httpsProxy = getEnvValue(\"https_proxy\", \"HTTPS_PROXY\");\n\n if (!httpProxy && !httpsProxy) {\n return null;\n }\n\n const noProxy = getEnvValue(\"no_proxy\", \"NO_PROXY\");\n const config: ProxyConfig = {};\n\n if (httpProxy) {\n config.httpProxy = httpProxy;\n }\n\n if (httpsProxy) {\n config.httpsProxy = httpsProxy;\n }\n\n if (noProxy) {\n config.noProxy = noProxy;\n }\n\n return config;\n}\n\nexport async function configureGlobalProxyFromEnv(): Promise<void> {\n if (configured) {\n return;\n }\n\n const config = getProxyConfigFromEnv();\n if (!config) {\n return;\n }\n\n try {\n const { EnvHttpProxyAgent, setGlobalDispatcher } = await import(\"undici\");\n const dispatcher = new EnvHttpProxyAgent(config);\n setGlobalDispatcher(dispatcher);\n configured = true;\n } catch (error) {\n throw new Error(\n \"Invalid proxy configuration. Check HTTP_PROXY/HTTPS_PROXY/NO_PROXY values.\",\n {\n cause: error instanceof Error ? error : undefined,\n },\n );\n }\n}\n"],"mappings":"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","names":[]}
|
package/index.js
DELETED
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as __createRequire } from "node:module";
|
|
3
|
-
const require = __createRequire(import.meta.url);
|
|
4
|
-
import "./chunk-LTDQISD7.js";
|
|
5
|
-
import {
|
|
6
|
-
clearConfig,
|
|
7
|
-
getActiveOrg,
|
|
8
|
-
getApiUrl,
|
|
9
|
-
getToken,
|
|
10
|
-
headersWithCliClientHeaders,
|
|
11
|
-
loadConfig,
|
|
12
|
-
saveConfig,
|
|
13
|
-
source_default,
|
|
14
|
-
withErrorHandler
|
|
15
|
-
} from "./chunk-S7RGM5X6.js";
|
|
16
|
-
import {
|
|
17
|
-
configureGlobalProxyFromEnv
|
|
18
|
-
} from "./chunk-ZBN5RDRS.js";
|
|
19
|
-
import "./chunk-LRHXR7JT.js";
|
|
20
|
-
import {
|
|
21
|
-
Command
|
|
22
|
-
} from "./chunk-B3W2RUBP.js";
|
|
23
|
-
import {
|
|
24
|
-
init_esm_shims
|
|
25
|
-
} from "./chunk-DIRAZ3YX.js";
|
|
26
|
-
|
|
27
|
-
// src/index.ts
|
|
28
|
-
init_esm_shims();
|
|
29
|
-
|
|
30
|
-
// src/commands/auth/index.ts
|
|
31
|
-
init_esm_shims();
|
|
32
|
-
|
|
33
|
-
// src/commands/auth/login.ts
|
|
34
|
-
init_esm_shims();
|
|
35
|
-
|
|
36
|
-
// src/lib/api/auth.ts
|
|
37
|
-
init_esm_shims();
|
|
38
|
-
function buildHeaders() {
|
|
39
|
-
const headers = {
|
|
40
|
-
"Content-Type": "application/json"
|
|
41
|
-
};
|
|
42
|
-
const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;
|
|
43
|
-
if (bypassSecret) {
|
|
44
|
-
headers["x-vercel-protection-bypass"] = bypassSecret;
|
|
45
|
-
}
|
|
46
|
-
return headers;
|
|
47
|
-
}
|
|
48
|
-
async function requestDeviceCode(apiUrl) {
|
|
49
|
-
const response = await fetch(`${apiUrl}/api/cli/auth/device`, {
|
|
50
|
-
method: "POST",
|
|
51
|
-
headers: headersWithCliClientHeaders(buildHeaders()),
|
|
52
|
-
body: JSON.stringify({})
|
|
53
|
-
});
|
|
54
|
-
if (!response.ok) {
|
|
55
|
-
if (response.status === 403) {
|
|
56
|
-
throw new Error("An unexpected network issue occurred");
|
|
57
|
-
}
|
|
58
|
-
throw new Error(`Failed to request device code: ${response.statusText}`);
|
|
59
|
-
}
|
|
60
|
-
return response.json();
|
|
61
|
-
}
|
|
62
|
-
async function exchangeToken(apiUrl, deviceCode) {
|
|
63
|
-
const response = await fetch(`${apiUrl}/api/cli/auth/token`, {
|
|
64
|
-
method: "POST",
|
|
65
|
-
headers: headersWithCliClientHeaders(buildHeaders()),
|
|
66
|
-
body: JSON.stringify({ device_code: deviceCode })
|
|
67
|
-
});
|
|
68
|
-
return response.json();
|
|
69
|
-
}
|
|
70
|
-
function delay(ms) {
|
|
71
|
-
return new Promise((resolve) => {
|
|
72
|
-
return setTimeout(resolve, ms);
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
async function authenticate(apiUrl) {
|
|
76
|
-
const targetApiUrl = apiUrl ?? await getApiUrl();
|
|
77
|
-
console.log("Initiating authentication...");
|
|
78
|
-
const deviceAuth = await requestDeviceCode(targetApiUrl);
|
|
79
|
-
console.log(source_default.green("\nDevice code generated"));
|
|
80
|
-
const verificationUrl = `${targetApiUrl}${deviceAuth.verification_path}`;
|
|
81
|
-
console.log(source_default.cyan(`
|
|
82
|
-
To authenticate, visit: ${verificationUrl}`));
|
|
83
|
-
console.log(`And enter this code: ${source_default.bold(deviceAuth.user_code)}`);
|
|
84
|
-
console.log(
|
|
85
|
-
`
|
|
86
|
-
The code expires in ${Math.floor(deviceAuth.expires_in / 60)} minutes.`
|
|
87
|
-
);
|
|
88
|
-
console.log("\nWaiting for authentication...");
|
|
89
|
-
const startTime = Date.now();
|
|
90
|
-
const maxWaitTime = deviceAuth.expires_in * 1e3;
|
|
91
|
-
const pollInterval = (deviceAuth.interval || 5) * 1e3;
|
|
92
|
-
let isFirstPoll = true;
|
|
93
|
-
while (Date.now() - startTime < maxWaitTime) {
|
|
94
|
-
if (!isFirstPoll) {
|
|
95
|
-
await delay(pollInterval);
|
|
96
|
-
}
|
|
97
|
-
isFirstPoll = false;
|
|
98
|
-
const tokenResult = await exchangeToken(
|
|
99
|
-
targetApiUrl,
|
|
100
|
-
deviceAuth.device_code
|
|
101
|
-
);
|
|
102
|
-
if (tokenResult.access_token) {
|
|
103
|
-
await saveConfig({
|
|
104
|
-
token: tokenResult.access_token,
|
|
105
|
-
apiUrl: targetApiUrl
|
|
106
|
-
});
|
|
107
|
-
console.log(source_default.green("\nAuthentication successful!"));
|
|
108
|
-
console.log("Your credentials have been saved");
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
if (tokenResult.error === "authorization_pending") {
|
|
112
|
-
process.stdout.write(source_default.dim("."));
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
if (tokenResult.error === "expired_token") {
|
|
116
|
-
throw new Error("Device code expired, please try again");
|
|
117
|
-
}
|
|
118
|
-
if (tokenResult.error) {
|
|
119
|
-
throw new Error(
|
|
120
|
-
`Authentication failed: ${tokenResult.error_description ?? tokenResult.error}`
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
throw new Error("Authentication timed out, please try again");
|
|
125
|
-
}
|
|
126
|
-
async function logout() {
|
|
127
|
-
await clearConfig();
|
|
128
|
-
console.log(source_default.green("\u2713 Successfully logged out"));
|
|
129
|
-
console.log("Your credentials have been cleared");
|
|
130
|
-
}
|
|
131
|
-
async function checkAuthStatus() {
|
|
132
|
-
const config = await loadConfig();
|
|
133
|
-
if (config.token) {
|
|
134
|
-
console.log(source_default.green("\u2713 Authenticated"));
|
|
135
|
-
console.log("You are logged in to VM0.");
|
|
136
|
-
} else {
|
|
137
|
-
console.error(source_default.red("\u2717 Not authenticated"));
|
|
138
|
-
console.error(source_default.dim(" Run: vm0 auth login"));
|
|
139
|
-
}
|
|
140
|
-
if (process.env.VM0_TOKEN) {
|
|
141
|
-
console.log("Using token from VM0_TOKEN environment variable");
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
async function setupToken() {
|
|
145
|
-
const token = await getToken();
|
|
146
|
-
if (!token) {
|
|
147
|
-
console.error(source_default.red("\u2717 Not authenticated"));
|
|
148
|
-
console.error("");
|
|
149
|
-
console.error("To get a token for CI/CD:");
|
|
150
|
-
console.error(" 1. Run 'vm0 auth login' to authenticate");
|
|
151
|
-
console.error(" 2. Run 'vm0 auth setup-token' to get your token");
|
|
152
|
-
console.error(
|
|
153
|
-
" 3. Store the token in your CI/CD secrets (e.g., VM0_TOKEN)"
|
|
154
|
-
);
|
|
155
|
-
process.exit(1);
|
|
156
|
-
}
|
|
157
|
-
console.log(source_default.green("\u2713 Authentication token exported successfully!"));
|
|
158
|
-
console.log("");
|
|
159
|
-
console.log("Your token:");
|
|
160
|
-
console.log("");
|
|
161
|
-
console.log(token);
|
|
162
|
-
console.log("");
|
|
163
|
-
console.log(
|
|
164
|
-
`Use this token by setting: ${source_default.cyan("export VM0_TOKEN=<token>")}`
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// src/commands/auth/login.ts
|
|
169
|
-
var loginCommand = new Command().name("login").description("Log in to VM0 (use VM0_API_BACKEND_URL env var to set API URL)").action(
|
|
170
|
-
withErrorHandler(async () => {
|
|
171
|
-
await authenticate();
|
|
172
|
-
})
|
|
173
|
-
);
|
|
174
|
-
|
|
175
|
-
// src/commands/auth/logout.ts
|
|
176
|
-
init_esm_shims();
|
|
177
|
-
var logoutCommand = new Command().name("logout").description("Log out of VM0").action(
|
|
178
|
-
withErrorHandler(async () => {
|
|
179
|
-
await logout();
|
|
180
|
-
})
|
|
181
|
-
);
|
|
182
|
-
|
|
183
|
-
// src/commands/auth/status.ts
|
|
184
|
-
init_esm_shims();
|
|
185
|
-
var statusCommand = new Command().name("status").description("Show current authentication status").action(
|
|
186
|
-
withErrorHandler(async () => {
|
|
187
|
-
await checkAuthStatus();
|
|
188
|
-
})
|
|
189
|
-
);
|
|
190
|
-
|
|
191
|
-
// src/commands/auth/setup-token.ts
|
|
192
|
-
init_esm_shims();
|
|
193
|
-
var setupTokenCommand = new Command().name("setup-token").description("Output auth token for CI/CD environments").action(
|
|
194
|
-
withErrorHandler(async () => {
|
|
195
|
-
await setupToken();
|
|
196
|
-
})
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
// src/commands/auth/index.ts
|
|
200
|
-
var authCommand = new Command().name("auth").description("Authenticate vm0").addCommand(loginCommand).addCommand(logoutCommand).addCommand(statusCommand).addCommand(setupTokenCommand);
|
|
201
|
-
|
|
202
|
-
// src/commands/whoami.ts
|
|
203
|
-
init_esm_shims();
|
|
204
|
-
function isInsideSandbox() {
|
|
205
|
-
return !!process.env.VM0_RUN_ID;
|
|
206
|
-
}
|
|
207
|
-
async function showSandboxInfo() {
|
|
208
|
-
const agentId = process.env.ZERO_AGENT_ID;
|
|
209
|
-
const cliAgentType = process.env.CLI_AGENT_TYPE;
|
|
210
|
-
const runId = process.env.VM0_RUN_ID;
|
|
211
|
-
const activeOrg = await getActiveOrg();
|
|
212
|
-
const apiUrl = process.env.VM0_API_BACKEND_URL;
|
|
213
|
-
const hasAgentInfo = agentId || cliAgentType;
|
|
214
|
-
if (hasAgentInfo) {
|
|
215
|
-
console.log(source_default.bold("Agent:"));
|
|
216
|
-
if (agentId) console.log(` ID: ${agentId}`);
|
|
217
|
-
if (cliAgentType) console.log(` Framework: ${cliAgentType}`);
|
|
218
|
-
console.log();
|
|
219
|
-
}
|
|
220
|
-
console.log(source_default.bold("Run:"));
|
|
221
|
-
if (runId) console.log(` ID: ${runId}`);
|
|
222
|
-
if (activeOrg) console.log(` Org: ${activeOrg}`);
|
|
223
|
-
if (apiUrl) console.log(` API: ${apiUrl}`);
|
|
224
|
-
}
|
|
225
|
-
async function showLocalInfo() {
|
|
226
|
-
const token = await getToken();
|
|
227
|
-
const apiUrl = await getApiUrl();
|
|
228
|
-
const activeOrg = await getActiveOrg();
|
|
229
|
-
console.log(source_default.bold("Auth:"));
|
|
230
|
-
if (token) {
|
|
231
|
-
const tokenSource = process.env.VM0_TOKEN ? "VM0_TOKEN env var" : "config file";
|
|
232
|
-
console.log(
|
|
233
|
-
` Status: ${source_default.green("Authenticated")} (via ${tokenSource})`
|
|
234
|
-
);
|
|
235
|
-
} else {
|
|
236
|
-
console.log(` Status: ${source_default.dim("Not authenticated")}`);
|
|
237
|
-
}
|
|
238
|
-
console.log(` API: ${apiUrl}`);
|
|
239
|
-
console.log();
|
|
240
|
-
if (activeOrg) {
|
|
241
|
-
console.log(source_default.bold("Org:"));
|
|
242
|
-
console.log(` Active: ${activeOrg}`);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
var whoamiCommand = new Command().name("whoami").description("Show current identity and environment information").action(
|
|
246
|
-
withErrorHandler(async () => {
|
|
247
|
-
if (isInsideSandbox()) {
|
|
248
|
-
await showSandboxInfo();
|
|
249
|
-
} else {
|
|
250
|
-
await showLocalInfo();
|
|
251
|
-
}
|
|
252
|
-
})
|
|
253
|
-
);
|
|
254
|
-
|
|
255
|
-
// src/index.ts
|
|
256
|
-
var program = new Command();
|
|
257
|
-
program.name("vm0").description("VM0 CLI - Developer authentication utilities").version("9.245.2");
|
|
258
|
-
program.addCommand(authCommand);
|
|
259
|
-
program.addCommand(whoamiCommand);
|
|
260
|
-
if (process.argv[1]?.endsWith("index.js") || process.argv[1]?.endsWith("index.ts") || process.argv[1]?.endsWith("vm0")) {
|
|
261
|
-
await configureGlobalProxyFromEnv();
|
|
262
|
-
program.parse();
|
|
263
|
-
}
|
|
264
|
-
export {
|
|
265
|
-
program
|
|
266
|
-
};
|
|
267
|
-
//# sourceMappingURL=index.js.map
|
package/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/commands/auth/index.ts","../src/commands/auth/login.ts","../src/lib/api/auth.ts","../src/commands/auth/logout.ts","../src/commands/auth/status.ts","../src/commands/auth/setup-token.ts","../src/commands/whoami.ts"],"sourcesContent":["// VM0 CLI entry point - main module\n// Sentry must be initialized before any other imports\nimport \"./instrument.js\";\nimport { Command } from \"commander\";\nimport { configureGlobalProxyFromEnv } from \"./lib/network/proxy.js\";\nimport { authCommand } from \"./commands/auth\";\nimport { whoamiCommand } from \"./commands/whoami\";\n\nconst program = new Command();\n\ndeclare const __CLI_VERSION__: string;\n\nprogram\n .name(\"vm0\")\n .description(\"VM0 CLI - Developer authentication utilities\")\n .version(__CLI_VERSION__);\n\n// Register all commands\nprogram.addCommand(authCommand);\nprogram.addCommand(whoamiCommand);\n\nexport { program };\n\nif (\n process.argv[1]?.endsWith(\"index.js\") ||\n process.argv[1]?.endsWith(\"index.ts\") ||\n process.argv[1]?.endsWith(\"vm0\")\n) {\n await configureGlobalProxyFromEnv();\n program.parse();\n}\n","import { Command } from \"commander\";\nimport { loginCommand } from \"./login\";\nimport { logoutCommand } from \"./logout\";\nimport { statusCommand } from \"./status\";\nimport { setupTokenCommand } from \"./setup-token\";\n\nexport const authCommand = new Command()\n .name(\"auth\")\n .description(\"Authenticate vm0\")\n .addCommand(loginCommand)\n .addCommand(logoutCommand)\n .addCommand(statusCommand)\n .addCommand(setupTokenCommand);\n","import { Command } from \"commander\";\nimport { authenticate } from \"../../lib/api/auth\";\nimport { withErrorHandler } from \"../../lib/command\";\n\nexport const loginCommand = new Command()\n .name(\"login\")\n .description(\"Log in to VM0 (use VM0_API_BACKEND_URL env var to set API URL)\")\n .action(\n withErrorHandler(async () => {\n await authenticate();\n }),\n );\n","import chalk from \"chalk\";\nimport {\n saveConfig,\n clearConfig,\n loadConfig,\n getApiUrl,\n getToken,\n} from \"./config\";\nimport { headersWithCliClientHeaders } from \"./client-headers\";\n\n/**\n * Build headers with optional Vercel bypass secret\n * Used to bypass Vercel deployment protection in CI/preview environments\n */\nfunction buildHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n // Add Vercel bypass secret if available (for CI/preview deployments)\n const bypassSecret = process.env.VERCEL_AUTOMATION_BYPASS_SECRET;\n if (bypassSecret) {\n headers[\"x-vercel-protection-bypass\"] = bypassSecret;\n }\n\n return headers;\n}\n\nasync function requestDeviceCode(apiUrl: string): Promise<{\n device_code: string;\n user_code: string;\n verification_path: string;\n expires_in: number;\n interval: number;\n}> {\n const response = await fetch(`${apiUrl}/api/cli/auth/device`, {\n method: \"POST\",\n headers: headersWithCliClientHeaders(buildHeaders()),\n body: JSON.stringify({}),\n });\n\n if (!response.ok) {\n if (response.status === 403) {\n throw new Error(\"An unexpected network issue occurred\");\n }\n throw new Error(`Failed to request device code: ${response.statusText}`);\n }\n\n return response.json() as Promise<{\n device_code: string;\n user_code: string;\n verification_path: string;\n expires_in: number;\n interval: number;\n }>;\n}\n\nasync function exchangeToken(\n apiUrl: string,\n deviceCode: string,\n): Promise<{\n access_token?: string;\n refresh_token?: string;\n token_type?: string;\n expires_in?: number;\n error?: string;\n error_description?: string;\n}> {\n const response = await fetch(`${apiUrl}/api/cli/auth/token`, {\n method: \"POST\",\n headers: headersWithCliClientHeaders(buildHeaders()),\n body: JSON.stringify({ device_code: deviceCode }),\n });\n\n return response.json() as Promise<{\n access_token?: string;\n refresh_token?: string;\n token_type?: string;\n expires_in?: number;\n error?: string;\n error_description?: string;\n }>;\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n return setTimeout(resolve, ms);\n });\n}\n\nexport async function authenticate(apiUrl?: string): Promise<void> {\n // Use provided apiUrl or get from config/env (with fallback to production)\n const targetApiUrl = apiUrl ?? (await getApiUrl());\n console.log(\"Initiating authentication...\");\n\n // Request device code\n const deviceAuth = await requestDeviceCode(targetApiUrl);\n\n console.log(chalk.green(\"\\nDevice code generated\"));\n\n // Construct verification URL from API URL and server-provided path\n const verificationUrl = `${targetApiUrl}${deviceAuth.verification_path}`;\n console.log(chalk.cyan(`\\nTo authenticate, visit: ${verificationUrl}`));\n console.log(`And enter this code: ${chalk.bold(deviceAuth.user_code)}`);\n console.log(\n `\\nThe code expires in ${Math.floor(deviceAuth.expires_in / 60)} minutes.`,\n );\n\n console.log(\"\\nWaiting for authentication...\");\n\n // Poll for token\n const startTime = Date.now();\n const maxWaitTime = deviceAuth.expires_in * 1000; // Convert to milliseconds\n const pollInterval = (deviceAuth.interval || 5) * 1000; // Use server-specified interval or default to 5 seconds\n\n let isFirstPoll = true;\n\n while (Date.now() - startTime < maxWaitTime) {\n // Skip delay on first poll for faster response\n if (!isFirstPoll) {\n await delay(pollInterval); // Use dynamic polling interval\n }\n isFirstPoll = false;\n\n const tokenResult = await exchangeToken(\n targetApiUrl,\n deviceAuth.device_code,\n );\n\n if (tokenResult.access_token) {\n // Success! Store the token and org context\n await saveConfig({\n token: tokenResult.access_token,\n apiUrl: targetApiUrl,\n });\n\n console.log(chalk.green(\"\\nAuthentication successful!\"));\n console.log(\"Your credentials have been saved\");\n return;\n }\n\n if (tokenResult.error === \"authorization_pending\") {\n // Still waiting for user to authenticate\n process.stdout.write(chalk.dim(\".\"));\n continue;\n }\n\n // Handle other errors\n if (tokenResult.error === \"expired_token\") {\n throw new Error(\"Device code expired, please try again\");\n }\n\n if (tokenResult.error) {\n throw new Error(\n `Authentication failed: ${tokenResult.error_description ?? tokenResult.error}`,\n );\n }\n }\n\n // Timeout\n throw new Error(\"Authentication timed out, please try again\");\n}\n\nexport async function logout(): Promise<void> {\n await clearConfig();\n console.log(chalk.green(\"✓ Successfully logged out\"));\n console.log(\"Your credentials have been cleared\");\n}\n\nexport async function checkAuthStatus(): Promise<void> {\n const config = await loadConfig();\n\n if (config.token) {\n console.log(chalk.green(\"✓ Authenticated\"));\n console.log(\"You are logged in to VM0.\");\n } else {\n console.error(chalk.red(\"✗ Not authenticated\"));\n console.error(chalk.dim(\" Run: vm0 auth login\"));\n }\n\n // Also check for environment variable\n if (process.env.VM0_TOKEN) {\n console.log(\"Using token from VM0_TOKEN environment variable\");\n }\n}\n\nexport async function setupToken(): Promise<void> {\n const token = await getToken();\n\n if (!token) {\n console.error(chalk.red(\"✗ Not authenticated\"));\n console.error(\"\");\n console.error(\"To get a token for CI/CD:\");\n console.error(\" 1. Run 'vm0 auth login' to authenticate\");\n console.error(\" 2. Run 'vm0 auth setup-token' to get your token\");\n console.error(\n \" 3. Store the token in your CI/CD secrets (e.g., VM0_TOKEN)\",\n );\n process.exit(1);\n }\n\n console.log(chalk.green(\"✓ Authentication token exported successfully!\"));\n console.log(\"\");\n console.log(\"Your token:\");\n console.log(\"\");\n console.log(token);\n console.log(\"\");\n console.log(\n `Use this token by setting: ${chalk.cyan(\"export VM0_TOKEN=<token>\")}`,\n );\n}\n","import { Command } from \"commander\";\nimport { logout } from \"../../lib/api/auth\";\nimport { withErrorHandler } from \"../../lib/command\";\n\nexport const logoutCommand = new Command()\n .name(\"logout\")\n .description(\"Log out of VM0\")\n .action(\n withErrorHandler(async () => {\n await logout();\n }),\n );\n","import { Command } from \"commander\";\nimport { checkAuthStatus } from \"../../lib/api/auth\";\nimport { withErrorHandler } from \"../../lib/command\";\n\nexport const statusCommand = new Command()\n .name(\"status\")\n .description(\"Show current authentication status\")\n .action(\n withErrorHandler(async () => {\n await checkAuthStatus();\n }),\n );\n","import { Command } from \"commander\";\nimport { setupToken } from \"../../lib/api/auth\";\nimport { withErrorHandler } from \"../../lib/command\";\n\nexport const setupTokenCommand = new Command()\n .name(\"setup-token\")\n .description(\"Output auth token for CI/CD environments\")\n .action(\n withErrorHandler(async () => {\n await setupToken();\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getApiUrl, getActiveOrg, getToken } from \"../lib/api/config\";\nimport { withErrorHandler } from \"../lib/command\";\n\n/**\n * Detect if running inside a VM0 sandbox (agent runtime).\n * Presence of VM0_RUN_ID indicates sandbox execution.\n */\nfunction isInsideSandbox(): boolean {\n return !!process.env.VM0_RUN_ID;\n}\n\n/**\n * Display agent identity and run information when inside a sandbox.\n */\nasync function showSandboxInfo(): Promise<void> {\n const agentId = process.env.ZERO_AGENT_ID;\n const cliAgentType = process.env.CLI_AGENT_TYPE;\n\n const runId = process.env.VM0_RUN_ID;\n const activeOrg = await getActiveOrg();\n const apiUrl = process.env.VM0_API_BACKEND_URL;\n\n // Agent section\n const hasAgentInfo = agentId || cliAgentType;\n if (hasAgentInfo) {\n console.log(chalk.bold(\"Agent:\"));\n if (agentId) console.log(` ID: ${agentId}`);\n if (cliAgentType) console.log(` Framework: ${cliAgentType}`);\n console.log();\n }\n\n // Run section\n console.log(chalk.bold(\"Run:\"));\n if (runId) console.log(` ID: ${runId}`);\n if (activeOrg) console.log(` Org: ${activeOrg}`);\n if (apiUrl) console.log(` API: ${apiUrl}`);\n}\n\n/**\n * Display authentication and org information when running outside a sandbox.\n */\nasync function showLocalInfo(): Promise<void> {\n const token = await getToken();\n const apiUrl = await getApiUrl();\n const activeOrg = await getActiveOrg();\n\n // Auth section\n console.log(chalk.bold(\"Auth:\"));\n if (token) {\n const tokenSource = process.env.VM0_TOKEN\n ? \"VM0_TOKEN env var\"\n : \"config file\";\n console.log(\n ` Status: ${chalk.green(\"Authenticated\")} (via ${tokenSource})`,\n );\n } else {\n console.log(` Status: ${chalk.dim(\"Not authenticated\")}`);\n }\n console.log(` API: ${apiUrl}`);\n console.log();\n\n // Org section\n if (activeOrg) {\n console.log(chalk.bold(\"Org:\"));\n console.log(` Active: ${activeOrg}`);\n }\n}\n\nexport const whoamiCommand = new Command()\n .name(\"whoami\")\n .description(\"Show current identity and environment information\")\n .action(\n withErrorHandler(async () => {\n if (isInsideSandbox()) {\n await showSandboxInfo();\n } else {\n await showLocalInfo();\n }\n }),\n );\n"],"mappings":"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","names":[]}
|
package/org-XNIYZFU3.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/zero/org/index.ts","../src/commands/zero/org/status.ts","../src/commands/zero/org/set.ts","../src/commands/zero/org/list.ts","../src/commands/zero/org/use.ts","../src/commands/zero/org/members.ts","../src/commands/zero/org/invite.ts","../src/commands/zero/org/remove.ts","../src/commands/zero/org/leave.ts","../src/commands/zero/org/delete.ts","../src/commands/zero/org/secret/index.ts","../src/commands/zero/org/secret/list.ts","../src/commands/zero/org/secret/set.ts","../src/commands/zero/org/secret/remove.ts","../src/commands/zero/org/variable/index.ts","../src/commands/zero/org/variable/list.ts","../src/commands/zero/org/variable/set.ts","../src/commands/zero/org/variable/remove.ts","../src/commands/zero/org/model-provider/index.ts","../src/commands/zero/org/model-provider/list.ts","../src/commands/zero/org/model-provider/setup.ts","../src/lib/domain/model-provider/shared.ts","../src/commands/zero/org/model-provider/remove.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { statusCommand } from \"./status\";\nimport { setCommand } from \"./set\";\nimport { listCommand } from \"./list\";\nimport { useCommand } from \"./use\";\nimport { membersCommand } from \"./members\";\nimport { inviteCommand } from \"./invite\";\nimport { removeCommand } from \"./remove\";\nimport { leaveCommand } from \"./leave\";\nimport { deleteCommand } from \"./delete\";\nimport { zeroOrgSecretCommand } from \"./secret\";\nimport { zeroOrgVariableCommand } from \"./variable\";\nimport { zeroOrgModelProviderCommand } from \"./model-provider\";\n\nexport const zeroOrgCommand = new Command()\n .name(\"org\")\n .description(\"Manage organization settings, members, and providers\")\n .addCommand(statusCommand)\n .addCommand(setCommand)\n .addCommand(listCommand)\n .addCommand(useCommand)\n .addCommand(membersCommand)\n .addCommand(inviteCommand)\n .addCommand(removeCommand)\n .addCommand(leaveCommand)\n .addCommand(deleteCommand)\n .addCommand(zeroOrgSecretCommand)\n .addCommand(zeroOrgVariableCommand)\n .addCommand(zeroOrgModelProviderCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroOrg } from \"../../../lib/api\";\nimport { ApiRequestError } from \"../../../lib/api/core/client-factory\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const statusCommand = new Command()\n .name(\"status\")\n .description(\"View current organization status\")\n .action(\n withErrorHandler(async () => {\n try {\n const org = await getZeroOrg();\n\n console.log(chalk.bold(\"Organization Information:\"));\n console.log(` Slug: ${chalk.green(org.slug)}`);\n } catch (error) {\n if (error instanceof ApiRequestError && error.status === 404) {\n throw new Error(\"No organization configured\", {\n cause: new Error(\"Set your organization with: zero org set <slug>\"),\n });\n }\n throw error;\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroOrg, updateZeroOrg, switchZeroOrg } from \"../../../lib/api\";\nimport { saveConfig } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Rename your organization slug\")\n .argument(\"<slug>\", \"The new organization slug\")\n .option(\n \"--force\",\n \"Force change existing organization (may break references)\",\n )\n .action(\n withErrorHandler(async (slug: string, options: { force?: boolean }) => {\n try {\n const existingOrg = await getZeroOrg();\n\n if (!options.force) {\n throw new Error(\n `You already have an organization: ${existingOrg.slug}`,\n {\n cause: new Error(`To change, use: zero org set ${slug} --force`),\n },\n );\n }\n\n const org = await updateZeroOrg({ slug, force: true });\n\n const result = await switchZeroOrg(org.slug);\n await saveConfig({\n token: result.access_token,\n });\n\n console.log(chalk.green(`✓ Organization updated to ${org.slug}`));\n console.log();\n console.log(\"Your agents will now be namespaced as:\");\n console.log(chalk.cyan(` ${org.slug}/<agent-name>`));\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"already exists\")\n ) {\n throw new Error(\n `Organization \"${slug}\" is already taken. Please choose a different slug.`,\n );\n }\n throw error;\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgs } from \"../../../lib/api\";\nimport { getActiveOrg } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .description(\"List all accessible organizations\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgs();\n const activeOrg = await getActiveOrg();\n\n console.log(chalk.bold(\"Available organizations:\"));\n for (const org of result.orgs) {\n const isCurrent = org.slug === activeOrg;\n const marker = isCurrent ? chalk.green(\"* \") : \" \";\n const roleLabel = org.role ? ` (${org.role})` : \"\";\n const currentLabel = isCurrent ? chalk.dim(\" ← current\") : \"\";\n console.log(`${marker}${org.slug}${roleLabel}${currentLabel}`);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgs, switchZeroOrg } from \"../../../lib/api\";\nimport { saveConfig } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const useCommand = new Command()\n .name(\"use\")\n .description(\"Switch to a different organization\")\n .argument(\"<slug>\", \"Organization slug to switch to\")\n .action(\n withErrorHandler(async (slug: string) => {\n const orgList = await listZeroOrgs();\n const target = orgList.orgs.find((s) => {\n return s.slug === slug;\n });\n if (!target) {\n throw new Error(`Organization '${slug}' not found or not accessible.`);\n }\n\n const result = await switchZeroOrg(slug);\n await saveConfig({\n token: result.access_token,\n });\n console.log(chalk.green(`✓ Switched to organization: ${slug}`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroOrgMembers } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const membersCommand = new Command()\n .name(\"members\")\n .description(\"View organization members\")\n .action(\n withErrorHandler(async () => {\n const status = await getZeroOrgMembers();\n\n console.log(chalk.bold(`Organization: ${status.slug}`));\n console.log(` Role: ${status.role}`);\n console.log(\n ` Created: ${new Date(status.createdAt).toLocaleDateString()}`,\n );\n console.log();\n console.log(chalk.bold(\"Members:\"));\n for (const member of status.members) {\n const roleTag =\n member.role === \"admin\"\n ? chalk.yellow(` (${member.role})`)\n : chalk.dim(` (${member.role})`);\n console.log(` ${member.email}${roleTag}`);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { inviteZeroOrgMember } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const inviteCommand = new Command()\n .name(\"invite\")\n .description(\"Invite a member to the current organization\")\n .requiredOption(\"--email <email>\", \"Email address of the member to invite\")\n .option(\n \"--role <role>\",\n \"Role for the invited member (member or admin)\",\n \"member\",\n )\n .action(\n withErrorHandler(async (options: { email: string; role: string }) => {\n if (options.role !== \"member\" && options.role !== \"admin\") {\n throw new Error(\n `Invalid role \"${options.role}\". Must be \"member\" or \"admin\".`,\n );\n }\n await inviteZeroOrgMember(options.email, options.role);\n console.log(\n chalk.green(`✓ Invitation sent to ${options.email} as ${options.role}`),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { removeZeroOrgMember } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Remove a member from the current organization\")\n .argument(\"<email>\", \"Email address of the member to remove\")\n .action(\n withErrorHandler(async (email: string) => {\n await removeZeroOrgMember(email);\n console.log(chalk.green(`✓ Removed ${email} from organization`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { leaveZeroOrg, listZeroOrgs, switchZeroOrg } from \"../../../lib/api\";\nimport { saveConfig } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const leaveCommand = new Command()\n .name(\"leave\")\n .description(\"Leave the current organization\")\n .action(\n withErrorHandler(async () => {\n await leaveZeroOrg();\n\n const { orgs } = await listZeroOrgs();\n if (orgs.length === 0) {\n await saveConfig({ token: undefined });\n console.log(chalk.green(\"✓ Left organization.\"));\n console.log(\n chalk.yellow(\"No remaining organizations. Run: vm0 auth login\"),\n );\n return;\n }\n\n const nextOrg = orgs[0]!.slug;\n const result = await switchZeroOrg(nextOrg);\n await saveConfig({\n token: result.access_token,\n });\n console.log(chalk.green(`✓ Left organization. Switched to: ${nextOrg}`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrg } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .description(\"Delete the current organization (admin only)\")\n .argument(\"<slug>\", \"Organization slug to confirm deletion\")\n .action(\n withErrorHandler(async (slug: string) => {\n await deleteZeroOrg(slug);\n console.log(chalk.green(`✓ Organization '${slug}' has been deleted.`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { removeCommand } from \"./remove\";\n\nexport const zeroOrgSecretCommand = new Command()\n .name(\"secret\")\n .description(\"Manage org-level secrets (admin)\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(removeCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgSecrets } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all org-level secrets\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgSecrets();\n\n if (result.secrets.length === 0) {\n console.log(chalk.dim(\"No org secrets found\"));\n console.log();\n console.log(\"To add an org secret:\");\n console.log(\n chalk.cyan(\" zero org secret set MY_API_KEY --body <value>\"),\n );\n return;\n }\n\n console.log(chalk.bold(\"Org Secrets:\"));\n console.log();\n\n for (const secret of result.secrets) {\n console.log(` ${chalk.cyan(secret.name)}`);\n if (secret.description) {\n console.log(` ${chalk.dim(secret.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.secrets.length} secret(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroOrgSecret } from \"../../../../lib/api\";\nimport {\n isInteractive,\n promptPassword,\n} from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update an org-level secret (admin only)\")\n .argument(\"<name>\", \"Secret name (uppercase, e.g., MY_API_KEY)\")\n .option(\n \"-b, --body <value>\",\n \"Secret value (required in non-interactive mode)\",\n )\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n options: { body?: string; description?: string },\n ) => {\n let value: string;\n\n if (options.body !== undefined) {\n value = options.body;\n } else if (isInteractive()) {\n const prompted = await promptPassword(\"Enter secret value:\");\n if (prompted === undefined) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n value = prompted;\n } else {\n throw new Error(\"--body is required in non-interactive mode\", {\n cause: new Error(\n `Usage: zero org secret set ${name} --body \"your-secret-value\"`,\n ),\n });\n }\n\n let secret;\n try {\n secret = await setZeroOrgSecret({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid secret names: MY_API_KEY, GITHUB_TOKEN, AWS_ACCESS_KEY_ID\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Org secret \"${secret.name}\" saved`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrgSecret } from \"../../../../lib/api\";\nimport {\n isInteractive,\n promptConfirm,\n} from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Delete an org-level secret (admin only)\")\n .argument(\"<name>\", \"Secret name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete org secret \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroOrgSecret(name);\n console.log(chalk.green(`✓ Org secret \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { removeCommand } from \"./remove\";\n\nexport const zeroOrgVariableCommand = new Command()\n .name(\"variable\")\n .description(\"Manage org-level variables (admin)\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(removeCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgVariables } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\n/**\n * Truncate value for display if too long\n */\nfunction truncateValue(value: string, maxLength: number = 60): string {\n if (value.length <= maxLength) {\n return value;\n }\n return value.slice(0, maxLength - 15) + \"... [truncated]\";\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all org-level variables\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgVariables();\n\n if (result.variables.length === 0) {\n console.log(chalk.dim(\"No org variables found\"));\n console.log();\n console.log(\"To add an org variable:\");\n console.log(chalk.cyan(\" zero org variable set MY_VAR <value>\"));\n return;\n }\n\n console.log(chalk.bold(\"Org Variables:\"));\n console.log();\n\n for (const variable of result.variables) {\n const displayValue = truncateValue(variable.value);\n console.log(` ${chalk.cyan(variable.name)} = ${displayValue}`);\n if (variable.description) {\n console.log(` ${chalk.dim(variable.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.variables.length} variable(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroOrgVariable } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update an org-level variable (admin only)\")\n .argument(\"<name>\", \"Variable name (uppercase, e.g., MY_VAR)\")\n .argument(\"<value>\", \"Variable value\")\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n value: string,\n options: { description?: string },\n ) => {\n let variable;\n try {\n variable = await setZeroOrgVariable({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid variable names: MY_VAR, API_URL, DEBUG_MODE\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Org variable \"${variable.name}\" saved`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrgVariable } from \"../../../../lib/api\";\nimport {\n isInteractive,\n promptConfirm,\n} from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Delete an org-level variable (admin only)\")\n .argument(\"<name>\", \"Variable name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete org variable \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroOrgVariable(name);\n console.log(chalk.green(`✓ Org variable \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { createListCommand } from \"./list\";\nimport { createSetupCommand } from \"./setup\";\nimport { createRemoveCommand } from \"./remove\";\n\nexport const zeroOrgModelProviderCommand = new Command()\n .name(\"model-provider\")\n .description(\"Manage org-level model providers\")\n .addCommand(\n createListCommand({\n scopeLabel: \"org-level\",\n title: \"Org Model Providers\",\n setupCommand: \"zero org model-provider setup\",\n }),\n )\n .addCommand(\n createSetupCommand({\n commandPrefix: \"zero org model-provider setup\",\n description: \"Configure an org-level model provider\",\n scopeLabel: \"Org\",\n }),\n )\n .addCommand(createRemoveCommand({ scopeLabel: \"Org\" }));\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgModelProviders } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\ninterface CreateListCommandOptions {\n scopeLabel?: string;\n title?: string;\n setupCommand?: string;\n}\n\nexport function createListCommand(\n options: CreateListCommandOptions = {},\n): Command {\n const scopeLabel = options.scopeLabel ?? \"org-level\";\n const title = options.title ?? \"Org Model Providers\";\n const setupCommand = options.setupCommand ?? \"zero org model-provider setup\";\n\n return new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(`List all ${scopeLabel} model providers`)\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgModelProviders();\n\n if (result.modelProviders.length === 0) {\n console.log(chalk.dim(`No ${scopeLabel} model providers configured`));\n console.log();\n console.log(`To add a ${scopeLabel} model provider:`);\n console.log(chalk.cyan(` ${setupCommand}`));\n return;\n }\n\n // Group by framework\n const byFramework = result.modelProviders.reduce(\n (acc, p) => {\n const fw = p.framework;\n if (!acc[fw]) {\n acc[fw] = [];\n }\n acc[fw].push(p);\n return acc;\n },\n {} as Record<string, typeof result.modelProviders>,\n );\n\n console.log(chalk.bold(`${title}:`));\n console.log();\n\n for (const [framework, providers] of Object.entries(byFramework)) {\n console.log(` ${chalk.cyan(framework)}:`);\n for (const provider of providers) {\n console.log(` ${provider.type}`);\n console.log(chalk.dim(` ID: ${provider.id}`));\n console.log(\n chalk.dim(\n ` Updated: ${new Date(provider.updatedAt).toLocaleString()}`,\n ),\n );\n }\n console.log();\n }\n\n console.log(\n chalk.dim(`Total: ${result.modelProviders.length} provider(s)`),\n );\n }),\n );\n}\n\nexport const listCommand = createListCommand();\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport {\n listZeroOrgModelProviders,\n upsertZeroOrgModelProvider,\n} from \"../../../../lib/api\";\nimport {\n MODEL_PROVIDER_TYPES,\n hasAuthMethods,\n getSelectableProviderTypes,\n type ModelProviderType,\n} from \"@vm0/api-contracts/contracts/model-providers\";\nimport { isInteractive } from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport {\n type SetupInput,\n handleNonInteractiveMode,\n promptForAuthMethod,\n promptForSecrets,\n collectSecrets,\n} from \"../../../../lib/domain/model-provider/shared\";\n\ninterface CreateSetupCommandOptions {\n commandPrefix?: string;\n description?: string;\n scopeLabel?: string;\n}\n\nasync function handleInteractiveMode(\n commandPrefix: string,\n): Promise<SetupInput | null> {\n if (!isInteractive()) {\n throw new Error(\"Interactive mode requires a TTY\", {\n cause: new Error(\n `Use non-interactive mode: ${commandPrefix} --type <type> --secret \"<value>\"`,\n ),\n });\n }\n\n let cancelled = false;\n const onCancel = () => {\n cancelled = true;\n return false;\n };\n\n // Fetch configured org providers to annotate choices\n const { modelProviders: configuredProviders } =\n await listZeroOrgModelProviders();\n const configuredTypes = new Set(\n configuredProviders.map((p) => {\n return p.type;\n }),\n );\n\n // Build provider choices with configuration status (only selectable providers)\n const annotatedChoices = getSelectableProviderTypes().map((type) => {\n const config = MODEL_PROVIDER_TYPES[type];\n const isConfigured = configuredTypes.has(type);\n const isExperimental = hasAuthMethods(type);\n let title: string = config.label;\n if (isConfigured) {\n title = `${title} ✓`;\n }\n if (isExperimental) {\n title = `${title} ${chalk.dim(\"(experimental)\")}`;\n }\n return {\n title,\n value: type,\n };\n });\n\n const typeResponse = await prompts(\n {\n type: \"select\",\n name: \"type\",\n message: \"Select provider type:\",\n choices: annotatedChoices,\n },\n { onCancel },\n );\n\n if (cancelled) {\n console.log(chalk.dim(\"Cancelled\"));\n return null;\n }\n\n const type = typeResponse.type as ModelProviderType;\n\n // Check if provider is already configured using the list we already fetched\n const existingProvider = configuredProviders.find((p) => {\n return p.type === type;\n });\n\n if (existingProvider) {\n console.log();\n console.log(`\"${type}\" is already configured`);\n console.log();\n\n const actionResponse = await prompts(\n {\n type: \"select\",\n name: \"action\",\n message: \"\",\n choices: [\n { title: \"Keep existing secret\", value: \"keep\" },\n { title: \"Update secret\", value: \"update\" },\n ],\n },\n { onCancel },\n );\n\n if (cancelled) {\n console.log(chalk.dim(\"Cancelled\"));\n return null;\n }\n\n if (actionResponse.action === \"keep\") {\n return {\n type,\n keepExistingSecret: true,\n isInteractiveMode: true,\n };\n }\n // Fall through to secret prompt for \"update\"\n }\n\n const config = MODEL_PROVIDER_TYPES[type];\n\n console.log();\n if (\"helpText\" in config) {\n console.log(chalk.dim(config.helpText));\n }\n console.log();\n\n // Handle multi-auth providers\n if (hasAuthMethods(type)) {\n const authMethod = await promptForAuthMethod(type);\n const secrets = await promptForSecrets(type, authMethod);\n\n return {\n type,\n authMethod,\n secrets,\n isInteractiveMode: true,\n };\n }\n\n // Single-secret provider (legacy)\n const secretLabel = \"secretLabel\" in config ? config.secretLabel : \"secret\";\n\n const secretResponse = await prompts(\n {\n type: \"password\",\n name: \"secret\",\n message: `Enter your ${secretLabel}:`,\n validate: (value: string) => {\n return value.length > 0 || `${secretLabel} is required`;\n },\n },\n { onCancel },\n );\n\n if (cancelled) {\n console.log(chalk.dim(\"Cancelled\"));\n return null;\n }\n\n const secret = secretResponse.secret as string;\n\n return { type, secret, isInteractiveMode: true };\n}\n\nexport function createSetupCommand(\n options: CreateSetupCommandOptions = {},\n): Command {\n const commandPrefix =\n options.commandPrefix ?? \"zero org model-provider setup\";\n const description =\n options.description ?? \"Configure an org-level model provider\";\n const scopeLabel = options.scopeLabel ?? \"Org\";\n\n return new Command()\n .name(\"setup\")\n .description(description)\n .option(\"-t, --type <type>\", \"Provider type (for non-interactive mode)\")\n .option(\n \"-s, --secret <value>\",\n \"Secret value (can be used multiple times, supports VALUE or KEY=VALUE format)\",\n collectSecrets,\n [],\n )\n .option(\n \"-a, --auth-method <method>\",\n \"Auth method (required for multi-auth providers like aws-bedrock)\",\n )\n .action(\n withErrorHandler(\n async (options: {\n type?: string;\n secret?: string[];\n authMethod?: string;\n }) => {\n let input: SetupInput;\n const secretArgs = options.secret ?? [];\n\n if (options.type && secretArgs.length > 0) {\n input = handleNonInteractiveMode({\n type: options.type,\n secret: secretArgs,\n authMethod: options.authMethod,\n commandPrefix,\n });\n } else if (options.type || secretArgs.length > 0) {\n throw new Error(\"Both --type and --secret are required\");\n } else {\n const result = await handleInteractiveMode(commandPrefix);\n if (result === null) {\n return;\n }\n input = result;\n }\n\n // Handle \"keep existing secret\" flow\n if (input.keepExistingSecret) {\n console.log(\n chalk.green(\n `✓ ${scopeLabel} model provider \"${input.type}\" unchanged`,\n ),\n );\n return;\n }\n\n // Standard upsert flow with secret\n const { created } = await upsertZeroOrgModelProvider({\n type: input.type,\n secret: input.secret,\n authMethod: input.authMethod,\n secrets: input.secrets,\n });\n\n const action = created ? \"created\" : \"updated\";\n console.log(\n chalk.green(\n `✓ ${scopeLabel} model provider \"${input.type}\" ${action}`,\n ),\n );\n },\n ),\n );\n}\n\nexport const setupCommand = createSetupCommand();\n","import chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport {\n MODEL_PROVIDER_TYPES,\n hasAuthMethods,\n getAuthMethodsForType,\n getDefaultAuthMethod,\n getSecretsForAuthMethod,\n type ModelProviderType,\n} from \"@vm0/api-contracts/contracts/model-providers\";\n\nexport interface SetupInput {\n type: ModelProviderType;\n secret?: string;\n // Multi-auth support\n authMethod?: string;\n secrets?: Record<string, string>;\n keepExistingSecret?: boolean;\n isInteractiveMode?: boolean;\n}\n\nfunction validateProviderType(typeStr: string): ModelProviderType {\n if (!Object.keys(MODEL_PROVIDER_TYPES).includes(typeStr)) {\n const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(\", \");\n throw new Error(`Invalid type \"${typeStr}\"`, {\n cause: new Error(`Valid types: ${validTypes}`),\n });\n }\n return typeStr as ModelProviderType;\n}\n\nfunction validateAuthMethod(\n type: ModelProviderType,\n authMethodStr: string,\n): string | never {\n const authMethods = getAuthMethodsForType(type);\n if (!authMethods || !(authMethodStr in authMethods)) {\n const validMethods = authMethods\n ? Object.keys(authMethods).join(\", \")\n : \"none\";\n throw new Error(`Invalid auth method \"${authMethodStr}\"`, {\n cause: new Error(`Valid auth methods: ${validMethods}`),\n });\n }\n return authMethodStr;\n}\n\n/**\n * Parse secret arguments into a secrets object.\n * Supports two formats:\n * - Single value (e.g., \"sk-xxx\") - auto-mapped to the provider's secret name\n * - KEY=VALUE format (e.g., \"AWS_REGION=us-east-1\") - explicit mapping\n */\nfunction parseSecrets(\n type: ModelProviderType,\n authMethod: string,\n secretArgs: string[],\n): Record<string, string> {\n const secretsConfig = getSecretsForAuthMethod(type, authMethod);\n if (!secretsConfig) {\n throw new Error(`Invalid auth method \"${authMethod}\"`);\n }\n\n const secretNames = Object.keys(secretsConfig);\n\n // Single value without = sign: only allowed for single-secret auth methods\n const firstArg = secretArgs[0];\n if (secretArgs.length === 1 && firstArg && !firstArg.includes(\"=\")) {\n if (secretNames.length !== 1) {\n throw new Error(\n \"Must use KEY=VALUE format for multi-secret auth methods\",\n { cause: new Error(`Required secrets: ${secretNames.join(\", \")}`) },\n );\n }\n const firstSecretName = secretNames[0];\n if (!firstSecretName) {\n throw new Error(\"No secrets defined for this auth method\");\n }\n return { [firstSecretName]: firstArg };\n }\n\n // KEY=VALUE format\n const secrets: Record<string, string> = {};\n for (const arg of secretArgs) {\n const eqIndex = arg.indexOf(\"=\");\n if (eqIndex === -1) {\n throw new Error(`Invalid secret format \"${arg}\"`, {\n cause: new Error(\"Use KEY=VALUE format (e.g., AWS_REGION=us-east-1)\"),\n });\n }\n const key = arg.slice(0, eqIndex);\n const value = arg.slice(eqIndex + 1);\n secrets[key] = value;\n }\n return secrets;\n}\n\n/**\n * Validate secrets against the auth method config.\n */\nfunction validateSecrets(\n type: ModelProviderType,\n authMethod: string,\n secrets: Record<string, string>,\n): void {\n const secretsConfig = getSecretsForAuthMethod(type, authMethod);\n if (!secretsConfig) {\n throw new Error(`Invalid auth method \"${authMethod}\"`);\n }\n\n // Check required fields\n for (const [name, fieldConfig] of Object.entries(secretsConfig)) {\n if (fieldConfig.required && !secrets[name]) {\n const requiredNames = Object.entries(secretsConfig)\n .filter(([, fc]) => {\n return fc.required;\n })\n .map(([n]) => {\n return n;\n })\n .join(\", \");\n throw new Error(`Missing required secret: ${name}`, {\n cause: new Error(`Required secrets: ${requiredNames}`),\n });\n }\n }\n\n // Check for unknown fields\n for (const name of Object.keys(secrets)) {\n if (!(name in secretsConfig)) {\n const validNames = Object.keys(secretsConfig).join(\", \");\n throw new Error(`Unknown secret: ${name}`, {\n cause: new Error(`Valid secrets: ${validNames}`),\n });\n }\n }\n}\n\nexport function handleNonInteractiveMode(options: {\n type: string;\n secret: string[];\n authMethod?: string;\n commandPrefix?: string;\n}): SetupInput {\n const type = validateProviderType(options.type);\n const cmdPrefix = options.commandPrefix ?? \"zero org model-provider setup\";\n\n // Handle multi-auth providers\n if (hasAuthMethods(type)) {\n // Determine auth method\n let authMethod: string;\n if (options.authMethod) {\n authMethod = validateAuthMethod(type, options.authMethod);\n } else {\n const defaultAuthMethod = getDefaultAuthMethod(type);\n const authMethods = getAuthMethodsForType(type);\n if (!defaultAuthMethod || !authMethods) {\n throw new Error(`Provider \"${type}\" requires --auth-method`);\n }\n // If there's only one auth method, use it; otherwise require explicit selection\n const authMethodNames = Object.keys(authMethods);\n if (authMethodNames.length === 1) {\n authMethod = authMethodNames[0]!;\n } else {\n const methods = authMethodNames.join(\", \");\n throw new Error(\n `--auth-method is required for \"${type}\" (multiple auth methods available)`,\n {\n cause: new Error(\n `Available: ${methods}. Example: ${cmdPrefix} --type ${type} --auth-method ${authMethodNames[0]} --secret KEY=VALUE`,\n ),\n },\n );\n }\n }\n\n // Parse and validate secrets\n const secrets = parseSecrets(type, authMethod, options.secret);\n validateSecrets(type, authMethod, secrets);\n\n return {\n type,\n authMethod,\n secrets,\n isInteractiveMode: false,\n };\n }\n\n // Single-secret provider (legacy)\n // Accept single value or KEY=VALUE format\n const secretArgs = options.secret;\n const firstArg = secretArgs[0];\n if (!firstArg) {\n throw new Error(\"Secret is required\");\n }\n\n // If KEY=VALUE format, extract the value\n let secret: string;\n if (firstArg.includes(\"=\")) {\n secret = firstArg.slice(firstArg.indexOf(\"=\") + 1);\n } else {\n secret = firstArg;\n }\n\n return {\n type,\n secret,\n isInteractiveMode: false,\n };\n}\n\n/**\n * Prompt for auth method selection (only for multi-auth providers)\n */\nexport async function promptForAuthMethod(\n type: ModelProviderType,\n): Promise<string> {\n const authMethods = getAuthMethodsForType(type);\n const defaultAuthMethod = getDefaultAuthMethod(type);\n\n if (!authMethods) {\n return \"default\";\n }\n\n const choices = Object.entries(authMethods).map(([method, config]) => {\n return {\n title:\n method === defaultAuthMethod\n ? `${config.label} (Recommended)`\n : config.label,\n value: method,\n };\n });\n\n const response = await prompts(\n {\n type: \"select\",\n name: \"authMethod\",\n message: \"Select authentication method:\",\n choices,\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n\n return response.authMethod as string;\n}\n\n/**\n * Determine if a secret should be masked (password type)\n * Non-secret values like region should be visible\n */\nfunction isSensitiveSecret(name: string): boolean {\n const nonSecretPatterns = [\"REGION\", \"ENDPOINT\", \"URL\"];\n return !nonSecretPatterns.some((pattern) => {\n return name.toUpperCase().includes(pattern);\n });\n}\n\nexport async function promptForSecrets(\n type: ModelProviderType,\n authMethod: string,\n): Promise<Record<string, string>> {\n const secretsConfig = getSecretsForAuthMethod(type, authMethod);\n\n if (!secretsConfig) {\n throw new Error(`Invalid auth method \"${authMethod}\"`);\n }\n\n const secrets: Record<string, string> = {};\n\n for (const [name, fieldConfig] of Object.entries(secretsConfig)) {\n if (fieldConfig.helpText) {\n console.log(chalk.dim(fieldConfig.helpText));\n }\n\n const isSensitive = isSensitiveSecret(name);\n const placeholder =\n \"placeholder\" in fieldConfig ? (fieldConfig.placeholder as string) : \"\";\n\n if (fieldConfig.required) {\n const response = await prompts(\n {\n type: isSensitive ? \"password\" : \"text\",\n name: \"value\",\n message: `${fieldConfig.label}:`,\n initial: placeholder ? \"\" : undefined,\n validate: (value: string) => {\n return value.length > 0 || `${fieldConfig.label} is required`;\n },\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n secrets[name] = response.value as string;\n } else {\n // Optional field\n const response = await prompts(\n {\n type: isSensitive ? \"password\" : \"text\",\n name: \"value\",\n message: `${fieldConfig.label} (optional):`,\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n const value = response.value as string;\n if (value && value.trim()) {\n secrets[name] = value.trim();\n }\n }\n }\n\n return secrets;\n}\n\n/**\n * Collect secret values from repeatable --secret option\n */\nexport function collectSecrets(value: string, previous: string[]): string[] {\n return previous.concat([value]);\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrgModelProvider } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport {\n MODEL_PROVIDER_TYPES,\n type ModelProviderType,\n} from \"@vm0/api-contracts/contracts/model-providers\";\n\ninterface CreateRemoveCommandOptions {\n scopeLabel?: string;\n}\n\nexport function createRemoveCommand(\n options: CreateRemoveCommandOptions = {},\n): Command {\n const scopeLabel = options.scopeLabel ?? \"Org\";\n\n return new Command()\n .name(\"remove\")\n .description(`Remove a ${scopeLabel.toLowerCase()} model provider`)\n .argument(\"<type>\", \"Model provider type to remove\")\n .action(\n withErrorHandler(async (type: string) => {\n if (!Object.keys(MODEL_PROVIDER_TYPES).includes(type)) {\n const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(\", \");\n throw new Error(`Invalid type \"${type}\"`, {\n cause: new Error(`Valid types: ${validTypes}`),\n });\n }\n\n await deleteZeroOrgModelProvider(type as ModelProviderType);\n console.log(\n chalk.green(`✓ ${scopeLabel} model provider \"${type}\" removed`),\n );\n }),\n );\n}\n\nexport const removeCommand = createRemoveCommand();\n"],"mappings":"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","names":["listCommand","setCommand","removeCommand","listCommand","setCommand","removeCommand","listCommand","setCommand","removeCommand","listCommand","setCommand","removeCommand","setupCommand","listCommand","import_prompts","prompts","type","config","prompts","options","removeCommand"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|