@kaitranntt/ccs 7.68.1-dev.9 → 7.68.2

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 (254) hide show
  1. package/dist/auth/commands/create-command-env.d.ts +0 -1
  2. package/dist/auth/commands/create-command-env.d.ts.map +1 -1
  3. package/dist/ccs.js +2 -55
  4. package/dist/ccs.js.map +1 -1
  5. package/dist/channels/official-channels-runtime.d.ts +0 -1
  6. package/dist/channels/official-channels-runtime.d.ts.map +1 -1
  7. package/dist/channels/official-channels-store.d.ts +0 -1
  8. package/dist/channels/official-channels-store.d.ts.map +1 -1
  9. package/dist/cliproxy/base-config-loader.d.ts +0 -1
  10. package/dist/cliproxy/base-config-loader.d.ts.map +1 -1
  11. package/dist/cliproxy/config/env-builder.d.ts +0 -1
  12. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  13. package/dist/cliproxy/config/extended-context-config.d.ts +0 -1
  14. package/dist/cliproxy/config/extended-context-config.d.ts.map +1 -1
  15. package/dist/cliproxy/config/thinking-config.d.ts +0 -1
  16. package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
  17. package/dist/cliproxy/executor/env-resolver.d.ts +0 -2
  18. package/dist/cliproxy/executor/env-resolver.d.ts.map +1 -1
  19. package/dist/cliproxy/executor/env-resolver.js +1 -2
  20. package/dist/cliproxy/executor/env-resolver.js.map +1 -1
  21. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  22. package/dist/cliproxy/executor/index.js +1 -28
  23. package/dist/cliproxy/executor/index.js.map +1 -1
  24. package/dist/cliproxy/model-id-normalizer.d.ts +0 -1
  25. package/dist/cliproxy/model-id-normalizer.d.ts.map +1 -1
  26. package/dist/cliproxy/routing-strategy-http.d.ts +0 -1
  27. package/dist/cliproxy/routing-strategy-http.d.ts.map +1 -1
  28. package/dist/cliproxy/tool-sanitization-proxy.d.ts.map +1 -1
  29. package/dist/cliproxy/tool-sanitization-proxy.js +3 -0
  30. package/dist/cliproxy/tool-sanitization-proxy.js.map +1 -1
  31. package/dist/cliproxy/types.d.ts +0 -2
  32. package/dist/cliproxy/types.d.ts.map +1 -1
  33. package/dist/commands/cliproxy/catalog-subcommand.d.ts +0 -6
  34. package/dist/commands/cliproxy/catalog-subcommand.d.ts.map +1 -1
  35. package/dist/commands/cliproxy/catalog-subcommand.js +1 -39
  36. package/dist/commands/cliproxy/catalog-subcommand.js.map +1 -1
  37. package/dist/commands/cliproxy/help-subcommand.d.ts.map +1 -1
  38. package/dist/commands/cliproxy/help-subcommand.js +0 -1
  39. package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
  40. package/dist/commands/cliproxy/index.d.ts.map +1 -1
  41. package/dist/commands/cliproxy/index.js +0 -6
  42. package/dist/commands/cliproxy/index.js.map +1 -1
  43. package/dist/commands/command-catalog.d.ts +1 -1
  44. package/dist/commands/command-catalog.d.ts.map +1 -1
  45. package/dist/commands/cursor-command-display.d.ts +0 -2
  46. package/dist/commands/cursor-command-display.d.ts.map +1 -1
  47. package/dist/commands/cursor-command-display.js +3 -24
  48. package/dist/commands/cursor-command-display.js.map +1 -1
  49. package/dist/commands/cursor-command.d.ts.map +1 -1
  50. package/dist/commands/cursor-command.js +1 -31
  51. package/dist/commands/cursor-command.js.map +1 -1
  52. package/dist/config/migration-manager.d.ts.map +1 -1
  53. package/dist/config/migration-manager.js +1 -2
  54. package/dist/config/migration-manager.js.map +1 -1
  55. package/dist/config/unified-config-loader.d.ts +3 -8
  56. package/dist/config/unified-config-loader.d.ts.map +1 -1
  57. package/dist/config/unified-config-loader.js +7 -20
  58. package/dist/config/unified-config-loader.js.map +1 -1
  59. package/dist/config/unified-config-types.d.ts +2 -15
  60. package/dist/config/unified-config-types.d.ts.map +1 -1
  61. package/dist/config/unified-config-types.js +3 -8
  62. package/dist/config/unified-config-types.js.map +1 -1
  63. package/dist/cursor/constants.d.ts +1 -1
  64. package/dist/cursor/constants.d.ts.map +1 -1
  65. package/dist/cursor/constants.js +0 -1
  66. package/dist/cursor/constants.js.map +1 -1
  67. package/dist/cursor/cursor-anthropic-response.d.ts +0 -1
  68. package/dist/cursor/cursor-anthropic-response.d.ts.map +1 -1
  69. package/dist/cursor/cursor-auth.d.ts +0 -1
  70. package/dist/cursor/cursor-auth.d.ts.map +1 -1
  71. package/dist/cursor/cursor-auth.js +32 -154
  72. package/dist/cursor/cursor-auth.js.map +1 -1
  73. package/dist/cursor/cursor-executor.d.ts +1 -2
  74. package/dist/cursor/cursor-executor.d.ts.map +1 -1
  75. package/dist/cursor/cursor-executor.js +160 -295
  76. package/dist/cursor/cursor-executor.js.map +1 -1
  77. package/dist/cursor/cursor-protobuf-decoder.d.ts.map +1 -1
  78. package/dist/cursor/cursor-protobuf-decoder.js +3 -1
  79. package/dist/cursor/cursor-protobuf-decoder.js.map +1 -1
  80. package/dist/cursor/cursor-protobuf-schema.d.ts +3 -12
  81. package/dist/cursor/cursor-protobuf-schema.d.ts.map +1 -1
  82. package/dist/cursor/cursor-protobuf-schema.js +5 -23
  83. package/dist/cursor/cursor-protobuf-schema.js.map +1 -1
  84. package/dist/cursor/cursor-protobuf.d.ts +1 -1
  85. package/dist/cursor/cursor-protobuf.d.ts.map +1 -1
  86. package/dist/cursor/cursor-protobuf.js +4 -2
  87. package/dist/cursor/cursor-protobuf.js.map +1 -1
  88. package/dist/cursor/cursor-stream-parser.d.ts +0 -10
  89. package/dist/cursor/cursor-stream-parser.d.ts.map +1 -1
  90. package/dist/cursor/cursor-stream-parser.js +10 -106
  91. package/dist/cursor/cursor-stream-parser.js.map +1 -1
  92. package/dist/cursor/index.d.ts +0 -1
  93. package/dist/cursor/index.d.ts.map +1 -1
  94. package/dist/cursor/index.js +1 -3
  95. package/dist/cursor/index.js.map +1 -1
  96. package/dist/cursor/types.d.ts +0 -6
  97. package/dist/cursor/types.d.ts.map +1 -1
  98. package/dist/docker/docker-executor.d.ts +0 -1
  99. package/dist/docker/docker-executor.d.ts.map +1 -1
  100. package/dist/management/instance-manager.d.ts.map +1 -1
  101. package/dist/management/instance-manager.js +2 -5
  102. package/dist/management/instance-manager.js.map +1 -1
  103. package/dist/targets/claude-adapter.d.ts +1 -6
  104. package/dist/targets/claude-adapter.d.ts.map +1 -1
  105. package/dist/targets/claude-adapter.js +2 -6
  106. package/dist/targets/claude-adapter.js.map +1 -1
  107. package/dist/targets/codex-adapter.d.ts +0 -1
  108. package/dist/targets/codex-adapter.d.ts.map +1 -1
  109. package/dist/targets/codex-adapter.js +8 -12
  110. package/dist/targets/codex-adapter.js.map +1 -1
  111. package/dist/targets/droid-adapter.d.ts +1 -3
  112. package/dist/targets/droid-adapter.d.ts.map +1 -1
  113. package/dist/targets/droid-adapter.js +2 -3
  114. package/dist/targets/droid-adapter.js.map +1 -1
  115. package/dist/targets/target-adapter.d.ts +0 -5
  116. package/dist/targets/target-adapter.d.ts.map +1 -1
  117. package/dist/types/cli.d.ts +0 -1
  118. package/dist/types/cli.d.ts.map +1 -1
  119. package/dist/ui/assets/{accounts-D9eEaNx9.js → accounts-DjL3iVZW.js} +1 -1
  120. package/dist/ui/assets/{alert-dialog-QyEXocpn.js → alert-dialog-Tc_D1a_B.js} +1 -1
  121. package/dist/ui/assets/{api-7vQe0xOg.js → api-CUtkvXmX.js} +1 -1
  122. package/dist/ui/assets/{auth-section-BszF77uT.js → auth-section-CuKWQHC7.js} +1 -1
  123. package/dist/ui/assets/{backups-section-D6RgaOx1.js → backups-section-BKW2pbb9.js} +1 -1
  124. package/dist/ui/assets/{channels-B1vgnNJX.js → channels-DvWJMdaq.js} +1 -1
  125. package/dist/ui/assets/{checkbox-Dzwkj_Pg.js → checkbox-B0hZxMK5.js} +1 -1
  126. package/dist/ui/assets/{claude-extension-CKO4bJ22.js → claude-extension-Dfqu-rev.js} +1 -1
  127. package/dist/ui/assets/{cliproxy-kHd-oC5W.js → cliproxy-C9RxW-I8.js} +1 -1
  128. package/dist/ui/assets/{cliproxy-ai-providers-CmbFYVoR.js → cliproxy-ai-providers-BXLuuxNf.js} +1 -1
  129. package/dist/ui/assets/{cliproxy-control-panel-M8ZfUq3C.js → cliproxy-control-panel-aQ7cCc2U.js} +1 -1
  130. package/dist/ui/assets/{codex-BJ0RdMuh.js → codex-aq4RI6_n.js} +1 -1
  131. package/dist/ui/assets/{confirm-dialog-BlSaX2gK.js → confirm-dialog-CpDk6eu4.js} +1 -1
  132. package/dist/ui/assets/{copilot-NJKZQXQ_.js → copilot-CQRpGXvY.js} +1 -1
  133. package/dist/ui/assets/cursor-BpXPf6qi.js +1 -0
  134. package/dist/ui/assets/{droid-B9u9ZB-a.js → droid-Cgx-yLjy.js} +1 -1
  135. package/dist/ui/assets/{globalenv-section-DoX37DqB.js → globalenv-section-DsNqG1yB.js} +1 -1
  136. package/dist/ui/assets/{health-D_gdcxnc.js → health-BY-O-JcA.js} +1 -1
  137. package/dist/ui/assets/index-BmSzf0T9.js +72 -0
  138. package/dist/ui/assets/{index-DFEMq3KP.js → index-CLGiPB3A.js} +1 -1
  139. package/dist/ui/assets/{index-CTGpqIx6.js → index-Cet36v1V.js} +1 -1
  140. package/dist/ui/assets/index-DH6L6ybH.js +1 -0
  141. package/dist/ui/assets/{index-BNU4Hhe_.js → index-DsCjnpco.js} +1 -1
  142. package/dist/ui/assets/{index-DoVPk3vW.js → index-TQFuDZdB.js} +1 -1
  143. package/dist/ui/assets/index-teLjoh2T.css +1 -0
  144. package/dist/ui/assets/{logs-DtH4YMt4.js → logs-D5ro-pc7.js} +1 -1
  145. package/dist/ui/assets/{masked-input-C2H-Ax0Z.js → masked-input-h0XkMSwB.js} +1 -1
  146. package/dist/ui/assets/{proxy-status-widget-BOrsn86w.js → proxy-status-widget-yBdrFeb7.js} +1 -1
  147. package/dist/ui/assets/{raw-json-settings-editor-panel-WxTn7-hS.js → raw-json-settings-editor-panel-Cb7ZInQV.js} +1 -1
  148. package/dist/ui/assets/{searchable-select-1zOULoec.js → searchable-select-D4xr5xKS.js} +1 -1
  149. package/dist/ui/assets/{separator-BCfZ54mZ.js → separator-gw5BjIpP.js} +1 -1
  150. package/dist/ui/assets/{shared-DlTbnc9n.js → shared-C-VeA1Z9.js} +1 -1
  151. package/dist/ui/assets/{table-Bx2cnkWN.js → table-Bd4isC18.js} +1 -1
  152. package/dist/ui/assets/{updates-SiZKOnUD.js → updates-DiK8I67C.js} +1 -1
  153. package/dist/ui/index.html +2 -2
  154. package/dist/utils/claude-detector.d.ts +0 -1
  155. package/dist/utils/claude-detector.d.ts.map +1 -1
  156. package/dist/utils/claude-spawner.d.ts +0 -1
  157. package/dist/utils/claude-spawner.d.ts.map +1 -1
  158. package/dist/utils/hooks/image-analysis-runtime-status.js +5 -5
  159. package/dist/utils/hooks/image-analysis-runtime-status.js.map +1 -1
  160. package/dist/utils/image-analysis/claude-tool-args.d.ts +0 -3
  161. package/dist/utils/image-analysis/claude-tool-args.d.ts.map +1 -1
  162. package/dist/utils/image-analysis/claude-tool-args.js +47 -21
  163. package/dist/utils/image-analysis/claude-tool-args.js.map +1 -1
  164. package/dist/utils/package-manager-detector.d.ts +0 -1
  165. package/dist/utils/package-manager-detector.d.ts.map +1 -1
  166. package/dist/utils/shell-executor.d.ts +0 -1
  167. package/dist/utils/shell-executor.d.ts.map +1 -1
  168. package/dist/utils/websearch/claude-tool-args.d.ts +0 -7
  169. package/dist/utils/websearch/claude-tool-args.d.ts.map +1 -1
  170. package/dist/utils/websearch/claude-tool-args.js +50 -27
  171. package/dist/utils/websearch/claude-tool-args.js.map +1 -1
  172. package/dist/utils/websearch/hook-env.d.ts.map +1 -1
  173. package/dist/utils/websearch/hook-env.js +1 -19
  174. package/dist/utils/websearch/hook-env.js.map +1 -1
  175. package/dist/utils/websearch/status.d.ts +1 -1
  176. package/dist/utils/websearch/status.d.ts.map +1 -1
  177. package/dist/utils/websearch/status.js +12 -33
  178. package/dist/utils/websearch/status.js.map +1 -1
  179. package/dist/utils/websearch/trace.d.ts +0 -1
  180. package/dist/utils/websearch/trace.d.ts.map +1 -1
  181. package/dist/utils/websearch/trace.js +5 -20
  182. package/dist/utils/websearch/trace.js.map +1 -1
  183. package/dist/utils/websearch/types.d.ts +2 -12
  184. package/dist/utils/websearch/types.d.ts.map +1 -1
  185. package/dist/utils/websearch/types.js +0 -38
  186. package/dist/utils/websearch/types.js.map +1 -1
  187. package/dist/web-server/health/websearch-checks.js +1 -1
  188. package/dist/web-server/health/websearch-checks.js.map +1 -1
  189. package/dist/web-server/middleware/auth-middleware.d.ts +1 -0
  190. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  191. package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
  192. package/dist/web-server/routes/cliproxy-local-proxy.js +6 -26
  193. package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
  194. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
  195. package/dist/web-server/routes/cliproxy-stats-routes.js +1 -8
  196. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
  197. package/dist/web-server/routes/cursor-routes.d.ts +0 -2
  198. package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
  199. package/dist/web-server/routes/cursor-routes.js +2 -44
  200. package/dist/web-server/routes/cursor-routes.js.map +1 -1
  201. package/dist/web-server/routes/websearch-routes.d.ts.map +1 -1
  202. package/dist/web-server/routes/websearch-routes.js +0 -37
  203. package/dist/web-server/routes/websearch-routes.js.map +1 -1
  204. package/dist/web-server/services/cliproxy-dashboard-install-service.d.ts.map +1 -1
  205. package/dist/web-server/services/cliproxy-dashboard-install-service.js +0 -14
  206. package/dist/web-server/services/cliproxy-dashboard-install-service.js.map +1 -1
  207. package/dist/web-server/services/codex-dashboard-service.d.ts +0 -1
  208. package/dist/web-server/services/codex-dashboard-service.d.ts.map +1 -1
  209. package/dist/web-server/services/droid-dashboard-service.d.ts +0 -1
  210. package/dist/web-server/services/droid-dashboard-service.d.ts.map +1 -1
  211. package/lib/hooks/websearch-transformer.cjs +0 -136
  212. package/lib/mcp/ccs-websearch-server.cjs +1 -1
  213. package/package.json +1 -2
  214. package/dist/cursor/cursor-runtime-probe.d.ts +0 -12
  215. package/dist/cursor/cursor-runtime-probe.d.ts.map +0 -1
  216. package/dist/cursor/cursor-runtime-probe.js +0 -220
  217. package/dist/cursor/cursor-runtime-probe.js.map +0 -1
  218. package/dist/docker/supervisord-lifecycle.d.ts +0 -17
  219. package/dist/docker/supervisord-lifecycle.d.ts.map +0 -1
  220. package/dist/docker/supervisord-lifecycle.js +0 -58
  221. package/dist/docker/supervisord-lifecycle.js.map +0 -1
  222. package/dist/ui/assets/cursor-BrcDgu6X.js +0 -1
  223. package/dist/ui/assets/index-Cu6e0-ev.css +0 -1
  224. package/dist/ui/assets/index-DOn6k1jF.js +0 -72
  225. package/dist/ui/assets/index-h08p9xL5.js +0 -1
  226. package/dist/utils/browser/chrome-reuse.d.ts +0 -17
  227. package/dist/utils/browser/chrome-reuse.d.ts.map +0 -1
  228. package/dist/utils/browser/chrome-reuse.js +0 -205
  229. package/dist/utils/browser/chrome-reuse.js.map +0 -1
  230. package/dist/utils/browser/claude-tool-args.d.ts +0 -2
  231. package/dist/utils/browser/claude-tool-args.d.ts.map +0 -1
  232. package/dist/utils/browser/claude-tool-args.js +0 -18
  233. package/dist/utils/browser/claude-tool-args.js.map +0 -1
  234. package/dist/utils/browser/index.d.ts +0 -8
  235. package/dist/utils/browser/index.d.ts.map +0 -1
  236. package/dist/utils/browser/index.js +0 -24
  237. package/dist/utils/browser/index.js.map +0 -1
  238. package/dist/utils/browser/mcp-installer.d.ts +0 -14
  239. package/dist/utils/browser/mcp-installer.d.ts.map +0 -1
  240. package/dist/utils/browser/mcp-installer.js +0 -356
  241. package/dist/utils/browser/mcp-installer.js.map +0 -1
  242. package/dist/utils/browser-codex-overrides.d.ts +0 -3
  243. package/dist/utils/browser-codex-overrides.d.ts.map +0 -1
  244. package/dist/utils/browser-codex-overrides.js +0 -29
  245. package/dist/utils/browser-codex-overrides.js.map +0 -1
  246. package/dist/utils/claude-tool-args.d.ts +0 -7
  247. package/dist/utils/claude-tool-args.d.ts.map +0 -1
  248. package/dist/utils/claude-tool-args.js +0 -43
  249. package/dist/utils/claude-tool-args.js.map +0 -1
  250. package/dist/utils/prompt-injection-strategy.d.ts +0 -54
  251. package/dist/utils/prompt-injection-strategy.d.ts.map +0 -1
  252. package/dist/utils/prompt-injection-strategy.js +0 -128
  253. package/dist/utils/prompt-injection-strategy.js.map +0 -1
  254. package/lib/mcp/ccs-browser-server.cjs +0 -877
@@ -1,220 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.probeCursorRuntime = void 0;
4
- const cursor_auth_1 = require("./cursor-auth");
5
- const cursor_daemon_1 = require("./cursor-daemon");
6
- const cursor_models_1 = require("./cursor-models");
7
- const PROBE_PROMPT = 'Reply with OK only.';
8
- const PROBE_TIMEOUT_MS = 15000;
9
- const PROBE_SUCCESS_PATTERN = /^ok[.!]?$/i;
10
- function isDaemonReachabilityError(error) {
11
- if (!(error instanceof Error))
12
- return false;
13
- const message = error.message.toLowerCase();
14
- if (message.includes('fetch failed') ||
15
- message.includes('econnrefused') ||
16
- message.includes('econnreset') ||
17
- message.includes('socket hang up') ||
18
- message.includes('connection refused')) {
19
- return true;
20
- }
21
- const cause = error.cause;
22
- if (!cause || typeof cause !== 'object' || !('code' in cause)) {
23
- return false;
24
- }
25
- const code = String(cause.code ?? '').toUpperCase();
26
- return ['ECONNREFUSED', 'ECONNRESET', 'ECONNABORTED', 'EPIPE', 'UND_ERR_SOCKET'].includes(code);
27
- }
28
- function parseProbeError(text) {
29
- try {
30
- const parsed = JSON.parse(text);
31
- if (parsed.error?.message) {
32
- return {
33
- errorType: parsed.error.type ?? null,
34
- message: parsed.error.message,
35
- };
36
- }
37
- if (parsed.type === 'error') {
38
- return {
39
- errorType: null,
40
- message: text,
41
- };
42
- }
43
- }
44
- catch {
45
- // fall through to raw text
46
- }
47
- return {
48
- errorType: null,
49
- message: text || 'Unknown probe failure',
50
- };
51
- }
52
- function parseProbeSuccess(text) {
53
- try {
54
- const parsed = JSON.parse(text);
55
- if (parsed.error?.message) {
56
- return { ok: false, message: parsed.error.message };
57
- }
58
- const content = parsed.choices?.[0]?.message?.content;
59
- if (typeof content !== 'string' || !content.trim()) {
60
- return { ok: false, message: 'Probe response was missing assistant content.' };
61
- }
62
- return {
63
- ok: PROBE_SUCCESS_PATTERN.test(content.trim()),
64
- message: PROBE_SUCCESS_PATTERN.test(content.trim())
65
- ? 'Live probe succeeded.'
66
- : `Probe returned unexpected assistant content: ${content.trim()}`,
67
- };
68
- }
69
- catch {
70
- return { ok: false, message: 'Probe response was not valid JSON.' };
71
- }
72
- }
73
- async function probeCursorRuntime(config) {
74
- const startedAt = Date.now();
75
- if (!config.enabled) {
76
- return {
77
- ok: false,
78
- stage: 'config',
79
- status: 400,
80
- duration_ms: Date.now() - startedAt,
81
- message: 'Cursor integration is disabled.',
82
- error_type: 'configuration_error',
83
- };
84
- }
85
- const authStatus = (0, cursor_auth_1.checkAuthStatus)();
86
- if (!authStatus.authenticated || !authStatus.credentials) {
87
- return {
88
- ok: false,
89
- stage: 'auth',
90
- status: 401,
91
- duration_ms: Date.now() - startedAt,
92
- message: 'Cursor credentials not found. Run `ccs cursor auth` first.',
93
- error_type: 'authentication_error',
94
- };
95
- }
96
- if (authStatus.expired) {
97
- return {
98
- ok: false,
99
- stage: 'auth',
100
- status: 401,
101
- duration_ms: Date.now() - startedAt,
102
- message: 'Cursor credentials expired. Run `ccs cursor auth` again.',
103
- error_type: 'authentication_error',
104
- };
105
- }
106
- let daemonRunning = await (0, cursor_daemon_1.isDaemonRunning)(config.port);
107
- if (!daemonRunning && config.auto_start) {
108
- const startResult = await (0, cursor_daemon_1.startDaemon)({
109
- port: config.port,
110
- ghost_mode: config.ghost_mode,
111
- });
112
- if (!startResult.success) {
113
- daemonRunning = await (0, cursor_daemon_1.isDaemonRunning)(config.port);
114
- }
115
- else {
116
- daemonRunning = true;
117
- }
118
- if (!daemonRunning) {
119
- return {
120
- ok: false,
121
- stage: 'daemon',
122
- status: 503,
123
- duration_ms: Date.now() - startedAt,
124
- message: startResult.error || 'Failed to start Cursor daemon for live probe.',
125
- error_type: 'daemon_start_failed',
126
- };
127
- }
128
- }
129
- if (!daemonRunning) {
130
- return {
131
- ok: false,
132
- stage: 'daemon',
133
- status: 503,
134
- duration_ms: Date.now() - startedAt,
135
- message: 'Cursor daemon is not running. Start it with `ccs cursor start` or enable auto_start.',
136
- error_type: 'daemon_not_running',
137
- };
138
- }
139
- try {
140
- const credentials = {
141
- accessToken: authStatus.credentials.accessToken,
142
- machineId: authStatus.credentials.machineId,
143
- ghostMode: config.ghost_mode,
144
- };
145
- const availableModels = await (0, cursor_models_1.getModelsForDaemon)({ credentials });
146
- const model = (0, cursor_models_1.resolveCursorRequestModel)(config.model, availableModels);
147
- const abortController = new AbortController();
148
- const timeout = setTimeout(() => abortController.abort(), PROBE_TIMEOUT_MS);
149
- try {
150
- const response = await fetch(`http://127.0.0.1:${config.port}/v1/chat/completions`, {
151
- method: 'POST',
152
- headers: { 'Content-Type': 'application/json' },
153
- body: JSON.stringify({
154
- model,
155
- max_tokens: 8,
156
- messages: [{ role: 'user', content: PROBE_PROMPT }],
157
- }),
158
- signal: abortController.signal,
159
- });
160
- const text = await response.text();
161
- const duration = Date.now() - startedAt;
162
- if (!response.ok) {
163
- const error = parseProbeError(text);
164
- return {
165
- ok: false,
166
- stage: 'runtime',
167
- status: response.status,
168
- duration_ms: duration,
169
- model,
170
- error_type: error.errorType,
171
- message: error.message,
172
- };
173
- }
174
- const success = parseProbeSuccess(text);
175
- return {
176
- ok: success.ok,
177
- stage: 'runtime',
178
- status: success.ok ? response.status : 502,
179
- duration_ms: duration,
180
- model,
181
- error_type: success.ok ? null : 'probe_validation_failed',
182
- message: success.message,
183
- };
184
- }
185
- finally {
186
- clearTimeout(timeout);
187
- }
188
- }
189
- catch (error) {
190
- const daemonReachabilityError = isDaemonReachabilityError(error);
191
- return {
192
- ok: false,
193
- stage: error instanceof Error && error.name === 'AbortError'
194
- ? 'runtime'
195
- : daemonReachabilityError
196
- ? 'daemon'
197
- : 'runtime',
198
- status: error instanceof Error && error.name === 'AbortError'
199
- ? 504
200
- : daemonReachabilityError
201
- ? 503
202
- : 500,
203
- duration_ms: Date.now() - startedAt,
204
- error_type: error instanceof Error && error.name === 'AbortError'
205
- ? 'probe_timeout'
206
- : daemonReachabilityError
207
- ? 'daemon_unreachable'
208
- : 'runtime_error',
209
- message: error instanceof Error && error.name === 'AbortError'
210
- ? `Live probe timed out after ${PROBE_TIMEOUT_MS}ms.`
211
- : daemonReachabilityError
212
- ? 'Cursor daemon became unreachable during the live probe. Start it again and retry.'
213
- : error instanceof Error
214
- ? error.message
215
- : 'Unknown runtime probe failure.',
216
- };
217
- }
218
- }
219
- exports.probeCursorRuntime = probeCursorRuntime;
220
- //# sourceMappingURL=cursor-runtime-probe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursor-runtime-probe.js","sourceRoot":"","sources":["../../src/cursor/cursor-runtime-probe.ts"],"names":[],"mappings":";;;AACA,+CAAgD;AAChD,mDAA+D;AAC/D,mDAAgF;AAYhF,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAC3C,MAAM,gBAAgB,GAAG,KAAM,CAAC;AAChC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAE3C,SAAS,yBAAyB,CAAC,KAAc;IAC/C,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE5C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAC5C,IACE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;QAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;QAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAClC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EACtC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAI,KAAqC,CAAC,KAAK,CAAC;IAC3D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAE,KAA4B,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5E,OAAO,CAAC,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAG7B,CAAC;QAEF,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;YAC1B,OAAO;gBACL,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI;gBACpC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;aAC9B,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO;gBACL,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IAED,OAAO;QACL,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI,IAAI,uBAAuB;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAK7B,CAAC;QAEF,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;YAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACtD,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;QACtD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACnD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAC;QACjF,CAAC;QAED,OAAO;YACL,EAAE,EAAE,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC9C,OAAO,EAAE,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjD,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,gDAAgD,OAAO,CAAC,IAAI,EAAE,EAAE;SACrE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC;IACtE,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,MAAoB;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,GAAG;YACX,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YACnC,OAAO,EAAE,iCAAiC;YAC1C,UAAU,EAAE,qBAAqB;SAClC,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAA,6BAAe,GAAE,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QACzD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,GAAG;YACX,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YACnC,OAAO,EAAE,4DAA4D;YACrE,UAAU,EAAE,sBAAsB;SACnC,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,GAAG;YACX,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YACnC,OAAO,EAAE,0DAA0D;YACnE,UAAU,EAAE,sBAAsB;SACnC,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,GAAG,MAAM,IAAA,+BAAe,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,IAAA,2BAAW,EAAC;YACpC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,aAAa,GAAG,MAAM,IAAA,+BAAe,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,GAAG;gBACX,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACnC,OAAO,EAAE,WAAW,CAAC,KAAK,IAAI,+CAA+C;gBAC7E,UAAU,EAAE,qBAAqB;aAClC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,GAAG;YACX,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YACnC,OAAO,EACL,sFAAsF;YACxF,UAAU,EAAE,oBAAoB;SACjC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG;YAClB,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,WAAW;YAC/C,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,SAAS;YAC3C,SAAS,EAAE,MAAM,CAAC,UAAU;SAC7B,CAAC;QACF,MAAM,eAAe,GAAG,MAAM,IAAA,kCAAkB,EAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,IAAA,yCAAyB,EAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAEvE,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,MAAM,CAAC,IAAI,sBAAsB,EAAE;gBAClF,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK;oBACL,UAAU,EAAE,CAAC;oBACb,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;iBACpD,CAAC;gBACF,MAAM,EAAE,eAAe,CAAC,MAAM;aAC/B,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAExC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;gBACpC,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,WAAW,EAAE,QAAQ;oBACrB,KAAK;oBACL,UAAU,EAAE,KAAK,CAAC,SAAS;oBAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO;gBACL,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;gBAC1C,WAAW,EAAE,QAAQ;gBACrB,KAAK;gBACL,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB;gBACzD,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,uBAAuB,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAEjE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EACH,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBACnD,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,uBAAuB;oBACvB,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,SAAS;YACjB,MAAM,EACJ,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBACnD,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,uBAAuB;oBACvB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,GAAG;YACX,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YACnC,UAAU,EACR,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBACnD,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,uBAAuB;oBACvB,CAAC,CAAC,oBAAoB;oBACtB,CAAC,CAAC,eAAe;YACvB,OAAO,EACL,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBACnD,CAAC,CAAC,8BAA8B,gBAAgB,KAAK;gBACrD,CAAC,CAAC,uBAAuB;oBACvB,CAAC,CAAC,mFAAmF;oBACrF,CAAC,CAAC,KAAK,YAAY,KAAK;wBACtB,CAAC,CAAC,KAAK,CAAC,OAAO;wBACf,CAAC,CAAC,gCAAgC;SAC3C,CAAC;IACJ,CAAC;AACH,CAAC;AAhKD,gDAgKC"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Supervisord lifecycle helpers for Docker deployments (`ccs docker up`).
3
- *
4
- * In Docker, supervisord owns the CLIProxy process lifecycle. Direct
5
- * stop+start via session-tracker / service-manager creates orphaned
6
- * processes and causes supervisord to enter FATAL state (EADDRINUSE).
7
- * All restart operations must delegate to `supervisorctl` instead.
8
- */
9
- /** True when running inside a supervisord-managed container. */
10
- export declare function isRunningUnderSupervisord(): boolean;
11
- /** Restart the cliproxy program via supervisorctl. Returns port on success. */
12
- export declare function restartCliproxyViaSupervisord(): {
13
- success: boolean;
14
- port?: number;
15
- error?: string;
16
- };
17
- //# sourceMappingURL=supervisord-lifecycle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"supervisord-lifecycle.d.ts","sourceRoot":"","sources":["../../src/docker/supervisord-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,gEAAgE;AAChE,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,+EAA+E;AAC/E,wBAAgB,6BAA6B,IAAI;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CASA"}
@@ -1,58 +0,0 @@
1
- "use strict";
2
- /**
3
- * Supervisord lifecycle helpers for Docker deployments (`ccs docker up`).
4
- *
5
- * In Docker, supervisord owns the CLIProxy process lifecycle. Direct
6
- * stop+start via session-tracker / service-manager creates orphaned
7
- * processes and causes supervisord to enter FATAL state (EADDRINUSE).
8
- * All restart operations must delegate to `supervisorctl` instead.
9
- */
10
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- var desc = Object.getOwnPropertyDescriptor(m, k);
13
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
- desc = { enumerable: true, get: function() { return m[k]; } };
15
- }
16
- Object.defineProperty(o, k2, desc);
17
- }) : (function(o, m, k, k2) {
18
- if (k2 === undefined) k2 = k;
19
- o[k2] = m[k];
20
- }));
21
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
- Object.defineProperty(o, "default", { enumerable: true, value: v });
23
- }) : function(o, v) {
24
- o["default"] = v;
25
- });
26
- var __importStar = (this && this.__importStar) || function (mod) {
27
- if (mod && mod.__esModule) return mod;
28
- var result = {};
29
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
30
- __setModuleDefault(result, mod);
31
- return result;
32
- };
33
- Object.defineProperty(exports, "__esModule", { value: true });
34
- exports.restartCliproxyViaSupervisord = exports.isRunningUnderSupervisord = void 0;
35
- const fs = __importStar(require("fs"));
36
- const child_process_1 = require("child_process");
37
- const port_manager_1 = require("../cliproxy/config/port-manager");
38
- const SUPERVISOR_SOCK = '/var/run/supervisor.sock';
39
- const SUPERVISOR_CONF = '/etc/supervisord.conf';
40
- /** True when running inside a supervisord-managed container. */
41
- function isRunningUnderSupervisord() {
42
- return fs.existsSync(SUPERVISOR_SOCK);
43
- }
44
- exports.isRunningUnderSupervisord = isRunningUnderSupervisord;
45
- /** Restart the cliproxy program via supervisorctl. Returns port on success. */
46
- function restartCliproxyViaSupervisord() {
47
- try {
48
- (0, child_process_1.execSync)(`supervisorctl -c ${SUPERVISOR_CONF} restart cliproxy`, { timeout: 15000 });
49
- return { success: true, port: port_manager_1.CLIPROXY_DEFAULT_PORT };
50
- }
51
- catch (err) {
52
- const detail = err instanceof Error ? err.message : String(err);
53
- console.error(`[cliproxy] supervisorctl restart failed: ${detail}`);
54
- return { success: false, error: 'supervisorctl restart failed' };
55
- }
56
- }
57
- exports.restartCliproxyViaSupervisord = restartCliproxyViaSupervisord;
58
- //# sourceMappingURL=supervisord-lifecycle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"supervisord-lifecycle.js","sourceRoot":"","sources":["../../src/docker/supervisord-lifecycle.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,iDAAyC;AACzC,kEAAwE;AAExE,MAAM,eAAe,GAAG,0BAA0B,CAAC;AACnD,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,gEAAgE;AAChE,SAAgB,yBAAyB;IACvC,OAAO,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAFD,8DAEC;AAED,+EAA+E;AAC/E,SAAgB,6BAA6B;IAK3C,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,oBAAoB,eAAe,mBAAmB,EAAE,EAAE,OAAO,EAAE,KAAM,EAAE,CAAC,CAAC;QACtF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,oCAAqB,EAAE,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,4CAA4C,MAAM,EAAE,CAAC,CAAC;QACpE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;IACnE,CAAC;AACH,CAAC;AAbD,sEAaC"}
@@ -1 +0,0 @@
1
- import{j as e}from"./radix-ui-Zb8sVEtn.js";import{r as b}from"./react-vendor-CNOkPC89.js";import{t as o}from"./notifications-B2HqRBj7.js";import{bb as w,bc as us,a as Le,B as A,d as p,c as H,n as G,Q as ms,R as gs,U as le,V as de,L as F,I as ue,aF as Te,bh as hs,ag as xs,ah as fs,ai as ps,aj as js,ak as Ps,aC as bs,bd as ws}from"./index-DOn6k1jF.js";import{a as ys,u as Q,b as T}from"./tanstack-CrmUhA7Z.js";import{D as Ie}from"./default-ports-1QQSffYX.js";import{S as vs}from"./separator-BCfZ54mZ.js";import{S as Ns}from"./searchable-select-1zOULoec.js";import{R as Re,T as Cs,ah as Ss,K as J,ad as ks,aw as me,aP as Fe,aO as _s,L as R,J as Ms,at as As,aa as Ds,Z as ge,x as Ts,I as Rs}from"./icons-KVCk4_U8.js";import"./utils-CzKF5WmX.js";import"./form-utils-Bcoyqxpq.js";import"./code-highlight-BRUf_pqB.js";function Fs(s){if(!s||typeof s!="object")return!1;const a=s;return typeof a.message=="string"&&typeof a.stage=="string"&&typeof a.status=="number"&&typeof a.duration_ms=="number"&&typeof a.ok=="boolean"}function Ls(s){if(!s||typeof s!="object"||!("error"in s))return null;const a=s;return typeof a.error=="string"?a.error:null}async function Is(){const s=await fetch(w("/cursor/status"));if(!s.ok)throw new Error("Failed to fetch cursor status");return s.json()}async function Os(){const s=await fetch(w("/cursor/settings"));if(!s.ok)throw new Error("Failed to fetch cursor config");return s.json()}async function Es(){const s=await fetch(w("/cursor/models"));if(!s.ok)throw new Error("Failed to fetch cursor models");return s.json()}async function Ks(){const s=await fetch(w("/cursor/settings/raw"));if(!s.ok)throw new Error("Failed to fetch cursor raw settings");return s.json()}async function zs(s){const a=await fetch(w("/cursor/settings"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!a.ok)throw new Error("Failed to update cursor config");return a.json()}async function qs(s){const a=await fetch(w("/cursor/settings/raw"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(a.status===409)throw new us("Cursor raw settings changed externally");if(!a.ok)throw new Error("Failed to save cursor raw settings");return a.json()}async function Gs(){const s=await fetch(w("/cursor/auth/auto-detect"),{method:"POST"});if(!s.ok){const a=await s.json().catch(()=>({error:"Auto-detect failed"}));throw new Error(a.error||"Auto-detect failed")}return s.json()}async function Qs(s){const a=await fetch(w("/cursor/auth/import"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!a.ok){const c=await a.json().catch(()=>({error:"Manual import failed"}));throw new Error(c.error||"Manual import failed")}return a.json()}async function Js(){const s=await fetch(w("/cursor/daemon/start"),{method:"POST"});if(!s.ok)throw new Error("Failed to start cursor daemon");return s.json()}async function Us(){const s=await fetch(w("/cursor/daemon/stop"),{method:"POST"});if(!s.ok)throw new Error("Failed to stop cursor daemon");return s.json()}async function Bs(){const s=await fetch(w("/cursor/probe"),{method:"POST"}),a=await s.json().catch(()=>null);return Fs(a)?a:{ok:!1,stage:"runtime",status:s.status,duration_ms:0,error_type:"runtime_error",message:Ls(a)??"Failed to run live probe"}}function Hs(){const s=ys(),a=Q({queryKey:["cursor-status"],queryFn:Is,refetchInterval:5e3}),c=Q({queryKey:["cursor-config"],queryFn:Os}),d=Q({queryKey:["cursor-models"],queryFn:Es}),l=Q({queryKey:["cursor-raw-settings"],queryFn:Ks}),g=()=>{s.invalidateQueries({queryKey:["cursor-status"]}),s.invalidateQueries({queryKey:["cursor-config"]}),s.invalidateQueries({queryKey:["cursor-models"]}),s.invalidateQueries({queryKey:["cursor-raw-settings"]})},h=T({mutationFn:zs,onSuccess:g}),u=T({mutationFn:qs,onSuccess:g}),r=T({mutationFn:Gs,onSuccess:g}),m=T({mutationFn:Qs,onSuccess:g}),x=T({mutationFn:Js,onSuccess:g}),i=T({mutationFn:Us,onSuccess:g}),P=T({mutationFn:Bs,onSettled:()=>{s.invalidateQueries({queryKey:["cursor-status"]}),s.invalidateQueries({queryKey:["cursor-models"]})}});return b.useMemo(()=>({status:a.data,statusLoading:a.isLoading,statusError:a.error,refetchStatus:a.refetch,config:c.data,configLoading:c.isLoading,refetchConfig:c.refetch,models:d.data?.models??[],currentModel:d.data?.current??null,modelsLoading:d.isLoading,rawSettings:l.data,rawSettingsLoading:l.isLoading,refetchRawSettings:l.refetch,updateConfig:h.mutate,updateConfigAsync:h.mutateAsync,isUpdatingConfig:h.isPending,saveRawSettings:u.mutate,saveRawSettingsAsync:u.mutateAsync,isSavingRawSettings:u.isPending,autoDetectAuth:r.mutate,autoDetectAuthAsync:r.mutateAsync,isAutoDetectingAuth:r.isPending,autoDetectAuthResult:r.data,importManualAuth:m.mutate,importManualAuthAsync:m.mutateAsync,isImportingManualAuth:m.isPending,manualAuthResult:m.data,startDaemon:x.mutate,startDaemonAsync:x.mutateAsync,isStartingDaemon:x.isPending,stopDaemon:i.mutate,stopDaemonAsync:i.mutateAsync,isStoppingDaemon:i.isPending,runProbe:P.mutate,runProbeAsync:P.mutateAsync,isRunningProbe:P.isPending,probeResult:P.data,resetProbe:P.reset}),[a.data,a.isLoading,a.error,a.refetch,c.data,c.isLoading,c.refetch,d.data,d.isLoading,l.data,l.isLoading,l.refetch,h.mutate,h.mutateAsync,h.isPending,u.mutate,u.mutateAsync,u.isPending,r.mutate,r.mutateAsync,r.isPending,r.data,m.mutate,m.mutateAsync,m.isPending,m.data,x.mutate,x.mutateAsync,x.isPending,i.mutate,i.mutateAsync,i.isPending,P.mutate,P.mutateAsync,P.isPending,P.data,P.reset])}function he(s,a){return JSON.stringify({enabled:s?.enabled??null,authenticated:s?.authenticated??null,token_expired:s?.token_expired??null,daemon_running:s?.daemon_running??null,port:s?.port??null,ghost_mode:s?.ghost_mode??null,auto_start:a?.auto_start??null,model:a?.model??null})}function U(s){return{port:String(s?.port??Ie),auto_start:s?.auto_start??!1,ghost_mode:s?.ghost_mode??!0,model:s?.model?.trim()||"gpt-5.3-codex",opus_model:s?.opus_model?.trim()||"",sonnet_model:s?.sonnet_model?.trim()||"",haiku_model:s?.haiku_model?.trim()||""}}function C(s,a,c){return s.find(l=>a.some(g=>g.test(l.id)))?.id??c}function xe(s){return s.toLowerCase().replace(/[^a-z0-9]/g,"")}function S(s,a,c){const d=new Set(a.map(xe)),l=s.find(h=>d.has(xe(h.id)));if(l)return l.id;const g=s.find(h=>d.has(xe(h.name)));return g?g.id:c}function Vs(s){try{const a=JSON.parse(s||"{}");return!a||typeof a!="object"||Array.isArray(a)?{isValid:!1,error:"Raw settings must be a JSON object"}:{isValid:!0,settings:a}}catch(a){return{isValid:!1,error:a.message||"Invalid JSON"}}}function B({label:s,description:a,value:c,models:d,disabled:l,allowDefaultFallback:g=!1,onChange:h}){const{t:u}=Le(),r=c||(g?"__default":""),m=b.useMemo(()=>{const x=d.map(i=>({value:i.id,groupKey:"models",searchText:`${i.name||i.id} ${i.id}`,keywords:[i.provider],triggerContent:e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx("span",{className:"truncate font-mono text-xs",children:i.name||i.id}),i.provider&&e.jsx(A,{variant:"outline",className:"text-[9px] h-4 px-1 capitalize",children:i.provider})]}),itemContent:e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx("span",{className:"truncate text-xs font-mono",children:i.name||i.id}),e.jsx(A,{variant:"outline",className:"text-[9px] h-4 px-1 capitalize",children:i.provider})]})}));return g?[{value:"__default",groupKey:"models",searchText:u("cursorPage.useDefaultModel"),triggerContent:e.jsx("span",{className:"truncate font-mono text-xs",children:u("cursorPage.useDefaultModel")}),itemContent:e.jsx("span",{children:u("cursorPage.useDefaultModel")})},...x]:x},[g,d,u]);return e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("div",{children:[e.jsx(F,{className:"text-xs font-medium",children:s}),e.jsx("p",{className:"text-[10px] text-muted-foreground",children:a})]}),e.jsx(Ns,{value:r||void 0,onChange:x=>{if(g&&x==="__default"){h("");return}h(x)},disabled:l,placeholder:u("cursorPage.selectModel"),searchPlaceholder:u("searchableSelect.searchModels"),emptyText:u("searchableSelect.noResults"),triggerClassName:"h-9",groups:[{key:"models",label:u("cursorPage.availableModelCount",{count:d.length})}],options:m})]})}function fe({icon:s,label:a,ok:c,detail:d}){return e.jsxs("div",{className:"flex items-center gap-3 rounded-lg bg-muted/50 px-3 py-2",children:[e.jsx(s,{className:"h-4 w-4 text-muted-foreground shrink-0"}),e.jsx("div",{className:"flex-1 min-w-0",children:e.jsx("p",{className:"text-sm",children:a})}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[c?e.jsx(Ts,{className:"h-4 w-4 text-green-500"}):e.jsx(Rs,{className:"h-4 w-4 text-muted-foreground"}),e.jsx("span",{className:H("text-xs",c?"text-green-500":"text-muted-foreground"),title:d,children:d})]})]})}function ia(){const{t:s}=Le(),{status:a,statusLoading:c,refetchStatus:d,config:l,refetchConfig:g,updateConfigAsync:h,isUpdatingConfig:u,models:r,modelsLoading:m,currentModel:x,rawSettings:i,rawSettingsLoading:P,refetchRawSettings:Oe,saveRawSettingsAsync:Ee,isSavingRawSettings:pe,autoDetectAuthAsync:Ke,isAutoDetectingAuth:je,importManualAuthAsync:ze,isImportingManualAuth:Pe,startDaemonAsync:qe,isStartingDaemon:Ge,stopDaemonAsync:Qe,isStoppingDaemon:be,runProbeAsync:Je,isRunningProbe:V,probeResult:W,resetProbe:Ue}=Hs(),[D,X]=b.useState(()=>U()),[y,Z]=b.useState(!1),[we,Be]=b.useState("{}"),[L,$]=b.useState(!1),[He,E]=b.useState(!1),[Y,ye]=b.useState(""),[ee,ve]=b.useState(""),[Ne,Ce]=b.useState(()=>W?he(a,l):null),k=U(l),Se=y?D.port:k.port,se=y?D.auto_start:k.auto_start,ae=y?D.ghost_mode:k.ghost_mode,v=y?D.model:k.model,te=y?D.opus_model:k.opus_model,re=y?D.sonnet_model:k.sonnet_model,ne=y?D.haiku_model:k.haiku_model,oe=L?we:JSON.stringify(i?.settings??{},null,2),ke=!!i,I=b.useMemo(()=>Vs(oe),[oe]),_e=I.isValid,K=y||L,Ve=!L||ke&&_e,We=he(a,l),j=W&&!K&&Ne!==null&&Ne===We?W:null,z=b.useMemo(()=>{const t=new Set,n=[...r].sort((M,ce)=>M.name.localeCompare(ce.name)),f=n.filter(M=>t.has(M.id)?!1:(t.add(M.id),!0));return v&&!n.some(M=>M.id===v)?[{id:v,name:v,provider:"custom"},...f]:f},[r,v]),N=t=>{X(n=>t(y?n:k)),Z(!0)},_=()=>{Ue(),Ce(null)},Xe=(t=l)=>{X(U(t)),Z(!1)},Ze=!!(a?.enabled&&a?.authenticated&&!a?.token_expired),$e=b.useMemo(()=>a?.enabled?e.jsx(A,{children:s("cursorPage.enabled")}):e.jsx(A,{variant:"secondary",children:s("cursorPage.disabled")}),[a?.enabled,s]),Ye=async({suppressSuccessToast:t=!1}={})=>{const n=Number(Se);if(!Number.isInteger(n)||n<1||n>65535)return o.error(s("cursorPage.invalidPort")),!1;if(!v.trim())return o.error(s("cursorPage.defaultModelRequired")),!1;try{return await h({port:n,auto_start:se,ghost_mode:ae,model:v,opus_model:te||void 0,sonnet_model:re||void 0,haiku_model:ne||void 0}),Z(!1),X(U({port:n,auto_start:se,ghost_mode:ae,model:v,opus_model:te||void 0,sonnet_model:re||void 0,haiku_model:ne||void 0})),_(),t||o.success(s("cursorPage.savedConfig")),!0}catch(f){return o.error(f.message||s("cursorPage.failedSaveConfig")),!1}},ie=t=>{if(m){o.error(s("cursorPage.modelsLoadingWait"));return}if(r.length===0){o.error(s("cursorPage.noModelsAvailable"));return}const n=v||x||r[0]?.id||"gpt-5.3-codex",f=S(r,["gpt-5.3-codex","gpt53codex","GPT-5.3 Codex"],C(r,[/gpt[-.]?5.*codex/i],n)),M=S(r,["gpt-5.1-codex-max","gpt51codexmax","GPT-5.1 Codex Max"],C(r,[/gpt[-.]?5.*codex.*max/i],f)),ce=S(r,["gpt-5-fast","gpt5fast","GPT-5 Fast"],C(r,[/gpt[-.]?5.*fast/i],f)),cs=S(r,["gpt-5-mini","gpt5mini","GPT-5 Mini"],C(r,[/gpt[-.]?5.*mini/i],ce)),Ae=S(r,["claude-4.6-opus","claude46opus","Claude 4.6 Opus"],C(r,[/claude[-.]?4\.?6.*opus/i,/claude.*opus/i],f)),De=S(r,["claude-4.5-sonnet","claude45sonnet","Claude 4.5 Sonnet"],C(r,[/claude[-.]?4\.?5.*sonnet/i,/claude.*sonnet/i],f)),ls=S(r,["claude-4.5-haiku","claude45haiku","Claude 4.5 Haiku"],C(r,[/claude[-.]?4\.?5.*haiku/i,/haiku/i],De)),q=S(r,["gemini-3-pro","gemini3pro","Gemini 3 Pro"],C(r,[/gemini[-.]?3.*pro/i],f)),ds=S(r,["gemini-3-flash","gemini3flash","Gemini 3 Flash"],C(r,[/gemini[-.]?3.*flash/i,/gemini[-.]?2\.?5.*flash/i],q));if(t==="codex53"){N(O=>({...O,model:f,opus_model:M,sonnet_model:f,haiku_model:cs})),o.success(s("cursorPage.appliedCodexPreset"));return}if(t==="claude46"){N(O=>({...O,model:Ae,opus_model:Ae,sonnet_model:De,haiku_model:ls})),o.success(s("cursorPage.appliedClaudePreset"));return}N(O=>({...O,model:q,opus_model:q,sonnet_model:q,haiku_model:ds})),o.success(s("cursorPage.appliedGeminiPreset"))},Me=async t=>{try{await h({enabled:t}),_(),o.success(s(t?"cursorPage.integrationEnabled":"cursorPage.integrationDisabled"))}catch(n){o.error(n.message||s("cursorPage.failedUpdateIntegration"))}},es=async()=>{try{await Ke(),_(),o.success(s("cursorPage.credentialsImported"))}catch(t){o.error(t.message||s("cursorPage.autoDetectFailed"))}},ss=async()=>{if(!Y.trim()||!ee.trim()){o.error(s("cursorPage.manualRequired"));return}try{await ze({accessToken:Y.trim(),machineId:ee.trim()}),_(),o.success(s("cursorPage.credentialsImported")),E(!1),ye(""),ve("")}catch(t){o.error(t.message||s("cursorPage.manualImportFailed"))}},as=async()=>{try{const t=await qe();if(!t.success){o.error(t.error||s("cursorPage.failedStartDaemon"));return}_(),o.success(t.pid?s("cursorPage.daemonStartedWithPid",{pid:t.pid}):s("cursorPage.daemonStarted"))}catch(t){o.error(t.message||s("cursorPage.failedStartDaemon"))}},ts=async()=>{try{const t=await Qe();if(!t.success){o.error(t.error||s("cursorPage.failedStopDaemon"));return}_(),o.success(s("cursorPage.daemonStopped"))}catch(t){o.error(t.message||s("cursorPage.failedStopDaemon"))}},rs=async()=>{if(K){o.error(s("cursorPage.probeSaveFirst"));return}try{const t=await Je(),n=await d();if(Ce(he(n.data??a,l)),t.ok){o.success(s("cursorPage.probeSucceeded"));return}o.error(t.message||s("cursorPage.probeFailed"))}catch(t){o.error(t.message||s("cursorPage.probeFailed"))}},ns=async({suppressSuccessToast:t=!1}={})=>{if(!ke)return o.error(s("cursorPage.rawLoading")),!1;if(!I.isValid||!I.settings)return o.error(I.error||s("cursorPage.invalidJson")),!1;try{return await Ee({settings:I.settings,expectedMtime:i?.mtime}),$(!1),_(),t||o.success(s("cursorPage.rawSaved")),!0}catch(n){return ws(n)?o.error(s("cursorPage.rawChanged")):o.error(n.message||s("cursorPage.failedSaveRaw")),!1}},os=async()=>{if(!K)return;const t=y,n=L;t&&!await Ye({suppressSuccessToast:n})||n&&!await ns({suppressSuccessToast:t})||t&&n&&o.success(s("cursorPage.savedAll"))},is=async()=>{$(!1),_();const[,t]=await Promise.all([d(),g(),Oe()]);Xe(t.data??l)};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex h-full min-h-0 overflow-hidden",children:[e.jsxs("div",{className:"w-80 border-r flex flex-col bg-muted/30 shrink-0",children:[e.jsxs("div",{className:"p-4 border-b bg-background",children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("img",{src:"/assets/sidebar/cursor.svg",alt:"",className:"w-5 h-5 object-contain shrink-0"}),e.jsx("h1",{className:"font-semibold",children:s("cursorPage.title")}),e.jsx(A,{variant:"outline",className:"h-5 border-amber-500/60 bg-amber-500/10 px-1.5 text-[10px] font-semibold uppercase tracking-wide text-amber-800 dark:text-amber-300",children:s("cursorPage.beta")}),$e]}),e.jsx(p,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>d(),disabled:c,"aria-label":s("cursorPage.refreshStatus"),title:s("cursorPage.refreshStatus"),children:e.jsx(Re,{className:H("w-4 h-4",c&&"animate-spin")})})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("cursorPage.subtitle")})]}),e.jsx(G,{className:"flex-1",children:e.jsxs("div",{className:"p-3 space-y-4",children:[e.jsxs("div",{className:"rounded-md border border-yellow-500/50 bg-yellow-500/15 p-3 space-y-1.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Cs,{className:"h-4 w-4 text-yellow-600 dark:text-yellow-400 shrink-0"}),e.jsx("span",{className:"text-xs font-semibold text-yellow-800 dark:text-yellow-200",children:s("cursorPage.unofficialTitle")})]}),e.jsxs("ul",{className:"text-[11px] text-yellow-700 dark:text-yellow-300 space-y-0.5 pl-6 list-disc",children:[e.jsx("li",{children:s("cursorPage.unofficialItem1")}),e.jsx("li",{children:s("cursorPage.unofficialItem2")}),e.jsx("li",{children:s("cursorPage.unofficialItem3")})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(fe,{icon:Ss,label:s("cursorPage.integration"),ok:!!a?.enabled,detail:a?.enabled?s("cursorPage.enabled"):s("cursorPage.disabled")}),e.jsx(fe,{icon:J,label:s("cursorPage.authentication"),ok:!!(a?.authenticated&&!a?.token_expired),detail:a?.authenticated?a?.token_expired?s("cursorPage.expired"):a.auth_method??s("cursorPage.connected"):s("cursorPage.notConnected")}),e.jsx(fe,{icon:ks,label:s("cursorPage.daemon"),ok:!!a?.daemon_running,detail:a?.daemon_running?s("cursorPage.running"):s("cursorPage.stopped")})]}),e.jsxs("div",{className:"rounded-md border bg-background/80 p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsx(me,{className:"h-4 w-4 text-muted-foreground shrink-0"}),e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:s("cursorPage.liveProbe")})]}),e.jsx(A,{variant:j?"outline":"secondary",className:H(j?.ok&&"border-green-500/40 text-green-600 dark:text-green-300",j&&!j.ok&&"border-red-500/40 text-red-600 dark:text-red-300"),children:j?j.ok?s("cursorPage.probeSucceeded"):s("cursorPage.probeFailed"):s("cursorPage.probeNotRun")})]}),j?e.jsxs("div",{className:"space-y-1 text-xs",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cursorPage.probeStage")}),e.jsx("span",{className:"font-mono uppercase",children:j.stage})]}),e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cursorPage.probeHttpStatus")}),e.jsx("span",{className:"font-mono",children:j.status})]}),e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cursorPage.probeDuration")}),e.jsxs("span",{className:"font-mono",children:[j.duration_ms," ms"]})]}),j.model?e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cursorPage.probeModel")}),e.jsx("span",{className:"font-mono text-[11px] text-right break-all",children:j.model})]}):null,e.jsxs("div",{className:"space-y-1 pt-1",children:[e.jsx("span",{className:"text-muted-foreground",children:s("cursorPage.probeMessage")}),e.jsx("p",{className:"text-[11px] leading-relaxed break-words",children:j.message})]})]}):e.jsx("p",{className:"text-xs text-muted-foreground",children:s("cursorPage.probeNotRun")}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:s("cursorPage.probeLocalReadinessHint")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wide",children:s("cursorPage.actions")}),a?.enabled?e.jsxs(p,{variant:"outline",size:"sm",className:"w-full",onClick:()=>Me(!1),disabled:u,children:[e.jsx(Fe,{className:"w-3.5 h-3.5 mr-1.5"}),s("cursorPage.disableIntegration")]}):e.jsxs(p,{size:"sm",className:"w-full",onClick:()=>Me(!0),disabled:u,children:[e.jsx(_s,{className:"w-3.5 h-3.5 mr-1.5"}),s("cursorPage.enableIntegration")]}),e.jsxs(p,{variant:"outline",size:"sm",className:"w-full",onClick:es,disabled:je,children:[je?e.jsx(R,{className:"w-3.5 h-3.5 mr-1.5 animate-spin"}):e.jsx(J,{className:"w-3.5 h-3.5 mr-1.5"}),s("cursorPage.autoDetectAuth")]}),e.jsxs(p,{variant:"outline",size:"sm",className:"w-full",onClick:()=>E(!0),children:[e.jsx(J,{className:"w-3.5 h-3.5 mr-1.5"}),s("cursorPage.manualAuthImport")]}),e.jsxs(p,{variant:"outline",size:"sm",className:"w-full",onClick:rs,disabled:V,children:[V?e.jsx(R,{className:"w-3.5 h-3.5 mr-1.5 animate-spin"}):e.jsx(me,{className:"w-3.5 h-3.5 mr-1.5"}),s(V?"cursorPage.probing":j?"cursorPage.rerunLiveProbe":"cursorPage.runLiveProbe")]}),a?.daemon_running?e.jsxs(p,{variant:"outline",size:"sm",className:"w-full",onClick:ts,disabled:be,children:[be?e.jsx(R,{className:"w-3.5 h-3.5 mr-1.5 animate-spin"}):e.jsx(Fe,{className:"w-3.5 h-3.5 mr-1.5"}),s("cursorPage.stopDaemon")]}):e.jsxs(p,{size:"sm",className:"w-full",onClick:as,disabled:!Ze,children:[Ge?e.jsx(R,{className:"w-3.5 h-3.5 mr-1.5 animate-spin"}):e.jsx(Ms,{className:"w-3.5 h-3.5 mr-1.5"}),s("cursorPage.startDaemon")]})]})]})}),e.jsx("div",{className:"p-3 border-t bg-background text-xs text-muted-foreground",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{children:s("cursorPage.port")}),e.jsx("span",{children:a?.port??l?.port??Ie})]})})]}),e.jsx("div",{className:"flex-1 flex flex-col min-w-0 bg-background overflow-hidden",children:e.jsxs("div",{className:"flex-1 min-h-0 flex flex-col overflow-hidden",children:[e.jsxs("div",{className:"px-6 py-4 border-b bg-background flex items-center justify-between shrink-0",children:[e.jsx("div",{className:"flex items-center gap-3",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"text-lg font-semibold",children:s("cursorPage.configuration")}),i&&e.jsx(A,{variant:"outline",className:"text-xs",children:"cursor.settings.json"})]}),i&&e.jsxs("p",{className:"text-xs text-muted-foreground mt-0.5",children:[s("cursorPage.lastModified")," ",i.exists?new Date(i.mtime).toLocaleString():s("cursorPage.neverSaved")]})]})}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(p,{variant:"ghost",size:"sm",onClick:is,disabled:c||P,"aria-label":s("cursorPage.refreshConfiguration"),title:s("cursorPage.refreshConfiguration"),children:e.jsx(Re,{className:H("w-4 h-4",(c||P)&&"animate-spin")})}),e.jsx(p,{size:"sm",onClick:os,disabled:u||pe||!K||!Ve,children:u||pe?e.jsxs(e.Fragment,{children:[e.jsx(R,{className:"w-4 h-4 mr-1 animate-spin"}),s("cursorPage.saving")]}):e.jsxs(e.Fragment,{children:[e.jsx(As,{className:"w-4 h-4 mr-1"}),s("cursorPage.save")]})})]})]}),e.jsxs("div",{className:"flex-1 min-h-0 flex divide-x overflow-hidden",children:[e.jsx("div",{className:"w-[540px] shrink-0 flex flex-col min-h-0 overflow-hidden bg-muted/5",children:e.jsxs(ms,{defaultValue:"config",className:"h-full flex flex-col",children:[e.jsx("div",{className:"px-4 pt-4 shrink-0",children:e.jsxs(gs,{className:"w-full",children:[e.jsx(le,{value:"config",className:"flex-1",children:s("cursorPage.modelConfig")}),e.jsx(le,{value:"settings",className:"flex-1",children:s("cursorPage.settings")}),e.jsx(le,{value:"info",className:"flex-1",children:s("cursorPage.info")})]})}),e.jsxs("div",{className:"flex-1 min-h-0 overflow-hidden flex flex-col",children:[e.jsx(de,{value:"config",className:"flex-1 mt-0 border-0 p-0 data-[state=inactive]:hidden flex flex-col overflow-hidden",children:e.jsx(G,{className:"flex-1",children:e.jsxs("div",{className:"p-4 space-y-6",children:[e.jsxs("div",{children:[e.jsxs("h3",{className:"text-sm font-medium mb-2 flex items-center gap-2",children:[e.jsx(Ds,{className:"w-4 h-4"}),s("cursorPage.presets")]}),e.jsx("p",{className:"text-xs text-muted-foreground mb-3",children:s("cursorPage.presetsDesc")}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs(p,{variant:"outline",size:"sm",className:"text-xs h-7 gap-1",onClick:()=>ie("codex53"),disabled:m||r.length===0,title:"OpenAI-only mapping: GPT-5.3 Codex / Codex Max / GPT-5 Mini",children:[e.jsx(ge,{className:"w-3 h-3"}),"GPT-5.3 Codex"]}),e.jsxs(p,{variant:"outline",size:"sm",className:"text-xs h-7 gap-1",onClick:()=>ie("claude46"),disabled:m||r.length===0,title:"Claude-first mapping: Opus 4.6 / Sonnet 4.5 / Haiku 4.5",children:[e.jsx(ge,{className:"w-3 h-3"}),"Claude 4.6"]}),e.jsxs(p,{variant:"outline",size:"sm",className:"text-xs h-7 gap-1",onClick:()=>ie("gemini3"),disabled:m||r.length===0,title:"Gemini-first mapping: Gemini 3 Pro + Gemini 3 Flash",children:[e.jsx(ge,{className:"w-3 h-3"}),"Gemini 3 Pro"]})]})]}),e.jsx(vs,{}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-medium mb-2",children:s("cursorPage.modelMapping")}),e.jsx("p",{className:"text-xs text-muted-foreground mb-4",children:s("cursorPage.modelMappingDesc")}),e.jsxs("div",{className:"space-y-4",children:[e.jsx(B,{label:s("cursorPage.defaultModel"),description:s("cursorPage.defaultModelDesc"),value:v,models:z,disabled:m,onChange:t=>{N(n=>({...n,model:t}))}}),e.jsx(B,{label:s("cursorPage.opusModel"),description:s("cursorPage.opusModelDesc"),value:te,models:z,disabled:m,allowDefaultFallback:!0,onChange:t=>{N(n=>({...n,opus_model:t}))}}),e.jsx(B,{label:s("cursorPage.sonnetModel"),description:s("cursorPage.sonnetModelDesc"),value:re,models:z,disabled:m,allowDefaultFallback:!0,onChange:t=>{N(n=>({...n,sonnet_model:t}))}}),e.jsx(B,{label:s("cursorPage.haikuModel"),description:s("cursorPage.haikuModelDesc"),value:ne,models:z,disabled:m,allowDefaultFallback:!0,onChange:t=>{N(n=>({...n,haiku_model:t}))}})]})]})]})})}),e.jsx(de,{value:"settings",className:"flex-1 mt-0 border-0 p-0 data-[state=inactive]:hidden flex flex-col overflow-hidden",children:e.jsx(G,{className:"flex-1",children:e.jsx("div",{className:"p-4 space-y-6",children:e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-sm font-medium",children:s("cursorPage.runtimeSettings")}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(F,{htmlFor:"cursor-port",className:"text-xs",children:"Port"}),e.jsx(ue,{id:"cursor-port",type:"number",min:1,max:65535,className:"max-w-[150px] h-8",value:Se,onChange:t=>{N(n=>({...n,port:t.target.value}))}})]}),e.jsxs("div",{className:"flex items-center justify-between rounded-lg border p-3",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(F,{htmlFor:"cursor-auto-start",className:"text-xs",children:s("cursorPage.autoStartDaemon")}),e.jsx("p",{className:"text-[10px] text-muted-foreground",children:s("cursorPage.autoStartDesc")})]}),e.jsx(Te,{id:"cursor-auto-start",checked:se,onCheckedChange:t=>{N(n=>({...n,auto_start:t}))}})]}),e.jsxs("div",{className:"flex items-center justify-between rounded-lg border p-3",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(F,{htmlFor:"cursor-ghost-mode",className:"text-xs",children:s("cursorPage.ghostMode")}),e.jsx("p",{className:"text-[10px] text-muted-foreground",children:s("cursorPage.ghostModeDesc")})]}),e.jsx(Te,{id:"cursor-ghost-mode",checked:ae,onCheckedChange:t=>{N(n=>({...n,ghost_mode:t}))}})]})]})})})}),e.jsx(de,{value:"info",className:"flex-1 mt-0 border-0 p-0 data-[state=inactive]:hidden flex flex-col overflow-hidden",children:e.jsx(G,{className:"flex-1",children:e.jsxs("div",{className:"p-4 space-y-6",children:[e.jsxs("div",{className:"space-y-3 bg-card rounded-lg border p-4 shadow-sm",children:[e.jsxs("div",{className:"grid grid-cols-[100px_1fr] gap-2 text-sm items-center",children:[e.jsx("span",{className:"font-medium text-muted-foreground",children:s("cursorPage.provider")}),e.jsx("span",{className:"font-mono",children:"Cursor IDE"})]}),e.jsxs("div",{className:"grid grid-cols-[100px_1fr] gap-2 text-sm items-center",children:[e.jsx("span",{className:"font-medium text-muted-foreground",children:s("cursorPage.filePath")}),e.jsx("code",{className:"bg-muted px-1.5 py-0.5 rounded text-xs break-all",children:i?.path??"~/.ccs/cursor.settings.json"})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Model mapping writes `ANTHROPIC_MODEL`, `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, and `ANTHROPIC_DEFAULT_HAIKU_MODEL` in `cursor.settings.json`."})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-medium mb-3",children:s("cursorPage.availableModels")}),m?e.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground",children:[e.jsx(R,{className:"w-4 h-4 animate-spin"}),s("cursorPage.loadingModels")]}):r.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:s("cursorPage.noModels")}):e.jsx("div",{className:"space-y-2",children:r.map(t=>e.jsxs("div",{className:"rounded-lg border px-3 py-2 flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium",children:t.id}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:[t.name," • ",t.provider]})]}),t.id===x&&e.jsx(A,{children:s("cursorPage.default")})]},t.id))})]})]})})})]})]})}),e.jsxs("div",{className:"flex-1 min-w-0 flex flex-col overflow-hidden",children:[e.jsxs("div",{className:"px-6 py-2 bg-muted/30 border-b flex items-center gap-2 shrink-0 h-[45px]",children:[e.jsx(me,{className:"w-4 h-4 text-muted-foreground"}),e.jsx("span",{className:"text-sm font-medium text-muted-foreground",children:s("cursorPage.rawConfiguration")})]}),e.jsx(hs,{rawJsonContent:oe,isRawJsonValid:_e,rawJsonEdits:L?we:null,rawSettingsEnv:i?.settings?.env,onChange:t=>{$(!0),Be(t)}})]})]})]})})]}),e.jsx(xs,{open:He,onOpenChange:E,children:e.jsxs(fs,{children:[e.jsxs(ps,{children:[e.jsx(js,{children:s("cursorPage.manualImportTitle")}),e.jsx(Ps,{children:s("cursorPage.manualImportDesc")})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(F,{htmlFor:"cursor-manual-token",children:s("cursorPage.accessToken")}),e.jsx(ue,{id:"cursor-manual-token",value:Y,onChange:t=>ye(t.target.value),placeholder:s("cursorPage.accessTokenPlaceholder")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(F,{htmlFor:"cursor-manual-machine-id",children:s("cursorPage.machineId")}),e.jsx(ue,{id:"cursor-manual-machine-id",value:ee,onChange:t=>ve(t.target.value),placeholder:s("cursorPage.machineIdPlaceholder")})]})]}),e.jsxs(bs,{children:[e.jsx(p,{variant:"outline",onClick:()=>E(!1),children:s("cursorPage.cancel")}),e.jsxs(p,{onClick:ss,disabled:Pe,children:[Pe?e.jsx(R,{className:"w-4 h-4 mr-2 animate-spin"}):e.jsx(J,{className:"w-4 h-4 mr-2"}),s("cursorPage.import")]})]})]})})]})}export{ia as CursorPage};