oh-my-opencode-dashboard 0.0.1 → 0.0.2
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/README.md +2 -0
- package/dist/assets/index-RAZRO3YN.css +1 -0
- package/dist/assets/index-Vi32E82S.js +40 -0
- package/dist/index.html +3 -3
- package/package.json +1 -1
- package/src/App.tsx +358 -9
- package/src/app-version.d.ts +1 -0
- package/src/ingest/boulder.ts +44 -0
- package/src/ingest/timeseries.test.ts +491 -0
- package/src/ingest/timeseries.ts +289 -0
- package/src/server/api.test.ts +17 -0
- package/src/server/dashboard.test.ts +43 -0
- package/src/server/dashboard.ts +13 -1
- package/src/sound.test.ts +47 -0
- package/src/sound.ts +12 -1
- package/src/styles.css +201 -0
- package/vite.config.ts +24 -1
- package/dashboard-ui.png +0 -0
- package/dist/assets/index-D6OVzN1o.css +0 -1
- package/dist/assets/index-SEmwze_4.js +0 -40
package/src/styles.css
CHANGED
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
--teal: #0f5a51;
|
|
13
13
|
--teal-soft: rgba(15, 90, 81, 0.13);
|
|
14
14
|
|
|
15
|
+
--green: #1f6b3d;
|
|
16
|
+
--green-soft: rgba(31, 107, 61, 0.14);
|
|
17
|
+
|
|
15
18
|
--sand: #6a5b3d;
|
|
16
19
|
--sand-soft: rgba(135, 114, 71, 0.14);
|
|
17
20
|
|
|
@@ -414,11 +417,183 @@ body {
|
|
|
414
417
|
font-size: 12px;
|
|
415
418
|
}
|
|
416
419
|
|
|
420
|
+
/* Time-series activity (Task 5 markup) */
|
|
421
|
+
|
|
422
|
+
.timeSeries {
|
|
423
|
+
margin-top: 18px;
|
|
424
|
+
padding: 16px 18px 12px;
|
|
425
|
+
border-radius: var(--radius);
|
|
426
|
+
background: var(--paper);
|
|
427
|
+
box-shadow: var(--shadow);
|
|
428
|
+
border: 1px solid rgba(31, 36, 38, 0.06);
|
|
429
|
+
backdrop-filter: blur(10px);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
.timeSeriesHeader {
|
|
433
|
+
display: flex;
|
|
434
|
+
align-items: baseline;
|
|
435
|
+
gap: 18px;
|
|
436
|
+
padding-bottom: 8px;
|
|
437
|
+
border-bottom: 1px solid rgba(31, 36, 38, 0.06);
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
.timeSeriesTitle {
|
|
441
|
+
margin: 0;
|
|
442
|
+
font-size: 20px;
|
|
443
|
+
font-weight: 680;
|
|
444
|
+
letter-spacing: -0.02em;
|
|
445
|
+
font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
.timeSeriesSub {
|
|
449
|
+
margin: 0;
|
|
450
|
+
font-size: 14px;
|
|
451
|
+
color: var(--muted);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
.timeSeriesAxisTop {
|
|
455
|
+
display: grid;
|
|
456
|
+
grid-template-columns: 160px 1fr;
|
|
457
|
+
gap: 18px;
|
|
458
|
+
margin-top: 8px;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
.timeSeriesAxisTopLabels {
|
|
462
|
+
display: flex;
|
|
463
|
+
align-items: flex-end;
|
|
464
|
+
justify-content: space-between;
|
|
465
|
+
gap: 14px;
|
|
466
|
+
font-size: 12px;
|
|
467
|
+
letter-spacing: 0.03em;
|
|
468
|
+
color: rgba(31, 36, 38, 0.62);
|
|
469
|
+
font-variant-numeric: tabular-nums;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
.timeSeriesAxisTopLabel {
|
|
473
|
+
white-space: nowrap;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
.timeSeriesRows {
|
|
477
|
+
margin-top: 8px;
|
|
478
|
+
display: grid;
|
|
479
|
+
gap: 6px;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
.timeSeriesRow {
|
|
483
|
+
display: grid;
|
|
484
|
+
grid-template-columns: 160px 1fr;
|
|
485
|
+
gap: 18px;
|
|
486
|
+
align-items: center;
|
|
487
|
+
padding: 4px 0;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
.timeSeriesRow + .timeSeriesRow {
|
|
491
|
+
border-top: 1px solid rgba(31, 36, 38, 0.06);
|
|
492
|
+
padding-top: 10px;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
.timeSeriesRowLabel {
|
|
496
|
+
font-size: 20px;
|
|
497
|
+
line-height: 1.05;
|
|
498
|
+
font-weight: 650;
|
|
499
|
+
letter-spacing: -0.01em;
|
|
500
|
+
font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
.timeSeriesSvgWrap {
|
|
504
|
+
position: relative;
|
|
505
|
+
height: 24px;
|
|
506
|
+
border-radius: 10px;
|
|
507
|
+
background:
|
|
508
|
+
radial-gradient(140px 36px at 8% 60%, rgba(255, 255, 255, 0.16), transparent 70%),
|
|
509
|
+
linear-gradient(180deg, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.05));
|
|
510
|
+
box-shadow:
|
|
511
|
+
inset 0 0 0 1px rgba(31, 36, 38, 0.04),
|
|
512
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.10);
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
.timeSeriesSvg {
|
|
516
|
+
width: 100%;
|
|
517
|
+
height: 100%;
|
|
518
|
+
display: block;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
.timeSeriesGridline {
|
|
522
|
+
stroke: rgba(31, 36, 38, 0.08);
|
|
523
|
+
shape-rendering: crispEdges;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
.timeSeriesBar {
|
|
527
|
+
shape-rendering: crispEdges;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
.timeSeriesBarBaseline {
|
|
531
|
+
fill: rgba(31, 36, 38, 0.20);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
.timeSeriesBar--teal,
|
|
535
|
+
.timeSeriesRow[data-tone="teal"] .timeSeriesBar {
|
|
536
|
+
fill: var(--teal);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
.timeSeriesBar--sand,
|
|
540
|
+
.timeSeriesRow[data-tone="sand"] .timeSeriesBar {
|
|
541
|
+
fill: var(--sand);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
.timeSeriesBar--red,
|
|
545
|
+
.timeSeriesRow[data-tone="red"] .timeSeriesBar {
|
|
546
|
+
fill: var(--red);
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
.timeSeriesBar--green,
|
|
550
|
+
.timeSeriesRow[data-tone="green"] .timeSeriesBar {
|
|
551
|
+
fill: var(--green);
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
.timeSeriesBar--muted,
|
|
555
|
+
.timeSeriesRow[data-tone="muted"] .timeSeriesBar {
|
|
556
|
+
fill: rgba(31, 36, 38, 0.36);
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
.timeSeriesAxisBottom {
|
|
560
|
+
display: grid;
|
|
561
|
+
grid-template-columns: 160px 1fr;
|
|
562
|
+
gap: 18px;
|
|
563
|
+
margin-top: 10px;
|
|
564
|
+
padding-top: 8px;
|
|
565
|
+
border-top: 1px solid rgba(31, 36, 38, 0.06);
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
.timeSeriesAxisBottomLabels {
|
|
569
|
+
display: flex;
|
|
570
|
+
justify-content: space-between;
|
|
571
|
+
gap: 12px;
|
|
572
|
+
font-size: 12px;
|
|
573
|
+
letter-spacing: 0.02em;
|
|
574
|
+
color: rgba(31, 36, 38, 0.62);
|
|
575
|
+
font-variant-numeric: tabular-nums;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
.timeSeriesAxisBottomLabel {
|
|
579
|
+
white-space: nowrap;
|
|
580
|
+
}
|
|
581
|
+
|
|
417
582
|
@media (max-width: 920px) {
|
|
418
583
|
.grid2 {
|
|
419
584
|
grid-template-columns: 1fr;
|
|
420
585
|
}
|
|
421
586
|
|
|
587
|
+
.timeSeriesAxisTop,
|
|
588
|
+
.timeSeriesRow,
|
|
589
|
+
.timeSeriesAxisBottom {
|
|
590
|
+
grid-template-columns: 140px 1fr;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
.timeSeriesRowLabel {
|
|
594
|
+
font-size: 18px;
|
|
595
|
+
}
|
|
596
|
+
|
|
422
597
|
.kvRow {
|
|
423
598
|
grid-template-columns: 140px 1fr;
|
|
424
599
|
}
|
|
@@ -435,6 +610,32 @@ body {
|
|
|
435
610
|
padding-top: 22px;
|
|
436
611
|
}
|
|
437
612
|
|
|
613
|
+
.timeSeries {
|
|
614
|
+
padding: 14px 14px 10px;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
.timeSeriesAxisTop {
|
|
618
|
+
display: none;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
.timeSeriesRow,
|
|
622
|
+
.timeSeriesAxisBottom {
|
|
623
|
+
grid-template-columns: 1fr;
|
|
624
|
+
gap: 6px;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
.timeSeriesRow + .timeSeriesRow {
|
|
628
|
+
padding-top: 8px;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
.timeSeriesRowLabel {
|
|
632
|
+
font-size: 16px;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
.timeSeriesAxisBottomLabels {
|
|
636
|
+
font-size: 11px;
|
|
637
|
+
}
|
|
638
|
+
|
|
438
639
|
.topbar {
|
|
439
640
|
flex-direction: column;
|
|
440
641
|
align-items: stretch;
|
package/vite.config.ts
CHANGED
|
@@ -1,8 +1,31 @@
|
|
|
1
1
|
import react from "@vitejs/plugin-react";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
2
5
|
import { defineConfig } from "vite";
|
|
3
6
|
|
|
7
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const pkg = JSON.parse(readFileSync(resolve(here, "package.json"), "utf8")) as {
|
|
9
|
+
version?: string;
|
|
10
|
+
};
|
|
11
|
+
const version = typeof pkg.version === "string" ? pkg.version : "0.0.0";
|
|
12
|
+
|
|
4
13
|
export default defineConfig({
|
|
5
|
-
|
|
14
|
+
define: {
|
|
15
|
+
__APP_VERSION__: JSON.stringify(version),
|
|
16
|
+
},
|
|
17
|
+
plugins: [
|
|
18
|
+
react(),
|
|
19
|
+
{
|
|
20
|
+
name: "omo-dashboard-title-version",
|
|
21
|
+
transformIndexHtml(html) {
|
|
22
|
+
return html.replace(
|
|
23
|
+
/<title>Agent Dashboard<\/title>/,
|
|
24
|
+
`<title>Agent Dashboard (v${version})</title>`,
|
|
25
|
+
);
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
],
|
|
6
29
|
server: {
|
|
7
30
|
proxy: {
|
|
8
31
|
"/api": {
|
package/dashboard-ui.png
DELETED
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root{--bg-cream: #f5efe2;--bg-cream-2: #efe6d2;--paper: rgba(255, 255, 255, .52);--paper-strong: rgba(255, 255, 255, .72);--ink: #1f2426;--muted: rgba(31, 36, 38, .62);--line: rgba(31, 36, 38, .1);--shadow: 0 18px 40px rgba(29, 32, 33, .09);--teal-ink: #0f3f3a;--teal: #0f5a51;--teal-soft: rgba(15, 90, 81, .13);--sand: #6a5b3d;--sand-soft: rgba(135, 114, 71, .14);--red: #7a2b2b;--red-soft: rgba(122, 43, 43, .12);--radius: 18px}*{box-sizing:border-box}html,body{height:100%}body{margin:0;color:var(--ink);background:radial-gradient(1200px 500px at 16% 0%,rgba(15,90,81,.1),transparent 60%),radial-gradient(900px 420px at 80% 12%,rgba(135,114,71,.12),transparent 62%),linear-gradient(180deg,var(--bg-cream),var(--bg-cream-2));font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;text-rendering:geometricPrecision}.page{min-height:100%;position:relative}.page:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;background:repeating-linear-gradient(90deg,rgba(0,0,0,.012),rgba(0,0,0,.012) 1px,transparent 1px,transparent 6px),repeating-linear-gradient(0deg,rgba(0,0,0,.01),rgba(0,0,0,.01) 1px,transparent 1px,transparent 10px);mix-blend-mode:multiply;opacity:.16}.container{width:min(1120px,calc(100% - 44px));margin:0 auto;padding:28px 0 36px}.topbar{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.brand{display:flex;align-items:flex-start;gap:14px}.brandMark{width:44px;height:44px;border-radius:14px;background:radial-gradient(14px 14px at 28% 28%,#ffffff9e,#fff0 70%),linear-gradient(135deg,#0f5a51,#0d3f3a);box-shadow:0 10px 22px #0f3c372e;position:relative}.brandMark:after{content:"";position:absolute;top:7px;right:7px;bottom:7px;left:7px;border-radius:12px;border:1px solid rgba(255,255,255,.22)}.brandText h1{margin:0;font-size:34px;line-height:1.05;font-weight:650;letter-spacing:-.02em;font-family:Iowan Old Style,Palatino Linotype,Palatino,Georgia,serif}.brandText p{margin:6px 0 0;font-size:13px;color:var(--muted)}.hint{color:#7a2b2bb8}.topbarActions{display:flex;align-items:center;gap:10px;padding-top:6px}.button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid rgba(31,36,38,.14);background:#ffffffa3;padding:9px 12px;border-radius:999px;color:var(--ink);font-size:12px;line-height:1;cursor:pointer;box-shadow:0 6px 16px #1d20210f;transition:transform .12s ease,background .12s ease,border-color .12s ease}.button:hover{transform:translateY(-1px);background:#ffffffc7;border-color:#1f24262e}.button:active{transform:translateY(0)}.pill{display:inline-flex;align-items:center;gap:8px;padding:7px 12px;border-radius:999px;border:1px solid rgba(31,36,38,.12);background:var(--paper);color:var(--ink);font-size:12px;line-height:1;white-space:nowrap}.pillDot{width:8px;height:8px;border-radius:99px;background:currentColor;opacity:.82}.pill-teal{background:var(--teal-soft);border-color:#0f5a5138;color:var(--teal-ink)}.pill-sand{background:var(--sand-soft);border-color:#87724742;color:var(--sand)}.pill-red{background:var(--red-soft);border-color:#7a2b2b42;color:var(--red)}.stack{display:flex;flex-direction:column;gap:18px;margin-top:18px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:18px}.card{border-radius:var(--radius);border:1px solid rgba(31,36,38,.12);background:#ffffff8f;box-shadow:var(--shadow);padding:18px;-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px)}.cardHeader{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.cardHeader h2{margin:0;font-size:16px;font-weight:680;font-family:Iowan Old Style,Palatino Linotype,Palatino,Georgia,serif}.kv{display:grid;gap:10px}.kvRow{display:grid;grid-template-columns:150px 1fr;align-items:baseline;gap:12px}.kvKey{font-size:11px;letter-spacing:.08em;color:#1f242694}.kvVal{font-size:14px;color:var(--ink)}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace}.muted{color:var(--muted)}.divider{height:1px;background:var(--line);margin:14px 0}.progressWrap{margin-top:12px}.progressTrack{height:12px;border-radius:999px;border:1px solid rgba(31,36,38,.12);background:#ffffff6b;overflow:hidden}.progressFill{height:100%;width:0;background:linear-gradient(90deg,#0f5a51,#0d3f3a);border-radius:999px;box-shadow:inset 0 0 0 1px #ffffff2e;transition:width .42s ease}.path{margin-top:10px;color:#1f2426b3;font-size:12px}.badge{width:28px;height:28px;border-radius:999px;display:grid;place-items:center;background:#ffffffa8;border:1px solid rgba(31,36,38,.14);font-size:12px}.tableWrap{overflow:auto}.table{width:100%;border-collapse:collapse}.table th{text-align:left;font-size:11px;letter-spacing:.08em;color:#1f242694;padding:12px 10px;border-bottom:1px solid var(--line);white-space:nowrap}.table td{padding:14px 10px;border-bottom:1px solid rgba(31,36,38,.07);vertical-align:top;font-size:13px}.taskTitle{font-weight:630}.taskSub{margin-top:4px;font-size:12px;color:#1f24269e}.details{border-radius:var(--radius);border:1px solid rgba(31,36,38,.12);background:#ffffff85;box-shadow:0 18px 40px #1d202112;overflow:hidden}.detailsSummary{list-style:none;cursor:pointer;padding:16px 18px;display:flex;align-items:center;justify-content:space-between;gap:10px}.detailsSummary::-webkit-details-marker{display:none}.detailsTitle{font-size:16px;font-weight:680;font-family:Iowan Old Style,Palatino Linotype,Palatino,Georgia,serif}.chev{width:10px;height:10px;border-right:2px solid rgba(31,36,38,.42);border-bottom:2px solid rgba(31,36,38,.42);transform:rotate(45deg);transition:transform .15s ease}.details[open] .chev{transform:rotate(-135deg)}.detailsBody{border-top:1px solid var(--line);padding:16px 18px 18px}.code{margin:0;padding:14px;border-radius:14px;border:1px solid rgba(31,36,38,.1);background:#ffffffb3;overflow:auto;font-size:12px;line-height:1.5}.footer{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:18px;padding:10px 2px 0;color:#1f242699;font-size:12px}@media (max-width: 920px){.grid2{grid-template-columns:1fr}.kvRow{grid-template-columns:140px 1fr}.table th:nth-child(6),.table td:nth-child(6){display:none}}@media (max-width: 520px){.container{width:min(1120px,calc(100% - 28px));padding-top:22px}.topbar{flex-direction:column;align-items:stretch}.topbarActions{justify-content:flex-start;flex-wrap:wrap}.kvRow{grid-template-columns:1fr;gap:6px}.footer{flex-direction:column;align-items:flex-start}}
|