@kaitranntt/ccs 6.7.1-dev.6 → 6.7.1-dev.8
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 +3 -0
- package/dist/api/services/index.d.ts.map +1 -1
- package/dist/api/services/index.js +14 -1
- package/dist/api/services/index.js.map +1 -1
- package/dist/api/services/openrouter-catalog.d.ts +30 -0
- package/dist/api/services/openrouter-catalog.d.ts.map +1 -0
- package/dist/api/services/openrouter-catalog.js +130 -0
- package/dist/api/services/openrouter-catalog.js.map +1 -0
- package/dist/api/services/openrouter-picker.d.ts +15 -0
- package/dist/api/services/openrouter-picker.d.ts.map +1 -0
- package/dist/api/services/openrouter-picker.js +113 -0
- package/dist/api/services/openrouter-picker.js.map +1 -0
- package/dist/api/services/profile-reader.d.ts +3 -0
- package/dist/api/services/profile-reader.d.ts.map +1 -1
- package/dist/api/services/profile-reader.js +14 -9
- package/dist/api/services/profile-reader.js.map +1 -1
- package/dist/api/services/profile-writer.d.ts.map +1 -1
- package/dist/api/services/profile-writer.js +8 -3
- package/dist/api/services/profile-writer.js.map +1 -1
- package/dist/api/services/provider-presets.d.ts +36 -0
- package/dist/api/services/provider-presets.d.ts.map +1 -0
- package/dist/api/services/provider-presets.js +89 -0
- package/dist/api/services/provider-presets.js.map +1 -0
- package/dist/auth/profile-detector.d.ts.map +1 -1
- package/dist/auth/profile-detector.js +1 -4
- package/dist/auth/profile-detector.js.map +1 -1
- package/dist/commands/api-command.d.ts.map +1 -1
- package/dist/commands/api-command.js +82 -30
- package/dist/commands/api-command.js.map +1 -1
- package/dist/config/index.d.ts +0 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +0 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/migration-manager.d.ts.map +1 -1
- package/dist/config/migration-manager.js +0 -3
- package/dist/config/migration-manager.js.map +1 -1
- package/dist/config/unified-config-types.d.ts +1 -20
- package/dist/config/unified-config-types.d.ts.map +1 -1
- package/dist/config/unified-config-types.js +2 -22
- package/dist/config/unified-config-types.js.map +1 -1
- package/dist/management/recovery-manager.d.ts +3 -0
- package/dist/management/recovery-manager.d.ts.map +1 -1
- package/dist/management/recovery-manager.js +6 -11
- package/dist/management/recovery-manager.js.map +1 -1
- package/dist/ui/assets/{accounts-CveDKAVc.js → accounts-DQwh-CP_.js} +1 -1
- package/dist/ui/assets/{analytics-D-bqA31W.js → analytics-BR435WpH.js} +1 -1
- package/dist/ui/assets/api-ALobfD8T.js +1 -0
- package/dist/ui/assets/card-ByK9DlE_.js +1 -0
- package/dist/ui/assets/{cliproxy-BY70Tlxq.js → cliproxy-BlkTmqj-.js} +2 -2
- package/dist/ui/assets/{cliproxy-control-panel-CJ2CfYod.js → cliproxy-control-panel-CvVI3tSn.js} +1 -1
- package/dist/ui/assets/{code-editor-x2Bhd_zz.js → code-editor-Bm8H1Oot.js} +2 -2
- package/dist/ui/assets/{confirm-dialog-BCZXbxwW.js → confirm-dialog-DQeTgOVm.js} +1 -1
- package/dist/ui/assets/copilot-_EhQN_rN.js +4 -0
- package/dist/ui/assets/health-CApaflOt.js +1 -0
- package/dist/ui/assets/icons-DvvDkxaF.js +1 -0
- package/dist/ui/assets/index-DDxKFig1.js +46 -0
- package/dist/ui/assets/index-Dfyx0piD.css +1 -0
- package/dist/ui/assets/{settings-BTIPjkGQ.js → settings-ByVm4JFM.js} +1 -1
- package/dist/ui/assets/{shared-BlJYKD4s.js → shared-C9bG-pqJ.js} +1 -1
- package/dist/ui/assets/{switch-BR9MWG-V.js → switch-CasTIVeB.js} +1 -1
- package/dist/ui/icons/openrouter.svg +1 -0
- package/dist/ui/index.html +3 -3
- package/dist/utils/config-manager.d.ts +3 -1
- package/dist/utils/config-manager.d.ts.map +1 -1
- package/dist/utils/config-manager.js +41 -5
- package/dist/utils/config-manager.js.map +1 -1
- package/dist/web-server/routes/config-routes.d.ts.map +1 -1
- package/dist/web-server/routes/config-routes.js +0 -30
- package/dist/web-server/routes/config-routes.js.map +1 -1
- package/dist/web-server/routes/index.js +1 -2
- package/dist/web-server/routes/index.js.map +1 -1
- package/dist/web-server/routes/profile-routes.d.ts +2 -0
- package/dist/web-server/routes/profile-routes.d.ts.map +1 -1
- package/dist/web-server/routes/profile-routes.js +32 -32
- package/dist/web-server/routes/profile-routes.js.map +1 -1
- package/package.json +1 -1
- package/scripts/postinstall.js +11 -220
- package/dist/config/secrets-manager.d.ts +0 -51
- package/dist/config/secrets-manager.d.ts.map +0 -1
- package/dist/config/secrets-manager.js +0 -194
- package/dist/config/secrets-manager.js.map +0 -1
- package/dist/ui/assets/api-A3IeN2JZ.js +0 -1
- package/dist/ui/assets/card-Dh2Mk43l.js +0 -1
- package/dist/ui/assets/copilot-BRJK1ZW-.js +0 -4
- package/dist/ui/assets/health-626qMQvS.js +0 -1
- package/dist/ui/assets/icons-ZmwVoUeR.js +0 -1
- package/dist/ui/assets/index-BJVyJi5-.js +0 -46
- package/dist/ui/assets/index-It66SkKf.css +0 -1
|
@@ -7,4 +7,7 @@ export { validateApiName, validateUrl, getUrlWarning, sanitizeBaseUrl } from './
|
|
|
7
7
|
export { type ModelMapping, type ApiProfileInfo, type CliproxyVariantInfo, type ApiListResult, type CreateApiProfileResult, type RemoveApiProfileResult, } from './profile-types';
|
|
8
8
|
export { apiProfileExists, isApiProfileConfigured, listApiProfiles, getApiProfileNames, isUsingUnifiedConfig, } from './profile-reader';
|
|
9
9
|
export { createApiProfile, removeApiProfile } from './profile-writer';
|
|
10
|
+
export { isOpenRouterUrl, fetchOpenRouterModels, type OpenRouterModel } from './openrouter-catalog';
|
|
11
|
+
export { pickOpenRouterModel, type OpenRouterSelection } from './openrouter-picker';
|
|
12
|
+
export { PROVIDER_PRESETS, OPENROUTER_BASE_URL, getPresetById, getPresetIds, isValidPresetId, type ProviderPreset, } from './provider-presets';
|
|
10
13
|
//# 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,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,MAAM,kBAAkB,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,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,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGpF,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,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.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.getPresetById = exports.OPENROUTER_BASE_URL = exports.PROVIDER_PRESETS = exports.pickOpenRouterModel = exports.fetchOpenRouterModels = exports.isOpenRouterUrl = 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; } });
|
|
@@ -23,4 +23,17 @@ Object.defineProperty(exports, "isUsingUnifiedConfig", { enumerable: true, get:
|
|
|
23
23
|
var profile_writer_1 = require("./profile-writer");
|
|
24
24
|
Object.defineProperty(exports, "createApiProfile", { enumerable: true, get: function () { return profile_writer_1.createApiProfile; } });
|
|
25
25
|
Object.defineProperty(exports, "removeApiProfile", { enumerable: true, get: function () { return profile_writer_1.removeApiProfile; } });
|
|
26
|
+
// OpenRouter catalog and picker
|
|
27
|
+
var openrouter_catalog_1 = require("./openrouter-catalog");
|
|
28
|
+
Object.defineProperty(exports, "isOpenRouterUrl", { enumerable: true, get: function () { return openrouter_catalog_1.isOpenRouterUrl; } });
|
|
29
|
+
Object.defineProperty(exports, "fetchOpenRouterModels", { enumerable: true, get: function () { return openrouter_catalog_1.fetchOpenRouterModels; } });
|
|
30
|
+
var openrouter_picker_1 = require("./openrouter-picker");
|
|
31
|
+
Object.defineProperty(exports, "pickOpenRouterModel", { enumerable: true, get: function () { return openrouter_picker_1.pickOpenRouterModel; } });
|
|
32
|
+
// Provider presets for CLI
|
|
33
|
+
var provider_presets_1 = require("./provider-presets");
|
|
34
|
+
Object.defineProperty(exports, "PROVIDER_PRESETS", { enumerable: true, get: function () { return provider_presets_1.PROVIDER_PRESETS; } });
|
|
35
|
+
Object.defineProperty(exports, "OPENROUTER_BASE_URL", { enumerable: true, get: function () { return provider_presets_1.OPENROUTER_BASE_URL; } });
|
|
36
|
+
Object.defineProperty(exports, "getPresetById", { enumerable: true, get: function () { return provider_presets_1.getPresetById; } });
|
|
37
|
+
Object.defineProperty(exports, "getPresetIds", { enumerable: true, get: function () { return provider_presets_1.getPresetIds; } });
|
|
38
|
+
Object.defineProperty(exports, "isValidPresetId", { enumerable: true, get: function () { return provider_presets_1.isValidPresetId; } });
|
|
26
39
|
//# sourceMappingURL=index.js.map
|
|
@@ -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;AAYrE,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,mDAAsE;AAA7D,kHAAA,gBAAgB,OAAA;AAAE,kHAAA,gBAAgB,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;AAYrE,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,mDAAsE;AAA7D,kHAAA,gBAAgB,OAAA;AAAE,kHAAA,gBAAgB,OAAA;AAE3C,gCAAgC;AAChC,2DAAoG;AAA3F,qHAAA,eAAe,OAAA;AAAE,2HAAA,qBAAqB,OAAA;AAC/C,yDAAoF;AAA3E,wHAAA,mBAAmB,OAAA;AAE5B,2BAA2B;AAC3B,uDAO4B;AAN1B,oHAAA,gBAAgB,OAAA;AAChB,uHAAA,mBAAmB,OAAA;AACnB,iHAAA,aAAa,OAAA;AACb,gHAAA,YAAY,OAAA;AACZ,mHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRouter Model Catalog Fetcher
|
|
3
|
+
* Fetches model list from OpenRouter API for CLI use
|
|
4
|
+
*/
|
|
5
|
+
export interface OpenRouterModel {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
context_length: number;
|
|
10
|
+
pricing: {
|
|
11
|
+
prompt: string;
|
|
12
|
+
completion: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/** Fetch models from OpenRouter API */
|
|
16
|
+
export declare function fetchOpenRouterModels(): Promise<OpenRouterModel[]>;
|
|
17
|
+
/** Format price per token to per million */
|
|
18
|
+
export declare function formatPrice(perToken: string): string;
|
|
19
|
+
/** Format pricing pair */
|
|
20
|
+
export declare function formatPricingPair(pricing: {
|
|
21
|
+
prompt: string;
|
|
22
|
+
completion: string;
|
|
23
|
+
}): string;
|
|
24
|
+
/** Format context length */
|
|
25
|
+
export declare function formatContext(length: number): string;
|
|
26
|
+
/** Search models */
|
|
27
|
+
export declare function searchModels(models: OpenRouterModel[], query: string): OpenRouterModel[];
|
|
28
|
+
/** Check if URL is OpenRouter */
|
|
29
|
+
export declare function isOpenRouterUrl(url: string): boolean;
|
|
30
|
+
//# sourceMappingURL=openrouter-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter-catalog.d.ts","sourceRoot":"","sources":["../../../src/api/services/openrouter-catalog.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAoCD,uCAAuC;AACvC,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAwBxE;AAED,4CAA4C;AAC5C,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED,0BAA0B;AAC1B,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEzF;AAED,4BAA4B;AAC5B,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED,oBAAoB;AACpB,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,EAAE,CAMxF;AAED,iCAAiC;AACjC,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenRouter Model Catalog Fetcher
|
|
4
|
+
* Fetches model list from OpenRouter API for CLI use
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
23
|
+
if (mod && mod.__esModule) return mod;
|
|
24
|
+
var result = {};
|
|
25
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
26
|
+
__setModuleDefault(result, mod);
|
|
27
|
+
return result;
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.isOpenRouterUrl = exports.searchModels = exports.formatContext = exports.formatPricingPair = exports.formatPrice = exports.fetchOpenRouterModels = void 0;
|
|
31
|
+
const fs = __importStar(require("fs"));
|
|
32
|
+
const path = __importStar(require("path"));
|
|
33
|
+
const os = __importStar(require("os"));
|
|
34
|
+
const OPENROUTER_API_URL = 'https://openrouter.ai/api/v1/models';
|
|
35
|
+
const CACHE_FILE = path.join(os.homedir(), '.ccs', 'openrouter-models-cache.json');
|
|
36
|
+
const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
37
|
+
/** Check if cached data is valid */
|
|
38
|
+
function getCachedModels() {
|
|
39
|
+
try {
|
|
40
|
+
if (!fs.existsSync(CACHE_FILE))
|
|
41
|
+
return null;
|
|
42
|
+
const data = JSON.parse(fs.readFileSync(CACHE_FILE, 'utf8'));
|
|
43
|
+
if (Date.now() - data.fetchedAt > CACHE_TTL_MS)
|
|
44
|
+
return null;
|
|
45
|
+
return data.models;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Save models to cache */
|
|
52
|
+
function setCachedModels(models) {
|
|
53
|
+
try {
|
|
54
|
+
const dir = path.dirname(CACHE_FILE);
|
|
55
|
+
if (!fs.existsSync(dir))
|
|
56
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
57
|
+
fs.writeFileSync(CACHE_FILE, JSON.stringify({
|
|
58
|
+
models,
|
|
59
|
+
fetchedAt: Date.now(),
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Ignore cache write errors
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** Fetch models from OpenRouter API */
|
|
67
|
+
async function fetchOpenRouterModels() {
|
|
68
|
+
// Try cache first
|
|
69
|
+
const cached = getCachedModels();
|
|
70
|
+
if (cached)
|
|
71
|
+
return cached;
|
|
72
|
+
// Fetch from API
|
|
73
|
+
const response = await fetch(OPENROUTER_API_URL);
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
throw new Error(`Failed to fetch OpenRouter models: ${response.status}`);
|
|
76
|
+
}
|
|
77
|
+
const data = (await response.json());
|
|
78
|
+
const models = data.data.map((m) => ({
|
|
79
|
+
id: m.id,
|
|
80
|
+
name: m.name,
|
|
81
|
+
description: m.description,
|
|
82
|
+
context_length: m.context_length,
|
|
83
|
+
pricing: m.pricing,
|
|
84
|
+
}));
|
|
85
|
+
// Cache for next time
|
|
86
|
+
setCachedModels(models);
|
|
87
|
+
return models;
|
|
88
|
+
}
|
|
89
|
+
exports.fetchOpenRouterModels = fetchOpenRouterModels;
|
|
90
|
+
/** Format price per token to per million */
|
|
91
|
+
function formatPrice(perToken) {
|
|
92
|
+
const value = parseFloat(perToken);
|
|
93
|
+
if (isNaN(value) || value === 0)
|
|
94
|
+
return 'Free';
|
|
95
|
+
const perMillion = value * 1000000;
|
|
96
|
+
if (perMillion < 0.01)
|
|
97
|
+
return '<$0.01';
|
|
98
|
+
if (perMillion < 1)
|
|
99
|
+
return `$${perMillion.toFixed(2)}`;
|
|
100
|
+
return `$${perMillion.toFixed(perMillion < 10 ? 2 : 0)}`;
|
|
101
|
+
}
|
|
102
|
+
exports.formatPrice = formatPrice;
|
|
103
|
+
/** Format pricing pair */
|
|
104
|
+
function formatPricingPair(pricing) {
|
|
105
|
+
return `${formatPrice(pricing.prompt)}/${formatPrice(pricing.completion)}`;
|
|
106
|
+
}
|
|
107
|
+
exports.formatPricingPair = formatPricingPair;
|
|
108
|
+
/** Format context length */
|
|
109
|
+
function formatContext(length) {
|
|
110
|
+
if (length >= 1000000)
|
|
111
|
+
return `${(length / 1000000).toFixed(1)}M`;
|
|
112
|
+
return `${Math.round(length / 1000)}K`;
|
|
113
|
+
}
|
|
114
|
+
exports.formatContext = formatContext;
|
|
115
|
+
/** Search models */
|
|
116
|
+
function searchModels(models, query) {
|
|
117
|
+
if (!query.trim())
|
|
118
|
+
return models.slice(0, 20); // Show first 20 if no query
|
|
119
|
+
const q = query.toLowerCase();
|
|
120
|
+
return models
|
|
121
|
+
.filter((m) => m.id.toLowerCase().includes(q) || m.name.toLowerCase().includes(q))
|
|
122
|
+
.slice(0, 20); // Limit to 20 results
|
|
123
|
+
}
|
|
124
|
+
exports.searchModels = searchModels;
|
|
125
|
+
/** Check if URL is OpenRouter */
|
|
126
|
+
function isOpenRouterUrl(url) {
|
|
127
|
+
return url.toLowerCase().includes('openrouter.ai');
|
|
128
|
+
}
|
|
129
|
+
exports.isOpenRouterUrl = isOpenRouterUrl;
|
|
130
|
+
//# sourceMappingURL=openrouter-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter-catalog.js","sourceRoot":"","sources":["../../../src/api/services/openrouter-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRouter Interactive Model Picker
|
|
3
|
+
* CLI interface for browsing and selecting OpenRouter models
|
|
4
|
+
*/
|
|
5
|
+
export interface OpenRouterSelection {
|
|
6
|
+
model: string;
|
|
7
|
+
tierMapping?: {
|
|
8
|
+
opus?: string;
|
|
9
|
+
sonnet?: string;
|
|
10
|
+
haiku?: string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/** Interactive model picker */
|
|
14
|
+
export declare function pickOpenRouterModel(): Promise<OpenRouterSelection | null>;
|
|
15
|
+
//# sourceMappingURL=openrouter-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter-picker.d.ts","sourceRoot":"","sources":["../../../src/api/services/openrouter-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,+BAA+B;AAC/B,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAsG/E"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenRouter Interactive Model Picker
|
|
4
|
+
* CLI interface for browsing and selecting OpenRouter models
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.pickOpenRouterModel = void 0;
|
|
8
|
+
const prompt_1 = require("../../utils/prompt");
|
|
9
|
+
const ui_1 = require("../../utils/ui");
|
|
10
|
+
const openrouter_catalog_1 = require("./openrouter-catalog");
|
|
11
|
+
/** Interactive model picker */
|
|
12
|
+
async function pickOpenRouterModel() {
|
|
13
|
+
// Fetch models with spinner
|
|
14
|
+
const s = await (0, ui_1.spinner)('Fetching OpenRouter models...');
|
|
15
|
+
let models;
|
|
16
|
+
try {
|
|
17
|
+
models = await (0, openrouter_catalog_1.fetchOpenRouterModels)();
|
|
18
|
+
s.succeed(`Loaded ${models.length} models from OpenRouter`);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
s.fail(`Failed to fetch models: ${error.message}`);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
// Search loop
|
|
25
|
+
let selectedModel = null;
|
|
26
|
+
while (!selectedModel) {
|
|
27
|
+
const query = await prompt_1.InteractivePrompt.input('Search models (or press Enter to see popular)', {
|
|
28
|
+
default: '',
|
|
29
|
+
});
|
|
30
|
+
const results = (0, openrouter_catalog_1.searchModels)(models, query);
|
|
31
|
+
if (results.length === 0) {
|
|
32
|
+
console.log((0, ui_1.warn)('No models found. Try a different search term.'));
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
// Display results in table
|
|
36
|
+
console.log('');
|
|
37
|
+
const rows = results.map((m, i) => [
|
|
38
|
+
String(i + 1),
|
|
39
|
+
m.id.length > 35 ? m.id.slice(0, 32) + '...' : m.id,
|
|
40
|
+
(0, openrouter_catalog_1.formatPricingPair)(m.pricing),
|
|
41
|
+
(0, openrouter_catalog_1.formatContext)(m.context_length),
|
|
42
|
+
]);
|
|
43
|
+
console.log((0, ui_1.table)(rows, {
|
|
44
|
+
head: ['#', 'Model ID', 'Price (prompt/completion)', 'Context'],
|
|
45
|
+
}));
|
|
46
|
+
console.log('');
|
|
47
|
+
// Get selection
|
|
48
|
+
const selection = await prompt_1.InteractivePrompt.input(`Select model [1-${results.length}] or search again`, { default: '1' });
|
|
49
|
+
const index = parseInt(selection, 10) - 1;
|
|
50
|
+
if (index >= 0 && index < results.length) {
|
|
51
|
+
selectedModel = results[index];
|
|
52
|
+
}
|
|
53
|
+
else if (selection.trim()) {
|
|
54
|
+
// Treat as new search
|
|
55
|
+
const newResults = (0, openrouter_catalog_1.searchModels)(models, selection);
|
|
56
|
+
if (newResults.length === 1) {
|
|
57
|
+
selectedModel = newResults[0];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log((0, ui_1.info)(`Selected: ${(0, ui_1.color)(selectedModel.id, 'info')}`));
|
|
63
|
+
// Ask about tier mapping
|
|
64
|
+
const configureTiers = await prompt_1.InteractivePrompt.confirm('Configure model tier mapping (opus/sonnet/haiku)?', { default: false });
|
|
65
|
+
if (!configureTiers) {
|
|
66
|
+
return { model: selectedModel.id };
|
|
67
|
+
}
|
|
68
|
+
// Tier mapping
|
|
69
|
+
console.log('');
|
|
70
|
+
console.log((0, ui_1.dim)('Leave blank to skip a tier.'));
|
|
71
|
+
const tierMapping = {
|
|
72
|
+
opus: await prompt_1.InteractivePrompt.input('Opus tier model', {
|
|
73
|
+
default: suggestTier(selectedModel.id, 'opus', models),
|
|
74
|
+
}),
|
|
75
|
+
sonnet: await prompt_1.InteractivePrompt.input('Sonnet tier model', {
|
|
76
|
+
default: selectedModel.id,
|
|
77
|
+
}),
|
|
78
|
+
haiku: await prompt_1.InteractivePrompt.input('Haiku tier model', {
|
|
79
|
+
default: suggestTier(selectedModel.id, 'haiku', models),
|
|
80
|
+
}),
|
|
81
|
+
};
|
|
82
|
+
// Clean empty values
|
|
83
|
+
const cleanMapping = {
|
|
84
|
+
opus: tierMapping.opus || undefined,
|
|
85
|
+
sonnet: tierMapping.sonnet || undefined,
|
|
86
|
+
haiku: tierMapping.haiku || undefined,
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
model: selectedModel.id,
|
|
90
|
+
tierMapping: cleanMapping,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
exports.pickOpenRouterModel = pickOpenRouterModel;
|
|
94
|
+
/** Suggest tier model based on provider */
|
|
95
|
+
function suggestTier(selectedId, tier, models) {
|
|
96
|
+
const [provider] = selectedId.split('/');
|
|
97
|
+
const providerModels = models.filter((m) => m.id.startsWith(`${provider}/`));
|
|
98
|
+
if (providerModels.length < 2)
|
|
99
|
+
return '';
|
|
100
|
+
// Sort by price
|
|
101
|
+
const sorted = [...providerModels].sort((a, b) => {
|
|
102
|
+
const priceA = parseFloat(a.pricing.prompt) || 0;
|
|
103
|
+
const priceB = parseFloat(b.pricing.prompt) || 0;
|
|
104
|
+
return priceB - priceA; // Descending
|
|
105
|
+
});
|
|
106
|
+
if (tier === 'opus') {
|
|
107
|
+
return sorted[0]?.id ?? '';
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
return sorted[sorted.length - 1]?.id ?? '';
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=openrouter-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter-picker.js","sourceRoot":"","sources":["../../../src/api/services/openrouter-picker.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,9 @@ export declare function apiProfileExists(name: string): boolean;
|
|
|
15
15
|
export declare function isApiProfileConfigured(apiName: string): boolean;
|
|
16
16
|
/**
|
|
17
17
|
* List all API profiles
|
|
18
|
+
*
|
|
19
|
+
* Note: The 'default' profile (pointing to ~/.claude/settings.json) is excluded
|
|
20
|
+
* as it represents the user's native Claude subscription, not an API profile.
|
|
18
21
|
*/
|
|
19
22
|
export declare function listApiProfiles(): ApiListResult;
|
|
20
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile-reader.d.ts","sourceRoot":"","sources":["../../../src/api/services/profile-reader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"profile-reader.d.ts","sourceRoot":"","sources":["../../../src/api/services/profile-reader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAuC,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE1F;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWtD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAc/D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,aAAa,CAsD/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAO7C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C"}
|
|
@@ -34,7 +34,6 @@ const fs = __importStar(require("fs"));
|
|
|
34
34
|
const path = __importStar(require("path"));
|
|
35
35
|
const config_manager_1 = require("../../utils/config-manager");
|
|
36
36
|
const unified_config_loader_1 = require("../../config/unified-config-loader");
|
|
37
|
-
const secrets_manager_1 = require("../../config/secrets-manager");
|
|
38
37
|
/**
|
|
39
38
|
* Check if API profile exists in config
|
|
40
39
|
*/
|
|
@@ -57,14 +56,9 @@ exports.apiProfileExists = apiProfileExists;
|
|
|
57
56
|
*/
|
|
58
57
|
function isApiProfileConfigured(apiName) {
|
|
59
58
|
try {
|
|
60
|
-
if ((0, unified_config_loader_1.isUnifiedMode)()) {
|
|
61
|
-
const secrets = (0, secrets_manager_1.getProfileSecrets)(apiName);
|
|
62
|
-
const token = secrets?.ANTHROPIC_AUTH_TOKEN || '';
|
|
63
|
-
return token.length > 0 && !token.includes('YOUR_') && !token.includes('your-');
|
|
64
|
-
}
|
|
65
|
-
// Legacy: check settings.json file
|
|
66
59
|
const ccsDir = (0, config_manager_1.getCcsDir)();
|
|
67
60
|
const settingsPath = path.join(ccsDir, `${apiName}.settings.json`);
|
|
61
|
+
// Check settings.json file for API key
|
|
68
62
|
if (!fs.existsSync(settingsPath))
|
|
69
63
|
return false;
|
|
70
64
|
const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
|
|
@@ -78,16 +72,23 @@ function isApiProfileConfigured(apiName) {
|
|
|
78
72
|
exports.isApiProfileConfigured = isApiProfileConfigured;
|
|
79
73
|
/**
|
|
80
74
|
* List all API profiles
|
|
75
|
+
*
|
|
76
|
+
* Note: The 'default' profile (pointing to ~/.claude/settings.json) is excluded
|
|
77
|
+
* as it represents the user's native Claude subscription, not an API profile.
|
|
81
78
|
*/
|
|
82
79
|
function listApiProfiles() {
|
|
83
80
|
const profiles = [];
|
|
84
81
|
const variants = [];
|
|
85
82
|
if ((0, unified_config_loader_1.isUnifiedMode)()) {
|
|
86
83
|
const unifiedConfig = (0, unified_config_loader_1.loadOrCreateUnifiedConfig)();
|
|
87
|
-
for (const name of Object.
|
|
84
|
+
for (const [name, profile] of Object.entries(unifiedConfig.profiles)) {
|
|
85
|
+
// Skip 'default' profile - it's the user's native Claude settings
|
|
86
|
+
if (name === 'default' && profile.settings?.includes('.claude/settings.json')) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
88
89
|
profiles.push({
|
|
89
90
|
name,
|
|
90
|
-
settingsPath: 'config.yaml',
|
|
91
|
+
settingsPath: profile.settings || 'config.yaml',
|
|
91
92
|
isConfigured: isApiProfileConfigured(name),
|
|
92
93
|
configSource: 'unified',
|
|
93
94
|
});
|
|
@@ -104,6 +105,10 @@ function listApiProfiles() {
|
|
|
104
105
|
else {
|
|
105
106
|
const config = (0, config_manager_1.loadConfig)();
|
|
106
107
|
for (const [name, settingsPath] of Object.entries(config.profiles)) {
|
|
108
|
+
// Skip 'default' profile - it's the user's native Claude settings
|
|
109
|
+
if (name === 'default' && settingsPath.includes('.claude/settings.json')) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
107
112
|
profiles.push({
|
|
108
113
|
name,
|
|
109
114
|
settingsPath: settingsPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile-reader.js","sourceRoot":"","sources":["../../../src/api/services/profile-reader.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,+DAAmE;AACnE,8EAA8F;
|
|
1
|
+
{"version":3,"file":"profile-reader.js","sourceRoot":"","sources":["../../../src/api/services/profile-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile-writer.d.ts","sourceRoot":"","sources":["../../../src/api/services/profile-writer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"profile-writer.d.ts","sourceRoot":"","sources":["../../../src/api/services/profile-writer.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAiGpG,+BAA+B;AAC/B,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,GACnB,sBAAsB,CAmBxB;AA8CD,4BAA4B;AAC5B,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAWrE"}
|
|
@@ -33,7 +33,10 @@ const os = __importStar(require("os"));
|
|
|
33
33
|
const path = __importStar(require("path"));
|
|
34
34
|
const config_manager_1 = require("../../utils/config-manager");
|
|
35
35
|
const unified_config_loader_1 = require("../../config/unified-config-loader");
|
|
36
|
-
|
|
36
|
+
/** Check if URL is an OpenRouter endpoint */
|
|
37
|
+
function isOpenRouterUrl(baseUrl) {
|
|
38
|
+
return baseUrl.toLowerCase().includes('openrouter.ai');
|
|
39
|
+
}
|
|
37
40
|
/** Create settings.json file for API profile (legacy format) */
|
|
38
41
|
function createSettingsFile(name, baseUrl, apiKey, models) {
|
|
39
42
|
const ccsDir = (0, config_manager_1.getCcsDir)();
|
|
@@ -46,6 +49,8 @@ function createSettingsFile(name, baseUrl, apiKey, models) {
|
|
|
46
49
|
ANTHROPIC_DEFAULT_OPUS_MODEL: models.opus,
|
|
47
50
|
ANTHROPIC_DEFAULT_SONNET_MODEL: models.sonnet,
|
|
48
51
|
ANTHROPIC_DEFAULT_HAIKU_MODEL: models.haiku,
|
|
52
|
+
// OpenRouter requires explicitly blanking the API key to prevent conflicts
|
|
53
|
+
...(isOpenRouterUrl(baseUrl) && { ANTHROPIC_API_KEY: '' }),
|
|
49
54
|
},
|
|
50
55
|
};
|
|
51
56
|
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
|
|
@@ -85,6 +90,8 @@ function createApiProfileUnified(name, baseUrl, apiKey, models) {
|
|
|
85
90
|
ANTHROPIC_DEFAULT_OPUS_MODEL: models.opus,
|
|
86
91
|
ANTHROPIC_DEFAULT_SONNET_MODEL: models.sonnet,
|
|
87
92
|
ANTHROPIC_DEFAULT_HAIKU_MODEL: models.haiku,
|
|
93
|
+
// OpenRouter requires explicitly blanking the API key to prevent conflicts
|
|
94
|
+
...(isOpenRouterUrl(baseUrl) && { ANTHROPIC_API_KEY: '' }),
|
|
88
95
|
},
|
|
89
96
|
};
|
|
90
97
|
if (!fs.existsSync(ccsDir)) {
|
|
@@ -140,8 +147,6 @@ function removeApiProfileUnified(name) {
|
|
|
140
147
|
config.default = undefined;
|
|
141
148
|
}
|
|
142
149
|
(0, unified_config_loader_1.saveUnifiedConfig)(config);
|
|
143
|
-
// Remove any legacy secrets
|
|
144
|
-
(0, secrets_manager_1.deleteAllProfileSecrets)(name);
|
|
145
150
|
}
|
|
146
151
|
/** Remove API profile from legacy config */
|
|
147
152
|
function removeApiProfileLegacy(name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile-writer.js","sourceRoot":"","sources":["../../../src/api/services/profile-writer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,+DAAkF;AAClF,8EAI4C;
|
|
1
|
+
{"version":3,"file":"profile-writer.js","sourceRoot":"","sources":["../../../src/api/services/profile-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Presets for CLI
|
|
3
|
+
*
|
|
4
|
+
* Pre-configured templates for common API providers.
|
|
5
|
+
* Mirrors the UI presets in ui/src/lib/provider-presets.ts
|
|
6
|
+
*/
|
|
7
|
+
export type PresetCategory = 'recommended' | 'alternative';
|
|
8
|
+
export interface ProviderPreset {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
baseUrl: string;
|
|
13
|
+
defaultProfileName: string;
|
|
14
|
+
defaultModel: string;
|
|
15
|
+
apiKeyPlaceholder: string;
|
|
16
|
+
apiKeyHint: string;
|
|
17
|
+
category: PresetCategory;
|
|
18
|
+
/** Additional env vars for thinking mode, etc. */
|
|
19
|
+
extraEnv?: Record<string, string>;
|
|
20
|
+
/** Enable always thinking mode */
|
|
21
|
+
alwaysThinkingEnabled?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare const OPENROUTER_BASE_URL = "https://openrouter.ai/api";
|
|
24
|
+
/**
|
|
25
|
+
* Provider presets available via CLI and UI
|
|
26
|
+
*
|
|
27
|
+
* NOTE: Keep in sync with ui/src/lib/provider-presets.ts
|
|
28
|
+
*/
|
|
29
|
+
export declare const PROVIDER_PRESETS: ProviderPreset[];
|
|
30
|
+
/** Get preset by ID */
|
|
31
|
+
export declare function getPresetById(id: string): ProviderPreset | undefined;
|
|
32
|
+
/** Get all preset IDs */
|
|
33
|
+
export declare function getPresetIds(): string[];
|
|
34
|
+
/** Check if preset ID is valid */
|
|
35
|
+
export declare function isValidPresetId(id: string): boolean;
|
|
36
|
+
//# sourceMappingURL=provider-presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-presets.d.ts","sourceRoot":"","sources":["../../../src/api/services/provider-presets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,aAAa,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,kCAAkC;IAClC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,eAAO,MAAM,mBAAmB,8BAA8B,CAAC;AAE/D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAyD5C,CAAC;AAEF,uBAAuB;AACvB,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEpE;AAED,yBAAyB;AACzB,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC;AAED,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEnD"}
|