bazilion 0.12.0 → 0.12.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.
Files changed (50) hide show
  1. package/README.md +3 -3
  2. package/dist/cli.js +20 -14
  3. package/dist/cli.js.map +1 -1
  4. package/dist/daemon.js +259 -197
  5. package/dist/daemon.js.map +1 -1
  6. package/dist/web/client/assets/{ProductionTeamPolicyEditor-CSL3W7XM.js → ProductionTeamPolicyEditor-CsWpTsy6.js} +1 -1
  7. package/dist/web/client/assets/{ProfileCommunicationEditor-CwU0QkmE.js → ProfileCommunicationEditor-C43HvUe-.js} +1 -1
  8. package/dist/web/client/assets/{TeamTabs-C1Hakkff.js → TeamTabs-DvqWieCq.js} +1 -1
  9. package/dist/web/client/assets/{TemplatesTabs-klEydJ8-.js → TemplatesTabs-6Jd_xQj7.js} +1 -1
  10. package/dist/web/client/assets/{_id-e4u7dmBb.js → _id-AOAT0H_5.js} +1 -1
  11. package/dist/web/client/assets/{_id-wkjjWLz0.js → _id-BUuz7Drv.js} +1 -1
  12. package/dist/web/client/assets/{_id-BOC7ioJu.js → _id-BegmVRmT.js} +1 -1
  13. package/dist/web/client/assets/{_id-CnVq-rED.js → _id-BrA4Crh_.js} +1 -1
  14. package/dist/web/client/assets/{activity-uqhwzmiy.js → activity-n0Fw9_w3.js} +1 -1
  15. package/dist/web/client/assets/{agents-FaQtkAWs.js → agents-B33VQtbl.js} +1 -1
  16. package/dist/web/client/assets/{agents-B2usE-L_.js → agents-C50pdxp7.js} +1 -1
  17. package/dist/web/client/assets/{approvals-DqLE6ttw.js → approvals-DVW0hX8h.js} +1 -1
  18. package/dist/web/client/assets/{attention-CkGozYnJ.js → attention-B2490jcN.js} +1 -1
  19. package/dist/web/client/assets/chevron-down-B0aNNOyn.js +1 -0
  20. package/dist/web/client/assets/{config-xrXoDEWM.js → config-CMMxxeX2.js} +2 -2
  21. package/dist/web/client/assets/{context-ZWqx3uiC.js → context-DcFzsfZ3.js} +1 -1
  22. package/dist/web/client/assets/{inbox-BoIvl9ZF.js → inbox-Bn1GbUsJ.js} +1 -1
  23. package/dist/web/client/assets/{index-nb2MV8X1.js → index-3nrK5iFr.js} +2 -2
  24. package/dist/web/client/assets/{learning-6_oYn1l7.js → learning-BUX1MFu2.js} +1 -1
  25. package/dist/web/client/assets/{login-DM1ytxQL.js → login-CMWpGDKv.js} +1 -1
  26. package/dist/web/client/assets/{mcp-CetZbyUh.js → mcp-lZV08dqc.js} +1 -1
  27. package/dist/web/client/assets/{members-DdqWtwZd.js → members-DAeaY2Cy.js} +1 -1
  28. package/dist/web/client/assets/{memory-FNrxFHmC.js → memory-HmMWxxdF.js} +1 -1
  29. package/dist/web/client/assets/plus-CPzRJg1V.js +1 -0
  30. package/dist/web/client/assets/{policy-BKPejYRI.js → policy-DaijITy7.js} +1 -1
  31. package/dist/web/client/assets/{routes-CH1ZTTo-.js → routes-BNk270AM.js} +1 -1
  32. package/dist/web/client/assets/{services-zk9SqN06.js → services-DtrpJrdo.js} +1 -1
  33. package/dist/web/client/assets/{skills-tXDpomHW.js → skills-Cv93A3P3.js} +1 -1
  34. package/dist/web/client/assets/{teams-D1c8zlxs.js → teams-CCFnSNKi.js} +1 -1
  35. package/dist/web/client/assets/{teams-BZYjekBN.js → teams-D92R9Pb7.js} +1 -1
  36. package/dist/web/client/assets/{telegram-DCe1CWMt.js → telegram-BF1vdgDB.js} +1 -1
  37. package/dist/web/client/assets/{tokens-DAPjRS0N.js → tokens-BXj6hWW-.js} +1 -1
  38. package/dist/web/client/assets/{triggers-D8R-5guA.js → triggers-NT24i4hZ.js} +1 -1
  39. package/dist/web/client/assets/{welcome-CuK0shDJ.js → welcome-D0cy68eZ.js} +1 -1
  40. package/dist/web/server/assets/{_tanstack-start-manifest_v-fLsYERQ-.js → _tanstack-start-manifest_v-BGDBdnUs.js} +53 -53
  41. package/dist/web/server/assets/{config-TeIoyYYc.js → config-1w2GiJUn.js} +1 -1
  42. package/dist/web/server/assets/{config-D2LAsud2.js → config-BmixCpz-.js} +17 -15
  43. package/dist/web/server/assets/{router-CQuj7553.js → router-CIVjTgNp.js} +2 -2
  44. package/dist/web/server/assets/{welcome-IYHGurWx.js → welcome-DDB11L5j.js} +2 -2
  45. package/dist/web/server/server.js +2 -2
  46. package/dist/worker.js +198 -135
  47. package/dist/worker.js.map +1 -1
  48. package/package.json +6 -6
  49. package/dist/web/client/assets/chevron-down-CJk0zGNT.js +0 -1
  50. package/dist/web/client/assets/plus-C3GroITC.js +0 -1
package/dist/worker.js CHANGED
@@ -279,6 +279,20 @@ var SERVICES = [
279
279
  hint: "MiniMax M2/M3 family via the China endpoint",
280
280
  fields: [{ envVar: "MINIMAX_CN_API_KEY", kind: "secret", label: "API key" }]
281
281
  },
282
+ {
283
+ id: "qwen-token-plan",
284
+ displayName: "Qwen Token Plan",
285
+ category: "provider",
286
+ hint: "Coding-model subscription endpoint in Singapore",
287
+ fields: [{ envVar: "QWEN_TOKEN_PLAN_API_KEY", kind: "secret", label: "API key" }]
288
+ },
289
+ {
290
+ id: "qwen-token-plan-cn",
291
+ displayName: "Qwen Token Plan (CN)",
292
+ category: "provider",
293
+ hint: "Coding-model subscription endpoint in China",
294
+ fields: [{ envVar: "QWEN_TOKEN_PLAN_CN_API_KEY", kind: "secret", label: "API key" }]
295
+ },
282
296
  {
283
297
  id: "xiaomi",
284
298
  displayName: "Xiaomi MiMo",
@@ -1177,37 +1191,142 @@ function piMessagesToProviderView(messages) {
1177
1191
  import { existsSync as existsSync13, mkdirSync as mkdirSync5, readdirSync as readdirSync8, statSync as statSync5 } from "fs";
1178
1192
  import { basename as basename3, join as join18 } from "path";
1179
1193
  import {
1180
- AuthStorage,
1181
1194
  createAgentSession,
1182
- createExtensionRuntime,
1183
- ModelRegistry,
1195
+ DefaultResourceLoader,
1184
1196
  SessionManager,
1185
1197
  SettingsManager
1186
1198
  } from "@earendil-works/pi-coding-agent";
1187
1199
 
1188
- // ../daemon/src/runtime/providers/pi-adapter.ts
1189
- import {
1190
- getModel,
1191
- streamSimple,
1192
- Type
1193
- } from "@earendil-works/pi-ai/compat";
1194
- function defaultBaseUrlFor(providerName) {
1200
+ // ../daemon/src/runtime/providers/pi-runtime.ts
1201
+ import { InMemoryCredentialStore } from "@earendil-works/pi-ai";
1202
+ import { ModelRuntime } from "@earendil-works/pi-coding-agent";
1203
+ var PROVIDER_ALIASES = {
1204
+ bedrock: "amazon-bedrock",
1205
+ "azure-openai": "azure-openai-responses"
1206
+ };
1207
+ var LOCAL_PROVIDERS = {
1208
+ lmstudio: {
1209
+ baseUrl: "http://127.0.0.1:1234/v1",
1210
+ apiKey: "lm-studio",
1211
+ authHeader: false
1212
+ },
1213
+ ollama: { baseUrl: "http://127.0.0.1:11434/v1", apiKey: "ollama", authHeader: false },
1214
+ llamacpp: { baseUrl: "http://127.0.0.1:8080/v1", apiKey: "no-key", authHeader: true }
1215
+ };
1216
+ var API_KEY_ENV = {
1217
+ anthropic: ["ANTHROPIC_OAUTH_TOKEN", "ANTHROPIC_API_KEY"],
1218
+ openai: ["OPENAI_API_KEY"],
1219
+ google: ["GEMINI_API_KEY"],
1220
+ "azure-openai": ["AZURE_OPENAI_API_KEY"],
1221
+ mistral: ["MISTRAL_API_KEY"],
1222
+ groq: ["GROQ_API_KEY"],
1223
+ cerebras: ["CEREBRAS_API_KEY"],
1224
+ xai: ["XAI_API_KEY"],
1225
+ zai: ["ZAI_API_KEY"],
1226
+ huggingface: ["HF_TOKEN"],
1227
+ openrouter: ["OPENROUTER_API_KEY"],
1228
+ "vercel-ai-gateway": ["AI_GATEWAY_API_KEY"],
1229
+ deepseek: ["DEEPSEEK_API_KEY"],
1230
+ fireworks: ["FIREWORKS_API_KEY"],
1231
+ together: ["TOGETHER_API_KEY"],
1232
+ moonshotai: ["MOONSHOT_API_KEY"],
1233
+ "moonshotai-cn": ["MOONSHOT_CN_API_KEY"],
1234
+ "kimi-coding": ["KIMI_API_KEY"],
1235
+ minimax: ["MINIMAX_API_KEY"],
1236
+ "minimax-cn": ["MINIMAX_CN_API_KEY"],
1237
+ "qwen-token-plan": ["QWEN_TOKEN_PLAN_API_KEY"],
1238
+ "qwen-token-plan-cn": ["QWEN_TOKEN_PLAN_CN_API_KEY"],
1239
+ xiaomi: ["XIAOMI_API_KEY"],
1240
+ "xiaomi-token-plan-ams": ["XIAOMI_TOKEN_PLAN_AMS_API_KEY"],
1241
+ "xiaomi-token-plan-cn": ["XIAOMI_TOKEN_PLAN_CN_API_KEY"],
1242
+ "xiaomi-token-plan-sgp": ["XIAOMI_TOKEN_PLAN_SGP_API_KEY"],
1243
+ "ant-ling": ["ANT_LING_API_KEY"],
1244
+ nvidia: ["NVIDIA_API_KEY"],
1245
+ opencode: ["OPENCODE_API_KEY"],
1246
+ "opencode-go": ["OPENCODE_GO_API_KEY"],
1247
+ "zai-coding-cn": ["ZAI_CODING_CN_API_KEY"],
1248
+ "github-copilot": ["COPILOT_GITHUB_TOKEN"],
1249
+ "cloudflare-ai-gateway": ["CLOUDFLARE_API_KEY"],
1250
+ "cloudflare-workers-ai": ["CLOUDFLARE_API_KEY"],
1251
+ lmstudio: ["LMSTUDIO_API_KEY"],
1252
+ ollama: ["OLLAMA_API_KEY"],
1253
+ llamacpp: ["LLAMACPP_API_KEY"]
1254
+ };
1255
+ var PROVIDER_ENV = {
1256
+ bedrock: [
1257
+ "AWS_PROFILE",
1258
+ "AWS_BEARER_TOKEN_BEDROCK",
1259
+ "AWS_ACCESS_KEY_ID",
1260
+ "AWS_SECRET_ACCESS_KEY",
1261
+ "AWS_SESSION_TOKEN",
1262
+ "AWS_REGION",
1263
+ "AWS_DEFAULT_REGION"
1264
+ ],
1265
+ "google-vertex": [
1266
+ "GOOGLE_CLOUD_PROJECT",
1267
+ "GOOGLE_CLOUD_LOCATION",
1268
+ "GOOGLE_APPLICATION_CREDENTIALS"
1269
+ ],
1270
+ "cloudflare-ai-gateway": ["CLOUDFLARE_API_KEY", "CLOUDFLARE_ACCOUNT_ID", "CLOUDFLARE_GATEWAY_ID"],
1271
+ "cloudflare-workers-ai": ["CLOUDFLARE_API_KEY", "CLOUDFLARE_ACCOUNT_ID"]
1272
+ };
1273
+ function piProviderName(providerName) {
1274
+ return PROVIDER_ALIASES[providerName] ?? providerName;
1275
+ }
1276
+ function providerApiKey(providerName, env) {
1277
+ for (const name of API_KEY_ENV[providerName] ?? []) {
1278
+ const value = env[name];
1279
+ if (value) return value;
1280
+ }
1281
+ return LOCAL_PROVIDERS[providerName]?.apiKey;
1282
+ }
1283
+ function providerBaseUrl(providerName, env) {
1195
1284
  switch (providerName) {
1196
1285
  case "lmstudio":
1197
- return process.env.LMSTUDIO_URL ?? "http://127.0.0.1:1234/v1";
1286
+ return env.LMSTUDIO_URL ?? LOCAL_PROVIDERS.lmstudio?.baseUrl;
1198
1287
  case "ollama":
1199
- return process.env.OLLAMA_URL ?? "http://127.0.0.1:11434/v1";
1288
+ return env.OLLAMA_URL ?? LOCAL_PROVIDERS.ollama?.baseUrl;
1289
+ case "llamacpp":
1290
+ return env.LLAMACPP_URL ?? LOCAL_PROVIDERS.llamacpp?.baseUrl;
1291
+ case "vercel-ai-gateway":
1292
+ return env.AI_GATEWAY_BASE_URL;
1293
+ default:
1294
+ return void 0;
1295
+ }
1296
+ }
1297
+ function providerCredentialEnv(providerName, env) {
1298
+ const result = {};
1299
+ for (const name of PROVIDER_ENV[providerName] ?? []) {
1300
+ const value = env[name];
1301
+ if (value !== void 0) result[name] = value;
1302
+ }
1303
+ return Object.keys(result).length > 0 ? result : void 0;
1304
+ }
1305
+ function fallbackApi(providerName) {
1306
+ switch (providerName) {
1307
+ case "anthropic":
1308
+ return "anthropic-messages";
1309
+ case "google":
1310
+ return "google-generative-ai";
1311
+ case "google-vertex":
1312
+ return "google-vertex";
1313
+ case "azure-openai":
1314
+ return "azure-openai-responses";
1315
+ case "bedrock":
1316
+ return "bedrock-converse-stream";
1317
+ case "openai-codex":
1318
+ return "openai-codex-responses";
1200
1319
  default:
1201
- return "";
1320
+ return "openai-completions";
1202
1321
  }
1203
1322
  }
1204
- function buildModelLiteral(cfg, modelId) {
1323
+ function fallbackPiModel(providerName, modelId, baseUrl) {
1205
1324
  return {
1206
1325
  id: modelId,
1207
1326
  name: modelId,
1208
- api: cfg.fallbackApi,
1209
- provider: cfg.providerName,
1210
- baseUrl: cfg.baseUrl ?? defaultBaseUrlFor(cfg.providerName),
1327
+ api: fallbackApi(providerName),
1328
+ provider: piProviderName(providerName),
1329
+ baseUrl: baseUrl ?? "",
1211
1330
  reasoning: false,
1212
1331
  input: ["text"],
1213
1332
  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
@@ -1215,24 +1334,50 @@ function buildModelLiteral(cfg, modelId) {
1215
1334
  maxTokens: 4096
1216
1335
  };
1217
1336
  }
1218
- function resolveModel(cfg, modelId) {
1219
- const lookupName = cfg.piProviderName ?? cfg.providerName;
1220
- try {
1221
- const known = getModel(
1222
- lookupName,
1223
- modelId
1224
- );
1225
- if (known && typeof known === "object" && "api" in known) {
1226
- if (cfg.baseUrl) return { ...known, baseUrl: cfg.baseUrl };
1227
- return known;
1228
- }
1229
- } catch {
1337
+ async function createBazilionPiRuntime(options) {
1338
+ const providerName = options.providerName;
1339
+ const canonicalName = piProviderName(providerName);
1340
+ const credentials = new InMemoryCredentialStore();
1341
+ const apiKey = options.apiKey ?? providerApiKey(providerName, options.env);
1342
+ const credentialEnv = providerCredentialEnv(providerName, options.env);
1343
+ if (apiKey || credentialEnv) {
1344
+ await credentials.modify(canonicalName, async () => ({
1345
+ type: "api_key",
1346
+ ...apiKey ? { key: apiKey } : {},
1347
+ ...credentialEnv ? { env: credentialEnv } : {}
1348
+ }));
1349
+ }
1350
+ const runtime = await ModelRuntime.create({ credentials, modelsPath: null });
1351
+ const local = LOCAL_PROVIDERS[providerName];
1352
+ const baseUrl = options.baseUrl ?? providerBaseUrl(providerName, options.env);
1353
+ if (local) {
1354
+ const modelId = options.modelId ?? "model-name";
1355
+ const model = fallbackPiModel(providerName, modelId, baseUrl ?? local.baseUrl);
1356
+ runtime.registerProvider(canonicalName, {
1357
+ baseUrl: baseUrl ?? local.baseUrl,
1358
+ api: "openai-completions",
1359
+ authHeader: local.authHeader,
1360
+ apiKey: apiKey ?? local.apiKey,
1361
+ models: [model]
1362
+ });
1363
+ } else if (baseUrl) {
1364
+ runtime.registerProvider(canonicalName, { baseUrl });
1230
1365
  }
1231
- return buildModelLiteral(cfg, modelId);
1366
+ return runtime;
1367
+ }
1368
+ function resolvePiModel(runtime, providerName, modelId, baseUrl) {
1369
+ const known = runtime.getModel(piProviderName(providerName), modelId);
1370
+ if (known) return baseUrl ? { ...known, baseUrl } : known;
1371
+ return fallbackPiModel(providerName, modelId, baseUrl);
1232
1372
  }
1233
1373
 
1234
1374
  // ../daemon/src/runtime/auth/openai-codex.ts
1235
- import { loginOpenAICodex, refreshOpenAICodexToken } from "@earendil-works/pi-ai/oauth";
1375
+ import { openaiCodexProvider } from "@earendil-works/pi-ai/providers/openai-codex";
1376
+
1377
+ // ../daemon/src/runtime/providers/pi-adapter.ts
1378
+ import {
1379
+ Type
1380
+ } from "@earendil-works/pi-ai";
1236
1381
 
1237
1382
  // ../daemon/src/runtime/session/prompt.ts
1238
1383
  import { existsSync as existsSync10, readdirSync as readdirSync6, readFileSync as readFileSync9 } from "fs";
@@ -3713,30 +3858,16 @@ async function createBazilionSession(opts) {
3713
3858
  if (enabledProviders.size > 0 && !enabledProviders.has(providerName)) {
3714
3859
  throw new Error(`${providerName} provider is disabled \u2014 enable it on the /config page`);
3715
3860
  }
3716
- const piProviderName = mapProviderName(providerName);
3717
- const model = resolveModel(
3718
- {
3719
- providerName,
3720
- piProviderName,
3721
- fallbackApi: pickFallbackApi(providerName),
3722
- baseUrl: resolveBaseUrl(providerName, env)
3723
- },
3861
+ const apiKey = opts.apiKey ?? providerApiKey(providerName, env);
3862
+ const baseUrl = providerBaseUrl(providerName, env);
3863
+ const modelRuntime = await createBazilionPiRuntime({
3864
+ providerName,
3865
+ env,
3866
+ ...apiKey ? { apiKey } : {},
3867
+ ...baseUrl ? { baseUrl } : {},
3724
3868
  modelId
3725
- );
3726
- const apiKey = opts.apiKey ?? resolveApiKey(providerName, env);
3727
- const authStorage = AuthStorage.inMemory();
3728
- if (apiKey) {
3729
- authStorage.setRuntimeApiKey(piProviderName, apiKey);
3730
- }
3731
- const modelRegistry = ModelRegistry.inMemory(authStorage);
3732
- if (providerName === "lmstudio" || providerName === "ollama") {
3733
- modelRegistry.registerProvider(piProviderName, {
3734
- baseUrl: model.baseUrl,
3735
- api: "openai-completions",
3736
- authHeader: false,
3737
- apiKey: apiKey ?? "dummy"
3738
- });
3739
- }
3869
+ });
3870
+ const model = resolvePiModel(modelRuntime, providerName, modelId, baseUrl);
3740
3871
  const cwd = agent.team.path;
3741
3872
  if (!existsSync13(cwd)) mkdirSync5(cwd, { recursive: true });
3742
3873
  const promptSkills = restricted ? [] : loadPromptSkills(paths.skillsDir, agent.skills);
@@ -3766,7 +3897,17 @@ async function createBazilionSession(opts) {
3766
3897
  skills: promptSkills,
3767
3898
  sandboxMode: shellTools?.config.sandboxMode ?? "off"
3768
3899
  });
3769
- const resourceLoader = createBazilionResourceLoader(bazilionPrompt);
3900
+ const resourceLoader = new DefaultResourceLoader({
3901
+ cwd,
3902
+ agentDir: join18(paths.home, "pi"),
3903
+ settingsManager,
3904
+ noExtensions: true,
3905
+ noSkills: true,
3906
+ noPromptTemplates: true,
3907
+ noThemes: true,
3908
+ noContextFiles: true,
3909
+ appendSystemPrompt: bazilionPrompt ? [bazilionPrompt] : void 0
3910
+ });
3770
3911
  await resourceLoader.reload();
3771
3912
  const bazilionTools = restricted ? restricted.tools : createBazilionCustomTools({
3772
3913
  agent,
@@ -3790,13 +3931,12 @@ async function createBazilionSession(opts) {
3790
3931
  customTools,
3791
3932
  sessionManager,
3792
3933
  settingsManager,
3793
- authStorage,
3794
- modelRegistry,
3934
+ modelRuntime,
3795
3935
  resourceLoader
3796
3936
  });
3797
3937
  if (refreshApiKey) {
3798
3938
  session.agent.getApiKey = async (requestedProvider) => {
3799
- if (requestedProvider !== piProviderName) return void 0;
3939
+ if (requestedProvider !== piProviderName(providerName)) return void 0;
3800
3940
  try {
3801
3941
  return await refreshApiKey(providerName);
3802
3942
  } catch {
@@ -3818,67 +3958,6 @@ function splitModelString(s) {
3818
3958
  }
3819
3959
  return { providerName: s.slice(0, idx), modelId: s.slice(idx + 1) };
3820
3960
  }
3821
- function mapProviderName(name) {
3822
- if (name === "bedrock") return "amazon-bedrock";
3823
- return name;
3824
- }
3825
- function pickFallbackApi(providerName) {
3826
- switch (providerName) {
3827
- case "anthropic":
3828
- return "anthropic-messages";
3829
- case "google":
3830
- return "google-generative-ai";
3831
- case "google-vertex":
3832
- return "google-vertex";
3833
- case "azure-openai":
3834
- return "azure-openai-responses";
3835
- case "bedrock":
3836
- return "bedrock-converse-stream";
3837
- case "openai-codex":
3838
- return "openai-codex-responses";
3839
- default:
3840
- return "openai-completions";
3841
- }
3842
- }
3843
- function resolveBaseUrl(providerName, env) {
3844
- if (providerName === "lmstudio") return env.LMSTUDIO_URL ?? "http://127.0.0.1:1234/v1";
3845
- if (providerName === "ollama") return env.OLLAMA_URL ?? "http://127.0.0.1:11434/v1";
3846
- return void 0;
3847
- }
3848
- function resolveApiKey(providerName, env) {
3849
- switch (providerName) {
3850
- case "anthropic":
3851
- return env.ANTHROPIC_OAUTH_TOKEN ?? env.ANTHROPIC_API_KEY;
3852
- case "openai":
3853
- return env.OPENAI_API_KEY;
3854
- case "google":
3855
- return env.GEMINI_API_KEY;
3856
- case "mistral":
3857
- return env.MISTRAL_API_KEY;
3858
- case "groq":
3859
- return env.GROQ_API_KEY;
3860
- case "cerebras":
3861
- return env.CEREBRAS_API_KEY;
3862
- case "xai":
3863
- return env.XAI_API_KEY;
3864
- case "zai":
3865
- return env.ZAI_API_KEY;
3866
- case "huggingface":
3867
- return env.HF_TOKEN;
3868
- case "openrouter":
3869
- return env.OPENROUTER_API_KEY;
3870
- case "vercel-ai-gateway":
3871
- return env.AI_GATEWAY_API_KEY;
3872
- case "azure-openai":
3873
- return env.AZURE_OPENAI_API_KEY;
3874
- case "lmstudio":
3875
- return env.LMSTUDIO_API_KEY ?? "lm-studio";
3876
- case "ollama":
3877
- return env.OLLAMA_API_KEY ?? "ollama";
3878
- default:
3879
- return void 0;
3880
- }
3881
- }
3882
3961
  function toPiThinkingLevel(level) {
3883
3962
  switch (level) {
3884
3963
  case "off":
@@ -3892,22 +3971,6 @@ function toPiThinkingLevel(level) {
3892
3971
  return "medium";
3893
3972
  }
3894
3973
  }
3895
- function createBazilionResourceLoader(appendSystemPrompt) {
3896
- const extensions = { extensions: [], errors: [], runtime: createExtensionRuntime() };
3897
- return {
3898
- getExtensions: () => extensions,
3899
- getSkills: () => ({ skills: [], diagnostics: [] }),
3900
- getPrompts: () => ({ prompts: [], diagnostics: [] }),
3901
- getThemes: () => ({ themes: [], diagnostics: [] }),
3902
- getAgentsFiles: () => ({ agentsFiles: [] }),
3903
- getSystemPrompt: () => void 0,
3904
- getAppendSystemPrompt: () => appendSystemPrompt ? [appendSystemPrompt] : [],
3905
- extendResources: () => {
3906
- },
3907
- async reload() {
3908
- }
3909
- };
3910
- }
3911
3974
  function findMostRecent(sessionDir) {
3912
3975
  if (!existsSync13(sessionDir)) return null;
3913
3976
  let newest = null;