@comput/pi-intercom 0.3.0 → 0.4.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.
Files changed (58) hide show
  1. package/README.md +137 -25
  2. package/dist/activity.d.ts +12 -0
  3. package/dist/activity.js +73 -0
  4. package/dist/activity.js.map +1 -0
  5. package/dist/config.d.ts +39 -0
  6. package/dist/config.js +182 -0
  7. package/dist/config.js.map +1 -0
  8. package/dist/index.d.ts +3 -0
  9. package/dist/index.js +186 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/launcher.d.ts +17 -0
  12. package/dist/launcher.js +77 -0
  13. package/dist/launcher.js.map +1 -0
  14. package/dist/monitor-launcher.d.ts +17 -0
  15. package/dist/monitor-launcher.js +136 -0
  16. package/dist/monitor-launcher.js.map +1 -0
  17. package/dist/monitor-view.d.ts +6 -0
  18. package/dist/monitor-view.js +134 -0
  19. package/dist/monitor-view.js.map +1 -0
  20. package/dist/monitor.d.ts +22 -0
  21. package/dist/monitor.js +171 -0
  22. package/dist/monitor.js.map +1 -0
  23. package/dist/observability.d.ts +79 -0
  24. package/dist/observability.js +208 -0
  25. package/dist/observability.js.map +1 -0
  26. package/dist/reports.d.ts +12 -0
  27. package/dist/reports.js +160 -0
  28. package/dist/reports.js.map +1 -0
  29. package/dist/runtime.d.ts +59 -0
  30. package/dist/runtime.js +458 -0
  31. package/dist/runtime.js.map +1 -0
  32. package/dist/snapshot.d.ts +15 -0
  33. package/dist/snapshot.js +128 -0
  34. package/dist/snapshot.js.map +1 -0
  35. package/dist/transport.d.ts +24 -0
  36. package/dist/transport.js +122 -0
  37. package/dist/transport.js.map +1 -0
  38. package/dist/worker-status.d.ts +26 -0
  39. package/dist/worker-status.js +76 -0
  40. package/dist/worker-status.js.map +1 -0
  41. package/package.json +13 -7
  42. package/references/observability.md +66 -60
  43. package/references/roadmap.md +68 -0
  44. package/src/activity.ts +66 -0
  45. package/src/config.ts +1 -1
  46. package/src/index.ts +51 -23
  47. package/src/monitor-launcher.ts +110 -0
  48. package/src/monitor-view.ts +123 -0
  49. package/src/monitor.ts +143 -0
  50. package/src/observability.ts +6 -1
  51. package/src/reports.ts +122 -0
  52. package/src/runtime.ts +45 -7
  53. package/src/{dashboard.ts → snapshot.ts} +9 -60
  54. package/src/transport.ts +11 -2
  55. package/src/worker-status.ts +66 -0
  56. package/dashboard/app.js +0 -182
  57. package/dashboard/index.html +0 -41
  58. package/dashboard/style.css +0 -82
@@ -1,41 +0,0 @@
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
- <meta name="color-scheme" content="light">
7
- <title>PiIntercom · Observation ledger</title>
8
- <link rel="stylesheet" href="/style.css">
9
- <script src="/app.js" defer></script>
10
- </head>
11
- <body>
12
- <a class="skip-link" href="#timeline">Skip to event timeline</a>
13
- <header class="masthead">
14
- <div><p class="eyebrow">PiIntercom / Local observation</p><h1>Communication, observed.</h1>
15
- <p class="intro">A read-only record of agents and their exchanges. Pi decides the work.</p></div>
16
- <div class="connection"><span id="connection-state" role="status">Connecting to local dashboard…</span><p id="snapshot-time">No snapshot received</p><span class="read-only">Read only · Refreshes every 3 seconds</span></div>
17
- </header>
18
- <main>
19
- <div id="notice" class="notice" role="status" hidden></div>
20
- <div class="workspace">
21
- <section class="roster-panel" aria-labelledby="roster-heading">
22
- <div class="section-heading"><h2 id="roster-heading">Configured agents</h2><span id="roster-count" class="count">—</span></div>
23
- <p class="help">Saved endpoints are not proof of a running process. Busy and idle are last-observed snapshots, not availability.</p>
24
- <div id="roster" class="roster"><p class="empty">Waiting for the saved roster.</p></div>
25
- </section>
26
- <section id="timeline" class="timeline-panel" aria-labelledby="timeline-heading" tabindex="-1">
27
- <div class="section-heading"><h2 id="timeline-heading">Exchange ledger</h2><span id="event-count" class="count">—</span></div>
28
- <p class="help">Metadata only. Receipt does not prove Pi accepted the input or completed work.</p>
29
- <form class="filters" aria-label="Filter event timeline">
30
- <div><label for="worker-filter">Agent</label><select id="worker-filter"><option value="">All agents</option></select></div>
31
- <div><label for="type-filter">Event type</label><select id="type-filter"><option value="">All types</option></select></div>
32
- <label class="checkbox"><input id="errors-filter" type="checkbox">Errors only</label>
33
- </form>
34
- <p id="event-window" class="window-note">Waiting for event metadata.</p>
35
- <div id="events" class="events"><p class="empty">The ledger will appear after the first snapshot.</p></div>
36
- </section>
37
- </div>
38
- </main>
39
- <footer><strong>Observe, don't infer.</strong> A quiet timeline may mean no recent events, unavailable logging, or an unreachable dashboard—not completed work. No assignments or agent controls are available here.</footer>
40
- </body>
41
- </html>
@@ -1,82 +0,0 @@
1
- :root {
2
- --canvas: #e9eff5;
3
- --paper: #ffffff;
4
- --ink: #20354b;
5
- --muted: #526477;
6
- --blue: #326080;
7
- --line: #c7d3df;
8
- --wash: #f3f6fa;
9
- --warning: #854617;
10
- --warning-wash: #fff3e6;
11
- font-family: "Segoe UI", system-ui, sans-serif;
12
- color: var(--ink);
13
- background: var(--canvas);
14
- font-synthesis: none;
15
- }
16
- * { box-sizing: border-box; }
17
- body { margin: 0; }
18
- [hidden] { display: none !important; }
19
- a { color: var(--blue); }
20
- :focus-visible { outline: 3px solid var(--blue); outline-offset: 4px; }
21
- .skip-link { position: absolute; left: 16px; top: -80px; padding: 12px; background: var(--paper); z-index: 2; }
22
- .skip-link:focus { top: 12px; }
23
- .masthead { display: flex; justify-content: space-between; gap: 32px; padding: 38px clamp(20px, 4vw, 64px) 30px; border-top: 7px solid var(--blue); }
24
- .eyebrow { margin: 0 0 12px; color: var(--blue); text-transform: uppercase; letter-spacing: .12em; font-size: .72rem; font-weight: 750; }
25
- h1 { font: 400 clamp(2rem, 3.3vw, 3.2rem)/1.08 Georgia, "Times New Roman", serif; margin: 0; letter-spacing: -.025em; }
26
- .intro { color: var(--muted); line-height: 1.5; margin: 14px 0 0; }
27
- .connection { align-self: center; flex: 0 0 275px; border-left: 2px solid var(--line); padding-left: 22px; font-size: .86rem; }
28
- #connection-state { font-weight: 700; }
29
- #snapshot-time { color: var(--muted); margin: 7px 0 12px; line-height: 1.4; }
30
- .read-only { font: .72rem/1.5 Consolas, monospace; color: var(--muted); }
31
- main { margin: 0 clamp(16px, 4vw, 64px); }
32
- .notice { background: var(--warning-wash); border-left: 4px solid var(--warning); padding: 14px 18px; margin-bottom: 18px; line-height: 1.5; color: var(--warning); }
33
- .workspace { display: grid; grid-template-columns: minmax(260px, 340px) minmax(0, 1fr); border: 1px solid var(--line); background: var(--paper); border-radius: 8px; overflow: hidden; }
34
- .roster-panel { background: var(--wash); border-right: 1px solid var(--line); padding: 26px 22px; }
35
- .timeline-panel { padding: 26px clamp(18px, 2.5vw, 36px); min-width: 0; }
36
- .section-heading { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
37
- h2 { margin: 0; font-size: 1.1rem; font-weight: 700; }
38
- .count { font: .8rem Consolas, monospace; color: var(--muted); }
39
- .help { color: var(--muted); font-size: .82rem; line-height: 1.55; margin: 12px 0 23px; }
40
- .agent { border-top: 1px solid var(--line); padding: 20px 0; overflow-wrap: anywhere; }
41
- .agent h3 { font-size: 1rem; margin: 0 0 7px; }
42
- .agent-role { font: .7rem Consolas, monospace; color: var(--blue); text-transform: uppercase; letter-spacing: .06em; }
43
- .responsibility { font-size: .84rem; line-height: 1.55; margin: 10px 0 14px; }
44
- .endpoint, .identity { font: .72rem/1.5 Consolas, monospace; color: var(--muted); margin: 4px 0; }
45
- .observation { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 15px; }
46
- .badge { display: inline-block; padding: 4px 8px; border: 1px solid var(--line); border-radius: 4px; font-size: .72rem; font-weight: 650; color: var(--muted); background: var(--paper); }
47
- .badge-observed { color: var(--blue); border-color: #a8bfce; }
48
- .badge-stale, .badge-error { color: var(--warning); border-color: #d5b594; background: var(--warning-wash); }
49
- .observed-time { color: var(--muted); font-size: .72rem; line-height: 1.5; margin: 8px 0 0; }
50
- .filters { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 14px; padding: 16px; background: var(--wash); border-radius: 5px; }
51
- .filters > div { flex: 1 1 160px; min-width: 0; }
52
- .filters label { display: block; font-size: .76rem; font-weight: 650; margin-bottom: 7px; }
53
- select { width: 100%; min-height: 38px; font: inherit; font-size: .84rem; border: 1px solid #98acbf; border-radius: 3px; padding: 7px 24px 7px 9px; color: var(--ink); background: var(--paper); }
54
- .filters .checkbox { display: flex; gap: 7px; align-items: center; min-height: 38px; margin: 0; }
55
- input[type="checkbox"] { width: 17px; height: 17px; accent-color: var(--blue); }
56
- .window-note { font-size: .73rem; color: var(--muted); line-height: 1.5; margin: 16px 0; }
57
- .event { border-top: 1px solid var(--line); padding: 15px 0; }
58
- .event summary { display: grid; grid-template-columns: 82px minmax(0, 1fr) auto; gap: 12px; cursor: pointer; align-items: baseline; list-style: none; }
59
- .event summary::-webkit-details-marker { display: none; }
60
- .event summary::after { content: "+"; color: var(--blue); font: 1.15rem Consolas, monospace; }
61
- .event[open] summary::after { content: "−"; }
62
- .event-time { font: .76rem/1.5 Consolas, monospace; color: var(--muted); }
63
- .event-name { display: block; font-size: .88rem; font-weight: 650; overflow-wrap: anywhere; }
64
- .event-route { display: block; margin-top: 5px; font-size: .76rem; line-height: 1.5; color: var(--muted); overflow-wrap: anywhere; }
65
- .event dl { display: grid; grid-template-columns: 120px minmax(0, 1fr); gap: 8px 14px; margin: 15px 0 0 94px; padding: 15px; background: var(--wash); font-size: .76rem; }
66
- .event dt { color: var(--muted); }
67
- .event dd { margin: 0; font-family: Consolas, monospace; overflow-wrap: anywhere; }
68
- .empty { padding: 28px 0; color: var(--muted); line-height: 1.6; font-size: .9rem; }
69
- footer { max-width: 950px; color: var(--muted); margin: 24px clamp(20px, 4vw, 64px) 40px; font-size: .77rem; line-height: 1.6; }
70
- footer strong { color: var(--ink); }
71
- @media (max-width: 850px) {
72
- .masthead { display: block; padding-top: 28px; }
73
- .connection { margin-top: 24px; padding-left: 15px; }
74
- .workspace { grid-template-columns: 1fr; }
75
- .roster-panel { border-right: 0; border-bottom: 1px solid var(--line); }
76
- .roster { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 0 22px; }
77
- }
78
- @media (max-width: 480px) {
79
- .event summary { grid-template-columns: 65px minmax(0, 1fr) auto; gap: 8px; }
80
- .event dl { margin-left: 0; grid-template-columns: 90px minmax(0, 1fr); }
81
- }
82
- @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; } }