@vm0/cli 9.277.0 → 9.277.2
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-XXUF45NW.js → agent-ZPBMY2SD.js} +6 -6
- package/{banking-D5MZDB3Q.js → banking-HEAMKLPE.js} +4 -4
- package/{browser-2RL5R75L.js → browser-OL6ZE6BX.js} +4 -4
- package/{chat-VNU2U22N.js → chat-43YOERZG.js} +6 -6
- package/{chunk-7NTVSSO6.js → chunk-3FRL47BJ.js} +2 -2
- package/{chunk-GGHE453K.js → chunk-5AIAG76X.js} +2 -2
- package/{chunk-W3ML4DBM.js → chunk-5BIHTSHQ.js} +312 -119
- package/chunk-5BIHTSHQ.js.map +1 -0
- package/{chunk-RQCVJTYT.js → chunk-JPLAJP5I.js} +2 -2
- package/{chunk-SWYBE4DF.js → chunk-KA75HGXU.js} +255 -743
- package/chunk-KA75HGXU.js.map +1 -0
- package/{chunk-7KUFYG6Z.js → chunk-LPNBRPVQ.js} +4 -4
- package/{chunk-HTTADLT3.js → chunk-NDYPPVD3.js} +2 -22
- package/{chunk-HTTADLT3.js.map → chunk-NDYPPVD3.js.map} +1 -1
- package/{chunk-SFTOB3J4.js → chunk-QJI3SAUY.js} +56 -5
- package/{chunk-SFTOB3J4.js.map → chunk-QJI3SAUY.js.map} +1 -1
- package/{chunk-YL5CDK4E.js → chunk-SVFOPAWB.js} +1 -7
- package/chunk-SVFOPAWB.js.map +1 -0
- package/{chunk-TJ4W4HU4.js → chunk-V2FTIYTG.js} +2333 -2628
- package/chunk-V2FTIYTG.js.map +1 -0
- package/{chunk-BDOANREY.js → chunk-WHCP2H2S.js} +6 -7
- package/chunk-WHCP2H2S.js.map +1 -0
- package/{computer-use-OBY6F7MG.js → computer-use-2GLT2YH7.js} +4 -4
- package/{connector-7EU4AGKE.js → connector-PVESAPZF.js} +6 -6
- package/{credit-OFW66JTC.js → credit-NMYQ76CX.js} +6 -16
- package/credit-NMYQ76CX.js.map +1 -0
- package/{developer-support-BXOAPDP7.js → developer-support-F75A6J22.js} +4 -4
- package/{doctor-YOA6QLSW.js → doctor-QDTOPN2D.js} +18 -41
- package/doctor-QDTOPN2D.js.map +1 -0
- package/{feishu-PENCRP3I.js → feishu-W6YXMIUS.js} +4 -4
- package/{finance-JRQBO4PM.js → finance-2J5KDPA5.js} +4 -4
- package/{generate-IZMDDSOO.js → generate-2VM7AIVZ.js} +6 -6
- package/{github-V2AIZ6V4.js → github-OCKDSECE.js} +4 -4
- package/{goal-Y45PFXMF.js → goal-3KPOQFUH.js} +4 -4
- package/{host-M4NUXM62.js → host-MAAICSOY.js} +4 -4
- package/{logs-WD5IEUA5.js → logs-GKIQLSQ6.js} +7 -7
- package/{mail-OVEMNODA.js → mail-KLADGEP4.js} +6 -6
- package/{maps-CTFMTOAJ.js → maps-S5USXHOL.js} +4 -4
- package/{model-2T3O6GG3.js → model-XRK7Y3MG.js} +5 -5
- package/{model-provider-2TFKEOVI.js → model-provider-OONFZIY4.js} +5 -5
- package/package.json +1 -1
- package/{people-search-VV3GDZDJ.js → people-search-FXKKUDJG.js} +4 -4
- package/{phone-PHC6VFIA.js → phone-GWXG7JWK.js} +4 -4
- package/{recognize-KWIG2HNA.js → recognize-N3ENWTBX.js} +4 -4
- package/{resource-6GERE5UR.js → resource-AX5VPSH4.js} +4 -4
- package/{scrape-UAWGI7FN.js → scrape-CNWD4P44.js} +4 -4
- package/{search-XDNOEE6X.js → search-WDONTFV3.js} +7 -7
- package/{slack-UDPD5UVA.js → slack-2FELLBUE.js} +4 -4
- package/{teams-3NJV5VLD.js → teams-KMB4QSGG.js} +4 -4
- package/{telegram-6LWQGQHT.js → telegram-GIKM2NS7.js} +4 -4
- package/{upgrade-T2PZFM3H.js → upgrade-AZS7AIVQ.js} +3 -3
- package/{video-WJZ6PDFP.js → video-QE2FIEIG.js} +3 -3
- package/{weather-EG7DNGFZ.js → weather-V4KRC55E.js} +4 -4
- package/{web-PFRNVBF2.js → web-XSK6I5E6.js} +4 -4
- package/{web-search-733PZEHP.js → web-search-RP5C7D7D.js} +4 -4
- package/{whoami-GWLDXMNP.js → whoami-SNBYDOBY.js} +17 -5
- package/whoami-SNBYDOBY.js.map +1 -0
- package/{workflow-DKPLW4MQ.js → workflow-UWMDJILQ.js} +7 -7
- package/zero.js +40 -47
- package/zero.js.map +1 -1
- package/chunk-BDOANREY.js.map +0 -1
- package/chunk-SWYBE4DF.js.map +0 -1
- package/chunk-TJ4W4HU4.js.map +0 -1
- package/chunk-W3ML4DBM.js.map +0 -1
- package/chunk-YL5CDK4E.js.map +0 -1
- package/credit-OFW66JTC.js.map +0 -1
- package/doctor-YOA6QLSW.js.map +0 -1
- package/org-VSS4S3I4.js +0 -843
- package/org-VSS4S3I4.js.map +0 -1
- package/whoami-GWLDXMNP.js.map +0 -1
- /package/{agent-XXUF45NW.js.map → agent-ZPBMY2SD.js.map} +0 -0
- /package/{banking-D5MZDB3Q.js.map → banking-HEAMKLPE.js.map} +0 -0
- /package/{browser-2RL5R75L.js.map → browser-OL6ZE6BX.js.map} +0 -0
- /package/{chat-VNU2U22N.js.map → chat-43YOERZG.js.map} +0 -0
- /package/{chunk-7NTVSSO6.js.map → chunk-3FRL47BJ.js.map} +0 -0
- /package/{chunk-GGHE453K.js.map → chunk-5AIAG76X.js.map} +0 -0
- /package/{chunk-RQCVJTYT.js.map → chunk-JPLAJP5I.js.map} +0 -0
- /package/{chunk-7KUFYG6Z.js.map → chunk-LPNBRPVQ.js.map} +0 -0
- /package/{computer-use-OBY6F7MG.js.map → computer-use-2GLT2YH7.js.map} +0 -0
- /package/{connector-7EU4AGKE.js.map → connector-PVESAPZF.js.map} +0 -0
- /package/{developer-support-BXOAPDP7.js.map → developer-support-F75A6J22.js.map} +0 -0
- /package/{feishu-PENCRP3I.js.map → feishu-W6YXMIUS.js.map} +0 -0
- /package/{finance-JRQBO4PM.js.map → finance-2J5KDPA5.js.map} +0 -0
- /package/{generate-IZMDDSOO.js.map → generate-2VM7AIVZ.js.map} +0 -0
- /package/{github-V2AIZ6V4.js.map → github-OCKDSECE.js.map} +0 -0
- /package/{goal-Y45PFXMF.js.map → goal-3KPOQFUH.js.map} +0 -0
- /package/{host-M4NUXM62.js.map → host-MAAICSOY.js.map} +0 -0
- /package/{logs-WD5IEUA5.js.map → logs-GKIQLSQ6.js.map} +0 -0
- /package/{mail-OVEMNODA.js.map → mail-KLADGEP4.js.map} +0 -0
- /package/{maps-CTFMTOAJ.js.map → maps-S5USXHOL.js.map} +0 -0
- /package/{model-2T3O6GG3.js.map → model-XRK7Y3MG.js.map} +0 -0
- /package/{model-provider-2TFKEOVI.js.map → model-provider-OONFZIY4.js.map} +0 -0
- /package/{people-search-VV3GDZDJ.js.map → people-search-FXKKUDJG.js.map} +0 -0
- /package/{phone-PHC6VFIA.js.map → phone-GWXG7JWK.js.map} +0 -0
- /package/{recognize-KWIG2HNA.js.map → recognize-N3ENWTBX.js.map} +0 -0
- /package/{resource-6GERE5UR.js.map → resource-AX5VPSH4.js.map} +0 -0
- /package/{scrape-UAWGI7FN.js.map → scrape-CNWD4P44.js.map} +0 -0
- /package/{search-XDNOEE6X.js.map → search-WDONTFV3.js.map} +0 -0
- /package/{slack-UDPD5UVA.js.map → slack-2FELLBUE.js.map} +0 -0
- /package/{teams-3NJV5VLD.js.map → teams-KMB4QSGG.js.map} +0 -0
- /package/{telegram-6LWQGQHT.js.map → telegram-GIKM2NS7.js.map} +0 -0
- /package/{upgrade-T2PZFM3H.js.map → upgrade-AZS7AIVQ.js.map} +0 -0
- /package/{video-WJZ6PDFP.js.map → video-QE2FIEIG.js.map} +0 -0
- /package/{weather-EG7DNGFZ.js.map → weather-V4KRC55E.js.map} +0 -0
- /package/{web-PFRNVBF2.js.map → web-XSK6I5E6.js.map} +0 -0
- /package/{web-search-733PZEHP.js.map → web-search-RP5C7D7D.js.map} +0 -0
- /package/{workflow-DKPLW4MQ.js.map → workflow-UWMDJILQ.js.map} +0 -0
package/org-VSS4S3I4.js
DELETED
|
@@ -1,843 +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
|
-
isInteractive,
|
|
6
|
-
promptConfirm,
|
|
7
|
-
promptPassword,
|
|
8
|
-
require_prompts
|
|
9
|
-
} from "./chunk-HTTADLT3.js";
|
|
10
|
-
import {
|
|
11
|
-
deleteZeroOrgModelProvider,
|
|
12
|
-
deleteZeroOrgSecret,
|
|
13
|
-
deleteZeroOrgVariable,
|
|
14
|
-
getZeroOrg,
|
|
15
|
-
getZeroOrgMembers,
|
|
16
|
-
inviteZeroOrgMember,
|
|
17
|
-
leaveZeroOrg,
|
|
18
|
-
listZeroOrgModelProviders,
|
|
19
|
-
listZeroOrgSecrets,
|
|
20
|
-
listZeroOrgVariables,
|
|
21
|
-
listZeroOrgs,
|
|
22
|
-
removeZeroOrgMember,
|
|
23
|
-
setZeroOrgSecret,
|
|
24
|
-
setZeroOrgVariable,
|
|
25
|
-
upsertZeroOrgModelProvider
|
|
26
|
-
} from "./chunk-SWYBE4DF.js";
|
|
27
|
-
import "./chunk-SFTOB3J4.js";
|
|
28
|
-
import "./chunk-ANOLYIPL.js";
|
|
29
|
-
import {
|
|
30
|
-
ApiRequestError,
|
|
31
|
-
MODEL_PROVIDER_TYPES,
|
|
32
|
-
getActiveOrg,
|
|
33
|
-
getAuthMethodsForType,
|
|
34
|
-
getDefaultAuthMethod,
|
|
35
|
-
getSecretsForAuthMethod,
|
|
36
|
-
getSelectableProviderTypes,
|
|
37
|
-
hasAuthMethods,
|
|
38
|
-
source_default,
|
|
39
|
-
withErrorHandler
|
|
40
|
-
} from "./chunk-TJ4W4HU4.js";
|
|
41
|
-
import "./chunk-32FE3MDA.js";
|
|
42
|
-
import {
|
|
43
|
-
Command
|
|
44
|
-
} from "./chunk-JAUTPXVK.js";
|
|
45
|
-
import {
|
|
46
|
-
__toESM,
|
|
47
|
-
init_esm_shims
|
|
48
|
-
} from "./chunk-AUWSMG4F.js";
|
|
49
|
-
|
|
50
|
-
// src/commands/zero/org/index.ts
|
|
51
|
-
init_esm_shims();
|
|
52
|
-
|
|
53
|
-
// src/commands/zero/org/status.ts
|
|
54
|
-
init_esm_shims();
|
|
55
|
-
var statusCommand = new Command().name("status").description("View current organization status").action(
|
|
56
|
-
withErrorHandler(async () => {
|
|
57
|
-
try {
|
|
58
|
-
const org = await getZeroOrg();
|
|
59
|
-
console.log(source_default.bold("Organization Information:"));
|
|
60
|
-
console.log(` Name: ${source_default.green(org.name)}`);
|
|
61
|
-
if (org.tier) {
|
|
62
|
-
console.log(` Tier: ${org.tier}`);
|
|
63
|
-
}
|
|
64
|
-
} catch (error) {
|
|
65
|
-
if (error instanceof ApiRequestError && error.status === 404) {
|
|
66
|
-
throw new Error("No organization configured", {
|
|
67
|
-
cause: new Error(
|
|
68
|
-
"Create or join an organization in the vm0 dashboard, then try again"
|
|
69
|
-
)
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
throw error;
|
|
73
|
-
}
|
|
74
|
-
})
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
// src/commands/zero/org/list.ts
|
|
78
|
-
init_esm_shims();
|
|
79
|
-
var listCommand = new Command().name("list").description("List all accessible organizations").action(
|
|
80
|
-
withErrorHandler(async () => {
|
|
81
|
-
const result = await listZeroOrgs();
|
|
82
|
-
const activeOrg = await getActiveOrg();
|
|
83
|
-
console.log(source_default.bold("Available organizations:"));
|
|
84
|
-
for (const org of result.orgs) {
|
|
85
|
-
const isCurrent = org.id === activeOrg;
|
|
86
|
-
const marker = isCurrent ? source_default.green("* ") : " ";
|
|
87
|
-
const roleLabel = org.role ? ` (${org.role})` : "";
|
|
88
|
-
const currentLabel = isCurrent ? source_default.dim(" \u2190 current") : "";
|
|
89
|
-
console.log(`${marker}${org.name}${roleLabel}${currentLabel}`);
|
|
90
|
-
}
|
|
91
|
-
})
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
// src/commands/zero/org/members.ts
|
|
95
|
-
init_esm_shims();
|
|
96
|
-
var membersCommand = new Command().name("members").description("View organization members").action(
|
|
97
|
-
withErrorHandler(async () => {
|
|
98
|
-
const status = await getZeroOrgMembers();
|
|
99
|
-
console.log(source_default.bold(`Organization: ${status.name}`));
|
|
100
|
-
console.log(` Role: ${status.role}`);
|
|
101
|
-
console.log(
|
|
102
|
-
` Created: ${new Date(status.createdAt).toLocaleDateString()}`
|
|
103
|
-
);
|
|
104
|
-
console.log();
|
|
105
|
-
console.log(source_default.bold("Members:"));
|
|
106
|
-
for (const member of status.members) {
|
|
107
|
-
const roleTag = member.role === "admin" ? source_default.yellow(` (${member.role})`) : source_default.dim(` (${member.role})`);
|
|
108
|
-
console.log(` ${member.email}${roleTag}`);
|
|
109
|
-
}
|
|
110
|
-
})
|
|
111
|
-
);
|
|
112
|
-
|
|
113
|
-
// src/commands/zero/org/invite.ts
|
|
114
|
-
init_esm_shims();
|
|
115
|
-
var inviteCommand = new Command().name("invite").description("Invite a member to the current organization").requiredOption("--email <email>", "Email address of the member to invite").option(
|
|
116
|
-
"--role <role>",
|
|
117
|
-
"Role for the invited member (member or admin)",
|
|
118
|
-
"member"
|
|
119
|
-
).action(
|
|
120
|
-
withErrorHandler(async (options) => {
|
|
121
|
-
if (options.role !== "member" && options.role !== "admin") {
|
|
122
|
-
throw new Error(
|
|
123
|
-
`Invalid role "${options.role}". Must be "member" or "admin".`
|
|
124
|
-
);
|
|
125
|
-
}
|
|
126
|
-
await inviteZeroOrgMember(options.email, options.role);
|
|
127
|
-
console.log(
|
|
128
|
-
source_default.green(`\u2713 Invitation sent to ${options.email} as ${options.role}`)
|
|
129
|
-
);
|
|
130
|
-
})
|
|
131
|
-
);
|
|
132
|
-
|
|
133
|
-
// src/commands/zero/org/remove.ts
|
|
134
|
-
init_esm_shims();
|
|
135
|
-
var removeCommand = new Command().name("remove").description("Remove a member from the current organization").argument("<email>", "Email address of the member to remove").action(
|
|
136
|
-
withErrorHandler(async (email) => {
|
|
137
|
-
await removeZeroOrgMember(email);
|
|
138
|
-
console.log(source_default.green(`\u2713 Removed ${email} from organization`));
|
|
139
|
-
})
|
|
140
|
-
);
|
|
141
|
-
|
|
142
|
-
// src/commands/zero/org/leave.ts
|
|
143
|
-
init_esm_shims();
|
|
144
|
-
var leaveCommand = new Command().name("leave").description("Leave the current organization").action(
|
|
145
|
-
withErrorHandler(async () => {
|
|
146
|
-
await leaveZeroOrg();
|
|
147
|
-
console.log(source_default.green("\u2713 Left organization."));
|
|
148
|
-
})
|
|
149
|
-
);
|
|
150
|
-
|
|
151
|
-
// src/commands/zero/org/secret/index.ts
|
|
152
|
-
init_esm_shims();
|
|
153
|
-
|
|
154
|
-
// src/commands/zero/org/secret/list.ts
|
|
155
|
-
init_esm_shims();
|
|
156
|
-
var listCommand2 = new Command().name("list").alias("ls").description("List all org-level secrets").action(
|
|
157
|
-
withErrorHandler(async () => {
|
|
158
|
-
const result = await listZeroOrgSecrets();
|
|
159
|
-
if (result.secrets.length === 0) {
|
|
160
|
-
console.log(source_default.dim("No org secrets found"));
|
|
161
|
-
console.log();
|
|
162
|
-
console.log("To add an org secret:");
|
|
163
|
-
console.log(
|
|
164
|
-
source_default.cyan(" zero org secret set MY_API_KEY --body <value>")
|
|
165
|
-
);
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
console.log(source_default.bold("Org Secrets:"));
|
|
169
|
-
console.log();
|
|
170
|
-
for (const secret of result.secrets) {
|
|
171
|
-
console.log(` ${source_default.cyan(secret.name)}`);
|
|
172
|
-
if (secret.description) {
|
|
173
|
-
console.log(` ${source_default.dim(secret.description)}`);
|
|
174
|
-
}
|
|
175
|
-
console.log(
|
|
176
|
-
` ${source_default.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`
|
|
177
|
-
);
|
|
178
|
-
console.log();
|
|
179
|
-
}
|
|
180
|
-
console.log(source_default.dim(`Total: ${result.secrets.length} secret(s)`));
|
|
181
|
-
})
|
|
182
|
-
);
|
|
183
|
-
|
|
184
|
-
// src/commands/zero/org/secret/set.ts
|
|
185
|
-
init_esm_shims();
|
|
186
|
-
var setCommand = new Command().name("set").description("Create or update an org-level secret (admin only)").argument("<name>", "Secret name (uppercase, e.g., MY_API_KEY)").option(
|
|
187
|
-
"-b, --body <value>",
|
|
188
|
-
"Secret value (required in non-interactive mode)"
|
|
189
|
-
).option("-d, --description <description>", "Optional description").action(
|
|
190
|
-
withErrorHandler(
|
|
191
|
-
async (name, options) => {
|
|
192
|
-
let value;
|
|
193
|
-
if (options.body !== void 0) {
|
|
194
|
-
value = options.body;
|
|
195
|
-
} else if (isInteractive()) {
|
|
196
|
-
const prompted = await promptPassword("Enter secret value:");
|
|
197
|
-
if (prompted === void 0) {
|
|
198
|
-
console.log(source_default.dim("Cancelled"));
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
value = prompted;
|
|
202
|
-
} else {
|
|
203
|
-
throw new Error("--body is required in non-interactive mode", {
|
|
204
|
-
cause: new Error(
|
|
205
|
-
`Usage: zero org secret set ${name} --body "your-secret-value"`
|
|
206
|
-
)
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
let secret;
|
|
210
|
-
try {
|
|
211
|
-
secret = await setZeroOrgSecret({
|
|
212
|
-
name,
|
|
213
|
-
value,
|
|
214
|
-
description: options.description
|
|
215
|
-
});
|
|
216
|
-
} catch (error) {
|
|
217
|
-
if (error instanceof Error && error.message.includes("must contain only uppercase")) {
|
|
218
|
-
throw new Error(error.message, {
|
|
219
|
-
cause: new Error(
|
|
220
|
-
"Examples of valid secret names: MY_API_KEY, GITHUB_TOKEN, AWS_ACCESS_KEY_ID"
|
|
221
|
-
)
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
throw error;
|
|
225
|
-
}
|
|
226
|
-
console.log(source_default.green(`\u2713 Org secret "${secret.name}" saved`));
|
|
227
|
-
}
|
|
228
|
-
)
|
|
229
|
-
);
|
|
230
|
-
|
|
231
|
-
// src/commands/zero/org/secret/remove.ts
|
|
232
|
-
init_esm_shims();
|
|
233
|
-
var removeCommand2 = new Command().name("remove").description("Delete an org-level secret (admin only)").argument("<name>", "Secret name to delete").option("-y, --yes", "Skip confirmation prompt").action(
|
|
234
|
-
withErrorHandler(async (name, options) => {
|
|
235
|
-
if (!options.yes) {
|
|
236
|
-
if (!isInteractive()) {
|
|
237
|
-
throw new Error("--yes flag is required in non-interactive mode");
|
|
238
|
-
}
|
|
239
|
-
const confirmed = await promptConfirm(
|
|
240
|
-
`Are you sure you want to delete org secret "${name}"?`,
|
|
241
|
-
false
|
|
242
|
-
);
|
|
243
|
-
if (!confirmed) {
|
|
244
|
-
console.log(source_default.dim("Cancelled"));
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
await deleteZeroOrgSecret(name);
|
|
249
|
-
console.log(source_default.green(`\u2713 Org secret "${name}" deleted`));
|
|
250
|
-
})
|
|
251
|
-
);
|
|
252
|
-
|
|
253
|
-
// src/commands/zero/org/secret/index.ts
|
|
254
|
-
var zeroOrgSecretCommand = new Command().name("secret").description("Manage org-level secrets (admin)").addCommand(listCommand2).addCommand(setCommand).addCommand(removeCommand2);
|
|
255
|
-
|
|
256
|
-
// src/commands/zero/org/variable/index.ts
|
|
257
|
-
init_esm_shims();
|
|
258
|
-
|
|
259
|
-
// src/commands/zero/org/variable/list.ts
|
|
260
|
-
init_esm_shims();
|
|
261
|
-
function truncateValue(value, maxLength = 60) {
|
|
262
|
-
if (value.length <= maxLength) {
|
|
263
|
-
return value;
|
|
264
|
-
}
|
|
265
|
-
return value.slice(0, maxLength - 15) + "... [truncated]";
|
|
266
|
-
}
|
|
267
|
-
var listCommand3 = new Command().name("list").alias("ls").description("List all org-level variables").action(
|
|
268
|
-
withErrorHandler(async () => {
|
|
269
|
-
const result = await listZeroOrgVariables();
|
|
270
|
-
if (result.variables.length === 0) {
|
|
271
|
-
console.log(source_default.dim("No org variables found"));
|
|
272
|
-
console.log();
|
|
273
|
-
console.log("To add an org variable:");
|
|
274
|
-
console.log(source_default.cyan(" zero org variable set MY_VAR <value>"));
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
console.log(source_default.bold("Org Variables:"));
|
|
278
|
-
console.log();
|
|
279
|
-
for (const variable of result.variables) {
|
|
280
|
-
const displayValue = truncateValue(variable.value);
|
|
281
|
-
console.log(` ${source_default.cyan(variable.name)} = ${displayValue}`);
|
|
282
|
-
if (variable.description) {
|
|
283
|
-
console.log(` ${source_default.dim(variable.description)}`);
|
|
284
|
-
}
|
|
285
|
-
console.log(
|
|
286
|
-
` ${source_default.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`
|
|
287
|
-
);
|
|
288
|
-
console.log();
|
|
289
|
-
}
|
|
290
|
-
console.log(source_default.dim(`Total: ${result.variables.length} variable(s)`));
|
|
291
|
-
})
|
|
292
|
-
);
|
|
293
|
-
|
|
294
|
-
// src/commands/zero/org/variable/set.ts
|
|
295
|
-
init_esm_shims();
|
|
296
|
-
var setCommand2 = new Command().name("set").description("Create or update an org-level variable (admin only)").argument("<name>", "Variable name (uppercase, e.g., MY_VAR)").argument("<value>", "Variable value").option("-d, --description <description>", "Optional description").action(
|
|
297
|
-
withErrorHandler(
|
|
298
|
-
async (name, value, options) => {
|
|
299
|
-
let variable;
|
|
300
|
-
try {
|
|
301
|
-
variable = await setZeroOrgVariable({
|
|
302
|
-
name,
|
|
303
|
-
value,
|
|
304
|
-
description: options.description
|
|
305
|
-
});
|
|
306
|
-
} catch (error) {
|
|
307
|
-
if (error instanceof Error && error.message.includes("must contain only uppercase")) {
|
|
308
|
-
throw new Error(error.message, {
|
|
309
|
-
cause: new Error(
|
|
310
|
-
"Examples of valid variable names: MY_VAR, API_URL, DEBUG_MODE"
|
|
311
|
-
)
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
throw error;
|
|
315
|
-
}
|
|
316
|
-
console.log(source_default.green(`\u2713 Org variable "${variable.name}" saved`));
|
|
317
|
-
}
|
|
318
|
-
)
|
|
319
|
-
);
|
|
320
|
-
|
|
321
|
-
// src/commands/zero/org/variable/remove.ts
|
|
322
|
-
init_esm_shims();
|
|
323
|
-
var removeCommand3 = new Command().name("remove").description("Delete an org-level variable (admin only)").argument("<name>", "Variable name to delete").option("-y, --yes", "Skip confirmation prompt").action(
|
|
324
|
-
withErrorHandler(async (name, options) => {
|
|
325
|
-
if (!options.yes) {
|
|
326
|
-
if (!isInteractive()) {
|
|
327
|
-
throw new Error("--yes flag is required in non-interactive mode");
|
|
328
|
-
}
|
|
329
|
-
const confirmed = await promptConfirm(
|
|
330
|
-
`Are you sure you want to delete org variable "${name}"?`,
|
|
331
|
-
false
|
|
332
|
-
);
|
|
333
|
-
if (!confirmed) {
|
|
334
|
-
console.log(source_default.dim("Cancelled"));
|
|
335
|
-
return;
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
await deleteZeroOrgVariable(name);
|
|
339
|
-
console.log(source_default.green(`\u2713 Org variable "${name}" deleted`));
|
|
340
|
-
})
|
|
341
|
-
);
|
|
342
|
-
|
|
343
|
-
// src/commands/zero/org/variable/index.ts
|
|
344
|
-
var zeroOrgVariableCommand = new Command().name("variable").description("Manage org-level variables (admin)").addCommand(listCommand3).addCommand(setCommand2).addCommand(removeCommand3);
|
|
345
|
-
|
|
346
|
-
// src/commands/zero/org/model-provider/index.ts
|
|
347
|
-
init_esm_shims();
|
|
348
|
-
|
|
349
|
-
// src/commands/zero/org/model-provider/list.ts
|
|
350
|
-
init_esm_shims();
|
|
351
|
-
function createListCommand(options = {}) {
|
|
352
|
-
const scopeLabel = options.scopeLabel ?? "org-level";
|
|
353
|
-
const title = options.title ?? "Org Model Providers";
|
|
354
|
-
const setupCommand2 = options.setupCommand ?? "zero org model-provider setup";
|
|
355
|
-
return new Command().name("list").alias("ls").description(`List all ${scopeLabel} model providers`).action(
|
|
356
|
-
withErrorHandler(async () => {
|
|
357
|
-
const result = await listZeroOrgModelProviders();
|
|
358
|
-
if (result.modelProviders.length === 0) {
|
|
359
|
-
console.log(source_default.dim(`No ${scopeLabel} model providers configured`));
|
|
360
|
-
console.log();
|
|
361
|
-
console.log(`To add a ${scopeLabel} model provider:`);
|
|
362
|
-
console.log(source_default.cyan(` ${setupCommand2}`));
|
|
363
|
-
return;
|
|
364
|
-
}
|
|
365
|
-
const byFramework = result.modelProviders.reduce(
|
|
366
|
-
(acc, p) => {
|
|
367
|
-
const fw = p.framework;
|
|
368
|
-
if (!acc[fw]) {
|
|
369
|
-
acc[fw] = [];
|
|
370
|
-
}
|
|
371
|
-
acc[fw].push(p);
|
|
372
|
-
return acc;
|
|
373
|
-
},
|
|
374
|
-
{}
|
|
375
|
-
);
|
|
376
|
-
console.log(source_default.bold(`${title}:`));
|
|
377
|
-
console.log();
|
|
378
|
-
for (const [framework, providers] of Object.entries(byFramework)) {
|
|
379
|
-
console.log(` ${source_default.cyan(framework)}:`);
|
|
380
|
-
for (const provider of providers) {
|
|
381
|
-
console.log(` ${provider.type}`);
|
|
382
|
-
console.log(source_default.dim(` ID: ${provider.id}`));
|
|
383
|
-
console.log(
|
|
384
|
-
source_default.dim(
|
|
385
|
-
` Updated: ${new Date(provider.updatedAt).toLocaleString()}`
|
|
386
|
-
)
|
|
387
|
-
);
|
|
388
|
-
}
|
|
389
|
-
console.log();
|
|
390
|
-
}
|
|
391
|
-
console.log(
|
|
392
|
-
source_default.dim(`Total: ${result.modelProviders.length} provider(s)`)
|
|
393
|
-
);
|
|
394
|
-
})
|
|
395
|
-
);
|
|
396
|
-
}
|
|
397
|
-
var listCommand4 = createListCommand();
|
|
398
|
-
|
|
399
|
-
// src/commands/zero/org/model-provider/setup.ts
|
|
400
|
-
init_esm_shims();
|
|
401
|
-
var import_prompts2 = __toESM(require_prompts(), 1);
|
|
402
|
-
|
|
403
|
-
// src/lib/domain/model-provider/shared.ts
|
|
404
|
-
init_esm_shims();
|
|
405
|
-
var import_prompts = __toESM(require_prompts(), 1);
|
|
406
|
-
function validateProviderType(typeStr) {
|
|
407
|
-
if (!Object.keys(MODEL_PROVIDER_TYPES).includes(typeStr)) {
|
|
408
|
-
const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(", ");
|
|
409
|
-
throw new Error(`Invalid type "${typeStr}"`, {
|
|
410
|
-
cause: new Error(`Valid types: ${validTypes}`)
|
|
411
|
-
});
|
|
412
|
-
}
|
|
413
|
-
return typeStr;
|
|
414
|
-
}
|
|
415
|
-
function validateAuthMethod(type, authMethodStr) {
|
|
416
|
-
const authMethods = getAuthMethodsForType(type);
|
|
417
|
-
if (!authMethods || !(authMethodStr in authMethods)) {
|
|
418
|
-
const validMethods = authMethods ? Object.keys(authMethods).join(", ") : "none";
|
|
419
|
-
throw new Error(`Invalid auth method "${authMethodStr}"`, {
|
|
420
|
-
cause: new Error(`Valid auth methods: ${validMethods}`)
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
return authMethodStr;
|
|
424
|
-
}
|
|
425
|
-
function parseSecrets(type, authMethod, secretArgs) {
|
|
426
|
-
const secretsConfig = getSecretsForAuthMethod(type, authMethod);
|
|
427
|
-
if (!secretsConfig) {
|
|
428
|
-
throw new Error(`Invalid auth method "${authMethod}"`);
|
|
429
|
-
}
|
|
430
|
-
const secretNames = Object.keys(secretsConfig);
|
|
431
|
-
const firstArg = secretArgs[0];
|
|
432
|
-
if (secretArgs.length === 1 && firstArg && !firstArg.includes("=")) {
|
|
433
|
-
if (secretNames.length !== 1) {
|
|
434
|
-
throw new Error(
|
|
435
|
-
"Must use KEY=VALUE format for multi-secret auth methods",
|
|
436
|
-
{ cause: new Error(`Required secrets: ${secretNames.join(", ")}`) }
|
|
437
|
-
);
|
|
438
|
-
}
|
|
439
|
-
const firstSecretName = secretNames[0];
|
|
440
|
-
if (!firstSecretName) {
|
|
441
|
-
throw new Error("No secrets defined for this auth method");
|
|
442
|
-
}
|
|
443
|
-
return { [firstSecretName]: firstArg };
|
|
444
|
-
}
|
|
445
|
-
const secrets = {};
|
|
446
|
-
for (const arg of secretArgs) {
|
|
447
|
-
const eqIndex = arg.indexOf("=");
|
|
448
|
-
if (eqIndex === -1) {
|
|
449
|
-
throw new Error(`Invalid secret format "${arg}"`, {
|
|
450
|
-
cause: new Error("Use KEY=VALUE format (e.g., AWS_REGION=us-east-1)")
|
|
451
|
-
});
|
|
452
|
-
}
|
|
453
|
-
const key = arg.slice(0, eqIndex);
|
|
454
|
-
const value = arg.slice(eqIndex + 1);
|
|
455
|
-
secrets[key] = value;
|
|
456
|
-
}
|
|
457
|
-
return secrets;
|
|
458
|
-
}
|
|
459
|
-
function validateSecrets(type, authMethod, secrets) {
|
|
460
|
-
const secretsConfig = getSecretsForAuthMethod(type, authMethod);
|
|
461
|
-
if (!secretsConfig) {
|
|
462
|
-
throw new Error(`Invalid auth method "${authMethod}"`);
|
|
463
|
-
}
|
|
464
|
-
for (const [name, fieldConfig] of Object.entries(secretsConfig)) {
|
|
465
|
-
if (fieldConfig.required && !secrets[name]) {
|
|
466
|
-
const requiredNames = Object.entries(secretsConfig).filter(([, fc]) => {
|
|
467
|
-
return fc.required;
|
|
468
|
-
}).map(([n]) => {
|
|
469
|
-
return n;
|
|
470
|
-
}).join(", ");
|
|
471
|
-
throw new Error(`Missing required secret: ${name}`, {
|
|
472
|
-
cause: new Error(`Required secrets: ${requiredNames}`)
|
|
473
|
-
});
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
for (const name of Object.keys(secrets)) {
|
|
477
|
-
if (!(name in secretsConfig)) {
|
|
478
|
-
const validNames = Object.keys(secretsConfig).join(", ");
|
|
479
|
-
throw new Error(`Unknown secret: ${name}`, {
|
|
480
|
-
cause: new Error(`Valid secrets: ${validNames}`)
|
|
481
|
-
});
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
function handleNonInteractiveMode(options) {
|
|
486
|
-
const type = validateProviderType(options.type);
|
|
487
|
-
const cmdPrefix = options.commandPrefix ?? "zero org model-provider setup";
|
|
488
|
-
if (hasAuthMethods(type)) {
|
|
489
|
-
let authMethod;
|
|
490
|
-
if (options.authMethod) {
|
|
491
|
-
authMethod = validateAuthMethod(type, options.authMethod);
|
|
492
|
-
} else {
|
|
493
|
-
const defaultAuthMethod = getDefaultAuthMethod(type);
|
|
494
|
-
const authMethods = getAuthMethodsForType(type);
|
|
495
|
-
if (!defaultAuthMethod || !authMethods) {
|
|
496
|
-
throw new Error(`Provider "${type}" requires --auth-method`);
|
|
497
|
-
}
|
|
498
|
-
const authMethodNames = Object.keys(authMethods);
|
|
499
|
-
if (authMethodNames.length === 1) {
|
|
500
|
-
authMethod = authMethodNames[0];
|
|
501
|
-
} else {
|
|
502
|
-
const methods = authMethodNames.join(", ");
|
|
503
|
-
throw new Error(
|
|
504
|
-
`--auth-method is required for "${type}" (multiple auth methods available)`,
|
|
505
|
-
{
|
|
506
|
-
cause: new Error(
|
|
507
|
-
`Available: ${methods}. Example: ${cmdPrefix} --type ${type} --auth-method ${authMethodNames[0]} --secret KEY=VALUE`
|
|
508
|
-
)
|
|
509
|
-
}
|
|
510
|
-
);
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
const secrets = parseSecrets(type, authMethod, options.secret);
|
|
514
|
-
validateSecrets(type, authMethod, secrets);
|
|
515
|
-
return {
|
|
516
|
-
type,
|
|
517
|
-
authMethod,
|
|
518
|
-
secrets,
|
|
519
|
-
isInteractiveMode: false
|
|
520
|
-
};
|
|
521
|
-
}
|
|
522
|
-
const secretArgs = options.secret;
|
|
523
|
-
const firstArg = secretArgs[0];
|
|
524
|
-
if (!firstArg) {
|
|
525
|
-
throw new Error("Secret is required");
|
|
526
|
-
}
|
|
527
|
-
let secret;
|
|
528
|
-
if (firstArg.includes("=")) {
|
|
529
|
-
secret = firstArg.slice(firstArg.indexOf("=") + 1);
|
|
530
|
-
} else {
|
|
531
|
-
secret = firstArg;
|
|
532
|
-
}
|
|
533
|
-
return {
|
|
534
|
-
type,
|
|
535
|
-
secret,
|
|
536
|
-
isInteractiveMode: false
|
|
537
|
-
};
|
|
538
|
-
}
|
|
539
|
-
async function promptForAuthMethod(type) {
|
|
540
|
-
const authMethods = getAuthMethodsForType(type);
|
|
541
|
-
const defaultAuthMethod = getDefaultAuthMethod(type);
|
|
542
|
-
if (!authMethods) {
|
|
543
|
-
return "default";
|
|
544
|
-
}
|
|
545
|
-
const choices = Object.entries(authMethods).map(([method, config]) => {
|
|
546
|
-
return {
|
|
547
|
-
title: method === defaultAuthMethod ? `${config.label} (Recommended)` : config.label,
|
|
548
|
-
value: method
|
|
549
|
-
};
|
|
550
|
-
});
|
|
551
|
-
const response = await (0, import_prompts.default)(
|
|
552
|
-
{
|
|
553
|
-
type: "select",
|
|
554
|
-
name: "authMethod",
|
|
555
|
-
message: "Select authentication method:",
|
|
556
|
-
choices
|
|
557
|
-
},
|
|
558
|
-
{
|
|
559
|
-
onCancel: () => {
|
|
560
|
-
return process.exit(0);
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
);
|
|
564
|
-
return response.authMethod;
|
|
565
|
-
}
|
|
566
|
-
function isSensitiveSecret(name) {
|
|
567
|
-
const nonSecretPatterns = ["REGION", "ENDPOINT", "URL"];
|
|
568
|
-
return !nonSecretPatterns.some((pattern) => {
|
|
569
|
-
return name.toUpperCase().includes(pattern);
|
|
570
|
-
});
|
|
571
|
-
}
|
|
572
|
-
async function promptForSecrets(type, authMethod) {
|
|
573
|
-
const secretsConfig = getSecretsForAuthMethod(type, authMethod);
|
|
574
|
-
if (!secretsConfig) {
|
|
575
|
-
throw new Error(`Invalid auth method "${authMethod}"`);
|
|
576
|
-
}
|
|
577
|
-
const secrets = {};
|
|
578
|
-
for (const [name, fieldConfig] of Object.entries(secretsConfig)) {
|
|
579
|
-
if (fieldConfig.helpText) {
|
|
580
|
-
console.log(source_default.dim(fieldConfig.helpText));
|
|
581
|
-
}
|
|
582
|
-
const isSensitive = isSensitiveSecret(name);
|
|
583
|
-
const placeholder = "placeholder" in fieldConfig ? fieldConfig.placeholder : "";
|
|
584
|
-
if (fieldConfig.required) {
|
|
585
|
-
const response = await (0, import_prompts.default)(
|
|
586
|
-
{
|
|
587
|
-
type: isSensitive ? "password" : "text",
|
|
588
|
-
name: "value",
|
|
589
|
-
message: `${fieldConfig.label}:`,
|
|
590
|
-
initial: placeholder ? "" : void 0,
|
|
591
|
-
validate: (value) => {
|
|
592
|
-
return value.length > 0 || `${fieldConfig.label} is required`;
|
|
593
|
-
}
|
|
594
|
-
},
|
|
595
|
-
{
|
|
596
|
-
onCancel: () => {
|
|
597
|
-
return process.exit(0);
|
|
598
|
-
}
|
|
599
|
-
}
|
|
600
|
-
);
|
|
601
|
-
secrets[name] = response.value;
|
|
602
|
-
} else {
|
|
603
|
-
const response = await (0, import_prompts.default)(
|
|
604
|
-
{
|
|
605
|
-
type: isSensitive ? "password" : "text",
|
|
606
|
-
name: "value",
|
|
607
|
-
message: `${fieldConfig.label} (optional):`
|
|
608
|
-
},
|
|
609
|
-
{
|
|
610
|
-
onCancel: () => {
|
|
611
|
-
return process.exit(0);
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
);
|
|
615
|
-
const value = response.value;
|
|
616
|
-
if (value && value.trim()) {
|
|
617
|
-
secrets[name] = value.trim();
|
|
618
|
-
}
|
|
619
|
-
}
|
|
620
|
-
}
|
|
621
|
-
return secrets;
|
|
622
|
-
}
|
|
623
|
-
function collectSecrets(value, previous) {
|
|
624
|
-
return previous.concat([value]);
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
// src/commands/zero/org/model-provider/setup.ts
|
|
628
|
-
async function handleInteractiveMode(commandPrefix) {
|
|
629
|
-
if (!isInteractive()) {
|
|
630
|
-
throw new Error("Interactive mode requires a TTY", {
|
|
631
|
-
cause: new Error(
|
|
632
|
-
`Use non-interactive mode: ${commandPrefix} --type <type> --secret "<value>"`
|
|
633
|
-
)
|
|
634
|
-
});
|
|
635
|
-
}
|
|
636
|
-
let cancelled = false;
|
|
637
|
-
const onCancel = () => {
|
|
638
|
-
cancelled = true;
|
|
639
|
-
return false;
|
|
640
|
-
};
|
|
641
|
-
const { modelProviders: configuredProviders } = await listZeroOrgModelProviders();
|
|
642
|
-
const configuredTypes = new Set(
|
|
643
|
-
configuredProviders.map((p) => {
|
|
644
|
-
return p.type;
|
|
645
|
-
})
|
|
646
|
-
);
|
|
647
|
-
const annotatedChoices = getSelectableProviderTypes().map((type2) => {
|
|
648
|
-
const config2 = MODEL_PROVIDER_TYPES[type2];
|
|
649
|
-
const isConfigured = configuredTypes.has(type2);
|
|
650
|
-
const isExperimental = hasAuthMethods(type2);
|
|
651
|
-
let title = config2.label;
|
|
652
|
-
if (isConfigured) {
|
|
653
|
-
title = `${title} \u2713`;
|
|
654
|
-
}
|
|
655
|
-
if (isExperimental) {
|
|
656
|
-
title = `${title} ${source_default.dim("(experimental)")}`;
|
|
657
|
-
}
|
|
658
|
-
return {
|
|
659
|
-
title,
|
|
660
|
-
value: type2
|
|
661
|
-
};
|
|
662
|
-
});
|
|
663
|
-
const typeResponse = await (0, import_prompts2.default)(
|
|
664
|
-
{
|
|
665
|
-
type: "select",
|
|
666
|
-
name: "type",
|
|
667
|
-
message: "Select provider type:",
|
|
668
|
-
choices: annotatedChoices
|
|
669
|
-
},
|
|
670
|
-
{ onCancel }
|
|
671
|
-
);
|
|
672
|
-
if (cancelled) {
|
|
673
|
-
console.log(source_default.dim("Cancelled"));
|
|
674
|
-
return null;
|
|
675
|
-
}
|
|
676
|
-
const type = typeResponse.type;
|
|
677
|
-
const existingProvider = configuredProviders.find((p) => {
|
|
678
|
-
return p.type === type;
|
|
679
|
-
});
|
|
680
|
-
if (existingProvider) {
|
|
681
|
-
console.log();
|
|
682
|
-
console.log(`"${type}" is already configured`);
|
|
683
|
-
console.log();
|
|
684
|
-
const actionResponse = await (0, import_prompts2.default)(
|
|
685
|
-
{
|
|
686
|
-
type: "select",
|
|
687
|
-
name: "action",
|
|
688
|
-
message: "",
|
|
689
|
-
choices: [
|
|
690
|
-
{ title: "Keep existing secret", value: "keep" },
|
|
691
|
-
{ title: "Update secret", value: "update" }
|
|
692
|
-
]
|
|
693
|
-
},
|
|
694
|
-
{ onCancel }
|
|
695
|
-
);
|
|
696
|
-
if (cancelled) {
|
|
697
|
-
console.log(source_default.dim("Cancelled"));
|
|
698
|
-
return null;
|
|
699
|
-
}
|
|
700
|
-
if (actionResponse.action === "keep") {
|
|
701
|
-
return {
|
|
702
|
-
type,
|
|
703
|
-
keepExistingSecret: true,
|
|
704
|
-
isInteractiveMode: true
|
|
705
|
-
};
|
|
706
|
-
}
|
|
707
|
-
}
|
|
708
|
-
const config = MODEL_PROVIDER_TYPES[type];
|
|
709
|
-
console.log();
|
|
710
|
-
if ("helpText" in config) {
|
|
711
|
-
console.log(source_default.dim(config.helpText));
|
|
712
|
-
}
|
|
713
|
-
console.log();
|
|
714
|
-
if (hasAuthMethods(type)) {
|
|
715
|
-
const authMethod = await promptForAuthMethod(type);
|
|
716
|
-
const secrets = await promptForSecrets(type, authMethod);
|
|
717
|
-
return {
|
|
718
|
-
type,
|
|
719
|
-
authMethod,
|
|
720
|
-
secrets,
|
|
721
|
-
isInteractiveMode: true
|
|
722
|
-
};
|
|
723
|
-
}
|
|
724
|
-
const secretLabel = "secretLabel" in config ? config.secretLabel : "secret";
|
|
725
|
-
const secretResponse = await (0, import_prompts2.default)(
|
|
726
|
-
{
|
|
727
|
-
type: "password",
|
|
728
|
-
name: "secret",
|
|
729
|
-
message: `Enter your ${secretLabel}:`,
|
|
730
|
-
validate: (value) => {
|
|
731
|
-
return value.length > 0 || `${secretLabel} is required`;
|
|
732
|
-
}
|
|
733
|
-
},
|
|
734
|
-
{ onCancel }
|
|
735
|
-
);
|
|
736
|
-
if (cancelled) {
|
|
737
|
-
console.log(source_default.dim("Cancelled"));
|
|
738
|
-
return null;
|
|
739
|
-
}
|
|
740
|
-
const secret = secretResponse.secret;
|
|
741
|
-
return { type, secret, isInteractiveMode: true };
|
|
742
|
-
}
|
|
743
|
-
function createSetupCommand(options = {}) {
|
|
744
|
-
const commandPrefix = options.commandPrefix ?? "zero org model-provider setup";
|
|
745
|
-
const description = options.description ?? "Configure an org-level model provider";
|
|
746
|
-
const scopeLabel = options.scopeLabel ?? "Org";
|
|
747
|
-
return new Command().name("setup").description(description).option("-t, --type <type>", "Provider type (for non-interactive mode)").option(
|
|
748
|
-
"-s, --secret <value>",
|
|
749
|
-
"Secret value (can be used multiple times, supports VALUE or KEY=VALUE format)",
|
|
750
|
-
collectSecrets,
|
|
751
|
-
[]
|
|
752
|
-
).option(
|
|
753
|
-
"-a, --auth-method <method>",
|
|
754
|
-
"Auth method (required for multi-auth providers like aws-bedrock)"
|
|
755
|
-
).action(
|
|
756
|
-
withErrorHandler(
|
|
757
|
-
async (options2) => {
|
|
758
|
-
let input;
|
|
759
|
-
const secretArgs = options2.secret ?? [];
|
|
760
|
-
if (options2.type && secretArgs.length > 0) {
|
|
761
|
-
input = handleNonInteractiveMode({
|
|
762
|
-
type: options2.type,
|
|
763
|
-
secret: secretArgs,
|
|
764
|
-
authMethod: options2.authMethod,
|
|
765
|
-
commandPrefix
|
|
766
|
-
});
|
|
767
|
-
} else if (options2.type || secretArgs.length > 0) {
|
|
768
|
-
throw new Error("Both --type and --secret are required");
|
|
769
|
-
} else {
|
|
770
|
-
const result = await handleInteractiveMode(commandPrefix);
|
|
771
|
-
if (result === null) {
|
|
772
|
-
return;
|
|
773
|
-
}
|
|
774
|
-
input = result;
|
|
775
|
-
}
|
|
776
|
-
if (input.keepExistingSecret) {
|
|
777
|
-
console.log(
|
|
778
|
-
source_default.green(
|
|
779
|
-
`\u2713 ${scopeLabel} model provider "${input.type}" unchanged`
|
|
780
|
-
)
|
|
781
|
-
);
|
|
782
|
-
return;
|
|
783
|
-
}
|
|
784
|
-
const { created } = await upsertZeroOrgModelProvider({
|
|
785
|
-
type: input.type,
|
|
786
|
-
secret: input.secret,
|
|
787
|
-
authMethod: input.authMethod,
|
|
788
|
-
secrets: input.secrets
|
|
789
|
-
});
|
|
790
|
-
const action = created ? "created" : "updated";
|
|
791
|
-
console.log(
|
|
792
|
-
source_default.green(
|
|
793
|
-
`\u2713 ${scopeLabel} model provider "${input.type}" ${action}`
|
|
794
|
-
)
|
|
795
|
-
);
|
|
796
|
-
}
|
|
797
|
-
)
|
|
798
|
-
);
|
|
799
|
-
}
|
|
800
|
-
var setupCommand = createSetupCommand();
|
|
801
|
-
|
|
802
|
-
// src/commands/zero/org/model-provider/remove.ts
|
|
803
|
-
init_esm_shims();
|
|
804
|
-
function createRemoveCommand(options = {}) {
|
|
805
|
-
const scopeLabel = options.scopeLabel ?? "Org";
|
|
806
|
-
return new Command().name("remove").description(`Remove a ${scopeLabel.toLowerCase()} model provider`).argument("<type>", "Model provider type to remove").action(
|
|
807
|
-
withErrorHandler(async (type) => {
|
|
808
|
-
if (!Object.keys(MODEL_PROVIDER_TYPES).includes(type)) {
|
|
809
|
-
const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(", ");
|
|
810
|
-
throw new Error(`Invalid type "${type}"`, {
|
|
811
|
-
cause: new Error(`Valid types: ${validTypes}`)
|
|
812
|
-
});
|
|
813
|
-
}
|
|
814
|
-
await deleteZeroOrgModelProvider(type);
|
|
815
|
-
console.log(
|
|
816
|
-
source_default.green(`\u2713 ${scopeLabel} model provider "${type}" removed`)
|
|
817
|
-
);
|
|
818
|
-
})
|
|
819
|
-
);
|
|
820
|
-
}
|
|
821
|
-
var removeCommand4 = createRemoveCommand();
|
|
822
|
-
|
|
823
|
-
// src/commands/zero/org/model-provider/index.ts
|
|
824
|
-
var zeroOrgModelProviderCommand = new Command().name("model-provider").description("Manage org-level model providers").addCommand(
|
|
825
|
-
createListCommand({
|
|
826
|
-
scopeLabel: "org-level",
|
|
827
|
-
title: "Org Model Providers",
|
|
828
|
-
setupCommand: "zero org model-provider setup"
|
|
829
|
-
})
|
|
830
|
-
).addCommand(
|
|
831
|
-
createSetupCommand({
|
|
832
|
-
commandPrefix: "zero org model-provider setup",
|
|
833
|
-
description: "Configure an org-level model provider",
|
|
834
|
-
scopeLabel: "Org"
|
|
835
|
-
})
|
|
836
|
-
).addCommand(createRemoveCommand({ scopeLabel: "Org" }));
|
|
837
|
-
|
|
838
|
-
// src/commands/zero/org/index.ts
|
|
839
|
-
var zeroOrgCommand = new Command().name("org").description("Manage organization settings, members, and providers").addCommand(statusCommand).addCommand(listCommand).addCommand(membersCommand).addCommand(inviteCommand).addCommand(removeCommand).addCommand(leaveCommand).addCommand(zeroOrgSecretCommand).addCommand(zeroOrgVariableCommand).addCommand(zeroOrgModelProviderCommand);
|
|
840
|
-
export {
|
|
841
|
-
zeroOrgCommand
|
|
842
|
-
};
|
|
843
|
-
//# sourceMappingURL=org-VSS4S3I4.js.map
|