@cloudcli-ai/cloudcli 1.37.0 → 1.37.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 (112) hide show
  1. package/dist/assets/index-D3jfzuKN.css +32 -0
  2. package/dist/assets/{index-eGqPeIEu.js → index-DTMWjJj8.js} +324 -305
  3. package/dist/index.html +2 -2
  4. package/dist-server/server/modules/commands/commands.routes.js +3 -3
  5. package/dist-server/server/modules/commands/commands.routes.js.map +1 -1
  6. package/dist-server/server/modules/commands/tests/commands.test.js +2 -7
  7. package/dist-server/server/modules/commands/tests/commands.test.js.map +1 -1
  8. package/dist-server/server/modules/database/index.js +2 -0
  9. package/dist-server/server/modules/database/index.js.map +1 -1
  10. package/dist-server/server/modules/database/migrations.js +18 -1
  11. package/dist-server/server/modules/database/migrations.js.map +1 -1
  12. package/dist-server/server/modules/database/repositories/provider-models.js +112 -0
  13. package/dist-server/server/modules/database/repositories/provider-models.js.map +1 -0
  14. package/dist-server/server/modules/database/repositories/sessions.db.js +63 -7
  15. package/dist-server/server/modules/database/repositories/sessions.db.js.map +1 -1
  16. package/dist-server/server/modules/database/schema.js +28 -3
  17. package/dist-server/server/modules/database/schema.js.map +1 -1
  18. package/dist-server/server/modules/database/tests/provider-models.db.integration.test.js +102 -0
  19. package/dist-server/server/modules/database/tests/provider-models.db.integration.test.js.map +1 -0
  20. package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js +2 -1
  21. package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js.map +1 -1
  22. package/dist-server/server/modules/database/tests/sessions.db.integration.test.js +22 -0
  23. package/dist-server/server/modules/database/tests/sessions.db.integration.test.js.map +1 -1
  24. package/dist-server/server/modules/file-tree/file-tree.module.js +5 -1
  25. package/dist-server/server/modules/file-tree/file-tree.module.js.map +1 -1
  26. package/dist-server/server/modules/file-tree/file-tree.service.js +50 -18
  27. package/dist-server/server/modules/file-tree/file-tree.service.js.map +1 -1
  28. package/dist-server/server/modules/file-tree/tests/file-tree.service.test.js +83 -7
  29. package/dist-server/server/modules/file-tree/tests/file-tree.service.test.js.map +1 -1
  30. package/dist-server/server/modules/providers/list/claude/claude-models.provider.js +46 -14
  31. package/dist-server/server/modules/providers/list/claude/claude-models.provider.js.map +1 -1
  32. package/dist-server/server/modules/providers/list/claude/claude-runtime.provider.js +8 -15
  33. package/dist-server/server/modules/providers/list/claude/claude-runtime.provider.js.map +1 -1
  34. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +58 -71
  35. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -1
  36. package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js +1 -54
  37. package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js.map +1 -1
  38. package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js +7 -7
  39. package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js.map +1 -1
  40. package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js +32 -669
  41. package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js.map +1 -1
  42. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +105 -328
  43. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js.map +1 -1
  44. package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js +0 -12
  45. package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js.map +1 -1
  46. package/dist-server/server/modules/providers/provider.routes.js +139 -31
  47. package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
  48. package/dist-server/server/modules/providers/services/provider-models.service.js +167 -199
  49. package/dist-server/server/modules/providers/services/provider-models.service.js.map +1 -1
  50. package/dist-server/server/modules/providers/services/provider-runtime.service.js +2 -2
  51. package/dist-server/server/modules/providers/services/provider-runtime.service.js.map +1 -1
  52. package/dist-server/server/modules/providers/services/session-conversations-search.service.js +12 -4
  53. package/dist-server/server/modules/providers/services/session-conversations-search.service.js.map +1 -1
  54. package/dist-server/server/modules/providers/services/sessions.service.js +62 -3
  55. package/dist-server/server/modules/providers/services/sessions.service.js.map +1 -1
  56. package/dist-server/server/modules/providers/tests/codex-sessions.test.js +53 -17
  57. package/dist-server/server/modules/providers/tests/codex-sessions.test.js.map +1 -1
  58. package/dist-server/server/modules/providers/tests/opencode-models.test.js +15 -126
  59. package/dist-server/server/modules/providers/tests/opencode-models.test.js.map +1 -1
  60. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +5 -5
  61. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js.map +1 -1
  62. package/dist-server/server/modules/providers/tests/provider-models.service.test.js +175 -292
  63. package/dist-server/server/modules/providers/tests/provider-models.service.test.js.map +1 -1
  64. package/dist-server/server/modules/providers/tests/provider-runtime.service.test.js +2 -6
  65. package/dist-server/server/modules/providers/tests/provider-runtime.service.test.js.map +1 -1
  66. package/dist-server/server/modules/providers/tests/provider-token-usage.service.test.js +1 -0
  67. package/dist-server/server/modules/providers/tests/provider-token-usage.service.test.js.map +1 -1
  68. package/dist-server/server/modules/providers/tests/provider.routes.test.js +126 -0
  69. package/dist-server/server/modules/providers/tests/provider.routes.test.js.map +1 -0
  70. package/dist-server/server/modules/providers/tests/sessions.service.test.js +87 -0
  71. package/dist-server/server/modules/providers/tests/sessions.service.test.js.map +1 -0
  72. package/dist-server/server/modules/websocket/services/chat-websocket.service.js +5 -1
  73. package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -1
  74. package/package.json +3 -3
  75. package/server/modules/commands/commands.routes.ts +3 -3
  76. package/server/modules/commands/tests/commands.test.ts +2 -7
  77. package/server/modules/database/index.ts +2 -0
  78. package/server/modules/database/migrations.ts +20 -0
  79. package/server/modules/database/repositories/provider-models.ts +168 -0
  80. package/server/modules/database/repositories/sessions.db.ts +85 -8
  81. package/server/modules/database/schema.ts +29 -3
  82. package/server/modules/database/tests/provider-models.db.integration.test.ts +125 -0
  83. package/server/modules/database/tests/sessions-provider-mapping.test.ts +2 -1
  84. package/server/modules/database/tests/sessions.db.integration.test.ts +32 -0
  85. package/server/modules/file-tree/file-tree.module.ts +5 -1
  86. package/server/modules/file-tree/file-tree.service.ts +68 -20
  87. package/server/modules/file-tree/tests/file-tree.service.test.ts +104 -7
  88. package/server/modules/providers/list/claude/claude-models.provider.ts +46 -14
  89. package/server/modules/providers/list/claude/claude-runtime.provider.js +8 -16
  90. package/server/modules/providers/list/codex/codex-models.provider.ts +58 -99
  91. package/server/modules/providers/list/codex/codex-session-synchronizer.provider.ts +1 -60
  92. package/server/modules/providers/list/codex/codex-sessions.provider.ts +7 -7
  93. package/server/modules/providers/list/cursor/cursor-models.provider.ts +32 -710
  94. package/server/modules/providers/list/opencode/opencode-models.provider.ts +105 -413
  95. package/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.ts +0 -13
  96. package/server/modules/providers/provider.routes.ts +185 -33
  97. package/server/modules/providers/services/provider-models.service.ts +223 -288
  98. package/server/modules/providers/services/provider-runtime.service.ts +2 -3
  99. package/server/modules/providers/services/session-conversations-search.service.ts +12 -4
  100. package/server/modules/providers/services/sessions.service.ts +87 -3
  101. package/server/modules/providers/tests/codex-sessions.test.ts +57 -18
  102. package/server/modules/providers/tests/opencode-models.test.ts +34 -135
  103. package/server/modules/providers/tests/opencode-sessions.test.ts +5 -5
  104. package/server/modules/providers/tests/provider-models.service.test.ts +353 -450
  105. package/server/modules/providers/tests/provider-runtime.service.test.ts +2 -6
  106. package/server/modules/providers/tests/provider-token-usage.service.test.ts +1 -0
  107. package/server/modules/providers/tests/provider.routes.test.ts +183 -0
  108. package/server/modules/providers/tests/sessions.service.test.ts +127 -0
  109. package/server/modules/websocket/services/chat-websocket.service.ts +5 -1
  110. package/server/shared/interfaces.ts +4 -6
  111. package/server/shared/types.ts +29 -17
  112. package/dist/assets/index-DSlds633.css +0 -32
@@ -1,667 +1,36 @@
1
1
  import { access, readdir } from 'node:fs/promises';
2
2
  import os from 'node:os';
3
3
  import path from 'node:path';
4
- import crossSpawn from 'cross-spawn';
5
4
  import { buildDefaultProviderCurrentActiveModel, sanitizeLeafDirectoryName, } from '../../../../shared/utils.js';
6
- export const CURSOR_FALLBACK_MODELS = {
5
+ /** Curated Cursor catalog shipped as immutable CloudCLI defaults. */
6
+ export const CURSOR_PREDEFINED_MODELS = {
7
7
  OPTIONS: [
8
- {
9
- value: "auto",
10
- label: "auto",
11
- description: "Auto",
12
- },
13
- {
14
- value: "composer-2-fast",
15
- label: "composer-2-fast",
16
- description: "Composer 2 Fast",
17
- },
18
- {
19
- value: "composer-2",
20
- label: "composer-2",
21
- description: "Composer 2",
22
- },
23
- {
24
- value: "gpt-5.3-codex-low",
25
- label: "gpt-5.3-codex-low",
26
- description: "Codex 5.3 Low",
27
- },
28
- {
29
- value: "gpt-5.3-codex-low-fast",
30
- label: "gpt-5.3-codex-low-fast",
31
- description: "Codex 5.3 Low Fast",
32
- },
33
- {
34
- value: "gpt-5.3-codex",
35
- label: "gpt-5.3-codex",
36
- description: "Codex 5.3",
37
- },
38
- {
39
- value: "gpt-5.3-codex-fast",
40
- label: "gpt-5.3-codex-fast",
41
- description: "Codex 5.3 Fast",
42
- },
43
- {
44
- value: "gpt-5.3-codex-high",
45
- label: "gpt-5.3-codex-high",
46
- description: "Codex 5.3 High",
47
- },
48
- {
49
- value: "gpt-5.3-codex-high-fast",
50
- label: "gpt-5.3-codex-high-fast",
51
- description: "Codex 5.3 High Fast",
52
- },
53
- {
54
- value: "gpt-5.3-codex-xhigh",
55
- label: "gpt-5.3-codex-xhigh",
56
- description: "Codex 5.3 Extra High",
57
- },
58
- {
59
- value: "gpt-5.3-codex-xhigh-fast",
60
- label: "gpt-5.3-codex-xhigh-fast",
61
- description: "Codex 5.3 Extra High Fast",
62
- },
63
- {
64
- value: "gpt-5.2",
65
- label: "gpt-5.2",
66
- description: "GPT-5.2",
67
- },
68
- {
69
- value: "gpt-5.2-codex-low",
70
- label: "gpt-5.2-codex-low",
71
- description: "Codex 5.2 Low",
72
- },
73
- {
74
- value: "gpt-5.2-codex-low-fast",
75
- label: "gpt-5.2-codex-low-fast",
76
- description: "Codex 5.2 Low Fast",
77
- },
78
- {
79
- value: "gpt-5.2-codex",
80
- label: "gpt-5.2-codex",
81
- description: "Codex 5.2",
82
- },
83
- {
84
- value: "gpt-5.2-codex-fast",
85
- label: "gpt-5.2-codex-fast",
86
- description: "Codex 5.2 Fast",
87
- },
88
- {
89
- value: "gpt-5.2-codex-high",
90
- label: "gpt-5.2-codex-high",
91
- description: "Codex 5.2 High",
92
- },
93
- {
94
- value: "gpt-5.2-codex-high-fast",
95
- label: "gpt-5.2-codex-high-fast",
96
- description: "Codex 5.2 High Fast",
97
- },
98
- {
99
- value: "gpt-5.2-codex-xhigh",
100
- label: "gpt-5.2-codex-xhigh",
101
- description: "Codex 5.2 Extra High",
102
- },
103
- {
104
- value: "gpt-5.2-codex-xhigh-fast",
105
- label: "gpt-5.2-codex-xhigh-fast",
106
- description: "Codex 5.2 Extra High Fast",
107
- },
108
- {
109
- value: "gpt-5.1-codex-max-low",
110
- label: "gpt-5.1-codex-max-low",
111
- description: "Codex 5.1 Max Low",
112
- },
113
- {
114
- value: "gpt-5.1-codex-max-low-fast",
115
- label: "gpt-5.1-codex-max-low-fast",
116
- description: "Codex 5.1 Max Low Fast",
117
- },
118
- {
119
- value: "gpt-5.1-codex-max-medium",
120
- label: "gpt-5.1-codex-max-medium",
121
- description: "Codex 5.1 Max",
122
- },
123
- {
124
- value: "gpt-5.1-codex-max-medium-fast",
125
- label: "gpt-5.1-codex-max-medium-fast",
126
- description: "Codex 5.1 Max Medium Fast",
127
- },
128
- {
129
- value: "gpt-5.1-codex-max-high",
130
- label: "gpt-5.1-codex-max-high",
131
- description: "Codex 5.1 Max High",
132
- },
133
- {
134
- value: "gpt-5.1-codex-max-high-fast",
135
- label: "gpt-5.1-codex-max-high-fast",
136
- description: "Codex 5.1 Max High Fast",
137
- },
138
- {
139
- value: "gpt-5.1-codex-max-xhigh",
140
- label: "gpt-5.1-codex-max-xhigh",
141
- description: "Codex 5.1 Max Extra High",
142
- },
143
- {
144
- value: "gpt-5.1-codex-max-xhigh-fast",
145
- label: "gpt-5.1-codex-max-xhigh-fast",
146
- description: "Codex 5.1 Max Extra High Fast",
147
- },
148
- {
149
- value: "composer-2.5",
150
- label: "composer-2.5",
151
- description: "Composer 2.5",
152
- },
153
- {
154
- value: "gpt-5.5-high",
155
- label: "gpt-5.5-high",
156
- description: "GPT-5.5 1M High",
157
- },
158
- {
159
- value: "gpt-5.5-high-fast",
160
- label: "gpt-5.5-high-fast",
161
- description: "GPT-5.5 High Fast",
162
- },
163
- {
164
- value: "claude-opus-4-7-thinking-high",
165
- label: "claude-opus-4-7-thinking-high",
166
- description: "Opus 4.7 1M High Thinking",
167
- },
168
- {
169
- value: "gpt-5.4-high",
170
- label: "gpt-5.4-high",
171
- description: "GPT-5.4 1M High",
172
- },
173
- {
174
- value: "gpt-5.4-high-fast",
175
- label: "gpt-5.4-high-fast",
176
- description: "GPT-5.4 High Fast",
177
- },
178
- {
179
- value: "claude-4.6-opus-high-thinking",
180
- label: "claude-4.6-opus-high-thinking",
181
- description: "Opus 4.6 1M Thinking",
182
- },
183
- {
184
- value: "claude-4.6-opus-high-thinking-fast",
185
- label: "claude-4.6-opus-high-thinking-fast",
186
- description: "Opus 4.6 1M Thinking Fast",
187
- },
188
- {
189
- value: "composer-2.5-fast",
190
- label: "composer-2.5-fast",
191
- description: "Composer 2.5 Fast",
192
- },
193
- {
194
- value: "gpt-5.5-none",
195
- label: "gpt-5.5-none",
196
- description: "GPT-5.5 1M None",
197
- },
198
- {
199
- value: "gpt-5.5-none-fast",
200
- label: "gpt-5.5-none-fast",
201
- description: "GPT-5.5 None Fast",
202
- },
203
- {
204
- value: "gpt-5.5-low",
205
- label: "gpt-5.5-low",
206
- description: "GPT-5.5 1M Low",
207
- },
208
- {
209
- value: "gpt-5.5-low-fast",
210
- label: "gpt-5.5-low-fast",
211
- description: "GPT-5.5 Low Fast",
212
- },
213
- {
214
- value: "gpt-5.5-medium",
215
- label: "gpt-5.5-medium",
216
- description: "GPT-5.5 1M",
217
- },
218
- {
219
- value: "gpt-5.5-medium-fast",
220
- label: "gpt-5.5-medium-fast",
221
- description: "GPT-5.5 Fast",
222
- },
223
- {
224
- value: "gpt-5.5-extra-high",
225
- label: "gpt-5.5-extra-high",
226
- description: "GPT-5.5 1M Extra High",
227
- },
228
- {
229
- value: "gpt-5.5-extra-high-fast",
230
- label: "gpt-5.5-extra-high-fast",
231
- description: "GPT-5.5 Extra High Fast",
232
- },
233
- {
234
- value: "claude-4.6-sonnet-medium",
235
- label: "claude-4.6-sonnet-medium",
236
- description: "Sonnet 4.6 1M",
237
- },
238
- {
239
- value: "claude-4.6-sonnet-medium-thinking",
240
- label: "claude-4.6-sonnet-medium-thinking",
241
- description: "Sonnet 4.6 1M Thinking",
242
- },
243
- {
244
- value: "claude-opus-4-7-low",
245
- label: "claude-opus-4-7-low",
246
- description: "Opus 4.7 1M Low",
247
- },
248
- {
249
- value: "claude-opus-4-7-low-fast",
250
- label: "claude-opus-4-7-low-fast",
251
- description: "Opus 4.7 1M Low Fast",
252
- },
253
- {
254
- value: "claude-opus-4-7-medium",
255
- label: "claude-opus-4-7-medium",
256
- description: "Opus 4.7 1M Medium",
257
- },
258
- {
259
- value: "claude-opus-4-7-medium-fast",
260
- label: "claude-opus-4-7-medium-fast",
261
- description: "Opus 4.7 1M Medium Fast",
262
- },
263
- {
264
- value: "claude-opus-4-7-high",
265
- label: "claude-opus-4-7-high",
266
- description: "Opus 4.7 1M High",
267
- },
268
- {
269
- value: "claude-opus-4-7-high-fast",
270
- label: "claude-opus-4-7-high-fast",
271
- description: "Opus 4.7 1M High Fast",
272
- },
273
- {
274
- value: "claude-opus-4-7-xhigh",
275
- label: "claude-opus-4-7-xhigh",
276
- description: "Opus 4.7 1M",
277
- },
278
- {
279
- value: "claude-opus-4-7-xhigh-fast",
280
- label: "claude-opus-4-7-xhigh-fast",
281
- description: "Opus 4.7 1M Fast",
282
- },
283
- {
284
- value: "claude-opus-4-7-max",
285
- label: "claude-opus-4-7-max",
286
- description: "Opus 4.7 1M Max",
287
- },
288
- {
289
- value: "claude-opus-4-7-max-fast",
290
- label: "claude-opus-4-7-max-fast",
291
- description: "Opus 4.7 1M Max Fast",
292
- },
293
- {
294
- value: "claude-opus-4-7-thinking-low",
295
- label: "claude-opus-4-7-thinking-low",
296
- description: "Opus 4.7 1M Low Thinking",
297
- },
298
- {
299
- value: "claude-opus-4-7-thinking-low-fast",
300
- label: "claude-opus-4-7-thinking-low-fast",
301
- description: "Opus 4.7 1M Low Thinking Fast",
302
- },
303
- {
304
- value: "claude-opus-4-7-thinking-medium",
305
- label: "claude-opus-4-7-thinking-medium",
306
- description: "Opus 4.7 1M Medium Thinking",
307
- },
308
- {
309
- value: "claude-opus-4-7-thinking-medium-fast",
310
- label: "claude-opus-4-7-thinking-medium-fast",
311
- description: "Opus 4.7 1M Medium Thinking Fast",
312
- },
313
- {
314
- value: "claude-opus-4-7-thinking-high-fast",
315
- label: "claude-opus-4-7-thinking-high-fast",
316
- description: "Opus 4.7 1M High Thinking Fast",
317
- },
318
- {
319
- value: "claude-opus-4-7-thinking-xhigh",
320
- label: "claude-opus-4-7-thinking-xhigh",
321
- description: "Opus 4.7 1M Thinking",
322
- },
323
- {
324
- value: "claude-opus-4-7-thinking-xhigh-fast",
325
- label: "claude-opus-4-7-thinking-xhigh-fast",
326
- description: "Opus 4.7 1M Thinking Fast",
327
- },
328
- {
329
- value: "claude-opus-4-7-thinking-max",
330
- label: "claude-opus-4-7-thinking-max",
331
- description: "Opus 4.7 1M Max Thinking",
332
- },
333
- {
334
- value: "claude-opus-4-7-thinking-max-fast",
335
- label: "claude-opus-4-7-thinking-max-fast",
336
- description: "Opus 4.7 1M Max Thinking Fast",
337
- },
338
- {
339
- value: "grok-build-0.1",
340
- label: "grok-build-0.1",
341
- description: "Grok Build 0.1 1M",
342
- },
343
- {
344
- value: "gpt-5.4-low",
345
- label: "gpt-5.4-low",
346
- description: "GPT-5.4 1M Low",
347
- },
348
- {
349
- value: "gpt-5.4-medium",
350
- label: "gpt-5.4-medium",
351
- description: "GPT-5.4 1M",
352
- },
353
- {
354
- value: "gpt-5.4-medium-fast",
355
- label: "gpt-5.4-medium-fast",
356
- description: "GPT-5.4 Fast",
357
- },
358
- {
359
- value: "gpt-5.4-xhigh",
360
- label: "gpt-5.4-xhigh",
361
- description: "GPT-5.4 1M Extra High",
362
- },
363
- {
364
- value: "gpt-5.4-xhigh-fast",
365
- label: "gpt-5.4-xhigh-fast",
366
- description: "GPT-5.4 Extra High Fast",
367
- },
368
- {
369
- value: "claude-4.6-opus-high",
370
- label: "claude-4.6-opus-high",
371
- description: "Opus 4.6 1M",
372
- },
373
- {
374
- value: "claude-4.6-opus-max",
375
- label: "claude-4.6-opus-max",
376
- description: "Opus 4.6 1M Max",
377
- },
378
- {
379
- value: "claude-4.6-opus-max-thinking",
380
- label: "claude-4.6-opus-max-thinking",
381
- description: "Opus 4.6 1M Max Thinking",
382
- },
383
- {
384
- value: "claude-4.6-opus-max-thinking-fast",
385
- label: "claude-4.6-opus-max-thinking-fast",
386
- description: "Opus 4.6 1M Max Thinking Fast",
387
- },
388
- {
389
- value: "claude-4.5-opus-high",
390
- label: "claude-4.5-opus-high",
391
- description: "Opus 4.5",
392
- },
393
- {
394
- value: "claude-4.5-opus-high-thinking",
395
- label: "claude-4.5-opus-high-thinking",
396
- description: "Opus 4.5 Thinking",
397
- },
398
- {
399
- value: "gpt-5.2-low",
400
- label: "gpt-5.2-low",
401
- description: "GPT-5.2 Low",
402
- },
403
- {
404
- value: "gpt-5.2-low-fast",
405
- label: "gpt-5.2-low-fast",
406
- description: "GPT-5.2 Low Fast",
407
- },
408
- {
409
- value: "gpt-5.2-fast",
410
- label: "gpt-5.2-fast",
411
- description: "GPT-5.2 Fast",
412
- },
413
- {
414
- value: "gpt-5.2-high",
415
- label: "gpt-5.2-high",
416
- description: "GPT-5.2 High",
417
- },
418
- {
419
- value: "gpt-5.2-high-fast",
420
- label: "gpt-5.2-high-fast",
421
- description: "GPT-5.2 High Fast",
422
- },
423
- {
424
- value: "gpt-5.2-xhigh",
425
- label: "gpt-5.2-xhigh",
426
- description: "GPT-5.2 Extra High",
427
- },
428
- {
429
- value: "gpt-5.2-xhigh-fast",
430
- label: "gpt-5.2-xhigh-fast",
431
- description: "GPT-5.2 Extra High Fast",
432
- },
433
- {
434
- value: "gpt-5.4-mini-none",
435
- label: "gpt-5.4-mini-none",
436
- description: "GPT-5.4 Mini None",
437
- },
438
- {
439
- value: "gpt-5.4-mini-low",
440
- label: "gpt-5.4-mini-low",
441
- description: "GPT-5.4 Mini Low",
442
- },
443
- {
444
- value: "gpt-5.4-mini-medium",
445
- label: "gpt-5.4-mini-medium",
446
- description: "GPT-5.4 Mini",
447
- },
448
- {
449
- value: "gpt-5.4-mini-high",
450
- label: "gpt-5.4-mini-high",
451
- description: "GPT-5.4 Mini High",
452
- },
453
- {
454
- value: "gpt-5.4-mini-xhigh",
455
- label: "gpt-5.4-mini-xhigh",
456
- description: "GPT-5.4 Mini Extra High",
457
- },
458
- {
459
- value: "gpt-5.4-nano-none",
460
- label: "gpt-5.4-nano-none",
461
- description: "GPT-5.4 Nano None",
462
- },
463
- {
464
- value: "gpt-5.4-nano-low",
465
- label: "gpt-5.4-nano-low",
466
- description: "GPT-5.4 Nano Low",
467
- },
468
- {
469
- value: "gpt-5.4-nano-medium",
470
- label: "gpt-5.4-nano-medium",
471
- description: "GPT-5.4 Nano",
472
- },
473
- {
474
- value: "gpt-5.4-nano-high",
475
- label: "gpt-5.4-nano-high",
476
- description: "GPT-5.4 Nano High",
477
- },
478
- {
479
- value: "gpt-5.4-nano-xhigh",
480
- label: "gpt-5.4-nano-xhigh",
481
- description: "GPT-5.4 Nano Extra High",
482
- },
483
- {
484
- value: "grok-4.3",
485
- label: "grok-4.3",
486
- description: "Grok 4.3 1M",
487
- },
488
- {
489
- value: "claude-4.5-sonnet",
490
- label: "claude-4.5-sonnet",
491
- description: "Sonnet 4.5",
492
- },
493
- {
494
- value: "claude-4.5-sonnet-thinking",
495
- label: "claude-4.5-sonnet-thinking",
496
- description: "Sonnet 4.5 Thinking",
497
- },
498
- {
499
- value: "gpt-5.1-low",
500
- label: "gpt-5.1-low",
501
- description: "GPT-5.1 Low",
502
- },
503
- {
504
- value: "gpt-5.1",
505
- label: "gpt-5.1",
506
- description: "GPT-5.1",
507
- },
508
- {
509
- value: "gpt-5.1-high",
510
- label: "gpt-5.1-high",
511
- description: "GPT-5.1 High",
512
- },
513
- {
514
- value: "gpt-5.1-codex-mini-low",
515
- label: "gpt-5.1-codex-mini-low",
516
- description: "Codex 5.1 Mini Low",
517
- },
518
- {
519
- value: "gpt-5.1-codex-mini",
520
- label: "gpt-5.1-codex-mini",
521
- description: "Codex 5.1 Mini",
522
- },
523
- {
524
- value: "gpt-5.1-codex-mini-high",
525
- label: "gpt-5.1-codex-mini-high",
526
- description: "Codex 5.1 Mini High",
527
- },
528
- {
529
- value: "claude-4-sonnet",
530
- label: "claude-4-sonnet",
531
- description: "Sonnet 4",
532
- },
533
- {
534
- value: "claude-4-sonnet-thinking",
535
- label: "claude-4-sonnet-thinking",
536
- description: "Sonnet 4 Thinking",
537
- },
538
- {
539
- value: "gpt-5-mini",
540
- label: "gpt-5-mini",
541
- description: "GPT-5 Mini",
542
- },
543
- {
544
- value: "kimi-k2.5",
545
- label: "kimi-k2.5",
546
- description: "Kimi K2.5",
547
- },
8
+ { value: 'auto', label: 'Auto', description: 'Let Cursor choose the model.' },
9
+ {
10
+ value: 'composer-2.5-fast',
11
+ label: 'Composer 2.5 Fast',
12
+ description: 'Cursor Composer 2.5 with faster inference.',
13
+ },
14
+ {
15
+ value: 'composer-2.5',
16
+ label: 'Composer 2.5',
17
+ description: 'Cursor model for efficient, long-running coding tasks.',
18
+ },
19
+ { value: 'gpt-5.6-sol', label: 'GPT-5.6 Sol' },
20
+ { value: 'gpt-5.6-terra', label: 'GPT-5.6 Terra' },
21
+ { value: 'gpt-5.6-luna', label: 'GPT-5.6 Luna' },
22
+ { value: 'gpt-5.5', label: 'GPT-5.5' },
23
+ { value: 'claude-fable-5', label: 'Claude Fable 5' },
24
+ { value: 'claude-opus-5', label: 'Claude Opus 5' },
25
+ { value: 'claude-opus-4-8', label: 'Claude Opus 4.8' },
26
+ { value: 'claude-sonnet-5', label: 'Claude Sonnet 5' },
27
+ { value: 'grok-4.5', label: 'Grok 4.5' },
28
+ { value: 'gemini-3.1-pro', label: 'Gemini 3.1 Pro' },
29
+ { value: 'kimi-k2.5', label: 'Kimi K2.5' },
548
30
  ],
549
- DEFAULT: "composer-2.5-fast",
31
+ DEFAULT: 'auto',
550
32
  };
551
- const CURSOR_MODELS_TIMEOUT_MS = 10_000;
552
33
  const CURSOR_CHATS_ROOT = path.join(os.homedir(), '.cursor', 'chats');
553
- // cross-spawn resolves .cmd shims/PATHEXT on Windows and delegates to
554
- // child_process.spawn everywhere else.
555
- const spawnFunction = crossSpawn;
556
- const ANSI_PATTERN = new RegExp(
557
- // eslint-disable-next-line no-control-regex
558
- '[\\u001B\\u009B][[\\]()#;?]*(?:'
559
- + '(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]'
560
- + '|(?:[\\dA-PR-TZcf-ntqry=><~]))', 'g');
561
- const stripAnsi = (value) => value.replace(ANSI_PATTERN, '');
562
- const parseModelLine = (line) => {
563
- const trimmed = line.trim();
564
- if (!trimmed
565
- || trimmed === 'Available models'
566
- || trimmed.startsWith('Loading models')
567
- || trimmed.startsWith('Tip:')) {
568
- return null;
569
- }
570
- const match = trimmed.match(/^(.+?)\s+-\s+(.+)$/);
571
- if (!match) {
572
- return null;
573
- }
574
- const name = match[1].trim();
575
- let description = match[2].trim();
576
- const current = /\(current\)/i.test(description);
577
- const defaultModel = /\(default\)/i.test(description);
578
- description = description.replace(/\s*\((current|default)\)/gi, '').replace(/\s{2,}/g, ' ').trim();
579
- return {
580
- name,
581
- description,
582
- current,
583
- default: defaultModel,
584
- };
585
- };
586
- const parseModelsOutput = (text) => {
587
- const models = [];
588
- for (const line of stripAnsi(text).split(/\r?\n/)) {
589
- const parsed = parseModelLine(line);
590
- if (parsed) {
591
- models.push(parsed);
592
- }
593
- }
594
- return models;
595
- };
596
- const runCursorListModels = () => new Promise((resolve, reject) => {
597
- const cursorProcess = spawnFunction('cursor-agent', ['--list-models'], {
598
- env: { ...process.env },
599
- });
600
- let stdout = '';
601
- let stderr = '';
602
- let settled = false;
603
- const timer = setTimeout(() => {
604
- cursorProcess.kill('SIGTERM');
605
- if (!settled) {
606
- settled = true;
607
- reject(new Error('cursor-agent --list-models timed out'));
608
- }
609
- }, CURSOR_MODELS_TIMEOUT_MS);
610
- const finish = (error, output) => {
611
- if (settled) {
612
- return;
613
- }
614
- settled = true;
615
- clearTimeout(timer);
616
- if (error) {
617
- reject(error);
618
- return;
619
- }
620
- resolve(output);
621
- };
622
- cursorProcess.stdout?.on('data', (chunk) => {
623
- stdout += chunk.toString();
624
- });
625
- cursorProcess.stderr?.on('data', (chunk) => {
626
- stderr += chunk.toString();
627
- });
628
- cursorProcess.on('error', (error) => {
629
- finish(error instanceof Error ? error : new Error(String(error)), '');
630
- });
631
- cursorProcess.on('close', (code) => {
632
- if (code !== 0) {
633
- finish(new Error(stderr.trim() || `cursor-agent --list-models exited with code ${code}`), '');
634
- return;
635
- }
636
- finish(null, stdout);
637
- });
638
- });
639
- const buildCursorModelsDefinition = (models) => {
640
- const options = [];
641
- const seenValues = new Set();
642
- for (const model of models) {
643
- if (seenValues.has(model.name)) {
644
- continue;
645
- }
646
- seenValues.add(model.name);
647
- options.push({
648
- value: model.name,
649
- label: model.name,
650
- description: model.description || undefined,
651
- });
652
- }
653
- if (options.length === 0) {
654
- return CURSOR_FALLBACK_MODELS;
655
- }
656
- const defaultValue = models.find((model) => model.default)?.name
657
- ?? models.find((model) => model.current)?.name
658
- ?? options[0]?.value
659
- ?? CURSOR_FALLBACK_MODELS.DEFAULT;
660
- return {
661
- OPTIONS: options,
662
- DEFAULT: defaultValue,
663
- };
664
- };
665
34
  const resolveCursorSessionStorePath = async (sessionId) => {
666
35
  const safeSessionId = sanitizeLeafDirectoryName(sessionId, 'cursor session id');
667
36
  try {
@@ -685,25 +54,19 @@ const resolveCursorSessionStorePath = async (sessionId) => {
685
54
  }
686
55
  return null;
687
56
  };
57
+ /** Provider registry model adapter for Cursor predefined models and session metadata. */
688
58
  export class CursorProviderModels {
689
59
  async getSupportedModels() {
690
- try {
691
- const stdout = await runCursorListModels();
692
- const models = parseModelsOutput(stdout);
693
- return buildCursorModelsDefinition(models);
694
- }
695
- catch {
696
- return CURSOR_FALLBACK_MODELS;
697
- }
60
+ return CURSOR_PREDEFINED_MODELS;
698
61
  }
699
62
  async getCurrentActiveModel(sessionId) {
700
63
  if (!sessionId?.trim()) {
701
- return buildDefaultProviderCurrentActiveModel(await this.getSupportedModels());
64
+ return buildDefaultProviderCurrentActiveModel(CURSOR_PREDEFINED_MODELS);
702
65
  }
703
66
  try {
704
67
  const storeDbPath = await resolveCursorSessionStorePath(sessionId);
705
68
  if (!storeDbPath) {
706
- return buildDefaultProviderCurrentActiveModel(await this.getSupportedModels());
69
+ return buildDefaultProviderCurrentActiveModel(CURSOR_PREDEFINED_MODELS);
707
70
  }
708
71
  const { default: Database } = await import('better-sqlite3');
709
72
  const db = new Database(storeDbPath, { readonly: true, fileMustExist: true });
@@ -715,7 +78,7 @@ export class CursorProviderModels {
715
78
  ? Buffer.from(row.value.trim(), 'hex').toString('utf8')
716
79
  : '';
717
80
  if (!metadataText) {
718
- return buildDefaultProviderCurrentActiveModel(await this.getSupportedModels());
81
+ return buildDefaultProviderCurrentActiveModel(CURSOR_PREDEFINED_MODELS);
719
82
  }
720
83
  const metadata = JSON.parse(metadataText);
721
84
  if (typeof metadata.lastUsedModel === 'string' && metadata.lastUsedModel.trim()) {
@@ -729,9 +92,9 @@ export class CursorProviderModels {
729
92
  }
730
93
  }
731
94
  catch {
732
- // Fall through to the provider default when Cursor metadata cannot be read.
95
+ // Fall through to the curated default when Cursor metadata cannot be read.
733
96
  }
734
- return buildDefaultProviderCurrentActiveModel(await this.getSupportedModels());
97
+ return buildDefaultProviderCurrentActiveModel(CURSOR_PREDEFINED_MODELS);
735
98
  }
736
99
  }
737
100
  //# sourceMappingURL=cursor-models.provider.js.map