claude-code-workflow 6.3.18 → 6.3.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (832) hide show
  1. package/.claude/CLAUDE.md +8 -5
  2. package/.claude/agents/action-planning-agent.md +26 -2
  3. package/.claude/agents/code-developer.md +132 -43
  4. package/.claude/agents/debug-explore-agent.md +434 -0
  5. package/.claude/agents/issue-plan-agent.md +31 -2
  6. package/.claude/agents/test-fix-agent.md +14 -0
  7. package/.claude/commands/issue/discover.md +41 -0
  8. package/.claude/commands/issue/execute.md +200 -19
  9. package/.claude/commands/issue/new.md +93 -3
  10. package/.claude/commands/issue/plan.md +9 -3
  11. package/.claude/commands/issue/queue.md +94 -39
  12. package/.claude/commands/memory/swagger-docs.md +773 -0
  13. package/.claude/commands/workflow/brainstorm/auto-parallel.md +21 -21
  14. package/.claude/commands/workflow/execute.md +54 -34
  15. package/.claude/commands/workflow/lite-execute.md +48 -164
  16. package/.claude/commands/workflow/lite-fix.md +4 -4
  17. package/.claude/commands/workflow/lite-plan.md +5 -5
  18. package/.claude/commands/workflow/plan.md +27 -27
  19. package/.claude/commands/workflow/review.md +42 -17
  20. package/.claude/commands/workflow/tdd-plan.md +25 -25
  21. package/.claude/commands/workflow/test-fix-gen.md +10 -10
  22. package/.claude/commands/workflow/test-gen.md +14 -14
  23. package/.claude/commands/workflow/ui-design/explore-auto.md +21 -21
  24. package/.claude/commands/workflow/ui-design/imitate-auto.md +24 -24
  25. package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +693 -0
  26. package/.claude/skills/ccw/SKILL.md +462 -0
  27. package/.claude/skills/ccw/index/command-capabilities.json +127 -0
  28. package/.claude/skills/ccw/index/intent-rules.json +136 -0
  29. package/.claude/skills/ccw/index/workflow-chains.json +451 -0
  30. package/.claude/skills/ccw/phases/actions/bugfix.md +218 -0
  31. package/.claude/skills/ccw/phases/actions/coupled.md +194 -0
  32. package/.claude/skills/ccw/phases/actions/docs.md +93 -0
  33. package/.claude/skills/ccw/phases/actions/full.md +154 -0
  34. package/.claude/skills/ccw/phases/actions/issue.md +201 -0
  35. package/.claude/skills/ccw/phases/actions/rapid.md +104 -0
  36. package/.claude/skills/ccw/phases/actions/review-fix.md +84 -0
  37. package/.claude/skills/ccw/phases/actions/tdd.md +66 -0
  38. package/.claude/skills/ccw/phases/actions/ui.md +79 -0
  39. package/.claude/skills/ccw/phases/orchestrator.md +435 -0
  40. package/.claude/skills/ccw/specs/intent-classification.md +336 -0
  41. package/.claude/skills/ccw-help/SKILL.md +177 -0
  42. package/.claude/skills/ccw-help/index/all-agents.json +82 -0
  43. package/.claude/skills/{command-guide → ccw-help}/index/all-commands.json +183 -73
  44. package/.claude/skills/{command-guide → ccw-help}/index/by-category.json +187 -73
  45. package/.claude/skills/{command-guide → ccw-help}/index/by-use-case.json +295 -185
  46. package/.claude/skills/{command-guide → ccw-help}/index/command-relationships.json +19 -166
  47. package/.claude/skills/{command-guide → ccw-help}/index/essential-commands.json +10 -10
  48. package/.claude/skills/ccw-help/scripts/analyze_commands.py +337 -0
  49. package/.claude/skills/code-reviewer/README.md +340 -0
  50. package/.claude/skills/code-reviewer/SKILL.md +308 -0
  51. package/.claude/skills/code-reviewer/phases/01-code-discovery.md +246 -0
  52. package/.claude/skills/code-reviewer/phases/02-security-analysis.md +442 -0
  53. package/.claude/skills/code-reviewer/phases/03-best-practices-review.md +36 -0
  54. package/.claude/skills/code-reviewer/phases/04-report-generation.md +278 -0
  55. package/.claude/skills/code-reviewer/specs/best-practices-requirements.md +346 -0
  56. package/.claude/skills/code-reviewer/specs/quality-standards.md +252 -0
  57. package/.claude/skills/code-reviewer/specs/security-requirements.md +243 -0
  58. package/.claude/skills/code-reviewer/templates/best-practice-finding.md +234 -0
  59. package/.claude/skills/code-reviewer/templates/report-template.md +316 -0
  60. package/.claude/skills/code-reviewer/templates/security-finding.md +161 -0
  61. package/.claude/skills/skill-generator/SKILL.md +187 -0
  62. package/.claude/skills/skill-generator/phases/01-requirements-discovery.md +239 -0
  63. package/.claude/skills/skill-generator/phases/02-structure-generation.md +207 -0
  64. package/.claude/skills/skill-generator/phases/03-phase-generation.md +802 -0
  65. package/.claude/skills/skill-generator/phases/04-specs-templates.md +328 -0
  66. package/.claude/skills/skill-generator/phases/05-validation.md +334 -0
  67. package/.claude/skills/skill-generator/specs/cli-integration.md +448 -0
  68. package/.claude/skills/skill-generator/specs/execution-modes.md +396 -0
  69. package/.claude/skills/skill-generator/specs/scripting-integration.md +265 -0
  70. package/.claude/skills/skill-generator/specs/skill-requirements.md +466 -0
  71. package/.claude/skills/skill-generator/templates/autonomous-action.md +517 -0
  72. package/.claude/skills/skill-generator/templates/autonomous-orchestrator.md +276 -0
  73. package/.claude/skills/skill-generator/templates/code-analysis-action.md +503 -0
  74. package/.claude/skills/skill-generator/templates/llm-action.md +355 -0
  75. package/.claude/skills/skill-generator/templates/script-bash.md +277 -0
  76. package/.claude/skills/skill-generator/templates/script-python.md +198 -0
  77. package/.claude/skills/skill-generator/templates/sequential-phase.md +441 -0
  78. package/.claude/skills/skill-generator/templates/skill-md.md +156 -0
  79. package/.claude/workflows/chinese-response.md +15 -28
  80. package/.claude/workflows/cli-templates/prompts/documentation/swagger-api.txt +266 -0
  81. package/.claude/workflows/cli-tools-usage.md +221 -177
  82. package/.claude/workflows/windows-platform.md +13 -10
  83. package/.codex/prompts/issue-execute.md +310 -82
  84. package/.codex/prompts/issue-queue.md +22 -0
  85. package/.codex/prompts/lite-execute.md +36 -11
  86. package/README.md +309 -305
  87. package/ccw/README.md +10 -4
  88. package/ccw/dist/cli.d.ts.map +1 -1
  89. package/ccw/dist/cli.js +4 -1
  90. package/ccw/dist/cli.js.map +1 -1
  91. package/ccw/dist/commands/cli.d.ts.map +1 -1
  92. package/ccw/dist/commands/cli.js +131 -34
  93. package/ccw/dist/commands/cli.js.map +1 -1
  94. package/ccw/dist/commands/issue.d.ts +152 -0
  95. package/ccw/dist/commands/issue.d.ts.map +1 -1
  96. package/ccw/dist/commands/issue.js +550 -85
  97. package/ccw/dist/commands/issue.js.map +1 -1
  98. package/ccw/dist/commands/serve.d.ts +1 -0
  99. package/ccw/dist/commands/serve.d.ts.map +1 -1
  100. package/ccw/dist/commands/serve.js +12 -5
  101. package/ccw/dist/commands/serve.js.map +1 -1
  102. package/ccw/dist/commands/stop.d.ts.map +1 -1
  103. package/ccw/dist/commands/stop.js +29 -5
  104. package/ccw/dist/commands/stop.js.map +1 -1
  105. package/ccw/dist/commands/tool.d.ts.map +1 -1
  106. package/ccw/dist/commands/tool.js +19 -2
  107. package/ccw/dist/commands/tool.js.map +1 -1
  108. package/ccw/dist/commands/view.d.ts +1 -0
  109. package/ccw/dist/commands/view.d.ts.map +1 -1
  110. package/ccw/dist/commands/view.js +10 -3
  111. package/ccw/dist/commands/view.js.map +1 -1
  112. package/ccw/dist/config/cli-settings-manager.d.ts +86 -0
  113. package/ccw/dist/config/cli-settings-manager.d.ts.map +1 -0
  114. package/ccw/dist/config/cli-settings-manager.js +392 -0
  115. package/ccw/dist/config/cli-settings-manager.js.map +1 -0
  116. package/ccw/dist/config/litellm-api-config-manager.d.ts +71 -5
  117. package/ccw/dist/config/litellm-api-config-manager.d.ts.map +1 -1
  118. package/ccw/dist/config/litellm-api-config-manager.js +290 -20
  119. package/ccw/dist/config/litellm-api-config-manager.js.map +1 -1
  120. package/ccw/dist/core/auth/csrf-manager.d.ts +18 -0
  121. package/ccw/dist/core/auth/csrf-manager.d.ts.map +1 -0
  122. package/ccw/dist/core/auth/csrf-manager.js +80 -0
  123. package/ccw/dist/core/auth/csrf-manager.js.map +1 -0
  124. package/ccw/dist/core/auth/csrf-middleware.d.ts +8 -0
  125. package/ccw/dist/core/auth/csrf-middleware.d.ts.map +1 -0
  126. package/ccw/dist/core/auth/csrf-middleware.js +141 -0
  127. package/ccw/dist/core/auth/csrf-middleware.js.map +1 -0
  128. package/ccw/dist/core/auth/middleware.d.ts +15 -0
  129. package/ccw/dist/core/auth/middleware.d.ts.map +1 -0
  130. package/ccw/dist/core/auth/middleware.js +76 -0
  131. package/ccw/dist/core/auth/middleware.js.map +1 -0
  132. package/ccw/dist/core/auth/token-manager.d.ts +41 -0
  133. package/ccw/dist/core/auth/token-manager.d.ts.map +1 -0
  134. package/ccw/dist/core/auth/token-manager.js +171 -0
  135. package/ccw/dist/core/auth/token-manager.js.map +1 -0
  136. package/ccw/dist/core/cache-manager.d.ts +6 -6
  137. package/ccw/dist/core/cache-manager.d.ts.map +1 -1
  138. package/ccw/dist/core/cache-manager.js +70 -48
  139. package/ccw/dist/core/cache-manager.js.map +1 -1
  140. package/ccw/dist/core/claude-freshness.d.ts.map +1 -1
  141. package/ccw/dist/core/claude-freshness.js +23 -3
  142. package/ccw/dist/core/claude-freshness.js.map +1 -1
  143. package/ccw/dist/core/core-memory-store.d.ts.map +1 -1
  144. package/ccw/dist/core/core-memory-store.js +2 -1
  145. package/ccw/dist/core/core-memory-store.js.map +1 -1
  146. package/ccw/dist/core/cors.d.ts +3 -0
  147. package/ccw/dist/core/cors.d.ts.map +1 -0
  148. package/ccw/dist/core/cors.js +10 -0
  149. package/ccw/dist/core/cors.js.map +1 -0
  150. package/ccw/dist/core/dashboard-generator-patch.js +0 -1
  151. package/ccw/dist/core/dashboard-generator-patch.js.map +1 -1
  152. package/ccw/dist/core/dashboard-generator.d.ts.map +1 -1
  153. package/ccw/dist/core/dashboard-generator.js +417 -416
  154. package/ccw/dist/core/dashboard-generator.js.map +1 -1
  155. package/ccw/dist/core/data-aggregator.js +2 -2
  156. package/ccw/dist/core/data-aggregator.js.map +1 -1
  157. package/ccw/dist/core/lite-scanner.d.ts +1 -1
  158. package/ccw/dist/core/lite-scanner.d.ts.map +1 -1
  159. package/ccw/dist/core/lite-scanner.js +130 -127
  160. package/ccw/dist/core/lite-scanner.js.map +1 -1
  161. package/ccw/dist/core/routes/auth-routes.d.ts +12 -0
  162. package/ccw/dist/core/routes/auth-routes.d.ts.map +1 -0
  163. package/ccw/dist/core/routes/auth-routes.js +80 -0
  164. package/ccw/dist/core/routes/auth-routes.js.map +1 -0
  165. package/ccw/dist/core/routes/ccw-routes.d.ts +1 -14
  166. package/ccw/dist/core/routes/ccw-routes.d.ts.map +1 -1
  167. package/ccw/dist/core/routes/ccw-routes.js +9 -4
  168. package/ccw/dist/core/routes/ccw-routes.js.map +1 -1
  169. package/ccw/dist/core/routes/claude-routes.d.ts +1 -14
  170. package/ccw/dist/core/routes/claude-routes.d.ts.map +1 -1
  171. package/ccw/dist/core/routes/claude-routes.js +98 -39
  172. package/ccw/dist/core/routes/claude-routes.js.map +1 -1
  173. package/ccw/dist/core/routes/cli-routes.d.ts +14 -12
  174. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  175. package/ccw/dist/core/routes/cli-routes.js +122 -43
  176. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  177. package/ccw/dist/core/routes/cli-settings-routes.d.ts +11 -0
  178. package/ccw/dist/core/routes/cli-settings-routes.d.ts.map +1 -0
  179. package/ccw/dist/core/routes/cli-settings-routes.js +204 -0
  180. package/ccw/dist/core/routes/cli-settings-routes.js.map +1 -0
  181. package/ccw/dist/core/routes/codexlens/config-handlers.d.ts +6 -0
  182. package/ccw/dist/core/routes/codexlens/config-handlers.d.ts.map +1 -0
  183. package/ccw/dist/core/routes/codexlens/config-handlers.js +1195 -0
  184. package/ccw/dist/core/routes/codexlens/config-handlers.js.map +1 -0
  185. package/ccw/dist/core/routes/codexlens/index-handlers.d.ts +10 -0
  186. package/ccw/dist/core/routes/codexlens/index-handlers.d.ts.map +1 -0
  187. package/ccw/dist/core/routes/codexlens/index-handlers.js +322 -0
  188. package/ccw/dist/core/routes/codexlens/index-handlers.js.map +1 -0
  189. package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts +6 -0
  190. package/ccw/dist/core/routes/codexlens/semantic-handlers.d.ts.map +1 -0
  191. package/ccw/dist/core/routes/codexlens/semantic-handlers.js +865 -0
  192. package/ccw/dist/core/routes/codexlens/semantic-handlers.js.map +1 -0
  193. package/ccw/dist/core/routes/codexlens/utils.d.ts +23 -0
  194. package/ccw/dist/core/routes/codexlens/utils.d.ts.map +1 -0
  195. package/ccw/dist/core/routes/codexlens/utils.js +85 -0
  196. package/ccw/dist/core/routes/codexlens/utils.js.map +1 -0
  197. package/ccw/dist/core/routes/codexlens/watcher-handlers.d.ts +13 -0
  198. package/ccw/dist/core/routes/codexlens/watcher-handlers.d.ts.map +1 -0
  199. package/ccw/dist/core/routes/codexlens/watcher-handlers.js +235 -0
  200. package/ccw/dist/core/routes/codexlens/watcher-handlers.js.map +1 -0
  201. package/ccw/dist/core/routes/codexlens-routes.d.ts +2 -11
  202. package/ccw/dist/core/routes/codexlens-routes.d.ts.map +1 -1
  203. package/ccw/dist/core/routes/codexlens-routes.js +10 -981
  204. package/ccw/dist/core/routes/codexlens-routes.js.map +1 -1
  205. package/ccw/dist/core/routes/discovery-routes.d.ts +1 -35
  206. package/ccw/dist/core/routes/discovery-routes.d.ts.map +1 -1
  207. package/ccw/dist/core/routes/discovery-routes.js +25 -0
  208. package/ccw/dist/core/routes/discovery-routes.js.map +1 -1
  209. package/ccw/dist/core/routes/files-routes.d.ts +1 -14
  210. package/ccw/dist/core/routes/files-routes.d.ts.map +1 -1
  211. package/ccw/dist/core/routes/files-routes.js +57 -14
  212. package/ccw/dist/core/routes/files-routes.js.map +1 -1
  213. package/ccw/dist/core/routes/graph-routes.d.ts +1 -14
  214. package/ccw/dist/core/routes/graph-routes.d.ts.map +1 -1
  215. package/ccw/dist/core/routes/graph-routes.js +36 -37
  216. package/ccw/dist/core/routes/graph-routes.js.map +1 -1
  217. package/ccw/dist/core/routes/help-routes.d.ts +1 -14
  218. package/ccw/dist/core/routes/help-routes.d.ts.map +1 -1
  219. package/ccw/dist/core/routes/help-routes.js +5 -0
  220. package/ccw/dist/core/routes/help-routes.js.map +1 -1
  221. package/ccw/dist/core/routes/hooks-routes.d.ts +4 -14
  222. package/ccw/dist/core/routes/hooks-routes.d.ts.map +1 -1
  223. package/ccw/dist/core/routes/hooks-routes.js +43 -21
  224. package/ccw/dist/core/routes/hooks-routes.js.map +1 -1
  225. package/ccw/dist/core/routes/issue-routes.d.ts +1 -34
  226. package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -1
  227. package/ccw/dist/core/routes/issue-routes.js +24 -0
  228. package/ccw/dist/core/routes/issue-routes.js.map +1 -1
  229. package/ccw/dist/core/routes/litellm-api-routes.d.ts +1 -14
  230. package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -1
  231. package/ccw/dist/core/routes/litellm-api-routes.js +513 -48
  232. package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -1
  233. package/ccw/dist/core/routes/litellm-routes.d.ts +1 -14
  234. package/ccw/dist/core/routes/litellm-routes.d.ts.map +1 -1
  235. package/ccw/dist/core/routes/litellm-routes.js +28 -11
  236. package/ccw/dist/core/routes/litellm-routes.js.map +1 -1
  237. package/ccw/dist/core/routes/mcp-routes.d.ts +1 -14
  238. package/ccw/dist/core/routes/mcp-routes.d.ts.map +1 -1
  239. package/ccw/dist/core/routes/mcp-routes.js +99 -30
  240. package/ccw/dist/core/routes/mcp-routes.js.map +1 -1
  241. package/ccw/dist/core/routes/mcp-templates-db.d.ts.map +1 -1
  242. package/ccw/dist/core/routes/mcp-templates-db.js +30 -31
  243. package/ccw/dist/core/routes/mcp-templates-db.js.map +1 -1
  244. package/ccw/dist/core/routes/memory-routes.d.ts.map +1 -1
  245. package/ccw/dist/core/routes/memory-routes.js +74 -24
  246. package/ccw/dist/core/routes/memory-routes.js.map +1 -1
  247. package/ccw/dist/core/routes/nav-status-routes.d.ts +3 -0
  248. package/ccw/dist/core/routes/nav-status-routes.d.ts.map +1 -0
  249. package/ccw/dist/core/routes/nav-status-routes.js +217 -0
  250. package/ccw/dist/core/routes/nav-status-routes.js.map +1 -0
  251. package/ccw/dist/core/routes/rules-routes.d.ts +1 -14
  252. package/ccw/dist/core/routes/rules-routes.d.ts.map +1 -1
  253. package/ccw/dist/core/routes/rules-routes.js +481 -58
  254. package/ccw/dist/core/routes/rules-routes.js.map +1 -1
  255. package/ccw/dist/core/routes/session-routes.d.ts +1 -14
  256. package/ccw/dist/core/routes/session-routes.d.ts.map +1 -1
  257. package/ccw/dist/core/routes/session-routes.js +15 -3
  258. package/ccw/dist/core/routes/session-routes.js.map +1 -1
  259. package/ccw/dist/core/routes/skills-routes.d.ts +1 -14
  260. package/ccw/dist/core/routes/skills-routes.d.ts.map +1 -1
  261. package/ccw/dist/core/routes/skills-routes.js +394 -112
  262. package/ccw/dist/core/routes/skills-routes.js.map +1 -1
  263. package/ccw/dist/core/routes/status-routes.d.ts +1 -14
  264. package/ccw/dist/core/routes/status-routes.d.ts.map +1 -1
  265. package/ccw/dist/core/routes/status-routes.js +4 -0
  266. package/ccw/dist/core/routes/status-routes.js.map +1 -1
  267. package/ccw/dist/core/routes/system-routes.d.ts +4 -10
  268. package/ccw/dist/core/routes/system-routes.d.ts.map +1 -1
  269. package/ccw/dist/core/routes/system-routes.js +6 -4
  270. package/ccw/dist/core/routes/system-routes.js.map +1 -1
  271. package/ccw/dist/core/routes/types.d.ts +19 -0
  272. package/ccw/dist/core/routes/types.d.ts.map +1 -0
  273. package/ccw/dist/core/routes/types.js +2 -0
  274. package/ccw/dist/core/routes/types.js.map +1 -0
  275. package/ccw/dist/core/server.d.ts.map +1 -1
  276. package/ccw/dist/core/server.js +206 -29
  277. package/ccw/dist/core/server.js.map +1 -1
  278. package/ccw/dist/core/services/api-key-tester.d.ts +42 -0
  279. package/ccw/dist/core/services/api-key-tester.d.ts.map +1 -0
  280. package/ccw/dist/core/services/api-key-tester.js +126 -0
  281. package/ccw/dist/core/services/api-key-tester.js.map +1 -0
  282. package/ccw/dist/core/services/health-check-service.d.ts +88 -0
  283. package/ccw/dist/core/services/health-check-service.d.ts.map +1 -0
  284. package/ccw/dist/core/services/health-check-service.js +293 -0
  285. package/ccw/dist/core/services/health-check-service.js.map +1 -0
  286. package/ccw/dist/core/websocket.d.ts +9 -7
  287. package/ccw/dist/core/websocket.d.ts.map +1 -1
  288. package/ccw/dist/core/websocket.js +9 -4
  289. package/ccw/dist/core/websocket.js.map +1 -1
  290. package/ccw/dist/tools/claude-cli-tools.d.ts +152 -28
  291. package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
  292. package/ccw/dist/tools/claude-cli-tools.js +490 -100
  293. package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
  294. package/ccw/dist/tools/cli-config-manager.d.ts +24 -8
  295. package/ccw/dist/tools/cli-config-manager.d.ts.map +1 -1
  296. package/ccw/dist/tools/cli-config-manager.js +76 -156
  297. package/ccw/dist/tools/cli-config-manager.js.map +1 -1
  298. package/ccw/dist/tools/cli-executor-core.d.ts +85 -0
  299. package/ccw/dist/tools/cli-executor-core.d.ts.map +1 -0
  300. package/ccw/dist/tools/cli-executor-core.js +1310 -0
  301. package/ccw/dist/tools/cli-executor-core.js.map +1 -0
  302. package/ccw/dist/tools/cli-executor-state.d.ts +241 -0
  303. package/ccw/dist/tools/cli-executor-state.d.ts.map +1 -0
  304. package/ccw/dist/tools/cli-executor-state.js +392 -0
  305. package/ccw/dist/tools/cli-executor-state.js.map +1 -0
  306. package/ccw/dist/tools/cli-executor-utils.d.ts +36 -0
  307. package/ccw/dist/tools/cli-executor-utils.d.ts.map +1 -0
  308. package/ccw/dist/tools/cli-executor-utils.js +298 -0
  309. package/ccw/dist/tools/cli-executor-utils.js.map +1 -0
  310. package/ccw/dist/tools/cli-executor.d.ts +3 -377
  311. package/ccw/dist/tools/cli-executor.d.ts.map +1 -1
  312. package/ccw/dist/tools/cli-executor.js +3 -1884
  313. package/ccw/dist/tools/cli-executor.js.map +1 -1
  314. package/ccw/dist/tools/cli-history-store.d.ts +2 -0
  315. package/ccw/dist/tools/cli-history-store.d.ts.map +1 -1
  316. package/ccw/dist/tools/cli-history-store.js.map +1 -1
  317. package/ccw/dist/tools/cli-output-converter.d.ts +192 -0
  318. package/ccw/dist/tools/cli-output-converter.d.ts.map +1 -0
  319. package/ccw/dist/tools/cli-output-converter.js +1047 -0
  320. package/ccw/dist/tools/cli-output-converter.js.map +1 -0
  321. package/ccw/dist/tools/cli-prompt-builder.d.ts +113 -0
  322. package/ccw/dist/tools/cli-prompt-builder.d.ts.map +1 -0
  323. package/ccw/dist/tools/cli-prompt-builder.js +363 -0
  324. package/ccw/dist/tools/cli-prompt-builder.js.map +1 -0
  325. package/ccw/dist/tools/codex-lens.d.ts +15 -1
  326. package/ccw/dist/tools/codex-lens.d.ts.map +1 -1
  327. package/ccw/dist/tools/codex-lens.js +289 -55
  328. package/ccw/dist/tools/codex-lens.js.map +1 -1
  329. package/ccw/dist/tools/detect-changed-modules.d.ts.map +1 -1
  330. package/ccw/dist/tools/detect-changed-modules.js +22 -4
  331. package/ccw/dist/tools/detect-changed-modules.js.map +1 -1
  332. package/ccw/dist/tools/index.d.ts.map +1 -1
  333. package/ccw/dist/tools/index.js +2 -0
  334. package/ccw/dist/tools/index.js.map +1 -1
  335. package/ccw/dist/tools/litellm-client.d.ts.map +1 -1
  336. package/ccw/dist/tools/litellm-client.js +10 -4
  337. package/ccw/dist/tools/litellm-client.js.map +1 -1
  338. package/ccw/dist/tools/litellm-executor.d.ts +2 -4
  339. package/ccw/dist/tools/litellm-executor.d.ts.map +1 -1
  340. package/ccw/dist/tools/litellm-executor.js +39 -8
  341. package/ccw/dist/tools/litellm-executor.js.map +1 -1
  342. package/ccw/dist/tools/native-session-discovery.d.ts +2 -0
  343. package/ccw/dist/tools/native-session-discovery.d.ts.map +1 -1
  344. package/ccw/dist/tools/native-session-discovery.js +197 -1
  345. package/ccw/dist/tools/native-session-discovery.js.map +1 -1
  346. package/ccw/dist/tools/session-manager.d.ts.map +1 -1
  347. package/ccw/dist/tools/session-manager.js +79 -0
  348. package/ccw/dist/tools/session-manager.js.map +1 -1
  349. package/ccw/dist/tools/skill-context-loader.d.ts +15 -0
  350. package/ccw/dist/tools/skill-context-loader.d.ts.map +1 -0
  351. package/ccw/dist/tools/skill-context-loader.js +198 -0
  352. package/ccw/dist/tools/skill-context-loader.js.map +1 -0
  353. package/ccw/dist/tools/smart-search.d.ts +8 -3
  354. package/ccw/dist/tools/smart-search.d.ts.map +1 -1
  355. package/ccw/dist/tools/smart-search.js +378 -75
  356. package/ccw/dist/tools/smart-search.js.map +1 -1
  357. package/ccw/dist/types/cli-settings.d.ts +86 -0
  358. package/ccw/dist/types/cli-settings.d.ts.map +1 -0
  359. package/ccw/dist/types/cli-settings.js +54 -0
  360. package/ccw/dist/types/cli-settings.js.map +1 -0
  361. package/ccw/dist/types/litellm-api-config.d.ts +40 -1
  362. package/ccw/dist/types/litellm-api-config.d.ts.map +1 -1
  363. package/ccw/dist/utils/exec-constants.d.ts +25 -0
  364. package/ccw/dist/utils/exec-constants.d.ts.map +1 -0
  365. package/ccw/dist/utils/exec-constants.js +25 -0
  366. package/ccw/dist/utils/exec-constants.js.map +1 -0
  367. package/ccw/dist/utils/path-resolver.d.ts +1 -0
  368. package/ccw/dist/utils/path-resolver.d.ts.map +1 -1
  369. package/ccw/dist/utils/path-resolver.js +48 -3
  370. package/ccw/dist/utils/path-resolver.js.map +1 -1
  371. package/ccw/dist/utils/path-validator.d.ts.map +1 -1
  372. package/ccw/dist/utils/path-validator.js +25 -6
  373. package/ccw/dist/utils/path-validator.js.map +1 -1
  374. package/ccw/dist/utils/python-utils.d.ts.map +1 -1
  375. package/ccw/dist/utils/python-utils.js +27 -7
  376. package/ccw/dist/utils/python-utils.js.map +1 -1
  377. package/ccw/dist/utils/shell-escape.d.ts +8 -0
  378. package/ccw/dist/utils/shell-escape.d.ts.map +1 -0
  379. package/ccw/dist/utils/shell-escape.js +24 -0
  380. package/ccw/dist/utils/shell-escape.js.map +1 -0
  381. package/ccw/dist/utils/uv-manager.d.ts +167 -0
  382. package/ccw/dist/utils/uv-manager.d.ts.map +1 -0
  383. package/ccw/dist/utils/uv-manager.js +644 -0
  384. package/ccw/dist/utils/uv-manager.js.map +1 -0
  385. package/ccw/src/cli.ts +4 -1
  386. package/ccw/src/commands/cli.ts +132 -34
  387. package/ccw/src/commands/issue.ts +605 -91
  388. package/ccw/src/commands/serve.ts +15 -5
  389. package/ccw/src/commands/stop.ts +32 -5
  390. package/ccw/src/commands/tool.ts +17 -2
  391. package/ccw/src/commands/view.ts +13 -3
  392. package/ccw/src/config/cli-settings-manager.ts +460 -0
  393. package/ccw/src/config/litellm-api-config-manager.ts +392 -57
  394. package/ccw/src/core/auth/csrf-manager.ts +104 -0
  395. package/ccw/src/core/auth/csrf-middleware.ts +159 -0
  396. package/ccw/src/core/auth/middleware.ts +94 -0
  397. package/ccw/src/core/auth/token-manager.ts +219 -0
  398. package/ccw/src/core/cache-manager.ts +64 -52
  399. package/ccw/src/core/claude-freshness.ts +26 -6
  400. package/ccw/src/core/core-memory-store.ts +2 -1
  401. package/ccw/src/core/cors.ts +10 -0
  402. package/ccw/src/core/dashboard-generator-patch.ts +47 -48
  403. package/ccw/src/core/dashboard-generator.ts +797 -744
  404. package/ccw/src/core/data-aggregator.ts +667 -667
  405. package/ccw/src/core/lite-scanner.ts +156 -140
  406. package/ccw/src/core/routes/auth-routes.ts +98 -0
  407. package/ccw/src/core/routes/ccw-routes.ts +10 -20
  408. package/ccw/src/core/routes/claude-routes.ts +101 -51
  409. package/ccw/src/core/routes/cli-routes.ts +152 -55
  410. package/ccw/src/core/routes/cli-settings-routes.ts +232 -0
  411. package/ccw/src/core/routes/codexlens/README.md +37 -0
  412. package/ccw/src/core/routes/codexlens/config-handlers.ts +1269 -0
  413. package/ccw/src/core/routes/codexlens/index-handlers.ts +354 -0
  414. package/ccw/src/core/routes/codexlens/semantic-handlers.ts +931 -0
  415. package/ccw/src/core/routes/codexlens/utils.ts +96 -0
  416. package/ccw/src/core/routes/codexlens/watcher-handlers.ts +265 -0
  417. package/ccw/src/core/routes/codexlens-routes.ts +11 -1044
  418. package/ccw/src/core/routes/discovery-routes.ts +1 -12
  419. package/ccw/src/core/routes/files-routes.ts +112 -40
  420. package/ccw/src/core/routes/graph-routes.ts +39 -46
  421. package/ccw/src/core/routes/help-routes.ts +2 -12
  422. package/ccw/src/core/routes/hooks-routes.ts +83 -44
  423. package/ccw/src/core/routes/issue-routes.ts +1 -12
  424. package/ccw/src/core/routes/litellm-api-routes.ts +574 -60
  425. package/ccw/src/core/routes/litellm-routes.ts +35 -27
  426. package/ccw/src/core/routes/mcp-routes.ts +157 -60
  427. package/ccw/src/core/routes/mcp-routes.ts.backup +549 -550
  428. package/ccw/src/core/routes/mcp-templates-db.ts +267 -268
  429. package/ccw/src/core/routes/memory-routes.ts +76 -22
  430. package/ccw/src/core/routes/nav-status-routes.ts +231 -0
  431. package/ccw/src/core/routes/rules-routes.ts +600 -81
  432. package/ccw/src/core/routes/session-routes.ts +28 -22
  433. package/ccw/src/core/routes/skills-routes.ts +452 -132
  434. package/ccw/src/core/routes/status-routes.ts +1 -12
  435. package/ccw/src/core/routes/system-routes.ts +15 -22
  436. package/ccw/src/core/routes/types.ts +25 -0
  437. package/ccw/src/core/server.ts +657 -468
  438. package/ccw/src/core/services/api-key-tester.ts +160 -0
  439. package/ccw/src/core/services/health-check-service.ts +366 -0
  440. package/ccw/src/core/websocket.ts +20 -12
  441. package/ccw/src/templates/dashboard-css/01-base.css +109 -0
  442. package/ccw/src/templates/dashboard-css/10-cli-status.css +202 -0
  443. package/ccw/src/templates/dashboard-css/21-cli-toolmgmt.css +308 -0
  444. package/ccw/src/templates/dashboard-css/30-core-memory.css +20 -0
  445. package/ccw/src/templates/dashboard-css/31-api-settings.css +751 -14
  446. package/ccw/src/templates/dashboard-css/33-cli-stream-viewer.css +230 -2
  447. package/ccw/src/templates/dashboard-js/api.js +5 -0
  448. package/ccw/src/templates/dashboard-js/components/cli-status.js +279 -107
  449. package/ccw/src/templates/dashboard-js/components/cli-stream-viewer.js +262 -20
  450. package/ccw/src/templates/dashboard-js/components/hook-manager.js +105 -5
  451. package/ccw/src/templates/dashboard-js/components/mcp-manager.js +317 -0
  452. package/ccw/src/templates/dashboard-js/components/navigation.js +45 -0
  453. package/ccw/src/templates/dashboard-js/components/notifications.js +128 -0
  454. package/ccw/src/templates/dashboard-js/i18n.js +4448 -3983
  455. package/ccw/src/templates/dashboard-js/main.js +71 -0
  456. package/ccw/src/templates/dashboard-js/services.js +289 -0
  457. package/ccw/src/templates/dashboard-js/views/api-settings.js +5613 -3361
  458. package/ccw/src/templates/dashboard-js/views/claude-manager.js +1 -7
  459. package/ccw/src/templates/dashboard-js/views/cli-manager.js +581 -87
  460. package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +6101 -1965
  461. package/ccw/src/templates/dashboard-js/views/core-memory.js +129 -20
  462. package/ccw/src/templates/dashboard-js/views/hook-manager.js +17 -3
  463. package/ccw/src/templates/dashboard-js/views/mcp-manager.js +63 -0
  464. package/ccw/src/templates/dashboard-js/views/project-overview.js +182 -37
  465. package/ccw/src/templates/dashboard-js/views/rules-manager.js +26 -3
  466. package/ccw/src/templates/dashboard-js/views/skills-manager.js +2 -42
  467. package/ccw/src/templates/dashboard.html +6 -0
  468. package/ccw/src/tools/README.md +29 -0
  469. package/ccw/src/tools/claude-cli-tools.ts +640 -125
  470. package/ccw/src/tools/cli-config-manager.ts +102 -172
  471. package/ccw/src/tools/cli-executor-core.ts +1533 -0
  472. package/ccw/src/tools/cli-executor-state.ts +560 -0
  473. package/ccw/src/tools/cli-executor-utils.ts +349 -0
  474. package/ccw/src/tools/cli-executor.ts +3 -2309
  475. package/ccw/src/tools/cli-history-store.ts +2 -0
  476. package/ccw/src/tools/cli-output-converter.ts +1237 -0
  477. package/ccw/src/tools/cli-prompt-builder.ts +487 -0
  478. package/ccw/src/tools/codex-lens.ts +324 -59
  479. package/ccw/src/tools/detect-changed-modules.ts +24 -6
  480. package/ccw/src/tools/index.ts +2 -0
  481. package/ccw/src/tools/litellm-client.ts +10 -4
  482. package/ccw/src/tools/litellm-executor.ts +146 -114
  483. package/ccw/src/tools/native-session-discovery.ts +209 -1
  484. package/ccw/src/tools/session-manager.ts +88 -0
  485. package/ccw/src/tools/skill-context-loader.ts +213 -0
  486. package/ccw/src/tools/smart-search.ts +427 -76
  487. package/ccw/src/types/cli-settings.ts +137 -0
  488. package/ccw/src/types/litellm-api-config.ts +55 -1
  489. package/ccw/src/utils/exec-constants.ts +24 -0
  490. package/ccw/src/utils/path-resolver.ts +49 -3
  491. package/ccw/src/utils/path-validator.ts +28 -6
  492. package/ccw/src/utils/python-utils.ts +140 -121
  493. package/ccw/src/utils/shell-escape.ts +30 -0
  494. package/ccw/src/utils/uv-manager.ts +796 -0
  495. package/ccw-litellm/src/ccw_litellm/__pycache__/__init__.cpython-310.pyc +0 -0
  496. package/ccw-litellm/src/ccw_litellm/__pycache__/__init__.cpython-312.pyc +0 -0
  497. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/__init__.cpython-310.pyc +0 -0
  498. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/__init__.cpython-312.pyc +0 -0
  499. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-310.pyc +0 -0
  500. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-312.pyc +0 -0
  501. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
  502. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-310.pyc +0 -0
  503. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-312.pyc +0 -0
  504. package/ccw-litellm/src/ccw_litellm/clients/__pycache__/litellm_llm.cpython-313.pyc +0 -0
  505. package/ccw-litellm/src/ccw_litellm/clients/litellm_embedder.py +270 -251
  506. package/ccw-litellm/src/ccw_litellm/clients/litellm_llm.py +33 -0
  507. package/ccw-litellm/src/ccw_litellm/config/__pycache__/__init__.cpython-310.pyc +0 -0
  508. package/ccw-litellm/src/ccw_litellm/config/__pycache__/__init__.cpython-312.pyc +0 -0
  509. package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-310.pyc +0 -0
  510. package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-312.pyc +0 -0
  511. package/ccw-litellm/src/ccw_litellm/config/__pycache__/loader.cpython-313.pyc +0 -0
  512. package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-310.pyc +0 -0
  513. package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-312.pyc +0 -0
  514. package/ccw-litellm/src/ccw_litellm/config/__pycache__/models.cpython-313.pyc +0 -0
  515. package/ccw-litellm/src/ccw_litellm/config/loader.py +343 -316
  516. package/ccw-litellm/src/ccw_litellm/config/models.py +162 -130
  517. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/__init__.cpython-310.pyc +0 -0
  518. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/__init__.cpython-312.pyc +0 -0
  519. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/embedder.cpython-310.pyc +0 -0
  520. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/embedder.cpython-312.pyc +0 -0
  521. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/llm.cpython-310.pyc +0 -0
  522. package/ccw-litellm/src/ccw_litellm/interfaces/__pycache__/llm.cpython-312.pyc +0 -0
  523. package/codex-lens/pyproject.toml +43 -0
  524. package/codex-lens/src/codexlens/__pycache__/__init__.cpython-310.pyc +0 -0
  525. package/codex-lens/src/codexlens/__pycache__/__init__.cpython-312.pyc +0 -0
  526. package/codex-lens/src/codexlens/__pycache__/__main__.cpython-310.pyc +0 -0
  527. package/codex-lens/src/codexlens/__pycache__/__main__.cpython-312.pyc +0 -0
  528. package/codex-lens/src/codexlens/__pycache__/config.cpython-310.pyc +0 -0
  529. package/codex-lens/src/codexlens/__pycache__/config.cpython-312.pyc +0 -0
  530. package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
  531. package/codex-lens/src/codexlens/__pycache__/entities.cpython-310.pyc +0 -0
  532. package/codex-lens/src/codexlens/__pycache__/entities.cpython-312.pyc +0 -0
  533. package/codex-lens/src/codexlens/__pycache__/entities.cpython-313.pyc +0 -0
  534. package/codex-lens/src/codexlens/__pycache__/env_config.cpython-310.pyc +0 -0
  535. package/codex-lens/src/codexlens/__pycache__/env_config.cpython-312.pyc +0 -0
  536. package/codex-lens/src/codexlens/__pycache__/env_config.cpython-313.pyc +0 -0
  537. package/codex-lens/src/codexlens/__pycache__/errors.cpython-310.pyc +0 -0
  538. package/codex-lens/src/codexlens/__pycache__/errors.cpython-312.pyc +0 -0
  539. package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-310.pyc +0 -0
  540. package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-312.pyc +0 -0
  541. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-310.pyc +0 -0
  542. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-312.pyc +0 -0
  543. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-313.pyc +0 -0
  544. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-310.pyc +0 -0
  545. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-312.pyc +0 -0
  546. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-313.pyc +0 -0
  547. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-310.pyc +0 -0
  548. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-312.pyc +0 -0
  549. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-313.pyc +0 -0
  550. package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-310.pyc +0 -0
  551. package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-312.pyc +0 -0
  552. package/codex-lens/src/codexlens/cli/commands.py +4416 -2295
  553. package/codex-lens/src/codexlens/cli/embedding_manager.py +777 -15
  554. package/codex-lens/src/codexlens/cli/model_manager.py +676 -0
  555. package/codex-lens/src/codexlens/config.py +356 -12
  556. package/codex-lens/src/codexlens/entities.py +4 -1
  557. package/codex-lens/src/codexlens/env_config.py +304 -0
  558. package/codex-lens/src/codexlens/indexing/__init__.py +23 -1
  559. package/codex-lens/src/codexlens/indexing/__pycache__/__init__.cpython-313.pyc +0 -0
  560. package/codex-lens/src/codexlens/indexing/__pycache__/embedding.cpython-313.pyc +0 -0
  561. package/codex-lens/src/codexlens/indexing/__pycache__/symbol_extractor.cpython-313.pyc +0 -0
  562. package/codex-lens/src/codexlens/indexing/embedding.py +582 -0
  563. package/codex-lens/src/codexlens/indexing/symbol_extractor.py +62 -28
  564. package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-310.pyc +0 -0
  565. package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-312.pyc +0 -0
  566. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-310.pyc +0 -0
  567. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-312.pyc +0 -0
  568. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-313.pyc +0 -0
  569. package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-310.pyc +0 -0
  570. package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-312.pyc +0 -0
  571. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-310.pyc +0 -0
  572. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-312.pyc +0 -0
  573. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-313.pyc +0 -0
  574. package/codex-lens/src/codexlens/parsers/factory.py +139 -10
  575. package/codex-lens/src/codexlens/parsers/treesitter_parser.py +487 -13
  576. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-310.pyc +0 -0
  577. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-312.pyc +0 -0
  578. package/codex-lens/src/codexlens/search/__pycache__/binary_searcher.cpython-313.pyc +0 -0
  579. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-310.pyc +0 -0
  580. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-312.pyc +0 -0
  581. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
  582. package/codex-lens/src/codexlens/search/__pycache__/enrichment.cpython-313.pyc +0 -0
  583. package/codex-lens/src/codexlens/search/__pycache__/graph_expander.cpython-313.pyc +0 -0
  584. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-310.pyc +0 -0
  585. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-312.pyc +0 -0
  586. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
  587. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-310.pyc +0 -0
  588. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-312.pyc +0 -0
  589. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
  590. package/codex-lens/src/codexlens/search/binary_searcher.py +277 -0
  591. package/codex-lens/src/codexlens/search/chain_search.py +1652 -8
  592. package/codex-lens/src/codexlens/search/enrichment.py +21 -0
  593. package/codex-lens/src/codexlens/search/graph_expander.py +264 -0
  594. package/codex-lens/src/codexlens/search/hybrid_search.py +772 -37
  595. package/codex-lens/src/codexlens/search/ranking.py +397 -8
  596. package/codex-lens/src/codexlens/semantic/SPLADE_IMPLEMENTATION.md +225 -0
  597. package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-310.pyc +0 -0
  598. package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-312.pyc +0 -0
  599. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-310.pyc +0 -0
  600. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-312.pyc +0 -0
  601. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-313.pyc +0 -0
  602. package/codex-lens/src/codexlens/semantic/__pycache__/base.cpython-310.pyc +0 -0
  603. package/codex-lens/src/codexlens/semantic/__pycache__/base.cpython-312.pyc +0 -0
  604. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-310.pyc +0 -0
  605. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-312.pyc +0 -0
  606. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-313.pyc +0 -0
  607. package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-310.pyc +0 -0
  608. package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-312.pyc +0 -0
  609. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-310.pyc +0 -0
  610. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-312.pyc +0 -0
  611. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-313.pyc +0 -0
  612. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-310.pyc +0 -0
  613. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-312.pyc +0 -0
  614. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-313.pyc +0 -0
  615. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-310.pyc +0 -0
  616. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-312.pyc +0 -0
  617. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
  618. package/codex-lens/src/codexlens/semantic/__pycache__/reranker.cpython-313.pyc +0 -0
  619. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-310.pyc +0 -0
  620. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-312.pyc +0 -0
  621. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-313.pyc +0 -0
  622. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-310.pyc +0 -0
  623. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-312.pyc +0 -0
  624. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
  625. package/codex-lens/src/codexlens/semantic/ann_index.py +654 -0
  626. package/codex-lens/src/codexlens/semantic/chunker.py +328 -23
  627. package/codex-lens/src/codexlens/semantic/factory.py +63 -3
  628. package/codex-lens/src/codexlens/semantic/gpu_support.py +19 -2
  629. package/codex-lens/src/codexlens/semantic/litellm_embedder.py +144 -144
  630. package/codex-lens/src/codexlens/semantic/reranker/__init__.py +25 -0
  631. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-310.pyc +0 -0
  632. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-312.pyc +0 -0
  633. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-313.pyc +0 -0
  634. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-310.pyc +0 -0
  635. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-312.pyc +0 -0
  636. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-313.pyc +0 -0
  637. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-310.pyc +0 -0
  638. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-312.pyc +0 -0
  639. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-313.pyc +0 -0
  640. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-310.pyc +0 -0
  641. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-312.pyc +0 -0
  642. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-313.pyc +0 -0
  643. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-310.pyc +0 -0
  644. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-312.pyc +0 -0
  645. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-313.pyc +0 -0
  646. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-310.pyc +0 -0
  647. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-312.pyc +0 -0
  648. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-313.pyc +0 -0
  649. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/litellm_reranker.cpython-313.pyc +0 -0
  650. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-310.pyc +0 -0
  651. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-312.pyc +0 -0
  652. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-313.pyc +0 -0
  653. package/codex-lens/src/codexlens/semantic/reranker/api_reranker.py +403 -0
  654. package/codex-lens/src/codexlens/semantic/reranker/base.py +46 -0
  655. package/codex-lens/src/codexlens/semantic/reranker/factory.py +159 -0
  656. package/codex-lens/src/codexlens/semantic/reranker/fastembed_reranker.py +257 -0
  657. package/codex-lens/src/codexlens/semantic/reranker/legacy.py +91 -0
  658. package/codex-lens/src/codexlens/semantic/reranker/litellm_reranker.py +214 -0
  659. package/codex-lens/src/codexlens/semantic/reranker/onnx_reranker.py +268 -0
  660. package/codex-lens/src/codexlens/semantic/splade_encoder.py +567 -0
  661. package/codex-lens/src/codexlens/semantic/vector_store.py +472 -352
  662. package/codex-lens/src/codexlens/storage/__init__.py +3 -0
  663. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-310.pyc +0 -0
  664. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-312.pyc +0 -0
  665. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-313.pyc +0 -0
  666. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-310.pyc +0 -0
  667. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-312.pyc +0 -0
  668. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
  669. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-310.pyc +0 -0
  670. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-312.pyc +0 -0
  671. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-310.pyc +0 -0
  672. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-312.pyc +0 -0
  673. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
  674. package/codex-lens/src/codexlens/storage/__pycache__/merkle_tree.cpython-313.pyc +0 -0
  675. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-310.pyc +0 -0
  676. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-312.pyc +0 -0
  677. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-310.pyc +0 -0
  678. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-312.pyc +0 -0
  679. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-310.pyc +0 -0
  680. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-312.pyc +0 -0
  681. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-313.pyc +0 -0
  682. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-310.pyc +0 -0
  683. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-312.pyc +0 -0
  684. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-313.pyc +0 -0
  685. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-310.pyc +0 -0
  686. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-312.pyc +0 -0
  687. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-310.pyc +0 -0
  688. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-312.pyc +0 -0
  689. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-313.pyc +0 -0
  690. package/codex-lens/src/codexlens/storage/dir_index.py +310 -12
  691. package/codex-lens/src/codexlens/storage/index_tree.py +240 -25
  692. package/codex-lens/src/codexlens/storage/merkle_tree.py +136 -0
  693. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-310.pyc +0 -0
  694. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-312.pyc +0 -0
  695. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_006_enhance_relationships.cpython-313.pyc +0 -0
  696. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-310.pyc +0 -0
  697. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-312.pyc +0 -0
  698. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-313.pyc +0 -0
  699. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_008_add_merkle_hashes.cpython-313.pyc +0 -0
  700. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_009_add_splade.cpython-313.pyc +0 -0
  701. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_010_add_multi_vector_chunks.cpython-313.pyc +0 -0
  702. package/codex-lens/src/codexlens/storage/migrations/migration_006_enhance_relationships.py +37 -0
  703. package/codex-lens/src/codexlens/storage/migrations/migration_007_add_graph_neighbors.py +47 -0
  704. package/codex-lens/src/codexlens/storage/migrations/migration_008_add_merkle_hashes.py +81 -0
  705. package/codex-lens/src/codexlens/storage/migrations/migration_009_add_splade.py +103 -0
  706. package/codex-lens/src/codexlens/storage/migrations/migration_010_add_multi_vector_chunks.py +162 -0
  707. package/codex-lens/src/codexlens/storage/splade_index.py +578 -0
  708. package/codex-lens/src/codexlens/storage/sqlite_store.py +508 -184
  709. package/codex-lens/src/codexlens/storage/vector_meta_store.py +415 -0
  710. package/codex-lens/src/codexlens/watcher/__init__.py +17 -0
  711. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-310.pyc +0 -0
  712. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-312.pyc +0 -0
  713. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-313.pyc +0 -0
  714. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-310.pyc +0 -0
  715. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-312.pyc +0 -0
  716. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-313.pyc +0 -0
  717. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-310.pyc +0 -0
  718. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-312.pyc +0 -0
  719. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-313.pyc +0 -0
  720. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-310.pyc +0 -0
  721. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-312.pyc +0 -0
  722. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-313.pyc +0 -0
  723. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-310.pyc +0 -0
  724. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-312.pyc +0 -0
  725. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-313.pyc +0 -0
  726. package/codex-lens/src/codexlens/watcher/events.py +82 -0
  727. package/codex-lens/src/codexlens/watcher/file_watcher.py +347 -0
  728. package/codex-lens/src/codexlens/watcher/incremental_indexer.py +369 -0
  729. package/codex-lens/src/codexlens/watcher/manager.py +255 -0
  730. package/package.json +4 -1
  731. package/.claude/commands/workflow/docs/analyze.md +0 -1467
  732. package/.claude/commands/workflow/docs/copyright.md +0 -1265
  733. package/.claude/skills/command-guide/SKILL.md +0 -388
  734. package/.claude/skills/command-guide/UPDATE-GUIDELINE.md +0 -592
  735. package/.claude/skills/command-guide/guides/cli-tools-guide.md +0 -410
  736. package/.claude/skills/command-guide/guides/examples.md +0 -537
  737. package/.claude/skills/command-guide/guides/getting-started.md +0 -242
  738. package/.claude/skills/command-guide/guides/implementation-details.md +0 -1010
  739. package/.claude/skills/command-guide/guides/index-structure.md +0 -326
  740. package/.claude/skills/command-guide/guides/troubleshooting.md +0 -92
  741. package/.claude/skills/command-guide/guides/ui-design-workflow-guide.md +0 -316
  742. package/.claude/skills/command-guide/guides/workflow-patterns.md +0 -662
  743. package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +0 -855
  744. package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +0 -267
  745. package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +0 -182
  746. package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +0 -446
  747. package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +0 -558
  748. package/.claude/skills/command-guide/reference/agents/code-developer.md +0 -311
  749. package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +0 -308
  750. package/.claude/skills/command-guide/reference/agents/context-search-agent.md +0 -581
  751. package/.claude/skills/command-guide/reference/agents/doc-generator.md +0 -330
  752. package/.claude/skills/command-guide/reference/agents/memory-bridge.md +0 -94
  753. package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +0 -400
  754. package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +0 -344
  755. package/.claude/skills/command-guide/reference/agents/ui-design-agent.md +0 -593
  756. package/.claude/skills/command-guide/reference/agents/universal-executor.md +0 -131
  757. package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +0 -440
  758. package/.claude/skills/command-guide/reference/commands/enhance-prompt.md +0 -93
  759. package/.claude/skills/command-guide/reference/commands/memory/code-map-memory.md +0 -687
  760. package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +0 -471
  761. package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +0 -386
  762. package/.claude/skills/command-guide/reference/commands/memory/docs.md +0 -616
  763. package/.claude/skills/command-guide/reference/commands/memory/load-skill-memory.md +0 -182
  764. package/.claude/skills/command-guide/reference/commands/memory/load.md +0 -240
  765. package/.claude/skills/command-guide/reference/commands/memory/skill-memory.md +0 -525
  766. package/.claude/skills/command-guide/reference/commands/memory/style-skill-memory.md +0 -396
  767. package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +0 -314
  768. package/.claude/skills/command-guide/reference/commands/memory/update-full.md +0 -332
  769. package/.claude/skills/command-guide/reference/commands/memory/update-related.md +0 -332
  770. package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +0 -517
  771. package/.claude/skills/command-guide/reference/commands/task/breakdown.md +0 -204
  772. package/.claude/skills/command-guide/reference/commands/task/create.md +0 -152
  773. package/.claude/skills/command-guide/reference/commands/task/execute.md +0 -270
  774. package/.claude/skills/command-guide/reference/commands/task/replan.md +0 -437
  775. package/.claude/skills/command-guide/reference/commands/version.md +0 -254
  776. package/.claude/skills/command-guide/reference/commands/workflow/action-plan-verify.md +0 -447
  777. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +0 -585
  778. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +0 -452
  779. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +0 -443
  780. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +0 -220
  781. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +0 -200
  782. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +0 -200
  783. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +0 -200
  784. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +0 -200
  785. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +0 -398
  786. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +0 -387
  787. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +0 -221
  788. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +0 -221
  789. package/.claude/skills/command-guide/reference/commands/workflow/execute.md +0 -465
  790. package/.claude/skills/command-guide/reference/commands/workflow/init.md +0 -164
  791. package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +0 -748
  792. package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +0 -664
  793. package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +0 -645
  794. package/.claude/skills/command-guide/reference/commands/workflow/plan.md +0 -551
  795. package/.claude/skills/command-guide/reference/commands/workflow/replan.md +0 -515
  796. package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +0 -606
  797. package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +0 -765
  798. package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +0 -776
  799. package/.claude/skills/command-guide/reference/commands/workflow/review.md +0 -298
  800. package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +0 -547
  801. package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +0 -114
  802. package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +0 -77
  803. package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +0 -257
  804. package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +0 -460
  805. package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +0 -400
  806. package/.claude/skills/command-guide/reference/commands/workflow/test-cycle-execute.md +0 -498
  807. package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +0 -699
  808. package/.claude/skills/command-guide/reference/commands/workflow/test-gen.md +0 -529
  809. package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +0 -766
  810. package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +0 -433
  811. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +0 -487
  812. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +0 -518
  813. package/.claude/skills/command-guide/reference/commands/workflow/tools/tdd-coverage-analysis.md +0 -309
  814. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +0 -163
  815. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-context-gather.md +0 -232
  816. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +0 -254
  817. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/animation-extract.md +0 -1150
  818. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/codify-style.md +0 -652
  819. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/design-sync.md +0 -454
  820. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/explore-auto.md +0 -678
  821. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +0 -504
  822. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/imitate-auto.md +0 -745
  823. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +0 -537
  824. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/layout-extract.md +0 -788
  825. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/reference-page-generator.md +0 -356
  826. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/style-extract.md +0 -773
  827. package/.claude/skills/command-guide/scripts/analyze_commands.py +0 -502
  828. package/.claude/skills/command-guide/scripts/update-index.sh +0 -130
  829. package/.claude/skills/command-guide/templates/issue-bug.md +0 -104
  830. package/.claude/skills/command-guide/templates/issue-diagnosis.md +0 -275
  831. package/.claude/skills/command-guide/templates/issue-feature.md +0 -97
  832. package/.claude/skills/command-guide/templates/issue-question.md +0 -141
@@ -1,22 +1,54 @@
1
- // @ts-nocheck
2
1
  /**
3
2
  * Rules Routes Module
4
3
  * Handles all Rules-related API endpoints
5
4
  */
6
- import type { IncomingMessage, ServerResponse } from 'http';
7
5
  import { readFileSync, existsSync, readdirSync, unlinkSync, promises as fsPromises } from 'fs';
8
6
  import { join } from 'path';
9
7
  import { homedir } from 'os';
10
8
  import { executeCliTool } from '../../tools/cli-executor.js';
9
+ import { SmartContentFormatter } from '../../tools/cli-output-converter.js';
10
+ import type { RouteContext } from './types.js';
11
11
 
12
- export interface RouteContext {
13
- pathname: string;
14
- url: URL;
15
- req: IncomingMessage;
16
- res: ServerResponse;
17
- initialPath: string;
18
- handlePostRequest: (req: IncomingMessage, res: ServerResponse, handler: (body: unknown) => Promise<any>) => void;
19
- broadcastToClients: (data: unknown) => void;
12
+ interface ParsedRuleFrontmatter {
13
+ paths: string[];
14
+ content: string;
15
+ }
16
+
17
+ interface RuleDetail {
18
+ name: string;
19
+ paths: string[];
20
+ content: string;
21
+ location: string;
22
+ path: string;
23
+ subdirectory: string | null;
24
+ }
25
+
26
+ interface RuleConfigResult {
27
+ projectRules: RuleDetail[];
28
+ userRules: RuleDetail[];
29
+ }
30
+
31
+ interface RuleCreateParams {
32
+ fileName: string;
33
+ content: string;
34
+ paths: string[];
35
+ location: string;
36
+ subdirectory: string;
37
+ projectPath: string;
38
+ }
39
+
40
+ interface RuleGenerateParams {
41
+ generationType: string;
42
+ description?: string;
43
+ templateType?: string;
44
+ extractScope?: string;
45
+ extractFocus?: string;
46
+ fileName: string;
47
+ location: string;
48
+ subdirectory: string;
49
+ projectPath: string;
50
+ enableReview?: boolean;
51
+ broadcastToClients?: (data: unknown) => void;
20
52
  }
21
53
 
22
54
  /**
@@ -24,8 +56,8 @@ export interface RouteContext {
24
56
  * @param {string} content
25
57
  * @returns {Object}
26
58
  */
27
- function parseRuleFrontmatter(content) {
28
- const result = {
59
+ function parseRuleFrontmatter(content: string): ParsedRuleFrontmatter {
60
+ const result: ParsedRuleFrontmatter = {
29
61
  paths: [],
30
62
  content: content
31
63
  };
@@ -64,8 +96,8 @@ function parseRuleFrontmatter(content) {
64
96
  * @param {string} subdirectory
65
97
  * @returns {Object[]}
66
98
  */
67
- function scanRulesDirectory(dirPath, location, subdirectory) {
68
- const rules = [];
99
+ function scanRulesDirectory(dirPath: string, location: string, subdirectory: string): RuleDetail[] {
100
+ const rules: RuleDetail[] = [];
69
101
 
70
102
  try {
71
103
  const entries = readdirSync(dirPath, { withFileTypes: true });
@@ -102,8 +134,8 @@ function scanRulesDirectory(dirPath, location, subdirectory) {
102
134
  * @param {string} projectPath
103
135
  * @returns {Object}
104
136
  */
105
- function getRulesConfig(projectPath) {
106
- const result = {
137
+ function getRulesConfig(projectPath: string): RuleConfigResult {
138
+ const result: RuleConfigResult = {
107
139
  projectRules: [],
108
140
  userRules: []
109
141
  };
@@ -135,7 +167,7 @@ function getRulesConfig(projectPath) {
135
167
  * @param {string} ruleName
136
168
  * @returns {string|null}
137
169
  */
138
- function findRuleFile(baseDir, ruleName) {
170
+ function findRuleFile(baseDir: string, ruleName: string): string | null {
139
171
  try {
140
172
  // Direct path
141
173
  const directPath = join(baseDir, ruleName);
@@ -164,7 +196,7 @@ function findRuleFile(baseDir, ruleName) {
164
196
  * @param {string} projectPath
165
197
  * @returns {Object}
166
198
  */
167
- function getRuleDetail(ruleName, location, projectPath) {
199
+ function getRuleDetail(ruleName: string, location: string, projectPath: string): { rule?: RuleDetail; error?: string } {
168
200
  try {
169
201
  const baseDir = location === 'project'
170
202
  ? join(projectPath, '.claude', 'rules')
@@ -180,17 +212,26 @@ function getRuleDetail(ruleName, location, projectPath) {
180
212
  const content = readFileSync(rulePath, 'utf8');
181
213
  const parsed = parseRuleFrontmatter(content);
182
214
 
215
+ const normalizedBaseDir = baseDir.replace(/\\/g, '/').replace(/\/+$/, '');
216
+ const normalizedRulePath = rulePath.replace(/\\/g, '/');
217
+ const relativePath = normalizedRulePath.startsWith(`${normalizedBaseDir}/`)
218
+ ? normalizedRulePath.slice(normalizedBaseDir.length + 1)
219
+ : ruleName;
220
+ const relativeParts = relativePath.split('/');
221
+ const subdirectory = relativeParts.length > 1 ? relativeParts.slice(0, -1).join('/') : null;
222
+
183
223
  return {
184
224
  rule: {
185
225
  name: ruleName,
186
226
  paths: parsed.paths,
187
227
  content: parsed.content,
188
228
  location,
189
- path: rulePath
229
+ path: rulePath,
230
+ subdirectory
190
231
  }
191
232
  };
192
233
  } catch (error) {
193
- return { error: (error as Error).message };
234
+ return { error: error instanceof Error ? error.message : String(error) };
194
235
  }
195
236
  }
196
237
 
@@ -201,7 +242,11 @@ function getRuleDetail(ruleName, location, projectPath) {
201
242
  * @param {string} projectPath
202
243
  * @returns {Object}
203
244
  */
204
- function deleteRule(ruleName, location, projectPath) {
245
+ function deleteRule(
246
+ ruleName: string,
247
+ location: string,
248
+ projectPath: string
249
+ ): { success: true; ruleName: string; location: string } | { error: string; status?: number } {
205
250
  try {
206
251
  const baseDir = location === 'project'
207
252
  ? join(projectPath, '.claude', 'rules')
@@ -217,10 +262,314 @@ function deleteRule(ruleName, location, projectPath) {
217
262
 
218
263
  return { success: true, ruleName, location };
219
264
  } catch (error) {
220
- return { error: (error as Error).message };
265
+ return { error: error instanceof Error ? error.message : String(error) };
221
266
  }
222
267
  }
223
268
 
269
+ /**
270
+ * Infer rule context from file name and subdirectory for better prompt generation
271
+ * @param {string} fileName - Rule file name
272
+ * @param {string} subdirectory - Optional subdirectory path
273
+ * @param {string} location - 'project' or 'user'
274
+ * @returns {Object} Inferred context
275
+ */
276
+ function inferRuleContext(fileName: string, subdirectory: string, location: string) {
277
+ const normalizedName = fileName.replace(/\.md$/i, '').toLowerCase();
278
+ const normalizedSubdir = (subdirectory || '').toLowerCase();
279
+
280
+ // Rule category inference from file name and subdirectory
281
+ const categories = {
282
+ coding: ['coding', 'code', 'style', 'format', 'lint', 'convention'],
283
+ testing: ['test', 'spec', 'jest', 'vitest', 'mocha', 'coverage'],
284
+ security: ['security', 'auth', 'permission', 'access', 'secret', 'credential'],
285
+ architecture: ['arch', 'design', 'pattern', 'structure', 'module', 'layer'],
286
+ documentation: ['doc', 'comment', 'readme', 'jsdoc', 'api-doc'],
287
+ performance: ['perf', 'performance', 'optimize', 'cache', 'memory'],
288
+ workflow: ['workflow', 'ci', 'cd', 'deploy', 'build', 'release'],
289
+ tooling: ['tool', 'cli', 'script', 'npm', 'yarn', 'pnpm'],
290
+ error: ['error', 'exception', 'handling', 'logging', 'debug']
291
+ };
292
+
293
+ let inferredCategory = 'general';
294
+ let inferredKeywords: string[] = [];
295
+
296
+ for (const [category, keywords] of Object.entries(categories)) {
297
+ for (const keyword of keywords) {
298
+ if (normalizedName.includes(keyword) || normalizedSubdir.includes(keyword)) {
299
+ inferredCategory = category;
300
+ inferredKeywords = keywords;
301
+ break;
302
+ }
303
+ }
304
+ if (inferredCategory !== 'general') break;
305
+ }
306
+
307
+ // Scope inference from location
308
+ const scopeHint = location === 'project'
309
+ ? 'This rule applies to the current project only'
310
+ : 'This rule applies globally to all projects';
311
+
312
+ // Technology hints from file name
313
+ const techPatterns = {
314
+ typescript: ['ts', 'typescript', 'tsc'],
315
+ javascript: ['js', 'javascript', 'node'],
316
+ react: ['react', 'jsx', 'tsx', 'component'],
317
+ vue: ['vue', 'vuex', 'pinia'],
318
+ python: ['python', 'py', 'pip', 'poetry'],
319
+ rust: ['rust', 'cargo', 'rs'],
320
+ go: ['go', 'golang', 'mod'],
321
+ java: ['java', 'maven', 'gradle', 'spring']
322
+ };
323
+
324
+ let inferredTech: string | null = null;
325
+ for (const [tech, patterns] of Object.entries(techPatterns)) {
326
+ if (patterns.some(p => normalizedName.includes(p) || normalizedSubdir.includes(p))) {
327
+ inferredTech = tech;
328
+ break;
329
+ }
330
+ }
331
+
332
+ return {
333
+ category: inferredCategory,
334
+ keywords: inferredKeywords,
335
+ scopeHint,
336
+ technology: inferredTech,
337
+ isConditional: normalizedSubdir.length > 0
338
+ };
339
+ }
340
+
341
+ /**
342
+ * Build structured prompt for rule generation
343
+ * @param {Object} params
344
+ * @returns {string} Structured prompt
345
+ */
346
+ function buildStructuredRulePrompt(params: {
347
+ description: string;
348
+ fileName: string;
349
+ subdirectory: string;
350
+ location: string;
351
+ context: ReturnType<typeof inferRuleContext>;
352
+ enableReview?: boolean;
353
+ }) {
354
+ const { description, fileName, subdirectory, location, context, enableReview } = params;
355
+
356
+ // Build category-specific guidance
357
+ const categoryGuidance: Record<string, string> = {
358
+ coding: 'Focus on code style, naming conventions, and formatting rules. Include specific examples of correct and incorrect patterns.',
359
+ testing: 'Emphasize test structure, coverage expectations, mocking strategies, and assertion patterns.',
360
+ security: 'Highlight security best practices, input validation, authentication requirements, and sensitive data handling.',
361
+ architecture: 'Define module boundaries, dependency rules, layer responsibilities, and design pattern usage.',
362
+ documentation: 'Specify documentation requirements, comment styles, and API documentation standards.',
363
+ performance: 'Address caching strategies, optimization guidelines, resource management, and performance metrics.',
364
+ workflow: 'Define CI/CD requirements, deployment procedures, and release management rules.',
365
+ tooling: 'Specify tool configurations, script conventions, and dependency management rules.',
366
+ error: 'Define error handling patterns, logging requirements, and exception management.',
367
+ general: 'Provide clear, actionable guidelines that Claude can follow consistently.'
368
+ };
369
+
370
+ const guidance = categoryGuidance[context.category] || categoryGuidance.general;
371
+
372
+ // Build technology-specific hint
373
+ const techHint = context.technology
374
+ ? `\nTECHNOLOGY CONTEXT: This rule is for ${context.technology} development. Use ${context.technology}-specific best practices and terminology.`
375
+ : '';
376
+
377
+ // Build subdirectory context
378
+ const subdirHint = subdirectory
379
+ ? `\nORGANIZATION: This rule will be placed in the "${subdirectory}" subdirectory, indicating its category/scope.`
380
+ : '';
381
+
382
+ // Build review instruction if enabled
383
+ const reviewInstruction = enableReview
384
+ ? `\n\nAFTER GENERATION:
385
+ - Verify the rule is specific and actionable
386
+ - Check for ambiguous language that could be misinterpreted
387
+ - Ensure examples are clear and relevant
388
+ - Validate markdown formatting is correct`
389
+ : '';
390
+
391
+ return `PURPOSE: Generate a high-quality Claude Code memory rule that will guide Claude's behavior when working in this codebase
392
+ SUCCESS CRITERIA: The rule must be (1) specific and actionable, (2) include concrete examples, (3) avoid ambiguous language, (4) follow Claude Code rule format
393
+
394
+ TASK:
395
+ • Parse the user's description to identify core requirements
396
+ • Infer additional context from file name "${fileName}" and category "${context.category}"
397
+ • Generate structured markdown content with clear instructions
398
+ • Include DO and DON'T examples where appropriate
399
+ • ${context.isConditional ? 'Consider if frontmatter paths are needed for conditional activation' : 'Create as a global rule'}
400
+
401
+ MODE: write
402
+
403
+ RULE CATEGORY: ${context.category}
404
+ CATEGORY GUIDANCE: ${guidance}
405
+ ${techHint}
406
+ ${subdirHint}
407
+ SCOPE: ${context.scopeHint}
408
+
409
+ EXPECTED OUTPUT FORMAT:
410
+ \`\`\`markdown
411
+ ${context.isConditional ? `---
412
+ paths: [specific/path/patterns/**/*]
413
+ ---
414
+
415
+ ` : ''}# Rule Title
416
+
417
+ Brief description of what this rule enforces.
418
+
419
+ ## Guidelines
420
+
421
+ 1. **First guideline** - Explanation
422
+ 2. **Second guideline** - Explanation
423
+
424
+ ## Examples
425
+
426
+ ### ✅ Correct
427
+ \`\`\`language
428
+ // Good example
429
+ \`\`\`
430
+
431
+ ### ❌ Incorrect
432
+ \`\`\`language
433
+ // Bad example
434
+ \`\`\`
435
+
436
+ ## Exceptions
437
+
438
+ - When this rule may not apply
439
+ \`\`\`
440
+
441
+ USER DESCRIPTION:
442
+ ${description}
443
+
444
+ FILE NAME: ${fileName}
445
+ ${subdirectory ? `SUBDIRECTORY: ${subdirectory}` : ''}
446
+ ${reviewInstruction}
447
+
448
+ RULES: $(cat ~/.claude/workflows/cli-templates/prompts/universal/00-universal-rigorous-style.txt) | Generate ONLY the rule content in markdown | No additional commentary | Do NOT use any tools | Output raw markdown text directly | write=CREATE`;
449
+ }
450
+
451
+ /**
452
+ * Build structured prompt for code extraction
453
+ * @param {Object} params
454
+ * @returns {string} Structured prompt
455
+ */
456
+ function buildExtractPrompt(params: {
457
+ extractScope: string;
458
+ extractFocus: string;
459
+ fileName: string;
460
+ subdirectory: string;
461
+ context: ReturnType<typeof inferRuleContext>;
462
+ }) {
463
+ const { extractScope, extractFocus, fileName, subdirectory, context } = params;
464
+
465
+ const scope = extractScope || '**/*';
466
+ const focus = extractFocus || 'naming conventions, error handling, code structure, patterns';
467
+
468
+ return `PURPOSE: Extract and document coding conventions from the existing codebase to create a Claude Code memory rule
469
+ SUCCESS CRITERIA: The rule must reflect ACTUAL patterns found in the code, not theoretical best practices
470
+
471
+ TASK:
472
+ • Scan files matching "${scope}" for recurring patterns
473
+ • Identify ${focus.split(',').length} or more distinct conventions
474
+ • Document each pattern with real code examples from the codebase
475
+ • Create actionable rules based on observed practices
476
+ • Note any inconsistencies found (optional section)
477
+
478
+ MODE: analysis
479
+
480
+ ANALYSIS SCOPE: @${scope}
481
+ FOCUS AREAS: ${focus}
482
+
483
+ EXTRACTION STRATEGY:
484
+ 1. **Pattern Recognition**: Look for repeated code structures, naming patterns, file organization
485
+ 2. **Consistency Check**: Identify which patterns are consistently followed vs. occasionally violated
486
+ 3. **Frequency Analysis**: Prioritize patterns that appear most frequently
487
+ 4. **Context Awareness**: Consider why certain patterns are used (performance, readability, etc.)
488
+
489
+ EXPECTED OUTPUT FORMAT:
490
+ \`\`\`markdown
491
+ # ${fileName.replace(/\.md$/i, '')} Conventions
492
+
493
+ Conventions extracted from codebase analysis of \`${scope}\`.
494
+
495
+ ## Naming Conventions
496
+
497
+ - **Pattern name**: Description with example
498
+ \`\`\`language
499
+ // Actual code from codebase
500
+ \`\`\`
501
+
502
+ ## Code Structure
503
+
504
+ - **Pattern name**: Description with example
505
+
506
+ ## Error Handling
507
+
508
+ - **Pattern name**: Description with example
509
+
510
+ ## Notes
511
+
512
+ - Any inconsistencies or variations observed
513
+ \`\`\`
514
+
515
+ FILE NAME: ${fileName}
516
+ ${subdirectory ? `SUBDIRECTORY: ${subdirectory}` : ''}
517
+ INFERRED CATEGORY: ${context.category}
518
+
519
+ RULES: $(cat ~/.claude/workflows/cli-templates/prompts/analysis/02-analyze-code-patterns.txt) | Extract REAL patterns from code | Include actual code snippets as examples | Do NOT use any tools | Output raw markdown text directly | analysis=READ-ONLY`;
520
+ }
521
+
522
+ /**
523
+ * Build review prompt for validating and improving generated rules
524
+ * @param {string} content - Generated rule content to review
525
+ * @param {string} fileName - Target file name
526
+ * @param {Object} context - Inferred context
527
+ * @returns {string} Review prompt
528
+ */
529
+ function buildReviewPrompt(
530
+ content: string,
531
+ fileName: string,
532
+ context: ReturnType<typeof inferRuleContext>
533
+ ) {
534
+ return `PURPOSE: Review and improve a Claude Code memory rule for quality, clarity, and actionability
535
+ SUCCESS CRITERIA: Output an improved version that is (1) more specific, (2) includes better examples, (3) has no ambiguous language
536
+
537
+ TASK:
538
+ • Analyze the rule for clarity and specificity
539
+ • Check if guidelines are actionable (Claude can follow them)
540
+ • Verify examples are concrete and helpful
541
+ • Remove any ambiguous or vague language
542
+ • Ensure markdown formatting is correct
543
+ • Improve structure if needed
544
+ • Keep the core intent and requirements intact
545
+
546
+ MODE: write
547
+
548
+ REVIEW CRITERIA:
549
+ 1. **Specificity**: Each guideline should be specific enough to follow without interpretation
550
+ 2. **Actionability**: Guidelines should tell Claude exactly what to do or not do
551
+ 3. **Examples**: Good and bad examples should be clearly different and illustrative
552
+ 4. **Consistency**: Formatting and style should be consistent throughout
553
+ 5. **Completeness**: All necessary aspects of the rule should be covered
554
+ 6. **Conciseness**: No unnecessary verbosity or repetition
555
+
556
+ RULE CATEGORY: ${context.category}
557
+ FILE NAME: ${fileName}
558
+
559
+ ORIGINAL RULE CONTENT:
560
+ \`\`\`markdown
561
+ ${content}
562
+ \`\`\`
563
+
564
+ EXPECTED OUTPUT:
565
+ - Output ONLY the improved rule content in markdown format
566
+ - Do NOT include any commentary, explanation, or meta-text
567
+ - If the original is already high quality, return it unchanged
568
+ - Preserve any frontmatter (---paths---) if present
569
+
570
+ RULES: $(cat ~/.claude/workflows/cli-templates/prompts/universal/00-universal-rigorous-style.txt) | Output ONLY improved markdown content | No additional text | Do NOT use any tools | Output raw markdown text directly | write=CREATE`;
571
+ }
572
+
224
573
  /**
225
574
  * Generate rule content via CLI tool
226
575
  * @param {Object} params
@@ -233,9 +582,13 @@ function deleteRule(ruleName, location, projectPath) {
233
582
  * @param {string} params.location - 'project' or 'user'
234
583
  * @param {string} params.subdirectory - Optional subdirectory
235
584
  * @param {string} params.projectPath - Project root path
585
+ * @param {boolean} params.enableReview - Optional: enable secondary review
236
586
  * @returns {Object}
237
587
  */
238
- async function generateRuleViaCLI(params) {
588
+ async function generateRuleViaCLI(params: RuleGenerateParams): Promise<Record<string, unknown>> {
589
+ // Generate unique execution ID for tracking
590
+ const executionId = `rule-gen-${params.fileName.replace('.md', '')}-${Date.now()}`;
591
+
239
592
  try {
240
593
  const {
241
594
  generationType,
@@ -246,60 +599,107 @@ async function generateRuleViaCLI(params) {
246
599
  fileName,
247
600
  location,
248
601
  subdirectory,
249
- projectPath
602
+ projectPath,
603
+ enableReview,
604
+ broadcastToClients
250
605
  } = params;
251
606
 
252
607
  let prompt = '';
253
608
  let mode = 'analysis';
254
609
  let workingDir = projectPath;
255
610
 
611
+ // Infer context from file name and subdirectory
612
+ const context = inferRuleContext(fileName, subdirectory || '', location);
613
+
256
614
  // Build prompt based on generation type
257
615
  if (generationType === 'description') {
258
616
  mode = 'write';
259
- prompt = `PURPOSE: Generate Claude Code memory rule from description to guide Claude's behavior
260
- TASK: Analyze rule requirements • Generate markdown content with clear instructions
261
- MODE: write
262
- EXPECTED: Complete rule content in markdown format
263
- RULES: $(cat ~/.claude/workflows/cli-templates/prompts/universal/00-universal-rigorous-style.txt) | Follow Claude Code rule format | Use frontmatter for conditional rules if paths specified | write=CREATE
264
-
265
- RULE DESCRIPTION:
266
- ${description}
267
-
268
- FILE NAME: ${fileName}`;
617
+ prompt = buildStructuredRulePrompt({
618
+ description: description || '',
619
+ fileName,
620
+ subdirectory: subdirectory || '',
621
+ location,
622
+ context,
623
+ enableReview
624
+ });
269
625
  } else if (generationType === 'template') {
270
626
  mode = 'write';
271
627
  prompt = `PURPOSE: Generate Claude Code rule from template type
272
628
  TASK: • Create rule based on ${templateType} template • Generate structured markdown content
273
629
  MODE: write
274
630
  EXPECTED: Complete rule content in markdown format following template structure
275
- RULES: $(cat ~/.claude/workflows/cli-templates/prompts/universal/00-universal-rigorous-style.txt) | Follow Claude Code rule format | Use ${templateType} template patterns | write=CREATE
631
+ RULES: $(cat ~/.claude/workflows/cli-templates/prompts/universal/00-universal-rigorous-style.txt) | Follow Claude Code rule format | Use ${templateType} template patterns | Do NOT use any tools | Output raw markdown text directly | write=CREATE
276
632
 
277
633
  TEMPLATE TYPE: ${templateType}
278
634
  FILE NAME: ${fileName}`;
279
635
  } else if (generationType === 'extract') {
280
636
  mode = 'analysis';
281
- prompt = `PURPOSE: Extract coding rules from existing codebase to document patterns and conventions
282
- TASK: Analyze code patterns in specified scope • Extract common conventions • Identify best practices
283
- MODE: analysis
284
- CONTEXT: @${extractScope || '**/*'}
285
- EXPECTED: Rule content based on codebase analysis with examples
286
- RULES: $(cat ~/.claude/workflows/cli-templates/prompts/analysis/02-analyze-code-patterns.txt) | Focus on actual patterns found | Include code examples | analysis=READ-ONLY
287
-
288
- ANALYSIS SCOPE: ${extractScope || '**/*'}
289
- FOCUS AREAS: ${extractFocus || 'naming conventions, error handling, code structure'}`;
637
+ prompt = buildExtractPrompt({
638
+ extractScope: extractScope || '',
639
+ extractFocus: extractFocus || '',
640
+ fileName,
641
+ subdirectory: subdirectory || '',
642
+ context
643
+ });
290
644
  } else {
291
645
  return { error: `Unknown generation type: ${generationType}` };
292
646
  }
293
647
 
648
+ // Broadcast CLI_EXECUTION_STARTED event
649
+ if (broadcastToClients) {
650
+ broadcastToClients({
651
+ type: 'CLI_EXECUTION_STARTED',
652
+ payload: {
653
+ executionId,
654
+ tool: 'claude',
655
+ mode,
656
+ category: 'internal',
657
+ context: 'rule-generation',
658
+ fileName
659
+ }
660
+ });
661
+ }
662
+
663
+ // Create onOutput callback for real-time streaming
664
+ const onOutput = broadcastToClients
665
+ ? (unit: import('../../tools/cli-output-converter.js').CliOutputUnit) => {
666
+ // CliOutputUnit handler: use SmartContentFormatter for intelligent formatting (never returns null)
667
+ const content = SmartContentFormatter.format(unit.content, unit.type);
668
+ broadcastToClients({
669
+ type: 'CLI_OUTPUT',
670
+ payload: {
671
+ executionId,
672
+ chunkType: unit.type,
673
+ data: content
674
+ }
675
+ });
676
+ }
677
+ : undefined;
678
+
294
679
  // Execute CLI tool (Claude) with at least 10 minutes timeout
680
+ const startTime = Date.now();
295
681
  const result = await executeCliTool({
296
682
  tool: 'claude',
297
683
  prompt,
298
684
  mode,
299
685
  cd: workingDir,
300
686
  timeout: 600000, // 10 minutes
301
- category: 'internal'
302
- });
687
+ category: 'internal',
688
+ id: executionId
689
+ }, onOutput);
690
+
691
+ // Broadcast CLI_EXECUTION_COMPLETED event
692
+ if (broadcastToClients) {
693
+ broadcastToClients({
694
+ type: 'CLI_EXECUTION_COMPLETED',
695
+ payload: {
696
+ executionId,
697
+ success: result.success,
698
+ status: result.execution?.status || (result.success ? 'success' : 'error'),
699
+ duration_ms: Date.now() - startTime
700
+ }
701
+ });
702
+ }
303
703
 
304
704
  if (!result.success) {
305
705
  return {
@@ -308,8 +708,15 @@ FOCUS AREAS: ${extractFocus || 'naming conventions, error handling, code structu
308
708
  };
309
709
  }
310
710
 
311
- // Extract generated content from stdout
312
- const generatedContent = result.stdout.trim();
711
+ // Extract generated content - prefer parsedOutput (extracted text from stream JSON)
712
+ let generatedContent = (result.parsedOutput || result.stdout || '').trim();
713
+
714
+ // Remove markdown code block wrapper if present (e.g., ```markdown...```)
715
+ if (generatedContent.startsWith('```markdown')) {
716
+ generatedContent = generatedContent.replace(/^```markdown\s*\n?/, '').replace(/\n?```\s*$/, '');
717
+ } else if (generatedContent.startsWith('```')) {
718
+ generatedContent = generatedContent.replace(/^```\w*\s*\n?/, '').replace(/\n?```\s*$/, '');
719
+ }
313
720
 
314
721
  if (!generatedContent) {
315
722
  return {
@@ -319,6 +726,87 @@ FOCUS AREAS: ${extractFocus || 'naming conventions, error handling, code structu
319
726
  };
320
727
  }
321
728
 
729
+ // Optional review step - verify and improve the generated rule
730
+ let reviewResult = null;
731
+ if (enableReview) {
732
+ const reviewPrompt = buildReviewPrompt(generatedContent, fileName, context);
733
+ const reviewExecutionId = `${executionId}-review`;
734
+
735
+ // Broadcast review CLI_EXECUTION_STARTED event
736
+ if (broadcastToClients) {
737
+ broadcastToClients({
738
+ type: 'CLI_EXECUTION_STARTED',
739
+ payload: {
740
+ executionId: reviewExecutionId,
741
+ tool: 'claude',
742
+ mode: 'write',
743
+ category: 'internal',
744
+ context: 'rule-review',
745
+ fileName
746
+ }
747
+ });
748
+ }
749
+
750
+ // Create onOutput callback for review step
751
+ const reviewOnOutput = broadcastToClients
752
+ ? (unit: import('../../tools/cli-output-converter.js').CliOutputUnit) => {
753
+ // CliOutputUnit handler: use SmartContentFormatter for intelligent formatting (never returns null)
754
+ const content = SmartContentFormatter.format(unit.content, unit.type);
755
+ broadcastToClients({
756
+ type: 'CLI_OUTPUT',
757
+ payload: {
758
+ executionId: reviewExecutionId,
759
+ chunkType: unit.type,
760
+ data: content
761
+ }
762
+ });
763
+ }
764
+ : undefined;
765
+
766
+ const reviewStartTime = Date.now();
767
+ const reviewExecution = await executeCliTool({
768
+ tool: 'claude',
769
+ prompt: reviewPrompt,
770
+ mode: 'write',
771
+ cd: workingDir,
772
+ timeout: 300000, // 5 minutes for review
773
+ category: 'internal',
774
+ id: reviewExecutionId
775
+ }, reviewOnOutput);
776
+
777
+ // Broadcast review CLI_EXECUTION_COMPLETED event
778
+ if (broadcastToClients) {
779
+ broadcastToClients({
780
+ type: 'CLI_EXECUTION_COMPLETED',
781
+ payload: {
782
+ executionId: reviewExecutionId,
783
+ success: reviewExecution.success,
784
+ status: reviewExecution.execution?.status || (reviewExecution.success ? 'success' : 'error'),
785
+ duration_ms: Date.now() - reviewStartTime
786
+ }
787
+ });
788
+ }
789
+
790
+ if (reviewExecution.success) {
791
+ let reviewedContent = (reviewExecution.parsedOutput || reviewExecution.stdout || '').trim();
792
+ // Remove markdown code block wrapper if present
793
+ if (reviewedContent.startsWith('```markdown')) {
794
+ reviewedContent = reviewedContent.replace(/^```markdown\s*\n?/, '').replace(/\n?```\s*$/, '');
795
+ } else if (reviewedContent.startsWith('```')) {
796
+ reviewedContent = reviewedContent.replace(/^```\w*\s*\n?/, '').replace(/\n?```\s*$/, '');
797
+ }
798
+ // Only use reviewed content if it's valid and different
799
+ if (reviewedContent.length > 50 && reviewedContent !== generatedContent) {
800
+ generatedContent = reviewedContent;
801
+ reviewResult = {
802
+ reviewed: true,
803
+ originalLength: (result.parsedOutput || result.stdout || '').trim().length,
804
+ reviewedLength: reviewedContent.length
805
+ };
806
+ }
807
+ }
808
+ }
809
+
322
810
  // Create the rule using the generated content
323
811
  const createResult = await createRule({
324
812
  fileName,
@@ -333,10 +821,11 @@ FOCUS AREAS: ${extractFocus || 'naming conventions, error handling, code structu
333
821
  success: createResult.success || false,
334
822
  ...createResult,
335
823
  generatedContent,
336
- executionId: result.conversation?.id
824
+ executionId: result.conversation?.id,
825
+ review: reviewResult
337
826
  };
338
- } catch (error) {
339
- return { error: (error as Error).message };
827
+ } catch (error: unknown) {
828
+ return { error: error instanceof Error ? error.message : String(error) };
340
829
  }
341
830
  }
342
831
 
@@ -351,7 +840,7 @@ FOCUS AREAS: ${extractFocus || 'naming conventions, error handling, code structu
351
840
  * @param {string} params.projectPath - Project root path
352
841
  * @returns {Object}
353
842
  */
354
- async function createRule(params) {
843
+ async function createRule(params: RuleCreateParams): Promise<Record<string, unknown>> {
355
844
  try {
356
845
  const { fileName, content, paths, location, subdirectory, projectPath } = params;
357
846
 
@@ -402,8 +891,8 @@ paths: [${paths.join(', ')}]
402
891
  path: filePath,
403
892
  subdirectory: subdirectory || null
404
893
  };
405
- } catch (error) {
406
- return { error: (error as Error).message };
894
+ } catch (error: unknown) {
895
+ return { error: error instanceof Error ? error.message : String(error) };
407
896
  }
408
897
  }
409
898
 
@@ -412,7 +901,7 @@ paths: [${paths.join(', ')}]
412
901
  * @returns true if route was handled, false otherwise
413
902
  */
414
903
  export async function handleRulesRoutes(ctx: RouteContext): Promise<boolean> {
415
- const { pathname, url, req, res, initialPath, handlePostRequest } = ctx;
904
+ const { pathname, url, req, res, initialPath, handlePostRequest, broadcastToClients } = ctx;
416
905
 
417
906
  // API: Get all rules
418
907
  if (pathname === '/api/rules') {
@@ -443,8 +932,11 @@ export async function handleRulesRoutes(ctx: RouteContext): Promise<boolean> {
443
932
  if (pathname.startsWith('/api/rules/') && req.method === 'DELETE') {
444
933
  const ruleName = decodeURIComponent(pathname.replace('/api/rules/', ''));
445
934
  handlePostRequest(req, res, async (body) => {
446
- const { location, projectPath: projectPathParam } = body;
447
- return deleteRule(ruleName, location, projectPathParam || initialPath);
935
+ const { location, projectPath: projectPathParam } = body as { location?: unknown; projectPath?: unknown };
936
+ const resolvedLocation = typeof location === 'string' && location.trim().length > 0 ? location : 'project';
937
+ const resolvedProjectPath =
938
+ typeof projectPathParam === 'string' && projectPathParam.trim().length > 0 ? projectPathParam : initialPath;
939
+ return deleteRule(ruleName, resolvedLocation, resolvedProjectPath);
448
940
  });
449
941
  return true;
450
942
  }
@@ -460,63 +952,90 @@ export async function handleRulesRoutes(ctx: RouteContext): Promise<boolean> {
460
952
  location,
461
953
  subdirectory,
462
954
  projectPath: projectPathParam,
463
- // CLI generation parameters
464
955
  generationType,
465
956
  description,
466
957
  templateType,
467
958
  extractScope,
468
959
  extractFocus
469
- } = body;
960
+ } = body as {
961
+ mode?: unknown;
962
+ fileName?: unknown;
963
+ content?: unknown;
964
+ paths?: unknown;
965
+ location?: unknown;
966
+ subdirectory?: unknown;
967
+ projectPath?: unknown;
968
+ generationType?: unknown;
969
+ description?: unknown;
970
+ templateType?: unknown;
971
+ extractScope?: unknown;
972
+ extractFocus?: unknown;
973
+ };
470
974
 
471
- if (!fileName) {
975
+ const resolvedMode = typeof mode === 'string' ? mode : '';
976
+ const resolvedFileName = typeof fileName === 'string' ? fileName : '';
977
+ const resolvedContent = typeof content === 'string' ? content : '';
978
+ const resolvedLocation = typeof location === 'string' && location.trim().length > 0 ? location : '';
979
+ const resolvedSubdirectory = typeof subdirectory === 'string' ? subdirectory : '';
980
+ const resolvedProjectPath =
981
+ typeof projectPathParam === 'string' && projectPathParam.trim().length > 0 ? projectPathParam : initialPath;
982
+ const resolvedGenerationType = typeof generationType === 'string' ? generationType : '';
983
+ const resolvedDescription = typeof description === 'string' ? description : undefined;
984
+ const resolvedTemplateType = typeof templateType === 'string' ? templateType : undefined;
985
+ const resolvedExtractScope = typeof extractScope === 'string' ? extractScope : undefined;
986
+ const resolvedExtractFocus = typeof extractFocus === 'string' ? extractFocus : undefined;
987
+ const resolvedPaths = Array.isArray(paths) ? paths.filter((p): p is string => typeof p === 'string') : [];
988
+
989
+ if (!resolvedFileName) {
472
990
  return { error: 'File name is required' };
473
991
  }
474
992
 
475
- if (!location) {
993
+ if (!resolvedLocation) {
476
994
  return { error: 'Location is required (project or user)' };
477
995
  }
478
996
 
479
- const projectPath = projectPathParam || initialPath;
997
+ const projectPath = resolvedProjectPath;
480
998
 
481
999
  // CLI generation mode
482
- if (mode === 'cli-generate') {
483
- if (!generationType) {
1000
+ if (resolvedMode === 'cli-generate') {
1001
+ if (!resolvedGenerationType) {
484
1002
  return { error: 'generationType is required for CLI generation mode' };
485
1003
  }
486
1004
 
487
1005
  // Validate based on generation type
488
- if (generationType === 'description' && !description) {
1006
+ if (resolvedGenerationType === 'description' && !resolvedDescription) {
489
1007
  return { error: 'description is required for description-based generation' };
490
1008
  }
491
1009
 
492
- if (generationType === 'template' && !templateType) {
1010
+ if (resolvedGenerationType === 'template' && !resolvedTemplateType) {
493
1011
  return { error: 'templateType is required for template-based generation' };
494
1012
  }
495
1013
 
496
1014
  return await generateRuleViaCLI({
497
- generationType,
498
- description,
499
- templateType,
500
- extractScope,
501
- extractFocus,
502
- fileName,
503
- location,
504
- subdirectory: subdirectory || '',
505
- projectPath
1015
+ generationType: resolvedGenerationType,
1016
+ description: resolvedDescription,
1017
+ templateType: resolvedTemplateType,
1018
+ extractScope: resolvedExtractScope,
1019
+ extractFocus: resolvedExtractFocus,
1020
+ fileName: resolvedFileName,
1021
+ location: resolvedLocation,
1022
+ subdirectory: resolvedSubdirectory || '',
1023
+ projectPath,
1024
+ broadcastToClients
506
1025
  });
507
1026
  }
508
1027
 
509
1028
  // Manual creation mode
510
- if (!content) {
1029
+ if (!resolvedContent) {
511
1030
  return { error: 'Content is required for manual creation' };
512
1031
  }
513
1032
 
514
1033
  return await createRule({
515
- fileName,
516
- content,
517
- paths: paths || [],
518
- location,
519
- subdirectory: subdirectory || '',
1034
+ fileName: resolvedFileName,
1035
+ content: resolvedContent,
1036
+ paths: resolvedPaths,
1037
+ location: resolvedLocation,
1038
+ subdirectory: resolvedSubdirectory || '',
520
1039
  projectPath
521
1040
  });
522
1041
  });