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,16 +2,19 @@
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
 
17
20
  import { z } from 'zod';
@@ -23,6 +26,7 @@ import {
23
26
  } from './codex-lens.js';
24
27
  import type { ProgressInfo } from './codex-lens.js';
25
28
  import { getProjectRoot } from '../utils/path-validator.js';
29
+ import { EXEC_TIMEOUTS } from '../utils/exec-constants.js';
26
30
 
27
31
  // Timing utilities for performance analysis
28
32
  const TIMING_ENABLED = process.env.SMART_SEARCH_TIMING === '1' || process.env.DEBUG?.includes('timing');
@@ -59,12 +63,13 @@ function createTimer(): { mark: (name: string) => void; getTimings: () => Timing
59
63
 
60
64
  // Define Zod schema for validation
61
65
  const ParamsSchema = z.object({
62
- // Action: search (content), find_files (path/name pattern), init, status
66
+ // Action: search (content), find_files (path/name pattern), init, init_force, status, update (incremental), watch
63
67
  // Note: search_files is deprecated, use search with output_mode='files_only'
64
- action: z.enum(['init', 'search', 'search_files', 'find_files', 'status']).default('search'),
68
+ // init: incremental index (skip existing), init_force: force full rebuild (delete and recreate)
69
+ action: z.enum(['init', 'init_force', 'search', 'search_files', 'find_files', 'status', 'update', 'watch']).default('search'),
65
70
  query: z.string().optional().describe('Content search query (for action="search")'),
66
71
  pattern: z.string().optional().describe('Glob pattern for path matching (for action="find_files")'),
67
- mode: z.enum(['auto', 'hybrid', 'exact', 'ripgrep', 'priority']).default('auto'),
72
+ mode: z.enum(['fuzzy', 'semantic']).default('fuzzy'),
68
73
  output_mode: z.enum(['full', 'files_only', 'count']).default('full'),
69
74
  path: z.string().optional(),
70
75
  paths: z.array(z.string()).default([]),
@@ -81,16 +86,19 @@ const ParamsSchema = z.object({
81
86
  regex: z.boolean().default(true), // Use regex pattern matching (default: enabled)
82
87
  caseSensitive: z.boolean().default(true), // Case sensitivity (default: case-sensitive)
83
88
  tokenize: z.boolean().default(true), // Tokenize multi-word queries for OR matching (default: enabled)
84
- // File type filtering
89
+ // File type filtering (default: code only)
85
90
  excludeExtensions: z.array(z.string()).optional().describe('File extensions to exclude from results (e.g., ["md", "txt"])'),
86
- codeOnly: z.boolean().default(false).describe('Only return code files (excludes md, txt, json, yaml, xml, etc.)'),
91
+ codeOnly: z.boolean().default(true).describe('Only return code files (excludes md, txt, json, yaml, xml, etc.). Default: true'),
92
+ withDoc: z.boolean().default(false).describe('Include documentation files (md, txt, rst, etc.). Overrides codeOnly when true'),
93
+ // Watcher options
94
+ debounce: z.number().default(1000).describe('Debounce interval in ms for watch action'),
87
95
  // Fuzzy matching is implicit in hybrid mode (RRF fusion)
88
96
  });
89
97
 
90
98
  type Params = z.infer<typeof ParamsSchema>;
91
99
 
92
100
  // Search mode constants
93
- const SEARCH_MODES = ['auto', 'hybrid', 'exact', 'ripgrep', 'priority'] as const;
101
+ const SEARCH_MODES = ['fuzzy', 'semantic'] as const;
94
102
 
95
103
  // Classification confidence threshold
96
104
  const CONFIDENCE_THRESHOLD = 0.7;
@@ -325,6 +333,17 @@ interface ModelInfo {
325
333
  updated_at?: string;
326
334
  }
327
335
 
336
+ interface CodexLensConfig {
337
+ config_file?: string;
338
+ index_dir?: string;
339
+ embedding_backend?: string; // 'fastembed' (local) or 'litellm' (api)
340
+ embedding_model?: string;
341
+ reranker_enabled?: boolean;
342
+ reranker_backend?: string; // 'onnx' (local) or 'api'
343
+ reranker_model?: string;
344
+ reranker_top_k?: number;
345
+ }
346
+
328
347
  interface IndexStatus {
329
348
  indexed: boolean;
330
349
  has_embeddings: boolean;
@@ -332,6 +351,7 @@ interface IndexStatus {
332
351
  embeddings_coverage_percent?: number;
333
352
  total_chunks?: number;
334
353
  model_info?: ModelInfo | null;
354
+ config?: CodexLensConfig | null;
335
355
  warning?: string;
336
356
  }
337
357
 
@@ -385,12 +405,39 @@ function splitResultsWithExtraFiles<T extends { file: string }>(
385
405
  */
386
406
  async function checkIndexStatus(path: string = '.'): Promise<IndexStatus> {
387
407
  try {
388
- const result = await executeCodexLens(['status', '--json'], { cwd: path });
408
+ // Fetch both status and config in parallel
409
+ const [statusResult, configResult] = await Promise.all([
410
+ executeCodexLens(['status', '--json'], { cwd: path }),
411
+ executeCodexLens(['config', 'show', '--json'], { cwd: path }),
412
+ ]);
413
+
414
+ // Parse config
415
+ let config: CodexLensConfig | null = null;
416
+ if (configResult.success && configResult.output) {
417
+ try {
418
+ const cleanConfigOutput = stripAnsi(configResult.output);
419
+ const parsedConfig = JSON.parse(cleanConfigOutput);
420
+ const configData = parsedConfig.result || parsedConfig;
421
+ config = {
422
+ config_file: configData.config_file,
423
+ index_dir: configData.index_dir,
424
+ embedding_backend: configData.embedding_backend,
425
+ embedding_model: configData.embedding_model,
426
+ reranker_enabled: configData.reranker_enabled,
427
+ reranker_backend: configData.reranker_backend,
428
+ reranker_model: configData.reranker_model,
429
+ reranker_top_k: configData.reranker_top_k,
430
+ };
431
+ } catch {
432
+ // Config parse failed, continue without it
433
+ }
434
+ }
389
435
 
390
- if (!result.success) {
436
+ if (!statusResult.success) {
391
437
  return {
392
438
  indexed: false,
393
439
  has_embeddings: false,
440
+ config,
394
441
  warning: 'No CodexLens index found. Run smart_search(action="init") to create index for better search results.',
395
442
  };
396
443
  }
@@ -398,7 +445,7 @@ async function checkIndexStatus(path: string = '.'): Promise<IndexStatus> {
398
445
  // Parse status output
399
446
  try {
400
447
  // Strip ANSI color codes from JSON output
401
- const cleanOutput = stripAnsi(result.output || '{}');
448
+ const cleanOutput = stripAnsi(statusResult.output || '{}');
402
449
  const parsed = JSON.parse(cleanOutput);
403
450
  // Handle both direct and nested response formats (status returns {success, result: {...}})
404
451
  const status = parsed.result || parsed;
@@ -438,12 +485,14 @@ async function checkIndexStatus(path: string = '.'): Promise<IndexStatus> {
438
485
  total_chunks: totalChunks,
439
486
  // Ensure model_info is null instead of undefined so it's included in JSON
440
487
  model_info: modelInfo ?? null,
488
+ config,
441
489
  warning,
442
490
  };
443
491
  } catch {
444
492
  return {
445
493
  indexed: false,
446
494
  has_embeddings: false,
495
+ config,
447
496
  warning: 'Failed to parse index status',
448
497
  };
449
498
  }
@@ -555,7 +604,7 @@ function checkToolAvailability(toolName: string): boolean {
555
604
  try {
556
605
  const isWindows = process.platform === 'win32';
557
606
  const command = isWindows ? 'where' : 'which';
558
- execSync(`${command} ${toolName}`, { stdio: 'ignore' });
607
+ execSync(`${command} ${toolName}`, { stdio: 'ignore', timeout: EXEC_TIMEOUTS.SYSTEM_INFO });
559
608
  return true;
560
609
  } catch {
561
610
  return false;
@@ -640,8 +689,10 @@ function buildRipgrepCommand(params: {
640
689
  /**
641
690
  * Action: init - Initialize CodexLens index (FTS only, no embeddings)
642
691
  * For semantic/vector search, use ccw view dashboard or codexlens CLI directly
692
+ * @param params - Search parameters
693
+ * @param force - If true, force full rebuild (delete existing index first)
643
694
  */
644
- async function executeInitAction(params: Params): Promise<SearchResult> {
695
+ async function executeInitAction(params: Params, force: boolean = false): Promise<SearchResult> {
645
696
  const { path = '.', languages } = params;
646
697
 
647
698
  // Check CodexLens availability
@@ -654,9 +705,13 @@ async function executeInitAction(params: Params): Promise<SearchResult> {
654
705
  }
655
706
 
656
707
  // Build args with --no-embeddings for FTS-only index (faster)
657
- const args = ['init', path, '--no-embeddings'];
708
+ // Use 'index init' subcommand (new CLI structure)
709
+ const args = ['index', 'init', path, '--no-embeddings'];
710
+ if (force) {
711
+ args.push('--force'); // Force full rebuild
712
+ }
658
713
  if (languages && languages.length > 0) {
659
- args.push('--languages', languages.join(','));
714
+ args.push('--language', languages.join(','));
660
715
  }
661
716
 
662
717
  // Track progress updates
@@ -674,7 +729,7 @@ async function executeInitAction(params: Params): Promise<SearchResult> {
674
729
 
675
730
  // Build metadata with progress info
676
731
  const metadata: SearchMetadata = {
677
- action: 'init',
732
+ action: force ? 'init_force' : 'init',
678
733
  path,
679
734
  };
680
735
 
@@ -693,8 +748,9 @@ async function executeInitAction(params: Params): Promise<SearchResult> {
693
748
  metadata.progressHistory = progressUpdates.slice(-5); // Keep last 5 progress updates
694
749
  }
695
750
 
751
+ const actionLabel = force ? 'rebuilt (force)' : 'created';
696
752
  const successMessage = result.success
697
- ? `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).`
753
+ ? `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).`
698
754
  : undefined;
699
755
 
700
756
  return {
@@ -713,10 +769,260 @@ async function executeStatusAction(params: Params): Promise<SearchResult> {
713
769
 
714
770
  const indexStatus = await checkIndexStatus(path);
715
771
 
772
+ // Build detailed status message
773
+ const statusParts: string[] = [];
774
+
775
+ // Index status
776
+ statusParts.push(`Index: ${indexStatus.indexed ? 'indexed' : 'not indexed'}`);
777
+ if (indexStatus.file_count) {
778
+ statusParts.push(`Files: ${indexStatus.file_count}`);
779
+ }
780
+
781
+ // Embeddings status
782
+ if (indexStatus.embeddings_coverage_percent !== undefined) {
783
+ statusParts.push(`Embeddings: ${indexStatus.embeddings_coverage_percent.toFixed(1)}%`);
784
+ }
785
+ if (indexStatus.total_chunks) {
786
+ statusParts.push(`Chunks: ${indexStatus.total_chunks}`);
787
+ }
788
+
789
+ // Config summary
790
+ if (indexStatus.config) {
791
+ const cfg = indexStatus.config;
792
+ // Embedding backend info
793
+ const embeddingType = cfg.embedding_backend === 'litellm' ? 'API' : 'Local';
794
+ statusParts.push(`Embedding: ${embeddingType} (${cfg.embedding_model || 'default'})`);
795
+
796
+ // Reranker info
797
+ if (cfg.reranker_enabled) {
798
+ const rerankerType = cfg.reranker_backend === 'onnx' ? 'Local' : 'API';
799
+ statusParts.push(`Reranker: ${rerankerType} (${cfg.reranker_model || 'default'})`);
800
+ } else {
801
+ statusParts.push('Reranker: disabled');
802
+ }
803
+ }
804
+
716
805
  return {
717
806
  success: true,
718
807
  status: indexStatus,
719
- message: indexStatus.warning || `Index status: ${indexStatus.indexed ? 'indexed' : 'not indexed'}, embeddings: ${indexStatus.has_embeddings ? 'available' : 'not available'}`,
808
+ message: indexStatus.warning || statusParts.join(' | '),
809
+ };
810
+ }
811
+
812
+ /**
813
+ * Action: update - Incremental index update
814
+ * Updates index for changed files without full rebuild
815
+ */
816
+ async function executeUpdateAction(params: Params): Promise<SearchResult> {
817
+ const { path = '.', languages } = params;
818
+
819
+ // Check CodexLens availability
820
+ const readyStatus = await ensureCodexLensReady();
821
+ if (!readyStatus.ready) {
822
+ return {
823
+ success: false,
824
+ error: `CodexLens not available: ${readyStatus.error}`,
825
+ };
826
+ }
827
+
828
+ // Check if index exists first
829
+ const indexStatus = await checkIndexStatus(path);
830
+ if (!indexStatus.indexed) {
831
+ return {
832
+ success: false,
833
+ error: `Directory not indexed. Run smart_search(action="init") first.`,
834
+ };
835
+ }
836
+
837
+ // Build args for incremental init (without --force)
838
+ // Use 'index init' subcommand (new CLI structure)
839
+ const args = ['index', 'init', path];
840
+ if (languages && languages.length > 0) {
841
+ args.push('--language', languages.join(','));
842
+ }
843
+
844
+ // Track progress updates
845
+ const progressUpdates: ProgressInfo[] = [];
846
+ let lastProgress: ProgressInfo | null = null;
847
+
848
+ const result = await executeCodexLens(args, {
849
+ cwd: path,
850
+ timeout: 600000, // 10 minutes for incremental updates
851
+ onProgress: (progress: ProgressInfo) => {
852
+ progressUpdates.push(progress);
853
+ lastProgress = progress;
854
+ },
855
+ });
856
+
857
+ // Build metadata with progress info
858
+ const metadata: SearchMetadata = {
859
+ action: 'update',
860
+ path,
861
+ };
862
+
863
+ if (lastProgress !== null) {
864
+ const p = lastProgress as ProgressInfo;
865
+ metadata.progress = {
866
+ stage: p.stage,
867
+ message: p.message,
868
+ percent: p.percent,
869
+ filesProcessed: p.filesProcessed,
870
+ totalFiles: p.totalFiles,
871
+ };
872
+ }
873
+
874
+ if (progressUpdates.length > 0) {
875
+ metadata.progressHistory = progressUpdates.slice(-5);
876
+ }
877
+
878
+ return {
879
+ success: result.success,
880
+ error: result.error,
881
+ message: result.success
882
+ ? `Incremental update completed for ${path}`
883
+ : undefined,
884
+ metadata,
885
+ };
886
+ }
887
+
888
+ /**
889
+ * Action: watch - Start file watcher for automatic incremental updates
890
+ * Note: This starts a background process, returns immediately with status
891
+ */
892
+ async function executeWatchAction(params: Params): Promise<SearchResult> {
893
+ const { path = '.', languages, debounce = 1000 } = params;
894
+
895
+ // Check CodexLens availability
896
+ const readyStatus = await ensureCodexLensReady();
897
+ if (!readyStatus.ready) {
898
+ return {
899
+ success: false,
900
+ error: `CodexLens not available: ${readyStatus.error}`,
901
+ };
902
+ }
903
+
904
+ // Check if index exists first
905
+ const indexStatus = await checkIndexStatus(path);
906
+ if (!indexStatus.indexed) {
907
+ return {
908
+ success: false,
909
+ error: `Directory not indexed. Run smart_search(action="init") first.`,
910
+ };
911
+ }
912
+
913
+ // Build args for watch command
914
+ const args = ['watch', path, '--debounce', debounce.toString()];
915
+ if (languages && languages.length > 0) {
916
+ args.push('--language', languages.join(','));
917
+ }
918
+
919
+ // Start watcher in background (non-blocking)
920
+ // Note: The watcher runs until manually stopped
921
+ const result = await executeCodexLens(args, {
922
+ cwd: path,
923
+ timeout: 5000, // Short timeout for initial startup check
924
+ });
925
+
926
+ return {
927
+ success: true,
928
+ message: `File watcher started for ${path}. Use Ctrl+C or kill the process to stop.`,
929
+ metadata: {
930
+ action: 'watch',
931
+ path,
932
+ note: 'Watcher runs in background. Changes are indexed automatically with debounce.',
933
+ },
934
+ };
935
+ }
936
+
937
+ /**
938
+ * Mode: fuzzy - FTS + ripgrep fusion with RRF ranking
939
+ * Runs both exact (FTS) and ripgrep searches in parallel, merges and ranks results
940
+ */
941
+ async function executeFuzzyMode(params: Params): Promise<SearchResult> {
942
+ const { query, path = '.', maxResults = 5, extraFilesCount = 10, codeOnly = true, withDoc = false, excludeExtensions } = params;
943
+ // withDoc overrides codeOnly
944
+ const effectiveCodeOnly = withDoc ? false : codeOnly;
945
+
946
+ if (!query) {
947
+ return {
948
+ success: false,
949
+ error: 'Query is required for search',
950
+ };
951
+ }
952
+
953
+ const timer = createTimer();
954
+
955
+ // Run both searches in parallel
956
+ const [ftsResult, ripgrepResult] = await Promise.allSettled([
957
+ executeCodexLensExactMode(params),
958
+ executeRipgrepMode(params),
959
+ ]);
960
+ timer.mark('parallel_search');
961
+
962
+ // Collect results from both sources
963
+ const resultsMap = new Map<string, any[]>();
964
+
965
+ // Add FTS results if successful
966
+ if (ftsResult.status === 'fulfilled' && ftsResult.value.success && ftsResult.value.results) {
967
+ resultsMap.set('exact', ftsResult.value.results as any[]);
968
+ }
969
+
970
+ // Add ripgrep results if successful
971
+ if (ripgrepResult.status === 'fulfilled' && ripgrepResult.value.success && ripgrepResult.value.results) {
972
+ resultsMap.set('ripgrep', ripgrepResult.value.results as any[]);
973
+ }
974
+
975
+ // If both failed, return error
976
+ if (resultsMap.size === 0) {
977
+ const errors: string[] = [];
978
+ if (ftsResult.status === 'rejected') errors.push(`FTS: ${ftsResult.reason}`);
979
+ if (ripgrepResult.status === 'rejected') errors.push(`Ripgrep: ${ripgrepResult.reason}`);
980
+ return {
981
+ success: false,
982
+ error: `Both search backends failed: ${errors.join('; ')}`,
983
+ };
984
+ }
985
+
986
+ // Apply RRF fusion with fuzzy-optimized weights
987
+ // Fuzzy mode: balanced between exact and ripgrep
988
+ const fusionWeights = { exact: 0.5, ripgrep: 0.5 };
989
+ const totalToFetch = maxResults + extraFilesCount;
990
+ const fusedResults = applyRRFFusion(resultsMap, fusionWeights, totalToFetch);
991
+ timer.mark('rrf_fusion');
992
+
993
+ // Apply code-only and extension filtering after fusion
994
+ const filteredFusedResults = filterNoisyFiles(fusedResults as any[], { codeOnly: effectiveCodeOnly, excludeExtensions });
995
+
996
+ // Normalize results format
997
+ const normalizedResults = filteredFusedResults.map((item: any) => ({
998
+ file: item.file || item.path,
999
+ line: item.line || 0,
1000
+ column: item.column || 0,
1001
+ content: item.content || '',
1002
+ score: item.fusion_score || 0,
1003
+ matchCount: item.matchCount,
1004
+ matchScore: item.matchScore,
1005
+ }));
1006
+
1007
+ // Split results: first N with full content, rest as file paths only
1008
+ const { results, extra_files } = splitResultsWithExtraFiles(normalizedResults, maxResults, extraFilesCount);
1009
+
1010
+ // Log timing
1011
+ timer.log();
1012
+ const timings = timer.getTimings();
1013
+
1014
+ return {
1015
+ success: true,
1016
+ results,
1017
+ extra_files: extra_files.length > 0 ? extra_files : undefined,
1018
+ metadata: {
1019
+ mode: 'fuzzy',
1020
+ backend: 'fts+ripgrep',
1021
+ count: results.length,
1022
+ query,
1023
+ note: `Fuzzy search using RRF fusion of FTS and ripgrep (weights: exact=${fusionWeights.exact}, ripgrep=${fusionWeights.ripgrep})`,
1024
+ timing: TIMING_ENABLED ? timings : undefined,
1025
+ },
720
1026
  };
721
1027
  }
722
1028
 
@@ -791,7 +1097,9 @@ async function executeAutoMode(params: Params): Promise<SearchResult> {
791
1097
  * Supports tokenized multi-word queries with OR matching and result ranking
792
1098
  */
793
1099
  async function executeRipgrepMode(params: Params): Promise<SearchResult> {
794
- const { query, paths = [], contextLines = 0, maxResults = 5, extraFilesCount = 10, maxContentLength = 200, includeHidden = false, path = '.', regex = true, caseSensitive = true, tokenize = true } = params;
1100
+ 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;
1101
+ // withDoc overrides codeOnly
1102
+ const effectiveCodeOnly = withDoc ? false : codeOnly;
795
1103
 
796
1104
  if (!query) {
797
1105
  return {
@@ -816,8 +1124,8 @@ async function executeRipgrepMode(params: Params): Promise<SearchResult> {
816
1124
  };
817
1125
  }
818
1126
 
819
- // Use CodexLens exact mode as fallback
820
- const args = ['search', query, '--limit', totalToFetch.toString(), '--mode', 'exact', '--json'];
1127
+ // Use CodexLens fts mode as fallback
1128
+ const args = ['search', query, '--limit', totalToFetch.toString(), '--method', 'fts', '--json'];
821
1129
  const result = await executeCodexLens(args, { cwd: path });
822
1130
 
823
1131
  if (!result.success) {
@@ -936,9 +1244,12 @@ async function executeRipgrepMode(params: Params): Promise<SearchResult> {
936
1244
  // Results matching more tokens are ranked higher (exact matches first)
937
1245
  const scoredResults = tokens.length > 1 ? scoreByTokenMatch(allResults, tokens) : allResults;
938
1246
 
939
- if (code === 0 || code === 1 || (isWindowsDeviceError && scoredResults.length > 0)) {
1247
+ // Apply code-only and extension filtering
1248
+ const filteredResults = filterNoisyFiles(scoredResults as any[], { codeOnly: effectiveCodeOnly, excludeExtensions });
1249
+
1250
+ if (code === 0 || code === 1 || (isWindowsDeviceError && filteredResults.length > 0)) {
940
1251
  // Split results: first N with full content, rest as file paths only
941
- const { results, extra_files } = splitResultsWithExtraFiles(scoredResults, maxResults, extraFilesCount);
1252
+ const { results, extra_files } = splitResultsWithExtraFiles(filteredResults, maxResults, extraFilesCount);
942
1253
 
943
1254
  // Build warning message for various conditions
944
1255
  const warnings: string[] = [];
@@ -1000,7 +1311,9 @@ async function executeRipgrepMode(params: Params): Promise<SearchResult> {
1000
1311
  * Requires index
1001
1312
  */
1002
1313
  async function executeCodexLensExactMode(params: Params): Promise<SearchResult> {
1003
- const { query, path = '.', maxResults = 5, extraFilesCount = 10, maxContentLength = 200, enrich = false } = params;
1314
+ const { query, path = '.', maxResults = 5, extraFilesCount = 10, maxContentLength = 200, enrich = false, excludeExtensions, codeOnly = true, withDoc = false, offset = 0 } = params;
1315
+ // withDoc overrides codeOnly
1316
+ const effectiveCodeOnly = withDoc ? false : codeOnly;
1004
1317
 
1005
1318
  if (!query) {
1006
1319
  return {
@@ -1023,10 +1336,18 @@ async function executeCodexLensExactMode(params: Params): Promise<SearchResult>
1023
1336
 
1024
1337
  // Request more results to support split (full content + extra files)
1025
1338
  const totalToFetch = maxResults + extraFilesCount;
1026
- const args = ['search', query, '--limit', totalToFetch.toString(), '--mode', 'exact', '--json'];
1339
+ const args = ['search', query, '--limit', totalToFetch.toString(), '--offset', offset.toString(), '--method', 'fts', '--json'];
1027
1340
  if (enrich) {
1028
1341
  args.push('--enrich');
1029
1342
  }
1343
+ // Add code_only filter if requested (default: true)
1344
+ if (effectiveCodeOnly) {
1345
+ args.push('--code-only');
1346
+ }
1347
+ // Add exclude_extensions filter if provided
1348
+ if (excludeExtensions && excludeExtensions.length > 0) {
1349
+ args.push('--exclude-extensions', excludeExtensions.join(','));
1350
+ }
1030
1351
  const result = await executeCodexLens(args, { cwd: path });
1031
1352
 
1032
1353
  if (!result.success) {
@@ -1060,10 +1381,18 @@ async function executeCodexLensExactMode(params: Params): Promise<SearchResult>
1060
1381
 
1061
1382
  // Fallback to fuzzy mode if exact returns no results
1062
1383
  if (allResults.length === 0) {
1063
- const fuzzyArgs = ['search', query, '--limit', totalToFetch.toString(), '--mode', 'fuzzy', '--json'];
1384
+ const fuzzyArgs = ['search', query, '--limit', totalToFetch.toString(), '--offset', offset.toString(), '--method', 'fts', '--use-fuzzy', '--json'];
1064
1385
  if (enrich) {
1065
1386
  fuzzyArgs.push('--enrich');
1066
1387
  }
1388
+ // Add code_only filter if requested (default: true)
1389
+ if (effectiveCodeOnly) {
1390
+ fuzzyArgs.push('--code-only');
1391
+ }
1392
+ // Add exclude_extensions filter if provided
1393
+ if (excludeExtensions && excludeExtensions.length > 0) {
1394
+ fuzzyArgs.push('--exclude-extensions', excludeExtensions.join(','));
1395
+ }
1067
1396
  const fuzzyResult = await executeCodexLens(fuzzyArgs, { cwd: path });
1068
1397
 
1069
1398
  if (fuzzyResult.success) {
@@ -1119,13 +1448,15 @@ async function executeCodexLensExactMode(params: Params): Promise<SearchResult>
1119
1448
  }
1120
1449
 
1121
1450
  /**
1122
- * Mode: hybrid - Best quality search with RRF fusion
1123
- * Uses CodexLens hybrid mode (exact + fuzzy + vector)
1451
+ * Mode: hybrid - Best quality semantic search
1452
+ * Uses CodexLens dense_rerank method (dense coarse + cross-encoder rerank)
1124
1453
  * Requires index with embeddings
1125
1454
  */
1126
1455
  async function executeHybridMode(params: Params): Promise<SearchResult> {
1127
1456
  const timer = createTimer();
1128
- const { query, path = '.', maxResults = 5, extraFilesCount = 10, maxContentLength = 200, enrich = false, excludeExtensions, codeOnly = false } = params;
1457
+ const { query, path = '.', maxResults = 5, extraFilesCount = 10, maxContentLength = 200, enrich = false, excludeExtensions, codeOnly = true, withDoc = false, offset = 0 } = params;
1458
+ // withDoc overrides codeOnly
1459
+ const effectiveCodeOnly = withDoc ? false : codeOnly;
1129
1460
 
1130
1461
  if (!query) {
1131
1462
  return {
@@ -1150,10 +1481,18 @@ async function executeHybridMode(params: Params): Promise<SearchResult> {
1150
1481
 
1151
1482
  // Request more results to support split (full content + extra files)
1152
1483
  const totalToFetch = maxResults + extraFilesCount;
1153
- const args = ['search', query, '--limit', totalToFetch.toString(), '--mode', 'hybrid', '--json'];
1484
+ const args = ['search', query, '--limit', totalToFetch.toString(), '--offset', offset.toString(), '--method', 'dense_rerank', '--json'];
1154
1485
  if (enrich) {
1155
1486
  args.push('--enrich');
1156
1487
  }
1488
+ // Add code_only filter if requested (default: true)
1489
+ if (effectiveCodeOnly) {
1490
+ args.push('--code-only');
1491
+ }
1492
+ // Add exclude_extensions filter if provided
1493
+ if (excludeExtensions && excludeExtensions.length > 0) {
1494
+ args.push('--exclude-extensions', excludeExtensions.join(','));
1495
+ }
1157
1496
  const result = await executeCodexLens(args, { cwd: path });
1158
1497
  timer.mark('codexlens_search');
1159
1498
 
@@ -1203,8 +1542,9 @@ async function executeHybridMode(params: Params): Promise<SearchResult> {
1203
1542
  allResults = baselineResult.filteredResults;
1204
1543
  baselineInfo = baselineResult.baselineInfo;
1205
1544
 
1206
- // 1. Filter noisy files (coverage, node_modules, etc.) and excluded extensions
1207
- allResults = filterNoisyFiles(allResults, { excludeExtensions, codeOnly });
1545
+ // 1. Filter noisy directories (node_modules, etc.)
1546
+ // NOTE: Extension filtering is now done engine-side via --code-only and --exclude-extensions
1547
+ allResults = filterNoisyFiles(allResults, {});
1208
1548
  // 2. Boost results containing query keywords
1209
1549
  allResults = applyKeywordBoosting(allResults, query);
1210
1550
  // 3. Enforce score diversity (penalize identical scores)
@@ -1232,7 +1572,7 @@ async function executeHybridMode(params: Params): Promise<SearchResult> {
1232
1572
  timer.mark('split_results');
1233
1573
 
1234
1574
  // Build metadata with baseline info if detected
1235
- let note = 'Hybrid mode uses RRF fusion (exact + fuzzy + vector) for best results';
1575
+ let note = 'Using dense_rerank (dense coarse + cross-encoder rerank) for semantic search';
1236
1576
  if (baselineInfo) {
1237
1577
  note += ` | Filtered ${initialCount - allResults.length} hot-spot results with baseline score ~${baselineInfo.score.toFixed(4)}`;
1238
1578
  }
@@ -1365,13 +1705,14 @@ function filterNoisyFiles(results: SemanticMatch[], options: FilterOptions = {})
1365
1705
  }
1366
1706
 
1367
1707
  return results.filter(r => {
1368
- const filePath = r.file || '';
1708
+ // Support both 'file' and 'path' field names (different backends use different names)
1709
+ const filePath = r.file || (r as any).path || '';
1369
1710
  if (!filePath) return true;
1370
1711
 
1371
- const segments = filePath.split(/[/\\]/);
1712
+ const segments: string[] = filePath.split(/[/\\]/);
1372
1713
 
1373
1714
  // Accurate directory check: segment must exactly match excluded directory
1374
- if (segments.some(segment => FILTER_CONFIG.exclude_directories.has(segment))) {
1715
+ if (segments.some((segment: string) => FILTER_CONFIG.exclude_directories.has(segment))) {
1375
1716
  return false;
1376
1717
  }
1377
1718
 
@@ -1696,14 +2037,16 @@ export const schema: ToolSchema = {
1696
2037
  **Actions:**
1697
2038
  - search: Search file content (default)
1698
2039
  - find_files: Find files by path/name pattern (glob matching)
1699
- - init: Create FTS index
2040
+ - init: Create FTS index (incremental - skips existing)
2041
+ - init_force: Force full rebuild (delete and recreate index)
1700
2042
  - status: Check index status
2043
+ - update: Incremental index update (for changed files)
2044
+ - watch: Start file watcher for automatic updates
1701
2045
 
1702
2046
  **Content Search (action="search"):**
1703
- smart_search(query="authentication logic") # auto mode - routes to best backend
1704
- smart_search(query="MyClass", mode="exact") # exact mode - precise FTS matching
1705
- smart_search(query="auth", mode="ripgrep") # ripgrep mode - fast literal search
1706
- smart_search(query="how to auth", mode="hybrid") # hybrid mode - semantic + fuzzy search
2047
+ smart_search(query="authentication logic") # fuzzy mode (default) - FTS + ripgrep fusion
2048
+ smart_search(query="MyClass", mode="fuzzy") # fuzzy mode - fast hybrid search
2049
+ smart_search(query="how to auth", mode="semantic") # semantic mode - dense + reranker
1707
2050
 
1708
2051
  **File Discovery (action="find_files"):**
1709
2052
  smart_search(action="find_files", pattern="*.ts") # find all TypeScript files
@@ -1711,28 +2054,23 @@ export const schema: ToolSchema = {
1711
2054
  smart_search(action="find_files", pattern="test_*.py") # find test files
1712
2055
  smart_search(action="find_files", pattern="*.tsx", offset=20, limit=10) # pagination
1713
2056
 
2057
+ **Index Maintenance:**
2058
+ smart_search(action="update", path="/project") # incremental index update
2059
+ smart_search(action="watch", path="/project") # start file watcher
2060
+ smart_search(action="watch", debounce=2000) # custom debounce interval
2061
+
1714
2062
  **Pagination:** All actions support offset/limit for paginated results:
1715
2063
  smart_search(query="auth", limit=10, offset=0) # first page
1716
2064
  smart_search(query="auth", limit=10, offset=10) # second page
1717
2065
 
1718
- **Multi-Word Search (ripgrep mode with tokenization):**
1719
- smart_search(query="CCW_PROJECT_ROOT CCW_ALLOWED_DIRS", mode="ripgrep") # tokenized OR matching
1720
- smart_search(query="auth login user", mode="ripgrep") # matches any token, ranks by match count
1721
- smart_search(query="exact phrase", mode="ripgrep", tokenize=false) # disable tokenization
1722
-
1723
- **Regex Search (ripgrep mode):**
1724
- smart_search(query="class.*Builder") # auto-detects regex pattern
1725
- smart_search(query="def.*\\(.*\\):") # find function definitions
1726
- smart_search(query="import.*from", caseSensitive=false) # case-insensitive
1727
-
1728
- **Modes:** auto (intelligent routing), hybrid (semantic+fuzzy), exact (FTS), ripgrep (fast with tokenization), priority (fallback chain)`,
2066
+ **Modes:** fuzzy (FTS + ripgrep fusion, default), semantic (dense + reranker)`,
1729
2067
  inputSchema: {
1730
2068
  type: 'object',
1731
2069
  properties: {
1732
2070
  action: {
1733
2071
  type: 'string',
1734
- enum: ['init', 'search', 'find_files', 'status', 'search_files'],
1735
- description: 'Action: search (content search), find_files (path pattern matching), init (create index), status (check index). Note: search_files is deprecated.',
2072
+ enum: ['init', 'init_force', 'search', 'find_files', 'status', 'update', 'watch', 'search_files'],
2073
+ 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.',
1736
2074
  default: 'search',
1737
2075
  },
1738
2076
  query: {
@@ -1746,8 +2084,8 @@ export const schema: ToolSchema = {
1746
2084
  mode: {
1747
2085
  type: 'string',
1748
2086
  enum: SEARCH_MODES,
1749
- description: 'Search mode: auto, hybrid (best quality), exact (CodexLens FTS), ripgrep (fast, no index), priority (fallback chain)',
1750
- default: 'auto',
2087
+ description: 'Search mode: fuzzy (FTS + ripgrep fusion, default), semantic (dense + reranker for natural language queries)',
2088
+ default: 'fuzzy',
1751
2089
  },
1752
2090
  output_mode: {
1753
2091
  type: 'string',
@@ -2156,7 +2494,11 @@ export async function handler(params: Record<string, unknown>): Promise<ToolResu
2156
2494
  // Handle actions
2157
2495
  switch (action) {
2158
2496
  case 'init':
2159
- result = await executeInitAction(parsed.data);
2497
+ result = await executeInitAction(parsed.data, false);
2498
+ break;
2499
+
2500
+ case 'init_force':
2501
+ result = await executeInitAction(parsed.data, true);
2160
2502
  break;
2161
2503
 
2162
2504
  case 'status':
@@ -2168,6 +2510,16 @@ export async function handler(params: Record<string, unknown>): Promise<ToolResu
2168
2510
  result = await executeFindFilesAction(parsed.data);
2169
2511
  break;
2170
2512
 
2513
+ case 'update':
2514
+ // Incremental index update
2515
+ result = await executeUpdateAction(parsed.data);
2516
+ break;
2517
+
2518
+ case 'watch':
2519
+ // Start file watcher (returns status, watcher runs in background)
2520
+ result = await executeWatchAction(parsed.data);
2521
+ break;
2522
+
2171
2523
  case 'search_files':
2172
2524
  // DEPRECATED: Redirect to search with files_only output
2173
2525
  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.';
@@ -2176,25 +2528,16 @@ export async function handler(params: Record<string, unknown>): Promise<ToolResu
2176
2528
 
2177
2529
  case 'search':
2178
2530
  default:
2179
- // Handle search modes: auto | hybrid | exact | ripgrep | priority
2531
+ // Handle search modes: fuzzy | semantic
2180
2532
  switch (mode) {
2181
- case 'auto':
2182
- result = await executeAutoMode(parsed.data);
2533
+ case 'fuzzy':
2534
+ result = await executeFuzzyMode(parsed.data);
2183
2535
  break;
2184
- case 'hybrid':
2536
+ case 'semantic':
2185
2537
  result = await executeHybridMode(parsed.data);
2186
2538
  break;
2187
- case 'exact':
2188
- result = await executeCodexLensExactMode(parsed.data);
2189
- break;
2190
- case 'ripgrep':
2191
- result = await executeRipgrepMode(parsed.data);
2192
- break;
2193
- case 'priority':
2194
- result = await executePriorityFallbackMode(parsed.data);
2195
- break;
2196
2539
  default:
2197
- throw new Error(`Unsupported mode: ${mode}. Use: auto, hybrid, exact, ripgrep, or priority`);
2540
+ throw new Error(`Unsupported mode: ${mode}. Use: fuzzy or semantic`);
2198
2541
  }
2199
2542
  break;
2200
2543
  }
@@ -2236,6 +2579,8 @@ export async function handler(params: Record<string, unknown>): Promise<ToolResu
2236
2579
  /**
2237
2580
  * Execute init action with external progress callback
2238
2581
  * Used by MCP server for streaming progress
2582
+ * @param params - Search parameters (path, languages, force)
2583
+ * @param onProgress - Optional callback for progress updates
2239
2584
  */
2240
2585
  export async function executeInitWithProgress(
2241
2586
  params: Record<string, unknown>,
@@ -2243,6 +2588,7 @@ export async function executeInitWithProgress(
2243
2588
  ): Promise<SearchResult> {
2244
2589
  const path = (params.path as string) || '.';
2245
2590
  const languages = params.languages as string[] | undefined;
2591
+ const force = params.force as boolean || false;
2246
2592
 
2247
2593
  // Check CodexLens availability
2248
2594
  const readyStatus = await ensureCodexLensReady();
@@ -2253,9 +2599,13 @@ export async function executeInitWithProgress(
2253
2599
  };
2254
2600
  }
2255
2601
 
2256
- const args = ['init', path];
2602
+ // Use 'index init' subcommand (new CLI structure)
2603
+ const args = ['index', 'init', path];
2604
+ if (force) {
2605
+ args.push('--force'); // Force full rebuild
2606
+ }
2257
2607
  if (languages && languages.length > 0) {
2258
- args.push('--languages', languages.join(','));
2608
+ args.push('--language', languages.join(','));
2259
2609
  }
2260
2610
 
2261
2611
  // Track progress updates
@@ -2277,7 +2627,7 @@ export async function executeInitWithProgress(
2277
2627
 
2278
2628
  // Build metadata with progress info
2279
2629
  const metadata: SearchMetadata = {
2280
- action: 'init',
2630
+ action: force ? 'init_force' : 'init',
2281
2631
  path,
2282
2632
  };
2283
2633
 
@@ -2296,11 +2646,12 @@ export async function executeInitWithProgress(
2296
2646
  metadata.progressHistory = progressUpdates.slice(-5);
2297
2647
  }
2298
2648
 
2649
+ const actionLabel = force ? 'rebuilt (force)' : 'created';
2299
2650
  return {
2300
2651
  success: result.success,
2301
2652
  error: result.error,
2302
2653
  message: result.success
2303
- ? `CodexLens index created successfully for ${path}`
2654
+ ? `CodexLens index ${actionLabel} successfully for ${path}`
2304
2655
  : undefined,
2305
2656
  metadata,
2306
2657
  };