@vellumai/cli 0.10.12-dev.202607271505.0de19b2 → 0.10.12-dev.202607271705.ff78929
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/package.json
CHANGED
|
@@ -83,7 +83,7 @@ describe("vellum flags --assistant routing", () => {
|
|
|
83
83
|
fetchCalls.push({ url, method });
|
|
84
84
|
if (method === "PATCH") {
|
|
85
85
|
return jsonResponse({
|
|
86
|
-
key: "
|
|
86
|
+
key: "browser",
|
|
87
87
|
enabled: true,
|
|
88
88
|
defaultEnabled: false,
|
|
89
89
|
label: "Voice Mode",
|
|
@@ -133,7 +133,7 @@ describe("vellum flags --assistant routing", () => {
|
|
|
133
133
|
"vellum",
|
|
134
134
|
"flags",
|
|
135
135
|
"set",
|
|
136
|
-
"
|
|
136
|
+
"browser",
|
|
137
137
|
"true",
|
|
138
138
|
"--assistant",
|
|
139
139
|
"Bob",
|
|
@@ -146,7 +146,7 @@ describe("vellum flags --assistant routing", () => {
|
|
|
146
146
|
// bob-2 has assistantId.length === 5, so port = 7800 + 5 = 7805.
|
|
147
147
|
expect(fetchCalls[0].url).toContain("http://127.0.0.1:7805");
|
|
148
148
|
expect(fetchCalls[0].url).toContain(
|
|
149
|
-
"/v1/assistants/bob-2/feature-flags/
|
|
149
|
+
"/v1/assistants/bob-2/feature-flags/browser",
|
|
150
150
|
);
|
|
151
151
|
});
|
|
152
152
|
|
|
@@ -166,7 +166,7 @@ describe("vellum flags --assistant routing", () => {
|
|
|
166
166
|
"--assistant",
|
|
167
167
|
"Bob",
|
|
168
168
|
"set",
|
|
169
|
-
"
|
|
169
|
+
"browser",
|
|
170
170
|
"true",
|
|
171
171
|
];
|
|
172
172
|
|
|
@@ -174,7 +174,7 @@ describe("vellum flags --assistant routing", () => {
|
|
|
174
174
|
|
|
175
175
|
expect(fetchCalls.length).toBe(1);
|
|
176
176
|
expect(fetchCalls[0].url).toContain(
|
|
177
|
-
"/v1/assistants/bob-2/feature-flags/
|
|
177
|
+
"/v1/assistants/bob-2/feature-flags/browser",
|
|
178
178
|
);
|
|
179
179
|
});
|
|
180
180
|
|
|
@@ -188,7 +188,7 @@ describe("vellum flags --assistant routing", () => {
|
|
|
188
188
|
],
|
|
189
189
|
"alice-1",
|
|
190
190
|
);
|
|
191
|
-
process.argv = ["bun", "vellum", "flags", "set", "
|
|
191
|
+
process.argv = ["bun", "vellum", "flags", "set", "browser", "true"];
|
|
192
192
|
|
|
193
193
|
await flags();
|
|
194
194
|
|
|
@@ -196,7 +196,7 @@ describe("vellum flags --assistant routing", () => {
|
|
|
196
196
|
// alice-1 has assistantId.length === 7, so port = 7800 + 7 = 7807.
|
|
197
197
|
expect(fetchCalls[0].url).toContain("http://127.0.0.1:7807");
|
|
198
198
|
expect(fetchCalls[0].url).toContain(
|
|
199
|
-
"/v1/assistants/alice-1/feature-flags/
|
|
199
|
+
"/v1/assistants/alice-1/feature-flags/browser",
|
|
200
200
|
);
|
|
201
201
|
});
|
|
202
202
|
|
|
@@ -207,7 +207,7 @@ describe("vellum flags --assistant routing", () => {
|
|
|
207
207
|
"vellum",
|
|
208
208
|
"flags",
|
|
209
209
|
"set",
|
|
210
|
-
"
|
|
210
|
+
"browser",
|
|
211
211
|
"true",
|
|
212
212
|
"--assistant",
|
|
213
213
|
"Ghost",
|
|
@@ -227,7 +227,7 @@ describe("vellum flags --assistant routing", () => {
|
|
|
227
227
|
"vellum",
|
|
228
228
|
"flags",
|
|
229
229
|
"set",
|
|
230
|
-
"
|
|
230
|
+
"browser",
|
|
231
231
|
"true",
|
|
232
232
|
"--assistant",
|
|
233
233
|
];
|
|
@@ -298,14 +298,14 @@ describe("vellum flags cross-environment hint", () => {
|
|
|
298
298
|
test("gateway-unreachable error gains the hint when another env has assistants", async () => {
|
|
299
299
|
writeLockfile([makeEntry("alice-1", { name: "Alice" })], "alice-1");
|
|
300
300
|
seedDevAssistant();
|
|
301
|
-
process.argv = ["bun", "vellum", "flags", "set", "
|
|
301
|
+
process.argv = ["bun", "vellum", "flags", "set", "browser", "true"];
|
|
302
302
|
await expect(flags()).rejects.toThrow(/Install vellum Command/);
|
|
303
303
|
});
|
|
304
304
|
|
|
305
305
|
test("gateway-unreachable error stays bare when no other env has assistants", async () => {
|
|
306
306
|
writeLockfile([makeEntry("alice-1", { name: "Alice" })], "alice-1");
|
|
307
307
|
// xdgDataHome is empty — detection finds nothing, so the message is intact.
|
|
308
|
-
process.argv = ["bun", "vellum", "flags", "set", "
|
|
308
|
+
process.argv = ["bun", "vellum", "flags", "set", "browser", "true"];
|
|
309
309
|
let error: Error | undefined;
|
|
310
310
|
try {
|
|
311
311
|
await flags();
|
package/src/commands/flags.ts
CHANGED
|
@@ -93,13 +93,13 @@ function printHelp(): void {
|
|
|
93
93
|
" $ vellum flags # list flags for active assistant",
|
|
94
94
|
);
|
|
95
95
|
console.log(
|
|
96
|
-
" $ vellum flags get
|
|
96
|
+
" $ vellum flags get browser # inspect one flag",
|
|
97
97
|
);
|
|
98
98
|
console.log(
|
|
99
|
-
" $ vellum flags set
|
|
99
|
+
" $ vellum flags set browser true # enable a flag",
|
|
100
100
|
);
|
|
101
101
|
console.log(
|
|
102
|
-
" $ vellum flags set
|
|
102
|
+
" $ vellum flags set browser true --assistant eval-1 # target by name/id",
|
|
103
103
|
);
|
|
104
104
|
}
|
|
105
105
|
|
|
@@ -4,9 +4,9 @@ import { parseFeatureFlagArgs } from "./flag-args";
|
|
|
4
4
|
|
|
5
5
|
describe("parseFeatureFlagArgs", () => {
|
|
6
6
|
test("single flag produces env var and empty remaining", () => {
|
|
7
|
-
const result = parseFeatureFlagArgs(["--flag", "
|
|
7
|
+
const result = parseFeatureFlagArgs(["--flag", "browser=true"]);
|
|
8
8
|
expect(result).toEqual({
|
|
9
|
-
envVars: {
|
|
9
|
+
envVars: { VELLUM_FLAG_BROWSER: "true" },
|
|
10
10
|
remaining: [],
|
|
11
11
|
});
|
|
12
12
|
});
|
|
@@ -75,7 +75,7 @@ describe("parseFeatureFlagArgs", () => {
|
|
|
75
75
|
"process.exit",
|
|
76
76
|
);
|
|
77
77
|
expect(errorSpy).toHaveBeenCalledWith(
|
|
78
|
-
'Error: invalid flag key "UPPER". Keys must be kebab-case (e.g. "
|
|
78
|
+
'Error: invalid flag key "UPPER". Keys must be kebab-case (e.g. "browser")',
|
|
79
79
|
);
|
|
80
80
|
|
|
81
81
|
exitSpy.mockRestore();
|
package/src/lib/flag-args.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Only allow simple kebab-case keys (e.g. "
|
|
1
|
+
/** Only allow simple kebab-case keys (e.g. "browser", "contacts"). */
|
|
2
2
|
const ALLOWED_KEY_RE = /^[a-z0-9][a-z0-9-]*$/;
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -38,7 +38,7 @@ export function parseFeatureFlagArgs(args: string[]): {
|
|
|
38
38
|
|
|
39
39
|
if (!ALLOWED_KEY_RE.test(key)) {
|
|
40
40
|
console.error(
|
|
41
|
-
`Error: invalid flag key "${key}". Keys must be kebab-case (e.g. "
|
|
41
|
+
`Error: invalid flag key "${key}". Keys must be kebab-case (e.g. "browser")`,
|
|
42
42
|
);
|
|
43
43
|
process.exit(1);
|
|
44
44
|
}
|
|
@@ -76,6 +76,7 @@ const PROVIDER_LABELS: Record<LlmProviderId, string> = {
|
|
|
76
76
|
atlascloud: "Atlas Cloud",
|
|
77
77
|
together: "Together AI",
|
|
78
78
|
baseten: "Baseten",
|
|
79
|
+
poolside: "Poolside",
|
|
79
80
|
};
|
|
80
81
|
|
|
81
82
|
export function formatProviderName(provider: LlmProviderId): string {
|
|
@@ -194,6 +195,9 @@ export function inferProviderFromModel(model: string): string | undefined {
|
|
|
194
195
|
if (model.startsWith("thinkingmachines/")) {
|
|
195
196
|
return "baseten";
|
|
196
197
|
}
|
|
198
|
+
if (model.startsWith("poolside/")) {
|
|
199
|
+
return "poolside";
|
|
200
|
+
}
|
|
197
201
|
if (model.includes("/")) {
|
|
198
202
|
return "openrouter";
|
|
199
203
|
}
|
|
@@ -32,6 +32,7 @@ export const LLM_PROVIDER_ENV_VAR_NAMES: Record<string, string> = {
|
|
|
32
32
|
together: "TOGETHER_API_KEY",
|
|
33
33
|
litellm: "LITELLM_API_KEY",
|
|
34
34
|
baseten: "BASETEN_API_KEY",
|
|
35
|
+
poolside: "POOLSIDE_API_KEY",
|
|
35
36
|
};
|
|
36
37
|
|
|
37
38
|
/** Search-provider env var names. Mirrors `SEARCH_PROVIDER_CATALOG` BYOK entries. */
|