@shiyuphan/follow-me 0.2.0 → 0.3.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 (152) hide show
  1. package/README.md +44 -55
  2. package/dist/src/cli.js +566 -188
  3. package/dist/src/comments.js +66 -5
  4. package/dist/src/git.js +12 -0
  5. package/dist/src/host.js +19 -8
  6. package/dist/src/install.js +21 -0
  7. package/dist/src/plan.js +1 -1
  8. package/dist/src/prompt.js +343 -39
  9. package/dist/src/server.js +176 -67
  10. package/dist/src/session.js +13 -11
  11. package/dist/ui/dist/assets/abnfDiagram-WEYOIA3C-DcmzRkVZ.js +1 -0
  12. package/dist/ui/dist/assets/arc-T5QB0T1C.js +1 -0
  13. package/dist/ui/dist/assets/architecture-WOLXFQ4H-DUIkQTeE.js +1 -0
  14. package/dist/ui/dist/assets/architectureDiagram-ZHVYKT53-BUYi4-bA.js +36 -0
  15. package/dist/ui/dist/assets/array-BifhSqXX.js +1 -0
  16. package/dist/ui/dist/assets/blockDiagram-RJAE7QA3-dyJxtT9e.js +140 -0
  17. package/dist/ui/dist/assets/c4Diagram-XDPPPE54-CrAgiaZR.js +38 -0
  18. package/dist/ui/dist/assets/channel-wW7ebm0i.js +1 -0
  19. package/dist/ui/dist/assets/chunk-2E7WHVMD-C6fAf4Vj.js +88 -0
  20. package/dist/ui/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  21. package/dist/ui/dist/assets/chunk-4EMNKR2T-BLZjwZ4Q.js +1 -0
  22. package/dist/ui/dist/assets/chunk-55XCU76K-DGLK2Q-L.js +1 -0
  23. package/dist/ui/dist/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  24. package/dist/ui/dist/assets/chunk-7S6XSTFO-BablszTX.js +2 -0
  25. package/dist/ui/dist/assets/chunk-AQDTSKZB-Cuk3B_vb.js +72 -0
  26. package/dist/ui/dist/assets/chunk-DSNLSHJZ-DiC78RqE.js +127 -0
  27. package/dist/ui/dist/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
  28. package/dist/ui/dist/assets/chunk-HAGFOTED-X_RbvixX.js +62 -0
  29. package/dist/ui/dist/assets/chunk-HNE4Q36P-C14_x5ck.js +1 -0
  30. package/dist/ui/dist/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
  31. package/dist/ui/dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  32. package/dist/ui/dist/assets/chunk-NGNAAXSQ-C2Wy9Xmz.js +136 -0
  33. package/dist/ui/dist/assets/chunk-NQOKRVIF-Dxd0dtYR.js +213 -0
  34. package/dist/ui/dist/assets/chunk-UHW7PFBP-BIxePNUS.js +1 -0
  35. package/dist/ui/dist/assets/chunk-VQ5W62QI-CKSKLbj4.js +1 -0
  36. package/dist/ui/dist/assets/chunk-WQQL4CDK-CWNmZGlR.js +10 -0
  37. package/dist/ui/dist/assets/chunk-XXDRQBXY-D-I5QHgG.js +1 -0
  38. package/dist/ui/dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  39. package/dist/ui/dist/assets/chunk-YZO67HFG-DFP68CFd.js +1 -0
  40. package/dist/ui/dist/assets/chunk-ZAUX2LTX-DY90d4QG.js +1 -0
  41. package/dist/ui/dist/assets/chunk-ZCHMQSOR-Dlpr-5UC.js +2 -0
  42. package/dist/ui/dist/assets/classDiagram-v2-4MYWR3UA-CH9uhoLJ.js +217 -0
  43. package/dist/ui/dist/assets/cose-bilkent-JH36ORCC-DtYHrp8D.js +1 -0
  44. package/dist/ui/dist/assets/cynefin-EF2NZ3EQ-BtslbtrY.js +1 -0
  45. package/dist/ui/dist/assets/cynefinDiagram-WF24UDRP-DUU1Jcc7.js +62 -0
  46. package/dist/ui/dist/assets/cytoscape.esm-BegBNzOV.js +321 -0
  47. package/dist/ui/dist/assets/dagre-NK4GIZVX-CDlP-dRW.js +4 -0
  48. package/dist/ui/dist/assets/defaultLocale-BFoDCU3G.js +1 -0
  49. package/dist/ui/dist/assets/diagram-CBK3MWTC-DiV2fn-r.js +24 -0
  50. package/dist/ui/dist/assets/diagram-I5XIIV2D-Bg5RehGi.js +24 -0
  51. package/dist/ui/dist/assets/diagram-ODIL2UCW-CFmazz3f.js +30 -0
  52. package/dist/ui/dist/assets/diagram-PFBEJUXE-uw3ZBqDp.js +3 -0
  53. package/dist/ui/dist/assets/diagram-RJA3I4VV-uEOYYRYa.js +41 -0
  54. package/dist/ui/dist/assets/diagram-TYUNFSNR-BN58LF_3.js +200 -0
  55. package/dist/ui/dist/assets/dist-tWS_lXDS.js +1 -0
  56. package/dist/ui/dist/assets/ebnfDiagram-V4P3TTPT-B68Tz-w8.js +1 -0
  57. package/dist/ui/dist/assets/elk-QONTBCTQ-DZZohNea.js +27 -0
  58. package/dist/ui/dist/assets/erDiagram-KYQIGQAA-BH_m74pv.js +99 -0
  59. package/dist/ui/dist/assets/eventmodeling-K75KTNOO-CTp5FHos.js +1 -0
  60. package/dist/ui/dist/assets/flowDiagram-IUGLLWBU-CsCvexry.js +1 -0
  61. package/dist/ui/dist/assets/ganttDiagram-R7GPNTJY-BDau7_0f.js +292 -0
  62. package/dist/ui/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  63. package/dist/ui/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  64. package/dist/ui/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  65. package/dist/ui/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  66. package/dist/ui/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  67. package/dist/ui/dist/assets/gitGraph-VSP46ZUC-Bv84IoCm.js +1 -0
  68. package/dist/ui/dist/assets/gitGraphDiagram-PDYL7XHY-DzXcMlm8.js +106 -0
  69. package/dist/ui/dist/assets/graphlib-DS17s2tU.js +1 -0
  70. package/dist/ui/dist/assets/index-BTJoqVVN.js +133 -0
  71. package/dist/ui/dist/assets/index-D60U3smc.css +1 -0
  72. package/dist/ui/dist/assets/info-OHQRW6UA-222J0O_j.js +1 -0
  73. package/dist/ui/dist/assets/infoDiagram-MVDRKAX5-DE2sa3Vz.js +2 -0
  74. package/dist/ui/dist/assets/init-C-OQMol4.js +1 -0
  75. package/dist/ui/dist/assets/ishikawaDiagram-HPEHV2GE-BJDk0Zcj.js +70 -0
  76. package/dist/ui/dist/assets/journeyDiagram-BOSHW7O7-JSUXX5Hb.js +139 -0
  77. package/dist/ui/dist/assets/kanban-definition-FNSA4HC5-Bg79b49M.js +89 -0
  78. package/dist/ui/dist/assets/katex-B_JcIwqj.js +257 -0
  79. package/dist/ui/dist/assets/line-Bk5qQSIa.js +1 -0
  80. package/dist/ui/dist/assets/linear-PFnVMru5.js +1 -0
  81. package/dist/ui/dist/assets/mermaid-parser.core-Dcxlzc-S.js +7 -0
  82. package/dist/ui/dist/assets/mermaid.core-TeOHQJ00.js +44 -0
  83. package/dist/ui/dist/assets/mindmap-definition-6OY57UG3-IaNk8NnW.js +98 -0
  84. package/dist/ui/dist/assets/ordinal-BDEzSJ7C.js +1 -0
  85. package/dist/ui/dist/assets/packet-JDAUHWVQ-DMff5cVK.js +1 -0
  86. package/dist/ui/dist/assets/path-fybaL0A-.js +1 -0
  87. package/dist/ui/dist/assets/pegDiagram-ECIUJNBX-66Xu4YRc.js +1 -0
  88. package/dist/ui/dist/assets/pie-XZMESJXO-GEtzLCIM.js +1 -0
  89. package/dist/ui/dist/assets/pieDiagram-GNMPY74T-7jMBi-kU.js +39 -0
  90. package/dist/ui/dist/assets/prism-bash-D6zCJ74D.js +1 -0
  91. package/dist/ui/dist/assets/prism-c-04YixN25.js +1 -0
  92. package/dist/ui/dist/assets/prism-clike-DapgWyxx.js +1 -0
  93. package/dist/ui/dist/assets/prism-core-FDHlWQ43.js +1 -0
  94. package/dist/ui/dist/assets/prism-cpp-C-lJbC-6.js +1 -0
  95. package/dist/ui/dist/assets/prism-css-CPgOzxXp.js +1 -0
  96. package/dist/ui/dist/assets/prism-go-C_8qAH5n.js +1 -0
  97. package/dist/ui/dist/assets/prism-java-6wtusvIl.js +1 -0
  98. package/dist/ui/dist/assets/prism-javascript-BnO-swvr.js +1 -0
  99. package/dist/ui/dist/assets/prism-json-Dp_-W-Hv.js +1 -0
  100. package/dist/ui/dist/assets/prism-jsx-D-D0NWtC.js +1 -0
  101. package/dist/ui/dist/assets/prism-kotlin-BUlJgC-o.js +1 -0
  102. package/dist/ui/dist/assets/prism-markdown-Bc9-36OC.js +1 -0
  103. package/dist/ui/dist/assets/prism-markup-Cp04rIa1.js +1 -0
  104. package/dist/ui/dist/assets/prism-markup-templating-KkSMBj6Y.js +1 -0
  105. package/dist/ui/dist/assets/prism-php-Co4fM40K.js +1 -0
  106. package/dist/ui/dist/assets/prism-python-CfiSVtM6.js +1 -0
  107. package/dist/ui/dist/assets/prism-ruby-DFCASkuD.js +1 -0
  108. package/dist/ui/dist/assets/prism-rust-Bu9N8X3N.js +1 -0
  109. package/dist/ui/dist/assets/prism-sql-CYhVDMEE.js +1 -0
  110. package/dist/ui/dist/assets/prism-swift-B0kWc-ne.js +1 -0
  111. package/dist/ui/dist/assets/prism-toml-DKb54GAT.js +1 -0
  112. package/dist/ui/dist/assets/prism-tsx-p6J2Kc_4.js +1 -0
  113. package/dist/ui/dist/assets/prism-typescript-BMqONzxf.js +1 -0
  114. package/dist/ui/dist/assets/prism-yaml-C0JHu8gr.js +1 -0
  115. package/dist/ui/dist/assets/quadrantDiagram-D57K4MC3-8hIWayC2.js +7 -0
  116. package/dist/ui/dist/assets/radar-ABXABTNO-BTdwUOOF.js +1 -0
  117. package/dist/ui/dist/assets/railroad-I3PHUGI6-DcMbDqBL.js +1 -0
  118. package/dist/ui/dist/assets/railroad-abnf-LNEFI6M7-gTzUTWeI.js +1 -0
  119. package/dist/ui/dist/assets/railroad-ebnf-DWYD2UWJ-CNtdUPtk.js +1 -0
  120. package/dist/ui/dist/assets/railroad-peg-JR7BVNR7-DOiExAtE.js +1 -0
  121. package/dist/ui/dist/assets/railroadDiagram-Y72NRBL7-2kE_ygvM.js +1 -0
  122. package/dist/ui/dist/assets/requirementDiagram-EQYSW5RA-CoIAHRq2.js +84 -0
  123. package/dist/ui/dist/assets/rough.esm-Dy-Kn_BL.js +1 -0
  124. package/dist/ui/dist/assets/sankeyDiagram-SY24JHO5-7p8D3wim.js +40 -0
  125. package/dist/ui/dist/assets/sequenceDiagram-BLEHNHQU-C6QFnMvn.js +169 -0
  126. package/dist/ui/dist/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  127. package/dist/ui/dist/assets/src-FgijoBVs.js +1 -0
  128. package/dist/ui/dist/assets/stateDiagram-v2-A6IESKWZ-n9eAb_bT.js +291 -0
  129. package/dist/ui/dist/assets/swimlanes-B3ENRKFQ-U18mtUzX.js +1 -0
  130. package/dist/ui/dist/assets/swimlanesDiagram-AYQRV4AK-DX07QVy9.js +8 -0
  131. package/dist/ui/dist/assets/timeline-definition-JXYKGLGB-CD2Z8QGP.js +120 -0
  132. package/dist/ui/dist/assets/treeView-D4JQ5SDB-sqUjH5gB.js +1 -0
  133. package/dist/ui/dist/assets/treemap-SAJKECNS-DvZ38FP7.js +1 -0
  134. package/dist/ui/dist/assets/usecaseDiagram-WPOLBNNX-CqOGidaZ.js +328 -0
  135. package/dist/ui/dist/assets/vennDiagram-Q3Y3IDCW-D1SXSBQ5.js +34 -0
  136. package/dist/ui/dist/assets/wardley-7MLQ67FV-Bpwio-Dx.js +1 -0
  137. package/dist/ui/dist/assets/wardleyDiagram-IVAIDKWA-JSUXHMnk.js +78 -0
  138. package/dist/ui/dist/assets/xychartDiagram-4URNHDU4-B4IFqQTN.js +7 -0
  139. package/dist/ui/dist/index.html +15 -0
  140. package/dist/ui/dist/style.css +121 -0
  141. package/package.json +31 -10
  142. package/skills/follow-me/SKILL.md +15 -89
  143. package/dist/src/anthropic.js +0 -133
  144. package/dist/ui/app.js +0 -2201
  145. package/dist/ui/concerns.js +0 -165
  146. package/dist/ui/highlight.js +0 -221
  147. package/dist/ui/index.html +0 -94
  148. package/dist/ui/live.js +0 -184
  149. package/dist/ui/playback.js +0 -579
  150. package/dist/ui/questions.js +0 -189
  151. package/dist/ui/style.css +0 -1331
  152. package/dist/ui/summary.js +0 -45
package/dist/ui/style.css DELETED
@@ -1,1331 +0,0 @@
1
- :root {
2
- color-scheme: light dark;
3
- --bg: #ffffff;
4
- --panel: #f6f7f9;
5
- --border: #d8dce2;
6
- --text: #1c2026;
7
- --muted: #5f6774;
8
- --accent: #2459d6;
9
- --accent-text: #ffffff;
10
- --add-bg: #e3f6e8;
11
- --add-text: #0f5a26;
12
- --del-bg: #fde7e7;
13
- --del-text: #8a1c1c;
14
- --select-bg: #fff3c4;
15
- --select-edge: #b38600;
16
- --comment-bg: #eef3ff;
17
- --sev-blocker: #b42318;
18
- --sev-major: #8a5300;
19
- --sev-minor: #5f6774;
20
- --question-bg: #eef1f4;
21
- --question-edge: #5f6774;
22
- --tok-comment: #5b6472;
23
- --tok-keyword: #a8227e;
24
- --tok-string: #8a4b08;
25
- --tok-number: #00687d;
26
- --tok-function: #1a4fc4;
27
- --tok-type: #6b3fc0;
28
- --tok-property: #3b5f8f;
29
- --tok-tag: #b0261e;
30
- --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
31
- --gutter: 9ch;
32
- --sidebar: 300px;
33
- }
34
-
35
- @media (prefers-color-scheme: dark) {
36
- :root {
37
- --bg: #14171c;
38
- --panel: #1c2027;
39
- --border: #2f353f;
40
- --text: #e4e7ec;
41
- --muted: #8d96a5;
42
- --accent: #6c9bff;
43
- --accent-text: #0b1220;
44
- --add-bg: #12301c;
45
- --add-text: #7fdc9a;
46
- --del-bg: #3a1a1c;
47
- --del-text: #ff9b9b;
48
- --select-bg: #4a4012;
49
- --select-edge: #e0b830;
50
- --comment-bg: #1b2538;
51
- --sev-blocker: #ff9b9b;
52
- --sev-major: #f0b64a;
53
- --sev-minor: #9aa3b2;
54
- --question-bg: #222831;
55
- --question-edge: #8d96a5;
56
- --tok-comment: #adb5c3;
57
- --tok-keyword: #ff8fd6;
58
- --tok-string: #f0c674;
59
- --tok-number: #5fd8ee;
60
- --tok-function: #8fb4ff;
61
- --tok-type: #c3a6ff;
62
- --tok-property: #9db7d8;
63
- --tok-tag: #ff9a8f;
64
- }
65
- }
66
-
67
- * {
68
- box-sizing: border-box;
69
- }
70
-
71
- body {
72
- margin: 0;
73
- background: var(--bg);
74
- color: var(--text);
75
- font:
76
- 14px / 1.5 system-ui,
77
- sans-serif;
78
- height: 100vh;
79
- display: flex;
80
- flex-direction: column;
81
- }
82
-
83
- .muted {
84
- color: var(--muted);
85
- }
86
-
87
- .topbar {
88
- display: flex;
89
- align-items: center;
90
- gap: 12px;
91
- padding: 8px 16px;
92
- border-bottom: 1px solid var(--border);
93
- background: var(--panel);
94
- }
95
-
96
- .banner {
97
- display: flex;
98
- align-items: center;
99
- gap: 12px;
100
- padding: 6px 16px;
101
- border-bottom: 1px solid var(--border);
102
- background: var(--comment-bg);
103
- }
104
-
105
- .banner[hidden] {
106
- display: none;
107
- }
108
-
109
- .banner span {
110
- flex: 1;
111
- }
112
-
113
- .sessions {
114
- display: flex;
115
- gap: 8px;
116
- font-size: 13px;
117
- }
118
-
119
- .sessions[hidden] {
120
- display: none;
121
- }
122
-
123
- .sessions a {
124
- color: var(--accent);
125
- }
126
-
127
- .sessions a[aria-current="page"] {
128
- color: var(--text);
129
- font-weight: 600;
130
- text-decoration: none;
131
- }
132
-
133
- .status {
134
- margin-left: auto;
135
- color: var(--del-text);
136
- }
137
-
138
- button {
139
- font: inherit;
140
- padding: 3px 10px;
141
- border: 1px solid var(--border);
142
- border-radius: 6px;
143
- background: var(--bg);
144
- color: var(--text);
145
- cursor: pointer;
146
- }
147
-
148
- button:hover {
149
- border-color: var(--accent);
150
- }
151
-
152
- button.primary {
153
- background: var(--accent);
154
- color: var(--accent-text);
155
- border-color: var(--accent);
156
- }
157
-
158
- button.link {
159
- border: none;
160
- background: none;
161
- color: var(--accent);
162
- padding: 0 4px;
163
- }
164
-
165
- .layout {
166
- flex: 1;
167
- display: grid;
168
- grid-template-columns: var(--sidebar) minmax(0, 1fr) auto;
169
- min-height: 0;
170
- }
171
-
172
- .diagram-panel {
173
- width: 380px;
174
- display: flex;
175
- flex-direction: column;
176
- border-left: 1px solid var(--border);
177
- background: var(--panel);
178
- min-height: 0;
179
- }
180
-
181
- .diagram-panel[hidden] {
182
- display: none;
183
- }
184
-
185
- .diagram-panel.collapsed {
186
- width: auto;
187
- }
188
-
189
- .diagram-head {
190
- display: flex;
191
- align-items: center;
192
- gap: 8px;
193
- padding: 8px 12px;
194
- font-size: 13px;
195
- overflow: hidden;
196
- white-space: nowrap;
197
- }
198
-
199
- #diagram-toggle::before {
200
- content: "▾ ";
201
- }
202
-
203
- .diagram-panel.collapsed #diagram-toggle::before {
204
- content: "◂ ";
205
- }
206
-
207
- .diagram-body {
208
- flex: 1;
209
- overflow: auto;
210
- padding: 8px 12px 16px;
211
- }
212
-
213
- .diagram-panel.collapsed .diagram-body,
214
- .diagram-panel.collapsed #diagram-from {
215
- display: none;
216
- }
217
-
218
- .diagram-body svg {
219
- max-width: 100%;
220
- height: auto;
221
- }
222
-
223
- .diagram-error {
224
- color: var(--del-text);
225
- white-space: pre-wrap;
226
- font-size: 12px;
227
- }
228
-
229
- .sidebar {
230
- display: flex;
231
- flex-direction: column;
232
- border-right: 1px solid var(--border);
233
- background: var(--panel);
234
- min-height: 0;
235
- }
236
-
237
- .commit-list {
238
- list-style: none;
239
- margin: 0;
240
- padding: 0;
241
- overflow-y: auto;
242
- flex: 1;
243
- }
244
-
245
- .badge {
246
- background: var(--accent);
247
- color: var(--accent-text);
248
- border-radius: 10px;
249
- padding: 0 7px;
250
- font-size: 12px;
251
- }
252
-
253
- .plan-note {
254
- border-top: 1px solid var(--border);
255
- padding: 10px 12px;
256
- }
257
-
258
- .main {
259
- overflow-y: auto;
260
- padding: 16px 24px 64px;
261
- }
262
-
263
- .stage {
264
- position: sticky;
265
- top: -16px;
266
- z-index: 2;
267
- margin: -16px -24px 8px;
268
- padding: 10px 24px 8px;
269
- background: var(--bg);
270
- border-bottom: 1px solid var(--border);
271
- }
272
-
273
- .stage h2 {
274
- margin: 0;
275
- font-size: 15px;
276
- overflow: hidden;
277
- text-overflow: ellipsis;
278
- white-space: nowrap;
279
- }
280
-
281
- .stage h2:focus {
282
- outline: none;
283
- }
284
-
285
- .stage .part {
286
- font-weight: 400;
287
- color: var(--muted);
288
- }
289
-
290
- .play {
291
- display: inline-flex;
292
- align-items: center;
293
- justify-content: center;
294
- gap: 6px;
295
- width: 92px;
296
- }
297
-
298
- .play .icon {
299
- width: 1.2em;
300
- font-size: 12px;
301
- text-align: center;
302
- }
303
-
304
- .steps,
305
- .strip {
306
- margin: 0;
307
- padding: 0;
308
- border: none;
309
- min-inline-size: 0;
310
- }
311
-
312
- .steps {
313
- display: flex;
314
- gap: 4px;
315
- }
316
-
317
- .strip {
318
- flex: 1 1 160px;
319
- min-width: 120px;
320
- display: flex;
321
- gap: 3px;
322
- height: 14px;
323
- }
324
-
325
- .strip .seg {
326
- position: relative;
327
- flex-basis: 0;
328
- min-width: 6px;
329
- padding: 0;
330
- border: none;
331
- border-radius: 3px;
332
- background: var(--border);
333
- overflow: hidden;
334
- }
335
-
336
- .strip .seg.here {
337
- outline: 1px solid var(--accent);
338
- }
339
-
340
- .strip .fill {
341
- position: absolute;
342
- inset: 0 auto 0 0;
343
- background: var(--accent);
344
- }
345
-
346
- .keys {
347
- border: 1px solid var(--border);
348
- border-radius: 8px;
349
- background: var(--bg);
350
- color: var(--text);
351
- padding: 16px 20px;
352
- min-width: 360px;
353
- }
354
-
355
- .keys::backdrop {
356
- background: rgb(0 0 0 / 0.3);
357
- }
358
-
359
- .keys h2 {
360
- margin: 0 0 8px;
361
- font-size: 16px;
362
- }
363
-
364
- .keys dl {
365
- display: grid;
366
- grid-template-columns: auto 1fr;
367
- gap: 6px 16px;
368
- margin: 0 0 12px;
369
- }
370
-
371
- .keys dd {
372
- margin: 0;
373
- }
374
-
375
- kbd {
376
- font: 12px var(--font-mono);
377
- padding: 1px 5px;
378
- border: 1px solid var(--border);
379
- border-bottom-width: 2px;
380
- border-radius: 4px;
381
- background: var(--panel);
382
- }
383
-
384
- .message {
385
- font-family: var(--font-mono);
386
- white-space: pre-wrap;
387
- margin: 4px 0 8px;
388
- padding: 8px 12px;
389
- background: var(--panel);
390
- border-radius: 6px;
391
- }
392
-
393
- .controls {
394
- display: flex;
395
- gap: 8px;
396
- margin: 4px 0;
397
- }
398
-
399
- .file-group {
400
- margin-top: 20px;
401
- }
402
-
403
- .file-group > h3 {
404
- margin: 0 0 6px;
405
- font: 600 13px var(--font-mono);
406
- color: var(--muted);
407
- }
408
-
409
- .unit {
410
- border: 1px solid var(--border);
411
- border-radius: 6px;
412
- margin-bottom: 12px;
413
- overflow: hidden;
414
- }
415
-
416
- .unit-head {
417
- display: flex;
418
- gap: 8px;
419
- align-items: center;
420
- padding: 3px 10px;
421
- background: var(--panel);
422
- color: var(--muted);
423
- font: 12px var(--font-mono);
424
- }
425
-
426
- .unit-head .spacer {
427
- flex: 1;
428
- }
429
-
430
- .card {
431
- padding: 6px 10px;
432
- font-family: var(--font-mono);
433
- }
434
-
435
- .diff {
436
- font: 12.5px / 1.5 var(--font-mono);
437
- overflow-x: auto;
438
- }
439
-
440
- .dl {
441
- display: flex;
442
- white-space: pre;
443
- min-width: max-content;
444
- max-height: 2em;
445
- }
446
-
447
- .dl .gutter {
448
- position: relative;
449
- display: flex;
450
- flex: none;
451
- width: var(--gutter);
452
- color: var(--muted);
453
- user-select: none;
454
- }
455
-
456
- .dl .ln {
457
- width: 50%;
458
- padding-right: 6px;
459
- text-align: right;
460
- }
461
-
462
- .add-comment {
463
- position: absolute;
464
- left: 0;
465
- top: 0;
466
- width: 1.6em;
467
- height: 1.5em;
468
- padding: 0;
469
- border: none;
470
- border-radius: 4px;
471
- background: var(--accent);
472
- color: var(--accent-text);
473
- font: 600 12px / 1.5em var(--font-mono);
474
- text-align: center;
475
- opacity: 0;
476
- }
477
-
478
- .dl.mine:hover .add-comment,
479
- .dl.mine:focus-within .add-comment,
480
- .dl.mine:focus .add-comment {
481
- opacity: 1;
482
- }
483
-
484
- .narration.notice {
485
- border-left-color: var(--select-edge);
486
- background: var(--select-bg);
487
- }
488
-
489
- .dl .op {
490
- width: 2ch;
491
- user-select: none;
492
- }
493
-
494
- .dl.add.mine {
495
- background: var(--add-bg);
496
- color: var(--add-text);
497
- }
498
-
499
- .dl.del.mine {
500
- background: var(--del-bg);
501
- color: var(--del-text);
502
- }
503
-
504
- .dl.mine {
505
- cursor: pointer;
506
- }
507
-
508
- .fold {
509
- display: block;
510
- width: 100%;
511
- padding: 1px 10px 1px calc(var(--gutter) + 2ch);
512
- border: none;
513
- border-radius: 0;
514
- border-block: 1px dashed var(--border);
515
- background: var(--panel);
516
- color: var(--muted);
517
- font: inherit;
518
- text-align: left;
519
- }
520
-
521
- .fold:hover {
522
- color: var(--accent);
523
- }
524
-
525
- .unit-head .scope {
526
- color: var(--text);
527
- }
528
-
529
- .dl.mine.picked {
530
- background: var(--select-bg);
531
- color: var(--text);
532
- box-shadow: inset 3px 0 0 var(--select-edge);
533
- }
534
-
535
- .comments {
536
- padding: 0 10px;
537
- }
538
-
539
- .comment {
540
- background: var(--comment-bg);
541
- border-radius: 6px;
542
- margin: 8px 0;
543
- padding: 6px 10px;
544
- }
545
-
546
- .comment .meta {
547
- color: var(--muted);
548
- font-size: 12px;
549
- }
550
-
551
- .comment .text {
552
- white-space: pre-wrap;
553
- }
554
-
555
- textarea {
556
- width: 100%;
557
- min-height: 64px;
558
- font: inherit;
559
- padding: 6px 8px;
560
- color: var(--text);
561
- background: var(--bg);
562
- border: 1px solid var(--border);
563
- border-radius: 6px;
564
- resize: vertical;
565
- }
566
-
567
- .box {
568
- margin: 8px 0;
569
- }
570
-
571
- .box .row {
572
- display: flex;
573
- gap: 8px;
574
- margin-top: 4px;
575
- }
576
-
577
- .box .hint {
578
- align-self: center;
579
- color: var(--muted);
580
- font-size: 12px;
581
- }
582
-
583
- .diff .box {
584
- margin: 4px 10px 8px calc(var(--gutter) + 2ch);
585
- font-family: system-ui, sans-serif;
586
- }
587
-
588
- .done {
589
- position: fixed;
590
- inset: 0;
591
- z-index: 10;
592
- display: flex;
593
- align-items: center;
594
- justify-content: center;
595
- background: var(--bg);
596
- font-size: 16px;
597
- padding: 24px;
598
- text-align: center;
599
- }
600
-
601
- .done[hidden] {
602
- display: none;
603
- }
604
-
605
- .done code {
606
- font-family: var(--font-mono);
607
- background: var(--panel);
608
- padding: 1px 6px;
609
- border-radius: 4px;
610
- }
611
-
612
- .player {
613
- display: flex;
614
- flex-wrap: nowrap;
615
- align-items: center;
616
- gap: 12px;
617
- white-space: nowrap;
618
- padding: 6px 16px;
619
- border-bottom: 1px solid var(--border);
620
- background: var(--panel);
621
- }
622
-
623
- .player[hidden] {
624
- display: none;
625
- }
626
-
627
- .player label {
628
- display: flex;
629
- align-items: center;
630
- gap: 6px;
631
- color: var(--muted);
632
- }
633
-
634
- select {
635
- font: inherit;
636
- padding: 2px 6px;
637
- border: 1px solid var(--border);
638
- border-radius: 6px;
639
- background: var(--bg);
640
- color: var(--text);
641
- max-width: 220px;
642
- }
643
-
644
- button:disabled,
645
- select:disabled {
646
- opacity: 0.5;
647
- cursor: default;
648
- }
649
-
650
- .narration {
651
- margin: 8px 0;
652
- padding: 8px 14px;
653
- border-left: 3px solid var(--accent);
654
- border-radius: 0 6px 6px 0;
655
- background: var(--comment-bg);
656
- font:
657
- 15px / 1.5 system-ui,
658
- sans-serif;
659
- white-space: pre-wrap;
660
- }
661
-
662
- .diff .narration {
663
- margin: 6px 10px;
664
- }
665
-
666
- .narration.label {
667
- border-left-color: var(--border);
668
- background: var(--panel);
669
- color: var(--muted);
670
- font-size: 13px;
671
- }
672
-
673
- /* Every token colour keeps 4.5:1 on the page, the add and remove tints and the picked tint. */
674
- .tok-comment {
675
- color: var(--tok-comment);
676
- font-style: italic;
677
- }
678
-
679
- .tok-keyword {
680
- color: var(--tok-keyword);
681
- }
682
-
683
- .tok-string {
684
- color: var(--tok-string);
685
- }
686
-
687
- .tok-number {
688
- color: var(--tok-number);
689
- }
690
-
691
- .tok-function {
692
- color: var(--tok-function);
693
- }
694
-
695
- .tok-type {
696
- color: var(--tok-type);
697
- }
698
-
699
- .tok-property {
700
- color: var(--tok-property);
701
- }
702
-
703
- .tok-tag {
704
- color: var(--tok-tag);
705
- }
706
-
707
- .dl.pending {
708
- display: none;
709
- }
710
-
711
- .dl.del .text {
712
- text-decoration: line-through;
713
- }
714
-
715
- .dl.in-chunk,
716
- .unit.in-chunk .card {
717
- box-shadow: inset 3px 0 0 var(--accent);
718
- animation: reveal 0.2s ease-out;
719
- }
720
-
721
- .ph {
722
- padding: 0 10px 0 calc(var(--gutter) + 2ch);
723
- color: var(--muted);
724
- font-style: italic;
725
- background: var(--panel);
726
- }
727
-
728
- .ph.in-chunk {
729
- box-shadow: inset 3px 0 0 var(--accent);
730
- }
731
-
732
- .countdown {
733
- margin: 6px 0 0;
734
- color: var(--muted);
735
- font-size: 13px;
736
- }
737
-
738
- .countdown .bar {
739
- display: block;
740
- height: 2px;
741
- margin-top: 4px;
742
- background: var(--accent);
743
- transform-origin: left;
744
- animation: countdown linear forwards;
745
- }
746
-
747
- .countdown.paused .bar {
748
- animation-play-state: paused;
749
- }
750
-
751
- @keyframes reveal {
752
- from {
753
- opacity: 0;
754
- }
755
- to {
756
- opacity: 1;
757
- }
758
- }
759
-
760
- @keyframes countdown {
761
- from {
762
- transform: scaleX(1);
763
- }
764
- to {
765
- transform: scaleX(0);
766
- }
767
- }
768
-
769
- @media (prefers-reduced-motion: reduce) {
770
- .dl.in-chunk,
771
- .unit.in-chunk .card {
772
- animation: none;
773
- }
774
- }
775
-
776
- :focus-visible {
777
- outline: 2px solid var(--accent);
778
- outline-offset: -2px;
779
- }
780
-
781
- .status.error::before {
782
- content: "⚠ ";
783
- }
784
-
785
- body.index {
786
- display: block;
787
- height: auto;
788
- min-height: 100vh;
789
- padding: 0;
790
- }
791
-
792
- .index-main {
793
- max-width: 880px;
794
- margin: 0 auto;
795
- padding: 24px;
796
- }
797
-
798
- .index-main h1 {
799
- font-size: 20px;
800
- margin: 8px 0 16px;
801
- }
802
-
803
- .session-index {
804
- list-style: none;
805
- margin: 0;
806
- padding: 0;
807
- border: 1px solid var(--border);
808
- border-radius: 8px;
809
- }
810
-
811
- .session-index li {
812
- display: grid;
813
- grid-template-columns: 1fr auto;
814
- gap: 2px 16px;
815
- padding: 12px 16px;
816
- border-top: 1px solid var(--border);
817
- }
818
-
819
- .session-index li:first-child {
820
- border-top: none;
821
- }
822
-
823
- .session-index .session {
824
- color: var(--text);
825
- font-weight: 600;
826
- text-decoration: none;
827
- }
828
-
829
- .session-index .branch {
830
- color: var(--accent);
831
- }
832
-
833
- .session-index .session:hover .branch {
834
- text-decoration: underline;
835
- }
836
-
837
- .session-index .path {
838
- grid-column: 1 / -1;
839
- font: 12px var(--font-mono);
840
- }
841
-
842
- .mode {
843
- justify-self: end;
844
- padding: 0 8px;
845
- border-radius: 10px;
846
- font-size: 12px;
847
- background: var(--comment-bg);
848
- color: var(--text);
849
- }
850
-
851
- .empty {
852
- margin-top: 15vh;
853
- text-align: center;
854
- }
855
-
856
- .empty a,
857
- .done-card a {
858
- color: var(--accent);
859
- }
860
-
861
- .empty code,
862
- .done-card code {
863
- font-family: var(--font-mono);
864
- background: var(--panel);
865
- padding: 1px 6px;
866
- border-radius: 4px;
867
- }
868
-
869
- .done-card {
870
- width: min(520px, 100%);
871
- padding: 24px 28px;
872
- border: 1px solid var(--border);
873
- border-radius: 10px;
874
- background: var(--panel);
875
- text-align: left;
876
- }
877
-
878
- .done-card h1 {
879
- margin: 0 0 4px;
880
- font-size: 20px;
881
- }
882
-
883
- .done-card h1:focus {
884
- outline: none;
885
- }
886
-
887
- .done-card p {
888
- margin: 8px 0;
889
- }
890
-
891
- .done-card .next {
892
- display: flex;
893
- align-items: center;
894
- gap: 8px;
895
- }
896
-
897
- #confirm-end .row {
898
- display: flex;
899
- gap: 8px;
900
- }
901
-
902
- .commit-row {
903
- display: flex;
904
- align-items: flex-start;
905
- gap: 8px;
906
- width: 100%;
907
- padding: 6px 12px;
908
- border: none;
909
- border-left: 3px solid transparent;
910
- border-radius: 0;
911
- background: none;
912
- color: inherit;
913
- text-align: left;
914
- }
915
-
916
- .commit-row:hover,
917
- .commit-list li.selected .commit-row {
918
- background: var(--bg);
919
- }
920
-
921
- .commit-list li.selected .commit-row {
922
- border-left-color: var(--accent);
923
- }
924
-
925
- .commit-list .title {
926
- flex: 1;
927
- min-width: 0;
928
- white-space: normal;
929
- overflow-wrap: anywhere;
930
- font-size: 13px;
931
- line-height: 1.35;
932
- display: -webkit-box;
933
- -webkit-box-orient: vertical;
934
- -webkit-line-clamp: 2;
935
- line-clamp: 2;
936
- overflow: hidden;
937
- }
938
-
939
- .commit-list li.selected .title {
940
- -webkit-line-clamp: unset;
941
- line-clamp: none;
942
- }
943
-
944
- .commit-list .index,
945
- .commit-list .mark,
946
- .commit-list .badge {
947
- line-height: 1.35;
948
- margin-top: 1px;
949
- }
950
-
951
- .commit-list .index {
952
- color: var(--muted);
953
- min-width: 2ch;
954
- text-align: right;
955
- font-size: 13px;
956
- }
957
-
958
- .commit-list .mark {
959
- color: var(--accent);
960
- font-size: 12px;
961
- }
962
-
963
- .commits-toggle,
964
- .rail-tip {
965
- display: none;
966
- }
967
-
968
- @media (max-width: 1199px) {
969
- :root {
970
- --sidebar: 240px;
971
- }
972
-
973
- .diagram-panel {
974
- width: 300px;
975
- }
976
- }
977
-
978
- /* Below 900px the sidebar is a rail of numbers; the stage header carries the title. */
979
- @media (max-width: 899px) {
980
- :root {
981
- --sidebar: 56px;
982
- }
983
-
984
- .sidebar {
985
- position: relative;
986
- z-index: 3;
987
- }
988
-
989
- .commits-toggle {
990
- display: block;
991
- margin: 6px 4px;
992
- padding: 2px 0;
993
- font-size: 11px;
994
- }
995
-
996
- .sidebar:not(.open) .commit-row {
997
- flex-direction: column;
998
- align-items: center;
999
- gap: 2px;
1000
- padding: 6px 0;
1001
- }
1002
-
1003
- .sidebar:not(.open) .commit-list .title {
1004
- position: absolute;
1005
- width: 1px;
1006
- height: 1px;
1007
- overflow: hidden;
1008
- clip-path: inset(50%);
1009
- }
1010
-
1011
- .sidebar:not(.open) .commit-list .index {
1012
- text-align: center;
1013
- }
1014
-
1015
- .sidebar:not(.open) .plan-note,
1016
- .sidebar:not(.open) .answers {
1017
- display: none;
1018
- }
1019
-
1020
- .sidebar.open {
1021
- width: 300px;
1022
- box-shadow: 4px 0 16px rgb(0 0 0 / 0.15);
1023
- }
1024
-
1025
- .rail-tip:not([hidden]) {
1026
- display: block;
1027
- position: fixed;
1028
- z-index: 20;
1029
- max-width: 320px;
1030
- padding: 4px 8px;
1031
- border-radius: 4px;
1032
- background: var(--text);
1033
- color: var(--bg);
1034
- font-size: 13px;
1035
- pointer-events: none;
1036
- }
1037
- }
1038
-
1039
- .comment.question {
1040
- background: var(--question-bg);
1041
- box-shadow: inset 3px 0 0 var(--question-edge);
1042
- }
1043
-
1044
- .reply {
1045
- margin: 6px 0 0 14px;
1046
- padding: 4px 10px;
1047
- border-left: 2px solid var(--border);
1048
- }
1049
-
1050
- .reply.agent {
1051
- border-left-color: var(--accent);
1052
- }
1053
-
1054
- .reply .said {
1055
- white-space: pre-wrap;
1056
- }
1057
-
1058
- .reply-diagram {
1059
- overflow-x: auto;
1060
- margin: 6px 0;
1061
- }
1062
-
1063
- .reply-diagram svg {
1064
- max-width: 100%;
1065
- height: auto;
1066
- }
1067
-
1068
- .kind {
1069
- display: flex;
1070
- gap: 4px;
1071
- margin-bottom: 4px;
1072
- }
1073
-
1074
- .kind button[aria-pressed="true"] {
1075
- background: var(--accent);
1076
- border-color: var(--accent);
1077
- color: var(--accent-text);
1078
- }
1079
-
1080
- .badge.question {
1081
- background: var(--question-bg);
1082
- color: var(--text);
1083
- box-shadow: inset 0 0 0 1px var(--question-edge);
1084
- }
1085
-
1086
- .answers {
1087
- border-top: 1px solid var(--border);
1088
- padding: 8px 12px;
1089
- max-height: 45%;
1090
- overflow-y: auto;
1091
- }
1092
-
1093
- .answers[hidden] {
1094
- display: none;
1095
- }
1096
-
1097
- .answer-row {
1098
- display: block;
1099
- width: 100%;
1100
- margin-top: 4px;
1101
- text-align: left;
1102
- font-size: 13px;
1103
- overflow: hidden;
1104
- text-overflow: ellipsis;
1105
- white-space: nowrap;
1106
- }
1107
-
1108
- .answer-row.done {
1109
- color: var(--muted);
1110
- }
1111
-
1112
- .answer {
1113
- margin: 8px 10px;
1114
- padding: 8px 12px;
1115
- border-radius: 6px;
1116
- background: var(--comment-bg);
1117
- box-shadow: inset 3px 0 0 var(--accent);
1118
- }
1119
-
1120
- .answer .said {
1121
- white-space: pre-wrap;
1122
- }
1123
-
1124
- .answer .meta {
1125
- margin-top: 6px;
1126
- color: var(--muted);
1127
- font-size: 12px;
1128
- }
1129
-
1130
- .answer-actions {
1131
- display: flex;
1132
- gap: 8px;
1133
- margin-top: 8px;
1134
- }
1135
-
1136
- .answer.resolved {
1137
- display: flex;
1138
- justify-content: space-between;
1139
- align-items: center;
1140
- color: var(--muted);
1141
- background: none;
1142
- box-shadow: none;
1143
- padding: 2px 12px;
1144
- }
1145
-
1146
- .answers .answer {
1147
- margin: 6px 0;
1148
- }
1149
-
1150
- .quote {
1151
- margin: 6px 0;
1152
- padding: 4px 8px;
1153
- overflow-x: auto;
1154
- font: 12px / 1.5 var(--font-mono);
1155
- background: var(--panel);
1156
- border-radius: 4px;
1157
- }
1158
-
1159
- .concern {
1160
- margin: 6px 10px 8px;
1161
- padding: 8px 12px;
1162
- border-radius: 6px;
1163
- background: var(--panel);
1164
- border: 1px dashed var(--border);
1165
- border-left: 4px solid var(--sev, var(--sev-minor));
1166
- font-family: system-ui, sans-serif;
1167
- white-space: normal;
1168
- }
1169
-
1170
- .diff .concern {
1171
- margin-left: calc(var(--gutter) + 2ch);
1172
- max-width: 70ch;
1173
- }
1174
-
1175
- .concern.sev-blocker {
1176
- --sev: var(--sev-blocker);
1177
- }
1178
-
1179
- .concern.sev-major {
1180
- --sev: var(--sev-major);
1181
- }
1182
-
1183
- .concern.sev-minor {
1184
- --sev: var(--sev-minor);
1185
- }
1186
-
1187
- .concern.kept {
1188
- border-style: solid;
1189
- }
1190
-
1191
- .concern.pending {
1192
- display: none;
1193
- }
1194
-
1195
- .concern.dismissed {
1196
- display: flex;
1197
- justify-content: space-between;
1198
- gap: 12px;
1199
- color: var(--muted);
1200
- border-left-color: var(--border);
1201
- padding: 2px 12px;
1202
- }
1203
-
1204
- .concern-head {
1205
- display: flex;
1206
- align-items: center;
1207
- gap: 8px;
1208
- font-size: 12px;
1209
- }
1210
-
1211
- .concern .who {
1212
- font-weight: 600;
1213
- }
1214
-
1215
- .concern .chip {
1216
- padding: 0 8px;
1217
- border: 1px solid var(--sev);
1218
- border-radius: 10px;
1219
- color: var(--sev);
1220
- font-weight: 600;
1221
- }
1222
-
1223
- .concern .kind-tag,
1224
- .concern .verdict {
1225
- color: var(--muted);
1226
- }
1227
-
1228
- .concern .said {
1229
- margin: 4px 0;
1230
- }
1231
-
1232
- .concern .said.mine {
1233
- color: var(--muted);
1234
- }
1235
-
1236
- .concern-actions {
1237
- display: flex;
1238
- align-items: center;
1239
- gap: 8px;
1240
- margin-top: 6px;
1241
- }
1242
-
1243
- .concern .sev-pick {
1244
- margin-left: auto;
1245
- color: var(--muted);
1246
- font-size: 12px;
1247
- }
1248
-
1249
- .concern .box {
1250
- margin: 6px 0;
1251
- }
1252
-
1253
- .concern textarea {
1254
- min-height: 40px;
1255
- }
1256
-
1257
- .dl.flagged .gutter::after {
1258
- content: "";
1259
- position: absolute;
1260
- right: 0;
1261
- top: 3px;
1262
- bottom: 3px;
1263
- width: 3px;
1264
- border-radius: 2px;
1265
- background: var(--flag);
1266
- }
1267
-
1268
- .dl.flag-blocker {
1269
- --flag: var(--sev-blocker);
1270
- }
1271
-
1272
- .dl.flag-major {
1273
- --flag: var(--sev-major);
1274
- }
1275
-
1276
- .dl.flag-minor {
1277
- --flag: var(--sev-minor);
1278
- }
1279
-
1280
- .dot {
1281
- flex: none;
1282
- width: 9px;
1283
- height: 9px;
1284
- margin-top: 6px;
1285
- border-radius: 50%;
1286
- background: var(--sev-minor);
1287
- }
1288
-
1289
- .dot.sev-blocker {
1290
- background: var(--sev-blocker);
1291
- }
1292
-
1293
- .dot.sev-major {
1294
- background: var(--sev-major);
1295
- }
1296
-
1297
- .to-decide {
1298
- color: var(--sev-major);
1299
- }
1300
-
1301
- .kind select {
1302
- margin-left: auto;
1303
- }
1304
-
1305
- .done-card.wide {
1306
- width: min(820px, 100%);
1307
- }
1308
-
1309
- .report-head {
1310
- display: flex;
1311
- align-items: center;
1312
- gap: 10px;
1313
- margin-bottom: 6px;
1314
- }
1315
-
1316
- .report-head button {
1317
- margin-left: auto;
1318
- }
1319
-
1320
- .report {
1321
- margin: 0;
1322
- max-height: 38vh;
1323
- overflow: auto;
1324
- padding: 10px 12px;
1325
- border: 1px solid var(--border);
1326
- border-radius: 6px;
1327
- background: var(--bg);
1328
- font: 12.5px / 1.5 var(--font-mono);
1329
- text-align: left;
1330
- white-space: pre-wrap;
1331
- }