@akiojin/gwt 2.13.0 → 3.0.0

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 (295) hide show
  1. package/README.ja.md +41 -0
  2. package/README.md +38 -0
  3. package/dist/claude.d.ts.map +1 -1
  4. package/dist/claude.js +17 -11
  5. package/dist/claude.js.map +1 -1
  6. package/dist/cli/ui/components/App.d.ts +0 -6
  7. package/dist/cli/ui/components/App.d.ts.map +1 -1
  8. package/dist/cli/ui/components/App.js +27 -88
  9. package/dist/cli/ui/components/App.js.map +1 -1
  10. package/dist/cli/ui/components/common/Select.js +2 -2
  11. package/dist/cli/ui/components/common/Select.js.map +1 -1
  12. package/dist/cli/ui/components/screens/BranchListScreen.d.ts.map +1 -1
  13. package/dist/cli/ui/components/screens/BranchListScreen.js.map +1 -1
  14. package/dist/cli/ui/components/screens/BranchQuickStartScreen.d.ts.map +1 -1
  15. package/dist/cli/ui/components/screens/BranchQuickStartScreen.js +3 -3
  16. package/dist/cli/ui/components/screens/BranchQuickStartScreen.js.map +1 -1
  17. package/dist/cli/ui/utils/continueSession.d.ts.map +1 -1
  18. package/dist/cli/ui/utils/continueSession.js +1 -1
  19. package/dist/cli/ui/utils/continueSession.js.map +1 -1
  20. package/dist/client/assets/index-DsDNCy5f.css +1 -0
  21. package/dist/client/assets/index-f5D2XwDh.js +72 -0
  22. package/dist/client/index.html +2 -2
  23. package/dist/codex.d.ts.map +1 -1
  24. package/dist/codex.js +21 -11
  25. package/dist/codex.js.map +1 -1
  26. package/dist/config/builtin-tools.d.ts.map +1 -1
  27. package/dist/config/builtin-tools.js +3 -2
  28. package/dist/config/builtin-tools.js.map +1 -1
  29. package/dist/config/shared-env.d.ts +41 -0
  30. package/dist/config/shared-env.d.ts.map +1 -0
  31. package/dist/config/shared-env.js +114 -0
  32. package/dist/config/shared-env.js.map +1 -0
  33. package/dist/gemini.d.ts.map +1 -1
  34. package/dist/gemini.js +20 -17
  35. package/dist/gemini.js.map +1 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +13 -8
  38. package/dist/index.js.map +1 -1
  39. package/dist/logging/logger.d.ts.map +1 -1
  40. package/dist/logging/logger.js +4 -1
  41. package/dist/logging/logger.js.map +1 -1
  42. package/dist/qwen.d.ts.map +1 -1
  43. package/dist/qwen.js +15 -11
  44. package/dist/qwen.js.map +1 -1
  45. package/dist/services/aiToolResolver.d.ts +41 -0
  46. package/dist/services/aiToolResolver.d.ts.map +1 -0
  47. package/dist/services/aiToolResolver.js +194 -0
  48. package/dist/services/aiToolResolver.js.map +1 -0
  49. package/dist/services/customToolResolver.d.ts +10 -0
  50. package/dist/services/customToolResolver.d.ts.map +1 -0
  51. package/dist/services/customToolResolver.js +71 -0
  52. package/dist/services/customToolResolver.js.map +1 -0
  53. package/dist/shared/aiToolConstants.d.ts +9 -0
  54. package/dist/shared/aiToolConstants.d.ts.map +1 -0
  55. package/dist/shared/aiToolConstants.js +29 -0
  56. package/dist/shared/aiToolConstants.js.map +1 -0
  57. package/dist/types/tools.d.ts +12 -0
  58. package/dist/types/tools.d.ts.map +1 -1
  59. package/dist/utils/prompt.d.ts.map +1 -1
  60. package/dist/utils/prompt.js.map +1 -1
  61. package/dist/utils/session.d.ts.map +1 -1
  62. package/dist/utils/session.js +15 -6
  63. package/dist/utils/session.js.map +1 -1
  64. package/dist/utils/terminal.d.ts +12 -3
  65. package/dist/utils/terminal.d.ts.map +1 -1
  66. package/dist/utils/terminal.js +5 -34
  67. package/dist/utils/terminal.js.map +1 -1
  68. package/dist/utils/webui.d.ts +8 -0
  69. package/dist/utils/webui.d.ts.map +1 -0
  70. package/dist/utils/webui.js +35 -0
  71. package/dist/utils/webui.js.map +1 -0
  72. package/dist/web/client/src/components/AIToolLaunchModal.d.ts +9 -0
  73. package/dist/web/client/src/components/AIToolLaunchModal.d.ts.map +1 -0
  74. package/dist/web/client/src/components/AIToolLaunchModal.js +363 -0
  75. package/dist/web/client/src/components/AIToolLaunchModal.js.map +1 -0
  76. package/dist/web/client/src/components/BranchGraph.d.ts.map +1 -1
  77. package/dist/web/client/src/components/BranchGraph.js +46 -49
  78. package/dist/web/client/src/components/BranchGraph.js.map +1 -1
  79. package/dist/web/client/src/components/CustomToolForm.d.ts +23 -0
  80. package/dist/web/client/src/components/CustomToolForm.d.ts.map +1 -0
  81. package/dist/web/client/src/components/CustomToolForm.js +209 -0
  82. package/dist/web/client/src/components/CustomToolForm.js.map +1 -0
  83. package/dist/web/client/src/components/CustomToolList.d.ts +10 -0
  84. package/dist/web/client/src/components/CustomToolList.d.ts.map +1 -0
  85. package/dist/web/client/src/components/CustomToolList.js +57 -0
  86. package/dist/web/client/src/components/CustomToolList.js.map +1 -0
  87. package/dist/web/client/src/components/EnvEditor.d.ts.map +1 -1
  88. package/dist/web/client/src/components/EnvEditor.js +33 -26
  89. package/dist/web/client/src/components/EnvEditor.js.map +1 -1
  90. package/dist/web/client/src/components/EnvironmentEditor.d.ts +17 -0
  91. package/dist/web/client/src/components/EnvironmentEditor.d.ts.map +1 -0
  92. package/dist/web/client/src/components/EnvironmentEditor.js +22 -0
  93. package/dist/web/client/src/components/EnvironmentEditor.js.map +1 -0
  94. package/dist/web/client/src/components/Terminal.d.ts.map +1 -1
  95. package/dist/web/client/src/components/Terminal.js +10 -3
  96. package/dist/web/client/src/components/Terminal.js.map +1 -1
  97. package/dist/web/client/src/components/branch-detail/BranchInfoCards.d.ts +10 -0
  98. package/dist/web/client/src/components/branch-detail/BranchInfoCards.d.ts.map +1 -0
  99. package/dist/web/client/src/components/branch-detail/BranchInfoCards.js +104 -0
  100. package/dist/web/client/src/components/branch-detail/BranchInfoCards.js.map +1 -0
  101. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.d.ts +22 -0
  102. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.d.ts.map +1 -0
  103. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.js +79 -0
  104. package/dist/web/client/src/components/branch-detail/SessionHistoryTable.js.map +1 -0
  105. package/dist/web/client/src/components/branch-detail/TerminalPanel.d.ts +11 -0
  106. package/dist/web/client/src/components/branch-detail/TerminalPanel.d.ts.map +1 -0
  107. package/dist/web/client/src/components/branch-detail/TerminalPanel.js +32 -0
  108. package/dist/web/client/src/components/branch-detail/TerminalPanel.js.map +1 -0
  109. package/dist/web/client/src/components/branch-detail/ToolLauncher.d.ts +40 -0
  110. package/dist/web/client/src/components/branch-detail/ToolLauncher.d.ts.map +1 -0
  111. package/dist/web/client/src/components/branch-detail/ToolLauncher.js +147 -0
  112. package/dist/web/client/src/components/branch-detail/ToolLauncher.js.map +1 -0
  113. package/dist/web/client/src/components/branch-detail/index.d.ts +5 -0
  114. package/dist/web/client/src/components/branch-detail/index.d.ts.map +1 -0
  115. package/dist/web/client/src/components/branch-detail/index.js +5 -0
  116. package/dist/web/client/src/components/branch-detail/index.js.map +1 -0
  117. package/dist/web/client/src/components/common/BranchCard.d.ts +17 -0
  118. package/dist/web/client/src/components/common/BranchCard.d.ts.map +1 -0
  119. package/dist/web/client/src/components/common/BranchCard.js +36 -0
  120. package/dist/web/client/src/components/common/BranchCard.js.map +1 -0
  121. package/dist/web/client/src/components/common/MetricCard.d.ts +10 -0
  122. package/dist/web/client/src/components/common/MetricCard.d.ts.map +1 -0
  123. package/dist/web/client/src/components/common/MetricCard.js +10 -0
  124. package/dist/web/client/src/components/common/MetricCard.js.map +1 -0
  125. package/dist/web/client/src/components/common/PageHeader.d.ts +12 -0
  126. package/dist/web/client/src/components/common/PageHeader.d.ts.map +1 -0
  127. package/dist/web/client/src/components/common/PageHeader.js +14 -0
  128. package/dist/web/client/src/components/common/PageHeader.js.map +1 -0
  129. package/dist/web/client/src/components/common/SearchInput.d.ts +14 -0
  130. package/dist/web/client/src/components/common/SearchInput.d.ts.map +1 -0
  131. package/dist/web/client/src/components/common/SearchInput.js +15 -0
  132. package/dist/web/client/src/components/common/SearchInput.js.map +1 -0
  133. package/dist/web/client/src/components/common/StatusBadge.d.ts +10 -0
  134. package/dist/web/client/src/components/common/StatusBadge.d.ts.map +1 -0
  135. package/dist/web/client/src/components/common/StatusBadge.js +15 -0
  136. package/dist/web/client/src/components/common/StatusBadge.js.map +1 -0
  137. package/dist/web/client/src/components/common/index.d.ts +6 -0
  138. package/dist/web/client/src/components/common/index.d.ts.map +1 -0
  139. package/dist/web/client/src/components/common/index.js +6 -0
  140. package/dist/web/client/src/components/common/index.js.map +1 -0
  141. package/dist/web/client/src/components/ui/alert.d.ts +9 -0
  142. package/dist/web/client/src/components/ui/alert.d.ts.map +1 -0
  143. package/dist/web/client/src/components/ui/alert.js +25 -0
  144. package/dist/web/client/src/components/ui/alert.js.map +1 -0
  145. package/dist/web/client/src/components/ui/badge.d.ts +10 -0
  146. package/dist/web/client/src/components/ui/badge.d.ts.map +1 -0
  147. package/dist/web/client/src/components/ui/badge.js +25 -0
  148. package/dist/web/client/src/components/ui/badge.js.map +1 -0
  149. package/dist/web/client/src/components/ui/button.d.ts +12 -0
  150. package/dist/web/client/src/components/ui/button.d.ts.map +1 -0
  151. package/dist/web/client/src/components/ui/button.js +33 -0
  152. package/dist/web/client/src/components/ui/button.js.map +1 -0
  153. package/dist/web/client/src/components/ui/card.d.ts +9 -0
  154. package/dist/web/client/src/components/ui/card.d.ts.map +1 -0
  155. package/dist/web/client/src/components/ui/card.js +16 -0
  156. package/dist/web/client/src/components/ui/card.js.map +1 -0
  157. package/dist/web/client/src/components/ui/index.d.ts +8 -0
  158. package/dist/web/client/src/components/ui/index.d.ts.map +1 -0
  159. package/dist/web/client/src/components/ui/index.js +8 -0
  160. package/dist/web/client/src/components/ui/index.js.map +1 -0
  161. package/dist/web/client/src/components/ui/input.d.ts +4 -0
  162. package/dist/web/client/src/components/ui/input.d.ts.map +1 -0
  163. package/dist/web/client/src/components/ui/input.js +8 -0
  164. package/dist/web/client/src/components/ui/input.js.map +1 -0
  165. package/dist/web/client/src/components/ui/select.d.ts +14 -0
  166. package/dist/web/client/src/components/ui/select.d.ts.map +1 -0
  167. package/dist/web/client/src/components/ui/select.js +39 -0
  168. package/dist/web/client/src/components/ui/select.js.map +1 -0
  169. package/dist/web/client/src/components/ui/table.d.ts +11 -0
  170. package/dist/web/client/src/components/ui/table.d.ts.map +1 -0
  171. package/dist/web/client/src/components/ui/table.js +21 -0
  172. package/dist/web/client/src/components/ui/table.js.map +1 -0
  173. package/dist/web/client/src/hooks/useSessions.d.ts.map +1 -1
  174. package/dist/web/client/src/hooks/useSessions.js +6 -1
  175. package/dist/web/client/src/hooks/useSessions.js.map +1 -1
  176. package/dist/web/client/src/lib/utils.d.ts +7 -0
  177. package/dist/web/client/src/lib/utils.d.ts.map +1 -0
  178. package/dist/web/client/src/lib/utils.js +10 -0
  179. package/dist/web/client/src/lib/utils.js.map +1 -0
  180. package/dist/web/client/src/lib/websocket.d.ts +7 -0
  181. package/dist/web/client/src/lib/websocket.d.ts.map +1 -1
  182. package/dist/web/client/src/lib/websocket.js +44 -0
  183. package/dist/web/client/src/lib/websocket.js.map +1 -1
  184. package/dist/web/client/src/pages/BranchDetailPage.d.ts.map +1 -1
  185. package/dist/web/client/src/pages/BranchDetailPage.js +125 -376
  186. package/dist/web/client/src/pages/BranchDetailPage.js.map +1 -1
  187. package/dist/web/client/src/pages/BranchListPage.d.ts.map +1 -1
  188. package/dist/web/client/src/pages/BranchListPage.js +89 -127
  189. package/dist/web/client/src/pages/BranchListPage.js.map +1 -1
  190. package/dist/web/client/src/pages/ConfigManagementPage.d.ts.map +1 -1
  191. package/dist/web/client/src/pages/ConfigManagementPage.js +46 -41
  192. package/dist/web/client/src/pages/ConfigManagementPage.js.map +1 -1
  193. package/dist/web/client/src/pages/ConfigPage.d.ts +3 -0
  194. package/dist/web/client/src/pages/ConfigPage.d.ts.map +1 -0
  195. package/dist/web/client/src/pages/ConfigPage.js +216 -0
  196. package/dist/web/client/src/pages/ConfigPage.js.map +1 -0
  197. package/dist/web/client/vite.config.d.ts.map +1 -1
  198. package/dist/web/client/vite.config.js +8 -1
  199. package/dist/web/client/vite.config.js.map +1 -1
  200. package/dist/web/server/index.d.ts +24 -2
  201. package/dist/web/server/index.d.ts.map +1 -1
  202. package/dist/web/server/index.js +46 -15
  203. package/dist/web/server/index.js.map +1 -1
  204. package/dist/web/server/pty/manager.d.ts +12 -10
  205. package/dist/web/server/pty/manager.d.ts.map +1 -1
  206. package/dist/web/server/pty/manager.js +76 -43
  207. package/dist/web/server/pty/manager.js.map +1 -1
  208. package/dist/web/server/routes/sessions.d.ts.map +1 -1
  209. package/dist/web/server/routes/sessions.js +35 -2
  210. package/dist/web/server/routes/sessions.js.map +1 -1
  211. package/dist/web/server/routes/worktrees.js +2 -2
  212. package/dist/web/server/routes/worktrees.js.map +1 -1
  213. package/dist/web/server/services/worktrees.d.ts.map +1 -1
  214. package/dist/web/server/services/worktrees.js +7 -1
  215. package/dist/web/server/services/worktrees.js.map +1 -1
  216. package/dist/web/server/tray.d.ts +25 -0
  217. package/dist/web/server/tray.d.ts.map +1 -0
  218. package/dist/web/server/tray.js +98 -0
  219. package/dist/web/server/tray.js.map +1 -0
  220. package/dist/web/server/websocket/handler.d.ts +18 -2
  221. package/dist/web/server/websocket/handler.d.ts.map +1 -1
  222. package/dist/web/server/websocket/handler.js +82 -9
  223. package/dist/web/server/websocket/handler.js.map +1 -1
  224. package/package.json +15 -2
  225. package/src/claude.ts +26 -15
  226. package/src/cli/ui/__tests__/components/App.protected-branch.test.tsx +1 -1
  227. package/src/cli/ui/__tests__/components/common/Select.test.tsx +11 -0
  228. package/src/cli/ui/__tests__/components/screens/BranchListScreen.test.tsx +3 -1
  229. package/src/cli/ui/__tests__/components/screens/BranchQuickStartScreen.test.tsx +4 -4
  230. package/src/cli/ui/components/App.tsx +33 -133
  231. package/src/cli/ui/components/common/Select.tsx +2 -2
  232. package/src/cli/ui/components/screens/BranchListScreen.tsx +28 -21
  233. package/src/cli/ui/components/screens/BranchQuickStartScreen.tsx +41 -46
  234. package/src/cli/ui/utils/continueSession.ts +1 -7
  235. package/src/codex.ts +31 -22
  236. package/src/config/builtin-tools.ts +6 -2
  237. package/src/config/shared-env.ts +139 -0
  238. package/src/gemini.ts +35 -22
  239. package/src/index.ts +13 -8
  240. package/src/logging/logger.ts +5 -2
  241. package/src/qwen.ts +28 -19
  242. package/src/services/aiToolResolver.ts +276 -0
  243. package/src/services/customToolResolver.ts +98 -0
  244. package/src/shared/aiToolConstants.ts +30 -0
  245. package/src/trayicon.d.ts +30 -0
  246. package/src/types/tools.ts +15 -0
  247. package/src/utils/prompt.ts +15 -9
  248. package/src/utils/session.ts +80 -26
  249. package/src/utils/terminal.ts +11 -41
  250. package/src/utils/webui.ts +43 -0
  251. package/src/web/client/components.json +21 -0
  252. package/src/web/client/src/components/AIToolLaunchModal.tsx +575 -0
  253. package/src/web/client/src/components/BranchGraph.tsx +95 -75
  254. package/src/web/client/src/components/CustomToolForm.tsx +386 -0
  255. package/src/web/client/src/components/CustomToolList.tsx +119 -0
  256. package/src/web/client/src/components/EnvEditor.tsx +91 -81
  257. package/src/web/client/src/components/EnvironmentEditor.tsx +97 -0
  258. package/src/web/client/src/components/Terminal.tsx +11 -3
  259. package/src/web/client/src/components/branch-detail/BranchInfoCards.tsx +179 -0
  260. package/src/web/client/src/components/branch-detail/SessionHistoryTable.tsx +181 -0
  261. package/src/web/client/src/components/branch-detail/TerminalPanel.tsx +92 -0
  262. package/src/web/client/src/components/branch-detail/ToolLauncher.tsx +327 -0
  263. package/src/web/client/src/components/branch-detail/index.ts +4 -0
  264. package/src/web/client/src/components/common/BranchCard.tsx +117 -0
  265. package/src/web/client/src/components/common/MetricCard.tsx +22 -0
  266. package/src/web/client/src/components/common/PageHeader.tsx +44 -0
  267. package/src/web/client/src/components/common/SearchInput.tsx +40 -0
  268. package/src/web/client/src/components/common/StatusBadge.tsx +37 -0
  269. package/src/web/client/src/components/common/index.ts +5 -0
  270. package/src/web/client/src/components/ui/alert.tsx +63 -0
  271. package/src/web/client/src/components/ui/badge.tsx +44 -0
  272. package/src/web/client/src/components/ui/button.tsx +57 -0
  273. package/src/web/client/src/components/ui/card.tsx +82 -0
  274. package/src/web/client/src/components/ui/index.ts +32 -0
  275. package/src/web/client/src/components/ui/input.tsx +21 -0
  276. package/src/web/client/src/components/ui/select.tsx +156 -0
  277. package/src/web/client/src/components/ui/table.tsx +119 -0
  278. package/src/web/client/src/hooks/useSessions.ts +10 -1
  279. package/src/web/client/src/index.css +46 -816
  280. package/src/web/client/src/lib/utils.ts +10 -0
  281. package/src/web/client/src/lib/websocket.ts +48 -1
  282. package/src/web/client/src/pages/BranchDetailPage.tsx +247 -723
  283. package/src/web/client/src/pages/BranchListPage.tsx +190 -236
  284. package/src/web/client/src/pages/ConfigManagementPage.tsx +94 -76
  285. package/src/web/client/src/pages/ConfigPage.tsx +362 -0
  286. package/src/web/client/vite.config.ts +8 -1
  287. package/src/web/server/index.ts +72 -15
  288. package/src/web/server/pty/manager.ts +128 -55
  289. package/src/web/server/routes/sessions.ts +59 -7
  290. package/src/web/server/routes/worktrees.ts +3 -3
  291. package/src/web/server/services/worktrees.ts +12 -4
  292. package/src/web/server/tray.ts +120 -0
  293. package/src/web/server/websocket/handler.ts +119 -13
  294. package/dist/client/assets/index-DeNwPosA.css +0 -1
  295. package/dist/client/assets/index-Dl798X5w.js +0 -32
@@ -1,834 +1,64 @@
1
- :root {
2
- --color-background: #050912;
3
- --color-surface: #0f172a;
4
- --color-surface-muted: #111c30;
5
- --color-card: rgba(15, 23, 42, 0.92);
6
- --color-border: rgba(148, 163, 184, 0.2);
7
- --color-border-strong: rgba(148, 163, 184, 0.45);
8
- --color-text: #e2e8f0;
9
- --color-muted: #94a3b8;
10
- --color-accent: #5eead4;
11
- --color-accent-strong: #2dd4bf;
12
- --color-warning: #fbbf24;
13
- --color-error: #fb7185;
14
- --color-success: #34d399;
15
- --color-remote: #60a5fa;
16
- --color-local: #c084fc;
17
- --shadow-card: 0 20px 45px rgba(2, 6, 23, 0.55);
18
- --shadow-soft: 0 10px 25px rgba(15, 23, 42, 0.45);
19
- --radius-lg: 24px;
20
- --radius-md: 16px;
21
- --radius-pill: 999px;
22
- font-family: "Inter", "Noto Sans JP", -apple-system, BlinkMacSystemFont, "Segoe UI",
23
- "Helvetica Neue", Arial, sans-serif;
24
- }
25
-
26
- * {
27
- box-sizing: border-box;
28
- margin: 0;
29
- padding: 0;
30
- }
31
-
32
- body {
33
- font-family: "Inter", "Noto Sans JP", -apple-system, BlinkMacSystemFont, "Segoe UI",
34
- "Helvetica Neue", Arial, sans-serif;
35
- background: radial-gradient(circle at top, #0b1221, #050912 55%);
36
- color: var(--color-text);
37
- min-height: 100vh;
38
- -webkit-font-smoothing: antialiased;
39
- -moz-osx-font-smoothing: grayscale;
40
- }
41
-
42
- #root {
43
- min-height: 100vh;
44
- }
45
-
46
- a {
47
- color: var(--color-accent);
48
- text-decoration: none;
49
- }
50
-
51
- a:hover {
52
- color: var(--color-accent-strong);
53
- }
54
-
55
- button {
56
- font: inherit;
57
- }
58
-
59
- .app-shell {
60
- min-height: 100vh;
61
- padding: 2.5rem 1.75rem 3rem;
62
- background: linear-gradient(135deg, rgba(23, 37, 84, 0.45), rgba(8, 145, 178, 0.08));
63
- }
64
-
65
- @media (max-width: 768px) {
66
- .app-shell {
67
- padding: 1.5rem 1rem 2rem;
68
- }
69
- }
70
-
71
- .page-hero {
72
- background: radial-gradient(circle at 15% 20%, rgba(94, 234, 212, 0.25), transparent 55%),
73
- radial-gradient(circle at 80% 0%, rgba(14, 165, 233, 0.2), transparent 45%),
74
- var(--color-card);
75
- border: 1px solid var(--color-border);
76
- border-radius: var(--radius-lg);
77
- padding: 2rem;
78
- margin-bottom: 2rem;
79
- box-shadow: var(--shadow-card);
80
- }
81
-
82
- .page-hero--compact {
83
- padding: 1.75rem 2rem;
84
- }
85
-
86
- .page-hero__eyebrow {
87
- letter-spacing: 0.3em;
88
- text-transform: uppercase;
89
- color: var(--color-muted);
90
- font-size: 0.8rem;
91
- margin-bottom: 0.75rem;
92
- }
93
-
94
- .page-hero h1 {
95
- font-size: clamp(1.8rem, 3vw, 2.8rem);
96
- margin-bottom: 0.5rem;
97
- }
98
-
99
- .page-hero__subtitle,
100
- .page-hero__meta {
101
- color: var(--color-muted);
102
- margin-top: 0.5rem;
103
- font-size: 0.95rem;
104
- }
105
-
106
- .page-hero__actions {
107
- display: flex;
108
- flex-wrap: wrap;
109
- gap: 0.8rem;
110
- margin-top: 1.5rem;
111
- }
112
-
113
- .page-content {
114
- width: min(1400px, 100%);
115
- margin: 0 auto;
116
- display: flex;
117
- flex-direction: column;
118
- gap: 1.5rem;
119
- }
120
-
121
- .page-content--wide {
122
- width: min(1600px, 100%);
123
- }
124
-
125
- .page-content--narrow {
126
- max-width: 960px;
127
- }
128
-
129
- .metrics-grid {
130
- display: grid;
131
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
132
- gap: 1rem;
133
- }
134
-
135
- .metric-card {
136
- background: var(--color-card);
137
- border: 1px solid var(--color-border);
138
- border-radius: var(--radius-md);
139
- padding: 1.25rem;
140
- box-shadow: var(--shadow-soft);
141
- }
142
-
143
- .metric-card__label {
144
- font-size: 0.85rem;
145
- text-transform: uppercase;
146
- letter-spacing: 0.1em;
147
- color: var(--color-muted);
148
- }
149
-
150
- .metric-card__value {
151
- font-size: 2rem;
152
- font-weight: 600;
153
- margin-top: 0.25rem;
154
- }
155
-
156
- .metric-card__hint {
157
- margin-top: 0.35rem;
158
- color: var(--color-muted);
159
- font-size: 0.85rem;
160
- }
161
-
162
- .page-layout {
163
- display: flex;
164
- flex-direction: column;
165
- gap: 1rem;
166
- }
167
-
168
- .page-layout--split {
169
- display: grid;
170
- grid-template-columns: minmax(320px, 420px) minmax(0, 1fr);
171
- gap: 1.5rem;
172
- align-items: start;
173
- }
174
-
175
- @media (max-width: 1024px) {
176
- .page-layout--split {
177
- grid-template-columns: 1fr;
178
- }
179
- }
180
-
181
- .info-stack {
182
- display: flex;
183
- flex-direction: column;
184
- gap: 1rem;
185
- }
186
-
187
- .terminal-column {
188
- position: relative;
189
- min-height: 100%;
190
- }
191
-
192
- .toolbar {
193
- display: flex;
194
- gap: 1rem;
195
- align-items: center;
196
- flex-wrap: wrap;
197
- }
198
-
199
- .toolbar__field {
200
- flex: 1;
201
- display: flex;
202
- align-items: center;
203
- gap: 0.5rem;
204
- background: var(--color-surface);
205
- border-radius: var(--radius-md);
206
- border: 1px solid var(--color-border);
207
- padding: 0.75rem 1rem;
208
- color: var(--color-muted);
209
- }
210
-
211
- .toolbar__icon {
212
- font-size: 1rem;
213
- }
214
-
215
- .search-input {
216
- flex: 1;
217
- border: none;
218
- background: transparent;
219
- color: var(--color-text);
220
- font-size: 1rem;
221
- }
222
-
223
- .search-input:focus {
224
- outline: none;
225
- }
226
-
227
- .toolbar__count {
228
- color: var(--color-muted);
229
- font-size: 0.9rem;
230
- }
231
-
232
- .page-state {
233
- background: var(--color-card);
234
- border: 1px solid var(--color-border);
235
- border-radius: var(--radius-lg);
236
- padding: 2rem;
237
- box-shadow: var(--shadow-soft);
238
- }
239
-
240
- .page-state h1,
241
- .page-state h2,
242
- .page-state h3 {
243
- margin-bottom: 0.5rem;
244
- }
245
-
246
- .page-state--card {
247
- text-align: left;
248
- }
249
-
250
- .page-state--centered {
251
- text-align: center;
252
- }
253
-
254
- .empty-state {
255
- text-align: center;
256
- padding: 2.5rem 2rem;
257
- border-radius: var(--radius-lg);
258
- border: 1px dashed var(--color-border-strong);
259
- background: rgba(15, 23, 42, 0.7);
260
- }
261
-
262
- .branch-grid {
263
- display: grid;
264
- grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
265
- gap: 1.25rem;
266
- }
267
-
268
- .branch-card {
269
- background: var(--color-card);
270
- border: 1px solid var(--color-border);
271
- border-radius: var(--radius-lg);
272
- padding: 1.5rem;
273
- display: flex;
274
- flex-direction: column;
275
- gap: 1rem;
276
- box-shadow: var(--shadow-soft);
277
- }
278
-
279
- .branch-card__header {
280
- display: flex;
281
- justify-content: space-between;
282
- gap: 1rem;
283
- flex-wrap: wrap;
284
- }
285
-
286
- .branch-card__header h2 {
287
- font-size: 1.2rem;
288
- word-break: break-all;
289
- }
290
-
291
- .branch-card__eyebrow {
292
- color: var(--color-muted);
293
- text-transform: uppercase;
294
- letter-spacing: 0.1em;
295
- font-size: 0.75rem;
296
- margin-bottom: 0.35rem;
297
- }
298
-
299
- .branch-card__commit {
300
- color: var(--color-muted);
301
- line-height: 1.5;
302
- }
303
-
304
- .branch-card__actions {
305
- display: flex;
306
- justify-content: space-between;
307
- gap: 0.75rem;
308
- flex-wrap: wrap;
309
- align-items: center;
310
- }
311
-
312
- .badge-group {
313
- display: flex;
314
- gap: 0.4rem;
315
- flex-wrap: wrap;
316
- }
317
-
318
- .status-badge {
319
- padding: 0.25rem 0.75rem;
320
- border-radius: var(--radius-pill);
321
- font-size: 0.8rem;
322
- font-weight: 600;
323
- border: 1px solid transparent;
324
- }
325
-
326
- .status-badge--local {
327
- color: #fdf4ff;
328
- background: rgba(192, 132, 252, 0.15);
329
- border-color: rgba(192, 132, 252, 0.35);
330
- }
331
-
332
- .status-badge--remote {
333
- color: #dbeafe;
334
- background: rgba(96, 165, 250, 0.12);
335
- border-color: rgba(96, 165, 250, 0.35);
336
- }
337
-
338
- .status-badge--success {
339
- color: #042f2e;
340
- background: rgba(52, 211, 153, 0.85);
341
- border: none;
342
- }
343
-
344
- .status-badge--warning {
345
- color: #451a03;
346
- background: rgba(251, 191, 36, 0.9);
347
- border: none;
348
- }
349
-
350
- .status-badge--muted {
351
- color: var(--color-muted);
352
- background: rgba(148, 163, 184, 0.15);
353
- border-color: rgba(148, 163, 184, 0.4);
354
- }
355
-
356
- .pill-group {
357
- display: flex;
358
- gap: 0.5rem;
359
- flex-wrap: wrap;
360
- }
361
-
362
- .pill {
363
- padding: 0.25rem 0.85rem;
364
- border-radius: var(--radius-pill);
365
- background: rgba(148, 163, 184, 0.12);
366
- color: var(--color-muted);
367
- font-size: 0.85rem;
368
- }
369
-
370
- .pill--success {
371
- background: rgba(52, 211, 153, 0.15);
372
- color: var(--color-success);
373
- }
374
-
375
- .pill--warning {
376
- background: rgba(251, 191, 36, 0.18);
377
- color: var(--color-warning);
378
- }
379
-
380
- .info-pill {
381
- font-size: 0.85rem;
382
- padding: 0.3rem 0.85rem;
383
- border-radius: var(--radius-pill);
384
- border: 1px solid var(--color-border);
385
- background: rgba(15, 23, 42, 0.65);
386
- color: var(--color-muted);
387
- }
388
-
389
- .info-pill--success {
390
- border-color: rgba(52, 211, 153, 0.45);
391
- color: var(--color-success);
392
- }
393
-
394
- .info-pill--warning {
395
- border-color: rgba(251, 191, 36, 0.45);
396
- color: var(--color-warning);
397
- }
398
-
399
- .section-card {
400
- background: var(--color-card);
401
- border: 1px solid var(--color-border);
402
- border-radius: var(--radius-lg);
403
- padding: 1.75rem;
404
- box-shadow: var(--shadow-soft);
405
- display: flex;
406
- flex-direction: column;
407
- gap: 0.85rem;
408
- }
1
+ @import "tailwindcss";
409
2
 
410
- .section-card__body {
411
- color: var(--color-muted);
412
- line-height: 1.6;
413
- }
3
+ /* ===================================
4
+ Vercel/Next.js風 Design Tokens
5
+ =================================== */
414
6
 
415
- .metadata-grid {
416
- display: grid;
417
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
418
- gap: 1rem;
419
- }
7
+ @theme {
8
+ /* Background colors */
9
+ --color-background: hsl(0 0% 4%);
10
+ --color-foreground: hsl(0 0% 98%);
420
11
 
421
- .metadata-grid--compact {
422
- grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
423
- }
12
+ /* Card colors */
13
+ --color-card: hsl(0 0% 9%);
14
+ --color-card-foreground: hsl(0 0% 95%);
424
15
 
425
- .metadata-grid dt {
426
- font-size: 0.8rem;
427
- text-transform: uppercase;
428
- letter-spacing: 0.08em;
429
- color: var(--color-muted);
430
- }
431
-
432
- .metadata-grid dd {
433
- font-weight: 600;
434
- margin-top: 0.25rem;
435
- }
436
-
437
- .list-muted {
438
- list-style: none;
439
- color: var(--color-muted);
440
- line-height: 1.7;
441
- }
442
-
443
- .inline-banner {
444
- margin-top: 1rem;
445
- padding: 0.85rem 1.25rem;
446
- border-radius: var(--radius-md);
447
- font-weight: 500;
448
- }
16
+ /* Muted colors */
17
+ --color-muted: hsl(0 0% 15%);
18
+ --color-muted-foreground: hsl(0 0% 64%);
449
19
 
450
- .inline-banner--success {
451
- background: rgba(52, 211, 153, 0.15);
452
- color: var(--color-success);
453
- }
20
+ /* Border */
21
+ --color-border: hsl(0 0% 18%);
454
22
 
455
- .inline-banner--error {
456
- background: rgba(251, 113, 133, 0.18);
457
- color: var(--color-error);
458
- }
23
+ /* Primary (white-based for Vercel style) */
24
+ --color-primary: hsl(0 0% 100%);
25
+ --color-primary-foreground: hsl(0 0% 9%);
459
26
 
460
- .inline-banner--info {
461
- background: rgba(94, 234, 212, 0.12);
462
- color: var(--color-accent);
463
- }
27
+ /* Secondary */
28
+ --color-secondary: hsl(0 0% 15%);
29
+ --color-secondary-foreground: hsl(0 0% 100%);
464
30
 
465
- .terminal-section {
466
- gap: 1rem;
467
- }
31
+ /* Accent */
32
+ --color-accent: hsl(0 0% 15%);
33
+ --color-accent-foreground: hsl(0 0% 100%);
468
34
 
469
- .terminal-surface {
470
- border-radius: var(--radius-md);
471
- border: 1px solid var(--color-border);
472
- background: #050912;
473
- min-height: clamp(380px, 70vh, 85vh);
474
- height: clamp(380px, 70vh, 85vh);
475
- overflow: hidden;
476
- }
35
+ /* Destructive */
36
+ --color-destructive: hsl(0 84% 60%);
37
+ --color-destructive-foreground: hsl(0 0% 100%);
477
38
 
478
- .button {
479
- border-radius: var(--radius-pill);
480
- padding: 0.65rem 1.5rem;
481
- border: 1px solid transparent;
482
- font-weight: 600;
483
- cursor: pointer;
484
- transition: transform 0.15s ease, box-shadow 0.15s ease;
485
- }
39
+ /* Status colors */
40
+ --color-success: hsl(142 76% 36%);
41
+ --color-warning: hsl(38 92% 50%);
42
+ --color-error: hsl(0 84% 60%);
486
43
 
487
- .button--primary {
488
- background: linear-gradient(135deg, var(--color-accent), var(--color-accent-strong));
489
- color: #04121a;
490
- box-shadow: 0 10px 25px rgba(45, 212, 191, 0.4);
491
- }
44
+ /* Branch colors */
45
+ --color-local: hsl(270 91% 65%);
46
+ --color-remote: hsl(217 91% 60%);
492
47
 
493
- .button--secondary {
494
- border-color: rgba(94, 234, 212, 0.5);
495
- color: var(--color-accent);
496
- background: transparent;
48
+ /* Radius */
49
+ --radius-sm: 4px;
50
+ --radius-md: 6px;
51
+ --radius-lg: 8px;
52
+ --radius-xl: 12px;
53
+ --radius-full: 9999px;
497
54
  }
498
55
 
499
- .button--ghost {
56
+ /* Base styles for shadcn/ui integration */
57
+ * {
500
58
  border-color: var(--color-border);
501
- background: transparent;
502
- color: var(--color-text);
503
- }
504
-
505
- .button:disabled {
506
- opacity: 0.55;
507
- cursor: not-allowed;
508
- transform: none;
509
- box-shadow: none;
510
- }
511
-
512
- .button:not(:disabled):hover {
513
- transform: translateY(-1px);
514
- }
515
-
516
- .link-back {
517
- display: inline-flex;
518
- align-items: center;
519
- font-size: 0.9rem;
520
- color: var(--color-muted);
521
- margin-bottom: 0.75rem;
522
- }
523
-
524
- .session-hint {
525
- border-style: dashed;
526
- border-color: rgba(94, 234, 212, 0.35);
527
- }
528
- .terminal-section__header {
529
- display: flex;
530
- justify-content: space-between;
531
- gap: 1rem;
532
- flex-wrap: wrap;
533
- align-items: flex-start;
534
- }
535
-
536
- .terminal-section__controls {
537
- display: flex;
538
- gap: 0.5rem;
539
- }
540
-
541
- .terminal-overlay-backdrop {
542
- position: fixed;
543
- inset: 0;
544
- background: rgba(2, 6, 23, 0.75);
545
- backdrop-filter: blur(4px);
546
- z-index: 900;
547
- }
548
-
549
- .terminal-section--fullscreen {
550
- position: fixed;
551
- inset: 2rem;
552
- z-index: 1000;
553
- width: calc(100vw - 4rem);
554
- max-width: calc(100vw - 4rem);
555
- height: calc(100vh - 4rem);
556
- box-shadow: 0 30px 60px rgba(2, 6, 23, 0.7);
557
- display: flex;
558
- flex-direction: column;
559
- }
560
-
561
- @media (max-width: 768px) {
562
- .terminal-section--fullscreen {
563
- inset: 1rem;
564
- width: calc(100vw - 2rem);
565
- max-width: calc(100vw - 2rem);
566
- height: calc(100vh - 2rem);
567
- }
568
- }
569
-
570
- .terminal-section--fullscreen .terminal-surface {
571
- flex: 1;
572
- height: auto;
573
- min-height: unset;
574
- }
575
-
576
- .terminal-section__close {
577
- position: absolute;
578
- top: 1rem;
579
- right: 1rem;
580
- width: 2.5rem;
581
- height: 2.5rem;
582
- border-radius: 50%;
583
- border: 1px solid rgba(255, 255, 255, 0.2);
584
- background: rgba(15, 23, 42, 0.8);
585
- color: var(--color-text);
586
- font-size: 1.25rem;
587
- cursor: pointer;
588
- }
589
-
590
- .terminal-section__close:hover {
591
- background: rgba(15, 23, 42, 0.95);
592
- }
593
-
594
- /* =======================
595
- Branch Graph
596
- ======================= */
597
-
598
- .branch-graph-panel {
599
- background: var(--color-card);
600
- border: 1px solid var(--color-border);
601
- border-radius: var(--radius-lg);
602
- padding: 1.75rem 2rem;
603
- box-shadow: var(--shadow-card);
604
- }
605
-
606
- .branch-graph-panel + .metrics-grid {
607
- margin-top: 1.5rem;
608
- }
609
-
610
- .branch-graph-panel__header {
611
- display: flex;
612
- justify-content: space-between;
613
- gap: 1.5rem;
614
- flex-wrap: wrap;
615
- margin-bottom: 1.5rem;
616
- }
617
-
618
- .branch-graph-panel__eyebrow {
619
- letter-spacing: 0.3em;
620
- text-transform: uppercase;
621
- color: var(--color-muted);
622
- font-size: 0.8rem;
623
- margin-bottom: 0.25rem;
624
- }
625
-
626
- .branch-graph-panel__legend {
627
- display: flex;
628
- flex-wrap: wrap;
629
- gap: 0.5rem;
630
- align-items: center;
631
- }
632
-
633
- .branch-graph-panel__empty {
634
- text-align: center;
635
- color: var(--color-muted);
636
59
  }
637
60
 
638
- .graph-chip {
639
- font-size: 0.75rem;
640
- letter-spacing: 0.1em;
641
- text-transform: uppercase;
642
- padding: 0.35rem 0.75rem;
643
- border-radius: var(--radius-pill);
644
- border: 1px solid var(--color-border);
645
- background: rgba(15, 23, 42, 0.7);
646
- }
647
-
648
- .graph-chip--base {
649
- border-color: var(--color-accent);
650
- color: var(--color-accent);
651
- }
652
-
653
- .graph-chip--local {
654
- border-color: var(--color-local);
655
- color: var(--color-local);
656
- }
657
-
658
- .graph-chip--remote {
659
- border-color: var(--color-remote);
660
- color: var(--color-remote);
661
- }
662
-
663
- .graph-chip--worktree {
664
- border-color: var(--color-success);
665
- color: var(--color-success);
666
- }
667
-
668
- .branch-graph {
669
- display: flex;
670
- flex-direction: column;
671
- gap: 1.25rem;
672
- }
673
-
674
- .branch-graph__lane {
675
- display: flex;
676
- flex-direction: column;
677
- gap: 0.75rem;
678
- padding-bottom: 0.75rem;
679
- border-bottom: 1px solid rgba(148, 163, 184, 0.2);
680
- }
681
-
682
- .branch-graph__lane:last-child {
683
- border-bottom: none;
684
- padding-bottom: 0;
685
- }
686
-
687
- .branch-graph__lane-heading {
688
- display: flex;
689
- justify-content: space-between;
690
- align-items: baseline;
691
- gap: 1rem;
692
- flex-wrap: wrap;
693
- }
694
-
695
- .branch-graph__lane-label {
696
- font-weight: 600;
697
- }
698
-
699
- .branch-graph__lane-meta {
700
- margin-left: 0.5rem;
701
- font-size: 0.75rem;
702
- letter-spacing: 0.1em;
703
- color: var(--color-muted);
704
- }
705
-
706
- .lane-meta--muted {
707
- color: rgba(148, 163, 184, 0.6);
708
- }
709
-
710
- .branch-graph__lane-count {
711
- color: var(--color-muted);
712
- font-size: 0.85rem;
713
- }
714
-
715
- .branch-graph__track {
716
- display: flex;
717
- align-items: center;
718
- gap: 1rem;
719
- overflow-x: auto;
720
- padding-bottom: 0.5rem;
721
- }
722
-
723
- .branch-graph__node-link {
724
- position: relative;
725
- text-decoration: none;
726
- min-width: 180px;
727
- flex-shrink: 0;
728
- }
729
-
730
- .branch-graph__node {
731
- position: relative;
732
- border: 1px solid var(--color-border);
733
- border-radius: var(--radius-md);
734
- padding: 0.85rem 1rem;
735
- background: var(--color-surface-muted);
736
- box-shadow: var(--shadow-soft);
737
- }
738
-
739
- .branch-graph__node::before {
740
- content: "";
741
- position: absolute;
742
- width: 28px;
743
- height: 2px;
744
- background: var(--color-border-strong);
745
- left: -22px;
746
- top: 50%;
747
- transform: translateY(-50%);
748
- opacity: 0.6;
749
- }
750
-
751
- .branch-graph__node--base::before {
752
- display: none;
753
- }
754
-
755
- .branch-graph__node--local {
756
- border-color: rgba(192, 132, 252, 0.8);
757
- box-shadow: 0 15px 35px rgba(148, 73, 255, 0.25);
758
- }
759
-
760
- .branch-graph__node--remote {
761
- border-color: rgba(96, 165, 250, 0.8);
762
- box-shadow: 0 15px 35px rgba(14, 165, 233, 0.25);
763
- }
764
-
765
- .branch-graph__node--merged {
766
- background: rgba(37, 99, 235, 0.25);
767
- }
768
-
769
- .branch-graph__node--active {
770
- background: rgba(8, 145, 178, 0.25);
771
- }
772
-
773
- .branch-graph__node-label {
774
- font-weight: 600;
775
- display: block;
776
- }
777
-
778
- .branch-graph__node-meta {
779
- font-size: 0.75rem;
780
- color: var(--color-muted);
781
- }
782
-
783
- .branch-graph__tooltip {
784
- position: absolute;
785
- bottom: calc(100% + 0.5rem);
786
- left: 0;
787
- background: var(--color-surface);
788
- border: 1px solid var(--color-border-strong);
789
- border-radius: var(--radius-md);
790
- padding: 0.75rem;
791
- width: min(260px, 60vw);
792
- box-shadow: var(--shadow-card);
793
- opacity: 0;
794
- pointer-events: none;
795
- transform: translateY(0.4rem);
796
- transition:
797
- opacity 0.15s ease,
798
- transform 0.15s ease;
799
- z-index: 5;
800
- }
801
-
802
- .branch-graph__tooltip p {
803
- font-size: 0.8rem;
804
- color: var(--color-text);
805
- }
806
-
807
- .branch-graph__tooltip p + p {
808
- margin-top: 0.25rem;
809
- color: var(--color-muted);
810
- }
811
-
812
- .branch-graph__node:hover .branch-graph__tooltip,
813
- .branch-graph__node:focus-within .branch-graph__tooltip {
814
- opacity: 1;
815
- transform: translateY(0);
816
- }
817
-
818
- @media (max-width: 768px) {
819
- .branch-graph__track {
820
- flex-direction: column;
821
- align-items: flex-start;
822
- }
823
-
824
- .branch-graph__node::before {
825
- width: 2px;
826
- height: 24px;
827
- left: 50%;
828
- top: -18px;
829
- }
830
-
831
- .branch-graph__node-link {
832
- width: 100%;
833
- }
61
+ body {
62
+ background-color: var(--color-background);
63
+ color: var(--color-foreground);
834
64
  }