@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-1002-76ee-b353-000000000003</span><button class="copy-btn" type="button" data-copy-value="019ed2ee-1002-76ee-b353-000000000003" 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 18:14</span>
|
|
293
|
-
<span class="pill">
|
|
372
|
+
<span class="pill">Mode: metadata</span>
|
|
373
|
+
<button class="export-btn" type="button" data-copy-value="{"kind":"notrace-export","traceId":"019ed2ee-1002-76ee-b353-000000000003","repository":"nothing","task":{"workflow":"generic","id":null,"path":null,"dir":null},"metrics":{"inputTokens":5100,"outputTokens":810,"cacheReadTokens":0,"cacheWriteTokens":0,"totalTokens":5910,"totalCostUsd":0.0334},"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>
|