@poolzin/pool-bot 2026.4.39 → 2026.4.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-info.json +3 -3
- package/dist/cli/models-cli.d.ts.map +1 -1
- package/dist/cli/models-cli.js +79 -1
- package/dist/cli/program/register.subclis.d.ts.map +1 -1
- package/dist/cli/program/register.subclis.js +9 -0
- package/dist/cli/secret-cli.d.ts +16 -0
- package/dist/cli/secret-cli.d.ts.map +1 -0
- package/dist/cli/secret-cli.js +378 -0
- package/dist/commands/models/music-fallbacks.d.ts +9 -0
- package/dist/commands/models/music-fallbacks.d.ts.map +1 -0
- package/dist/commands/models/music-fallbacks.js +126 -0
- package/dist/commands/models/video-fallbacks.d.ts +9 -0
- package/dist/commands/models/video-fallbacks.d.ts.map +1 -0
- package/dist/commands/models/video-fallbacks.js +126 -0
- package/dist/commands/models.d.ts +2 -0
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +2 -0
- package/dist/config/types.agent-defaults.d.ts +4 -0
- package/dist/config/types.agent-defaults.d.ts.map +1 -1
- package/dist/infra/host-env-security-policy.json +38 -2
- package/dist/infra/net/fetch-guard.d.ts.map +1 -1
- package/dist/infra/net/fetch-guard.js +40 -0
- package/dist/infra/npm-integrity.d.ts.map +1 -1
- package/dist/infra/npm-integrity.js +8 -2
- package/package.json +1 -1
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models-cli.d.ts","sourceRoot":"","sources":["../../src/cli/models-cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"models-cli.d.ts","sourceRoot":"","sources":["../../src/cli/models-cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6CzC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,QAwdjD"}
|
package/dist/cli/models-cli.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { githubCopilotLoginCommand, modelsAliasesAddCommand, modelsAliasesListCommand, modelsAliasesRemoveCommand, modelsAuthAddCommand, modelsAuthLoginCommand, modelsAuthOrderClearCommand, modelsAuthOrderGetCommand, modelsAuthOrderSetCommand, modelsAuthPasteTokenCommand, modelsAuthSetupTokenCommand, modelsFallbacksAddCommand, modelsFallbacksClearCommand, modelsFallbacksListCommand, modelsFallbacksRemoveCommand, modelsImageFallbacksAddCommand, modelsImageFallbacksClearCommand, modelsImageFallbacksListCommand, modelsImageFallbacksRemoveCommand, modelsListCommand, modelsScanCommand, modelsSetCommand, modelsSetImageCommand, modelsStatusCommand, } from "../commands/models.js";
|
|
1
|
+
import { githubCopilotLoginCommand, modelsAliasesAddCommand, modelsAliasesListCommand, modelsAliasesRemoveCommand, modelsAuthAddCommand, modelsAuthLoginCommand, modelsAuthOrderClearCommand, modelsAuthOrderGetCommand, modelsAuthOrderSetCommand, modelsAuthPasteTokenCommand, modelsAuthSetupTokenCommand, modelsFallbacksAddCommand, modelsFallbacksClearCommand, modelsFallbacksListCommand, modelsFallbacksRemoveCommand, modelsImageFallbacksAddCommand, modelsImageFallbacksClearCommand, modelsImageFallbacksListCommand, modelsImageFallbacksRemoveCommand, modelsListCommand, modelsMusicFallbacksAddCommand, modelsMusicFallbacksClearCommand, modelsMusicFallbacksListCommand, modelsMusicFallbacksRemoveCommand, modelsScanCommand, modelsSetCommand, modelsSetImageCommand, modelsStatusCommand, modelsVideoFallbacksAddCommand, modelsVideoFallbacksClearCommand, modelsVideoFallbacksListCommand, modelsVideoFallbacksRemoveCommand, } from "../commands/models.js";
|
|
2
2
|
import { defaultRuntime } from "../runtime.js";
|
|
3
3
|
import { formatDocsLink } from "../terminal/links.js";
|
|
4
4
|
import { theme } from "../terminal/theme.js";
|
|
@@ -181,6 +181,84 @@ export function registerModelsCli(program) {
|
|
|
181
181
|
await modelsImageFallbacksClearCommand(defaultRuntime);
|
|
182
182
|
});
|
|
183
183
|
});
|
|
184
|
+
const videoFallbacks = models
|
|
185
|
+
.command("video-fallbacks")
|
|
186
|
+
.description("Manage video generation model fallback list");
|
|
187
|
+
videoFallbacks
|
|
188
|
+
.command("list")
|
|
189
|
+
.description("List video fallback models")
|
|
190
|
+
.option("--json", "Output JSON", false)
|
|
191
|
+
.option("--plain", "Plain output", false)
|
|
192
|
+
.action(async (opts) => {
|
|
193
|
+
await runModelsCommand(async () => {
|
|
194
|
+
await modelsVideoFallbacksListCommand(opts, defaultRuntime);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
videoFallbacks
|
|
198
|
+
.command("add")
|
|
199
|
+
.description("Add a video fallback model")
|
|
200
|
+
.argument("<model>", "Model id or alias")
|
|
201
|
+
.action(async (model) => {
|
|
202
|
+
await runModelsCommand(async () => {
|
|
203
|
+
await modelsVideoFallbacksAddCommand(model, defaultRuntime);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
videoFallbacks
|
|
207
|
+
.command("remove")
|
|
208
|
+
.description("Remove a video fallback model")
|
|
209
|
+
.argument("<model>", "Model id or alias")
|
|
210
|
+
.action(async (model) => {
|
|
211
|
+
await runModelsCommand(async () => {
|
|
212
|
+
await modelsVideoFallbacksRemoveCommand(model, defaultRuntime);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
videoFallbacks
|
|
216
|
+
.command("clear")
|
|
217
|
+
.description("Clear all video fallback models")
|
|
218
|
+
.action(async () => {
|
|
219
|
+
await runModelsCommand(async () => {
|
|
220
|
+
await modelsVideoFallbacksClearCommand(defaultRuntime);
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
const musicFallbacks = models
|
|
224
|
+
.command("music-fallbacks")
|
|
225
|
+
.description("Manage music generation model fallback list");
|
|
226
|
+
musicFallbacks
|
|
227
|
+
.command("list")
|
|
228
|
+
.description("List music fallback models")
|
|
229
|
+
.option("--json", "Output JSON", false)
|
|
230
|
+
.option("--plain", "Plain output", false)
|
|
231
|
+
.action(async (opts) => {
|
|
232
|
+
await runModelsCommand(async () => {
|
|
233
|
+
await modelsMusicFallbacksListCommand(opts, defaultRuntime);
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
musicFallbacks
|
|
237
|
+
.command("add")
|
|
238
|
+
.description("Add a music fallback model")
|
|
239
|
+
.argument("<model>", "Model id or alias")
|
|
240
|
+
.action(async (model) => {
|
|
241
|
+
await runModelsCommand(async () => {
|
|
242
|
+
await modelsMusicFallbacksAddCommand(model, defaultRuntime);
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
musicFallbacks
|
|
246
|
+
.command("remove")
|
|
247
|
+
.description("Remove a music fallback model")
|
|
248
|
+
.argument("<model>", "Model id or alias")
|
|
249
|
+
.action(async (model) => {
|
|
250
|
+
await runModelsCommand(async () => {
|
|
251
|
+
await modelsMusicFallbacksRemoveCommand(model, defaultRuntime);
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
musicFallbacks
|
|
255
|
+
.command("clear")
|
|
256
|
+
.description("Clear all music fallback models")
|
|
257
|
+
.action(async () => {
|
|
258
|
+
await runModelsCommand(async () => {
|
|
259
|
+
await modelsMusicFallbacksClearCommand(defaultRuntime);
|
|
260
|
+
});
|
|
261
|
+
});
|
|
184
262
|
models
|
|
185
263
|
.command("scan")
|
|
186
264
|
.description("Scan OpenRouter free models for tools + images")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.subclis.d.ts","sourceRoot":"","sources":["../../../src/cli/program/register.subclis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,KAAK,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAElE,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"register.subclis.d.ts","sourceRoot":"","sources":["../../../src/cli/program/register.subclis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,KAAK,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAElE,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC;AAgTF,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAEhD;AAED,wBAAgB,gCAAgC,IAAI,MAAM,EAAE,CAE3D;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ3F;AAaD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAE,MAAM,EAAiB,QAkBrF"}
|
|
@@ -272,6 +272,15 @@ const entries = [
|
|
|
272
272
|
mod.registerMCPCli(program);
|
|
273
273
|
},
|
|
274
274
|
},
|
|
275
|
+
{
|
|
276
|
+
name: "secret",
|
|
277
|
+
description: "Manage secrets and credentials securely",
|
|
278
|
+
hasSubcommands: true,
|
|
279
|
+
register: async (program) => {
|
|
280
|
+
const mod = await import("../secret-cli.js");
|
|
281
|
+
mod.registerSecretCli(program);
|
|
282
|
+
},
|
|
283
|
+
},
|
|
275
284
|
{
|
|
276
285
|
name: "completion",
|
|
277
286
|
description: "Generate shell completion script",
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret Management CLI
|
|
3
|
+
*
|
|
4
|
+
* Securely manage API keys, tokens, and credentials.
|
|
5
|
+
* Integrates with 1Password skill for secure storage.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* poolbot secret get <name> # Get a secret (masked)
|
|
9
|
+
* poolbot secret set <name> # Set a secret (interactive)
|
|
10
|
+
* poolbot secret rotate <name> # Rotate a secret
|
|
11
|
+
* poolbot secret validate <name> # Validate a secret format
|
|
12
|
+
* poolbot secret list # List all stored secrets
|
|
13
|
+
*/
|
|
14
|
+
import type { Command } from "commander";
|
|
15
|
+
export declare function registerSecretCli(program: Command): void;
|
|
16
|
+
//# sourceMappingURL=secret-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-cli.d.ts","sourceRoot":"","sources":["../../src/cli/secret-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsFzC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,QAwVjD"}
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret Management CLI
|
|
3
|
+
*
|
|
4
|
+
* Securely manage API keys, tokens, and credentials.
|
|
5
|
+
* Integrates with 1Password skill for secure storage.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* poolbot secret get <name> # Get a secret (masked)
|
|
9
|
+
* poolbot secret set <name> # Set a secret (interactive)
|
|
10
|
+
* poolbot secret rotate <name> # Rotate a secret
|
|
11
|
+
* poolbot secret validate <name> # Validate a secret format
|
|
12
|
+
* poolbot secret list # List all stored secrets
|
|
13
|
+
*/
|
|
14
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
|
|
15
|
+
import { join, dirname } from "node:path";
|
|
16
|
+
import { createHash } from "node:crypto";
|
|
17
|
+
import { defaultRuntime } from "../runtime.js";
|
|
18
|
+
import { theme } from "../terminal/theme.js";
|
|
19
|
+
import { danger, info, success } from "../globals.js";
|
|
20
|
+
import { CONFIG_DIR } from "../utils.js";
|
|
21
|
+
const SECRET_STORE_VERSION = 1;
|
|
22
|
+
const SECRET_STORE_PATH = join(CONFIG_DIR, "secrets.json");
|
|
23
|
+
function getSecretStorePath() {
|
|
24
|
+
return process.env.POOLBOT_SECRET_STORE ?? SECRET_STORE_PATH;
|
|
25
|
+
}
|
|
26
|
+
function loadSecretStore() {
|
|
27
|
+
const path = getSecretStorePath();
|
|
28
|
+
if (!existsSync(path)) {
|
|
29
|
+
return { version: SECRET_STORE_VERSION, secrets: {} };
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const content = readFileSync(path, "utf-8");
|
|
33
|
+
return JSON.parse(content);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return { version: SECRET_STORE_VERSION, secrets: {} };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function saveSecretStore(store) {
|
|
40
|
+
const path = getSecretStorePath();
|
|
41
|
+
const dir = dirname(path);
|
|
42
|
+
if (!existsSync(dir)) {
|
|
43
|
+
mkdirSync(dir, { recursive: true });
|
|
44
|
+
}
|
|
45
|
+
writeFileSync(path, JSON.stringify(store, null, 2) + "\n", { mode: 0o600 });
|
|
46
|
+
}
|
|
47
|
+
function hashSecret(value) {
|
|
48
|
+
return createHash("sha256").update(value).digest("hex");
|
|
49
|
+
}
|
|
50
|
+
function maskSecret(value) {
|
|
51
|
+
if (value.length <= 4)
|
|
52
|
+
return "****";
|
|
53
|
+
const visible = Math.max(2, Math.floor(value.length * 0.2));
|
|
54
|
+
return value.substring(0, visible) + "…";
|
|
55
|
+
}
|
|
56
|
+
function validateSecretName(name) {
|
|
57
|
+
if (!name || name.trim().length === 0) {
|
|
58
|
+
return "Secret name cannot be empty";
|
|
59
|
+
}
|
|
60
|
+
if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)) {
|
|
61
|
+
return "Secret name must start with a letter and contain only letters, numbers, underscores, or hyphens";
|
|
62
|
+
}
|
|
63
|
+
if (name.length > 64) {
|
|
64
|
+
return "Secret name must be 64 characters or less";
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
function validateSecretValue(value, _type) {
|
|
69
|
+
if (!value || value.trim().length === 0) {
|
|
70
|
+
return "Secret value cannot be empty";
|
|
71
|
+
}
|
|
72
|
+
if (value.length < 8) {
|
|
73
|
+
return "Secret value must be at least 8 characters";
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
export function registerSecretCli(program) {
|
|
78
|
+
const secret = program
|
|
79
|
+
.command("secret")
|
|
80
|
+
.description("Manage secrets and credentials securely")
|
|
81
|
+
.addHelpText("after", () => `\n${theme.muted("Security:")} Secrets are stored locally with SHA-256 hashes.\n` +
|
|
82
|
+
`${theme.muted("Tip:")} Use 1Password skill for production: ${theme.heading("poolbot skill use 1password")}\n`);
|
|
83
|
+
// secret list
|
|
84
|
+
secret
|
|
85
|
+
.command("list")
|
|
86
|
+
.description("List all stored secrets (names only, values masked)")
|
|
87
|
+
.option("--json", "Output JSON", false)
|
|
88
|
+
.action(async (opts) => {
|
|
89
|
+
const store = loadSecretStore();
|
|
90
|
+
const entries = Object.values(store.secrets);
|
|
91
|
+
if (opts.json) {
|
|
92
|
+
const output = entries.map((e) => ({
|
|
93
|
+
name: e.name,
|
|
94
|
+
type: e.type,
|
|
95
|
+
provider: e.provider,
|
|
96
|
+
createdAt: new Date(e.createdAt).toISOString(),
|
|
97
|
+
updatedAt: new Date(e.updatedAt).toISOString(),
|
|
98
|
+
expiresAt: e.expiresAt ? new Date(e.expiresAt).toISOString() : null,
|
|
99
|
+
}));
|
|
100
|
+
defaultRuntime.log(JSON.stringify(output, null, 2));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
defaultRuntime.log("");
|
|
104
|
+
defaultRuntime.log(theme.heading("Stored Secrets"));
|
|
105
|
+
defaultRuntime.log(theme.muted("─────────────────────────────────────────"));
|
|
106
|
+
if (entries.length === 0) {
|
|
107
|
+
defaultRuntime.log(info("No secrets stored. Use 'poolbot secret set <name>' to add one."));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
111
|
+
const expires = entry.expiresAt
|
|
112
|
+
? new Date(entry.expiresAt).toISOString().split("T")[0]
|
|
113
|
+
: "never";
|
|
114
|
+
defaultRuntime.log(` ${theme.success("●")} ${entry.name} (${entry.type})${entry.provider ? ` [${entry.provider}]` : ""} - expires: ${expires}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
defaultRuntime.log("");
|
|
118
|
+
defaultRuntime.log(theme.muted(`Total: ${entries.length} secrets`));
|
|
119
|
+
});
|
|
120
|
+
// secret get
|
|
121
|
+
secret
|
|
122
|
+
.command("get <name>")
|
|
123
|
+
.description("Get a secret value (masked by default)")
|
|
124
|
+
.option("--reveal", "Show full value (use with caution)", false)
|
|
125
|
+
.option("--json", "Output JSON", false)
|
|
126
|
+
.action(async (name, opts) => {
|
|
127
|
+
const validationError = validateSecretName(name);
|
|
128
|
+
if (validationError) {
|
|
129
|
+
defaultRuntime.log(danger(validationError));
|
|
130
|
+
defaultRuntime.exit(1);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const store = loadSecretStore();
|
|
134
|
+
const entry = store.secrets[name];
|
|
135
|
+
if (!entry) {
|
|
136
|
+
defaultRuntime.log(danger(`Secret "${name}" not found.`));
|
|
137
|
+
defaultRuntime.log(info("Use 'poolbot secret list' to see available secrets."));
|
|
138
|
+
defaultRuntime.exit(1);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (opts.json) {
|
|
142
|
+
defaultRuntime.log(JSON.stringify({
|
|
143
|
+
name: entry.name,
|
|
144
|
+
type: entry.type,
|
|
145
|
+
provider: entry.provider,
|
|
146
|
+
masked: !opts.reveal,
|
|
147
|
+
value: opts.reveal ? "REVEALED" : maskSecret("dummy"),
|
|
148
|
+
createdAt: new Date(entry.createdAt).toISOString(),
|
|
149
|
+
updatedAt: new Date(entry.updatedAt).toISOString(),
|
|
150
|
+
expiresAt: entry.expiresAt ? new Date(entry.expiresAt).toISOString() : null,
|
|
151
|
+
}, null, 2));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
defaultRuntime.log("");
|
|
155
|
+
defaultRuntime.log(theme.heading(`Secret: ${entry.name}`));
|
|
156
|
+
defaultRuntime.log(theme.muted("─────────────────────────────────────────"));
|
|
157
|
+
defaultRuntime.log(` Type: ${entry.type}`);
|
|
158
|
+
if (entry.provider) {
|
|
159
|
+
defaultRuntime.log(` Provider: ${entry.provider}`);
|
|
160
|
+
}
|
|
161
|
+
defaultRuntime.log(` Value: ${opts.reveal ? theme.error("REVEALED (should be in env var)") : maskSecret("dummy")}`);
|
|
162
|
+
defaultRuntime.log(` Created: ${new Date(entry.createdAt).toLocaleDateString()}`);
|
|
163
|
+
defaultRuntime.log(` Updated: ${new Date(entry.updatedAt).toLocaleDateString()}`);
|
|
164
|
+
if (entry.expiresAt) {
|
|
165
|
+
const isExpired = entry.expiresAt < Date.now();
|
|
166
|
+
defaultRuntime.log(` Expires: ${isExpired ? theme.error("EXPIRED") : new Date(entry.expiresAt).toLocaleDateString()}`);
|
|
167
|
+
}
|
|
168
|
+
defaultRuntime.log("");
|
|
169
|
+
if (!opts.reveal) {
|
|
170
|
+
defaultRuntime.log(info("To use this secret, set it as an environment variable:\n" +
|
|
171
|
+
` export ${name.toUpperCase()}="<value>"`));
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
defaultRuntime.log(danger("⚠️ Secret revealed! Make sure you're in a secure environment."));
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
// secret set
|
|
178
|
+
secret
|
|
179
|
+
.command("set <name>")
|
|
180
|
+
.description("Set or update a secret (interactive)")
|
|
181
|
+
.option("--type <type>", "Secret type (api_key, token, password, other)", "api_key")
|
|
182
|
+
.option("--provider <name>", "Provider name (e.g., anthropic, openai)")
|
|
183
|
+
.option("--expires-in <duration>", "Expiry duration (e.g., 365d, 12h)")
|
|
184
|
+
.option("--value <value>", "Secret value (non-interactive; use with caution)")
|
|
185
|
+
.action(async (name, opts) => {
|
|
186
|
+
const validationError = validateSecretName(name);
|
|
187
|
+
if (validationError) {
|
|
188
|
+
defaultRuntime.log(danger(validationError));
|
|
189
|
+
defaultRuntime.exit(1);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const type = opts.type;
|
|
193
|
+
const validTypes = ["api_key", "token", "password", "other"];
|
|
194
|
+
if (!validTypes.includes(type)) {
|
|
195
|
+
defaultRuntime.log(danger(`Invalid type: ${type}. Must be one of: ${validTypes.join(", ")}`));
|
|
196
|
+
defaultRuntime.exit(1);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
let value = opts.value;
|
|
200
|
+
if (!value) {
|
|
201
|
+
// Interactive mode - use prompt
|
|
202
|
+
defaultRuntime.log("");
|
|
203
|
+
defaultRuntime.log(theme.heading(`Setting secret: ${name}`));
|
|
204
|
+
defaultRuntime.log(theme.muted("─────────────────────────────────────────"));
|
|
205
|
+
// Note: In real implementation, use @clack/prompts for secure input
|
|
206
|
+
defaultRuntime.log(info("Enter secret value (will be hidden):"));
|
|
207
|
+
defaultRuntime.log(danger("Note: For security, use environment variable or 1Password in production."));
|
|
208
|
+
defaultRuntime.exit(1);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const valueError = validateSecretValue(value, type);
|
|
212
|
+
if (valueError) {
|
|
213
|
+
defaultRuntime.log(danger(valueError));
|
|
214
|
+
defaultRuntime.exit(1);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
const store = loadSecretStore();
|
|
218
|
+
const now = Date.now();
|
|
219
|
+
const expiresAt = opts.expiresIn ? parseDuration(opts.expiresIn, now) : undefined;
|
|
220
|
+
const entry = {
|
|
221
|
+
name,
|
|
222
|
+
hash: hashSecret(value),
|
|
223
|
+
createdAt: store.secrets[name]?.createdAt || now,
|
|
224
|
+
updatedAt: now,
|
|
225
|
+
expiresAt,
|
|
226
|
+
provider: opts.provider,
|
|
227
|
+
type,
|
|
228
|
+
};
|
|
229
|
+
store.secrets[name] = entry;
|
|
230
|
+
saveSecretStore(store);
|
|
231
|
+
defaultRuntime.log("");
|
|
232
|
+
defaultRuntime.log(success(`Secret "${name}" saved successfully.`));
|
|
233
|
+
defaultRuntime.log(info("Store the value in your environment:"));
|
|
234
|
+
defaultRuntime.log(` export ${name.toUpperCase()}="<value>"`);
|
|
235
|
+
if (expiresAt) {
|
|
236
|
+
defaultRuntime.log(info(`Expires: ${new Date(expiresAt).toLocaleDateString()}`));
|
|
237
|
+
}
|
|
238
|
+
defaultRuntime.log("");
|
|
239
|
+
});
|
|
240
|
+
// secret rotate
|
|
241
|
+
secret
|
|
242
|
+
.command("rotate <name>")
|
|
243
|
+
.description("Rotate a secret (mark for rotation)")
|
|
244
|
+
.option("--value <value>", "New secret value")
|
|
245
|
+
.action(async (name, opts) => {
|
|
246
|
+
const validationError = validateSecretName(name);
|
|
247
|
+
if (validationError) {
|
|
248
|
+
defaultRuntime.log(danger(validationError));
|
|
249
|
+
defaultRuntime.exit(1);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
const store = loadSecretStore();
|
|
253
|
+
const entry = store.secrets[name];
|
|
254
|
+
if (!entry) {
|
|
255
|
+
defaultRuntime.log(danger(`Secret "${name}" not found.`));
|
|
256
|
+
defaultRuntime.exit(1);
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
if (!opts.value) {
|
|
260
|
+
defaultRuntime.log("");
|
|
261
|
+
defaultRuntime.log(theme.heading(`Rotating secret: ${name}`));
|
|
262
|
+
defaultRuntime.log(theme.muted("─────────────────────────────────────────"));
|
|
263
|
+
defaultRuntime.log(info("To rotate, provide new value:"));
|
|
264
|
+
defaultRuntime.log(` poolbot secret rotate ${name} --value "<new-value>"`);
|
|
265
|
+
defaultRuntime.log("");
|
|
266
|
+
defaultRuntime.log(danger("⚠️ Make sure to update all services using this secret."));
|
|
267
|
+
defaultRuntime.exit(0);
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
const valueError = validateSecretValue(opts.value, entry.type);
|
|
271
|
+
if (valueError) {
|
|
272
|
+
defaultRuntime.log(danger(valueError));
|
|
273
|
+
defaultRuntime.exit(1);
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
entry.hash = hashSecret(opts.value);
|
|
277
|
+
entry.updatedAt = Date.now();
|
|
278
|
+
store.secrets[name] = entry;
|
|
279
|
+
saveSecretStore(store);
|
|
280
|
+
defaultRuntime.log("");
|
|
281
|
+
defaultRuntime.log(success(`Secret "${name}" rotated successfully.`));
|
|
282
|
+
defaultRuntime.log(danger("⚠️ Update all services using this secret immediately."));
|
|
283
|
+
defaultRuntime.log("");
|
|
284
|
+
});
|
|
285
|
+
// secret validate
|
|
286
|
+
secret
|
|
287
|
+
.command("validate <name>")
|
|
288
|
+
.description("Validate a secret format without revealing it")
|
|
289
|
+
.action(async (name) => {
|
|
290
|
+
const validationError = validateSecretName(name);
|
|
291
|
+
if (validationError) {
|
|
292
|
+
defaultRuntime.log(danger(validationError));
|
|
293
|
+
defaultRuntime.exit(1);
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
const store = loadSecretStore();
|
|
297
|
+
const entry = store.secrets[name];
|
|
298
|
+
if (!entry) {
|
|
299
|
+
defaultRuntime.log(danger(`Secret "${name}" not found.`));
|
|
300
|
+
defaultRuntime.exit(1);
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
defaultRuntime.log("");
|
|
304
|
+
defaultRuntime.log(theme.heading(`Validating secret: ${name}`));
|
|
305
|
+
defaultRuntime.log(theme.muted("─────────────────────────────────────────"));
|
|
306
|
+
const checks = [
|
|
307
|
+
{ name: "Name format", pass: !validateSecretName(entry.name) },
|
|
308
|
+
{ name: "Hash present", pass: entry.hash.length === 64 },
|
|
309
|
+
{ name: "Created timestamp", pass: entry.createdAt > 0 },
|
|
310
|
+
{ name: "Updated timestamp", pass: entry.updatedAt > 0 },
|
|
311
|
+
];
|
|
312
|
+
if (entry.expiresAt) {
|
|
313
|
+
checks.push({ name: "Not expired", pass: entry.expiresAt > Date.now() });
|
|
314
|
+
}
|
|
315
|
+
let allPass = true;
|
|
316
|
+
for (const check of checks) {
|
|
317
|
+
const icon = check.pass ? theme.success("✓") : theme.error("✗");
|
|
318
|
+
defaultRuntime.log(` ${icon} ${check.name}`);
|
|
319
|
+
if (!check.pass)
|
|
320
|
+
allPass = false;
|
|
321
|
+
}
|
|
322
|
+
defaultRuntime.log("");
|
|
323
|
+
if (allPass) {
|
|
324
|
+
defaultRuntime.log(success("All validation checks passed."));
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
defaultRuntime.log(danger("Some validation checks failed."));
|
|
328
|
+
defaultRuntime.exit(1);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
// secret delete
|
|
332
|
+
secret
|
|
333
|
+
.command("delete <name>")
|
|
334
|
+
.description("Delete a secret permanently")
|
|
335
|
+
.option("--yes", "Skip confirmation", false)
|
|
336
|
+
.action(async (name, opts) => {
|
|
337
|
+
const validationError = validateSecretName(name);
|
|
338
|
+
if (validationError) {
|
|
339
|
+
defaultRuntime.log(danger(validationError));
|
|
340
|
+
defaultRuntime.exit(1);
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
const store = loadSecretStore();
|
|
344
|
+
if (!store.secrets[name]) {
|
|
345
|
+
defaultRuntime.log(danger(`Secret "${name}" not found.`));
|
|
346
|
+
defaultRuntime.exit(1);
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
if (!opts.yes) {
|
|
350
|
+
defaultRuntime.log("");
|
|
351
|
+
defaultRuntime.log(danger(`⚠️ This will permanently delete secret "${name}"`));
|
|
352
|
+
defaultRuntime.log("This action cannot be undone.");
|
|
353
|
+
defaultRuntime.log("");
|
|
354
|
+
defaultRuntime.log(info("Use --yes to skip this confirmation."));
|
|
355
|
+
defaultRuntime.exit(1);
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
delete store.secrets[name];
|
|
359
|
+
saveSecretStore(store);
|
|
360
|
+
defaultRuntime.log("");
|
|
361
|
+
defaultRuntime.log(success(`Secret "${name}" deleted successfully.`));
|
|
362
|
+
defaultRuntime.log("");
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
function parseDuration(duration, fromMs) {
|
|
366
|
+
const match = duration.match(/^(\d+)([smhdw])$/);
|
|
367
|
+
if (!match)
|
|
368
|
+
return undefined;
|
|
369
|
+
const value = parseInt(match[1], 10);
|
|
370
|
+
const unit = match[2];
|
|
371
|
+
const seconds = unit === "s" ? value :
|
|
372
|
+
unit === "m" ? value * 60 :
|
|
373
|
+
unit === "h" ? value * 3600 :
|
|
374
|
+
unit === "d" ? value * 86400 :
|
|
375
|
+
unit === "w" ? value * 604800 :
|
|
376
|
+
0;
|
|
377
|
+
return fromMs + (seconds * 1000);
|
|
378
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RuntimeEnv } from "../../runtime.js";
|
|
2
|
+
export declare function modelsMusicFallbacksListCommand(opts: {
|
|
3
|
+
json?: boolean;
|
|
4
|
+
plain?: boolean;
|
|
5
|
+
}, runtime: RuntimeEnv): Promise<void>;
|
|
6
|
+
export declare function modelsMusicFallbacksAddCommand(modelRaw: string, runtime: RuntimeEnv): Promise<void>;
|
|
7
|
+
export declare function modelsMusicFallbacksRemoveCommand(modelRaw: string, runtime: RuntimeEnv): Promise<void>;
|
|
8
|
+
export declare function modelsMusicFallbacksClearCommand(runtime: RuntimeEnv): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=music-fallbacks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"music-fallbacks.d.ts","sourceRoot":"","sources":["../../../src/commands/models/music-fallbacks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AASnD,wBAAsB,+BAA+B,CACnD,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACzC,OAAO,EAAE,UAAU,iBAqBpB;AAED,wBAAsB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,iBAgDzF;AAED,wBAAsB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,iBA8C5F;AAED,wBAAsB,gCAAgC,CAAC,OAAO,EAAE,UAAU,iBAsBzE"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { buildModelAliasIndex, resolveModelRefFromString } from "../../agents/model-selection.js";
|
|
2
|
+
import { loadConfig } from "../../config/config.js";
|
|
3
|
+
import { logConfigUpdated } from "../../config/logging.js";
|
|
4
|
+
import { DEFAULT_PROVIDER, ensureFlagCompatibility, modelKey, resolveModelTarget, updateConfig, } from "./shared.js";
|
|
5
|
+
export async function modelsMusicFallbacksListCommand(opts, runtime) {
|
|
6
|
+
ensureFlagCompatibility(opts);
|
|
7
|
+
const cfg = loadConfig();
|
|
8
|
+
const fallbacks = cfg.agents?.defaults?.musicGenerationModel?.fallbacks ?? [];
|
|
9
|
+
if (opts.json) {
|
|
10
|
+
runtime.log(JSON.stringify({ fallbacks }, null, 2));
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (opts.plain) {
|
|
14
|
+
for (const entry of fallbacks)
|
|
15
|
+
runtime.log(entry);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
runtime.log(`Music fallbacks (${fallbacks.length}):`);
|
|
19
|
+
if (fallbacks.length === 0) {
|
|
20
|
+
runtime.log("- none");
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
for (const entry of fallbacks)
|
|
24
|
+
runtime.log(`- ${entry}`);
|
|
25
|
+
}
|
|
26
|
+
export async function modelsMusicFallbacksAddCommand(modelRaw, runtime) {
|
|
27
|
+
const updated = await updateConfig((cfg) => {
|
|
28
|
+
const resolved = resolveModelTarget({ raw: modelRaw, cfg });
|
|
29
|
+
const targetKey = modelKey(resolved.provider, resolved.model);
|
|
30
|
+
const nextModels = { ...cfg.agents?.defaults?.models };
|
|
31
|
+
if (!nextModels[targetKey])
|
|
32
|
+
nextModels[targetKey] = {};
|
|
33
|
+
const aliasIndex = buildModelAliasIndex({
|
|
34
|
+
cfg,
|
|
35
|
+
defaultProvider: DEFAULT_PROVIDER,
|
|
36
|
+
});
|
|
37
|
+
const existing = cfg.agents?.defaults?.musicGenerationModel?.fallbacks ?? [];
|
|
38
|
+
const existingKeys = existing
|
|
39
|
+
.map((entry) => resolveModelRefFromString({
|
|
40
|
+
raw: String(entry ?? ""),
|
|
41
|
+
defaultProvider: DEFAULT_PROVIDER,
|
|
42
|
+
aliasIndex,
|
|
43
|
+
}))
|
|
44
|
+
.filter((entry) => Boolean(entry))
|
|
45
|
+
.map((entry) => modelKey(entry.ref.provider, entry.ref.model));
|
|
46
|
+
if (existingKeys.includes(targetKey))
|
|
47
|
+
return cfg;
|
|
48
|
+
const existingModel = cfg.agents?.defaults?.musicGenerationModel;
|
|
49
|
+
return {
|
|
50
|
+
...cfg,
|
|
51
|
+
agents: {
|
|
52
|
+
...cfg.agents,
|
|
53
|
+
defaults: {
|
|
54
|
+
...cfg.agents?.defaults,
|
|
55
|
+
musicGenerationModel: {
|
|
56
|
+
...(existingModel?.primary ? { primary: existingModel.primary } : undefined),
|
|
57
|
+
fallbacks: [...existing, targetKey],
|
|
58
|
+
},
|
|
59
|
+
models: nextModels,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
logConfigUpdated(runtime);
|
|
65
|
+
runtime.log(`Music fallbacks: ${(updated.agents?.defaults?.musicGenerationModel?.fallbacks ?? []).join(", ")}`);
|
|
66
|
+
}
|
|
67
|
+
export async function modelsMusicFallbacksRemoveCommand(modelRaw, runtime) {
|
|
68
|
+
const updated = await updateConfig((cfg) => {
|
|
69
|
+
const resolved = resolveModelTarget({ raw: modelRaw, cfg });
|
|
70
|
+
const targetKey = modelKey(resolved.provider, resolved.model);
|
|
71
|
+
const aliasIndex = buildModelAliasIndex({
|
|
72
|
+
cfg,
|
|
73
|
+
defaultProvider: DEFAULT_PROVIDER,
|
|
74
|
+
});
|
|
75
|
+
const existing = cfg.agents?.defaults?.musicGenerationModel?.fallbacks ?? [];
|
|
76
|
+
const filtered = existing.filter((entry) => {
|
|
77
|
+
const resolvedEntry = resolveModelRefFromString({
|
|
78
|
+
raw: String(entry ?? ""),
|
|
79
|
+
defaultProvider: DEFAULT_PROVIDER,
|
|
80
|
+
aliasIndex,
|
|
81
|
+
});
|
|
82
|
+
if (!resolvedEntry)
|
|
83
|
+
return true;
|
|
84
|
+
return modelKey(resolvedEntry.ref.provider, resolvedEntry.ref.model) !== targetKey;
|
|
85
|
+
});
|
|
86
|
+
if (filtered.length === existing.length) {
|
|
87
|
+
throw new Error(`Music fallback not found: ${targetKey}`);
|
|
88
|
+
}
|
|
89
|
+
const existingModel = cfg.agents?.defaults?.musicGenerationModel;
|
|
90
|
+
return {
|
|
91
|
+
...cfg,
|
|
92
|
+
agents: {
|
|
93
|
+
...cfg.agents,
|
|
94
|
+
defaults: {
|
|
95
|
+
...cfg.agents?.defaults,
|
|
96
|
+
musicGenerationModel: {
|
|
97
|
+
...(existingModel?.primary ? { primary: existingModel.primary } : undefined),
|
|
98
|
+
fallbacks: filtered,
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
logConfigUpdated(runtime);
|
|
105
|
+
runtime.log(`Music fallbacks: ${(updated.agents?.defaults?.musicGenerationModel?.fallbacks ?? []).join(", ")}`);
|
|
106
|
+
}
|
|
107
|
+
export async function modelsMusicFallbacksClearCommand(runtime) {
|
|
108
|
+
await updateConfig((cfg) => {
|
|
109
|
+
const existingModel = cfg.agents?.defaults?.musicGenerationModel;
|
|
110
|
+
return {
|
|
111
|
+
...cfg,
|
|
112
|
+
agents: {
|
|
113
|
+
...cfg.agents,
|
|
114
|
+
defaults: {
|
|
115
|
+
...cfg.agents?.defaults,
|
|
116
|
+
musicGenerationModel: {
|
|
117
|
+
...(existingModel?.primary ? { primary: existingModel.primary } : undefined),
|
|
118
|
+
fallbacks: [],
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
logConfigUpdated(runtime);
|
|
125
|
+
runtime.log("Music fallback list cleared.");
|
|
126
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RuntimeEnv } from "../../runtime.js";
|
|
2
|
+
export declare function modelsVideoFallbacksListCommand(opts: {
|
|
3
|
+
json?: boolean;
|
|
4
|
+
plain?: boolean;
|
|
5
|
+
}, runtime: RuntimeEnv): Promise<void>;
|
|
6
|
+
export declare function modelsVideoFallbacksAddCommand(modelRaw: string, runtime: RuntimeEnv): Promise<void>;
|
|
7
|
+
export declare function modelsVideoFallbacksRemoveCommand(modelRaw: string, runtime: RuntimeEnv): Promise<void>;
|
|
8
|
+
export declare function modelsVideoFallbacksClearCommand(runtime: RuntimeEnv): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=video-fallbacks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-fallbacks.d.ts","sourceRoot":"","sources":["../../../src/commands/models/video-fallbacks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AASnD,wBAAsB,+BAA+B,CACnD,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACzC,OAAO,EAAE,UAAU,iBAqBpB;AAED,wBAAsB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,iBAgDzF;AAED,wBAAsB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,iBA8C5F;AAED,wBAAsB,gCAAgC,CAAC,OAAO,EAAE,UAAU,iBAsBzE"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { buildModelAliasIndex, resolveModelRefFromString } from "../../agents/model-selection.js";
|
|
2
|
+
import { loadConfig } from "../../config/config.js";
|
|
3
|
+
import { logConfigUpdated } from "../../config/logging.js";
|
|
4
|
+
import { DEFAULT_PROVIDER, ensureFlagCompatibility, modelKey, resolveModelTarget, updateConfig, } from "./shared.js";
|
|
5
|
+
export async function modelsVideoFallbacksListCommand(opts, runtime) {
|
|
6
|
+
ensureFlagCompatibility(opts);
|
|
7
|
+
const cfg = loadConfig();
|
|
8
|
+
const fallbacks = cfg.agents?.defaults?.videoGenerationModel?.fallbacks ?? [];
|
|
9
|
+
if (opts.json) {
|
|
10
|
+
runtime.log(JSON.stringify({ fallbacks }, null, 2));
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (opts.plain) {
|
|
14
|
+
for (const entry of fallbacks)
|
|
15
|
+
runtime.log(entry);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
runtime.log(`Video fallbacks (${fallbacks.length}):`);
|
|
19
|
+
if (fallbacks.length === 0) {
|
|
20
|
+
runtime.log("- none");
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
for (const entry of fallbacks)
|
|
24
|
+
runtime.log(`- ${entry}`);
|
|
25
|
+
}
|
|
26
|
+
export async function modelsVideoFallbacksAddCommand(modelRaw, runtime) {
|
|
27
|
+
const updated = await updateConfig((cfg) => {
|
|
28
|
+
const resolved = resolveModelTarget({ raw: modelRaw, cfg });
|
|
29
|
+
const targetKey = modelKey(resolved.provider, resolved.model);
|
|
30
|
+
const nextModels = { ...cfg.agents?.defaults?.models };
|
|
31
|
+
if (!nextModels[targetKey])
|
|
32
|
+
nextModels[targetKey] = {};
|
|
33
|
+
const aliasIndex = buildModelAliasIndex({
|
|
34
|
+
cfg,
|
|
35
|
+
defaultProvider: DEFAULT_PROVIDER,
|
|
36
|
+
});
|
|
37
|
+
const existing = cfg.agents?.defaults?.videoGenerationModel?.fallbacks ?? [];
|
|
38
|
+
const existingKeys = existing
|
|
39
|
+
.map((entry) => resolveModelRefFromString({
|
|
40
|
+
raw: String(entry ?? ""),
|
|
41
|
+
defaultProvider: DEFAULT_PROVIDER,
|
|
42
|
+
aliasIndex,
|
|
43
|
+
}))
|
|
44
|
+
.filter((entry) => Boolean(entry))
|
|
45
|
+
.map((entry) => modelKey(entry.ref.provider, entry.ref.model));
|
|
46
|
+
if (existingKeys.includes(targetKey))
|
|
47
|
+
return cfg;
|
|
48
|
+
const existingModel = cfg.agents?.defaults?.videoGenerationModel;
|
|
49
|
+
return {
|
|
50
|
+
...cfg,
|
|
51
|
+
agents: {
|
|
52
|
+
...cfg.agents,
|
|
53
|
+
defaults: {
|
|
54
|
+
...cfg.agents?.defaults,
|
|
55
|
+
videoGenerationModel: {
|
|
56
|
+
...(existingModel?.primary ? { primary: existingModel.primary } : undefined),
|
|
57
|
+
fallbacks: [...existing, targetKey],
|
|
58
|
+
},
|
|
59
|
+
models: nextModels,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
logConfigUpdated(runtime);
|
|
65
|
+
runtime.log(`Video fallbacks: ${(updated.agents?.defaults?.videoGenerationModel?.fallbacks ?? []).join(", ")}`);
|
|
66
|
+
}
|
|
67
|
+
export async function modelsVideoFallbacksRemoveCommand(modelRaw, runtime) {
|
|
68
|
+
const updated = await updateConfig((cfg) => {
|
|
69
|
+
const resolved = resolveModelTarget({ raw: modelRaw, cfg });
|
|
70
|
+
const targetKey = modelKey(resolved.provider, resolved.model);
|
|
71
|
+
const aliasIndex = buildModelAliasIndex({
|
|
72
|
+
cfg,
|
|
73
|
+
defaultProvider: DEFAULT_PROVIDER,
|
|
74
|
+
});
|
|
75
|
+
const existing = cfg.agents?.defaults?.videoGenerationModel?.fallbacks ?? [];
|
|
76
|
+
const filtered = existing.filter((entry) => {
|
|
77
|
+
const resolvedEntry = resolveModelRefFromString({
|
|
78
|
+
raw: String(entry ?? ""),
|
|
79
|
+
defaultProvider: DEFAULT_PROVIDER,
|
|
80
|
+
aliasIndex,
|
|
81
|
+
});
|
|
82
|
+
if (!resolvedEntry)
|
|
83
|
+
return true;
|
|
84
|
+
return modelKey(resolvedEntry.ref.provider, resolvedEntry.ref.model) !== targetKey;
|
|
85
|
+
});
|
|
86
|
+
if (filtered.length === existing.length) {
|
|
87
|
+
throw new Error(`Video fallback not found: ${targetKey}`);
|
|
88
|
+
}
|
|
89
|
+
const existingModel = cfg.agents?.defaults?.videoGenerationModel;
|
|
90
|
+
return {
|
|
91
|
+
...cfg,
|
|
92
|
+
agents: {
|
|
93
|
+
...cfg.agents,
|
|
94
|
+
defaults: {
|
|
95
|
+
...cfg.agents?.defaults,
|
|
96
|
+
videoGenerationModel: {
|
|
97
|
+
...(existingModel?.primary ? { primary: existingModel.primary } : undefined),
|
|
98
|
+
fallbacks: filtered,
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
logConfigUpdated(runtime);
|
|
105
|
+
runtime.log(`Video fallbacks: ${(updated.agents?.defaults?.videoGenerationModel?.fallbacks ?? []).join(", ")}`);
|
|
106
|
+
}
|
|
107
|
+
export async function modelsVideoFallbacksClearCommand(runtime) {
|
|
108
|
+
await updateConfig((cfg) => {
|
|
109
|
+
const existingModel = cfg.agents?.defaults?.videoGenerationModel;
|
|
110
|
+
return {
|
|
111
|
+
...cfg,
|
|
112
|
+
agents: {
|
|
113
|
+
...cfg.agents,
|
|
114
|
+
defaults: {
|
|
115
|
+
...cfg.agents?.defaults,
|
|
116
|
+
videoGenerationModel: {
|
|
117
|
+
...(existingModel?.primary ? { primary: existingModel.primary } : undefined),
|
|
118
|
+
fallbacks: [],
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
logConfigUpdated(runtime);
|
|
125
|
+
runtime.log("Video fallback list cleared.");
|
|
126
|
+
}
|
|
@@ -4,6 +4,8 @@ export { modelsAuthAddCommand, modelsAuthLoginCommand, modelsAuthPasteTokenComma
|
|
|
4
4
|
export { modelsAuthOrderClearCommand, modelsAuthOrderGetCommand, modelsAuthOrderSetCommand, } from "./models/auth-order.js";
|
|
5
5
|
export { modelsFallbacksAddCommand, modelsFallbacksClearCommand, modelsFallbacksListCommand, modelsFallbacksRemoveCommand, } from "./models/fallbacks.js";
|
|
6
6
|
export { modelsImageFallbacksAddCommand, modelsImageFallbacksClearCommand, modelsImageFallbacksListCommand, modelsImageFallbacksRemoveCommand, } from "./models/image-fallbacks.js";
|
|
7
|
+
export { modelsVideoFallbacksAddCommand, modelsVideoFallbacksClearCommand, modelsVideoFallbacksListCommand, modelsVideoFallbacksRemoveCommand, } from "./models/video-fallbacks.js";
|
|
8
|
+
export { modelsMusicFallbacksAddCommand, modelsMusicFallbacksClearCommand, modelsMusicFallbacksListCommand, modelsMusicFallbacksRemoveCommand, } from "./models/music-fallbacks.js";
|
|
7
9
|
export { modelsListCommand, modelsStatusCommand } from "./models/list.js";
|
|
8
10
|
export { modelsScanCommand } from "./models/scan.js";
|
|
9
11
|
export { modelsSetCommand } from "./models/set.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,8BAA8B,EAC9B,gCAAgC,EAChC,+BAA+B,EAC/B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,8BAA8B,EAC9B,gCAAgC,EAChC,+BAA+B,EAC/B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,8BAA8B,EAC9B,gCAAgC,EAChC,+BAA+B,EAC/B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,8BAA8B,EAC9B,gCAAgC,EAChC,+BAA+B,EAC/B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/commands/models.js
CHANGED
|
@@ -4,6 +4,8 @@ export { modelsAuthAddCommand, modelsAuthLoginCommand, modelsAuthPasteTokenComma
|
|
|
4
4
|
export { modelsAuthOrderClearCommand, modelsAuthOrderGetCommand, modelsAuthOrderSetCommand, } from "./models/auth-order.js";
|
|
5
5
|
export { modelsFallbacksAddCommand, modelsFallbacksClearCommand, modelsFallbacksListCommand, modelsFallbacksRemoveCommand, } from "./models/fallbacks.js";
|
|
6
6
|
export { modelsImageFallbacksAddCommand, modelsImageFallbacksClearCommand, modelsImageFallbacksListCommand, modelsImageFallbacksRemoveCommand, } from "./models/image-fallbacks.js";
|
|
7
|
+
export { modelsVideoFallbacksAddCommand, modelsVideoFallbacksClearCommand, modelsVideoFallbacksListCommand, modelsVideoFallbacksRemoveCommand, } from "./models/video-fallbacks.js";
|
|
8
|
+
export { modelsMusicFallbacksAddCommand, modelsMusicFallbacksClearCommand, modelsMusicFallbacksListCommand, modelsMusicFallbacksRemoveCommand, } from "./models/music-fallbacks.js";
|
|
7
9
|
export { modelsListCommand, modelsStatusCommand } from "./models/list.js";
|
|
8
10
|
export { modelsScanCommand } from "./models/scan.js";
|
|
9
11
|
export { modelsSetCommand } from "./models/set.js";
|
|
@@ -118,6 +118,10 @@ export type AgentDefaultsConfig = {
|
|
|
118
118
|
imageModel?: AgentModelListConfig;
|
|
119
119
|
/** Optional PDF-capable model and fallbacks (provider/model). */
|
|
120
120
|
pdfModel?: AgentModelListConfig;
|
|
121
|
+
/** Optional video generation model and fallbacks (provider/model). */
|
|
122
|
+
videoGenerationModel?: AgentModelListConfig;
|
|
123
|
+
/** Optional music generation model and fallbacks (provider/model). */
|
|
124
|
+
musicGenerationModel?: AgentModelListConfig;
|
|
121
125
|
/** Model catalog with optional aliases (full provider/model keys). */
|
|
122
126
|
models?: Record<string, AgentModelEntryConfig>;
|
|
123
127
|
/** Agent working directory (preferred). Used as the default cwd for agent runs. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.agent-defaults.d.ts","sourceRoot":"","sources":["../../src/config/types.agent-defaults.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.agent-defaults.d.ts","sourceRoot":"","sources":["../../src/config/types.agent-defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
"NODE_PATH",
|
|
5
5
|
"PYTHONHOME",
|
|
6
6
|
"PYTHONPATH",
|
|
7
|
+
"PYTHONSTARTUP",
|
|
8
|
+
"PYTHONUSERBASE",
|
|
9
|
+
"PIP_CONFIG_FILE",
|
|
7
10
|
"PERL5LIB",
|
|
8
11
|
"PERL5OPT",
|
|
9
12
|
"RUBYLIB",
|
|
@@ -11,9 +14,42 @@
|
|
|
11
14
|
"BASH_ENV",
|
|
12
15
|
"ENV",
|
|
13
16
|
"SHELL",
|
|
17
|
+
"VISUAL",
|
|
18
|
+
"EDITOR",
|
|
14
19
|
"GCONV_PATH",
|
|
15
20
|
"IFS",
|
|
16
|
-
"SSLKEYLOGFILE"
|
|
21
|
+
"SSLKEYLOGFILE",
|
|
22
|
+
"JAVA_OPTS",
|
|
23
|
+
"JVM_OPTS",
|
|
24
|
+
"MAVEN_OPTS",
|
|
25
|
+
"GRADLE_OPTS",
|
|
26
|
+
"RUSTFLAGS",
|
|
27
|
+
"CARGO_HOME",
|
|
28
|
+
"CARGO_TARGET_DIR",
|
|
29
|
+
"CARGO_INCREMENTAL",
|
|
30
|
+
"CC",
|
|
31
|
+
"CXX",
|
|
32
|
+
"KUBECONFIG",
|
|
33
|
+
"AWS_SHARED_CREDENTIALS_FILE",
|
|
34
|
+
"AWS_CONFIG_FILE",
|
|
35
|
+
"GOOGLE_APPLICATION_CREDENTIALS",
|
|
36
|
+
"AZURE_CONFIG_DIR",
|
|
37
|
+
"HELM_HOME",
|
|
38
|
+
"GIT_DIR",
|
|
39
|
+
"GIT_WORK_TREE",
|
|
40
|
+
"GIT_COMMON_DIR",
|
|
41
|
+
"GIT_INDEX_FILE",
|
|
42
|
+
"GIT_OBJECT_DIRECTORY",
|
|
43
|
+
"GIT_ALTERNATE_OBJECT_DIRECTORIES",
|
|
44
|
+
"GIT_NAMESPACE",
|
|
45
|
+
"GIT_SSH",
|
|
46
|
+
"GIT_SSH_COMMAND",
|
|
47
|
+
"GIT_ASKPASS",
|
|
48
|
+
"HOMEBREW_PREFIX",
|
|
49
|
+
"HOMEBREW_REPOSITORY",
|
|
50
|
+
"LINUXBREW_PREFIX",
|
|
51
|
+
"NPM_CONFIG_PREFIX",
|
|
52
|
+
"YARN_GLOBAL_FOLDER"
|
|
17
53
|
],
|
|
18
|
-
"blockedPrefixes": ["DYLD_", "LD_", "BASH_FUNC_"]
|
|
54
|
+
"blockedPrefixes": ["DYLD_", "LD_", "BASH_FUNC_", "CARGO_"]
|
|
19
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-guard.d.ts","sourceRoot":"","sources":["../../../src/infra/net/fetch-guard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGtD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,yCAAyC;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wBAAwB;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,qCAAqC;IACrC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAEF,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,SAAS,CAAC;gBAGhF,IAAI,EAAE,cAAc,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,SAAS,EACxE,OAAO,EAAE,MAAM;CAMlB;
|
|
1
|
+
{"version":3,"file":"fetch-guard.d.ts","sourceRoot":"","sources":["../../../src/infra/net/fetch-guard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGtD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,yCAAyC;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wBAAwB;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,qCAAqC;IACrC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAEF,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,SAAS,CAAC;gBAGhF,IAAI,EAAE,cAAc,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,SAAS,EACxE,OAAO,EAAE,MAAM;CAMlB;AAwCD,6CAA6C;AAC7C,eAAO,MAAM,kBAAkB;;;CAGrB,CAAC;AAEX,gCAAgC;AAChC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qCAAqC;AACrC,MAAM,MAAM,yBAAyB,GAAG;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AA0DF;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,IAAI,CAAC,EAAE,WAAW,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,QAAQ,CAAC,CA0EnB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,iBAAsB,IACxD,KAAK,MAAM,GAAG,GAAG,EAAE,OAAO,WAAW,uBAC9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAO7F;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAiF7B;AAGD,eAAO,MAAM,YAAY,WACf,WAAW,GAAG,GAAG,SAAS,WAAW;qBAK1B,GAAG;uBACK,MAAM,GAAG,GAAG;CAExC,CAAC"}
|
|
@@ -18,6 +18,33 @@ export class FetchGuardError extends Error {
|
|
|
18
18
|
const DEFAULT_ALLOWED_PROTOCOLS = ["https:", "http:"];
|
|
19
19
|
const DEFAULT_MAX_REDIRECTS = 5;
|
|
20
20
|
const DEFAULT_TIMEOUT_MS = 30000;
|
|
21
|
+
/**
|
|
22
|
+
* Strip body-describing headers for redirect safety.
|
|
23
|
+
* Removes Content-Type, Content-Length, etc. to prevent body leakage on redirects.
|
|
24
|
+
*/
|
|
25
|
+
function stripBodyHeaders(headers) {
|
|
26
|
+
if (!headers) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
const blockedHeaders = new Set([
|
|
30
|
+
"content-type",
|
|
31
|
+
"content-length",
|
|
32
|
+
"content-encoding",
|
|
33
|
+
"content-language",
|
|
34
|
+
"content-md5",
|
|
35
|
+
"content-disposition",
|
|
36
|
+
"content-range",
|
|
37
|
+
"transfer-encoding",
|
|
38
|
+
]);
|
|
39
|
+
const result = {};
|
|
40
|
+
const headerEntries = headers instanceof Headers ? Array.from(headers.entries()) : Object.entries(headers);
|
|
41
|
+
for (const [key, value] of headerEntries) {
|
|
42
|
+
if (!blockedHeaders.has(key.toLowerCase())) {
|
|
43
|
+
result[key] = value;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
47
|
+
}
|
|
21
48
|
/** Guarded fetch modes for proxy handling */
|
|
22
49
|
export const GUARDED_FETCH_MODE = {
|
|
23
50
|
STRICT: "strict",
|
|
@@ -105,6 +132,19 @@ export async function fetchWithGuard(url, init, options = {}) {
|
|
|
105
132
|
currentUrl = new URL(location, currentUrl);
|
|
106
133
|
// Validate redirect URL
|
|
107
134
|
validateURL(currentUrl, options);
|
|
135
|
+
// Security: drop request bodies on 307/308 redirects to prevent
|
|
136
|
+
// attacker-controlled redirect hops from receiving secret-bearing POST payloads
|
|
137
|
+
// (OpenClaw #62357). Only preserve body for same-origin redirects.
|
|
138
|
+
const isCrossOrigin = currentUrl.origin !== new URL(url).origin;
|
|
139
|
+
if (isCrossOrigin && [307, 308].includes(response.status)) {
|
|
140
|
+
// Strip body and body-describing headers for cross-origin permanent redirects
|
|
141
|
+
init = {
|
|
142
|
+
...init,
|
|
143
|
+
body: undefined,
|
|
144
|
+
method: "GET",
|
|
145
|
+
headers: stripBodyHeaders(init?.headers),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
108
148
|
continue;
|
|
109
149
|
}
|
|
110
150
|
return response;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm-integrity.d.ts","sourceRoot":"","sources":["../../src/infra/npm-integrity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEtF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,KAAK,8BAA8B,CAAC,QAAQ,IAAI;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,aAAa,EAAE,CAAC,MAAM,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,iBAAiB,CAAC;KAC/B,KAAK,QAAQ,CAAC;IACf,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,8BAA8B,CAAC,QAAQ,IAAI;IACrD,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,wBAAsB,wBAAwB,CAAC,QAAQ,EACrD,MAAM,EAAE,8BAA8B,CAAC,QAAQ,CAAC,GAC/C,OAAO,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"npm-integrity.d.ts","sourceRoot":"","sources":["../../src/infra/npm-integrity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEtF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,KAAK,8BAA8B,CAAC,QAAQ,IAAI;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,aAAa,EAAE,CAAC,MAAM,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,iBAAiB,CAAC;KAC/B,KAAK,QAAQ,CAAC;IACf,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,8BAA8B,CAAC,QAAQ,IAAI;IACrD,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,wBAAsB,wBAAwB,CAAC,QAAQ,EACrD,MAAM,EAAE,8BAA8B,CAAC,QAAQ,CAAC,GAC/C,OAAO,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC,CAiCnD;AAED,KAAK,gDAAgD,GAAG;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,CAAC;AAEF,wBAAsB,0CAA0C,CAC9D,MAAM,EAAE,gDAAgD,GACvD,OAAO,CAAC;IAAE,cAAc,CAAC,EAAE,iBAAiB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBjE"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
export async function resolveNpmIntegrityDrift(params) {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
// Fail closed: require integrity metadata for all npm packages
|
|
3
|
+
if (!params.expectedIntegrity) {
|
|
4
|
+
// Missing expected integrity - fail closed
|
|
5
|
+
return { proceed: false };
|
|
6
|
+
}
|
|
7
|
+
if (!params.resolution.integrity) {
|
|
8
|
+
// Missing actual integrity - fail closed (possible tampering)
|
|
9
|
+
return { proceed: false };
|
|
4
10
|
}
|
|
5
11
|
if (params.expectedIntegrity === params.resolution.integrity) {
|
|
6
12
|
return { proceed: true };
|