coding-tool-x 3.8.3 → 3.8.5

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 (434) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +86 -15
  3. package/dist/web/assets/AgentsDrawer-BG6P3DX-.js +1 -0
  4. package/dist/web/assets/AgentsDrawer-Pw2k-ZAa.css +1 -0
  5. package/dist/web/assets/Analytics--z_FmL5P.js +1 -0
  6. package/dist/web/assets/Analytics-CyHhR126.css +1 -0
  7. package/dist/web/assets/AssetPathField-CrJtRKHy.js +1 -0
  8. package/dist/web/assets/ChatHistoryDrawer-B2qBQs9L.css +1 -0
  9. package/dist/web/assets/ChatHistoryDrawer-BiuEryJj.js +1 -0
  10. package/dist/web/assets/CollapseItem-BAYEsL_Q.js +1 -0
  11. package/dist/web/assets/CommandsDrawer-BZJxlPvV.css +1 -0
  12. package/dist/web/assets/CommandsDrawer-YJ-U7BXN.js +1 -0
  13. package/dist/web/assets/ConfigExportDrawer-Ce_hAknW.js +1 -0
  14. package/dist/web/assets/ConfigExportDrawer-dwruRKWr.css +1 -0
  15. package/dist/web/assets/ConfigTemplates-Bvr1NN6K.js +1 -0
  16. package/dist/web/assets/ConfigTemplatesDrawer-BfDi8yO3.css +1 -0
  17. package/dist/web/assets/ConfigTemplatesDrawer-BjIeHfF-.js +1 -0
  18. package/dist/web/assets/ConfigTemplatesPanel-AV00tm_D.js +1 -0
  19. package/dist/web/assets/ConfigTemplatesPanel-CWyPtk67.css +1 -0
  20. package/dist/web/assets/Divider-D28g1gwj.js +1 -0
  21. package/dist/web/assets/DrawerContent-ChXgZ1Xm.js +1 -0
  22. package/dist/web/assets/FavoritesDrawer-CG9eI9Ay.css +1 -0
  23. package/dist/web/assets/FavoritesDrawer-Cz95o4CD.js +1 -0
  24. package/dist/web/assets/GatewayConvertDrawer-CuNlf7AC.css +1 -0
  25. package/dist/web/assets/GatewayConvertDrawer-DLlbMz27.js +1 -0
  26. package/dist/web/assets/Home-CSuFuJ9Y.css +1 -0
  27. package/dist/web/assets/Home-D7CCOFQC.js +1 -0
  28. package/dist/web/assets/MarkdownEditor-qfVgSre_.css +1 -0
  29. package/dist/web/assets/MarkdownEditor-rEZ-c72L.js +1 -0
  30. package/dist/web/assets/McpDrawer-C0dnsZhQ.css +1 -0
  31. package/dist/web/assets/McpDrawer-DfoCyxU2.js +1 -0
  32. package/dist/web/assets/McpFormDrawer-BRbDcawn.css +1 -0
  33. package/dist/web/assets/McpFormDrawer-SKu8HNUR.js +1 -0
  34. package/dist/web/assets/PluginManager-BbeK-3rV.js +1 -0
  35. package/dist/web/assets/PluginsDrawer-CWVJ7yjS.js +1 -0
  36. package/dist/web/assets/PluginsDrawer-DM3QjprE.css +1 -0
  37. package/dist/web/assets/PluginsPanel-Cm2N3StG.js +1 -0
  38. package/dist/web/assets/PluginsPanel-D6ZqITcR.css +1 -0
  39. package/dist/web/assets/ProjectList-677RLZ8O.css +1 -0
  40. package/dist/web/assets/ProjectList-CsjnsNPv.js +1 -0
  41. package/dist/web/assets/PromptsDrawer-BIgiYCEQ.css +1 -0
  42. package/dist/web/assets/PromptsDrawer-EGd3djFa.js +1 -0
  43. package/dist/web/assets/RecentSessionsDrawer-CKFsOYDM.css +1 -0
  44. package/dist/web/assets/RecentSessionsDrawer-D1vtoLAs.js +1 -0
  45. package/dist/web/assets/SessionCard-BgLg49U3.js +1 -0
  46. package/dist/web/assets/SessionCard-aM2NHu6i.css +1 -0
  47. package/dist/web/assets/SessionList-BpYRz1cX.css +1 -0
  48. package/dist/web/assets/SessionList-TRiTklWk.js +1 -0
  49. package/dist/web/assets/SettingsDrawer-d5liXjHq.css +1 -0
  50. package/dist/web/assets/SettingsDrawer-rz2WejGY.js +1 -0
  51. package/dist/web/assets/SkillManager-BTjTUbHq.js +1 -0
  52. package/dist/web/assets/SkillManager-C0GCT2Kb.css +1 -0
  53. package/dist/web/assets/SkillsDrawer-BCNme-aJ.css +1 -0
  54. package/dist/web/assets/SkillsDrawer-pN0hbkK3.js +1 -0
  55. package/dist/web/assets/SkillsPanel-B3Nm5j32.css +1 -0
  56. package/dist/web/assets/SkillsPanel-gmBWEoiF.js +1 -0
  57. package/dist/web/assets/SpeedTestDrawer-Dc0WToJ_.css +1 -0
  58. package/dist/web/assets/SpeedTestDrawer-DcNzuVJk.js +1 -0
  59. package/dist/web/assets/Upload-v5rV0qTT.js +1 -0
  60. package/dist/web/assets/WorkspaceDrawer-CGnMu9p1.css +1 -0
  61. package/dist/web/assets/WorkspaceDrawer-DxmicM4U.js +1 -0
  62. package/dist/web/assets/WorkspaceManager-CJHCjARN.js +1 -0
  63. package/dist/web/assets/WorkspacePanel-D0-zHTHP.css +1 -0
  64. package/dist/web/assets/WorkspacePanel-D8_Zq-du.js +1 -0
  65. package/dist/web/assets/_plugin-vue_export-helper-BeLZJZij.js +1 -0
  66. package/dist/web/assets/client-UDwXBP9i.js +1 -0
  67. package/dist/web/assets/clipboard-B46yyoz_.js +1 -0
  68. package/dist/web/assets/headers-cf-QapUq.js +1 -0
  69. package/dist/web/assets/icons-B2Vg-IOC.js +1 -0
  70. package/dist/web/assets/index-C0EHRym0.css +1 -0
  71. package/dist/web/assets/index-DnEocV0M.js +2 -0
  72. package/dist/web/assets/light-Cp0t7v32.js +1 -0
  73. package/dist/web/assets/markdown-u082bbtj.js +1 -0
  74. package/dist/web/assets/platforms-CBkB45JP.js +1 -0
  75. package/dist/web/assets/platforms-FTpjxAT6.js +1 -0
  76. package/dist/web/assets/project-config-B2baPzYL.js +1 -0
  77. package/dist/web/assets/sessions-Cmy31slD.js +1 -0
  78. package/dist/web/assets/sessions-yC_oVVh8.js +1 -0
  79. package/dist/web/assets/skill-repo-input-B_fkGlUK.js +1 -0
  80. package/dist/web/assets/use-lock-html-scroll-DXIqmUW4.js +1 -0
  81. package/dist/web/assets/use-message-DoLM8C1C.js +1 -0
  82. package/dist/web/assets/useResponsiveDrawer-B3uojyvV.js +1 -0
  83. package/dist/web/assets/vendors-D0c_0KLP.js +1 -0
  84. package/dist/web/assets/vue-vendor-BqZbbXHA.js +1 -0
  85. package/dist/web/assets/workspaces-mjyPVGS8.js +1 -0
  86. package/dist/web/assets/xml-CgY3RMlX.js +1 -0
  87. package/dist/web/index.html +12 -8
  88. package/docs/native-log-memory-2026-09-16.md +43 -0
  89. package/docs/superpowers/plans/2026-08-26-configuration-driven-cli-platform.md +1578 -0
  90. package/docs/superpowers/plans/2026-08-30-project-scoped-config-control.md +1260 -0
  91. package/docs/superpowers/plans/2026-09-01-omp-skill-refresh-boundary.md +213 -0
  92. package/docs/superpowers/plans/2026-09-01-realtime-logs-panel.md +125 -0
  93. package/docs/superpowers/plans/2026-09-02-config-driven-platform-boundary.md +86 -0
  94. package/docs/superpowers/plans/2026-09-02-platform-implementation-drivers.md +508 -0
  95. package/docs/superpowers/plans/2026-09-03-cli-platform-correctness-boundary.md +760 -0
  96. package/docs/superpowers/plans/2026-09-03-dependency-security-remediation.md +133 -0
  97. package/docs/superpowers/plans/2026-09-04-model-catalog-pricing-sync.md +1078 -0
  98. package/docs/superpowers/plans/2026-09-05-codex-project-scan-500.md +128 -0
  99. package/docs/superpowers/plans/2026-09-06-project-skill-path-fix.md +97 -0
  100. package/docs/superpowers/specs/2026-08-26-configuration-driven-cli-platform-design.md +408 -0
  101. package/docs/superpowers/specs/2026-08-30-project-scoped-config-control-design.md +467 -0
  102. package/docs/superpowers/specs/2026-09-01-claude-session-content-repair-design.md +111 -0
  103. package/docs/superpowers/specs/2026-09-01-omp-skill-refresh-boundary-design.md +83 -0
  104. package/docs/superpowers/specs/2026-09-01-realtime-logs-panel-design.md +27 -0
  105. package/docs/superpowers/specs/2026-09-02-config-driven-platform-boundary-design.md +64 -0
  106. package/docs/superpowers/specs/2026-09-02-platform-implementation-driver-boundary-design.md +123 -0
  107. package/docs/superpowers/specs/2026-09-03-cli-platform-correctness-boundary-design.md +249 -0
  108. package/docs/superpowers/specs/2026-09-03-dependency-security-remediation-design.md +87 -0
  109. package/docs/superpowers/specs/2026-09-04-model-catalog-pricing-sync-design.md +301 -0
  110. package/docs/superpowers/specs/2026-09-05-codex-project-scan-500-design.md +24 -0
  111. package/package.json +13 -8
  112. package/src/commands/channels.js +88 -191
  113. package/src/commands/cli-type.js +19 -11
  114. package/src/commands/daemon.js +94 -32
  115. package/src/commands/doctor.js +16 -9
  116. package/src/commands/export-config.js +23 -5
  117. package/src/commands/list.js +130 -52
  118. package/src/commands/logs.js +44 -27
  119. package/src/commands/platform-command-registry.js +78 -0
  120. package/src/commands/plugin.js +11 -5
  121. package/src/commands/port-config.js +34 -52
  122. package/src/commands/proxy-control.js +207 -145
  123. package/src/commands/proxy.js +2 -2
  124. package/src/commands/resume.js +87 -91
  125. package/src/commands/search.js +137 -67
  126. package/src/commands/stats.js +30 -22
  127. package/src/commands/switch.js +1 -1
  128. package/src/commands/toggle-proxy.js +94 -111
  129. package/src/commands/ui.js +67 -6
  130. package/src/commands/workspace.js +90 -8
  131. package/src/config/default.js +6 -53
  132. package/src/config/loader.js +61 -24
  133. package/src/config/model-metadata.js +49 -59
  134. package/src/config/model-metadata.json +4095 -99
  135. package/src/config/paths.js +181 -8
  136. package/src/index.js +134 -71
  137. package/src/platforms/access.js +196 -0
  138. package/src/{server/services → platforms}/agents-service.js +354 -197
  139. package/src/platforms/channel-auth-registry.js +162 -0
  140. package/src/platforms/channel-auth-service.js +82 -0
  141. package/src/{server/services → platforms}/commands-service.js +195 -115
  142. package/src/platforms/driver-registry.js +59 -0
  143. package/src/platforms/drivers/claude/api-operations.js +62 -0
  144. package/src/{server/services/channels.js → platforms/drivers/claude/channels-implementation.js} +131 -33
  145. package/src/platforms/drivers/claude/channels.js +39 -0
  146. package/src/{server/services/config-sync-service.js → platforms/drivers/claude/config-sync.js} +29 -5
  147. package/src/{server/services → platforms/drivers/claude}/health-check.js +4 -4
  148. package/src/platforms/drivers/claude/health.js +22 -0
  149. package/src/platforms/drivers/claude/mcp.js +9 -0
  150. package/src/{server/services/settings-manager.js → platforms/drivers/claude/native-config-implementation.js} +13 -4
  151. package/src/platforms/drivers/claude/native-config.js +46 -0
  152. package/src/platforms/drivers/claude/native-logs.js +72 -0
  153. package/src/{server/services/claude-openai-gateway.js → platforms/drivers/claude/openai-gateway.js} +8 -65
  154. package/src/platforms/drivers/claude/project-config.js +21 -0
  155. package/src/platforms/drivers/claude/projects.js +62 -0
  156. package/src/platforms/drivers/claude/prompts.js +9 -0
  157. package/src/{server/proxy-server.js → platforms/drivers/claude/proxy-implementation.js} +41 -278
  158. package/src/platforms/drivers/claude/proxy.js +16 -0
  159. package/src/platforms/drivers/claude/resource-sync.js +9 -0
  160. package/src/platforms/drivers/claude/session-history-adapter.js +313 -0
  161. package/src/{server/services/sessions.js → platforms/drivers/claude/sessions-implementation.js} +145 -35
  162. package/src/platforms/drivers/claude/sessions.js +76 -0
  163. package/src/{server/services/claude-statistics-service.js → platforms/drivers/claude/statistics-implementation.js} +2 -2
  164. package/src/platforms/drivers/claude/statistics.js +16 -0
  165. package/src/{server/services/claude-wire.js → platforms/drivers/claude/wire.js} +1 -1
  166. package/src/platforms/drivers/codex/api-operations.js +9 -0
  167. package/src/{server/services/codex-channels.js → platforms/drivers/codex/channels-implementation.js} +149 -14
  168. package/src/platforms/drivers/codex/channels.js +45 -0
  169. package/src/{server/services/codex-config.js → platforms/drivers/codex/config.js} +12 -2
  170. package/src/{server/services/codex-env-manager.js → platforms/drivers/codex/env-manager.js} +1 -1
  171. package/src/platforms/drivers/codex/mcp.js +9 -0
  172. package/src/{server/services/codex-settings-manager.js → platforms/drivers/codex/native-config-implementation.js} +15 -6
  173. package/src/platforms/drivers/codex/native-config.js +47 -0
  174. package/src/platforms/drivers/codex/native-logs.js +166 -0
  175. package/src/platforms/drivers/codex/project-config.js +21 -0
  176. package/src/platforms/drivers/codex/projects.js +26 -0
  177. package/src/platforms/drivers/codex/prompts.js +9 -0
  178. package/src/{server/codex-proxy-server.js → platforms/drivers/codex/proxy-implementation.js} +30 -233
  179. package/src/platforms/drivers/codex/proxy.js +16 -0
  180. package/src/platforms/drivers/codex/resource-sync.js +9 -0
  181. package/src/{server/services/session-history-adapters/codex.js → platforms/drivers/codex/session-history-adapter.js} +37 -23
  182. package/src/{server/services/codex-sessions.js → platforms/drivers/codex/sessions-implementation.js} +81 -75
  183. package/src/platforms/drivers/codex/sessions.js +36 -0
  184. package/src/{server/services/codex-statistics-service.js → platforms/drivers/codex/statistics-implementation.js} +2 -2
  185. package/src/platforms/drivers/codex/statistics.js +16 -0
  186. package/src/platforms/drivers/gemini/api-operations.js +9 -0
  187. package/src/{server/services/gemini-channels.js → platforms/drivers/gemini/channels-implementation.js} +202 -37
  188. package/src/platforms/drivers/gemini/channels.js +39 -0
  189. package/src/{server/services/gemini-config.js → platforms/drivers/gemini/config.js} +12 -2
  190. package/src/platforms/drivers/gemini/mcp.js +9 -0
  191. package/src/{server/services/gemini-settings-manager.js → platforms/drivers/gemini/native-config-implementation.js} +14 -5
  192. package/src/platforms/drivers/gemini/native-config.js +39 -0
  193. package/src/platforms/drivers/gemini/native-logs.js +180 -0
  194. package/src/platforms/drivers/gemini/project-config.js +21 -0
  195. package/src/platforms/drivers/gemini/projects.js +26 -0
  196. package/src/platforms/drivers/gemini/prompts.js +9 -0
  197. package/src/{server/gemini-proxy-server.js → platforms/drivers/gemini/proxy-implementation.js} +36 -267
  198. package/src/platforms/drivers/gemini/proxy.js +16 -0
  199. package/src/platforms/drivers/gemini/resource-sync.js +9 -0
  200. package/src/{server/services/session-history-adapters/gemini.js → platforms/drivers/gemini/session-history-adapter.js} +70 -18
  201. package/src/{server/services/gemini-sessions.js → platforms/drivers/gemini/sessions-implementation.js} +53 -37
  202. package/src/platforms/drivers/gemini/sessions.js +47 -0
  203. package/src/{server/services/gemini-statistics-service.js → platforms/drivers/gemini/statistics-implementation.js} +2 -2
  204. package/src/platforms/drivers/gemini/statistics.js +16 -0
  205. package/src/{server/services/gemini-wire.js → platforms/drivers/gemini/wire.js} +1 -1
  206. package/src/platforms/drivers/generic-filesystem.js +166 -0
  207. package/src/platforms/drivers/generic-jsonl.js +141 -0
  208. package/src/platforms/drivers/generic-mcp.js +44 -0
  209. package/src/platforms/drivers/generic-openai-compatible.js +45 -0
  210. package/src/platforms/drivers/generic-prompt.js +41 -0
  211. package/src/platforms/drivers/legacy.js +677 -0
  212. package/src/platforms/drivers/native-config-snapshot.js +125 -0
  213. package/src/platforms/drivers/native-log-utils.js +1292 -0
  214. package/src/platforms/drivers/notification-hooks.js +578 -0
  215. package/src/{server/api/omp-config.js → platforms/drivers/omp/api-operations.js} +52 -64
  216. package/src/{server/services/omp-auth-provider-worker.js → platforms/drivers/omp/auth-provider-worker.js} +1 -1
  217. package/src/{server/services/omp-auth-providers.js → platforms/drivers/omp/auth-providers.js} +1 -1
  218. package/src/{server/services/omp-channels.js → platforms/drivers/omp/channels-implementation.js} +166 -39
  219. package/src/platforms/drivers/omp/channels.js +58 -0
  220. package/src/{server/services/omp-config.js → platforms/drivers/omp/config.js} +53 -13
  221. package/src/{server/services/omp-gateway-routing.js → platforms/drivers/omp/gateway-routing.js} +14 -7
  222. package/src/{server/services/omp-gateway.js → platforms/drivers/omp/gateway.js} +4 -262
  223. package/src/platforms/drivers/omp/mcp.js +9 -0
  224. package/src/{server/services/omp-settings-manager.js → platforms/drivers/omp/native-config-implementation.js} +75 -10
  225. package/src/platforms/drivers/omp/native-config.js +46 -0
  226. package/src/platforms/drivers/omp/native-logs.js +52 -0
  227. package/src/{server/services/omp-native-plugin-adapter.js → platforms/drivers/omp/native-plugin-adapter.js} +91 -4
  228. package/src/platforms/drivers/omp/project-config.js +29 -0
  229. package/src/platforms/drivers/omp/projects.js +20 -0
  230. package/src/platforms/drivers/omp/prompts.js +9 -0
  231. package/src/{server/omp-proxy-server.js → platforms/drivers/omp/proxy-implementation.js} +6 -15
  232. package/src/platforms/drivers/omp/proxy.js +16 -0
  233. package/src/platforms/drivers/omp/resource-sync.js +9 -0
  234. package/src/{server/services/session-history-adapters/omp.js → platforms/drivers/omp/session-history-adapter.js} +42 -18
  235. package/src/{server/services/omp-sessions.js → platforms/drivers/omp/sessions-implementation.js} +130 -94
  236. package/src/platforms/drivers/omp/sessions.js +36 -0
  237. package/src/{server/services/omp-skill-discovery.js → platforms/drivers/omp/skill-discovery.js} +159 -32
  238. package/src/{server/services/omp-skill-settings-service.js → platforms/drivers/omp/skill-settings.js} +1 -1
  239. package/src/{server/services/omp-statistics-service.js → platforms/drivers/omp/statistics-implementation.js} +3 -3
  240. package/src/platforms/drivers/omp/statistics.js +16 -0
  241. package/src/platforms/drivers/opencode/api-operations.js +9 -0
  242. package/src/{server/services/opencode-channels.js → platforms/drivers/opencode/channels-implementation.js} +28 -9
  243. package/src/platforms/drivers/opencode/channels.js +40 -0
  244. package/src/platforms/drivers/opencode/conversion.js +41 -0
  245. package/src/{server/services/opencode-gateway-converter.js → platforms/drivers/opencode/gateway-converter.js} +1 -1
  246. package/src/platforms/drivers/opencode/mcp.js +9 -0
  247. package/src/{server/services/opencode-settings-manager.js → platforms/drivers/opencode/native-config-implementation.js} +17 -6
  248. package/src/platforms/drivers/opencode/native-config.js +26 -0
  249. package/src/platforms/drivers/opencode/native-logs.js +133 -0
  250. package/src/platforms/drivers/opencode/project-config.js +98 -0
  251. package/src/platforms/drivers/opencode/projects.js +20 -0
  252. package/src/platforms/drivers/opencode/prompts.js +9 -0
  253. package/src/{server/opencode-proxy-server.js → platforms/drivers/opencode/proxy-implementation.js} +27 -362
  254. package/src/platforms/drivers/opencode/proxy.js +16 -0
  255. package/src/platforms/drivers/opencode/resource-sync.js +9 -0
  256. package/src/{server/services/opencode-sessions.js → platforms/drivers/opencode/sessions-implementation.js} +211 -64
  257. package/src/platforms/drivers/opencode/sessions.js +48 -0
  258. package/src/{server/services/opencode-statistics-service.js → platforms/drivers/opencode/statistics-implementation.js} +2 -2
  259. package/src/platforms/drivers/opencode/statistics.js +16 -0
  260. package/src/platforms/drivers/secure-file-driver.js +272 -0
  261. package/src/platforms/drivers/unsupported.js +7 -0
  262. package/src/platforms/manifest-schema.js +398 -0
  263. package/src/platforms/manifests/claude.json +489 -0
  264. package/src/platforms/manifests/codex.json +448 -0
  265. package/src/platforms/manifests/gemini.json +447 -0
  266. package/src/platforms/manifests/omp.json +496 -0
  267. package/src/platforms/manifests/opencode.json +422 -0
  268. package/src/{server/services → platforms}/native-oauth-adapters.js +87 -417
  269. package/src/{server/services → platforms}/notification-hooks.js +140 -1023
  270. package/src/platforms/oauth-credentials-service.js +506 -0
  271. package/src/platforms/path-resolver.js +179 -0
  272. package/src/platforms/platform-path-context.js +305 -0
  273. package/src/platforms/registry.js +248 -0
  274. package/src/platforms/remote-notification-providers.js +678 -0
  275. package/src/platforms/runtime.js +259 -0
  276. package/src/{server/services/session-history-adapters/index.js → platforms/session-history-adapters.js} +8 -1
  277. package/src/plugins/plugin-loader.js +2 -2
  278. package/src/plugins/plugin-manager.js +2 -2
  279. package/src/plugins/registry.js +27 -10
  280. package/src/reset-config.js +21 -5
  281. package/src/server/api/agents.js +46 -72
  282. package/src/server/api/commands.js +16 -6
  283. package/src/server/api/config-registry.js +206 -59
  284. package/src/server/api/config-sync.js +3 -2
  285. package/src/server/api/config-templates.js +20 -4
  286. package/src/server/api/config.js +111 -102
  287. package/src/server/api/convert.js +54 -178
  288. package/src/server/api/dashboard.js +168 -102
  289. package/src/server/api/hooks.js +1 -1
  290. package/src/server/api/mcp.js +224 -84
  291. package/src/server/api/platform-api-config.js +102 -0
  292. package/src/server/api/platform-route-factory.js +215 -0
  293. package/src/server/api/platform-routes.js +26 -0
  294. package/src/server/api/platforms.js +110 -0
  295. package/src/server/api/plugins.js +57 -57
  296. package/src/server/api/project-config.js +168 -0
  297. package/src/server/api/prompts.js +58 -45
  298. package/src/server/api/settings.js +55 -8
  299. package/src/server/api/skills.js +262 -133
  300. package/src/server/api/ui-config.js +2 -2
  301. package/src/server/api/validation-errors.js +18 -4
  302. package/src/server/api/workspaces.js +47 -12
  303. package/src/server/index.js +164 -213
  304. package/src/server/platform-context.js +81 -0
  305. package/src/server/services/channel-balance.js +11 -20
  306. package/src/server/services/channel-health.js +21 -6
  307. package/src/server/services/channel-scheduler.js +29 -39
  308. package/src/server/services/channel-sync-utils.js +23 -13
  309. package/src/server/services/config-export-service.js +350 -319
  310. package/src/server/services/config-registry-service.js +280 -54
  311. package/src/server/services/config-sync-manager.js +172 -944
  312. package/src/server/services/config-templates-service.js +419 -353
  313. package/src/server/services/control-manifest-store.js +206 -0
  314. package/src/server/services/dashboard-snapshot-worker.js +656 -100
  315. package/src/server/services/effective-control-service.js +557 -0
  316. package/src/server/services/local-resource-index.js +314 -0
  317. package/src/server/services/mcp-service.js +607 -977
  318. package/src/server/services/model-detector.js +15 -10
  319. package/src/server/services/native-log-channel-resolver.js +214 -0
  320. package/src/server/services/native-log-observer.js +291 -0
  321. package/src/server/services/network-access.js +1 -1
  322. package/src/server/services/platform-catalog.js +82 -0
  323. package/src/server/services/platform-resolution.js +32 -29
  324. package/src/server/services/plugins-service.js +376 -122
  325. package/src/server/services/project-config-service.js +550 -0
  326. package/src/server/services/project-path-validation.js +31 -0
  327. package/src/server/services/prompts-service.js +267 -233
  328. package/src/server/services/proxy-runtime.js +7 -4
  329. package/src/server/services/remote-credential-cache.js +43 -0
  330. package/src/server/services/repo-scanner-base.js +182 -75
  331. package/src/server/services/request-logger.js +7 -4
  332. package/src/server/services/session-history-index.js +780 -213
  333. package/src/server/services/session-history-worker.js +228 -33
  334. package/src/server/services/session-snapshot-worker.js +124 -34
  335. package/src/server/services/session-snapshots.js +4 -2
  336. package/src/server/services/skill-artifact-store.js +355 -0
  337. package/src/server/services/skill-format-adapters.js +65 -0
  338. package/src/server/services/skill-projection-service.js +323 -0
  339. package/src/server/services/skill-refresh-task-service.js +275 -0
  340. package/src/server/services/skill-service.js +2020 -677
  341. package/src/server/services/snapshot-cache.js +30 -8
  342. package/src/server/services/speed-test.js +8 -8
  343. package/src/server/services/sqlite-connection.js +19 -3
  344. package/src/server/services/statistics-service.js +240 -57
  345. package/src/server/services/ui-config.js +107 -76
  346. package/src/server/services/usage-log-utils.js +98 -0
  347. package/src/server/services/web-build.js +1 -1
  348. package/src/server/services/workspace-service.js +59 -29
  349. package/src/server/utils/pricing.js +10 -19
  350. package/src/server/websocket-server.js +153 -28
  351. package/src/{server/services/base → shared}/base-channel-service.js +156 -28
  352. package/src/shared/capability-driver.js +104 -0
  353. package/src/shared/channel-auth-policy.js +27 -0
  354. package/src/shared/channel-driver.js +161 -0
  355. package/src/shared/driver-factories/api.js +180 -0
  356. package/src/shared/driver-factories/mcp.js +244 -0
  357. package/src/shared/driver-factories/projects.js +121 -0
  358. package/src/shared/driver-factories/prompts.js +58 -0
  359. package/src/shared/driver-factories/resource-sync.js +375 -0
  360. package/src/shared/driver-result.js +78 -0
  361. package/src/shared/mcp-format.js +189 -0
  362. package/src/shared/platforms.js +104 -167
  363. package/src/shared/project-config.js +512 -0
  364. package/src/shared/proxy-driver.js +57 -0
  365. package/src/{server/services/base → shared}/response-usage-parser.js +8 -4
  366. package/src/ui/menu.js +91 -67
  367. package/src/utils/port-helper.js +35 -19
  368. package/src/utils/session.js +1 -1
  369. package/dist/web/assets/Analytics-COEUXmd4.js +0 -25
  370. package/dist/web/assets/Analytics-RNn1BUbG.css +0 -1
  371. package/dist/web/assets/ConfigTemplates-DLLkS53H.js +0 -1
  372. package/dist/web/assets/Home-DCEyLzwX.js +0 -1
  373. package/dist/web/assets/Home-DYVy4cGZ.css +0 -1
  374. package/dist/web/assets/PluginManager-Oe1ZHoMO.js +0 -1
  375. package/dist/web/assets/ProjectList-CWjuAFof.js +0 -1
  376. package/dist/web/assets/ProjectList-VeMNXfgO.css +0 -1
  377. package/dist/web/assets/SessionList-C4chCPxK.css +0 -1
  378. package/dist/web/assets/SessionList-v3ehGg9U.js +0 -1
  379. package/dist/web/assets/SkillManager-BsX8Qpj0.css +0 -1
  380. package/dist/web/assets/SkillManager-DUF_qP5S.js +0 -1
  381. package/dist/web/assets/WorkspaceManager-CjAWBosO.js +0 -1
  382. package/dist/web/assets/icons-nGdSKQn2.js +0 -1
  383. package/dist/web/assets/index-D5hyHPj7.js +0 -2
  384. package/dist/web/assets/index-bJRG3RXH.css +0 -1
  385. package/dist/web/assets/markdown-BNJfEgCA.js +0 -1
  386. package/dist/web/assets/markdown-BfC0goYb.css +0 -10
  387. package/dist/web/assets/naive-ui-BALVpMgd.js +0 -1
  388. package/dist/web/assets/vendors-DQA4Hw9v.js +0 -7
  389. package/dist/web/assets/vue-vendor-B5RqjEjQ.js +0 -45
  390. package/src/config/model-pricing.js +0 -35
  391. package/src/server/api/channels.js +0 -439
  392. package/src/server/api/claude-hooks.js +0 -56
  393. package/src/server/api/claude-statistics.js +0 -57
  394. package/src/server/api/codex-channels.js +0 -491
  395. package/src/server/api/codex-projects.js +0 -117
  396. package/src/server/api/codex-proxy.js +0 -293
  397. package/src/server/api/codex-sessions.js +0 -652
  398. package/src/server/api/codex-statistics.js +0 -57
  399. package/src/server/api/gemini-channels.js +0 -392
  400. package/src/server/api/gemini-projects.js +0 -103
  401. package/src/server/api/gemini-proxy.js +0 -231
  402. package/src/server/api/gemini-sessions.js +0 -550
  403. package/src/server/api/gemini-statistics.js +0 -57
  404. package/src/server/api/health-check.js +0 -31
  405. package/src/server/api/oauth-credentials.js +0 -198
  406. package/src/server/api/omp-channels.js +0 -575
  407. package/src/server/api/omp-projects.js +0 -88
  408. package/src/server/api/omp-proxy.js +0 -125
  409. package/src/server/api/omp-sessions.js +0 -386
  410. package/src/server/api/omp-statistics.js +0 -40
  411. package/src/server/api/opencode-channels.js +0 -471
  412. package/src/server/api/opencode-projects.js +0 -110
  413. package/src/server/api/opencode-proxy.js +0 -354
  414. package/src/server/api/opencode-sessions.js +0 -466
  415. package/src/server/api/opencode-statistics.js +0 -57
  416. package/src/server/api/projects.js +0 -120
  417. package/src/server/api/proxy.js +0 -330
  418. package/src/server/api/sessions.js +0 -810
  419. package/src/server/services/oauth-credentials-service.js +0 -945
  420. package/src/server/services/omp-session-log-observer.js +0 -138
  421. package/src/server/services/opencode-gateway-adapters.js +0 -43
  422. package/src/server/services/project-snapshots.js +0 -59
  423. package/src/server/services/proxy-log-helper.js +0 -298
  424. package/src/server/services/session-cache.js +0 -127
  425. package/src/server/services/session-converter.js +0 -582
  426. package/src/server/services/session-history-adapters/claude.js +0 -235
  427. /package/src/{server/services/claude-token-recovery.js → platforms/drivers/claude/token-recovery.js} +0 -0
  428. /package/src/{server/services/codex-parser.js → platforms/drivers/codex/parser.js} +0 -0
  429. /package/src/{server/services/codex-speed-test-template.json → platforms/drivers/codex/speed-test-template.json} +0 -0
  430. /package/src/{server/services/codex-wire.js → platforms/drivers/codex/wire.js} +0 -0
  431. /package/src/{server/services/omp-auth-gateway-client.js → platforms/drivers/omp/auth-gateway-client.js} +0 -0
  432. /package/src/{server/services/opencode-normalization.js → platforms/drivers/opencode/normalization.js} +0 -0
  433. /package/src/{server/services → shared}/config-artifact-paths.js +0 -0
  434. /package/src/{server/services/base → shared}/proxy-utils.js +0 -0
@@ -0,0 +1,301 @@
1
+ # 模型目录与定价同步设计
2
+
3
+ ## 状态
4
+
5
+ 已确认设计。
6
+
7
+ ## 问题
8
+
9
+ 当前项目的内置模型与定价主要来自静态文件 `src/config/model-metadata.json`。运行时通过 `src/config/model-metadata.js` 解析,`src/server/utils/pricing.js` 计算成本,并由设置 API 和前端模型设置页面展示、修改。
10
+
11
+ 现状存在三个问题:
12
+
13
+ 1. 内置模型种类和价格需要人工更新,模型文件的 `lastUpdated` 不是自动生成的。
14
+ 2. Codex、Gemini、OpenCode 代理仍各自保留部分硬编码价格兜底,自动更新后可能出现多份价格不一致。
15
+ 3. OMP 的渠道目录探测与内置 Metadata 混在一起。OMP 读取内置模型信息时不应依赖网络或外部命令。
16
+
17
+ 目标是收录热门编码模型、每日更新内置快照,并让 OMP 和其他运行时在离线状态下继续获得模型 Metadata。用户在前端保存的自定义值必须始终优先于内置值。
18
+
19
+ ## 目标
20
+
21
+ - 仅使用 Models.dev 作为外部目录和价格来源。
22
+ - 每日自动获取 Models.dev 数据,生成确定性的内置快照,并通过 Pull Request 发布变更。
23
+ - 快照随项目发行包发布;普通运行时不访问 Models.dev。
24
+ - OMP 的内置 Metadata 获取不需要联网、不要求 Provider Key、不启动外部 OMP 目录命令。
25
+ - 收录热门 provider/model family,而不是把 Models.dev 全部模型无条件塞入前端。
26
+ - 前端按当前工具过滤模型;Claude、Codex、Gemini 不显示不属于自身工具的模型,OMP/OpenCode 可以显示适配的热门第三方模型。
27
+ - 保留现有用户前端修改和自定义模型能力。
28
+ - 统一成本计算入口,移除代理中的重复硬编码价格兜底。
29
+ - 让价格来源和局限性在 UI 中可见。
30
+
31
+ ## 非目标
32
+
33
+ - 不接入 LiteLLM、OpenRouter 或其他第二个数据源。
34
+ - 不做运行时自动联网刷新。
35
+ - 不声称 Models.dev 数据是厂商官方实时价格。Models.dev 是聚合参考目录;本设计接受这一价格语义。
36
+ - 不解析各厂商价格页面,也不实现官方价格页面的爬虫。
37
+ - 不实现按区域、套餐、批处理、上下文长度、数据驻留或协商折扣的完整账单引擎。
38
+ - 不自动删除已经进入项目快照的模型。
39
+
40
+ ## 核心决策
41
+
42
+ ### 单一来源与发行快照
43
+
44
+ 同步器读取 Models.dev 的 provider-scoped API:
45
+
46
+ ```text
47
+ https://models.dev/api.json
48
+ ```
49
+
50
+ Models.dev 的 API、数据组织方式和 provider-specific model 定义见其官方仓库文档:
51
+
52
+ - https://models.dev/api.json
53
+ - https://github.com/anomalyco/models.dev
54
+
55
+ 同步结果直接写回现有的:
56
+
57
+ ```text
58
+ src/config/model-metadata.json
59
+ ```
60
+
61
+ 不新增运行时数据库或第二份缓存。快照包含来源信息和抓取日期;`lastUpdated` 由同步器生成,而不是人工维护。
62
+
63
+ 同步频率是每日一次,因此价格和模型变更的正常延迟最多约一个同步周期。工作流失败时继续使用上一次成功发布的快照。
64
+
65
+ ### 价格口径
66
+
67
+ 快照价格统一按现有项目约定表示为 USD / 百万 tokens:
68
+
69
+ ```json
70
+ {
71
+ "pricing": {
72
+ "input": 3,
73
+ "output": 15,
74
+ "cacheCreation": 3.75,
75
+ "cacheRead": 0.3
76
+ }
77
+ }
78
+ ```
79
+
80
+ Models.dev 的 `cost.input`、`cost.output`、`cost.cache_read`、`cost.cache_write` 映射到上述字段。当前项目无法表达的按上下文或请求类型分层价格使用基础价格,并在同步 PR 摘要中报告,不静默宣称覆盖了全部计费维度。
81
+
82
+ 内置快照和模型设置页面显示:
83
+
84
+ ```text
85
+ 价格来源:Models.dev 参考价格
86
+ ```
87
+
88
+ 不得显示“官方实时价格”。
89
+
90
+ ### 用户覆盖优先
91
+
92
+ 运行时解析顺序固定为:
93
+
94
+ ```text
95
+ 用户 modelMetadataOverrides / modelDefinitions
96
+ > 内置 model-metadata.json
97
+ > 未知值
98
+ ```
99
+
100
+ 每日同步只修改仓库内置快照,不修改用户本地 `config.json`。用户在前端修改的价格、上下文限制、能力字段和自定义模型不会因升级或同步被覆盖。
101
+
102
+ ## 快照结构
103
+
104
+ 继续使用现有 `model-metadata.json` 的顶层结构,并增加来源字段:
105
+
106
+ - `source`
107
+ - `sourceUrl`
108
+ - `lastUpdated`
109
+ - `defaultModels`
110
+ - `defaultSpeedTestModels`
111
+ - `aliases`
112
+ - `models`
113
+
114
+ 在模型项中增加同步所需的轻量字段:
115
+
116
+ ```json
117
+ {
118
+ "id": "gpt-5.5",
119
+ "sourceId": "openai/gpt-5.5",
120
+ "provider": "openai",
121
+ "toolTypes": ["codex", "opencode", "omp"],
122
+ "limit": {
123
+ "context": 1050000,
124
+ "output": 128000
125
+ },
126
+ "pricing": {
127
+ "input": 5,
128
+ "output": 30,
129
+ "cacheRead": 0.5
130
+ },
131
+ "reasoning": true,
132
+ "input": ["text", "image"],
133
+ "supportsTools": true
134
+ }
135
+ ```
136
+
137
+ 其中:
138
+
139
+ - `sourceId` 保留 Models.dev 的原始 `provider/model` 标识,用于追踪来源和生成差异。
140
+ - `id` 是 coding-tool-x 运行时传给对应渠道的模型 ID。
141
+ - 官方直连 provider 的运行时 ID遵循现有适配器使用的模型 ID;第三方 OMP/OpenCode 模型保留 provider 前缀以避免同名冲突。
142
+ - 现有运行时 ID 不静默重命名;同步器保留已有 aliases,并为确认安全的来源 ID 生成别名。
143
+ - `toolTypes` 是前端过滤和渠道默认选项的唯一依据;旧的前缀分类只作为损坏或旧快照的兼容回退。
144
+
145
+ 顶层增加轻量来源标识:
146
+
147
+ ```json
148
+ {
149
+ "source": "models.dev",
150
+ "sourceUrl": "https://models.dev/api.json",
151
+ "lastUpdated": "2026-09-04"
152
+ }
153
+ ```
154
+
155
+ ## 模型筛选规则
156
+
157
+ 同步器使用一个小型热门系列白名单,例如 `scripts/model-catalog-policy.json`,而不是把筛选逻辑散落在前端和代理中。
158
+
159
+ 默认收录条件:
160
+
161
+ 1. provider 或 model family 命中白名单;
162
+ 2. 是文本生成模型,输入包含 `text`,输出包含 `text`;
163
+ 3. 不是 embedding、moderation、纯图像生成或纯音频模型;
164
+ 4. `tool_call` 不为明确的 `false`,优先收录支持工具调用的模型;
165
+ 5. 有正数的上下文限制和可计算的基础 input/output cost;
166
+ 6. 没有明确已过期状态,或仍被现有项目配置引用。
167
+
168
+ 初始白名单覆盖现有项目的 Anthropic、OpenAI、Google 模型,并扩展常用的 DeepSeek、Qwen、Kimi、GLM、Mistral、Llama、xAI 等热门编码模型系列。白名单是同步策略,不是用户限制;用户仍可手动添加任何模型。
169
+
170
+ 没有价格但有模型能力信息的条目不写入内置 `models`,避免成本计算误用通用兜底价;同步 PR 摘要报告这些条目,用户可以在前端手动添加并补充价格。
171
+
172
+ ## 工具模型视图
173
+
174
+ 快照保存通过筛选的模型全集,前端根据 `toolTypes` 生成当前工具的列表:
175
+
176
+ | 工具 | 默认显示范围 |
177
+ | --- | --- |
178
+ | Claude | `claude` |
179
+ | Codex | `codex` |
180
+ | Gemini | `gemini` |
181
+ | OpenCode | `opencode`,并根据入口来源使用 Claude/Codex/Gemini 子集 |
182
+ | OMP | `omp` |
183
+
184
+ provider 到工具的初始映射:
185
+
186
+ - `anthropic` → `claude`,并可用于兼容的 `opencode` / `omp` 渠道;
187
+ - `openai` → `codex`,并可用于兼容的 `opencode` / `omp` 渠道;
188
+ - `google` → `gemini`,并可用于兼容的 `opencode` / `omp` 渠道;
189
+ - 其他热门 provider → 默认进入 `opencode` / `omp`,不进入原生 Claude、Codex、Gemini 列表。
190
+
191
+ 需要调整 `src/web/src/composables/useDefaultModels.js` 和相关渠道选项读取逻辑,使其优先读取 `toolTypes`,同时保留旧三类列表作为兼容回退。OMP/OpenCode 的自由输入和渠道真实探测仍然可用,快照只是离线默认目录。
192
+
193
+ ## OMP 离线 Metadata
194
+
195
+ 现有 OMP Metadata 操作改为从本地内置快照读取:
196
+
197
+ ```text
198
+ GET/POST model metadata request
199
+ → 读取 src/config/model-metadata.json
200
+ → 按 provider/model ID 匹配
201
+ → 合并当前渠道已有定义
202
+ → 返回模型定义与 warnings
203
+ ```
204
+
205
+ 该路径:
206
+
207
+ - 不调用 Models.dev;
208
+ - 不要求 API key;
209
+ - 不调用 `omp models --json`;
210
+ - 不需要网络;
211
+ - 不会覆盖用户已有字段。
212
+
213
+ 现有 `omp models --json` 渠道真实探测可保留,继续作为用户主动点击后的可选能力。它和内置 Metadata 路径必须是两个明确的操作,不能让离线 Metadata 读取隐式触发渠道探测。
214
+
215
+ ## 同步脚本与工作流
216
+
217
+ 新增:
218
+
219
+ ```text
220
+ scripts/sync-model-catalog.js
221
+ scripts/model-catalog-policy.json
222
+ .github/workflows/sync-model-catalog.yml
223
+ ```
224
+
225
+ 脚本使用 Node 22 内置 `fetch`,不增加生产依赖。执行步骤:
226
+
227
+ 1. 请求 `https://models.dev/api.json`;
228
+ 2. 校验顶层结构和模型条目结构;
229
+ 3. 按白名单及能力条件筛选;
230
+ 4. 规范化 ID、价格、限制、能力和 `toolTypes`;
231
+ 5. 合并现有 aliases 与必须保留的旧模型;
232
+ 6. 生成稳定排序的 `src/config/model-metadata.json`;
233
+ 7. 在写入前校验默认模型、ID 唯一性和价格合法性;
234
+ 8. 无差异时退出且不创建 PR;有差异时由 workflow 创建 PR。
235
+
236
+ GitHub Actions:
237
+
238
+ - 每日定时执行;
239
+ - 支持 `workflow_dispatch` 手动执行;
240
+ - 只有生成文件通过校验后才创建 PR;
241
+ - PR 摘要列出新增、价格变化、限制变化、来源中消失但被保留的模型,以及无法表达的复杂价格字段;
242
+ - 工作流失败不触碰当前快照。
243
+
244
+ ## 失败与兼容策略
245
+
246
+ ### 上游不可用
247
+
248
+ 请求失败、超时或 JSON 无法解析时,workflow 失败,不写入快照,不创建 PR。发行包继续使用最后一次成功快照。
249
+
250
+ ### 上游返回异常空数据
251
+
252
+ 如果筛选后结果为空或显著少于现有有效目录,视为异常并失败,防止一次错误响应清空全部内置模型。
253
+
254
+ ### 模型从上游消失
255
+
256
+ 不自动删除现有模型。现有模型可能仍被用户配置、历史记录或渠道使用;PR 摘要报告其不再出现在当前 Models.dev 数据中,由维护者决定是否清理。
257
+
258
+ ### 数据字段不兼容
259
+
260
+ 无法映射的字段不写入运行时 schema。脚本必须在 PR 摘要中报告被忽略的字段;不能静默把未知计费维度折算成普通 token 价格。
261
+
262
+ ## 代码迁移范围
263
+
264
+ 实现阶段只修改服务于该设计的现有路径:
265
+
266
+ - `src/config/model-metadata.json`:改为同步器生成的快照;
267
+ - `src/config/model-metadata.js`:读取来源字段、工具列表和生成 aliases;
268
+ - `src/server/utils/pricing.js`:保持单一解析和计算入口;
269
+ - `src/server/api/settings.js`:返回来源、工具列表和快照更新时间;
270
+ - `src/platforms/drivers/omp/native-config-implementation.js`:内置 Metadata 使用本地快照,不隐式调用外部目录命令;
271
+ - `src/platforms/drivers/codex/proxy-implementation.js`、`gemini/proxy-implementation.js`、`opencode/proxy-implementation.js`:删除重复硬编码价格表,迁移调用方到统一解析入口;
272
+ - `src/web/src/composables/useDefaultModels.js` 及相关渠道组件:按 `toolTypes` 过滤;
273
+ - 相关模型设置和渠道 Metadata 测试。
274
+
275
+ 不改变公共 HTTP 路径、现有用户配置字段、渠道真实探测接口和已有 CLI 命令名称。
276
+
277
+ ## 验证策略
278
+
279
+ 新增或调整的测试必须验证可观察行为:
280
+
281
+ 1. 使用固定 Models.dev fixture 生成稳定快照,覆盖新增模型、价格变化、限制变化和模型消失保留。
282
+ 2. 拒绝重复模型 ID、负价格、无效限制、空目录和非法上游结构。
283
+ 3. 验证 `toolTypes` 过滤:第三方模型不会出现在原生 Claude/Codex/Gemini 列表,但能出现在 OMP/OpenCode 目录。
284
+ 4. 验证用户 `modelMetadataOverrides` 和 `modelDefinitions` 覆盖内置值,且同步不会修改用户配置。
285
+ 5. 禁止 OMP 内置 Metadata 路径调用网络或 `omp models --json`;离线 fixture 仍能返回模型定义。
286
+ 6. 验证所有成本计算调用只使用统一的内置/用户覆盖解析路径,不再读取代理内重复价格表。
287
+ 7. 运行现有项目的模型 schema、pricing、model metadata、API consistency 和回归测试。
288
+ 8. 发布前执行一次实际的 OMP 离线 smoke test,确认打包后的快照可读。
289
+
290
+ ## 验收标准
291
+
292
+ - 每日 workflow 能从 Models.dev 生成确定性 `model-metadata.json` 并自动创建 PR。
293
+ - 快照包含白名单内的热门编码模型及其基础限制、能力和参考价格。
294
+ - OMP 内置 Metadata 在断网时可用。
295
+ - 前端各工具只显示当前工具适配的模型。
296
+ - 用户前端修改永远覆盖内置值。
297
+ - Codex、Gemini、OpenCode 不再拥有会与内置快照冲突的重复硬编码价格。
298
+ - 同步失败不会污染现有快照。
299
+ - 模型移除、价格变化和无法表达的计费字段都能在 PR 中被审查。
300
+ - UI 明确标注 `Models.dev 参考价格`。
301
+ - 公共 API、CLI 和现有渠道配置行为保持兼容。
@@ -0,0 +1,24 @@
1
+ # Codex 项目扫描 500 修复设计
2
+
3
+ ## 问题
4
+
5
+ Codex 项目扫描请求进入会话历史索引的生产 Worker 路径时,Worker 文件在完成 `module.exports` 前执行 `attachWorkerHandler()`。Worker 初始化再次加载 `session-history-index`,形成循环加载,导致 `_defaultWorkerRunner` 获取到的 `runInventoryWorker` 为 `undefined`,最终项目列表请求返回 500。
6
+
7
+ ## 目标
8
+
9
+ - Codex 项目扫描恢复正常,返回项目列表而不是 500。
10
+ - 保留会话索引 Worker 的进程隔离与现有生产路径。
11
+ - 添加回归测试,覆盖 Worker 导出完成后再启动初始化的契约。
12
+
13
+ ## 方案
14
+
15
+ 让 `runInventoryWorker()` 在 fork 子进程时显式设置 `CC_TOOL_SESSION_HISTORY_CHILD=1`。Worker 子进程因此直接执行本地索引,不再再次启动 Worker,消除生产路径中的递归循环加载。保留现有 Worker IPC、错误序列化和进程隔离。
16
+
17
+ 同时保留 Worker 文件现有导出顺序,不扩大改动范围;回归测试从真实父进程调用 `runInventoryWorker()`,验证子进程能完成 Codex 索引。
18
+ 不修改索引 API、Codex 文件解析逻辑或缓存策略;不以禁用 Worker 作为绕过方案。
19
+
20
+ ## 验证
21
+
22
+ 1. 新增测试直接加载 Worker 模块,确认导出函数可用且普通 require 不会启动 Worker。
23
+ 2. 使用当前用户 Codex 数据调用 `getProjects()`,确认扫描成功并返回数组。
24
+ 3. 运行相关单元测试及项目 API 一致性测试。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coding-tool-x",
3
- "version": "3.8.3",
3
+ "version": "3.8.5",
4
4
  "description": "Vibe Coding 增强工作助手 - 智能会话管理、动态渠道切换、全局搜索、实时监控",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -18,6 +18,8 @@
18
18
  "test:unit:watch": "vitest",
19
19
  "test:windows": "node scripts/test-windows-regression.js",
20
20
  "benchmark:codex": "node scripts/benchmark-codex-loading.js",
21
+ "benchmark:native-log-memory": "node scripts/benchmark-native-log-memory.js",
22
+ "sync:model-catalog": "node scripts/sync-model-catalog.js",
21
23
  "build:web": "cd src/web && npm run build",
22
24
  "prepack": "npm run build:web",
23
25
  "dev:web": "cd src/web && npm run dev",
@@ -44,6 +46,7 @@
44
46
  "src/commands/",
45
47
  "src/config/",
46
48
  "src/plugins/",
49
+ "src/platforms/",
47
50
  "src/server/",
48
51
  "src/shared/",
49
52
  "src/ui/",
@@ -58,28 +61,30 @@
58
61
  ],
59
62
  "dependencies": {
60
63
  "@iarna/toml": "^2.2.5",
61
- "adm-zip": "^0.5.16",
64
+ "adm-zip": "^0.6.0",
62
65
  "ajv": "^8.17.1",
63
66
  "chalk": "^4.1.2",
64
67
  "express": "^4.21.2",
65
68
  "http-proxy": "^1.18.1",
66
69
  "https-proxy-agent": "^7.0.6",
67
70
  "inquirer": "^8.2.7",
68
- "js-yaml": "^4.1.1",
71
+ "js-yaml": "^4.3.1",
69
72
  "open": "^8.4.2",
70
73
  "ora": "^5.4.1",
71
- "pm2": "^6.0.14",
74
+ "pm2": "^7.0.3",
72
75
  "rxjs": "^7.8.2",
73
76
  "semver": "^7.6.0",
74
- "toml": "^3.0.0",
77
+ "toml": "^5.0.0",
75
78
  "ws": "^8.18.3"
76
79
  },
77
80
  "overrides": {
78
- "basic-ftp": "^5.2.0",
81
+ "basic-ftp": "^6.2.0",
82
+ "js-yaml": "^4.3.1",
79
83
  "lodash": "^4.17.23",
80
84
  "lodash-es": "^4.17.23",
81
- "qs": "^6.15.0",
82
- "systeminformation": "^5.31.4"
85
+ "qs": "^6.16.0",
86
+ "systeminformation": "^5.33.1",
87
+ "fast-uri": "^3.1.6"
83
88
  },
84
89
  "devDependencies": {
85
90
  "@vitest/coverage-v8": "^4.1.0",