claude-code-workflow 6.3.18 → 6.3.20

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 (832) hide show
  1. package/.claude/CLAUDE.md +8 -5
  2. package/.claude/agents/action-planning-agent.md +26 -2
  3. package/.claude/agents/code-developer.md +132 -43
  4. package/.claude/agents/debug-explore-agent.md +434 -0
  5. package/.claude/agents/issue-plan-agent.md +31 -2
  6. package/.claude/agents/test-fix-agent.md +14 -0
  7. package/.claude/commands/issue/discover.md +41 -0
  8. package/.claude/commands/issue/execute.md +200 -19
  9. package/.claude/commands/issue/new.md +93 -3
  10. package/.claude/commands/issue/plan.md +9 -3
  11. package/.claude/commands/issue/queue.md +94 -39
  12. package/.claude/commands/memory/swagger-docs.md +773 -0
  13. package/.claude/commands/workflow/brainstorm/auto-parallel.md +21 -21
  14. package/.claude/commands/workflow/execute.md +54 -34
  15. package/.claude/commands/workflow/lite-execute.md +48 -164
  16. package/.claude/commands/workflow/lite-fix.md +4 -4
  17. package/.claude/commands/workflow/lite-plan.md +5 -5
  18. package/.claude/commands/workflow/plan.md +27 -27
  19. package/.claude/commands/workflow/review.md +42 -17
  20. package/.claude/commands/workflow/tdd-plan.md +25 -25
  21. package/.claude/commands/workflow/test-fix-gen.md +10 -10
  22. package/.claude/commands/workflow/test-gen.md +14 -14
  23. package/.claude/commands/workflow/ui-design/explore-auto.md +21 -21
  24. package/.claude/commands/workflow/ui-design/imitate-auto.md +24 -24
  25. package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +693 -0
  26. package/.claude/skills/ccw/SKILL.md +462 -0
  27. package/.claude/skills/ccw/index/command-capabilities.json +127 -0
  28. package/.claude/skills/ccw/index/intent-rules.json +136 -0
  29. package/.claude/skills/ccw/index/workflow-chains.json +451 -0
  30. package/.claude/skills/ccw/phases/actions/bugfix.md +218 -0
  31. package/.claude/skills/ccw/phases/actions/coupled.md +194 -0
  32. package/.claude/skills/ccw/phases/actions/docs.md +93 -0
  33. package/.claude/skills/ccw/phases/actions/full.md +154 -0
  34. package/.claude/skills/ccw/phases/actions/issue.md +201 -0
  35. package/.claude/skills/ccw/phases/actions/rapid.md +104 -0
  36. package/.claude/skills/ccw/phases/actions/review-fix.md +84 -0
  37. package/.claude/skills/ccw/phases/actions/tdd.md +66 -0
  38. package/.claude/skills/ccw/phases/actions/ui.md +79 -0
  39. package/.claude/skills/ccw/phases/orchestrator.md +435 -0
  40. package/.claude/skills/ccw/specs/intent-classification.md +336 -0
  41. package/.claude/skills/ccw-help/SKILL.md +177 -0
  42. package/.claude/skills/ccw-help/index/all-agents.json +82 -0
  43. package/.claude/skills/{command-guide → ccw-help}/index/all-commands.json +183 -73
  44. package/.claude/skills/{command-guide → ccw-help}/index/by-category.json +187 -73
  45. package/.claude/skills/{command-guide → ccw-help}/index/by-use-case.json +295 -185
  46. package/.claude/skills/{command-guide → ccw-help}/index/command-relationships.json +19 -166
  47. package/.claude/skills/{command-guide → ccw-help}/index/essential-commands.json +10 -10
  48. package/.claude/skills/ccw-help/scripts/analyze_commands.py +337 -0
  49. package/.claude/skills/code-reviewer/README.md +340 -0
  50. package/.claude/skills/code-reviewer/SKILL.md +308 -0
  51. package/.claude/skills/code-reviewer/phases/01-code-discovery.md +246 -0
  52. package/.claude/skills/code-reviewer/phases/02-security-analysis.md +442 -0
  53. package/.claude/skills/code-reviewer/phases/03-best-practices-review.md +36 -0
  54. package/.claude/skills/code-reviewer/phases/04-report-generation.md +278 -0
  55. package/.claude/skills/code-reviewer/specs/best-practices-requirements.md +346 -0
  56. package/.claude/skills/code-reviewer/specs/quality-standards.md +252 -0
  57. package/.claude/skills/code-reviewer/specs/security-requirements.md +243 -0
  58. package/.claude/skills/code-reviewer/templates/best-practice-finding.md +234 -0
  59. package/.claude/skills/code-reviewer/templates/report-template.md +316 -0
  60. package/.claude/skills/code-reviewer/templates/security-finding.md +161 -0
  61. package/.claude/skills/skill-generator/SKILL.md +187 -0
  62. package/.claude/skills/skill-generator/phases/01-requirements-discovery.md +239 -0
  63. package/.claude/skills/skill-generator/phases/02-structure-generation.md +207 -0
  64. package/.claude/skills/skill-generator/phases/03-phase-generation.md +802 -0
  65. package/.claude/skills/skill-generator/phases/04-specs-templates.md +328 -0
  66. package/.claude/skills/skill-generator/phases/05-validation.md +334 -0
  67. package/.claude/skills/skill-generator/specs/cli-integration.md +448 -0
  68. package/.claude/skills/skill-generator/specs/execution-modes.md +396 -0
  69. package/.claude/skills/skill-generator/specs/scripting-integration.md +265 -0
  70. package/.claude/skills/skill-generator/specs/skill-requirements.md +466 -0
  71. package/.claude/skills/skill-generator/templates/autonomous-action.md +517 -0
  72. package/.claude/skills/skill-generator/templates/autonomous-orchestrator.md +276 -0
  73. package/.claude/skills/skill-generator/templates/code-analysis-action.md +503 -0
  74. package/.claude/skills/skill-generator/templates/llm-action.md +355 -0
  75. package/.claude/skills/skill-generator/templates/script-bash.md +277 -0
  76. package/.claude/skills/skill-generator/templates/script-python.md +198 -0
  77. package/.claude/skills/skill-generator/templates/sequential-phase.md +441 -0
  78. package/.claude/skills/skill-generator/templates/skill-md.md +156 -0
  79. package/.claude/workflows/chinese-response.md +15 -28
  80. package/.claude/workflows/cli-templates/prompts/documentation/swagger-api.txt +266 -0
  81. package/.claude/workflows/cli-tools-usage.md +221 -177
  82. package/.claude/workflows/windows-platform.md +13 -10
  83. package/.codex/prompts/issue-execute.md +310 -82
  84. package/.codex/prompts/issue-queue.md +22 -0
  85. package/.codex/prompts/lite-execute.md +36 -11
  86. package/README.md +309 -305
  87. package/ccw/README.md +10 -4
  88. package/ccw/dist/cli.d.ts.map +1 -1
  89. package/ccw/dist/cli.js +4 -1
  90. package/ccw/dist/cli.js.map +1 -1
  91. package/ccw/dist/commands/cli.d.ts.map +1 -1
  92. package/ccw/dist/commands/cli.js +131 -34
  93. package/ccw/dist/commands/cli.js.map +1 -1
  94. package/ccw/dist/commands/issue.d.ts +152 -0
  95. package/ccw/dist/commands/issue.d.ts.map +1 -1
  96. package/ccw/dist/commands/issue.js +550 -85
  97. package/ccw/dist/commands/issue.js.map +1 -1
  98. package/ccw/dist/commands/serve.d.ts +1 -0
  99. package/ccw/dist/commands/serve.d.ts.map +1 -1
  100. package/ccw/dist/commands/serve.js +12 -5
  101. package/ccw/dist/commands/serve.js.map +1 -1
  102. package/ccw/dist/commands/stop.d.ts.map +1 -1
  103. package/ccw/dist/commands/stop.js +29 -5
  104. package/ccw/dist/commands/stop.js.map +1 -1
  105. package/ccw/dist/commands/tool.d.ts.map +1 -1
  106. package/ccw/dist/commands/tool.js +19 -2
  107. package/ccw/dist/commands/tool.js.map +1 -1
  108. package/ccw/dist/commands/view.d.ts +1 -0
  109. package/ccw/dist/commands/view.d.ts.map +1 -1
  110. package/ccw/dist/commands/view.js +10 -3
  111. package/ccw/dist/commands/view.js.map +1 -1
  112. package/ccw/dist/config/cli-settings-manager.d.ts +86 -0
  113. package/ccw/dist/config/cli-settings-manager.d.ts.map +1 -0
  114. package/ccw/dist/config/cli-settings-manager.js +392 -0
  115. package/ccw/dist/config/cli-settings-manager.js.map +1 -0
  116. package/ccw/dist/config/litellm-api-config-manager.d.ts +71 -5
  117. package/ccw/dist/config/litellm-api-config-manager.d.ts.map +1 -1
  118. package/ccw/dist/config/litellm-api-config-manager.js +290 -20
  119. package/ccw/dist/config/litellm-api-config-manager.js.map +1 -1
  120. package/ccw/dist/core/auth/csrf-manager.d.ts +18 -0
  121. package/ccw/dist/core/auth/csrf-manager.d.ts.map +1 -0
  122. package/ccw/dist/core/auth/csrf-manager.js +80 -0
  123. package/ccw/dist/core/auth/csrf-manager.js.map +1 -0
  124. package/ccw/dist/core/auth/csrf-middleware.d.ts +8 -0
  125. package/ccw/dist/core/auth/csrf-middleware.d.ts.map +1 -0
  126. package/ccw/dist/core/auth/csrf-middleware.js +141 -0
  127. package/ccw/dist/core/auth/csrf-middleware.js.map +1 -0
  128. package/ccw/dist/core/auth/middleware.d.ts +15 -0
  129. package/ccw/dist/core/auth/middleware.d.ts.map +1 -0
  130. package/ccw/dist/core/auth/middleware.js +76 -0
  131. package/ccw/dist/core/auth/middleware.js.map +1 -0
  132. package/ccw/dist/core/auth/token-manager.d.ts +41 -0
  133. package/ccw/dist/core/auth/token-manager.d.ts.map +1 -0
  134. package/ccw/dist/core/auth/token-manager.js +171 -0
  135. package/ccw/dist/core/auth/token-manager.js.map +1 -0
  136. package/ccw/dist/core/cache-manager.d.ts +6 -6
  137. package/ccw/dist/core/cache-manager.d.ts.map +1 -1
  138. package/ccw/dist/core/cache-manager.js +70 -48
  139. package/ccw/dist/core/cache-manager.js.map +1 -1
  140. package/ccw/dist/core/claude-freshness.d.ts.map +1 -1
  141. package/ccw/dist/core/claude-freshness.js +23 -3
  142. package/ccw/dist/core/claude-freshness.js.map +1 -1
  143. package/ccw/dist/core/core-memory-store.d.ts.map +1 -1
  144. package/ccw/dist/core/core-memory-store.js +2 -1
  145. package/ccw/dist/core/core-memory-store.js.map +1 -1
  146. package/ccw/dist/core/cors.d.ts +3 -0
  147. package/ccw/dist/core/cors.d.ts.map +1 -0
  148. package/ccw/dist/core/cors.js +10 -0
  149. package/ccw/dist/core/cors.js.map +1 -0
  150. package/ccw/dist/core/dashboard-generator-patch.js +0 -1
  151. package/ccw/dist/core/dashboard-generator-patch.js.map +1 -1
  152. package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
  153. package/ccw/dist/core/dashboard-generator.js +417 -416
  154. package/ccw/dist/core/dashboard-generator.js.map +1 -1
  155. package/ccw/dist/core/data-aggregator.js +2 -2
  156. package/ccw/dist/core/data-aggregator.js.map +1 -1
  157. package/ccw/dist/core/lite-scanner.d.ts +1 -1
  158. package/ccw/dist/core/lite-scanner.d.ts.map +1 -1
  159. package/ccw/dist/core/lite-scanner.js +130 -127
  160. package/ccw/dist/core/lite-scanner.js.map +1 -1
  161. package/ccw/dist/core/routes/auth-routes.d.ts +12 -0
  162. package/ccw/dist/core/routes/auth-routes.d.ts.map +1 -0
  163. package/ccw/dist/core/routes/auth-routes.js +80 -0
  164. package/ccw/dist/core/routes/auth-routes.js.map +1 -0
  165. package/ccw/dist/core/routes/ccw-routes.d.ts +1 -14
  166. package/ccw/dist/core/routes/ccw-routes.d.ts.map +1 -1
  167. package/ccw/dist/core/routes/ccw-routes.js +9 -4
  168. package/ccw/dist/core/routes/ccw-routes.js.map +1 -1
  169. package/ccw/dist/core/routes/claude-routes.d.ts +1 -14
  170. package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
  171. package/ccw/dist/core/routes/claude-routes.js +98 -39
  172. package/ccw/dist/core/routes/claude-routes.js.map +1 -1
  173. package/ccw/dist/core/routes/cli-routes.d.ts +14 -12
  174. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  175. package/ccw/dist/core/routes/cli-routes.js +122 -43
  176. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  177. package/ccw/dist/core/routes/cli-settings-routes.d.ts +11 -0
  178. package/ccw/dist/core/routes/cli-settings-routes.d.ts.map +1 -0
  179. package/ccw/dist/core/routes/cli-settings-routes.js +204 -0
  180. package/ccw/dist/core/routes/cli-settings-routes.js.map +1 -0
  181. package/ccw/dist/core/routes/codexlens/config-handlers.d.ts +6 -0
  182. package/ccw/dist/core/routes/codexlens/config-handlers.d.ts.map +1 -0
  183. package/ccw/dist/core/routes/codexlens/config-handlers.js +1195 -0
  184. package/ccw/dist/core/routes/codexlens/config-handlers.js.map +1 -0
  185. package/ccw/dist/core/routes/codexlens/index-handlers.d.ts +10 -0
  186. package/ccw/dist/core/routes/codexlens/index-handlers.d.ts.map +1 -0
  187. package/ccw/dist/core/routes/codexlens/index-handlers.js +322 -0
  188. package/ccw/dist/core/routes/codexlens/index-handlers.js.map +1 -0
  189. package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts +6 -0
  190. package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts.map +1 -0
  191. package/ccw/dist/core/routes/codexlens/semantic-handlers.js +865 -0
  192. package/ccw/dist/core/routes/codexlens/semantic-handlers.js.map +1 -0
  193. package/ccw/dist/core/routes/codexlens/utils.d.ts +23 -0
  194. package/ccw/dist/core/routes/codexlens/utils.d.ts.map +1 -0
  195. package/ccw/dist/core/routes/codexlens/utils.js +85 -0
  196. package/ccw/dist/core/routes/codexlens/utils.js.map +1 -0
  197. package/ccw/dist/core/routes/codexlens/watcher-handlers.d.ts +13 -0
  198. package/ccw/dist/core/routes/codexlens/watcher-handlers.d.ts.map +1 -0
  199. package/ccw/dist/core/routes/codexlens/watcher-handlers.js +235 -0
  200. package/ccw/dist/core/routes/codexlens/watcher-handlers.js.map +1 -0
  201. package/ccw/dist/core/routes/codexlens-routes.d.ts +2 -11
  202. package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -1
  203. package/ccw/dist/core/routes/codexlens-routes.js +10 -981
  204. package/ccw/dist/core/routes/codexlens-routes.js.map +1 -1
  205. package/ccw/dist/core/routes/discovery-routes.d.ts +1 -35
  206. package/ccw/dist/core/routes/discovery-routes.d.ts.map +1 -1
  207. package/ccw/dist/core/routes/discovery-routes.js +25 -0
  208. package/ccw/dist/core/routes/discovery-routes.js.map +1 -1
  209. package/ccw/dist/core/routes/files-routes.d.ts +1 -14
  210. package/ccw/dist/core/routes/files-routes.d.ts.map +1 -1
  211. package/ccw/dist/core/routes/files-routes.js +57 -14
  212. package/ccw/dist/core/routes/files-routes.js.map +1 -1
  213. package/ccw/dist/core/routes/graph-routes.d.ts +1 -14
  214. package/ccw/dist/core/routes/graph-routes.d.ts.map +1 -1
  215. package/ccw/dist/core/routes/graph-routes.js +36 -37
  216. package/ccw/dist/core/routes/graph-routes.js.map +1 -1
  217. package/ccw/dist/core/routes/help-routes.d.ts +1 -14
  218. package/ccw/dist/core/routes/help-routes.d.ts.map +1 -1
  219. package/ccw/dist/core/routes/help-routes.js +5 -0
  220. package/ccw/dist/core/routes/help-routes.js.map +1 -1
  221. package/ccw/dist/core/routes/hooks-routes.d.ts +4 -14
  222. package/ccw/dist/core/routes/hooks-routes.d.ts.map +1 -1
  223. package/ccw/dist/core/routes/hooks-routes.js +43 -21
  224. package/ccw/dist/core/routes/hooks-routes.js.map +1 -1
  225. package/ccw/dist/core/routes/issue-routes.d.ts +1 -34
  226. package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -1
  227. package/ccw/dist/core/routes/issue-routes.js +24 -0
  228. package/ccw/dist/core/routes/issue-routes.js.map +1 -1
  229. package/ccw/dist/core/routes/litellm-api-routes.d.ts +1 -14
  230. package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -1
  231. package/ccw/dist/core/routes/litellm-api-routes.js +513 -48
  232. package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -1
  233. package/ccw/dist/core/routes/litellm-routes.d.ts +1 -14
  234. package/ccw/dist/core/routes/litellm-routes.d.ts.map +1 -1
  235. package/ccw/dist/core/routes/litellm-routes.js +28 -11
  236. package/ccw/dist/core/routes/litellm-routes.js.map +1 -1
  237. package/ccw/dist/core/routes/mcp-routes.d.ts +1 -14
  238. package/ccw/dist/core/routes/mcp-routes.d.ts.map +1 -1
  239. package/ccw/dist/core/routes/mcp-routes.js +99 -30
  240. package/ccw/dist/core/routes/mcp-routes.js.map +1 -1
  241. package/ccw/dist/core/routes/mcp-templates-db.d.ts.map +1 -1
  242. package/ccw/dist/core/routes/mcp-templates-db.js +30 -31
  243. package/ccw/dist/core/routes/mcp-templates-db.js.map +1 -1
  244. package/ccw/dist/core/routes/memory-routes.d.ts.map +1 -1
  245. package/ccw/dist/core/routes/memory-routes.js +74 -24
  246. package/ccw/dist/core/routes/memory-routes.js.map +1 -1
  247. package/ccw/dist/core/routes/nav-status-routes.d.ts +3 -0
  248. package/ccw/dist/core/routes/nav-status-routes.d.ts.map +1 -0
  249. package/ccw/dist/core/routes/nav-status-routes.js +217 -0
  250. package/ccw/dist/core/routes/nav-status-routes.js.map +1 -0
  251. package/ccw/dist/core/routes/rules-routes.d.ts +1 -14
  252. package/ccw/dist/core/routes/rules-routes.d.ts.map +1 -1
  253. package/ccw/dist/core/routes/rules-routes.js +481 -58
  254. package/ccw/dist/core/routes/rules-routes.js.map +1 -1
  255. package/ccw/dist/core/routes/session-routes.d.ts +1 -14
  256. package/ccw/dist/core/routes/session-routes.d.ts.map +1 -1
  257. package/ccw/dist/core/routes/session-routes.js +15 -3
  258. package/ccw/dist/core/routes/session-routes.js.map +1 -1
  259. package/ccw/dist/core/routes/skills-routes.d.ts +1 -14
  260. package/ccw/dist/core/routes/skills-routes.d.ts.map +1 -1
  261. package/ccw/dist/core/routes/skills-routes.js +394 -112
  262. package/ccw/dist/core/routes/skills-routes.js.map +1 -1
  263. package/ccw/dist/core/routes/status-routes.d.ts +1 -14
  264. package/ccw/dist/core/routes/status-routes.d.ts.map +1 -1
  265. package/ccw/dist/core/routes/status-routes.js +4 -0
  266. package/ccw/dist/core/routes/status-routes.js.map +1 -1
  267. package/ccw/dist/core/routes/system-routes.d.ts +4 -10
  268. package/ccw/dist/core/routes/system-routes.d.ts.map +1 -1
  269. package/ccw/dist/core/routes/system-routes.js +6 -4
  270. package/ccw/dist/core/routes/system-routes.js.map +1 -1
  271. package/ccw/dist/core/routes/types.d.ts +19 -0
  272. package/ccw/dist/core/routes/types.d.ts.map +1 -0
  273. package/ccw/dist/core/routes/types.js +2 -0
  274. package/ccw/dist/core/routes/types.js.map +1 -0
  275. package/ccw/dist/core/server.d.ts.map +1 -1
  276. package/ccw/dist/core/server.js +206 -29
  277. package/ccw/dist/core/server.js.map +1 -1
  278. package/ccw/dist/core/services/api-key-tester.d.ts +42 -0
  279. package/ccw/dist/core/services/api-key-tester.d.ts.map +1 -0
  280. package/ccw/dist/core/services/api-key-tester.js +126 -0
  281. package/ccw/dist/core/services/api-key-tester.js.map +1 -0
  282. package/ccw/dist/core/services/health-check-service.d.ts +88 -0
  283. package/ccw/dist/core/services/health-check-service.d.ts.map +1 -0
  284. package/ccw/dist/core/services/health-check-service.js +293 -0
  285. package/ccw/dist/core/services/health-check-service.js.map +1 -0
  286. package/ccw/dist/core/websocket.d.ts +9 -7
  287. package/ccw/dist/core/websocket.d.ts.map +1 -1
  288. package/ccw/dist/core/websocket.js +9 -4
  289. package/ccw/dist/core/websocket.js.map +1 -1
  290. package/ccw/dist/tools/claude-cli-tools.d.ts +152 -28
  291. package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
  292. package/ccw/dist/tools/claude-cli-tools.js +490 -100
  293. package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
  294. package/ccw/dist/tools/cli-config-manager.d.ts +24 -8
  295. package/ccw/dist/tools/cli-config-manager.d.ts.map +1 -1
  296. package/ccw/dist/tools/cli-config-manager.js +76 -156
  297. package/ccw/dist/tools/cli-config-manager.js.map +1 -1
  298. package/ccw/dist/tools/cli-executor-core.d.ts +85 -0
  299. package/ccw/dist/tools/cli-executor-core.d.ts.map +1 -0
  300. package/ccw/dist/tools/cli-executor-core.js +1310 -0
  301. package/ccw/dist/tools/cli-executor-core.js.map +1 -0
  302. package/ccw/dist/tools/cli-executor-state.d.ts +241 -0
  303. package/ccw/dist/tools/cli-executor-state.d.ts.map +1 -0
  304. package/ccw/dist/tools/cli-executor-state.js +392 -0
  305. package/ccw/dist/tools/cli-executor-state.js.map +1 -0
  306. package/ccw/dist/tools/cli-executor-utils.d.ts +36 -0
  307. package/ccw/dist/tools/cli-executor-utils.d.ts.map +1 -0
  308. package/ccw/dist/tools/cli-executor-utils.js +298 -0
  309. package/ccw/dist/tools/cli-executor-utils.js.map +1 -0
  310. package/ccw/dist/tools/cli-executor.d.ts +3 -377
  311. package/ccw/dist/tools/cli-executor.d.ts.map +1 -1
  312. package/ccw/dist/tools/cli-executor.js +3 -1884
  313. package/ccw/dist/tools/cli-executor.js.map +1 -1
  314. package/ccw/dist/tools/cli-history-store.d.ts +2 -0
  315. package/ccw/dist/tools/cli-history-store.d.ts.map +1 -1
  316. package/ccw/dist/tools/cli-history-store.js.map +1 -1
  317. package/ccw/dist/tools/cli-output-converter.d.ts +192 -0
  318. package/ccw/dist/tools/cli-output-converter.d.ts.map +1 -0
  319. package/ccw/dist/tools/cli-output-converter.js +1047 -0
  320. package/ccw/dist/tools/cli-output-converter.js.map +1 -0
  321. package/ccw/dist/tools/cli-prompt-builder.d.ts +113 -0
  322. package/ccw/dist/tools/cli-prompt-builder.d.ts.map +1 -0
  323. package/ccw/dist/tools/cli-prompt-builder.js +363 -0
  324. package/ccw/dist/tools/cli-prompt-builder.js.map +1 -0
  325. package/ccw/dist/tools/codex-lens.d.ts +15 -1
  326. package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
  327. package/ccw/dist/tools/codex-lens.js +289 -55
  328. package/ccw/dist/tools/codex-lens.js.map +1 -1
  329. package/ccw/dist/tools/detect-changed-modules.d.ts.map +1 -1
  330. package/ccw/dist/tools/detect-changed-modules.js +22 -4
  331. package/ccw/dist/tools/detect-changed-modules.js.map +1 -1
  332. package/ccw/dist/tools/index.d.ts.map +1 -1
  333. package/ccw/dist/tools/index.js +2 -0
  334. package/ccw/dist/tools/index.js.map +1 -1
  335. package/ccw/dist/tools/litellm-client.d.ts.map +1 -1
  336. package/ccw/dist/tools/litellm-client.js +10 -4
  337. package/ccw/dist/tools/litellm-client.js.map +1 -1
  338. package/ccw/dist/tools/litellm-executor.d.ts +2 -4
  339. package/ccw/dist/tools/litellm-executor.d.ts.map +1 -1
  340. package/ccw/dist/tools/litellm-executor.js +39 -8
  341. package/ccw/dist/tools/litellm-executor.js.map +1 -1
  342. package/ccw/dist/tools/native-session-discovery.d.ts +2 -0
  343. package/ccw/dist/tools/native-session-discovery.d.ts.map +1 -1
  344. package/ccw/dist/tools/native-session-discovery.js +197 -1
  345. package/ccw/dist/tools/native-session-discovery.js.map +1 -1
  346. package/ccw/dist/tools/session-manager.d.ts.map +1 -1
  347. package/ccw/dist/tools/session-manager.js +79 -0
  348. package/ccw/dist/tools/session-manager.js.map +1 -1
  349. package/ccw/dist/tools/skill-context-loader.d.ts +15 -0
  350. package/ccw/dist/tools/skill-context-loader.d.ts.map +1 -0
  351. package/ccw/dist/tools/skill-context-loader.js +198 -0
  352. package/ccw/dist/tools/skill-context-loader.js.map +1 -0
  353. package/ccw/dist/tools/smart-search.d.ts +8 -3
  354. package/ccw/dist/tools/smart-search.d.ts.map +1 -1
  355. package/ccw/dist/tools/smart-search.js +378 -75
  356. package/ccw/dist/tools/smart-search.js.map +1 -1
  357. package/ccw/dist/types/cli-settings.d.ts +86 -0
  358. package/ccw/dist/types/cli-settings.d.ts.map +1 -0
  359. package/ccw/dist/types/cli-settings.js +54 -0
  360. package/ccw/dist/types/cli-settings.js.map +1 -0
  361. package/ccw/dist/types/litellm-api-config.d.ts +40 -1
  362. package/ccw/dist/types/litellm-api-config.d.ts.map +1 -1
  363. package/ccw/dist/utils/exec-constants.d.ts +25 -0
  364. package/ccw/dist/utils/exec-constants.d.ts.map +1 -0
  365. package/ccw/dist/utils/exec-constants.js +25 -0
  366. package/ccw/dist/utils/exec-constants.js.map +1 -0
  367. package/ccw/dist/utils/path-resolver.d.ts +1 -0
  368. package/ccw/dist/utils/path-resolver.d.ts.map +1 -1
  369. package/ccw/dist/utils/path-resolver.js +48 -3
  370. package/ccw/dist/utils/path-resolver.js.map +1 -1
  371. package/ccw/dist/utils/path-validator.d.ts.map +1 -1
  372. package/ccw/dist/utils/path-validator.js +25 -6
  373. package/ccw/dist/utils/path-validator.js.map +1 -1
  374. package/ccw/dist/utils/python-utils.d.ts.map +1 -1
  375. package/ccw/dist/utils/python-utils.js +27 -7
  376. package/ccw/dist/utils/python-utils.js.map +1 -1
  377. package/ccw/dist/utils/shell-escape.d.ts +8 -0
  378. package/ccw/dist/utils/shell-escape.d.ts.map +1 -0
  379. package/ccw/dist/utils/shell-escape.js +24 -0
  380. package/ccw/dist/utils/shell-escape.js.map +1 -0
  381. package/ccw/dist/utils/uv-manager.d.ts +167 -0
  382. package/ccw/dist/utils/uv-manager.d.ts.map +1 -0
  383. package/ccw/dist/utils/uv-manager.js +644 -0
  384. package/ccw/dist/utils/uv-manager.js.map +1 -0
  385. package/ccw/src/cli.ts +4 -1
  386. package/ccw/src/commands/cli.ts +132 -34
  387. package/ccw/src/commands/issue.ts +605 -91
  388. package/ccw/src/commands/serve.ts +15 -5
  389. package/ccw/src/commands/stop.ts +32 -5
  390. package/ccw/src/commands/tool.ts +17 -2
  391. package/ccw/src/commands/view.ts +13 -3
  392. package/ccw/src/config/cli-settings-manager.ts +460 -0
  393. package/ccw/src/config/litellm-api-config-manager.ts +392 -57
  394. package/ccw/src/core/auth/csrf-manager.ts +104 -0
  395. package/ccw/src/core/auth/csrf-middleware.ts +159 -0
  396. package/ccw/src/core/auth/middleware.ts +94 -0
  397. package/ccw/src/core/auth/token-manager.ts +219 -0
  398. package/ccw/src/core/cache-manager.ts +64 -52
  399. package/ccw/src/core/claude-freshness.ts +26 -6
  400. package/ccw/src/core/core-memory-store.ts +2 -1
  401. package/ccw/src/core/cors.ts +10 -0
  402. package/ccw/src/core/dashboard-generator-patch.ts +47 -48
  403. package/ccw/src/core/dashboard-generator.ts +797 -744
  404. package/ccw/src/core/data-aggregator.ts +667 -667
  405. package/ccw/src/core/lite-scanner.ts +156 -140
  406. package/ccw/src/core/routes/auth-routes.ts +98 -0
  407. package/ccw/src/core/routes/ccw-routes.ts +10 -20
  408. package/ccw/src/core/routes/claude-routes.ts +101 -51
  409. package/ccw/src/core/routes/cli-routes.ts +152 -55
  410. package/ccw/src/core/routes/cli-settings-routes.ts +232 -0
  411. package/ccw/src/core/routes/codexlens/README.md +37 -0
  412. package/ccw/src/core/routes/codexlens/config-handlers.ts +1269 -0
  413. package/ccw/src/core/routes/codexlens/index-handlers.ts +354 -0
  414. package/ccw/src/core/routes/codexlens/semantic-handlers.ts +931 -0
  415. package/ccw/src/core/routes/codexlens/utils.ts +96 -0
  416. package/ccw/src/core/routes/codexlens/watcher-handlers.ts +265 -0
  417. package/ccw/src/core/routes/codexlens-routes.ts +11 -1044
  418. package/ccw/src/core/routes/discovery-routes.ts +1 -12
  419. package/ccw/src/core/routes/files-routes.ts +112 -40
  420. package/ccw/src/core/routes/graph-routes.ts +39 -46
  421. package/ccw/src/core/routes/help-routes.ts +2 -12
  422. package/ccw/src/core/routes/hooks-routes.ts +83 -44
  423. package/ccw/src/core/routes/issue-routes.ts +1 -12
  424. package/ccw/src/core/routes/litellm-api-routes.ts +574 -60
  425. package/ccw/src/core/routes/litellm-routes.ts +35 -27
  426. package/ccw/src/core/routes/mcp-routes.ts +157 -60
  427. package/ccw/src/core/routes/mcp-routes.ts.backup +549 -550
  428. package/ccw/src/core/routes/mcp-templates-db.ts +267 -268
  429. package/ccw/src/core/routes/memory-routes.ts +76 -22
  430. package/ccw/src/core/routes/nav-status-routes.ts +231 -0
  431. package/ccw/src/core/routes/rules-routes.ts +600 -81
  432. package/ccw/src/core/routes/session-routes.ts +28 -22
  433. package/ccw/src/core/routes/skills-routes.ts +452 -132
  434. package/ccw/src/core/routes/status-routes.ts +1 -12
  435. package/ccw/src/core/routes/system-routes.ts +15 -22
  436. package/ccw/src/core/routes/types.ts +25 -0
  437. package/ccw/src/core/server.ts +657 -468
  438. package/ccw/src/core/services/api-key-tester.ts +160 -0
  439. package/ccw/src/core/services/health-check-service.ts +366 -0
  440. package/ccw/src/core/websocket.ts +20 -12
  441. package/ccw/src/templates/dashboard-css/01-base.css +109 -0
  442. package/ccw/src/templates/dashboard-css/10-cli-status.css +202 -0
  443. package/ccw/src/templates/dashboard-css/21-cli-toolmgmt.css +308 -0
  444. package/ccw/src/templates/dashboard-css/30-core-memory.css +20 -0
  445. package/ccw/src/templates/dashboard-css/31-api-settings.css +751 -14
  446. package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +230 -2
  447. package/ccw/src/templates/dashboard-js/api.js +5 -0
  448. package/ccw/src/templates/dashboard-js/components/cli-status.js +279 -107
  449. package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +262 -20
  450. package/ccw/src/templates/dashboard-js/components/hook-manager.js +105 -5
  451. package/ccw/src/templates/dashboard-js/components/mcp-manager.js +317 -0
  452. package/ccw/src/templates/dashboard-js/components/navigation.js +45 -0
  453. package/ccw/src/templates/dashboard-js/components/notifications.js +128 -0
  454. package/ccw/src/templates/dashboard-js/i18n.js +4448 -3983
  455. package/ccw/src/templates/dashboard-js/main.js +71 -0
  456. package/ccw/src/templates/dashboard-js/services.js +289 -0
  457. package/ccw/src/templates/dashboard-js/views/api-settings.js +5613 -3361
  458. package/ccw/src/templates/dashboard-js/views/claude-manager.js +1 -7
  459. package/ccw/src/templates/dashboard-js/views/cli-manager.js +581 -87
  460. package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +6101 -1965
  461. package/ccw/src/templates/dashboard-js/views/core-memory.js +129 -20
  462. package/ccw/src/templates/dashboard-js/views/hook-manager.js +17 -3
  463. package/ccw/src/templates/dashboard-js/views/mcp-manager.js +63 -0
  464. package/ccw/src/templates/dashboard-js/views/project-overview.js +182 -37
  465. package/ccw/src/templates/dashboard-js/views/rules-manager.js +26 -3
  466. package/ccw/src/templates/dashboard-js/views/skills-manager.js +2 -42
  467. package/ccw/src/templates/dashboard.html +6 -0
  468. package/ccw/src/tools/README.md +29 -0
  469. package/ccw/src/tools/claude-cli-tools.ts +640 -125
  470. package/ccw/src/tools/cli-config-manager.ts +102 -172
  471. package/ccw/src/tools/cli-executor-core.ts +1533 -0
  472. package/ccw/src/tools/cli-executor-state.ts +560 -0
  473. package/ccw/src/tools/cli-executor-utils.ts +349 -0
  474. package/ccw/src/tools/cli-executor.ts +3 -2309
  475. package/ccw/src/tools/cli-history-store.ts +2 -0
  476. package/ccw/src/tools/cli-output-converter.ts +1237 -0
  477. package/ccw/src/tools/cli-prompt-builder.ts +487 -0
  478. package/ccw/src/tools/codex-lens.ts +324 -59
  479. package/ccw/src/tools/detect-changed-modules.ts +24 -6
  480. package/ccw/src/tools/index.ts +2 -0
  481. package/ccw/src/tools/litellm-client.ts +10 -4
  482. package/ccw/src/tools/litellm-executor.ts +146 -114
  483. package/ccw/src/tools/native-session-discovery.ts +209 -1
  484. package/ccw/src/tools/session-manager.ts +88 -0
  485. package/ccw/src/tools/skill-context-loader.ts +213 -0
  486. package/ccw/src/tools/smart-search.ts +427 -76
  487. package/ccw/src/types/cli-settings.ts +137 -0
  488. package/ccw/src/types/litellm-api-config.ts +55 -1
  489. package/ccw/src/utils/exec-constants.ts +24 -0
  490. package/ccw/src/utils/path-resolver.ts +49 -3
  491. package/ccw/src/utils/path-validator.ts +28 -6
  492. package/ccw/src/utils/python-utils.ts +140 -121
  493. package/ccw/src/utils/shell-escape.ts +30 -0
  494. package/ccw/src/utils/uv-manager.ts +796 -0
  495. package/ccw-litellm/src/ccw_litellm/__pycache__/__init__.cpython-310.pyc +0 -0
  496. package/ccw-litellm/src/ccw_litellm/__pycache__/__init__.cpython-312.pyc +0 -0
  497. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/__init__.cpython-310.pyc +0 -0
  498. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/__init__.cpython-312.pyc +0 -0
  499. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-310.pyc +0 -0
  500. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-312.pyc +0 -0
  501. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
  502. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-310.pyc +0 -0
  503. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-312.pyc +0 -0
  504. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-313.pyc +0 -0
  505. package/ccw-litellm/src/ccw_litellm/clients/litellm_embedder.py +270 -251
  506. package/ccw-litellm/src/ccw_litellm/clients/litellm_llm.py +33 -0
  507. package/ccw-litellm/src/ccw_litellm/config/__pycache__/__init__.cpython-310.pyc +0 -0
  508. package/ccw-litellm/src/ccw_litellm/config/__pycache__/__init__.cpython-312.pyc +0 -0
  509. package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-310.pyc +0 -0
  510. package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-312.pyc +0 -0
  511. package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-313.pyc +0 -0
  512. package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-310.pyc +0 -0
  513. package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-312.pyc +0 -0
  514. package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-313.pyc +0 -0
  515. package/ccw-litellm/src/ccw_litellm/config/loader.py +343 -316
  516. package/ccw-litellm/src/ccw_litellm/config/models.py +162 -130
  517. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/__init__.cpython-310.pyc +0 -0
  518. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/__init__.cpython-312.pyc +0 -0
  519. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/embedder.cpython-310.pyc +0 -0
  520. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/embedder.cpython-312.pyc +0 -0
  521. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/llm.cpython-310.pyc +0 -0
  522. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/llm.cpython-312.pyc +0 -0
  523. package/codex-lens/pyproject.toml +43 -0
  524. package/codex-lens/src/codexlens/__pycache__/__init__.cpython-310.pyc +0 -0
  525. package/codex-lens/src/codexlens/__pycache__/__init__.cpython-312.pyc +0 -0
  526. package/codex-lens/src/codexlens/__pycache__/__main__.cpython-310.pyc +0 -0
  527. package/codex-lens/src/codexlens/__pycache__/__main__.cpython-312.pyc +0 -0
  528. package/codex-lens/src/codexlens/__pycache__/config.cpython-310.pyc +0 -0
  529. package/codex-lens/src/codexlens/__pycache__/config.cpython-312.pyc +0 -0
  530. package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
  531. package/codex-lens/src/codexlens/__pycache__/entities.cpython-310.pyc +0 -0
  532. package/codex-lens/src/codexlens/__pycache__/entities.cpython-312.pyc +0 -0
  533. package/codex-lens/src/codexlens/__pycache__/entities.cpython-313.pyc +0 -0
  534. package/codex-lens/src/codexlens/__pycache__/env_config.cpython-310.pyc +0 -0
  535. package/codex-lens/src/codexlens/__pycache__/env_config.cpython-312.pyc +0 -0
  536. package/codex-lens/src/codexlens/__pycache__/env_config.cpython-313.pyc +0 -0
  537. package/codex-lens/src/codexlens/__pycache__/errors.cpython-310.pyc +0 -0
  538. package/codex-lens/src/codexlens/__pycache__/errors.cpython-312.pyc +0 -0
  539. package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-310.pyc +0 -0
  540. package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-312.pyc +0 -0
  541. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-310.pyc +0 -0
  542. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-312.pyc +0 -0
  543. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-313.pyc +0 -0
  544. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-310.pyc +0 -0
  545. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-312.pyc +0 -0
  546. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-313.pyc +0 -0
  547. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-310.pyc +0 -0
  548. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-312.pyc +0 -0
  549. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-313.pyc +0 -0
  550. package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-310.pyc +0 -0
  551. package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-312.pyc +0 -0
  552. package/codex-lens/src/codexlens/cli/commands.py +4416 -2295
  553. package/codex-lens/src/codexlens/cli/embedding_manager.py +777 -15
  554. package/codex-lens/src/codexlens/cli/model_manager.py +676 -0
  555. package/codex-lens/src/codexlens/config.py +356 -12
  556. package/codex-lens/src/codexlens/entities.py +4 -1
  557. package/codex-lens/src/codexlens/env_config.py +304 -0
  558. package/codex-lens/src/codexlens/indexing/__init__.py +23 -1
  559. package/codex-lens/src/codexlens/indexing/__pycache__/__init__.cpython-313.pyc +0 -0
  560. package/codex-lens/src/codexlens/indexing/__pycache__/embedding.cpython-313.pyc +0 -0
  561. package/codex-lens/src/codexlens/indexing/__pycache__/symbol_extractor.cpython-313.pyc +0 -0
  562. package/codex-lens/src/codexlens/indexing/embedding.py +582 -0
  563. package/codex-lens/src/codexlens/indexing/symbol_extractor.py +62 -28
  564. package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-310.pyc +0 -0
  565. package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-312.pyc +0 -0
  566. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-310.pyc +0 -0
  567. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-312.pyc +0 -0
  568. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-313.pyc +0 -0
  569. package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-310.pyc +0 -0
  570. package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-312.pyc +0 -0
  571. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-310.pyc +0 -0
  572. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-312.pyc +0 -0
  573. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-313.pyc +0 -0
  574. package/codex-lens/src/codexlens/parsers/factory.py +139 -10
  575. package/codex-lens/src/codexlens/parsers/treesitter_parser.py +487 -13
  576. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-310.pyc +0 -0
  577. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-312.pyc +0 -0
  578. package/codex-lens/src/codexlens/search/__pycache__/binary_searcher.cpython-313.pyc +0 -0
  579. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-310.pyc +0 -0
  580. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-312.pyc +0 -0
  581. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
  582. package/codex-lens/src/codexlens/search/__pycache__/enrichment.cpython-313.pyc +0 -0
  583. package/codex-lens/src/codexlens/search/__pycache__/graph_expander.cpython-313.pyc +0 -0
  584. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-310.pyc +0 -0
  585. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-312.pyc +0 -0
  586. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
  587. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-310.pyc +0 -0
  588. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-312.pyc +0 -0
  589. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
  590. package/codex-lens/src/codexlens/search/binary_searcher.py +277 -0
  591. package/codex-lens/src/codexlens/search/chain_search.py +1652 -8
  592. package/codex-lens/src/codexlens/search/enrichment.py +21 -0
  593. package/codex-lens/src/codexlens/search/graph_expander.py +264 -0
  594. package/codex-lens/src/codexlens/search/hybrid_search.py +772 -37
  595. package/codex-lens/src/codexlens/search/ranking.py +397 -8
  596. package/codex-lens/src/codexlens/semantic/SPLADE_IMPLEMENTATION.md +225 -0
  597. package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-310.pyc +0 -0
  598. package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-312.pyc +0 -0
  599. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-310.pyc +0 -0
  600. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-312.pyc +0 -0
  601. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-313.pyc +0 -0
  602. package/codex-lens/src/codexlens/semantic/__pycache__/base.cpython-310.pyc +0 -0
  603. package/codex-lens/src/codexlens/semantic/__pycache__/base.cpython-312.pyc +0 -0
  604. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-310.pyc +0 -0
  605. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-312.pyc +0 -0
  606. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-313.pyc +0 -0
  607. package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-310.pyc +0 -0
  608. package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-312.pyc +0 -0
  609. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-310.pyc +0 -0
  610. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-312.pyc +0 -0
  611. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-313.pyc +0 -0
  612. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-310.pyc +0 -0
  613. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-312.pyc +0 -0
  614. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-313.pyc +0 -0
  615. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-310.pyc +0 -0
  616. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-312.pyc +0 -0
  617. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
  618. package/codex-lens/src/codexlens/semantic/__pycache__/reranker.cpython-313.pyc +0 -0
  619. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-310.pyc +0 -0
  620. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-312.pyc +0 -0
  621. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-313.pyc +0 -0
  622. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-310.pyc +0 -0
  623. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-312.pyc +0 -0
  624. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
  625. package/codex-lens/src/codexlens/semantic/ann_index.py +654 -0
  626. package/codex-lens/src/codexlens/semantic/chunker.py +328 -23
  627. package/codex-lens/src/codexlens/semantic/factory.py +63 -3
  628. package/codex-lens/src/codexlens/semantic/gpu_support.py +19 -2
  629. package/codex-lens/src/codexlens/semantic/litellm_embedder.py +144 -144
  630. package/codex-lens/src/codexlens/semantic/reranker/__init__.py +25 -0
  631. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-310.pyc +0 -0
  632. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-312.pyc +0 -0
  633. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-313.pyc +0 -0
  634. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-310.pyc +0 -0
  635. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-312.pyc +0 -0
  636. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-313.pyc +0 -0
  637. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-310.pyc +0 -0
  638. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-312.pyc +0 -0
  639. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-313.pyc +0 -0
  640. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-310.pyc +0 -0
  641. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-312.pyc +0 -0
  642. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-313.pyc +0 -0
  643. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-310.pyc +0 -0
  644. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-312.pyc +0 -0
  645. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-313.pyc +0 -0
  646. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-310.pyc +0 -0
  647. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-312.pyc +0 -0
  648. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-313.pyc +0 -0
  649. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/litellm_reranker.cpython-313.pyc +0 -0
  650. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-310.pyc +0 -0
  651. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-312.pyc +0 -0
  652. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-313.pyc +0 -0
  653. package/codex-lens/src/codexlens/semantic/reranker/api_reranker.py +403 -0
  654. package/codex-lens/src/codexlens/semantic/reranker/base.py +46 -0
  655. package/codex-lens/src/codexlens/semantic/reranker/factory.py +159 -0
  656. package/codex-lens/src/codexlens/semantic/reranker/fastembed_reranker.py +257 -0
  657. package/codex-lens/src/codexlens/semantic/reranker/legacy.py +91 -0
  658. package/codex-lens/src/codexlens/semantic/reranker/litellm_reranker.py +214 -0
  659. package/codex-lens/src/codexlens/semantic/reranker/onnx_reranker.py +268 -0
  660. package/codex-lens/src/codexlens/semantic/splade_encoder.py +567 -0
  661. package/codex-lens/src/codexlens/semantic/vector_store.py +472 -352
  662. package/codex-lens/src/codexlens/storage/__init__.py +3 -0
  663. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-310.pyc +0 -0
  664. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-312.pyc +0 -0
  665. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-313.pyc +0 -0
  666. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-310.pyc +0 -0
  667. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-312.pyc +0 -0
  668. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
  669. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-310.pyc +0 -0
  670. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-312.pyc +0 -0
  671. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-310.pyc +0 -0
  672. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-312.pyc +0 -0
  673. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
  674. package/codex-lens/src/codexlens/storage/__pycache__/merkle_tree.cpython-313.pyc +0 -0
  675. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-310.pyc +0 -0
  676. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-312.pyc +0 -0
  677. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-310.pyc +0 -0
  678. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-312.pyc +0 -0
  679. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-310.pyc +0 -0
  680. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-312.pyc +0 -0
  681. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-313.pyc +0 -0
  682. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-310.pyc +0 -0
  683. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-312.pyc +0 -0
  684. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-313.pyc +0 -0
  685. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-310.pyc +0 -0
  686. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-312.pyc +0 -0
  687. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-310.pyc +0 -0
  688. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-312.pyc +0 -0
  689. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-313.pyc +0 -0
  690. package/codex-lens/src/codexlens/storage/dir_index.py +310 -12
  691. package/codex-lens/src/codexlens/storage/index_tree.py +240 -25
  692. package/codex-lens/src/codexlens/storage/merkle_tree.py +136 -0
  693. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-310.pyc +0 -0
  694. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-312.pyc +0 -0
  695. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_006_enhance_relationships.cpython-313.pyc +0 -0
  696. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-310.pyc +0 -0
  697. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-312.pyc +0 -0
  698. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-313.pyc +0 -0
  699. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_008_add_merkle_hashes.cpython-313.pyc +0 -0
  700. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_009_add_splade.cpython-313.pyc +0 -0
  701. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_010_add_multi_vector_chunks.cpython-313.pyc +0 -0
  702. package/codex-lens/src/codexlens/storage/migrations/migration_006_enhance_relationships.py +37 -0
  703. package/codex-lens/src/codexlens/storage/migrations/migration_007_add_graph_neighbors.py +47 -0
  704. package/codex-lens/src/codexlens/storage/migrations/migration_008_add_merkle_hashes.py +81 -0
  705. package/codex-lens/src/codexlens/storage/migrations/migration_009_add_splade.py +103 -0
  706. package/codex-lens/src/codexlens/storage/migrations/migration_010_add_multi_vector_chunks.py +162 -0
  707. package/codex-lens/src/codexlens/storage/splade_index.py +578 -0
  708. package/codex-lens/src/codexlens/storage/sqlite_store.py +508 -184
  709. package/codex-lens/src/codexlens/storage/vector_meta_store.py +415 -0
  710. package/codex-lens/src/codexlens/watcher/__init__.py +17 -0
  711. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-310.pyc +0 -0
  712. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-312.pyc +0 -0
  713. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-313.pyc +0 -0
  714. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-310.pyc +0 -0
  715. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-312.pyc +0 -0
  716. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-313.pyc +0 -0
  717. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-310.pyc +0 -0
  718. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-312.pyc +0 -0
  719. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-313.pyc +0 -0
  720. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-310.pyc +0 -0
  721. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-312.pyc +0 -0
  722. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-313.pyc +0 -0
  723. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-310.pyc +0 -0
  724. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-312.pyc +0 -0
  725. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-313.pyc +0 -0
  726. package/codex-lens/src/codexlens/watcher/events.py +82 -0
  727. package/codex-lens/src/codexlens/watcher/file_watcher.py +347 -0
  728. package/codex-lens/src/codexlens/watcher/incremental_indexer.py +369 -0
  729. package/codex-lens/src/codexlens/watcher/manager.py +255 -0
  730. package/package.json +4 -1
  731. package/.claude/commands/workflow/docs/analyze.md +0 -1467
  732. package/.claude/commands/workflow/docs/copyright.md +0 -1265
  733. package/.claude/skills/command-guide/SKILL.md +0 -388
  734. package/.claude/skills/command-guide/UPDATE-GUIDELINE.md +0 -592
  735. package/.claude/skills/command-guide/guides/cli-tools-guide.md +0 -410
  736. package/.claude/skills/command-guide/guides/examples.md +0 -537
  737. package/.claude/skills/command-guide/guides/getting-started.md +0 -242
  738. package/.claude/skills/command-guide/guides/implementation-details.md +0 -1010
  739. package/.claude/skills/command-guide/guides/index-structure.md +0 -326
  740. package/.claude/skills/command-guide/guides/troubleshooting.md +0 -92
  741. package/.claude/skills/command-guide/guides/ui-design-workflow-guide.md +0 -316
  742. package/.claude/skills/command-guide/guides/workflow-patterns.md +0 -662
  743. package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +0 -855
  744. package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +0 -267
  745. package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +0 -182
  746. package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +0 -446
  747. package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +0 -558
  748. package/.claude/skills/command-guide/reference/agents/code-developer.md +0 -311
  749. package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +0 -308
  750. package/.claude/skills/command-guide/reference/agents/context-search-agent.md +0 -581
  751. package/.claude/skills/command-guide/reference/agents/doc-generator.md +0 -330
  752. package/.claude/skills/command-guide/reference/agents/memory-bridge.md +0 -94
  753. package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +0 -400
  754. package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +0 -344
  755. package/.claude/skills/command-guide/reference/agents/ui-design-agent.md +0 -593
  756. package/.claude/skills/command-guide/reference/agents/universal-executor.md +0 -131
  757. package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +0 -440
  758. package/.claude/skills/command-guide/reference/commands/enhance-prompt.md +0 -93
  759. package/.claude/skills/command-guide/reference/commands/memory/code-map-memory.md +0 -687
  760. package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +0 -471
  761. package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +0 -386
  762. package/.claude/skills/command-guide/reference/commands/memory/docs.md +0 -616
  763. package/.claude/skills/command-guide/reference/commands/memory/load-skill-memory.md +0 -182
  764. package/.claude/skills/command-guide/reference/commands/memory/load.md +0 -240
  765. package/.claude/skills/command-guide/reference/commands/memory/skill-memory.md +0 -525
  766. package/.claude/skills/command-guide/reference/commands/memory/style-skill-memory.md +0 -396
  767. package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +0 -314
  768. package/.claude/skills/command-guide/reference/commands/memory/update-full.md +0 -332
  769. package/.claude/skills/command-guide/reference/commands/memory/update-related.md +0 -332
  770. package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +0 -517
  771. package/.claude/skills/command-guide/reference/commands/task/breakdown.md +0 -204
  772. package/.claude/skills/command-guide/reference/commands/task/create.md +0 -152
  773. package/.claude/skills/command-guide/reference/commands/task/execute.md +0 -270
  774. package/.claude/skills/command-guide/reference/commands/task/replan.md +0 -437
  775. package/.claude/skills/command-guide/reference/commands/version.md +0 -254
  776. package/.claude/skills/command-guide/reference/commands/workflow/action-plan-verify.md +0 -447
  777. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +0 -585
  778. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +0 -452
  779. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +0 -443
  780. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +0 -220
  781. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +0 -200
  782. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +0 -200
  783. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +0 -200
  784. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +0 -200
  785. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +0 -398
  786. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +0 -387
  787. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +0 -221
  788. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +0 -221
  789. package/.claude/skills/command-guide/reference/commands/workflow/execute.md +0 -465
  790. package/.claude/skills/command-guide/reference/commands/workflow/init.md +0 -164
  791. package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +0 -748
  792. package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +0 -664
  793. package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +0 -645
  794. package/.claude/skills/command-guide/reference/commands/workflow/plan.md +0 -551
  795. package/.claude/skills/command-guide/reference/commands/workflow/replan.md +0 -515
  796. package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +0 -606
  797. package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +0 -765
  798. package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +0 -776
  799. package/.claude/skills/command-guide/reference/commands/workflow/review.md +0 -298
  800. package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +0 -547
  801. package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +0 -114
  802. package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +0 -77
  803. package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +0 -257
  804. package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +0 -460
  805. package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +0 -400
  806. package/.claude/skills/command-guide/reference/commands/workflow/test-cycle-execute.md +0 -498
  807. package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +0 -699
  808. package/.claude/skills/command-guide/reference/commands/workflow/test-gen.md +0 -529
  809. package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +0 -766
  810. package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +0 -433
  811. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +0 -487
  812. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +0 -518
  813. package/.claude/skills/command-guide/reference/commands/workflow/tools/tdd-coverage-analysis.md +0 -309
  814. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +0 -163
  815. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-context-gather.md +0 -232
  816. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +0 -254
  817. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/animation-extract.md +0 -1150
  818. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/codify-style.md +0 -652
  819. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/design-sync.md +0 -454
  820. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/explore-auto.md +0 -678
  821. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +0 -504
  822. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/imitate-auto.md +0 -745
  823. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +0 -537
  824. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/layout-extract.md +0 -788
  825. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/reference-page-generator.md +0 -356
  826. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/style-extract.md +0 -773
  827. package/.claude/skills/command-guide/scripts/analyze_commands.py +0 -502
  828. package/.claude/skills/command-guide/scripts/update-index.sh +0 -130
  829. package/.claude/skills/command-guide/templates/issue-bug.md +0 -104
  830. package/.claude/skills/command-guide/templates/issue-diagnosis.md +0 -275
  831. package/.claude/skills/command-guide/templates/issue-feature.md +0 -97
  832. package/.claude/skills/command-guide/templates/issue-question.md +0 -141
@@ -1,8 +1,15 @@
1
1
  /**
2
2
  * Claude CLI Tools Configuration Manager
3
- * Manages .claude/cli-tools.json with fallback:
4
- * 1. Project workspace: {projectDir}/.claude/cli-tools.json (priority)
5
- * 2. Global: ~/.claude/cli-tools.json (fallback)
3
+ * Manages cli-tools.json (tools) and cli-settings.json (settings)
4
+ *
5
+ * Configuration Strategy (GLOBAL ONLY):
6
+ * - READ: Global → Default (no project-level configs)
7
+ * - CREATE/SAVE: Always in ~/.claude/ (global user-level config)
8
+ *
9
+ * Config location: ~/.claude/cli-tools.json
10
+ * Settings location: ~/.claude/cli-settings.json
11
+ *
12
+ * Note: Project-level configs are NOT used - all config is user-level.
6
13
  */
7
14
  import * as fs from 'fs';
8
15
  import * as path from 'path';
@@ -12,9 +19,38 @@ import * as os from 'os';
12
19
 
13
20
  export interface ClaudeCliTool {
14
21
  enabled: boolean;
15
- isBuiltin: boolean;
16
- command: string;
17
- description: string;
22
+ primaryModel?: string;
23
+ secondaryModel?: string;
24
+ tags: string[];
25
+ /**
26
+ * Tool type determines routing:
27
+ * - 'builtin': Built-in CLI tools (gemini, qwen, codex, etc.)
28
+ * - 'cli-wrapper': Routes to `claude --settings` (CLI Settings endpoints)
29
+ * - 'api-endpoint': Routes to LiteLLM (LiteLLM endpoints)
30
+ */
31
+ type?: 'builtin' | 'cli-wrapper' | 'api-endpoint';
32
+ /**
33
+ * Endpoint ID for type: 'api-endpoint'
34
+ * Used to lookup endpoint configuration in litellm-api-config.json
35
+ */
36
+ id?: string;
37
+ }
38
+
39
+ export type CliToolName = 'gemini' | 'qwen' | 'codex' | 'claude' | 'opencode' | string;
40
+
41
+ // @deprecated Use tools with type: 'api-endpoint' instead
42
+ export interface ClaudeApiEndpoint {
43
+ id: string;
44
+ name: string;
45
+ enabled: boolean;
46
+ }
47
+
48
+ // @deprecated Use tools with type: 'cli-wrapper' or 'api-endpoint' instead
49
+ export interface ClaudeCustomEndpoint {
50
+ id: string;
51
+ name: string;
52
+ enabled: boolean;
53
+ tags: string[];
18
54
  }
19
55
 
20
56
  export interface ClaudeCacheSettings {
@@ -23,76 +59,129 @@ export interface ClaudeCacheSettings {
23
59
  defaultSuffix: string;
24
60
  }
25
61
 
62
+ // New: Tools-only config (cli-tools.json)
26
63
  export interface ClaudeCliToolsConfig {
27
64
  $schema?: string;
28
65
  version: string;
29
- tools: Record<string, ClaudeCliTool>;
30
- customEndpoints: Array<{
31
- id: string;
32
- name: string;
33
- enabled: boolean;
34
- }>;
66
+ models?: Record<string, string[]>; // PREDEFINED_MODELS
67
+ tools: Record<string, ClaudeCliTool>; // All tools: builtin, cli-wrapper, api-endpoint
68
+ apiEndpoints?: ClaudeApiEndpoint[]; // @deprecated Use tools with type: 'api-endpoint' instead
69
+ customEndpoints?: ClaudeCustomEndpoint[]; // @deprecated Use tools with type: 'cli-wrapper' or 'api-endpoint' instead
70
+ }
71
+
72
+ // New: Settings-only config (cli-settings.json)
73
+ export interface ClaudeCliSettingsConfig {
74
+ $schema?: string;
75
+ version: string;
35
76
  defaultTool: string;
36
- settings: {
37
- promptFormat: 'plain' | 'yaml' | 'json';
38
- smartContext: {
39
- enabled: boolean;
40
- maxFiles: number;
77
+ promptFormat: 'plain' | 'yaml' | 'json';
78
+ smartContext: {
79
+ enabled: boolean;
80
+ maxFiles: number;
81
+ };
82
+ nativeResume: boolean;
83
+ recursiveQuery: boolean;
84
+ cache: ClaudeCacheSettings;
85
+ codeIndexMcp: 'codexlens' | 'ace' | 'none';
86
+ }
87
+
88
+ // Legacy combined config (for backward compatibility)
89
+ export interface ClaudeCliCombinedConfig extends ClaudeCliToolsConfig {
90
+ defaultTool?: string;
91
+ settings?: {
92
+ promptFormat?: 'plain' | 'yaml' | 'json';
93
+ smartContext?: {
94
+ enabled?: boolean;
95
+ maxFiles?: number;
41
96
  };
42
- nativeResume: boolean;
43
- recursiveQuery: boolean;
44
- cache: ClaudeCacheSettings;
45
- codeIndexMcp: 'codexlens' | 'ace' | 'none'; // Code Index MCP provider
97
+ nativeResume?: boolean;
98
+ recursiveQuery?: boolean;
99
+ cache?: Partial<ClaudeCacheSettings>;
100
+ codeIndexMcp?: 'codexlens' | 'ace' | 'none';
46
101
  };
47
102
  }
48
103
 
49
104
  // ========== Default Config ==========
50
105
 
51
- const DEFAULT_CONFIG: ClaudeCliToolsConfig = {
52
- version: '1.0.0',
106
+ // Predefined models for each tool
107
+ const PREDEFINED_MODELS: Record<CliToolName, string[]> = {
108
+ gemini: ['gemini-2.5-pro', 'gemini-2.5-flash', 'gemini-2.0-flash', 'gemini-1.5-pro', 'gemini-1.5-flash'],
109
+ qwen: ['coder-model', 'vision-model', 'qwen2.5-coder-32b'],
110
+ codex: ['gpt-5.2', 'gpt-4.1', 'o4-mini', 'o3'],
111
+ claude: ['sonnet', 'opus', 'haiku', 'claude-sonnet-4-5-20250929', 'claude-opus-4-5-20251101'],
112
+ opencode: [
113
+ 'opencode/glm-4.7-free',
114
+ 'opencode/gpt-5-nano',
115
+ 'opencode/grok-code',
116
+ 'opencode/minimax-m2.1-free',
117
+ 'anthropic/claude-sonnet-4-20250514',
118
+ 'anthropic/claude-opus-4-20250514',
119
+ 'openai/gpt-4.1',
120
+ 'openai/o3',
121
+ 'google/gemini-2.5-pro',
122
+ 'google/gemini-2.5-flash'
123
+ ]
124
+ };
125
+
126
+ const DEFAULT_TOOLS_CONFIG: ClaudeCliToolsConfig = {
127
+ version: '3.2.0',
128
+ models: { ...PREDEFINED_MODELS },
53
129
  tools: {
54
130
  gemini: {
55
131
  enabled: true,
56
- isBuiltin: true,
57
- command: 'gemini',
58
- description: 'Google AI for code analysis'
132
+ primaryModel: 'gemini-2.5-pro',
133
+ secondaryModel: 'gemini-2.5-flash',
134
+ tags: [],
135
+ type: 'builtin'
59
136
  },
60
137
  qwen: {
61
138
  enabled: true,
62
- isBuiltin: true,
63
- command: 'qwen',
64
- description: 'Alibaba AI assistant'
139
+ primaryModel: 'coder-model',
140
+ secondaryModel: 'coder-model',
141
+ tags: [],
142
+ type: 'builtin'
65
143
  },
66
144
  codex: {
67
145
  enabled: true,
68
- isBuiltin: true,
69
- command: 'codex',
70
- description: 'OpenAI code generation'
146
+ primaryModel: 'gpt-5.2',
147
+ secondaryModel: 'gpt-5.2',
148
+ tags: [],
149
+ type: 'builtin'
71
150
  },
72
151
  claude: {
73
152
  enabled: true,
74
- isBuiltin: true,
75
- command: 'claude',
76
- description: 'Anthropic AI assistant'
77
- }
78
- },
79
- customEndpoints: [],
80
- defaultTool: 'gemini',
81
- settings: {
82
- promptFormat: 'plain',
83
- smartContext: {
84
- enabled: false,
85
- maxFiles: 10
153
+ primaryModel: 'sonnet',
154
+ secondaryModel: 'haiku',
155
+ tags: [],
156
+ type: 'builtin'
86
157
  },
87
- nativeResume: true,
88
- recursiveQuery: true,
89
- cache: {
90
- injectionMode: 'auto',
91
- defaultPrefix: '',
92
- defaultSuffix: ''
93
- },
94
- codeIndexMcp: 'codexlens' // Default to CodexLens
158
+ opencode: {
159
+ enabled: true,
160
+ primaryModel: 'opencode/glm-4.7-free',
161
+ secondaryModel: 'opencode/glm-4.7-free',
162
+ tags: [],
163
+ type: 'builtin'
164
+ }
95
165
  }
166
+ // Note: api-endpoint type tools are added dynamically via addClaudeApiEndpoint
167
+ };
168
+
169
+ const DEFAULT_SETTINGS_CONFIG: ClaudeCliSettingsConfig = {
170
+ version: '1.0.0',
171
+ defaultTool: 'gemini',
172
+ promptFormat: 'plain',
173
+ smartContext: {
174
+ enabled: false,
175
+ maxFiles: 10
176
+ },
177
+ nativeResume: true,
178
+ recursiveQuery: true,
179
+ cache: {
180
+ injectionMode: 'auto',
181
+ defaultPrefix: '',
182
+ defaultSuffix: ''
183
+ },
184
+ codeIndexMcp: 'ace'
96
185
  };
97
186
 
98
187
  // ========== Helper Functions ==========
@@ -101,105 +190,346 @@ function getProjectConfigPath(projectDir: string): string {
101
190
  return path.join(projectDir, '.claude', 'cli-tools.json');
102
191
  }
103
192
 
193
+ function getProjectSettingsPath(projectDir: string): string {
194
+ return path.join(projectDir, '.claude', 'cli-settings.json');
195
+ }
196
+
104
197
  function getGlobalConfigPath(): string {
105
198
  return path.join(os.homedir(), '.claude', 'cli-tools.json');
106
199
  }
107
200
 
201
+ function getGlobalSettingsPath(): string {
202
+ return path.join(os.homedir(), '.claude', 'cli-settings.json');
203
+ }
204
+
108
205
  /**
109
- * Resolve config path with fallback:
110
- * 1. Project: {projectDir}/.claude/cli-tools.json
111
- * 2. Global: ~/.claude/cli-tools.json
112
- * Returns { path, source } where source is 'project' | 'global' | 'default'
206
+ * Resolve config path - GLOBAL ONLY
207
+ * Config is user-level, stored only in ~/.claude/cli-tools.json
208
+ * Returns { path, source } where source is 'global' | 'default'
113
209
  */
114
210
  function resolveConfigPath(projectDir: string): { path: string; source: 'project' | 'global' | 'default' } {
115
- const projectPath = getProjectConfigPath(projectDir);
116
- if (fs.existsSync(projectPath)) {
117
- return { path: projectPath, source: 'project' };
118
- }
119
-
120
211
  const globalPath = getGlobalConfigPath();
121
212
  if (fs.existsSync(globalPath)) {
122
213
  return { path: globalPath, source: 'global' };
123
214
  }
124
215
 
125
- return { path: projectPath, source: 'default' };
216
+ // Return global path for default (will be created there)
217
+ return { path: globalPath, source: 'default' };
126
218
  }
127
219
 
128
- function ensureClaudeDir(projectDir: string): void {
129
- const claudeDir = path.join(projectDir, '.claude');
130
- if (!fs.existsSync(claudeDir)) {
131
- fs.mkdirSync(claudeDir, { recursive: true });
220
+ /**
221
+ * Resolve settings path - GLOBAL ONLY
222
+ * Settings are user-level, stored only in ~/.claude/cli-settings.json
223
+ */
224
+ function resolveSettingsPath(projectDir: string): { path: string; source: 'project' | 'global' | 'default' } {
225
+ const globalPath = getGlobalSettingsPath();
226
+ if (fs.existsSync(globalPath)) {
227
+ return { path: globalPath, source: 'global' };
132
228
  }
229
+
230
+ // Return global path for default (will be created there)
231
+ return { path: globalPath, source: 'default' };
133
232
  }
134
233
 
234
+ // NOTE: ensureClaudeDir removed - config should only be in ~/.claude/, not project directory
235
+
135
236
  // ========== Main Functions ==========
136
237
 
137
238
  /**
138
- * Load CLI tools configuration with fallback:
139
- * 1. Project: {projectDir}/.claude/cli-tools.json
140
- * 2. Global: ~/.claude/cli-tools.json
141
- * 3. Default config
239
+ * Ensure tool has required fields (for backward compatibility)
240
+ */
241
+ function ensureToolTags(tool: Partial<ClaudeCliTool>): ClaudeCliTool {
242
+ return {
243
+ enabled: tool.enabled ?? true,
244
+ primaryModel: tool.primaryModel,
245
+ secondaryModel: tool.secondaryModel,
246
+ tags: tool.tags ?? []
247
+ };
248
+ }
249
+
250
+ /**
251
+ * Migrate config from older versions to v3.2.0
252
+ * v3.2.0: All endpoints (cli-wrapper, api-endpoint) are in tools with type field
253
+ */
254
+ function migrateConfig(config: any, projectDir: string): ClaudeCliToolsConfig {
255
+ const version = parseFloat(config.version || '1.0');
256
+
257
+ // Already v3.2+, no migration needed
258
+ if (version >= 3.2) {
259
+ return config as ClaudeCliToolsConfig;
260
+ }
261
+
262
+ console.log(`[claude-cli-tools] Migrating config from v${config.version || '1.0'} to v3.2.0`);
263
+
264
+ // Try to load legacy cli-config.json for model data
265
+ let legacyCliConfig: any = null;
266
+ try {
267
+ const { StoragePaths } = require('../config/storage-paths.js');
268
+ const legacyPath = StoragePaths.project(projectDir).cliConfig;
269
+ const fs = require('fs');
270
+ if (fs.existsSync(legacyPath)) {
271
+ legacyCliConfig = JSON.parse(fs.readFileSync(legacyPath, 'utf-8'));
272
+ console.log(`[claude-cli-tools] Found legacy cli-config.json, merging model data`);
273
+ }
274
+ } catch {
275
+ // Ignore errors loading legacy config
276
+ }
277
+
278
+ const migratedTools: Record<string, ClaudeCliTool> = {};
279
+
280
+ for (const [key, tool] of Object.entries(config.tools || {})) {
281
+ const t = tool as any;
282
+ const legacyTool = legacyCliConfig?.tools?.[key];
283
+
284
+ migratedTools[key] = {
285
+ enabled: t.enabled ?? legacyTool?.enabled ?? true,
286
+ primaryModel: t.primaryModel ?? legacyTool?.primaryModel ?? DEFAULT_TOOLS_CONFIG.tools[key]?.primaryModel,
287
+ secondaryModel: t.secondaryModel ?? legacyTool?.secondaryModel ?? DEFAULT_TOOLS_CONFIG.tools[key]?.secondaryModel,
288
+ tags: t.tags ?? legacyTool?.tags ?? [],
289
+ type: t.type ?? DEFAULT_TOOLS_CONFIG.tools[key]?.type ?? 'builtin',
290
+ id: t.id // Preserve id for api-endpoint type
291
+ };
292
+ }
293
+
294
+ // Add any missing default tools
295
+ for (const [key, defaultTool] of Object.entries(DEFAULT_TOOLS_CONFIG.tools)) {
296
+ if (!migratedTools[key]) {
297
+ const legacyTool = legacyCliConfig?.tools?.[key];
298
+ migratedTools[key] = {
299
+ enabled: legacyTool?.enabled ?? defaultTool.enabled,
300
+ primaryModel: legacyTool?.primaryModel ?? defaultTool.primaryModel,
301
+ secondaryModel: legacyTool?.secondaryModel ?? defaultTool.secondaryModel,
302
+ tags: legacyTool?.tags ?? defaultTool.tags,
303
+ type: defaultTool.type ?? 'builtin'
304
+ };
305
+ }
306
+ }
307
+
308
+ // Migrate customEndpoints (v3.0 and below): cli-wrapper -> tools, others -> api-endpoint tools
309
+ const customEndpoints = config.customEndpoints || [];
310
+ for (const ep of customEndpoints) {
311
+ if (ep.tags?.includes('cli-wrapper')) {
312
+ // CLI wrapper becomes a tool with type: 'cli-wrapper'
313
+ if (!migratedTools[ep.name]) {
314
+ migratedTools[ep.name] = {
315
+ enabled: ep.enabled ?? true,
316
+ tags: ep.tags.filter((t: string) => t !== 'cli-wrapper'),
317
+ type: 'cli-wrapper'
318
+ };
319
+ console.log(`[claude-cli-tools] Migrated cli-wrapper "${ep.name}" to tools`);
320
+ }
321
+ } else {
322
+ // Pure API endpoint becomes a tool with type: 'api-endpoint'
323
+ if (!migratedTools[ep.name]) {
324
+ migratedTools[ep.name] = {
325
+ enabled: ep.enabled ?? true,
326
+ tags: [],
327
+ type: 'api-endpoint',
328
+ id: ep.id // Store endpoint ID for settings lookup
329
+ };
330
+ console.log(`[claude-cli-tools] Migrated API endpoint "${ep.name}" to tools`);
331
+ }
332
+ }
333
+ }
334
+
335
+ // Migrate apiEndpoints (v3.1): convert to tools with type: 'api-endpoint'
336
+ const apiEndpoints = config.apiEndpoints || [];
337
+ for (const ep of apiEndpoints) {
338
+ if (!migratedTools[ep.name]) {
339
+ migratedTools[ep.name] = {
340
+ enabled: ep.enabled ?? true,
341
+ tags: [],
342
+ type: 'api-endpoint',
343
+ id: ep.id // Store endpoint ID for settings lookup
344
+ };
345
+ console.log(`[claude-cli-tools] Migrated API endpoint "${ep.name}" to tools`);
346
+ }
347
+ }
348
+
349
+ return {
350
+ version: '3.2.0',
351
+ models: { ...PREDEFINED_MODELS },
352
+ tools: migratedTools,
353
+ $schema: config.$schema
354
+ };
355
+ }
356
+
357
+ /**
358
+ * Ensure CLI tools configuration file exists
359
+ * Creates default config in global ~/.claude directory (user-level config)
360
+ * @param projectDir - Project directory path (used for reading existing project config)
361
+ * @param createInProject - DEPRECATED: Always creates in global dir. Kept for backward compatibility.
362
+ * @returns The config that was created/exists
363
+ */
364
+ export function ensureClaudeCliTools(projectDir: string, createInProject: boolean = false): ClaudeCliToolsConfig & { _source?: string } {
365
+ const resolved = resolveConfigPath(projectDir);
366
+
367
+ if (resolved.source !== 'default') {
368
+ // Config exists, load and return it
369
+ return loadClaudeCliTools(projectDir);
370
+ }
371
+
372
+ // Config doesn't exist - create in global directory only
373
+ console.log('[claude-cli-tools] Config not found, creating default cli-tools.json in ~/.claude');
374
+
375
+ const defaultConfig: ClaudeCliToolsConfig = { ...DEFAULT_TOOLS_CONFIG };
376
+
377
+ // Always create in global directory (user-level config)
378
+ const globalDir = path.join(os.homedir(), '.claude');
379
+ if (!fs.existsSync(globalDir)) {
380
+ fs.mkdirSync(globalDir, { recursive: true });
381
+ }
382
+ const globalPath = getGlobalConfigPath();
383
+ try {
384
+ fs.writeFileSync(globalPath, JSON.stringify(defaultConfig, null, 2), 'utf-8');
385
+ console.log(`[claude-cli-tools] Created default config at: ${globalPath}`);
386
+ return { ...defaultConfig, _source: 'global' };
387
+ } catch (err) {
388
+ console.error('[claude-cli-tools] Failed to create global config:', err);
389
+ return { ...defaultConfig, _source: 'default' };
390
+ }
391
+ }
392
+
393
+ /**
394
+ * Load CLI tools configuration from global ~/.claude/cli-tools.json
395
+ * Falls back to default config if not found.
396
+ *
397
+ * Automatically migrates older config versions to v3.2.0
142
398
  */
143
399
  export function loadClaudeCliTools(projectDir: string): ClaudeCliToolsConfig & { _source?: string } {
144
400
  const resolved = resolveConfigPath(projectDir);
145
401
 
146
402
  try {
147
403
  if (resolved.source === 'default') {
148
- // No config file found, return defaults
149
- return { ...DEFAULT_CONFIG, _source: 'default' };
404
+ return { ...DEFAULT_TOOLS_CONFIG, _source: 'default' };
150
405
  }
151
406
 
152
407
  const content = fs.readFileSync(resolved.path, 'utf-8');
153
- const parsed = JSON.parse(content) as Partial<ClaudeCliToolsConfig>;
408
+ const parsed = JSON.parse(content) as Partial<ClaudeCliCombinedConfig>;
409
+
410
+ // Migrate older versions to v3.2.0
411
+ const migrated = migrateConfig(parsed, projectDir);
412
+ const needsSave = migrated.version !== parsed.version;
413
+
414
+ // Merge tools with defaults and ensure required fields exist
415
+ const mergedTools: Record<string, ClaudeCliTool> = {};
416
+ for (const [key, tool] of Object.entries({ ...DEFAULT_TOOLS_CONFIG.tools, ...(migrated.tools || {}) })) {
417
+ mergedTools[key] = {
418
+ ...ensureToolTags(tool),
419
+ type: tool.type ?? 'builtin',
420
+ id: tool.id // Preserve id for api-endpoint type
421
+ };
422
+ }
154
423
 
155
- // Merge with defaults
156
- const config = {
157
- ...DEFAULT_CONFIG,
158
- ...parsed,
159
- tools: { ...DEFAULT_CONFIG.tools, ...(parsed.tools || {}) },
160
- settings: {
161
- ...DEFAULT_CONFIG.settings,
162
- ...(parsed.settings || {}),
163
- smartContext: {
164
- ...DEFAULT_CONFIG.settings.smartContext,
165
- ...(parsed.settings?.smartContext || {})
166
- },
167
- cache: {
168
- ...DEFAULT_CONFIG.settings.cache,
169
- ...(parsed.settings?.cache || {})
170
- }
171
- },
424
+ const config: ClaudeCliToolsConfig & { _source?: string } = {
425
+ version: migrated.version || DEFAULT_TOOLS_CONFIG.version,
426
+ models: migrated.models || DEFAULT_TOOLS_CONFIG.models,
427
+ tools: mergedTools,
428
+ $schema: migrated.$schema,
172
429
  _source: resolved.source
173
430
  };
174
431
 
175
- console.log(`[claude-cli-tools] Loaded config from ${resolved.source}: ${resolved.path}`);
432
+ // Save migrated config if version changed
433
+ if (needsSave) {
434
+ try {
435
+ saveClaudeCliTools(projectDir, config);
436
+ console.log(`[claude-cli-tools] Saved migrated config to: ${resolved.path}`);
437
+ } catch (err) {
438
+ console.warn('[claude-cli-tools] Failed to save migrated config:', err);
439
+ }
440
+ }
441
+
442
+ console.log(`[claude-cli-tools] Loaded tools config from ${resolved.source}: ${resolved.path}`);
176
443
  return config;
177
444
  } catch (err) {
178
- console.error('[claude-cli-tools] Error loading config:', err);
179
- return { ...DEFAULT_CONFIG, _source: 'default' };
445
+ console.error('[claude-cli-tools] Error loading tools config:', err);
446
+ return { ...DEFAULT_TOOLS_CONFIG, _source: 'default' };
180
447
  }
181
448
  }
182
449
 
183
450
  /**
184
- * Save CLI tools configuration to project .claude/cli-tools.json
185
- * Always saves to project directory (not global)
451
+ * Save CLI tools configuration to global ~/.claude/cli-tools.json
452
+ * Always saves to global directory (user-level config)
186
453
  */
187
454
  export function saveClaudeCliTools(projectDir: string, config: ClaudeCliToolsConfig & { _source?: string }): void {
188
- ensureClaudeDir(projectDir);
189
- const configPath = getProjectConfigPath(projectDir);
190
-
191
- // Remove internal _source field before saving
192
455
  const { _source, ...configToSave } = config;
193
456
 
457
+ // Always save to global directory
458
+ const globalDir = path.join(os.homedir(), '.claude');
459
+ if (!fs.existsSync(globalDir)) {
460
+ fs.mkdirSync(globalDir, { recursive: true });
461
+ }
462
+ const configPath = getGlobalConfigPath();
463
+
194
464
  try {
195
465
  fs.writeFileSync(configPath, JSON.stringify(configToSave, null, 2), 'utf-8');
196
- console.log(`[claude-cli-tools] Saved config to project: ${configPath}`);
466
+ console.log(`[claude-cli-tools] Saved tools config to: ${configPath}`);
197
467
  } catch (err) {
198
- console.error('[claude-cli-tools] Error saving config:', err);
468
+ console.error('[claude-cli-tools] Error saving tools config:', err);
199
469
  throw new Error(`Failed to save CLI tools config: ${err}`);
200
470
  }
201
471
  }
202
472
 
473
+ /**
474
+ * Load CLI settings configuration from global ~/.claude/cli-settings.json
475
+ * Falls back to default settings if not found.
476
+ */
477
+ export function loadClaudeCliSettings(projectDir: string): ClaudeCliSettingsConfig & { _source?: string } {
478
+ const resolved = resolveSettingsPath(projectDir);
479
+
480
+ try {
481
+ if (resolved.source === 'default') {
482
+ return { ...DEFAULT_SETTINGS_CONFIG, _source: 'default' };
483
+ }
484
+
485
+ const content = fs.readFileSync(resolved.path, 'utf-8');
486
+ const parsed = JSON.parse(content) as Partial<ClaudeCliSettingsConfig>;
487
+
488
+ const config: ClaudeCliSettingsConfig & { _source?: string } = {
489
+ ...DEFAULT_SETTINGS_CONFIG,
490
+ ...parsed,
491
+ smartContext: {
492
+ ...DEFAULT_SETTINGS_CONFIG.smartContext,
493
+ ...(parsed.smartContext || {})
494
+ },
495
+ cache: {
496
+ ...DEFAULT_SETTINGS_CONFIG.cache,
497
+ ...(parsed.cache || {})
498
+ },
499
+ _source: resolved.source
500
+ };
501
+
502
+ console.log(`[claude-cli-tools] Loaded settings from ${resolved.source}: ${resolved.path}`);
503
+ return config;
504
+ } catch (err) {
505
+ console.error('[claude-cli-tools] Error loading settings:', err);
506
+ return { ...DEFAULT_SETTINGS_CONFIG, _source: 'default' };
507
+ }
508
+ }
509
+
510
+ /**
511
+ * Save CLI settings configuration to global ~/.claude/cli-settings.json
512
+ * Always saves to global directory (user-level config)
513
+ */
514
+ export function saveClaudeCliSettings(projectDir: string, config: ClaudeCliSettingsConfig & { _source?: string }): void {
515
+ const { _source, ...configToSave } = config;
516
+
517
+ // Always save to global directory
518
+ const globalDir = path.join(os.homedir(), '.claude');
519
+ if (!fs.existsSync(globalDir)) {
520
+ fs.mkdirSync(globalDir, { recursive: true });
521
+ }
522
+ const settingsPath = getGlobalSettingsPath();
523
+
524
+ try {
525
+ fs.writeFileSync(settingsPath, JSON.stringify(configToSave, null, 2), 'utf-8');
526
+ console.log(`[claude-cli-tools] Saved settings to: ${settingsPath}`);
527
+ } catch (err) {
528
+ console.error('[claude-cli-tools] Error saving settings:', err);
529
+ throw new Error(`Failed to save CLI settings: ${err}`);
530
+ }
531
+ }
532
+
203
533
  /**
204
534
  * Update enabled status for a specific tool
205
535
  */
@@ -224,16 +554,16 @@ export function updateClaudeToolEnabled(
224
554
  export function updateClaudeCacheSettings(
225
555
  projectDir: string,
226
556
  cacheSettings: Partial<ClaudeCacheSettings>
227
- ): ClaudeCliToolsConfig {
228
- const config = loadClaudeCliTools(projectDir);
557
+ ): ClaudeCliSettingsConfig {
558
+ const settings = loadClaudeCliSettings(projectDir);
229
559
 
230
- config.settings.cache = {
231
- ...config.settings.cache,
560
+ settings.cache = {
561
+ ...settings.cache,
232
562
  ...cacheSettings
233
563
  };
234
564
 
235
- saveClaudeCliTools(projectDir, config);
236
- return config;
565
+ saveClaudeCliSettings(projectDir, settings);
566
+ return settings;
237
567
  }
238
568
 
239
569
  /**
@@ -242,28 +572,84 @@ export function updateClaudeCacheSettings(
242
572
  export function updateClaudeDefaultTool(
243
573
  projectDir: string,
244
574
  defaultTool: string
575
+ ): ClaudeCliSettingsConfig {
576
+ const settings = loadClaudeCliSettings(projectDir);
577
+ settings.defaultTool = defaultTool;
578
+ saveClaudeCliSettings(projectDir, settings);
579
+ return settings;
580
+ }
581
+
582
+ /**
583
+ * Add API endpoint as a tool with type: 'api-endpoint'
584
+ * Usage: --tool <name> or --tool custom --model <id>
585
+ */
586
+ export function addClaudeApiEndpoint(
587
+ projectDir: string,
588
+ endpoint: { id: string; name: string; enabled: boolean }
589
+ ): ClaudeCliToolsConfig {
590
+ const config = loadClaudeCliTools(projectDir);
591
+
592
+ // Add as a tool with type: 'api-endpoint'
593
+ config.tools[endpoint.name] = {
594
+ enabled: endpoint.enabled,
595
+ tags: [],
596
+ type: 'api-endpoint',
597
+ id: endpoint.id // Store endpoint ID for settings lookup
598
+ };
599
+
600
+ saveClaudeCliTools(projectDir, config);
601
+ return config;
602
+ }
603
+
604
+ /**
605
+ * Remove API endpoint tool by id or name
606
+ */
607
+ export function removeClaudeApiEndpoint(
608
+ projectDir: string,
609
+ endpointId: string
245
610
  ): ClaudeCliToolsConfig {
246
611
  const config = loadClaudeCliTools(projectDir);
247
- config.defaultTool = defaultTool;
612
+
613
+ // Find the tool by id or name
614
+ const toolToRemove = Object.entries(config.tools).find(
615
+ ([name, t]) => t.type === 'api-endpoint' && (t.id === endpointId || name === endpointId || name.toLowerCase() === endpointId.toLowerCase())
616
+ );
617
+
618
+ if (toolToRemove) {
619
+ delete config.tools[toolToRemove[0]];
620
+ }
621
+
248
622
  saveClaudeCliTools(projectDir, config);
249
623
  return config;
250
624
  }
251
625
 
252
626
  /**
253
- * Add custom endpoint
627
+ * @deprecated Use addClaudeApiEndpoint instead
628
+ * Adds tool to config based on tags:
629
+ * - cli-wrapper tag -> type: 'cli-wrapper'
630
+ * - others -> type: 'api-endpoint'
254
631
  */
255
632
  export function addClaudeCustomEndpoint(
256
633
  projectDir: string,
257
- endpoint: { id: string; name: string; enabled: boolean }
634
+ endpoint: { id: string; name: string; enabled: boolean; tags?: string[] }
258
635
  ): ClaudeCliToolsConfig {
259
636
  const config = loadClaudeCliTools(projectDir);
260
637
 
261
- // Check if endpoint already exists
262
- const existingIndex = config.customEndpoints.findIndex(e => e.id === endpoint.id);
263
- if (existingIndex >= 0) {
264
- config.customEndpoints[existingIndex] = endpoint;
638
+ if (endpoint.tags?.includes('cli-wrapper')) {
639
+ // CLI wrapper tool
640
+ config.tools[endpoint.name] = {
641
+ enabled: endpoint.enabled,
642
+ tags: endpoint.tags.filter(t => t !== 'cli-wrapper'),
643
+ type: 'cli-wrapper'
644
+ };
265
645
  } else {
266
- config.customEndpoints.push(endpoint);
646
+ // API endpoint tool
647
+ config.tools[endpoint.name] = {
648
+ enabled: endpoint.enabled,
649
+ tags: [],
650
+ type: 'api-endpoint',
651
+ id: endpoint.id
652
+ };
267
653
  }
268
654
 
269
655
  saveClaudeCliTools(projectDir, config);
@@ -271,14 +657,24 @@ export function addClaudeCustomEndpoint(
271
657
  }
272
658
 
273
659
  /**
274
- * Remove custom endpoint
660
+ * Remove endpoint tool (cli-wrapper or api-endpoint)
275
661
  */
276
662
  export function removeClaudeCustomEndpoint(
277
663
  projectDir: string,
278
664
  endpointId: string
279
665
  ): ClaudeCliToolsConfig {
280
666
  const config = loadClaudeCliTools(projectDir);
281
- config.customEndpoints = config.customEndpoints.filter(e => e.id !== endpointId);
667
+
668
+ // Find the tool by id or name (cli-wrapper or api-endpoint type)
669
+ const toolToRemove = Object.entries(config.tools).find(
670
+ ([name, t]) => (t.type === 'cli-wrapper' || t.type === 'api-endpoint') &&
671
+ (name === endpointId || name.toLowerCase() === endpointId.toLowerCase() || t.id === endpointId)
672
+ );
673
+
674
+ if (toolToRemove) {
675
+ delete config.tools[toolToRemove[0]];
676
+ }
677
+
282
678
  saveClaudeCliTools(projectDir, config);
283
679
  return config;
284
680
  }
@@ -309,12 +705,12 @@ export function getClaudeCliToolsInfo(projectDir: string): {
309
705
  export function updateCodeIndexMcp(
310
706
  projectDir: string,
311
707
  provider: 'codexlens' | 'ace' | 'none'
312
- ): { success: boolean; error?: string; config?: ClaudeCliToolsConfig } {
708
+ ): { success: boolean; error?: string; settings?: ClaudeCliSettingsConfig } {
313
709
  try {
314
- // Update config
315
- const config = loadClaudeCliTools(projectDir);
316
- config.settings.codeIndexMcp = provider;
317
- saveClaudeCliTools(projectDir, config);
710
+ // Update settings config
711
+ const settings = loadClaudeCliSettings(projectDir);
712
+ settings.codeIndexMcp = provider;
713
+ saveClaudeCliSettings(projectDir, settings);
318
714
 
319
715
  // Only update global CLAUDE.md (consistent with Chinese response / Windows platform)
320
716
  const globalClaudeMdPath = path.join(os.homedir(), '.claude', 'CLAUDE.md');
@@ -358,7 +754,7 @@ export function updateCodeIndexMcp(
358
754
  console.log(`[claude-cli-tools] Updated global CLAUDE.md to use ${provider}`);
359
755
  }
360
756
 
361
- return { success: true, config };
757
+ return { success: true, settings };
362
758
  } catch (err) {
363
759
  console.error('[claude-cli-tools] Error updating Code Index MCP:', err);
364
760
  return { success: false, error: (err as Error).message };
@@ -369,8 +765,8 @@ export function updateCodeIndexMcp(
369
765
  * Get current Code Index MCP provider
370
766
  */
371
767
  export function getCodeIndexMcp(projectDir: string): 'codexlens' | 'ace' | 'none' {
372
- const config = loadClaudeCliTools(projectDir);
373
- return config.settings.codeIndexMcp || 'codexlens';
768
+ const settings = loadClaudeCliSettings(projectDir);
769
+ return settings.codeIndexMcp || 'ace';
374
770
  }
375
771
 
376
772
  /**
@@ -386,3 +782,122 @@ export function getContextToolsPath(provider: 'codexlens' | 'ace' | 'none'): str
386
782
  return 'context-tools.md';
387
783
  }
388
784
  }
785
+
786
+ // ========== Model Configuration Functions ==========
787
+
788
+ /**
789
+ * Get predefined models for a specific tool
790
+ */
791
+ export function getPredefinedModels(tool: string): string[] {
792
+ const toolName = tool as CliToolName;
793
+ return PREDEFINED_MODELS[toolName] ? [...PREDEFINED_MODELS[toolName]] : [];
794
+ }
795
+
796
+ /**
797
+ * Get all predefined models
798
+ */
799
+ export function getAllPredefinedModels(): Record<string, string[]> {
800
+ return { ...PREDEFINED_MODELS };
801
+ }
802
+
803
+ /**
804
+ * Get tool configuration (compatible with cli-config-manager interface)
805
+ */
806
+ export function getToolConfig(projectDir: string, tool: string): {
807
+ enabled: boolean;
808
+ primaryModel: string;
809
+ secondaryModel: string;
810
+ tags?: string[];
811
+ } {
812
+ const config = loadClaudeCliTools(projectDir);
813
+ const toolConfig = config.tools[tool];
814
+
815
+ if (!toolConfig) {
816
+ const defaultTool = DEFAULT_TOOLS_CONFIG.tools[tool];
817
+ return {
818
+ enabled: defaultTool?.enabled ?? true,
819
+ primaryModel: defaultTool?.primaryModel ?? '',
820
+ secondaryModel: defaultTool?.secondaryModel ?? '',
821
+ tags: defaultTool?.tags ?? []
822
+ };
823
+ }
824
+
825
+ return {
826
+ enabled: toolConfig.enabled,
827
+ primaryModel: toolConfig.primaryModel ?? '',
828
+ secondaryModel: toolConfig.secondaryModel ?? '',
829
+ tags: toolConfig.tags
830
+ };
831
+ }
832
+
833
+ /**
834
+ * Update tool configuration
835
+ */
836
+ export function updateToolConfig(
837
+ projectDir: string,
838
+ tool: string,
839
+ updates: Partial<{
840
+ enabled: boolean;
841
+ primaryModel: string;
842
+ secondaryModel: string;
843
+ tags: string[];
844
+ }>
845
+ ): ClaudeCliToolsConfig {
846
+ const config = loadClaudeCliTools(projectDir);
847
+
848
+ if (config.tools[tool]) {
849
+ if (updates.enabled !== undefined) {
850
+ config.tools[tool].enabled = updates.enabled;
851
+ }
852
+ if (updates.primaryModel !== undefined) {
853
+ config.tools[tool].primaryModel = updates.primaryModel;
854
+ }
855
+ if (updates.secondaryModel !== undefined) {
856
+ config.tools[tool].secondaryModel = updates.secondaryModel;
857
+ }
858
+ if (updates.tags !== undefined) {
859
+ config.tools[tool].tags = updates.tags;
860
+ }
861
+ saveClaudeCliTools(projectDir, config);
862
+ }
863
+
864
+ return config;
865
+ }
866
+
867
+ /**
868
+ * Get primary model for a tool
869
+ */
870
+ export function getPrimaryModel(projectDir: string, tool: string): string {
871
+ const toolConfig = getToolConfig(projectDir, tool);
872
+ return toolConfig.primaryModel;
873
+ }
874
+
875
+ /**
876
+ * Get secondary model for a tool
877
+ */
878
+ export function getSecondaryModel(projectDir: string, tool: string): string {
879
+ const toolConfig = getToolConfig(projectDir, tool);
880
+ return toolConfig.secondaryModel;
881
+ }
882
+
883
+ /**
884
+ * Check if a tool is enabled
885
+ */
886
+ export function isToolEnabled(projectDir: string, tool: string): boolean {
887
+ const toolConfig = getToolConfig(projectDir, tool);
888
+ return toolConfig.enabled;
889
+ }
890
+
891
+ /**
892
+ * Get full config response for API (includes predefined models)
893
+ */
894
+ export function getFullConfigResponse(projectDir: string): {
895
+ config: ClaudeCliToolsConfig;
896
+ predefinedModels: Record<string, string[]>;
897
+ } {
898
+ const config = loadClaudeCliTools(projectDir);
899
+ return {
900
+ config,
901
+ predefinedModels: { ...PREDEFINED_MODELS }
902
+ };
903
+ }