@kaitranntt/ccs 6.8.0-dev.1 → 7.0.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.md +5 -0
  2. package/dist/api/services/index.d.ts +3 -0
  3. package/dist/api/services/index.d.ts.map +1 -1
  4. package/dist/api/services/index.js +14 -1
  5. package/dist/api/services/index.js.map +1 -1
  6. package/dist/api/services/openrouter-catalog.d.ts +30 -0
  7. package/dist/api/services/openrouter-catalog.d.ts.map +1 -0
  8. package/dist/api/services/openrouter-catalog.js +130 -0
  9. package/dist/api/services/openrouter-catalog.js.map +1 -0
  10. package/dist/api/services/openrouter-picker.d.ts +15 -0
  11. package/dist/api/services/openrouter-picker.d.ts.map +1 -0
  12. package/dist/api/services/openrouter-picker.js +113 -0
  13. package/dist/api/services/openrouter-picker.js.map +1 -0
  14. package/dist/api/services/profile-reader.d.ts +3 -0
  15. package/dist/api/services/profile-reader.d.ts.map +1 -1
  16. package/dist/api/services/profile-reader.js +14 -9
  17. package/dist/api/services/profile-reader.js.map +1 -1
  18. package/dist/api/services/profile-writer.d.ts.map +1 -1
  19. package/dist/api/services/profile-writer.js +8 -3
  20. package/dist/api/services/profile-writer.js.map +1 -1
  21. package/dist/api/services/provider-presets.d.ts +36 -0
  22. package/dist/api/services/provider-presets.d.ts.map +1 -0
  23. package/dist/api/services/provider-presets.js +89 -0
  24. package/dist/api/services/provider-presets.js.map +1 -0
  25. package/dist/auth/profile-detector.d.ts.map +1 -1
  26. package/dist/auth/profile-detector.js +1 -4
  27. package/dist/auth/profile-detector.js.map +1 -1
  28. package/dist/cliproxy/remote-proxy-client.d.ts +1 -1
  29. package/dist/cliproxy/remote-proxy-client.d.ts.map +1 -1
  30. package/dist/cliproxy/remote-proxy-client.js +55 -13
  31. package/dist/cliproxy/remote-proxy-client.js.map +1 -1
  32. package/dist/commands/api-command.d.ts.map +1 -1
  33. package/dist/commands/api-command.js +82 -30
  34. package/dist/commands/api-command.js.map +1 -1
  35. package/dist/config/index.d.ts +0 -1
  36. package/dist/config/index.d.ts.map +1 -1
  37. package/dist/config/index.js +0 -1
  38. package/dist/config/index.js.map +1 -1
  39. package/dist/config/migration-manager.d.ts.map +1 -1
  40. package/dist/config/migration-manager.js +0 -3
  41. package/dist/config/migration-manager.js.map +1 -1
  42. package/dist/config/unified-config-loader.d.ts.map +1 -1
  43. package/dist/config/unified-config-loader.js +15 -0
  44. package/dist/config/unified-config-loader.js.map +1 -1
  45. package/dist/config/unified-config-types.d.ts +1 -20
  46. package/dist/config/unified-config-types.d.ts.map +1 -1
  47. package/dist/config/unified-config-types.js +2 -22
  48. package/dist/config/unified-config-types.js.map +1 -1
  49. package/dist/management/recovery-manager.d.ts +3 -0
  50. package/dist/management/recovery-manager.d.ts.map +1 -1
  51. package/dist/management/recovery-manager.js +6 -11
  52. package/dist/management/recovery-manager.js.map +1 -1
  53. package/dist/ui/assets/{accounts--0JKEYYO.js → accounts-DQwh-CP_.js} +1 -1
  54. package/dist/ui/assets/{analytics-CX5PurM9.js → analytics-BR435WpH.js} +1 -1
  55. package/dist/ui/assets/api-ALobfD8T.js +1 -0
  56. package/dist/ui/assets/card-ByK9DlE_.js +1 -0
  57. package/dist/ui/assets/{cliproxy-D4AoDTZB.js → cliproxy-BlkTmqj-.js} +2 -2
  58. package/dist/ui/assets/{cliproxy-control-panel-CJ2CfYod.js → cliproxy-control-panel-CvVI3tSn.js} +1 -1
  59. package/dist/ui/assets/{code-editor-DIj6qdUG.js → code-editor-Bm8H1Oot.js} +2 -2
  60. package/dist/ui/assets/{confirm-dialog-DZkzZLrs.js → confirm-dialog-DQeTgOVm.js} +1 -1
  61. package/dist/ui/assets/copilot-_EhQN_rN.js +4 -0
  62. package/dist/ui/assets/health-CApaflOt.js +1 -0
  63. package/dist/ui/assets/icons-DvvDkxaF.js +1 -0
  64. package/dist/ui/assets/index-DDxKFig1.js +46 -0
  65. package/dist/ui/assets/index-Dfyx0piD.css +1 -0
  66. package/dist/ui/assets/settings-ByVm4JFM.js +1 -0
  67. package/dist/ui/assets/{shared--pI8rTbP.js → shared-C9bG-pqJ.js} +1 -1
  68. package/dist/ui/assets/{switch-BP6SzLyZ.js → switch-CasTIVeB.js} +1 -1
  69. package/dist/ui/icons/openrouter.svg +1 -0
  70. package/dist/ui/index.html +3 -3
  71. package/dist/utils/config-manager.d.ts +3 -1
  72. package/dist/utils/config-manager.d.ts.map +1 -1
  73. package/dist/utils/config-manager.js +41 -5
  74. package/dist/utils/config-manager.js.map +1 -1
  75. package/dist/utils/update-checker.d.ts +4 -0
  76. package/dist/utils/update-checker.d.ts.map +1 -1
  77. package/dist/utils/update-checker.js +7 -3
  78. package/dist/utils/update-checker.js.map +1 -1
  79. package/dist/web-server/routes/config-routes.d.ts.map +1 -1
  80. package/dist/web-server/routes/config-routes.js +0 -30
  81. package/dist/web-server/routes/config-routes.js.map +1 -1
  82. package/dist/web-server/routes/index.js +1 -2
  83. package/dist/web-server/routes/index.js.map +1 -1
  84. package/dist/web-server/routes/profile-routes.d.ts +2 -0
  85. package/dist/web-server/routes/profile-routes.d.ts.map +1 -1
  86. package/dist/web-server/routes/profile-routes.js +32 -32
  87. package/dist/web-server/routes/profile-routes.js.map +1 -1
  88. package/package.json +1 -1
  89. package/scripts/dev-release.sh +113 -0
  90. package/scripts/postinstall.js +11 -220
  91. package/dist/config/secrets-manager.d.ts +0 -51
  92. package/dist/config/secrets-manager.d.ts.map +0 -1
  93. package/dist/config/secrets-manager.js +0 -194
  94. package/dist/config/secrets-manager.js.map +0 -1
  95. package/dist/ui/assets/api-D80tfZOx.js +0 -1
  96. package/dist/ui/assets/card-B-DPlvgo.js +0 -1
  97. package/dist/ui/assets/copilot-Q9tyCgYD.js +0 -4
  98. package/dist/ui/assets/health-Cw76uZRy.js +0 -1
  99. package/dist/ui/assets/icons-ZmwVoUeR.js +0 -1
  100. package/dist/ui/assets/index-C1W0iP_Z.js +0 -46
  101. package/dist/ui/assets/index-It66SkKf.css +0 -1
  102. package/dist/ui/assets/settings-CDdHW_gU.js +0 -1
package/README.md CHANGED
@@ -91,9 +91,14 @@ The dashboard provides visual management for all account types:
91
91
  | **Codex** | OAuth | `ccs codex` | Code generation |
92
92
  | **Copilot** | OAuth | `ccs copilot` | GitHub Copilot models |
93
93
  | **Antigravity** | OAuth | `ccs agy` | Alternative routing |
94
+ | **OpenRouter** | API Key | `ccs openrouter` | 300+ models, unified API |
94
95
  | **GLM** | API Key | `ccs glm` | Cost-optimized execution |
95
96
  | **Kimi** | API Key | `ccs kimi` | Long-context, thinking mode |
96
97
 
98
+ **OpenRouter Integration** (v7.0.0): CCS v7.0.0 adds OpenRouter with interactive model picker, dynamic discovery, and tier mapping (opus/sonnet/haiku). Create via `ccs api create --preset openrouter` or dashboard.
99
+
100
+ ![OpenRouter API Profiles](assets/screenshots/api-profiles-openrouter.webp)
101
+
97
102
  > **OAuth providers** authenticate via browser on first run. Tokens are cached in `~/.ccs/cliproxy/auth/`.
98
103
 
99
104
  **Powered by:**
@@ -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;AAOH,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,CAkB/D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,aAAa,CA8C/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAO7C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C"}
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.keys(unifiedConfig.profiles)) {
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":"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"}
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":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAwFpG,+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;AAiDD,4BAA4B;AAC5B,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAWrE"}
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
- const secrets_manager_1 = require("../../config/secrets-manager");
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":"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"}
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"}