@raquezha/notrace 0.1.1 → 0.2.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 (80) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/notrace/index.d.ts +34 -0
  3. package/dist/notrace/index.js +144 -118
  4. package/dist/notrace/report-app/__tests__/analytics.test.d.ts +1 -0
  5. package/dist/notrace/report-app/__tests__/analytics.test.js +35 -0
  6. package/dist/notrace/report-app/__tests__/card.test.d.ts +1 -0
  7. package/dist/notrace/report-app/__tests__/card.test.js +26 -0
  8. package/dist/notrace/report-app/__tests__/event.test.d.ts +1 -0
  9. package/dist/notrace/report-app/__tests__/event.test.js +20 -0
  10. package/dist/notrace/report-app/__tests__/format.test.d.ts +1 -0
  11. package/dist/notrace/report-app/__tests__/format.test.js +41 -0
  12. package/dist/notrace/report-app/__tests__/report.test.d.ts +1 -0
  13. package/dist/notrace/report-app/__tests__/report.test.js +31 -0
  14. package/dist/notrace/report-app/analytics.d.ts +3 -0
  15. package/dist/notrace/report-app/analytics.js +78 -0
  16. package/dist/notrace/report-app/client.d.ts +2 -0
  17. package/dist/notrace/report-app/client.js +105 -0
  18. package/dist/notrace/report-app/components/card.d.ts +4 -0
  19. package/dist/notrace/report-app/components/card.js +36 -0
  20. package/dist/notrace/report-app/components/dashboard.d.ts +1 -0
  21. package/dist/notrace/report-app/components/dashboard.js +16 -0
  22. package/dist/notrace/report-app/components/event.d.ts +5 -0
  23. package/dist/notrace/report-app/components/event.js +42 -0
  24. package/dist/notrace/report-app/components/message.d.ts +2 -0
  25. package/dist/notrace/report-app/components/message.js +43 -0
  26. package/dist/notrace/report-app/dashboard-report.d.ts +1 -0
  27. package/dist/notrace/report-app/dashboard-report.js +6 -0
  28. package/dist/notrace/report-app/escape.d.ts +1 -0
  29. package/dist/notrace/report-app/escape.js +10 -0
  30. package/dist/notrace/report-app/format.d.ts +13 -0
  31. package/dist/notrace/report-app/format.js +102 -0
  32. package/dist/notrace/report-app/report.d.ts +1 -0
  33. package/dist/notrace/report-app/report.js +29 -0
  34. package/dist/notrace/report-app/shell.d.ts +5 -0
  35. package/dist/notrace/report-app/shell.js +19 -0
  36. package/dist/notrace/report-app/styles.d.ts +1 -0
  37. package/dist/notrace/report-app/styles.js +431 -0
  38. package/dist/notrace/report-app/types.d.ts +28 -0
  39. package/dist/notrace/report-app/types.js +1 -0
  40. package/extensions/notrace/__tests__/ghost-session.test.ts +103 -0
  41. package/extensions/notrace/__tests__/helpers.ts +11 -0
  42. package/extensions/notrace/__tests__/lock-race.test.ts +176 -0
  43. package/extensions/notrace/__tests__/usage-normalization.test.ts +80 -0
  44. package/extensions/notrace/index.ts +160 -124
  45. package/extensions/notrace/report-app/__tests__/analytics.test.ts +41 -0
  46. package/extensions/notrace/report-app/__tests__/card.test.ts +29 -0
  47. package/extensions/notrace/report-app/__tests__/event.test.ts +23 -0
  48. package/extensions/notrace/report-app/__tests__/format.test.ts +46 -0
  49. package/extensions/notrace/report-app/__tests__/report.test.ts +33 -0
  50. package/extensions/notrace/report-app/analytics.ts +79 -0
  51. package/extensions/notrace/report-app/client.ts +106 -0
  52. package/extensions/notrace/report-app/components/card.ts +38 -0
  53. package/extensions/notrace/report-app/components/dashboard.ts +17 -0
  54. package/extensions/notrace/report-app/components/event.ts +39 -0
  55. package/extensions/notrace/report-app/components/message.ts +39 -0
  56. package/extensions/notrace/report-app/dashboard-report.ts +7 -0
  57. package/extensions/notrace/report-app/escape.ts +10 -0
  58. package/extensions/notrace/report-app/format.ts +107 -0
  59. package/extensions/notrace/report-app/report.ts +33 -0
  60. package/extensions/notrace/report-app/shell.ts +24 -0
  61. package/extensions/notrace/report-app/styles.ts +431 -0
  62. package/extensions/notrace/report-app/types.ts +35 -0
  63. package/package.json +4 -2
  64. package/templates/dashboard.sample.html +103 -63
  65. package/templates/dashboard.sample.json +73 -10
  66. package/templates/render-samples.mjs +119 -1
  67. package/templates/session.sample.html +125 -168
  68. package/templates/session.sample.json +66 -7
  69. package/templates/sessions/019ed2ee-1000-76ee-b353-000000000001/notrace.html +125 -163
  70. package/templates/sessions/019ed2ee-1000-76ee-b353-000000000001/notrace.json +50 -0
  71. package/templates/sessions/019ed2ee-1001-76ee-b353-000000000002/notrace.html +125 -162
  72. package/templates/sessions/019ed2ee-1001-76ee-b353-000000000002/notrace.json +50 -0
  73. package/templates/sessions/019ed2ee-1002-76ee-b353-000000000003/notrace.html +125 -163
  74. package/templates/sessions/019ed2ee-1002-76ee-b353-000000000003/notrace.json +50 -0
  75. package/templates/sessions/019ed2ee-massive/notrace.html +498 -0
  76. package/templates/sessions/019ed2ee-massive/notrace.json +14660 -0
  77. package/tsconfig.json +1 -1
  78. package/dist/notrace/renderer.d.ts +0 -4
  79. package/dist/notrace/renderer.js +0 -800
  80. package/extensions/notrace/renderer.ts +0 -810
@@ -1,12 +1,4 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <title>notrace - 019ed2ee-5252-76ee-b353-ad925a6bad31</title>
7
- <link rel="icon" href="data:image/svg+xml,%3Csvg%20width%3D%22100%22%20height%3D%22100%22%20viewBox%3D%220%200%20100%20100%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20role%3D%22img%22%3E%3Ctitle%3Enotrace%20logo%20mark%3C%2Ftitle%3E%3Cdesc%3EA%20wave%20that%20smooths%20into%20a%20flat%20line%2C%20then%20fades%20into%20dots%20%E2%80%94%20color%20shifts%20from%20trace%20orange%20to%20no%20cream%20as%20it%20dissolves.%3C%2Fdesc%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22fadeGrad%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%22100%25%22%20y2%3D%220%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23E2754A%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23EDE2D2%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Cg%20id%3D%22trace-icon%22%3E%3Cpath%20d%3D%22M6%2C50%20C16%2C18%2026%2C18%2036%2C50%20C46%2C82%2054%2C82%2060%2C50%20C64%2C30%2068%2C30%2071%2C50%22%20fill%3D%22none%22%20stroke%3D%22url(%23fadeGrad)%22%20stroke-width%3D%224%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2274%22%20y1%3D%2250%22%20x2%3D%2279%22%20y2%3D%2250%22%20stroke%3D%22%23D9C9B5%22%20stroke-width%3D%224%22%20stroke-linecap%3D%22round%22%20stroke-opacity%3D%220.6%22%2F%3E%3Ccircle%20cx%3D%2285%22%20cy%3D%2250%22%20r%3D%222.2%22%20fill%3D%22%23D9C9B5%22%20opacity%3D%220.5%22%2F%3E%3Ccircle%20cx%3D%2290%22%20cy%3D%2250%22%20r%3D%221.4%22%20fill%3D%22%23EDE2D2%22%20opacity%3D%220.32%22%2F%3E%3Ccircle%20cx%3D%2294%22%20cy%3D%2250%22%20r%3D%220.9%22%20fill%3D%22%23EDE2D2%22%20opacity%3D%220.15%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
8
- <style>
9
- :root {
1
+ <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>notrace - 019ed2ee-5252-76ee-b353-ad925a6bad31</title><link rel="icon" href="data:image/svg+xml,%3Csvg%20width%3D%22100%22%20height%3D%22100%22%20viewBox%3D%220%200%20100%20100%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20role%3D%22img%22%3E%3Ctitle%3Enotrace%20logo%20mark%3C%2Ftitle%3E%3Cdesc%3EA%20wave%20that%20smooths%20into%20a%20flat%20line%2C%20then%20fades%20into%20dots%20%E2%80%94%20color%20shifts%20from%20trace%20orange%20to%20no%20cream%20as%20it%20dissolves.%3C%2Fdesc%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22fadeGrad%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%22100%25%22%20y2%3D%220%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23E2754A%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23EDE2D2%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Cg%20id%3D%22trace-icon%22%3E%3Cpath%20d%3D%22M6%2C50%20C16%2C18%2026%2C18%2036%2C50%20C46%2C82%2054%2C82%2060%2C50%20C64%2C30%2068%2C30%2071%2C50%22%20fill%3D%22none%22%20stroke%3D%22url(%23fadeGrad)%22%20stroke-width%3D%224%22%20stroke-linecap%3D%22round%22%2F%3E%3Cline%20x1%3D%2274%22%20y1%3D%2250%22%20x2%3D%2279%22%20y2%3D%2250%22%20stroke%3D%22%23D9C9B5%22%20stroke-width%3D%224%22%20stroke-linecap%3D%22round%22%20stroke-opacity%3D%220.6%22%2F%3E%3Ccircle%20cx%3D%2285%22%20cy%3D%2250%22%20r%3D%222.2%22%20fill%3D%22%23D9C9B5%22%20opacity%3D%220.5%22%2F%3E%3Ccircle%20cx%3D%2290%22%20cy%3D%2250%22%20r%3D%221.4%22%20fill%3D%22%23EDE2D2%22%20opacity%3D%220.32%22%2F%3E%3Ccircle%20cx%3D%2294%22%20cy%3D%2250%22%20r%3D%220.9%22%20fill%3D%22%23EDE2D2%22%20opacity%3D%220.15%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"><style>:root {
10
2
  --bg: #0c0b0a;
11
3
  --panel: rgba(255,255,255,0.04);
12
4
  --panel-strong: rgba(255,255,255,0.06);
@@ -55,6 +47,30 @@
55
47
  gap: 16px;
56
48
  align-items: start;
57
49
  }
50
+ .hero-split {
51
+ display: grid;
52
+ grid-template-columns: minmax(0, 1fr) auto;
53
+ gap: 16px;
54
+ align-items: start;
55
+ }
56
+ .hero-right {
57
+ display: grid;
58
+ gap: 12px;
59
+ justify-items: end;
60
+ min-width: 0;
61
+ }
62
+ .hero-session {
63
+ display: grid;
64
+ gap: 4px;
65
+ text-align: right;
66
+ min-width: 0;
67
+ }
68
+ .hero-meta {
69
+ display: flex;
70
+ flex-wrap: wrap;
71
+ gap: 8px;
72
+ justify-content: flex-end;
73
+ }
58
74
  .brand { margin-bottom: 10px; }
59
75
  .brand-link {
60
76
  display: inline-flex;
@@ -133,11 +149,52 @@
133
149
  border: 1px solid var(--border);
134
150
  border-radius: 18px;
135
151
  padding: 18px;
152
+ min-width: 0;
136
153
  }
137
154
  .metric-card small { display: block; color: var(--accent); text-transform: uppercase; letter-spacing: 0.08em; font-size: 0.72rem; font-weight: 700; }
138
- .metric-card strong { display: block; margin-top: 8px; font-size: 1.55rem; }
155
+ .metric-card strong { display: block; margin-top: 8px; font-size: clamp(1rem, 2vw, 1.55rem); overflow-wrap: anywhere; }
139
156
  .panel { padding: 0; overflow: hidden; }
140
157
  .section-title { margin: 0; padding: 20px 22px; border-bottom: 1px solid var(--border); font-size: 1rem; }
158
+ .summary-pills { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
159
+ .kv-grid {
160
+ display: grid;
161
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
162
+ gap: 16px;
163
+ }
164
+ .kv-card {
165
+ background: rgba(0,0,0,0.18);
166
+ border: 1px solid var(--border);
167
+ border-radius: 16px;
168
+ padding: 16px;
169
+ }
170
+ .kv-title {
171
+ font-size: 0.72rem;
172
+ text-transform: uppercase;
173
+ color: var(--accent);
174
+ font-weight: 700;
175
+ letter-spacing: 0.08em;
176
+ margin-bottom: 10px;
177
+ }
178
+ .kv-list { display: grid; gap: 8px; }
179
+ .kv-row { display: flex; justify-content: space-between; gap: 12px; align-items: start; }
180
+ .kv-key { color: var(--muted); }
181
+ .kv-value { color: var(--text); text-align: right; word-break: break-word; }
182
+ .tiny-breakdown {
183
+ margin-top: -10px;
184
+ margin-bottom: 8px;
185
+ color: var(--muted);
186
+ font-size: 0.82rem;
187
+ display: flex;
188
+ flex-wrap: wrap;
189
+ gap: 8px 14px;
190
+ }
191
+ .tiny-breakdown strong { color: var(--text); font-size: inherit; font-weight: 600; }
192
+ .collapsible { margin-top: 24px; }
193
+ .collapsible > summary { list-style: none; cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 18px 22px; font-size: 1rem; font-weight: 700; }
194
+ .collapsible > summary::-webkit-details-marker { display: none; }
195
+ .collapsible > summary:hover { background: rgba(255,255,255,0.02); }
196
+ .collapsible > summary::after { content: "▾"; color: var(--muted); font-size: 0.9rem; }
197
+ .collapsible:not([open]) > summary::after { content: "▸"; }
141
198
  .empty { padding: 32px 22px; color: var(--muted); }
142
199
  table { width: 100%; border-collapse: collapse; }
143
200
  th, td { padding: 14px 18px; text-align: left; border-bottom: 1px solid var(--border); vertical-align: top; }
@@ -279,6 +336,8 @@
279
336
  margin: 0;
280
337
  background: transparent;
281
338
  border: none;
339
+ max-height: 400px;
340
+ overflow-y: auto;
282
341
  }
283
342
  .footer-note {
284
343
  margin-top: 22px;
@@ -333,109 +392,43 @@
333
392
  border-color: rgba(216,132,98,0.45);
334
393
  background: var(--accent-soft);
335
394
  }
395
+ .back-to-top {
396
+ position: fixed;
397
+ right: 20px;
398
+ bottom: 20px;
399
+ z-index: 20;
400
+ display: inline-flex;
401
+ align-items: center;
402
+ gap: 8px;
403
+ padding: 10px 14px;
404
+ border: 1px solid var(--border);
405
+ border-radius: 999px;
406
+ background: rgba(12,11,10,0.88);
407
+ color: var(--text);
408
+ text-decoration: none;
409
+ box-shadow: var(--shadow);
410
+ backdrop-filter: blur(10px);
411
+ opacity: 0;
412
+ pointer-events: none;
413
+ transform: translateY(8px);
414
+ transition: opacity 160ms ease, transform 160ms ease, border-color 120ms ease, background 120ms ease;
415
+ }
416
+ .back-to-top.visible {
417
+ opacity: 1;
418
+ pointer-events: auto;
419
+ transform: translateY(0);
420
+ }
421
+ .back-to-top:hover { border-color: rgba(216,132,98,0.45); background: rgba(216,132,98,0.12); }
336
422
  .container { padding: 20px 14px 48px; }
337
423
  .hero { padding: 20px; }
338
- .hero-top { grid-template-columns: 1fr; }
339
- .meta { justify-content: flex-start; margin-top: 8px; }
340
- .wordmark { width: 280px; height: 92px; }
424
+ .hero-top, .hero-split { grid-template-columns: 1fr; }
425
+ .meta, .hero-meta { justify-content: flex-start; margin-top: 8px; }
426
+ .hero-right, .hero-session { justify-items: start; text-align: left; }
427
+ .wordmark { width: min(280px, 100%); height: auto; }
428
+ .metrics { grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); }
341
429
  th:nth-child(5), td:nth-child(5) { display: none; }
342
430
  .event summary { align-items: flex-start; }
343
- }
344
- </style>
345
- </head>
346
- <body><div class="container">
347
- <section class="hero">
348
- <div class="hero-top">
349
- <div>
350
- <div class="brand"><a class="brand-link" href="../../index.html" onclick="if (window.history.length > 1) { window.history.back(); return false; }"><svg class="wordmark" viewBox="0 0 420 138" aria-label="notrace" role="img" xmlns="http://www.w3.org/2000/svg">
351
- <defs>
352
- <linearGradient id="fadeGrad" x1="0%" y1="0%" x2="100%" y2="0%">
353
- <stop offset="0%" stop-color="#E2754A"/>
354
- <stop offset="100%" stop-color="#EDE2D2"/>
355
- </linearGradient>
356
- </defs>
357
- <g id="trace-icon" transform="translate(1 -18) scale(0.93)">
358
- <path d="M6,50 C16,18 26,18 36,50 C46,82 54,82 60,50 C64,30 68,30 71,50"
359
- fill="none" stroke="url(#fadeGrad)" stroke-width="4" stroke-linecap="round"/>
360
- <line x1="74" y1="50" x2="79" y2="50" stroke="#D9C9B5" stroke-width="4" stroke-linecap="round" stroke-opacity="0.6"/>
361
- <circle cx="85" cy="50" r="2.2" fill="#D9C9B5" opacity="0.5"/>
362
- <circle cx="90" cy="50" r="1.4" fill="#EDE2D2" opacity="0.32"/>
363
- <circle cx="94" cy="50" r="0.9" fill="#EDE2D2" opacity="0.15"/>
364
- </g>
365
- <text x="0" y="114" fill="#ECE3DA" style="fill:#ECE3DA" font-family="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, sans-serif" font-size="96" font-weight="900" letter-spacing="-7">no</text>
366
- <text x="82" y="114" fill="#d88462" font-family="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, sans-serif" font-size="96" font-weight="900" letter-spacing="-7">trace</text>
367
- </svg></a><p class="subtitle session-subtitle"><span>Session retrospective</span><span class="session-id-chip"><span>019ed2ee-5252-76ee-b353-ad925a6bad31</span><button class="copy-btn" type="button" data-copy-value="019ed2ee-5252-76ee-b353-ad925a6bad31" aria-label="Copy session ID" title="Copy session ID"><svg width="14" height="14" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></button></span></p></div>
368
- </div>
369
- <div class="meta">
370
- <span class="pill">nothing</span>
371
- <span class="pill">Started 2026-06-17 22:05</span>
372
- <span class="pill">Mode: full</span>
373
- <button class="export-btn" type="button" data-copy-value="{&quot;kind&quot;:&quot;notrace-export&quot;,&quot;traceId&quot;:&quot;019ed2ee-5252-76ee-b353-ad925a6bad31&quot;,&quot;repository&quot;:&quot;nothing&quot;,&quot;task&quot;:{&quot;workflow&quot;:&quot;research&quot;,&quot;id&quot;:&quot;branch:main&quot;,&quot;path&quot;:null,&quot;dir&quot;:null},&quot;metrics&quot;:{&quot;inputTokens&quot;:3120,&quot;outputTokens&quot;:179,&quot;cacheReadTokens&quot;:0,&quot;cacheWriteTokens&quot;:0,&quot;totalTokens&quot;:3299,&quot;totalCostUsd&quot;:0.02064},&quot;summary&quot;:&quot;compressed 24,110 to 18,332 tokens; saved 5,778 tokens across 3 tool results&quot;,&quot;events&quot;:[{&quot;model&quot;:&quot;claude-sonnet-4&quot;,&quot;input&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;Polish notrace HTML output and unify dashboard/session design.&quot;}],&quot;output&quot;:&quot;Found renderer split. Will move both pages to one shared shell and standardize styles.&quot;}]}" title="Copy session data for LLM/Agent context"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg><span>Export</span></button>
374
- </div>
375
- </div>
376
- <div class="metrics">
377
- <div class="metric-card"><small>Total Cost</small><strong>$0.02064</strong></div>
378
- <div class="metric-card"><small>Total Tokens</small><strong>3,299</strong></div>
379
- <div class="metric-card"><small>Input Tokens</small><strong>3,120</strong></div>
380
- <div class="metric-card"><small>Output Tokens</small><strong>179</strong></div>
381
- <div class="metric-card"><small>Tool Calls</small><strong>4</strong></div>
382
- <div class="metric-card"><small>Events</small><strong>3</strong></div>
383
- </div>
384
- </section>
385
- <section class="panel">
386
- <h2 class="section-title">Run Summary</h2>
387
- <div style="padding: 16px;" class="stack">
388
- <section class="block"><h4>Session</h4><pre>{
389
- &quot;id&quot;: &quot;019ed2ee-5252-76ee-b353-ad925a6bad31&quot;,
390
- &quot;startedAt&quot;: &quot;2026-06-17T14:05:00.000Z&quot;,
391
- &quot;endedAt&quot;: &quot;2026-06-17T14:08:12.000Z&quot;,
392
- &quot;durationMs&quot;: 192000,
393
- &quot;shutdownReason&quot;: &quot;quit&quot;
394
- }</pre></section>
395
- <section class="block"><h4>Task</h4><pre>{
396
- &quot;workflow&quot;: &quot;research&quot;,
397
- &quot;id&quot;: &quot;branch:main&quot;,
398
- &quot;path&quot;: null,
399
- &quot;dir&quot;: null
400
- }</pre></section>
401
- <section class="block"><h4>Conditions</h4><pre>{
402
- &quot;harness&quot;: {
403
- &quot;name&quot;: &quot;pi&quot;,
404
- &quot;adapter&quot;: &quot;pi-session-hooks&quot;,
405
- &quot;version&quot;: null
406
- },
407
- &quot;models&quot;: [
408
- &quot;claude-sonnet-4&quot;
409
- ],
410
- &quot;providers&quot;: [
411
- &quot;anthropic&quot;
412
- ],
413
- &quot;extensions&quot;: [
414
- &quot;notrace&quot;,
415
- &quot;noheadroom&quot;
416
- ]
417
- }</pre></section>
418
- <section class="block"><h4>Activity</h4><pre>{
419
- &quot;turnCount&quot;: 18,
420
- &quot;llmCallCount&quot;: 2,
421
- &quot;toolCallCount&quot;: 4,
422
- &quot;toolErrorCount&quot;: 1,
423
- &quot;durationMs&quot;: 192000,
424
- &quot;totals&quot;: {
425
- &quot;inputTokens&quot;: 3120,
426
- &quot;outputTokens&quot;: 179,
427
- &quot;cacheReadTokens&quot;: 0,
428
- &quot;cacheWriteTokens&quot;: 0,
429
- &quot;totalTokens&quot;: 3299,
430
- &quot;totalCostUsd&quot;: 0.02064
431
- }
432
- }</pre></section>
433
- </div>
434
- </section>
435
- <section class="panel" style="margin-top: 24px;">
436
- <h2 class="section-title">Dynamic Extension Telemetry</h2>
437
- <div style="padding: 16px;" class="stack">
438
- <section class="block"><h4>noheadroom (Active)</h4><pre>{
431
+ }</style></head><body><div class="container" id="top"><section class="hero"><div class="hero-top"><div><div class="brand"><a class="brand-link" href="../../index.html" onclick="if (window.history.length > 1) { window.history.back(); return false; }"><svg class="wordmark" viewBox="0 0 420 138" aria-label="notrace" role="img" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="fadeGrad" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" stop-color="#E2754A"/><stop offset="100%" stop-color="#EDE2D2"/></linearGradient></defs><g id="trace-icon" transform="translate(1 -18) scale(0.93)"><path d="M6,50 C16,18 26,18 36,50 C46,82 54,82 60,50 C64,30 68,30 71,50" fill="none" stroke="url(#fadeGrad)" stroke-width="4" stroke-linecap="round"/><line x1="74" y1="50" x2="79" y2="50" stroke="#D9C9B5" stroke-width="4" stroke-linecap="round" stroke-opacity="0.6"/><circle cx="85" cy="50" r="2.2" fill="#D9C9B5" opacity="0.5"/><circle cx="90" cy="50" r="1.4" fill="#EDE2D2" opacity="0.32"/><circle cx="94" cy="50" r="0.9" fill="#EDE2D2" opacity="0.15"/></g><text x="0" y="114" fill="#ECE3DA" style="fill:#ECE3DA" font-family="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, sans-serif" font-size="96" font-weight="900" letter-spacing="-7">no</text><text x="82" y="114" fill="#d88462" font-family="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, sans-serif" font-size="96" font-weight="900" letter-spacing="-7">trace</text></svg></a><p class="subtitle session-subtitle"><span>Session retrospective</span><span class="session-id-chip"><span>019ed2ee-5252-76ee-b353-ad925a6bad31</span><button class="copy-btn" type="button" data-copy-value="019ed2ee-5252-76ee-b353-ad925a6bad31" aria-label="Copy session ID" title="Copy session ID"><svg width="14" height="14" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></button></span></p></div></div><div class="meta"><span class="pill">nothing</span><span class="pill">Started 2026-06-17 22:05</span><span class="pill">Mode: full</span><button class="export-btn" type="button" data-copy-value="{&quot;kind&quot;:&quot;notrace-export&quot;,&quot;traceId&quot;:&quot;019ed2ee-5252-76ee-b353-ad925a6bad31&quot;,&quot;repository&quot;:&quot;nothing&quot;,&quot;task&quot;:{&quot;workflow&quot;:&quot;research&quot;,&quot;id&quot;:&quot;branch:main&quot;,&quot;path&quot;:null,&quot;dir&quot;:null},&quot;metrics&quot;:{&quot;inputTokens&quot;:3120,&quot;outputTokens&quot;:179,&quot;cacheReadTokens&quot;:0,&quot;cacheWriteTokens&quot;:0,&quot;totalTokens&quot;:1626956,&quot;totalCostUsd&quot;:8.13676},&quot;summary&quot;:&quot;compressed 24,110 to 18,332 tokens; saved 5,778 tokens across 3 tool results&quot;,&quot;events&quot;:[{&quot;model&quot;:&quot;claude-sonnet-4&quot;,&quot;input&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;Polish notrace HTML output and unify dashboard/session design.&quot;}],&quot;output&quot;:&quot;Found renderer split. Will move both pages to one shared shell and standardize styles.&quot;},{&quot;model&quot;:&quot;gpt-4o&quot;,&quot;input&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;massive analysis&quot;}],&quot;output&quot;:&quot;done.&quot;},{&quot;model&quot;:&quot;claude-sonnet-4&quot;,&quot;input&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;polish&quot;}],&quot;output&quot;:&quot;done.&quot;}]}" title="Copy session data for LLM/Agent context"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg><span>Export</span></button></div></div><div class="metrics"><div class="metric-card"><small>Total Cost</small><strong>$8.13676</strong></div><div class="metric-card"><small>Total Tokens</small><strong>1,626,956</strong></div><div class="metric-card"><small>Duration</small><strong>3m 12s</strong></div></div><div class="tiny-breakdown"><span>Input <strong>3.1k</strong></span><span>Output <strong>179</strong></span><span>Cache Read <strong>0</strong></span><span>Cache Write <strong>0</strong></span><span>Switches <strong>2</strong></span><span>Unique Models <strong>2</strong></span><span>Tool Calls <strong>4</strong></span><span>Events <strong>5</strong></span></div></section><details class="panel collapsible"><summary>Run Summary</summary><div><div style="padding: 18px 20px; display: grid; gap: 14px;"><div style="color: var(--muted); line-height: 1.7;"><strong style="color: var(--text);">Branch main</strong> ran for <strong style="color: var(--text);">3m 12s</strong>, used <strong style="color: var(--text);">1.63M</strong> tokens, cost <strong style="color: var(--text);">$8.13676</strong>.</div><div class="tiny-breakdown" style="margin: 0;"><span>Session <strong>019ed2ee-5252-76ee-b353-ad925a6bad31</strong></span><span>Started <strong>2026-06-17 22:05</strong></span><span>Workflow <strong>research</strong></span><span>LLM Calls <strong>2</strong></span><span>Tool Errors <strong>1</strong></span><span>Providers <strong>anthropic</strong></span></div></div></div></details><details class="panel collapsible"><summary>Timeline</summary><div><div style="padding: 16px;"><div class="timeline"><details class="event" data-lazy-event-body="%3Cdiv%20class%3D%22event-body%22%3E%3Cdiv%20class%3D%22stack%22%3E%3Csection%20class%3D%22block%22%3E%3Ch4%3EArguments%3C%2Fh4%3E%3Cdiv%20class%3D%22msg-content%22%3E%3Cdiv%20class%3D%22chat-tool-use%22%3E%3Cdiv%20class%3D%22chat-tool-header%22%3E%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M14.7%206.3a1%201%200%200%200%200%201.4l1.6%201.6a1%201%200%200%200%201.4%200l3.77-3.77a6%206%200%200%201-7.94%207.94l-6.91%206.91a2.12%202.12%200%200%201-3-3l6.91-6.91a6%206%200%200%201%207.94-7.94l-3.76%203.76z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E%20Execution%20Input%3C%2Fdiv%3E%3Cpre%20class%3D%22chat-tool-body%22%3E%7B%0A%20%20%26quot%3Bcommand%26quot%3B%3A%20%26quot%3Bfind%20packages%2Fnotrace%20-maxdepth%203%20-type%20f%26quot%3B%0A%7D%3C%2Fpre%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fsection%3E%3C%2Fdiv%3E%3C%2Fdiv%3E"><summary><div class="event-main"><span class="badge badge-tool">tool_start</span><span class="event-title">functions.bash</span></div><span class="event-time">22:05:04</span></summary></details><details class="event" data-lazy-event-body="%3Cdiv%20class%3D%22event-body%22%3E%3Cdiv%20class%3D%22stack%22%3E%3Csection%20class%3D%22block%22%3E%3Ch4%3EResult%3C%2Fh4%3E%3Cdiv%20class%3D%22msg-content%22%3E%3Cdiv%20class%3D%22chat-tool-use%22%20style%3D%22%22%3E%3Cdiv%20class%3D%22chat-tool-header%22%20style%3D%22color%3A%20var(--muted)%3B%22%3E%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpolyline%20points%3D%229%2010%204%2015%209%2020%22%3E%3C%2Fpolyline%3E%3Cpath%20d%3D%22M20%204v7a4%204%200%200%201-4%204H4%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E%20Execution%20Output%3C%2Fdiv%3E%3Cpre%20class%3D%22chat-tool-body%22%3E%7B%0A%20%20%26quot%3Bstdout%26quot%3B%3A%20%26quot%3Bpackages%2Fnotrace%2Fextensions%2Fnotrace%2Findex.ts%5Cnpackages%2Fnotrace%2Fextensions%2Fnotrace%2Frenderer.ts%5Cnpackages%2Fnotrace%2Fpackage.json%26quot%3B%2C%0A%20%20%26quot%3Bstderr%26quot%3B%3A%20%26quot%3B%26quot%3B%2C%0A%20%20%26quot%3BexitCode%26quot%3B%3A%200%0A%7D%3C%2Fpre%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fsection%3E%3C%2Fdiv%3E%3C%2Fdiv%3E"><summary><div class="event-main"><span class="badge badge-tool">tool_end</span><span class="event-title">functions.bash</span></div><span class="event-time">22:05:05</span></summary></details><details class="event" data-lazy-event-body="%3Cdiv%20class%3D%22event-body%22%3E%3Cdiv%20class%3D%22stack%22%3E%3Csection%20class%3D%22block%22%3E%3Ch4%3EInput%20Messages%3C%2Fh4%3E%3Cdiv%20class%3D%22msg%20user%20%22%3E%3Cdiv%20class%3D%22msg-head%22%3E%3Cspan%20class%3D%22msg-role%22%3Euser%3C%2Fspan%3E%3C%2Fdiv%3E%3Cdiv%20class%3D%22msg-content%22%3E%3Cdiv%20class%3D%22chat-text%22%3EPolish%20notrace%20HTML%20output%20and%20unify%20dashboard%2Fsession%20design.%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fsection%3E%3Csection%20class%3D%22block%22%3E%3Ch4%3EOutput%3C%2Fh4%3E%3Cdiv%20class%3D%22msg-content%22%3E%3Cdiv%20class%3D%22chat-text%22%3EFound%20renderer%20split.%20Will%20move%20both%20pages%20to%20one%20shared%20shell%20and%20standardize%20styles.%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fsection%3E%3Csection%20class%3D%22block%22%3E%3Ch4%3EUsage%3C%2Fh4%3E%3Cpre%3E%7B%0A%20%20%26quot%3Binput%26quot%3B%3A%202140%2C%0A%20%20%26quot%3Boutput%26quot%3B%3A%20116%2C%0A%20%20%26quot%3BcacheRead%26quot%3B%3A%200%2C%0A%20%20%26quot%3BcacheWrite%26quot%3B%3A%200%2C%0A%20%20%26quot%3BtotalTokens%26quot%3B%3A%202256%2C%0A%20%20%26quot%3Bcost%26quot%3B%3A%20%7B%0A%20%20%20%20%26quot%3Btotal%26quot%3B%3A%200.01451%0A%20%20%7D%0A%7D%3C%2Fpre%3E%3C%2Fsection%3E%3C%2Fdiv%3E%3C%2Fdiv%3E"><summary><div class="event-main"><span class="badge badge-llm">llm_completion</span><span class="event-title">claude-sonnet-4</span></div><span class="event-time">22:05:11</span></summary></details><details class="event" data-lazy-event-body="%3Cdiv%20class%3D%22event-body%22%3E%3Cdiv%20class%3D%22stack%22%3E%3Csection%20class%3D%22block%22%3E%3Ch4%3EInput%20Messages%3C%2Fh4%3E%3Cdiv%20class%3D%22msg%20user%20%22%3E%3Cdiv%20class%3D%22msg-head%22%3E%3Cspan%20class%3D%22msg-role%22%3Euser%3C%2Fspan%3E%3C%2Fdiv%3E%3Cdiv%20class%3D%22msg-content%22%3E%3Cdiv%20class%3D%22chat-text%22%3Emassive%20analysis%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fsection%3E%3Csection%20class%3D%22block%22%3E%3Ch4%3EOutput%3C%2Fh4%3E%3Cdiv%20class%3D%22msg-content%22%3E%3Cdiv%20class%3D%22chat-text%22%3Edone.%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fsection%3E%3Csection%20class%3D%22block%22%3E%3Ch4%3EUsage%3C%2Fh4%3E%3Cpre%3E%7B%0A%20%20%26quot%3Binput%26quot%3B%3A%201540000%2C%0A%20%20%26quot%3Boutput%26quot%3B%3A%20450%2C%0A%20%20%26quot%3BcacheRead%26quot%3B%3A%200%2C%0A%20%20%26quot%3BcacheWrite%26quot%3B%3A%200%2C%0A%20%20%26quot%3BtotalTokens%26quot%3B%3A%201540450%2C%0A%20%20%26quot%3Bcost%26quot%3B%3A%20%7B%0A%20%20%20%20%26quot%3Btotal%26quot%3B%3A%207.70225%0A%20%20%7D%0A%7D%3C%2Fpre%3E%3C%2Fsection%3E%3C%2Fdiv%3E%3C%2Fdiv%3E"><summary><div class="event-main"><span class="badge badge-llm">llm_completion</span><span class="event-title">gpt-4o</span></div><span class="event-time">22:05:50</span></summary></details><details class="event" data-lazy-event-body="%3Cdiv%20class%3D%22event-body%22%3E%3Cdiv%20class%3D%22stack%22%3E%3Csection%20class%3D%22block%22%3E%3Ch4%3EInput%20Messages%3C%2Fh4%3E%3Cdiv%20class%3D%22msg%20user%20%22%3E%3Cdiv%20class%3D%22msg-head%22%3E%3Cspan%20class%3D%22msg-role%22%3Euser%3C%2Fspan%3E%3C%2Fdiv%3E%3Cdiv%20class%3D%22msg-content%22%3E%3Cdiv%20class%3D%22chat-text%22%3Epolish%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fsection%3E%3Csection%20class%3D%22block%22%3E%3Ch4%3EOutput%3C%2Fh4%3E%3Cdiv%20class%3D%22msg-content%22%3E%3Cdiv%20class%3D%22chat-text%22%3Edone.%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fsection%3E%3Csection%20class%3D%22block%22%3E%3Ch4%3EUsage%3C%2Fh4%3E%3Cpre%3E%7B%0A%20%20%26quot%3Binput%26quot%3B%3A%2084000%2C%0A%20%20%26quot%3Boutput%26quot%3B%3A%20250%2C%0A%20%20%26quot%3BcacheRead%26quot%3B%3A%200%2C%0A%20%20%26quot%3BcacheWrite%26quot%3B%3A%200%2C%0A%20%20%26quot%3BtotalTokens%26quot%3B%3A%2084250%2C%0A%20%20%26quot%3Bcost%26quot%3B%3A%20%7B%0A%20%20%20%20%26quot%3Btotal%26quot%3B%3A%200.42%0A%20%20%7D%0A%7D%3C%2Fpre%3E%3C%2Fsection%3E%3C%2Fdiv%3E%3C%2Fdiv%3E"><summary><div class="event-main"><span class="badge badge-llm">llm_completion</span><span class="event-title">claude-sonnet-4</span></div><span class="event-time">22:06:40</span></summary></details></div></div></div></details><details class="panel collapsible"><summary>Models</summary><div><div style="padding: 16px; border-bottom: 1px solid var(--border); display: grid; gap: 8px;"><div style="color: var(--muted);">Top spender: <strong style="color: var(--text);">gpt-4o</strong></div><div style="color: var(--muted);">Most used: <strong style="color: var(--text);">claude-sonnet-4</strong></div></div><div style="overflow-x: auto;"><table><thead><tr><th>Model</th><th class="num-cell">Calls</th><th class="num-cell">Input</th><th class="num-cell">Output</th><th class="num-cell">Tokens</th><th class="num-cell">Cost</th><th class="num-cell">Avg Cost/Call</th><th class="num-cell">Avg Tokens/Call</th><th class="num-cell">Errors</th></tr></thead><tbody><tr><td><strong>gpt-4o</strong> <span class="badge badge-llm">top spend</span></td><td class="num-cell">1</td><td class="num-cell">1.54M</td><td class="num-cell">450</td><td class="num-cell">1.54M</td><td class="num-cell">$7.70225</td><td class="num-cell">$7.70225</td><td class="num-cell">1.54M</td><td class="num-cell">0</td></tr><tr><td><strong>claude-sonnet-4</strong> <span class="badge badge-tool">most used</span></td><td class="num-cell">2</td><td class="num-cell">86.1k</td><td class="num-cell">366</td><td class="num-cell">86.5k</td><td class="num-cell">$0.43451</td><td class="num-cell">$0.21726</td><td class="num-cell">43.3k</td><td class="num-cell">0</td></tr></tbody></table></div></div></details><details class="panel collapsible"><summary>Model Switches</summary><div><div style="padding: 16px; border-bottom: 1px solid var(--border); color: var(--muted);">Biggest switch cost: <strong style="color: var(--text);">claude-sonnet-4 → gpt-4o ($7.70225)</strong></div><div style="overflow-x: auto;"><table><thead><tr><th>Switch</th><th class="num-cell">Cost Impact</th><th class="num-cell">New Context Tokens</th><th class="num-cell">Provider Changed</th><th>Details</th></tr></thead><tbody><tr><td><span class="badge badge-system">claude-sonnet-4</span> → <span class="badge badge-llm">gpt-4o</span></td><td class="num-cell">$7.70225</td><td class="num-cell">1.54M</td><td class="num-cell">Yes</td><td><span class="session-sub">#2 • 22:05:50 • 39s since previous completion</span></td></tr><tr><td><span class="badge badge-system">gpt-4o</span> → <span class="badge badge-llm">claude-sonnet-4</span></td><td class="num-cell">$0.42000</td><td class="num-cell">84.3k</td><td class="num-cell">Yes</td><td><span class="session-sub">#3 • 22:06:40 • 50s since previous completion</span></td></tr></tbody></table></div></div></details><details class="panel collapsible"><summary>Dynamic Extension Telemetry</summary><div><div style="padding: 16px;" class="stack"><section class="block"><h4>noheadroom (Active)</h4><pre>{
439
432
  &quot;summary&quot;: &quot;compressed 24,110 to 18,332 tokens; saved 5,778 tokens across 3 tool results&quot;,
440
433
  &quot;attempts&quot;: 2,
441
434
  &quot;applied&quot;: 1,
@@ -451,63 +444,7 @@
451
444
  &quot;tool-result-compression&quot;
452
445
  ]
453
446
  }
454
- }</pre></section>
455
- </div>
456
- </section>
457
- <section class="panel" style="margin-top: 24px;">
458
- <h2 class="section-title">Timeline</h2>
459
- <div style="padding: 16px;">
460
- <div class="timeline"><details class="event">
461
- <summary>
462
- <div class="event-main">
463
- <span class="badge badge-tool">tool_start</span>
464
- <span class="event-title">functions.bash</span>
465
- </div>
466
- <span class="event-time">22:05:04</span>
467
- </summary>
468
- <div class="event-body"><div class="stack"><section class="block"><h4>Arguments</h4><div class="msg-content"><div class="chat-tool-use"><div class="chat-tool-header"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"></path></svg> Execution Input</div><pre class="chat-tool-body">{
469
- &quot;command&quot;: &quot;find packages/notrace -maxdepth 3 -type f&quot;
470
- }</pre></div></div></section></div></div>
471
- </details><details class="event">
472
- <summary>
473
- <div class="event-main">
474
- <span class="badge badge-tool">tool_end</span>
475
- <span class="event-title">functions.bash</span>
476
- </div>
477
- <span class="event-time">22:05:05</span>
478
- </summary>
479
- <div class="event-body"><div class="stack"><section class="block"><h4>Result</h4><div class="msg-content"><div class="chat-tool-use" style=""><div class="chat-tool-header" style="color: var(--muted);"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 10 4 15 9 20"></polyline><path d="M20 4v7a4 4 0 0 1-4 4H4"></path></svg> Execution Output</div><pre class="chat-tool-body">{
480
- &quot;stdout&quot;: &quot;packages/notrace/extensions/notrace/index.ts\npackages/notrace/extensions/notrace/renderer.ts\npackages/notrace/package.json&quot;,
481
- &quot;stderr&quot;: &quot;&quot;,
482
- &quot;exitCode&quot;: 0
483
- }</pre></div></div></section></div></div>
484
- </details><details class="event">
485
- <summary>
486
- <div class="event-main">
487
- <span class="badge badge-llm">llm_completion</span>
488
- <span class="event-title">claude-sonnet-4</span>
489
- </div>
490
- <span class="event-time">22:05:11</span>
491
- </summary>
492
- <div class="event-body"><div class="stack"><section class="block"><h4>Input Messages</h4><div class="msg user"><div class="msg-head"><span class="msg-role">user</span></div><div class="msg-content"><div class="chat-text">Polish notrace HTML output and unify dashboard/session design.</div></div></div></section><section class="block"><h4>Output</h4><div class="msg-content"><div class="chat-text">Found renderer split. Will move both pages to one shared shell and standardize styles.</div></div></section><section class="block"><h4>Usage</h4><pre>{
493
- &quot;input&quot;: 2140,
494
- &quot;output&quot;: 116,
495
- &quot;cacheRead&quot;: 0,
496
- &quot;cacheWrite&quot;: 0,
497
- &quot;totalTokens&quot;: 2256,
498
- &quot;cost&quot;: {
499
- &quot;total&quot;: 0.01451
500
- }
501
- }</pre></section></div></div>
502
- </details></div>
503
- </div>
504
- </section>
505
- <footer class="footer-note stack">
506
- <div class="footer-brand">notrace</div>
507
- <div class="footer-tagline">Local-first retrospective engine</div>
508
- <div class="footer-meta"><a href="https://opensource.org/licenses/MIT">MIT</a></div>
509
- </footer>
510
- </div><script>(() => {
447
+ }</pre></section></div></div></details><footer class="footer-note stack"><div class="footer-brand">notrace</div><div class="footer-tagline">Local-first retrospective engine</div><div class="footer-meta"><a href="https://opensource.org/licenses/MIT">MIT</a></div></footer></div><script>(() => {
511
448
  document.querySelectorAll('[data-copy-value]').forEach((button) => {
512
449
  button.addEventListener('click', async () => {
513
450
  const value = button.getAttribute('data-copy-value') || '';
@@ -537,5 +474,25 @@
537
474
  }
538
475
  });
539
476
  });
540
- })();</script></body>
541
- </html>
477
+
478
+ document.querySelectorAll('details[data-lazy-event-body]').forEach((details) => {
479
+ details.addEventListener('toggle', () => {
480
+ if (!details.open) return;
481
+ if (details.querySelector('.event-body')) return;
482
+ const html = decodeURIComponent(details.getAttribute('data-lazy-event-body') || '');
483
+ details.insertAdjacentHTML('beforeend', html);
484
+ }, { once: false });
485
+ });
486
+
487
+ const topBtn = document.querySelector('.back-to-top');
488
+ if (topBtn) {
489
+ const syncTopButton = () => {
490
+ const scrollable = document.documentElement.scrollHeight > window.innerHeight + 24;
491
+ const show = scrollable && window.scrollY > 200;
492
+ topBtn.classList.toggle('visible', show);
493
+ };
494
+ window.addEventListener('scroll', syncTopButton, { passive: true });
495
+ window.addEventListener('resize', syncTopButton);
496
+ syncTopButton();
497
+ }
498
+ })();</script></body></html>
@@ -26,9 +26,16 @@
26
26
  "adapter": "pi-session-hooks",
27
27
  "version": null
28
28
  },
29
- "models": ["claude-sonnet-4"],
30
- "providers": ["anthropic"],
31
- "extensions": ["notrace", "noheadroom"]
29
+ "models": [
30
+ "claude-sonnet-4"
31
+ ],
32
+ "providers": [
33
+ "anthropic"
34
+ ],
35
+ "extensions": [
36
+ "notrace",
37
+ "noheadroom"
38
+ ]
32
39
  },
33
40
  "activity": {
34
41
  "turnCount": 18,
@@ -41,8 +48,8 @@
41
48
  "outputTokens": 179,
42
49
  "cacheReadTokens": 0,
43
50
  "cacheWriteTokens": 0,
44
- "totalTokens": 3299,
45
- "totalCostUsd": 0.02064
51
+ "totalTokens": 1626956,
52
+ "totalCostUsd": 8.13676
46
53
  }
47
54
  },
48
55
  "telemetry": {
@@ -64,7 +71,9 @@
64
71
  "tokensSaved": 5778,
65
72
  "compressionRatio": 0.7603,
66
73
  "appliedMessages": 3,
67
- "transformsApplied": ["tool-result-compression"]
74
+ "transformsApplied": [
75
+ "tool-result-compression"
76
+ ]
68
77
  }
69
78
  }
70
79
  }
@@ -122,6 +131,56 @@
122
131
  }
123
132
  },
124
133
  "timestamp": 1781705111000
134
+ },
135
+ {
136
+ "type": "llm_completion",
137
+ "model": "gpt-4o",
138
+ "provider": "openai",
139
+ "inputPayload": {
140
+ "messages": [
141
+ {
142
+ "role": "user",
143
+ "content": "massive analysis"
144
+ }
145
+ ]
146
+ },
147
+ "outputContent": "done.",
148
+ "usage": {
149
+ "input": 1540000,
150
+ "output": 450,
151
+ "cacheRead": 0,
152
+ "cacheWrite": 0,
153
+ "totalTokens": 1540450,
154
+ "cost": {
155
+ "total": 7.70225
156
+ }
157
+ },
158
+ "timestamp": 1781705150000
159
+ },
160
+ {
161
+ "type": "llm_completion",
162
+ "model": "claude-sonnet-4",
163
+ "provider": "anthropic",
164
+ "inputPayload": {
165
+ "messages": [
166
+ {
167
+ "role": "user",
168
+ "content": "polish"
169
+ }
170
+ ]
171
+ },
172
+ "outputContent": "done.",
173
+ "usage": {
174
+ "input": 84000,
175
+ "output": 250,
176
+ "cacheRead": 0,
177
+ "cacheWrite": 0,
178
+ "totalTokens": 84250,
179
+ "cost": {
180
+ "total": 0.42
181
+ }
182
+ },
183
+ "timestamp": 1781705200000
125
184
  }
126
185
  ]
127
- }
186
+ }