claude-code-workflow 6.3.18 → 6.3.19

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 (822) 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/test-fix-agent.md +14 -0
  6. package/.claude/commands/issue/discover.md +41 -0
  7. package/.claude/commands/issue/execute.md +200 -19
  8. package/.claude/commands/issue/new.md +1 -1
  9. package/.claude/commands/issue/plan.md +6 -1
  10. package/.claude/commands/issue/queue.md +94 -39
  11. package/.claude/commands/memory/swagger-docs.md +773 -0
  12. package/.claude/commands/workflow/brainstorm/auto-parallel.md +21 -21
  13. package/.claude/commands/workflow/execute.md +54 -34
  14. package/.claude/commands/workflow/lite-execute.md +48 -164
  15. package/.claude/commands/workflow/lite-fix.md +4 -4
  16. package/.claude/commands/workflow/lite-plan.md +5 -5
  17. package/.claude/commands/workflow/plan.md +27 -27
  18. package/.claude/commands/workflow/review.md +42 -17
  19. package/.claude/commands/workflow/tdd-plan.md +25 -25
  20. package/.claude/commands/workflow/test-fix-gen.md +10 -10
  21. package/.claude/commands/workflow/test-gen.md +14 -14
  22. package/.claude/commands/workflow/ui-design/explore-auto.md +21 -21
  23. package/.claude/commands/workflow/ui-design/imitate-auto.md +24 -24
  24. package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +693 -0
  25. package/.claude/skills/ccw/SKILL.md +462 -0
  26. package/.claude/skills/ccw/index/command-capabilities.json +127 -0
  27. package/.claude/skills/ccw/index/intent-rules.json +136 -0
  28. package/.claude/skills/ccw/index/workflow-chains.json +451 -0
  29. package/.claude/skills/ccw/phases/actions/bugfix.md +218 -0
  30. package/.claude/skills/ccw/phases/actions/coupled.md +194 -0
  31. package/.claude/skills/ccw/phases/actions/docs.md +93 -0
  32. package/.claude/skills/ccw/phases/actions/full.md +154 -0
  33. package/.claude/skills/ccw/phases/actions/issue.md +201 -0
  34. package/.claude/skills/ccw/phases/actions/rapid.md +104 -0
  35. package/.claude/skills/ccw/phases/actions/review-fix.md +84 -0
  36. package/.claude/skills/ccw/phases/actions/tdd.md +66 -0
  37. package/.claude/skills/ccw/phases/actions/ui.md +79 -0
  38. package/.claude/skills/ccw/phases/orchestrator.md +435 -0
  39. package/.claude/skills/ccw/specs/intent-classification.md +336 -0
  40. package/.claude/skills/ccw-help/SKILL.md +177 -0
  41. package/.claude/skills/ccw-help/index/all-agents.json +82 -0
  42. package/.claude/skills/{command-guide → ccw-help}/index/all-commands.json +183 -73
  43. package/.claude/skills/{command-guide → ccw-help}/index/by-category.json +187 -73
  44. package/.claude/skills/{command-guide → ccw-help}/index/by-use-case.json +295 -185
  45. package/.claude/skills/{command-guide → ccw-help}/index/command-relationships.json +19 -166
  46. package/.claude/skills/{command-guide → ccw-help}/index/essential-commands.json +10 -10
  47. package/.claude/skills/ccw-help/scripts/analyze_commands.py +337 -0
  48. package/.claude/skills/code-reviewer/README.md +340 -0
  49. package/.claude/skills/code-reviewer/SKILL.md +308 -0
  50. package/.claude/skills/code-reviewer/phases/01-code-discovery.md +246 -0
  51. package/.claude/skills/code-reviewer/phases/02-security-analysis.md +442 -0
  52. package/.claude/skills/code-reviewer/phases/03-best-practices-review.md +36 -0
  53. package/.claude/skills/code-reviewer/phases/04-report-generation.md +278 -0
  54. package/.claude/skills/code-reviewer/specs/best-practices-requirements.md +346 -0
  55. package/.claude/skills/code-reviewer/specs/quality-standards.md +252 -0
  56. package/.claude/skills/code-reviewer/specs/security-requirements.md +243 -0
  57. package/.claude/skills/code-reviewer/templates/best-practice-finding.md +234 -0
  58. package/.claude/skills/code-reviewer/templates/report-template.md +316 -0
  59. package/.claude/skills/code-reviewer/templates/security-finding.md +161 -0
  60. package/.claude/skills/skill-generator/SKILL.md +187 -0
  61. package/.claude/skills/skill-generator/phases/01-requirements-discovery.md +239 -0
  62. package/.claude/skills/skill-generator/phases/02-structure-generation.md +207 -0
  63. package/.claude/skills/skill-generator/phases/03-phase-generation.md +802 -0
  64. package/.claude/skills/skill-generator/phases/04-specs-templates.md +328 -0
  65. package/.claude/skills/skill-generator/phases/05-validation.md +334 -0
  66. package/.claude/skills/skill-generator/specs/cli-integration.md +448 -0
  67. package/.claude/skills/skill-generator/specs/execution-modes.md +396 -0
  68. package/.claude/skills/skill-generator/specs/scripting-integration.md +265 -0
  69. package/.claude/skills/skill-generator/specs/skill-requirements.md +466 -0
  70. package/.claude/skills/skill-generator/templates/autonomous-action.md +517 -0
  71. package/.claude/skills/skill-generator/templates/autonomous-orchestrator.md +276 -0
  72. package/.claude/skills/skill-generator/templates/code-analysis-action.md +503 -0
  73. package/.claude/skills/skill-generator/templates/llm-action.md +355 -0
  74. package/.claude/skills/skill-generator/templates/script-bash.md +277 -0
  75. package/.claude/skills/skill-generator/templates/script-python.md +198 -0
  76. package/.claude/skills/skill-generator/templates/sequential-phase.md +441 -0
  77. package/.claude/skills/skill-generator/templates/skill-md.md +156 -0
  78. package/.claude/workflows/chinese-response.md +15 -28
  79. package/.claude/workflows/cli-templates/prompts/documentation/swagger-api.txt +266 -0
  80. package/.claude/workflows/cli-tools-usage.md +221 -177
  81. package/.claude/workflows/windows-platform.md +13 -10
  82. package/.codex/prompts/issue-execute.md +305 -82
  83. package/.codex/prompts/issue-queue.md +22 -0
  84. package/.codex/prompts/lite-execute.md +36 -11
  85. package/README.md +309 -305
  86. package/ccw/README.md +10 -4
  87. package/ccw/dist/cli.d.ts.map +1 -1
  88. package/ccw/dist/cli.js +4 -1
  89. package/ccw/dist/cli.js.map +1 -1
  90. package/ccw/dist/commands/cli.d.ts.map +1 -1
  91. package/ccw/dist/commands/cli.js +131 -34
  92. package/ccw/dist/commands/cli.js.map +1 -1
  93. package/ccw/dist/commands/issue.d.ts +152 -0
  94. package/ccw/dist/commands/issue.d.ts.map +1 -1
  95. package/ccw/dist/commands/issue.js +550 -85
  96. package/ccw/dist/commands/issue.js.map +1 -1
  97. package/ccw/dist/commands/serve.d.ts +1 -0
  98. package/ccw/dist/commands/serve.d.ts.map +1 -1
  99. package/ccw/dist/commands/serve.js +12 -5
  100. package/ccw/dist/commands/serve.js.map +1 -1
  101. package/ccw/dist/commands/stop.d.ts.map +1 -1
  102. package/ccw/dist/commands/stop.js +29 -5
  103. package/ccw/dist/commands/stop.js.map +1 -1
  104. package/ccw/dist/commands/tool.d.ts.map +1 -1
  105. package/ccw/dist/commands/tool.js +19 -2
  106. package/ccw/dist/commands/tool.js.map +1 -1
  107. package/ccw/dist/commands/view.d.ts +1 -0
  108. package/ccw/dist/commands/view.d.ts.map +1 -1
  109. package/ccw/dist/commands/view.js +10 -3
  110. package/ccw/dist/commands/view.js.map +1 -1
  111. package/ccw/dist/config/cli-settings-manager.d.ts +86 -0
  112. package/ccw/dist/config/cli-settings-manager.d.ts.map +1 -0
  113. package/ccw/dist/config/cli-settings-manager.js +392 -0
  114. package/ccw/dist/config/cli-settings-manager.js.map +1 -0
  115. package/ccw/dist/config/litellm-api-config-manager.d.ts +71 -5
  116. package/ccw/dist/config/litellm-api-config-manager.d.ts.map +1 -1
  117. package/ccw/dist/config/litellm-api-config-manager.js +290 -20
  118. package/ccw/dist/config/litellm-api-config-manager.js.map +1 -1
  119. package/ccw/dist/core/auth/csrf-manager.d.ts +18 -0
  120. package/ccw/dist/core/auth/csrf-manager.d.ts.map +1 -0
  121. package/ccw/dist/core/auth/csrf-manager.js +80 -0
  122. package/ccw/dist/core/auth/csrf-manager.js.map +1 -0
  123. package/ccw/dist/core/auth/csrf-middleware.d.ts +8 -0
  124. package/ccw/dist/core/auth/csrf-middleware.d.ts.map +1 -0
  125. package/ccw/dist/core/auth/csrf-middleware.js +141 -0
  126. package/ccw/dist/core/auth/csrf-middleware.js.map +1 -0
  127. package/ccw/dist/core/auth/middleware.d.ts +15 -0
  128. package/ccw/dist/core/auth/middleware.d.ts.map +1 -0
  129. package/ccw/dist/core/auth/middleware.js +76 -0
  130. package/ccw/dist/core/auth/middleware.js.map +1 -0
  131. package/ccw/dist/core/auth/token-manager.d.ts +41 -0
  132. package/ccw/dist/core/auth/token-manager.d.ts.map +1 -0
  133. package/ccw/dist/core/auth/token-manager.js +171 -0
  134. package/ccw/dist/core/auth/token-manager.js.map +1 -0
  135. package/ccw/dist/core/cache-manager.d.ts +6 -6
  136. package/ccw/dist/core/cache-manager.d.ts.map +1 -1
  137. package/ccw/dist/core/cache-manager.js +70 -48
  138. package/ccw/dist/core/cache-manager.js.map +1 -1
  139. package/ccw/dist/core/claude-freshness.d.ts.map +1 -1
  140. package/ccw/dist/core/claude-freshness.js +23 -3
  141. package/ccw/dist/core/claude-freshness.js.map +1 -1
  142. package/ccw/dist/core/core-memory-store.d.ts.map +1 -1
  143. package/ccw/dist/core/core-memory-store.js +2 -1
  144. package/ccw/dist/core/core-memory-store.js.map +1 -1
  145. package/ccw/dist/core/cors.d.ts +3 -0
  146. package/ccw/dist/core/cors.d.ts.map +1 -0
  147. package/ccw/dist/core/cors.js +10 -0
  148. package/ccw/dist/core/cors.js.map +1 -0
  149. package/ccw/dist/core/dashboard-generator-patch.js +0 -1
  150. package/ccw/dist/core/dashboard-generator-patch.js.map +1 -1
  151. package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
  152. package/ccw/dist/core/dashboard-generator.js +417 -416
  153. package/ccw/dist/core/dashboard-generator.js.map +1 -1
  154. package/ccw/dist/core/data-aggregator.js +2 -2
  155. package/ccw/dist/core/data-aggregator.js.map +1 -1
  156. package/ccw/dist/core/lite-scanner.d.ts +1 -1
  157. package/ccw/dist/core/lite-scanner.d.ts.map +1 -1
  158. package/ccw/dist/core/lite-scanner.js +130 -127
  159. package/ccw/dist/core/lite-scanner.js.map +1 -1
  160. package/ccw/dist/core/routes/auth-routes.d.ts +12 -0
  161. package/ccw/dist/core/routes/auth-routes.d.ts.map +1 -0
  162. package/ccw/dist/core/routes/auth-routes.js +80 -0
  163. package/ccw/dist/core/routes/auth-routes.js.map +1 -0
  164. package/ccw/dist/core/routes/ccw-routes.d.ts +1 -14
  165. package/ccw/dist/core/routes/ccw-routes.d.ts.map +1 -1
  166. package/ccw/dist/core/routes/ccw-routes.js +9 -4
  167. package/ccw/dist/core/routes/ccw-routes.js.map +1 -1
  168. package/ccw/dist/core/routes/claude-routes.d.ts +1 -14
  169. package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
  170. package/ccw/dist/core/routes/claude-routes.js +98 -39
  171. package/ccw/dist/core/routes/claude-routes.js.map +1 -1
  172. package/ccw/dist/core/routes/cli-routes.d.ts +14 -12
  173. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  174. package/ccw/dist/core/routes/cli-routes.js +122 -43
  175. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  176. package/ccw/dist/core/routes/cli-settings-routes.d.ts +11 -0
  177. package/ccw/dist/core/routes/cli-settings-routes.d.ts.map +1 -0
  178. package/ccw/dist/core/routes/cli-settings-routes.js +204 -0
  179. package/ccw/dist/core/routes/cli-settings-routes.js.map +1 -0
  180. package/ccw/dist/core/routes/codexlens/config-handlers.d.ts +6 -0
  181. package/ccw/dist/core/routes/codexlens/config-handlers.d.ts.map +1 -0
  182. package/ccw/dist/core/routes/codexlens/config-handlers.js +1195 -0
  183. package/ccw/dist/core/routes/codexlens/config-handlers.js.map +1 -0
  184. package/ccw/dist/core/routes/codexlens/index-handlers.d.ts +10 -0
  185. package/ccw/dist/core/routes/codexlens/index-handlers.d.ts.map +1 -0
  186. package/ccw/dist/core/routes/codexlens/index-handlers.js +322 -0
  187. package/ccw/dist/core/routes/codexlens/index-handlers.js.map +1 -0
  188. package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts +6 -0
  189. package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts.map +1 -0
  190. package/ccw/dist/core/routes/codexlens/semantic-handlers.js +865 -0
  191. package/ccw/dist/core/routes/codexlens/semantic-handlers.js.map +1 -0
  192. package/ccw/dist/core/routes/codexlens/utils.d.ts +23 -0
  193. package/ccw/dist/core/routes/codexlens/utils.d.ts.map +1 -0
  194. package/ccw/dist/core/routes/codexlens/utils.js +85 -0
  195. package/ccw/dist/core/routes/codexlens/utils.js.map +1 -0
  196. package/ccw/dist/core/routes/codexlens/watcher-handlers.d.ts +13 -0
  197. package/ccw/dist/core/routes/codexlens/watcher-handlers.d.ts.map +1 -0
  198. package/ccw/dist/core/routes/codexlens/watcher-handlers.js +235 -0
  199. package/ccw/dist/core/routes/codexlens/watcher-handlers.js.map +1 -0
  200. package/ccw/dist/core/routes/codexlens-routes.d.ts +2 -11
  201. package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -1
  202. package/ccw/dist/core/routes/codexlens-routes.js +10 -981
  203. package/ccw/dist/core/routes/codexlens-routes.js.map +1 -1
  204. package/ccw/dist/core/routes/discovery-routes.d.ts +1 -35
  205. package/ccw/dist/core/routes/discovery-routes.d.ts.map +1 -1
  206. package/ccw/dist/core/routes/discovery-routes.js +25 -0
  207. package/ccw/dist/core/routes/discovery-routes.js.map +1 -1
  208. package/ccw/dist/core/routes/files-routes.d.ts +1 -14
  209. package/ccw/dist/core/routes/files-routes.d.ts.map +1 -1
  210. package/ccw/dist/core/routes/files-routes.js +57 -14
  211. package/ccw/dist/core/routes/files-routes.js.map +1 -1
  212. package/ccw/dist/core/routes/graph-routes.d.ts +1 -14
  213. package/ccw/dist/core/routes/graph-routes.d.ts.map +1 -1
  214. package/ccw/dist/core/routes/graph-routes.js +36 -37
  215. package/ccw/dist/core/routes/graph-routes.js.map +1 -1
  216. package/ccw/dist/core/routes/help-routes.d.ts +1 -14
  217. package/ccw/dist/core/routes/help-routes.d.ts.map +1 -1
  218. package/ccw/dist/core/routes/help-routes.js +5 -0
  219. package/ccw/dist/core/routes/help-routes.js.map +1 -1
  220. package/ccw/dist/core/routes/hooks-routes.d.ts +4 -14
  221. package/ccw/dist/core/routes/hooks-routes.d.ts.map +1 -1
  222. package/ccw/dist/core/routes/hooks-routes.js +43 -21
  223. package/ccw/dist/core/routes/hooks-routes.js.map +1 -1
  224. package/ccw/dist/core/routes/issue-routes.d.ts +1 -34
  225. package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -1
  226. package/ccw/dist/core/routes/issue-routes.js +24 -0
  227. package/ccw/dist/core/routes/issue-routes.js.map +1 -1
  228. package/ccw/dist/core/routes/litellm-api-routes.d.ts +1 -14
  229. package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -1
  230. package/ccw/dist/core/routes/litellm-api-routes.js +505 -48
  231. package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -1
  232. package/ccw/dist/core/routes/litellm-routes.d.ts +1 -14
  233. package/ccw/dist/core/routes/litellm-routes.d.ts.map +1 -1
  234. package/ccw/dist/core/routes/litellm-routes.js +28 -11
  235. package/ccw/dist/core/routes/litellm-routes.js.map +1 -1
  236. package/ccw/dist/core/routes/mcp-routes.d.ts +1 -14
  237. package/ccw/dist/core/routes/mcp-routes.d.ts.map +1 -1
  238. package/ccw/dist/core/routes/mcp-routes.js +99 -30
  239. package/ccw/dist/core/routes/mcp-routes.js.map +1 -1
  240. package/ccw/dist/core/routes/mcp-templates-db.d.ts.map +1 -1
  241. package/ccw/dist/core/routes/mcp-templates-db.js +30 -31
  242. package/ccw/dist/core/routes/mcp-templates-db.js.map +1 -1
  243. package/ccw/dist/core/routes/memory-routes.d.ts.map +1 -1
  244. package/ccw/dist/core/routes/memory-routes.js +74 -24
  245. package/ccw/dist/core/routes/memory-routes.js.map +1 -1
  246. package/ccw/dist/core/routes/nav-status-routes.d.ts +3 -0
  247. package/ccw/dist/core/routes/nav-status-routes.d.ts.map +1 -0
  248. package/ccw/dist/core/routes/nav-status-routes.js +217 -0
  249. package/ccw/dist/core/routes/nav-status-routes.js.map +1 -0
  250. package/ccw/dist/core/routes/rules-routes.d.ts +1 -14
  251. package/ccw/dist/core/routes/rules-routes.d.ts.map +1 -1
  252. package/ccw/dist/core/routes/rules-routes.js +481 -58
  253. package/ccw/dist/core/routes/rules-routes.js.map +1 -1
  254. package/ccw/dist/core/routes/session-routes.d.ts +1 -14
  255. package/ccw/dist/core/routes/session-routes.d.ts.map +1 -1
  256. package/ccw/dist/core/routes/session-routes.js +15 -3
  257. package/ccw/dist/core/routes/session-routes.js.map +1 -1
  258. package/ccw/dist/core/routes/skills-routes.d.ts +1 -14
  259. package/ccw/dist/core/routes/skills-routes.d.ts.map +1 -1
  260. package/ccw/dist/core/routes/skills-routes.js +394 -112
  261. package/ccw/dist/core/routes/skills-routes.js.map +1 -1
  262. package/ccw/dist/core/routes/status-routes.d.ts +1 -14
  263. package/ccw/dist/core/routes/status-routes.d.ts.map +1 -1
  264. package/ccw/dist/core/routes/status-routes.js +4 -0
  265. package/ccw/dist/core/routes/status-routes.js.map +1 -1
  266. package/ccw/dist/core/routes/system-routes.d.ts +4 -10
  267. package/ccw/dist/core/routes/system-routes.d.ts.map +1 -1
  268. package/ccw/dist/core/routes/system-routes.js +6 -4
  269. package/ccw/dist/core/routes/system-routes.js.map +1 -1
  270. package/ccw/dist/core/routes/types.d.ts +19 -0
  271. package/ccw/dist/core/routes/types.d.ts.map +1 -0
  272. package/ccw/dist/core/routes/types.js +2 -0
  273. package/ccw/dist/core/routes/types.js.map +1 -0
  274. package/ccw/dist/core/server.d.ts.map +1 -1
  275. package/ccw/dist/core/server.js +201 -29
  276. package/ccw/dist/core/server.js.map +1 -1
  277. package/ccw/dist/core/services/api-key-tester.d.ts +31 -0
  278. package/ccw/dist/core/services/api-key-tester.d.ts.map +1 -0
  279. package/ccw/dist/core/services/api-key-tester.js +106 -0
  280. package/ccw/dist/core/services/api-key-tester.js.map +1 -0
  281. package/ccw/dist/core/services/health-check-service.d.ts +82 -0
  282. package/ccw/dist/core/services/health-check-service.d.ts.map +1 -0
  283. package/ccw/dist/core/services/health-check-service.js +271 -0
  284. package/ccw/dist/core/services/health-check-service.js.map +1 -0
  285. package/ccw/dist/core/websocket.d.ts +9 -7
  286. package/ccw/dist/core/websocket.d.ts.map +1 -1
  287. package/ccw/dist/core/websocket.js +9 -4
  288. package/ccw/dist/core/websocket.js.map +1 -1
  289. package/ccw/dist/tools/claude-cli-tools.d.ts +152 -28
  290. package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
  291. package/ccw/dist/tools/claude-cli-tools.js +490 -100
  292. package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
  293. package/ccw/dist/tools/cli-config-manager.d.ts +24 -8
  294. package/ccw/dist/tools/cli-config-manager.d.ts.map +1 -1
  295. package/ccw/dist/tools/cli-config-manager.js +76 -156
  296. package/ccw/dist/tools/cli-config-manager.js.map +1 -1
  297. package/ccw/dist/tools/cli-executor-core.d.ts +85 -0
  298. package/ccw/dist/tools/cli-executor-core.d.ts.map +1 -0
  299. package/ccw/dist/tools/cli-executor-core.js +1310 -0
  300. package/ccw/dist/tools/cli-executor-core.js.map +1 -0
  301. package/ccw/dist/tools/cli-executor-state.d.ts +241 -0
  302. package/ccw/dist/tools/cli-executor-state.d.ts.map +1 -0
  303. package/ccw/dist/tools/cli-executor-state.js +392 -0
  304. package/ccw/dist/tools/cli-executor-state.js.map +1 -0
  305. package/ccw/dist/tools/cli-executor-utils.d.ts +36 -0
  306. package/ccw/dist/tools/cli-executor-utils.d.ts.map +1 -0
  307. package/ccw/dist/tools/cli-executor-utils.js +298 -0
  308. package/ccw/dist/tools/cli-executor-utils.js.map +1 -0
  309. package/ccw/dist/tools/cli-executor.d.ts +3 -377
  310. package/ccw/dist/tools/cli-executor.d.ts.map +1 -1
  311. package/ccw/dist/tools/cli-executor.js +3 -1884
  312. package/ccw/dist/tools/cli-executor.js.map +1 -1
  313. package/ccw/dist/tools/cli-history-store.d.ts +2 -0
  314. package/ccw/dist/tools/cli-history-store.d.ts.map +1 -1
  315. package/ccw/dist/tools/cli-history-store.js.map +1 -1
  316. package/ccw/dist/tools/cli-output-converter.d.ts +192 -0
  317. package/ccw/dist/tools/cli-output-converter.d.ts.map +1 -0
  318. package/ccw/dist/tools/cli-output-converter.js +1047 -0
  319. package/ccw/dist/tools/cli-output-converter.js.map +1 -0
  320. package/ccw/dist/tools/cli-prompt-builder.d.ts +113 -0
  321. package/ccw/dist/tools/cli-prompt-builder.d.ts.map +1 -0
  322. package/ccw/dist/tools/cli-prompt-builder.js +363 -0
  323. package/ccw/dist/tools/cli-prompt-builder.js.map +1 -0
  324. package/ccw/dist/tools/codex-lens.d.ts +15 -1
  325. package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
  326. package/ccw/dist/tools/codex-lens.js +289 -55
  327. package/ccw/dist/tools/codex-lens.js.map +1 -1
  328. package/ccw/dist/tools/detect-changed-modules.d.ts.map +1 -1
  329. package/ccw/dist/tools/detect-changed-modules.js +22 -4
  330. package/ccw/dist/tools/detect-changed-modules.js.map +1 -1
  331. package/ccw/dist/tools/index.d.ts.map +1 -1
  332. package/ccw/dist/tools/index.js +2 -0
  333. package/ccw/dist/tools/index.js.map +1 -1
  334. package/ccw/dist/tools/litellm-client.d.ts.map +1 -1
  335. package/ccw/dist/tools/litellm-client.js +10 -4
  336. package/ccw/dist/tools/litellm-client.js.map +1 -1
  337. package/ccw/dist/tools/litellm-executor.d.ts +2 -4
  338. package/ccw/dist/tools/litellm-executor.d.ts.map +1 -1
  339. package/ccw/dist/tools/litellm-executor.js +39 -8
  340. package/ccw/dist/tools/litellm-executor.js.map +1 -1
  341. package/ccw/dist/tools/native-session-discovery.d.ts +2 -0
  342. package/ccw/dist/tools/native-session-discovery.d.ts.map +1 -1
  343. package/ccw/dist/tools/native-session-discovery.js +197 -1
  344. package/ccw/dist/tools/native-session-discovery.js.map +1 -1
  345. package/ccw/dist/tools/session-manager.d.ts.map +1 -1
  346. package/ccw/dist/tools/session-manager.js +79 -0
  347. package/ccw/dist/tools/session-manager.js.map +1 -1
  348. package/ccw/dist/tools/skill-context-loader.d.ts +15 -0
  349. package/ccw/dist/tools/skill-context-loader.d.ts.map +1 -0
  350. package/ccw/dist/tools/skill-context-loader.js +198 -0
  351. package/ccw/dist/tools/skill-context-loader.js.map +1 -0
  352. package/ccw/dist/tools/smart-search.d.ts +8 -3
  353. package/ccw/dist/tools/smart-search.d.ts.map +1 -1
  354. package/ccw/dist/tools/smart-search.js +378 -75
  355. package/ccw/dist/tools/smart-search.js.map +1 -1
  356. package/ccw/dist/types/cli-settings.d.ts +86 -0
  357. package/ccw/dist/types/cli-settings.d.ts.map +1 -0
  358. package/ccw/dist/types/cli-settings.js +54 -0
  359. package/ccw/dist/types/cli-settings.js.map +1 -0
  360. package/ccw/dist/types/litellm-api-config.d.ts +40 -1
  361. package/ccw/dist/types/litellm-api-config.d.ts.map +1 -1
  362. package/ccw/dist/utils/exec-constants.d.ts +25 -0
  363. package/ccw/dist/utils/exec-constants.d.ts.map +1 -0
  364. package/ccw/dist/utils/exec-constants.js +25 -0
  365. package/ccw/dist/utils/exec-constants.js.map +1 -0
  366. package/ccw/dist/utils/path-resolver.d.ts +1 -0
  367. package/ccw/dist/utils/path-resolver.d.ts.map +1 -1
  368. package/ccw/dist/utils/path-resolver.js +48 -3
  369. package/ccw/dist/utils/path-resolver.js.map +1 -1
  370. package/ccw/dist/utils/path-validator.d.ts.map +1 -1
  371. package/ccw/dist/utils/path-validator.js +25 -6
  372. package/ccw/dist/utils/path-validator.js.map +1 -1
  373. package/ccw/dist/utils/python-utils.d.ts.map +1 -1
  374. package/ccw/dist/utils/python-utils.js +27 -7
  375. package/ccw/dist/utils/python-utils.js.map +1 -1
  376. package/ccw/dist/utils/shell-escape.d.ts +8 -0
  377. package/ccw/dist/utils/shell-escape.d.ts.map +1 -0
  378. package/ccw/dist/utils/shell-escape.js +24 -0
  379. package/ccw/dist/utils/shell-escape.js.map +1 -0
  380. package/ccw/dist/utils/uv-manager.d.ts +167 -0
  381. package/ccw/dist/utils/uv-manager.d.ts.map +1 -0
  382. package/ccw/dist/utils/uv-manager.js +644 -0
  383. package/ccw/dist/utils/uv-manager.js.map +1 -0
  384. package/ccw/src/cli.ts +4 -1
  385. package/ccw/src/commands/cli.ts +132 -34
  386. package/ccw/src/commands/issue.ts +605 -91
  387. package/ccw/src/commands/serve.ts +15 -5
  388. package/ccw/src/commands/stop.ts +32 -5
  389. package/ccw/src/commands/tool.ts +17 -2
  390. package/ccw/src/commands/view.ts +13 -3
  391. package/ccw/src/config/cli-settings-manager.ts +460 -0
  392. package/ccw/src/config/litellm-api-config-manager.ts +392 -57
  393. package/ccw/src/core/auth/csrf-manager.ts +104 -0
  394. package/ccw/src/core/auth/csrf-middleware.ts +159 -0
  395. package/ccw/src/core/auth/middleware.ts +94 -0
  396. package/ccw/src/core/auth/token-manager.ts +219 -0
  397. package/ccw/src/core/cache-manager.ts +64 -52
  398. package/ccw/src/core/claude-freshness.ts +26 -6
  399. package/ccw/src/core/core-memory-store.ts +2 -1
  400. package/ccw/src/core/cors.ts +10 -0
  401. package/ccw/src/core/dashboard-generator-patch.ts +47 -48
  402. package/ccw/src/core/dashboard-generator.ts +797 -744
  403. package/ccw/src/core/data-aggregator.ts +667 -667
  404. package/ccw/src/core/lite-scanner.ts +156 -140
  405. package/ccw/src/core/routes/auth-routes.ts +98 -0
  406. package/ccw/src/core/routes/ccw-routes.ts +10 -20
  407. package/ccw/src/core/routes/claude-routes.ts +101 -51
  408. package/ccw/src/core/routes/cli-routes.ts +152 -55
  409. package/ccw/src/core/routes/cli-settings-routes.ts +232 -0
  410. package/ccw/src/core/routes/codexlens/README.md +37 -0
  411. package/ccw/src/core/routes/codexlens/config-handlers.ts +1269 -0
  412. package/ccw/src/core/routes/codexlens/index-handlers.ts +354 -0
  413. package/ccw/src/core/routes/codexlens/semantic-handlers.ts +931 -0
  414. package/ccw/src/core/routes/codexlens/utils.ts +96 -0
  415. package/ccw/src/core/routes/codexlens/watcher-handlers.ts +265 -0
  416. package/ccw/src/core/routes/codexlens-routes.ts +11 -1044
  417. package/ccw/src/core/routes/discovery-routes.ts +1 -12
  418. package/ccw/src/core/routes/files-routes.ts +112 -40
  419. package/ccw/src/core/routes/graph-routes.ts +39 -46
  420. package/ccw/src/core/routes/help-routes.ts +2 -12
  421. package/ccw/src/core/routes/hooks-routes.ts +83 -44
  422. package/ccw/src/core/routes/issue-routes.ts +1 -12
  423. package/ccw/src/core/routes/litellm-api-routes.ts +566 -60
  424. package/ccw/src/core/routes/litellm-routes.ts +35 -27
  425. package/ccw/src/core/routes/mcp-routes.ts +157 -60
  426. package/ccw/src/core/routes/mcp-routes.ts.backup +549 -550
  427. package/ccw/src/core/routes/mcp-templates-db.ts +267 -268
  428. package/ccw/src/core/routes/memory-routes.ts +76 -22
  429. package/ccw/src/core/routes/nav-status-routes.ts +231 -0
  430. package/ccw/src/core/routes/rules-routes.ts +600 -81
  431. package/ccw/src/core/routes/session-routes.ts +28 -22
  432. package/ccw/src/core/routes/skills-routes.ts +452 -132
  433. package/ccw/src/core/routes/status-routes.ts +1 -12
  434. package/ccw/src/core/routes/system-routes.ts +15 -22
  435. package/ccw/src/core/routes/types.ts +25 -0
  436. package/ccw/src/core/server.ts +651 -468
  437. package/ccw/src/core/services/api-key-tester.ts +137 -0
  438. package/ccw/src/core/services/health-check-service.ts +340 -0
  439. package/ccw/src/core/websocket.ts +20 -12
  440. package/ccw/src/templates/dashboard-css/01-base.css +109 -0
  441. package/ccw/src/templates/dashboard-css/10-cli-status.css +202 -0
  442. package/ccw/src/templates/dashboard-css/21-cli-toolmgmt.css +308 -0
  443. package/ccw/src/templates/dashboard-css/30-core-memory.css +20 -0
  444. package/ccw/src/templates/dashboard-css/31-api-settings.css +751 -14
  445. package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +230 -2
  446. package/ccw/src/templates/dashboard-js/api.js +5 -0
  447. package/ccw/src/templates/dashboard-js/components/cli-status.js +279 -107
  448. package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +262 -20
  449. package/ccw/src/templates/dashboard-js/components/hook-manager.js +105 -5
  450. package/ccw/src/templates/dashboard-js/components/mcp-manager.js +317 -0
  451. package/ccw/src/templates/dashboard-js/components/navigation.js +45 -0
  452. package/ccw/src/templates/dashboard-js/components/notifications.js +128 -0
  453. package/ccw/src/templates/dashboard-js/i18n.js +4438 -3983
  454. package/ccw/src/templates/dashboard-js/main.js +71 -0
  455. package/ccw/src/templates/dashboard-js/services.js +289 -0
  456. package/ccw/src/templates/dashboard-js/views/api-settings.js +5613 -3361
  457. package/ccw/src/templates/dashboard-js/views/claude-manager.js +1 -7
  458. package/ccw/src/templates/dashboard-js/views/cli-manager.js +581 -87
  459. package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +6091 -1965
  460. package/ccw/src/templates/dashboard-js/views/core-memory.js +129 -20
  461. package/ccw/src/templates/dashboard-js/views/hook-manager.js +17 -3
  462. package/ccw/src/templates/dashboard-js/views/mcp-manager.js +63 -0
  463. package/ccw/src/templates/dashboard-js/views/project-overview.js +182 -37
  464. package/ccw/src/templates/dashboard-js/views/rules-manager.js +26 -3
  465. package/ccw/src/templates/dashboard-js/views/skills-manager.js +2 -42
  466. package/ccw/src/templates/dashboard.html +6 -0
  467. package/ccw/src/tools/README.md +29 -0
  468. package/ccw/src/tools/claude-cli-tools.ts +640 -125
  469. package/ccw/src/tools/cli-config-manager.ts +102 -172
  470. package/ccw/src/tools/cli-executor-core.ts +1533 -0
  471. package/ccw/src/tools/cli-executor-state.ts +560 -0
  472. package/ccw/src/tools/cli-executor-utils.ts +349 -0
  473. package/ccw/src/tools/cli-executor.ts +3 -2309
  474. package/ccw/src/tools/cli-history-store.ts +2 -0
  475. package/ccw/src/tools/cli-output-converter.ts +1237 -0
  476. package/ccw/src/tools/cli-prompt-builder.ts +487 -0
  477. package/ccw/src/tools/codex-lens.ts +324 -59
  478. package/ccw/src/tools/detect-changed-modules.ts +24 -6
  479. package/ccw/src/tools/index.ts +2 -0
  480. package/ccw/src/tools/litellm-client.ts +10 -4
  481. package/ccw/src/tools/litellm-executor.ts +146 -114
  482. package/ccw/src/tools/native-session-discovery.ts +209 -1
  483. package/ccw/src/tools/session-manager.ts +88 -0
  484. package/ccw/src/tools/skill-context-loader.ts +213 -0
  485. package/ccw/src/tools/smart-search.ts +427 -76
  486. package/ccw/src/types/cli-settings.ts +137 -0
  487. package/ccw/src/types/litellm-api-config.ts +55 -1
  488. package/ccw/src/utils/exec-constants.ts +24 -0
  489. package/ccw/src/utils/path-resolver.ts +49 -3
  490. package/ccw/src/utils/path-validator.ts +28 -6
  491. package/ccw/src/utils/python-utils.ts +140 -121
  492. package/ccw/src/utils/shell-escape.ts +30 -0
  493. package/ccw/src/utils/uv-manager.ts +796 -0
  494. package/ccw-litellm/src/ccw_litellm/__pycache__/__init__.cpython-310.pyc +0 -0
  495. package/ccw-litellm/src/ccw_litellm/__pycache__/__init__.cpython-312.pyc +0 -0
  496. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/__init__.cpython-310.pyc +0 -0
  497. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/__init__.cpython-312.pyc +0 -0
  498. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-310.pyc +0 -0
  499. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-312.pyc +0 -0
  500. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
  501. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-310.pyc +0 -0
  502. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-312.pyc +0 -0
  503. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-313.pyc +0 -0
  504. package/ccw-litellm/src/ccw_litellm/clients/litellm_embedder.py +270 -251
  505. package/ccw-litellm/src/ccw_litellm/clients/litellm_llm.py +33 -0
  506. package/ccw-litellm/src/ccw_litellm/config/__pycache__/__init__.cpython-310.pyc +0 -0
  507. package/ccw-litellm/src/ccw_litellm/config/__pycache__/__init__.cpython-312.pyc +0 -0
  508. package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-310.pyc +0 -0
  509. package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-312.pyc +0 -0
  510. package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-313.pyc +0 -0
  511. package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-310.pyc +0 -0
  512. package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-312.pyc +0 -0
  513. package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-313.pyc +0 -0
  514. package/ccw-litellm/src/ccw_litellm/config/loader.py +343 -316
  515. package/ccw-litellm/src/ccw_litellm/config/models.py +162 -130
  516. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/__init__.cpython-310.pyc +0 -0
  517. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/__init__.cpython-312.pyc +0 -0
  518. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/embedder.cpython-310.pyc +0 -0
  519. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/embedder.cpython-312.pyc +0 -0
  520. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/llm.cpython-310.pyc +0 -0
  521. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/llm.cpython-312.pyc +0 -0
  522. package/codex-lens/pyproject.toml +43 -0
  523. package/codex-lens/src/codexlens/__pycache__/__init__.cpython-310.pyc +0 -0
  524. package/codex-lens/src/codexlens/__pycache__/__init__.cpython-312.pyc +0 -0
  525. package/codex-lens/src/codexlens/__pycache__/__main__.cpython-310.pyc +0 -0
  526. package/codex-lens/src/codexlens/__pycache__/__main__.cpython-312.pyc +0 -0
  527. package/codex-lens/src/codexlens/__pycache__/config.cpython-310.pyc +0 -0
  528. package/codex-lens/src/codexlens/__pycache__/config.cpython-312.pyc +0 -0
  529. package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
  530. package/codex-lens/src/codexlens/__pycache__/entities.cpython-310.pyc +0 -0
  531. package/codex-lens/src/codexlens/__pycache__/entities.cpython-312.pyc +0 -0
  532. package/codex-lens/src/codexlens/__pycache__/entities.cpython-313.pyc +0 -0
  533. package/codex-lens/src/codexlens/__pycache__/env_config.cpython-310.pyc +0 -0
  534. package/codex-lens/src/codexlens/__pycache__/env_config.cpython-312.pyc +0 -0
  535. package/codex-lens/src/codexlens/__pycache__/env_config.cpython-313.pyc +0 -0
  536. package/codex-lens/src/codexlens/__pycache__/errors.cpython-310.pyc +0 -0
  537. package/codex-lens/src/codexlens/__pycache__/errors.cpython-312.pyc +0 -0
  538. package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-310.pyc +0 -0
  539. package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-312.pyc +0 -0
  540. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-310.pyc +0 -0
  541. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-312.pyc +0 -0
  542. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-313.pyc +0 -0
  543. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-310.pyc +0 -0
  544. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-312.pyc +0 -0
  545. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-313.pyc +0 -0
  546. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-310.pyc +0 -0
  547. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-312.pyc +0 -0
  548. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-313.pyc +0 -0
  549. package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-310.pyc +0 -0
  550. package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-312.pyc +0 -0
  551. package/codex-lens/src/codexlens/cli/commands.py +4416 -2295
  552. package/codex-lens/src/codexlens/cli/embedding_manager.py +767 -14
  553. package/codex-lens/src/codexlens/cli/model_manager.py +676 -0
  554. package/codex-lens/src/codexlens/config.py +321 -12
  555. package/codex-lens/src/codexlens/entities.py +4 -1
  556. package/codex-lens/src/codexlens/env_config.py +298 -0
  557. package/codex-lens/src/codexlens/indexing/__init__.py +23 -1
  558. package/codex-lens/src/codexlens/indexing/__pycache__/__init__.cpython-313.pyc +0 -0
  559. package/codex-lens/src/codexlens/indexing/__pycache__/embedding.cpython-313.pyc +0 -0
  560. package/codex-lens/src/codexlens/indexing/__pycache__/symbol_extractor.cpython-313.pyc +0 -0
  561. package/codex-lens/src/codexlens/indexing/embedding.py +582 -0
  562. package/codex-lens/src/codexlens/indexing/symbol_extractor.py +62 -28
  563. package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-310.pyc +0 -0
  564. package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-312.pyc +0 -0
  565. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-310.pyc +0 -0
  566. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-312.pyc +0 -0
  567. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-313.pyc +0 -0
  568. package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-310.pyc +0 -0
  569. package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-312.pyc +0 -0
  570. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-310.pyc +0 -0
  571. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-312.pyc +0 -0
  572. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-313.pyc +0 -0
  573. package/codex-lens/src/codexlens/parsers/factory.py +139 -10
  574. package/codex-lens/src/codexlens/parsers/treesitter_parser.py +487 -13
  575. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-310.pyc +0 -0
  576. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-312.pyc +0 -0
  577. package/codex-lens/src/codexlens/search/__pycache__/binary_searcher.cpython-313.pyc +0 -0
  578. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-310.pyc +0 -0
  579. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-312.pyc +0 -0
  580. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
  581. package/codex-lens/src/codexlens/search/__pycache__/enrichment.cpython-313.pyc +0 -0
  582. package/codex-lens/src/codexlens/search/__pycache__/graph_expander.cpython-313.pyc +0 -0
  583. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-310.pyc +0 -0
  584. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-312.pyc +0 -0
  585. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
  586. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-310.pyc +0 -0
  587. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-312.pyc +0 -0
  588. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
  589. package/codex-lens/src/codexlens/search/binary_searcher.py +277 -0
  590. package/codex-lens/src/codexlens/search/chain_search.py +1642 -8
  591. package/codex-lens/src/codexlens/search/enrichment.py +21 -0
  592. package/codex-lens/src/codexlens/search/graph_expander.py +264 -0
  593. package/codex-lens/src/codexlens/search/hybrid_search.py +772 -37
  594. package/codex-lens/src/codexlens/search/ranking.py +347 -8
  595. package/codex-lens/src/codexlens/semantic/SPLADE_IMPLEMENTATION.md +225 -0
  596. package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-310.pyc +0 -0
  597. package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-312.pyc +0 -0
  598. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-310.pyc +0 -0
  599. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-312.pyc +0 -0
  600. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-313.pyc +0 -0
  601. package/codex-lens/src/codexlens/semantic/__pycache__/base.cpython-310.pyc +0 -0
  602. package/codex-lens/src/codexlens/semantic/__pycache__/base.cpython-312.pyc +0 -0
  603. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-310.pyc +0 -0
  604. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-312.pyc +0 -0
  605. package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-310.pyc +0 -0
  606. package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-312.pyc +0 -0
  607. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-310.pyc +0 -0
  608. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-312.pyc +0 -0
  609. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-313.pyc +0 -0
  610. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-310.pyc +0 -0
  611. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-312.pyc +0 -0
  612. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-313.pyc +0 -0
  613. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-310.pyc +0 -0
  614. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-312.pyc +0 -0
  615. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
  616. package/codex-lens/src/codexlens/semantic/__pycache__/reranker.cpython-313.pyc +0 -0
  617. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-310.pyc +0 -0
  618. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-312.pyc +0 -0
  619. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-313.pyc +0 -0
  620. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-310.pyc +0 -0
  621. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-312.pyc +0 -0
  622. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
  623. package/codex-lens/src/codexlens/semantic/ann_index.py +654 -0
  624. package/codex-lens/src/codexlens/semantic/factory.py +63 -3
  625. package/codex-lens/src/codexlens/semantic/gpu_support.py +19 -2
  626. package/codex-lens/src/codexlens/semantic/litellm_embedder.py +144 -144
  627. package/codex-lens/src/codexlens/semantic/reranker/__init__.py +25 -0
  628. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-310.pyc +0 -0
  629. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-313.pyc +0 -0
  630. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-310.pyc +0 -0
  631. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-313.pyc +0 -0
  632. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-310.pyc +0 -0
  633. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-313.pyc +0 -0
  634. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-310.pyc +0 -0
  635. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-313.pyc +0 -0
  636. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-310.pyc +0 -0
  637. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-313.pyc +0 -0
  638. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-310.pyc +0 -0
  639. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-313.pyc +0 -0
  640. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/litellm_reranker.cpython-313.pyc +0 -0
  641. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-310.pyc +0 -0
  642. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-313.pyc +0 -0
  643. package/codex-lens/src/codexlens/semantic/reranker/api_reranker.py +403 -0
  644. package/codex-lens/src/codexlens/semantic/reranker/base.py +46 -0
  645. package/codex-lens/src/codexlens/semantic/reranker/factory.py +159 -0
  646. package/codex-lens/src/codexlens/semantic/reranker/fastembed_reranker.py +257 -0
  647. package/codex-lens/src/codexlens/semantic/reranker/legacy.py +91 -0
  648. package/codex-lens/src/codexlens/semantic/reranker/litellm_reranker.py +214 -0
  649. package/codex-lens/src/codexlens/semantic/reranker/onnx_reranker.py +268 -0
  650. package/codex-lens/src/codexlens/semantic/splade_encoder.py +567 -0
  651. package/codex-lens/src/codexlens/semantic/vector_store.py +472 -352
  652. package/codex-lens/src/codexlens/storage/__init__.py +3 -0
  653. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-310.pyc +0 -0
  654. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-312.pyc +0 -0
  655. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-313.pyc +0 -0
  656. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-310.pyc +0 -0
  657. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-312.pyc +0 -0
  658. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
  659. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-310.pyc +0 -0
  660. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-312.pyc +0 -0
  661. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-310.pyc +0 -0
  662. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-312.pyc +0 -0
  663. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
  664. package/codex-lens/src/codexlens/storage/__pycache__/merkle_tree.cpython-313.pyc +0 -0
  665. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-310.pyc +0 -0
  666. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-312.pyc +0 -0
  667. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-310.pyc +0 -0
  668. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-312.pyc +0 -0
  669. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-310.pyc +0 -0
  670. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-312.pyc +0 -0
  671. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-313.pyc +0 -0
  672. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-310.pyc +0 -0
  673. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-312.pyc +0 -0
  674. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-313.pyc +0 -0
  675. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-310.pyc +0 -0
  676. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-312.pyc +0 -0
  677. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-310.pyc +0 -0
  678. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-312.pyc +0 -0
  679. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-313.pyc +0 -0
  680. package/codex-lens/src/codexlens/storage/dir_index.py +310 -12
  681. package/codex-lens/src/codexlens/storage/index_tree.py +194 -23
  682. package/codex-lens/src/codexlens/storage/merkle_tree.py +136 -0
  683. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-310.pyc +0 -0
  684. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-312.pyc +0 -0
  685. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_006_enhance_relationships.cpython-313.pyc +0 -0
  686. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-310.pyc +0 -0
  687. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-312.pyc +0 -0
  688. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-313.pyc +0 -0
  689. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_008_add_merkle_hashes.cpython-313.pyc +0 -0
  690. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_009_add_splade.cpython-313.pyc +0 -0
  691. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_010_add_multi_vector_chunks.cpython-313.pyc +0 -0
  692. package/codex-lens/src/codexlens/storage/migrations/migration_006_enhance_relationships.py +37 -0
  693. package/codex-lens/src/codexlens/storage/migrations/migration_007_add_graph_neighbors.py +47 -0
  694. package/codex-lens/src/codexlens/storage/migrations/migration_008_add_merkle_hashes.py +81 -0
  695. package/codex-lens/src/codexlens/storage/migrations/migration_009_add_splade.py +103 -0
  696. package/codex-lens/src/codexlens/storage/migrations/migration_010_add_multi_vector_chunks.py +162 -0
  697. package/codex-lens/src/codexlens/storage/splade_index.py +578 -0
  698. package/codex-lens/src/codexlens/storage/sqlite_store.py +508 -184
  699. package/codex-lens/src/codexlens/storage/vector_meta_store.py +415 -0
  700. package/codex-lens/src/codexlens/watcher/__init__.py +17 -0
  701. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-310.pyc +0 -0
  702. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-312.pyc +0 -0
  703. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-313.pyc +0 -0
  704. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-310.pyc +0 -0
  705. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-312.pyc +0 -0
  706. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-313.pyc +0 -0
  707. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-310.pyc +0 -0
  708. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-312.pyc +0 -0
  709. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-313.pyc +0 -0
  710. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-310.pyc +0 -0
  711. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-312.pyc +0 -0
  712. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-313.pyc +0 -0
  713. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-310.pyc +0 -0
  714. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-312.pyc +0 -0
  715. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-313.pyc +0 -0
  716. package/codex-lens/src/codexlens/watcher/events.py +82 -0
  717. package/codex-lens/src/codexlens/watcher/file_watcher.py +347 -0
  718. package/codex-lens/src/codexlens/watcher/incremental_indexer.py +369 -0
  719. package/codex-lens/src/codexlens/watcher/manager.py +255 -0
  720. package/package.json +4 -1
  721. package/.claude/commands/workflow/docs/analyze.md +0 -1467
  722. package/.claude/commands/workflow/docs/copyright.md +0 -1265
  723. package/.claude/skills/command-guide/SKILL.md +0 -388
  724. package/.claude/skills/command-guide/UPDATE-GUIDELINE.md +0 -592
  725. package/.claude/skills/command-guide/guides/cli-tools-guide.md +0 -410
  726. package/.claude/skills/command-guide/guides/examples.md +0 -537
  727. package/.claude/skills/command-guide/guides/getting-started.md +0 -242
  728. package/.claude/skills/command-guide/guides/implementation-details.md +0 -1010
  729. package/.claude/skills/command-guide/guides/index-structure.md +0 -326
  730. package/.claude/skills/command-guide/guides/troubleshooting.md +0 -92
  731. package/.claude/skills/command-guide/guides/ui-design-workflow-guide.md +0 -316
  732. package/.claude/skills/command-guide/guides/workflow-patterns.md +0 -662
  733. package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +0 -855
  734. package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +0 -267
  735. package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +0 -182
  736. package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +0 -446
  737. package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +0 -558
  738. package/.claude/skills/command-guide/reference/agents/code-developer.md +0 -311
  739. package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +0 -308
  740. package/.claude/skills/command-guide/reference/agents/context-search-agent.md +0 -581
  741. package/.claude/skills/command-guide/reference/agents/doc-generator.md +0 -330
  742. package/.claude/skills/command-guide/reference/agents/memory-bridge.md +0 -94
  743. package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +0 -400
  744. package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +0 -344
  745. package/.claude/skills/command-guide/reference/agents/ui-design-agent.md +0 -593
  746. package/.claude/skills/command-guide/reference/agents/universal-executor.md +0 -131
  747. package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +0 -440
  748. package/.claude/skills/command-guide/reference/commands/enhance-prompt.md +0 -93
  749. package/.claude/skills/command-guide/reference/commands/memory/code-map-memory.md +0 -687
  750. package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +0 -471
  751. package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +0 -386
  752. package/.claude/skills/command-guide/reference/commands/memory/docs.md +0 -616
  753. package/.claude/skills/command-guide/reference/commands/memory/load-skill-memory.md +0 -182
  754. package/.claude/skills/command-guide/reference/commands/memory/load.md +0 -240
  755. package/.claude/skills/command-guide/reference/commands/memory/skill-memory.md +0 -525
  756. package/.claude/skills/command-guide/reference/commands/memory/style-skill-memory.md +0 -396
  757. package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +0 -314
  758. package/.claude/skills/command-guide/reference/commands/memory/update-full.md +0 -332
  759. package/.claude/skills/command-guide/reference/commands/memory/update-related.md +0 -332
  760. package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +0 -517
  761. package/.claude/skills/command-guide/reference/commands/task/breakdown.md +0 -204
  762. package/.claude/skills/command-guide/reference/commands/task/create.md +0 -152
  763. package/.claude/skills/command-guide/reference/commands/task/execute.md +0 -270
  764. package/.claude/skills/command-guide/reference/commands/task/replan.md +0 -437
  765. package/.claude/skills/command-guide/reference/commands/version.md +0 -254
  766. package/.claude/skills/command-guide/reference/commands/workflow/action-plan-verify.md +0 -447
  767. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +0 -585
  768. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +0 -452
  769. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +0 -443
  770. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +0 -220
  771. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +0 -200
  772. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +0 -200
  773. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +0 -200
  774. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +0 -200
  775. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +0 -398
  776. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +0 -387
  777. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +0 -221
  778. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +0 -221
  779. package/.claude/skills/command-guide/reference/commands/workflow/execute.md +0 -465
  780. package/.claude/skills/command-guide/reference/commands/workflow/init.md +0 -164
  781. package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +0 -748
  782. package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +0 -664
  783. package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +0 -645
  784. package/.claude/skills/command-guide/reference/commands/workflow/plan.md +0 -551
  785. package/.claude/skills/command-guide/reference/commands/workflow/replan.md +0 -515
  786. package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +0 -606
  787. package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +0 -765
  788. package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +0 -776
  789. package/.claude/skills/command-guide/reference/commands/workflow/review.md +0 -298
  790. package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +0 -547
  791. package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +0 -114
  792. package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +0 -77
  793. package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +0 -257
  794. package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +0 -460
  795. package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +0 -400
  796. package/.claude/skills/command-guide/reference/commands/workflow/test-cycle-execute.md +0 -498
  797. package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +0 -699
  798. package/.claude/skills/command-guide/reference/commands/workflow/test-gen.md +0 -529
  799. package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +0 -766
  800. package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +0 -433
  801. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +0 -487
  802. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +0 -518
  803. package/.claude/skills/command-guide/reference/commands/workflow/tools/tdd-coverage-analysis.md +0 -309
  804. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +0 -163
  805. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-context-gather.md +0 -232
  806. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +0 -254
  807. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/animation-extract.md +0 -1150
  808. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/codify-style.md +0 -652
  809. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/design-sync.md +0 -454
  810. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/explore-auto.md +0 -678
  811. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +0 -504
  812. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/imitate-auto.md +0 -745
  813. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +0 -537
  814. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/layout-extract.md +0 -788
  815. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/reference-page-generator.md +0 -356
  816. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/style-extract.md +0 -773
  817. package/.claude/skills/command-guide/scripts/analyze_commands.py +0 -502
  818. package/.claude/skills/command-guide/scripts/update-index.sh +0 -130
  819. package/.claude/skills/command-guide/templates/issue-bug.md +0 -104
  820. package/.claude/skills/command-guide/templates/issue-diagnosis.md +0 -275
  821. package/.claude/skills/command-guide/templates/issue-feature.md +0 -97
  822. package/.claude/skills/command-guide/templates/issue-question.md +0 -141
@@ -2,21 +2,25 @@
2
2
  * Smart Search Tool - Unified intelligent search with CodexLens integration
3
3
  *
4
4
  * Features:
5
- * - Intent classification with automatic mode selection
6
- * - CodexLens integration (init, hybrid, vector, semantic)
5
+ * - Fuzzy mode: FTS + ripgrep fusion with RRF ranking (default)
6
+ * - Semantic mode: Dense coarse retrieval + cross-encoder reranking
7
+ * - CodexLens integration (init, dense_rerank, fts)
7
8
  * - Ripgrep fallback for exact mode
8
9
  * - Index status checking and warnings
9
10
  * - Multi-backend search routing with RRF ranking
10
11
  *
11
12
  * Actions:
12
13
  * - init: Initialize CodexLens index
13
- * - search: Intelligent search with auto mode selection
14
+ * - search: Intelligent search with fuzzy (default) or semantic mode
14
15
  * - status: Check index status
16
+ * - update: Incremental index update for changed files
17
+ * - watch: Start file watcher for automatic updates
15
18
  */
16
19
  import { z } from 'zod';
17
20
  import { spawn, execSync } from 'child_process';
18
21
  import { ensureReady as ensureCodexLensReady, executeCodexLens, } from './codex-lens.js';
19
22
  import { getProjectRoot } from '../utils/path-validator.js';
23
+ import { EXEC_TIMEOUTS } from '../utils/exec-constants.js';
20
24
  // Timing utilities for performance analysis
21
25
  const TIMING_ENABLED = process.env.SMART_SEARCH_TIMING === '1' || process.env.DEBUG?.includes('timing');
22
26
  function createTimer() {
@@ -45,12 +49,13 @@ function createTimer() {
45
49
  }
46
50
  // Define Zod schema for validation
47
51
  const ParamsSchema = z.object({
48
- // Action: search (content), find_files (path/name pattern), init, status
52
+ // Action: search (content), find_files (path/name pattern), init, init_force, status, update (incremental), watch
49
53
  // Note: search_files is deprecated, use search with output_mode='files_only'
50
- action: z.enum(['init', 'search', 'search_files', 'find_files', 'status']).default('search'),
54
+ // init: incremental index (skip existing), init_force: force full rebuild (delete and recreate)
55
+ action: z.enum(['init', 'init_force', 'search', 'search_files', 'find_files', 'status', 'update', 'watch']).default('search'),
51
56
  query: z.string().optional().describe('Content search query (for action="search")'),
52
57
  pattern: z.string().optional().describe('Glob pattern for path matching (for action="find_files")'),
53
- mode: z.enum(['auto', 'hybrid', 'exact', 'ripgrep', 'priority']).default('auto'),
58
+ mode: z.enum(['fuzzy', 'semantic']).default('fuzzy'),
54
59
  output_mode: z.enum(['full', 'files_only', 'count']).default('full'),
55
60
  path: z.string().optional(),
56
61
  paths: z.array(z.string()).default([]),
@@ -67,13 +72,16 @@ const ParamsSchema = z.object({
67
72
  regex: z.boolean().default(true), // Use regex pattern matching (default: enabled)
68
73
  caseSensitive: z.boolean().default(true), // Case sensitivity (default: case-sensitive)
69
74
  tokenize: z.boolean().default(true), // Tokenize multi-word queries for OR matching (default: enabled)
70
- // File type filtering
75
+ // File type filtering (default: code only)
71
76
  excludeExtensions: z.array(z.string()).optional().describe('File extensions to exclude from results (e.g., ["md", "txt"])'),
72
- codeOnly: z.boolean().default(false).describe('Only return code files (excludes md, txt, json, yaml, xml, etc.)'),
77
+ codeOnly: z.boolean().default(true).describe('Only return code files (excludes md, txt, json, yaml, xml, etc.). Default: true'),
78
+ withDoc: z.boolean().default(false).describe('Include documentation files (md, txt, rst, etc.). Overrides codeOnly when true'),
79
+ // Watcher options
80
+ debounce: z.number().default(1000).describe('Debounce interval in ms for watch action'),
73
81
  // Fuzzy matching is implicit in hybrid mode (RRF fusion)
74
82
  });
75
83
  // Search mode constants
76
- const SEARCH_MODES = ['auto', 'hybrid', 'exact', 'ripgrep', 'priority'];
84
+ const SEARCH_MODES = ['fuzzy', 'semantic'];
77
85
  // Classification confidence threshold
78
86
  const CONFIDENCE_THRESHOLD = 0.7;
79
87
  // File filtering configuration (ported from code-index)
@@ -230,18 +238,45 @@ function splitResultsWithExtraFiles(allResults, fullContentLimit = 5, extraFiles
230
238
  */
231
239
  async function checkIndexStatus(path = '.') {
232
240
  try {
233
- const result = await executeCodexLens(['status', '--json'], { cwd: path });
234
- if (!result.success) {
241
+ // Fetch both status and config in parallel
242
+ const [statusResult, configResult] = await Promise.all([
243
+ executeCodexLens(['status', '--json'], { cwd: path }),
244
+ executeCodexLens(['config', 'show', '--json'], { cwd: path }),
245
+ ]);
246
+ // Parse config
247
+ let config = null;
248
+ if (configResult.success && configResult.output) {
249
+ try {
250
+ const cleanConfigOutput = stripAnsi(configResult.output);
251
+ const parsedConfig = JSON.parse(cleanConfigOutput);
252
+ const configData = parsedConfig.result || parsedConfig;
253
+ config = {
254
+ config_file: configData.config_file,
255
+ index_dir: configData.index_dir,
256
+ embedding_backend: configData.embedding_backend,
257
+ embedding_model: configData.embedding_model,
258
+ reranker_enabled: configData.reranker_enabled,
259
+ reranker_backend: configData.reranker_backend,
260
+ reranker_model: configData.reranker_model,
261
+ reranker_top_k: configData.reranker_top_k,
262
+ };
263
+ }
264
+ catch {
265
+ // Config parse failed, continue without it
266
+ }
267
+ }
268
+ if (!statusResult.success) {
235
269
  return {
236
270
  indexed: false,
237
271
  has_embeddings: false,
272
+ config,
238
273
  warning: 'No CodexLens index found. Run smart_search(action="init") to create index for better search results.',
239
274
  };
240
275
  }
241
276
  // Parse status output
242
277
  try {
243
278
  // Strip ANSI color codes from JSON output
244
- const cleanOutput = stripAnsi(result.output || '{}');
279
+ const cleanOutput = stripAnsi(statusResult.output || '{}');
245
280
  const parsed = JSON.parse(cleanOutput);
246
281
  // Handle both direct and nested response formats (status returns {success, result: {...}})
247
282
  const status = parsed.result || parsed;
@@ -279,6 +314,7 @@ async function checkIndexStatus(path = '.') {
279
314
  total_chunks: totalChunks,
280
315
  // Ensure model_info is null instead of undefined so it's included in JSON
281
316
  model_info: modelInfo ?? null,
317
+ config,
282
318
  warning,
283
319
  };
284
320
  }
@@ -286,6 +322,7 @@ async function checkIndexStatus(path = '.') {
286
322
  return {
287
323
  indexed: false,
288
324
  has_embeddings: false,
325
+ config,
289
326
  warning: 'Failed to parse index status',
290
327
  };
291
328
  }
@@ -397,7 +434,7 @@ function checkToolAvailability(toolName) {
397
434
  try {
398
435
  const isWindows = process.platform === 'win32';
399
436
  const command = isWindows ? 'where' : 'which';
400
- execSync(`${command} ${toolName}`, { stdio: 'ignore' });
437
+ execSync(`${command} ${toolName}`, { stdio: 'ignore', timeout: EXEC_TIMEOUTS.SYSTEM_INFO });
401
438
  return true;
402
439
  }
403
440
  catch {
@@ -465,8 +502,10 @@ function buildRipgrepCommand(params) {
465
502
  /**
466
503
  * Action: init - Initialize CodexLens index (FTS only, no embeddings)
467
504
  * For semantic/vector search, use ccw view dashboard or codexlens CLI directly
505
+ * @param params - Search parameters
506
+ * @param force - If true, force full rebuild (delete existing index first)
468
507
  */
469
- async function executeInitAction(params) {
508
+ async function executeInitAction(params, force = false) {
470
509
  const { path = '.', languages } = params;
471
510
  // Check CodexLens availability
472
511
  const readyStatus = await ensureCodexLensReady();
@@ -477,9 +516,13 @@ async function executeInitAction(params) {
477
516
  };
478
517
  }
479
518
  // Build args with --no-embeddings for FTS-only index (faster)
480
- const args = ['init', path, '--no-embeddings'];
519
+ // Use 'index init' subcommand (new CLI structure)
520
+ const args = ['index', 'init', path, '--no-embeddings'];
521
+ if (force) {
522
+ args.push('--force'); // Force full rebuild
523
+ }
481
524
  if (languages && languages.length > 0) {
482
- args.push('--languages', languages.join(','));
525
+ args.push('--language', languages.join(','));
483
526
  }
484
527
  // Track progress updates
485
528
  const progressUpdates = [];
@@ -494,7 +537,7 @@ async function executeInitAction(params) {
494
537
  });
495
538
  // Build metadata with progress info
496
539
  const metadata = {
497
- action: 'init',
540
+ action: force ? 'init_force' : 'init',
498
541
  path,
499
542
  };
500
543
  if (lastProgress !== null) {
@@ -510,8 +553,9 @@ async function executeInitAction(params) {
510
553
  if (progressUpdates.length > 0) {
511
554
  metadata.progressHistory = progressUpdates.slice(-5); // Keep last 5 progress updates
512
555
  }
556
+ const actionLabel = force ? 'rebuilt (force)' : 'created';
513
557
  const successMessage = result.success
514
- ? `FTS index created for ${path}. Note: For semantic/vector search, create vector index via "ccw view" dashboard or run "codexlens init ${path}" (without --no-embeddings).`
558
+ ? `FTS index ${actionLabel} for ${path}. Note: For semantic/vector search, create vector index via "ccw view" dashboard or run "codexlens init ${path}" (without --no-embeddings).`
515
559
  : undefined;
516
560
  return {
517
561
  success: result.success,
@@ -526,10 +570,228 @@ async function executeInitAction(params) {
526
570
  async function executeStatusAction(params) {
527
571
  const { path = '.' } = params;
528
572
  const indexStatus = await checkIndexStatus(path);
573
+ // Build detailed status message
574
+ const statusParts = [];
575
+ // Index status
576
+ statusParts.push(`Index: ${indexStatus.indexed ? 'indexed' : 'not indexed'}`);
577
+ if (indexStatus.file_count) {
578
+ statusParts.push(`Files: ${indexStatus.file_count}`);
579
+ }
580
+ // Embeddings status
581
+ if (indexStatus.embeddings_coverage_percent !== undefined) {
582
+ statusParts.push(`Embeddings: ${indexStatus.embeddings_coverage_percent.toFixed(1)}%`);
583
+ }
584
+ if (indexStatus.total_chunks) {
585
+ statusParts.push(`Chunks: ${indexStatus.total_chunks}`);
586
+ }
587
+ // Config summary
588
+ if (indexStatus.config) {
589
+ const cfg = indexStatus.config;
590
+ // Embedding backend info
591
+ const embeddingType = cfg.embedding_backend === 'litellm' ? 'API' : 'Local';
592
+ statusParts.push(`Embedding: ${embeddingType} (${cfg.embedding_model || 'default'})`);
593
+ // Reranker info
594
+ if (cfg.reranker_enabled) {
595
+ const rerankerType = cfg.reranker_backend === 'onnx' ? 'Local' : 'API';
596
+ statusParts.push(`Reranker: ${rerankerType} (${cfg.reranker_model || 'default'})`);
597
+ }
598
+ else {
599
+ statusParts.push('Reranker: disabled');
600
+ }
601
+ }
529
602
  return {
530
603
  success: true,
531
604
  status: indexStatus,
532
- message: indexStatus.warning || `Index status: ${indexStatus.indexed ? 'indexed' : 'not indexed'}, embeddings: ${indexStatus.has_embeddings ? 'available' : 'not available'}`,
605
+ message: indexStatus.warning || statusParts.join(' | '),
606
+ };
607
+ }
608
+ /**
609
+ * Action: update - Incremental index update
610
+ * Updates index for changed files without full rebuild
611
+ */
612
+ async function executeUpdateAction(params) {
613
+ const { path = '.', languages } = params;
614
+ // Check CodexLens availability
615
+ const readyStatus = await ensureCodexLensReady();
616
+ if (!readyStatus.ready) {
617
+ return {
618
+ success: false,
619
+ error: `CodexLens not available: ${readyStatus.error}`,
620
+ };
621
+ }
622
+ // Check if index exists first
623
+ const indexStatus = await checkIndexStatus(path);
624
+ if (!indexStatus.indexed) {
625
+ return {
626
+ success: false,
627
+ error: `Directory not indexed. Run smart_search(action="init") first.`,
628
+ };
629
+ }
630
+ // Build args for incremental init (without --force)
631
+ // Use 'index init' subcommand (new CLI structure)
632
+ const args = ['index', 'init', path];
633
+ if (languages && languages.length > 0) {
634
+ args.push('--language', languages.join(','));
635
+ }
636
+ // Track progress updates
637
+ const progressUpdates = [];
638
+ let lastProgress = null;
639
+ const result = await executeCodexLens(args, {
640
+ cwd: path,
641
+ timeout: 600000, // 10 minutes for incremental updates
642
+ onProgress: (progress) => {
643
+ progressUpdates.push(progress);
644
+ lastProgress = progress;
645
+ },
646
+ });
647
+ // Build metadata with progress info
648
+ const metadata = {
649
+ action: 'update',
650
+ path,
651
+ };
652
+ if (lastProgress !== null) {
653
+ const p = lastProgress;
654
+ metadata.progress = {
655
+ stage: p.stage,
656
+ message: p.message,
657
+ percent: p.percent,
658
+ filesProcessed: p.filesProcessed,
659
+ totalFiles: p.totalFiles,
660
+ };
661
+ }
662
+ if (progressUpdates.length > 0) {
663
+ metadata.progressHistory = progressUpdates.slice(-5);
664
+ }
665
+ return {
666
+ success: result.success,
667
+ error: result.error,
668
+ message: result.success
669
+ ? `Incremental update completed for ${path}`
670
+ : undefined,
671
+ metadata,
672
+ };
673
+ }
674
+ /**
675
+ * Action: watch - Start file watcher for automatic incremental updates
676
+ * Note: This starts a background process, returns immediately with status
677
+ */
678
+ async function executeWatchAction(params) {
679
+ const { path = '.', languages, debounce = 1000 } = params;
680
+ // Check CodexLens availability
681
+ const readyStatus = await ensureCodexLensReady();
682
+ if (!readyStatus.ready) {
683
+ return {
684
+ success: false,
685
+ error: `CodexLens not available: ${readyStatus.error}`,
686
+ };
687
+ }
688
+ // Check if index exists first
689
+ const indexStatus = await checkIndexStatus(path);
690
+ if (!indexStatus.indexed) {
691
+ return {
692
+ success: false,
693
+ error: `Directory not indexed. Run smart_search(action="init") first.`,
694
+ };
695
+ }
696
+ // Build args for watch command
697
+ const args = ['watch', path, '--debounce', debounce.toString()];
698
+ if (languages && languages.length > 0) {
699
+ args.push('--language', languages.join(','));
700
+ }
701
+ // Start watcher in background (non-blocking)
702
+ // Note: The watcher runs until manually stopped
703
+ const result = await executeCodexLens(args, {
704
+ cwd: path,
705
+ timeout: 5000, // Short timeout for initial startup check
706
+ });
707
+ return {
708
+ success: true,
709
+ message: `File watcher started for ${path}. Use Ctrl+C or kill the process to stop.`,
710
+ metadata: {
711
+ action: 'watch',
712
+ path,
713
+ note: 'Watcher runs in background. Changes are indexed automatically with debounce.',
714
+ },
715
+ };
716
+ }
717
+ /**
718
+ * Mode: fuzzy - FTS + ripgrep fusion with RRF ranking
719
+ * Runs both exact (FTS) and ripgrep searches in parallel, merges and ranks results
720
+ */
721
+ async function executeFuzzyMode(params) {
722
+ const { query, path = '.', maxResults = 5, extraFilesCount = 10, codeOnly = true, withDoc = false, excludeExtensions } = params;
723
+ // withDoc overrides codeOnly
724
+ const effectiveCodeOnly = withDoc ? false : codeOnly;
725
+ if (!query) {
726
+ return {
727
+ success: false,
728
+ error: 'Query is required for search',
729
+ };
730
+ }
731
+ const timer = createTimer();
732
+ // Run both searches in parallel
733
+ const [ftsResult, ripgrepResult] = await Promise.allSettled([
734
+ executeCodexLensExactMode(params),
735
+ executeRipgrepMode(params),
736
+ ]);
737
+ timer.mark('parallel_search');
738
+ // Collect results from both sources
739
+ const resultsMap = new Map();
740
+ // Add FTS results if successful
741
+ if (ftsResult.status === 'fulfilled' && ftsResult.value.success && ftsResult.value.results) {
742
+ resultsMap.set('exact', ftsResult.value.results);
743
+ }
744
+ // Add ripgrep results if successful
745
+ if (ripgrepResult.status === 'fulfilled' && ripgrepResult.value.success && ripgrepResult.value.results) {
746
+ resultsMap.set('ripgrep', ripgrepResult.value.results);
747
+ }
748
+ // If both failed, return error
749
+ if (resultsMap.size === 0) {
750
+ const errors = [];
751
+ if (ftsResult.status === 'rejected')
752
+ errors.push(`FTS: ${ftsResult.reason}`);
753
+ if (ripgrepResult.status === 'rejected')
754
+ errors.push(`Ripgrep: ${ripgrepResult.reason}`);
755
+ return {
756
+ success: false,
757
+ error: `Both search backends failed: ${errors.join('; ')}`,
758
+ };
759
+ }
760
+ // Apply RRF fusion with fuzzy-optimized weights
761
+ // Fuzzy mode: balanced between exact and ripgrep
762
+ const fusionWeights = { exact: 0.5, ripgrep: 0.5 };
763
+ const totalToFetch = maxResults + extraFilesCount;
764
+ const fusedResults = applyRRFFusion(resultsMap, fusionWeights, totalToFetch);
765
+ timer.mark('rrf_fusion');
766
+ // Apply code-only and extension filtering after fusion
767
+ const filteredFusedResults = filterNoisyFiles(fusedResults, { codeOnly: effectiveCodeOnly, excludeExtensions });
768
+ // Normalize results format
769
+ const normalizedResults = filteredFusedResults.map((item) => ({
770
+ file: item.file || item.path,
771
+ line: item.line || 0,
772
+ column: item.column || 0,
773
+ content: item.content || '',
774
+ score: item.fusion_score || 0,
775
+ matchCount: item.matchCount,
776
+ matchScore: item.matchScore,
777
+ }));
778
+ // Split results: first N with full content, rest as file paths only
779
+ const { results, extra_files } = splitResultsWithExtraFiles(normalizedResults, maxResults, extraFilesCount);
780
+ // Log timing
781
+ timer.log();
782
+ const timings = timer.getTimings();
783
+ return {
784
+ success: true,
785
+ results,
786
+ extra_files: extra_files.length > 0 ? extra_files : undefined,
787
+ metadata: {
788
+ mode: 'fuzzy',
789
+ backend: 'fts+ripgrep',
790
+ count: results.length,
791
+ query,
792
+ note: `Fuzzy search using RRF fusion of FTS and ripgrep (weights: exact=${fusionWeights.exact}, ripgrep=${fusionWeights.ripgrep})`,
793
+ timing: TIMING_ENABLED ? timings : undefined,
794
+ },
533
795
  };
534
796
  }
535
797
  /**
@@ -588,7 +850,9 @@ async function executeAutoMode(params) {
588
850
  * Supports tokenized multi-word queries with OR matching and result ranking
589
851
  */
590
852
  async function executeRipgrepMode(params) {
591
- const { query, paths = [], contextLines = 0, maxResults = 5, extraFilesCount = 10, maxContentLength = 200, includeHidden = false, path = '.', regex = true, caseSensitive = true, tokenize = true } = params;
853
+ const { query, paths = [], contextLines = 0, maxResults = 5, extraFilesCount = 10, maxContentLength = 200, includeHidden = false, path = '.', regex = true, caseSensitive = true, tokenize = true, codeOnly = true, withDoc = false, excludeExtensions } = params;
854
+ // withDoc overrides codeOnly
855
+ const effectiveCodeOnly = withDoc ? false : codeOnly;
592
856
  if (!query) {
593
857
  return {
594
858
  success: false,
@@ -608,8 +872,8 @@ async function executeRipgrepMode(params) {
608
872
  error: 'Neither ripgrep nor CodexLens available. Install ripgrep (rg) or CodexLens for search functionality.',
609
873
  };
610
874
  }
611
- // Use CodexLens exact mode as fallback
612
- const args = ['search', query, '--limit', totalToFetch.toString(), '--mode', 'exact', '--json'];
875
+ // Use CodexLens fts mode as fallback
876
+ const args = ['search', query, '--limit', totalToFetch.toString(), '--method', 'fts', '--json'];
613
877
  const result = await executeCodexLens(args, { cwd: path });
614
878
  if (!result.success) {
615
879
  return {
@@ -713,9 +977,11 @@ async function executeRipgrepMode(params) {
713
977
  // Apply token-based scoring and sorting for multi-word queries
714
978
  // Results matching more tokens are ranked higher (exact matches first)
715
979
  const scoredResults = tokens.length > 1 ? scoreByTokenMatch(allResults, tokens) : allResults;
716
- if (code === 0 || code === 1 || (isWindowsDeviceError && scoredResults.length > 0)) {
980
+ // Apply code-only and extension filtering
981
+ const filteredResults = filterNoisyFiles(scoredResults, { codeOnly: effectiveCodeOnly, excludeExtensions });
982
+ if (code === 0 || code === 1 || (isWindowsDeviceError && filteredResults.length > 0)) {
717
983
  // Split results: first N with full content, rest as file paths only
718
- const { results, extra_files } = splitResultsWithExtraFiles(scoredResults, maxResults, extraFilesCount);
984
+ const { results, extra_files } = splitResultsWithExtraFiles(filteredResults, maxResults, extraFilesCount);
719
985
  // Build warning message for various conditions
720
986
  const warnings = [];
721
987
  if (resultLimitReached) {
@@ -775,7 +1041,9 @@ async function executeRipgrepMode(params) {
775
1041
  * Requires index
776
1042
  */
777
1043
  async function executeCodexLensExactMode(params) {
778
- const { query, path = '.', maxResults = 5, extraFilesCount = 10, maxContentLength = 200, enrich = false } = params;
1044
+ const { query, path = '.', maxResults = 5, extraFilesCount = 10, maxContentLength = 200, enrich = false, excludeExtensions, codeOnly = true, withDoc = false, offset = 0 } = params;
1045
+ // withDoc overrides codeOnly
1046
+ const effectiveCodeOnly = withDoc ? false : codeOnly;
779
1047
  if (!query) {
780
1048
  return {
781
1049
  success: false,
@@ -794,10 +1062,18 @@ async function executeCodexLensExactMode(params) {
794
1062
  const indexStatus = await checkIndexStatus(path);
795
1063
  // Request more results to support split (full content + extra files)
796
1064
  const totalToFetch = maxResults + extraFilesCount;
797
- const args = ['search', query, '--limit', totalToFetch.toString(), '--mode', 'exact', '--json'];
1065
+ const args = ['search', query, '--limit', totalToFetch.toString(), '--offset', offset.toString(), '--method', 'fts', '--json'];
798
1066
  if (enrich) {
799
1067
  args.push('--enrich');
800
1068
  }
1069
+ // Add code_only filter if requested (default: true)
1070
+ if (effectiveCodeOnly) {
1071
+ args.push('--code-only');
1072
+ }
1073
+ // Add exclude_extensions filter if provided
1074
+ if (excludeExtensions && excludeExtensions.length > 0) {
1075
+ args.push('--exclude-extensions', excludeExtensions.join(','));
1076
+ }
801
1077
  const result = await executeCodexLens(args, { cwd: path });
802
1078
  if (!result.success) {
803
1079
  return {
@@ -829,10 +1105,18 @@ async function executeCodexLensExactMode(params) {
829
1105
  }
830
1106
  // Fallback to fuzzy mode if exact returns no results
831
1107
  if (allResults.length === 0) {
832
- const fuzzyArgs = ['search', query, '--limit', totalToFetch.toString(), '--mode', 'fuzzy', '--json'];
1108
+ const fuzzyArgs = ['search', query, '--limit', totalToFetch.toString(), '--offset', offset.toString(), '--method', 'fts', '--use-fuzzy', '--json'];
833
1109
  if (enrich) {
834
1110
  fuzzyArgs.push('--enrich');
835
1111
  }
1112
+ // Add code_only filter if requested (default: true)
1113
+ if (effectiveCodeOnly) {
1114
+ fuzzyArgs.push('--code-only');
1115
+ }
1116
+ // Add exclude_extensions filter if provided
1117
+ if (excludeExtensions && excludeExtensions.length > 0) {
1118
+ fuzzyArgs.push('--exclude-extensions', excludeExtensions.join(','));
1119
+ }
836
1120
  const fuzzyResult = await executeCodexLens(fuzzyArgs, { cwd: path });
837
1121
  if (fuzzyResult.success) {
838
1122
  try {
@@ -884,13 +1168,15 @@ async function executeCodexLensExactMode(params) {
884
1168
  };
885
1169
  }
886
1170
  /**
887
- * Mode: hybrid - Best quality search with RRF fusion
888
- * Uses CodexLens hybrid mode (exact + fuzzy + vector)
1171
+ * Mode: hybrid - Best quality semantic search
1172
+ * Uses CodexLens dense_rerank method (dense coarse + cross-encoder rerank)
889
1173
  * Requires index with embeddings
890
1174
  */
891
1175
  async function executeHybridMode(params) {
892
1176
  const timer = createTimer();
893
- const { query, path = '.', maxResults = 5, extraFilesCount = 10, maxContentLength = 200, enrich = false, excludeExtensions, codeOnly = false } = params;
1177
+ const { query, path = '.', maxResults = 5, extraFilesCount = 10, maxContentLength = 200, enrich = false, excludeExtensions, codeOnly = true, withDoc = false, offset = 0 } = params;
1178
+ // withDoc overrides codeOnly
1179
+ const effectiveCodeOnly = withDoc ? false : codeOnly;
894
1180
  if (!query) {
895
1181
  return {
896
1182
  success: false,
@@ -911,10 +1197,18 @@ async function executeHybridMode(params) {
911
1197
  timer.mark('index_status_check');
912
1198
  // Request more results to support split (full content + extra files)
913
1199
  const totalToFetch = maxResults + extraFilesCount;
914
- const args = ['search', query, '--limit', totalToFetch.toString(), '--mode', 'hybrid', '--json'];
1200
+ const args = ['search', query, '--limit', totalToFetch.toString(), '--offset', offset.toString(), '--method', 'dense_rerank', '--json'];
915
1201
  if (enrich) {
916
1202
  args.push('--enrich');
917
1203
  }
1204
+ // Add code_only filter if requested (default: true)
1205
+ if (effectiveCodeOnly) {
1206
+ args.push('--code-only');
1207
+ }
1208
+ // Add exclude_extensions filter if provided
1209
+ if (excludeExtensions && excludeExtensions.length > 0) {
1210
+ args.push('--exclude-extensions', excludeExtensions.join(','));
1211
+ }
918
1212
  const result = await executeCodexLens(args, { cwd: path });
919
1213
  timer.mark('codexlens_search');
920
1214
  if (!result.success) {
@@ -958,8 +1252,9 @@ async function executeHybridMode(params) {
958
1252
  const baselineResult = filterDominantBaselineScores(allResults);
959
1253
  allResults = baselineResult.filteredResults;
960
1254
  baselineInfo = baselineResult.baselineInfo;
961
- // 1. Filter noisy files (coverage, node_modules, etc.) and excluded extensions
962
- allResults = filterNoisyFiles(allResults, { excludeExtensions, codeOnly });
1255
+ // 1. Filter noisy directories (node_modules, etc.)
1256
+ // NOTE: Extension filtering is now done engine-side via --code-only and --exclude-extensions
1257
+ allResults = filterNoisyFiles(allResults, {});
963
1258
  // 2. Boost results containing query keywords
964
1259
  allResults = applyKeywordBoosting(allResults, query);
965
1260
  // 3. Enforce score diversity (penalize identical scores)
@@ -986,7 +1281,7 @@ async function executeHybridMode(params) {
986
1281
  const { results, extra_files } = splitResultsWithExtraFiles(allResults, maxResults, extraFilesCount);
987
1282
  timer.mark('split_results');
988
1283
  // Build metadata with baseline info if detected
989
- let note = 'Hybrid mode uses RRF fusion (exact + fuzzy + vector) for best results';
1284
+ let note = 'Using dense_rerank (dense coarse + cross-encoder rerank) for semantic search';
990
1285
  if (baselineInfo) {
991
1286
  note += ` | Filtered ${initialCount - allResults.length} hot-spot results with baseline score ~${baselineInfo.score.toFixed(4)}`;
992
1287
  }
@@ -1087,12 +1382,13 @@ function filterNoisyFiles(results, options = {}) {
1087
1382
  NON_CODE_EXTENSIONS.forEach(ext => excludedExtSet.add(ext));
1088
1383
  }
1089
1384
  return results.filter(r => {
1090
- const filePath = r.file || '';
1385
+ // Support both 'file' and 'path' field names (different backends use different names)
1386
+ const filePath = r.file || r.path || '';
1091
1387
  if (!filePath)
1092
1388
  return true;
1093
1389
  const segments = filePath.split(/[/\\]/);
1094
1390
  // Accurate directory check: segment must exactly match excluded directory
1095
- if (segments.some(segment => FILTER_CONFIG.exclude_directories.has(segment))) {
1391
+ if (segments.some((segment) => FILTER_CONFIG.exclude_directories.has(segment))) {
1096
1392
  return false;
1097
1393
  }
1098
1394
  // Accurate file check: pattern matches filename only (not full path)
@@ -1378,14 +1674,16 @@ export const schema = {
1378
1674
  **Actions:**
1379
1675
  - search: Search file content (default)
1380
1676
  - find_files: Find files by path/name pattern (glob matching)
1381
- - init: Create FTS index
1677
+ - init: Create FTS index (incremental - skips existing)
1678
+ - init_force: Force full rebuild (delete and recreate index)
1382
1679
  - status: Check index status
1680
+ - update: Incremental index update (for changed files)
1681
+ - watch: Start file watcher for automatic updates
1383
1682
 
1384
1683
  **Content Search (action="search"):**
1385
- smart_search(query="authentication logic") # auto mode - routes to best backend
1386
- smart_search(query="MyClass", mode="exact") # exact mode - precise FTS matching
1387
- smart_search(query="auth", mode="ripgrep") # ripgrep mode - fast literal search
1388
- smart_search(query="how to auth", mode="hybrid") # hybrid mode - semantic + fuzzy search
1684
+ smart_search(query="authentication logic") # fuzzy mode (default) - FTS + ripgrep fusion
1685
+ smart_search(query="MyClass", mode="fuzzy") # fuzzy mode - fast hybrid search
1686
+ smart_search(query="how to auth", mode="semantic") # semantic mode - dense + reranker
1389
1687
 
1390
1688
  **File Discovery (action="find_files"):**
1391
1689
  smart_search(action="find_files", pattern="*.ts") # find all TypeScript files
@@ -1393,28 +1691,23 @@ export const schema = {
1393
1691
  smart_search(action="find_files", pattern="test_*.py") # find test files
1394
1692
  smart_search(action="find_files", pattern="*.tsx", offset=20, limit=10) # pagination
1395
1693
 
1694
+ **Index Maintenance:**
1695
+ smart_search(action="update", path="/project") # incremental index update
1696
+ smart_search(action="watch", path="/project") # start file watcher
1697
+ smart_search(action="watch", debounce=2000) # custom debounce interval
1698
+
1396
1699
  **Pagination:** All actions support offset/limit for paginated results:
1397
1700
  smart_search(query="auth", limit=10, offset=0) # first page
1398
1701
  smart_search(query="auth", limit=10, offset=10) # second page
1399
1702
 
1400
- **Multi-Word Search (ripgrep mode with tokenization):**
1401
- smart_search(query="CCW_PROJECT_ROOT CCW_ALLOWED_DIRS", mode="ripgrep") # tokenized OR matching
1402
- smart_search(query="auth login user", mode="ripgrep") # matches any token, ranks by match count
1403
- smart_search(query="exact phrase", mode="ripgrep", tokenize=false) # disable tokenization
1404
-
1405
- **Regex Search (ripgrep mode):**
1406
- smart_search(query="class.*Builder") # auto-detects regex pattern
1407
- smart_search(query="def.*\\(.*\\):") # find function definitions
1408
- smart_search(query="import.*from", caseSensitive=false) # case-insensitive
1409
-
1410
- **Modes:** auto (intelligent routing), hybrid (semantic+fuzzy), exact (FTS), ripgrep (fast with tokenization), priority (fallback chain)`,
1703
+ **Modes:** fuzzy (FTS + ripgrep fusion, default), semantic (dense + reranker)`,
1411
1704
  inputSchema: {
1412
1705
  type: 'object',
1413
1706
  properties: {
1414
1707
  action: {
1415
1708
  type: 'string',
1416
- enum: ['init', 'search', 'find_files', 'status', 'search_files'],
1417
- description: 'Action: search (content search), find_files (path pattern matching), init (create index), status (check index). Note: search_files is deprecated.',
1709
+ enum: ['init', 'init_force', 'search', 'find_files', 'status', 'update', 'watch', 'search_files'],
1710
+ description: 'Action: search (content search), find_files (path pattern matching), init (create index, incremental), init_force (force full rebuild), status (check index), update (incremental update), watch (auto-update). Note: search_files is deprecated.',
1418
1711
  default: 'search',
1419
1712
  },
1420
1713
  query: {
@@ -1428,8 +1721,8 @@ export const schema = {
1428
1721
  mode: {
1429
1722
  type: 'string',
1430
1723
  enum: SEARCH_MODES,
1431
- description: 'Search mode: auto, hybrid (best quality), exact (CodexLens FTS), ripgrep (fast, no index), priority (fallback chain)',
1432
- default: 'auto',
1724
+ description: 'Search mode: fuzzy (FTS + ripgrep fusion, default), semantic (dense + reranker for natural language queries)',
1725
+ default: 'fuzzy',
1433
1726
  },
1434
1727
  output_mode: {
1435
1728
  type: 'string',
@@ -1800,7 +2093,10 @@ export async function handler(params) {
1800
2093
  // Handle actions
1801
2094
  switch (action) {
1802
2095
  case 'init':
1803
- result = await executeInitAction(parsed.data);
2096
+ result = await executeInitAction(parsed.data, false);
2097
+ break;
2098
+ case 'init_force':
2099
+ result = await executeInitAction(parsed.data, true);
1804
2100
  break;
1805
2101
  case 'status':
1806
2102
  result = await executeStatusAction(parsed.data);
@@ -1809,6 +2105,14 @@ export async function handler(params) {
1809
2105
  // NEW: File path/name pattern matching (glob-based)
1810
2106
  result = await executeFindFilesAction(parsed.data);
1811
2107
  break;
2108
+ case 'update':
2109
+ // Incremental index update
2110
+ result = await executeUpdateAction(parsed.data);
2111
+ break;
2112
+ case 'watch':
2113
+ // Start file watcher (returns status, watcher runs in background)
2114
+ result = await executeWatchAction(parsed.data);
2115
+ break;
1812
2116
  case 'search_files':
1813
2117
  // DEPRECATED: Redirect to search with files_only output
1814
2118
  deprecationWarning = 'action="search_files" is deprecated. Use action="search" with output_mode="files_only" for content-to-files search, or action="find_files" for path pattern matching.';
@@ -1816,25 +2120,16 @@ export async function handler(params) {
1816
2120
  // Fall through to search
1817
2121
  case 'search':
1818
2122
  default:
1819
- // Handle search modes: auto | hybrid | exact | ripgrep | priority
2123
+ // Handle search modes: fuzzy | semantic
1820
2124
  switch (mode) {
1821
- case 'auto':
1822
- result = await executeAutoMode(parsed.data);
2125
+ case 'fuzzy':
2126
+ result = await executeFuzzyMode(parsed.data);
1823
2127
  break;
1824
- case 'hybrid':
2128
+ case 'semantic':
1825
2129
  result = await executeHybridMode(parsed.data);
1826
2130
  break;
1827
- case 'exact':
1828
- result = await executeCodexLensExactMode(parsed.data);
1829
- break;
1830
- case 'ripgrep':
1831
- result = await executeRipgrepMode(parsed.data);
1832
- break;
1833
- case 'priority':
1834
- result = await executePriorityFallbackMode(parsed.data);
1835
- break;
1836
2131
  default:
1837
- throw new Error(`Unsupported mode: ${mode}. Use: auto, hybrid, exact, ripgrep, or priority`);
2132
+ throw new Error(`Unsupported mode: ${mode}. Use: fuzzy or semantic`);
1838
2133
  }
1839
2134
  break;
1840
2135
  }
@@ -1872,10 +2167,13 @@ export async function handler(params) {
1872
2167
  /**
1873
2168
  * Execute init action with external progress callback
1874
2169
  * Used by MCP server for streaming progress
2170
+ * @param params - Search parameters (path, languages, force)
2171
+ * @param onProgress - Optional callback for progress updates
1875
2172
  */
1876
2173
  export async function executeInitWithProgress(params, onProgress) {
1877
2174
  const path = params.path || '.';
1878
2175
  const languages = params.languages;
2176
+ const force = params.force || false;
1879
2177
  // Check CodexLens availability
1880
2178
  const readyStatus = await ensureCodexLensReady();
1881
2179
  if (!readyStatus.ready) {
@@ -1884,9 +2182,13 @@ export async function executeInitWithProgress(params, onProgress) {
1884
2182
  error: `CodexLens not available: ${readyStatus.error}. CodexLens will be auto-installed on first use.`,
1885
2183
  };
1886
2184
  }
1887
- const args = ['init', path];
2185
+ // Use 'index init' subcommand (new CLI structure)
2186
+ const args = ['index', 'init', path];
2187
+ if (force) {
2188
+ args.push('--force'); // Force full rebuild
2189
+ }
1888
2190
  if (languages && languages.length > 0) {
1889
- args.push('--languages', languages.join(','));
2191
+ args.push('--language', languages.join(','));
1890
2192
  }
1891
2193
  // Track progress updates
1892
2194
  const progressUpdates = [];
@@ -1905,7 +2207,7 @@ export async function executeInitWithProgress(params, onProgress) {
1905
2207
  });
1906
2208
  // Build metadata with progress info
1907
2209
  const metadata = {
1908
- action: 'init',
2210
+ action: force ? 'init_force' : 'init',
1909
2211
  path,
1910
2212
  };
1911
2213
  if (lastProgress !== null) {
@@ -1921,11 +2223,12 @@ export async function executeInitWithProgress(params, onProgress) {
1921
2223
  if (progressUpdates.length > 0) {
1922
2224
  metadata.progressHistory = progressUpdates.slice(-5);
1923
2225
  }
2226
+ const actionLabel = force ? 'rebuilt (force)' : 'created';
1924
2227
  return {
1925
2228
  success: result.success,
1926
2229
  error: result.error,
1927
2230
  message: result.success
1928
- ? `CodexLens index created successfully for ${path}`
2231
+ ? `CodexLens index ${actionLabel} successfully for ${path}`
1929
2232
  : undefined,
1930
2233
  metadata,
1931
2234
  };