srpllm 1.2.5 → 1.2.7

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/cli.mjs CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import cac from 'cac';
3
3
  import ansis from 'ansis';
4
- import { i as init, u as uninstall, O as version } from './shared/srpllm.CsoL3qR-.mjs';
4
+ import { i as init, u as uninstall, P as version } from './shared/srpllm.BvbGqIfZ.mjs';
5
+ import 'node:child_process';
5
6
  import 'node:fs';
6
7
  import 'node:os';
7
8
  import 'node:process';
package/dist/index.d.mts CHANGED
@@ -29,6 +29,7 @@ interface CodexApiConfig {
29
29
  }
30
30
  declare function getExistingCodexConfig(): CodexApiConfig | null;
31
31
  declare function writeCodexApiConfig(config: CodexApiConfig): void;
32
+ declare function enableCodexFullAccess(): void;
32
33
  declare function clearCodexApiConfig(): void;
33
34
  declare function displayCodexConfig(config: CodexApiConfig): void;
34
35
 
@@ -75,6 +76,7 @@ declare function selectInstallMethod(tool: CodeToolType): Promise<InstallMethod>
75
76
  declare function installTool(tool: CodeToolType, skipMethodSelection?: boolean): Promise<void>;
76
77
  declare function uninstallTool(tool: CodeToolType): Promise<boolean>;
77
78
 
79
+ declare const SRPLLM_DIR: string;
78
80
  interface LocalConfig {
79
81
  /** 上次选的工具 */
80
82
  codeType?: 'claude-code' | 'codex' | 'chatbox';
@@ -129,5 +131,5 @@ declare function getPlatform(): Platform;
129
131
  declare function isWindows(): boolean;
130
132
  declare function commandExists(command: string): Promise<boolean>;
131
133
 
132
- export { CLAUDE_DIR, CLAUDE_SETTINGS_FILE, CODEX_AUTH_FILE, CODEX_CONFIG_FILE, CODEX_DIR, CODE_TOOL_ALIASES, CODE_TOOL_LABELS, CODE_TOOL_TYPES, DEFAULT_CODE_TOOL_TYPE, MODEL_PREFIX, RELAY_PROVIDER_ID, RELAY_TOOL_TYPES, buildModelsChoices, clearClaudeApiConfig, clearCodexApiConfig, commandExists, detectInstalledVersion, displayClaudeConfig, displayCodexConfig, ensureClaudeDir, fetchModels, filterByPrefix, getExistingClaudeApiConfig, getExistingCodexConfig, getPlatform, init, installTool, isCliTool, isCodeToolType, isToolInstalled, isWindows, readClaudeSettings, readLocalConfig, resolveCodeToolType, selectInstallMethod, uninstall, uninstallTool, updateLocalConfig, writeClaudeApiConfig, writeCodexApiConfig, writeLocalConfig };
134
+ export { CLAUDE_DIR, CLAUDE_SETTINGS_FILE, CODEX_AUTH_FILE, CODEX_CONFIG_FILE, CODEX_DIR, CODE_TOOL_ALIASES, CODE_TOOL_LABELS, CODE_TOOL_TYPES, DEFAULT_CODE_TOOL_TYPE, MODEL_PREFIX, RELAY_PROVIDER_ID, RELAY_TOOL_TYPES, SRPLLM_DIR, buildModelsChoices, clearClaudeApiConfig, clearCodexApiConfig, commandExists, detectInstalledVersion, displayClaudeConfig, displayCodexConfig, enableCodexFullAccess, ensureClaudeDir, fetchModels, filterByPrefix, getExistingClaudeApiConfig, getExistingCodexConfig, getPlatform, init, installTool, isCliTool, isCodeToolType, isToolInstalled, isWindows, readClaudeSettings, readLocalConfig, resolveCodeToolType, selectInstallMethod, uninstall, uninstallTool, updateLocalConfig, writeClaudeApiConfig, writeCodexApiConfig, writeLocalConfig };
133
135
  export type { ClaudeApiConfig, CodeToolType, CodexApiConfig, InstallMethod, LocalConfig, RelayToolType, RemoteModel };
package/dist/index.d.ts CHANGED
@@ -29,6 +29,7 @@ interface CodexApiConfig {
29
29
  }
30
30
  declare function getExistingCodexConfig(): CodexApiConfig | null;
31
31
  declare function writeCodexApiConfig(config: CodexApiConfig): void;
32
+ declare function enableCodexFullAccess(): void;
32
33
  declare function clearCodexApiConfig(): void;
33
34
  declare function displayCodexConfig(config: CodexApiConfig): void;
34
35
 
@@ -75,6 +76,7 @@ declare function selectInstallMethod(tool: CodeToolType): Promise<InstallMethod>
75
76
  declare function installTool(tool: CodeToolType, skipMethodSelection?: boolean): Promise<void>;
76
77
  declare function uninstallTool(tool: CodeToolType): Promise<boolean>;
77
78
 
79
+ declare const SRPLLM_DIR: string;
78
80
  interface LocalConfig {
79
81
  /** 上次选的工具 */
80
82
  codeType?: 'claude-code' | 'codex' | 'chatbox';
@@ -129,5 +131,5 @@ declare function getPlatform(): Platform;
129
131
  declare function isWindows(): boolean;
130
132
  declare function commandExists(command: string): Promise<boolean>;
131
133
 
132
- export { CLAUDE_DIR, CLAUDE_SETTINGS_FILE, CODEX_AUTH_FILE, CODEX_CONFIG_FILE, CODEX_DIR, CODE_TOOL_ALIASES, CODE_TOOL_LABELS, CODE_TOOL_TYPES, DEFAULT_CODE_TOOL_TYPE, MODEL_PREFIX, RELAY_PROVIDER_ID, RELAY_TOOL_TYPES, buildModelsChoices, clearClaudeApiConfig, clearCodexApiConfig, commandExists, detectInstalledVersion, displayClaudeConfig, displayCodexConfig, ensureClaudeDir, fetchModels, filterByPrefix, getExistingClaudeApiConfig, getExistingCodexConfig, getPlatform, init, installTool, isCliTool, isCodeToolType, isToolInstalled, isWindows, readClaudeSettings, readLocalConfig, resolveCodeToolType, selectInstallMethod, uninstall, uninstallTool, updateLocalConfig, writeClaudeApiConfig, writeCodexApiConfig, writeLocalConfig };
134
+ export { CLAUDE_DIR, CLAUDE_SETTINGS_FILE, CODEX_AUTH_FILE, CODEX_CONFIG_FILE, CODEX_DIR, CODE_TOOL_ALIASES, CODE_TOOL_LABELS, CODE_TOOL_TYPES, DEFAULT_CODE_TOOL_TYPE, MODEL_PREFIX, RELAY_PROVIDER_ID, RELAY_TOOL_TYPES, SRPLLM_DIR, buildModelsChoices, clearClaudeApiConfig, clearCodexApiConfig, commandExists, detectInstalledVersion, displayClaudeConfig, displayCodexConfig, enableCodexFullAccess, ensureClaudeDir, fetchModels, filterByPrefix, getExistingClaudeApiConfig, getExistingCodexConfig, getPlatform, init, installTool, isCliTool, isCodeToolType, isToolInstalled, isWindows, readClaudeSettings, readLocalConfig, resolveCodeToolType, selectInstallMethod, uninstall, uninstallTool, updateLocalConfig, writeClaudeApiConfig, writeCodexApiConfig, writeLocalConfig };
133
135
  export type { ClaudeApiConfig, CodeToolType, CodexApiConfig, InstallMethod, LocalConfig, RelayToolType, RemoteModel };
package/dist/index.mjs CHANGED
@@ -1,4 +1,5 @@
1
- export { C as CLAUDE_DIR, b as CLAUDE_SETTINGS_FILE, f as CODEX_AUTH_FILE, e as CODEX_CONFIG_FILE, d as CODEX_DIR, j as CODE_TOOL_ALIASES, k as CODE_TOOL_LABELS, h as CODE_TOOL_TYPES, D as DEFAULT_CODE_TOOL_TYPE, M as MODEL_PREFIX, n as RELAY_PROVIDER_ID, R as RELAY_TOOL_TYPES, L as buildModelsChoices, s as clearClaudeApiConfig, y as clearCodexApiConfig, c as commandExists, B as detectInstalledVersion, t as displayClaudeConfig, z as displayCodexConfig, o as ensureClaudeDir, K as fetchModels, N as filterByPrefix, q as getExistingClaudeApiConfig, v as getExistingCodexConfig, g as getPlatform, i as init, F as installTool, m as isCliTool, l as isCodeToolType, A as isToolInstalled, a as isWindows, p as readClaudeSettings, H as readLocalConfig, r as resolveCodeToolType, E as selectInstallMethod, u as uninstall, G as uninstallTool, J as updateLocalConfig, w as writeClaudeApiConfig, x as writeCodexApiConfig, I as writeLocalConfig } from './shared/srpllm.CsoL3qR-.mjs';
1
+ export { C as CLAUDE_DIR, b as CLAUDE_SETTINGS_FILE, f as CODEX_AUTH_FILE, e as CODEX_CONFIG_FILE, d as CODEX_DIR, j as CODE_TOOL_ALIASES, k as CODE_TOOL_LABELS, h as CODE_TOOL_TYPES, D as DEFAULT_CODE_TOOL_TYPE, M as MODEL_PREFIX, n as RELAY_PROVIDER_ID, R as RELAY_TOOL_TYPES, S as SRPLLM_DIR, N as buildModelsChoices, s as clearClaudeApiConfig, z as clearCodexApiConfig, c as commandExists, E as detectInstalledVersion, t as displayClaudeConfig, A as displayCodexConfig, y as enableCodexFullAccess, o as ensureClaudeDir, L as fetchModels, O as filterByPrefix, q as getExistingClaudeApiConfig, v as getExistingCodexConfig, g as getPlatform, i as init, G as installTool, m as isCliTool, l as isCodeToolType, B as isToolInstalled, a as isWindows, p as readClaudeSettings, I as readLocalConfig, r as resolveCodeToolType, F as selectInstallMethod, u as uninstall, H as uninstallTool, K as updateLocalConfig, w as writeClaudeApiConfig, x as writeCodexApiConfig, J as writeLocalConfig } from './shared/srpllm.BvbGqIfZ.mjs';
2
+ import 'node:child_process';
2
3
  import 'node:fs';
3
4
  import 'node:os';
4
5
  import 'node:process';
@@ -1,3 +1,4 @@
1
+ import { execSync } from 'node:child_process';
1
2
  import { existsSync, readFileSync, writeFileSync, mkdirSync, chmodSync, unlinkSync } from 'node:fs';
2
3
  import { homedir, platform } from 'node:os';
3
4
  import process from 'node:process';
@@ -284,6 +285,40 @@ function writeCodexApiConfig(config) {
284
285
  auth.OPENAI_API_KEY = config.token;
285
286
  writeJson(CODEX_AUTH_FILE, auth);
286
287
  }
288
+ function applyCodexFullAccess(content) {
289
+ const settings = {
290
+ sandbox_mode: "danger-full-access",
291
+ approval_policy: "never"
292
+ };
293
+ const lines = content.split("\n");
294
+ let firstSection = lines.findIndex((line) => /^\s*\[[^\]]+\]/.test(line));
295
+ if (firstSection === -1)
296
+ firstSection = lines.length;
297
+ const seen = /* @__PURE__ */ new Set();
298
+ const processed = [];
299
+ for (const line of lines.slice(0, firstSection)) {
300
+ const match = line.match(/^\s*(sandbox_mode|approval_policy)\s*=/);
301
+ if (match) {
302
+ const key = match[1];
303
+ processed.push(`${key} = "${settings[key]}"`);
304
+ seen.add(key);
305
+ } else {
306
+ processed.push(line);
307
+ }
308
+ }
309
+ for (const key of Object.keys(settings)) {
310
+ if (!seen.has(key))
311
+ processed.push(`${key} = "${settings[key]}"`);
312
+ }
313
+ const result = [...processed, ...lines.slice(firstSection)].join("\n").replace(/\n{3,}/g, "\n\n").trimEnd();
314
+ return `${result}
315
+ `;
316
+ }
317
+ function enableCodexFullAccess() {
318
+ if (!exists(CODEX_CONFIG_FILE))
319
+ return;
320
+ writeFile(CODEX_CONFIG_FILE, applyCodexFullAccess(readFileRaw(CODEX_CONFIG_FILE)));
321
+ }
287
322
  function clearCodexApiConfig() {
288
323
  if (exists(CODEX_CONFIG_FILE)) {
289
324
  const backup = `${CODEX_CONFIG_FILE}.backup_${timestamp()}`;
@@ -511,6 +546,26 @@ function updateLocalConfig(patch) {
511
546
  writeLocalConfig({ ...existing, ...patch });
512
547
  }
513
548
 
549
+ const MODEL_CACHE_FILE = join(SRPLLM_DIR, "models-cache.json");
550
+ function cacheKey(baseUrl) {
551
+ return baseUrl.replace(/\/+$/, "").trim().toLowerCase();
552
+ }
553
+ function readModelCache(baseUrl) {
554
+ const store = readJson(MODEL_CACHE_FILE);
555
+ if (!store)
556
+ return null;
557
+ const entry = store[cacheKey(baseUrl)];
558
+ return entry && Array.isArray(entry.models) ? entry : null;
559
+ }
560
+ function writeModelCache(baseUrl, models) {
561
+ const store = readJson(MODEL_CACHE_FILE) || {};
562
+ store[cacheKey(baseUrl)] = {
563
+ models,
564
+ fetchedAt: (/* @__PURE__ */ new Date()).toISOString()
565
+ };
566
+ writeJson(MODEL_CACHE_FILE, store);
567
+ }
568
+
514
569
  const LITELLM_WILDCARD_IDS = /* @__PURE__ */ new Set([
515
570
  "all-proxy-models",
516
571
  "all-team-models",
@@ -568,7 +623,7 @@ function filterByPrefix(models, prefix) {
568
623
  return models.filter((m) => m.id.toLowerCase().startsWith(p));
569
624
  }
570
625
 
571
- const version = "1.2.5";
626
+ const version = "1.2.7";
572
627
 
573
628
  function displayBanner(codeTool) {
574
629
  const tool = codeTool ? ` ${ansis.gray(`\xB7 ${CODE_TOOL_LABELS[codeTool]}`)}` : "";
@@ -650,10 +705,50 @@ async function fetchModelList(baseUrl, token) {
650
705
  return null;
651
706
  }
652
707
  }
653
- async function fetchFilteredModels(baseUrl, token, prefix) {
708
+ function formatAge(ms) {
709
+ const sec = Math.floor(ms / 1e3);
710
+ if (sec < 60)
711
+ return `${sec} \u79D2`;
712
+ const min = Math.floor(sec / 60);
713
+ if (min < 60)
714
+ return `${min} \u5206\u949F`;
715
+ const hr = Math.floor(min / 60);
716
+ if (hr < 24)
717
+ return `${hr} \u5C0F\u65F6`;
718
+ const day = Math.floor(hr / 24);
719
+ if (day < 30)
720
+ return `${day} \u5929`;
721
+ const month = Math.floor(day / 30);
722
+ if (month < 12)
723
+ return `${month} \u4E2A\u6708`;
724
+ return `${Math.floor(month / 12)} \u5E74`;
725
+ }
726
+ async function tryCachedModels(baseUrl, prefix, skipPrompt) {
727
+ const cache = readModelCache(baseUrl);
728
+ if (!cache || cache.models.length === 0)
729
+ return null;
730
+ const ageStr = formatAge(Date.now() - new Date(cache.fetchedAt).getTime());
731
+ const filtered = filterByPrefix(cache.models, prefix);
732
+ if (skipPrompt) {
733
+ if (filtered.length > 0) {
734
+ console.log(ansis.gray(`\u2139 \u62C9\u53D6\u5931\u8D25\uFF0C\u5DF2\u56DE\u9000\u5230\u672C\u5730\u7F13\u5B58\u6A21\u578B\u5217\u8868\uFF08${ageStr}\u524D\u62C9\u53D6\uFF0C\u5171 ${cache.models.length} \u4E2A\uFF0C\u8FC7\u6EE4\u540E ${filtered.length} \u4E2A ${prefix}*\uFF09`));
735
+ return filtered;
736
+ }
737
+ return null;
738
+ }
739
+ const hint = filtered.length > 0 ? `\u5171 ${cache.models.length} \u4E2A\u6A21\u578B\uFF0C\u5176\u4E2D ${filtered.length} \u4E2A ${prefix}*` : `\u5171 ${cache.models.length} \u4E2A\u6A21\u578B\uFF0C\u4F46\u65E0 ${prefix}* \u524D\u7F00`;
740
+ console.log(ansis.yellow(`
741
+ \u2139 \u62C9\u53D6\u6A21\u578B\u5217\u8868\u5931\u8D25\uFF0C\u68C0\u6D4B\u5230\u672C\u5730\u7F13\u5B58\uFF08${ageStr}\u524D\uFF0C${hint}\uFF09`));
742
+ const useCache = await confirm("\u662F\u5426\u4F7F\u7528\u672C\u5730\u7F13\u5B58\u7684\u6A21\u578B\u5217\u8868\uFF1F", true);
743
+ if (!useCache)
744
+ return null;
745
+ return filtered.length > 0 ? filtered : null;
746
+ }
747
+ async function fetchFilteredModels(baseUrl, token, prefix, skipPrompt) {
654
748
  const allModels = await fetchModelList(baseUrl, token);
655
749
  if (!allModels)
656
- return null;
750
+ return tryCachedModels(baseUrl, prefix, skipPrompt);
751
+ writeModelCache(baseUrl, allModels);
657
752
  const filtered = filterByPrefix(allModels, prefix);
658
753
  if (filtered.length === 0) {
659
754
  console.log(ansis.yellow(`\u2139 \u5DF2\u83B7\u53D6 ${allModels.length} \u4E2A\u6A21\u578B\uFF0C\u4F46\u65E0 ${prefix}* \u524D\u7F00\u7684\u6A21\u578B\uFF0C\u53EF\u624B\u52A8\u8F93\u5165`));
@@ -709,7 +804,7 @@ async function configureClaudeCode(options, baseUrl, token, memory) {
709
804
  return;
710
805
  }
711
806
  }
712
- const models = await fetchFilteredModels(baseUrl, token, MODEL_PREFIX["claude-code"]);
807
+ const models = await fetchFilteredModels(baseUrl, token, MODEL_PREFIX["claude-code"], options.skipPrompt);
713
808
  const m = memory.claude;
714
809
  const model = await promptModelFromList(models, "\u8BF7\u9009\u62E9\u4E3B\u6A21\u578B (ANTHROPIC_MODEL)\uFF1A", options.model, options.skipPrompt, m?.model);
715
810
  const opusModel = await promptModelFromList(models, "\u8BF7\u9009\u62E9 Opus \u6863\u6A21\u578B (ANTHROPIC_DEFAULT_OPUS_MODEL)\uFF1A", options.opusModel, options.skipPrompt, m?.opusModel);
@@ -719,6 +814,7 @@ async function configureClaudeCode(options, baseUrl, token, memory) {
719
814
  writeClaudeApiConfig(config);
720
815
  console.log(ansis.green("\n\u2714 Claude Code \u914D\u7F6E\u5B8C\u6210"));
721
816
  displayClaudeConfig(config);
817
+ console.log(ansis.yellow("\n \u2139 \u63D0\u793A\uFF1A\u542F\u52A8\u65F6\u9644\u52A0 --dangerously-skip-permissions \u53EF\u8DF3\u8FC7\u6743\u9650\u786E\u8BA4\u3001\u6388\u4E88\u5B8C\u5168\u6743\u9650"));
722
818
  updateLocalConfig({ claude: { model, opusModel, sonnetModel, haikuModel } });
723
819
  }
724
820
  async function configureCodex(options, baseUrl, token, memory) {
@@ -735,12 +831,30 @@ async function configureCodex(options, baseUrl, token, memory) {
735
831
  return;
736
832
  }
737
833
  }
738
- const models = await fetchFilteredModels(baseUrl, token, MODEL_PREFIX.codex);
834
+ const models = await fetchFilteredModels(baseUrl, token, MODEL_PREFIX.codex, options.skipPrompt);
739
835
  const model = await promptModelFromList(models, "\u8BF7\u9009\u62E9\u9ED8\u8BA4\u4F7F\u7528\u7684\u6A21\u578B\uFF1A", options.model, options.skipPrompt, memory.codex?.model);
740
836
  const config = { baseUrl, token, model };
741
837
  writeCodexApiConfig(config);
742
838
  console.log(ansis.green("\n\u2714 Codex \u914D\u7F6E\u5B8C\u6210"));
743
839
  displayCodexConfig(config);
840
+ if (process.platform === "win32") {
841
+ try {
842
+ const output = execSync('pwsh -NoProfile -Command "(Get-Command pwsh).Source"', { encoding: "utf-8", stdio: ["pipe", "pipe", "ignore"] }).trim();
843
+ if (output.includes("WindowsApps")) {
844
+ console.log(ansis.yellow("\n\u26A0 \u68C0\u6D4B\u5230\u4F60\u4F7F\u7528\u7684\u662F\u5FAE\u8F6F\u5546\u5E97\u7248\u7684 PowerShell (pwsh)"));
845
+ console.log(ansis.gray(" \u8FD9\u4F1A\u5BFC\u81F4 Codex \u7684 Windows \u6C99\u76D2\u529F\u80FD\u51FA\u73B0 CreateProcessAsUserW failed: 5 \u6743\u9650\u9519\u8BEF\u3002"));
846
+ const shouldApply = options.skipPrompt ? true : await confirm("\u662F\u5426\u81EA\u52A8\u5728 Codex \u914D\u7F6E\u4E2D\u6388\u4E88\u5B8C\u5168\u8BBF\u95EE\u6743\u9650\u5E76\u5173\u95ED\u5BA1\u6279\u4EE5\u907F\u514D\u62A5\u9519\uFF1F", true);
847
+ if (shouldApply) {
848
+ enableCodexFullAccess();
849
+ console.log(ansis.green("\u2714 \u5DF2\u6388\u4E88\u5B8C\u5168\u8BBF\u95EE\u6743\u9650\uFF08sandbox_mode = danger-full-access\uFF09\u5E76\u5173\u95ED\u5BA1\u6279\uFF08approval_policy = never\uFF09"));
850
+ console.log(ansis.gray(" \u2139 \u7B49\u4EF7\u4E8E --dangerously-bypass-approvals-and-sandbox\uFF0CCodex \u542F\u52A8\u540E\u5C06\u8FDB\u5165 YOLO \u6A21\u5F0F"));
851
+ } else {
852
+ console.log(ansis.yellow("\u2139 \u5DF2\u8DF3\u8FC7\uFF0C\u82E5\u540E\u7EED\u8FD0\u884C\u62A5\u9519\uFF0C\u8BF7\u67E5\u9605\u6587\u6863\u6216\u624B\u52A8\u914D\u7F6E sandbox_mode / approval_policy"));
853
+ }
854
+ }
855
+ } catch {
856
+ }
857
+ }
744
858
  updateLocalConfig({ codex: { model } });
745
859
  }
746
860
  function getDownloadsDir() {
@@ -758,7 +872,7 @@ function getDownloadsDir() {
758
872
  return fallback;
759
873
  }
760
874
  async function configureChatbox(options, baseUrl, token, memory) {
761
- const models = await fetchFilteredModels(baseUrl, token, MODEL_PREFIX.chatbox);
875
+ const models = await fetchFilteredModels(baseUrl, token, MODEL_PREFIX.chatbox, options.skipPrompt);
762
876
  const model = await promptModelFromList(models, "\u8BF7\u9009\u62E9\u9ED8\u8BA4\u6A21\u578B\uFF08chat- \u524D\u7F00\uFF09\uFF1A", options.model, options.skipPrompt, memory.chatbox?.model);
763
877
  const downloads = getDownloadsDir();
764
878
  const filePath = join(downloads, "srpllm-chatbox-config.yaml");
@@ -905,4 +1019,4 @@ ${ansis.cyan("\u{1F389} \u6E05\u7406\u5B8C\u6210")}`);
905
1019
  }
906
1020
  }
907
1021
 
908
- export { isToolInstalled as A, detectInstalledVersion as B, CLAUDE_DIR as C, DEFAULT_CODE_TOOL_TYPE as D, selectInstallMethod as E, installTool as F, uninstallTool as G, readLocalConfig as H, writeLocalConfig as I, updateLocalConfig as J, fetchModels as K, buildModelsChoices as L, MODEL_PREFIX as M, filterByPrefix as N, version as O, RELAY_TOOL_TYPES as R, isWindows as a, CLAUDE_SETTINGS_FILE as b, commandExists as c, CODEX_DIR as d, CODEX_CONFIG_FILE as e, CODEX_AUTH_FILE as f, getPlatform as g, CODE_TOOL_TYPES as h, init as i, CODE_TOOL_ALIASES as j, CODE_TOOL_LABELS as k, isCodeToolType as l, isCliTool as m, RELAY_PROVIDER_ID as n, ensureClaudeDir as o, readClaudeSettings as p, getExistingClaudeApiConfig as q, resolveCodeToolType as r, clearClaudeApiConfig as s, displayClaudeConfig as t, uninstall as u, getExistingCodexConfig as v, writeClaudeApiConfig as w, writeCodexApiConfig as x, clearCodexApiConfig as y, displayCodexConfig as z };
1022
+ export { displayCodexConfig as A, isToolInstalled as B, CLAUDE_DIR as C, DEFAULT_CODE_TOOL_TYPE as D, detectInstalledVersion as E, selectInstallMethod as F, installTool as G, uninstallTool as H, readLocalConfig as I, writeLocalConfig as J, updateLocalConfig as K, fetchModels as L, MODEL_PREFIX as M, buildModelsChoices as N, filterByPrefix as O, version as P, RELAY_TOOL_TYPES as R, SRPLLM_DIR as S, isWindows as a, CLAUDE_SETTINGS_FILE as b, commandExists as c, CODEX_DIR as d, CODEX_CONFIG_FILE as e, CODEX_AUTH_FILE as f, getPlatform as g, CODE_TOOL_TYPES as h, init as i, CODE_TOOL_ALIASES as j, CODE_TOOL_LABELS as k, isCodeToolType as l, isCliTool as m, RELAY_PROVIDER_ID as n, ensureClaudeDir as o, readClaudeSettings as p, getExistingClaudeApiConfig as q, resolveCodeToolType as r, clearClaudeApiConfig as s, displayClaudeConfig as t, uninstall as u, getExistingCodexConfig as v, writeClaudeApiConfig as w, writeCodexApiConfig as x, enableCodexFullAccess as y, clearCodexApiConfig as z };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "srpllm",
3
3
  "type": "module",
4
- "version": "1.2.5",
4
+ "version": "1.2.7",
5
5
  "packageManager": "pnpm@10.17.1",
6
6
  "description": "SrP-LLM 中转站客户端一键配置工具:安装 Claude Code / Codex 并引导填写 base_url、api_token 与模型",
7
7
  "author": {