claude-code-workflow 6.3.18 → 6.3.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (832) hide show
  1. package/.claude/CLAUDE.md +8 -5
  2. package/.claude/agents/action-planning-agent.md +26 -2
  3. package/.claude/agents/code-developer.md +132 -43
  4. package/.claude/agents/debug-explore-agent.md +434 -0
  5. package/.claude/agents/issue-plan-agent.md +31 -2
  6. package/.claude/agents/test-fix-agent.md +14 -0
  7. package/.claude/commands/issue/discover.md +41 -0
  8. package/.claude/commands/issue/execute.md +200 -19
  9. package/.claude/commands/issue/new.md +93 -3
  10. package/.claude/commands/issue/plan.md +9 -3
  11. package/.claude/commands/issue/queue.md +94 -39
  12. package/.claude/commands/memory/swagger-docs.md +773 -0
  13. package/.claude/commands/workflow/brainstorm/auto-parallel.md +21 -21
  14. package/.claude/commands/workflow/execute.md +54 -34
  15. package/.claude/commands/workflow/lite-execute.md +48 -164
  16. package/.claude/commands/workflow/lite-fix.md +4 -4
  17. package/.claude/commands/workflow/lite-plan.md +5 -5
  18. package/.claude/commands/workflow/plan.md +27 -27
  19. package/.claude/commands/workflow/review.md +42 -17
  20. package/.claude/commands/workflow/tdd-plan.md +25 -25
  21. package/.claude/commands/workflow/test-fix-gen.md +10 -10
  22. package/.claude/commands/workflow/test-gen.md +14 -14
  23. package/.claude/commands/workflow/ui-design/explore-auto.md +21 -21
  24. package/.claude/commands/workflow/ui-design/imitate-auto.md +24 -24
  25. package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +693 -0
  26. package/.claude/skills/ccw/SKILL.md +462 -0
  27. package/.claude/skills/ccw/index/command-capabilities.json +127 -0
  28. package/.claude/skills/ccw/index/intent-rules.json +136 -0
  29. package/.claude/skills/ccw/index/workflow-chains.json +451 -0
  30. package/.claude/skills/ccw/phases/actions/bugfix.md +218 -0
  31. package/.claude/skills/ccw/phases/actions/coupled.md +194 -0
  32. package/.claude/skills/ccw/phases/actions/docs.md +93 -0
  33. package/.claude/skills/ccw/phases/actions/full.md +154 -0
  34. package/.claude/skills/ccw/phases/actions/issue.md +201 -0
  35. package/.claude/skills/ccw/phases/actions/rapid.md +104 -0
  36. package/.claude/skills/ccw/phases/actions/review-fix.md +84 -0
  37. package/.claude/skills/ccw/phases/actions/tdd.md +66 -0
  38. package/.claude/skills/ccw/phases/actions/ui.md +79 -0
  39. package/.claude/skills/ccw/phases/orchestrator.md +435 -0
  40. package/.claude/skills/ccw/specs/intent-classification.md +336 -0
  41. package/.claude/skills/ccw-help/SKILL.md +177 -0
  42. package/.claude/skills/ccw-help/index/all-agents.json +82 -0
  43. package/.claude/skills/{command-guide → ccw-help}/index/all-commands.json +183 -73
  44. package/.claude/skills/{command-guide → ccw-help}/index/by-category.json +187 -73
  45. package/.claude/skills/{command-guide → ccw-help}/index/by-use-case.json +295 -185
  46. package/.claude/skills/{command-guide → ccw-help}/index/command-relationships.json +19 -166
  47. package/.claude/skills/{command-guide → ccw-help}/index/essential-commands.json +10 -10
  48. package/.claude/skills/ccw-help/scripts/analyze_commands.py +337 -0
  49. package/.claude/skills/code-reviewer/README.md +340 -0
  50. package/.claude/skills/code-reviewer/SKILL.md +308 -0
  51. package/.claude/skills/code-reviewer/phases/01-code-discovery.md +246 -0
  52. package/.claude/skills/code-reviewer/phases/02-security-analysis.md +442 -0
  53. package/.claude/skills/code-reviewer/phases/03-best-practices-review.md +36 -0
  54. package/.claude/skills/code-reviewer/phases/04-report-generation.md +278 -0
  55. package/.claude/skills/code-reviewer/specs/best-practices-requirements.md +346 -0
  56. package/.claude/skills/code-reviewer/specs/quality-standards.md +252 -0
  57. package/.claude/skills/code-reviewer/specs/security-requirements.md +243 -0
  58. package/.claude/skills/code-reviewer/templates/best-practice-finding.md +234 -0
  59. package/.claude/skills/code-reviewer/templates/report-template.md +316 -0
  60. package/.claude/skills/code-reviewer/templates/security-finding.md +161 -0
  61. package/.claude/skills/skill-generator/SKILL.md +187 -0
  62. package/.claude/skills/skill-generator/phases/01-requirements-discovery.md +239 -0
  63. package/.claude/skills/skill-generator/phases/02-structure-generation.md +207 -0
  64. package/.claude/skills/skill-generator/phases/03-phase-generation.md +802 -0
  65. package/.claude/skills/skill-generator/phases/04-specs-templates.md +328 -0
  66. package/.claude/skills/skill-generator/phases/05-validation.md +334 -0
  67. package/.claude/skills/skill-generator/specs/cli-integration.md +448 -0
  68. package/.claude/skills/skill-generator/specs/execution-modes.md +396 -0
  69. package/.claude/skills/skill-generator/specs/scripting-integration.md +265 -0
  70. package/.claude/skills/skill-generator/specs/skill-requirements.md +466 -0
  71. package/.claude/skills/skill-generator/templates/autonomous-action.md +517 -0
  72. package/.claude/skills/skill-generator/templates/autonomous-orchestrator.md +276 -0
  73. package/.claude/skills/skill-generator/templates/code-analysis-action.md +503 -0
  74. package/.claude/skills/skill-generator/templates/llm-action.md +355 -0
  75. package/.claude/skills/skill-generator/templates/script-bash.md +277 -0
  76. package/.claude/skills/skill-generator/templates/script-python.md +198 -0
  77. package/.claude/skills/skill-generator/templates/sequential-phase.md +441 -0
  78. package/.claude/skills/skill-generator/templates/skill-md.md +156 -0
  79. package/.claude/workflows/chinese-response.md +15 -28
  80. package/.claude/workflows/cli-templates/prompts/documentation/swagger-api.txt +266 -0
  81. package/.claude/workflows/cli-tools-usage.md +221 -177
  82. package/.claude/workflows/windows-platform.md +13 -10
  83. package/.codex/prompts/issue-execute.md +310 -82
  84. package/.codex/prompts/issue-queue.md +22 -0
  85. package/.codex/prompts/lite-execute.md +36 -11
  86. package/README.md +309 -305
  87. package/ccw/README.md +10 -4
  88. package/ccw/dist/cli.d.ts.map +1 -1
  89. package/ccw/dist/cli.js +4 -1
  90. package/ccw/dist/cli.js.map +1 -1
  91. package/ccw/dist/commands/cli.d.ts.map +1 -1
  92. package/ccw/dist/commands/cli.js +131 -34
  93. package/ccw/dist/commands/cli.js.map +1 -1
  94. package/ccw/dist/commands/issue.d.ts +152 -0
  95. package/ccw/dist/commands/issue.d.ts.map +1 -1
  96. package/ccw/dist/commands/issue.js +550 -85
  97. package/ccw/dist/commands/issue.js.map +1 -1
  98. package/ccw/dist/commands/serve.d.ts +1 -0
  99. package/ccw/dist/commands/serve.d.ts.map +1 -1
  100. package/ccw/dist/commands/serve.js +12 -5
  101. package/ccw/dist/commands/serve.js.map +1 -1
  102. package/ccw/dist/commands/stop.d.ts.map +1 -1
  103. package/ccw/dist/commands/stop.js +29 -5
  104. package/ccw/dist/commands/stop.js.map +1 -1
  105. package/ccw/dist/commands/tool.d.ts.map +1 -1
  106. package/ccw/dist/commands/tool.js +19 -2
  107. package/ccw/dist/commands/tool.js.map +1 -1
  108. package/ccw/dist/commands/view.d.ts +1 -0
  109. package/ccw/dist/commands/view.d.ts.map +1 -1
  110. package/ccw/dist/commands/view.js +10 -3
  111. package/ccw/dist/commands/view.js.map +1 -1
  112. package/ccw/dist/config/cli-settings-manager.d.ts +86 -0
  113. package/ccw/dist/config/cli-settings-manager.d.ts.map +1 -0
  114. package/ccw/dist/config/cli-settings-manager.js +392 -0
  115. package/ccw/dist/config/cli-settings-manager.js.map +1 -0
  116. package/ccw/dist/config/litellm-api-config-manager.d.ts +71 -5
  117. package/ccw/dist/config/litellm-api-config-manager.d.ts.map +1 -1
  118. package/ccw/dist/config/litellm-api-config-manager.js +290 -20
  119. package/ccw/dist/config/litellm-api-config-manager.js.map +1 -1
  120. package/ccw/dist/core/auth/csrf-manager.d.ts +18 -0
  121. package/ccw/dist/core/auth/csrf-manager.d.ts.map +1 -0
  122. package/ccw/dist/core/auth/csrf-manager.js +80 -0
  123. package/ccw/dist/core/auth/csrf-manager.js.map +1 -0
  124. package/ccw/dist/core/auth/csrf-middleware.d.ts +8 -0
  125. package/ccw/dist/core/auth/csrf-middleware.d.ts.map +1 -0
  126. package/ccw/dist/core/auth/csrf-middleware.js +141 -0
  127. package/ccw/dist/core/auth/csrf-middleware.js.map +1 -0
  128. package/ccw/dist/core/auth/middleware.d.ts +15 -0
  129. package/ccw/dist/core/auth/middleware.d.ts.map +1 -0
  130. package/ccw/dist/core/auth/middleware.js +76 -0
  131. package/ccw/dist/core/auth/middleware.js.map +1 -0
  132. package/ccw/dist/core/auth/token-manager.d.ts +41 -0
  133. package/ccw/dist/core/auth/token-manager.d.ts.map +1 -0
  134. package/ccw/dist/core/auth/token-manager.js +171 -0
  135. package/ccw/dist/core/auth/token-manager.js.map +1 -0
  136. package/ccw/dist/core/cache-manager.d.ts +6 -6
  137. package/ccw/dist/core/cache-manager.d.ts.map +1 -1
  138. package/ccw/dist/core/cache-manager.js +70 -48
  139. package/ccw/dist/core/cache-manager.js.map +1 -1
  140. package/ccw/dist/core/claude-freshness.d.ts.map +1 -1
  141. package/ccw/dist/core/claude-freshness.js +23 -3
  142. package/ccw/dist/core/claude-freshness.js.map +1 -1
  143. package/ccw/dist/core/core-memory-store.d.ts.map +1 -1
  144. package/ccw/dist/core/core-memory-store.js +2 -1
  145. package/ccw/dist/core/core-memory-store.js.map +1 -1
  146. package/ccw/dist/core/cors.d.ts +3 -0
  147. package/ccw/dist/core/cors.d.ts.map +1 -0
  148. package/ccw/dist/core/cors.js +10 -0
  149. package/ccw/dist/core/cors.js.map +1 -0
  150. package/ccw/dist/core/dashboard-generator-patch.js +0 -1
  151. package/ccw/dist/core/dashboard-generator-patch.js.map +1 -1
  152. package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
  153. package/ccw/dist/core/dashboard-generator.js +417 -416
  154. package/ccw/dist/core/dashboard-generator.js.map +1 -1
  155. package/ccw/dist/core/data-aggregator.js +2 -2
  156. package/ccw/dist/core/data-aggregator.js.map +1 -1
  157. package/ccw/dist/core/lite-scanner.d.ts +1 -1
  158. package/ccw/dist/core/lite-scanner.d.ts.map +1 -1
  159. package/ccw/dist/core/lite-scanner.js +130 -127
  160. package/ccw/dist/core/lite-scanner.js.map +1 -1
  161. package/ccw/dist/core/routes/auth-routes.d.ts +12 -0
  162. package/ccw/dist/core/routes/auth-routes.d.ts.map +1 -0
  163. package/ccw/dist/core/routes/auth-routes.js +80 -0
  164. package/ccw/dist/core/routes/auth-routes.js.map +1 -0
  165. package/ccw/dist/core/routes/ccw-routes.d.ts +1 -14
  166. package/ccw/dist/core/routes/ccw-routes.d.ts.map +1 -1
  167. package/ccw/dist/core/routes/ccw-routes.js +9 -4
  168. package/ccw/dist/core/routes/ccw-routes.js.map +1 -1
  169. package/ccw/dist/core/routes/claude-routes.d.ts +1 -14
  170. package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
  171. package/ccw/dist/core/routes/claude-routes.js +98 -39
  172. package/ccw/dist/core/routes/claude-routes.js.map +1 -1
  173. package/ccw/dist/core/routes/cli-routes.d.ts +14 -12
  174. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  175. package/ccw/dist/core/routes/cli-routes.js +122 -43
  176. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  177. package/ccw/dist/core/routes/cli-settings-routes.d.ts +11 -0
  178. package/ccw/dist/core/routes/cli-settings-routes.d.ts.map +1 -0
  179. package/ccw/dist/core/routes/cli-settings-routes.js +204 -0
  180. package/ccw/dist/core/routes/cli-settings-routes.js.map +1 -0
  181. package/ccw/dist/core/routes/codexlens/config-handlers.d.ts +6 -0
  182. package/ccw/dist/core/routes/codexlens/config-handlers.d.ts.map +1 -0
  183. package/ccw/dist/core/routes/codexlens/config-handlers.js +1195 -0
  184. package/ccw/dist/core/routes/codexlens/config-handlers.js.map +1 -0
  185. package/ccw/dist/core/routes/codexlens/index-handlers.d.ts +10 -0
  186. package/ccw/dist/core/routes/codexlens/index-handlers.d.ts.map +1 -0
  187. package/ccw/dist/core/routes/codexlens/index-handlers.js +322 -0
  188. package/ccw/dist/core/routes/codexlens/index-handlers.js.map +1 -0
  189. package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts +6 -0
  190. package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts.map +1 -0
  191. package/ccw/dist/core/routes/codexlens/semantic-handlers.js +865 -0
  192. package/ccw/dist/core/routes/codexlens/semantic-handlers.js.map +1 -0
  193. package/ccw/dist/core/routes/codexlens/utils.d.ts +23 -0
  194. package/ccw/dist/core/routes/codexlens/utils.d.ts.map +1 -0
  195. package/ccw/dist/core/routes/codexlens/utils.js +85 -0
  196. package/ccw/dist/core/routes/codexlens/utils.js.map +1 -0
  197. package/ccw/dist/core/routes/codexlens/watcher-handlers.d.ts +13 -0
  198. package/ccw/dist/core/routes/codexlens/watcher-handlers.d.ts.map +1 -0
  199. package/ccw/dist/core/routes/codexlens/watcher-handlers.js +235 -0
  200. package/ccw/dist/core/routes/codexlens/watcher-handlers.js.map +1 -0
  201. package/ccw/dist/core/routes/codexlens-routes.d.ts +2 -11
  202. package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -1
  203. package/ccw/dist/core/routes/codexlens-routes.js +10 -981
  204. package/ccw/dist/core/routes/codexlens-routes.js.map +1 -1
  205. package/ccw/dist/core/routes/discovery-routes.d.ts +1 -35
  206. package/ccw/dist/core/routes/discovery-routes.d.ts.map +1 -1
  207. package/ccw/dist/core/routes/discovery-routes.js +25 -0
  208. package/ccw/dist/core/routes/discovery-routes.js.map +1 -1
  209. package/ccw/dist/core/routes/files-routes.d.ts +1 -14
  210. package/ccw/dist/core/routes/files-routes.d.ts.map +1 -1
  211. package/ccw/dist/core/routes/files-routes.js +57 -14
  212. package/ccw/dist/core/routes/files-routes.js.map +1 -1
  213. package/ccw/dist/core/routes/graph-routes.d.ts +1 -14
  214. package/ccw/dist/core/routes/graph-routes.d.ts.map +1 -1
  215. package/ccw/dist/core/routes/graph-routes.js +36 -37
  216. package/ccw/dist/core/routes/graph-routes.js.map +1 -1
  217. package/ccw/dist/core/routes/help-routes.d.ts +1 -14
  218. package/ccw/dist/core/routes/help-routes.d.ts.map +1 -1
  219. package/ccw/dist/core/routes/help-routes.js +5 -0
  220. package/ccw/dist/core/routes/help-routes.js.map +1 -1
  221. package/ccw/dist/core/routes/hooks-routes.d.ts +4 -14
  222. package/ccw/dist/core/routes/hooks-routes.d.ts.map +1 -1
  223. package/ccw/dist/core/routes/hooks-routes.js +43 -21
  224. package/ccw/dist/core/routes/hooks-routes.js.map +1 -1
  225. package/ccw/dist/core/routes/issue-routes.d.ts +1 -34
  226. package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -1
  227. package/ccw/dist/core/routes/issue-routes.js +24 -0
  228. package/ccw/dist/core/routes/issue-routes.js.map +1 -1
  229. package/ccw/dist/core/routes/litellm-api-routes.d.ts +1 -14
  230. package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -1
  231. package/ccw/dist/core/routes/litellm-api-routes.js +513 -48
  232. package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -1
  233. package/ccw/dist/core/routes/litellm-routes.d.ts +1 -14
  234. package/ccw/dist/core/routes/litellm-routes.d.ts.map +1 -1
  235. package/ccw/dist/core/routes/litellm-routes.js +28 -11
  236. package/ccw/dist/core/routes/litellm-routes.js.map +1 -1
  237. package/ccw/dist/core/routes/mcp-routes.d.ts +1 -14
  238. package/ccw/dist/core/routes/mcp-routes.d.ts.map +1 -1
  239. package/ccw/dist/core/routes/mcp-routes.js +99 -30
  240. package/ccw/dist/core/routes/mcp-routes.js.map +1 -1
  241. package/ccw/dist/core/routes/mcp-templates-db.d.ts.map +1 -1
  242. package/ccw/dist/core/routes/mcp-templates-db.js +30 -31
  243. package/ccw/dist/core/routes/mcp-templates-db.js.map +1 -1
  244. package/ccw/dist/core/routes/memory-routes.d.ts.map +1 -1
  245. package/ccw/dist/core/routes/memory-routes.js +74 -24
  246. package/ccw/dist/core/routes/memory-routes.js.map +1 -1
  247. package/ccw/dist/core/routes/nav-status-routes.d.ts +3 -0
  248. package/ccw/dist/core/routes/nav-status-routes.d.ts.map +1 -0
  249. package/ccw/dist/core/routes/nav-status-routes.js +217 -0
  250. package/ccw/dist/core/routes/nav-status-routes.js.map +1 -0
  251. package/ccw/dist/core/routes/rules-routes.d.ts +1 -14
  252. package/ccw/dist/core/routes/rules-routes.d.ts.map +1 -1
  253. package/ccw/dist/core/routes/rules-routes.js +481 -58
  254. package/ccw/dist/core/routes/rules-routes.js.map +1 -1
  255. package/ccw/dist/core/routes/session-routes.d.ts +1 -14
  256. package/ccw/dist/core/routes/session-routes.d.ts.map +1 -1
  257. package/ccw/dist/core/routes/session-routes.js +15 -3
  258. package/ccw/dist/core/routes/session-routes.js.map +1 -1
  259. package/ccw/dist/core/routes/skills-routes.d.ts +1 -14
  260. package/ccw/dist/core/routes/skills-routes.d.ts.map +1 -1
  261. package/ccw/dist/core/routes/skills-routes.js +394 -112
  262. package/ccw/dist/core/routes/skills-routes.js.map +1 -1
  263. package/ccw/dist/core/routes/status-routes.d.ts +1 -14
  264. package/ccw/dist/core/routes/status-routes.d.ts.map +1 -1
  265. package/ccw/dist/core/routes/status-routes.js +4 -0
  266. package/ccw/dist/core/routes/status-routes.js.map +1 -1
  267. package/ccw/dist/core/routes/system-routes.d.ts +4 -10
  268. package/ccw/dist/core/routes/system-routes.d.ts.map +1 -1
  269. package/ccw/dist/core/routes/system-routes.js +6 -4
  270. package/ccw/dist/core/routes/system-routes.js.map +1 -1
  271. package/ccw/dist/core/routes/types.d.ts +19 -0
  272. package/ccw/dist/core/routes/types.d.ts.map +1 -0
  273. package/ccw/dist/core/routes/types.js +2 -0
  274. package/ccw/dist/core/routes/types.js.map +1 -0
  275. package/ccw/dist/core/server.d.ts.map +1 -1
  276. package/ccw/dist/core/server.js +206 -29
  277. package/ccw/dist/core/server.js.map +1 -1
  278. package/ccw/dist/core/services/api-key-tester.d.ts +42 -0
  279. package/ccw/dist/core/services/api-key-tester.d.ts.map +1 -0
  280. package/ccw/dist/core/services/api-key-tester.js +126 -0
  281. package/ccw/dist/core/services/api-key-tester.js.map +1 -0
  282. package/ccw/dist/core/services/health-check-service.d.ts +88 -0
  283. package/ccw/dist/core/services/health-check-service.d.ts.map +1 -0
  284. package/ccw/dist/core/services/health-check-service.js +293 -0
  285. package/ccw/dist/core/services/health-check-service.js.map +1 -0
  286. package/ccw/dist/core/websocket.d.ts +9 -7
  287. package/ccw/dist/core/websocket.d.ts.map +1 -1
  288. package/ccw/dist/core/websocket.js +9 -4
  289. package/ccw/dist/core/websocket.js.map +1 -1
  290. package/ccw/dist/tools/claude-cli-tools.d.ts +152 -28
  291. package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
  292. package/ccw/dist/tools/claude-cli-tools.js +490 -100
  293. package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
  294. package/ccw/dist/tools/cli-config-manager.d.ts +24 -8
  295. package/ccw/dist/tools/cli-config-manager.d.ts.map +1 -1
  296. package/ccw/dist/tools/cli-config-manager.js +76 -156
  297. package/ccw/dist/tools/cli-config-manager.js.map +1 -1
  298. package/ccw/dist/tools/cli-executor-core.d.ts +85 -0
  299. package/ccw/dist/tools/cli-executor-core.d.ts.map +1 -0
  300. package/ccw/dist/tools/cli-executor-core.js +1310 -0
  301. package/ccw/dist/tools/cli-executor-core.js.map +1 -0
  302. package/ccw/dist/tools/cli-executor-state.d.ts +241 -0
  303. package/ccw/dist/tools/cli-executor-state.d.ts.map +1 -0
  304. package/ccw/dist/tools/cli-executor-state.js +392 -0
  305. package/ccw/dist/tools/cli-executor-state.js.map +1 -0
  306. package/ccw/dist/tools/cli-executor-utils.d.ts +36 -0
  307. package/ccw/dist/tools/cli-executor-utils.d.ts.map +1 -0
  308. package/ccw/dist/tools/cli-executor-utils.js +298 -0
  309. package/ccw/dist/tools/cli-executor-utils.js.map +1 -0
  310. package/ccw/dist/tools/cli-executor.d.ts +3 -377
  311. package/ccw/dist/tools/cli-executor.d.ts.map +1 -1
  312. package/ccw/dist/tools/cli-executor.js +3 -1884
  313. package/ccw/dist/tools/cli-executor.js.map +1 -1
  314. package/ccw/dist/tools/cli-history-store.d.ts +2 -0
  315. package/ccw/dist/tools/cli-history-store.d.ts.map +1 -1
  316. package/ccw/dist/tools/cli-history-store.js.map +1 -1
  317. package/ccw/dist/tools/cli-output-converter.d.ts +192 -0
  318. package/ccw/dist/tools/cli-output-converter.d.ts.map +1 -0
  319. package/ccw/dist/tools/cli-output-converter.js +1047 -0
  320. package/ccw/dist/tools/cli-output-converter.js.map +1 -0
  321. package/ccw/dist/tools/cli-prompt-builder.d.ts +113 -0
  322. package/ccw/dist/tools/cli-prompt-builder.d.ts.map +1 -0
  323. package/ccw/dist/tools/cli-prompt-builder.js +363 -0
  324. package/ccw/dist/tools/cli-prompt-builder.js.map +1 -0
  325. package/ccw/dist/tools/codex-lens.d.ts +15 -1
  326. package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
  327. package/ccw/dist/tools/codex-lens.js +289 -55
  328. package/ccw/dist/tools/codex-lens.js.map +1 -1
  329. package/ccw/dist/tools/detect-changed-modules.d.ts.map +1 -1
  330. package/ccw/dist/tools/detect-changed-modules.js +22 -4
  331. package/ccw/dist/tools/detect-changed-modules.js.map +1 -1
  332. package/ccw/dist/tools/index.d.ts.map +1 -1
  333. package/ccw/dist/tools/index.js +2 -0
  334. package/ccw/dist/tools/index.js.map +1 -1
  335. package/ccw/dist/tools/litellm-client.d.ts.map +1 -1
  336. package/ccw/dist/tools/litellm-client.js +10 -4
  337. package/ccw/dist/tools/litellm-client.js.map +1 -1
  338. package/ccw/dist/tools/litellm-executor.d.ts +2 -4
  339. package/ccw/dist/tools/litellm-executor.d.ts.map +1 -1
  340. package/ccw/dist/tools/litellm-executor.js +39 -8
  341. package/ccw/dist/tools/litellm-executor.js.map +1 -1
  342. package/ccw/dist/tools/native-session-discovery.d.ts +2 -0
  343. package/ccw/dist/tools/native-session-discovery.d.ts.map +1 -1
  344. package/ccw/dist/tools/native-session-discovery.js +197 -1
  345. package/ccw/dist/tools/native-session-discovery.js.map +1 -1
  346. package/ccw/dist/tools/session-manager.d.ts.map +1 -1
  347. package/ccw/dist/tools/session-manager.js +79 -0
  348. package/ccw/dist/tools/session-manager.js.map +1 -1
  349. package/ccw/dist/tools/skill-context-loader.d.ts +15 -0
  350. package/ccw/dist/tools/skill-context-loader.d.ts.map +1 -0
  351. package/ccw/dist/tools/skill-context-loader.js +198 -0
  352. package/ccw/dist/tools/skill-context-loader.js.map +1 -0
  353. package/ccw/dist/tools/smart-search.d.ts +8 -3
  354. package/ccw/dist/tools/smart-search.d.ts.map +1 -1
  355. package/ccw/dist/tools/smart-search.js +378 -75
  356. package/ccw/dist/tools/smart-search.js.map +1 -1
  357. package/ccw/dist/types/cli-settings.d.ts +86 -0
  358. package/ccw/dist/types/cli-settings.d.ts.map +1 -0
  359. package/ccw/dist/types/cli-settings.js +54 -0
  360. package/ccw/dist/types/cli-settings.js.map +1 -0
  361. package/ccw/dist/types/litellm-api-config.d.ts +40 -1
  362. package/ccw/dist/types/litellm-api-config.d.ts.map +1 -1
  363. package/ccw/dist/utils/exec-constants.d.ts +25 -0
  364. package/ccw/dist/utils/exec-constants.d.ts.map +1 -0
  365. package/ccw/dist/utils/exec-constants.js +25 -0
  366. package/ccw/dist/utils/exec-constants.js.map +1 -0
  367. package/ccw/dist/utils/path-resolver.d.ts +1 -0
  368. package/ccw/dist/utils/path-resolver.d.ts.map +1 -1
  369. package/ccw/dist/utils/path-resolver.js +48 -3
  370. package/ccw/dist/utils/path-resolver.js.map +1 -1
  371. package/ccw/dist/utils/path-validator.d.ts.map +1 -1
  372. package/ccw/dist/utils/path-validator.js +25 -6
  373. package/ccw/dist/utils/path-validator.js.map +1 -1
  374. package/ccw/dist/utils/python-utils.d.ts.map +1 -1
  375. package/ccw/dist/utils/python-utils.js +27 -7
  376. package/ccw/dist/utils/python-utils.js.map +1 -1
  377. package/ccw/dist/utils/shell-escape.d.ts +8 -0
  378. package/ccw/dist/utils/shell-escape.d.ts.map +1 -0
  379. package/ccw/dist/utils/shell-escape.js +24 -0
  380. package/ccw/dist/utils/shell-escape.js.map +1 -0
  381. package/ccw/dist/utils/uv-manager.d.ts +167 -0
  382. package/ccw/dist/utils/uv-manager.d.ts.map +1 -0
  383. package/ccw/dist/utils/uv-manager.js +644 -0
  384. package/ccw/dist/utils/uv-manager.js.map +1 -0
  385. package/ccw/src/cli.ts +4 -1
  386. package/ccw/src/commands/cli.ts +132 -34
  387. package/ccw/src/commands/issue.ts +605 -91
  388. package/ccw/src/commands/serve.ts +15 -5
  389. package/ccw/src/commands/stop.ts +32 -5
  390. package/ccw/src/commands/tool.ts +17 -2
  391. package/ccw/src/commands/view.ts +13 -3
  392. package/ccw/src/config/cli-settings-manager.ts +460 -0
  393. package/ccw/src/config/litellm-api-config-manager.ts +392 -57
  394. package/ccw/src/core/auth/csrf-manager.ts +104 -0
  395. package/ccw/src/core/auth/csrf-middleware.ts +159 -0
  396. package/ccw/src/core/auth/middleware.ts +94 -0
  397. package/ccw/src/core/auth/token-manager.ts +219 -0
  398. package/ccw/src/core/cache-manager.ts +64 -52
  399. package/ccw/src/core/claude-freshness.ts +26 -6
  400. package/ccw/src/core/core-memory-store.ts +2 -1
  401. package/ccw/src/core/cors.ts +10 -0
  402. package/ccw/src/core/dashboard-generator-patch.ts +47 -48
  403. package/ccw/src/core/dashboard-generator.ts +797 -744
  404. package/ccw/src/core/data-aggregator.ts +667 -667
  405. package/ccw/src/core/lite-scanner.ts +156 -140
  406. package/ccw/src/core/routes/auth-routes.ts +98 -0
  407. package/ccw/src/core/routes/ccw-routes.ts +10 -20
  408. package/ccw/src/core/routes/claude-routes.ts +101 -51
  409. package/ccw/src/core/routes/cli-routes.ts +152 -55
  410. package/ccw/src/core/routes/cli-settings-routes.ts +232 -0
  411. package/ccw/src/core/routes/codexlens/README.md +37 -0
  412. package/ccw/src/core/routes/codexlens/config-handlers.ts +1269 -0
  413. package/ccw/src/core/routes/codexlens/index-handlers.ts +354 -0
  414. package/ccw/src/core/routes/codexlens/semantic-handlers.ts +931 -0
  415. package/ccw/src/core/routes/codexlens/utils.ts +96 -0
  416. package/ccw/src/core/routes/codexlens/watcher-handlers.ts +265 -0
  417. package/ccw/src/core/routes/codexlens-routes.ts +11 -1044
  418. package/ccw/src/core/routes/discovery-routes.ts +1 -12
  419. package/ccw/src/core/routes/files-routes.ts +112 -40
  420. package/ccw/src/core/routes/graph-routes.ts +39 -46
  421. package/ccw/src/core/routes/help-routes.ts +2 -12
  422. package/ccw/src/core/routes/hooks-routes.ts +83 -44
  423. package/ccw/src/core/routes/issue-routes.ts +1 -12
  424. package/ccw/src/core/routes/litellm-api-routes.ts +574 -60
  425. package/ccw/src/core/routes/litellm-routes.ts +35 -27
  426. package/ccw/src/core/routes/mcp-routes.ts +157 -60
  427. package/ccw/src/core/routes/mcp-routes.ts.backup +549 -550
  428. package/ccw/src/core/routes/mcp-templates-db.ts +267 -268
  429. package/ccw/src/core/routes/memory-routes.ts +76 -22
  430. package/ccw/src/core/routes/nav-status-routes.ts +231 -0
  431. package/ccw/src/core/routes/rules-routes.ts +600 -81
  432. package/ccw/src/core/routes/session-routes.ts +28 -22
  433. package/ccw/src/core/routes/skills-routes.ts +452 -132
  434. package/ccw/src/core/routes/status-routes.ts +1 -12
  435. package/ccw/src/core/routes/system-routes.ts +15 -22
  436. package/ccw/src/core/routes/types.ts +25 -0
  437. package/ccw/src/core/server.ts +657 -468
  438. package/ccw/src/core/services/api-key-tester.ts +160 -0
  439. package/ccw/src/core/services/health-check-service.ts +366 -0
  440. package/ccw/src/core/websocket.ts +20 -12
  441. package/ccw/src/templates/dashboard-css/01-base.css +109 -0
  442. package/ccw/src/templates/dashboard-css/10-cli-status.css +202 -0
  443. package/ccw/src/templates/dashboard-css/21-cli-toolmgmt.css +308 -0
  444. package/ccw/src/templates/dashboard-css/30-core-memory.css +20 -0
  445. package/ccw/src/templates/dashboard-css/31-api-settings.css +751 -14
  446. package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +230 -2
  447. package/ccw/src/templates/dashboard-js/api.js +5 -0
  448. package/ccw/src/templates/dashboard-js/components/cli-status.js +279 -107
  449. package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +262 -20
  450. package/ccw/src/templates/dashboard-js/components/hook-manager.js +105 -5
  451. package/ccw/src/templates/dashboard-js/components/mcp-manager.js +317 -0
  452. package/ccw/src/templates/dashboard-js/components/navigation.js +45 -0
  453. package/ccw/src/templates/dashboard-js/components/notifications.js +128 -0
  454. package/ccw/src/templates/dashboard-js/i18n.js +4448 -3983
  455. package/ccw/src/templates/dashboard-js/main.js +71 -0
  456. package/ccw/src/templates/dashboard-js/services.js +289 -0
  457. package/ccw/src/templates/dashboard-js/views/api-settings.js +5613 -3361
  458. package/ccw/src/templates/dashboard-js/views/claude-manager.js +1 -7
  459. package/ccw/src/templates/dashboard-js/views/cli-manager.js +581 -87
  460. package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +6101 -1965
  461. package/ccw/src/templates/dashboard-js/views/core-memory.js +129 -20
  462. package/ccw/src/templates/dashboard-js/views/hook-manager.js +17 -3
  463. package/ccw/src/templates/dashboard-js/views/mcp-manager.js +63 -0
  464. package/ccw/src/templates/dashboard-js/views/project-overview.js +182 -37
  465. package/ccw/src/templates/dashboard-js/views/rules-manager.js +26 -3
  466. package/ccw/src/templates/dashboard-js/views/skills-manager.js +2 -42
  467. package/ccw/src/templates/dashboard.html +6 -0
  468. package/ccw/src/tools/README.md +29 -0
  469. package/ccw/src/tools/claude-cli-tools.ts +640 -125
  470. package/ccw/src/tools/cli-config-manager.ts +102 -172
  471. package/ccw/src/tools/cli-executor-core.ts +1533 -0
  472. package/ccw/src/tools/cli-executor-state.ts +560 -0
  473. package/ccw/src/tools/cli-executor-utils.ts +349 -0
  474. package/ccw/src/tools/cli-executor.ts +3 -2309
  475. package/ccw/src/tools/cli-history-store.ts +2 -0
  476. package/ccw/src/tools/cli-output-converter.ts +1237 -0
  477. package/ccw/src/tools/cli-prompt-builder.ts +487 -0
  478. package/ccw/src/tools/codex-lens.ts +324 -59
  479. package/ccw/src/tools/detect-changed-modules.ts +24 -6
  480. package/ccw/src/tools/index.ts +2 -0
  481. package/ccw/src/tools/litellm-client.ts +10 -4
  482. package/ccw/src/tools/litellm-executor.ts +146 -114
  483. package/ccw/src/tools/native-session-discovery.ts +209 -1
  484. package/ccw/src/tools/session-manager.ts +88 -0
  485. package/ccw/src/tools/skill-context-loader.ts +213 -0
  486. package/ccw/src/tools/smart-search.ts +427 -76
  487. package/ccw/src/types/cli-settings.ts +137 -0
  488. package/ccw/src/types/litellm-api-config.ts +55 -1
  489. package/ccw/src/utils/exec-constants.ts +24 -0
  490. package/ccw/src/utils/path-resolver.ts +49 -3
  491. package/ccw/src/utils/path-validator.ts +28 -6
  492. package/ccw/src/utils/python-utils.ts +140 -121
  493. package/ccw/src/utils/shell-escape.ts +30 -0
  494. package/ccw/src/utils/uv-manager.ts +796 -0
  495. package/ccw-litellm/src/ccw_litellm/__pycache__/__init__.cpython-310.pyc +0 -0
  496. package/ccw-litellm/src/ccw_litellm/__pycache__/__init__.cpython-312.pyc +0 -0
  497. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/__init__.cpython-310.pyc +0 -0
  498. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/__init__.cpython-312.pyc +0 -0
  499. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-310.pyc +0 -0
  500. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-312.pyc +0 -0
  501. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
  502. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-310.pyc +0 -0
  503. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-312.pyc +0 -0
  504. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-313.pyc +0 -0
  505. package/ccw-litellm/src/ccw_litellm/clients/litellm_embedder.py +270 -251
  506. package/ccw-litellm/src/ccw_litellm/clients/litellm_llm.py +33 -0
  507. package/ccw-litellm/src/ccw_litellm/config/__pycache__/__init__.cpython-310.pyc +0 -0
  508. package/ccw-litellm/src/ccw_litellm/config/__pycache__/__init__.cpython-312.pyc +0 -0
  509. package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-310.pyc +0 -0
  510. package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-312.pyc +0 -0
  511. package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-313.pyc +0 -0
  512. package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-310.pyc +0 -0
  513. package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-312.pyc +0 -0
  514. package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-313.pyc +0 -0
  515. package/ccw-litellm/src/ccw_litellm/config/loader.py +343 -316
  516. package/ccw-litellm/src/ccw_litellm/config/models.py +162 -130
  517. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/__init__.cpython-310.pyc +0 -0
  518. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/__init__.cpython-312.pyc +0 -0
  519. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/embedder.cpython-310.pyc +0 -0
  520. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/embedder.cpython-312.pyc +0 -0
  521. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/llm.cpython-310.pyc +0 -0
  522. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/llm.cpython-312.pyc +0 -0
  523. package/codex-lens/pyproject.toml +43 -0
  524. package/codex-lens/src/codexlens/__pycache__/__init__.cpython-310.pyc +0 -0
  525. package/codex-lens/src/codexlens/__pycache__/__init__.cpython-312.pyc +0 -0
  526. package/codex-lens/src/codexlens/__pycache__/__main__.cpython-310.pyc +0 -0
  527. package/codex-lens/src/codexlens/__pycache__/__main__.cpython-312.pyc +0 -0
  528. package/codex-lens/src/codexlens/__pycache__/config.cpython-310.pyc +0 -0
  529. package/codex-lens/src/codexlens/__pycache__/config.cpython-312.pyc +0 -0
  530. package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
  531. package/codex-lens/src/codexlens/__pycache__/entities.cpython-310.pyc +0 -0
  532. package/codex-lens/src/codexlens/__pycache__/entities.cpython-312.pyc +0 -0
  533. package/codex-lens/src/codexlens/__pycache__/entities.cpython-313.pyc +0 -0
  534. package/codex-lens/src/codexlens/__pycache__/env_config.cpython-310.pyc +0 -0
  535. package/codex-lens/src/codexlens/__pycache__/env_config.cpython-312.pyc +0 -0
  536. package/codex-lens/src/codexlens/__pycache__/env_config.cpython-313.pyc +0 -0
  537. package/codex-lens/src/codexlens/__pycache__/errors.cpython-310.pyc +0 -0
  538. package/codex-lens/src/codexlens/__pycache__/errors.cpython-312.pyc +0 -0
  539. package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-310.pyc +0 -0
  540. package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-312.pyc +0 -0
  541. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-310.pyc +0 -0
  542. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-312.pyc +0 -0
  543. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-313.pyc +0 -0
  544. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-310.pyc +0 -0
  545. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-312.pyc +0 -0
  546. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-313.pyc +0 -0
  547. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-310.pyc +0 -0
  548. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-312.pyc +0 -0
  549. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-313.pyc +0 -0
  550. package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-310.pyc +0 -0
  551. package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-312.pyc +0 -0
  552. package/codex-lens/src/codexlens/cli/commands.py +4416 -2295
  553. package/codex-lens/src/codexlens/cli/embedding_manager.py +777 -15
  554. package/codex-lens/src/codexlens/cli/model_manager.py +676 -0
  555. package/codex-lens/src/codexlens/config.py +356 -12
  556. package/codex-lens/src/codexlens/entities.py +4 -1
  557. package/codex-lens/src/codexlens/env_config.py +304 -0
  558. package/codex-lens/src/codexlens/indexing/__init__.py +23 -1
  559. package/codex-lens/src/codexlens/indexing/__pycache__/__init__.cpython-313.pyc +0 -0
  560. package/codex-lens/src/codexlens/indexing/__pycache__/embedding.cpython-313.pyc +0 -0
  561. package/codex-lens/src/codexlens/indexing/__pycache__/symbol_extractor.cpython-313.pyc +0 -0
  562. package/codex-lens/src/codexlens/indexing/embedding.py +582 -0
  563. package/codex-lens/src/codexlens/indexing/symbol_extractor.py +62 -28
  564. package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-310.pyc +0 -0
  565. package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-312.pyc +0 -0
  566. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-310.pyc +0 -0
  567. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-312.pyc +0 -0
  568. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-313.pyc +0 -0
  569. package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-310.pyc +0 -0
  570. package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-312.pyc +0 -0
  571. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-310.pyc +0 -0
  572. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-312.pyc +0 -0
  573. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-313.pyc +0 -0
  574. package/codex-lens/src/codexlens/parsers/factory.py +139 -10
  575. package/codex-lens/src/codexlens/parsers/treesitter_parser.py +487 -13
  576. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-310.pyc +0 -0
  577. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-312.pyc +0 -0
  578. package/codex-lens/src/codexlens/search/__pycache__/binary_searcher.cpython-313.pyc +0 -0
  579. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-310.pyc +0 -0
  580. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-312.pyc +0 -0
  581. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
  582. package/codex-lens/src/codexlens/search/__pycache__/enrichment.cpython-313.pyc +0 -0
  583. package/codex-lens/src/codexlens/search/__pycache__/graph_expander.cpython-313.pyc +0 -0
  584. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-310.pyc +0 -0
  585. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-312.pyc +0 -0
  586. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
  587. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-310.pyc +0 -0
  588. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-312.pyc +0 -0
  589. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
  590. package/codex-lens/src/codexlens/search/binary_searcher.py +277 -0
  591. package/codex-lens/src/codexlens/search/chain_search.py +1652 -8
  592. package/codex-lens/src/codexlens/search/enrichment.py +21 -0
  593. package/codex-lens/src/codexlens/search/graph_expander.py +264 -0
  594. package/codex-lens/src/codexlens/search/hybrid_search.py +772 -37
  595. package/codex-lens/src/codexlens/search/ranking.py +397 -8
  596. package/codex-lens/src/codexlens/semantic/SPLADE_IMPLEMENTATION.md +225 -0
  597. package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-310.pyc +0 -0
  598. package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-312.pyc +0 -0
  599. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-310.pyc +0 -0
  600. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-312.pyc +0 -0
  601. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-313.pyc +0 -0
  602. package/codex-lens/src/codexlens/semantic/__pycache__/base.cpython-310.pyc +0 -0
  603. package/codex-lens/src/codexlens/semantic/__pycache__/base.cpython-312.pyc +0 -0
  604. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-310.pyc +0 -0
  605. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-312.pyc +0 -0
  606. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-313.pyc +0 -0
  607. package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-310.pyc +0 -0
  608. package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-312.pyc +0 -0
  609. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-310.pyc +0 -0
  610. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-312.pyc +0 -0
  611. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-313.pyc +0 -0
  612. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-310.pyc +0 -0
  613. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-312.pyc +0 -0
  614. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-313.pyc +0 -0
  615. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-310.pyc +0 -0
  616. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-312.pyc +0 -0
  617. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
  618. package/codex-lens/src/codexlens/semantic/__pycache__/reranker.cpython-313.pyc +0 -0
  619. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-310.pyc +0 -0
  620. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-312.pyc +0 -0
  621. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-313.pyc +0 -0
  622. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-310.pyc +0 -0
  623. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-312.pyc +0 -0
  624. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
  625. package/codex-lens/src/codexlens/semantic/ann_index.py +654 -0
  626. package/codex-lens/src/codexlens/semantic/chunker.py +328 -23
  627. package/codex-lens/src/codexlens/semantic/factory.py +63 -3
  628. package/codex-lens/src/codexlens/semantic/gpu_support.py +19 -2
  629. package/codex-lens/src/codexlens/semantic/litellm_embedder.py +144 -144
  630. package/codex-lens/src/codexlens/semantic/reranker/__init__.py +25 -0
  631. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-310.pyc +0 -0
  632. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-312.pyc +0 -0
  633. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-313.pyc +0 -0
  634. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-310.pyc +0 -0
  635. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-312.pyc +0 -0
  636. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-313.pyc +0 -0
  637. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-310.pyc +0 -0
  638. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-312.pyc +0 -0
  639. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-313.pyc +0 -0
  640. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-310.pyc +0 -0
  641. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-312.pyc +0 -0
  642. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-313.pyc +0 -0
  643. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-310.pyc +0 -0
  644. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-312.pyc +0 -0
  645. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-313.pyc +0 -0
  646. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-310.pyc +0 -0
  647. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-312.pyc +0 -0
  648. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-313.pyc +0 -0
  649. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/litellm_reranker.cpython-313.pyc +0 -0
  650. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-310.pyc +0 -0
  651. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-312.pyc +0 -0
  652. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-313.pyc +0 -0
  653. package/codex-lens/src/codexlens/semantic/reranker/api_reranker.py +403 -0
  654. package/codex-lens/src/codexlens/semantic/reranker/base.py +46 -0
  655. package/codex-lens/src/codexlens/semantic/reranker/factory.py +159 -0
  656. package/codex-lens/src/codexlens/semantic/reranker/fastembed_reranker.py +257 -0
  657. package/codex-lens/src/codexlens/semantic/reranker/legacy.py +91 -0
  658. package/codex-lens/src/codexlens/semantic/reranker/litellm_reranker.py +214 -0
  659. package/codex-lens/src/codexlens/semantic/reranker/onnx_reranker.py +268 -0
  660. package/codex-lens/src/codexlens/semantic/splade_encoder.py +567 -0
  661. package/codex-lens/src/codexlens/semantic/vector_store.py +472 -352
  662. package/codex-lens/src/codexlens/storage/__init__.py +3 -0
  663. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-310.pyc +0 -0
  664. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-312.pyc +0 -0
  665. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-313.pyc +0 -0
  666. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-310.pyc +0 -0
  667. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-312.pyc +0 -0
  668. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
  669. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-310.pyc +0 -0
  670. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-312.pyc +0 -0
  671. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-310.pyc +0 -0
  672. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-312.pyc +0 -0
  673. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
  674. package/codex-lens/src/codexlens/storage/__pycache__/merkle_tree.cpython-313.pyc +0 -0
  675. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-310.pyc +0 -0
  676. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-312.pyc +0 -0
  677. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-310.pyc +0 -0
  678. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-312.pyc +0 -0
  679. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-310.pyc +0 -0
  680. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-312.pyc +0 -0
  681. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-313.pyc +0 -0
  682. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-310.pyc +0 -0
  683. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-312.pyc +0 -0
  684. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-313.pyc +0 -0
  685. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-310.pyc +0 -0
  686. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-312.pyc +0 -0
  687. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-310.pyc +0 -0
  688. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-312.pyc +0 -0
  689. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-313.pyc +0 -0
  690. package/codex-lens/src/codexlens/storage/dir_index.py +310 -12
  691. package/codex-lens/src/codexlens/storage/index_tree.py +240 -25
  692. package/codex-lens/src/codexlens/storage/merkle_tree.py +136 -0
  693. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-310.pyc +0 -0
  694. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-312.pyc +0 -0
  695. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_006_enhance_relationships.cpython-313.pyc +0 -0
  696. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-310.pyc +0 -0
  697. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-312.pyc +0 -0
  698. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-313.pyc +0 -0
  699. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_008_add_merkle_hashes.cpython-313.pyc +0 -0
  700. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_009_add_splade.cpython-313.pyc +0 -0
  701. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_010_add_multi_vector_chunks.cpython-313.pyc +0 -0
  702. package/codex-lens/src/codexlens/storage/migrations/migration_006_enhance_relationships.py +37 -0
  703. package/codex-lens/src/codexlens/storage/migrations/migration_007_add_graph_neighbors.py +47 -0
  704. package/codex-lens/src/codexlens/storage/migrations/migration_008_add_merkle_hashes.py +81 -0
  705. package/codex-lens/src/codexlens/storage/migrations/migration_009_add_splade.py +103 -0
  706. package/codex-lens/src/codexlens/storage/migrations/migration_010_add_multi_vector_chunks.py +162 -0
  707. package/codex-lens/src/codexlens/storage/splade_index.py +578 -0
  708. package/codex-lens/src/codexlens/storage/sqlite_store.py +508 -184
  709. package/codex-lens/src/codexlens/storage/vector_meta_store.py +415 -0
  710. package/codex-lens/src/codexlens/watcher/__init__.py +17 -0
  711. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-310.pyc +0 -0
  712. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-312.pyc +0 -0
  713. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-313.pyc +0 -0
  714. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-310.pyc +0 -0
  715. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-312.pyc +0 -0
  716. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-313.pyc +0 -0
  717. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-310.pyc +0 -0
  718. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-312.pyc +0 -0
  719. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-313.pyc +0 -0
  720. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-310.pyc +0 -0
  721. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-312.pyc +0 -0
  722. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-313.pyc +0 -0
  723. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-310.pyc +0 -0
  724. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-312.pyc +0 -0
  725. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-313.pyc +0 -0
  726. package/codex-lens/src/codexlens/watcher/events.py +82 -0
  727. package/codex-lens/src/codexlens/watcher/file_watcher.py +347 -0
  728. package/codex-lens/src/codexlens/watcher/incremental_indexer.py +369 -0
  729. package/codex-lens/src/codexlens/watcher/manager.py +255 -0
  730. package/package.json +4 -1
  731. package/.claude/commands/workflow/docs/analyze.md +0 -1467
  732. package/.claude/commands/workflow/docs/copyright.md +0 -1265
  733. package/.claude/skills/command-guide/SKILL.md +0 -388
  734. package/.claude/skills/command-guide/UPDATE-GUIDELINE.md +0 -592
  735. package/.claude/skills/command-guide/guides/cli-tools-guide.md +0 -410
  736. package/.claude/skills/command-guide/guides/examples.md +0 -537
  737. package/.claude/skills/command-guide/guides/getting-started.md +0 -242
  738. package/.claude/skills/command-guide/guides/implementation-details.md +0 -1010
  739. package/.claude/skills/command-guide/guides/index-structure.md +0 -326
  740. package/.claude/skills/command-guide/guides/troubleshooting.md +0 -92
  741. package/.claude/skills/command-guide/guides/ui-design-workflow-guide.md +0 -316
  742. package/.claude/skills/command-guide/guides/workflow-patterns.md +0 -662
  743. package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +0 -855
  744. package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +0 -267
  745. package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +0 -182
  746. package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +0 -446
  747. package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +0 -558
  748. package/.claude/skills/command-guide/reference/agents/code-developer.md +0 -311
  749. package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +0 -308
  750. package/.claude/skills/command-guide/reference/agents/context-search-agent.md +0 -581
  751. package/.claude/skills/command-guide/reference/agents/doc-generator.md +0 -330
  752. package/.claude/skills/command-guide/reference/agents/memory-bridge.md +0 -94
  753. package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +0 -400
  754. package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +0 -344
  755. package/.claude/skills/command-guide/reference/agents/ui-design-agent.md +0 -593
  756. package/.claude/skills/command-guide/reference/agents/universal-executor.md +0 -131
  757. package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +0 -440
  758. package/.claude/skills/command-guide/reference/commands/enhance-prompt.md +0 -93
  759. package/.claude/skills/command-guide/reference/commands/memory/code-map-memory.md +0 -687
  760. package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +0 -471
  761. package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +0 -386
  762. package/.claude/skills/command-guide/reference/commands/memory/docs.md +0 -616
  763. package/.claude/skills/command-guide/reference/commands/memory/load-skill-memory.md +0 -182
  764. package/.claude/skills/command-guide/reference/commands/memory/load.md +0 -240
  765. package/.claude/skills/command-guide/reference/commands/memory/skill-memory.md +0 -525
  766. package/.claude/skills/command-guide/reference/commands/memory/style-skill-memory.md +0 -396
  767. package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +0 -314
  768. package/.claude/skills/command-guide/reference/commands/memory/update-full.md +0 -332
  769. package/.claude/skills/command-guide/reference/commands/memory/update-related.md +0 -332
  770. package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +0 -517
  771. package/.claude/skills/command-guide/reference/commands/task/breakdown.md +0 -204
  772. package/.claude/skills/command-guide/reference/commands/task/create.md +0 -152
  773. package/.claude/skills/command-guide/reference/commands/task/execute.md +0 -270
  774. package/.claude/skills/command-guide/reference/commands/task/replan.md +0 -437
  775. package/.claude/skills/command-guide/reference/commands/version.md +0 -254
  776. package/.claude/skills/command-guide/reference/commands/workflow/action-plan-verify.md +0 -447
  777. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +0 -585
  778. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +0 -452
  779. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +0 -443
  780. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +0 -220
  781. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +0 -200
  782. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +0 -200
  783. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +0 -200
  784. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +0 -200
  785. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +0 -398
  786. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +0 -387
  787. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +0 -221
  788. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +0 -221
  789. package/.claude/skills/command-guide/reference/commands/workflow/execute.md +0 -465
  790. package/.claude/skills/command-guide/reference/commands/workflow/init.md +0 -164
  791. package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +0 -748
  792. package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +0 -664
  793. package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +0 -645
  794. package/.claude/skills/command-guide/reference/commands/workflow/plan.md +0 -551
  795. package/.claude/skills/command-guide/reference/commands/workflow/replan.md +0 -515
  796. package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +0 -606
  797. package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +0 -765
  798. package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +0 -776
  799. package/.claude/skills/command-guide/reference/commands/workflow/review.md +0 -298
  800. package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +0 -547
  801. package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +0 -114
  802. package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +0 -77
  803. package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +0 -257
  804. package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +0 -460
  805. package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +0 -400
  806. package/.claude/skills/command-guide/reference/commands/workflow/test-cycle-execute.md +0 -498
  807. package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +0 -699
  808. package/.claude/skills/command-guide/reference/commands/workflow/test-gen.md +0 -529
  809. package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +0 -766
  810. package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +0 -433
  811. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +0 -487
  812. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +0 -518
  813. package/.claude/skills/command-guide/reference/commands/workflow/tools/tdd-coverage-analysis.md +0 -309
  814. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +0 -163
  815. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-context-gather.md +0 -232
  816. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +0 -254
  817. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/animation-extract.md +0 -1150
  818. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/codify-style.md +0 -652
  819. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/design-sync.md +0 -454
  820. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/explore-auto.md +0 -678
  821. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +0 -504
  822. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/imitate-auto.md +0 -745
  823. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +0 -537
  824. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/layout-extract.md +0 -788
  825. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/reference-page-generator.md +0 -356
  826. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/style-extract.md +0 -773
  827. package/.claude/skills/command-guide/scripts/analyze_commands.py +0 -502
  828. package/.claude/skills/command-guide/scripts/update-index.sh +0 -130
  829. package/.claude/skills/command-guide/templates/issue-bug.md +0 -104
  830. package/.claude/skills/command-guide/templates/issue-diagnosis.md +0 -275
  831. package/.claude/skills/command-guide/templates/issue-feature.md +0 -97
  832. package/.claude/skills/command-guide/templates/issue-question.md +0 -141
@@ -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
  };