@hellcoder/companion 0.116.1-preview.20260814042234.2d329a2 → 0.117.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 (34) hide show
  1. package/dist/assets/{AgentsPage-BAalV1v6.js → AgentsPage-DJIGGU86.js} +1 -1
  2. package/dist/assets/{CronManager-B2Vo1YmB.js → CronManager-D7aAMVgs.js} +1 -1
  3. package/dist/assets/{DashboardPage-BOvDiP1W.js → DashboardPage-Bporj7Vr.js} +1 -1
  4. package/dist/assets/{IntegrationsPage-kOXLH5KU.js → IntegrationsPage-BSY0-fsO.js} +1 -1
  5. package/dist/assets/{LinearOAuthSettingsPage-H-uUJ-ub.js → LinearOAuthSettingsPage-Cl5dP05g.js} +1 -1
  6. package/dist/assets/{LinearSettingsPage-CD_x4AGr.js → LinearSettingsPage-dwMpnpxL.js} +1 -1
  7. package/dist/assets/{MagicUIDashboard-9Jgiv4rb.js → MagicUIDashboard-Bpa4AupX.js} +90 -4
  8. package/dist/assets/{MagicUIView-BLEcS9XO.js → MagicUIView-BoHMBELi.js} +1 -1
  9. package/dist/assets/{Playground-QLrd9q16.js → Playground-By2aXWQF.js} +5 -5
  10. package/dist/assets/{PromptsPage-11eJ6ak7.js → PromptsPage-DVv0Qn3d.js} +1 -1
  11. package/dist/assets/{RunsPage-Bz3udIL2.js → RunsPage-bu3TZ6ai.js} +1 -1
  12. package/dist/assets/{SandboxManager-Dv47pbC6.js → SandboxManager-CDjGbD5N.js} +1 -1
  13. package/dist/assets/{SettingsPage-C_2ftG-C.js → SettingsPage-D0v_BZTU.js} +1 -1
  14. package/dist/assets/{TailscalePage-DzMX_7XA.js → TailscalePage-B8SJQpMF.js} +1 -1
  15. package/dist/assets/index-BqOdTpct.css +1 -0
  16. package/dist/assets/index-DqIZ_Ol5.js +140 -0
  17. package/dist/assets/{sw-register-CarYQEeI.js → sw-register-CvyRJNug.js} +1 -1
  18. package/dist/index.html +2 -2
  19. package/dist/sw.js +1 -1
  20. package/package.json +1 -1
  21. package/server/linear-agent-bridge.ts +0 -1
  22. package/server/magic-ui-ops.test.ts +59 -0
  23. package/server/magic-ui-ops.ts +29 -0
  24. package/server/magic-ui-types.ts +26 -2
  25. package/server/magic-ui-watcher.test.ts +85 -0
  26. package/server/magic-ui-watcher.ts +10 -2
  27. package/server/routes/system-routes.test.ts +401 -0
  28. package/server/routes/system-routes.ts +10 -0
  29. package/server/system-disk.test.ts +48 -0
  30. package/server/system-disk.ts +55 -0
  31. package/server/system-memory.test.ts +32 -0
  32. package/server/system-memory.ts +32 -0
  33. package/dist/assets/index-DSCRqqpK.css +0 -1
  34. package/dist/assets/index-DspbwgSL.js +0 -140
@@ -1,4 +1,4 @@
1
- import{N as C,O as D,r,u as m,Q as P,j as O}from"./index-DspbwgSL.js";const A=`/* MagicUI iframe runtime.
1
+ import{N as C,O as D,r,u as m,Q as P,j as O}from"./index-DqIZ_Ol5.js";const A=`/* MagicUI iframe runtime.
2
2
  *
3
3
  * Plain dependency-free JS (Chart.js UMD is inlined separately by the host).
4
4
  * Runs inside a sandboxed, opaque-origin iframe with a no-network CSP.
@@ -89,6 +89,13 @@ import{N as C,O as D,r,u as m,Q as P,j as O}from"./index-DspbwgSL.js";const A=`/
89
89
  }
90
90
  function closeOverlay() {
91
91
  document.getElementById("overlay").classList.remove("open");
92
+ // Destroy chart instances that live only inside the overlay.
93
+ charts.forEach(function (chart, key) {
94
+ if (key.indexOf("overlay:") === 0) {
95
+ chart.destroy();
96
+ charts.delete(key);
97
+ }
98
+ });
92
99
  }
93
100
 
94
101
  function copyButton(getText) {
@@ -122,7 +129,9 @@ import{N as C,O as D,r,u as m,Q as P,j as O}from"./index-DspbwgSL.js";const A=`/
122
129
  }
123
130
 
124
131
  // ── Slot cards ───────────────────────────────────────────────────────
125
- function buildCard(name, slot) {
132
+ // chartKey lets overlay renders (archived topics) keep their Chart.js
133
+ // instances separate from the live board's.
134
+ function buildCard(name, slot, chartKey) {
126
135
  var card = el("div", "card");
127
136
  card.dataset.slot = name;
128
137
  var actions = el("div", "card-actions");
@@ -141,7 +150,7 @@ import{N as C,O as D,r,u as m,Q as P,j as O}from"./index-DspbwgSL.js";const A=`/
141
150
  canvas.setAttribute("role", "img");
142
151
  canvas.setAttribute("aria-label", slot.title || slot.chart.title || "chart");
143
152
  wrap.appendChild(canvas);
144
- renderChart(name, canvas, slot.chart);
153
+ renderChart(chartKey || name, canvas, slot.chart);
145
154
  } else if (slot.stat) {
146
155
  var statBox = el("div");
147
156
  var valueRow = el("div");
@@ -375,6 +384,46 @@ import{N as C,O as D,r,u as m,Q as P,j as O}from"./index-DspbwgSL.js";const A=`/
375
384
  }
376
385
  }
377
386
 
387
+ // ── Archived topics (chips in the status strip) ──────────────────────
388
+ function openTopicOverlay(topic) {
389
+ openOverlay(topic.title, function (target) {
390
+ var grid = el("div", "overlay-grid");
391
+ target.appendChild(grid);
392
+ var names = Object.keys(topic.slots || {});
393
+ // Respect the topic's layout order where available.
394
+ names.sort(function (a, b) {
395
+ var la = (topic.layout || []).findIndex(function (l) { return l.slot === a; });
396
+ var lb = (topic.layout || []).findIndex(function (l) { return l.slot === b; });
397
+ if (la !== -1 && lb !== -1) return la - lb;
398
+ if (la !== -1) return -1;
399
+ if (lb !== -1) return 1;
400
+ return 0;
401
+ });
402
+ names.forEach(function (name) {
403
+ var card = buildCard(name, topic.slots[name], "overlay:" + topic.id + ":" + name);
404
+ grid.appendChild(card);
405
+ });
406
+ if (names.length === 0) {
407
+ target.appendChild(el("div", "panel-empty", "This topic had no content."));
408
+ }
409
+ });
410
+ }
411
+
412
+ function renderTopics(state) {
413
+ var host = document.getElementById("topic-chips");
414
+ clear(host);
415
+ var topics = state.topics || [];
416
+ if (state.currentTopicTitle && (topics.length > 0 || state.currentTopicTitle !== "Session")) {
417
+ host.appendChild(el("span", "topic-current", state.currentTopicTitle));
418
+ }
419
+ topics.forEach(function (topic) {
420
+ var chip = el("button", "topic-chip", topic.title);
421
+ chip.title = "Reopen archived topic: " + topic.title;
422
+ chip.addEventListener("click", function () { openTopicOverlay(topic); });
423
+ host.appendChild(chip);
424
+ });
425
+ }
426
+
378
427
  var SRC_LABEL = { user: "You", ai_auto: "AI", agent: "Agent" };
379
428
 
380
429
  function decisionRow(entry) {
@@ -590,6 +639,7 @@ import{N as C,O as D,r,u as m,Q as P,j as O}from"./index-DspbwgSL.js";const A=`/
590
639
 
591
640
  renderOpenItems(state.openItems || []);
592
641
  renderDecisionLog(state.decisionLog || []);
642
+ renderTopics(state);
593
643
 
594
644
  var dot = document.getElementById("status-dot");
595
645
  dot.className = "status-dot" + (state.status !== "live" ? " " + state.status : "");
@@ -651,7 +701,8 @@ import{N as C,O as D,r,u as m,Q as P,j as O}from"./index-DspbwgSL.js";const A=`/
651
701
  "</div>" +
652
702
  '<div id="footer">' +
653
703
  '<div id="decisions-live" aria-live="assertive"></div>' +
654
- '<div id="status-strip"><span class="status-dot" id="status-dot"></span><span id="status-text">Connecting…</span></div>' +
704
+ '<div id="status-strip"><span class="status-dot" id="status-dot"></span><span id="status-text">Connecting…</span>' +
705
+ '<span id="topic-chips" aria-label="Archived topics"></span></div>' +
655
706
  "</div>";
656
707
  document.body.appendChild(root);
657
708
 
@@ -1061,6 +1112,41 @@ body[data-theme="light"] .behavior.allow { color: #006300; }
1061
1112
  .dp-question { margin-bottom: 8px; }
1062
1113
  .dp-question .q-text { font-weight: 600; font-size: 12px; margin-bottom: 4px; }
1063
1114
 
1115
+ /* ── Topic chips (archived boards) ────────────────────────────────────── */
1116
+
1117
+ #topic-chips {
1118
+ display: inline-flex;
1119
+ align-items: center;
1120
+ gap: 6px;
1121
+ margin-left: 10px;
1122
+ overflow: hidden;
1123
+ }
1124
+ .topic-current {
1125
+ font-weight: 650;
1126
+ color: var(--ink-2);
1127
+ }
1128
+ .topic-current::before { content: "· "; color: var(--muted); font-weight: 400; }
1129
+ .topic-chip {
1130
+ border: 1px solid var(--ring);
1131
+ border-radius: 999px;
1132
+ background: var(--surface-1);
1133
+ color: var(--ink-2);
1134
+ font-size: 10px;
1135
+ font-weight: 600;
1136
+ padding: 2px 9px;
1137
+ cursor: pointer;
1138
+ white-space: nowrap;
1139
+ }
1140
+ .topic-chip:hover { color: var(--ink); border-color: var(--accent); }
1141
+
1142
+ .overlay-grid {
1143
+ display: grid;
1144
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1145
+ gap: 10px;
1146
+ }
1147
+ .overlay-grid .card { min-height: 110px; max-height: 320px; }
1148
+ .overlay-grid .card .chart-wrap { position: relative; height: 180px; }
1149
+
1064
1150
  /* ── Overlay (expander target) ────────────────────────────────────────── */
1065
1151
 
1066
1152
  #overlay {
@@ -1 +1 @@
1
- import{u as l,r as s,c as k,j as r,D as M,M as R,P as _,C}from"./index-DspbwgSL.js";import{d as P,t as D,M as E}from"./MagicUIDashboard-9Jgiv4rb.js";const N=4e3;function A({sessionId:t}){const u=l(e=>e.pendingPermissions.get(t)),h=l(e=>e.removePermission),m=l(e=>e.connectionStatus.get(t)??"disconnected"),x=l(e=>e.cliConnected.get(t)??!1),i=s.useMemo(()=>u?Array.from(u.values()):[],[u]),[a,g]=s.useState(new Set),f=s.useRef(new Set),c=s.useRef(new Map);s.useEffect(()=>{for(const e of i){const n=e.request_id;f.current.has(n)||a.has(n)||c.current.has(n)||c.current.set(n,setTimeout(()=>{c.current.delete(n),f.current.has(n)||g(o=>new Set(o).add(n))},N))}for(const[e,n]of c.current)i.some(o=>o.request_id===e)||(clearTimeout(n),c.current.delete(e))},[i,a]),s.useEffect(()=>()=>{for(const e of c.current.values())clearTimeout(e);c.current.clear()},[]);const b=s.useCallback(e=>{f.current.add(e);const n=c.current.get(e);n&&(clearTimeout(n),c.current.delete(e))},[]),v=s.useCallback((e,n)=>{var d;const o=(d=l.getState().pendingPermissions.get(t))==null?void 0:d.get(e);o&&(k(t,P(o,n)),h(t,e))},[t,h]),w=s.useCallback(()=>{g(e=>{var o;const n=new Set(e);for(const d of((o=l.getState().pendingPermissions.get(t))==null?void 0:o.values())??[])n.add(d.request_id);return n})},[t]),j=s.useMemo(()=>i.filter(e=>!a.has(e.request_id)).map(D),[i,a]),p=s.useMemo(()=>i.filter(e=>a.has(e.request_id)),[i,a]),S=m==="connected"&&!x;return r.jsxs("div",{className:"flex flex-col h-full min-h-0",children:[(S||m==="disconnected")&&r.jsxs("div",{className:"px-4 py-1.5 bg-gradient-to-r from-cc-warning/8 to-cc-warning/4 border-b border-cc-warning/15 flex items-center justify-center gap-2",children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cc-warning animate-[pulse-dot_1.5s_ease-in-out_infinite] shrink-0"}),r.jsx("span",{className:"text-xs text-cc-warning font-medium",children:m==="disconnected"?"Reconnecting to session…":"CLI disconnected — switch to Standard view to reconnect"})]}),r.jsx("div",{className:"h-36 shrink-0 border-b border-cc-border relative overflow-hidden","aria-label":"Raw session output",children:r.jsx(M,{value:"compact",children:r.jsx(R,{sessionId:t})})}),r.jsx("div",{className:"flex-1 min-h-0 relative bg-cc-bg",children:r.jsx(E,{sessionId:t,decisions:j,onDecisionAck:b,onDecisionResponse:v,onRuntimeError:w})}),p.length>0&&r.jsx("div",{className:"shrink-0 max-h-[50dvh] overflow-y-auto border-t border-cc-border bg-cc-card",children:p.map(e=>r.jsx(_,{permission:e,sessionId:t},e.request_id))}),r.jsx(C,{sessionId:t})]})}export{A as MagicUIView};
1
+ import{u as l,r as s,c as k,j as r,D as M,M as R,P as _,C}from"./index-DqIZ_Ol5.js";import{d as P,t as D,M as E}from"./MagicUIDashboard-Bpa4AupX.js";const N=4e3;function A({sessionId:t}){const u=l(e=>e.pendingPermissions.get(t)),h=l(e=>e.removePermission),m=l(e=>e.connectionStatus.get(t)??"disconnected"),x=l(e=>e.cliConnected.get(t)??!1),i=s.useMemo(()=>u?Array.from(u.values()):[],[u]),[a,g]=s.useState(new Set),f=s.useRef(new Set),c=s.useRef(new Map);s.useEffect(()=>{for(const e of i){const n=e.request_id;f.current.has(n)||a.has(n)||c.current.has(n)||c.current.set(n,setTimeout(()=>{c.current.delete(n),f.current.has(n)||g(o=>new Set(o).add(n))},N))}for(const[e,n]of c.current)i.some(o=>o.request_id===e)||(clearTimeout(n),c.current.delete(e))},[i,a]),s.useEffect(()=>()=>{for(const e of c.current.values())clearTimeout(e);c.current.clear()},[]);const b=s.useCallback(e=>{f.current.add(e);const n=c.current.get(e);n&&(clearTimeout(n),c.current.delete(e))},[]),v=s.useCallback((e,n)=>{var d;const o=(d=l.getState().pendingPermissions.get(t))==null?void 0:d.get(e);o&&(k(t,P(o,n)),h(t,e))},[t,h]),w=s.useCallback(()=>{g(e=>{var o;const n=new Set(e);for(const d of((o=l.getState().pendingPermissions.get(t))==null?void 0:o.values())??[])n.add(d.request_id);return n})},[t]),j=s.useMemo(()=>i.filter(e=>!a.has(e.request_id)).map(D),[i,a]),p=s.useMemo(()=>i.filter(e=>a.has(e.request_id)),[i,a]),S=m==="connected"&&!x;return r.jsxs("div",{className:"flex flex-col h-full min-h-0",children:[(S||m==="disconnected")&&r.jsxs("div",{className:"px-4 py-1.5 bg-gradient-to-r from-cc-warning/8 to-cc-warning/4 border-b border-cc-warning/15 flex items-center justify-center gap-2",children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cc-warning animate-[pulse-dot_1.5s_ease-in-out_infinite] shrink-0"}),r.jsx("span",{className:"text-xs text-cc-warning font-medium",children:m==="disconnected"?"Reconnecting to session…":"CLI disconnected — switch to Standard view to reconnect"})]}),r.jsx("div",{className:"h-36 shrink-0 border-b border-cc-border relative overflow-hidden","aria-label":"Raw session output",children:r.jsx(M,{value:"compact",children:r.jsx(R,{sessionId:t})})}),r.jsx("div",{className:"flex-1 min-h-0 relative bg-cc-bg",children:r.jsx(E,{sessionId:t,decisions:j,onDecisionAck:b,onDecisionResponse:v,onRuntimeError:w})}),p.length>0&&r.jsx("div",{className:"shrink-0 max-h-[50dvh] overflow-y-auto border-t border-cc-border bg-cc-card",children:p.map(e=>r.jsx(_,{permission:e,sessionId:t},e.request_id))}),r.jsx(C,{sessionId:t})]})}export{A as MagicUIView};