claude-code-workflow 6.3.17 → 6.3.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (823) hide show
  1. package/.claude/CLAUDE.md +8 -5
  2. package/.claude/agents/action-planning-agent.md +26 -2
  3. package/.claude/agents/code-developer.md +132 -43
  4. package/.claude/agents/debug-explore-agent.md +434 -0
  5. package/.claude/agents/test-fix-agent.md +14 -0
  6. package/.claude/commands/issue/discover.md +41 -0
  7. package/.claude/commands/issue/execute.md +200 -19
  8. package/.claude/commands/issue/new.md +1 -1
  9. package/.claude/commands/issue/plan.md +6 -1
  10. package/.claude/commands/issue/queue.md +94 -39
  11. package/.claude/commands/memory/swagger-docs.md +773 -0
  12. package/.claude/commands/workflow/brainstorm/auto-parallel.md +21 -21
  13. package/.claude/commands/workflow/execute.md +54 -34
  14. package/.claude/commands/workflow/lite-execute.md +48 -164
  15. package/.claude/commands/workflow/lite-fix.md +4 -4
  16. package/.claude/commands/workflow/lite-plan.md +5 -5
  17. package/.claude/commands/workflow/plan.md +27 -27
  18. package/.claude/commands/workflow/review.md +42 -17
  19. package/.claude/commands/workflow/tdd-plan.md +25 -25
  20. package/.claude/commands/workflow/test-fix-gen.md +10 -10
  21. package/.claude/commands/workflow/test-gen.md +14 -14
  22. package/.claude/commands/workflow/ui-design/explore-auto.md +21 -21
  23. package/.claude/commands/workflow/ui-design/imitate-auto.md +24 -24
  24. package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +693 -0
  25. package/.claude/skills/ccw/SKILL.md +462 -0
  26. package/.claude/skills/ccw/index/command-capabilities.json +127 -0
  27. package/.claude/skills/ccw/index/intent-rules.json +136 -0
  28. package/.claude/skills/ccw/index/workflow-chains.json +451 -0
  29. package/.claude/skills/ccw/phases/actions/bugfix.md +218 -0
  30. package/.claude/skills/ccw/phases/actions/coupled.md +194 -0
  31. package/.claude/skills/ccw/phases/actions/docs.md +93 -0
  32. package/.claude/skills/ccw/phases/actions/full.md +154 -0
  33. package/.claude/skills/ccw/phases/actions/issue.md +201 -0
  34. package/.claude/skills/ccw/phases/actions/rapid.md +104 -0
  35. package/.claude/skills/ccw/phases/actions/review-fix.md +84 -0
  36. package/.claude/skills/ccw/phases/actions/tdd.md +66 -0
  37. package/.claude/skills/ccw/phases/actions/ui.md +79 -0
  38. package/.claude/skills/ccw/phases/orchestrator.md +435 -0
  39. package/.claude/skills/ccw/specs/intent-classification.md +336 -0
  40. package/.claude/skills/ccw-help/SKILL.md +177 -0
  41. package/.claude/skills/ccw-help/index/all-agents.json +82 -0
  42. package/.claude/skills/{command-guide → ccw-help}/index/all-commands.json +183 -73
  43. package/.claude/skills/{command-guide → ccw-help}/index/by-category.json +187 -73
  44. package/.claude/skills/{command-guide → ccw-help}/index/by-use-case.json +295 -185
  45. package/.claude/skills/{command-guide → ccw-help}/index/command-relationships.json +19 -166
  46. package/.claude/skills/{command-guide → ccw-help}/index/essential-commands.json +10 -10
  47. package/.claude/skills/ccw-help/scripts/analyze_commands.py +337 -0
  48. package/.claude/skills/code-reviewer/README.md +340 -0
  49. package/.claude/skills/code-reviewer/SKILL.md +308 -0
  50. package/.claude/skills/code-reviewer/phases/01-code-discovery.md +246 -0
  51. package/.claude/skills/code-reviewer/phases/02-security-analysis.md +442 -0
  52. package/.claude/skills/code-reviewer/phases/03-best-practices-review.md +36 -0
  53. package/.claude/skills/code-reviewer/phases/04-report-generation.md +278 -0
  54. package/.claude/skills/code-reviewer/specs/best-practices-requirements.md +346 -0
  55. package/.claude/skills/code-reviewer/specs/quality-standards.md +252 -0
  56. package/.claude/skills/code-reviewer/specs/security-requirements.md +243 -0
  57. package/.claude/skills/code-reviewer/templates/best-practice-finding.md +234 -0
  58. package/.claude/skills/code-reviewer/templates/report-template.md +316 -0
  59. package/.claude/skills/code-reviewer/templates/security-finding.md +161 -0
  60. package/.claude/skills/skill-generator/SKILL.md +187 -0
  61. package/.claude/skills/skill-generator/phases/01-requirements-discovery.md +239 -0
  62. package/.claude/skills/skill-generator/phases/02-structure-generation.md +207 -0
  63. package/.claude/skills/skill-generator/phases/03-phase-generation.md +802 -0
  64. package/.claude/skills/skill-generator/phases/04-specs-templates.md +328 -0
  65. package/.claude/skills/skill-generator/phases/05-validation.md +334 -0
  66. package/.claude/skills/skill-generator/specs/cli-integration.md +448 -0
  67. package/.claude/skills/skill-generator/specs/execution-modes.md +396 -0
  68. package/.claude/skills/skill-generator/specs/scripting-integration.md +265 -0
  69. package/.claude/skills/skill-generator/specs/skill-requirements.md +466 -0
  70. package/.claude/skills/skill-generator/templates/autonomous-action.md +517 -0
  71. package/.claude/skills/skill-generator/templates/autonomous-orchestrator.md +276 -0
  72. package/.claude/skills/skill-generator/templates/code-analysis-action.md +503 -0
  73. package/.claude/skills/skill-generator/templates/llm-action.md +355 -0
  74. package/.claude/skills/skill-generator/templates/script-bash.md +277 -0
  75. package/.claude/skills/skill-generator/templates/script-python.md +198 -0
  76. package/.claude/skills/skill-generator/templates/sequential-phase.md +441 -0
  77. package/.claude/skills/skill-generator/templates/skill-md.md +156 -0
  78. package/.claude/workflows/chinese-response.md +15 -28
  79. package/.claude/workflows/cli-templates/prompts/documentation/swagger-api.txt +266 -0
  80. package/.claude/workflows/cli-tools-usage.md +221 -177
  81. package/.claude/workflows/windows-platform.md +13 -10
  82. package/.codex/prompts/issue-execute.md +305 -82
  83. package/.codex/prompts/issue-plan.md +46 -1
  84. package/.codex/prompts/issue-queue.md +67 -3
  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 +505 -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 +201 -29
  277. package/ccw/dist/core/server.js.map +1 -1
  278. package/ccw/dist/core/services/api-key-tester.d.ts +31 -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 +106 -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 +82 -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 +271 -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 +566 -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 +651 -468
  438. package/ccw/src/core/services/api-key-tester.ts +137 -0
  439. package/ccw/src/core/services/health-check-service.ts +340 -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 +4438 -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 +6091 -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 +767 -14
  554. package/codex-lens/src/codexlens/cli/model_manager.py +676 -0
  555. package/codex-lens/src/codexlens/config.py +321 -12
  556. package/codex-lens/src/codexlens/entities.py +4 -1
  557. package/codex-lens/src/codexlens/env_config.py +298 -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 +1642 -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 +347 -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__/embedder.cpython-310.pyc +0 -0
  607. package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-312.pyc +0 -0
  608. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-310.pyc +0 -0
  609. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-312.pyc +0 -0
  610. package/codex-lens/src/codexlens/semantic/__pycache__/factory.cpython-313.pyc +0 -0
  611. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-310.pyc +0 -0
  612. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-312.pyc +0 -0
  613. package/codex-lens/src/codexlens/semantic/__pycache__/gpu_support.cpython-313.pyc +0 -0
  614. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-310.pyc +0 -0
  615. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-312.pyc +0 -0
  616. package/codex-lens/src/codexlens/semantic/__pycache__/litellm_embedder.cpython-313.pyc +0 -0
  617. package/codex-lens/src/codexlens/semantic/__pycache__/reranker.cpython-313.pyc +0 -0
  618. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-310.pyc +0 -0
  619. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-312.pyc +0 -0
  620. package/codex-lens/src/codexlens/semantic/__pycache__/splade_encoder.cpython-313.pyc +0 -0
  621. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-310.pyc +0 -0
  622. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-312.pyc +0 -0
  623. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
  624. package/codex-lens/src/codexlens/semantic/ann_index.py +654 -0
  625. package/codex-lens/src/codexlens/semantic/factory.py +63 -3
  626. package/codex-lens/src/codexlens/semantic/gpu_support.py +19 -2
  627. package/codex-lens/src/codexlens/semantic/litellm_embedder.py +144 -144
  628. package/codex-lens/src/codexlens/semantic/reranker/__init__.py +25 -0
  629. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-310.pyc +0 -0
  630. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/__init__.cpython-313.pyc +0 -0
  631. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-310.pyc +0 -0
  632. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/api_reranker.cpython-313.pyc +0 -0
  633. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-310.pyc +0 -0
  634. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/base.cpython-313.pyc +0 -0
  635. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-310.pyc +0 -0
  636. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/factory.cpython-313.pyc +0 -0
  637. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-310.pyc +0 -0
  638. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/fastembed_reranker.cpython-313.pyc +0 -0
  639. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-310.pyc +0 -0
  640. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/legacy.cpython-313.pyc +0 -0
  641. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/litellm_reranker.cpython-313.pyc +0 -0
  642. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-310.pyc +0 -0
  643. package/codex-lens/src/codexlens/semantic/reranker/__pycache__/onnx_reranker.cpython-313.pyc +0 -0
  644. package/codex-lens/src/codexlens/semantic/reranker/api_reranker.py +403 -0
  645. package/codex-lens/src/codexlens/semantic/reranker/base.py +46 -0
  646. package/codex-lens/src/codexlens/semantic/reranker/factory.py +159 -0
  647. package/codex-lens/src/codexlens/semantic/reranker/fastembed_reranker.py +257 -0
  648. package/codex-lens/src/codexlens/semantic/reranker/legacy.py +91 -0
  649. package/codex-lens/src/codexlens/semantic/reranker/litellm_reranker.py +214 -0
  650. package/codex-lens/src/codexlens/semantic/reranker/onnx_reranker.py +268 -0
  651. package/codex-lens/src/codexlens/semantic/splade_encoder.py +567 -0
  652. package/codex-lens/src/codexlens/semantic/vector_store.py +472 -352
  653. package/codex-lens/src/codexlens/storage/__init__.py +3 -0
  654. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-310.pyc +0 -0
  655. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-312.pyc +0 -0
  656. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-313.pyc +0 -0
  657. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-310.pyc +0 -0
  658. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-312.pyc +0 -0
  659. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
  660. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-310.pyc +0 -0
  661. package/codex-lens/src/codexlens/storage/__pycache__/global_index.cpython-312.pyc +0 -0
  662. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-310.pyc +0 -0
  663. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-312.pyc +0 -0
  664. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
  665. package/codex-lens/src/codexlens/storage/__pycache__/merkle_tree.cpython-313.pyc +0 -0
  666. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-310.pyc +0 -0
  667. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-312.pyc +0 -0
  668. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-310.pyc +0 -0
  669. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-312.pyc +0 -0
  670. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-310.pyc +0 -0
  671. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-312.pyc +0 -0
  672. package/codex-lens/src/codexlens/storage/__pycache__/splade_index.cpython-313.pyc +0 -0
  673. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-310.pyc +0 -0
  674. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-312.pyc +0 -0
  675. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-313.pyc +0 -0
  676. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-310.pyc +0 -0
  677. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-312.pyc +0 -0
  678. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-310.pyc +0 -0
  679. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-312.pyc +0 -0
  680. package/codex-lens/src/codexlens/storage/__pycache__/vector_meta_store.cpython-313.pyc +0 -0
  681. package/codex-lens/src/codexlens/storage/dir_index.py +310 -12
  682. package/codex-lens/src/codexlens/storage/index_tree.py +194 -23
  683. package/codex-lens/src/codexlens/storage/merkle_tree.py +136 -0
  684. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-310.pyc +0 -0
  685. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-312.pyc +0 -0
  686. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_006_enhance_relationships.cpython-313.pyc +0 -0
  687. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-310.pyc +0 -0
  688. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-312.pyc +0 -0
  689. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_007_add_graph_neighbors.cpython-313.pyc +0 -0
  690. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_008_add_merkle_hashes.cpython-313.pyc +0 -0
  691. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_009_add_splade.cpython-313.pyc +0 -0
  692. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_010_add_multi_vector_chunks.cpython-313.pyc +0 -0
  693. package/codex-lens/src/codexlens/storage/migrations/migration_006_enhance_relationships.py +37 -0
  694. package/codex-lens/src/codexlens/storage/migrations/migration_007_add_graph_neighbors.py +47 -0
  695. package/codex-lens/src/codexlens/storage/migrations/migration_008_add_merkle_hashes.py +81 -0
  696. package/codex-lens/src/codexlens/storage/migrations/migration_009_add_splade.py +103 -0
  697. package/codex-lens/src/codexlens/storage/migrations/migration_010_add_multi_vector_chunks.py +162 -0
  698. package/codex-lens/src/codexlens/storage/splade_index.py +578 -0
  699. package/codex-lens/src/codexlens/storage/sqlite_store.py +508 -184
  700. package/codex-lens/src/codexlens/storage/vector_meta_store.py +415 -0
  701. package/codex-lens/src/codexlens/watcher/__init__.py +17 -0
  702. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-310.pyc +0 -0
  703. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-312.pyc +0 -0
  704. package/codex-lens/src/codexlens/watcher/__pycache__/__init__.cpython-313.pyc +0 -0
  705. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-310.pyc +0 -0
  706. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-312.pyc +0 -0
  707. package/codex-lens/src/codexlens/watcher/__pycache__/events.cpython-313.pyc +0 -0
  708. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-310.pyc +0 -0
  709. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-312.pyc +0 -0
  710. package/codex-lens/src/codexlens/watcher/__pycache__/file_watcher.cpython-313.pyc +0 -0
  711. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-310.pyc +0 -0
  712. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-312.pyc +0 -0
  713. package/codex-lens/src/codexlens/watcher/__pycache__/incremental_indexer.cpython-313.pyc +0 -0
  714. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-310.pyc +0 -0
  715. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-312.pyc +0 -0
  716. package/codex-lens/src/codexlens/watcher/__pycache__/manager.cpython-313.pyc +0 -0
  717. package/codex-lens/src/codexlens/watcher/events.py +82 -0
  718. package/codex-lens/src/codexlens/watcher/file_watcher.py +347 -0
  719. package/codex-lens/src/codexlens/watcher/incremental_indexer.py +369 -0
  720. package/codex-lens/src/codexlens/watcher/manager.py +255 -0
  721. package/package.json +4 -1
  722. package/.claude/commands/workflow/docs/analyze.md +0 -1467
  723. package/.claude/commands/workflow/docs/copyright.md +0 -1265
  724. package/.claude/skills/command-guide/SKILL.md +0 -388
  725. package/.claude/skills/command-guide/UPDATE-GUIDELINE.md +0 -592
  726. package/.claude/skills/command-guide/guides/cli-tools-guide.md +0 -410
  727. package/.claude/skills/command-guide/guides/examples.md +0 -537
  728. package/.claude/skills/command-guide/guides/getting-started.md +0 -242
  729. package/.claude/skills/command-guide/guides/implementation-details.md +0 -1010
  730. package/.claude/skills/command-guide/guides/index-structure.md +0 -326
  731. package/.claude/skills/command-guide/guides/troubleshooting.md +0 -92
  732. package/.claude/skills/command-guide/guides/ui-design-workflow-guide.md +0 -316
  733. package/.claude/skills/command-guide/guides/workflow-patterns.md +0 -662
  734. package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +0 -855
  735. package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +0 -267
  736. package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +0 -182
  737. package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +0 -446
  738. package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +0 -558
  739. package/.claude/skills/command-guide/reference/agents/code-developer.md +0 -311
  740. package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +0 -308
  741. package/.claude/skills/command-guide/reference/agents/context-search-agent.md +0 -581
  742. package/.claude/skills/command-guide/reference/agents/doc-generator.md +0 -330
  743. package/.claude/skills/command-guide/reference/agents/memory-bridge.md +0 -94
  744. package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +0 -400
  745. package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +0 -344
  746. package/.claude/skills/command-guide/reference/agents/ui-design-agent.md +0 -593
  747. package/.claude/skills/command-guide/reference/agents/universal-executor.md +0 -131
  748. package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +0 -440
  749. package/.claude/skills/command-guide/reference/commands/enhance-prompt.md +0 -93
  750. package/.claude/skills/command-guide/reference/commands/memory/code-map-memory.md +0 -687
  751. package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +0 -471
  752. package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +0 -386
  753. package/.claude/skills/command-guide/reference/commands/memory/docs.md +0 -616
  754. package/.claude/skills/command-guide/reference/commands/memory/load-skill-memory.md +0 -182
  755. package/.claude/skills/command-guide/reference/commands/memory/load.md +0 -240
  756. package/.claude/skills/command-guide/reference/commands/memory/skill-memory.md +0 -525
  757. package/.claude/skills/command-guide/reference/commands/memory/style-skill-memory.md +0 -396
  758. package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +0 -314
  759. package/.claude/skills/command-guide/reference/commands/memory/update-full.md +0 -332
  760. package/.claude/skills/command-guide/reference/commands/memory/update-related.md +0 -332
  761. package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +0 -517
  762. package/.claude/skills/command-guide/reference/commands/task/breakdown.md +0 -204
  763. package/.claude/skills/command-guide/reference/commands/task/create.md +0 -152
  764. package/.claude/skills/command-guide/reference/commands/task/execute.md +0 -270
  765. package/.claude/skills/command-guide/reference/commands/task/replan.md +0 -437
  766. package/.claude/skills/command-guide/reference/commands/version.md +0 -254
  767. package/.claude/skills/command-guide/reference/commands/workflow/action-plan-verify.md +0 -447
  768. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +0 -585
  769. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +0 -452
  770. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +0 -443
  771. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +0 -220
  772. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +0 -200
  773. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +0 -200
  774. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +0 -200
  775. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +0 -200
  776. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +0 -398
  777. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +0 -387
  778. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +0 -221
  779. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +0 -221
  780. package/.claude/skills/command-guide/reference/commands/workflow/execute.md +0 -465
  781. package/.claude/skills/command-guide/reference/commands/workflow/init.md +0 -164
  782. package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +0 -748
  783. package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +0 -664
  784. package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +0 -645
  785. package/.claude/skills/command-guide/reference/commands/workflow/plan.md +0 -551
  786. package/.claude/skills/command-guide/reference/commands/workflow/replan.md +0 -515
  787. package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +0 -606
  788. package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +0 -765
  789. package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +0 -776
  790. package/.claude/skills/command-guide/reference/commands/workflow/review.md +0 -298
  791. package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +0 -547
  792. package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +0 -114
  793. package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +0 -77
  794. package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +0 -257
  795. package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +0 -460
  796. package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +0 -400
  797. package/.claude/skills/command-guide/reference/commands/workflow/test-cycle-execute.md +0 -498
  798. package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +0 -699
  799. package/.claude/skills/command-guide/reference/commands/workflow/test-gen.md +0 -529
  800. package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +0 -766
  801. package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +0 -433
  802. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +0 -487
  803. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +0 -518
  804. package/.claude/skills/command-guide/reference/commands/workflow/tools/tdd-coverage-analysis.md +0 -309
  805. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +0 -163
  806. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-context-gather.md +0 -232
  807. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +0 -254
  808. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/animation-extract.md +0 -1150
  809. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/codify-style.md +0 -652
  810. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/design-sync.md +0 -454
  811. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/explore-auto.md +0 -678
  812. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +0 -504
  813. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/imitate-auto.md +0 -745
  814. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +0 -537
  815. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/layout-extract.md +0 -788
  816. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/reference-page-generator.md +0 -356
  817. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/style-extract.md +0 -773
  818. package/.claude/skills/command-guide/scripts/analyze_commands.py +0 -502
  819. package/.claude/skills/command-guide/scripts/update-index.sh +0 -130
  820. package/.claude/skills/command-guide/templates/issue-bug.md +0 -104
  821. package/.claude/skills/command-guide/templates/issue-diagnosis.md +0 -275
  822. package/.claude/skills/command-guide/templates/issue-feature.md +0 -97
  823. package/.claude/skills/command-guide/templates/issue-question.md +0 -141
@@ -0,0 +1,1047 @@
1
+ /**
2
+ * CLI Output Converter
3
+ * Converts raw CLI tool output into structured Intermediate Representation (IR)
4
+ *
5
+ * Purpose: Decouple output parsing from consumption scenarios (View, Storage, Resume)
6
+ * Supports: Plain text, JSON Lines, and other structured formats
7
+ */
8
+ // ========== Plain Text Parser ==========
9
+ /**
10
+ * PlainTextParser - Converts plain text output to IR
11
+ * Simply wraps text in appropriate type envelope
12
+ */
13
+ export class PlainTextParser {
14
+ parse(chunk, streamType) {
15
+ const text = chunk.toString('utf8');
16
+ if (!text) {
17
+ return [];
18
+ }
19
+ return [{
20
+ type: streamType,
21
+ content: text,
22
+ timestamp: new Date().toISOString()
23
+ }];
24
+ }
25
+ /**
26
+ * Flush any remaining buffered data
27
+ * Called when stream ends to ensure no data is lost
28
+ *
29
+ * Note: PlainTextParser does not buffer data internally, so this method
30
+ * always returns an empty array. Other parsers (e.g., JsonLinesParser)
31
+ * may have buffered incomplete lines that need to be flushed.
32
+ *
33
+ * @returns Array of remaining output units (always empty for PlainTextParser)
34
+ */
35
+ flush() {
36
+ // Plain text parser has no internal buffer
37
+ return [];
38
+ }
39
+ }
40
+ // ========== JSON Lines Parser ==========
41
+ /**
42
+ * JsonLinesParser - Parses newline-delimited JSON output
43
+ *
44
+ * Features:
45
+ * - Handles incomplete lines across chunks
46
+ * - Maps JSON events to appropriate IR types
47
+ * - Falls back to stdout for unparseable lines
48
+ * - Robust error handling for malformed JSON
49
+ */
50
+ export class JsonLinesParser {
51
+ buffer = '';
52
+ /**
53
+ * Classify non-JSON content to determine appropriate output type
54
+ * Helps distinguish real errors from normal progress/output sent to stderr
55
+ * (Some CLI tools like Codex send all progress info to stderr)
56
+ */
57
+ classifyNonJsonContent(content, originalType) {
58
+ // If it came from stdout, keep it as stdout
59
+ if (originalType === 'stdout') {
60
+ return 'stdout';
61
+ }
62
+ // Check if content looks like an actual error
63
+ const errorPatterns = [
64
+ /^error:/i,
65
+ /^fatal:/i,
66
+ /^failed:/i,
67
+ /^exception:/i,
68
+ /\bERROR\b/,
69
+ /\bFATAL\b/,
70
+ /\bFAILED\b/,
71
+ /\bpanic:/i,
72
+ /traceback \(most recent/i,
73
+ /syntaxerror:/i,
74
+ /typeerror:/i,
75
+ /referenceerror:/i,
76
+ /\bstack trace\b/i,
77
+ /\bat line \d+\b/i,
78
+ /permission denied/i,
79
+ /access denied/i,
80
+ /authentication failed/i,
81
+ /connection refused/i,
82
+ /network error/i,
83
+ /unable to connect/i,
84
+ ];
85
+ for (const pattern of errorPatterns) {
86
+ if (pattern.test(content)) {
87
+ return 'stderr';
88
+ }
89
+ }
90
+ // Check for common CLI progress/info patterns that are NOT errors
91
+ const progressPatterns = [
92
+ /^[-=]+$/, // Separators: ----, ====
93
+ /^\s*\d+\s*$/, // Just numbers
94
+ /tokens?\s*(used|count)/i, // Token counts
95
+ /model:/i, // Model info
96
+ /session\s*id:/i, // Session info
97
+ /workdir:/i, // Working directory
98
+ /provider:/i, // Provider info
99
+ /^(user|assistant|codex|claude|gemini)$/i, // Role labels
100
+ /^mcp:/i, // MCP status
101
+ /^[-\s]*$/, // Empty or whitespace/dashes
102
+ ];
103
+ for (const pattern of progressPatterns) {
104
+ if (pattern.test(content)) {
105
+ return 'stdout'; // Treat as normal output, not error
106
+ }
107
+ }
108
+ // Default: if stderr but doesn't look like an error, treat as stdout
109
+ // This handles CLI tools that send everything to stderr (like Codex)
110
+ return 'stdout';
111
+ }
112
+ parse(chunk, streamType) {
113
+ const text = chunk.toString('utf8');
114
+ this.buffer += text;
115
+ const units = [];
116
+ const lines = this.buffer.split('\n');
117
+ // Keep the last incomplete line in buffer
118
+ this.buffer = lines.pop() || '';
119
+ for (const line of lines) {
120
+ const trimmed = line.trim();
121
+ if (!trimmed) {
122
+ continue;
123
+ }
124
+ // Try to parse as JSON
125
+ let parsed;
126
+ try {
127
+ parsed = JSON.parse(trimmed);
128
+ }
129
+ catch {
130
+ // Not valid JSON, treat as plain text
131
+ // For stderr content, check if it's actually an error or just normal output
132
+ // (Some CLI tools like Codex send all progress info to stderr)
133
+ const effectiveType = this.classifyNonJsonContent(line, streamType);
134
+ units.push({
135
+ type: effectiveType,
136
+ content: line,
137
+ timestamp: new Date().toISOString()
138
+ });
139
+ continue;
140
+ }
141
+ // Map JSON structure to IR type
142
+ const unit = this.mapJsonToIR(parsed, streamType);
143
+ if (unit) {
144
+ units.push(unit);
145
+ }
146
+ }
147
+ return units;
148
+ }
149
+ flush() {
150
+ const units = [];
151
+ if (this.buffer.trim()) {
152
+ // Try to parse remaining buffer
153
+ try {
154
+ const parsed = JSON.parse(this.buffer.trim());
155
+ const unit = this.mapJsonToIR(parsed, 'stdout');
156
+ if (unit) {
157
+ units.push(unit);
158
+ }
159
+ }
160
+ catch {
161
+ // Not valid JSON, return as plain text
162
+ units.push({
163
+ type: 'stdout',
164
+ content: this.buffer,
165
+ timestamp: new Date().toISOString()
166
+ });
167
+ }
168
+ }
169
+ this.buffer = '';
170
+ return units;
171
+ }
172
+ /**
173
+ * Map parsed JSON object to appropriate IR type
174
+ * Handles various JSON event formats from different CLI tools:
175
+ * - Gemini CLI: stream-json format (init, message, result)
176
+ * - Codex CLI: --json format (thread.started, item.completed, turn.completed)
177
+ * - Claude CLI: stream-json format (system, assistant, result)
178
+ * - OpenCode CLI: --format json (step_start, text, step_finish)
179
+ */
180
+ mapJsonToIR(json, fallbackStreamType) {
181
+ // Handle numeric timestamp (milliseconds) from OpenCode
182
+ const timestamp = typeof json.timestamp === 'number'
183
+ ? new Date(json.timestamp).toISOString()
184
+ : (json.timestamp || new Date().toISOString());
185
+ // ========== Gemini CLI stream-json format ==========
186
+ // {"type":"init","timestamp":"...","session_id":"...","model":"..."}
187
+ // {"type":"message","timestamp":"...","role":"assistant","content":"...","delta":true}
188
+ // {"type":"result","timestamp":"...","status":"success","stats":{...}}
189
+ if (json.type === 'init' && json.session_id) {
190
+ return {
191
+ type: 'metadata',
192
+ content: {
193
+ tool: 'gemini',
194
+ sessionId: json.session_id,
195
+ model: json.model,
196
+ raw: json
197
+ },
198
+ timestamp
199
+ };
200
+ }
201
+ if (json.type === 'message' && json.role) {
202
+ // Gemini assistant/user message
203
+ if (json.role === 'assistant') {
204
+ return {
205
+ type: 'stdout',
206
+ content: json.content || '',
207
+ timestamp
208
+ };
209
+ }
210
+ // Skip user messages in output (they're echo of input)
211
+ return null;
212
+ }
213
+ if (json.type === 'result' && json.stats) {
214
+ return {
215
+ type: 'metadata',
216
+ content: {
217
+ tool: 'gemini',
218
+ status: json.status,
219
+ stats: json.stats,
220
+ raw: json
221
+ },
222
+ timestamp
223
+ };
224
+ }
225
+ // Gemini tool_use: {"type":"tool_use","timestamp":"...","tool_name":"...","tool_id":"...","parameters":{...}}
226
+ if (json.type === 'tool_use' && json.tool_name) {
227
+ return {
228
+ type: 'tool_call',
229
+ content: {
230
+ tool: 'gemini',
231
+ action: 'invoke',
232
+ toolName: json.tool_name,
233
+ toolId: json.tool_id,
234
+ parameters: json.parameters,
235
+ raw: json
236
+ },
237
+ timestamp
238
+ };
239
+ }
240
+ // Gemini tool_result: {"type":"tool_result","timestamp":"...","tool_id":"...","status":"...","output":"..."}
241
+ if (json.type === 'tool_result' && json.tool_id) {
242
+ return {
243
+ type: 'tool_call',
244
+ content: {
245
+ tool: 'gemini',
246
+ action: 'result',
247
+ toolId: json.tool_id,
248
+ status: json.status,
249
+ output: json.output,
250
+ raw: json
251
+ },
252
+ timestamp
253
+ };
254
+ }
255
+ // ========== Codex CLI --json format ==========
256
+ // {"type":"thread.started","thread_id":"..."}
257
+ // {"type":"turn.started"}
258
+ // {"type":"item.started","item":{"id":"...","type":"command_execution","status":"in_progress"}}
259
+ // {"type":"item.completed","item":{"id":"...","type":"reasoning","text":"..."}}
260
+ // {"type":"item.completed","item":{"id":"...","type":"agent_message","text":"..."}}
261
+ // {"type":"item.completed","item":{"id":"...","type":"command_execution","aggregated_output":"..."}}
262
+ // {"type":"turn.completed","usage":{"input_tokens":...,"output_tokens":...}}
263
+ if (json.type === 'thread.started' && json.thread_id) {
264
+ return {
265
+ type: 'metadata',
266
+ content: {
267
+ tool: 'codex',
268
+ threadId: json.thread_id,
269
+ raw: json
270
+ },
271
+ timestamp
272
+ };
273
+ }
274
+ if (json.type === 'turn.started') {
275
+ return {
276
+ type: 'progress',
277
+ content: {
278
+ message: 'Turn started',
279
+ tool: 'codex'
280
+ },
281
+ timestamp
282
+ };
283
+ }
284
+ // Handle item.started - command execution in progress
285
+ if (json.type === 'item.started' && json.item) {
286
+ const item = json.item;
287
+ if (item.type === 'command_execution') {
288
+ return {
289
+ type: 'progress',
290
+ content: {
291
+ message: `Executing: ${item.command || 'command'}`,
292
+ tool: 'codex',
293
+ status: item.status || 'in_progress'
294
+ },
295
+ timestamp
296
+ };
297
+ }
298
+ // Other item.started types
299
+ return {
300
+ type: 'progress',
301
+ content: {
302
+ message: `Starting: ${item.type}`,
303
+ tool: 'codex'
304
+ },
305
+ timestamp
306
+ };
307
+ }
308
+ if (json.type === 'item.completed' && json.item) {
309
+ const item = json.item;
310
+ if (item.type === 'reasoning') {
311
+ return {
312
+ type: 'thought',
313
+ content: item.text || item.summary || '',
314
+ timestamp
315
+ };
316
+ }
317
+ if (item.type === 'agent_message') {
318
+ return {
319
+ type: 'stdout',
320
+ content: item.text || '',
321
+ timestamp
322
+ };
323
+ }
324
+ // Handle command_execution output
325
+ if (item.type === 'command_execution') {
326
+ // Show command output as code block
327
+ const output = item.aggregated_output || '';
328
+ return {
329
+ type: 'code',
330
+ content: {
331
+ command: item.command,
332
+ output: output,
333
+ exitCode: item.exit_code,
334
+ status: item.status
335
+ },
336
+ timestamp
337
+ };
338
+ }
339
+ // Other item types (function_call, etc.)
340
+ return {
341
+ type: 'system',
342
+ content: {
343
+ itemType: item.type,
344
+ itemId: item.id,
345
+ raw: item
346
+ },
347
+ timestamp
348
+ };
349
+ }
350
+ if (json.type === 'turn.completed' && json.usage) {
351
+ return {
352
+ type: 'metadata',
353
+ content: {
354
+ tool: 'codex',
355
+ usage: json.usage,
356
+ raw: json
357
+ },
358
+ timestamp
359
+ };
360
+ }
361
+ // ========== Claude CLI stream-json format ==========
362
+ // {"type":"system","subtype":"init","cwd":"...","session_id":"...","tools":[...],"model":"..."}
363
+ // {"type":"assistant","message":{...},"session_id":"..."}
364
+ // {"type":"result","subtype":"success","duration_ms":...,"result":"...","total_cost_usd":...}
365
+ if (json.type === 'system' && json.subtype === 'init') {
366
+ return {
367
+ type: 'metadata',
368
+ content: {
369
+ tool: 'claude',
370
+ sessionId: json.session_id,
371
+ model: json.model,
372
+ cwd: json.cwd,
373
+ tools: json.tools,
374
+ mcpServers: json.mcp_servers,
375
+ raw: json
376
+ },
377
+ timestamp
378
+ };
379
+ }
380
+ if (json.type === 'assistant' && json.message) {
381
+ // Extract text content from Claude message
382
+ const message = json.message;
383
+ const textContent = message.content
384
+ ?.filter((c) => c.type === 'text')
385
+ .map((c) => c.text)
386
+ .join('\n') || '';
387
+ return {
388
+ type: 'stdout',
389
+ content: textContent,
390
+ timestamp
391
+ };
392
+ }
393
+ if (json.type === 'result' && json.subtype) {
394
+ return {
395
+ type: 'metadata',
396
+ content: {
397
+ tool: 'claude',
398
+ status: json.subtype,
399
+ result: json.result,
400
+ durationMs: json.duration_ms,
401
+ totalCostUsd: json.total_cost_usd,
402
+ usage: json.usage,
403
+ modelUsage: json.modelUsage,
404
+ raw: json
405
+ },
406
+ timestamp
407
+ };
408
+ }
409
+ // ========== OpenCode CLI --format json ==========
410
+ // {"type":"step_start","timestamp":...,"sessionID":"...","part":{...}}
411
+ // {"type":"text","timestamp":...,"sessionID":"...","part":{"type":"text","text":"..."}}
412
+ // {"type":"tool_use","timestamp":...,"sessionID":"...","part":{"type":"tool","tool":"glob","input":{...},"state":{...}}}
413
+ // {"type":"step_finish","timestamp":...,"part":{"tokens":{...}}}
414
+ if (json.type === 'step_start' && json.sessionID) {
415
+ return {
416
+ type: 'progress',
417
+ content: {
418
+ message: 'Step started',
419
+ tool: 'opencode',
420
+ sessionId: json.sessionID
421
+ },
422
+ timestamp
423
+ };
424
+ }
425
+ if (json.type === 'text' && json.part) {
426
+ return {
427
+ type: 'stdout',
428
+ content: json.part.text || '',
429
+ timestamp
430
+ };
431
+ }
432
+ // OpenCode tool_use: {"type":"tool_use","part":{"type":"tool","tool":"glob","input":{...},"state":{"status":"..."}}}
433
+ if (json.type === 'tool_use' && json.part) {
434
+ const part = json.part;
435
+ const toolName = part.tool || 'unknown';
436
+ const status = part.state?.status || 'in_progress';
437
+ const input = part.input || {};
438
+ return {
439
+ type: 'tool_call',
440
+ content: {
441
+ tool: 'opencode',
442
+ action: status === 'completed' ? 'result' : 'invoke',
443
+ toolName: toolName,
444
+ toolId: part.callID || part.id,
445
+ parameters: input,
446
+ status: status,
447
+ output: part.output
448
+ },
449
+ timestamp
450
+ };
451
+ }
452
+ if (json.type === 'step_finish' && json.part) {
453
+ const tokens = json.part.tokens || {};
454
+ const inputTokens = tokens.input || 0;
455
+ const outputTokens = tokens.output || 0;
456
+ return {
457
+ type: 'metadata',
458
+ content: {
459
+ tool: 'opencode',
460
+ reason: json.part.reason,
461
+ tokens: { input: inputTokens, output: outputTokens },
462
+ cost: json.part.cost
463
+ },
464
+ timestamp
465
+ };
466
+ }
467
+ // ========== Legacy/Generic formats ==========
468
+ // Check for generic type field patterns
469
+ if (json.type) {
470
+ switch (json.type) {
471
+ case 'thought':
472
+ case 'thinking':
473
+ case 'reasoning':
474
+ return {
475
+ type: 'thought',
476
+ content: json.content || json.text || json.message,
477
+ timestamp
478
+ };
479
+ case 'code':
480
+ case 'code_block':
481
+ return {
482
+ type: 'code',
483
+ content: json.content || json.code,
484
+ timestamp
485
+ };
486
+ case 'diff':
487
+ case 'file_diff':
488
+ case 'file_change':
489
+ return {
490
+ type: 'file_diff',
491
+ content: {
492
+ path: json.path || json.file,
493
+ diff: json.diff || json.content,
494
+ action: json.action || 'modify'
495
+ },
496
+ timestamp
497
+ };
498
+ case 'progress':
499
+ case 'status':
500
+ return {
501
+ type: 'progress',
502
+ content: {
503
+ message: json.message || json.content,
504
+ progress: json.progress,
505
+ total: json.total
506
+ },
507
+ timestamp
508
+ };
509
+ case 'metadata':
510
+ case 'session_meta':
511
+ return {
512
+ type: 'metadata',
513
+ content: json.payload || json.data || json,
514
+ timestamp
515
+ };
516
+ case 'system':
517
+ case 'event':
518
+ return {
519
+ type: 'system',
520
+ content: json.message || json.content || json,
521
+ timestamp
522
+ };
523
+ }
524
+ }
525
+ // Check for legacy Codex JSONL format (response_item)
526
+ if (json.type === 'response_item' && json.payload) {
527
+ const payloadType = json.payload.type;
528
+ if (payloadType === 'message') {
529
+ // User or assistant message
530
+ const content = json.payload.content
531
+ ?.map((c) => c.text || '')
532
+ .filter((t) => t)
533
+ .join('\n') || '';
534
+ return {
535
+ type: 'stdout',
536
+ content,
537
+ timestamp
538
+ };
539
+ }
540
+ if (payloadType === 'reasoning') {
541
+ return {
542
+ type: 'thought',
543
+ content: json.payload.summary || json.payload.content,
544
+ timestamp
545
+ };
546
+ }
547
+ if (payloadType === 'function_call' || payloadType === 'function_call_output') {
548
+ return {
549
+ type: 'system',
550
+ content: json.payload,
551
+ timestamp
552
+ };
553
+ }
554
+ }
555
+ // Check for Gemini/Qwen message format (role-based)
556
+ if (json.role === 'user' || json.role === 'assistant') {
557
+ return {
558
+ type: 'stdout',
559
+ content: json.content || json.text || '',
560
+ timestamp
561
+ };
562
+ }
563
+ // Check for thoughts array
564
+ if (json.thoughts && Array.isArray(json.thoughts)) {
565
+ return {
566
+ type: 'thought',
567
+ content: json.thoughts.map((t) => typeof t === 'string' ? t : `${t.subject}: ${t.description}`).join('\n'),
568
+ timestamp
569
+ };
570
+ }
571
+ // Default: treat as stdout/stderr based on fallback
572
+ if (json.content || json.message || json.text) {
573
+ return {
574
+ type: fallbackStreamType,
575
+ content: json.content || json.message || json.text,
576
+ timestamp
577
+ };
578
+ }
579
+ // Unrecognized structure, return as metadata
580
+ return {
581
+ type: 'metadata',
582
+ content: json,
583
+ timestamp
584
+ };
585
+ }
586
+ }
587
+ // ========== Smart Content Formatter ==========
588
+ /**
589
+ * Intelligent content formatter that detects and formats JSON content
590
+ * based on structural patterns rather than hardcoded tool-specific formats.
591
+ *
592
+ * Key detection patterns:
593
+ * - Session/Metadata: session_id, sessionID, thread_id, model, stats
594
+ * - Tool Calls: tool_name, tool, function_name, parameters
595
+ * - Progress: status, progress, state, reason
596
+ * - Tokens: tokens, usage, input_tokens, output_tokens
597
+ * - Text Content: content, text, message
598
+ */
599
+ export class SmartContentFormatter {
600
+ /**
601
+ * Format structured content into human-readable text
602
+ * NEVER returns null - always returns displayable content to prevent data loss
603
+ */
604
+ static format(content, type) {
605
+ // Handle null/undefined
606
+ if (content === null || content === undefined) {
607
+ return '';
608
+ }
609
+ // String content - return as-is
610
+ if (typeof content === 'string') {
611
+ return content;
612
+ }
613
+ // Primitive types - convert to string
614
+ if (typeof content !== 'object') {
615
+ return String(content);
616
+ }
617
+ // Type-specific formatting with fallback chain
618
+ let result = null;
619
+ switch (type) {
620
+ case 'metadata':
621
+ result = this.formatMetadata(content);
622
+ break;
623
+ case 'progress':
624
+ result = this.formatProgress(content);
625
+ break;
626
+ case 'tool_call':
627
+ result = this.formatToolCall(content);
628
+ break;
629
+ case 'code':
630
+ result = this.formatCode(content);
631
+ break;
632
+ case 'file_diff':
633
+ result = this.formatFileDiff(content);
634
+ break;
635
+ case 'thought':
636
+ result = this.formatThought(content);
637
+ break;
638
+ case 'system':
639
+ result = this.formatSystem(content);
640
+ break;
641
+ default:
642
+ // Try to extract text content from common fields
643
+ result = this.extractTextContent(content);
644
+ }
645
+ // If type-specific formatting succeeded, return it
646
+ if (result && result.trim()) {
647
+ return result;
648
+ }
649
+ // Fallback: try to extract any text content regardless of type
650
+ const textContent = this.extractTextContent(content);
651
+ if (textContent && textContent.trim()) {
652
+ return textContent;
653
+ }
654
+ // Last resort: format as readable JSON with type hint
655
+ return this.formatAsReadableJson(content, type);
656
+ }
657
+ /**
658
+ * Format object as readable JSON with type hint (fallback for unknown content)
659
+ * Ensures content is never lost
660
+ */
661
+ static formatAsReadableJson(content, type) {
662
+ try {
663
+ const jsonStr = JSON.stringify(content, null, 0);
664
+ // For short content, show inline; for long content, indicate it's data
665
+ if (jsonStr.length <= 200) {
666
+ return `[${type}] ${jsonStr}`;
667
+ }
668
+ // For long content, show truncated with type indicator
669
+ return `[${type}] ${jsonStr.substring(0, 200)}...`;
670
+ }
671
+ catch {
672
+ // If JSON.stringify fails, try to extract keys
673
+ const keys = Object.keys(content).slice(0, 5).join(', ');
674
+ return `[${type}] {${keys}${Object.keys(content).length > 5 ? ', ...' : ''}}`;
675
+ }
676
+ }
677
+ /**
678
+ * Format metadata (session info, stats, etc.)
679
+ * Returns null if no meaningful metadata could be extracted
680
+ */
681
+ static formatMetadata(content) {
682
+ const parts = [];
683
+ // Tool identifier
684
+ if (content.tool) {
685
+ parts.push(`[${content.tool.toUpperCase()}]`);
686
+ }
687
+ // Session ID
688
+ const sessionId = content.sessionId || content.session_id || content.threadId || content.thread_id;
689
+ if (sessionId) {
690
+ parts.push(`Session: ${this.truncate(sessionId, 20)}`);
691
+ }
692
+ // Model info
693
+ if (content.model) {
694
+ parts.push(`Model: ${content.model}`);
695
+ }
696
+ // Status
697
+ if (content.status) {
698
+ parts.push(`Status: ${content.status}`);
699
+ }
700
+ // Reason (for step_finish events)
701
+ if (content.reason) {
702
+ parts.push(`Reason: ${content.reason}`);
703
+ }
704
+ // Duration
705
+ if (content.durationMs || content.duration_ms) {
706
+ const ms = content.durationMs || content.duration_ms;
707
+ parts.push(`Duration: ${this.formatDuration(ms)}`);
708
+ }
709
+ // Token usage
710
+ const tokens = this.extractTokens(content);
711
+ if (tokens) {
712
+ parts.push(`Tokens: ${tokens}`);
713
+ }
714
+ // Cost
715
+ if (content.totalCostUsd !== undefined || content.total_cost_usd !== undefined || content.cost !== undefined) {
716
+ const cost = content.totalCostUsd ?? content.total_cost_usd ?? content.cost;
717
+ parts.push(`Cost: $${typeof cost === 'number' ? cost.toFixed(6) : cost}`);
718
+ }
719
+ // Result
720
+ if (content.result && typeof content.result === 'string') {
721
+ parts.push(`Result: ${this.truncate(content.result, 100)}`);
722
+ }
723
+ // Return null if no meaningful parts extracted (let fallback handle it)
724
+ return parts.length > 0 ? parts.join(' | ') : null;
725
+ }
726
+ /**
727
+ * Format progress updates
728
+ * Returns null if no meaningful progress info could be extracted
729
+ */
730
+ static formatProgress(content) {
731
+ const parts = [];
732
+ // Tool identifier
733
+ if (content.tool) {
734
+ parts.push(`[${content.tool.toUpperCase()}]`);
735
+ }
736
+ // Message
737
+ if (content.message) {
738
+ parts.push(content.message);
739
+ }
740
+ // Status
741
+ if (content.status) {
742
+ parts.push(`(${content.status})`);
743
+ }
744
+ // Progress indicator
745
+ if (content.progress !== undefined && content.total !== undefined) {
746
+ parts.push(`[${content.progress}/${content.total}]`);
747
+ }
748
+ // Session ID (brief) - only show if no message (avoid duplication)
749
+ const sessionId = content.sessionId || content.session_id;
750
+ if (sessionId && !content.message) {
751
+ parts.push(`Session: ${this.truncate(sessionId, 12)}`);
752
+ }
753
+ // Return null if no meaningful parts extracted (let fallback handle it)
754
+ return parts.length > 0 ? parts.join(' ') : null;
755
+ }
756
+ /**
757
+ * Format tool call (invoke/result)
758
+ */
759
+ static formatToolCall(content) {
760
+ const toolName = content.toolName || content.tool_name || content.name || 'unknown';
761
+ const action = content.action || 'invoke';
762
+ const status = content.status;
763
+ if (action === 'result') {
764
+ const statusText = status || 'completed';
765
+ let result = `[Tool Result] ${toolName}: ${statusText}`;
766
+ if (content.output) {
767
+ const outputStr = typeof content.output === 'string' ? content.output : JSON.stringify(content.output);
768
+ result += ` → ${this.truncate(outputStr, 150)}`;
769
+ }
770
+ return result;
771
+ }
772
+ else {
773
+ // invoke
774
+ let params = '';
775
+ if (content.parameters) {
776
+ const paramStr = typeof content.parameters === 'string'
777
+ ? content.parameters
778
+ : JSON.stringify(content.parameters);
779
+ params = this.truncate(paramStr, 100);
780
+ }
781
+ return `[Tool] ${toolName}(${params})`;
782
+ }
783
+ }
784
+ /**
785
+ * Format code block
786
+ */
787
+ static formatCode(content) {
788
+ if (typeof content === 'string') {
789
+ return `\`\`\`\n${content}\n\`\`\``;
790
+ }
791
+ const lang = content.language || '';
792
+ const code = content.code || content.output || content.content || '';
793
+ const command = content.command;
794
+ let result = '';
795
+ if (command) {
796
+ result += `$ ${command}\n`;
797
+ }
798
+ result += `\`\`\`${lang}\n${code}\n\`\`\``;
799
+ if (content.exitCode !== undefined) {
800
+ result += `\n(exit: ${content.exitCode})`;
801
+ }
802
+ return result;
803
+ }
804
+ /**
805
+ * Format file diff
806
+ */
807
+ static formatFileDiff(content) {
808
+ const path = content.path || content.file || 'unknown';
809
+ const action = content.action || 'modify';
810
+ const diff = content.diff || content.content || '';
811
+ return `[${action.toUpperCase()}] ${path}\n\`\`\`diff\n${diff}\n\`\`\``;
812
+ }
813
+ /**
814
+ * Format thought/reasoning
815
+ * Returns null if no text content could be extracted
816
+ */
817
+ static formatThought(content) {
818
+ if (typeof content === 'string') {
819
+ return `💭 ${content}`;
820
+ }
821
+ const text = content.text || content.summary || content.content || content.thinking;
822
+ return text ? `💭 ${text}` : null;
823
+ }
824
+ /**
825
+ * Format system message
826
+ * Returns null if no message content could be extracted
827
+ */
828
+ static formatSystem(content) {
829
+ if (typeof content === 'string') {
830
+ return `⚙️ ${content}`;
831
+ }
832
+ const message = content.message || content.content || content.event || content.info;
833
+ return message ? `⚙️ ${message}` : null;
834
+ }
835
+ /**
836
+ * Extract text content from common fields
837
+ */
838
+ static extractTextContent(content) {
839
+ // Priority order for text extraction
840
+ const textFields = ['text', 'content', 'message', 'output', 'data'];
841
+ for (const field of textFields) {
842
+ if (content[field] && typeof content[field] === 'string') {
843
+ return content[field];
844
+ }
845
+ }
846
+ // Check for nested content
847
+ if (content.part && typeof content.part === 'object') {
848
+ const nested = this.extractTextContent(content.part);
849
+ if (nested)
850
+ return nested;
851
+ }
852
+ // Check for item content (Codex format)
853
+ if (content.item && typeof content.item === 'object') {
854
+ const nested = this.extractTextContent(content.item);
855
+ if (nested)
856
+ return nested;
857
+ }
858
+ return null;
859
+ }
860
+ /**
861
+ * Extract token usage from various formats
862
+ */
863
+ static extractTokens(content) {
864
+ // Direct tokens object
865
+ if (content.tokens && typeof content.tokens === 'object') {
866
+ const input = content.tokens.input || content.tokens.input_tokens || 0;
867
+ const output = content.tokens.output || content.tokens.output_tokens || 0;
868
+ return `${input}↓ ${output}↑`;
869
+ }
870
+ // Usage object
871
+ if (content.usage && typeof content.usage === 'object') {
872
+ const input = content.usage.input_tokens || content.usage.inputTokens || 0;
873
+ const output = content.usage.output_tokens || content.usage.outputTokens || 0;
874
+ return `${input}↓ ${output}↑`;
875
+ }
876
+ // Stats object
877
+ if (content.stats && typeof content.stats === 'object') {
878
+ const input = content.stats.input_tokens || content.stats.inputTokens || 0;
879
+ const output = content.stats.output_tokens || content.stats.outputTokens || 0;
880
+ if (input || output) {
881
+ return `${input}↓ ${output}↑`;
882
+ }
883
+ }
884
+ return null;
885
+ }
886
+ /**
887
+ * Truncate string to max length
888
+ */
889
+ static truncate(str, maxLen) {
890
+ if (!str || str.length <= maxLen)
891
+ return str;
892
+ return str.substring(0, maxLen) + '...';
893
+ }
894
+ /**
895
+ * Format duration from milliseconds
896
+ */
897
+ static formatDuration(ms) {
898
+ if (ms < 1000)
899
+ return `${ms}ms`;
900
+ const s = Math.floor(ms / 1000);
901
+ if (s < 60)
902
+ return `${s}s`;
903
+ const m = Math.floor(s / 60);
904
+ const rs = s % 60;
905
+ return `${m}m ${rs}s`;
906
+ }
907
+ }
908
+ // ========== Factory Function ==========
909
+ /**
910
+ * Create an output parser instance based on format
911
+ * @param format - Output format type
912
+ * @returns Parser instance
913
+ */
914
+ export function createOutputParser(format) {
915
+ switch (format) {
916
+ case 'json-lines':
917
+ return new JsonLinesParser();
918
+ case 'text':
919
+ default:
920
+ return new PlainTextParser();
921
+ }
922
+ }
923
+ // ========== Utility Functions ==========
924
+ /**
925
+ * Flatten output units into plain text string
926
+ * Useful for Resume scenario where we need concatenated context
927
+ *
928
+ * @param units - Array of output units to flatten
929
+ * @param options - Filtering and formatting options
930
+ * @returns Concatenated text content
931
+ */
932
+ export function flattenOutputUnits(units, options) {
933
+ const { includeTypes, excludeTypes, includeTimestamps = false, separator = '\n' } = options || {};
934
+ // Filter units by type
935
+ let filtered = units;
936
+ if (includeTypes && includeTypes.length > 0) {
937
+ filtered = filtered.filter(u => includeTypes.includes(u.type));
938
+ }
939
+ if (excludeTypes && excludeTypes.length > 0) {
940
+ filtered = filtered.filter(u => !excludeTypes.includes(u.type));
941
+ }
942
+ // Convert to text
943
+ const lines = filtered.map(unit => {
944
+ let text = '';
945
+ if (includeTimestamps) {
946
+ text += `[${unit.timestamp}] `;
947
+ }
948
+ // Extract text content based on type
949
+ if (typeof unit.content === 'string') {
950
+ text += unit.content;
951
+ }
952
+ else if (typeof unit.content === 'object' && unit.content !== null) {
953
+ // Handle structured content with type-specific formatting
954
+ switch (unit.type) {
955
+ case 'file_diff':
956
+ // Format file diff with path and diff content
957
+ text += `File: ${unit.content.path}\n\`\`\`diff\n${unit.content.diff}\n\`\`\``;
958
+ break;
959
+ case 'code':
960
+ // Format code block with language
961
+ const lang = unit.content.language || '';
962
+ const code = unit.content.code || unit.content;
963
+ text += `\`\`\`${lang}\n${typeof code === 'string' ? code : JSON.stringify(code)}\n\`\`\``;
964
+ break;
965
+ case 'thought':
966
+ // Format thought/reasoning content
967
+ text += `[Thought] ${typeof unit.content === 'string' ? unit.content : JSON.stringify(unit.content)}`;
968
+ break;
969
+ case 'progress':
970
+ // Format progress updates
971
+ if (unit.content.message) {
972
+ text += unit.content.message;
973
+ if (unit.content.progress !== undefined && unit.content.total !== undefined) {
974
+ text += ` (${unit.content.progress}/${unit.content.total})`;
975
+ }
976
+ }
977
+ else {
978
+ text += JSON.stringify(unit.content);
979
+ }
980
+ break;
981
+ case 'tool_call':
982
+ // Format tool call/result
983
+ if (unit.content.action === 'invoke') {
984
+ const params = unit.content.parameters ? JSON.stringify(unit.content.parameters) : '';
985
+ text += `[Tool] ${unit.content.toolName}(${params})`;
986
+ }
987
+ else if (unit.content.action === 'result') {
988
+ const status = unit.content.status || 'unknown';
989
+ const output = unit.content.output ? `: ${unit.content.output.substring(0, 200)}${unit.content.output.length > 200 ? '...' : ''}` : '';
990
+ text += `[Tool Result] ${status}${output}`;
991
+ }
992
+ else {
993
+ text += JSON.stringify(unit.content);
994
+ }
995
+ break;
996
+ case 'metadata':
997
+ case 'system':
998
+ // Metadata and system events are typically excluded from prompt context
999
+ // Include minimal representation if they passed filtering
1000
+ text += JSON.stringify(unit.content);
1001
+ break;
1002
+ default:
1003
+ // Fallback for unknown structured types
1004
+ text += JSON.stringify(unit.content);
1005
+ }
1006
+ }
1007
+ else {
1008
+ text += String(unit.content);
1009
+ }
1010
+ return text;
1011
+ });
1012
+ return lines.join(separator);
1013
+ }
1014
+ /**
1015
+ * Extract specific content type from units
1016
+ * Convenience helper for common extraction patterns
1017
+ */
1018
+ export function extractContent(units, type) {
1019
+ return units
1020
+ .filter(u => u.type === type)
1021
+ .map(u => typeof u.content === 'string' ? u.content : JSON.stringify(u.content));
1022
+ }
1023
+ /**
1024
+ * Get statistics about output units
1025
+ * Useful for debugging and analytics
1026
+ */
1027
+ export function getOutputStats(units) {
1028
+ const byType = {};
1029
+ let firstTimestamp;
1030
+ let lastTimestamp;
1031
+ for (const unit of units) {
1032
+ byType[unit.type] = (byType[unit.type] || 0) + 1;
1033
+ if (!firstTimestamp || unit.timestamp < firstTimestamp) {
1034
+ firstTimestamp = unit.timestamp;
1035
+ }
1036
+ if (!lastTimestamp || unit.timestamp > lastTimestamp) {
1037
+ lastTimestamp = unit.timestamp;
1038
+ }
1039
+ }
1040
+ return {
1041
+ total: units.length,
1042
+ byType: byType,
1043
+ firstTimestamp,
1044
+ lastTimestamp
1045
+ };
1046
+ }
1047
+ //# sourceMappingURL=cli-output-converter.js.map