heyiam 0.2.28 → 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 (177) hide show
  1. package/README.md +45 -0
  2. package/dist/config.js +10 -1
  3. package/dist/db.js +1 -2
  4. package/dist/export.js +40 -25
  5. package/dist/format-utils.js +5 -0
  6. package/dist/index.js +168 -0
  7. package/dist/mount.js +300 -102
  8. package/dist/parsers/claude.js +2 -28
  9. package/dist/parsers/codex.js +2 -26
  10. package/dist/parsers/cursor.js +2 -26
  11. package/dist/parsers/duration.js +35 -0
  12. package/dist/parsers/gemini.js +2 -20
  13. package/dist/parsers/types.js +0 -1
  14. package/dist/public/assets/index-BZ65TU_Y.js +40 -0
  15. package/dist/public/assets/index-CqCaW2cb.css +1 -0
  16. package/dist/public/index.html +2 -2
  17. package/dist/redact.js +4 -104
  18. package/dist/render/build-render-data.js +9 -2
  19. package/dist/render/index.js +32 -5
  20. package/dist/render/liquid.js +147 -7
  21. package/dist/render/mock-data.js +303 -0
  22. package/dist/render/templates/aurora/portfolio.liquid +204 -0
  23. package/dist/render/templates/aurora/project.liquid +260 -0
  24. package/dist/render/templates/aurora/session.liquid +223 -0
  25. package/dist/render/templates/aurora/styles.css +1178 -0
  26. package/dist/render/templates/bauhaus/portfolio.liquid +179 -0
  27. package/dist/render/templates/bauhaus/project.liquid +300 -0
  28. package/dist/render/templates/bauhaus/session.liquid +333 -0
  29. package/dist/render/templates/bauhaus/styles.css +1641 -0
  30. package/dist/render/templates/blueprint/portfolio.liquid +167 -0
  31. package/dist/render/templates/blueprint/project.liquid +286 -0
  32. package/dist/render/templates/blueprint/session.liquid +248 -0
  33. package/dist/render/templates/blueprint/styles.css +1285 -0
  34. package/dist/render/templates/canvas/portfolio.liquid +215 -0
  35. package/dist/render/templates/canvas/project.liquid +235 -0
  36. package/dist/render/templates/canvas/session.liquid +223 -0
  37. package/dist/render/templates/canvas/styles.css +1436 -0
  38. package/dist/render/templates/carbon/portfolio.liquid +170 -0
  39. package/dist/render/templates/carbon/project.liquid +249 -0
  40. package/dist/render/templates/carbon/session.liquid +190 -0
  41. package/dist/render/templates/carbon/styles.css +1091 -0
  42. package/dist/render/templates/chalk/portfolio.liquid +199 -0
  43. package/dist/render/templates/chalk/project.liquid +245 -0
  44. package/dist/render/templates/chalk/session.liquid +215 -0
  45. package/dist/render/templates/chalk/styles.css +1157 -0
  46. package/dist/render/templates/circuit/portfolio.liquid +162 -0
  47. package/dist/render/templates/circuit/project.liquid +247 -0
  48. package/dist/render/templates/circuit/session.liquid +205 -0
  49. package/dist/render/templates/circuit/styles.css +1403 -0
  50. package/dist/render/templates/cosmos/portfolio.liquid +232 -0
  51. package/dist/render/templates/cosmos/project.liquid +327 -0
  52. package/dist/render/templates/cosmos/session.liquid +239 -0
  53. package/dist/render/templates/cosmos/styles.css +1151 -0
  54. package/dist/render/templates/daylight/portfolio.liquid +217 -0
  55. package/dist/render/templates/daylight/project.liquid +229 -0
  56. package/dist/render/templates/daylight/session.liquid +219 -0
  57. package/dist/render/templates/daylight/styles.css +1311 -0
  58. package/dist/render/templates/editorial/portfolio.liquid +126 -0
  59. package/dist/render/templates/editorial/project.liquid +202 -0
  60. package/dist/render/templates/editorial/session.liquid +171 -0
  61. package/dist/render/templates/editorial/styles.css +822 -0
  62. package/dist/render/templates/ember/portfolio.liquid +318 -0
  63. package/dist/render/templates/ember/project.liquid +232 -0
  64. package/dist/render/templates/ember/session.liquid +202 -0
  65. package/dist/render/templates/ember/styles.css +1283 -0
  66. package/dist/render/templates/glacier/portfolio.liquid +271 -0
  67. package/dist/render/templates/glacier/project.liquid +288 -0
  68. package/dist/render/templates/glacier/session.liquid +217 -0
  69. package/dist/render/templates/glacier/styles.css +1200 -0
  70. package/dist/render/templates/grid/portfolio.liquid +265 -0
  71. package/dist/render/templates/grid/project.liquid +306 -0
  72. package/dist/render/templates/grid/session.liquid +260 -0
  73. package/dist/render/templates/grid/styles.css +1441 -0
  74. package/dist/render/templates/kinetic/portfolio.liquid +170 -0
  75. package/dist/render/templates/kinetic/project.liquid +242 -0
  76. package/dist/render/templates/kinetic/session.liquid +228 -0
  77. package/dist/render/templates/kinetic/styles.css +944 -0
  78. package/dist/render/templates/meridian/portfolio.liquid +255 -0
  79. package/dist/render/templates/meridian/project.liquid +376 -0
  80. package/dist/render/templates/meridian/session.liquid +298 -0
  81. package/dist/render/templates/meridian/styles.css +1369 -0
  82. package/dist/render/templates/minimal/portfolio.liquid +71 -0
  83. package/dist/render/templates/minimal/project.liquid +154 -0
  84. package/dist/render/templates/minimal/session.liquid +140 -0
  85. package/dist/render/templates/minimal/styles.css +525 -0
  86. package/dist/render/templates/mono/portfolio.liquid +291 -0
  87. package/dist/render/templates/mono/project.liquid +275 -0
  88. package/dist/render/templates/mono/session.liquid +276 -0
  89. package/dist/render/templates/mono/styles.css +1016 -0
  90. package/dist/render/templates/neon/portfolio.liquid +217 -0
  91. package/dist/render/templates/neon/project.liquid +225 -0
  92. package/dist/render/templates/neon/session.liquid +195 -0
  93. package/dist/render/templates/neon/styles.css +1265 -0
  94. package/dist/render/templates/noir/portfolio.liquid +137 -0
  95. package/dist/render/templates/noir/project.liquid +220 -0
  96. package/dist/render/templates/noir/session.liquid +241 -0
  97. package/dist/render/templates/noir/styles.css +1223 -0
  98. package/dist/render/templates/obsidian/portfolio.liquid +257 -0
  99. package/dist/render/templates/obsidian/project.liquid +280 -0
  100. package/dist/render/templates/obsidian/session.liquid +241 -0
  101. package/dist/render/templates/obsidian/styles.css +1401 -0
  102. package/dist/render/templates/paper/portfolio.liquid +267 -0
  103. package/dist/render/templates/paper/project.liquid +235 -0
  104. package/dist/render/templates/paper/session.liquid +271 -0
  105. package/dist/render/templates/paper/styles.css +1509 -0
  106. package/dist/render/templates/parallax/portfolio.liquid +305 -0
  107. package/dist/render/templates/parallax/project.liquid +275 -0
  108. package/dist/render/templates/parallax/session.liquid +295 -0
  109. package/dist/render/templates/parallax/styles.css +1874 -0
  110. package/dist/render/templates/parchment/portfolio.liquid +290 -0
  111. package/dist/render/templates/parchment/project.liquid +289 -0
  112. package/dist/render/templates/parchment/session.liquid +346 -0
  113. package/dist/render/templates/parchment/styles.css +1397 -0
  114. package/dist/render/templates/partials/_beats.liquid +16 -0
  115. package/dist/render/templates/partials/_breadcrumb.liquid +9 -0
  116. package/dist/render/templates/partials/_footer.liquid +7 -0
  117. package/dist/render/templates/partials/_growth-chart.liquid +7 -0
  118. package/dist/render/templates/partials/_key-decisions.liquid +20 -0
  119. package/dist/render/templates/partials/_links.liquid +16 -0
  120. package/dist/render/templates/partials/_narrative.liquid +8 -0
  121. package/dist/render/templates/partials/_phases.liquid +20 -0
  122. package/dist/render/templates/partials/_portfolio-header.liquid +20 -0
  123. package/dist/render/templates/partials/_portfolio-projects.liquid +16 -0
  124. package/dist/render/templates/partials/_portfolio-stats.liquid +19 -0
  125. package/dist/render/templates/partials/_qa.liquid +13 -0
  126. package/dist/render/templates/partials/_screenshot.liquid +15 -0
  127. package/dist/render/templates/partials/_session-cards.liquid +30 -0
  128. package/dist/render/templates/partials/_session-header.liquid +39 -0
  129. package/dist/render/templates/partials/_session-sidebar.liquid +30 -0
  130. package/dist/render/templates/partials/_skills.liquid +12 -0
  131. package/dist/render/templates/partials/_source-breakdown.liquid +22 -0
  132. package/dist/render/templates/partials/_stats.liquid +38 -0
  133. package/dist/render/templates/partials/_work-timeline.liquid +7 -0
  134. package/dist/render/templates/project.liquid +7 -4
  135. package/dist/render/templates/radar/portfolio.liquid +233 -0
  136. package/dist/render/templates/radar/project.liquid +278 -0
  137. package/dist/render/templates/radar/session.liquid +300 -0
  138. package/dist/render/templates/radar/styles.css +1049 -0
  139. package/dist/render/templates/showcase/portfolio.liquid +231 -0
  140. package/dist/render/templates/showcase/project.liquid +237 -0
  141. package/dist/render/templates/showcase/session.liquid +210 -0
  142. package/dist/render/templates/showcase/styles.css +1279 -0
  143. package/dist/render/templates/signal/portfolio.liquid +227 -0
  144. package/dist/render/templates/signal/project.liquid +278 -0
  145. package/dist/render/templates/signal/session.liquid +282 -0
  146. package/dist/render/templates/signal/styles.css +1395 -0
  147. package/dist/render/templates/strata/portfolio.liquid +192 -0
  148. package/dist/render/templates/strata/project.liquid +282 -0
  149. package/dist/render/templates/strata/session.liquid +261 -0
  150. package/dist/render/templates/strata/styles.css +1350 -0
  151. package/dist/render/templates/styles.css +1190 -0
  152. package/dist/render/templates/terminal/portfolio.liquid +118 -0
  153. package/dist/render/templates/terminal/project.liquid +161 -0
  154. package/dist/render/templates/terminal/session.liquid +145 -0
  155. package/dist/render/templates/terminal/styles.css +492 -0
  156. package/dist/render/templates/verdant/portfolio.liquid +333 -0
  157. package/dist/render/templates/verdant/project.liquid +309 -0
  158. package/dist/render/templates/verdant/session.liquid +237 -0
  159. package/dist/render/templates/verdant/styles.css +1257 -0
  160. package/dist/render/templates/zen/portfolio.liquid +136 -0
  161. package/dist/render/templates/zen/project.liquid +187 -0
  162. package/dist/render/templates/zen/session.liquid +203 -0
  163. package/dist/render/templates/zen/styles.css +1207 -0
  164. package/dist/render/templates.js +90 -0
  165. package/dist/routes/context.js +15 -10
  166. package/dist/routes/enhance.js +17 -40
  167. package/dist/routes/export.js +14 -4
  168. package/dist/routes/preview.js +480 -108
  169. package/dist/routes/projects.js +11 -19
  170. package/dist/routes/publish.js +15 -17
  171. package/dist/routes/settings.js +94 -1
  172. package/dist/routes/sse.js +9 -0
  173. package/dist/server.js +8 -2
  174. package/dist/settings.js +17 -9
  175. package/package.json +2 -4
  176. package/dist/public/assets/index-B_d6DlEI.js +0 -21
  177. package/dist/public/assets/index-Dalqz2mC.css +0 -1
@@ -0,0 +1,282 @@
1
+ <div class="heyiam-session signal" data-render-version="2" data-template="signal">
2
+
3
+ <a href="#main" class="skip-link">Skip to content</a>
4
+
5
+ {%- comment -%} Breadcrumb {%- endcomment -%}
6
+ <div class="container">
7
+ <nav class="breadcrumb" aria-label="Breadcrumb">
8
+ <a href="/{{ user.username }}">{{ user.username }}</a>
9
+ <span class="sep" aria-hidden="true">/</span>
10
+ <a href="/{{ user.username }}/{{ projectSlug }}">{{ projectSlug }}</a>
11
+ <span class="sep" aria-hidden="true">/</span>
12
+ <span aria-current="page">{{ session.title }}</span>
13
+ </nav>
14
+ </div>
15
+
16
+ {%- comment -%} Dashboard Strip {%- endcomment -%}
17
+ <section class="dashboard-strip" aria-label="Session statistics">
18
+ <div class="container">
19
+ <div class="stats-row">
20
+ <div class="stat-cell">
21
+ <div class="stat-value" data-animate data-target="{{ session.durationMinutes }}" data-suffix="m">0</div>
22
+ <div class="stat-label">Duration</div>
23
+ </div>
24
+ {% if session.wallClockMinutes %}
25
+ <div class="stat-cell">
26
+ <div class="stat-value" data-animate data-target="{{ session.wallClockMinutes }}" data-suffix="m">0</div>
27
+ <div class="stat-label">Wall Clock</div>
28
+ </div>
29
+ {% endif %}
30
+ <div class="stat-cell">
31
+ <div class="stat-value" data-animate data-target="{{ session.turns }}">0</div>
32
+ <div class="stat-label">Turns</div>
33
+ </div>
34
+ <div class="stat-cell">
35
+ <div class="stat-value green" data-animate data-target="{{ session.locChanged }}">0</div>
36
+ <div class="stat-label">LOC</div>
37
+ </div>
38
+ <div class="stat-cell">
39
+ <div class="stat-value" data-animate data-target="{{ session.filesChanged }}">0</div>
40
+ <div class="stat-label">Files</div>
41
+ </div>
42
+ {% if session.agentSessions.size > 0 %}
43
+ <div class="stat-cell">
44
+ <div class="stat-value" data-animate data-target="{{ session.agentSessions.size }}">0</div>
45
+ <div class="stat-label">Agents</div>
46
+ </div>
47
+ {% endif %}
48
+ </div>
49
+ </div>
50
+ </section>
51
+
52
+ {%- comment -%} Main Content {%- endcomment -%}
53
+ <main id="main" class="container">
54
+
55
+ {%- comment -%} Session Header {%- endcomment -%}
56
+ <header class="session-header fade-in">
57
+ <h1>{{ session.title }}</h1>
58
+ <div class="session-meta">
59
+ {% if session.recordedAt %}
60
+ <div class="meta-item">
61
+ <span class="meta-label">Date</span>
62
+ <span>{{ session.recordedAt | formatDate }}</span>
63
+ </div>
64
+ {% endif %}
65
+ {% if session.sourceTool %}
66
+ <div class="meta-item">
67
+ <span class="meta-label">Source</span>
68
+ <span class="source-tag {{ session.sourceTool | downcase }}">{{ session.sourceTool }}</span>
69
+ </div>
70
+ {% endif %}
71
+ </div>
72
+ </header>
73
+
74
+ {%- comment -%} Dev Take {%- endcomment -%}
75
+ {% if session.devTake != blank %}
76
+ <div class="dev-take fade-in">
77
+ <div class="dev-take-label">Dev Take</div>
78
+ <p>{{ session.devTake }}</p>
79
+ </div>
80
+ {% endif %}
81
+
82
+ {%- comment -%} Two-column layout {%- endcomment -%}
83
+ <div class="layout-grid">
84
+
85
+ {%- comment -%} Main column {%- endcomment -%}
86
+ <div>
87
+
88
+ {%- comment -%} Skills {%- endcomment -%}
89
+ {% if session.skills.size > 0 %}
90
+ <section class="fade-in" aria-label="Skills" style="padding-top: 20px;">
91
+ <div class="skill-badges">
92
+ {% for skill in session.skills %}
93
+ <span class="skill-badge strong">{{ skill }}</span>
94
+ {% endfor %}
95
+ </div>
96
+ </section>
97
+ {% endif %}
98
+
99
+ {%- comment -%} Narrative {%- endcomment -%}
100
+ {% if session.narrative != blank %}
101
+ <section class="narrative fade-in" aria-label="Session narrative">
102
+ <div class="section-header">
103
+ <h2>Narrative</h2>
104
+ <div class="section-line" aria-hidden="true"></div>
105
+ </div>
106
+ <p>{{ session.narrative }}</p>
107
+ </section>
108
+ {% endif %}
109
+
110
+ {%- comment -%} Highlights {%- endcomment -%}
111
+ {% if session.highlights.size > 0 %}
112
+ <section class="fade-in" aria-label="Highlights">
113
+ <div class="section-header">
114
+ <h2>Highlights</h2>
115
+ <div class="section-line" aria-hidden="true"></div>
116
+ </div>
117
+ <ul class="highlights-list">
118
+ {% for h in session.highlights %}
119
+ <li>{{ h }}</li>
120
+ {% endfor %}
121
+ </ul>
122
+ </section>
123
+ {% endif %}
124
+
125
+ {%- comment -%} Execution Path / Beats {%- endcomment -%}
126
+ {% if session.beats.size > 0 %}
127
+ <section class="fade-in" aria-label="Execution path">
128
+ <div class="section-header">
129
+ <h2>Execution Path</h2>
130
+ <span class="section-tag">{{ session.beats.size }} beats</span>
131
+ <div class="section-line" aria-hidden="true"></div>
132
+ </div>
133
+ <div class="beats">
134
+ {% for beat in session.beats %}
135
+ <div class="beat">
136
+ <div class="beat-dot" aria-hidden="true"><div class="beat-dot-inner"></div></div>
137
+ <div class="beat-title">{{ beat.title }}</div>
138
+ {% if beat.body != blank %}
139
+ <div class="beat-desc">{{ beat.body }}</div>
140
+ {% endif %}
141
+ </div>
142
+ {% endfor %}
143
+ </div>
144
+ </section>
145
+ {% endif %}
146
+
147
+ {%- comment -%} Q&A {%- endcomment -%}
148
+ {% if session.qaPairs.size > 0 %}
149
+ <section class="fade-in" aria-label="Questions and answers">
150
+ <div class="section-header">
151
+ <h2>Q&amp;A</h2>
152
+ <span class="section-tag">{{ session.qaPairs.size }} questions</span>
153
+ <div class="section-line" aria-hidden="true"></div>
154
+ </div>
155
+ <div class="qa-list">
156
+ {% for qa in session.qaPairs %}
157
+ <article class="qa-item">
158
+ <div class="qa-question">
159
+ <span class="q-mark" aria-hidden="true">Q</span>
160
+ <span>{{ qa.question }}</span>
161
+ </div>
162
+ <div class="qa-answer">
163
+ <span class="a-mark" aria-hidden="true">A</span>
164
+ <span>{{ qa.answer }}</span>
165
+ </div>
166
+ </article>
167
+ {% endfor %}
168
+ </div>
169
+ </section>
170
+ {% endif %}
171
+
172
+ {%- comment -%} Agent Summary {%- endcomment -%}
173
+ {% if session.agentSessions.size > 0 %}
174
+ <section class="fade-in" aria-label="Agent summary">
175
+ <div class="section-header">
176
+ <h2>Agent Summary</h2>
177
+ <span class="section-tag">{{ session.agentSessions.size }} sub-sessions</span>
178
+ <div class="section-line" aria-hidden="true"></div>
179
+ </div>
180
+ <div class="agent-table-wrap" role="region" aria-label="Agent breakdown table" tabindex="0">
181
+ <table class="agent-table" aria-label="Agent roles and contributions">
182
+ <thead>
183
+ <tr>
184
+ <th scope="col">Role</th>
185
+ <th scope="col">Duration</th>
186
+ <th scope="col">LOC</th>
187
+ </tr>
188
+ </thead>
189
+ <tbody>
190
+ {% for agent in session.agentSessions %}
191
+ <tr>
192
+ <td>
193
+ <div class="agent-role">
194
+ <span class="agent-dot" style="background: {{ agent.color | default: 'var(--fg-dim)' }};" aria-hidden="true"></span>
195
+ <span class="agent-role-name">{{ agent.role }}</span>
196
+ </div>
197
+ </td>
198
+ <td class="stat-mono">{{ agent.durationMinutes | formatDuration }}</td>
199
+ <td class="stat-mono stat-green">{{ agent.locChanged | localeNumber }}</td>
200
+ </tr>
201
+ {% endfor %}
202
+ </tbody>
203
+ </table>
204
+ </div>
205
+ </section>
206
+ {% endif %}
207
+
208
+ </div>
209
+
210
+ {%- comment -%} Sidebar {%- endcomment -%}
211
+ <aside class="sidebar" aria-label="Session details">
212
+
213
+ {%- comment -%} Tools Used {%- endcomment -%}
214
+ {% if session.toolBreakdown.size > 0 %}
215
+ <div class="sidebar-card fade-in">
216
+ <div class="sidebar-card-header">Tools Used</div>
217
+ <div class="sidebar-card-body">
218
+ {% assign maxToolCount = session.toolBreakdown[0].count %}
219
+ {% for tool in session.toolBreakdown %}
220
+ {% if tool.count > maxToolCount %}
221
+ {% assign maxToolCount = tool.count %}
222
+ {% endif %}
223
+ {% endfor %}
224
+ {% for tool in session.toolBreakdown %}
225
+ <div class="tool-row">
226
+ <span class="tool-name">{{ tool.tool }}</span>
227
+ <div class="tool-bar-bg">
228
+ {% if maxToolCount > 0 %}
229
+ {% assign toolPct = tool.count | times: 100 | divided_by: maxToolCount %}
230
+ <div class="tool-bar-fill" style="width: {{ toolPct }}%;"></div>
231
+ {% endif %}
232
+ </div>
233
+ <span class="tool-count">{{ tool.count }}</span>
234
+ </div>
235
+ {% endfor %}
236
+ </div>
237
+ </div>
238
+ {% endif %}
239
+
240
+ {%- comment -%} Files Changed {%- endcomment -%}
241
+ {% if session.topFiles.size > 0 %}
242
+ <div class="sidebar-card fade-in">
243
+ <div class="sidebar-card-header">Files Changed</div>
244
+ <div class="sidebar-card-body">
245
+ {% for file in session.topFiles %}
246
+ <div class="file-row">
247
+ <span class="file-name" title="{{ file.path }}">{{ file.path }}</span>
248
+ <span class="file-diff">+{{ file.additions }}</span>
249
+ </div>
250
+ {% endfor %}
251
+ </div>
252
+ </div>
253
+ {% endif %}
254
+
255
+ {%- comment -%} Skills {%- endcomment -%}
256
+ {% if session.skills.size > 0 %}
257
+ <div class="sidebar-card fade-in">
258
+ <div class="sidebar-card-header">Skills</div>
259
+ <div class="sidebar-card-body">
260
+ <div class="sidebar-skills">
261
+ {% for skill in session.skills %}
262
+ <span class="skill-badge strong">{{ skill }}</span>
263
+ {% endfor %}
264
+ </div>
265
+ </div>
266
+ </div>
267
+ {% endif %}
268
+
269
+ </aside>
270
+
271
+ </div>
272
+ </main>
273
+
274
+ {%- comment -%} Footer {%- endcomment -%}
275
+ <footer class="footer">
276
+ <div class="container">
277
+ signal template &middot; heyi.am
278
+ </div>
279
+ </footer>
280
+
281
+
282
+ </div>