@cotal-ai/cli 0.1.3 → 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 (145) 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/feedback.d.ts +1 -0
  10. package/dist/commands/feedback.d.ts.map +1 -1
  11. package/dist/commands/feedback.js +87 -0
  12. package/dist/commands/feedback.js.map +1 -1
  13. package/dist/commands/history.d.ts +4 -0
  14. package/dist/commands/history.d.ts.map +1 -0
  15. package/dist/commands/history.js +48 -0
  16. package/dist/commands/history.js.map +1 -0
  17. package/dist/commands/join.d.ts.map +1 -1
  18. package/dist/commands/join.js +2 -2
  19. package/dist/commands/join.js.map +1 -1
  20. package/dist/commands/setup.d.ts +7 -0
  21. package/dist/commands/setup.d.ts.map +1 -0
  22. package/dist/commands/setup.js +64 -0
  23. package/dist/commands/setup.js.map +1 -0
  24. package/dist/commands/up.d.ts.map +1 -1
  25. package/dist/commands/up.js +2 -2
  26. package/dist/commands/up.js.map +1 -1
  27. package/dist/commands/watch.d.ts +2 -0
  28. package/dist/commands/watch.d.ts.map +1 -1
  29. package/dist/commands/watch.js +5 -61
  30. package/dist/commands/watch.js.map +1 -1
  31. package/dist/commands/web.d.ts.map +1 -1
  32. package/dist/commands/web.js +2 -2
  33. package/dist/commands/web.js.map +1 -1
  34. package/dist/console/app.d.ts +15 -0
  35. package/dist/console/app.d.ts.map +1 -0
  36. package/dist/console/app.js +240 -0
  37. package/dist/console/app.js.map +1 -0
  38. package/dist/console/commands.d.ts +27 -0
  39. package/dist/console/commands.d.ts.map +1 -0
  40. package/dist/console/commands.js +111 -0
  41. package/dist/console/commands.js.map +1 -0
  42. package/dist/console/mesh.d.ts +8 -0
  43. package/dist/console/mesh.d.ts.map +1 -0
  44. package/dist/console/mesh.js +26 -0
  45. package/dist/console/mesh.js.map +1 -0
  46. package/dist/console/root.d.ts +18 -0
  47. package/dist/console/root.d.ts.map +1 -0
  48. package/dist/console/root.js +36 -0
  49. package/dist/console/root.js.map +1 -0
  50. package/dist/console/ui/CommandPalette.d.ts +15 -0
  51. package/dist/console/ui/CommandPalette.d.ts.map +1 -0
  52. package/dist/console/ui/CommandPalette.js +81 -0
  53. package/dist/console/ui/CommandPalette.js.map +1 -0
  54. package/dist/console/ui/Confirm.d.ts +19 -0
  55. package/dist/console/ui/Confirm.d.ts.map +1 -0
  56. package/dist/console/ui/Confirm.js +32 -0
  57. package/dist/console/ui/Confirm.js.map +1 -0
  58. package/dist/console/ui/Detail.d.ts +18 -0
  59. package/dist/console/ui/Detail.d.ts.map +1 -0
  60. package/dist/console/ui/Detail.js +43 -0
  61. package/dist/console/ui/Detail.js.map +1 -0
  62. package/dist/console/ui/Dm.d.ts +15 -0
  63. package/dist/console/ui/Dm.d.ts.map +1 -0
  64. package/dist/console/ui/Dm.js +135 -0
  65. package/dist/console/ui/Dm.js.map +1 -0
  66. package/dist/console/ui/Feed.d.ts +20 -0
  67. package/dist/console/ui/Feed.d.ts.map +1 -0
  68. package/dist/console/ui/Feed.js +141 -0
  69. package/dist/console/ui/Feed.js.map +1 -0
  70. package/dist/console/ui/Help.d.ts +8 -0
  71. package/dist/console/ui/Help.d.ts.map +1 -0
  72. package/dist/console/ui/Help.js +55 -0
  73. package/dist/console/ui/Help.js.map +1 -0
  74. package/dist/console/ui/NeedsYou.d.ts +14 -0
  75. package/dist/console/ui/NeedsYou.d.ts.map +1 -0
  76. package/dist/console/ui/NeedsYou.js +36 -0
  77. package/dist/console/ui/NeedsYou.js.map +1 -0
  78. package/dist/console/ui/Prompt.d.ts +12 -0
  79. package/dist/console/ui/Prompt.d.ts.map +1 -0
  80. package/dist/console/ui/Prompt.js +19 -0
  81. package/dist/console/ui/Prompt.js.map +1 -0
  82. package/dist/console/ui/Roster.d.ts +17 -0
  83. package/dist/console/ui/Roster.d.ts.map +1 -0
  84. package/dist/console/ui/Roster.js +52 -0
  85. package/dist/console/ui/Roster.js.map +1 -0
  86. package/dist/console/ui/Search.d.ts +12 -0
  87. package/dist/console/ui/Search.d.ts.map +1 -0
  88. package/dist/console/ui/Search.js +19 -0
  89. package/dist/console/ui/Search.js.map +1 -0
  90. package/dist/console/ui/SpacePicker.d.ts +10 -0
  91. package/dist/console/ui/SpacePicker.d.ts.map +1 -0
  92. package/dist/console/ui/SpacePicker.js +77 -0
  93. package/dist/console/ui/SpacePicker.js.map +1 -0
  94. package/dist/console/ui/StatusBar.d.ts +14 -0
  95. package/dist/console/ui/StatusBar.d.ts.map +1 -0
  96. package/dist/console/ui/StatusBar.js +18 -0
  97. package/dist/console/ui/StatusBar.js.map +1 -0
  98. package/dist/console/ui/Tabs.d.ts +8 -0
  99. package/dist/console/ui/Tabs.d.ts.map +1 -0
  100. package/dist/console/ui/Tabs.js +12 -0
  101. package/dist/console/ui/Tabs.js.map +1 -0
  102. package/dist/console/ui/Tiles.d.ts +9 -0
  103. package/dist/console/ui/Tiles.d.ts.map +1 -0
  104. package/dist/console/ui/Tiles.js +10 -0
  105. package/dist/console/ui/Tiles.js.map +1 -0
  106. package/dist/console/ui/theme.d.ts +11 -0
  107. package/dist/console/ui/theme.d.ts.map +1 -0
  108. package/dist/console/ui/theme.js +63 -0
  109. package/dist/console/ui/theme.js.map +1 -0
  110. package/dist/console/ui/topo/Map.d.ts +17 -0
  111. package/dist/console/ui/topo/Map.d.ts.map +1 -0
  112. package/dist/console/ui/topo/Map.js +158 -0
  113. package/dist/console/ui/topo/Map.js.map +1 -0
  114. package/dist/console/ui/topo/Matrix.d.ts +16 -0
  115. package/dist/console/ui/topo/Matrix.d.ts.map +1 -0
  116. package/dist/console/ui/topo/Matrix.js +80 -0
  117. package/dist/console/ui/topo/Matrix.js.map +1 -0
  118. package/dist/console/ui/topo/Sequence.d.ts +17 -0
  119. package/dist/console/ui/topo/Sequence.d.ts.map +1 -0
  120. package/dist/console/ui/topo/Sequence.js +117 -0
  121. package/dist/console/ui/topo/Sequence.js.map +1 -0
  122. package/dist/console/ui/topo/Topo.d.ts +20 -0
  123. package/dist/console/ui/topo/Topo.d.ts.map +1 -0
  124. package/dist/console/ui/topo/Topo.js +30 -0
  125. package/dist/console/ui/topo/Topo.js.map +1 -0
  126. package/dist/console/ui/topo/model.d.ts +51 -0
  127. package/dist/console/ui/topo/model.d.ts.map +1 -0
  128. package/dist/console/ui/topo/model.js +113 -0
  129. package/dist/console/ui/topo/model.js.map +1 -0
  130. package/dist/console/ui/topo/raster.d.ts +18 -0
  131. package/dist/console/ui/topo/raster.d.ts.map +1 -0
  132. package/dist/console/ui/topo/raster.js +36 -0
  133. package/dist/console/ui/topo/raster.js.map +1 -0
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +26 -2
  136. package/dist/index.js.map +1 -1
  137. package/dist/render.d.ts +4 -29
  138. package/dist/render.d.ts.map +1 -1
  139. package/dist/render.js +0 -0
  140. package/dist/render.js.map +1 -1
  141. package/dist/view/mesh-view.d.ts +138 -0
  142. package/dist/view/mesh-view.d.ts.map +1 -0
  143. package/dist/view/mesh-view.js +346 -0
  144. package/dist/view/mesh-view.js.map +1 -0
  145. package/package.json +7 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Roster.js","sourceRoot":"","sources":["../../../src/console/ui/Roster.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** A one-line search/filter input shown above the status bar. While `active` it owns input
2
+ * (type to filter live, Backspace edits, Enter applies + closes, Esc clears + closes). When a
3
+ * query persists but the input is closed it shows as an active filter the global Esc can clear. */
4
+ export declare function Search({ query, active, width, onChange, onSubmit, onCancel, }: {
5
+ query: string;
6
+ active: boolean;
7
+ width: number;
8
+ onChange: (q: string) => void;
9
+ onSubmit: () => void;
10
+ onCancel: () => void;
11
+ }): import("react").JSX.Element;
12
+ //# sourceMappingURL=Search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Search.d.ts","sourceRoot":"","sources":["../../../src/console/ui/Search.tsx"],"names":[],"mappings":"AAEA;;oGAEoG;AACpG,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,+BAmBA"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from "ink";
3
+ /** A one-line search/filter input shown above the status bar. While `active` it owns input
4
+ * (type to filter live, Backspace edits, Enter applies + closes, Esc clears + closes). When a
5
+ * query persists but the input is closed it shows as an active filter the global Esc can clear. */
6
+ export function Search({ query, active, width, onChange, onSubmit, onCancel, }) {
7
+ useInput((input, key) => {
8
+ if (key.escape)
9
+ return onCancel();
10
+ if (key.return)
11
+ return onSubmit();
12
+ if (key.backspace || key.delete)
13
+ return onChange(query.slice(0, -1));
14
+ if (input && !key.ctrl && !key.meta)
15
+ onChange(query + input);
16
+ }, { isActive: active });
17
+ return (_jsx(Box, { width: width, paddingX: 1, children: _jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: "yellow", children: "/ " }), _jsx(Text, { children: query }), active ? _jsx(Text, { inverse: true, children: " " }) : _jsx(Text, { dimColor: true, children: " (Esc clears · / edits)" })] }) }));
18
+ }
19
+ //# sourceMappingURL=Search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Search.js","sourceRoot":"","sources":["../../../src/console/ui/Search.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAE1C;;oGAEoG;AACpG,MAAM,UAAU,MAAM,CAAC,EACrB,KAAK,EACL,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,GAQT;IACC,QAAQ,CACN,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,QAAQ,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,QAAQ,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IAC/D,CAAC,EACD,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;IACF,OAAO,CACL,KAAC,GAAG,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,YAC5B,MAAC,IAAI,IAAC,IAAI,EAAC,cAAc,aACvB,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,mBAAU,EAC9B,KAAC,IAAI,cAAE,KAAK,GAAQ,EACnB,MAAM,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,OAAO,wBAAS,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,0BAA0B,GAAQ,IAChF,GACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** The admin landing view: an overview of every space on the server (agents present, channels,
2
+ * messages) with a selection cursor. Enter drops into that space's console; `r` re-enumerates.
3
+ * Self-sizing (mirrors App) so the command just renders it. See docs/protocol-view.md. */
4
+ export declare function SpacePicker({ server, creds, canWrite, onSelect, }: {
5
+ server: string;
6
+ creds?: string;
7
+ canWrite?: boolean;
8
+ onSelect: (space: string) => void;
9
+ }): import("react").JSX.Element;
10
+ //# sourceMappingURL=SpacePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpacePicker.d.ts","sourceRoot":"","sources":["../../../src/console/ui/SpacePicker.tsx"],"names":[],"mappings":"AAMA;;2FAE2F;AAC3F,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,+BAoGA"}
@@ -0,0 +1,77 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import { Box, Text, useApp, useInput, useStdout } from "ink";
4
+ import { listSpaces, deleteSpace } from "@cotal-ai/core";
5
+ import { agentColor } from "./theme.js";
6
+ import { Confirm } from "./Confirm.js";
7
+ /** The admin landing view: an overview of every space on the server (agents present, channels,
8
+ * messages) with a selection cursor. Enter drops into that space's console; `r` re-enumerates.
9
+ * Self-sizing (mirrors App) so the command just renders it. See docs/protocol-view.md. */
10
+ export function SpacePicker({ server, creds, canWrite, onSelect, }) {
11
+ const { exit } = useApp();
12
+ const { stdout } = useStdout();
13
+ const [size, setSize] = useState({ cols: stdout.columns || 80, rows: stdout.rows || 24 });
14
+ useEffect(() => {
15
+ const onResize = () => setSize({ cols: stdout.columns || 80, rows: stdout.rows || 24 });
16
+ stdout.on("resize", onResize);
17
+ return () => {
18
+ stdout.off("resize", onResize);
19
+ };
20
+ }, [stdout]);
21
+ const [spaces, setSpaces] = useState(null); // null = loading
22
+ const [error, setError] = useState();
23
+ const [sel, setSel] = useState(0);
24
+ const [nonce, setNonce] = useState(0); // bump to re-enumerate
25
+ const [del, setDel] = useState(null); // space pending deletion
26
+ useEffect(() => {
27
+ let alive = true;
28
+ setSpaces(null);
29
+ setError(undefined);
30
+ listSpaces({ servers: server, creds })
31
+ .then((s) => alive && setSpaces(s))
32
+ .catch((e) => {
33
+ if (!alive)
34
+ return;
35
+ setSpaces([]);
36
+ setError(e.message);
37
+ });
38
+ return () => {
39
+ alive = false;
40
+ };
41
+ }, [server, creds, nonce]);
42
+ const list = spaces ?? [];
43
+ const selClamped = Math.min(sel, Math.max(0, list.length - 1));
44
+ useInput((input, key) => {
45
+ if (input === "q")
46
+ return exit();
47
+ if (input === "r")
48
+ return setNonce((n) => n + 1);
49
+ if (input === "D" && canWrite && list.length)
50
+ return setDel(list[selClamped]);
51
+ if (key.upArrow || input === "k")
52
+ return setSel((v) => Math.max(0, v - 1));
53
+ if (key.downArrow || input === "j")
54
+ return setSel((v) => Math.min(list.length - 1, v + 1));
55
+ if (key.return && list.length)
56
+ return onSelect(list[selClamped].space);
57
+ }, { isActive: !del });
58
+ if (del)
59
+ return (_jsx(Confirm, { target: { kind: "deleteSpace", space: del.space }, width: size.cols, height: size.rows, onConfirm: () => {
60
+ const space = del.space;
61
+ setDel(null);
62
+ void deleteSpace({ servers: server, creds, space }).then(() => setNonce((n) => n + 1));
63
+ }, onCancel: () => setDel(null) }));
64
+ const capacity = Math.max(1, size.rows - 4); // border (2) + title (1) + footer (1)
65
+ let start = 0;
66
+ if (list.length > capacity)
67
+ start = Math.min(Math.max(0, selClamped - Math.floor(capacity / 2)), list.length - capacity);
68
+ const visible = list.slice(start, start + capacity);
69
+ return (_jsxs(Box, { flexDirection: "column", width: size.cols, height: size.rows, borderStyle: "round", borderColor: "cyan", paddingX: 2, children: [_jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { bold: true, color: "cyan", children: "spaces" }), _jsx(Text, { dimColor: true, children: " · " + server }), spaces && list.length ? _jsx(Text, { dimColor: true, children: " · " + list.length }) : null] }), _jsx(Box, { flexDirection: "column", flexGrow: 1, children: spaces === null ? (_jsx(Text, { dimColor: true, children: "loading spaces\u2026" })) : error ? (_jsx(Text, { color: "red", children: "! " + error })) : list.length === 0 ? (_jsx(Text, { dimColor: true, children: "no spaces found \u2014 run `cotal up` then `cotal demo`" })) : (visible.map((s, i) => _jsx(Row, { s: s, selected: start + i === selClamped }, s.space))) }), _jsxs(Text, { dimColor: true, wrap: "truncate-end", children: ["\u2191\u2193 select \u00B7 Enter open \u00B7 r refresh", canWrite ? " · D delete" : "", " \u00B7 q quit"] })] }));
70
+ }
71
+ function Row({ s, selected }) {
72
+ const stats = s.agents + " agents · " + s.channels + " ch · " + s.messages + " msgs";
73
+ if (selected)
74
+ return (_jsx(Text, { inverse: true, bold: true, color: "cyan", wrap: "truncate-end", children: "▸ " + s.space + " " + stats }));
75
+ return (_jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { dimColor: true, children: " " }), _jsx(Text, { color: agentColor(s.space), children: s.space }), _jsx(Text, { dimColor: true, children: " " + stats })] }));
76
+ }
77
+ //# sourceMappingURL=SpacePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpacePicker.js","sourceRoot":"","sources":["../../../src/console/ui/SpacePicker.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { MeshState } from "../mesh.js";
2
+ /** Bottom bar: connection + space + active channel + msgs/s, then context keybindings. */
3
+ export declare function StatusBar({ status, rates, activeChannel, agentCount, mode, railOpen, canBack, canWrite, width, }: {
4
+ status: MeshState["status"];
5
+ rates: MeshState["rates"];
6
+ activeChannel: string;
7
+ agentCount: number;
8
+ mode: "normal" | "dm" | "topo";
9
+ railOpen: boolean;
10
+ canBack?: boolean;
11
+ canWrite?: boolean;
12
+ width: number;
13
+ }): import("react").JSX.Element;
14
+ //# sourceMappingURL=StatusBar.d.ts.map
@@ -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"}