@cotal-ai/cli 0.2.0-next-20260612020133 → 0.2.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 (141) hide show
  1. package/dist/commands/console.d.ts +6 -0
  2. package/dist/commands/console.d.ts.map +1 -1
  3. package/dist/commands/console.js +83 -24
  4. package/dist/commands/console.js.map +1 -1
  5. package/dist/commands/demo.d.ts +2 -0
  6. package/dist/commands/demo.d.ts.map +1 -0
  7. package/dist/commands/demo.js +162 -0
  8. package/dist/commands/demo.js.map +1 -0
  9. package/dist/commands/history.d.ts +4 -0
  10. package/dist/commands/history.d.ts.map +1 -0
  11. package/dist/commands/history.js +48 -0
  12. package/dist/commands/history.js.map +1 -0
  13. package/dist/commands/join.d.ts.map +1 -1
  14. package/dist/commands/join.js +2 -2
  15. package/dist/commands/join.js.map +1 -1
  16. package/dist/commands/setup.d.ts +7 -0
  17. package/dist/commands/setup.d.ts.map +1 -0
  18. package/dist/commands/setup.js +64 -0
  19. package/dist/commands/setup.js.map +1 -0
  20. package/dist/commands/up.d.ts.map +1 -1
  21. package/dist/commands/up.js +2 -2
  22. package/dist/commands/up.js.map +1 -1
  23. package/dist/commands/watch.d.ts +2 -0
  24. package/dist/commands/watch.d.ts.map +1 -1
  25. package/dist/commands/watch.js +5 -61
  26. package/dist/commands/watch.js.map +1 -1
  27. package/dist/commands/web.d.ts.map +1 -1
  28. package/dist/commands/web.js +2 -2
  29. package/dist/commands/web.js.map +1 -1
  30. package/dist/console/app.d.ts +15 -0
  31. package/dist/console/app.d.ts.map +1 -0
  32. package/dist/console/app.js +240 -0
  33. package/dist/console/app.js.map +1 -0
  34. package/dist/console/commands.d.ts +27 -0
  35. package/dist/console/commands.d.ts.map +1 -0
  36. package/dist/console/commands.js +111 -0
  37. package/dist/console/commands.js.map +1 -0
  38. package/dist/console/mesh.d.ts +8 -0
  39. package/dist/console/mesh.d.ts.map +1 -0
  40. package/dist/console/mesh.js +26 -0
  41. package/dist/console/mesh.js.map +1 -0
  42. package/dist/console/root.d.ts +18 -0
  43. package/dist/console/root.d.ts.map +1 -0
  44. package/dist/console/root.js +36 -0
  45. package/dist/console/root.js.map +1 -0
  46. package/dist/console/ui/CommandPalette.d.ts +15 -0
  47. package/dist/console/ui/CommandPalette.d.ts.map +1 -0
  48. package/dist/console/ui/CommandPalette.js +81 -0
  49. package/dist/console/ui/CommandPalette.js.map +1 -0
  50. package/dist/console/ui/Confirm.d.ts +19 -0
  51. package/dist/console/ui/Confirm.d.ts.map +1 -0
  52. package/dist/console/ui/Confirm.js +32 -0
  53. package/dist/console/ui/Confirm.js.map +1 -0
  54. package/dist/console/ui/Detail.d.ts +18 -0
  55. package/dist/console/ui/Detail.d.ts.map +1 -0
  56. package/dist/console/ui/Detail.js +43 -0
  57. package/dist/console/ui/Detail.js.map +1 -0
  58. package/dist/console/ui/Dm.d.ts +15 -0
  59. package/dist/console/ui/Dm.d.ts.map +1 -0
  60. package/dist/console/ui/Dm.js +135 -0
  61. package/dist/console/ui/Dm.js.map +1 -0
  62. package/dist/console/ui/Feed.d.ts +20 -0
  63. package/dist/console/ui/Feed.d.ts.map +1 -0
  64. package/dist/console/ui/Feed.js +141 -0
  65. package/dist/console/ui/Feed.js.map +1 -0
  66. package/dist/console/ui/Help.d.ts +8 -0
  67. package/dist/console/ui/Help.d.ts.map +1 -0
  68. package/dist/console/ui/Help.js +55 -0
  69. package/dist/console/ui/Help.js.map +1 -0
  70. package/dist/console/ui/NeedsYou.d.ts +14 -0
  71. package/dist/console/ui/NeedsYou.d.ts.map +1 -0
  72. package/dist/console/ui/NeedsYou.js +36 -0
  73. package/dist/console/ui/NeedsYou.js.map +1 -0
  74. package/dist/console/ui/Prompt.d.ts +12 -0
  75. package/dist/console/ui/Prompt.d.ts.map +1 -0
  76. package/dist/console/ui/Prompt.js +19 -0
  77. package/dist/console/ui/Prompt.js.map +1 -0
  78. package/dist/console/ui/Roster.d.ts +17 -0
  79. package/dist/console/ui/Roster.d.ts.map +1 -0
  80. package/dist/console/ui/Roster.js +52 -0
  81. package/dist/console/ui/Roster.js.map +1 -0
  82. package/dist/console/ui/Search.d.ts +12 -0
  83. package/dist/console/ui/Search.d.ts.map +1 -0
  84. package/dist/console/ui/Search.js +19 -0
  85. package/dist/console/ui/Search.js.map +1 -0
  86. package/dist/console/ui/SpacePicker.d.ts +10 -0
  87. package/dist/console/ui/SpacePicker.d.ts.map +1 -0
  88. package/dist/console/ui/SpacePicker.js +77 -0
  89. package/dist/console/ui/SpacePicker.js.map +1 -0
  90. package/dist/console/ui/StatusBar.d.ts +14 -0
  91. package/dist/console/ui/StatusBar.d.ts.map +1 -0
  92. package/dist/console/ui/StatusBar.js +18 -0
  93. package/dist/console/ui/StatusBar.js.map +1 -0
  94. package/dist/console/ui/Tabs.d.ts +8 -0
  95. package/dist/console/ui/Tabs.d.ts.map +1 -0
  96. package/dist/console/ui/Tabs.js +12 -0
  97. package/dist/console/ui/Tabs.js.map +1 -0
  98. package/dist/console/ui/Tiles.d.ts +9 -0
  99. package/dist/console/ui/Tiles.d.ts.map +1 -0
  100. package/dist/console/ui/Tiles.js +10 -0
  101. package/dist/console/ui/Tiles.js.map +1 -0
  102. package/dist/console/ui/theme.d.ts +11 -0
  103. package/dist/console/ui/theme.d.ts.map +1 -0
  104. package/dist/console/ui/theme.js +63 -0
  105. package/dist/console/ui/theme.js.map +1 -0
  106. package/dist/console/ui/topo/Map.d.ts +17 -0
  107. package/dist/console/ui/topo/Map.d.ts.map +1 -0
  108. package/dist/console/ui/topo/Map.js +158 -0
  109. package/dist/console/ui/topo/Map.js.map +1 -0
  110. package/dist/console/ui/topo/Matrix.d.ts +16 -0
  111. package/dist/console/ui/topo/Matrix.d.ts.map +1 -0
  112. package/dist/console/ui/topo/Matrix.js +80 -0
  113. package/dist/console/ui/topo/Matrix.js.map +1 -0
  114. package/dist/console/ui/topo/Sequence.d.ts +17 -0
  115. package/dist/console/ui/topo/Sequence.d.ts.map +1 -0
  116. package/dist/console/ui/topo/Sequence.js +117 -0
  117. package/dist/console/ui/topo/Sequence.js.map +1 -0
  118. package/dist/console/ui/topo/Topo.d.ts +20 -0
  119. package/dist/console/ui/topo/Topo.d.ts.map +1 -0
  120. package/dist/console/ui/topo/Topo.js +30 -0
  121. package/dist/console/ui/topo/Topo.js.map +1 -0
  122. package/dist/console/ui/topo/model.d.ts +51 -0
  123. package/dist/console/ui/topo/model.d.ts.map +1 -0
  124. package/dist/console/ui/topo/model.js +113 -0
  125. package/dist/console/ui/topo/model.js.map +1 -0
  126. package/dist/console/ui/topo/raster.d.ts +18 -0
  127. package/dist/console/ui/topo/raster.d.ts.map +1 -0
  128. package/dist/console/ui/topo/raster.js +36 -0
  129. package/dist/console/ui/topo/raster.js.map +1 -0
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/index.js +25 -1
  132. package/dist/index.js.map +1 -1
  133. package/dist/render.d.ts +4 -29
  134. package/dist/render.d.ts.map +1 -1
  135. package/dist/render.js +0 -0
  136. package/dist/render.js.map +1 -1
  137. package/dist/view/mesh-view.d.ts +138 -0
  138. package/dist/view/mesh-view.d.ts.map +1 -0
  139. package/dist/view/mesh-view.js +346 -0
  140. package/dist/view/mesh-view.js.map +1 -0
  141. package/package.json +7 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../src/console/ui/StatusBar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,KAAK,EACL,aAAa,EACb,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,KAAK,GACN,EAAE;IACD,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5B,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,+BA8BA"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ /** Bottom bar: connection + space + active channel + msgs/s, then context keybindings. */
4
+ export function StatusBar({ status, rates, activeChannel, agentCount, mode, railOpen, canBack, canWrite, width, }) {
5
+ const keys = mode === "dm"
6
+ ? "j/k scroll · ←→ pane · esc back · / search · ? help · q quit"
7
+ : mode === "topo"
8
+ ? "v / 1-3 variant · j/k h/l move · Enter detail · esc back · ? help · q quit"
9
+ : (canBack ? "esc back · " : "") +
10
+ ": cmd · j/k select · Enter detail · " +
11
+ (railOpen ? "n hide-rail" : "n needs-you") +
12
+ " · d DMs" +
13
+ (canWrite ? " · c compose · D kill" : "") +
14
+ " · / search · [ ] chan · ? help · q quit";
15
+ return (_jsx(Box, { width: width, paddingX: 1, children: _jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: status.connected ? "green" : "red", children: status.connected ? "● " : "⨯ " }), _jsx(Text, { dimColor: true, children: status.space + " · #" + activeChannel + " · " + agentCount + " agents · " +
16
+ rates.msgsPerSec.toFixed(1) + " msg/s" }), status.dmVisible ? null : _jsx(Text, { color: "yellow", children: " chat-only" }), canWrite ? null : _jsx(Text, { color: "yellow", children: " read-only" }), status.error ? (_jsx(Text, { color: "red", children: " ! " + status.error })) : (_jsx(Text, { dimColor: true, children: " " + keys }))] }) }));
17
+ }
18
+ //# sourceMappingURL=StatusBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../src/console/ui/StatusBar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAGhC,0FAA0F;AAC1F,MAAM,UAAU,SAAS,CAAC,EACxB,MAAM,EACN,KAAK,EACL,aAAa,EACb,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,KAAK,GAWN;IACC,MAAM,IAAI,GACR,IAAI,KAAK,IAAI;QACX,CAAC,CAAC,8DAA8D;QAChE,CAAC,CAAC,IAAI,KAAK,MAAM;YACf,CAAC,CAAC,4EAA4E;YAC9E,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,sCAAsC;gBACtC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;gBAC1C,UAAU;gBACV,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,0CAA0C,CAAC;IACjD,OAAO,CACL,KAAC,GAAG,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,YAC5B,MAAC,IAAI,IAAC,IAAI,EAAC,cAAc,aACvB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAQ,EACxF,KAAC,IAAI,IAAC,QAAQ,kBACX,MAAM,CAAC,KAAK,GAAG,MAAM,GAAG,aAAa,GAAG,KAAK,GAAG,UAAU,GAAG,YAAY;wBACxE,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,GACnC,EACN,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,aAAa,GAAQ,EACrE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,aAAa,GAAQ,EAC7D,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CACd,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,MAAM,GAAG,MAAM,CAAC,KAAK,GAAQ,CACjD,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,GAAG,IAAI,GAAQ,CACrC,IACI,GACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** The channel tab strip. `all` (firehose) is tab 1; channels follow. 1–9 jump directly. */
2
+ export declare function Tabs({ tabs, active, counts, width, }: {
3
+ tabs: string[];
4
+ active: string;
5
+ counts: Record<string, number>;
6
+ width: number;
7
+ }): import("react").JSX.Element;
8
+ //# sourceMappingURL=Tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/console/ui/Tabs.tsx"],"names":[],"mappings":"AAEA,4FAA4F;AAC5F,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,MAAM,EACN,MAAM,EACN,KAAK,GACN,EAAE;IACD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf,+BAqBA"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ /** The channel tab strip. `all` (firehose) is tab 1; channels follow. 1–9 jump directly. */
4
+ export function Tabs({ tabs, active, counts, width, }) {
5
+ return (_jsx(Box, { width: width, height: 3, borderStyle: "round", borderColor: "gray", paddingX: 1, children: _jsx(Text, { wrap: "truncate-end", children: tabs.map((t, i) => {
6
+ const isActive = t === active;
7
+ const label = t === "all" ? "all" : "#" + t;
8
+ const count = t === "all" ? undefined : counts[t];
9
+ return (_jsxs(Text, { children: [i > 0 ? _jsx(Text, { dimColor: true, children: " " }) : null, _jsxs(Text, { dimColor: true, children: [i + 1, ":"] }), _jsx(Text, { color: isActive ? "cyan" : undefined, inverse: isActive, bold: isActive, children: " " + label + (count !== undefined ? " " + count : "") + " " })] }, t));
10
+ }) }) }));
11
+ }
12
+ //# sourceMappingURL=Tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../../src/console/ui/Tabs.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,4FAA4F;AAC5F,MAAM,UAAU,IAAI,CAAC,EACnB,IAAI,EACJ,MAAM,EACN,MAAM,EACN,KAAK,GAMN;IACC,OAAO,CACL,KAAC,GAAG,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,YAC9E,KAAC,IAAI,IAAC,IAAI,EAAC,cAAc,YACtB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACjB,MAAM,QAAQ,GAAG,CAAC,KAAK,MAAM,CAAC;gBAC9B,MAAM,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClD,OAAO,CACL,MAAC,IAAI,eACF,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,GAAQ,CAAC,CAAC,CAAC,IAAI,EAC7C,MAAC,IAAI,IAAC,QAAQ,mBAAE,CAAC,GAAG,CAAC,SAAS,EAC9B,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,YAC1E,GAAG,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GACxD,KALE,CAAC,CAML,CACR,CAAC;YACJ,CAAC,CAAC,GACG,GACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { StatusCounts } from "../../view/mesh-view.js";
2
+ /** Golden-signal strip (one row): working/waiting/idle/offline counts + oldest-unattended age.
3
+ * Pure chrome — reads mesh.signals straight, reuses STATUS colors/glyphs. */
4
+ export declare function Tiles({ counts, oldestWaitingTs, width, }: {
5
+ counts: StatusCounts;
6
+ oldestWaitingTs?: number;
7
+ width: number;
8
+ }): import("react").JSX.Element;
9
+ //# sourceMappingURL=Tiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tiles.d.ts","sourceRoot":"","sources":["../../../src/console/ui/Tiles.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D;8EAC8E;AAC9E,wBAAgB,KAAK,CAAC,EACpB,MAAM,EACN,eAAe,EACf,KAAK,GACN,EAAE;IACD,MAAM,EAAE,YAAY,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf,+BAiBA"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { STATUS, ago } from "./theme.js";
4
+ /** Golden-signal strip (one row): working/waiting/idle/offline counts + oldest-unattended age.
5
+ * Pure chrome — reads mesh.signals straight, reuses STATUS colors/glyphs. */
6
+ export function Tiles({ counts, oldestWaitingTs, width, }) {
7
+ const order = ["working", "waiting", "idle", "offline"];
8
+ return (_jsx(Box, { width: width, paddingX: 1, children: _jsxs(Text, { wrap: "truncate-end", children: [order.map((k, i) => (_jsx(Text, { color: STATUS[k].color, children: (i > 0 ? " " : "") + STATUS[k].dot + " " + counts[k] + " " + STATUS[k].word }, k))), _jsx(Text, { dimColor: true, children: " oldest unattended " }), _jsx(Text, { color: oldestWaitingTs ? "yellow" : "gray", children: oldestWaitingTs ? ago(oldestWaitingTs) : "—" })] }) }));
9
+ }
10
+ //# sourceMappingURL=Tiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tiles.js","sourceRoot":"","sources":["../../../src/console/ui/Tiles.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEzC;8EAC8E;AAC9E,MAAM,UAAU,KAAK,CAAC,EACpB,MAAM,EACN,eAAe,EACf,KAAK,GAKN;IACC,MAAM,KAAK,GAA2B,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAChF,OAAO,CACL,KAAC,GAAG,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,YAC5B,MAAC,IAAI,IAAC,IAAI,EAAC,cAAc,aACtB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnB,KAAC,IAAI,IAAS,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,YACjC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IADrE,CAAC,CAEL,CACR,CAAC,EACF,KAAC,IAAI,IAAC,QAAQ,kBAAE,0BAA0B,GAAQ,EAClD,KAAC,IAAI,IAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,YAC7C,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,GACxC,IACF,GACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { PresenceStatus } from "@cotal-ai/core";
2
+ export declare function agentColor(name: string): string;
3
+ export declare const STATUS: Record<PresenceStatus, {
4
+ dot: string;
5
+ color: string;
6
+ word: string;
7
+ }>;
8
+ export declare function ago(epochMs: number): string;
9
+ export declare function fmtTime(epochMs: number): string;
10
+ export declare function wrapText(s: string, width: number): string[];
11
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/console/ui/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAWrD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS/C;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAKvF,CAAC;AAEF,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG3C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/C;AAID,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAyB3D"}
@@ -0,0 +1,63 @@
1
+ // Per-agent color: a stable name→hex hash. These are render.ts's 256-color palette
2
+ // indices converted to hex, so names read the same as the classic dashboard — and they
3
+ // avoid the status hues (green/yellow/gray) so a name never looks like a status.
4
+ const PALETTE = [
5
+ "#00afff", "#ff8700", "#d75fd7", "#5fd787", "#ffaf00", "#87afff", "#ff5f5f",
6
+ "#afd787", "#af87ff", "#d7af87", "#87d7ff", "#ffd787", "#5fafff", "#ff875f",
7
+ ];
8
+ const colorCache = new Map();
9
+ export function agentColor(name) {
10
+ let hex = colorCache.get(name);
11
+ if (hex === undefined) {
12
+ let h = 0;
13
+ for (const ch of name)
14
+ h = (h * 31 + ch.charCodeAt(0)) >>> 0;
15
+ hex = PALETTE[h % PALETTE.length];
16
+ colorCache.set(name, hex);
17
+ }
18
+ return hex;
19
+ }
20
+ export const STATUS = {
21
+ working: { dot: "●", color: "green", word: "working" },
22
+ waiting: { dot: "◐", color: "yellow", word: "waiting" },
23
+ idle: { dot: "○", color: "gray", word: "idle" },
24
+ offline: { dot: "⨯", color: "gray", word: "offline" },
25
+ };
26
+ export function ago(epochMs) {
27
+ const s = Math.max(0, Math.round((Date.now() - epochMs) / 1000));
28
+ return s < 60 ? `${s}s` : `${Math.round(s / 60)}m`;
29
+ }
30
+ export function fmtTime(epochMs) {
31
+ return new Date(epochMs).toLocaleTimeString();
32
+ }
33
+ // Greedy word-wrap to a column width; hard-splits a single word longer than width.
34
+ // Honors embedded newlines and always returns at least one line.
35
+ export function wrapText(s, width) {
36
+ const w = Math.max(4, width);
37
+ const out = [];
38
+ for (const rawLine of s.split(/\r?\n/)) {
39
+ let cur = "";
40
+ for (const word of rawLine.split(" ")) {
41
+ let token = word;
42
+ while (token.length > w) {
43
+ if (cur) {
44
+ out.push(cur);
45
+ cur = "";
46
+ }
47
+ out.push(token.slice(0, w));
48
+ token = token.slice(w);
49
+ }
50
+ if (cur === "")
51
+ cur = token;
52
+ else if (cur.length + 1 + token.length <= w)
53
+ cur += " " + token;
54
+ else {
55
+ out.push(cur);
56
+ cur = token;
57
+ }
58
+ }
59
+ out.push(cur);
60
+ }
61
+ return out.length ? out : [""];
62
+ }
63
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/console/ui/theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Presence } from "@cotal-ai/core";
2
+ import { type TopoGraph } from "./model.js";
3
+ /**
4
+ * Variant ③ — ring node-link map. Agents sit on an ellipse (name-sorted, so positions
5
+ * don't churn when statuses flip); channels/roles stack in a hub box at the center.
6
+ * Edges rasterize into the char grid, weighted by recency (hot = bold color, stale =
7
+ * dotted dim, gone after ~60s). j/k selects a node and spotlights its incident edges.
8
+ */
9
+ export declare function RingMap({ graph, agents, width, height, active, onOpenAgent, }: {
10
+ graph: TopoGraph;
11
+ agents: Presence[];
12
+ width: number;
13
+ height: number;
14
+ active: boolean;
15
+ onOpenAgent: (p: Presence) => void;
16
+ }): import("react").JSX.Element;
17
+ //# sourceMappingURL=Map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Map.d.ts","sourceRoot":"","sources":["../../../../src/console/ui/topo/Map.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAwB,KAAK,SAAS,EAAiB,MAAM,YAAY,CAAC;AA6BjF;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,MAAM,EACN,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;CACpC,+BAmIA"}
@@ -0,0 +1,158 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Box, Text, useInput } from "ink";
4
+ import { agentColor, STATUS } from "../theme.js";
5
+ import { heatLevel, nodeLabel } from "./model.js";
6
+ import { blankGrid, stamp, toSegments } from "./raster.js";
7
+ const MIN_W = 60;
8
+ const MIN_H = 14;
9
+ const trunc = (s, n) => (s.length > n ? s.slice(0, Math.max(1, n - 1)) + "…" : s);
10
+ /** Bresenham walk from (x0,y0) to (x1,y1), each step carrying its slope glyph. */
11
+ function walk(x0, y0, x1, y1) {
12
+ const dx = Math.abs(x1 - x0);
13
+ const sx = x0 < x1 ? 1 : -1;
14
+ const dy = -Math.abs(y1 - y0);
15
+ const sy = y0 < y1 ? 1 : -1;
16
+ let err = dx + dy;
17
+ let x = x0;
18
+ let y = y0;
19
+ const pts = [];
20
+ while (!(x === x1 && y === y1) && pts.length < 500) {
21
+ const e2 = 2 * err;
22
+ let mx = false;
23
+ let my = false;
24
+ if (e2 >= dy)
25
+ (err += dy), (x += sx), (mx = true);
26
+ if (e2 <= dx)
27
+ (err += dx), (y += sy), (my = true);
28
+ pts.push({ x, y, ch: mx && my ? (sx === sy ? "╲" : "╱") : mx ? "─" : "│" });
29
+ }
30
+ return pts;
31
+ }
32
+ /**
33
+ * Variant ③ — ring node-link map. Agents sit on an ellipse (name-sorted, so positions
34
+ * don't churn when statuses flip); channels/roles stack in a hub box at the center.
35
+ * Edges rasterize into the char grid, weighted by recency (hot = bold color, stale =
36
+ * dotted dim, gone after ~60s). j/k selects a node and spotlights its incident edges.
37
+ */
38
+ export function RingMap({ graph, agents, width, height, active, onOpenAgent, }) {
39
+ const ring = graph.nodes.filter((n) => n.kind === "agent").sort((a, b) => a.name.localeCompare(b.name));
40
+ const hubs = graph.nodes.filter((n) => n.kind !== "agent");
41
+ const selectable = [...ring, ...hubs];
42
+ const [selIdx, setSelIdx] = useState(-1); // -1 = nothing spotlighted
43
+ const sel = selIdx >= 0 && selIdx < selectable.length ? selectable[selIdx] : undefined;
44
+ useInput((input, key) => {
45
+ const n = selectable.length;
46
+ if (!n)
47
+ return;
48
+ if (key.downArrow || input === "j")
49
+ setSelIdx((s) => (s + 1) % n);
50
+ else if (key.upArrow || input === "k")
51
+ setSelIdx((s) => (s <= 0 ? n - 1 : s - 1));
52
+ else if (key.return && sel?.kind === "agent") {
53
+ const p = agents.find((a) => a.card.name === sel.name);
54
+ if (p)
55
+ onOpenAgent(p);
56
+ }
57
+ }, { isActive: active });
58
+ if (width < MIN_W || height < MIN_H)
59
+ return (_jsx(Box, { flexGrow: 1, alignItems: "center", justifyContent: "center", children: _jsx(Text, { dimColor: true, children: "(terminal too small for the map \u2014 try \u2461 matrix)" }) }));
60
+ if (!ring.length)
61
+ return _jsx(Text, { dimColor: true, children: "(no agents in the space yet)" });
62
+ // Geometry: labels live on an ellipse, the hub box at the center.
63
+ const labelOf = (n) => {
64
+ const role = n.role && n.role !== n.name ? "/" + n.role : "";
65
+ return STATUS[n.status ?? "offline"].dot + " " + trunc(n.name + role, 22);
66
+ };
67
+ const maxLabel = Math.max(...ring.map((n) => labelOf(n).length));
68
+ const cx = Math.floor(width / 2);
69
+ const cy = Math.floor(height / 2);
70
+ const rx = Math.max(8, Math.floor(width / 2) - Math.ceil(maxLabel / 2) - 1);
71
+ const ry = Math.max(3, Math.floor((height - 2) / 2) - 1);
72
+ const pos = new Map();
73
+ ring.forEach((n, i) => {
74
+ const a = -Math.PI / 2 + (2 * Math.PI * i) / ring.length;
75
+ pos.set(n.key, {
76
+ x: Math.max(1, Math.min(width - 2, Math.round(cx + rx * Math.cos(a)))),
77
+ y: Math.max(0, Math.min(height - 1, Math.round(cy + ry * Math.sin(a)))),
78
+ });
79
+ });
80
+ const hubW = hubs.length ? Math.max(...hubs.map((n) => nodeLabel(n).length)) + 4 : 0;
81
+ const hubH = hubs.length + 2;
82
+ const hubX = cx - Math.floor(hubW / 2);
83
+ const hubY = cy - Math.floor(hubH / 2);
84
+ const hubRow = (key) => hubY + 1 + hubs.findIndex((n) => n.key === key);
85
+ const grid = blankGrid(width, height);
86
+ // Edges — ascending by rate so hot traffic overdraws cool; spotlight the selection.
87
+ for (const e of graph.edges) {
88
+ let lvl = heatLevel(e.rate);
89
+ if (sel)
90
+ lvl = e.src === sel.key || e.dst === sel.key ? Math.max(lvl, 2) : lvl - 1;
91
+ if (lvl <= 0)
92
+ continue;
93
+ const srcNode = graph.byKey.get(e.src);
94
+ const from = pos.get(e.src);
95
+ if (!srcNode || !from)
96
+ continue;
97
+ let to;
98
+ let head;
99
+ if (graph.byKey.get(e.dst)?.kind !== "agent") {
100
+ // Into the hub box: aim at the hub's own line, stop at the nearer border.
101
+ const row = hubRow(e.dst);
102
+ if (from.x < hubX)
103
+ (to = { x: hubX - 1, y: row }), (head = "▶");
104
+ else if (from.x > hubX + hubW - 1)
105
+ (to = { x: hubX + hubW, y: row }), (head = "◀");
106
+ else
107
+ (to = { x: cx, y: from.y < cy ? hubY - 1 : hubY + hubH }), (head = from.y < cy ? "▼" : "▲");
108
+ }
109
+ else {
110
+ const p = pos.get(e.dst);
111
+ if (!p)
112
+ continue;
113
+ to = p;
114
+ const dx = to.x - from.x;
115
+ const dy = to.y - from.y;
116
+ head = Math.abs(dx) >= Math.abs(dy) ? (dx >= 0 ? "▶" : "◀") : dy >= 0 ? "▼" : "▲";
117
+ }
118
+ const style = lvl === 1 ? { dim: true } : { color: agentColor(srcNode.name), bold: lvl >= 3 };
119
+ const pts = walk(from.x, from.y, to.x, to.y);
120
+ pts.forEach((p, i) => {
121
+ if (p.y < 0 || p.y >= height)
122
+ return;
123
+ if (lvl === 1 && i % 2 === 1)
124
+ return; // stale edges go dotted
125
+ stamp(grid[p.y], p.x, i === pts.length - 1 ? head : p.ch, style);
126
+ });
127
+ }
128
+ // Hub box over the edges, labels over everything.
129
+ if (hubs.length) {
130
+ stamp(grid[hubY], hubX, "┌" + "─".repeat(hubW - 2) + "┐", { dim: true });
131
+ hubs.forEach((n, i) => {
132
+ const row = grid[hubY + 1 + i];
133
+ const selected = sel?.key === n.key;
134
+ stamp(row, hubX, "│", { dim: true });
135
+ stamp(row, hubX + hubW - 1, "│", { dim: true });
136
+ stamp(row, hubX + 2, nodeLabel(n).padEnd(hubW - 4), {
137
+ color: selected ? "cyan" : n.kind === "channel" ? "cyan" : "magenta",
138
+ inverse: selected,
139
+ bold: selected,
140
+ });
141
+ });
142
+ stamp(grid[hubY + hubH - 1], hubX, "└" + "─".repeat(hubW - 2) + "┘", { dim: true });
143
+ }
144
+ for (const n of ring) {
145
+ const p = pos.get(n.key);
146
+ const label = labelOf(n);
147
+ const x = Math.max(0, Math.min(width - label.length, p.x - Math.floor(label.length / 2)));
148
+ if (sel?.key === n.key) {
149
+ stamp(grid[p.y], x, label, { color: "cyan", inverse: true, bold: true });
150
+ }
151
+ else {
152
+ stamp(grid[p.y], x, label.slice(0, 1), { color: STATUS[n.status ?? "offline"].color });
153
+ stamp(grid[p.y], x + 1, label.slice(1), { color: agentColor(n.name), dim: n.lastTs === 0 });
154
+ }
155
+ }
156
+ return (_jsx(Box, { flexDirection: "column", children: grid.map((row, y) => (_jsx(Text, { wrap: "truncate-end", children: toSegments(row).map((s, i) => (_jsx(Text, { color: s.color, dimColor: s.dim, bold: s.bold, inverse: s.inverse, children: s.text }, i))) }, y))) }));
157
+ }
158
+ //# sourceMappingURL=Map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Map.js","sourceRoot":"","sources":["../../../../src/console/ui/topo/Map.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { FeedEntry } from "../../mesh.js";
2
+ import { type TopoGraph } from "./model.js";
3
+ /**
4
+ * Variant ② — adjacency heat matrix. Rows = agents (senders), columns = anything with
5
+ * inbound traffic in the window (agents, #channels, @roles). A cell is heat-glyph + count,
6
+ * brightness by recency; the footer inspects the selected pair's recent messages.
7
+ */
8
+ export declare function Matrix({ feed, graph, width, height, active, onOpenMessage, }: {
9
+ feed: FeedEntry[];
10
+ graph: TopoGraph;
11
+ width: number;
12
+ height: number;
13
+ active: boolean;
14
+ onOpenMessage: (e: FeedEntry) => void;
15
+ }): import("react").JSX.Element;
16
+ //# sourceMappingURL=Matrix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Matrix.d.ts","sourceRoot":"","sources":["../../../../src/console/ui/topo/Matrix.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAA0D,KAAK,SAAS,EAAiB,MAAM,YAAY,CAAC;AAWnH;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,MAAM,EACN,MAAM,EACN,aAAa,GACd,EAAE;IACD,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;CACvC,+BA2HA"}
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Box, Text, useInput } from "ink";
4
+ import { agentColor, ago, fmtTime, STATUS } from "../theme.js";
5
+ import { HEAT, heatLevel, edgeEntries, nodeLabel } from "./model.js";
6
+ const CELL_W = 7;
7
+ const FOOTER_H = 3; // separator/summary + 2 recent messages
8
+ const trunc = (s, n) => (s.length > n ? s.slice(0, Math.max(1, n - 1)) + "…" : s);
9
+ function hubColor(n) {
10
+ return n.kind === "channel" ? "cyan" : n.kind === "service" ? "magenta" : agentColor(n.name);
11
+ }
12
+ /**
13
+ * Variant ② — adjacency heat matrix. Rows = agents (senders), columns = anything with
14
+ * inbound traffic in the window (agents, #channels, @roles). A cell is heat-glyph + count,
15
+ * brightness by recency; the footer inspects the selected pair's recent messages.
16
+ */
17
+ export function Matrix({ feed, graph, width, height, active, onOpenMessage, }) {
18
+ const rows = graph.nodes.filter((n) => n.kind === "agent");
19
+ const inbound = new Set(graph.edges.map((e) => e.dst));
20
+ const cols = graph.nodes.filter((n) => inbound.has(n.key));
21
+ const edgeOf = new Map(graph.edges.map((e) => [e.key, e]));
22
+ const [cur, setCur] = useState({ r: 0, c: 0 });
23
+ const r = Math.min(cur.r, Math.max(0, rows.length - 1));
24
+ const c = Math.min(cur.c, Math.max(0, cols.length - 1));
25
+ const selEdge = rows[r] && cols[c] ? edgeOf.get(rows[r].key + "→" + cols[c].key) : undefined;
26
+ useInput((input, key) => {
27
+ if (key.upArrow || input === "k")
28
+ setCur((s) => ({ ...s, r: Math.max(0, r - 1) }));
29
+ else if (key.downArrow || input === "j")
30
+ setCur((s) => ({ ...s, r: Math.min(rows.length - 1, r + 1) }));
31
+ else if (key.leftArrow || input === "h")
32
+ setCur((s) => ({ ...s, c: Math.max(0, c - 1) }));
33
+ else if (key.rightArrow || input === "l")
34
+ setCur((s) => ({ ...s, c: Math.min(cols.length - 1, c + 1) }));
35
+ else if (key.return && selEdge) {
36
+ const entries = edgeEntries(feed, selEdge, graph);
37
+ if (entries.length)
38
+ onOpenMessage(entries[entries.length - 1]);
39
+ }
40
+ }, { isActive: active });
41
+ if (!rows.length || !cols.length)
42
+ return _jsx(Text, { dimColor: true, children: "(no traffic in the window \u2014 waiting for peer messages)" });
43
+ // Viewports: rows under header + footer; columns follow the cursor.
44
+ const labelW = Math.min(18, Math.max(10, ...rows.map((n) => n.name.length + 2)) + 1);
45
+ const visCols = Math.max(1, Math.floor((width - labelW) / CELL_W));
46
+ const colTop = Math.max(0, Math.min(c - visCols + 1, cols.length - visCols));
47
+ const visRows = Math.max(1, height - 1 - FOOTER_H);
48
+ const rowTop = Math.max(0, Math.min(r - visRows + 1, rows.length - visRows));
49
+ const shownCols = cols.slice(colTop, colTop + visCols);
50
+ const shownRows = rows.slice(rowTop, rowTop + visRows);
51
+ const moreCols = cols.length - colTop - shownCols.length;
52
+ const cellStyle = (e) => {
53
+ const age = graph.now - e.lastTs;
54
+ return age < 10_000 ? { bold: true } : age < 30_000 ? {} : { dimColor: true };
55
+ };
56
+ const footer = selEdge ? ((() => {
57
+ const entries = edgeEntries(feed, selEdge, graph).slice(-2);
58
+ const srcN = graph.byKey.get(selEdge.src);
59
+ const dstN = graph.byKey.get(selEdge.dst);
60
+ const head = `── ${srcN ? nodeLabel(srcN) : "?"} → ${dstN ? nodeLabel(dstN) : "?"} · ${selEdge.count} msgs · last ${ago(selEdge.lastTs)} `;
61
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { wrap: "truncate-end", children: _jsx(Text, { dimColor: true, children: head.padEnd(width, "─") }) }), entries.map((e) => (_jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { dimColor: true, children: " " + fmtTime(e.ts) + " " }), _jsx(Text, { children: e.text })] }, e.id)))] }));
62
+ })()) : (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { dimColor: true, wrap: "truncate-end", children: "".padEnd(width, "─") }), _jsx(Text, { dimColor: true, children: "(no traffic on this pair \u2014 h/j/k/l to move, Enter opens the latest message)" })] }));
63
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { dimColor: true, children: "from \\ to".padEnd(labelW) }), shownCols.map((n) => (_jsx(Text, { color: hubColor(n), children: trunc(nodeLabel(n), CELL_W - 1).padEnd(CELL_W) }, n.key))), moreCols > 0 ? _jsx(Text, { dimColor: true, children: "→+" + moreCols }) : null] }), shownRows.map((row, ri) => {
64
+ const glyph = STATUS[row.status ?? "offline"];
65
+ return (_jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: glyph.color, children: glyph.dot + " " }), _jsx(Text, { color: agentColor(row.name), children: trunc(row.name, labelW - 3).padEnd(labelW - 2) }), shownCols.map((col, ci) => {
66
+ const selected = active && rowTop + ri === r && colTop + ci === c;
67
+ if (row.key === col.key)
68
+ return (_jsx(Text, { dimColor: true, inverse: selected, children: "".padEnd(CELL_W) }, col.key));
69
+ const e = edgeOf.get(row.key + "→" + col.key);
70
+ if (!e)
71
+ return (_jsx(Text, { dimColor: true, inverse: selected, color: selected ? "cyan" : undefined, children: " ·".padEnd(CELL_W) }, col.key));
72
+ const lvl = heatLevel(e.rate);
73
+ const txt = (HEAT[Math.max(1, lvl)] + " " + e.count).padEnd(CELL_W);
74
+ if (selected)
75
+ return (_jsx(Text, { inverse: true, bold: true, color: "cyan", children: txt }, col.key));
76
+ return (_jsx(Text, { ...cellStyle(e), children: txt }, col.key));
77
+ })] }, row.key));
78
+ }), _jsx(Box, { flexGrow: 1 }), footer] }));
79
+ }
80
+ //# sourceMappingURL=Matrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Matrix.js","sourceRoot":"","sources":["../../../../src/console/ui/topo/Matrix.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { FeedEntry } from "../../mesh.js";
2
+ import { type TopoGraph } from "./model.js";
3
+ /**
4
+ * Variant ① — sequence/swimlanes. One lane per active agent, time flowing down; each
5
+ * message is a row with an arrow spanning sender → target lane (`├──▶`), channel/role
6
+ * sends running to the right edge (`├──▶` + label in the annotation column). Rows dim
7
+ * with age; surplus lanes fold into a `…+k` lane. j/k select, Enter opens the message.
8
+ */
9
+ export declare function Sequence({ feed, graph, width, height, active, onOpenMessage, }: {
10
+ feed: FeedEntry[];
11
+ graph: TopoGraph;
12
+ width: number;
13
+ height: number;
14
+ active: boolean;
15
+ onOpenMessage: (e: FeedEntry) => void;
16
+ }): import("react").JSX.Element;
17
+ //# sourceMappingURL=Sequence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sequence.d.ts","sourceRoot":"","sources":["../../../../src/console/ui/topo/Sequence.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,MAAM,EACN,MAAM,EACN,aAAa,GACd,EAAE;IACD,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;CACvC,+BA6HA"}