@kaitranntt/ccs 7.68.2 → 7.69.0

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 (252) hide show
  1. package/dist/auth/commands/create-command-env.d.ts +1 -0
  2. package/dist/auth/commands/create-command-env.d.ts.map +1 -1
  3. package/dist/ccs.js +55 -2
  4. package/dist/ccs.js.map +1 -1
  5. package/dist/channels/official-channels-runtime.d.ts +1 -0
  6. package/dist/channels/official-channels-runtime.d.ts.map +1 -1
  7. package/dist/channels/official-channels-store.d.ts +1 -0
  8. package/dist/channels/official-channels-store.d.ts.map +1 -1
  9. package/dist/cliproxy/base-config-loader.d.ts +1 -0
  10. package/dist/cliproxy/base-config-loader.d.ts.map +1 -1
  11. package/dist/cliproxy/config/env-builder.d.ts +1 -0
  12. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  13. package/dist/cliproxy/config/extended-context-config.d.ts +1 -0
  14. package/dist/cliproxy/config/extended-context-config.d.ts.map +1 -1
  15. package/dist/cliproxy/config/thinking-config.d.ts +1 -0
  16. package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
  17. package/dist/cliproxy/executor/env-resolver.d.ts +2 -0
  18. package/dist/cliproxy/executor/env-resolver.d.ts.map +1 -1
  19. package/dist/cliproxy/executor/env-resolver.js +2 -1
  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 +28 -1
  23. package/dist/cliproxy/executor/index.js.map +1 -1
  24. package/dist/cliproxy/model-id-normalizer.d.ts +1 -0
  25. package/dist/cliproxy/model-id-normalizer.d.ts.map +1 -1
  26. package/dist/cliproxy/routing-strategy-http.d.ts +1 -0
  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 +0 -3
  30. package/dist/cliproxy/tool-sanitization-proxy.js.map +1 -1
  31. package/dist/cliproxy/types.d.ts +2 -0
  32. package/dist/cliproxy/types.d.ts.map +1 -1
  33. package/dist/commands/cliproxy/catalog-subcommand.d.ts +6 -0
  34. package/dist/commands/cliproxy/catalog-subcommand.d.ts.map +1 -1
  35. package/dist/commands/cliproxy/catalog-subcommand.js +39 -1
  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 +1 -0
  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 +6 -0
  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 +2 -0
  46. package/dist/commands/cursor-command-display.d.ts.map +1 -1
  47. package/dist/commands/cursor-command-display.js +24 -3
  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 +31 -1
  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 +2 -1
  54. package/dist/config/migration-manager.js.map +1 -1
  55. package/dist/config/unified-config-loader.d.ts +8 -3
  56. package/dist/config/unified-config-loader.d.ts.map +1 -1
  57. package/dist/config/unified-config-loader.js +20 -7
  58. package/dist/config/unified-config-loader.js.map +1 -1
  59. package/dist/config/unified-config-types.d.ts +15 -2
  60. package/dist/config/unified-config-types.d.ts.map +1 -1
  61. package/dist/config/unified-config-types.js +8 -3
  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 +1 -0
  66. package/dist/cursor/constants.js.map +1 -1
  67. package/dist/cursor/cursor-anthropic-response.d.ts +1 -0
  68. package/dist/cursor/cursor-anthropic-response.d.ts.map +1 -1
  69. package/dist/cursor/cursor-auth.d.ts +1 -0
  70. package/dist/cursor/cursor-auth.d.ts.map +1 -1
  71. package/dist/cursor/cursor-auth.js +154 -32
  72. package/dist/cursor/cursor-auth.js.map +1 -1
  73. package/dist/cursor/cursor-executor.d.ts +2 -1
  74. package/dist/cursor/cursor-executor.d.ts.map +1 -1
  75. package/dist/cursor/cursor-executor.js +295 -160
  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 +1 -3
  79. package/dist/cursor/cursor-protobuf-decoder.js.map +1 -1
  80. package/dist/cursor/cursor-protobuf-schema.d.ts +12 -3
  81. package/dist/cursor/cursor-protobuf-schema.d.ts.map +1 -1
  82. package/dist/cursor/cursor-protobuf-schema.js +23 -5
  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 +2 -4
  87. package/dist/cursor/cursor-protobuf.js.map +1 -1
  88. package/dist/cursor/cursor-runtime-probe.d.ts +12 -0
  89. package/dist/cursor/cursor-runtime-probe.d.ts.map +1 -0
  90. package/dist/cursor/cursor-runtime-probe.js +220 -0
  91. package/dist/cursor/cursor-runtime-probe.js.map +1 -0
  92. package/dist/cursor/cursor-stream-parser.d.ts +10 -0
  93. package/dist/cursor/cursor-stream-parser.d.ts.map +1 -1
  94. package/dist/cursor/cursor-stream-parser.js +106 -10
  95. package/dist/cursor/cursor-stream-parser.js.map +1 -1
  96. package/dist/cursor/index.d.ts +1 -0
  97. package/dist/cursor/index.d.ts.map +1 -1
  98. package/dist/cursor/index.js +3 -1
  99. package/dist/cursor/index.js.map +1 -1
  100. package/dist/cursor/types.d.ts +6 -0
  101. package/dist/cursor/types.d.ts.map +1 -1
  102. package/dist/docker/docker-executor.d.ts +1 -0
  103. package/dist/docker/docker-executor.d.ts.map +1 -1
  104. package/dist/docker/supervisord-lifecycle.d.ts +17 -0
  105. package/dist/docker/supervisord-lifecycle.d.ts.map +1 -0
  106. package/dist/docker/supervisord-lifecycle.js +58 -0
  107. package/dist/docker/supervisord-lifecycle.js.map +1 -0
  108. package/dist/management/instance-manager.d.ts.map +1 -1
  109. package/dist/management/instance-manager.js +5 -2
  110. package/dist/management/instance-manager.js.map +1 -1
  111. package/dist/targets/claude-adapter.d.ts +6 -1
  112. package/dist/targets/claude-adapter.d.ts.map +1 -1
  113. package/dist/targets/claude-adapter.js +6 -2
  114. package/dist/targets/claude-adapter.js.map +1 -1
  115. package/dist/targets/codex-adapter.d.ts +1 -0
  116. package/dist/targets/codex-adapter.d.ts.map +1 -1
  117. package/dist/targets/codex-adapter.js +12 -8
  118. package/dist/targets/codex-adapter.js.map +1 -1
  119. package/dist/targets/droid-adapter.d.ts +3 -1
  120. package/dist/targets/droid-adapter.d.ts.map +1 -1
  121. package/dist/targets/droid-adapter.js +3 -2
  122. package/dist/targets/droid-adapter.js.map +1 -1
  123. package/dist/targets/target-adapter.d.ts +5 -0
  124. package/dist/targets/target-adapter.d.ts.map +1 -1
  125. package/dist/types/cli.d.ts +1 -0
  126. package/dist/types/cli.d.ts.map +1 -1
  127. package/dist/ui/assets/{accounts-DjL3iVZW.js → accounts-D9eEaNx9.js} +1 -1
  128. package/dist/ui/assets/{alert-dialog-Tc_D1a_B.js → alert-dialog-QyEXocpn.js} +1 -1
  129. package/dist/ui/assets/{api-CUtkvXmX.js → api-7vQe0xOg.js} +1 -1
  130. package/dist/ui/assets/{auth-section-CuKWQHC7.js → auth-section-BszF77uT.js} +1 -1
  131. package/dist/ui/assets/{backups-section-BKW2pbb9.js → backups-section-D6RgaOx1.js} +1 -1
  132. package/dist/ui/assets/{channels-DvWJMdaq.js → channels-B1vgnNJX.js} +1 -1
  133. package/dist/ui/assets/{checkbox-B0hZxMK5.js → checkbox-Dzwkj_Pg.js} +1 -1
  134. package/dist/ui/assets/{claude-extension-Dfqu-rev.js → claude-extension-CKO4bJ22.js} +1 -1
  135. package/dist/ui/assets/{cliproxy-ai-providers-BXLuuxNf.js → cliproxy-ai-providers-CmbFYVoR.js} +1 -1
  136. package/dist/ui/assets/{cliproxy-control-panel-aQ7cCc2U.js → cliproxy-control-panel-M8ZfUq3C.js} +1 -1
  137. package/dist/ui/assets/{cliproxy-C9RxW-I8.js → cliproxy-kHd-oC5W.js} +1 -1
  138. package/dist/ui/assets/{codex-aq4RI6_n.js → codex-BJ0RdMuh.js} +1 -1
  139. package/dist/ui/assets/{confirm-dialog-CpDk6eu4.js → confirm-dialog-BlSaX2gK.js} +1 -1
  140. package/dist/ui/assets/{copilot-CQRpGXvY.js → copilot-NJKZQXQ_.js} +1 -1
  141. package/dist/ui/assets/cursor-BrcDgu6X.js +1 -0
  142. package/dist/ui/assets/{droid-Cgx-yLjy.js → droid-B9u9ZB-a.js} +1 -1
  143. package/dist/ui/assets/{globalenv-section-DsNqG1yB.js → globalenv-section-DoX37DqB.js} +1 -1
  144. package/dist/ui/assets/{health-BY-O-JcA.js → health-D_gdcxnc.js} +1 -1
  145. package/dist/ui/assets/{index-DsCjnpco.js → index-BNU4Hhe_.js} +1 -1
  146. package/dist/ui/assets/{index-Cet36v1V.js → index-CTGpqIx6.js} +1 -1
  147. package/dist/ui/assets/index-Cu6e0-ev.css +1 -0
  148. package/dist/ui/assets/{index-CLGiPB3A.js → index-DFEMq3KP.js} +1 -1
  149. package/dist/ui/assets/index-DOn6k1jF.js +72 -0
  150. package/dist/ui/assets/{index-TQFuDZdB.js → index-DoVPk3vW.js} +1 -1
  151. package/dist/ui/assets/index-h08p9xL5.js +1 -0
  152. package/dist/ui/assets/{logs-D5ro-pc7.js → logs-DtH4YMt4.js} +1 -1
  153. package/dist/ui/assets/{masked-input-h0XkMSwB.js → masked-input-C2H-Ax0Z.js} +1 -1
  154. package/dist/ui/assets/{proxy-status-widget-yBdrFeb7.js → proxy-status-widget-BOrsn86w.js} +1 -1
  155. package/dist/ui/assets/{raw-json-settings-editor-panel-Cb7ZInQV.js → raw-json-settings-editor-panel-WxTn7-hS.js} +1 -1
  156. package/dist/ui/assets/{searchable-select-D4xr5xKS.js → searchable-select-1zOULoec.js} +1 -1
  157. package/dist/ui/assets/{separator-gw5BjIpP.js → separator-BCfZ54mZ.js} +1 -1
  158. package/dist/ui/assets/{shared-C-VeA1Z9.js → shared-DlTbnc9n.js} +1 -1
  159. package/dist/ui/assets/{table-Bd4isC18.js → table-Bx2cnkWN.js} +1 -1
  160. package/dist/ui/assets/{updates-DiK8I67C.js → updates-SiZKOnUD.js} +1 -1
  161. package/dist/ui/index.html +2 -2
  162. package/dist/utils/browser/chrome-reuse.d.ts +17 -0
  163. package/dist/utils/browser/chrome-reuse.d.ts.map +1 -0
  164. package/dist/utils/browser/chrome-reuse.js +205 -0
  165. package/dist/utils/browser/chrome-reuse.js.map +1 -0
  166. package/dist/utils/browser/claude-tool-args.d.ts +2 -0
  167. package/dist/utils/browser/claude-tool-args.d.ts.map +1 -0
  168. package/dist/utils/browser/claude-tool-args.js +18 -0
  169. package/dist/utils/browser/claude-tool-args.js.map +1 -0
  170. package/dist/utils/browser/index.d.ts +8 -0
  171. package/dist/utils/browser/index.d.ts.map +1 -0
  172. package/dist/utils/browser/index.js +24 -0
  173. package/dist/utils/browser/index.js.map +1 -0
  174. package/dist/utils/browser/mcp-installer.d.ts +14 -0
  175. package/dist/utils/browser/mcp-installer.d.ts.map +1 -0
  176. package/dist/utils/browser/mcp-installer.js +356 -0
  177. package/dist/utils/browser/mcp-installer.js.map +1 -0
  178. package/dist/utils/browser-codex-overrides.d.ts +3 -0
  179. package/dist/utils/browser-codex-overrides.d.ts.map +1 -0
  180. package/dist/utils/browser-codex-overrides.js +29 -0
  181. package/dist/utils/browser-codex-overrides.js.map +1 -0
  182. package/dist/utils/claude-detector.d.ts +1 -0
  183. package/dist/utils/claude-detector.d.ts.map +1 -1
  184. package/dist/utils/claude-spawner.d.ts +1 -0
  185. package/dist/utils/claude-spawner.d.ts.map +1 -1
  186. package/dist/utils/claude-tool-args.d.ts +7 -0
  187. package/dist/utils/claude-tool-args.d.ts.map +1 -0
  188. package/dist/utils/claude-tool-args.js +43 -0
  189. package/dist/utils/claude-tool-args.js.map +1 -0
  190. package/dist/utils/image-analysis/claude-tool-args.d.ts +3 -0
  191. package/dist/utils/image-analysis/claude-tool-args.d.ts.map +1 -1
  192. package/dist/utils/image-analysis/claude-tool-args.js +21 -47
  193. package/dist/utils/image-analysis/claude-tool-args.js.map +1 -1
  194. package/dist/utils/package-manager-detector.d.ts +1 -0
  195. package/dist/utils/package-manager-detector.d.ts.map +1 -1
  196. package/dist/utils/prompt-injection-strategy.d.ts +54 -0
  197. package/dist/utils/prompt-injection-strategy.d.ts.map +1 -0
  198. package/dist/utils/prompt-injection-strategy.js +128 -0
  199. package/dist/utils/prompt-injection-strategy.js.map +1 -0
  200. package/dist/utils/shell-executor.d.ts +1 -0
  201. package/dist/utils/shell-executor.d.ts.map +1 -1
  202. package/dist/utils/websearch/claude-tool-args.d.ts +7 -0
  203. package/dist/utils/websearch/claude-tool-args.d.ts.map +1 -1
  204. package/dist/utils/websearch/claude-tool-args.js +27 -50
  205. package/dist/utils/websearch/claude-tool-args.js.map +1 -1
  206. package/dist/utils/websearch/hook-env.d.ts.map +1 -1
  207. package/dist/utils/websearch/hook-env.js +19 -1
  208. package/dist/utils/websearch/hook-env.js.map +1 -1
  209. package/dist/utils/websearch/status.d.ts +1 -1
  210. package/dist/utils/websearch/status.d.ts.map +1 -1
  211. package/dist/utils/websearch/status.js +33 -12
  212. package/dist/utils/websearch/status.js.map +1 -1
  213. package/dist/utils/websearch/trace.d.ts +1 -0
  214. package/dist/utils/websearch/trace.d.ts.map +1 -1
  215. package/dist/utils/websearch/trace.js +20 -5
  216. package/dist/utils/websearch/trace.js.map +1 -1
  217. package/dist/utils/websearch/types.d.ts +12 -2
  218. package/dist/utils/websearch/types.d.ts.map +1 -1
  219. package/dist/utils/websearch/types.js +38 -0
  220. package/dist/utils/websearch/types.js.map +1 -1
  221. package/dist/web-server/health/websearch-checks.js +1 -1
  222. package/dist/web-server/health/websearch-checks.js.map +1 -1
  223. package/dist/web-server/middleware/auth-middleware.d.ts +0 -1
  224. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  225. package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
  226. package/dist/web-server/routes/cliproxy-local-proxy.js +26 -6
  227. package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
  228. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
  229. package/dist/web-server/routes/cliproxy-stats-routes.js +8 -1
  230. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
  231. package/dist/web-server/routes/cursor-routes.d.ts +2 -0
  232. package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
  233. package/dist/web-server/routes/cursor-routes.js +44 -2
  234. package/dist/web-server/routes/cursor-routes.js.map +1 -1
  235. package/dist/web-server/routes/websearch-routes.d.ts.map +1 -1
  236. package/dist/web-server/routes/websearch-routes.js +37 -0
  237. package/dist/web-server/routes/websearch-routes.js.map +1 -1
  238. package/dist/web-server/services/cliproxy-dashboard-install-service.d.ts.map +1 -1
  239. package/dist/web-server/services/cliproxy-dashboard-install-service.js +14 -0
  240. package/dist/web-server/services/cliproxy-dashboard-install-service.js.map +1 -1
  241. package/dist/web-server/services/codex-dashboard-service.d.ts +1 -0
  242. package/dist/web-server/services/codex-dashboard-service.d.ts.map +1 -1
  243. package/dist/web-server/services/droid-dashboard-service.d.ts +1 -0
  244. package/dist/web-server/services/droid-dashboard-service.d.ts.map +1 -1
  245. package/lib/hooks/websearch-transformer.cjs +136 -0
  246. package/lib/mcp/ccs-browser-server.cjs +877 -0
  247. package/lib/mcp/ccs-websearch-server.cjs +1 -1
  248. package/package.json +2 -1
  249. package/dist/ui/assets/cursor-BpXPf6qi.js +0 -1
  250. package/dist/ui/assets/index-BmSzf0T9.js +0 -72
  251. package/dist/ui/assets/index-DH6L6ybH.js +0 -1
  252. package/dist/ui/assets/index-teLjoh2T.css +0 -1
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Cursor Routes - Cursor IDE integration via cursor proxy daemon
3
3
  */
4
+ import { autoDetectTokens } from '../../cursor';
4
5
  declare const router: import("express-serve-static-core").Router;
5
6
  interface DaemonStartPreconditionInput {
6
7
  enabled: boolean;
@@ -11,6 +12,7 @@ interface DaemonStartPreconditionError {
11
12
  status: number;
12
13
  error: string;
13
14
  }
15
+ export declare function getAutoDetectFailureStatus(reason?: ReturnType<typeof autoDetectTokens>['reason']): number;
14
16
  export declare function getDaemonStartPreconditionError(input: DaemonStartPreconditionInput): DaemonStartPreconditionError | null;
15
17
  export default router;
16
18
  //# sourceMappingURL=cursor-routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-routes.d.ts","sourceRoot":"","sources":["../../../src/web-server/routes/cursor-routes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH,QAAA,MAAM,MAAM,4CAAW,CAAC;AAExB,UAAU,4BAA4B;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,4BAA4B;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,4BAA4B,GAClC,4BAA4B,GAAG,IAAI,CAuBrC;AAiJD,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"cursor-routes.d.ts","sourceRoot":"","sources":["../../../src/web-server/routes/cursor-routes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAML,gBAAgB,EAIjB,MAAM,cAAc,CAAC;AAItB,QAAA,MAAM,MAAM,4CAAW,CAAC;AAExB,UAAU,4BAA4B;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,4BAA4B;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,0BAA0B,CACxC,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,QAAQ,CAAC,GACrD,MAAM,CAWR;AAeD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,4BAA4B,GAClC,4BAA4B,GAAG,IAAI,CAuBrC;AAkKD,eAAe,MAAM,CAAC"}
@@ -6,12 +6,37 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.getDaemonStartPreconditionError = void 0;
9
+ exports.getDaemonStartPreconditionError = exports.getAutoDetectFailureStatus = void 0;
10
10
  const express_1 = require("express");
11
11
  const cursor_1 = require("../../cursor");
12
12
  const unified_config_loader_1 = require("../../config/unified-config-loader");
13
13
  const cursor_settings_routes_1 = __importDefault(require("./cursor-settings-routes"));
14
14
  const router = (0, express_1.Router)();
15
+ function getAutoDetectFailureStatus(reason) {
16
+ switch (reason) {
17
+ case 'sqlite_unavailable':
18
+ return 503;
19
+ case 'db_query_failed':
20
+ return 500;
21
+ case 'invalid_token_format':
22
+ return 400;
23
+ default:
24
+ return 404;
25
+ }
26
+ }
27
+ exports.getAutoDetectFailureStatus = getAutoDetectFailureStatus;
28
+ function getPublicAutoDetectError(result) {
29
+ switch (result.reason) {
30
+ case 'db_not_found':
31
+ return 'Cursor state database not found on this host.';
32
+ case 'sqlite_unavailable':
33
+ return 'Cursor state database was found, but sqlite3 is not available in PATH.';
34
+ case 'db_query_failed':
35
+ return 'Cursor state database was found, but CCS could not query it.';
36
+ default:
37
+ return result.error ?? 'Token not found';
38
+ }
39
+ }
15
40
  function getDaemonStartPreconditionError(input) {
16
41
  if (!input.enabled) {
17
42
  return {
@@ -95,7 +120,11 @@ router.post('/auth/auto-detect', async (_req, res) => {
95
120
  try {
96
121
  const result = (0, cursor_1.autoDetectTokens)();
97
122
  if (!result.found || !result.accessToken || !result.machineId) {
98
- res.status(404).json({ error: result.error ?? 'Token not found' });
123
+ const status = getAutoDetectFailureStatus(result.reason);
124
+ res.status(status).json({
125
+ error: getPublicAutoDetectError(result),
126
+ reason: result.reason ?? null,
127
+ });
99
128
  return;
100
129
  }
101
130
  // Save credentials
@@ -124,6 +153,19 @@ router.get('/models', async (_req, res) => {
124
153
  res.status(500).json({ error: error.message });
125
154
  }
126
155
  });
156
+ /**
157
+ * POST /api/cursor/probe - Run a live authenticated runtime probe
158
+ */
159
+ router.post('/probe', async (_req, res) => {
160
+ try {
161
+ const cursorConfig = (0, unified_config_loader_1.getCursorConfig)();
162
+ const result = await (0, cursor_1.probeCursorRuntime)(cursorConfig);
163
+ res.status(result.status).json(result);
164
+ }
165
+ catch (error) {
166
+ res.status(500).json({ error: error.message });
167
+ }
168
+ });
127
169
  /**
128
170
  * POST /api/cursor/daemon/start - Start cursor proxy daemon
129
171
  * Path matches copilot convention: /api/{provider}/daemon/{action}
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-routes.js","sourceRoot":"","sources":["../../../src/web-server/routes/cursor-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor-routes.js","sourceRoot":"","sources":["../../../src/web-server/routes/cursor-routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"websearch-routes.d.ts","sourceRoot":"","sources":["../../../src/web-server/routes/websearch-routes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,QAAA,MAAM,MAAM,4CAAW,CAAC;AA+MxB,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"websearch-routes.d.ts","sourceRoot":"","sources":["../../../src/web-server/routes/websearch-routes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,QAAA,MAAM,MAAM,4CAAW,CAAC;AAkQxB,eAAe,MAAM,CAAC"}
@@ -7,12 +7,20 @@ const express_1 = require("express");
7
7
  const unified_config_loader_1 = require("../../config/unified-config-loader");
8
8
  const websearch_manager_1 = require("../../utils/websearch-manager");
9
9
  const provider_secrets_1 = require("../../utils/websearch/provider-secrets");
10
+ const types_1 = require("../../utils/websearch/types");
10
11
  const auth_middleware_1 = require("../middleware/auth-middleware");
11
12
  const router = (0, express_1.Router)();
12
13
  const WEBSEARCH_LOCAL_ACCESS_ERROR = 'WebSearch endpoints require localhost access when dashboard auth is disabled.';
14
+ const DEFAULT_WEBSEARCH_MAX_RESULTS = 5;
15
+ const MAX_WEBSEARCH_MAX_RESULTS = 10;
13
16
  function isWebSearchApiKeyProviderId(value) {
14
17
  return Object.prototype.hasOwnProperty.call(provider_secrets_1.WEBSEARCH_API_KEY_PROVIDERS, value);
15
18
  }
19
+ function clampWebSearchMaxResults(value, fallback) {
20
+ const candidate = Number.isFinite(value) ? value : fallback;
21
+ const normalized = Number.isFinite(candidate) ? candidate : DEFAULT_WEBSEARCH_MAX_RESULTS;
22
+ return Math.max(1, Math.min(MAX_WEBSEARCH_MAX_RESULTS, Math.floor(normalized)));
23
+ }
16
24
  router.use((req, res, next) => {
17
25
  if ((0, auth_middleware_1.requireLocalAccessWhenAuthDisabled)(req, res, WEBSEARCH_LOCAL_ACCESS_ERROR)) {
18
26
  next();
@@ -58,6 +66,27 @@ router.put('/', (req, res) => {
58
66
  res.status(400).json({ error: 'Invalid value for providers. Must be an object.' });
59
67
  return;
60
68
  }
69
+ if (providers?.searxng?.url !== undefined && typeof providers.searxng.url !== 'string') {
70
+ res.status(400).json({ error: 'Invalid value for providers.searxng.url. Must be a string.' });
71
+ return;
72
+ }
73
+ const normalizedSearxngUrl = providers?.searxng?.url !== undefined
74
+ ? (0, types_1.normalizeSearxngBaseUrl)(providers.searxng.url)
75
+ : undefined;
76
+ if (providers?.searxng?.url !== undefined && normalizedSearxngUrl === null) {
77
+ res.status(400).json({
78
+ error: 'Invalid value for providers.searxng.url. Must be an http(s) base URL without credentials, query, or hash.',
79
+ });
80
+ return;
81
+ }
82
+ if (providers?.searxng?.max_results !== undefined &&
83
+ (typeof providers.searxng.max_results !== 'number' ||
84
+ !Number.isFinite(providers.searxng.max_results))) {
85
+ res.status(400).json({
86
+ error: 'Invalid value for providers.searxng.max_results. Must be a number.',
87
+ });
88
+ return;
89
+ }
61
90
  if (apiKeys !== undefined &&
62
91
  (apiKeys === null || Array.isArray(apiKeys) || typeof apiKeys !== 'object')) {
63
92
  res.status(400).json({ error: 'Invalid value for apiKeys. Must be an object.' });
@@ -77,6 +106,7 @@ router.put('/', (req, res) => {
77
106
  }
78
107
  try {
79
108
  (0, unified_config_loader_1.mutateUnifiedConfig)((config) => {
109
+ const existingSearxngUrl = (0, types_1.normalizeSearxngBaseUrl)(config.websearch?.providers?.searxng?.url) ?? '';
80
110
  config.websearch = {
81
111
  enabled: enabled ?? config.websearch?.enabled ?? true,
82
112
  providers: providers
@@ -107,6 +137,13 @@ router.put('/', (req, res) => {
107
137
  config.websearch?.providers?.brave?.max_results ??
108
138
  5,
109
139
  },
140
+ searxng: {
141
+ enabled: providers.searxng?.enabled ??
142
+ config.websearch?.providers?.searxng?.enabled ??
143
+ false,
144
+ url: normalizedSearxngUrl ?? existingSearxngUrl,
145
+ max_results: clampWebSearchMaxResults(providers.searxng?.max_results, config.websearch?.providers?.searxng?.max_results ?? DEFAULT_WEBSEARCH_MAX_RESULTS),
146
+ },
110
147
  gemini: {
111
148
  enabled: providers.gemini?.enabled ??
112
149
  config.websearch?.providers?.gemini?.enabled ??
@@ -1 +1 @@
1
- {"version":3,"file":"websearch-routes.js","sourceRoot":"","sources":["../../../src/web-server/routes/websearch-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websearch-routes.js","sourceRoot":"","sources":["../../../src/web-server/routes/websearch-routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cliproxy-dashboard-install-service.d.ts","sourceRoot":"","sources":["../../../src/web-server/services/cliproxy-dashboard-install-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGhG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,mCAAmC;IAC3C,cAAc,EAAE,MAAM,eAAe,CAAC;IACtC,iBAAiB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,sBAAsB,EAAE,CACtB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,eAAe,KACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,qBAAqB,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC1D;AASD,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAWD,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,EACxB,IAAI,GAAE,mCAAiD,GACtD,OAAO,CAAC,8BAA8B,CAAC,CAgCzC"}
1
+ {"version":3,"file":"cliproxy-dashboard-install-service.d.ts","sourceRoot":"","sources":["../../../src/web-server/services/cliproxy-dashboard-install-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGhG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM5D,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,mCAAmC;IAC3C,cAAc,EAAE,MAAM,eAAe,CAAC;IACtC,iBAAiB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,sBAAsB,EAAE,CACtB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,eAAe,KACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,qBAAqB,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC1D;AASD,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAWD,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,EACxB,IAAI,GAAE,mCAAiD,GACtD,OAAO,CAAC,8BAA8B,CAAC,CA8CzC"}
@@ -5,6 +5,7 @@ const binary_manager_1 = require("../../cliproxy/binary-manager");
5
5
  const service_manager_1 = require("../../cliproxy/service-manager");
6
6
  const session_tracker_1 = require("../../cliproxy/session-tracker");
7
7
  const stats_fetcher_1 = require("../../cliproxy/stats-fetcher");
8
+ const supervisord_lifecycle_1 = require("../../docker/supervisord-lifecycle");
8
9
  const defaultDeps = {
9
10
  getProxyStatus: session_tracker_1.getProxyStatus,
10
11
  isCliproxyRunning: stats_fetcher_1.isCliproxyRunning,
@@ -31,6 +32,19 @@ async function installDashboardCliproxyVersion(version, backend, deps = defaultD
31
32
  message: `Successfully installed ${backendLabel} v${version}`,
32
33
  };
33
34
  }
35
+ // In Docker, supervisord owns process lifecycle — delegate restart to it
36
+ if ((0, supervisord_lifecycle_1.isRunningUnderSupervisord)()) {
37
+ const result = (0, supervisord_lifecycle_1.restartCliproxyViaSupervisord)();
38
+ return {
39
+ success: result.success,
40
+ restarted: result.success,
41
+ port: result.port,
42
+ error: result.error,
43
+ message: result.success
44
+ ? `Successfully installed ${backendLabel} v${version} and restarted it on port ${result.port}`
45
+ : `Installed ${backendLabel} v${version}, but restart failed`,
46
+ };
47
+ }
34
48
  const startResult = await deps.ensureCliproxyService();
35
49
  if (!startResult.started && !startResult.alreadyRunning) {
36
50
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"cliproxy-dashboard-install-service.js","sourceRoot":"","sources":["../../../src/web-server/services/cliproxy-dashboard-install-service.ts"],"names":[],"mappings":";;;AAAA,kEAAuE;AACvE,oEAAgG;AAChG,oEAAyF;AACzF,gEAAiE;AAkBjE,MAAM,WAAW,GAAwC;IACvD,cAAc,EAAE,gCAAqB;IACrC,iBAAiB,EAAjB,iCAAiB;IACjB,sBAAsB,EAAtB,uCAAsB;IACtB,qBAAqB,EAAE,GAAG,EAAE,CAAC,IAAA,uCAAqB,GAAE;CACrD,CAAC;AAUF,KAAK,UAAU,eAAe,CAAC,IAAyC;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACrC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAClC,CAAC;AAEM,KAAK,UAAU,+BAA+B,CACnD,OAAe,EACf,OAAwB,EACxB,OAA4C,WAAW;IAEvD,MAAM,YAAY,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC;IACvE,MAAM,oBAAoB,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAEzD,2EAA2E;IAC3E,yEAAyE;IACzE,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE1D,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,0BAA0B,YAAY,KAAK,OAAO,EAAE;SAC9D,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACvD,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QACxD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,aAAa,YAAY,KAAK,OAAO,sBAAsB;YACvF,OAAO,EAAE,aAAa,YAAY,KAAK,OAAO,4BAA4B;SAC3E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,OAAO,EAAE,0BAA0B,YAAY,KAAK,OAAO,6BAA6B,WAAW,CAAC,IAAI,EAAE;KAC3G,CAAC;AACJ,CAAC;AApCD,0EAoCC"}
1
+ {"version":3,"file":"cliproxy-dashboard-install-service.js","sourceRoot":"","sources":["../../../src/web-server/services/cliproxy-dashboard-install-service.ts"],"names":[],"mappings":";;;AAAA,kEAAuE;AACvE,oEAAgG;AAChG,oEAAyF;AACzF,gEAAiE;AAEjE,8EAG4C;AAiB5C,MAAM,WAAW,GAAwC;IACvD,cAAc,EAAE,gCAAqB;IACrC,iBAAiB,EAAjB,iCAAiB;IACjB,sBAAsB,EAAtB,uCAAsB;IACtB,qBAAqB,EAAE,GAAG,EAAE,CAAC,IAAA,uCAAqB,GAAE;CACrD,CAAC;AAUF,KAAK,UAAU,eAAe,CAAC,IAAyC;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACrC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAClC,CAAC;AAEM,KAAK,UAAU,+BAA+B,CACnD,OAAe,EACf,OAAwB,EACxB,OAA4C,WAAW;IAEvD,MAAM,YAAY,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC;IACvE,MAAM,oBAAoB,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAEzD,2EAA2E;IAC3E,yEAAyE;IACzE,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE1D,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,0BAA0B,YAAY,KAAK,OAAO,EAAE;SAC9D,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,IAAI,IAAA,iDAAyB,GAAE,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAA,qDAA6B,GAAE,CAAC;QAC/C,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,OAAO;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACrB,CAAC,CAAC,0BAA0B,YAAY,KAAK,OAAO,6BAA6B,MAAM,CAAC,IAAI,EAAE;gBAC9F,CAAC,CAAC,aAAa,YAAY,KAAK,OAAO,sBAAsB;SAChE,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACvD,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QACxD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,aAAa,YAAY,KAAK,OAAO,sBAAsB;YACvF,OAAO,EAAE,aAAa,YAAY,KAAK,OAAO,4BAA4B;SAC3E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,OAAO,EAAE,0BAA0B,YAAY,KAAK,OAAO,6BAA6B,WAAW,CAAC,IAAI,EAAE;KAC3G,CAAC;AACJ,CAAC;AAlDD,0EAkDC"}
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="bun-types" />
2
3
  import type { CodexConfigPatchInput, CodexConfigPatchResult, CodexDashboardDiagnostics, CodexFeatureFlagDiagnostics, CodexMcpServerDiagnostics, CodexModelProviderDiagnostics, CodexProjectTrustDiagnostics, CodexRawConfigResponse } from './compatible-cli-types';
3
4
  import { TomlFileConflictError, TomlFileValidationError } from './compatible-cli-toml-file-service';
4
5
  interface CodexConfigPaths {
@@ -1 +1 @@
1
- {"version":3,"file":"codex-dashboard-service.d.ts","sourceRoot":"","sources":["../../../src/web-server/services/codex-dashboard-service.ts"],"names":[],"mappings":";AAOA,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,EAEvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EAIxB,MAAM,oCAAoC,CAAC;AAG5C,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,uBAAuB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,wBAAwB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,OAAO,EACL,qBAAqB,IAAI,2BAA2B,EACpD,uBAAuB,IAAI,6BAA6B,GACzD,CAAC;AAyeF,wBAAgB,uBAAuB,CACrC,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,gBAAgB,CAclB;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,6BAA6B,EAAE,CA2B5F;AAMD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG;IAC1D,GAAG,EAAE,2BAA2B,EAAE,CAAC;IACnC,OAAO,EAAE,2BAA2B,EAAE,CAAC;IACvC,QAAQ,EAAE,2BAA2B,EAAE,CAAC;CACzC,CAkBA;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,4BAA4B,EAAE,CAazF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,yBAAyB,EAAE,CA4BpF;AAqDD,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,yBAAyB,CAAC,CA4GvF;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAkBzE;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CAcnC;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CAmDjC"}
1
+ {"version":3,"file":"codex-dashboard-service.d.ts","sourceRoot":"","sources":["../../../src/web-server/services/codex-dashboard-service.ts"],"names":[],"mappings":";;AAOA,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,EAEvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EAIxB,MAAM,oCAAoC,CAAC;AAG5C,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,uBAAuB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,wBAAwB;IAChC,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,OAAO,EACL,qBAAqB,IAAI,2BAA2B,EACpD,uBAAuB,IAAI,6BAA6B,GACzD,CAAC;AAyeF,wBAAgB,uBAAuB,CACrC,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,gBAAgB,CAclB;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,6BAA6B,EAAE,CA2B5F;AAMD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG;IAC1D,GAAG,EAAE,2BAA2B,EAAE,CAAC;IACnC,OAAO,EAAE,2BAA2B,EAAE,CAAC;IACvC,QAAQ,EAAE,2BAA2B,EAAE,CAAC;CACzC,CAkBA;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,4BAA4B,EAAE,CAazF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,yBAAyB,EAAE,CA4BpF;AAqDD,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,yBAAyB,CAAC,CA4GvF;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAkBzE;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CAcnC;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CAmDjC"}
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="bun-types" />
2
3
  import type { DroidByokDiagnostics, DroidDashboardDiagnostics, DroidRawSettingsResponse } from './compatible-cli-types';
3
4
  import { JsonFileConflictError, JsonFileValidationError } from './compatible-cli-json-file-service';
4
5
  interface DroidConfigPaths {
@@ -1 +1 @@
1
- {"version":3,"file":"droid-dashboard-service.d.ts","sourceRoot":"","sources":["../../../src/web-server/services/droid-dashboard-service.ts"],"names":[],"mappings":";AAIA,OAAO,KAAK,EACV,oBAAoB,EAEpB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EAGxB,MAAM,oCAAoC,CAAC;AAG5C,UAAU,gBAAgB;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,0BAA0B;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,OAAO,EACL,qBAAqB,IAAI,6BAA6B,EACtD,uBAAuB,IAAI,+BAA+B,GAC3D,CAAC;AA0BF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvD;AAMD,wBAAgB,uBAAuB,CACrC,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,gBAAgB,CAclB;AAiBD,wBAAgB,0BAA0B,CAAC,iBAAiB,EAAE,OAAO,GAAG,oBAAoB,CAuD3F;AAqBD,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,yBAAyB,CAAC,CA2DvF;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAiB7E;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,0BAA0B,CAAC,CAarC"}
1
+ {"version":3,"file":"droid-dashboard-service.d.ts","sourceRoot":"","sources":["../../../src/web-server/services/droid-dashboard-service.ts"],"names":[],"mappings":";;AAIA,OAAO,KAAK,EACV,oBAAoB,EAEpB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EAGxB,MAAM,oCAAoC,CAAC;AAG5C,UAAU,gBAAgB;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,0BAA0B;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,OAAO,EACL,qBAAqB,IAAI,6BAA6B,EACtD,uBAAuB,IAAI,+BAA+B,GAC3D,CAAC;AA0BF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvD;AAMD,wBAAgB,uBAAuB,CACrC,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,gBAAgB,CAclB;AAiBD,wBAAgB,0BAA0B,CAAC,iBAAiB,EAAE,OAAO,GAAG,oBAAoB,CAuD3F;AAqBD,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,yBAAyB,CAAC,CA2DvF;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAiB7E;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,0BAA0B,CAAC,CAarC"}
@@ -6,6 +6,7 @@
6
6
  * - Exa Search API
7
7
  * - Tavily Search API
8
8
  * - Brave Search API
9
+ * - SearXNG JSON API
9
10
  * - DuckDuckGo HTML search
10
11
  *
11
12
  * Legacy compatibility fallback:
@@ -369,6 +370,36 @@ function getResultCount(provider) {
369
370
  return Number.isFinite(parsed) && parsed > 0 ? Math.min(parsed, 10) : DEFAULT_RESULT_COUNT;
370
371
  }
371
372
 
373
+ function getSearxngBaseUrl() {
374
+ const raw = (process.env.CCS_WEBSEARCH_SEARXNG_URL || '').trim();
375
+ if (!raw) {
376
+ return '';
377
+ }
378
+
379
+ try {
380
+ const parsed = new URL(raw);
381
+ if (!['http:', 'https:'].includes(parsed.protocol) || parsed.search || parsed.hash) {
382
+ return '';
383
+ }
384
+
385
+ if (parsed.username || parsed.password) {
386
+ return '';
387
+ }
388
+
389
+ let pathname = parsed.pathname.replace(/\/+$/, '');
390
+ if (pathname.toLowerCase().endsWith('/search')) {
391
+ pathname = pathname.slice(0, -'/search'.length);
392
+ }
393
+
394
+ parsed.pathname = pathname || '/';
395
+ parsed.search = '';
396
+ parsed.hash = '';
397
+ return parsed.toString().replace(/\/+$/, '');
398
+ } catch {
399
+ return '';
400
+ }
401
+ }
402
+
372
403
  function buildPrompt(providerId, query) {
373
404
  const config = PROVIDER_CONFIG[providerId];
374
405
  const parts = [
@@ -569,6 +600,104 @@ async function tryBraveSearch(query, timeoutSec = DEFAULT_TIMEOUT_SEC) {
569
600
  }
570
601
  }
571
602
 
603
+ async function trySearxngSearch(query, timeoutSec = DEFAULT_TIMEOUT_SEC) {
604
+ const baseUrl = getSearxngBaseUrl();
605
+ if (!baseUrl) {
606
+ return { success: false, error: 'SearXNG URL is invalid or not configured' };
607
+ }
608
+
609
+ const params = new URLSearchParams({
610
+ q: query,
611
+ format: 'json',
612
+ });
613
+
614
+ try {
615
+ const response = await fetchWithTimeout(
616
+ `${baseUrl}/search?${params.toString()}`,
617
+ {
618
+ headers: {
619
+ Accept: 'application/json',
620
+ 'User-Agent': USER_AGENT,
621
+ },
622
+ },
623
+ timeoutSec * 1000
624
+ );
625
+
626
+ if (!response.ok) {
627
+ const body = await response.text();
628
+ if (
629
+ response.status === 403 &&
630
+ /format(?:=|\s*)json|json[^\n]{0,40}disabled|disabled[^\n]{0,40}json/i.test(body)
631
+ ) {
632
+ return {
633
+ success: false,
634
+ error: 'SearXNG returned 403: format=json is disabled on this instance',
635
+ statusCode: response.status,
636
+ retryAfterSec: parseRetryAfterSeconds(readHeaderValue(response.headers, 'retry-after')),
637
+ };
638
+ }
639
+
640
+ return {
641
+ success: false,
642
+ error: `SearXNG returned ${response.status}: ${body.slice(0, 160)}`,
643
+ statusCode: response.status,
644
+ retryAfterSec: parseRetryAfterSeconds(readHeaderValue(response.headers, 'retry-after')),
645
+ };
646
+ }
647
+
648
+ let body;
649
+ try {
650
+ body = await response.json();
651
+ } catch {
652
+ return {
653
+ success: false,
654
+ error: 'SearXNG returned malformed JSON payload',
655
+ };
656
+ }
657
+
658
+ if (!body || typeof body !== 'object' || !Array.isArray(body.results)) {
659
+ return {
660
+ success: false,
661
+ error: 'SearXNG JSON response is missing results[]',
662
+ };
663
+ }
664
+
665
+ const count = getResultCount('searxng');
666
+ const results = body.results.slice(0, count).map((entry) => {
667
+ const result = entry && typeof entry === 'object' ? entry : {};
668
+ const url = typeof result.url === 'string' ? result.url : '';
669
+ const titleSource =
670
+ typeof result.title === 'string' && result.title.trim().length > 0
671
+ ? result.title
672
+ : url || 'Untitled';
673
+ const descriptionSource =
674
+ typeof result.content === 'string'
675
+ ? result.content
676
+ : typeof result.description === 'string'
677
+ ? result.description
678
+ : typeof result.snippet === 'string'
679
+ ? result.snippet
680
+ : '';
681
+
682
+ return {
683
+ title: compactText(titleSource, 120),
684
+ url,
685
+ description: compactText(descriptionSource, 240),
686
+ };
687
+ });
688
+
689
+ return {
690
+ success: true,
691
+ content: formatStructuredSearchResults(query, 'SearXNG', results),
692
+ };
693
+ } catch (error) {
694
+ return {
695
+ success: false,
696
+ error: error.name === 'AbortError' ? 'SearXNG timed out' : error.message,
697
+ };
698
+ }
699
+ }
700
+
572
701
  async function tryExaSearch(query, timeoutSec = DEFAULT_TIMEOUT_SEC) {
573
702
  const apiKey = getProviderApiKey('exa');
574
703
  if (!apiKey) {
@@ -892,6 +1021,12 @@ function getConfiguredProviders() {
892
1021
  available: () => isProviderEnabled('brave') && Boolean(getProviderApiKey('brave')),
893
1022
  fn: tryBraveSearch,
894
1023
  },
1024
+ {
1025
+ name: 'SearXNG',
1026
+ id: 'searxng',
1027
+ available: () => isProviderEnabled('searxng') && Boolean(getSearxngBaseUrl()),
1028
+ fn: trySearxngSearch,
1029
+ },
895
1030
  {
896
1031
  name: 'DuckDuckGo',
897
1032
  id: 'duckduckgo',
@@ -1280,4 +1415,5 @@ module.exports = {
1280
1415
  tryTavilySearch,
1281
1416
  tryDuckDuckGoSearch,
1282
1417
  tryBraveSearch,
1418
+ trySearxngSearch,
1283
1419
  };