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,4 +1,4 @@
1
- import{O as k,u as te,P as re,Q as ae,r as g,U as ie,Z as ne,V as de,W as le,Y as ce,_ as F,j as e,e as f,$ as oe,C as y,a as w,a0 as xe,B as p,a1 as me,a2 as ue,a3 as pe,a4 as A,a5 as D,a6 as he,X as z,a7 as K,T as $,a8 as ge}from"./index-dWT2M6Ef.js";import{L as je}from"./layout-grid-TSO0BFQE.js";import{S as ve}from"./square-pen-CnZgm6g-.js";import{S as fe}from"./save-DuO6OF0C.js";import{S as H}from"./square-check-big-BY_1YQQg.js";import{L as P}from"./lightbulb-Caj6fIQD.js";/**
1
+ import{O as k,u as te,P as re,Q as ae,r as g,U as ie,Z as ne,V as de,W as le,Y as ce,_ as F,j as e,e as f,$ as oe,C as y,a as w,a0 as xe,B as p,a1 as me,a2 as ue,a3 as pe,a4 as A,a5 as D,a6 as he,X as z,a7 as K,T as $,a8 as ge}from"./index-C5Oqx2xI.js";import{L as je}from"./layout-grid-C38fQyLs.js";import{S as ve}from"./square-pen-Byxq21zp.js";import{S as fe}from"./save-BdJ6EX4Q.js";import{S as H}from"./square-check-big-D6jItkfw.js";import{L as P}from"./lightbulb-CClbCUzu.js";/**
2
2
  * @license lucide-react v0.460.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -24,4 +24,4 @@ import{O as k,u as te,P as re,Q as ae,r as g,U as ie,Z as ne,V as de,W as le,Y a
24
24
  * This source code is licensed under the ISC license.
25
25
  * See the LICENSE file in the root directory of this source tree.
26
26
  */const U=k("ShieldAlert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);function Ie(){const{formatMessage:r}=te(),{projectOverview:l,isLoading:Q,error:L,refetch:W}=re(),{updateGuidelines:M,isUpdating:I}=ae(),[X,Z]=g.useState("category"),[E,S]=g.useState(!1),[n,o]=g.useState(null);function b(s){if(!s)return"-";try{return new Date(s).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}catch{return"-"}}const N=[{key:"feature",i18nKey:"projectOverview.devIndex.category.features",icon:ie,color:"primary"},{key:"enhancement",i18nKey:"projectOverview.devIndex.category.enhancements",icon:ne,color:"success"},{key:"bugfix",i18nKey:"projectOverview.devIndex.category.bugfixes",icon:de,color:"destructive"},{key:"refactor",i18nKey:"projectOverview.devIndex.category.refactorings",icon:le,color:"warning"},{key:"docs",i18nKey:"projectOverview.devIndex.category.documentation",icon:ce,color:"muted"}],j=g.useMemo(()=>{if(!(l!=null&&l.developmentIndex))return[];const s=[];return N.forEach(a=>{var i;(((i=l.developmentIndex)==null?void 0:i[a.key])||[]).forEach(t=>{s.push({...t,type:a.key,typeLabel:r({id:a.i18nKey}),typeIcon:a.icon,typeColor:a.color,date:t.archivedAt||t.date||t.implemented_at||""})})}),s.sort((a,i)=>new Date(i.date).getTime()-new Date(a.date).getTime())},[l==null?void 0:l.developmentIndex]),q=N.reduce((s,a)=>{var i;return s[a.key]=(((i=l==null?void 0:l.developmentIndex)==null?void 0:i[a.key])||[]).length,s},{}),Y=Object.values(q).reduce((s,a)=>s+a,0),G=N.reduce((s,a)=>s+q[a.key],0),J=g.useCallback(()=>{var a,i,t,d,x,C,v,B;const s=l==null?void 0:l.guidelines;o({conventions:{coding_style:[...((a=s==null?void 0:s.conventions)==null?void 0:a.coding_style)||[]],naming_patterns:[...((i=s==null?void 0:s.conventions)==null?void 0:i.naming_patterns)||[]],file_structure:[...((t=s==null?void 0:s.conventions)==null?void 0:t.file_structure)||[]],documentation:[...((d=s==null?void 0:s.conventions)==null?void 0:d.documentation)||[]]},constraints:{architecture:[...((x=s==null?void 0:s.constraints)==null?void 0:x.architecture)||[]],tech_stack:[...((C=s==null?void 0:s.constraints)==null?void 0:C.tech_stack)||[]],performance:[...((v=s==null?void 0:s.constraints)==null?void 0:v.performance)||[]],security:[...((B=s==null?void 0:s.constraints)==null?void 0:B.security)||[]]},quality_rules:((s==null?void 0:s.quality_rules)||[]).map(T=>({...T})),learnings:((s==null?void 0:s.learnings)||[]).map(T=>({...T}))}),S(!0)},[l==null?void 0:l.guidelines]),ee=g.useCallback(()=>{S(!1),o(null)},[]),se=g.useCallback(async()=>{if(n)try{await M(n),F.success(r({id:"projectOverview.guidelines.saveSuccess"})),S(!1),o(null)}catch{F.error(r({id:"projectOverview.guidelines.saveError"}))}},[n,M,r]);if(Q)return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"h-48 rounded-lg bg-muted animate-pulse"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:Array.from({length:4}).map((s,a)=>e.jsx("div",{className:"h-32 rounded-lg bg-muted animate-pulse"},a))})]});if(L)return e.jsxs("div",{className:"flex items-center gap-2 p-4 rounded-lg bg-destructive/10 border border-destructive/30 text-destructive",children:[e.jsx(R,{className:"h-5 w-5 flex-shrink-0"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm font-medium",children:r({id:"common.errors.loadFailed"})}),e.jsx("p",{className:"text-xs mt-0.5",children:L.message})]}),e.jsx(f,{variant:"outline",size:"sm",onClick:()=>W(),children:r({id:"common.actions.retry"})})]});if(!l)return e.jsxs("div",{className:"flex flex-col items-center justify-center py-16 px-4",children:[e.jsx(oe,{className:"h-12 w-12 text-muted-foreground mb-4"}),e.jsx("h3",{className:"text-lg font-medium text-foreground mb-2",children:r({id:"projectOverview.empty.title"})}),e.jsx("p",{className:"text-sm text-muted-foreground text-center max-w-sm mb-4",children:r({id:"projectOverview.empty.message"})})]});const{technologyStack:c,architecture:u,keyComponents:h,developmentIndex:O,guidelines:m,metadata:_}=l;return e.jsxs("div",{className:"space-y-4",children:[e.jsx(y,{children:e.jsxs(w,{className:"p-4",children:[e.jsxs("div",{className:"flex items-start justify-between mb-4 pb-3 border-b border-border",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx("h1",{className:"text-lg font-semibold text-foreground gradient-text mb-1",children:l.projectName}),e.jsx("p",{className:"text-sm text-muted-foreground",children:l.description||r({id:"projectOverview.noDescription"})})]}),e.jsxs("div",{className:"text-sm text-muted-foreground text-right",children:[e.jsxs("div",{children:[r({id:"projectOverview.header.initialized"}),":"," ",b(l.initializedAt)]}),(_==null?void 0:_.analysis_mode)&&e.jsx("div",{className:"mt-1",children:e.jsx("span",{className:"font-mono text-xs px-1.5 py-0.5 bg-muted rounded",children:_.analysis_mode})})]})]}),e.jsxs("h3",{className:"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5",children:[e.jsx(xe,{className:"w-4 h-4"}),r({id:"projectOverview.techStack.title"})]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.techStack.languages"})}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:c!=null&&c.languages&&c.languages.length>0?c.languages.map(s=>e.jsxs("div",{className:`flex items-center gap-1.5 px-2 py-1 bg-background border border-border rounded text-sm ${s.primary?"ring-1 ring-primary":""}`,children:[e.jsx("span",{className:"font-medium text-foreground",children:s.name}),e.jsx("span",{className:"text-xs text-muted-foreground",children:s.file_count}),s.primary&&e.jsx("span",{className:"text-[10px] px-1 py-0.5 bg-primary text-primary-foreground rounded",children:r({id:"projectOverview.techStack.primary"})})]},s.name)):e.jsx("span",{className:"text-muted-foreground text-sm",children:r({id:"projectOverview.techStack.noLanguages"})})})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.techStack.frameworks"})}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:c!=null&&c.frameworks&&c.frameworks.length>0?c.frameworks.map(s=>e.jsx(p,{variant:"success",className:"px-2 py-0.5 text-xs",children:s},s)):e.jsx("span",{className:"text-muted-foreground text-sm",children:r({id:"projectOverview.techStack.noFrameworks"})})})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.techStack.buildTools"})}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:c!=null&&c.build_tools&&c.build_tools.length>0?c.build_tools.map(s=>e.jsx(p,{variant:"warning",className:"px-2 py-0.5 text-xs",children:s},s)):e.jsx("span",{className:"text-muted-foreground text-sm",children:"-"})})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.techStack.testFrameworks"})}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:c!=null&&c.test_frameworks&&c.test_frameworks.length>0?c.test_frameworks.map(s=>e.jsx(p,{variant:"default",className:"px-2 py-0.5 text-xs",children:s},s)):e.jsx("span",{className:"text-muted-foreground text-sm",children:"-"})})]})]})]})}),(u||h&&h.length>0)&&e.jsx(y,{children:e.jsxs(w,{className:"p-4",children:[u&&e.jsxs(e.Fragment,{children:[e.jsxs("h3",{className:"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5",children:[e.jsx(be,{className:"w-4 h-4"}),r({id:"projectOverview.architecture.title"})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.architecture.style"})}),e.jsx("div",{className:"px-2 py-1.5 bg-background border border-border rounded",children:e.jsx("span",{className:"text-foreground font-medium text-sm",children:u.style})})]}),u.layers&&u.layers.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.architecture.layers"})}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:u.layers.map(s=>e.jsx("span",{className:"px-1.5 py-0.5 bg-muted text-foreground rounded text-xs",children:s},s))})]}),u.patterns&&u.patterns.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2",children:r({id:"projectOverview.architecture.patterns"})}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:u.patterns.map(s=>e.jsx("span",{className:"px-1.5 py-0.5 bg-muted text-foreground rounded text-xs",children:s},s))})]})]})]}),u&&h&&h.length>0&&e.jsx("div",{className:"border-t border-border my-4"}),h&&h.length>0&&e.jsxs(e.Fragment,{children:[e.jsxs("h3",{className:"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5",children:[e.jsx(R,{className:"w-4 h-4"}),r({id:"projectOverview.components.title"})]}),e.jsx("div",{className:"space-y-2",children:h.map(s=>{const a=s.importance||"low",i={high:"border-l-2 border-l-destructive bg-destructive/5",medium:"border-l-2 border-l-warning bg-warning/5",low:"border-l-2 border-l-muted-foreground bg-muted"},t={high:e.jsx(p,{variant:"destructive",className:"text-xs px-1.5 py-0",children:r({id:"projectOverview.components.importance.high"})}),medium:e.jsx(p,{variant:"warning",className:"text-xs px-1.5 py-0",children:r({id:"projectOverview.components.importance.medium"})}),low:e.jsx(p,{variant:"secondary",className:"text-xs px-1.5 py-0",children:r({id:"projectOverview.components.importance.low"})})};return e.jsxs("div",{className:`p-2.5 rounded ${i[a]||i.low}`,children:[e.jsxs("div",{className:"flex items-start justify-between mb-1",children:[e.jsx("h4",{className:"font-medium text-foreground text-sm",children:s.name}),t[a]]}),s.description&&e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:s.description}),s.responsibility&&s.responsibility.length>0&&e.jsx("ul",{className:"text-xs text-muted-foreground list-disc list-inside",children:s.responsibility.map((d,x)=>e.jsx("li",{children:d},x))})]},s.name)})})]})]})}),O&&Y>0&&e.jsx(y,{children:e.jsxs(w,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsxs("h3",{className:"text-base font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(me,{className:"w-4 h-4"}),r({id:"projectOverview.devIndex.title"})]}),e.jsx("div",{className:"flex items-center gap-1.5",children:N.map(s=>{const a=q[s.key];if(a===0)return null;const i=s.icon;return e.jsxs(p,{variant:s.color==="primary"?"default":"secondary",className:"text-xs px-1.5 py-0",children:[e.jsx(i,{className:"w-3 h-3 mr-0.5"}),a]},s.key)})})]}),e.jsxs(ue,{value:X,onValueChange:s=>Z(s),children:[e.jsx("div",{className:"flex items-center justify-between mb-3",children:e.jsxs(pe,{className:"h-8",children:[e.jsxs(A,{value:"category",className:"text-sm px-3 py-1 h-7",children:[e.jsx(je,{className:"w-3.5 h-3.5 mr-1"}),r({id:"projectOverview.devIndex.categories"})]}),e.jsxs(A,{value:"timeline",className:"text-sm px-3 py-1 h-7",children:[e.jsx(Ne,{className:"w-3.5 h-3.5 mr-1"}),r({id:"projectOverview.devIndex.timeline"})]})]})}),e.jsx(D,{value:"category",children:e.jsx("div",{className:"space-y-3",children:N.map(s=>{const a=(O==null?void 0:O[s.key])||[];if(a.length===0)return null;const i=s.icon;return e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-2 flex items-center gap-1.5",children:[e.jsx(i,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:r({id:s.i18nKey})}),e.jsx(p,{variant:"secondary",className:"text-xs px-1 py-0",children:a.length})]}),e.jsxs("div",{className:"space-y-1.5",children:[a.slice(0,5).map((t,d)=>e.jsxs("div",{className:"p-2 bg-background border border-border rounded hover:shadow-sm transition-shadow",children:[e.jsxs("div",{className:"flex items-start justify-between mb-0.5",children:[e.jsx("h5",{className:"font-medium text-foreground text-sm",children:t.title}),e.jsx("span",{className:"text-xs text-muted-foreground",children:b(t.archivedAt||t.date||t.implemented_at)})]}),t.description&&e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:t.description}),e.jsxs("div",{className:"flex items-center gap-1.5 text-xs flex-wrap",children:[t.sessionId&&e.jsx("span",{className:"px-1.5 py-0.5 bg-primary-light text-primary rounded font-mono",children:t.sessionId}),t.sub_feature&&e.jsx("span",{className:"px-1.5 py-0.5 bg-muted rounded",children:t.sub_feature}),t.status&&e.jsx("span",{className:`px-1.5 py-0.5 rounded ${t.status==="completed"?"bg-success-light text-success":"bg-warning-light text-warning"}`,children:t.status})]})]},d)),a.length>5&&e.jsxs("div",{className:"text-sm text-muted-foreground text-center py-1",children:["... and ",a.length-5," more"]})]})]},s.key)})})}),e.jsx(D,{value:"timeline",children:e.jsxs("div",{className:"space-y-3",children:[j.slice(0,20).map((s,a)=>{const i=s.typeIcon;return e.jsxs("div",{className:"flex gap-3",children:[e.jsxs("div",{className:"flex flex-col items-center",children:[e.jsx("div",{className:`w-6 h-6 rounded-full bg-${s.typeColor}-light text-${s.typeColor} flex items-center justify-center`,children:e.jsx(i,{className:"w-3 h-3"})}),a<Math.min(j.length,20)-1&&e.jsx("div",{className:"w-0.5 flex-1 bg-border mt-1.5"})]}),e.jsxs("div",{className:"flex-1 pb-3",children:[e.jsxs("div",{className:"flex items-start justify-between mb-0.5",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(p,{variant:s.typeColor==="primary"?"default":s.typeColor==="destructive"?"destructive":"secondary",className:"text-xs px-1.5 py-0",children:s.typeLabel}),e.jsx("h5",{className:"font-medium text-foreground text-sm",children:s.title})]}),e.jsx("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:b(s.date)})]}),s.description&&e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:s.description}),e.jsxs("div",{className:"flex items-center gap-1.5 text-xs",children:[s.sessionId&&e.jsx("span",{className:"px-1.5 py-0.5 bg-muted rounded font-mono",children:s.sessionId}),s.sub_feature&&e.jsx("span",{className:"px-1.5 py-0.5 bg-muted rounded",children:s.sub_feature}),s.tags&&s.tags.slice(0,3).map(t=>e.jsx("span",{className:"px-1.5 py-0.5 bg-accent rounded",children:t},t))]})]})]},a)}),j.length>20&&e.jsxs("div",{className:"text-sm text-muted-foreground text-center py-2",children:["... and ",j.length-20," more entries"]})]})})]})]})}),m&&e.jsx(y,{children:e.jsxs(w,{className:"p-6",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h3",{className:"text-lg font-semibold text-foreground flex items-center gap-2",children:[e.jsx(he,{className:"w-5 h-5"}),r({id:"projectOverview.guidelines.title"})]}),e.jsx("div",{className:"flex gap-2",children:E?e.jsxs(e.Fragment,{children:[e.jsxs(f,{variant:"outline",size:"sm",onClick:ee,disabled:I,children:[e.jsx(z,{className:"w-4 h-4 mr-1"}),r({id:"projectOverview.guidelines.cancel"})]}),e.jsxs(f,{variant:"default",size:"sm",onClick:se,disabled:I,children:[e.jsx(fe,{className:"w-4 h-4 mr-1"}),r(I?{id:"projectOverview.guidelines.saving"}:{id:"projectOverview.guidelines.save"})]})]}):e.jsxs(f,{variant:"outline",size:"sm",onClick:J,children:[e.jsx(ve,{className:"w-4 h-4 mr-1"}),r({id:"projectOverview.guidelines.edit"})]})})]}),e.jsx("div",{className:"space-y-6",children:E?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-3 flex items-center gap-2",children:[e.jsx(V,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.conventions"})})]}),e.jsx("div",{className:"space-y-3",children:Object.entries({coding_style:"codingStyle",naming_patterns:"namingPatterns",file_structure:"fileStructure",documentation:"documentation"}).map(([s,a])=>{var i;return e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-medium text-muted-foreground mb-1 block",children:r({id:`projectOverview.guidelines.conventionCategories.${a}`})}),e.jsxs("div",{className:"flex flex-wrap gap-2 p-2 border border-border rounded-lg bg-background min-h-[40px]",children:[(((i=n==null?void 0:n.conventions)==null?void 0:i[s])||[]).map((t,d)=>e.jsxs("div",{className:"flex items-center gap-1 px-2 py-1 bg-muted rounded text-sm",children:[e.jsx("span",{children:t}),e.jsx("button",{className:"ml-1 text-muted-foreground hover:text-foreground",onClick:()=>{const x={...n};x.conventions[s]=x.conventions[s].filter((C,v)=>v!==d),o(x)},children:e.jsx(z,{className:"w-3 h-3"})})]},d)),e.jsx("input",{type:"text",className:"flex-1 min-w-[120px] bg-transparent outline-none text-sm",placeholder:r({id:"projectOverview.guidelines.placeholders.addItem"}),onKeyDown:t=>{if(t.key==="Enter"&&t.currentTarget.value.trim()){const d={...n};d.conventions[s]=[...d.conventions[s]||[],t.currentTarget.value.trim()],o(d),t.currentTarget.value=""}}})]})]},s)})})]}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-3 flex items-center gap-2",children:[e.jsx(U,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.constraints"})})]}),e.jsx("div",{className:"space-y-3",children:Object.entries({architecture:"architecture",tech_stack:"techStack",performance:"performance",security:"security"}).map(([s,a])=>{var i;return e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-medium text-muted-foreground mb-1 block",children:r({id:`projectOverview.guidelines.constraintCategories.${a}`})}),e.jsxs("div",{className:"flex flex-wrap gap-2 p-2 border border-border rounded-lg bg-background min-h-[40px]",children:[(((i=n==null?void 0:n.constraints)==null?void 0:i[s])||[]).map((t,d)=>e.jsxs("div",{className:"flex items-center gap-1 px-2 py-1 bg-muted rounded text-sm",children:[e.jsx("span",{children:t}),e.jsx("button",{className:"ml-1 text-muted-foreground hover:text-foreground",onClick:()=>{const x={...n};x.constraints[s]=x.constraints[s].filter((C,v)=>v!==d),o(x)},children:e.jsx(z,{className:"w-3 h-3"})})]},d)),e.jsx("input",{type:"text",className:"flex-1 min-w-[120px] bg-transparent outline-none text-sm",placeholder:r({id:"projectOverview.guidelines.placeholders.addItem"}),onKeyDown:t=>{if(t.key==="Enter"&&t.currentTarget.value.trim()){const d={...n};d.constraints[s]=[...d.constraints[s]||[],t.currentTarget.value.trim()],o(d),t.currentTarget.value=""}}})]})]},s)})})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground flex items-center gap-2",children:[e.jsx(H,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.qualityRules"})})]}),e.jsxs(f,{variant:"ghost",size:"sm",onClick:()=>{const s={...n};s.quality_rules=[...s.quality_rules||[],{rule:"",scope:"",enforced_by:""}],o(s)},children:[e.jsx(K,{className:"w-4 h-4 mr-1"}),r({id:"projectOverview.guidelines.qualityRuleFields.addRule"})]})]}),e.jsx("div",{className:"space-y-2",children:((n==null?void 0:n.quality_rules)||[]).map((s,a)=>e.jsxs("div",{className:"p-3 border border-border rounded-lg space-y-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",className:"flex-1 px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.rule"}),value:s.rule,onChange:i=>{const t={...n};t.quality_rules[a].rule=i.target.value,o(t)}}),e.jsx("button",{className:"text-destructive hover:bg-destructive/10 p-2 rounded",onClick:()=>{const i={...n};i.quality_rules=i.quality_rules.filter((t,d)=>d!==a),o(i)},children:e.jsx($,{className:"w-4 h-4"})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx("input",{type:"text",className:"px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.scope"}),value:s.scope,onChange:i=>{const t={...n};t.quality_rules[a].scope=i.target.value,o(t)}}),e.jsx("input",{type:"text",className:"px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.enforcedBy"}),value:s.enforced_by||"",onChange:i=>{const t={...n};t.quality_rules[a].enforced_by=i.target.value,o(t)}})]})]},a))})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.learnings"})})]}),e.jsxs(f,{variant:"ghost",size:"sm",onClick:()=>{const s={...n};s.learnings=[...s.learnings||[],{insight:"",category:"",session_id:"",context:"",date:new Date().toISOString()}],o(s)},children:[e.jsx(K,{className:"w-4 h-4 mr-1"}),r({id:"projectOverview.guidelines.learningFields.addLearning"})]})]}),e.jsx("div",{className:"space-y-2",children:((n==null?void 0:n.learnings)||[]).map((s,a)=>e.jsxs("div",{className:"p-3 border border-border rounded-lg space-y-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",className:"flex-1 px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.insight"}),value:s.insight,onChange:i=>{const t={...n};t.learnings[a].insight=i.target.value,o(t)}}),e.jsx("button",{className:"text-destructive hover:bg-destructive/10 p-2 rounded",onClick:()=>{const i={...n};i.learnings=i.learnings.filter((t,d)=>d!==a),o(i)},children:e.jsx($,{className:"w-4 h-4"})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx("input",{type:"text",className:"px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.category"}),value:s.category||"",onChange:i=>{const t={...n};t.learnings[a].category=i.target.value,o(t)}}),e.jsx("input",{type:"text",className:"px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.sessionId"}),value:s.session_id||"",onChange:i=>{const t={...n};t.learnings[a].session_id=i.target.value,o(t)}})]}),e.jsx("textarea",{className:"w-full px-2 py-1 text-sm border border-border rounded bg-background",placeholder:r({id:"projectOverview.guidelines.placeholders.context"}),rows:2,value:s.context||"",onChange:i=>{const t={...n};t.learnings[a].context=i.target.value,o(t)}})]},a))})]})]}):e.jsxs(e.Fragment,{children:[m.conventions&&e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-3 flex items-center gap-2",children:[e.jsx(V,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.conventions"})})]}),e.jsx("div",{className:"space-y-2",children:Object.entries(m.conventions).map(([s,a])=>{const i=Array.isArray(a)?a:[];return i.length===0?null:e.jsx("div",{className:"space-y-1",children:i.map((t,d)=>e.jsxs("div",{className:"flex items-start gap-3 p-3 bg-background border border-border rounded-lg",children:[e.jsx("span",{className:"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded",children:s}),e.jsx("span",{className:"text-sm text-foreground",children:t})]},d))},s)})})]}),m.constraints&&e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-3 flex items-center gap-2",children:[e.jsx(U,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.constraints"})})]}),e.jsx("div",{className:"space-y-2",children:Object.entries(m.constraints).map(([s,a])=>{const i=Array.isArray(a)?a:[];return i.length===0?null:e.jsx("div",{className:"space-y-1",children:i.map((t,d)=>e.jsxs("div",{className:"flex items-start gap-3 p-3 bg-background border border-border rounded-lg",children:[e.jsx("span",{className:"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded",children:s}),e.jsx("span",{className:"text-sm text-foreground",children:t})]},d))},s)})})]}),m.quality_rules&&e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-3 flex items-center gap-2",children:[e.jsx(H,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.qualityRules"})})]}),m.quality_rules.length>0?e.jsx("div",{className:"space-y-2",children:m.quality_rules.map((s,a)=>e.jsxs("div",{className:"p-3 bg-background border border-border rounded-lg",children:[e.jsxs("div",{className:"flex items-start justify-between mb-1",children:[e.jsx("span",{className:"text-sm text-foreground font-medium",children:s.rule}),s.enforced_by&&e.jsx("span",{className:"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded",children:s.enforced_by})]}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[r({id:"projectOverview.guidelines.scope"}),": ",s.scope]})]},a))}):e.jsx("p",{className:"text-sm text-muted-foreground italic",children:r({id:"projectOverview.guidelines.noQualityRules"})||"No quality rules defined yet. Switch to edit mode to add rules."})]}),m.learnings&&e.jsxs("div",{children:[e.jsxs("h4",{className:"text-sm font-semibold text-foreground mb-3 flex items-center gap-2",children:[e.jsx(P,{className:"w-4 h-4"}),e.jsx("span",{children:r({id:"projectOverview.guidelines.learnings"})})]}),m.learnings.length>0?e.jsx("div",{className:"space-y-2",children:m.learnings.map((s,a)=>e.jsxs("div",{className:"p-3 bg-background border border-border rounded-lg border-l-4 border-l-primary",children:[e.jsxs("div",{className:"flex items-start justify-between mb-2",children:[e.jsx("span",{className:"text-sm text-foreground",children:s.insight}),e.jsx("span",{className:"text-xs text-muted-foreground whitespace-nowrap ml-2",children:b(s.date)})]}),e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[s.category&&e.jsx("span",{className:"px-2 py-0.5 bg-muted text-muted-foreground rounded",children:s.category}),s.session_id&&e.jsx("span",{className:"px-2 py-0.5 bg-primary-light text-primary rounded font-mono",children:s.session_id})]}),s.context&&e.jsx("p",{className:"text-xs text-muted-foreground mt-2",children:s.context})]},a))}):e.jsx("p",{className:"text-sm text-muted-foreground italic",children:r({id:"projectOverview.guidelines.noLearnings"})||"No learning summaries yet. Switch to edit mode to add learnings."})]})]})})]})}),e.jsx(y,{children:e.jsxs(w,{className:"p-6",children:[e.jsxs("h3",{className:"text-lg font-semibold text-foreground mb-4 flex items-center gap-2",children:[e.jsx(ge,{className:"w-5 h-5"}),r({id:"projectOverview.stats.title"})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"text-center p-4 bg-background rounded-lg",children:[e.jsx("div",{className:"text-3xl font-bold text-primary mb-1",children:G}),e.jsx("div",{className:"text-sm text-muted-foreground",children:r({id:"projectOverview.stats.totalFeatures"})})]}),e.jsxs("div",{className:"text-center p-4 bg-background rounded-lg",children:[e.jsx("div",{className:"text-sm text-muted-foreground mb-1",children:r({id:"projectOverview.stats.lastUpdated"})}),e.jsx("div",{className:"text-sm font-medium text-foreground",children:j.length>0?b(j[0].date):"-"})]})]})]})})]})}export{Ie as ProjectOverviewPage,Ie as default};
27
- //# sourceMappingURL=ProjectOverviewPage-DBB_-FzV.js.map
27
+ //# sourceMappingURL=ProjectOverviewPage-BeXTMsdo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectOverviewPage-DBB_-FzV.js","sources":["../../../../node_modules/lucide-react/dist/esm/icons/blocks.js","../../../../node_modules/lucide-react/dist/esm/icons/book-marked.js","../../../../node_modules/lucide-react/dist/esm/icons/component.js","../../../../node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js","../../../../node_modules/lucide-react/dist/esm/icons/shield-alert.js","../../src/pages/ProjectOverviewPage.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Blocks = createLucideIcon(\"Blocks\", [\n [\"rect\", { width: \"7\", height: \"7\", x: \"14\", y: \"3\", rx: \"1\", key: \"6d4xhi\" }],\n [\n \"path\",\n {\n d: \"M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3\",\n key: \"1fpvtg\"\n }\n ]\n]);\n\nexport { Blocks as default };\n//# sourceMappingURL=blocks.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst BookMarked = createLucideIcon(\"BookMarked\", [\n [\"path\", { d: \"M10 2v8l3-3 3 3V2\", key: \"sqw3rj\" }],\n [\n \"path\",\n {\n d: \"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20\",\n key: \"k3hazp\"\n }\n ]\n]);\n\nexport { BookMarked as default };\n//# sourceMappingURL=book-marked.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Component = createLucideIcon(\"Component\", [\n [\n \"path\",\n {\n d: \"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z\",\n key: \"1uwlt4\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2.297 11.293a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0z\",\n key: \"10291m\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8.916 17.912a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0z\",\n key: \"1tqoq1\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8.916 4.674a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z\",\n key: \"1x6lto\"\n }\n ]\n]);\n\nexport { Component as default };\n//# sourceMappingURL=component.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst GitCommitHorizontal = createLucideIcon(\"GitCommitHorizontal\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"line\", { x1: \"3\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1dyftd\" }],\n [\"line\", { x1: \"15\", x2: \"21\", y1: \"12\", y2: \"12\", key: \"oup4p8\" }]\n]);\n\nexport { GitCommitHorizontal as default };\n//# sourceMappingURL=git-commit-horizontal.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ShieldAlert = createLucideIcon(\"ShieldAlert\", [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ],\n [\"path\", { d: \"M12 8v4\", key: \"1got3b\" }],\n [\"path\", { d: \"M12 16h.01\", key: \"1drbdi\" }]\n]);\n\nexport { ShieldAlert as default };\n//# sourceMappingURL=shield-alert.js.map\n","// ========================================\r\n// ProjectOverviewPage Component\r\n// ========================================\r\n// Project overview page displaying architecture, tech stack, and components\r\n\r\nimport * as React from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport {\r\n Code2,\r\n Blocks,\r\n Component,\r\n GitBranch,\r\n BarChart3,\r\n ScrollText,\r\n ClipboardList,\r\n Sparkles,\r\n Zap,\r\n Bug,\r\n Wrench,\r\n BookOpen,\r\n CheckSquare,\r\n Lightbulb,\r\n BookMarked,\r\n ShieldAlert,\r\n LayoutGrid,\r\n GitCommitHorizontal,\r\n Edit,\r\n Save,\r\n X,\r\n Plus,\r\n Trash2,\r\n} from 'lucide-react';\r\nimport { useProjectOverview, useUpdateGuidelines } from '@/hooks/useProjectOverview';\r\nimport { toast } from 'sonner';\r\nimport type {\r\n KeyComponent,\r\n DevelopmentIndexEntry,\r\n GuidelineEntry,\r\n LearningEntry,\r\n ProjectGuidelines,\r\n} from '@/lib/api';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Card, CardContent } from '@/components/ui/Card';\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';\r\n\r\ntype DevIndexView = 'category' | 'timeline';\r\n\r\n// Helper function to format date (currently unused but kept for future use)\r\n// @ts-ignore - kept for potential future use\r\nfunction formatDate(dateString: string | undefined): string {\r\n if (!dateString) return '-';\r\n try {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString(undefined, {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n } catch {\r\n return '-';\r\n }\r\n}\r\n\r\n/**\r\n * ProjectOverviewPage component - Display project architecture and tech stack\r\n */\r\nexport function ProjectOverviewPage() {\r\n const { formatMessage } = useIntl();\r\n const { projectOverview, isLoading, error, refetch } = useProjectOverview();\r\n const { updateGuidelines, isUpdating } = useUpdateGuidelines();\r\n const [devIndexView, setDevIndexView] = React.useState<DevIndexView>('category');\r\n const [isEditMode, setIsEditMode] = React.useState(false);\r\n const [editedGuidelines, setEditedGuidelines] = React.useState<ProjectGuidelines | null>(null);\r\n\r\n // Helper function to format date\r\n function formatDate(dateString: string | undefined): string {\r\n if (!dateString) return '-';\r\n try {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString(undefined, {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n } catch {\r\n return '-';\r\n }\r\n }\r\n\r\n // Define dev index categories (before any conditional logic)\r\n const devIndexCategories = [\r\n { key: 'feature', i18nKey: 'projectOverview.devIndex.category.features', icon: Sparkles, color: 'primary' },\r\n { key: 'enhancement', i18nKey: 'projectOverview.devIndex.category.enhancements', icon: Zap, color: 'success' },\r\n { key: 'bugfix', i18nKey: 'projectOverview.devIndex.category.bugfixes', icon: Bug, color: 'destructive' },\r\n { key: 'refactor', i18nKey: 'projectOverview.devIndex.category.refactorings', icon: Wrench, color: 'warning' },\r\n { key: 'docs', i18nKey: 'projectOverview.devIndex.category.documentation', icon: BookOpen, color: 'muted' },\r\n ];\r\n\r\n // Collect all entries for timeline (compute before any conditional logic)\r\n const allDevEntries = React.useMemo(() => {\r\n if (!projectOverview?.developmentIndex) return [];\r\n\r\n const entries: Array<{\r\n title: string;\r\n description?: string;\r\n type: string;\r\n typeLabel: string;\r\n typeIcon: React.ElementType;\r\n typeColor: string;\r\n date: string;\r\n sessionId?: string;\r\n sub_feature?: string;\r\n tags?: string[];\r\n }> = [];\r\n\r\n devIndexCategories.forEach((cat) => {\r\n (projectOverview.developmentIndex?.[cat.key] || []).forEach((entry: DevelopmentIndexEntry) => {\r\n entries.push({\r\n ...entry,\r\n type: cat.key,\r\n typeLabel: formatMessage({ id: cat.i18nKey }),\r\n typeIcon: cat.icon,\r\n typeColor: cat.color,\r\n date: entry.archivedAt || entry.date || entry.implemented_at || '',\r\n });\r\n });\r\n });\r\n\r\n return entries.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());\r\n }, [projectOverview?.developmentIndex]);\r\n\r\n // Calculate totals for development index\r\n const devIndexTotals = devIndexCategories.reduce((acc, cat) => {\r\n acc[cat.key] = (projectOverview?.developmentIndex?.[cat.key] || []).length;\r\n return acc;\r\n }, {} as Record<string, number>);\r\n\r\n const totalEntries = Object.values(devIndexTotals).reduce((sum, count) => sum + count, 0);\r\n\r\n // Calculate statistics\r\n const totalFeatures = devIndexCategories.reduce((sum, cat) => sum + devIndexTotals[cat.key], 0);\r\n\r\n // Guidelines edit handlers\r\n const handleEditStart = React.useCallback(() => {\r\n const g = projectOverview?.guidelines;\r\n setEditedGuidelines({\r\n conventions: {\r\n coding_style: [...(g?.conventions?.coding_style || [])],\r\n naming_patterns: [...(g?.conventions?.naming_patterns || [])],\r\n file_structure: [...(g?.conventions?.file_structure || [])],\r\n documentation: [...(g?.conventions?.documentation || [])],\r\n },\r\n constraints: {\r\n architecture: [...(g?.constraints?.architecture || [])],\r\n tech_stack: [...(g?.constraints?.tech_stack || [])],\r\n performance: [...(g?.constraints?.performance || [])],\r\n security: [...(g?.constraints?.security || [])],\r\n },\r\n quality_rules: (g?.quality_rules || []).map((r) => ({ ...r })),\r\n learnings: (g?.learnings || []).map((l) => ({ ...l })),\r\n });\r\n setIsEditMode(true);\r\n }, [projectOverview?.guidelines]);\r\n\r\n const handleEditCancel = React.useCallback(() => {\r\n setIsEditMode(false);\r\n setEditedGuidelines(null);\r\n }, []);\r\n\r\n const handleSave = React.useCallback(async () => {\r\n if (!editedGuidelines) return;\r\n try {\r\n await updateGuidelines(editedGuidelines);\r\n toast.success(formatMessage({ id: 'projectOverview.guidelines.saveSuccess' }));\r\n setIsEditMode(false);\r\n setEditedGuidelines(null);\r\n } catch {\r\n toast.error(formatMessage({ id: 'projectOverview.guidelines.saveError' }));\r\n }\r\n }, [editedGuidelines, updateGuidelines, formatMessage]);\r\n\r\n // Render loading state\r\n if (isLoading) {\r\n return (\r\n <div className=\"space-y-6\">\r\n <div className=\"h-48 rounded-lg bg-muted animate-pulse\" />\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {Array.from({ length: 4 }).map((_, i) => (\r\n <div key={i} className=\"h-32 rounded-lg bg-muted animate-pulse\" />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Render error state\r\n if (error) {\r\n return (\r\n <div className=\"flex items-center gap-2 p-4 rounded-lg bg-destructive/10 border border-destructive/30 text-destructive\">\r\n <Component className=\"h-5 w-5 flex-shrink-0\" />\r\n <div className=\"flex-1\">\r\n <p className=\"text-sm font-medium\">{formatMessage({ id: 'common.errors.loadFailed' })}</p>\r\n <p className=\"text-xs mt-0.5\">{error.message}</p>\r\n </div>\r\n <Button variant=\"outline\" size=\"sm\" onClick={() => refetch()}>\r\n {formatMessage({ id: 'common.actions.retry' })}\r\n </Button>\r\n </div>\r\n );\r\n }\r\n\r\n // Render empty state\r\n if (!projectOverview) {\r\n return (\r\n <div className=\"flex flex-col items-center justify-center py-16 px-4\">\r\n <ClipboardList className=\"h-12 w-12 text-muted-foreground mb-4\" />\r\n <h3 className=\"text-lg font-medium text-foreground mb-2\">\r\n {formatMessage({ id: 'projectOverview.empty.title' })}\r\n </h3>\r\n <p className=\"text-sm text-muted-foreground text-center max-w-sm mb-4\">\r\n {formatMessage({ id: 'projectOverview.empty.message' })}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n const { technologyStack, architecture, keyComponents, developmentIndex, guidelines, metadata } = projectOverview;\r\n\r\n return (\r\n <div className=\"space-y-4\">\r\n {/* Project Header + Technology Stack - Combined */}\r\n <Card>\r\n <CardContent className=\"p-4\">\r\n {/* Header Row */}\r\n <div className=\"flex items-start justify-between mb-4 pb-3 border-b border-border\">\r\n <div className=\"flex-1\">\r\n <h1 className=\"text-lg font-semibold text-foreground gradient-text mb-1\">\r\n {projectOverview.projectName}\r\n </h1>\r\n <p className=\"text-sm text-muted-foreground\">\r\n {projectOverview.description || formatMessage({ id: 'projectOverview.noDescription' })}\r\n </p>\r\n </div>\r\n <div className=\"text-sm text-muted-foreground text-right\">\r\n <div>\r\n {formatMessage({ id: 'projectOverview.header.initialized' })}:{' '}\r\n {formatDate(projectOverview.initializedAt)}\r\n </div>\r\n {metadata?.analysis_mode && (\r\n <div className=\"mt-1\">\r\n <span className=\"font-mono text-xs px-1.5 py-0.5 bg-muted rounded\">\r\n {metadata.analysis_mode}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Technology Stack */}\r\n <h3 className=\"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5\">\r\n <Code2 className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.techStack.title' })}\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\r\n {/* Languages */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.languages' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.languages && technologyStack.languages.length > 0 ? (\r\n technologyStack.languages.map((lang: { name: string; file_count: number; primary?: boolean }) => (\r\n <div\r\n key={lang.name}\r\n className={`flex items-center gap-1.5 px-2 py-1 bg-background border border-border rounded text-sm ${\r\n lang.primary ? 'ring-1 ring-primary' : ''\r\n }`}\r\n >\r\n <span className=\"font-medium text-foreground\">{lang.name}</span>\r\n <span className=\"text-xs text-muted-foreground\">{lang.file_count}</span>\r\n {lang.primary && (\r\n <span className=\"text-[10px] px-1 py-0.5 bg-primary text-primary-foreground rounded\">\r\n {formatMessage({ id: 'projectOverview.techStack.primary' })}\r\n </span>\r\n )}\r\n </div>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">\r\n {formatMessage({ id: 'projectOverview.techStack.noLanguages' })}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Frameworks */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.frameworks' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.frameworks && technologyStack.frameworks.length > 0 ? (\r\n technologyStack.frameworks.map((fw: string) => (\r\n <Badge key={fw} variant=\"success\" className=\"px-2 py-0.5 text-xs\">\r\n {fw}\r\n </Badge>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">\r\n {formatMessage({ id: 'projectOverview.techStack.noFrameworks' })}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Build Tools */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.buildTools' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.build_tools && technologyStack.build_tools.length > 0 ? (\r\n technologyStack.build_tools.map((tool: string) => (\r\n <Badge key={tool} variant=\"warning\" className=\"px-2 py-0.5 text-xs\">\r\n {tool}\r\n </Badge>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">-</span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Test Frameworks */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.testFrameworks' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.test_frameworks && technologyStack.test_frameworks.length > 0 ? (\r\n technologyStack.test_frameworks.map((fw: string) => (\r\n <Badge key={fw} variant=\"default\" className=\"px-2 py-0.5 text-xs\">\r\n {fw}\r\n </Badge>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">-</span>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n\r\n {/* Architecture & Key Components - Merged */}\r\n {(architecture || (keyComponents && keyComponents.length > 0)) && (\r\n <Card>\r\n <CardContent className=\"p-4\">\r\n {/* Architecture Section */}\r\n {architecture && (\r\n <>\r\n <h3 className=\"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5\">\r\n <Blocks className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.architecture.title' })}\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\r\n {/* Style */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.architecture.style' })}\r\n </h4>\r\n <div className=\"px-2 py-1.5 bg-background border border-border rounded\">\r\n <span className=\"text-foreground font-medium text-sm\">{architecture.style}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Layers */}\r\n {architecture.layers && architecture.layers.length > 0 && (\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.architecture.layers' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {architecture.layers.map((layer: string) => (\r\n <span key={layer} className=\"px-1.5 py-0.5 bg-muted text-foreground rounded text-xs\">\r\n {layer}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Patterns */}\r\n {architecture.patterns && architecture.patterns.length > 0 && (\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.architecture.patterns' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {architecture.patterns.map((pattern: string) => (\r\n <span key={pattern} className=\"px-1.5 py-0.5 bg-muted text-foreground rounded text-xs\">\r\n {pattern}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n\r\n {/* Divider between Architecture and Components */}\r\n {architecture && keyComponents && keyComponents.length > 0 && (\r\n <div className=\"border-t border-border my-4\" />\r\n )}\r\n\r\n {/* Key Components Section */}\r\n {keyComponents && keyComponents.length > 0 && (\r\n <>\r\n <h3 className=\"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5\">\r\n <Component className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.components.title' })}\r\n </h3>\r\n\r\n <div className=\"space-y-2\">\r\n {keyComponents.map((comp: KeyComponent) => {\r\n const importance = comp.importance || 'low';\r\n const importanceColors: Record<string, string> = {\r\n high: 'border-l-2 border-l-destructive bg-destructive/5',\r\n medium: 'border-l-2 border-l-warning bg-warning/5',\r\n low: 'border-l-2 border-l-muted-foreground bg-muted',\r\n };\r\n const importanceBadges: Record<string, React.ReactElement> = {\r\n high: (\r\n <Badge variant=\"destructive\" className=\"text-xs px-1.5 py-0\">\r\n {formatMessage({ id: 'projectOverview.components.importance.high' })}\r\n </Badge>\r\n ),\r\n medium: (\r\n <Badge variant=\"warning\" className=\"text-xs px-1.5 py-0\">\r\n {formatMessage({ id: 'projectOverview.components.importance.medium' })}\r\n </Badge>\r\n ),\r\n low: (\r\n <Badge variant=\"secondary\" className=\"text-xs px-1.5 py-0\">\r\n {formatMessage({ id: 'projectOverview.components.importance.low' })}\r\n </Badge>\r\n ),\r\n };\r\n\r\n return (\r\n <div\r\n key={comp.name}\r\n className={`p-2.5 rounded ${importanceColors[importance] || importanceColors.low}`}\r\n >\r\n <div className=\"flex items-start justify-between mb-1\">\r\n <h4 className=\"font-medium text-foreground text-sm\">{comp.name}</h4>\r\n {importanceBadges[importance]}\r\n </div>\r\n {comp.description && (\r\n <p className=\"text-xs text-muted-foreground mb-1\">{comp.description}</p>\r\n )}\r\n {comp.responsibility && comp.responsibility.length > 0 && (\r\n <ul className=\"text-xs text-muted-foreground list-disc list-inside\">\r\n {comp.responsibility.map((resp: string, i: number) => (\r\n <li key={i}>{resp}</li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </>\r\n )}\r\n </CardContent>\r\n </Card>\r\n )}\r\n\r\n {/* Development Index */}\r\n {developmentIndex && totalEntries > 0 && (\r\n <Card>\r\n <CardContent className=\"p-4\">\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h3 className=\"text-base font-semibold text-foreground flex items-center gap-1.5\">\r\n <GitBranch className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.devIndex.title' })}\r\n </h3>\r\n <div className=\"flex items-center gap-1.5\">\r\n {devIndexCategories.map((cat) => {\r\n const count = devIndexTotals[cat.key];\r\n if (count === 0) return null;\r\n const Icon = cat.icon;\r\n return (\r\n <Badge key={cat.key} variant={cat.color === 'primary' ? 'default' : 'secondary'} className=\"text-xs px-1.5 py-0\">\r\n <Icon className=\"w-3 h-3 mr-0.5\" />\r\n {count}\r\n </Badge>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n <Tabs value={devIndexView} onValueChange={(v) => setDevIndexView(v as DevIndexView)}>\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <TabsList className=\"h-8\">\r\n <TabsTrigger value=\"category\" className=\"text-sm px-3 py-1 h-7\">\r\n <LayoutGrid className=\"w-3.5 h-3.5 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.devIndex.categories' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"timeline\" className=\"text-sm px-3 py-1 h-7\">\r\n <GitCommitHorizontal className=\"w-3.5 h-3.5 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.devIndex.timeline' })}\r\n </TabsTrigger>\r\n </TabsList>\r\n </div>\r\n\r\n <TabsContent value=\"category\">\r\n <div className=\"space-y-3\">\r\n {devIndexCategories.map((cat) => {\r\n const entries = developmentIndex?.[cat.key] || [];\r\n if (entries.length === 0) return null;\r\n const Icon = cat.icon;\r\n\r\n return (\r\n <div key={cat.key}>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-1.5\">\r\n <Icon className=\"w-3.5 h-3.5\" />\r\n <span>{formatMessage({ id: cat.i18nKey })}</span>\r\n <Badge variant=\"secondary\" className=\"text-xs px-1 py-0\">{entries.length}</Badge>\r\n </h4>\r\n <div className=\"space-y-1.5\">\r\n {entries.slice(0, 5).map((entry: DevelopmentIndexEntry & { type?: string; typeLabel?: string; typeIcon?: React.ElementType; typeColor?: string; date?: string }, i: number) => (\r\n <div\r\n key={i}\r\n className=\"p-2 bg-background border border-border rounded hover:shadow-sm transition-shadow\"\r\n >\r\n <div className=\"flex items-start justify-between mb-0.5\">\r\n <h5 className=\"font-medium text-foreground text-sm\">{entry.title}</h5>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {formatDate(entry.archivedAt || entry.date || entry.implemented_at)}\r\n </span>\r\n </div>\r\n {entry.description && (\r\n <p className=\"text-xs text-muted-foreground mb-1\">{entry.description}</p>\r\n )}\r\n <div className=\"flex items-center gap-1.5 text-xs flex-wrap\">\r\n {entry.sessionId && (\r\n <span className=\"px-1.5 py-0.5 bg-primary-light text-primary rounded font-mono\">\r\n {entry.sessionId}\r\n </span>\r\n )}\r\n {entry.sub_feature && (\r\n <span className=\"px-1.5 py-0.5 bg-muted rounded\">{entry.sub_feature}</span>\r\n )}\r\n {entry.status && (\r\n <span\r\n className={`px-1.5 py-0.5 rounded ${\r\n entry.status === 'completed'\r\n ? 'bg-success-light text-success'\r\n : 'bg-warning-light text-warning'\r\n }`}\r\n >\r\n {entry.status}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n {entries.length > 5 && (\r\n <div className=\"text-sm text-muted-foreground text-center py-1\">\r\n ... and {entries.length - 5} more\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </TabsContent>\r\n\r\n <TabsContent value=\"timeline\">\r\n <div className=\"space-y-3\">\r\n {allDevEntries.slice(0, 20).map((entry, i) => {\r\n const Icon = entry.typeIcon;\r\n return (\r\n <div key={i} className=\"flex gap-3\">\r\n <div className=\"flex flex-col items-center\">\r\n <div\r\n className={`w-6 h-6 rounded-full bg-${entry.typeColor}-light text-${entry.typeColor} flex items-center justify-center`}\r\n >\r\n <Icon className=\"w-3 h-3\" />\r\n </div>\r\n {i < Math.min(allDevEntries.length, 20) - 1 && (\r\n <div className=\"w-0.5 flex-1 bg-border mt-1.5\" />\r\n )}\r\n </div>\r\n <div className=\"flex-1 pb-3\">\r\n <div className=\"flex items-start justify-between mb-0.5\">\r\n <div className=\"flex items-center gap-1.5\">\r\n <Badge\r\n variant={\r\n entry.typeColor === 'primary'\r\n ? 'default'\r\n : entry.typeColor === 'destructive'\r\n ? 'destructive'\r\n : 'secondary'\r\n }\r\n className=\"text-xs px-1.5 py-0\"\r\n >\r\n {entry.typeLabel}\r\n </Badge>\r\n <h5 className=\"font-medium text-foreground text-sm\">{entry.title}</h5>\r\n </div>\r\n <span className=\"text-xs text-muted-foreground whitespace-nowrap\">\r\n {formatDate(entry.date)}\r\n </span>\r\n </div>\r\n {entry.description && (\r\n <p className=\"text-xs text-muted-foreground mb-1\">{entry.description}</p>\r\n )}\r\n <div className=\"flex items-center gap-1.5 text-xs\">\r\n {entry.sessionId && (\r\n <span className=\"px-1.5 py-0.5 bg-muted rounded font-mono\">\r\n {entry.sessionId}\r\n </span>\r\n )}\r\n {entry.sub_feature && (\r\n <span className=\"px-1.5 py-0.5 bg-muted rounded\">{entry.sub_feature}</span>\r\n )}\r\n {entry.tags &&\r\n entry.tags.slice(0, 3).map((tag) => (\r\n <span key={tag} className=\"px-1.5 py-0.5 bg-accent rounded\">\r\n {tag}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n {allDevEntries.length > 20 && (\r\n <div className=\"text-sm text-muted-foreground text-center py-2\">\r\n ... and {allDevEntries.length - 20} more entries\r\n </div>\r\n )}\r\n </div>\r\n </TabsContent>\r\n </Tabs>\r\n </CardContent>\r\n </Card>\r\n )}\r\n\r\n {/* Guidelines */}\r\n {guidelines && (\r\n <Card>\r\n <CardContent className=\"p-6\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h3 className=\"text-lg font-semibold text-foreground flex items-center gap-2\">\r\n <ScrollText className=\"w-5 h-5\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.title' })}\r\n </h3>\r\n <div className=\"flex gap-2\">\r\n {!isEditMode ? (\r\n <Button variant=\"outline\" size=\"sm\" onClick={handleEditStart}>\r\n <Edit className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.edit' })}\r\n </Button>\r\n ) : (\r\n <>\r\n <Button variant=\"outline\" size=\"sm\" onClick={handleEditCancel} disabled={isUpdating}>\r\n <X className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.cancel' })}\r\n </Button>\r\n <Button variant=\"default\" size=\"sm\" onClick={handleSave} disabled={isUpdating}>\r\n <Save className=\"w-4 h-4 mr-1\" />\r\n {isUpdating ? formatMessage({ id: 'projectOverview.guidelines.saving' }) : formatMessage({ id: 'projectOverview.guidelines.save' })}\r\n </Button>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"space-y-6\">\r\n {!isEditMode ? (\r\n <>\r\n {/* Read-only Mode - Conventions */}\r\n {guidelines.conventions && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <BookMarked className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.conventions' })}</span>\r\n </h4>\r\n <div className=\"space-y-2\">\r\n {Object.entries(guidelines.conventions).map(([key, items]) => {\r\n const itemList = Array.isArray(items) ? items : [];\r\n if (itemList.length === 0) return null;\r\n return (\r\n <div key={key} className=\"space-y-1\">\r\n {itemList.map((item: string, i: number) => (\r\n <div\r\n key={i}\r\n className=\"flex items-start gap-3 p-3 bg-background border border-border rounded-lg\"\r\n >\r\n <span className=\"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {key}\r\n </span>\r\n <span className=\"text-sm text-foreground\">{item}</span>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Read-only Mode - Constraints */}\r\n {guidelines.constraints && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <ShieldAlert className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.constraints' })}</span>\r\n </h4>\r\n <div className=\"space-y-2\">\r\n {Object.entries(guidelines.constraints).map(([key, items]) => {\r\n const itemList = Array.isArray(items) ? items : [];\r\n if (itemList.length === 0) return null;\r\n return (\r\n <div key={key} className=\"space-y-1\">\r\n {itemList.map((item: string, i: number) => (\r\n <div\r\n key={i}\r\n className=\"flex items-start gap-3 p-3 bg-background border border-border rounded-lg\"\r\n >\r\n <span className=\"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {key}\r\n </span>\r\n <span className=\"text-sm text-foreground\">{item}</span>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Read-only Mode - Quality Rules */}\r\n {guidelines.quality_rules && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <CheckSquare className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.qualityRules' })}</span>\r\n </h4>\r\n {guidelines.quality_rules.length > 0 ? (\r\n <div className=\"space-y-2\">\r\n {guidelines.quality_rules.map((rule: GuidelineEntry, i: number) => (\r\n <div key={i} className=\"p-3 bg-background border border-border rounded-lg\">\r\n <div className=\"flex items-start justify-between mb-1\">\r\n <span className=\"text-sm text-foreground font-medium\">{rule.rule}</span>\r\n {rule.enforced_by && (\r\n <span className=\"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {rule.enforced_by}\r\n </span>\r\n )}\r\n </div>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {formatMessage({ id: 'projectOverview.guidelines.scope' })}: {rule.scope}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n ) : (\r\n <p className=\"text-sm text-muted-foreground italic\">\r\n {formatMessage({ id: 'projectOverview.guidelines.noQualityRules' }) || 'No quality rules defined yet. Switch to edit mode to add rules.'}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Read-only Mode - Learnings */}\r\n {guidelines.learnings && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <Lightbulb className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.learnings' })}</span>\r\n </h4>\r\n {guidelines.learnings.length > 0 ? (\r\n <div className=\"space-y-2\">\r\n {guidelines.learnings.map((learning: LearningEntry, i: number) => (\r\n <div\r\n key={i}\r\n className=\"p-3 bg-background border border-border rounded-lg border-l-4 border-l-primary\"\r\n >\r\n <div className=\"flex items-start justify-between mb-2\">\r\n <span className=\"text-sm text-foreground\">{learning.insight}</span>\r\n <span className=\"text-xs text-muted-foreground whitespace-nowrap ml-2\">\r\n {formatDate(learning.date)}\r\n </span>\r\n </div>\r\n <div className=\"flex items-center gap-2 text-xs\">\r\n {learning.category && (\r\n <span className=\"px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {learning.category}\r\n </span>\r\n )}\r\n {learning.session_id && (\r\n <span className=\"px-2 py-0.5 bg-primary-light text-primary rounded font-mono\">\r\n {learning.session_id}\r\n </span>\r\n )}\r\n </div>\r\n {learning.context && (\r\n <p className=\"text-xs text-muted-foreground mt-2\">{learning.context}</p>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n ) : (\r\n <p className=\"text-sm text-muted-foreground italic\">\r\n {formatMessage({ id: 'projectOverview.guidelines.noLearnings' }) || 'No learning summaries yet. Switch to edit mode to add learnings.'}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <>\r\n {/* Edit Mode - Conventions */}\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <BookMarked className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.conventions' })}</span>\r\n </h4>\r\n <div className=\"space-y-3\">\r\n {Object.entries({\r\n coding_style: 'codingStyle',\r\n naming_patterns: 'namingPatterns',\r\n file_structure: 'fileStructure',\r\n documentation: 'documentation',\r\n }).map(([key, labelKey]) => (\r\n <div key={key}>\r\n <label className=\"text-xs font-medium text-muted-foreground mb-1 block\">\r\n {formatMessage({ id: `projectOverview.guidelines.conventionCategories.${labelKey}` })}\r\n </label>\r\n <div className=\"flex flex-wrap gap-2 p-2 border border-border rounded-lg bg-background min-h-[40px]\">\r\n {((editedGuidelines?.conventions as any)?.[key] || []).map((item: string, idx: number) => (\r\n <div key={idx} className=\"flex items-center gap-1 px-2 py-1 bg-muted rounded text-sm\">\r\n <span>{item}</span>\r\n <button\r\n className=\"ml-1 text-muted-foreground hover:text-foreground\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n (updated.conventions as any)[key] = ((updated.conventions as any)[key] as string[]).filter((_: string, i: number) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <X className=\"w-3 h-3\" />\r\n </button>\r\n </div>\r\n ))}\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 min-w-[120px] bg-transparent outline-none text-sm\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.addItem' })}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' && e.currentTarget.value.trim()) {\r\n const updated = { ...editedGuidelines };\r\n (updated.conventions as any)[key] = [...((updated.conventions as any)[key] || []), e.currentTarget.value.trim()];\r\n setEditedGuidelines(updated);\r\n e.currentTarget.value = '';\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Edit Mode - Constraints */}\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <ShieldAlert className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.constraints' })}</span>\r\n </h4>\r\n <div className=\"space-y-3\">\r\n {Object.entries({\r\n architecture: 'architecture',\r\n tech_stack: 'techStack',\r\n performance: 'performance',\r\n security: 'security',\r\n }).map(([key, labelKey]) => (\r\n <div key={key}>\r\n <label className=\"text-xs font-medium text-muted-foreground mb-1 block\">\r\n {formatMessage({ id: `projectOverview.guidelines.constraintCategories.${labelKey}` })}\r\n </label>\r\n <div className=\"flex flex-wrap gap-2 p-2 border border-border rounded-lg bg-background min-h-[40px]\">\r\n {((editedGuidelines?.constraints as any)?.[key] || []).map((item: string, idx: number) => (\r\n <div key={idx} className=\"flex items-center gap-1 px-2 py-1 bg-muted rounded text-sm\">\r\n <span>{item}</span>\r\n <button\r\n className=\"ml-1 text-muted-foreground hover:text-foreground\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n (updated.constraints as any)[key] = ((updated.constraints as any)[key] as string[]).filter((_: string, i: number) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <X className=\"w-3 h-3\" />\r\n </button>\r\n </div>\r\n ))}\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 min-w-[120px] bg-transparent outline-none text-sm\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.addItem' })}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' && e.currentTarget.value.trim()) {\r\n const updated = { ...editedGuidelines };\r\n (updated.constraints as any)[key] = [...((updated.constraints as any)[key] || []), e.currentTarget.value.trim()];\r\n setEditedGuidelines(updated);\r\n e.currentTarget.value = '';\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Edit Mode - Quality Rules */}\r\n <div>\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\r\n <CheckSquare className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.qualityRules' })}</span>\r\n </h4>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules = [...(updated.quality_rules || []), { rule: '', scope: '', enforced_by: '' }];\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Plus className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.qualityRuleFields.addRule' })}\r\n </Button>\r\n </div>\r\n <div className=\"space-y-2\">\r\n {(editedGuidelines?.quality_rules || []).map((rule, idx) => (\r\n <div key={idx} className=\"p-3 border border-border rounded-lg space-y-2\">\r\n <div className=\"flex gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.rule' })}\r\n value={rule.rule}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules![idx].rule = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <button\r\n className=\"text-destructive hover:bg-destructive/10 p-2 rounded\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules = updated.quality_rules!.filter((_, i) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n <div className=\"grid grid-cols-2 gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.scope' })}\r\n value={rule.scope}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules![idx].scope = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.enforcedBy' })}\r\n value={rule.enforced_by || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules![idx].enforced_by = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Edit Mode - Learnings */}\r\n <div>\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\r\n <Lightbulb className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.learnings' })}</span>\r\n </h4>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings = [...(updated.learnings || []), { insight: '', category: '', session_id: '', context: '', date: new Date().toISOString() }];\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Plus className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.learningFields.addLearning' })}\r\n </Button>\r\n </div>\r\n <div className=\"space-y-2\">\r\n {(editedGuidelines?.learnings || []).map((learning, idx) => (\r\n <div key={idx} className=\"p-3 border border-border rounded-lg space-y-2\">\r\n <div className=\"flex gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.insight' })}\r\n value={learning.insight}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].insight = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <button\r\n className=\"text-destructive hover:bg-destructive/10 p-2 rounded\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings = updated.learnings!.filter((_, i) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n <div className=\"grid grid-cols-2 gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.category' })}\r\n value={learning.category || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].category = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.sessionId' })}\r\n value={learning.session_id || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].session_id = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n </div>\r\n <textarea\r\n className=\"w-full px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.context' })}\r\n rows={2}\r\n value={learning.context || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].context = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n )}\r\n\r\n {/* Statistics */}\r\n <Card>\r\n <CardContent className=\"p-6\">\r\n <h3 className=\"text-lg font-semibold text-foreground mb-4 flex items-center gap-2\">\r\n <BarChart3 className=\"w-5 h-5\" />\r\n {formatMessage({ id: 'projectOverview.stats.title' })}\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\r\n <div className=\"text-center p-4 bg-background rounded-lg\">\r\n <div className=\"text-3xl font-bold text-primary mb-1\">{totalFeatures}</div>\r\n <div className=\"text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'projectOverview.stats.totalFeatures' })}\r\n </div>\r\n </div>\r\n <div className=\"text-center p-4 bg-background rounded-lg\">\r\n <div className=\"text-sm text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'projectOverview.stats.lastUpdated' })}\r\n </div>\r\n <div className=\"text-sm font-medium text-foreground\">\r\n {allDevEntries.length > 0 ? formatDate(allDevEntries[0].date) : '-'}\r\n </div>\r\n </div>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ProjectOverviewPage;\r\n"],"names":["Blocks","createLucideIcon","BookMarked","Component","GitCommitHorizontal","ShieldAlert","ProjectOverviewPage","formatMessage","useIntl","projectOverview","isLoading","error","refetch","useProjectOverview","updateGuidelines","isUpdating","useUpdateGuidelines","devIndexView","setDevIndexView","React.useState","isEditMode","setIsEditMode","editedGuidelines","setEditedGuidelines","formatDate","dateString","devIndexCategories","Sparkles","Zap","Bug","Wrench","BookOpen","allDevEntries","React.useMemo","entries","cat","_a","entry","b","devIndexTotals","acc","totalEntries","sum","count","totalFeatures","handleEditStart","React.useCallback","g","_b","_c","_d","_e","_f","_g","_h","r","l","handleEditCancel","handleSave","toast","jsxs","jsx","_","i","Button","ClipboardList","technologyStack","architecture","keyComponents","developmentIndex","guidelines","metadata","Card","CardContent","Code2","lang","fw","Badge","tool","Fragment","layer","pattern","comp","importance","importanceColors","importanceBadges","resp","GitBranch","Icon","Tabs","v","TabsList","TabsTrigger","LayoutGrid","TabsContent","tag","ScrollText","X","Save","Edit","key","labelKey","item","idx","updated","e","CheckSquare","Plus","rule","Trash2","Lightbulb","learning","items","itemList","BarChart3"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
1
+ {"version":3,"file":"ProjectOverviewPage-BeXTMsdo.js","sources":["../../../../node_modules/lucide-react/dist/esm/icons/blocks.js","../../../../node_modules/lucide-react/dist/esm/icons/book-marked.js","../../../../node_modules/lucide-react/dist/esm/icons/component.js","../../../../node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js","../../../../node_modules/lucide-react/dist/esm/icons/shield-alert.js","../../src/pages/ProjectOverviewPage.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Blocks = createLucideIcon(\"Blocks\", [\n [\"rect\", { width: \"7\", height: \"7\", x: \"14\", y: \"3\", rx: \"1\", key: \"6d4xhi\" }],\n [\n \"path\",\n {\n d: \"M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3\",\n key: \"1fpvtg\"\n }\n ]\n]);\n\nexport { Blocks as default };\n//# sourceMappingURL=blocks.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst BookMarked = createLucideIcon(\"BookMarked\", [\n [\"path\", { d: \"M10 2v8l3-3 3 3V2\", key: \"sqw3rj\" }],\n [\n \"path\",\n {\n d: \"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20\",\n key: \"k3hazp\"\n }\n ]\n]);\n\nexport { BookMarked as default };\n//# sourceMappingURL=book-marked.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Component = createLucideIcon(\"Component\", [\n [\n \"path\",\n {\n d: \"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z\",\n key: \"1uwlt4\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2.297 11.293a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0z\",\n key: \"10291m\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8.916 17.912a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0z\",\n key: \"1tqoq1\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8.916 4.674a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z\",\n key: \"1x6lto\"\n }\n ]\n]);\n\nexport { Component as default };\n//# sourceMappingURL=component.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst GitCommitHorizontal = createLucideIcon(\"GitCommitHorizontal\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"line\", { x1: \"3\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1dyftd\" }],\n [\"line\", { x1: \"15\", x2: \"21\", y1: \"12\", y2: \"12\", key: \"oup4p8\" }]\n]);\n\nexport { GitCommitHorizontal as default };\n//# sourceMappingURL=git-commit-horizontal.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ShieldAlert = createLucideIcon(\"ShieldAlert\", [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ],\n [\"path\", { d: \"M12 8v4\", key: \"1got3b\" }],\n [\"path\", { d: \"M12 16h.01\", key: \"1drbdi\" }]\n]);\n\nexport { ShieldAlert as default };\n//# sourceMappingURL=shield-alert.js.map\n","// ========================================\r\n// ProjectOverviewPage Component\r\n// ========================================\r\n// Project overview page displaying architecture, tech stack, and components\r\n\r\nimport * as React from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport {\r\n Code2,\r\n Blocks,\r\n Component,\r\n GitBranch,\r\n BarChart3,\r\n ScrollText,\r\n ClipboardList,\r\n Sparkles,\r\n Zap,\r\n Bug,\r\n Wrench,\r\n BookOpen,\r\n CheckSquare,\r\n Lightbulb,\r\n BookMarked,\r\n ShieldAlert,\r\n LayoutGrid,\r\n GitCommitHorizontal,\r\n Edit,\r\n Save,\r\n X,\r\n Plus,\r\n Trash2,\r\n} from 'lucide-react';\r\nimport { useProjectOverview, useUpdateGuidelines } from '@/hooks/useProjectOverview';\r\nimport { toast } from 'sonner';\r\nimport type {\r\n KeyComponent,\r\n DevelopmentIndexEntry,\r\n GuidelineEntry,\r\n LearningEntry,\r\n ProjectGuidelines,\r\n} from '@/lib/api';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Badge } from '@/components/ui/Badge';\r\nimport { Card, CardContent } from '@/components/ui/Card';\r\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';\r\n\r\ntype DevIndexView = 'category' | 'timeline';\r\n\r\n// Helper function to format date (currently unused but kept for future use)\r\n// @ts-ignore - kept for potential future use\r\nfunction formatDate(dateString: string | undefined): string {\r\n if (!dateString) return '-';\r\n try {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString(undefined, {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n } catch {\r\n return '-';\r\n }\r\n}\r\n\r\n/**\r\n * ProjectOverviewPage component - Display project architecture and tech stack\r\n */\r\nexport function ProjectOverviewPage() {\r\n const { formatMessage } = useIntl();\r\n const { projectOverview, isLoading, error, refetch } = useProjectOverview();\r\n const { updateGuidelines, isUpdating } = useUpdateGuidelines();\r\n const [devIndexView, setDevIndexView] = React.useState<DevIndexView>('category');\r\n const [isEditMode, setIsEditMode] = React.useState(false);\r\n const [editedGuidelines, setEditedGuidelines] = React.useState<ProjectGuidelines | null>(null);\r\n\r\n // Helper function to format date\r\n function formatDate(dateString: string | undefined): string {\r\n if (!dateString) return '-';\r\n try {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString(undefined, {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n } catch {\r\n return '-';\r\n }\r\n }\r\n\r\n // Define dev index categories (before any conditional logic)\r\n const devIndexCategories = [\r\n { key: 'feature', i18nKey: 'projectOverview.devIndex.category.features', icon: Sparkles, color: 'primary' },\r\n { key: 'enhancement', i18nKey: 'projectOverview.devIndex.category.enhancements', icon: Zap, color: 'success' },\r\n { key: 'bugfix', i18nKey: 'projectOverview.devIndex.category.bugfixes', icon: Bug, color: 'destructive' },\r\n { key: 'refactor', i18nKey: 'projectOverview.devIndex.category.refactorings', icon: Wrench, color: 'warning' },\r\n { key: 'docs', i18nKey: 'projectOverview.devIndex.category.documentation', icon: BookOpen, color: 'muted' },\r\n ];\r\n\r\n // Collect all entries for timeline (compute before any conditional logic)\r\n const allDevEntries = React.useMemo(() => {\r\n if (!projectOverview?.developmentIndex) return [];\r\n\r\n const entries: Array<{\r\n title: string;\r\n description?: string;\r\n type: string;\r\n typeLabel: string;\r\n typeIcon: React.ElementType;\r\n typeColor: string;\r\n date: string;\r\n sessionId?: string;\r\n sub_feature?: string;\r\n tags?: string[];\r\n }> = [];\r\n\r\n devIndexCategories.forEach((cat) => {\r\n (projectOverview.developmentIndex?.[cat.key] || []).forEach((entry: DevelopmentIndexEntry) => {\r\n entries.push({\r\n ...entry,\r\n type: cat.key,\r\n typeLabel: formatMessage({ id: cat.i18nKey }),\r\n typeIcon: cat.icon,\r\n typeColor: cat.color,\r\n date: entry.archivedAt || entry.date || entry.implemented_at || '',\r\n });\r\n });\r\n });\r\n\r\n return entries.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());\r\n }, [projectOverview?.developmentIndex]);\r\n\r\n // Calculate totals for development index\r\n const devIndexTotals = devIndexCategories.reduce((acc, cat) => {\r\n acc[cat.key] = (projectOverview?.developmentIndex?.[cat.key] || []).length;\r\n return acc;\r\n }, {} as Record<string, number>);\r\n\r\n const totalEntries = Object.values(devIndexTotals).reduce((sum, count) => sum + count, 0);\r\n\r\n // Calculate statistics\r\n const totalFeatures = devIndexCategories.reduce((sum, cat) => sum + devIndexTotals[cat.key], 0);\r\n\r\n // Guidelines edit handlers\r\n const handleEditStart = React.useCallback(() => {\r\n const g = projectOverview?.guidelines;\r\n setEditedGuidelines({\r\n conventions: {\r\n coding_style: [...(g?.conventions?.coding_style || [])],\r\n naming_patterns: [...(g?.conventions?.naming_patterns || [])],\r\n file_structure: [...(g?.conventions?.file_structure || [])],\r\n documentation: [...(g?.conventions?.documentation || [])],\r\n },\r\n constraints: {\r\n architecture: [...(g?.constraints?.architecture || [])],\r\n tech_stack: [...(g?.constraints?.tech_stack || [])],\r\n performance: [...(g?.constraints?.performance || [])],\r\n security: [...(g?.constraints?.security || [])],\r\n },\r\n quality_rules: (g?.quality_rules || []).map((r) => ({ ...r })),\r\n learnings: (g?.learnings || []).map((l) => ({ ...l })),\r\n });\r\n setIsEditMode(true);\r\n }, [projectOverview?.guidelines]);\r\n\r\n const handleEditCancel = React.useCallback(() => {\r\n setIsEditMode(false);\r\n setEditedGuidelines(null);\r\n }, []);\r\n\r\n const handleSave = React.useCallback(async () => {\r\n if (!editedGuidelines) return;\r\n try {\r\n await updateGuidelines(editedGuidelines);\r\n toast.success(formatMessage({ id: 'projectOverview.guidelines.saveSuccess' }));\r\n setIsEditMode(false);\r\n setEditedGuidelines(null);\r\n } catch {\r\n toast.error(formatMessage({ id: 'projectOverview.guidelines.saveError' }));\r\n }\r\n }, [editedGuidelines, updateGuidelines, formatMessage]);\r\n\r\n // Render loading state\r\n if (isLoading) {\r\n return (\r\n <div className=\"space-y-6\">\r\n <div className=\"h-48 rounded-lg bg-muted animate-pulse\" />\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {Array.from({ length: 4 }).map((_, i) => (\r\n <div key={i} className=\"h-32 rounded-lg bg-muted animate-pulse\" />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Render error state\r\n if (error) {\r\n return (\r\n <div className=\"flex items-center gap-2 p-4 rounded-lg bg-destructive/10 border border-destructive/30 text-destructive\">\r\n <Component className=\"h-5 w-5 flex-shrink-0\" />\r\n <div className=\"flex-1\">\r\n <p className=\"text-sm font-medium\">{formatMessage({ id: 'common.errors.loadFailed' })}</p>\r\n <p className=\"text-xs mt-0.5\">{error.message}</p>\r\n </div>\r\n <Button variant=\"outline\" size=\"sm\" onClick={() => refetch()}>\r\n {formatMessage({ id: 'common.actions.retry' })}\r\n </Button>\r\n </div>\r\n );\r\n }\r\n\r\n // Render empty state\r\n if (!projectOverview) {\r\n return (\r\n <div className=\"flex flex-col items-center justify-center py-16 px-4\">\r\n <ClipboardList className=\"h-12 w-12 text-muted-foreground mb-4\" />\r\n <h3 className=\"text-lg font-medium text-foreground mb-2\">\r\n {formatMessage({ id: 'projectOverview.empty.title' })}\r\n </h3>\r\n <p className=\"text-sm text-muted-foreground text-center max-w-sm mb-4\">\r\n {formatMessage({ id: 'projectOverview.empty.message' })}\r\n </p>\r\n </div>\r\n );\r\n }\r\n\r\n const { technologyStack, architecture, keyComponents, developmentIndex, guidelines, metadata } = projectOverview;\r\n\r\n return (\r\n <div className=\"space-y-4\">\r\n {/* Project Header + Technology Stack - Combined */}\r\n <Card>\r\n <CardContent className=\"p-4\">\r\n {/* Header Row */}\r\n <div className=\"flex items-start justify-between mb-4 pb-3 border-b border-border\">\r\n <div className=\"flex-1\">\r\n <h1 className=\"text-lg font-semibold text-foreground gradient-text mb-1\">\r\n {projectOverview.projectName}\r\n </h1>\r\n <p className=\"text-sm text-muted-foreground\">\r\n {projectOverview.description || formatMessage({ id: 'projectOverview.noDescription' })}\r\n </p>\r\n </div>\r\n <div className=\"text-sm text-muted-foreground text-right\">\r\n <div>\r\n {formatMessage({ id: 'projectOverview.header.initialized' })}:{' '}\r\n {formatDate(projectOverview.initializedAt)}\r\n </div>\r\n {metadata?.analysis_mode && (\r\n <div className=\"mt-1\">\r\n <span className=\"font-mono text-xs px-1.5 py-0.5 bg-muted rounded\">\r\n {metadata.analysis_mode}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Technology Stack */}\r\n <h3 className=\"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5\">\r\n <Code2 className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.techStack.title' })}\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\r\n {/* Languages */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.languages' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.languages && technologyStack.languages.length > 0 ? (\r\n technologyStack.languages.map((lang: { name: string; file_count: number; primary?: boolean }) => (\r\n <div\r\n key={lang.name}\r\n className={`flex items-center gap-1.5 px-2 py-1 bg-background border border-border rounded text-sm ${\r\n lang.primary ? 'ring-1 ring-primary' : ''\r\n }`}\r\n >\r\n <span className=\"font-medium text-foreground\">{lang.name}</span>\r\n <span className=\"text-xs text-muted-foreground\">{lang.file_count}</span>\r\n {lang.primary && (\r\n <span className=\"text-[10px] px-1 py-0.5 bg-primary text-primary-foreground rounded\">\r\n {formatMessage({ id: 'projectOverview.techStack.primary' })}\r\n </span>\r\n )}\r\n </div>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">\r\n {formatMessage({ id: 'projectOverview.techStack.noLanguages' })}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Frameworks */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.frameworks' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.frameworks && technologyStack.frameworks.length > 0 ? (\r\n technologyStack.frameworks.map((fw: string) => (\r\n <Badge key={fw} variant=\"success\" className=\"px-2 py-0.5 text-xs\">\r\n {fw}\r\n </Badge>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">\r\n {formatMessage({ id: 'projectOverview.techStack.noFrameworks' })}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Build Tools */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.buildTools' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.build_tools && technologyStack.build_tools.length > 0 ? (\r\n technologyStack.build_tools.map((tool: string) => (\r\n <Badge key={tool} variant=\"warning\" className=\"px-2 py-0.5 text-xs\">\r\n {tool}\r\n </Badge>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">-</span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Test Frameworks */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.techStack.testFrameworks' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {technologyStack?.test_frameworks && technologyStack.test_frameworks.length > 0 ? (\r\n technologyStack.test_frameworks.map((fw: string) => (\r\n <Badge key={fw} variant=\"default\" className=\"px-2 py-0.5 text-xs\">\r\n {fw}\r\n </Badge>\r\n ))\r\n ) : (\r\n <span className=\"text-muted-foreground text-sm\">-</span>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n\r\n {/* Architecture & Key Components - Merged */}\r\n {(architecture || (keyComponents && keyComponents.length > 0)) && (\r\n <Card>\r\n <CardContent className=\"p-4\">\r\n {/* Architecture Section */}\r\n {architecture && (\r\n <>\r\n <h3 className=\"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5\">\r\n <Blocks className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.architecture.title' })}\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\r\n {/* Style */}\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.architecture.style' })}\r\n </h4>\r\n <div className=\"px-2 py-1.5 bg-background border border-border rounded\">\r\n <span className=\"text-foreground font-medium text-sm\">{architecture.style}</span>\r\n </div>\r\n </div>\r\n\r\n {/* Layers */}\r\n {architecture.layers && architecture.layers.length > 0 && (\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.architecture.layers' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {architecture.layers.map((layer: string) => (\r\n <span key={layer} className=\"px-1.5 py-0.5 bg-muted text-foreground rounded text-xs\">\r\n {layer}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Patterns */}\r\n {architecture.patterns && architecture.patterns.length > 0 && (\r\n <div>\r\n <h4 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\r\n {formatMessage({ id: 'projectOverview.architecture.patterns' })}\r\n </h4>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {architecture.patterns.map((pattern: string) => (\r\n <span key={pattern} className=\"px-1.5 py-0.5 bg-muted text-foreground rounded text-xs\">\r\n {pattern}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n\r\n {/* Divider between Architecture and Components */}\r\n {architecture && keyComponents && keyComponents.length > 0 && (\r\n <div className=\"border-t border-border my-4\" />\r\n )}\r\n\r\n {/* Key Components Section */}\r\n {keyComponents && keyComponents.length > 0 && (\r\n <>\r\n <h3 className=\"text-base font-semibold text-foreground mb-3 flex items-center gap-1.5\">\r\n <Component className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.components.title' })}\r\n </h3>\r\n\r\n <div className=\"space-y-2\">\r\n {keyComponents.map((comp: KeyComponent) => {\r\n const importance = comp.importance || 'low';\r\n const importanceColors: Record<string, string> = {\r\n high: 'border-l-2 border-l-destructive bg-destructive/5',\r\n medium: 'border-l-2 border-l-warning bg-warning/5',\r\n low: 'border-l-2 border-l-muted-foreground bg-muted',\r\n };\r\n const importanceBadges: Record<string, React.ReactElement> = {\r\n high: (\r\n <Badge variant=\"destructive\" className=\"text-xs px-1.5 py-0\">\r\n {formatMessage({ id: 'projectOverview.components.importance.high' })}\r\n </Badge>\r\n ),\r\n medium: (\r\n <Badge variant=\"warning\" className=\"text-xs px-1.5 py-0\">\r\n {formatMessage({ id: 'projectOverview.components.importance.medium' })}\r\n </Badge>\r\n ),\r\n low: (\r\n <Badge variant=\"secondary\" className=\"text-xs px-1.5 py-0\">\r\n {formatMessage({ id: 'projectOverview.components.importance.low' })}\r\n </Badge>\r\n ),\r\n };\r\n\r\n return (\r\n <div\r\n key={comp.name}\r\n className={`p-2.5 rounded ${importanceColors[importance] || importanceColors.low}`}\r\n >\r\n <div className=\"flex items-start justify-between mb-1\">\r\n <h4 className=\"font-medium text-foreground text-sm\">{comp.name}</h4>\r\n {importanceBadges[importance]}\r\n </div>\r\n {comp.description && (\r\n <p className=\"text-xs text-muted-foreground mb-1\">{comp.description}</p>\r\n )}\r\n {comp.responsibility && comp.responsibility.length > 0 && (\r\n <ul className=\"text-xs text-muted-foreground list-disc list-inside\">\r\n {comp.responsibility.map((resp: string, i: number) => (\r\n <li key={i}>{resp}</li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </>\r\n )}\r\n </CardContent>\r\n </Card>\r\n )}\r\n\r\n {/* Development Index */}\r\n {developmentIndex && totalEntries > 0 && (\r\n <Card>\r\n <CardContent className=\"p-4\">\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h3 className=\"text-base font-semibold text-foreground flex items-center gap-1.5\">\r\n <GitBranch className=\"w-4 h-4\" />\r\n {formatMessage({ id: 'projectOverview.devIndex.title' })}\r\n </h3>\r\n <div className=\"flex items-center gap-1.5\">\r\n {devIndexCategories.map((cat) => {\r\n const count = devIndexTotals[cat.key];\r\n if (count === 0) return null;\r\n const Icon = cat.icon;\r\n return (\r\n <Badge key={cat.key} variant={cat.color === 'primary' ? 'default' : 'secondary'} className=\"text-xs px-1.5 py-0\">\r\n <Icon className=\"w-3 h-3 mr-0.5\" />\r\n {count}\r\n </Badge>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n <Tabs value={devIndexView} onValueChange={(v) => setDevIndexView(v as DevIndexView)}>\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <TabsList className=\"h-8\">\r\n <TabsTrigger value=\"category\" className=\"text-sm px-3 py-1 h-7\">\r\n <LayoutGrid className=\"w-3.5 h-3.5 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.devIndex.categories' })}\r\n </TabsTrigger>\r\n <TabsTrigger value=\"timeline\" className=\"text-sm px-3 py-1 h-7\">\r\n <GitCommitHorizontal className=\"w-3.5 h-3.5 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.devIndex.timeline' })}\r\n </TabsTrigger>\r\n </TabsList>\r\n </div>\r\n\r\n <TabsContent value=\"category\">\r\n <div className=\"space-y-3\">\r\n {devIndexCategories.map((cat) => {\r\n const entries = developmentIndex?.[cat.key] || [];\r\n if (entries.length === 0) return null;\r\n const Icon = cat.icon;\r\n\r\n return (\r\n <div key={cat.key}>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-2 flex items-center gap-1.5\">\r\n <Icon className=\"w-3.5 h-3.5\" />\r\n <span>{formatMessage({ id: cat.i18nKey })}</span>\r\n <Badge variant=\"secondary\" className=\"text-xs px-1 py-0\">{entries.length}</Badge>\r\n </h4>\r\n <div className=\"space-y-1.5\">\r\n {entries.slice(0, 5).map((entry: DevelopmentIndexEntry & { type?: string; typeLabel?: string; typeIcon?: React.ElementType; typeColor?: string; date?: string }, i: number) => (\r\n <div\r\n key={i}\r\n className=\"p-2 bg-background border border-border rounded hover:shadow-sm transition-shadow\"\r\n >\r\n <div className=\"flex items-start justify-between mb-0.5\">\r\n <h5 className=\"font-medium text-foreground text-sm\">{entry.title}</h5>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {formatDate(entry.archivedAt || entry.date || entry.implemented_at)}\r\n </span>\r\n </div>\r\n {entry.description && (\r\n <p className=\"text-xs text-muted-foreground mb-1\">{entry.description}</p>\r\n )}\r\n <div className=\"flex items-center gap-1.5 text-xs flex-wrap\">\r\n {entry.sessionId && (\r\n <span className=\"px-1.5 py-0.5 bg-primary-light text-primary rounded font-mono\">\r\n {entry.sessionId}\r\n </span>\r\n )}\r\n {entry.sub_feature && (\r\n <span className=\"px-1.5 py-0.5 bg-muted rounded\">{entry.sub_feature}</span>\r\n )}\r\n {entry.status && (\r\n <span\r\n className={`px-1.5 py-0.5 rounded ${\r\n entry.status === 'completed'\r\n ? 'bg-success-light text-success'\r\n : 'bg-warning-light text-warning'\r\n }`}\r\n >\r\n {entry.status}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n {entries.length > 5 && (\r\n <div className=\"text-sm text-muted-foreground text-center py-1\">\r\n ... and {entries.length - 5} more\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </TabsContent>\r\n\r\n <TabsContent value=\"timeline\">\r\n <div className=\"space-y-3\">\r\n {allDevEntries.slice(0, 20).map((entry, i) => {\r\n const Icon = entry.typeIcon;\r\n return (\r\n <div key={i} className=\"flex gap-3\">\r\n <div className=\"flex flex-col items-center\">\r\n <div\r\n className={`w-6 h-6 rounded-full bg-${entry.typeColor}-light text-${entry.typeColor} flex items-center justify-center`}\r\n >\r\n <Icon className=\"w-3 h-3\" />\r\n </div>\r\n {i < Math.min(allDevEntries.length, 20) - 1 && (\r\n <div className=\"w-0.5 flex-1 bg-border mt-1.5\" />\r\n )}\r\n </div>\r\n <div className=\"flex-1 pb-3\">\r\n <div className=\"flex items-start justify-between mb-0.5\">\r\n <div className=\"flex items-center gap-1.5\">\r\n <Badge\r\n variant={\r\n entry.typeColor === 'primary'\r\n ? 'default'\r\n : entry.typeColor === 'destructive'\r\n ? 'destructive'\r\n : 'secondary'\r\n }\r\n className=\"text-xs px-1.5 py-0\"\r\n >\r\n {entry.typeLabel}\r\n </Badge>\r\n <h5 className=\"font-medium text-foreground text-sm\">{entry.title}</h5>\r\n </div>\r\n <span className=\"text-xs text-muted-foreground whitespace-nowrap\">\r\n {formatDate(entry.date)}\r\n </span>\r\n </div>\r\n {entry.description && (\r\n <p className=\"text-xs text-muted-foreground mb-1\">{entry.description}</p>\r\n )}\r\n <div className=\"flex items-center gap-1.5 text-xs\">\r\n {entry.sessionId && (\r\n <span className=\"px-1.5 py-0.5 bg-muted rounded font-mono\">\r\n {entry.sessionId}\r\n </span>\r\n )}\r\n {entry.sub_feature && (\r\n <span className=\"px-1.5 py-0.5 bg-muted rounded\">{entry.sub_feature}</span>\r\n )}\r\n {entry.tags &&\r\n entry.tags.slice(0, 3).map((tag) => (\r\n <span key={tag} className=\"px-1.5 py-0.5 bg-accent rounded\">\r\n {tag}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n {allDevEntries.length > 20 && (\r\n <div className=\"text-sm text-muted-foreground text-center py-2\">\r\n ... and {allDevEntries.length - 20} more entries\r\n </div>\r\n )}\r\n </div>\r\n </TabsContent>\r\n </Tabs>\r\n </CardContent>\r\n </Card>\r\n )}\r\n\r\n {/* Guidelines */}\r\n {guidelines && (\r\n <Card>\r\n <CardContent className=\"p-6\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h3 className=\"text-lg font-semibold text-foreground flex items-center gap-2\">\r\n <ScrollText className=\"w-5 h-5\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.title' })}\r\n </h3>\r\n <div className=\"flex gap-2\">\r\n {!isEditMode ? (\r\n <Button variant=\"outline\" size=\"sm\" onClick={handleEditStart}>\r\n <Edit className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.edit' })}\r\n </Button>\r\n ) : (\r\n <>\r\n <Button variant=\"outline\" size=\"sm\" onClick={handleEditCancel} disabled={isUpdating}>\r\n <X className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.cancel' })}\r\n </Button>\r\n <Button variant=\"default\" size=\"sm\" onClick={handleSave} disabled={isUpdating}>\r\n <Save className=\"w-4 h-4 mr-1\" />\r\n {isUpdating ? formatMessage({ id: 'projectOverview.guidelines.saving' }) : formatMessage({ id: 'projectOverview.guidelines.save' })}\r\n </Button>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"space-y-6\">\r\n {!isEditMode ? (\r\n <>\r\n {/* Read-only Mode - Conventions */}\r\n {guidelines.conventions && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <BookMarked className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.conventions' })}</span>\r\n </h4>\r\n <div className=\"space-y-2\">\r\n {Object.entries(guidelines.conventions).map(([key, items]) => {\r\n const itemList = Array.isArray(items) ? items : [];\r\n if (itemList.length === 0) return null;\r\n return (\r\n <div key={key} className=\"space-y-1\">\r\n {itemList.map((item: string, i: number) => (\r\n <div\r\n key={i}\r\n className=\"flex items-start gap-3 p-3 bg-background border border-border rounded-lg\"\r\n >\r\n <span className=\"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {key}\r\n </span>\r\n <span className=\"text-sm text-foreground\">{item}</span>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Read-only Mode - Constraints */}\r\n {guidelines.constraints && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <ShieldAlert className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.constraints' })}</span>\r\n </h4>\r\n <div className=\"space-y-2\">\r\n {Object.entries(guidelines.constraints).map(([key, items]) => {\r\n const itemList = Array.isArray(items) ? items : [];\r\n if (itemList.length === 0) return null;\r\n return (\r\n <div key={key} className=\"space-y-1\">\r\n {itemList.map((item: string, i: number) => (\r\n <div\r\n key={i}\r\n className=\"flex items-start gap-3 p-3 bg-background border border-border rounded-lg\"\r\n >\r\n <span className=\"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {key}\r\n </span>\r\n <span className=\"text-sm text-foreground\">{item}</span>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Read-only Mode - Quality Rules */}\r\n {guidelines.quality_rules && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <CheckSquare className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.qualityRules' })}</span>\r\n </h4>\r\n {guidelines.quality_rules.length > 0 ? (\r\n <div className=\"space-y-2\">\r\n {guidelines.quality_rules.map((rule: GuidelineEntry, i: number) => (\r\n <div key={i} className=\"p-3 bg-background border border-border rounded-lg\">\r\n <div className=\"flex items-start justify-between mb-1\">\r\n <span className=\"text-sm text-foreground font-medium\">{rule.rule}</span>\r\n {rule.enforced_by && (\r\n <span className=\"text-xs px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {rule.enforced_by}\r\n </span>\r\n )}\r\n </div>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {formatMessage({ id: 'projectOverview.guidelines.scope' })}: {rule.scope}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n ) : (\r\n <p className=\"text-sm text-muted-foreground italic\">\r\n {formatMessage({ id: 'projectOverview.guidelines.noQualityRules' }) || 'No quality rules defined yet. Switch to edit mode to add rules.'}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Read-only Mode - Learnings */}\r\n {guidelines.learnings && (\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <Lightbulb className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.learnings' })}</span>\r\n </h4>\r\n {guidelines.learnings.length > 0 ? (\r\n <div className=\"space-y-2\">\r\n {guidelines.learnings.map((learning: LearningEntry, i: number) => (\r\n <div\r\n key={i}\r\n className=\"p-3 bg-background border border-border rounded-lg border-l-4 border-l-primary\"\r\n >\r\n <div className=\"flex items-start justify-between mb-2\">\r\n <span className=\"text-sm text-foreground\">{learning.insight}</span>\r\n <span className=\"text-xs text-muted-foreground whitespace-nowrap ml-2\">\r\n {formatDate(learning.date)}\r\n </span>\r\n </div>\r\n <div className=\"flex items-center gap-2 text-xs\">\r\n {learning.category && (\r\n <span className=\"px-2 py-0.5 bg-muted text-muted-foreground rounded\">\r\n {learning.category}\r\n </span>\r\n )}\r\n {learning.session_id && (\r\n <span className=\"px-2 py-0.5 bg-primary-light text-primary rounded font-mono\">\r\n {learning.session_id}\r\n </span>\r\n )}\r\n </div>\r\n {learning.context && (\r\n <p className=\"text-xs text-muted-foreground mt-2\">{learning.context}</p>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n ) : (\r\n <p className=\"text-sm text-muted-foreground italic\">\r\n {formatMessage({ id: 'projectOverview.guidelines.noLearnings' }) || 'No learning summaries yet. Switch to edit mode to add learnings.'}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <>\r\n {/* Edit Mode - Conventions */}\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <BookMarked className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.conventions' })}</span>\r\n </h4>\r\n <div className=\"space-y-3\">\r\n {Object.entries({\r\n coding_style: 'codingStyle',\r\n naming_patterns: 'namingPatterns',\r\n file_structure: 'fileStructure',\r\n documentation: 'documentation',\r\n }).map(([key, labelKey]) => (\r\n <div key={key}>\r\n <label className=\"text-xs font-medium text-muted-foreground mb-1 block\">\r\n {formatMessage({ id: `projectOverview.guidelines.conventionCategories.${labelKey}` })}\r\n </label>\r\n <div className=\"flex flex-wrap gap-2 p-2 border border-border rounded-lg bg-background min-h-[40px]\">\r\n {((editedGuidelines?.conventions as any)?.[key] || []).map((item: string, idx: number) => (\r\n <div key={idx} className=\"flex items-center gap-1 px-2 py-1 bg-muted rounded text-sm\">\r\n <span>{item}</span>\r\n <button\r\n className=\"ml-1 text-muted-foreground hover:text-foreground\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n (updated.conventions as any)[key] = ((updated.conventions as any)[key] as string[]).filter((_: string, i: number) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <X className=\"w-3 h-3\" />\r\n </button>\r\n </div>\r\n ))}\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 min-w-[120px] bg-transparent outline-none text-sm\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.addItem' })}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' && e.currentTarget.value.trim()) {\r\n const updated = { ...editedGuidelines };\r\n (updated.conventions as any)[key] = [...((updated.conventions as any)[key] || []), e.currentTarget.value.trim()];\r\n setEditedGuidelines(updated);\r\n e.currentTarget.value = '';\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Edit Mode - Constraints */}\r\n <div>\r\n <h4 className=\"text-sm font-semibold text-foreground mb-3 flex items-center gap-2\">\r\n <ShieldAlert className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.constraints' })}</span>\r\n </h4>\r\n <div className=\"space-y-3\">\r\n {Object.entries({\r\n architecture: 'architecture',\r\n tech_stack: 'techStack',\r\n performance: 'performance',\r\n security: 'security',\r\n }).map(([key, labelKey]) => (\r\n <div key={key}>\r\n <label className=\"text-xs font-medium text-muted-foreground mb-1 block\">\r\n {formatMessage({ id: `projectOverview.guidelines.constraintCategories.${labelKey}` })}\r\n </label>\r\n <div className=\"flex flex-wrap gap-2 p-2 border border-border rounded-lg bg-background min-h-[40px]\">\r\n {((editedGuidelines?.constraints as any)?.[key] || []).map((item: string, idx: number) => (\r\n <div key={idx} className=\"flex items-center gap-1 px-2 py-1 bg-muted rounded text-sm\">\r\n <span>{item}</span>\r\n <button\r\n className=\"ml-1 text-muted-foreground hover:text-foreground\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n (updated.constraints as any)[key] = ((updated.constraints as any)[key] as string[]).filter((_: string, i: number) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <X className=\"w-3 h-3\" />\r\n </button>\r\n </div>\r\n ))}\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 min-w-[120px] bg-transparent outline-none text-sm\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.addItem' })}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter' && e.currentTarget.value.trim()) {\r\n const updated = { ...editedGuidelines };\r\n (updated.constraints as any)[key] = [...((updated.constraints as any)[key] || []), e.currentTarget.value.trim()];\r\n setEditedGuidelines(updated);\r\n e.currentTarget.value = '';\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Edit Mode - Quality Rules */}\r\n <div>\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\r\n <CheckSquare className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.qualityRules' })}</span>\r\n </h4>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules = [...(updated.quality_rules || []), { rule: '', scope: '', enforced_by: '' }];\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Plus className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.qualityRuleFields.addRule' })}\r\n </Button>\r\n </div>\r\n <div className=\"space-y-2\">\r\n {(editedGuidelines?.quality_rules || []).map((rule, idx) => (\r\n <div key={idx} className=\"p-3 border border-border rounded-lg space-y-2\">\r\n <div className=\"flex gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.rule' })}\r\n value={rule.rule}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules![idx].rule = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <button\r\n className=\"text-destructive hover:bg-destructive/10 p-2 rounded\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules = updated.quality_rules!.filter((_, i) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n <div className=\"grid grid-cols-2 gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.scope' })}\r\n value={rule.scope}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules![idx].scope = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.enforcedBy' })}\r\n value={rule.enforced_by || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.quality_rules![idx].enforced_by = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Edit Mode - Learnings */}\r\n <div>\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\r\n <Lightbulb className=\"w-4 h-4\" />\r\n <span>{formatMessage({ id: 'projectOverview.guidelines.learnings' })}</span>\r\n </h4>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings = [...(updated.learnings || []), { insight: '', category: '', session_id: '', context: '', date: new Date().toISOString() }];\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Plus className=\"w-4 h-4 mr-1\" />\r\n {formatMessage({ id: 'projectOverview.guidelines.learningFields.addLearning' })}\r\n </Button>\r\n </div>\r\n <div className=\"space-y-2\">\r\n {(editedGuidelines?.learnings || []).map((learning, idx) => (\r\n <div key={idx} className=\"p-3 border border-border rounded-lg space-y-2\">\r\n <div className=\"flex gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.insight' })}\r\n value={learning.insight}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].insight = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <button\r\n className=\"text-destructive hover:bg-destructive/10 p-2 rounded\"\r\n onClick={() => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings = updated.learnings!.filter((_, i) => i !== idx);\r\n setEditedGuidelines(updated);\r\n }}\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n <div className=\"grid grid-cols-2 gap-2\">\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.category' })}\r\n value={learning.category || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].category = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n <input\r\n type=\"text\"\r\n className=\"px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.sessionId' })}\r\n value={learning.session_id || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].session_id = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n </div>\r\n <textarea\r\n className=\"w-full px-2 py-1 text-sm border border-border rounded bg-background\"\r\n placeholder={formatMessage({ id: 'projectOverview.guidelines.placeholders.context' })}\r\n rows={2}\r\n value={learning.context || ''}\r\n onChange={(e) => {\r\n const updated = { ...editedGuidelines };\r\n updated.learnings![idx].context = e.target.value;\r\n setEditedGuidelines(updated);\r\n }}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n )}\r\n\r\n {/* Statistics */}\r\n <Card>\r\n <CardContent className=\"p-6\">\r\n <h3 className=\"text-lg font-semibold text-foreground mb-4 flex items-center gap-2\">\r\n <BarChart3 className=\"w-5 h-5\" />\r\n {formatMessage({ id: 'projectOverview.stats.title' })}\r\n </h3>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\r\n <div className=\"text-center p-4 bg-background rounded-lg\">\r\n <div className=\"text-3xl font-bold text-primary mb-1\">{totalFeatures}</div>\r\n <div className=\"text-sm text-muted-foreground\">\r\n {formatMessage({ id: 'projectOverview.stats.totalFeatures' })}\r\n </div>\r\n </div>\r\n <div className=\"text-center p-4 bg-background rounded-lg\">\r\n <div className=\"text-sm text-muted-foreground mb-1\">\r\n {formatMessage({ id: 'projectOverview.stats.lastUpdated' })}\r\n </div>\r\n <div className=\"text-sm font-medium text-foreground\">\r\n {allDevEntries.length > 0 ? formatDate(allDevEntries[0].date) : '-'}\r\n </div>\r\n </div>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ProjectOverviewPage;\r\n"],"names":["Blocks","createLucideIcon","BookMarked","Component","GitCommitHorizontal","ShieldAlert","ProjectOverviewPage","formatMessage","useIntl","projectOverview","isLoading","error","refetch","useProjectOverview","updateGuidelines","isUpdating","useUpdateGuidelines","devIndexView","setDevIndexView","React.useState","isEditMode","setIsEditMode","editedGuidelines","setEditedGuidelines","formatDate","dateString","devIndexCategories","Sparkles","Zap","Bug","Wrench","BookOpen","allDevEntries","React.useMemo","entries","cat","_a","entry","b","devIndexTotals","acc","totalEntries","sum","count","totalFeatures","handleEditStart","React.useCallback","g","_b","_c","_d","_e","_f","_g","_h","r","l","handleEditCancel","handleSave","toast","jsxs","jsx","_","i","Button","ClipboardList","technologyStack","architecture","keyComponents","developmentIndex","guidelines","metadata","Card","CardContent","Code2","lang","fw","Badge","tool","Fragment","layer","pattern","comp","importance","importanceColors","importanceBadges","resp","GitBranch","Icon","Tabs","v","TabsList","TabsTrigger","LayoutGrid","TabsContent","tag","ScrollText","X","Save","Edit","key","labelKey","item","idx","updated","e","CheckSquare","Plus","rule","Trash2","Lightbulb","learning","items","itemList","BarChart3"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}