claude-code-workflow 7.2.15 → 7.2.16

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 (526) hide show
  1. package/.ccw/workflows/cli-templates/schemas/team-tasks-schema.json +255 -0
  2. package/.codex/agents/team-supervisor.toml +39 -0
  3. package/.codex/agents/team-worker.toml +46 -0
  4. package/.codex/skills/team-arch-opt/SKILL.md +151 -698
  5. package/.codex/skills/team-arch-opt/roles/analyzer/role.md +78 -0
  6. package/.codex/skills/team-arch-opt/roles/coordinator/commands/analyze.md +57 -0
  7. package/.codex/skills/team-arch-opt/roles/coordinator/commands/dispatch.md +287 -0
  8. package/.codex/skills/team-arch-opt/roles/coordinator/commands/monitor.md +204 -0
  9. package/.codex/skills/team-arch-opt/roles/coordinator/role.md +162 -0
  10. package/.codex/skills/team-arch-opt/roles/designer/role.md +115 -0
  11. package/.codex/skills/team-arch-opt/roles/refactorer/role.md +102 -0
  12. package/.codex/skills/team-arch-opt/roles/reviewer/role.md +111 -0
  13. package/.codex/skills/team-arch-opt/roles/validator/role.md +115 -0
  14. package/.codex/skills/team-arch-opt/specs/pipelines.md +102 -0
  15. package/.codex/skills/team-arch-opt/specs/team-config.json +263 -0
  16. package/.codex/skills/team-brainstorm/SKILL.md +167 -724
  17. package/.codex/skills/team-brainstorm/roles/challenger/role.md +61 -0
  18. package/.codex/skills/team-brainstorm/roles/coordinator/commands/analyze.md +58 -0
  19. package/.codex/skills/team-brainstorm/roles/coordinator/commands/dispatch.md +162 -0
  20. package/.codex/skills/team-brainstorm/roles/coordinator/commands/monitor.md +171 -0
  21. package/.codex/skills/team-brainstorm/roles/coordinator/role.md +140 -0
  22. package/.codex/skills/team-brainstorm/roles/evaluator/role.md +56 -0
  23. package/.codex/skills/team-brainstorm/roles/ideator/role.md +69 -0
  24. package/.codex/skills/team-brainstorm/roles/synthesizer/role.md +57 -0
  25. package/.codex/skills/team-brainstorm/specs/pipelines.md +72 -0
  26. package/.codex/skills/team-brainstorm/specs/team-config.json +86 -0
  27. package/.codex/skills/team-coordinate/SKILL.md +267 -667
  28. package/.codex/skills/team-coordinate/roles/coordinator/commands/analyze-task.md +247 -0
  29. package/.codex/skills/team-coordinate/roles/coordinator/commands/dispatch.md +126 -0
  30. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +327 -0
  31. package/.codex/skills/team-coordinate/roles/coordinator/role.md +361 -0
  32. package/.codex/skills/team-coordinate/specs/knowledge-transfer.md +111 -0
  33. package/.codex/skills/team-coordinate/specs/pipelines.md +97 -0
  34. package/.codex/skills/team-coordinate/specs/quality-gates.md +112 -0
  35. package/.codex/skills/team-coordinate/specs/role-spec-template.md +192 -0
  36. package/.codex/skills/team-designer/SKILL.md +153 -691
  37. package/.codex/skills/team-designer/phases/01-requirements-analysis.md +250 -0
  38. package/.codex/skills/team-designer/phases/02-scaffold-generation.md +228 -0
  39. package/.codex/skills/team-designer/phases/03-content-generation.md +330 -0
  40. package/.codex/skills/team-designer/phases/04-validation.md +320 -0
  41. package/.codex/skills/team-executor/SKILL.md +191 -515
  42. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +280 -0
  43. package/.codex/skills/team-executor/roles/executor/role.md +170 -0
  44. package/.codex/skills/team-executor/specs/session-schema.md +264 -0
  45. package/.codex/skills/team-frontend/SKILL.md +129 -750
  46. package/.codex/skills/team-frontend/roles/analyst/role.md +92 -0
  47. package/.codex/skills/team-frontend/roles/architect/role.md +86 -0
  48. package/.codex/skills/team-frontend/roles/coordinator/commands/analyze.md +52 -0
  49. package/.codex/skills/team-frontend/roles/coordinator/commands/dispatch.md +151 -0
  50. package/.codex/skills/team-frontend/roles/coordinator/commands/monitor.md +188 -0
  51. package/.codex/skills/team-frontend/roles/coordinator/role.md +157 -0
  52. package/.codex/skills/team-frontend/roles/developer/role.md +93 -0
  53. package/.codex/skills/team-frontend/roles/qa/role.md +79 -0
  54. package/.codex/skills/team-frontend/specs/pipelines.md +76 -0
  55. package/.codex/skills/team-frontend/specs/team-config.json +84 -0
  56. package/.codex/skills/team-frontend-debug/SKILL.md +191 -821
  57. package/.codex/skills/team-frontend-debug/roles/analyzer/role.md +208 -0
  58. package/.codex/skills/team-frontend-debug/roles/coordinator/commands/analyze.md +174 -0
  59. package/.codex/skills/team-frontend-debug/roles/coordinator/commands/dispatch.md +198 -0
  60. package/.codex/skills/team-frontend-debug/roles/coordinator/commands/monitor.md +143 -0
  61. package/.codex/skills/team-frontend-debug/roles/coordinator/role.md +131 -0
  62. package/.codex/skills/team-frontend-debug/roles/fixer/role.md +147 -0
  63. package/.codex/skills/team-frontend-debug/roles/reproducer/role.md +147 -0
  64. package/.codex/skills/team-frontend-debug/roles/tester/role.md +231 -0
  65. package/.codex/skills/team-frontend-debug/roles/verifier/role.md +172 -0
  66. package/.codex/skills/team-frontend-debug/specs/debug-tools.md +215 -0
  67. package/.codex/skills/team-frontend-debug/specs/pipelines.md +94 -0
  68. package/.codex/skills/team-issue/SKILL.md +166 -751
  69. package/.codex/skills/team-issue/roles/coordinator/commands/analyze.md +64 -0
  70. package/.codex/skills/team-issue/roles/coordinator/commands/dispatch.md +273 -0
  71. package/.codex/skills/team-issue/roles/coordinator/commands/monitor.md +194 -0
  72. package/.codex/skills/team-issue/roles/coordinator/role.md +175 -0
  73. package/.codex/skills/team-issue/roles/explorer/role.md +94 -0
  74. package/.codex/skills/team-issue/roles/implementer/role.md +87 -0
  75. package/.codex/skills/team-issue/roles/integrator/role.md +84 -0
  76. package/.codex/skills/team-issue/roles/planner/role.md +81 -0
  77. package/.codex/skills/team-issue/roles/reviewer/role.md +86 -0
  78. package/.codex/skills/team-issue/specs/pipelines.md +124 -0
  79. package/.codex/skills/team-issue/specs/team-config.json +70 -0
  80. package/.codex/skills/team-iterdev/SKILL.md +134 -825
  81. package/.codex/skills/team-iterdev/roles/architect/role.md +65 -0
  82. package/.codex/skills/team-iterdev/roles/coordinator/commands/analyze.md +62 -0
  83. package/.codex/skills/team-iterdev/roles/coordinator/commands/dispatch.md +187 -0
  84. package/.codex/skills/team-iterdev/roles/coordinator/commands/monitor.md +186 -0
  85. package/.codex/skills/team-iterdev/roles/coordinator/role.md +161 -0
  86. package/.codex/skills/team-iterdev/roles/developer/role.md +74 -0
  87. package/.codex/skills/team-iterdev/roles/reviewer/role.md +66 -0
  88. package/.codex/skills/team-iterdev/roles/tester/role.md +88 -0
  89. package/.codex/skills/team-iterdev/specs/pipelines.md +94 -0
  90. package/.codex/skills/team-iterdev/specs/team-config.json +172 -0
  91. package/.codex/skills/team-lifecycle-v4/MIGRATION-PLAN.md +512 -0
  92. package/.codex/skills/team-lifecycle-v4/SKILL.md +166 -723
  93. package/.codex/skills/team-lifecycle-v4/roles/analyst/role.md +104 -0
  94. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/analyze.md +56 -0
  95. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +61 -0
  96. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +177 -0
  97. package/.codex/skills/team-lifecycle-v4/roles/coordinator/role.md +152 -0
  98. package/.codex/skills/team-lifecycle-v4/roles/executor/commands/fix.md +35 -0
  99. package/.codex/skills/team-lifecycle-v4/roles/executor/commands/implement.md +63 -0
  100. package/.codex/skills/team-lifecycle-v4/roles/executor/role.md +89 -0
  101. package/.codex/skills/team-lifecycle-v4/roles/planner/role.md +108 -0
  102. package/.codex/skills/team-lifecycle-v4/roles/reviewer/commands/review-code.md +57 -0
  103. package/.codex/skills/team-lifecycle-v4/roles/reviewer/commands/review-spec.md +44 -0
  104. package/.codex/skills/team-lifecycle-v4/roles/reviewer/role.md +98 -0
  105. package/.codex/skills/team-lifecycle-v4/roles/supervisor/role.md +210 -0
  106. package/.codex/skills/team-lifecycle-v4/roles/tester/role.md +126 -0
  107. package/.codex/skills/team-lifecycle-v4/roles/writer/role.md +125 -0
  108. package/.codex/skills/team-lifecycle-v4/schemas/tasks-schema.md +82 -160
  109. package/.codex/skills/team-lifecycle-v4/specs/knowledge-transfer.md +136 -0
  110. package/.codex/skills/team-lifecycle-v4/specs/pipelines.md +125 -0
  111. package/.codex/skills/team-lifecycle-v4/specs/quality-gates.md +130 -0
  112. package/.codex/skills/team-perf-opt/SKILL.md +169 -697
  113. package/.codex/skills/team-perf-opt/roles/benchmarker/role.md +89 -0
  114. package/.codex/skills/team-perf-opt/roles/coordinator/commands/analyze.md +61 -0
  115. package/.codex/skills/team-perf-opt/roles/coordinator/commands/dispatch.md +262 -0
  116. package/.codex/skills/team-perf-opt/roles/coordinator/commands/monitor.md +320 -0
  117. package/.codex/skills/team-perf-opt/roles/coordinator/role.md +147 -0
  118. package/.codex/skills/team-perf-opt/roles/optimizer/role.md +97 -0
  119. package/.codex/skills/team-perf-opt/roles/profiler/role.md +73 -0
  120. package/.codex/skills/team-perf-opt/roles/reviewer/role.md +75 -0
  121. package/.codex/skills/team-perf-opt/roles/strategist/role.md +94 -0
  122. package/.codex/skills/team-perf-opt/specs/pipelines.md +65 -0
  123. package/.codex/skills/team-perf-opt/specs/team-config.json +246 -0
  124. package/.codex/skills/team-planex/SKILL.md +103 -477
  125. package/.codex/skills/team-planex/roles/coordinator/commands/analyze.md +52 -0
  126. package/.codex/skills/team-planex/roles/coordinator/commands/dispatch.md +80 -0
  127. package/.codex/skills/team-planex/roles/coordinator/commands/monitor.md +164 -0
  128. package/.codex/skills/team-planex/roles/coordinator/role.md +140 -0
  129. package/.codex/skills/team-planex/roles/executor/role.md +91 -0
  130. package/.codex/skills/team-planex/roles/planner/role.md +112 -0
  131. package/.codex/skills/team-planex/specs/pipelines.md +93 -0
  132. package/.codex/skills/team-quality-assurance/SKILL.md +148 -813
  133. package/.codex/skills/team-quality-assurance/roles/analyst/role.md +80 -0
  134. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/analyze.md +72 -0
  135. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +108 -0
  136. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +209 -0
  137. package/.codex/skills/team-quality-assurance/roles/coordinator/role.md +143 -0
  138. package/.codex/skills/team-quality-assurance/roles/executor/role.md +66 -0
  139. package/.codex/skills/team-quality-assurance/roles/generator/role.md +68 -0
  140. package/.codex/skills/team-quality-assurance/roles/scout/role.md +67 -0
  141. package/.codex/skills/team-quality-assurance/roles/strategist/role.md +71 -0
  142. package/.codex/skills/team-quality-assurance/specs/pipelines.md +115 -0
  143. package/.codex/skills/team-quality-assurance/specs/team-config.json +131 -0
  144. package/.codex/skills/team-review/SKILL.md +148 -533
  145. package/.codex/skills/team-review/roles/coordinator/commands/analyze.md +71 -0
  146. package/.codex/skills/team-review/roles/coordinator/commands/dispatch.md +90 -0
  147. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +185 -0
  148. package/.codex/skills/team-review/roles/coordinator/role.md +142 -0
  149. package/.codex/skills/team-review/roles/fixer/role.md +76 -0
  150. package/.codex/skills/team-review/roles/reviewer/role.md +68 -0
  151. package/.codex/skills/team-review/roles/scanner/role.md +71 -0
  152. package/.codex/skills/team-review/specs/dimensions.md +82 -0
  153. package/.codex/skills/team-review/specs/finding-schema.json +82 -0
  154. package/.codex/skills/team-review/specs/pipelines.md +102 -0
  155. package/.codex/skills/team-review/specs/team-config.json +27 -0
  156. package/.codex/skills/team-roadmap-dev/SKILL.md +162 -683
  157. package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/analyze.md +61 -0
  158. package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/dispatch.md +241 -0
  159. package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/monitor.md +468 -0
  160. package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/pause.md +90 -0
  161. package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/resume.md +137 -0
  162. package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/roadmap-discuss.md +243 -0
  163. package/.codex/skills/team-roadmap-dev/roles/coordinator/role.md +303 -0
  164. package/.codex/skills/team-roadmap-dev/roles/executor/role.md +71 -0
  165. package/.codex/skills/team-roadmap-dev/roles/planner/role.md +76 -0
  166. package/.codex/skills/team-roadmap-dev/roles/verifier/role.md +74 -0
  167. package/.codex/skills/team-roadmap-dev/specs/pipelines.md +93 -0
  168. package/.codex/skills/team-roadmap-dev/specs/team-config.json +95 -0
  169. package/.codex/skills/team-tech-debt/SKILL.md +129 -708
  170. package/.codex/skills/team-tech-debt/roles/assessor/role.md +69 -0
  171. package/.codex/skills/team-tech-debt/roles/coordinator/commands/analyze.md +47 -0
  172. package/.codex/skills/team-tech-debt/roles/coordinator/commands/dispatch.md +163 -0
  173. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +231 -0
  174. package/.codex/skills/team-tech-debt/roles/coordinator/role.md +141 -0
  175. package/.codex/skills/team-tech-debt/roles/executor/role.md +76 -0
  176. package/.codex/skills/team-tech-debt/roles/planner/role.md +69 -0
  177. package/.codex/skills/team-tech-debt/roles/scanner/role.md +82 -0
  178. package/.codex/skills/team-tech-debt/roles/validator/role.md +75 -0
  179. package/.codex/skills/team-tech-debt/specs/pipelines.md +47 -0
  180. package/.codex/skills/team-tech-debt/specs/team-config.json +129 -0
  181. package/.codex/skills/team-testing/SKILL.md +144 -769
  182. package/.codex/skills/team-testing/roles/analyst/role.md +95 -0
  183. package/.codex/skills/team-testing/roles/coordinator/commands/analyze.md +70 -0
  184. package/.codex/skills/team-testing/roles/coordinator/commands/dispatch.md +106 -0
  185. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +242 -0
  186. package/.codex/skills/team-testing/roles/coordinator/role.md +151 -0
  187. package/.codex/skills/team-testing/roles/executor/role.md +96 -0
  188. package/.codex/skills/team-testing/roles/generator/role.md +95 -0
  189. package/.codex/skills/team-testing/roles/strategist/role.md +83 -0
  190. package/.codex/skills/team-testing/specs/pipelines.md +101 -0
  191. package/.codex/skills/team-testing/specs/team-config.json +93 -0
  192. package/.codex/skills/team-uidesign/SKILL.md +133 -767
  193. package/.codex/skills/team-uidesign/roles/coordinator/commands/analyze.md +59 -0
  194. package/.codex/skills/team-uidesign/roles/coordinator/commands/dispatch.md +156 -0
  195. package/.codex/skills/team-uidesign/roles/coordinator/commands/monitor.md +194 -0
  196. package/.codex/skills/team-uidesign/roles/coordinator/role.md +179 -0
  197. package/.codex/skills/team-uidesign/roles/designer/role.md +69 -0
  198. package/.codex/skills/team-uidesign/roles/implementer/role.md +72 -0
  199. package/.codex/skills/team-uidesign/roles/researcher/role.md +82 -0
  200. package/.codex/skills/team-uidesign/roles/reviewer/role.md +67 -0
  201. package/.codex/skills/team-uidesign/specs/pipelines.md +76 -0
  202. package/.codex/skills/team-uidesign/specs/team-config.json +107 -0
  203. package/.codex/skills/team-ultra-analyze/SKILL.md +166 -786
  204. package/.codex/skills/team-ultra-analyze/roles/analyst/role.md +90 -0
  205. package/.codex/skills/team-ultra-analyze/roles/coordinator/commands/analyze.md +73 -0
  206. package/.codex/skills/team-ultra-analyze/roles/coordinator/commands/dispatch.md +225 -0
  207. package/.codex/skills/team-ultra-analyze/roles/coordinator/commands/monitor.md +327 -0
  208. package/.codex/skills/team-ultra-analyze/roles/coordinator/role.md +223 -0
  209. package/.codex/skills/team-ultra-analyze/roles/discussant/role.md +104 -0
  210. package/.codex/skills/team-ultra-analyze/roles/explorer/role.md +74 -0
  211. package/.codex/skills/team-ultra-analyze/roles/synthesizer/role.md +78 -0
  212. package/.codex/skills/team-ultra-analyze/specs/pipelines.md +64 -0
  213. package/.codex/skills/team-ultra-analyze/specs/team-config.json +129 -0
  214. package/.codex/skills/team-ux-improve/SKILL.md +142 -638
  215. package/.codex/skills/team-ux-improve/roles/coordinator/commands/analyze.md +62 -0
  216. package/.codex/skills/team-ux-improve/roles/coordinator/commands/dispatch.md +233 -0
  217. package/.codex/skills/team-ux-improve/roles/coordinator/commands/monitor.md +160 -0
  218. package/.codex/skills/team-ux-improve/roles/coordinator/role.md +138 -0
  219. package/.codex/skills/team-ux-improve/roles/designer/role.md +122 -0
  220. package/.codex/skills/team-ux-improve/roles/diagnoser/role.md +93 -0
  221. package/.codex/skills/team-ux-improve/roles/explorer/role.md +77 -0
  222. package/.codex/skills/team-ux-improve/roles/implementer/role.md +102 -0
  223. package/.codex/skills/team-ux-improve/roles/scanner/role.md +93 -0
  224. package/.codex/skills/team-ux-improve/roles/tester/role.md +84 -0
  225. package/.codex/skills/team-ux-improve/specs/pipelines.md +54 -0
  226. package/.codex/skills/team-ux-improve/specs/team-config.json +181 -0
  227. package/.codex/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +17 -0
  228. package/.codex/skills/team-ux-improve/wisdom/contributions/.gitkeep +0 -0
  229. package/.codex/skills/team-ux-improve/wisdom/patterns/state-management.md +14 -0
  230. package/.codex/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +16 -0
  231. package/.codex/skills/team-ux-improve/wisdom/principles/general-ux.md +16 -0
  232. package/ccw/dist/core/routes/cli-settings-routes.d.ts.map +1 -1
  233. package/ccw/dist/core/routes/cli-settings-routes.js +135 -133
  234. package/ccw/dist/core/routes/cli-settings-routes.js.map +1 -1
  235. package/ccw/frontend/dist/assets/{AlertDialog-BW9jiZ-p.js → AlertDialog-CnpjWAGm.js} +2 -2
  236. package/ccw/frontend/dist/assets/{AlertDialog-BW9jiZ-p.js.map → AlertDialog-CnpjWAGm.js.map} +1 -1
  237. package/ccw/frontend/dist/assets/{AnalysisPage-ds-w_nVO.js → AnalysisPage-BT2rDDUD.js} +2 -2
  238. package/ccw/frontend/dist/assets/{AnalysisPage-ds-w_nVO.js.map → AnalysisPage-BT2rDDUD.js.map} +1 -1
  239. package/ccw/frontend/dist/assets/{ApiSettingsPage-DlCbXxTz.js → ApiSettingsPage-DGpjiNVu.js} +2 -2
  240. package/ccw/frontend/dist/assets/{ApiSettingsPage-DlCbXxTz.js.map → ApiSettingsPage-DGpjiNVu.js.map} +1 -1
  241. package/ccw/frontend/dist/assets/{CliModeToggle-Dq3nL4fF.js → CliModeToggle-BqUadHn3.js} +2 -2
  242. package/ccw/frontend/dist/assets/{CliModeToggle-Dq3nL4fF.js.map → CliModeToggle-BqUadHn3.js.map} +1 -1
  243. package/ccw/frontend/dist/assets/{CliSessionSharePage-BNDkEE4u.js → CliSessionSharePage-C3AdsDkm.js} +2 -2
  244. package/ccw/frontend/dist/assets/{CliSessionSharePage-BNDkEE4u.js.map → CliSessionSharePage-C3AdsDkm.js.map} +1 -1
  245. package/ccw/frontend/dist/assets/{CliViewerPage-ChM-uNx_.js → CliViewerPage-BZXpgY0N.js} +2 -2
  246. package/ccw/frontend/dist/assets/{CliViewerPage-ChM-uNx_.js.map → CliViewerPage-BZXpgY0N.js.map} +1 -1
  247. package/ccw/frontend/dist/assets/{CodexLensPage-DOcsYNQk.js → CodexLensPage-CePoJz-u.js} +2 -2
  248. package/ccw/frontend/dist/assets/{CodexLensPage-DOcsYNQk.js.map → CodexLensPage-CePoJz-u.js.map} +1 -1
  249. package/ccw/frontend/dist/assets/{Collapsible-CRNbykXN.js → Collapsible-DXVzWwmb.js} +2 -2
  250. package/ccw/frontend/dist/assets/{Collapsible-CRNbykXN.js.map → Collapsible-DXVzWwmb.js.map} +1 -1
  251. package/ccw/frontend/dist/assets/{CommandsManagerPage-C2JWcemF.js → CommandsManagerPage-B6wJYF0z.js} +2 -2
  252. package/ccw/frontend/dist/assets/{CommandsManagerPage-C2JWcemF.js.map → CommandsManagerPage-B6wJYF0z.js.map} +1 -1
  253. package/ccw/frontend/dist/assets/{DeepWikiPage-CvleOtJy.js → DeepWikiPage-D55fcvSk.js} +2 -2
  254. package/ccw/frontend/dist/assets/{DeepWikiPage-CvleOtJy.js.map → DeepWikiPage-D55fcvSk.js.map} +1 -1
  255. package/ccw/frontend/dist/assets/{EndpointsPage-CMOWQG64.js → EndpointsPage-DcGziJ5t.js} +2 -2
  256. package/ccw/frontend/dist/assets/{EndpointsPage-CMOWQG64.js.map → EndpointsPage-DcGziJ5t.js.map} +1 -1
  257. package/ccw/frontend/dist/assets/{ExplorerPage-DaFPRlNo.js → ExplorerPage-C4eKzn7F.js} +2 -2
  258. package/ccw/frontend/dist/assets/{ExplorerPage-DaFPRlNo.js.map → ExplorerPage-C4eKzn7F.js.map} +1 -1
  259. package/ccw/frontend/dist/assets/{FixSessionPage-CC4p04Az.js → FixSessionPage-BUHh954A.js} +2 -2
  260. package/ccw/frontend/dist/assets/{FixSessionPage-CC4p04Az.js.map → FixSessionPage-BUHh954A.js.map} +1 -1
  261. package/ccw/frontend/dist/assets/{FloatingFileBrowser-DROn1xZ5.js → FloatingFileBrowser-C3GF_u1C.js} +2 -2
  262. package/ccw/frontend/dist/assets/{FloatingFileBrowser-DROn1xZ5.js.map → FloatingFileBrowser-C3GF_u1C.js.map} +1 -1
  263. package/ccw/frontend/dist/assets/{FloatingPanel-CmL_yhDv.js → FloatingPanel-Cn-q9PyJ.js} +2 -2
  264. package/ccw/frontend/dist/assets/{FloatingPanel-CmL_yhDv.js.map → FloatingPanel-Cn-q9PyJ.js.map} +1 -1
  265. package/ccw/frontend/dist/assets/{GraphExplorerPage-DCV5ybKE.js → GraphExplorerPage-DIpqgvoU.js} +2 -2
  266. package/ccw/frontend/dist/assets/{GraphExplorerPage-DCV5ybKE.js.map → GraphExplorerPage-DIpqgvoU.js.map} +1 -1
  267. package/ccw/frontend/dist/assets/{HistoryPage-D0fYQZgc.js → HistoryPage-DzSvEAFe.js} +2 -2
  268. package/ccw/frontend/dist/assets/{HistoryPage-D0fYQZgc.js.map → HistoryPage-DzSvEAFe.js.map} +1 -1
  269. package/ccw/frontend/dist/assets/{HookManagerPage-D2FuJfsM.js → HookManagerPage-C6LDhWrH.js} +2 -2
  270. package/ccw/frontend/dist/assets/{HookManagerPage-D2FuJfsM.js.map → HookManagerPage-C6LDhWrH.js.map} +1 -1
  271. package/ccw/frontend/dist/assets/{InstallationsPage-tjklillZ.js → InstallationsPage-D9ct9xFV.js} +2 -2
  272. package/ccw/frontend/dist/assets/{InstallationsPage-tjklillZ.js.map → InstallationsPage-D9ct9xFV.js.map} +1 -1
  273. package/ccw/frontend/dist/assets/{IssueHubPage-E4JVrhO1.js → IssueHubPage-CXgDC8pS.js} +2 -2
  274. package/ccw/frontend/dist/assets/{IssueHubPage-E4JVrhO1.js.map → IssueHubPage-CXgDC8pS.js.map} +1 -1
  275. package/ccw/frontend/dist/assets/{LiteTasksPage-aJuRoyLt.js → LiteTasksPage-DMkauCwG.js} +2 -2
  276. package/ccw/frontend/dist/assets/{LiteTasksPage-aJuRoyLt.js.map → LiteTasksPage-DMkauCwG.js.map} +1 -1
  277. package/ccw/frontend/dist/assets/{McpManagerPage-BJeuWJv1.js → McpManagerPage-DhLDydgc.js} +2 -2
  278. package/ccw/frontend/dist/assets/{McpManagerPage-BJeuWJv1.js.map → McpManagerPage-DhLDydgc.js.map} +1 -1
  279. package/ccw/frontend/dist/assets/{MemoryPage-BI4FAXhs.js → MemoryPage-Be3nhq40.js} +2 -2
  280. package/ccw/frontend/dist/assets/{MemoryPage-BI4FAXhs.js.map → MemoryPage-Be3nhq40.js.map} +1 -1
  281. package/ccw/frontend/dist/assets/{NotFoundPage-DD2svchp.js → NotFoundPage-0yGnCePd.js} +2 -2
  282. package/ccw/frontend/dist/assets/{NotFoundPage-DD2svchp.js.map → NotFoundPage-0yGnCePd.js.map} +1 -1
  283. package/ccw/frontend/dist/assets/{OrchestratorPage-FC__7yYa.js → OrchestratorPage-_SmXZcGl.js} +2 -2
  284. package/ccw/frontend/dist/assets/{OrchestratorPage-FC__7yYa.js.map → OrchestratorPage-_SmXZcGl.js.map} +1 -1
  285. package/ccw/frontend/dist/assets/{ProjectOverviewPage-DBB_-FzV.js → ProjectOverviewPage-BeXTMsdo.js} +2 -2
  286. package/ccw/frontend/dist/assets/{ProjectOverviewPage-DBB_-FzV.js.map → ProjectOverviewPage-BeXTMsdo.js.map} +1 -1
  287. package/ccw/frontend/dist/assets/{PromptHistoryPage-BwOAvCH8.js → PromptHistoryPage-DS6ycuAv.js} +2 -2
  288. package/ccw/frontend/dist/assets/{PromptHistoryPage-BwOAvCH8.js.map → PromptHistoryPage-DS6ycuAv.js.map} +1 -1
  289. package/ccw/frontend/dist/assets/{ReviewSessionPage-Dd1-g_gp.js → ReviewSessionPage-BoqyjhPo.js} +2 -2
  290. package/ccw/frontend/dist/assets/{ReviewSessionPage-Dd1-g_gp.js.map → ReviewSessionPage-BoqyjhPo.js.map} +1 -1
  291. package/ccw/frontend/dist/assets/{RulesManagerPage-B3RGdsKD.js → RulesManagerPage-DMAwkKlc.js} +2 -2
  292. package/ccw/frontend/dist/assets/{RulesManagerPage-B3RGdsKD.js.map → RulesManagerPage-DMAwkKlc.js.map} +1 -1
  293. package/ccw/frontend/dist/assets/{SessionDetailPage-DM-W5R8K.js → SessionDetailPage-BgJRHIF4.js} +2 -2
  294. package/ccw/frontend/dist/assets/{SessionDetailPage-DM-W5R8K.js.map → SessionDetailPage-BgJRHIF4.js.map} +1 -1
  295. package/ccw/frontend/dist/assets/{SessionsPage-BVz1KCc7.js → SessionsPage-DBPdWlji.js} +2 -2
  296. package/ccw/frontend/dist/assets/{SessionsPage-BVz1KCc7.js.map → SessionsPage-DBPdWlji.js.map} +1 -1
  297. package/ccw/frontend/dist/assets/{SettingsPage-ComW7EZS.js → SettingsPage-BY3QiJhm.js} +4 -4
  298. package/ccw/frontend/dist/assets/{SettingsPage-ComW7EZS.js.map → SettingsPage-BY3QiJhm.js.map} +1 -1
  299. package/ccw/frontend/dist/assets/{SkillsManagerPage-CKom9XwV.js → SkillsManagerPage-DS101Adm.js} +2 -2
  300. package/ccw/frontend/dist/assets/{SkillsManagerPage-CKom9XwV.js.map → SkillsManagerPage-DS101Adm.js.map} +1 -1
  301. package/ccw/frontend/dist/assets/{SpecsSettingsPage-DQz7WP2s.js → SpecsSettingsPage-BcsLu1qq.js} +2 -2
  302. package/ccw/frontend/dist/assets/{SpecsSettingsPage-DQz7WP2s.js.map → SpecsSettingsPage-BcsLu1qq.js.map} +1 -1
  303. package/ccw/frontend/dist/assets/{Switch-BPMdND9H.js → Switch-BL9AmNPC.js} +2 -2
  304. package/ccw/frontend/dist/assets/{Switch-BPMdND9H.js.map → Switch-BL9AmNPC.js.map} +1 -1
  305. package/ccw/frontend/dist/assets/{TabsNavigation-qqt70VYL.js → TabsNavigation-BUcjsLeE.js} +2 -2
  306. package/ccw/frontend/dist/assets/{TabsNavigation-qqt70VYL.js.map → TabsNavigation-BUcjsLeE.js.map} +1 -1
  307. package/ccw/frontend/dist/assets/{TaskDrawer-BqK_qiHX.js → TaskDrawer-BNvfS6dq.js} +2 -2
  308. package/ccw/frontend/dist/assets/{TaskDrawer-BqK_qiHX.js.map → TaskDrawer-BNvfS6dq.js.map} +1 -1
  309. package/ccw/frontend/dist/assets/{TeamPage-u5_i0Rgh.js → TeamPage-CT-zNCrF.js} +2 -2
  310. package/ccw/frontend/dist/assets/{TeamPage-u5_i0Rgh.js.map → TeamPage-CT-zNCrF.js.map} +1 -1
  311. package/ccw/frontend/dist/assets/{TerminalDashboardPage-rUtC9e40.js → TerminalDashboardPage-DfZFGs8g.js} +2 -2
  312. package/ccw/frontend/dist/assets/{TerminalDashboardPage-rUtC9e40.js.map → TerminalDashboardPage-DfZFGs8g.js.map} +1 -1
  313. package/ccw/frontend/dist/assets/{archive-C3u8YNQF.js → archive-Cev1SaQq.js} +2 -2
  314. package/ccw/frontend/dist/assets/{archive-C3u8YNQF.js.map → archive-Cev1SaQq.js.map} +1 -1
  315. package/ccw/frontend/dist/assets/{archive-restore-DfQ998g5.js → archive-restore-BIVluaHZ.js} +2 -2
  316. package/ccw/frontend/dist/assets/{archive-restore-DfQ998g5.js.map → archive-restore-BIVluaHZ.js.map} +1 -1
  317. package/ccw/frontend/dist/assets/{arrow-right-BshJM9Po.js → arrow-right-DrivbS5j.js} +2 -2
  318. package/ccw/frontend/dist/assets/{arrow-right-BshJM9Po.js.map → arrow-right-DrivbS5j.js.map} +1 -1
  319. package/ccw/frontend/dist/assets/{bookmark-plus-D03qJyOZ.js → bookmark-plus-DKyzL0Xg.js} +2 -2
  320. package/ccw/frontend/dist/assets/{bookmark-plus-D03qJyOZ.js.map → bookmark-plus-DKyzL0Xg.js.map} +1 -1
  321. package/ccw/frontend/dist/assets/{bot-CyzWuwq0.js → bot-GBUkPAe3.js} +2 -2
  322. package/ccw/frontend/dist/assets/{bot-CyzWuwq0.js.map → bot-GBUkPAe3.js.map} +1 -1
  323. package/ccw/frontend/dist/assets/{braces-BPgtyjsG.js → braces-BWhm2c4g.js} +2 -2
  324. package/ccw/frontend/dist/assets/{braces-BPgtyjsG.js.map → braces-BWhm2c4g.js.map} +1 -1
  325. package/ccw/frontend/dist/assets/{circle-stop-Dix1AOmw.js → circle-stop-CBcZSKNp.js} +2 -2
  326. package/ccw/frontend/dist/assets/{circle-stop-Dix1AOmw.js.map → circle-stop-CBcZSKNp.js.map} +1 -1
  327. package/ccw/frontend/dist/assets/{cpu-CCQ4Q0Zh.js → cpu-CzNmuTZD.js} +2 -2
  328. package/ccw/frontend/dist/assets/{cpu-CCQ4Q0Zh.js.map → cpu-CzNmuTZD.js.map} +1 -1
  329. package/ccw/frontend/dist/assets/{ellipsis-vertical-BpTysg-Y.js → ellipsis-vertical-BoIyQKaI.js} +2 -2
  330. package/ccw/frontend/dist/assets/{ellipsis-vertical-BpTysg-Y.js.map → ellipsis-vertical-BoIyQKaI.js.map} +1 -1
  331. package/ccw/frontend/dist/assets/{eye-DGY1rAZs.js → eye-BqxyhxQq.js} +2 -2
  332. package/ccw/frontend/dist/assets/{eye-DGY1rAZs.js.map → eye-BqxyhxQq.js.map} +1 -1
  333. package/ccw/frontend/dist/assets/{eye-off-D8t3JfWG.js → eye-off-D9dTZP1A.js} +2 -2
  334. package/ccw/frontend/dist/assets/{eye-off-D8t3JfWG.js.map → eye-off-D9dTZP1A.js.map} +1 -1
  335. package/ccw/frontend/dist/assets/{file-json-BAdJb0n8.js → file-json-CLYEUI6e.js} +2 -2
  336. package/ccw/frontend/dist/assets/{file-json-BAdJb0n8.js.map → file-json-CLYEUI6e.js.map} +1 -1
  337. package/ccw/frontend/dist/assets/{file-text-DrJFiOUB.js → file-text-D5j9C5XC.js} +2 -2
  338. package/ccw/frontend/dist/assets/{file-text-DrJFiOUB.js.map → file-text-D5j9C5XC.js.map} +1 -1
  339. package/ccw/frontend/dist/assets/{filter-CKqzYbz7.js → filter-CEUK5jsA.js} +2 -2
  340. package/ccw/frontend/dist/assets/{filter-CKqzYbz7.js.map → filter-CEUK5jsA.js.map} +1 -1
  341. package/ccw/frontend/dist/assets/{folder-CV8511y9.js → folder-BEOY8txM.js} +2 -2
  342. package/ccw/frontend/dist/assets/{folder-CV8511y9.js.map → folder-BEOY8txM.js.map} +1 -1
  343. package/ccw/frontend/dist/assets/{gauge-XKvmu_uU.js → gauge-CbumHmVn.js} +2 -2
  344. package/ccw/frontend/dist/assets/{gauge-XKvmu_uU.js.map → gauge-CbumHmVn.js.map} +1 -1
  345. package/ccw/frontend/dist/assets/{globe-C56cDUzX.js → globe-D8_IB9gV.js} +2 -2
  346. package/ccw/frontend/dist/assets/{globe-C56cDUzX.js.map → globe-D8_IB9gV.js.map} +1 -1
  347. package/ccw/frontend/dist/assets/{grid-3x3-Bya-suFW.js → grid-3x3-BpzWmYF5.js} +2 -2
  348. package/ccw/frontend/dist/assets/{grid-3x3-Bya-suFW.js.map → grid-3x3-BpzWmYF5.js.map} +1 -1
  349. package/ccw/frontend/dist/assets/{hard-drive-CmuTZpsB.js → hard-drive-QIHpGln7.js} +2 -2
  350. package/ccw/frontend/dist/assets/{hard-drive-CmuTZpsB.js.map → hard-drive-QIHpGln7.js.map} +1 -1
  351. package/ccw/frontend/dist/assets/{hash-CRPT_tJQ.js → hash-CP0YRHVs.js} +2 -2
  352. package/ccw/frontend/dist/assets/{hash-CRPT_tJQ.js.map → hash-CP0YRHVs.js.map} +1 -1
  353. package/ccw/frontend/dist/assets/{history-C1pJZQCL.js → history-hOjgVKax.js} +2 -2
  354. package/ccw/frontend/dist/assets/{history-C1pJZQCL.js.map → history-hOjgVKax.js.map} +1 -1
  355. package/ccw/frontend/dist/assets/{index-Dmt9OiEf.js → index-B_ysvdnP.js} +2 -2
  356. package/ccw/frontend/dist/assets/{index-Dmt9OiEf.js.map → index-B_ysvdnP.js.map} +1 -1
  357. package/ccw/frontend/dist/assets/{index-dWT2M6Ef.js → index-C5Oqx2xI.js} +3 -3
  358. package/ccw/frontend/dist/assets/{index-dWT2M6Ef.js.map → index-C5Oqx2xI.js.map} +1 -1
  359. package/ccw/frontend/dist/assets/{index-CI8-rBff.js → index-CJi0bWL-.js} +2 -2
  360. package/ccw/frontend/dist/assets/{index-CI8-rBff.js.map → index-CJi0bWL-.js.map} +1 -1
  361. package/ccw/frontend/dist/assets/{index-anSMmEF8.js → index-CdQpo1x0.js} +2 -2
  362. package/ccw/frontend/dist/assets/{index-anSMmEF8.js.map → index-CdQpo1x0.js.map} +1 -1
  363. package/ccw/frontend/dist/assets/{layout-grid-TSO0BFQE.js → layout-grid-C38fQyLs.js} +2 -2
  364. package/ccw/frontend/dist/assets/{layout-grid-TSO0BFQE.js.map → layout-grid-C38fQyLs.js.map} +1 -1
  365. package/ccw/frontend/dist/assets/{lightbulb-Caj6fIQD.js → lightbulb-CClbCUzu.js} +2 -2
  366. package/ccw/frontend/dist/assets/{lightbulb-Caj6fIQD.js.map → lightbulb-CClbCUzu.js.map} +1 -1
  367. package/ccw/frontend/dist/assets/{link-2-DE9lMxa-.js → link-2-CB-LKbI0.js} +2 -2
  368. package/ccw/frontend/dist/assets/{link-2-DE9lMxa-.js.map → link-2-CB-LKbI0.js.map} +1 -1
  369. package/ccw/frontend/dist/assets/{link-BZtPgLW0.js → link-BK6SBzHS.js} +2 -2
  370. package/ccw/frontend/dist/assets/{link-BZtPgLW0.js.map → link-BK6SBzHS.js.map} +1 -1
  371. package/ccw/frontend/dist/assets/{list-DubWyY-U.js → list-BME_WOA_.js} +2 -2
  372. package/ccw/frontend/dist/assets/{list-DubWyY-U.js.map → list-BME_WOA_.js.map} +1 -1
  373. package/ccw/frontend/dist/assets/{map-pin-DwN_48AF.js → map-pin-ADsnCyjJ.js} +2 -2
  374. package/ccw/frontend/dist/assets/{map-pin-DwN_48AF.js.map → map-pin-ADsnCyjJ.js.map} +1 -1
  375. package/ccw/frontend/dist/assets/{messages-square-bjxvaiM9.js → messages-square-CLflB1Cq.js} +2 -2
  376. package/ccw/frontend/dist/assets/{messages-square-bjxvaiM9.js.map → messages-square-CLflB1Cq.js.map} +1 -1
  377. package/ccw/frontend/dist/assets/{minimize-2-CGfBKD_V.js → minimize-2-B3ZNzfGr.js} +2 -2
  378. package/ccw/frontend/dist/assets/{minimize-2-CGfBKD_V.js.map → minimize-2-B3ZNzfGr.js.map} +1 -1
  379. package/ccw/frontend/dist/assets/{package-nzWY6ilt.js → package-CByPhtMG.js} +2 -2
  380. package/ccw/frontend/dist/assets/{package-nzWY6ilt.js.map → package-CByPhtMG.js.map} +1 -1
  381. package/ccw/frontend/dist/assets/{plug-CiLce49C.js → plug-BggRzPX9.js} +2 -2
  382. package/ccw/frontend/dist/assets/{plug-CiLce49C.js.map → plug-BggRzPX9.js.map} +1 -1
  383. package/ccw/frontend/dist/assets/{power-CFLmB-U9.js → power-CWuxQSJK.js} +2 -2
  384. package/ccw/frontend/dist/assets/{power-CFLmB-U9.js.map → power-CWuxQSJK.js.map} +1 -1
  385. package/ccw/frontend/dist/assets/{save-DuO6OF0C.js → save-BdJ6EX4Q.js} +2 -2
  386. package/ccw/frontend/dist/assets/{save-DuO6OF0C.js.map → save-BdJ6EX4Q.js.map} +1 -1
  387. package/ccw/frontend/dist/assets/{send-CZk9p0mM.js → send-Ce9wuY7Q.js} +2 -2
  388. package/ccw/frontend/dist/assets/{send-CZk9p0mM.js.map → send-Ce9wuY7Q.js.map} +1 -1
  389. package/ccw/frontend/dist/assets/{square-check-big-BY_1YQQg.js → square-check-big-D6jItkfw.js} +2 -2
  390. package/ccw/frontend/dist/assets/{square-check-big-BY_1YQQg.js.map → square-check-big-D6jItkfw.js.map} +1 -1
  391. package/ccw/frontend/dist/assets/{square-pen-CnZgm6g-.js → square-pen-Byxq21zp.js} +2 -2
  392. package/ccw/frontend/dist/assets/{square-pen-CnZgm6g-.js.map → square-pen-Byxq21zp.js.map} +1 -1
  393. package/ccw/frontend/dist/assets/{star-Cn1F0qy7.js → star-Codj9dvK.js} +2 -2
  394. package/ccw/frontend/dist/assets/{star-Cn1F0qy7.js.map → star-Codj9dvK.js.map} +1 -1
  395. package/ccw/frontend/dist/assets/{style-Dxs1iXCV.js → style-4bYpUGcc.js} +2 -2
  396. package/ccw/frontend/dist/assets/{style-Dxs1iXCV.js.map → style-4bYpUGcc.js.map} +1 -1
  397. package/ccw/frontend/dist/assets/{target-Bz1fLRKH.js → target-DKBoDNCn.js} +2 -2
  398. package/ccw/frontend/dist/assets/{target-Bz1fLRKH.js.map → target-DKBoDNCn.js.map} +1 -1
  399. package/ccw/frontend/dist/assets/{test-tube-C6qCYlDr.js → test-tube-DTqZcBtA.js} +2 -2
  400. package/ccw/frontend/dist/assets/{test-tube-C6qCYlDr.js.map → test-tube-DTqZcBtA.js.map} +1 -1
  401. package/ccw/frontend/dist/assets/{upload-C71kd4Qs.js → upload-DlUl-e6b.js} +2 -2
  402. package/ccw/frontend/dist/assets/{upload-C71kd4Qs.js.map → upload-DlUl-e6b.js.map} +1 -1
  403. package/ccw/frontend/dist/assets/{useApiSettings-CqP2BAJ7.js → useApiSettings-D4zhKKT-.js} +2 -2
  404. package/ccw/frontend/dist/assets/{useApiSettings-CqP2BAJ7.js.map → useApiSettings-D4zhKKT-.js.map} +1 -1
  405. package/ccw/frontend/dist/assets/{useCli-PCoPoVeM.js → useCli-D-qDwsAH.js} +2 -2
  406. package/ccw/frontend/dist/assets/{useCli-PCoPoVeM.js.map → useCli-D-qDwsAH.js.map} +1 -1
  407. package/ccw/frontend/dist/assets/{useCommands-3OfPQPw4.js → useCommands-B0sidbbW.js} +2 -2
  408. package/ccw/frontend/dist/assets/{useCommands-3OfPQPw4.js.map → useCommands-B0sidbbW.js.map} +1 -1
  409. package/ccw/frontend/dist/assets/{useDebounce-bXiFhQx9.js → useDebounce-eTtbKevt.js} +2 -2
  410. package/ccw/frontend/dist/assets/{useDebounce-bXiFhQx9.js.map → useDebounce-eTtbKevt.js.map} +1 -1
  411. package/ccw/frontend/dist/assets/{useFileExplorer-DEyUm46_.js → useFileExplorer-MGSK0h33.js} +2 -2
  412. package/ccw/frontend/dist/assets/{useFileExplorer-DEyUm46_.js.map → useFileExplorer-MGSK0h33.js.map} +1 -1
  413. package/ccw/frontend/dist/assets/{useLocale-sXTrdxcJ.js → useLocale-DDNxU7pJ.js} +2 -2
  414. package/ccw/frontend/dist/assets/{useLocale-sXTrdxcJ.js.map → useLocale-DDNxU7pJ.js.map} +1 -1
  415. package/ccw/frontend/dist/assets/{useSkills-D0W0kXYm.js → useSkills-CZCRBtMY.js} +3 -3
  416. package/ccw/frontend/dist/assets/{useSkills-D0W0kXYm.js.map → useSkills-CZCRBtMY.js.map} +1 -1
  417. package/ccw/frontend/dist/assets/{useSystemSettings-DZ-8lZsG.js → useSystemSettings-DfQEFXSD.js} +2 -2
  418. package/ccw/frontend/dist/assets/{useSystemSettings-DZ-8lZsG.js.map → useSystemSettings-DfQEFXSD.js.map} +1 -1
  419. package/ccw/frontend/dist/assets/{wand-sparkles-83GmAYuw.js → wand-sparkles-DCLvfgl1.js} +2 -2
  420. package/ccw/frontend/dist/assets/{wand-sparkles-83GmAYuw.js.map → wand-sparkles-DCLvfgl1.js.map} +1 -1
  421. package/ccw/frontend/dist/index.html +1 -1
  422. package/package.json +1 -1
  423. package/.codex/skills/team-arch-opt/agents/completion-handler.md +0 -138
  424. package/.codex/skills/team-arch-opt/agents/fix-cycle-handler.md +0 -146
  425. package/.codex/skills/team-arch-opt/agents/plan-reviewer.md +0 -150
  426. package/.codex/skills/team-arch-opt/instructions/agent-instruction.md +0 -114
  427. package/.codex/skills/team-arch-opt/schemas/tasks-schema.md +0 -174
  428. package/.codex/skills/team-brainstorm/agents/gc-controller.md +0 -122
  429. package/.codex/skills/team-brainstorm/agents/topic-clarifier.md +0 -126
  430. package/.codex/skills/team-brainstorm/instructions/agent-instruction.md +0 -105
  431. package/.codex/skills/team-brainstorm/schemas/tasks-schema.md +0 -171
  432. package/.codex/skills/team-coordinate/agents/completion-handler.md +0 -127
  433. package/.codex/skills/team-coordinate/agents/plan-reviewer.md +0 -145
  434. package/.codex/skills/team-coordinate/instructions/agent-instruction.md +0 -184
  435. package/.codex/skills/team-coordinate/schemas/tasks-schema.md +0 -165
  436. package/.codex/skills/team-designer/agents/requirement-clarifier.md +0 -247
  437. package/.codex/skills/team-designer/agents/validation-reporter.md +0 -186
  438. package/.codex/skills/team-designer/instructions/agent-instruction.md +0 -163
  439. package/.codex/skills/team-designer/schemas/tasks-schema.md +0 -180
  440. package/.codex/skills/team-executor/instructions/agent-instruction.md +0 -62
  441. package/.codex/skills/team-executor/schemas/tasks-schema.md +0 -141
  442. package/.codex/skills/team-frontend/agents/completion-handler.md +0 -131
  443. package/.codex/skills/team-frontend/agents/qa-gate-reviewer.md +0 -153
  444. package/.codex/skills/team-frontend/instructions/agent-instruction.md +0 -197
  445. package/.codex/skills/team-frontend/schemas/tasks-schema.md +0 -188
  446. package/.codex/skills/team-frontend-debug/agents/completion-handler.md +0 -142
  447. package/.codex/skills/team-frontend-debug/agents/conditional-skip-gate.md +0 -130
  448. package/.codex/skills/team-frontend-debug/agents/iteration-handler.md +0 -120
  449. package/.codex/skills/team-frontend-debug/instructions/agent-instruction.md +0 -272
  450. package/.codex/skills/team-frontend-debug/schemas/tasks-schema.md +0 -198
  451. package/.codex/skills/team-issue/agents/reviewer.md +0 -204
  452. package/.codex/skills/team-issue/instructions/agent-instruction.md +0 -198
  453. package/.codex/skills/team-issue/schemas/tasks-schema.md +0 -198
  454. package/.codex/skills/team-iterdev/agents/gc-controller.md +0 -193
  455. package/.codex/skills/team-iterdev/agents/task-analyzer.md +0 -206
  456. package/.codex/skills/team-iterdev/instructions/agent-instruction.md +0 -118
  457. package/.codex/skills/team-iterdev/schemas/tasks-schema.md +0 -174
  458. package/.codex/skills/team-lifecycle/SKILL.md +0 -906
  459. package/.codex/skills/team-lifecycle/agents/analyst.md +0 -424
  460. package/.codex/skills/team-lifecycle/agents/architect.md +0 -274
  461. package/.codex/skills/team-lifecycle/agents/discuss-agent.md +0 -422
  462. package/.codex/skills/team-lifecycle/agents/executor.md +0 -423
  463. package/.codex/skills/team-lifecycle/agents/explore-agent.md +0 -471
  464. package/.codex/skills/team-lifecycle/agents/fe-developer.md +0 -239
  465. package/.codex/skills/team-lifecycle/agents/fe-qa.md +0 -357
  466. package/.codex/skills/team-lifecycle/agents/planner.md +0 -437
  467. package/.codex/skills/team-lifecycle/agents/reviewer.md +0 -483
  468. package/.codex/skills/team-lifecycle/agents/tester.md +0 -423
  469. package/.codex/skills/team-lifecycle/agents/writer.md +0 -502
  470. package/.codex/skills/team-lifecycle/phases/01-requirement-clarification.md +0 -209
  471. package/.codex/skills/team-lifecycle/phases/02-team-initialization.md +0 -263
  472. package/.codex/skills/team-lifecycle/phases/03-task-chain-creation.md +0 -251
  473. package/.codex/skills/team-lifecycle/phases/04-pipeline-coordination.md +0 -831
  474. package/.codex/skills/team-lifecycle/phases/05-completion-report.md +0 -309
  475. package/.codex/skills/team-lifecycle/specs/document-standards.md +0 -192
  476. package/.codex/skills/team-lifecycle/specs/quality-gates.md +0 -207
  477. package/.codex/skills/team-lifecycle-v4/agents/quality-gate.md +0 -165
  478. package/.codex/skills/team-lifecycle-v4/agents/requirement-clarifier.md +0 -163
  479. package/.codex/skills/team-lifecycle-v4/agents/supervisor.md +0 -182
  480. package/.codex/skills/team-perf-opt/agents/completion-handler.md +0 -141
  481. package/.codex/skills/team-perf-opt/agents/fix-cycle-handler.md +0 -156
  482. package/.codex/skills/team-perf-opt/agents/plan-reviewer.md +0 -150
  483. package/.codex/skills/team-perf-opt/instructions/agent-instruction.md +0 -122
  484. package/.codex/skills/team-perf-opt/schemas/tasks-schema.md +0 -174
  485. package/.codex/skills/team-planex/instructions/agent-instruction.md +0 -301
  486. package/.codex/skills/team-planex/schemas/tasks-schema.md +0 -198
  487. package/.codex/skills/team-planex-v2/SKILL.md +0 -652
  488. package/.codex/skills/team-planex-v2/instructions/agent-instruction.md +0 -193
  489. package/.codex/skills/team-planex-v2/schemas/tasks-schema.md +0 -206
  490. package/.codex/skills/team-quality-assurance/agents/executor.md +0 -192
  491. package/.codex/skills/team-quality-assurance/agents/gc-loop-handler.md +0 -163
  492. package/.codex/skills/team-quality-assurance/instructions/agent-instruction.md +0 -185
  493. package/.codex/skills/team-quality-assurance/schemas/tasks-schema.md +0 -190
  494. package/.codex/skills/team-review/agents/fixer.md +0 -360
  495. package/.codex/skills/team-review/instructions/agent-instruction.md +0 -102
  496. package/.codex/skills/team-review/schemas/tasks-schema.md +0 -143
  497. package/.codex/skills/team-roadmap-dev/agents/roadmap-discusser.md +0 -176
  498. package/.codex/skills/team-roadmap-dev/agents/roadmap-planner.md +0 -194
  499. package/.codex/skills/team-roadmap-dev/agents/roadmap-verifier.md +0 -221
  500. package/.codex/skills/team-roadmap-dev/instructions/executor-instruction.md +0 -55
  501. package/.codex/skills/team-roadmap-dev/schemas/tasks-schema.md +0 -144
  502. package/.codex/skills/team-tech-debt/agents/gc-loop-manager.md +0 -130
  503. package/.codex/skills/team-tech-debt/agents/plan-approver.md +0 -151
  504. package/.codex/skills/team-tech-debt/instructions/agent-instruction.md +0 -390
  505. package/.codex/skills/team-tech-debt/schemas/tasks-schema.md +0 -196
  506. package/.codex/skills/team-testing/agents/executor.md +0 -195
  507. package/.codex/skills/team-testing/agents/gc-loop-handler.md +0 -155
  508. package/.codex/skills/team-testing/instructions/agent-instruction.md +0 -142
  509. package/.codex/skills/team-testing/schemas/tasks-schema.md +0 -172
  510. package/.codex/skills/team-uidesign/agents/completion-handler.md +0 -177
  511. package/.codex/skills/team-uidesign/agents/gc-loop-handler.md +0 -162
  512. package/.codex/skills/team-uidesign/instructions/agent-instruction.md +0 -509
  513. package/.codex/skills/team-uidesign/schemas/tasks-schema.md +0 -187
  514. package/.codex/skills/team-ultra-analyze/agents/discussion-feedback.md +0 -155
  515. package/.codex/skills/team-ultra-analyze/agents/topic-analyzer.md +0 -153
  516. package/.codex/skills/team-ultra-analyze/instructions/agent-instruction.md +0 -169
  517. package/.codex/skills/team-ultra-analyze/schemas/tasks-schema.md +0 -180
  518. package/.codex/skills/team-ux-improve/agents/ux-designer.md +0 -136
  519. package/.codex/skills/team-ux-improve/agents/ux-explorer.md +0 -158
  520. package/.codex/skills/team-ux-improve/agents/ux-tester.md +0 -174
  521. package/.codex/skills/team-ux-improve/instructions/ux-worker-instruction.md +0 -55
  522. package/.codex/skills/team-ux-improve/schemas/tasks-schema.md +0 -87
  523. /package/.codex/skills/{team-lifecycle/templates/architecture-doc.md → team-lifecycle-v4/templates/architecture.md} +0 -0
  524. /package/.codex/skills/{team-lifecycle/templates/epics-template.md → team-lifecycle-v4/templates/epics.md} +0 -0
  525. /package/.codex/skills/{team-lifecycle → team-lifecycle-v4}/templates/product-brief.md +0 -0
  526. /package/.codex/skills/{team-lifecycle/templates/requirements-prd.md → team-lifecycle-v4/templates/requirements.md} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index-Dmt9OiEf.js","sources":["../../src/components/shared/LogBlock/jsonUtils.ts","../../src/components/shared/LogBlock/JsonFormatter.tsx","../../src/components/shared/CliStreamMonitor/MessageRenderer/index.tsx"],"sourcesContent":["// ========================================\r\n// LogBlock JSON Utilities\r\n// ========================================\r\n// JSON content detection and formatting utilities\r\n\r\n/**\r\n * JSON content type detection result\r\n */\r\nexport interface JsonDetectionResult {\r\n isJson: boolean;\r\n parsed?: unknown;\r\n error?: string;\r\n format: 'object' | 'array' | 'primitive' | 'invalid';\r\n}\r\n\r\n/**\r\n * Display mode for JSON content\r\n */\r\nexport type JsonDisplayMode = 'text' | 'card' | 'inline';\r\n\r\n/**\r\n * Detect if content is valid JSON\r\n *\r\n * @param content - Content string to check\r\n * @returns Detection result with parsed data if valid\r\n */\r\nexport function detectJson(content: string): JsonDetectionResult {\r\n const trimmed = content.trim();\r\n\r\n // Quick check for JSON patterns\r\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {\r\n return { isJson: false, format: 'invalid' };\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(trimmed);\r\n\r\n // Determine format type\r\n let format: JsonDetectionResult['format'] = 'primitive';\r\n if (Array.isArray(parsed)) {\r\n format = 'array';\r\n } else if (parsed !== null && typeof parsed === 'object') {\r\n format = 'object';\r\n }\r\n\r\n return { isJson: true, parsed, format };\r\n } catch (error) {\r\n return {\r\n isJson: false,\r\n format: 'invalid',\r\n error: error instanceof Error ? error.message : 'Unknown parse error'\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Extract JSON from mixed content\r\n * Handles cases where JSON is embedded in text output\r\n *\r\n * @param content - Content that may contain JSON\r\n * @returns Extracted JSON string or null if not found\r\n */\r\nexport function extractJson(content: string): string | null {\r\n const trimmed = content.trim();\r\n\r\n // Direct JSON\r\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\r\n // Find the matching bracket\r\n let depth = 0;\r\n let inString = false;\r\n let escape = false;\r\n let end = -1;\r\n\r\n for (let i = 0; i < trimmed.length; i++) {\r\n const char = trimmed[i];\r\n\r\n if (escape) {\r\n escape = false;\r\n continue;\r\n }\r\n\r\n if (char === '\\\\') {\r\n escape = true;\r\n continue;\r\n }\r\n\r\n if (char === '\"') {\r\n inString = !inString;\r\n continue;\r\n }\r\n\r\n if (!inString) {\r\n if (char === '{' || char === '[') {\r\n depth++;\r\n } else if (char === '}' || char === ']') {\r\n depth--;\r\n if (depth === 0) {\r\n end = i + 1;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (end > 0) {\r\n return trimmed.substring(0, end);\r\n }\r\n }\r\n\r\n // Try to find JSON in code blocks\r\n const codeBlockMatch = content.match(/```(?:json)?\\s*\\n([\\s\\S]*?)\\n```/);\r\n if (codeBlockMatch) {\r\n return codeBlockMatch[1].trim();\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Detect if content should be displayed as JSON\r\n * Combines extraction and validation\r\n *\r\n * @param content - Content to check\r\n * @returns Detection result\r\n */\r\nexport function detectJsonContent(content: string): JsonDetectionResult & { extracted: string | null } {\r\n const extracted = extractJson(content);\r\n\r\n if (!extracted) {\r\n return { isJson: false, format: 'invalid', extracted: null };\r\n }\r\n\r\n const result = detectJson(extracted);\r\n return { ...result, extracted };\r\n}\r\n\r\n/**\r\n * Format JSON for display\r\n *\r\n * @param data - Parsed JSON data\r\n * @param indent - Indentation spaces (default: 2)\r\n * @returns Formatted JSON string\r\n */\r\nexport function formatJson(data: unknown, indent: number = 2): string {\r\n return JSON.stringify(data, null, indent);\r\n}\r\n\r\n/**\r\n * Get a summary string for JSON data\r\n *\r\n * @param data - Parsed JSON data\r\n * @returns Summary description\r\n */\r\nexport function getJsonSummary(data: unknown): string {\r\n if (data === null) return 'null';\r\n if (typeof data === 'boolean') return data ? 'true' : 'false';\r\n if (typeof data === 'number') return String(data);\r\n if (typeof data === 'string') return `\"${data.length > 30 ? data.substring(0, 30) + '...' : data}\"`;\r\n\r\n if (Array.isArray(data)) {\r\n const length = data.length;\r\n return `Array[${length}]${length > 0 ? ` (${getJsonSummary(data[0])}, ...)` : ''}`;\r\n }\r\n\r\n if (typeof data === 'object') {\r\n const keys = Object.keys(data);\r\n return `Object{${keys.length}}${keys.length > 0 ? ` (${keys.slice(0, 3).join(', ')}${keys.length > 3 ? ', ...' : ''})` : ''}`;\r\n }\r\n\r\n return String(data);\r\n}\r\n\r\n/**\r\n * Get color class for JSON value type\r\n *\r\n * @param value - JSON value\r\n * @returns Tailwind color class\r\n */\r\nexport function getJsonValueTypeColor(value: unknown): string {\r\n if (value === null) return 'text-muted-foreground';\r\n if (typeof value === 'boolean') return 'text-purple-400';\r\n if (typeof value === 'number') return 'text-orange-400';\r\n if (typeof value === 'string') return 'text-green-400';\r\n if (Array.isArray(value)) return 'text-blue-400';\r\n if (typeof value === 'object') return 'text-yellow-400';\r\n return 'text-foreground';\r\n}\r\n","// ========================================\r\n// JsonFormatter Component\r\n// ========================================\r\n// Displays JSON content in formatted text or card view\r\n\r\nimport { useState, useCallback, useMemo } from 'react';\r\nimport { ChevronDown, ChevronRight, Copy, Check, Braces } from 'lucide-react';\r\nimport { cn } from '@/lib/utils';\r\nimport { Button } from '@/components/ui/Button';\r\nimport {\r\n detectJsonContent,\r\n formatJson,\r\n getJsonSummary,\r\n getJsonValueTypeColor,\r\n type JsonDisplayMode,\r\n} from './jsonUtils';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface JsonFormatterProps {\r\n /** Content to format */\r\n content: string;\r\n /** Display mode */\r\n displayMode?: JsonDisplayMode;\r\n /** CSS className */\r\n className?: string;\r\n /** Maximum lines for text mode (default: 20) */\r\n maxLines?: number;\r\n /** Whether to show type labels in card mode (default: true) */\r\n showTypeLabels?: boolean;\r\n}\r\n\r\n// ========== Helper Components ==========\r\n\r\n/**\r\n * Copy button with feedback\r\n */\r\nfunction CopyButton({ text }: { text: string }) {\r\n const [copied, setCopied] = useState(false);\r\n\r\n const handleCopy = useCallback(async () => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (err) {\r\n console.error('Failed to copy:', err);\r\n }\r\n }, [text]);\r\n\r\n return (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={handleCopy}\r\n className=\"h-6 px-2 text-xs opacity-0 group-hover:opacity-100 transition-opacity\"\r\n >\r\n {copied ? (\r\n <>\r\n <Check className=\"h-3 w-3 mr-1\" />\r\n Copied\r\n </>\r\n ) : (\r\n <>\r\n <Copy className=\"h-3 w-3 mr-1\" />\r\n Copy\r\n </>\r\n )}\r\n </Button>\r\n );\r\n}\r\n\r\n/**\r\n * JSON value renderer with syntax highlighting\r\n */\r\nfunction JsonValue({ value, depth = 0 }: { value: unknown; depth?: number }) {\r\n const indent = ' '.repeat(depth);\r\n const colorClass = getJsonValueTypeColor(value);\r\n\r\n if (value === null) {\r\n return <span className={colorClass}>null</span>;\r\n }\r\n\r\n if (typeof value === 'boolean') {\r\n return <span className={colorClass}>{String(value)}</span>;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return <span className={colorClass}>{String(value)}</span>;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return <span className={colorClass}>\"{value}\"</span>;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n if (value.length === 0) {\r\n return <span className=\"text-blue-400\">[]</span>;\r\n }\r\n\r\n return (\r\n <div className=\"text-blue-400\">\r\n <span>[</span>\r\n <div className=\"pl-4\">\r\n {value.map((item, index) => (\r\n <div key={index} className=\"hover:bg-muted/50 rounded px-1\">\r\n <JsonValue value={item} depth={depth + 1} />\r\n {index < value.length - 1 && <span className=\"text-foreground\">,</span>}\r\n </div>\r\n ))}\r\n </div>\r\n <span>{indent}]</span>\r\n </div>\r\n );\r\n }\r\n\r\n if (typeof value === 'object') {\r\n const entries = Object.entries(value as Record<string, unknown>);\r\n if (entries.length === 0) {\r\n return <span className=\"text-yellow-400\">{`{}`}</span>;\r\n }\r\n\r\n return (\r\n <div className=\"text-yellow-400\">\r\n <span>{`{`}</span>\r\n <div className=\"pl-4\">\r\n {entries.map(([key, val], index) => (\r\n <div key={key} className=\"hover:bg-muted/50 rounded px-1\">\r\n <span className=\"text-cyan-400\">\"{key}\"</span>\r\n <span className=\"text-foreground\">: </span>\r\n <JsonValue value={val} depth={depth + 1} />\r\n {index < entries.length - 1 && <span className=\"text-foreground\">,</span>}\r\n </div>\r\n ))}\r\n </div>\r\n <span>{indent}{`}`}</span>\r\n </div>\r\n );\r\n }\r\n\r\n return <span>{String(value)}</span>;\r\n}\r\n\r\n/**\r\n * Compact JSON view for inline display\r\n */\r\nfunction JsonCompact({ data }: { data: unknown }) {\r\n return (\r\n <code className=\"text-xs font-mono\">\r\n <JsonValue value={data} />\r\n </code>\r\n );\r\n}\r\n\r\n/**\r\n * Card view for structured JSON display\r\n */\r\nfunction JsonCard({ data, showTypeLabels = true }: { data: unknown; showTypeLabels?: boolean }) {\r\n const [expandedKeys, setExpandedKeys] = useState<Set<string>>(new Set());\r\n\r\n const toggleKey = useCallback((key: string) => {\r\n setExpandedKeys((prev) => {\r\n const next = new Set(prev);\r\n if (next.has(key)) {\r\n next.delete(key);\r\n } else {\r\n next.add(key);\r\n }\r\n return next;\r\n });\r\n }, []);\r\n\r\n if (typeof data !== 'object' || data === null || Array.isArray(data)) {\r\n // Primitive or array - use inline view\r\n return (\r\n <div className=\"p-3 bg-muted/30 rounded border border-border\">\r\n <JsonCompact data={data} />\r\n </div>\r\n );\r\n }\r\n\r\n const entries = Object.entries(data as Record<string, unknown>);\r\n\r\n return (\r\n <div className=\"border border-border rounded-lg overflow-hidden bg-card\">\r\n {/* Header */}\r\n <div className=\"flex items-center gap-2 px-3 py-2 bg-muted/50 border-b border-border\">\r\n <Braces className=\"h-4 w-4 text-muted-foreground\" />\r\n <span className=\"text-sm font-medium\">JSON Data</span>\r\n <span className=\"text-xs text-muted-foreground\">\r\n ({entries.length} {entries.length === 1 ? 'property' : 'properties'})\r\n </span>\r\n </div>\r\n\r\n {/* Properties */}\r\n <div className=\"divide-y divide-border\">\r\n {entries.map(([key, value]) => {\r\n const isObject = value !== null && typeof value === 'object';\r\n const isExpanded = expandedKeys.has(key);\r\n const isArray = Array.isArray(value);\r\n const summary = getJsonSummary(value);\r\n\r\n return (\r\n <div key={key} className=\"group\">\r\n <div\r\n className={cn(\r\n 'flex items-start gap-2 px-3 py-2 hover:bg-muted/30 transition-colors',\r\n isObject && 'cursor-pointer'\r\n )}\r\n onClick={() => isObject && toggleKey(key)}\r\n >\r\n {/* Expand/collapse icon */}\r\n {isObject && (\r\n <div className=\"shrink-0 mt-0.5\">\r\n {isExpanded ? (\r\n <ChevronDown className=\"h-3.5 w-3.5 text-muted-foreground\" />\r\n ) : (\r\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Key */}\r\n <span className=\"font-mono text-sm text-cyan-400 shrink-0\">\"{key}\"</span>\r\n <span className=\"text-muted-foreground shrink-0\">:</span>\r\n\r\n {/* Value summary or full value */}\r\n <div className={cn('flex-1 min-w-0', getJsonValueTypeColor(value))}>\r\n {showTypeLabels && (\r\n <span className=\"text-xs text-muted-foreground mr-1\">\r\n {isArray ? 'array' : isObject ? 'object' : typeof value}\r\n </span>\r\n )}\r\n {!isObject ? (\r\n <span className=\"text-sm font-mono break-all\">{summary}</span>\r\n ) : (\r\n <span className=\"text-sm\">{summary}</span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Expanded nested object */}\r\n {isObject && isExpanded && (\r\n <div className=\"pl-8 pr-3 pb-2\">\r\n <div className=\"p-3 bg-muted/30 rounded border border-border\">\r\n <JsonCard data={value} showTypeLabels={showTypeLabels} />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * Text view for formatted JSON\r\n */\r\nfunction JsonText({ data, maxLines = 20 }: { data: unknown; maxLines?: number }) {\r\n const formatted = useMemo(() => formatJson(data), [data]);\r\n const lines = formatted.split('\\n');\r\n\r\n const showTruncated = maxLines && lines.length > maxLines;\r\n const displayLines = showTruncated ? lines.slice(0, maxLines) : lines;\r\n\r\n return (\r\n <div className=\"relative group\">\r\n <pre className=\"text-xs font-mono bg-muted/30 p-3 rounded border border-border overflow-x-auto\">\r\n <code className=\"text-foreground\">\r\n {displayLines.map((line, i) => (\r\n <div key={i} className=\"hover:bg-muted/50 px-1 -mx-1\">\r\n {line}\r\n </div>\r\n ))}\r\n {showTruncated && (\r\n <div className=\"text-muted-foreground italic\">\r\n // ... {lines.length - maxLines} more lines\r\n </div>\r\n )}\r\n </code>\r\n </pre>\r\n\r\n {/* Copy button */}\r\n <div className=\"absolute top-2 right-2\">\r\n <CopyButton text={formatted} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n// ========== Main Component ==========\r\n\r\n/**\r\n * JsonFormatter Component\r\n *\r\n * Displays JSON content in various formats:\r\n * - `text`: Formatted JSON text with syntax highlighting\r\n * - `card`: Structured card view with collapsible properties\r\n * - `inline`: Compact inline display\r\n *\r\n * Auto-detects JSON from mixed content and validates it.\r\n */\r\nexport function JsonFormatter({\r\n content,\r\n displayMode = 'text',\r\n className,\r\n maxLines = 20,\r\n showTypeLabels = true,\r\n}: JsonFormatterProps) {\r\n // Detect JSON content\r\n const detection = useMemo(() => detectJsonContent(content), [content]);\r\n\r\n // Not JSON or invalid - show as plain text\r\n if (!detection.isJson) {\r\n return (\r\n <div className={cn('text-xs font-mono text-foreground', className)}>\r\n {content}\r\n </div>\r\n );\r\n }\r\n\r\n // Valid JSON - render based on display mode\r\n switch (displayMode) {\r\n case 'card':\r\n return (\r\n <div className={className}>\r\n <JsonCard data={detection.parsed} showTypeLabels={showTypeLabels} />\r\n </div>\r\n );\r\n\r\n case 'inline':\r\n return (\r\n <div className={cn('inline-flex items-center gap-1 px-2 py-1 bg-muted/50 rounded border border-border', className)}>\r\n <Braces className=\"h-3 w-3 text-muted-foreground shrink-0\" />\r\n <span className=\"text-xs font-mono\">\r\n <JsonCompact data={detection.parsed} />\r\n </span>\r\n </div>\r\n );\r\n\r\n case 'text':\r\n default:\r\n return (\r\n <div className={className}>\r\n <JsonText data={detection.parsed} maxLines={maxLines} />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default JsonFormatter;\r\n","// ========================================\r\n// MessageRenderer Component\r\n// ========================================\r\n// Renders message content with Markdown support, JSON formatting,\r\n// and escape sequence handling\r\n\r\nimport { useMemo } from 'react';\r\nimport ReactMarkdown from 'react-markdown';\r\nimport remarkGfm from 'remark-gfm';\r\nimport rehypeHighlight from 'rehype-highlight';\r\nimport { cn } from '@/lib/utils';\r\nimport { JsonFormatter } from '../../LogBlock/JsonFormatter';\r\nimport { detectJsonContent } from '../../LogBlock/jsonUtils';\r\n\r\n// Import highlight.js styles for code syntax highlighting\r\n// Using a base style that works with both light and dark themes\r\nimport 'highlight.js/styles/base16/atelier-forest.css';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface MessageRendererProps {\r\n /** Content to render */\r\n content: string;\r\n /** Additional CSS className */\r\n className?: string;\r\n /** Format hint (auto-detect if not specified) */\r\n format?: 'markdown' | 'text' | 'json';\r\n /** Maximum lines to display (for text mode) */\r\n maxLines?: number;\r\n}\r\n\r\n// ========== Markdown Component Styles ==========\r\n\r\nconst markdownComponents: Record<string, string> = {\r\n h1: 'text-xl font-bold mt-4 mb-2 text-foreground',\r\n h2: 'text-lg font-semibold mt-3 mb-2 text-foreground',\r\n h3: 'text-base font-semibold mt-2 mb-1 text-foreground',\r\n p: 'text-sm leading-relaxed mb-2 text-foreground',\r\n ul: 'list-disc list-inside mb-2 text-sm space-y-1',\r\n ol: 'list-decimal list-inside mb-2 text-sm space-y-1',\r\n li: 'text-sm text-foreground',\r\n code: 'font-mono text-xs bg-muted px-1.5 py-0.5 rounded text-amber-600 dark:text-amber-400',\r\n pre: 'bg-muted/80 dark:bg-muted/30 p-3 rounded-lg overflow-x-auto my-2 border border-border/50',\r\n blockquote: 'border-l-4 border-muted-foreground pl-4 italic text-muted-foreground my-2',\r\n strong: 'font-semibold text-foreground',\r\n a: 'text-blue-600 dark:text-blue-400 hover:underline',\r\n};\r\n\r\n// ========== Helper Components ==========\r\n\r\n/**\r\n * Inline code renderer for Markdown\r\n */\r\nfunction MarkdownCode({ className, children, ...props }: React.HTMLAttributes<HTMLElement>) {\r\n return (\r\n <code\r\n className={cn(markdownComponents.code, className)}\r\n {...props}\r\n >\r\n {children}\r\n </code>\r\n );\r\n}\r\n\r\n/**\r\n * Code block renderer for Markdown with syntax highlighting\r\n */\r\nfunction MarkdownPre({ className, children, ...props }: React.HTMLAttributes<HTMLElement>) {\r\n return (\r\n <pre\r\n className={cn(markdownComponents.pre, className)}\r\n {...props}\r\n >\r\n {children}\r\n </pre>\r\n );\r\n}\r\n\r\n/**\r\n * Paragraph renderer for Markdown\r\n */\r\nfunction MarkdownParagraph({ className, children, ...props }: React.HTMLAttributes<HTMLParagraphElement>) {\r\n return (\r\n <p\r\n className={cn(markdownComponents.p, className)}\r\n {...props}\r\n >\r\n {children}\r\n </p>\r\n );\r\n}\r\n\r\n/**\r\n * Heading renderers for Markdown\r\n */\r\nfunction MarkdownH1({ className, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <h1\r\n className={cn(markdownComponents.h1, className)}\r\n {...props}\r\n >\r\n {children}\r\n </h1>\r\n );\r\n}\r\n\r\nfunction MarkdownH2({ className, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <h2\r\n className={cn(markdownComponents.h2, className)}\r\n {...props}\r\n >\r\n {children}\r\n </h2>\r\n );\r\n}\r\n\r\nfunction MarkdownH3({ className, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <h3\r\n className={cn(markdownComponents.h3, className)}\r\n {...props}\r\n >\r\n {children}\r\n </h3>\r\n );\r\n}\r\n\r\n/**\r\n * List renderers for Markdown\r\n */\r\nfunction MarkdownUl({ className, children, ...props }: React.HTMLAttributes<HTMLUListElement>) {\r\n return (\r\n <ul\r\n className={cn(markdownComponents.ul, className)}\r\n {...props}\r\n >\r\n {children}\r\n </ul>\r\n );\r\n}\r\n\r\nfunction MarkdownOl({ className, children, ...props }: React.HTMLAttributes<HTMLOListElement>) {\r\n return (\r\n <ol\r\n className={cn(markdownComponents.ol, className)}\r\n {...props}\r\n >\r\n {children}\r\n </ol>\r\n );\r\n}\r\n\r\nfunction MarkdownLi({ className, children, ...props }: React.HTMLAttributes<HTMLLIElement>) {\r\n return (\r\n <li\r\n className={cn(markdownComponents.li, className)}\r\n {...props}\r\n >\r\n {children}\r\n </li>\r\n );\r\n}\r\n\r\n/**\r\n * Blockquote renderer for Markdown\r\n */\r\nfunction MarkdownBlockquote({ className, children, ...props }: React.HTMLAttributes<HTMLQuoteElement>) {\r\n return (\r\n <blockquote\r\n className={cn(markdownComponents.blockquote, className)}\r\n {...props}\r\n >\r\n {children}\r\n </blockquote>\r\n );\r\n}\r\n\r\n/**\r\n * Anchor renderer for Markdown\r\n */\r\nfunction MarkdownA({ className, children, href, ...props }: React.AnchorHTMLAttributes<HTMLAnchorElement>) {\r\n return (\r\n <a\r\n className={cn(markdownComponents.a, className)}\r\n href={href}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n {...props}\r\n >\r\n {children}\r\n </a>\r\n );\r\n}\r\n\r\n/**\r\n * Strong/Bold renderer for Markdown\r\n */\r\nfunction MarkdownStrong({ className, children, ...props }: React.HTMLAttributes<HTMLElement>) {\r\n return (\r\n <strong\r\n className={cn(markdownComponents.strong, className)}\r\n {...props}\r\n >\r\n {children}\r\n </strong>\r\n );\r\n}\r\n\r\n// ========== Markdown Renderer ==========\r\n\r\n/**\r\n * Markdown content renderer with syntax highlighting\r\n */\r\nfunction MarkdownRenderer({ content, className }: { content: string; className?: string }) {\r\n return (\r\n <div className={cn('prose prose-sm dark:prose-invert max-w-none', className)}>\r\n <ReactMarkdown\r\n remarkPlugins={[remarkGfm]}\r\n rehypePlugins={[rehypeHighlight]}\r\n components={{\r\n h1: MarkdownH1,\r\n h2: MarkdownH2,\r\n h3: MarkdownH3,\r\n p: MarkdownParagraph,\r\n ul: MarkdownUl,\r\n ol: MarkdownOl,\r\n li: MarkdownLi,\r\n code: MarkdownCode,\r\n pre: MarkdownPre,\r\n blockquote: MarkdownBlockquote,\r\n a: MarkdownA,\r\n strong: MarkdownStrong,\r\n }}\r\n >\r\n {content}\r\n </ReactMarkdown>\r\n </div>\r\n );\r\n}\r\n\r\n// ========== Text Renderer ==========\r\n\r\n/**\r\n * Plain text renderer with escape sequence handling\r\n */\r\nfunction TextRenderer({ content, maxLines }: { content: string; maxLines?: number }) {\r\n const lines = useMemo(() => {\r\n return content.split('\\n');\r\n }, [content]);\r\n\r\n const displayLines = useMemo(() => {\r\n if (maxLines && lines.length > maxLines) {\r\n return lines.slice(0, maxLines);\r\n }\r\n return lines;\r\n }, [lines, maxLines]);\r\n\r\n const showTruncated = maxLines && lines.length > maxLines;\r\n\r\n return (\r\n <div className=\"text-sm text-foreground whitespace-pre-wrap break-words font-mono\">\r\n {displayLines.map((line, index) => (\r\n <div key={index}>{line || '\\u00A0'}</div>\r\n ))}\r\n {showTruncated && (\r\n <div className=\"text-muted-foreground italic text-xs mt-2\">\r\n // ... {lines.length - maxLines} more lines\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n// ========== Content Detection ==========\r\n\r\n/**\r\n * Auto-detect content format\r\n */\r\nfunction detectContentFormat(content: string): 'markdown' | 'json' | 'text' {\r\n const trimmed = content.trim();\r\n\r\n // Check for JSON first\r\n const jsonDetection = detectJsonContent(trimmed);\r\n if (jsonDetection.isJson) {\r\n return 'json';\r\n }\r\n\r\n // Check for Markdown patterns\r\n const markdownPatterns = [\r\n /^#{1,6}\\s+/m, // Headings\r\n /^\\*{3,}$/m, // Horizontal rule\r\n /^\\s*[-*+]\\s+/m, // Unordered lists\r\n /^\\s*\\d+\\.\\s+/m, // Ordered lists\r\n /\\[.*?\\]\\(.*?\\)/, // Links\r\n /`{3,}[\\s\\S]*?`{3,}/, // Code blocks\r\n /\\*\\*.*?\\*\\*/, // Bold\r\n /_.*?_/, // Italic\r\n /^\\s*>\\s+/m, // Blockquotes\r\n ];\r\n\r\n for (const pattern of markdownPatterns) {\r\n if (pattern.test(trimmed)) {\r\n return 'markdown';\r\n }\r\n }\r\n\r\n // Default to text\r\n return 'text';\r\n}\r\n\r\n// ========== Main Component ==========\r\n\r\n/**\r\n * MessageRenderer Component\r\n *\r\n * Renders message content with automatic format detection:\r\n * - JSON: Structured display with JsonFormatter\r\n * - Markdown: Rich text with syntax highlighting\r\n * - Text: Plain text with escape sequence handling\r\n *\r\n * Supports escape sequence handling (e.g., \\n → newline)\r\n */\r\nexport function MessageRenderer({\r\n content,\r\n className,\r\n format,\r\n maxLines,\r\n}: MessageRendererProps) {\r\n // Process escape sequences\r\n const processedContent = useMemo(() => {\r\n // Replace common escape sequences\r\n return content\r\n .replace(/\\\\n/g, '\\n')\r\n .replace(/\\\\t/g, ' ')\r\n .replace(/\\\\\"/g, '\"')\r\n .replace(/\\\\'/g, \"'\")\r\n .replace(/\\\\\\\\/g, '\\\\');\r\n }, [content]);\r\n\r\n // Auto-detect format if not specified\r\n const detectedFormat = useMemo(() => {\r\n if (format) {\r\n return format;\r\n }\r\n return detectContentFormat(processedContent);\r\n }, [processedContent, format]);\r\n\r\n // Render based on format\r\n switch (detectedFormat) {\r\n case 'json':\r\n return (\r\n <div className={className}>\r\n <JsonFormatter\r\n content={processedContent}\r\n displayMode=\"text\"\r\n maxLines={maxLines}\r\n />\r\n </div>\r\n );\r\n\r\n case 'markdown':\r\n return (\r\n <MarkdownRenderer\r\n content={processedContent}\r\n className={className}\r\n />\r\n );\r\n\r\n case 'text':\r\n default:\r\n return (\r\n <div className={className}>\r\n <TextRenderer\r\n content={processedContent}\r\n maxLines={maxLines}\r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default MessageRenderer;\r\n"],"names":["detectJson","content","trimmed","parsed","format","error","extractJson","depth","inString","escape","end","i","char","codeBlockMatch","detectJsonContent","extracted","formatJson","data","indent","getJsonSummary","length","keys","getJsonValueTypeColor","value","CopyButton","text","copied","setCopied","useState","handleCopy","useCallback","err","jsx","Button","jsxs","Fragment","Check","Copy","JsonValue","colorClass","item","index","entries","key","val","JsonCompact","JsonCard","showTypeLabels","expandedKeys","setExpandedKeys","toggleKey","prev","next","Braces","isObject","isExpanded","isArray","summary","cn","ChevronDown","ChevronRight","JsonText","maxLines","formatted","useMemo","lines","showTruncated","displayLines","line","JsonFormatter","displayMode","className","detection","markdownComponents","MarkdownCode","children","props","MarkdownPre","MarkdownParagraph","MarkdownH1","MarkdownH2","MarkdownH3","MarkdownUl","MarkdownOl","MarkdownLi","MarkdownBlockquote","MarkdownA","href","MarkdownStrong","MarkdownRenderer","ReactMarkdown","remarkGfm","rehypeHighlight","TextRenderer","detectContentFormat","markdownPatterns","pattern","MessageRenderer","processedContent"],"mappings":"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"}
1
+ {"version":3,"file":"index-B_ysvdnP.js","sources":["../../src/components/shared/LogBlock/jsonUtils.ts","../../src/components/shared/LogBlock/JsonFormatter.tsx","../../src/components/shared/CliStreamMonitor/MessageRenderer/index.tsx"],"sourcesContent":["// ========================================\r\n// LogBlock JSON Utilities\r\n// ========================================\r\n// JSON content detection and formatting utilities\r\n\r\n/**\r\n * JSON content type detection result\r\n */\r\nexport interface JsonDetectionResult {\r\n isJson: boolean;\r\n parsed?: unknown;\r\n error?: string;\r\n format: 'object' | 'array' | 'primitive' | 'invalid';\r\n}\r\n\r\n/**\r\n * Display mode for JSON content\r\n */\r\nexport type JsonDisplayMode = 'text' | 'card' | 'inline';\r\n\r\n/**\r\n * Detect if content is valid JSON\r\n *\r\n * @param content - Content string to check\r\n * @returns Detection result with parsed data if valid\r\n */\r\nexport function detectJson(content: string): JsonDetectionResult {\r\n const trimmed = content.trim();\r\n\r\n // Quick check for JSON patterns\r\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {\r\n return { isJson: false, format: 'invalid' };\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(trimmed);\r\n\r\n // Determine format type\r\n let format: JsonDetectionResult['format'] = 'primitive';\r\n if (Array.isArray(parsed)) {\r\n format = 'array';\r\n } else if (parsed !== null && typeof parsed === 'object') {\r\n format = 'object';\r\n }\r\n\r\n return { isJson: true, parsed, format };\r\n } catch (error) {\r\n return {\r\n isJson: false,\r\n format: 'invalid',\r\n error: error instanceof Error ? error.message : 'Unknown parse error'\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Extract JSON from mixed content\r\n * Handles cases where JSON is embedded in text output\r\n *\r\n * @param content - Content that may contain JSON\r\n * @returns Extracted JSON string or null if not found\r\n */\r\nexport function extractJson(content: string): string | null {\r\n const trimmed = content.trim();\r\n\r\n // Direct JSON\r\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\r\n // Find the matching bracket\r\n let depth = 0;\r\n let inString = false;\r\n let escape = false;\r\n let end = -1;\r\n\r\n for (let i = 0; i < trimmed.length; i++) {\r\n const char = trimmed[i];\r\n\r\n if (escape) {\r\n escape = false;\r\n continue;\r\n }\r\n\r\n if (char === '\\\\') {\r\n escape = true;\r\n continue;\r\n }\r\n\r\n if (char === '\"') {\r\n inString = !inString;\r\n continue;\r\n }\r\n\r\n if (!inString) {\r\n if (char === '{' || char === '[') {\r\n depth++;\r\n } else if (char === '}' || char === ']') {\r\n depth--;\r\n if (depth === 0) {\r\n end = i + 1;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (end > 0) {\r\n return trimmed.substring(0, end);\r\n }\r\n }\r\n\r\n // Try to find JSON in code blocks\r\n const codeBlockMatch = content.match(/```(?:json)?\\s*\\n([\\s\\S]*?)\\n```/);\r\n if (codeBlockMatch) {\r\n return codeBlockMatch[1].trim();\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Detect if content should be displayed as JSON\r\n * Combines extraction and validation\r\n *\r\n * @param content - Content to check\r\n * @returns Detection result\r\n */\r\nexport function detectJsonContent(content: string): JsonDetectionResult & { extracted: string | null } {\r\n const extracted = extractJson(content);\r\n\r\n if (!extracted) {\r\n return { isJson: false, format: 'invalid', extracted: null };\r\n }\r\n\r\n const result = detectJson(extracted);\r\n return { ...result, extracted };\r\n}\r\n\r\n/**\r\n * Format JSON for display\r\n *\r\n * @param data - Parsed JSON data\r\n * @param indent - Indentation spaces (default: 2)\r\n * @returns Formatted JSON string\r\n */\r\nexport function formatJson(data: unknown, indent: number = 2): string {\r\n return JSON.stringify(data, null, indent);\r\n}\r\n\r\n/**\r\n * Get a summary string for JSON data\r\n *\r\n * @param data - Parsed JSON data\r\n * @returns Summary description\r\n */\r\nexport function getJsonSummary(data: unknown): string {\r\n if (data === null) return 'null';\r\n if (typeof data === 'boolean') return data ? 'true' : 'false';\r\n if (typeof data === 'number') return String(data);\r\n if (typeof data === 'string') return `\"${data.length > 30 ? data.substring(0, 30) + '...' : data}\"`;\r\n\r\n if (Array.isArray(data)) {\r\n const length = data.length;\r\n return `Array[${length}]${length > 0 ? ` (${getJsonSummary(data[0])}, ...)` : ''}`;\r\n }\r\n\r\n if (typeof data === 'object') {\r\n const keys = Object.keys(data);\r\n return `Object{${keys.length}}${keys.length > 0 ? ` (${keys.slice(0, 3).join(', ')}${keys.length > 3 ? ', ...' : ''})` : ''}`;\r\n }\r\n\r\n return String(data);\r\n}\r\n\r\n/**\r\n * Get color class for JSON value type\r\n *\r\n * @param value - JSON value\r\n * @returns Tailwind color class\r\n */\r\nexport function getJsonValueTypeColor(value: unknown): string {\r\n if (value === null) return 'text-muted-foreground';\r\n if (typeof value === 'boolean') return 'text-purple-400';\r\n if (typeof value === 'number') return 'text-orange-400';\r\n if (typeof value === 'string') return 'text-green-400';\r\n if (Array.isArray(value)) return 'text-blue-400';\r\n if (typeof value === 'object') return 'text-yellow-400';\r\n return 'text-foreground';\r\n}\r\n","// ========================================\r\n// JsonFormatter Component\r\n// ========================================\r\n// Displays JSON content in formatted text or card view\r\n\r\nimport { useState, useCallback, useMemo } from 'react';\r\nimport { ChevronDown, ChevronRight, Copy, Check, Braces } from 'lucide-react';\r\nimport { cn } from '@/lib/utils';\r\nimport { Button } from '@/components/ui/Button';\r\nimport {\r\n detectJsonContent,\r\n formatJson,\r\n getJsonSummary,\r\n getJsonValueTypeColor,\r\n type JsonDisplayMode,\r\n} from './jsonUtils';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface JsonFormatterProps {\r\n /** Content to format */\r\n content: string;\r\n /** Display mode */\r\n displayMode?: JsonDisplayMode;\r\n /** CSS className */\r\n className?: string;\r\n /** Maximum lines for text mode (default: 20) */\r\n maxLines?: number;\r\n /** Whether to show type labels in card mode (default: true) */\r\n showTypeLabels?: boolean;\r\n}\r\n\r\n// ========== Helper Components ==========\r\n\r\n/**\r\n * Copy button with feedback\r\n */\r\nfunction CopyButton({ text }: { text: string }) {\r\n const [copied, setCopied] = useState(false);\r\n\r\n const handleCopy = useCallback(async () => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (err) {\r\n console.error('Failed to copy:', err);\r\n }\r\n }, [text]);\r\n\r\n return (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={handleCopy}\r\n className=\"h-6 px-2 text-xs opacity-0 group-hover:opacity-100 transition-opacity\"\r\n >\r\n {copied ? (\r\n <>\r\n <Check className=\"h-3 w-3 mr-1\" />\r\n Copied\r\n </>\r\n ) : (\r\n <>\r\n <Copy className=\"h-3 w-3 mr-1\" />\r\n Copy\r\n </>\r\n )}\r\n </Button>\r\n );\r\n}\r\n\r\n/**\r\n * JSON value renderer with syntax highlighting\r\n */\r\nfunction JsonValue({ value, depth = 0 }: { value: unknown; depth?: number }) {\r\n const indent = ' '.repeat(depth);\r\n const colorClass = getJsonValueTypeColor(value);\r\n\r\n if (value === null) {\r\n return <span className={colorClass}>null</span>;\r\n }\r\n\r\n if (typeof value === 'boolean') {\r\n return <span className={colorClass}>{String(value)}</span>;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return <span className={colorClass}>{String(value)}</span>;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return <span className={colorClass}>\"{value}\"</span>;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n if (value.length === 0) {\r\n return <span className=\"text-blue-400\">[]</span>;\r\n }\r\n\r\n return (\r\n <div className=\"text-blue-400\">\r\n <span>[</span>\r\n <div className=\"pl-4\">\r\n {value.map((item, index) => (\r\n <div key={index} className=\"hover:bg-muted/50 rounded px-1\">\r\n <JsonValue value={item} depth={depth + 1} />\r\n {index < value.length - 1 && <span className=\"text-foreground\">,</span>}\r\n </div>\r\n ))}\r\n </div>\r\n <span>{indent}]</span>\r\n </div>\r\n );\r\n }\r\n\r\n if (typeof value === 'object') {\r\n const entries = Object.entries(value as Record<string, unknown>);\r\n if (entries.length === 0) {\r\n return <span className=\"text-yellow-400\">{`{}`}</span>;\r\n }\r\n\r\n return (\r\n <div className=\"text-yellow-400\">\r\n <span>{`{`}</span>\r\n <div className=\"pl-4\">\r\n {entries.map(([key, val], index) => (\r\n <div key={key} className=\"hover:bg-muted/50 rounded px-1\">\r\n <span className=\"text-cyan-400\">\"{key}\"</span>\r\n <span className=\"text-foreground\">: </span>\r\n <JsonValue value={val} depth={depth + 1} />\r\n {index < entries.length - 1 && <span className=\"text-foreground\">,</span>}\r\n </div>\r\n ))}\r\n </div>\r\n <span>{indent}{`}`}</span>\r\n </div>\r\n );\r\n }\r\n\r\n return <span>{String(value)}</span>;\r\n}\r\n\r\n/**\r\n * Compact JSON view for inline display\r\n */\r\nfunction JsonCompact({ data }: { data: unknown }) {\r\n return (\r\n <code className=\"text-xs font-mono\">\r\n <JsonValue value={data} />\r\n </code>\r\n );\r\n}\r\n\r\n/**\r\n * Card view for structured JSON display\r\n */\r\nfunction JsonCard({ data, showTypeLabels = true }: { data: unknown; showTypeLabels?: boolean }) {\r\n const [expandedKeys, setExpandedKeys] = useState<Set<string>>(new Set());\r\n\r\n const toggleKey = useCallback((key: string) => {\r\n setExpandedKeys((prev) => {\r\n const next = new Set(prev);\r\n if (next.has(key)) {\r\n next.delete(key);\r\n } else {\r\n next.add(key);\r\n }\r\n return next;\r\n });\r\n }, []);\r\n\r\n if (typeof data !== 'object' || data === null || Array.isArray(data)) {\r\n // Primitive or array - use inline view\r\n return (\r\n <div className=\"p-3 bg-muted/30 rounded border border-border\">\r\n <JsonCompact data={data} />\r\n </div>\r\n );\r\n }\r\n\r\n const entries = Object.entries(data as Record<string, unknown>);\r\n\r\n return (\r\n <div className=\"border border-border rounded-lg overflow-hidden bg-card\">\r\n {/* Header */}\r\n <div className=\"flex items-center gap-2 px-3 py-2 bg-muted/50 border-b border-border\">\r\n <Braces className=\"h-4 w-4 text-muted-foreground\" />\r\n <span className=\"text-sm font-medium\">JSON Data</span>\r\n <span className=\"text-xs text-muted-foreground\">\r\n ({entries.length} {entries.length === 1 ? 'property' : 'properties'})\r\n </span>\r\n </div>\r\n\r\n {/* Properties */}\r\n <div className=\"divide-y divide-border\">\r\n {entries.map(([key, value]) => {\r\n const isObject = value !== null && typeof value === 'object';\r\n const isExpanded = expandedKeys.has(key);\r\n const isArray = Array.isArray(value);\r\n const summary = getJsonSummary(value);\r\n\r\n return (\r\n <div key={key} className=\"group\">\r\n <div\r\n className={cn(\r\n 'flex items-start gap-2 px-3 py-2 hover:bg-muted/30 transition-colors',\r\n isObject && 'cursor-pointer'\r\n )}\r\n onClick={() => isObject && toggleKey(key)}\r\n >\r\n {/* Expand/collapse icon */}\r\n {isObject && (\r\n <div className=\"shrink-0 mt-0.5\">\r\n {isExpanded ? (\r\n <ChevronDown className=\"h-3.5 w-3.5 text-muted-foreground\" />\r\n ) : (\r\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Key */}\r\n <span className=\"font-mono text-sm text-cyan-400 shrink-0\">\"{key}\"</span>\r\n <span className=\"text-muted-foreground shrink-0\">:</span>\r\n\r\n {/* Value summary or full value */}\r\n <div className={cn('flex-1 min-w-0', getJsonValueTypeColor(value))}>\r\n {showTypeLabels && (\r\n <span className=\"text-xs text-muted-foreground mr-1\">\r\n {isArray ? 'array' : isObject ? 'object' : typeof value}\r\n </span>\r\n )}\r\n {!isObject ? (\r\n <span className=\"text-sm font-mono break-all\">{summary}</span>\r\n ) : (\r\n <span className=\"text-sm\">{summary}</span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Expanded nested object */}\r\n {isObject && isExpanded && (\r\n <div className=\"pl-8 pr-3 pb-2\">\r\n <div className=\"p-3 bg-muted/30 rounded border border-border\">\r\n <JsonCard data={value} showTypeLabels={showTypeLabels} />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * Text view for formatted JSON\r\n */\r\nfunction JsonText({ data, maxLines = 20 }: { data: unknown; maxLines?: number }) {\r\n const formatted = useMemo(() => formatJson(data), [data]);\r\n const lines = formatted.split('\\n');\r\n\r\n const showTruncated = maxLines && lines.length > maxLines;\r\n const displayLines = showTruncated ? lines.slice(0, maxLines) : lines;\r\n\r\n return (\r\n <div className=\"relative group\">\r\n <pre className=\"text-xs font-mono bg-muted/30 p-3 rounded border border-border overflow-x-auto\">\r\n <code className=\"text-foreground\">\r\n {displayLines.map((line, i) => (\r\n <div key={i} className=\"hover:bg-muted/50 px-1 -mx-1\">\r\n {line}\r\n </div>\r\n ))}\r\n {showTruncated && (\r\n <div className=\"text-muted-foreground italic\">\r\n // ... {lines.length - maxLines} more lines\r\n </div>\r\n )}\r\n </code>\r\n </pre>\r\n\r\n {/* Copy button */}\r\n <div className=\"absolute top-2 right-2\">\r\n <CopyButton text={formatted} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n// ========== Main Component ==========\r\n\r\n/**\r\n * JsonFormatter Component\r\n *\r\n * Displays JSON content in various formats:\r\n * - `text`: Formatted JSON text with syntax highlighting\r\n * - `card`: Structured card view with collapsible properties\r\n * - `inline`: Compact inline display\r\n *\r\n * Auto-detects JSON from mixed content and validates it.\r\n */\r\nexport function JsonFormatter({\r\n content,\r\n displayMode = 'text',\r\n className,\r\n maxLines = 20,\r\n showTypeLabels = true,\r\n}: JsonFormatterProps) {\r\n // Detect JSON content\r\n const detection = useMemo(() => detectJsonContent(content), [content]);\r\n\r\n // Not JSON or invalid - show as plain text\r\n if (!detection.isJson) {\r\n return (\r\n <div className={cn('text-xs font-mono text-foreground', className)}>\r\n {content}\r\n </div>\r\n );\r\n }\r\n\r\n // Valid JSON - render based on display mode\r\n switch (displayMode) {\r\n case 'card':\r\n return (\r\n <div className={className}>\r\n <JsonCard data={detection.parsed} showTypeLabels={showTypeLabels} />\r\n </div>\r\n );\r\n\r\n case 'inline':\r\n return (\r\n <div className={cn('inline-flex items-center gap-1 px-2 py-1 bg-muted/50 rounded border border-border', className)}>\r\n <Braces className=\"h-3 w-3 text-muted-foreground shrink-0\" />\r\n <span className=\"text-xs font-mono\">\r\n <JsonCompact data={detection.parsed} />\r\n </span>\r\n </div>\r\n );\r\n\r\n case 'text':\r\n default:\r\n return (\r\n <div className={className}>\r\n <JsonText data={detection.parsed} maxLines={maxLines} />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default JsonFormatter;\r\n","// ========================================\r\n// MessageRenderer Component\r\n// ========================================\r\n// Renders message content with Markdown support, JSON formatting,\r\n// and escape sequence handling\r\n\r\nimport { useMemo } from 'react';\r\nimport ReactMarkdown from 'react-markdown';\r\nimport remarkGfm from 'remark-gfm';\r\nimport rehypeHighlight from 'rehype-highlight';\r\nimport { cn } from '@/lib/utils';\r\nimport { JsonFormatter } from '../../LogBlock/JsonFormatter';\r\nimport { detectJsonContent } from '../../LogBlock/jsonUtils';\r\n\r\n// Import highlight.js styles for code syntax highlighting\r\n// Using a base style that works with both light and dark themes\r\nimport 'highlight.js/styles/base16/atelier-forest.css';\r\n\r\n// ========== Types ==========\r\n\r\nexport interface MessageRendererProps {\r\n /** Content to render */\r\n content: string;\r\n /** Additional CSS className */\r\n className?: string;\r\n /** Format hint (auto-detect if not specified) */\r\n format?: 'markdown' | 'text' | 'json';\r\n /** Maximum lines to display (for text mode) */\r\n maxLines?: number;\r\n}\r\n\r\n// ========== Markdown Component Styles ==========\r\n\r\nconst markdownComponents: Record<string, string> = {\r\n h1: 'text-xl font-bold mt-4 mb-2 text-foreground',\r\n h2: 'text-lg font-semibold mt-3 mb-2 text-foreground',\r\n h3: 'text-base font-semibold mt-2 mb-1 text-foreground',\r\n p: 'text-sm leading-relaxed mb-2 text-foreground',\r\n ul: 'list-disc list-inside mb-2 text-sm space-y-1',\r\n ol: 'list-decimal list-inside mb-2 text-sm space-y-1',\r\n li: 'text-sm text-foreground',\r\n code: 'font-mono text-xs bg-muted px-1.5 py-0.5 rounded text-amber-600 dark:text-amber-400',\r\n pre: 'bg-muted/80 dark:bg-muted/30 p-3 rounded-lg overflow-x-auto my-2 border border-border/50',\r\n blockquote: 'border-l-4 border-muted-foreground pl-4 italic text-muted-foreground my-2',\r\n strong: 'font-semibold text-foreground',\r\n a: 'text-blue-600 dark:text-blue-400 hover:underline',\r\n};\r\n\r\n// ========== Helper Components ==========\r\n\r\n/**\r\n * Inline code renderer for Markdown\r\n */\r\nfunction MarkdownCode({ className, children, ...props }: React.HTMLAttributes<HTMLElement>) {\r\n return (\r\n <code\r\n className={cn(markdownComponents.code, className)}\r\n {...props}\r\n >\r\n {children}\r\n </code>\r\n );\r\n}\r\n\r\n/**\r\n * Code block renderer for Markdown with syntax highlighting\r\n */\r\nfunction MarkdownPre({ className, children, ...props }: React.HTMLAttributes<HTMLElement>) {\r\n return (\r\n <pre\r\n className={cn(markdownComponents.pre, className)}\r\n {...props}\r\n >\r\n {children}\r\n </pre>\r\n );\r\n}\r\n\r\n/**\r\n * Paragraph renderer for Markdown\r\n */\r\nfunction MarkdownParagraph({ className, children, ...props }: React.HTMLAttributes<HTMLParagraphElement>) {\r\n return (\r\n <p\r\n className={cn(markdownComponents.p, className)}\r\n {...props}\r\n >\r\n {children}\r\n </p>\r\n );\r\n}\r\n\r\n/**\r\n * Heading renderers for Markdown\r\n */\r\nfunction MarkdownH1({ className, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <h1\r\n className={cn(markdownComponents.h1, className)}\r\n {...props}\r\n >\r\n {children}\r\n </h1>\r\n );\r\n}\r\n\r\nfunction MarkdownH2({ className, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <h2\r\n className={cn(markdownComponents.h2, className)}\r\n {...props}\r\n >\r\n {children}\r\n </h2>\r\n );\r\n}\r\n\r\nfunction MarkdownH3({ className, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <h3\r\n className={cn(markdownComponents.h3, className)}\r\n {...props}\r\n >\r\n {children}\r\n </h3>\r\n );\r\n}\r\n\r\n/**\r\n * List renderers for Markdown\r\n */\r\nfunction MarkdownUl({ className, children, ...props }: React.HTMLAttributes<HTMLUListElement>) {\r\n return (\r\n <ul\r\n className={cn(markdownComponents.ul, className)}\r\n {...props}\r\n >\r\n {children}\r\n </ul>\r\n );\r\n}\r\n\r\nfunction MarkdownOl({ className, children, ...props }: React.HTMLAttributes<HTMLOListElement>) {\r\n return (\r\n <ol\r\n className={cn(markdownComponents.ol, className)}\r\n {...props}\r\n >\r\n {children}\r\n </ol>\r\n );\r\n}\r\n\r\nfunction MarkdownLi({ className, children, ...props }: React.HTMLAttributes<HTMLLIElement>) {\r\n return (\r\n <li\r\n className={cn(markdownComponents.li, className)}\r\n {...props}\r\n >\r\n {children}\r\n </li>\r\n );\r\n}\r\n\r\n/**\r\n * Blockquote renderer for Markdown\r\n */\r\nfunction MarkdownBlockquote({ className, children, ...props }: React.HTMLAttributes<HTMLQuoteElement>) {\r\n return (\r\n <blockquote\r\n className={cn(markdownComponents.blockquote, className)}\r\n {...props}\r\n >\r\n {children}\r\n </blockquote>\r\n );\r\n}\r\n\r\n/**\r\n * Anchor renderer for Markdown\r\n */\r\nfunction MarkdownA({ className, children, href, ...props }: React.AnchorHTMLAttributes<HTMLAnchorElement>) {\r\n return (\r\n <a\r\n className={cn(markdownComponents.a, className)}\r\n href={href}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n {...props}\r\n >\r\n {children}\r\n </a>\r\n );\r\n}\r\n\r\n/**\r\n * Strong/Bold renderer for Markdown\r\n */\r\nfunction MarkdownStrong({ className, children, ...props }: React.HTMLAttributes<HTMLElement>) {\r\n return (\r\n <strong\r\n className={cn(markdownComponents.strong, className)}\r\n {...props}\r\n >\r\n {children}\r\n </strong>\r\n );\r\n}\r\n\r\n// ========== Markdown Renderer ==========\r\n\r\n/**\r\n * Markdown content renderer with syntax highlighting\r\n */\r\nfunction MarkdownRenderer({ content, className }: { content: string; className?: string }) {\r\n return (\r\n <div className={cn('prose prose-sm dark:prose-invert max-w-none', className)}>\r\n <ReactMarkdown\r\n remarkPlugins={[remarkGfm]}\r\n rehypePlugins={[rehypeHighlight]}\r\n components={{\r\n h1: MarkdownH1,\r\n h2: MarkdownH2,\r\n h3: MarkdownH3,\r\n p: MarkdownParagraph,\r\n ul: MarkdownUl,\r\n ol: MarkdownOl,\r\n li: MarkdownLi,\r\n code: MarkdownCode,\r\n pre: MarkdownPre,\r\n blockquote: MarkdownBlockquote,\r\n a: MarkdownA,\r\n strong: MarkdownStrong,\r\n }}\r\n >\r\n {content}\r\n </ReactMarkdown>\r\n </div>\r\n );\r\n}\r\n\r\n// ========== Text Renderer ==========\r\n\r\n/**\r\n * Plain text renderer with escape sequence handling\r\n */\r\nfunction TextRenderer({ content, maxLines }: { content: string; maxLines?: number }) {\r\n const lines = useMemo(() => {\r\n return content.split('\\n');\r\n }, [content]);\r\n\r\n const displayLines = useMemo(() => {\r\n if (maxLines && lines.length > maxLines) {\r\n return lines.slice(0, maxLines);\r\n }\r\n return lines;\r\n }, [lines, maxLines]);\r\n\r\n const showTruncated = maxLines && lines.length > maxLines;\r\n\r\n return (\r\n <div className=\"text-sm text-foreground whitespace-pre-wrap break-words font-mono\">\r\n {displayLines.map((line, index) => (\r\n <div key={index}>{line || '\\u00A0'}</div>\r\n ))}\r\n {showTruncated && (\r\n <div className=\"text-muted-foreground italic text-xs mt-2\">\r\n // ... {lines.length - maxLines} more lines\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n// ========== Content Detection ==========\r\n\r\n/**\r\n * Auto-detect content format\r\n */\r\nfunction detectContentFormat(content: string): 'markdown' | 'json' | 'text' {\r\n const trimmed = content.trim();\r\n\r\n // Check for JSON first\r\n const jsonDetection = detectJsonContent(trimmed);\r\n if (jsonDetection.isJson) {\r\n return 'json';\r\n }\r\n\r\n // Check for Markdown patterns\r\n const markdownPatterns = [\r\n /^#{1,6}\\s+/m, // Headings\r\n /^\\*{3,}$/m, // Horizontal rule\r\n /^\\s*[-*+]\\s+/m, // Unordered lists\r\n /^\\s*\\d+\\.\\s+/m, // Ordered lists\r\n /\\[.*?\\]\\(.*?\\)/, // Links\r\n /`{3,}[\\s\\S]*?`{3,}/, // Code blocks\r\n /\\*\\*.*?\\*\\*/, // Bold\r\n /_.*?_/, // Italic\r\n /^\\s*>\\s+/m, // Blockquotes\r\n ];\r\n\r\n for (const pattern of markdownPatterns) {\r\n if (pattern.test(trimmed)) {\r\n return 'markdown';\r\n }\r\n }\r\n\r\n // Default to text\r\n return 'text';\r\n}\r\n\r\n// ========== Main Component ==========\r\n\r\n/**\r\n * MessageRenderer Component\r\n *\r\n * Renders message content with automatic format detection:\r\n * - JSON: Structured display with JsonFormatter\r\n * - Markdown: Rich text with syntax highlighting\r\n * - Text: Plain text with escape sequence handling\r\n *\r\n * Supports escape sequence handling (e.g., \\n → newline)\r\n */\r\nexport function MessageRenderer({\r\n content,\r\n className,\r\n format,\r\n maxLines,\r\n}: MessageRendererProps) {\r\n // Process escape sequences\r\n const processedContent = useMemo(() => {\r\n // Replace common escape sequences\r\n return content\r\n .replace(/\\\\n/g, '\\n')\r\n .replace(/\\\\t/g, ' ')\r\n .replace(/\\\\\"/g, '\"')\r\n .replace(/\\\\'/g, \"'\")\r\n .replace(/\\\\\\\\/g, '\\\\');\r\n }, [content]);\r\n\r\n // Auto-detect format if not specified\r\n const detectedFormat = useMemo(() => {\r\n if (format) {\r\n return format;\r\n }\r\n return detectContentFormat(processedContent);\r\n }, [processedContent, format]);\r\n\r\n // Render based on format\r\n switch (detectedFormat) {\r\n case 'json':\r\n return (\r\n <div className={className}>\r\n <JsonFormatter\r\n content={processedContent}\r\n displayMode=\"text\"\r\n maxLines={maxLines}\r\n />\r\n </div>\r\n );\r\n\r\n case 'markdown':\r\n return (\r\n <MarkdownRenderer\r\n content={processedContent}\r\n className={className}\r\n />\r\n );\r\n\r\n case 'text':\r\n default:\r\n return (\r\n <div className={className}>\r\n <TextRenderer\r\n content={processedContent}\r\n maxLines={maxLines}\r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default MessageRenderer;\r\n"],"names":["detectJson","content","trimmed","parsed","format","error","extractJson","depth","inString","escape","end","i","char","codeBlockMatch","detectJsonContent","extracted","formatJson","data","indent","getJsonSummary","length","keys","getJsonValueTypeColor","value","CopyButton","text","copied","setCopied","useState","handleCopy","useCallback","err","jsx","Button","jsxs","Fragment","Check","Copy","JsonValue","colorClass","item","index","entries","key","val","JsonCompact","JsonCard","showTypeLabels","expandedKeys","setExpandedKeys","toggleKey","prev","next","Braces","isObject","isExpanded","isArray","summary","cn","ChevronDown","ChevronRight","JsonText","maxLines","formatted","useMemo","lines","showTruncated","displayLines","line","JsonFormatter","displayMode","className","detection","markdownComponents","MarkdownCode","children","props","MarkdownPre","MarkdownParagraph","MarkdownH1","MarkdownH2","MarkdownH3","MarkdownUl","MarkdownOl","MarkdownLi","MarkdownBlockquote","MarkdownA","href","MarkdownStrong","MarkdownRenderer","ReactMarkdown","remarkGfm","rehypeHighlight","TextRenderer","detectContentFormat","markdownPatterns","pattern","MessageRenderer","processedContent"],"mappings":"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"}