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,241 @@
1
+ <div class="heyiam-session obsidian" data-render-version="2" data-template="obsidian">
2
+
3
+ <a href="#main" class="skip-link">Skip to content</a>
4
+
5
+ <main id="main">
6
+ <div class="container">
7
+
8
+ {%- comment -%} Breadcrumb {%- endcomment -%}
9
+ <div class="breadcrumb fade-up" aria-label="Breadcrumb">
10
+ <a href="/{{ user.username }}">{{ user.username }}</a>
11
+ {% if projectSlug %}
12
+ <span class="breadcrumb-sep">/</span>
13
+ <a href="/{{ user.username }}/{{ projectSlug }}">{{ projectSlug }}</a>
14
+ {% endif %}
15
+ <span class="breadcrumb-sep">/</span>
16
+ <span aria-current="page">{{ session.title }}</span>
17
+ </div>
18
+
19
+ {%- comment -%} Hero {%- endcomment -%}
20
+ <section class="hero hero--session fade-up" aria-label="Session header">
21
+ <h1>{{ session.title }}</h1>
22
+ <div class="hero-meta">
23
+ {% if session.recordedAt %}
24
+ <span class="hero-meta-item">
25
+ <svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg>
26
+ {{ session.recordedAt | formatDate }}
27
+ </span>
28
+ {% endif %}
29
+ <span class="hero-meta-item">
30
+ <svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
31
+ {{ session.durationMinutes | formatDuration }}{% if session.wallClockMinutes %} ({{ session.wallClockMinutes | formatDuration }} wall){% endif %}
32
+ </span>
33
+ <span class="hero-meta-item">
34
+ <svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/></svg>
35
+ {{ session.turns }} turns
36
+ </span>
37
+ <span class="hero-meta-item">
38
+ <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"/><polyline points="13 2 13 9 20 9"/></svg>
39
+ {{ session.locChanged | localeNumber }} LOC
40
+ </span>
41
+ <span class="hero-meta-item">
42
+ <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"/><polyline points="14 2 14 8 20 8"/></svg>
43
+ {{ session.filesChanged }} files
44
+ </span>
45
+ </div>
46
+ {% if session.sourceTool %}
47
+ <span class="source-badge">{{ session.sourceTool }}</span>
48
+ {% endif %}
49
+ </section>
50
+
51
+ {%- comment -%} Dev Take {%- endcomment -%}
52
+ {% if session.devTake != blank %}
53
+ <div class="dev-take fade-up">
54
+ <div class="dev-take-label">Dev Take</div>
55
+ <p>{{ session.devTake }}</p>
56
+ </div>
57
+ {% endif %}
58
+
59
+ {%- comment -%} Two-column layout {%- endcomment -%}
60
+ <div class="content-grid">
61
+ {%- comment -%} Main content {%- endcomment -%}
62
+ <div>
63
+
64
+ {%- comment -%} Execution Path (Beats) {%- endcomment -%}
65
+ {% if session.beats.size > 0 %}
66
+ <section class="beats fade-up" aria-label="Execution path">
67
+ <h2 class="section-heading">Execution Path</h2>
68
+ <ol class="beat-list beats-list">
69
+ {% for beat in session.beats %}
70
+ <li class="beat-item">
71
+ <span class="beat-dot" aria-hidden="true"></span>
72
+ <div class="beat-title">{{ beat.title }}</div>
73
+ <div class="beat-desc">{{ beat.body }}</div>
74
+ </li>
75
+ {% endfor %}
76
+ </ol>
77
+ </section>
78
+ {% endif %}
79
+
80
+ {%- comment -%} Q&A {%- endcomment -%}
81
+ {% if session.qaPairs.size > 0 %}
82
+ <section class="qa-section fade-up" aria-label="Questions and answers">
83
+ <h2 class="section-heading">Q&amp;A</h2>
84
+ <div class="qa-list">
85
+ {% for qa in session.qaPairs %}
86
+ <article class="qa-item qa-pair">
87
+ <div class="qa-question">
88
+ <span class="qa-label qa-label--q">Q</span>
89
+ <span>{{ qa.question }}</span>
90
+ </div>
91
+ <div class="qa-answer">
92
+ <span class="qa-label qa-label--a">A</span>
93
+ <span>{{ qa.answer }}</span>
94
+ </div>
95
+ </article>
96
+ {% endfor %}
97
+ </div>
98
+ </section>
99
+ {% endif %}
100
+
101
+ {%- comment -%} Narrative {%- endcomment -%}
102
+ {% if session.narrative != blank %}
103
+ <section class="fade-up" aria-label="Narrative">
104
+ <h2 class="section-heading">Narrative</h2>
105
+ <div class="narrative">
106
+ <p>{{ session.narrative }}</p>
107
+ </div>
108
+ </section>
109
+ {% endif %}
110
+
111
+ {%- comment -%} Highlights {%- endcomment -%}
112
+ {% if session.highlights.size > 0 %}
113
+ <section class="fade-up" aria-label="Highlights">
114
+ <h2 class="section-heading">Highlights</h2>
115
+ <ul class="highlights-list">
116
+ {% for h in session.highlights %}
117
+ <li>{{ h }}</li>
118
+ {% endfor %}
119
+ </ul>
120
+ </section>
121
+ {% endif %}
122
+
123
+ {%- comment -%} Agent Summary {%- endcomment -%}
124
+ {% if session.agentSummary %}
125
+ <section class="agents-section fade-up" aria-label="Agent breakdown">
126
+ <h2 class="section-heading">Agents</h2>
127
+ {% if session.agentSummary.agents.size > 0 %}
128
+ {% assign agent_colors = '#7c3aed,#0891b2,#059669,#475569,#e11d48,#d97706' | split: ',' %}
129
+ <div class="agent-chart">
130
+ <div class="agent-chart-title">Time by role</div>
131
+ {% assign maxAgentDuration = 0 %}
132
+ {% for agent in session.agentSummary.agents %}
133
+ {% if agent.duration_minutes > maxAgentDuration %}
134
+ {% assign maxAgentDuration = agent.duration_minutes %}
135
+ {% endif %}
136
+ {% endfor %}
137
+ {% for agent in session.agentSummary.agents %}
138
+ {% if maxAgentDuration > 0 %}
139
+ {% assign barPct = agent.duration_minutes | times: 100 | divided_by: maxAgentDuration %}
140
+ {% else %}
141
+ {% assign barPct = 0 %}
142
+ {% endif %}
143
+ {% assign colorIdx = forloop.index0 | modulo: 6 %}
144
+ <div class="agent-bar-row">
145
+ <span class="agent-bar-label">{{ agent.role }}</span>
146
+ <div class="agent-bar-track">
147
+ <div class="agent-bar-fill" style="width: {{ barPct }}%; background: {{ agent_colors[colorIdx] }}"></div>
148
+ </div>
149
+ <span class="agent-bar-value">{{ agent.duration_minutes | formatDuration }}</span>
150
+ </div>
151
+ {% endfor %}
152
+ </div>
153
+ <div class="agent-list">
154
+ {% for agent in session.agentSummary.agents %}
155
+ {% assign colorIdx = forloop.index0 | modulo: 6 %}
156
+ <div class="agent-row">
157
+ <span class="agent-dot" style="background: {{ agent_colors[colorIdx] }}" aria-hidden="true"></span>
158
+ <span class="agent-name">{{ agent.role }}</span>
159
+ <span class="agent-duration">{{ agent.duration_minutes | formatDuration }}</span>
160
+ <span class="agent-loc">{{ agent.loc_changed | formatLoc }} LOC</span>
161
+ </div>
162
+ {% endfor %}
163
+ </div>
164
+ {% endif %}
165
+ </section>
166
+ {% endif %}
167
+
168
+ </div>
169
+
170
+ {%- comment -%} Sidebar {%- endcomment -%}
171
+ <aside class="sidebar" aria-label="Session details">
172
+
173
+ {%- comment -%} Tools Used {%- endcomment -%}
174
+ {% if session.toolBreakdown.size > 0 %}
175
+ <div class="sidebar-card fade-up">
176
+ <div class="sidebar-title">Tools Used</div>
177
+ <div class="tools-table tool-list">
178
+ {% assign maxToolCount = 0 %}
179
+ {% for t in session.toolBreakdown %}
180
+ {% if t.count > maxToolCount %}
181
+ {% assign maxToolCount = t.count %}
182
+ {% endif %}
183
+ {% endfor %}
184
+ {% for t in session.toolBreakdown %}
185
+ {% if maxToolCount > 0 %}
186
+ {% assign toolPct = t.count | times: 100 | divided_by: maxToolCount %}
187
+ {% else %}
188
+ {% assign toolPct = 0 %}
189
+ {% endif %}
190
+ <div class="tools-row">
191
+ <span class="tools-name">{{ t.tool }}</span>
192
+ <span class="tools-count">
193
+ {{ t.count }}
194
+ <span class="tools-bar"><span class="tools-bar-fill" style="width: {{ toolPct }}%"></span></span>
195
+ </span>
196
+ </div>
197
+ {% endfor %}
198
+ </div>
199
+ </div>
200
+ {% endif %}
201
+
202
+ {%- comment -%} Files Changed {%- endcomment -%}
203
+ {% if session.topFiles.size > 0 %}
204
+ <div class="sidebar-card fade-up">
205
+ <div class="sidebar-title">Files Changed</div>
206
+ <div class="files-table file-list">
207
+ {% for f in session.topFiles %}
208
+ <div class="files-row">
209
+ <span class="files-name" title="{{ f.path }}">{{ f.path }}</span>
210
+ <span class="files-diff files-diff--add">+{{ f.additions }}</span>
211
+ <span class="files-diff files-diff--del">-{{ f.deletions }}</span>
212
+ </div>
213
+ {% endfor %}
214
+ </div>
215
+ </div>
216
+ {% endif %}
217
+
218
+ {%- comment -%} Skills {%- endcomment -%}
219
+ {% if session.skills.size > 0 %}
220
+ <div class="sidebar-card fade-up">
221
+ <div class="sidebar-title">Skills</div>
222
+ <div class="sidebar-skills">
223
+ {% for skill in session.skills %}
224
+ <span class="sidebar-skill-tag chip">{{ skill }}</span>
225
+ {% endfor %}
226
+ </div>
227
+ </div>
228
+ {% endif %}
229
+
230
+ </aside>
231
+ </div>
232
+
233
+ </div>
234
+ </main>
235
+
236
+ <footer class="site-footer">
237
+ <div class="container">Built with heyi.am</div>
238
+ </footer>
239
+
240
+
241
+ </div>