@kaitranntt/ccs 7.67.0-dev.2 → 7.67.0-dev.4
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/api/services/index.d.ts +1 -0
- package/dist/api/services/index.d.ts.map +1 -1
- package/dist/api/services/index.js +3 -1
- package/dist/api/services/index.js.map +1 -1
- package/dist/api/services/local-runtime-readiness.d.ts +14 -0
- package/dist/api/services/local-runtime-readiness.d.ts.map +1 -0
- package/dist/api/services/local-runtime-readiness.js +89 -0
- package/dist/api/services/local-runtime-readiness.js.map +1 -0
- package/dist/cliproxy/catalog-routing.d.ts +12 -0
- package/dist/cliproxy/catalog-routing.d.ts.map +1 -0
- package/dist/cliproxy/catalog-routing.js +19 -0
- package/dist/cliproxy/catalog-routing.js.map +1 -0
- package/dist/cliproxy/managed-model-prefixes.d.ts +7 -0
- package/dist/cliproxy/managed-model-prefixes.d.ts.map +1 -0
- package/dist/cliproxy/managed-model-prefixes.js +116 -0
- package/dist/cliproxy/managed-model-prefixes.js.map +1 -0
- package/dist/commands/cliproxy/catalog-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/catalog-subcommand.js +60 -6
- package/dist/commands/cliproxy/catalog-subcommand.js.map +1 -1
- package/dist/commands/cliproxy/help-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/help-subcommand.js +3 -2
- package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
- package/dist/commands/cliproxy/variant-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/variant-subcommand.js +44 -3
- package/dist/commands/cliproxy/variant-subcommand.js.map +1 -1
- package/dist/shared/cliproxy-model-routing.d.ts +45 -0
- package/dist/shared/cliproxy-model-routing.d.ts.map +1 -0
- package/dist/shared/cliproxy-model-routing.js +144 -0
- package/dist/shared/cliproxy-model-routing.js.map +1 -0
- package/dist/ui/assets/{accounts-ls0hXYZ9.js → accounts-Db3fdubh.js} +1 -1
- package/dist/ui/assets/{alert-dialog-DJMw_zyc.js → alert-dialog-CCBNN27x.js} +1 -1
- package/dist/ui/assets/api-bpaccUPS.js +4 -0
- package/dist/ui/assets/{auth-section-BD8XqTiz.js → auth-section-Fc79zkWo.js} +1 -1
- package/dist/ui/assets/{backups-section-COOSGu9k.js → backups-section-EfrBLM-L.js} +1 -1
- package/dist/ui/assets/{channels-AGHzxMPw.js → channels-B9zb0Dlc.js} +1 -1
- package/dist/ui/assets/{checkbox-pojB3pE7.js → checkbox-Bi0MadiP.js} +1 -1
- package/dist/ui/assets/{claude-extension-4b8gXOo_.js → claude-extension-ChmPBz0E.js} +1 -1
- package/dist/ui/assets/cliproxy-CPpBCjTm.js +3 -0
- package/dist/ui/assets/{cliproxy-ai-providers-BXE0HGLt.js → cliproxy-ai-providers-xg_m_dRA.js} +6 -6
- package/dist/ui/assets/{cliproxy-control-panel-ZnCfRS9l.js → cliproxy-control-panel-D0YVnrQ9.js} +1 -1
- package/dist/ui/assets/{codex-B9uBYmnm.js → codex-B10sfnEg.js} +8 -8
- package/dist/ui/assets/{confirm-dialog-DwPqRjyW.js → confirm-dialog-D3uXTjUv.js} +1 -1
- package/dist/ui/assets/{copilot-CSWApqyO.js → copilot-CGdcSf3A.js} +1 -1
- package/dist/ui/assets/{cursor-DYbVB4gp.js → cursor-D6jaTpy9.js} +1 -1
- package/dist/ui/assets/{droid-BAovZe7o.js → droid-o0MWnf8I.js} +2 -2
- package/dist/ui/assets/{globalenv-section-CHHZbjD8.js → globalenv-section-rYo_EloK.js} +1 -1
- package/dist/ui/assets/{health-Jp7o0exN.js → health-B2tGoxnE.js} +1 -1
- package/dist/ui/assets/icons-KVCk4_U8.js +1 -0
- package/dist/ui/assets/{index--j-jJwzV.js → index-B3vorwLO.js} +1 -1
- package/dist/ui/assets/{index-C5iouJJ2.js → index-BOSvoysw.js} +1 -1
- package/dist/ui/assets/index-BXGpQZsS.js +69 -0
- package/dist/ui/assets/{index-C5uQdep3.js → index-CKkizStT.js} +1 -1
- package/dist/ui/assets/{index-VluKB6dO.js → index-Cod7uEXt.js} +1 -1
- package/dist/ui/assets/{index-CpkWv5tW.js → index-D3LLDLip.js} +1 -1
- package/dist/ui/assets/index-teLjoh2T.css +1 -0
- package/dist/ui/assets/{logs-BDbHSujh.js → logs-gMnQJZFy.js} +1 -1
- package/dist/ui/assets/{masked-input-BcJDHDE6.js → masked-input-B17xLQJL.js} +1 -1
- package/dist/ui/assets/{proxy-status-widget-DQWsa532.js → proxy-status-widget-TFWnQJdK.js} +1 -1
- package/dist/ui/assets/{raw-json-settings-editor-panel-Cbn2O4rk.js → raw-json-settings-editor-panel-OjocyAlt.js} +1 -1
- package/dist/ui/assets/{searchable-select-fldXYfY4.js → searchable-select-B7p9UjfE.js} +1 -1
- package/dist/ui/assets/{separator-Dd3ktLxa.js → separator-CTC3KGB8.js} +1 -1
- package/dist/ui/assets/{shared-CdAn8E3x.js → shared-MvrJ7m00.js} +1 -1
- package/dist/ui/assets/{table-CCf__Q_I.js → table-DIhbLeO-.js} +1 -1
- package/dist/ui/assets/{updates-DfoGG8Jl.js → updates-CV6NXvMe.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/web-server/index.d.ts.map +1 -1
- package/dist/web-server/index.js +9 -0
- package/dist/web-server/index.js.map +1 -1
- package/dist/web-server/routes/catalog-routes.d.ts.map +1 -1
- package/dist/web-server/routes/catalog-routes.js +3 -2
- package/dist/web-server/routes/catalog-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.js +23 -2
- package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
- package/dist/web-server/routes/profile-routes.d.ts.map +1 -1
- package/dist/web-server/routes/profile-routes.js +8 -0
- package/dist/web-server/routes/profile-routes.js.map +1 -1
- package/package.json +1 -1
- package/dist/ui/assets/api-Dz2nP1bN.js +0 -4
- package/dist/ui/assets/cliproxy-BFEBo-pc.js +0 -3
- package/dist/ui/assets/icons-DfENUzBo.js +0 -1
- package/dist/ui/assets/index-DFifef9c.css +0 -1
- package/dist/ui/assets/index-Du97tqVQ.js +0 -69
|
@@ -13,5 +13,6 @@ export { validateApiProfileSettingsPayload } from './profile-lifecycle-validatio
|
|
|
13
13
|
export { discoverApiProfileOrphans, registerApiProfileOrphans, copyApiProfile, exportApiProfile, importApiProfileBundle, } from './profile-lifecycle-service';
|
|
14
14
|
export { isOpenRouterUrl, fetchOpenRouterModels, type OpenRouterModel } from './openrouter-catalog';
|
|
15
15
|
export { pickOpenRouterModel, type OpenRouterSelection } from './openrouter-picker';
|
|
16
|
+
export { getLocalRuntimeReadiness, type LocalRuntimeId, type LocalRuntimeReadiness, type LocalRuntimeStatus, } from './local-runtime-readiness';
|
|
16
17
|
export { PROVIDER_PRESETS, PRESET_ALIASES, OPENROUTER_BASE_URL, getPresetById, getPresetAliases, getPresetIds, isValidPresetId, type ProviderPreset, type PresetCategory, } from './provider-presets';
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGpG,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,iCAAiC,EACtC,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACpC,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGpG,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,iCAAiC,EACtC,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACpC,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EACL,wBAAwB,EACxB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Barrel export for API-related business logic services.
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.isValidPresetId = exports.getPresetIds = exports.getPresetAliases = exports.getPresetById = exports.OPENROUTER_BASE_URL = exports.PRESET_ALIASES = exports.PROVIDER_PRESETS = exports.pickOpenRouterModel = exports.fetchOpenRouterModels = exports.isOpenRouterUrl = exports.importApiProfileBundle = exports.exportApiProfile = exports.copyApiProfile = exports.registerApiProfileOrphans = exports.discoverApiProfileOrphans = exports.validateApiProfileSettingsPayload = exports.suggestCliproxyBridgeName = exports.resolveCliproxyBridgeProfile = exports.resolveCliproxyBridgeMetadata = exports.listCliproxyBridgeProviders = exports.getDefaultCliproxyBridgeName = exports.createCliproxyBridgeProfile = exports.updateApiProfileTarget = exports.removeApiProfile = exports.createApiProfile = exports.isUsingUnifiedConfig = exports.getApiProfileNames = exports.listApiProfiles = exports.isApiProfileConfigured = exports.apiProfileExists = exports.sanitizeBaseUrl = exports.getUrlWarning = exports.validateUrl = exports.validateApiName = void 0;
|
|
8
|
+
exports.isValidPresetId = exports.getPresetIds = exports.getPresetAliases = exports.getPresetById = exports.OPENROUTER_BASE_URL = exports.PRESET_ALIASES = exports.PROVIDER_PRESETS = exports.getLocalRuntimeReadiness = exports.pickOpenRouterModel = exports.fetchOpenRouterModels = exports.isOpenRouterUrl = exports.importApiProfileBundle = exports.exportApiProfile = exports.copyApiProfile = exports.registerApiProfileOrphans = exports.discoverApiProfileOrphans = exports.validateApiProfileSettingsPayload = exports.suggestCliproxyBridgeName = exports.resolveCliproxyBridgeProfile = exports.resolveCliproxyBridgeMetadata = exports.listCliproxyBridgeProviders = exports.getDefaultCliproxyBridgeName = exports.createCliproxyBridgeProfile = exports.updateApiProfileTarget = exports.removeApiProfile = exports.createApiProfile = exports.isUsingUnifiedConfig = exports.getApiProfileNames = exports.listApiProfiles = exports.isApiProfileConfigured = exports.apiProfileExists = exports.sanitizeBaseUrl = exports.getUrlWarning = exports.validateUrl = exports.validateApiName = void 0;
|
|
9
9
|
// Validation services
|
|
10
10
|
var validation_service_1 = require("./validation-service");
|
|
11
11
|
Object.defineProperty(exports, "validateApiName", { enumerable: true, get: function () { return validation_service_1.validateApiName; } });
|
|
@@ -47,6 +47,8 @@ Object.defineProperty(exports, "isOpenRouterUrl", { enumerable: true, get: funct
|
|
|
47
47
|
Object.defineProperty(exports, "fetchOpenRouterModels", { enumerable: true, get: function () { return openrouter_catalog_1.fetchOpenRouterModels; } });
|
|
48
48
|
var openrouter_picker_1 = require("./openrouter-picker");
|
|
49
49
|
Object.defineProperty(exports, "pickOpenRouterModel", { enumerable: true, get: function () { return openrouter_picker_1.pickOpenRouterModel; } });
|
|
50
|
+
var local_runtime_readiness_1 = require("./local-runtime-readiness");
|
|
51
|
+
Object.defineProperty(exports, "getLocalRuntimeReadiness", { enumerable: true, get: function () { return local_runtime_readiness_1.getLocalRuntimeReadiness; } });
|
|
50
52
|
// Provider presets for CLI
|
|
51
53
|
var provider_presets_1 = require("./provider-presets");
|
|
52
54
|
Object.defineProperty(exports, "PROVIDER_PRESETS", { enumerable: true, get: function () { return provider_presets_1.PROVIDER_PRESETS; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/services/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,sBAAsB;AACtB,2DAAoG;AAA3F,qHAAA,eAAe,OAAA;AAAE,iHAAA,WAAW,OAAA;AAAE,mHAAA,aAAa,OAAA;AAAE,qHAAA,eAAe,OAAA;AA0BrE,0BAA0B;AAC1B,mDAM0B;AALxB,kHAAA,gBAAgB,OAAA;AAChB,wHAAA,sBAAsB,OAAA;AACtB,iHAAA,eAAe,OAAA;AACf,oHAAA,kBAAkB,OAAA;AAClB,sHAAA,oBAAoB,OAAA;AAGtB,2BAA2B;AAC3B,mDAA8F;AAArF,kHAAA,gBAAgB,OAAA;AAAE,kHAAA,gBAAgB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AACnE,mDAA+D;AAAtD,6HAAA,2BAA2B,OAAA;AACpC,qEAMmC;AALjC,uIAAA,4BAA4B,OAAA;AAC5B,sIAAA,2BAA2B,OAAA;AAC3B,wIAAA,6BAA6B,OAAA;AAC7B,uIAAA,4BAA4B,OAAA;AAC5B,oIAAA,yBAAyB,OAAA;AAG3B,sCAAsC;AACtC,+EAAmF;AAA1E,iJAAA,iCAAiC,OAAA;AAC1C,yEAMqC;AALnC,sIAAA,yBAAyB,OAAA;AACzB,sIAAA,yBAAyB,OAAA;AACzB,2HAAA,cAAc,OAAA;AACd,6HAAA,gBAAgB,OAAA;AAChB,mIAAA,sBAAsB,OAAA;AAGxB,gCAAgC;AAChC,2DAAoG;AAA3F,qHAAA,eAAe,OAAA;AAAE,2HAAA,qBAAqB,OAAA;AAC/C,yDAAoF;AAA3E,wHAAA,mBAAmB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/services/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,sBAAsB;AACtB,2DAAoG;AAA3F,qHAAA,eAAe,OAAA;AAAE,iHAAA,WAAW,OAAA;AAAE,mHAAA,aAAa,OAAA;AAAE,qHAAA,eAAe,OAAA;AA0BrE,0BAA0B;AAC1B,mDAM0B;AALxB,kHAAA,gBAAgB,OAAA;AAChB,wHAAA,sBAAsB,OAAA;AACtB,iHAAA,eAAe,OAAA;AACf,oHAAA,kBAAkB,OAAA;AAClB,sHAAA,oBAAoB,OAAA;AAGtB,2BAA2B;AAC3B,mDAA8F;AAArF,kHAAA,gBAAgB,OAAA;AAAE,kHAAA,gBAAgB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AACnE,mDAA+D;AAAtD,6HAAA,2BAA2B,OAAA;AACpC,qEAMmC;AALjC,uIAAA,4BAA4B,OAAA;AAC5B,sIAAA,2BAA2B,OAAA;AAC3B,wIAAA,6BAA6B,OAAA;AAC7B,uIAAA,4BAA4B,OAAA;AAC5B,oIAAA,yBAAyB,OAAA;AAG3B,sCAAsC;AACtC,+EAAmF;AAA1E,iJAAA,iCAAiC,OAAA;AAC1C,yEAMqC;AALnC,sIAAA,yBAAyB,OAAA;AACzB,sIAAA,yBAAyB,OAAA;AACzB,2HAAA,cAAc,OAAA;AACd,6HAAA,gBAAgB,OAAA;AAChB,mIAAA,sBAAsB,OAAA;AAGxB,gCAAgC;AAChC,2DAAoG;AAA3F,qHAAA,eAAe,OAAA;AAAE,2HAAA,qBAAqB,OAAA;AAC/C,yDAAoF;AAA3E,wHAAA,mBAAmB,OAAA;AAC5B,qEAKmC;AAJjC,mIAAA,wBAAwB,OAAA;AAM1B,2BAA2B;AAC3B,uDAU4B;AAT1B,oHAAA,gBAAgB,OAAA;AAChB,kHAAA,cAAc,OAAA;AACd,uHAAA,mBAAmB,OAAA;AACnB,iHAAA,aAAa,OAAA;AACb,oHAAA,gBAAgB,OAAA;AAChB,gHAAA,YAAY,OAAA;AACZ,mHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type LocalRuntimeId = 'ollama' | 'llamacpp';
|
|
2
|
+
export type LocalRuntimeStatus = 'ready' | 'missing-model' | 'offline';
|
|
3
|
+
export interface LocalRuntimeReadiness {
|
|
4
|
+
id: LocalRuntimeId;
|
|
5
|
+
name: string;
|
|
6
|
+
endpoint: string;
|
|
7
|
+
status: LocalRuntimeStatus;
|
|
8
|
+
commandHint: string;
|
|
9
|
+
recommendedModel: string | null;
|
|
10
|
+
recommendedModelInstalled: boolean;
|
|
11
|
+
detectedModelCount: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function getLocalRuntimeReadiness(): Promise<LocalRuntimeReadiness[]>;
|
|
14
|
+
//# sourceMappingURL=local-runtime-readiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-runtime-readiness.d.ts","sourceRoot":"","sources":["../../../src/api/services/local-runtime-readiness.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,CAAC;AACnD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,eAAe,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,cAAc,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,yBAAyB,EAAE,OAAO,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAoGD,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAUjF"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLocalRuntimeReadiness = void 0;
|
|
4
|
+
const LOCAL_RUNTIME_DEFINITIONS = [
|
|
5
|
+
{
|
|
6
|
+
id: 'ollama',
|
|
7
|
+
name: 'Ollama',
|
|
8
|
+
endpoint: 'http://127.0.0.1:11434',
|
|
9
|
+
modelsUrl: 'http://127.0.0.1:11434/api/tags',
|
|
10
|
+
commandHint: 'ollama serve',
|
|
11
|
+
pullCommandHint: 'ollama pull',
|
|
12
|
+
recommendedModel: 'gemma4:e4b',
|
|
13
|
+
parseModelIds: (payload) => {
|
|
14
|
+
const models = payload?.models;
|
|
15
|
+
return Array.isArray(models)
|
|
16
|
+
? models
|
|
17
|
+
.map((model) => (typeof model?.name === 'string' ? model.name.trim() : ''))
|
|
18
|
+
.filter(Boolean)
|
|
19
|
+
: [];
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: 'llamacpp',
|
|
24
|
+
name: 'llama.cpp',
|
|
25
|
+
endpoint: 'http://127.0.0.1:8080',
|
|
26
|
+
modelsUrl: 'http://127.0.0.1:8080/v1/models',
|
|
27
|
+
commandHint: './server --host 0.0.0.0 --port 8080 -m model.gguf',
|
|
28
|
+
recommendedModel: null,
|
|
29
|
+
parseModelIds: (payload) => {
|
|
30
|
+
const models = payload?.data;
|
|
31
|
+
return Array.isArray(models)
|
|
32
|
+
? models
|
|
33
|
+
.map((model) => (typeof model?.id === 'string' ? model.id.trim() : ''))
|
|
34
|
+
.filter(Boolean)
|
|
35
|
+
: [];
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
async function fetchModelIds(definition) {
|
|
40
|
+
const response = await fetch(definition.modelsUrl, {
|
|
41
|
+
signal: AbortSignal.timeout(1500),
|
|
42
|
+
});
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
throw new Error(`${definition.id} readiness probe failed (${response.status})`);
|
|
45
|
+
}
|
|
46
|
+
return definition.parseModelIds(await response.json());
|
|
47
|
+
}
|
|
48
|
+
function toReadiness(definition, modelIds) {
|
|
49
|
+
const recommendedModelInstalled = definition.recommendedModel
|
|
50
|
+
? modelIds.some((modelId) => modelId === definition.recommendedModel)
|
|
51
|
+
: modelIds.length > 0;
|
|
52
|
+
const status = modelIds.length === 0 || !recommendedModelInstalled ? 'missing-model' : 'ready';
|
|
53
|
+
return {
|
|
54
|
+
id: definition.id,
|
|
55
|
+
name: definition.name,
|
|
56
|
+
endpoint: definition.endpoint,
|
|
57
|
+
status,
|
|
58
|
+
commandHint: status === 'missing-model' && definition.recommendedModel && definition.pullCommandHint
|
|
59
|
+
? `${definition.pullCommandHint} ${definition.recommendedModel}`
|
|
60
|
+
: definition.commandHint,
|
|
61
|
+
recommendedModel: definition.recommendedModel,
|
|
62
|
+
recommendedModelInstalled,
|
|
63
|
+
detectedModelCount: modelIds.length,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function toOffline(definition) {
|
|
67
|
+
return {
|
|
68
|
+
id: definition.id,
|
|
69
|
+
name: definition.name,
|
|
70
|
+
endpoint: definition.endpoint,
|
|
71
|
+
status: 'offline',
|
|
72
|
+
commandHint: definition.commandHint,
|
|
73
|
+
recommendedModel: definition.recommendedModel,
|
|
74
|
+
recommendedModelInstalled: false,
|
|
75
|
+
detectedModelCount: 0,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async function getLocalRuntimeReadiness() {
|
|
79
|
+
return Promise.all(LOCAL_RUNTIME_DEFINITIONS.map(async (definition) => {
|
|
80
|
+
try {
|
|
81
|
+
return toReadiness(definition, await fetchModelIds(definition));
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return toOffline(definition);
|
|
85
|
+
}
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
exports.getLocalRuntimeReadiness = getLocalRuntimeReadiness;
|
|
89
|
+
//# sourceMappingURL=local-runtime-readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-runtime-readiness.js","sourceRoot":"","sources":["../../../src/api/services/local-runtime-readiness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type CliproxyProviderRoutingHints } from '../shared/cliproxy-model-routing';
|
|
2
|
+
import { type CatalogSource } from './catalog-cache';
|
|
3
|
+
import type { ProviderCatalog } from './model-catalog';
|
|
4
|
+
import type { CLIProxyProvider } from './types';
|
|
5
|
+
export interface CatalogRoutingSnapshot {
|
|
6
|
+
catalogs: Partial<Record<CLIProxyProvider, ProviderCatalog>>;
|
|
7
|
+
source: CatalogSource;
|
|
8
|
+
cacheAge: string | null;
|
|
9
|
+
routing: Partial<Record<string, CliproxyProviderRoutingHints>>;
|
|
10
|
+
}
|
|
11
|
+
export declare function getCatalogRoutingSnapshot(): Promise<CatalogRoutingSnapshot>;
|
|
12
|
+
//# sourceMappingURL=catalog-routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-routing.d.ts","sourceRoot":"","sources":["../../src/cliproxy/catalog-routing.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC;IAC7D,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC,CAAC;CAChE;AAED,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAWjF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCatalogRoutingSnapshot = void 0;
|
|
4
|
+
const cliproxy_model_routing_1 = require("../shared/cliproxy-model-routing");
|
|
5
|
+
const stats_fetcher_1 = require("./stats-fetcher");
|
|
6
|
+
const catalog_cache_1 = require("./catalog-cache");
|
|
7
|
+
async function getCatalogRoutingSnapshot() {
|
|
8
|
+
const snapshot = await (0, catalog_cache_1.getResolvedCatalogSnapshot)();
|
|
9
|
+
const modelsResponse = snapshot.source === 'live' ? await (0, stats_fetcher_1.fetchCliproxyModels)() : null;
|
|
10
|
+
const routing = (0, cliproxy_model_routing_1.buildCliproxyRoutingHints)(snapshot.catalogs, modelsResponse?.models ?? []);
|
|
11
|
+
return {
|
|
12
|
+
catalogs: snapshot.catalogs,
|
|
13
|
+
source: snapshot.source,
|
|
14
|
+
cacheAge: snapshot.cacheAge,
|
|
15
|
+
routing,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
exports.getCatalogRoutingSnapshot = getCatalogRoutingSnapshot;
|
|
19
|
+
//# sourceMappingURL=catalog-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-routing.js","sourceRoot":"","sources":["../../src/cliproxy/catalog-routing.ts"],"names":[],"mappings":";;;AAAA,6EAG0C;AAC1C,mDAAsD;AACtD,mDAIyB;AAWlB,KAAK,UAAU,yBAAyB;IAC7C,MAAM,QAAQ,GAA4B,MAAM,IAAA,0CAA0B,GAAE,CAAC;IAC7E,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,IAAA,mCAAmB,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,MAAM,OAAO,GAAG,IAAA,kDAAyB,EAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;IAE3F,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,OAAO;KACR,CAAC;AACJ,CAAC;AAXD,8DAWC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CLIProxyProvider } from './types';
|
|
2
|
+
export interface ManagedPrefixSyncResult {
|
|
3
|
+
checked: number;
|
|
4
|
+
updated: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function ensureManagedModelPrefixes(providers?: CLIProxyProvider[]): Promise<ManagedPrefixSyncResult>;
|
|
7
|
+
//# sourceMappingURL=managed-model-prefixes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-model-prefixes.d.ts","sourceRoot":"","sources":["../../src/cliproxy/managed-model-prefixes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAgBhD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AA2ED,wBAAsB,0BAA0B,CAC9C,SAAS,CAAC,EAAE,gBAAgB,EAAE,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CAwDlC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureManagedModelPrefixes = void 0;
|
|
4
|
+
const cliproxy_model_routing_1 = require("../shared/cliproxy-model-routing");
|
|
5
|
+
const proxy_target_resolver_1 = require("./proxy-target-resolver");
|
|
6
|
+
const provider_capabilities_1 = require("./provider-capabilities");
|
|
7
|
+
const MANAGED_PREFIX_REQUEST_TIMEOUT_MS = 3000;
|
|
8
|
+
function normalizeProvider(record) {
|
|
9
|
+
const providerName = record.provider?.trim() || record.type?.trim() || '';
|
|
10
|
+
return providerName ? (0, provider_capabilities_1.mapExternalProviderName)(providerName) : null;
|
|
11
|
+
}
|
|
12
|
+
async function fetchManagementEndpoint(path, init = {}) {
|
|
13
|
+
const target = (0, proxy_target_resolver_1.getProxyTarget)();
|
|
14
|
+
const controller = new AbortController();
|
|
15
|
+
const timeoutId = setTimeout(() => controller.abort(), MANAGED_PREFIX_REQUEST_TIMEOUT_MS);
|
|
16
|
+
try {
|
|
17
|
+
return await fetch((0, proxy_target_resolver_1.buildProxyUrl)(target, path), {
|
|
18
|
+
...init,
|
|
19
|
+
headers: (0, proxy_target_resolver_1.buildManagementHeaders)(target, init.headers),
|
|
20
|
+
signal: controller.signal,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
clearTimeout(timeoutId);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function listAuthFiles() {
|
|
28
|
+
const response = await fetchManagementEndpoint('/v0/management/auth-files');
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
throw new Error(`auth file listing failed with status ${response.status}`);
|
|
31
|
+
}
|
|
32
|
+
const data = (await response.json());
|
|
33
|
+
return Array.isArray(data.files) ? data.files : [];
|
|
34
|
+
}
|
|
35
|
+
async function patchAuthFilePrefix(name, prefix) {
|
|
36
|
+
const response = await fetchManagementEndpoint('/v0/management/auth-files/fields', {
|
|
37
|
+
method: 'PATCH',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify({ name, prefix }),
|
|
42
|
+
});
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
throw new Error(`auth file prefix patch failed for ${name} with status ${response.status}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async function readAuthFileMetadata(name) {
|
|
48
|
+
const response = await fetchManagementEndpoint(`/v0/management/auth-files/download?name=${encodeURIComponent(name)}`);
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
throw new Error(`auth file download failed for ${name} with status ${response.status}`);
|
|
51
|
+
}
|
|
52
|
+
const content = await response.text();
|
|
53
|
+
try {
|
|
54
|
+
const parsed = JSON.parse(content);
|
|
55
|
+
const providerName = typeof parsed.provider === 'string'
|
|
56
|
+
? parsed.provider
|
|
57
|
+
: typeof parsed.type === 'string'
|
|
58
|
+
? parsed.type
|
|
59
|
+
: '';
|
|
60
|
+
return {
|
|
61
|
+
prefix: typeof parsed.prefix === 'string' ? parsed.prefix.trim() : null,
|
|
62
|
+
provider: providerName ? (0, provider_capabilities_1.mapExternalProviderName)(providerName) : null,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return { prefix: null, provider: null };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async function ensureManagedModelPrefixes(providers) {
|
|
70
|
+
const allowedProviders = new Set((providers ?? [])
|
|
71
|
+
.map((provider) => provider.trim())
|
|
72
|
+
.filter((provider) => (0, cliproxy_model_routing_1.getManagedModelPrefix)(provider)));
|
|
73
|
+
if (providers && allowedProviders.size === 0) {
|
|
74
|
+
return { checked: 0, updated: 0 };
|
|
75
|
+
}
|
|
76
|
+
const files = await listAuthFiles();
|
|
77
|
+
let checked = 0;
|
|
78
|
+
let updated = 0;
|
|
79
|
+
for (const record of files) {
|
|
80
|
+
if ((record.account_type || '').trim().toLowerCase() !== 'oauth') {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const provider = normalizeProvider(record);
|
|
84
|
+
if (!provider) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (allowedProviders.size > 0 && !allowedProviders.has(provider)) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const prefix = (0, cliproxy_model_routing_1.getManagedModelPrefix)(provider);
|
|
91
|
+
if (!prefix) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
checked += 1;
|
|
96
|
+
const { prefix: currentPrefix, provider: fileProvider } = await readAuthFileMetadata(record.name);
|
|
97
|
+
if (fileProvider !== provider) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (currentPrefix === prefix) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (currentPrefix && currentPrefix !== prefix) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
await patchAuthFilePrefix(record.name, prefix);
|
|
107
|
+
updated += 1;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// Best-effort repair: skip files that cannot be read or patched.
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return { checked, updated };
|
|
114
|
+
}
|
|
115
|
+
exports.ensureManagedModelPrefixes = ensureManagedModelPrefixes;
|
|
116
|
+
//# sourceMappingURL=managed-model-prefixes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-model-prefixes.js","sourceRoot":"","sources":["../../src/cliproxy/managed-model-prefixes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/catalog-subcommand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"catalog-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/catalog-subcommand.ts"],"names":[],"mappings":"AA0CA,0BAA0B;AAC1B,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CzE;AA0DD,uCAAuC;AACvC,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B1E;AAED,0BAA0B;AAC1B,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAWxD"}
|
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.handleCatalogReset = exports.handleCatalogRefresh = exports.handleCatalogStatus = void 0;
|
|
4
4
|
const ui_1 = require("../../utils/ui");
|
|
5
5
|
const catalog_cache_1 = require("../../cliproxy/catalog-cache");
|
|
6
|
+
const catalog_routing_1 = require("../../cliproxy/catalog-routing");
|
|
7
|
+
const managed_model_prefixes_1 = require("../../cliproxy/managed-model-prefixes");
|
|
6
8
|
const proxy_target_resolver_1 = require("../../cliproxy/proxy-target-resolver");
|
|
7
9
|
/** Fetch model definitions from CLIProxyAPI for all syncable providers */
|
|
8
10
|
async function fetchRemoteCatalogs(verbose) {
|
|
@@ -27,7 +29,17 @@ async function handleCatalogStatus(verbose) {
|
|
|
27
29
|
console.log('');
|
|
28
30
|
console.log((0, ui_1.header)('Model Catalog'));
|
|
29
31
|
console.log('');
|
|
30
|
-
|
|
32
|
+
let routingSnapshot = null;
|
|
33
|
+
if (verbose) {
|
|
34
|
+
try {
|
|
35
|
+
await (0, managed_model_prefixes_1.ensureManagedModelPrefixes)();
|
|
36
|
+
routingSnapshot = await (0, catalog_routing_1.getCatalogRoutingSnapshot)();
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
routingSnapshot = null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const cacheAge = routingSnapshot?.cacheAge ?? (0, catalog_cache_1.getCacheAge)();
|
|
31
43
|
if (cacheAge) {
|
|
32
44
|
console.log(` Cache: ${(0, ui_1.color)('synced', 'success')} (${cacheAge})`);
|
|
33
45
|
}
|
|
@@ -37,14 +49,14 @@ async function handleCatalogStatus(verbose) {
|
|
|
37
49
|
console.log('');
|
|
38
50
|
console.log((0, ui_1.subheader)('Providers:'));
|
|
39
51
|
for (const provider of catalog_cache_1.SYNCABLE_PROVIDERS) {
|
|
40
|
-
const catalog = (0, catalog_cache_1.getResolvedCatalog)(provider);
|
|
52
|
+
const catalog = routingSnapshot?.catalogs[provider] ?? (0, catalog_cache_1.getResolvedCatalog)(provider);
|
|
41
53
|
if (catalog) {
|
|
42
54
|
const count = catalog.models.length;
|
|
43
|
-
|
|
55
|
+
const routing = routingSnapshot?.routing[provider];
|
|
56
|
+
const suffix = renderRoutingSummary(routing);
|
|
57
|
+
console.log(` ${(0, ui_1.color)(catalog.displayName.padEnd(20), 'command')} ${count} models${suffix}`);
|
|
44
58
|
if (verbose) {
|
|
45
|
-
|
|
46
|
-
console.log((0, ui_1.dim)(` - ${model.id} (${model.name})`));
|
|
47
|
-
}
|
|
59
|
+
renderVerboseRouting(provider, catalog.models, routing);
|
|
48
60
|
}
|
|
49
61
|
}
|
|
50
62
|
}
|
|
@@ -55,6 +67,48 @@ async function handleCatalogStatus(verbose) {
|
|
|
55
67
|
console.log('');
|
|
56
68
|
}
|
|
57
69
|
exports.handleCatalogStatus = handleCatalogStatus;
|
|
70
|
+
function renderRoutingSummary(routing) {
|
|
71
|
+
if (!routing) {
|
|
72
|
+
return '';
|
|
73
|
+
}
|
|
74
|
+
const parts = [`prefix ${routing.prefix}`];
|
|
75
|
+
if (routing.shadowedCount > 0) {
|
|
76
|
+
parts.push(`${routing.shadowedCount} shadowed`);
|
|
77
|
+
}
|
|
78
|
+
if (routing.prefixOnlyCount > 0) {
|
|
79
|
+
parts.push(`${routing.prefixOnlyCount} prefix-only`);
|
|
80
|
+
}
|
|
81
|
+
return parts.length > 0 ? ` ${(0, ui_1.dim)(`(${parts.join(', ')})`)}` : '';
|
|
82
|
+
}
|
|
83
|
+
function renderVerboseRouting(provider, models, routing) {
|
|
84
|
+
if (!routing) {
|
|
85
|
+
for (const model of models) {
|
|
86
|
+
console.log((0, ui_1.dim)(` - ${model.id} (${model.name})`));
|
|
87
|
+
}
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const routingMap = new Map(routing.models.map((hint) => [hint.modelId, hint]));
|
|
91
|
+
for (const model of models) {
|
|
92
|
+
const hint = routingMap.get(model.id);
|
|
93
|
+
console.log((0, ui_1.dim)(` - ${model.id} (${model.name})`));
|
|
94
|
+
if (!hint) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
console.log((0, ui_1.dim)(` ${hint.pinnedAvailable ? 'preferred' : 'suggested'}: ${hint.recommendedModelId}`));
|
|
98
|
+
if (hint.unprefixedStatus === 'safe') {
|
|
99
|
+
console.log((0, ui_1.dim)(` unprefixed: resolves to ${routing.displayName}`));
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (hint.unprefixedStatus === 'shadowed' && hint.effectiveDisplayName) {
|
|
103
|
+
console.log((0, ui_1.dim)(` unprefixed: currently resolves to ${hint.effectiveDisplayName}`));
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
console.log((0, ui_1.dim)(` unprefixed: not advertised, use ${hint.recommendedModelId}`));
|
|
107
|
+
}
|
|
108
|
+
if (provider === 'gemini' || provider === 'agy') {
|
|
109
|
+
console.log((0, ui_1.dim)(` short prefix stays backend-pinned even when unprefixed names overlap.`));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
58
112
|
/** Refresh catalog from CLIProxyAPI */
|
|
59
113
|
async function handleCatalogRefresh(verbose) {
|
|
60
114
|
await (0, ui_1.initUI)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-subcommand.js","sourceRoot":"","sources":["../../../src/commands/cliproxy/catalog-subcommand.ts"],"names":[],"mappings":";;;AAAA,uCAAuE;AACvE,gEAMsC;AACtC,gFAAsE;
|
|
1
|
+
{"version":3,"file":"catalog-subcommand.js","sourceRoot":"","sources":["../../../src/commands/cliproxy/catalog-subcommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/help-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"help-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/help-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA+F9C"}
|
|
@@ -32,7 +32,7 @@ async function showHelp() {
|
|
|
32
32
|
[
|
|
33
33
|
'Catalog Commands:',
|
|
34
34
|
[
|
|
35
|
-
['catalog', 'Show catalog status
|
|
35
|
+
['catalog', 'Show catalog status, routing hints, and pinned short prefixes'],
|
|
36
36
|
['catalog refresh', 'Sync models from remote CLIProxy'],
|
|
37
37
|
['catalog reset', 'Clear cache, revert to static catalog'],
|
|
38
38
|
],
|
|
@@ -81,7 +81,7 @@ async function showHelp() {
|
|
|
81
81
|
[
|
|
82
82
|
['--backend <type>', 'Use specific backend: original | plus (default: from config)'],
|
|
83
83
|
['--target <cli>', 'Default target for created/edited variants: claude | droid'],
|
|
84
|
-
['--verbose, -v', 'Show detailed quota
|
|
84
|
+
['--verbose, -v', 'Show detailed diagnostics including routing hints and quota fetches'],
|
|
85
85
|
],
|
|
86
86
|
],
|
|
87
87
|
];
|
|
@@ -94,6 +94,7 @@ async function showHelp() {
|
|
|
94
94
|
console.log('');
|
|
95
95
|
}
|
|
96
96
|
console.log((0, ui_1.dim)(' Note: CLIProxy now persists by default. Use "stop" to terminate.'));
|
|
97
|
+
console.log((0, ui_1.dim)(' Routing: use gcli/<model> or agy/<model> to keep overlapping models pinned.'));
|
|
97
98
|
console.log('');
|
|
98
99
|
console.log((0, ui_1.subheader)('Notes:'));
|
|
99
100
|
console.log(` Default fallback version: ${(0, ui_1.color)((0, platform_detector_1.getFallbackVersion)(), 'info')}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help-subcommand.js","sourceRoot":"","sources":["../../../src/commands/cliproxy/help-subcommand.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,uCAAuE;AACvE,wEAI0C;AAC1C,gFAAgF;AAEzE,KAAK,UAAU,QAAQ;IAC5B,MAAM,IAAA,WAAM,GAAE,CAAC;IACf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAA,WAAM,EAAC,qBAAqB,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAA,cAAS,EAAC,QAAQ,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,UAAK,EAAC,cAAc,EAAE,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,QAAQ,GAAmC;QAC/C;YACE,mBAAmB;YACnB;gBACE,CAAC,eAAe,EAAE,qCAAqC,CAAC;gBACxD,CAAC,oBAAoB,EAAE,mDAAmD,CAAC;gBAC3E,CAAC,aAAa,EAAE,2CAA2C,CAAC;gBAC5D,CAAC,MAAM,EAAE,oCAAoC,CAAC;gBAC9C,CAAC,eAAe,EAAE,mCAAmC,CAAC;aACvD;SACF;QACD;YACE,mBAAmB;YACnB;gBACE,CAAC,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"help-subcommand.js","sourceRoot":"","sources":["../../../src/commands/cliproxy/help-subcommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variant-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/variant-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,mBAAmB,EAAqB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"variant-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/variant-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,mBAAmB,EAAqB,MAAM,6BAA6B,CAAC;AAKrF,OAAO,EAAoB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAkB/D,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAqBD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAqDpE;AA6GD,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,eAAiC,GACzC,OAAO,CAAC,IAAI,CAAC,CAuTf;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+EhE;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,eAAiC,GACzC,OAAO,CAAC,IAAI,CAAC,CAkSf"}
|
|
@@ -35,7 +35,9 @@ const path = __importStar(require("path"));
|
|
|
35
35
|
const account_manager_1 = require("../../cliproxy/account-manager");
|
|
36
36
|
const oauth_handler_1 = require("../../cliproxy/auth/oauth-handler");
|
|
37
37
|
const profile_detector_1 = require("../../auth/profile-detector");
|
|
38
|
+
const catalog_routing_1 = require("../../cliproxy/catalog-routing");
|
|
38
39
|
const model_catalog_1 = require("../../cliproxy/model-catalog");
|
|
40
|
+
const managed_model_prefixes_1 = require("../../cliproxy/managed-model-prefixes");
|
|
39
41
|
const target_metadata_1 = require("../../targets/target-metadata");
|
|
40
42
|
const unified_config_loader_1 = require("../../config/unified-config-loader");
|
|
41
43
|
const ui_1 = require("../../utils/ui");
|
|
@@ -43,6 +45,14 @@ const prompt_1 = require("../../utils/prompt");
|
|
|
43
45
|
const services_1 = require("../../cliproxy/services");
|
|
44
46
|
const platform_detector_1 = require("../../cliproxy/platform-detector");
|
|
45
47
|
const email_account_identity_1 = require("../../cliproxy/accounts/email-account-identity");
|
|
48
|
+
const variantManagedPrefixProviders = new Set();
|
|
49
|
+
async function ensureVariantManagedModelPrefixes(provider) {
|
|
50
|
+
if (variantManagedPrefixProviders.has(provider)) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
await (0, managed_model_prefixes_1.ensureManagedModelPrefixes)([provider]);
|
|
54
|
+
variantManagedPrefixProviders.add(provider);
|
|
55
|
+
}
|
|
46
56
|
function parseTargetValue(rawValue) {
|
|
47
57
|
const normalized = rawValue.trim().toLowerCase();
|
|
48
58
|
if ((0, target_metadata_1.isPersistedTargetType)(normalized)) {
|
|
@@ -118,6 +128,10 @@ function formatModelOption(model) {
|
|
|
118
128
|
: '';
|
|
119
129
|
return `${model.name}${tierBadge}`;
|
|
120
130
|
}
|
|
131
|
+
function getSelectableModelId(modelId, routing) {
|
|
132
|
+
const hint = routing?.models.find((entry) => entry.modelId.toLowerCase() === modelId.toLowerCase());
|
|
133
|
+
return hint?.recommendedModelId ?? modelId;
|
|
134
|
+
}
|
|
121
135
|
function getBackendLabel(backend) {
|
|
122
136
|
return backend === 'plus' ? 'CLIProxy Plus' : 'CLIProxy';
|
|
123
137
|
}
|
|
@@ -162,9 +176,19 @@ async function selectTierConfig(tierName, verbose) {
|
|
|
162
176
|
// Select model
|
|
163
177
|
let model;
|
|
164
178
|
if ((0, model_catalog_1.supportsModelConfig)(provider)) {
|
|
179
|
+
try {
|
|
180
|
+
await ensureVariantManagedModelPrefixes(provider);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Keep interactive model selection available even when prefix repair fails.
|
|
184
|
+
}
|
|
185
|
+
const routing = (await (0, catalog_routing_1.getCatalogRoutingSnapshot)()).routing[provider];
|
|
165
186
|
const catalog = (0, model_catalog_1.getProviderCatalog)(provider);
|
|
166
187
|
if (catalog) {
|
|
167
|
-
const modelOptions = catalog.models.map((m) => ({
|
|
188
|
+
const modelOptions = catalog.models.map((m) => ({
|
|
189
|
+
id: getSelectableModelId(m.id, routing),
|
|
190
|
+
label: formatModelOption(m),
|
|
191
|
+
}));
|
|
168
192
|
const defaultIdx = catalog.models.findIndex((m) => m.id === catalog.defaultModel);
|
|
169
193
|
model = await prompt_1.InteractivePrompt.selectFromList(`Model for ${tierName}:`, modelOptions, {
|
|
170
194
|
defaultIndex: defaultIdx >= 0 ? defaultIdx : 0,
|
|
@@ -369,9 +393,19 @@ async function handleCreate(args, backend = platform_detector_1.DEFAULT_BACKEND)
|
|
|
369
393
|
let model = parsedArgs.model;
|
|
370
394
|
if (!model) {
|
|
371
395
|
if ((0, model_catalog_1.supportsModelConfig)(provider)) {
|
|
396
|
+
try {
|
|
397
|
+
await ensureVariantManagedModelPrefixes(provider);
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
// Keep variant creation available even when prefix repair fails.
|
|
401
|
+
}
|
|
402
|
+
const routing = (await (0, catalog_routing_1.getCatalogRoutingSnapshot)()).routing[provider];
|
|
372
403
|
const catalog = (0, model_catalog_1.getProviderCatalog)(provider);
|
|
373
404
|
if (catalog) {
|
|
374
|
-
const modelOptions = catalog.models.map((m) => ({
|
|
405
|
+
const modelOptions = catalog.models.map((m) => ({
|
|
406
|
+
id: getSelectableModelId(m.id, routing),
|
|
407
|
+
label: formatModelOption(m),
|
|
408
|
+
}));
|
|
375
409
|
const defaultIdx = catalog.models.findIndex((m) => m.id === catalog.defaultModel);
|
|
376
410
|
model = await prompt_1.InteractivePrompt.selectFromList('Select model:', modelOptions, {
|
|
377
411
|
defaultIndex: defaultIdx >= 0 ? defaultIdx : 0,
|
|
@@ -573,10 +607,17 @@ async function handleEdit(args, backend = platform_detector_1.DEFAULT_BACKEND) {
|
|
|
573
607
|
if (changeModel) {
|
|
574
608
|
const providerForModel = newProvider || variant.provider;
|
|
575
609
|
if ((0, model_catalog_1.supportsModelConfig)(providerForModel)) {
|
|
610
|
+
try {
|
|
611
|
+
await ensureVariantManagedModelPrefixes(providerForModel);
|
|
612
|
+
}
|
|
613
|
+
catch {
|
|
614
|
+
// Keep edit flow available even when prefix repair fails.
|
|
615
|
+
}
|
|
616
|
+
const routing = (await (0, catalog_routing_1.getCatalogRoutingSnapshot)()).routing[providerForModel];
|
|
576
617
|
const catalog = (0, model_catalog_1.getProviderCatalog)(providerForModel);
|
|
577
618
|
if (catalog) {
|
|
578
619
|
const modelOptions = catalog.models.map((m) => ({
|
|
579
|
-
id: m.id,
|
|
620
|
+
id: getSelectableModelId(m.id, routing),
|
|
580
621
|
label: formatModelOption(m),
|
|
581
622
|
}));
|
|
582
623
|
const defaultIdx = catalog.models.findIndex((m) => m.id === catalog.defaultModel);
|