heyiam 0.2.17 → 0.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/dist/analyzer.js +0 -1
  2. package/dist/archive.js +0 -1
  3. package/dist/auth.js +0 -1
  4. package/dist/autostart.js +0 -1
  5. package/dist/bridge.js +0 -1
  6. package/dist/config.js +0 -1
  7. package/dist/context-export.js +0 -1
  8. package/dist/daemon-install.js +0 -1
  9. package/dist/db.js +0 -1
  10. package/dist/demo-data.js +0 -1
  11. package/dist/demo-seed.js +0 -1
  12. package/dist/export.js +5 -2
  13. package/dist/format-utils.js +0 -1
  14. package/dist/index.js +0 -1
  15. package/dist/llm/anthropic-provider.js +0 -1
  16. package/dist/llm/index.js +0 -1
  17. package/dist/llm/project-enhance.js +0 -1
  18. package/dist/llm/proxy-provider.js +0 -1
  19. package/dist/llm/triage.js +0 -1
  20. package/dist/llm/types.js +0 -1
  21. package/dist/mount.js +23199 -0
  22. package/dist/parsers/claude.js +0 -1
  23. package/dist/parsers/codex.js +0 -1
  24. package/dist/parsers/cursor.js +0 -1
  25. package/dist/parsers/gemini.js +0 -1
  26. package/dist/parsers/index.js +0 -1
  27. package/dist/parsers/types.js +0 -1
  28. package/dist/redact.js +0 -1
  29. package/dist/render/build-render-data.js +0 -1
  30. package/dist/render/index.js +0 -1
  31. package/dist/render/liquid.js +0 -1
  32. package/dist/render/templates/project.liquid +28 -14
  33. package/dist/render/templates/styles.css +31 -1
  34. package/dist/render/types.js +0 -1
  35. package/dist/routes/archive.js +0 -1
  36. package/dist/routes/auth.js +0 -1
  37. package/dist/routes/context.js +0 -1
  38. package/dist/routes/dashboard.js +0 -1
  39. package/dist/routes/enhance.js +0 -1
  40. package/dist/routes/export.js +0 -1
  41. package/dist/routes/index.js +0 -1
  42. package/dist/routes/preview.js +5 -2
  43. package/dist/routes/projects.js +0 -1
  44. package/dist/routes/publish.js +4 -2
  45. package/dist/routes/search.js +0 -1
  46. package/dist/routes/sessions.js +0 -1
  47. package/dist/routes/settings.js +0 -1
  48. package/dist/screenshot.js +0 -1
  49. package/dist/search.js +0 -1
  50. package/dist/server.js +2 -2
  51. package/dist/settings.js +0 -1
  52. package/dist/source-audit.js +0 -1
  53. package/dist/summarize.js +0 -1
  54. package/dist/sync.js +0 -1
  55. package/dist/transcript.js +0 -1
  56. package/package.json +6 -3
  57. package/dist/analyzer.d.ts +0 -123
  58. package/dist/analyzer.js.map +0 -1
  59. package/dist/archive.d.ts +0 -14
  60. package/dist/archive.js.map +0 -1
  61. package/dist/auth.d.ts +0 -28
  62. package/dist/auth.js.map +0 -1
  63. package/dist/autostart.d.ts +0 -19
  64. package/dist/autostart.js.map +0 -1
  65. package/dist/bridge.d.ts +0 -58
  66. package/dist/bridge.js.map +0 -1
  67. package/dist/config.d.ts +0 -2
  68. package/dist/config.js.map +0 -1
  69. package/dist/context-export.d.ts +0 -28
  70. package/dist/context-export.js.map +0 -1
  71. package/dist/daemon-install.d.ts +0 -23
  72. package/dist/daemon-install.js.map +0 -1
  73. package/dist/db.d.ts +0 -126
  74. package/dist/db.js.map +0 -1
  75. package/dist/demo-data.d.ts +0 -95
  76. package/dist/demo-data.js.map +0 -1
  77. package/dist/demo-seed.d.ts +0 -17
  78. package/dist/demo-seed.js.map +0 -1
  79. package/dist/export.d.ts +0 -34
  80. package/dist/export.js.map +0 -1
  81. package/dist/format-utils.d.ts +0 -6
  82. package/dist/format-utils.js.map +0 -1
  83. package/dist/index.d.ts +0 -4
  84. package/dist/index.js.map +0 -1
  85. package/dist/llm/anthropic-provider.d.ts +0 -11
  86. package/dist/llm/anthropic-provider.js.map +0 -1
  87. package/dist/llm/index.d.ts +0 -16
  88. package/dist/llm/index.js.map +0 -1
  89. package/dist/llm/project-enhance.d.ts +0 -72
  90. package/dist/llm/project-enhance.js.map +0 -1
  91. package/dist/llm/proxy-provider.d.ts +0 -16
  92. package/dist/llm/proxy-provider.js.map +0 -1
  93. package/dist/llm/triage.d.ts +0 -67
  94. package/dist/llm/triage.js.map +0 -1
  95. package/dist/llm/types.d.ts +0 -19
  96. package/dist/llm/types.js.map +0 -1
  97. package/dist/parsers/claude.d.ts +0 -18
  98. package/dist/parsers/claude.js.map +0 -1
  99. package/dist/parsers/codex.d.ts +0 -8
  100. package/dist/parsers/codex.js.map +0 -1
  101. package/dist/parsers/cursor.d.ts +0 -91
  102. package/dist/parsers/cursor.js.map +0 -1
  103. package/dist/parsers/gemini.d.ts +0 -29
  104. package/dist/parsers/gemini.js.map +0 -1
  105. package/dist/parsers/index.d.ts +0 -49
  106. package/dist/parsers/index.js.map +0 -1
  107. package/dist/parsers/types.d.ts +0 -123
  108. package/dist/parsers/types.js.map +0 -1
  109. package/dist/redact.d.ts +0 -31
  110. package/dist/redact.js.map +0 -1
  111. package/dist/render/build-render-data.d.ts +0 -60
  112. package/dist/render/build-render-data.js.map +0 -1
  113. package/dist/render/index.d.ts +0 -37
  114. package/dist/render/index.js.map +0 -1
  115. package/dist/render/liquid.d.ts +0 -19
  116. package/dist/render/liquid.js.map +0 -1
  117. package/dist/render/templates/templates/project.liquid +0 -225
  118. package/dist/render/templates/templates/session.liquid +0 -158
  119. package/dist/render/templates/templates/styles.css +0 -599
  120. package/dist/render/types.d.ts +0 -122
  121. package/dist/render/types.js.map +0 -1
  122. package/dist/routes/archive.d.ts +0 -3
  123. package/dist/routes/archive.js.map +0 -1
  124. package/dist/routes/auth.d.ts +0 -3
  125. package/dist/routes/auth.js.map +0 -1
  126. package/dist/routes/context.d.ts +0 -76
  127. package/dist/routes/context.js.map +0 -1
  128. package/dist/routes/dashboard.d.ts +0 -3
  129. package/dist/routes/dashboard.js.map +0 -1
  130. package/dist/routes/enhance.d.ts +0 -3
  131. package/dist/routes/enhance.js.map +0 -1
  132. package/dist/routes/export.d.ts +0 -3
  133. package/dist/routes/export.js.map +0 -1
  134. package/dist/routes/index.d.ts +0 -12
  135. package/dist/routes/index.js.map +0 -1
  136. package/dist/routes/preview.d.ts +0 -3
  137. package/dist/routes/preview.js.map +0 -1
  138. package/dist/routes/projects.d.ts +0 -3
  139. package/dist/routes/projects.js.map +0 -1
  140. package/dist/routes/publish.d.ts +0 -3
  141. package/dist/routes/publish.js.map +0 -1
  142. package/dist/routes/search.d.ts +0 -3
  143. package/dist/routes/search.js.map +0 -1
  144. package/dist/routes/sessions.d.ts +0 -3
  145. package/dist/routes/sessions.js.map +0 -1
  146. package/dist/routes/settings.d.ts +0 -3
  147. package/dist/routes/settings.js.map +0 -1
  148. package/dist/screenshot.d.ts +0 -13
  149. package/dist/screenshot.js.map +0 -1
  150. package/dist/search.d.ts +0 -30
  151. package/dist/search.js.map +0 -1
  152. package/dist/server.d.ts +0 -14
  153. package/dist/server.js.map +0 -1
  154. package/dist/settings.d.ts +0 -109
  155. package/dist/settings.js.map +0 -1
  156. package/dist/source-audit.d.ts +0 -29
  157. package/dist/source-audit.js.map +0 -1
  158. package/dist/summarize.d.ts +0 -65
  159. package/dist/summarize.js.map +0 -1
  160. package/dist/sync.d.ts +0 -78
  161. package/dist/sync.js.map +0 -1
  162. package/dist/transcript.d.ts +0 -68
  163. package/dist/transcript.js.map +0 -1
@@ -1,599 +0,0 @@
1
- /* heyi.am — Render Template Styles
2
- * Self-contained stylesheet for project + session pages.
3
- * Used in: HTML export (inlined), preview (inlined), Phoenix (linked).
4
- * No Tailwind, no external dependencies.
5
- */
6
-
7
- /* ── Reset ── */
8
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
9
-
10
- /* ── Design Tokens ── */
11
- :root {
12
- --surface: #f8f9fb;
13
- --surface-low: #f3f4f6;
14
- --surface-lowest: #ffffff;
15
- --surface-high: #e7e8ea;
16
- --on-surface: #191c1e;
17
- --on-surface-variant: #6b7280;
18
- --outline: #c2c7d0;
19
- --ghost: rgba(194, 199, 208, 0.15);
20
- --primary: #084471;
21
- --primary-hover: #0a5a96;
22
- --on-primary: #ffffff;
23
- --green: #006a61;
24
- --green-bg: #e6f5f3;
25
- --violet: #6d28d9;
26
- --violet-bg: #ede9fe;
27
- --error: #ba1a1a;
28
-
29
- --font-display: 'Space Grotesk', sans-serif;
30
- --font-body: 'Inter', sans-serif;
31
- --font-mono: 'IBM Plex Mono', monospace;
32
-
33
- --radius-sm: 0.25rem;
34
- --radius-md: 0.375rem;
35
- }
36
-
37
- body {
38
- font-family: var(--font-body);
39
- color: var(--on-surface);
40
- background: var(--surface);
41
- line-height: 1.5;
42
- -webkit-font-smoothing: antialiased;
43
- }
44
-
45
- a { color: var(--primary); text-decoration: none; }
46
- a:hover { text-decoration: underline; }
47
-
48
- /* ── Shared Components ── */
49
-
50
- .card {
51
- background: var(--surface-lowest);
52
- border: 1px solid var(--ghost);
53
- border-radius: var(--radius-md);
54
- padding: 1rem;
55
- margin-bottom: 1rem;
56
- }
57
-
58
- .section-header {
59
- display: flex;
60
- align-items: center;
61
- justify-content: space-between;
62
- margin-bottom: 0.75rem;
63
- }
64
- .section-header__title {
65
- font-family: var(--font-display);
66
- font-size: 1rem;
67
- font-weight: 600;
68
- color: var(--on-surface);
69
- }
70
- .section-header__meta {
71
- font-family: var(--font-mono);
72
- font-size: 9px;
73
- text-transform: uppercase;
74
- letter-spacing: 0.05em;
75
- color: var(--on-surface-variant);
76
- }
77
-
78
- .stat-hero-layout {
79
- display: grid;
80
- grid-template-columns: 1fr 2fr;
81
- gap: 0.75rem;
82
- margin-bottom: 1rem;
83
- }
84
-
85
- .stat-grid--compact {
86
- display: grid;
87
- grid-template-columns: repeat(2, 1fr);
88
- gap: 0.75rem;
89
- }
90
-
91
- .stat-card--hero {
92
- display: flex;
93
- flex-direction: column;
94
- justify-content: space-between;
95
- }
96
-
97
- .stat-card__sub {
98
- margin-top: 0.5rem;
99
- padding-top: 0.5rem;
100
- border-top: 1px solid var(--border);
101
- }
102
-
103
- .stat-card__value--sm {
104
- font-size: 1.25rem;
105
- }
106
-
107
- .stat-grid {
108
- display: grid;
109
- grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
110
- gap: 0.75rem;
111
- margin-bottom: 1rem;
112
- }
113
- .stat-card {
114
- background: var(--surface-lowest);
115
- border: 1px solid var(--ghost);
116
- border-radius: var(--radius-md);
117
- padding: 1rem;
118
- }
119
- .stat-card__label {
120
- font-family: var(--font-mono);
121
- font-size: 9px;
122
- text-transform: uppercase;
123
- letter-spacing: 0.05em;
124
- color: var(--on-surface-variant);
125
- margin-bottom: 0.25rem;
126
- }
127
- .stat-card__value {
128
- font-family: var(--font-display);
129
- font-size: 1.5rem;
130
- font-weight: 700;
131
- color: var(--on-surface);
132
- }
133
-
134
- .chip-list {
135
- display: flex;
136
- flex-wrap: wrap;
137
- gap: 0.25rem;
138
- }
139
- .chip {
140
- font-family: var(--font-mono);
141
- font-size: 11px;
142
- line-height: 1.2;
143
- padding: 0.125rem 0.5rem;
144
- border-radius: var(--radius-sm);
145
- background: var(--surface-low);
146
- color: var(--on-surface-variant);
147
- }
148
- .chip--violet { background: var(--violet-bg); color: var(--violet); }
149
- .chip--green { background: var(--green-bg); color: var(--green); }
150
- .chip--primary { background: rgba(8, 68, 113, 0.1); color: var(--primary); }
151
-
152
- .two-col {
153
- display: grid;
154
- grid-template-columns: repeat(2, 1fr);
155
- gap: 1rem;
156
- margin-bottom: 1rem;
157
- }
158
-
159
- /* ── Project Page ── */
160
-
161
- .heyiam-project {
162
- max-width: 960px;
163
- margin: 0 auto;
164
- padding: 2rem 1.5rem;
165
- }
166
-
167
- .project-title {
168
- font-family: var(--font-display);
169
- font-size: 1.25rem;
170
- font-weight: 700;
171
- color: var(--on-surface);
172
- margin-bottom: 0.25rem;
173
- }
174
-
175
- .project-links {
176
- display: flex;
177
- align-items: center;
178
- gap: 1rem;
179
- margin: 0.25rem 0 1rem;
180
- }
181
- .project-link {
182
- font-family: var(--font-mono);
183
- font-size: 0.75rem;
184
- color: var(--primary);
185
- display: flex;
186
- align-items: center;
187
- gap: 0.25rem;
188
- }
189
- .project-link__icon { width: 14px; height: 14px; }
190
-
191
- /* Browser chrome screenshot */
192
- .browser-chrome {
193
- border-radius: var(--radius-md);
194
- border: 1px solid var(--ghost);
195
- overflow: hidden;
196
- box-shadow: 0 1px 2px rgba(0,0,0,0.05);
197
- margin-bottom: 1rem;
198
- }
199
- .browser-chrome__bar {
200
- display: flex;
201
- align-items: center;
202
- gap: 6px;
203
- padding: 0.5rem 0.75rem;
204
- background: var(--surface-low);
205
- border-bottom: 1px solid var(--ghost);
206
- }
207
- .browser-chrome__dot {
208
- width: 10px;
209
- height: 10px;
210
- border-radius: 50%;
211
- }
212
- .browser-chrome__dot--red { background: #ff5f57; }
213
- .browser-chrome__dot--yellow { background: #febc2e; }
214
- .browser-chrome__dot--green { background: #28c840; }
215
- .browser-chrome__viewport {
216
- max-height: 24rem;
217
- overflow-y: auto;
218
- }
219
- .browser-chrome__img {
220
- width: 100%;
221
- height: auto;
222
- display: block;
223
- }
224
-
225
- .narrative-text {
226
- line-height: 1.6;
227
- color: var(--on-surface);
228
- border-left: 3px solid var(--primary);
229
- padding-left: 0.75rem;
230
- font-size: clamp(0.8125rem, 1.2vw, 1rem);
231
- }
232
-
233
- /* Source table */
234
- .source-table {
235
- width: 100%;
236
- border-collapse: collapse;
237
- font-size: 0.8125rem;
238
- }
239
- .source-table__th {
240
- text-align: left;
241
- padding: 0.5rem 0;
242
- font-family: var(--font-mono);
243
- font-size: 9px;
244
- text-transform: uppercase;
245
- letter-spacing: 0.05em;
246
- color: var(--outline);
247
- border-bottom: 1px solid var(--ghost);
248
- font-weight: 400;
249
- }
250
- .source-table__td {
251
- padding: 0.5rem 0;
252
- border-bottom: 1px solid var(--ghost);
253
- }
254
-
255
- /* Session card grid */
256
- .session-grid {
257
- display: grid;
258
- grid-template-columns: repeat(2, 1fr);
259
- gap: 0.75rem;
260
- }
261
- .session-card-link {
262
- text-decoration: none;
263
- color: inherit;
264
- }
265
- .session-card {
266
- background: var(--surface-lowest);
267
- border: 1px solid var(--ghost);
268
- border-radius: var(--radius-sm);
269
- padding: 1rem;
270
- transition: box-shadow 0.15s;
271
- }
272
- .session-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.08); }
273
- .session-card__bar {
274
- height: 4px;
275
- border-radius: 2px;
276
- margin-bottom: 0.75rem;
277
- }
278
- .session-card__bar--primary { background: var(--primary); }
279
- .session-card__bar--green { background: var(--green); }
280
- .session-card__bar--violet { background: var(--violet); }
281
- .session-card__title {
282
- font-family: var(--font-display);
283
- font-size: 0.8125rem;
284
- font-weight: 600;
285
- color: var(--on-surface);
286
- margin-bottom: 0.25rem;
287
- display: -webkit-box;
288
- -webkit-line-clamp: 2;
289
- -webkit-box-orient: vertical;
290
- overflow: hidden;
291
- }
292
- .session-card__meta {
293
- color: var(--on-surface-variant);
294
- font-size: 0.75rem;
295
- }
296
- .session-card__skills { margin-top: 0.5rem; }
297
-
298
- /* Notes */
299
- .note {
300
- background: var(--surface-low);
301
- border: 1px solid var(--ghost);
302
- border-radius: var(--radius-sm);
303
- padding: 0.625rem;
304
- }
305
- .note__title {
306
- font-family: var(--font-body);
307
- font-size: 0.875rem;
308
- font-weight: 600;
309
- color: var(--on-surface);
310
- margin-bottom: 0.25rem;
311
- }
312
- .note__body {
313
- font-size: 0.875rem;
314
- color: var(--on-surface-variant);
315
- line-height: 1.5;
316
- }
317
- .note-stack {
318
- display: flex;
319
- flex-direction: column;
320
- gap: 0.75rem;
321
- }
322
-
323
- /* Phase timeline */
324
- .phase-timeline {
325
- position: relative;
326
- padding-left: 1.25rem;
327
- }
328
- .phase-timeline__line {
329
- position: absolute;
330
- left: 0.25rem;
331
- top: 0.375rem;
332
- bottom: 0.375rem;
333
- width: 2px;
334
- background: var(--ghost);
335
- border-radius: 1px;
336
- }
337
- .phase-timeline__item {
338
- position: relative;
339
- padding-bottom: 1rem;
340
- }
341
- .phase-timeline__item:last-child { padding-bottom: 0; }
342
- .phase-timeline__dot {
343
- position: absolute;
344
- left: -1.25rem;
345
- top: 0.375rem;
346
- width: 8px;
347
- height: 8px;
348
- border-radius: 50%;
349
- background: var(--primary);
350
- box-shadow: 0 0 0 3px rgba(8, 68, 113, 0.1);
351
- }
352
- .phase-timeline__label {
353
- font-family: var(--font-mono);
354
- font-size: 0.6875rem;
355
- text-transform: uppercase;
356
- letter-spacing: 0.05em;
357
- color: var(--on-surface-variant);
358
- margin-bottom: 0.25rem;
359
- }
360
-
361
- .export-footer {
362
- margin-top: 2rem;
363
- padding-top: 1rem;
364
- border-top: 1px solid var(--ghost);
365
- text-align: center;
366
- }
367
- .export-footer__text {
368
- font-family: var(--font-mono);
369
- font-size: 10px;
370
- color: var(--on-surface-variant);
371
- text-transform: uppercase;
372
- letter-spacing: 0.05em;
373
- }
374
-
375
- /* ── Session Page ── */
376
-
377
- .heyiam-session {
378
- max-width: 960px;
379
- margin: 0 auto;
380
- padding: 2rem 1.5rem;
381
- }
382
-
383
- .session-layout {
384
- display: grid;
385
- grid-template-columns: 220px 1fr;
386
- gap: 2rem;
387
- }
388
-
389
- /* Sidebar */
390
- .session-sidebar {
391
- border-right: 1px solid var(--ghost);
392
- padding-right: 1.5rem;
393
- }
394
- .sidebar-section { margin-bottom: 1.5rem; }
395
- .sidebar-section__heading {
396
- font-family: var(--font-mono);
397
- font-size: 9px;
398
- text-transform: uppercase;
399
- letter-spacing: 0.05em;
400
- color: var(--outline);
401
- margin-bottom: 0.75rem;
402
- }
403
- .tool-list, .file-list {
404
- list-style: none;
405
- }
406
- .tool-list__item, .file-list__item {
407
- display: flex;
408
- justify-content: space-between;
409
- align-items: center;
410
- padding: 0.375rem 0;
411
- border-bottom: 1px solid var(--ghost);
412
- font-size: 0.8125rem;
413
- }
414
- .tool-list__name, .file-list__path {
415
- font-family: var(--font-mono);
416
- font-size: 0.75rem;
417
- color: var(--on-surface);
418
- overflow: hidden;
419
- text-overflow: ellipsis;
420
- white-space: nowrap;
421
- }
422
- .tool-list__count {
423
- font-family: var(--font-mono);
424
- font-size: 0.75rem;
425
- color: var(--on-surface-variant);
426
- }
427
- .file-list__adds { color: var(--green); font-family: var(--font-mono); font-size: 0.6875rem; }
428
- .file-list__dels { color: var(--error); font-family: var(--font-mono); font-size: 0.6875rem; margin-left: 0.25rem; }
429
-
430
- /* Main content */
431
- .session-main { min-width: 0; }
432
-
433
- .breadcrumb {
434
- font-family: var(--font-mono);
435
- font-size: 0.75rem;
436
- color: var(--on-surface-variant);
437
- margin-bottom: 1rem;
438
- }
439
- .breadcrumb a { color: var(--primary); }
440
- .breadcrumb__sep { margin: 0 0.375rem; color: var(--outline); }
441
-
442
- .session-header { margin-bottom: 1.5rem; }
443
- .session-header__title {
444
- font-family: var(--font-display);
445
- font-size: 1.5rem;
446
- font-weight: 700;
447
- color: var(--on-surface);
448
- margin-bottom: 0.5rem;
449
- }
450
- .session-header__meta {
451
- display: flex;
452
- gap: 0.75rem;
453
- font-size: 0.8125rem;
454
- color: var(--on-surface-variant);
455
- margin-bottom: 1rem;
456
- }
457
- .session-header__date {
458
- font-family: var(--font-mono);
459
- font-size: 0.75rem;
460
- }
461
- .session-header__source {
462
- font-family: var(--font-mono);
463
- font-size: 0.75rem;
464
- background: var(--surface-low);
465
- padding: 0.125rem 0.5rem;
466
- border-radius: var(--radius-sm);
467
- }
468
- .session-header__devtake {
469
- border-left: 3px solid var(--primary);
470
- padding: 0.5rem 0.75rem;
471
- margin: 1rem 0;
472
- color: var(--on-surface);
473
- font-style: italic;
474
- background: var(--surface-low);
475
- border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
476
- }
477
- .session-header__devtake p { margin: 0; }
478
- .session-header__context {
479
- color: var(--on-surface-variant);
480
- font-size: 0.875rem;
481
- margin: 0.75rem 0;
482
- }
483
-
484
- /* Inline stats row */
485
- .stat {
486
- display: inline-flex;
487
- flex-direction: column;
488
- align-items: center;
489
- padding: 0.5rem 1rem;
490
- background: var(--surface-lowest);
491
- border: 1px solid var(--ghost);
492
- border-radius: var(--radius-sm);
493
- }
494
- .stat__value {
495
- font-family: var(--font-display);
496
- font-size: 1.125rem;
497
- font-weight: 700;
498
- color: var(--on-surface);
499
- }
500
- .stat__label {
501
- font-family: var(--font-mono);
502
- font-size: 9px;
503
- text-transform: uppercase;
504
- letter-spacing: 0.05em;
505
- color: var(--on-surface-variant);
506
- }
507
- .stat-grid--4 {
508
- display: flex;
509
- gap: 0.5rem;
510
- margin-top: 1rem;
511
- }
512
-
513
- /* Content sections */
514
- .content-section {
515
- margin-bottom: 1.5rem;
516
- }
517
- .content-section__heading {
518
- font-family: var(--font-display);
519
- font-size: 1rem;
520
- font-weight: 600;
521
- color: var(--on-surface);
522
- margin-bottom: 0.75rem;
523
- }
524
- .content-section p {
525
- color: var(--on-surface);
526
- line-height: 1.6;
527
- }
528
-
529
- .highlights-list {
530
- list-style: disc;
531
- padding-left: 1.25rem;
532
- color: var(--on-surface);
533
- }
534
- .highlights-list li { margin-bottom: 0.375rem; }
535
-
536
- /* Beats (execution path) */
537
- .beats-list {
538
- list-style: none;
539
- counter-reset: beats;
540
- }
541
- .beat {
542
- display: flex;
543
- gap: 0.75rem;
544
- padding: 0.75rem 0;
545
- border-bottom: 1px solid var(--ghost);
546
- }
547
- .beat:last-child { border-bottom: none; }
548
- .beat__number {
549
- font-family: var(--font-mono);
550
- font-size: 0.75rem;
551
- color: var(--primary);
552
- font-weight: 600;
553
- min-width: 1.5rem;
554
- text-align: center;
555
- padding-top: 0.125rem;
556
- }
557
- .beat__content { flex: 1; min-width: 0; }
558
- .beat__title {
559
- font-family: var(--font-display);
560
- font-size: 0.875rem;
561
- font-weight: 600;
562
- color: var(--on-surface);
563
- }
564
- .beat__body {
565
- color: var(--on-surface-variant);
566
- font-size: 0.8125rem;
567
- margin-top: 0.25rem;
568
- line-height: 1.5;
569
- }
570
-
571
- /* Q&A */
572
- .qa-list { display: flex; flex-direction: column; gap: 1rem; }
573
- .qa-pair {
574
- background: var(--surface-low);
575
- border: 1px solid var(--ghost);
576
- border-radius: var(--radius-sm);
577
- padding: 0.75rem;
578
- }
579
- .qa-pair__question {
580
- font-weight: 600;
581
- color: var(--on-surface);
582
- margin-bottom: 0.375rem;
583
- }
584
- .qa-pair__answer {
585
- color: var(--on-surface-variant);
586
- font-size: 0.875rem;
587
- line-height: 1.5;
588
- }
589
-
590
- /* ── Responsive ── */
591
- @media (max-width: 768px) {
592
- .session-layout { grid-template-columns: 1fr; }
593
- .session-sidebar { border-right: none; border-bottom: 1px solid var(--ghost); padding-right: 0; padding-bottom: 1rem; }
594
- .stat-hero-layout { grid-template-columns: 1fr; }
595
- .stat-grid { grid-template-columns: repeat(2, 1fr); }
596
- .session-grid { grid-template-columns: 1fr; }
597
- .two-col { grid-template-columns: 1fr; }
598
- .stat-grid--4 { flex-wrap: wrap; }
599
- }
@@ -1,122 +0,0 @@
1
- /**
2
- * Render data types for static HTML generation.
3
- *
4
- * These interfaces define the data shapes that the CLI render functions
5
- * accept. They are intentionally separate from the interactive UI types
6
- * in `app/src/types.ts` — the render pipeline owns its own contract.
7
- */
8
- import type { AgentSummary } from '../routes/context.js';
9
- export interface UserInfo {
10
- username: string;
11
- accent: string;
12
- }
13
- export interface PortfolioUser extends UserInfo {
14
- displayName: string;
15
- bio: string;
16
- location: string;
17
- status: string;
18
- }
19
- export interface PortfolioProject {
20
- slug: string;
21
- title: string;
22
- narrative: string;
23
- totalSessions: number;
24
- totalLoc: number;
25
- totalDurationMinutes: number;
26
- totalFilesChanged: number;
27
- skills: string[];
28
- publishedCount: number;
29
- }
30
- export interface PortfolioRenderData {
31
- user: PortfolioUser;
32
- projects: PortfolioProject[];
33
- }
34
- export interface ProjectTimeline {
35
- period: string;
36
- label: string;
37
- sessions: Array<Record<string, unknown>>;
38
- }
39
- export interface ProjectDetail {
40
- slug: string;
41
- title: string;
42
- narrative: string;
43
- repoUrl?: string;
44
- projectUrl?: string;
45
- screenshotUrl?: string;
46
- timeline: ProjectTimeline[];
47
- skills: string[];
48
- totalSessions: number;
49
- totalLoc: number;
50
- totalDurationMinutes: number;
51
- totalAgentDurationMinutes?: number;
52
- totalFilesChanged: number;
53
- totalTokens?: number;
54
- }
55
- export interface SessionCard {
56
- token: string;
57
- slug: string;
58
- title: string;
59
- devTake: string;
60
- durationMinutes: number;
61
- turns: number;
62
- locChanged: number;
63
- filesChanged: number;
64
- skills: string[];
65
- recordedAt: string;
66
- sourceTool: string;
67
- agentSummary?: AgentSummary;
68
- }
69
- export interface ProjectRenderData {
70
- user: UserInfo;
71
- project: ProjectDetail;
72
- /** Curated sessions for the card grid */
73
- sessions: SessionCard[];
74
- /** All sessions for work timeline and growth chart (falls back to sessions if not set) */
75
- allSessions?: SessionCard[];
76
- /** Base URL for session links. Defaults to /:username/:project */
77
- sessionBaseUrl?: string;
78
- }
79
- export interface Beat {
80
- stepNumber: number;
81
- title: string;
82
- body: string;
83
- }
84
- export interface QaPair {
85
- question: string;
86
- answer: string;
87
- }
88
- export interface ToolBreakdownEntry {
89
- tool: string;
90
- count: number;
91
- }
92
- export interface FileEntry {
93
- path: string;
94
- additions: number;
95
- deletions: number;
96
- }
97
- export interface SessionDetail {
98
- token: string;
99
- title: string;
100
- devTake: string;
101
- context?: string;
102
- durationMinutes: number;
103
- turns: number;
104
- filesChanged: number;
105
- locChanged: number;
106
- skills: string[];
107
- narrative?: string;
108
- beats?: Beat[];
109
- qaPairs?: QaPair[];
110
- highlights?: string[];
111
- toolBreakdown?: ToolBreakdownEntry[];
112
- topFiles?: FileEntry[];
113
- recordedAt: string;
114
- sourceTool: string;
115
- template: string;
116
- agentSummary?: AgentSummary;
117
- }
118
- export interface SessionRenderData {
119
- user: UserInfo;
120
- projectSlug?: string;
121
- session: SessionDetail;
122
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/render/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -1,3 +0,0 @@
1
- import { Router } from 'express';
2
- import type { RouteContext } from './context.js';
3
- export declare function createArchiveRouter(ctx: RouteContext): Router;