@raquezha/notrace 0.0.6 → 0.1.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.
- package/CHANGELOG.md +22 -0
- package/README.md +24 -1
- package/bin/notrace-compare.mjs +153 -0
- package/bin/notrace-review.mjs +123 -0
- package/dist/notrace/adapters.js +4 -1
- package/dist/notrace/index.js +84 -16
- package/dist/notrace/renderer.js +219 -24
- package/dist/notrace/types.d.ts +1 -0
- package/extensions/notrace/adapters.ts +4 -1
- package/extensions/notrace/index.ts +75 -18
- package/extensions/notrace/renderer.ts +218 -24
- package/extensions/notrace/types.ts +1 -0
- package/package.json +7 -1
- package/templates/dashboard.sample.html +96 -14
- package/templates/session.sample.html +122 -12
- package/templates/sessions/019ed2ee-1000-76ee-b353-000000000001/notrace.html +122 -12
- package/templates/sessions/019ed2ee-1001-76ee-b353-000000000002/notrace.html +122 -12
- package/templates/sessions/019ed2ee-1002-76ee-b353-000000000003/notrace.html +122 -12
|
@@ -68,6 +68,44 @@
|
|
|
68
68
|
overflow: visible;
|
|
69
69
|
}
|
|
70
70
|
.subtitle { margin: 10px 0 0; color: var(--muted); }
|
|
71
|
+
.session-subtitle {
|
|
72
|
+
display: flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
gap: 10px;
|
|
75
|
+
flex-wrap: wrap;
|
|
76
|
+
}
|
|
77
|
+
.session-id-chip {
|
|
78
|
+
display: inline-flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
gap: 8px;
|
|
81
|
+
max-width: 100%;
|
|
82
|
+
padding: 6px 8px 6px 10px;
|
|
83
|
+
border: 1px solid var(--border);
|
|
84
|
+
border-radius: 999px;
|
|
85
|
+
background: rgba(0,0,0,0.18);
|
|
86
|
+
color: var(--text);
|
|
87
|
+
font-family: "SFMono-Regular", ui-monospace, Menlo, Monaco, Consolas, monospace;
|
|
88
|
+
font-size: 0.78rem;
|
|
89
|
+
word-break: break-all;
|
|
90
|
+
}
|
|
91
|
+
.copy-btn {
|
|
92
|
+
display: inline-flex;
|
|
93
|
+
align-items: center;
|
|
94
|
+
justify-content: center;
|
|
95
|
+
width: 26px;
|
|
96
|
+
height: 26px;
|
|
97
|
+
border: 1px solid rgba(255,255,255,0.12);
|
|
98
|
+
border-radius: 999px;
|
|
99
|
+
background: rgba(255,255,255,0.04);
|
|
100
|
+
color: var(--muted);
|
|
101
|
+
cursor: pointer;
|
|
102
|
+
transition: color 120ms ease, border-color 120ms ease, background 120ms ease;
|
|
103
|
+
}
|
|
104
|
+
.copy-btn:hover, .copy-btn.copied {
|
|
105
|
+
color: var(--text);
|
|
106
|
+
border-color: rgba(216,132,98,0.45);
|
|
107
|
+
background: var(--accent-soft);
|
|
108
|
+
}
|
|
71
109
|
.meta {
|
|
72
110
|
display: flex;
|
|
73
111
|
gap: 8px;
|
|
@@ -76,7 +114,7 @@
|
|
|
76
114
|
align-items: center;
|
|
77
115
|
margin-top: 16px;
|
|
78
116
|
}
|
|
79
|
-
.pill, .workflow-pill, .sort-btn {
|
|
117
|
+
.pill, .workflow-pill, .sort-btn, .export-btn {
|
|
80
118
|
display: inline-flex;
|
|
81
119
|
align-items: center;
|
|
82
120
|
gap: 6px;
|
|
@@ -89,7 +127,7 @@
|
|
|
89
127
|
font-size: 0.86rem;
|
|
90
128
|
font-weight: 600;
|
|
91
129
|
}
|
|
92
|
-
.metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(
|
|
130
|
+
.metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(135px, 1fr)); gap: 16px; margin: 24px 0; }
|
|
93
131
|
.metric-card {
|
|
94
132
|
background: var(--panel-strong);
|
|
95
133
|
border: 1px solid var(--border);
|
|
@@ -208,7 +246,40 @@
|
|
|
208
246
|
.msg-role { font-size: 0.78rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; }
|
|
209
247
|
.msg.user .msg-role { color: #8ec5ff; }
|
|
210
248
|
.msg.assistant .msg-role { color: var(--accent); }
|
|
211
|
-
.msg-content { padding: 14px;
|
|
249
|
+
.msg-content { padding: 14px; }
|
|
250
|
+
.chat-text {
|
|
251
|
+
white-space: pre-wrap;
|
|
252
|
+
word-break: break-word;
|
|
253
|
+
font-size: 0.95rem;
|
|
254
|
+
line-height: 1.6;
|
|
255
|
+
margin-bottom: 12px;
|
|
256
|
+
}
|
|
257
|
+
.chat-text:last-child { margin-bottom: 0; }
|
|
258
|
+
.chat-tool-use {
|
|
259
|
+
background: rgba(0,0,0,0.3);
|
|
260
|
+
border: 1px solid var(--border);
|
|
261
|
+
border-radius: 8px;
|
|
262
|
+
overflow: hidden;
|
|
263
|
+
margin-bottom: 12px;
|
|
264
|
+
}
|
|
265
|
+
.chat-tool-use:last-child { margin-bottom: 0; }
|
|
266
|
+
.chat-tool-header {
|
|
267
|
+
background: rgba(255,255,255,0.04);
|
|
268
|
+
padding: 8px 12px;
|
|
269
|
+
font-size: 0.8rem;
|
|
270
|
+
font-family: "SFMono-Regular", ui-monospace, Menlo, Monaco, Consolas, monospace;
|
|
271
|
+
color: #8ec5ff;
|
|
272
|
+
border-bottom: 1px solid var(--border);
|
|
273
|
+
display: flex;
|
|
274
|
+
align-items: center;
|
|
275
|
+
gap: 8px;
|
|
276
|
+
}
|
|
277
|
+
.chat-tool-body {
|
|
278
|
+
padding: 12px;
|
|
279
|
+
margin: 0;
|
|
280
|
+
background: transparent;
|
|
281
|
+
border: none;
|
|
282
|
+
}
|
|
212
283
|
.footer-note {
|
|
213
284
|
margin-top: 22px;
|
|
214
285
|
color: var(--muted);
|
|
@@ -253,7 +324,15 @@
|
|
|
253
324
|
color: var(--text);
|
|
254
325
|
border-bottom-color: rgba(236,227,218,0.45);
|
|
255
326
|
}
|
|
256
|
-
|
|
327
|
+
.export-btn {
|
|
328
|
+
cursor: pointer;
|
|
329
|
+
transition: color 120ms ease, border-color 120ms ease, background 120ms ease;
|
|
330
|
+
}
|
|
331
|
+
.export-btn:hover, .export-btn.copied {
|
|
332
|
+
color: var(--text);
|
|
333
|
+
border-color: rgba(216,132,98,0.45);
|
|
334
|
+
background: var(--accent-soft);
|
|
335
|
+
}
|
|
257
336
|
.container { padding: 20px 14px 48px; }
|
|
258
337
|
.hero { padding: 20px; }
|
|
259
338
|
.hero-top { grid-template-columns: 1fr; }
|
|
@@ -285,12 +364,13 @@
|
|
|
285
364
|
</g>
|
|
286
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>
|
|
287
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>
|
|
288
|
-
</svg></a><p class="subtitle">Session retrospective
|
|
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>
|
|
289
368
|
</div>
|
|
290
369
|
<div class="meta">
|
|
291
370
|
<span class="pill">nothing</span>
|
|
292
371
|
<span class="pill">Started 2026-06-17 22:05</span>
|
|
293
|
-
<span class="pill">
|
|
372
|
+
<span class="pill">Mode: full</span>
|
|
373
|
+
<button class="export-btn" type="button" data-copy-value="{"kind":"notrace-export","traceId":"019ed2ee-5252-76ee-b353-ad925a6bad31","repository":"nothing","task":{"workflow":"research","id":"branch:main","path":null,"dir":null},"metrics":{"inputTokens":3120,"outputTokens":179,"cacheReadTokens":0,"cacheWriteTokens":0,"totalTokens":3299,"totalCostUsd":0.02064},"summary":"compressed 24,110 to 18,332 tokens; saved 5,778 tokens across 3 tool results","events":[{"model":"claude-sonnet-4","input":[{"role":"user","content":"Polish notrace HTML output and unify dashboard/session design."}],"output":"Found renderer split. Will move both pages to one shared shell and standardize styles."}]}" 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>
|
|
294
374
|
</div>
|
|
295
375
|
</div>
|
|
296
376
|
<div class="metrics">
|
|
@@ -385,9 +465,9 @@
|
|
|
385
465
|
</div>
|
|
386
466
|
<span class="event-time">22:05:04</span>
|
|
387
467
|
</summary>
|
|
388
|
-
<div class="event-body"><div class="stack"><section class="block"><h4>Arguments</h4><pre>{
|
|
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">{
|
|
389
469
|
"command": "find packages/notrace -maxdepth 3 -type f"
|
|
390
|
-
}</pre></section></div></div>
|
|
470
|
+
}</pre></div></div></section></div></div>
|
|
391
471
|
</details><details class="event">
|
|
392
472
|
<summary>
|
|
393
473
|
<div class="event-main">
|
|
@@ -396,11 +476,11 @@
|
|
|
396
476
|
</div>
|
|
397
477
|
<span class="event-time">22:05:05</span>
|
|
398
478
|
</summary>
|
|
399
|
-
<div class="event-body"><div class="stack"><section class="block"><h4>Result</h4><pre>{
|
|
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">{
|
|
400
480
|
"stdout": "packages/notrace/extensions/notrace/index.ts\npackages/notrace/extensions/notrace/renderer.ts\npackages/notrace/package.json",
|
|
401
481
|
"stderr": "",
|
|
402
482
|
"exitCode": 0
|
|
403
|
-
}</pre></section></div></div>
|
|
483
|
+
}</pre></div></div></section></div></div>
|
|
404
484
|
</details><details class="event">
|
|
405
485
|
<summary>
|
|
406
486
|
<div class="event-main">
|
|
@@ -409,7 +489,7 @@
|
|
|
409
489
|
</div>
|
|
410
490
|
<span class="event-time">22:05:11</span>
|
|
411
491
|
</summary>
|
|
412
|
-
<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">Polish notrace HTML output and unify dashboard/session design.</div></div></section><section class="block"><h4>Output</h4><
|
|
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>{
|
|
413
493
|
"input": 2140,
|
|
414
494
|
"output": 116,
|
|
415
495
|
"cacheRead": 0,
|
|
@@ -427,5 +507,35 @@
|
|
|
427
507
|
<div class="footer-tagline">Local-first retrospective engine</div>
|
|
428
508
|
<div class="footer-meta"><a href="https://opensource.org/licenses/MIT">MIT</a></div>
|
|
429
509
|
</footer>
|
|
430
|
-
</div
|
|
510
|
+
</div><script>(() => {
|
|
511
|
+
document.querySelectorAll('[data-copy-value]').forEach((button) => {
|
|
512
|
+
button.addEventListener('click', async () => {
|
|
513
|
+
const value = button.getAttribute('data-copy-value') || '';
|
|
514
|
+
try {
|
|
515
|
+
if (navigator.clipboard?.writeText) {
|
|
516
|
+
await navigator.clipboard.writeText(value);
|
|
517
|
+
} else {
|
|
518
|
+
const textarea = document.createElement('textarea');
|
|
519
|
+
textarea.value = value;
|
|
520
|
+
textarea.style.position = 'fixed';
|
|
521
|
+
textarea.style.opacity = '0';
|
|
522
|
+
document.body.appendChild(textarea);
|
|
523
|
+
textarea.focus();
|
|
524
|
+
textarea.select();
|
|
525
|
+
document.execCommand('copy');
|
|
526
|
+
textarea.remove();
|
|
527
|
+
}
|
|
528
|
+
const previous = button.innerHTML;
|
|
529
|
+
button.classList.add('copied');
|
|
530
|
+
button.innerHTML = '<svg width="14" height="14" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"></path></svg>';
|
|
531
|
+
setTimeout(() => {
|
|
532
|
+
button.classList.remove('copied');
|
|
533
|
+
button.innerHTML = previous;
|
|
534
|
+
}, 1400);
|
|
535
|
+
} catch {
|
|
536
|
+
button.textContent = 'ERR';
|
|
537
|
+
}
|
|
538
|
+
});
|
|
539
|
+
});
|
|
540
|
+
})();</script></body>
|
|
431
541
|
</html>
|
|
@@ -68,6 +68,44 @@
|
|
|
68
68
|
overflow: visible;
|
|
69
69
|
}
|
|
70
70
|
.subtitle { margin: 10px 0 0; color: var(--muted); }
|
|
71
|
+
.session-subtitle {
|
|
72
|
+
display: flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
gap: 10px;
|
|
75
|
+
flex-wrap: wrap;
|
|
76
|
+
}
|
|
77
|
+
.session-id-chip {
|
|
78
|
+
display: inline-flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
gap: 8px;
|
|
81
|
+
max-width: 100%;
|
|
82
|
+
padding: 6px 8px 6px 10px;
|
|
83
|
+
border: 1px solid var(--border);
|
|
84
|
+
border-radius: 999px;
|
|
85
|
+
background: rgba(0,0,0,0.18);
|
|
86
|
+
color: var(--text);
|
|
87
|
+
font-family: "SFMono-Regular", ui-monospace, Menlo, Monaco, Consolas, monospace;
|
|
88
|
+
font-size: 0.78rem;
|
|
89
|
+
word-break: break-all;
|
|
90
|
+
}
|
|
91
|
+
.copy-btn {
|
|
92
|
+
display: inline-flex;
|
|
93
|
+
align-items: center;
|
|
94
|
+
justify-content: center;
|
|
95
|
+
width: 26px;
|
|
96
|
+
height: 26px;
|
|
97
|
+
border: 1px solid rgba(255,255,255,0.12);
|
|
98
|
+
border-radius: 999px;
|
|
99
|
+
background: rgba(255,255,255,0.04);
|
|
100
|
+
color: var(--muted);
|
|
101
|
+
cursor: pointer;
|
|
102
|
+
transition: color 120ms ease, border-color 120ms ease, background 120ms ease;
|
|
103
|
+
}
|
|
104
|
+
.copy-btn:hover, .copy-btn.copied {
|
|
105
|
+
color: var(--text);
|
|
106
|
+
border-color: rgba(216,132,98,0.45);
|
|
107
|
+
background: var(--accent-soft);
|
|
108
|
+
}
|
|
71
109
|
.meta {
|
|
72
110
|
display: flex;
|
|
73
111
|
gap: 8px;
|
|
@@ -76,7 +114,7 @@
|
|
|
76
114
|
align-items: center;
|
|
77
115
|
margin-top: 16px;
|
|
78
116
|
}
|
|
79
|
-
.pill, .workflow-pill, .sort-btn {
|
|
117
|
+
.pill, .workflow-pill, .sort-btn, .export-btn {
|
|
80
118
|
display: inline-flex;
|
|
81
119
|
align-items: center;
|
|
82
120
|
gap: 6px;
|
|
@@ -89,7 +127,7 @@
|
|
|
89
127
|
font-size: 0.86rem;
|
|
90
128
|
font-weight: 600;
|
|
91
129
|
}
|
|
92
|
-
.metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(
|
|
130
|
+
.metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(135px, 1fr)); gap: 16px; margin: 24px 0; }
|
|
93
131
|
.metric-card {
|
|
94
132
|
background: var(--panel-strong);
|
|
95
133
|
border: 1px solid var(--border);
|
|
@@ -208,7 +246,40 @@
|
|
|
208
246
|
.msg-role { font-size: 0.78rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; }
|
|
209
247
|
.msg.user .msg-role { color: #8ec5ff; }
|
|
210
248
|
.msg.assistant .msg-role { color: var(--accent); }
|
|
211
|
-
.msg-content { padding: 14px;
|
|
249
|
+
.msg-content { padding: 14px; }
|
|
250
|
+
.chat-text {
|
|
251
|
+
white-space: pre-wrap;
|
|
252
|
+
word-break: break-word;
|
|
253
|
+
font-size: 0.95rem;
|
|
254
|
+
line-height: 1.6;
|
|
255
|
+
margin-bottom: 12px;
|
|
256
|
+
}
|
|
257
|
+
.chat-text:last-child { margin-bottom: 0; }
|
|
258
|
+
.chat-tool-use {
|
|
259
|
+
background: rgba(0,0,0,0.3);
|
|
260
|
+
border: 1px solid var(--border);
|
|
261
|
+
border-radius: 8px;
|
|
262
|
+
overflow: hidden;
|
|
263
|
+
margin-bottom: 12px;
|
|
264
|
+
}
|
|
265
|
+
.chat-tool-use:last-child { margin-bottom: 0; }
|
|
266
|
+
.chat-tool-header {
|
|
267
|
+
background: rgba(255,255,255,0.04);
|
|
268
|
+
padding: 8px 12px;
|
|
269
|
+
font-size: 0.8rem;
|
|
270
|
+
font-family: "SFMono-Regular", ui-monospace, Menlo, Monaco, Consolas, monospace;
|
|
271
|
+
color: #8ec5ff;
|
|
272
|
+
border-bottom: 1px solid var(--border);
|
|
273
|
+
display: flex;
|
|
274
|
+
align-items: center;
|
|
275
|
+
gap: 8px;
|
|
276
|
+
}
|
|
277
|
+
.chat-tool-body {
|
|
278
|
+
padding: 12px;
|
|
279
|
+
margin: 0;
|
|
280
|
+
background: transparent;
|
|
281
|
+
border: none;
|
|
282
|
+
}
|
|
212
283
|
.footer-note {
|
|
213
284
|
margin-top: 22px;
|
|
214
285
|
color: var(--muted);
|
|
@@ -253,7 +324,15 @@
|
|
|
253
324
|
color: var(--text);
|
|
254
325
|
border-bottom-color: rgba(236,227,218,0.45);
|
|
255
326
|
}
|
|
256
|
-
|
|
327
|
+
.export-btn {
|
|
328
|
+
cursor: pointer;
|
|
329
|
+
transition: color 120ms ease, border-color 120ms ease, background 120ms ease;
|
|
330
|
+
}
|
|
331
|
+
.export-btn:hover, .export-btn.copied {
|
|
332
|
+
color: var(--text);
|
|
333
|
+
border-color: rgba(216,132,98,0.45);
|
|
334
|
+
background: var(--accent-soft);
|
|
335
|
+
}
|
|
257
336
|
.container { padding: 20px 14px 48px; }
|
|
258
337
|
.hero { padding: 20px; }
|
|
259
338
|
.hero-top { grid-template-columns: 1fr; }
|
|
@@ -285,12 +364,13 @@
|
|
|
285
364
|
</g>
|
|
286
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>
|
|
287
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>
|
|
288
|
-
</svg></a><p class="subtitle">Session retrospective
|
|
367
|
+
</svg></a><p class="subtitle session-subtitle"><span>Session retrospective</span><span class="session-id-chip"><span>019ed2ee-1000-76ee-b353-000000000001</span><button class="copy-btn" type="button" data-copy-value="019ed2ee-1000-76ee-b353-000000000001" 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>
|
|
289
368
|
</div>
|
|
290
369
|
<div class="meta">
|
|
291
370
|
<span class="pill">nothing</span>
|
|
292
371
|
<span class="pill">Started 2026-06-17 17:00</span>
|
|
293
|
-
<span class="pill">
|
|
372
|
+
<span class="pill">Mode: full</span>
|
|
373
|
+
<button class="export-btn" type="button" data-copy-value="{"kind":"notrace-export","traceId":"019ed2ee-1000-76ee-b353-000000000001","repository":"nothing","task":{"workflow":"norpiv","id":"NR-101","path":".workflow/tasks/NR-101","dir":"/repo/.workflow/tasks/NR-101"},"metrics":{"inputTokens":3100,"outputTokens":410,"cacheReadTokens":0,"cacheWriteTokens":0,"totalTokens":3510,"totalCostUsd":0.0204},"summary":"compressed 24,110 to 18,332 tokens; saved 5,778 tokens across 3 tool results","events":[{"model":"claude-sonnet-4","input":[{"role":"user","content":"Polish notrace HTML output and unify dashboard/session design."}],"output":"Found renderer split. Will move both pages to one shared shell and standardize styles."}]}" 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>
|
|
294
374
|
</div>
|
|
295
375
|
</div>
|
|
296
376
|
<div class="metrics">
|
|
@@ -380,9 +460,9 @@
|
|
|
380
460
|
</div>
|
|
381
461
|
<span class="event-time">22:05:04</span>
|
|
382
462
|
</summary>
|
|
383
|
-
<div class="event-body"><div class="stack"><section class="block"><h4>Arguments</h4><pre>{
|
|
463
|
+
<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">{
|
|
384
464
|
"command": "find packages/notrace -maxdepth 3 -type f"
|
|
385
|
-
}</pre></section></div></div>
|
|
465
|
+
}</pre></div></div></section></div></div>
|
|
386
466
|
</details><details class="event">
|
|
387
467
|
<summary>
|
|
388
468
|
<div class="event-main">
|
|
@@ -391,11 +471,11 @@
|
|
|
391
471
|
</div>
|
|
392
472
|
<span class="event-time">22:05:05</span>
|
|
393
473
|
</summary>
|
|
394
|
-
<div class="event-body"><div class="stack"><section class="block"><h4>Result</h4><pre>{
|
|
474
|
+
<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">{
|
|
395
475
|
"stdout": "packages/notrace/extensions/notrace/index.ts\npackages/notrace/extensions/notrace/renderer.ts\npackages/notrace/package.json",
|
|
396
476
|
"stderr": "",
|
|
397
477
|
"exitCode": 0
|
|
398
|
-
}</pre></section></div></div>
|
|
478
|
+
}</pre></div></div></section></div></div>
|
|
399
479
|
</details><details class="event">
|
|
400
480
|
<summary>
|
|
401
481
|
<div class="event-main">
|
|
@@ -404,7 +484,7 @@
|
|
|
404
484
|
</div>
|
|
405
485
|
<span class="event-time">22:05:11</span>
|
|
406
486
|
</summary>
|
|
407
|
-
<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">Polish notrace HTML output and unify dashboard/session design.</div></div></section><section class="block"><h4>Output</h4><
|
|
487
|
+
<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>{
|
|
408
488
|
"input": 2140,
|
|
409
489
|
"output": 116,
|
|
410
490
|
"cacheRead": 0,
|
|
@@ -422,5 +502,35 @@
|
|
|
422
502
|
<div class="footer-tagline">Local-first retrospective engine</div>
|
|
423
503
|
<div class="footer-meta"><a href="https://opensource.org/licenses/MIT">MIT</a></div>
|
|
424
504
|
</footer>
|
|
425
|
-
</div
|
|
505
|
+
</div><script>(() => {
|
|
506
|
+
document.querySelectorAll('[data-copy-value]').forEach((button) => {
|
|
507
|
+
button.addEventListener('click', async () => {
|
|
508
|
+
const value = button.getAttribute('data-copy-value') || '';
|
|
509
|
+
try {
|
|
510
|
+
if (navigator.clipboard?.writeText) {
|
|
511
|
+
await navigator.clipboard.writeText(value);
|
|
512
|
+
} else {
|
|
513
|
+
const textarea = document.createElement('textarea');
|
|
514
|
+
textarea.value = value;
|
|
515
|
+
textarea.style.position = 'fixed';
|
|
516
|
+
textarea.style.opacity = '0';
|
|
517
|
+
document.body.appendChild(textarea);
|
|
518
|
+
textarea.focus();
|
|
519
|
+
textarea.select();
|
|
520
|
+
document.execCommand('copy');
|
|
521
|
+
textarea.remove();
|
|
522
|
+
}
|
|
523
|
+
const previous = button.innerHTML;
|
|
524
|
+
button.classList.add('copied');
|
|
525
|
+
button.innerHTML = '<svg width="14" height="14" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"></path></svg>';
|
|
526
|
+
setTimeout(() => {
|
|
527
|
+
button.classList.remove('copied');
|
|
528
|
+
button.innerHTML = previous;
|
|
529
|
+
}, 1400);
|
|
530
|
+
} catch {
|
|
531
|
+
button.textContent = 'ERR';
|
|
532
|
+
}
|
|
533
|
+
});
|
|
534
|
+
});
|
|
535
|
+
})();</script></body>
|
|
426
536
|
</html>
|
|
@@ -68,6 +68,44 @@
|
|
|
68
68
|
overflow: visible;
|
|
69
69
|
}
|
|
70
70
|
.subtitle { margin: 10px 0 0; color: var(--muted); }
|
|
71
|
+
.session-subtitle {
|
|
72
|
+
display: flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
gap: 10px;
|
|
75
|
+
flex-wrap: wrap;
|
|
76
|
+
}
|
|
77
|
+
.session-id-chip {
|
|
78
|
+
display: inline-flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
gap: 8px;
|
|
81
|
+
max-width: 100%;
|
|
82
|
+
padding: 6px 8px 6px 10px;
|
|
83
|
+
border: 1px solid var(--border);
|
|
84
|
+
border-radius: 999px;
|
|
85
|
+
background: rgba(0,0,0,0.18);
|
|
86
|
+
color: var(--text);
|
|
87
|
+
font-family: "SFMono-Regular", ui-monospace, Menlo, Monaco, Consolas, monospace;
|
|
88
|
+
font-size: 0.78rem;
|
|
89
|
+
word-break: break-all;
|
|
90
|
+
}
|
|
91
|
+
.copy-btn {
|
|
92
|
+
display: inline-flex;
|
|
93
|
+
align-items: center;
|
|
94
|
+
justify-content: center;
|
|
95
|
+
width: 26px;
|
|
96
|
+
height: 26px;
|
|
97
|
+
border: 1px solid rgba(255,255,255,0.12);
|
|
98
|
+
border-radius: 999px;
|
|
99
|
+
background: rgba(255,255,255,0.04);
|
|
100
|
+
color: var(--muted);
|
|
101
|
+
cursor: pointer;
|
|
102
|
+
transition: color 120ms ease, border-color 120ms ease, background 120ms ease;
|
|
103
|
+
}
|
|
104
|
+
.copy-btn:hover, .copy-btn.copied {
|
|
105
|
+
color: var(--text);
|
|
106
|
+
border-color: rgba(216,132,98,0.45);
|
|
107
|
+
background: var(--accent-soft);
|
|
108
|
+
}
|
|
71
109
|
.meta {
|
|
72
110
|
display: flex;
|
|
73
111
|
gap: 8px;
|
|
@@ -76,7 +114,7 @@
|
|
|
76
114
|
align-items: center;
|
|
77
115
|
margin-top: 16px;
|
|
78
116
|
}
|
|
79
|
-
.pill, .workflow-pill, .sort-btn {
|
|
117
|
+
.pill, .workflow-pill, .sort-btn, .export-btn {
|
|
80
118
|
display: inline-flex;
|
|
81
119
|
align-items: center;
|
|
82
120
|
gap: 6px;
|
|
@@ -89,7 +127,7 @@
|
|
|
89
127
|
font-size: 0.86rem;
|
|
90
128
|
font-weight: 600;
|
|
91
129
|
}
|
|
92
|
-
.metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(
|
|
130
|
+
.metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(135px, 1fr)); gap: 16px; margin: 24px 0; }
|
|
93
131
|
.metric-card {
|
|
94
132
|
background: var(--panel-strong);
|
|
95
133
|
border: 1px solid var(--border);
|
|
@@ -208,7 +246,40 @@
|
|
|
208
246
|
.msg-role { font-size: 0.78rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; }
|
|
209
247
|
.msg.user .msg-role { color: #8ec5ff; }
|
|
210
248
|
.msg.assistant .msg-role { color: var(--accent); }
|
|
211
|
-
.msg-content { padding: 14px;
|
|
249
|
+
.msg-content { padding: 14px; }
|
|
250
|
+
.chat-text {
|
|
251
|
+
white-space: pre-wrap;
|
|
252
|
+
word-break: break-word;
|
|
253
|
+
font-size: 0.95rem;
|
|
254
|
+
line-height: 1.6;
|
|
255
|
+
margin-bottom: 12px;
|
|
256
|
+
}
|
|
257
|
+
.chat-text:last-child { margin-bottom: 0; }
|
|
258
|
+
.chat-tool-use {
|
|
259
|
+
background: rgba(0,0,0,0.3);
|
|
260
|
+
border: 1px solid var(--border);
|
|
261
|
+
border-radius: 8px;
|
|
262
|
+
overflow: hidden;
|
|
263
|
+
margin-bottom: 12px;
|
|
264
|
+
}
|
|
265
|
+
.chat-tool-use:last-child { margin-bottom: 0; }
|
|
266
|
+
.chat-tool-header {
|
|
267
|
+
background: rgba(255,255,255,0.04);
|
|
268
|
+
padding: 8px 12px;
|
|
269
|
+
font-size: 0.8rem;
|
|
270
|
+
font-family: "SFMono-Regular", ui-monospace, Menlo, Monaco, Consolas, monospace;
|
|
271
|
+
color: #8ec5ff;
|
|
272
|
+
border-bottom: 1px solid var(--border);
|
|
273
|
+
display: flex;
|
|
274
|
+
align-items: center;
|
|
275
|
+
gap: 8px;
|
|
276
|
+
}
|
|
277
|
+
.chat-tool-body {
|
|
278
|
+
padding: 12px;
|
|
279
|
+
margin: 0;
|
|
280
|
+
background: transparent;
|
|
281
|
+
border: none;
|
|
282
|
+
}
|
|
212
283
|
.footer-note {
|
|
213
284
|
margin-top: 22px;
|
|
214
285
|
color: var(--muted);
|
|
@@ -253,7 +324,15 @@
|
|
|
253
324
|
color: var(--text);
|
|
254
325
|
border-bottom-color: rgba(236,227,218,0.45);
|
|
255
326
|
}
|
|
256
|
-
|
|
327
|
+
.export-btn {
|
|
328
|
+
cursor: pointer;
|
|
329
|
+
transition: color 120ms ease, border-color 120ms ease, background 120ms ease;
|
|
330
|
+
}
|
|
331
|
+
.export-btn:hover, .export-btn.copied {
|
|
332
|
+
color: var(--text);
|
|
333
|
+
border-color: rgba(216,132,98,0.45);
|
|
334
|
+
background: var(--accent-soft);
|
|
335
|
+
}
|
|
257
336
|
.container { padding: 20px 14px 48px; }
|
|
258
337
|
.hero { padding: 20px; }
|
|
259
338
|
.hero-top { grid-template-columns: 1fr; }
|
|
@@ -285,12 +364,13 @@
|
|
|
285
364
|
</g>
|
|
286
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>
|
|
287
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>
|
|
288
|
-
</svg></a><p class="subtitle">Session retrospective
|
|
367
|
+
</svg></a><p class="subtitle session-subtitle"><span>Session retrospective</span><span class="session-id-chip"><span>019ed2ee-1001-76ee-b353-000000000002</span><button class="copy-btn" type="button" data-copy-value="019ed2ee-1001-76ee-b353-000000000002" 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>
|
|
289
368
|
</div>
|
|
290
369
|
<div class="meta">
|
|
291
370
|
<span class="pill">nothing</span>
|
|
292
371
|
<span class="pill">Started 2026-06-17 17:37</span>
|
|
293
|
-
<span class="pill">
|
|
372
|
+
<span class="pill">Mode: redacted</span>
|
|
373
|
+
<button class="export-btn" type="button" data-copy-value="{"kind":"notrace-export","traceId":"019ed2ee-1001-76ee-b353-000000000002","repository":"nothing","task":{"workflow":"research","id":"branch:topic-02","path":null,"dir":null},"metrics":{"inputTokens":4200,"outputTokens":530,"cacheReadTokens":1024,"cacheWriteTokens":0,"totalTokens":5754,"totalCostUsd":0.0267},"summary":"compressed 24,110 to 18,332 tokens; saved 5,778 tokens across 3 tool results","events":[{"model":"claude-sonnet-4","input":[{"role":"user","content":"Polish notrace HTML output and unify dashboard/session design."}],"output":"Found renderer split. Will move both pages to one shared shell and standardize styles."}]}" 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>
|
|
294
374
|
</div>
|
|
295
375
|
</div>
|
|
296
376
|
<div class="metrics">
|
|
@@ -379,9 +459,9 @@
|
|
|
379
459
|
</div>
|
|
380
460
|
<span class="event-time">22:05:04</span>
|
|
381
461
|
</summary>
|
|
382
|
-
<div class="event-body"><div class="stack"><section class="block"><h4>Arguments</h4><pre>{
|
|
462
|
+
<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">{
|
|
383
463
|
"command": "find packages/notrace -maxdepth 3 -type f"
|
|
384
|
-
}</pre></section></div></div>
|
|
464
|
+
}</pre></div></div></section></div></div>
|
|
385
465
|
</details><details class="event">
|
|
386
466
|
<summary>
|
|
387
467
|
<div class="event-main">
|
|
@@ -390,11 +470,11 @@
|
|
|
390
470
|
</div>
|
|
391
471
|
<span class="event-time">22:05:05</span>
|
|
392
472
|
</summary>
|
|
393
|
-
<div class="event-body"><div class="stack"><section class="block"><h4>Result</h4><pre>{
|
|
473
|
+
<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">{
|
|
394
474
|
"stdout": "packages/notrace/extensions/notrace/index.ts\npackages/notrace/extensions/notrace/renderer.ts\npackages/notrace/package.json",
|
|
395
475
|
"stderr": "",
|
|
396
476
|
"exitCode": 0
|
|
397
|
-
}</pre></section></div></div>
|
|
477
|
+
}</pre></div></div></section></div></div>
|
|
398
478
|
</details><details class="event">
|
|
399
479
|
<summary>
|
|
400
480
|
<div class="event-main">
|
|
@@ -403,7 +483,7 @@
|
|
|
403
483
|
</div>
|
|
404
484
|
<span class="event-time">22:05:11</span>
|
|
405
485
|
</summary>
|
|
406
|
-
<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">Polish notrace HTML output and unify dashboard/session design.</div></div></section><section class="block"><h4>Output</h4><
|
|
486
|
+
<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>{
|
|
407
487
|
"input": 2140,
|
|
408
488
|
"output": 116,
|
|
409
489
|
"cacheRead": 0,
|
|
@@ -421,5 +501,35 @@
|
|
|
421
501
|
<div class="footer-tagline">Local-first retrospective engine</div>
|
|
422
502
|
<div class="footer-meta"><a href="https://opensource.org/licenses/MIT">MIT</a></div>
|
|
423
503
|
</footer>
|
|
424
|
-
</div
|
|
504
|
+
</div><script>(() => {
|
|
505
|
+
document.querySelectorAll('[data-copy-value]').forEach((button) => {
|
|
506
|
+
button.addEventListener('click', async () => {
|
|
507
|
+
const value = button.getAttribute('data-copy-value') || '';
|
|
508
|
+
try {
|
|
509
|
+
if (navigator.clipboard?.writeText) {
|
|
510
|
+
await navigator.clipboard.writeText(value);
|
|
511
|
+
} else {
|
|
512
|
+
const textarea = document.createElement('textarea');
|
|
513
|
+
textarea.value = value;
|
|
514
|
+
textarea.style.position = 'fixed';
|
|
515
|
+
textarea.style.opacity = '0';
|
|
516
|
+
document.body.appendChild(textarea);
|
|
517
|
+
textarea.focus();
|
|
518
|
+
textarea.select();
|
|
519
|
+
document.execCommand('copy');
|
|
520
|
+
textarea.remove();
|
|
521
|
+
}
|
|
522
|
+
const previous = button.innerHTML;
|
|
523
|
+
button.classList.add('copied');
|
|
524
|
+
button.innerHTML = '<svg width="14" height="14" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"></path></svg>';
|
|
525
|
+
setTimeout(() => {
|
|
526
|
+
button.classList.remove('copied');
|
|
527
|
+
button.innerHTML = previous;
|
|
528
|
+
}, 1400);
|
|
529
|
+
} catch {
|
|
530
|
+
button.textContent = 'ERR';
|
|
531
|
+
}
|
|
532
|
+
});
|
|
533
|
+
});
|
|
534
|
+
})();</script></body>
|
|
425
535
|
</html>
|