@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.
- package/dist/commands/console.d.ts +6 -0
- package/dist/commands/console.d.ts.map +1 -1
- package/dist/commands/console.js +83 -24
- package/dist/commands/console.js.map +1 -1
- package/dist/commands/demo.d.ts +2 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +162 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/feedback.d.ts +1 -0
- package/dist/commands/feedback.d.ts.map +1 -1
- package/dist/commands/feedback.js +87 -0
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/history.d.ts +4 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +48 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/join.d.ts.map +1 -1
- package/dist/commands/join.js +2 -2
- package/dist/commands/join.js.map +1 -1
- package/dist/commands/setup.d.ts +7 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +64 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +2 -2
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/watch.d.ts +2 -0
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +5 -61
- package/dist/commands/watch.js.map +1 -1
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +2 -2
- package/dist/commands/web.js.map +1 -1
- package/dist/console/app.d.ts +15 -0
- package/dist/console/app.d.ts.map +1 -0
- package/dist/console/app.js +240 -0
- package/dist/console/app.js.map +1 -0
- package/dist/console/commands.d.ts +27 -0
- package/dist/console/commands.d.ts.map +1 -0
- package/dist/console/commands.js +111 -0
- package/dist/console/commands.js.map +1 -0
- package/dist/console/mesh.d.ts +8 -0
- package/dist/console/mesh.d.ts.map +1 -0
- package/dist/console/mesh.js +26 -0
- package/dist/console/mesh.js.map +1 -0
- package/dist/console/root.d.ts +18 -0
- package/dist/console/root.d.ts.map +1 -0
- package/dist/console/root.js +36 -0
- package/dist/console/root.js.map +1 -0
- package/dist/console/ui/CommandPalette.d.ts +15 -0
- package/dist/console/ui/CommandPalette.d.ts.map +1 -0
- package/dist/console/ui/CommandPalette.js +81 -0
- package/dist/console/ui/CommandPalette.js.map +1 -0
- package/dist/console/ui/Confirm.d.ts +19 -0
- package/dist/console/ui/Confirm.d.ts.map +1 -0
- package/dist/console/ui/Confirm.js +32 -0
- package/dist/console/ui/Confirm.js.map +1 -0
- package/dist/console/ui/Detail.d.ts +18 -0
- package/dist/console/ui/Detail.d.ts.map +1 -0
- package/dist/console/ui/Detail.js +43 -0
- package/dist/console/ui/Detail.js.map +1 -0
- package/dist/console/ui/Dm.d.ts +15 -0
- package/dist/console/ui/Dm.d.ts.map +1 -0
- package/dist/console/ui/Dm.js +135 -0
- package/dist/console/ui/Dm.js.map +1 -0
- package/dist/console/ui/Feed.d.ts +20 -0
- package/dist/console/ui/Feed.d.ts.map +1 -0
- package/dist/console/ui/Feed.js +141 -0
- package/dist/console/ui/Feed.js.map +1 -0
- package/dist/console/ui/Help.d.ts +8 -0
- package/dist/console/ui/Help.d.ts.map +1 -0
- package/dist/console/ui/Help.js +55 -0
- package/dist/console/ui/Help.js.map +1 -0
- package/dist/console/ui/NeedsYou.d.ts +14 -0
- package/dist/console/ui/NeedsYou.d.ts.map +1 -0
- package/dist/console/ui/NeedsYou.js +36 -0
- package/dist/console/ui/NeedsYou.js.map +1 -0
- package/dist/console/ui/Prompt.d.ts +12 -0
- package/dist/console/ui/Prompt.d.ts.map +1 -0
- package/dist/console/ui/Prompt.js +19 -0
- package/dist/console/ui/Prompt.js.map +1 -0
- package/dist/console/ui/Roster.d.ts +17 -0
- package/dist/console/ui/Roster.d.ts.map +1 -0
- package/dist/console/ui/Roster.js +52 -0
- package/dist/console/ui/Roster.js.map +1 -0
- package/dist/console/ui/Search.d.ts +12 -0
- package/dist/console/ui/Search.d.ts.map +1 -0
- package/dist/console/ui/Search.js +19 -0
- package/dist/console/ui/Search.js.map +1 -0
- package/dist/console/ui/SpacePicker.d.ts +10 -0
- package/dist/console/ui/SpacePicker.d.ts.map +1 -0
- package/dist/console/ui/SpacePicker.js +77 -0
- package/dist/console/ui/SpacePicker.js.map +1 -0
- package/dist/console/ui/StatusBar.d.ts +14 -0
- package/dist/console/ui/StatusBar.d.ts.map +1 -0
- package/dist/console/ui/StatusBar.js +18 -0
- package/dist/console/ui/StatusBar.js.map +1 -0
- package/dist/console/ui/Tabs.d.ts +8 -0
- package/dist/console/ui/Tabs.d.ts.map +1 -0
- package/dist/console/ui/Tabs.js +12 -0
- package/dist/console/ui/Tabs.js.map +1 -0
- package/dist/console/ui/Tiles.d.ts +9 -0
- package/dist/console/ui/Tiles.d.ts.map +1 -0
- package/dist/console/ui/Tiles.js +10 -0
- package/dist/console/ui/Tiles.js.map +1 -0
- package/dist/console/ui/theme.d.ts +11 -0
- package/dist/console/ui/theme.d.ts.map +1 -0
- package/dist/console/ui/theme.js +63 -0
- package/dist/console/ui/theme.js.map +1 -0
- package/dist/console/ui/topo/Map.d.ts +17 -0
- package/dist/console/ui/topo/Map.d.ts.map +1 -0
- package/dist/console/ui/topo/Map.js +158 -0
- package/dist/console/ui/topo/Map.js.map +1 -0
- package/dist/console/ui/topo/Matrix.d.ts +16 -0
- package/dist/console/ui/topo/Matrix.d.ts.map +1 -0
- package/dist/console/ui/topo/Matrix.js +80 -0
- package/dist/console/ui/topo/Matrix.js.map +1 -0
- package/dist/console/ui/topo/Sequence.d.ts +17 -0
- package/dist/console/ui/topo/Sequence.d.ts.map +1 -0
- package/dist/console/ui/topo/Sequence.js +117 -0
- package/dist/console/ui/topo/Sequence.js.map +1 -0
- package/dist/console/ui/topo/Topo.d.ts +20 -0
- package/dist/console/ui/topo/Topo.d.ts.map +1 -0
- package/dist/console/ui/topo/Topo.js +30 -0
- package/dist/console/ui/topo/Topo.js.map +1 -0
- package/dist/console/ui/topo/model.d.ts +51 -0
- package/dist/console/ui/topo/model.d.ts.map +1 -0
- package/dist/console/ui/topo/model.js +113 -0
- package/dist/console/ui/topo/model.js.map +1 -0
- package/dist/console/ui/topo/raster.d.ts +18 -0
- package/dist/console/ui/topo/raster.d.ts.map +1 -0
- package/dist/console/ui/topo/raster.js +36 -0
- package/dist/console/ui/topo/raster.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -2
- package/dist/index.js.map +1 -1
- package/dist/render.d.ts +4 -29
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +0 -0
- package/dist/render.js.map +1 -1
- package/dist/view/mesh-view.d.ts +138 -0
- package/dist/view/mesh-view.d.ts.map +1 -0
- package/dist/view/mesh-view.js +346 -0
- package/dist/view/mesh-view.js.map +1 -0
- 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":"AAEA,mFAAmF;AACnF,uFAAuF;AACvF,iFAAiF;AACjF,MAAM,OAAO,GAAG;IACd,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;IAC3E,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;CAC5E,CAAC;AACF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE7C,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,EAAE,IAAI,IAAI;YAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7D,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAyE;IAC1F,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;IACtD,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IACvD,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC/C,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;CACtD,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,OAAe;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAC;AAChD,CAAC;AAED,mFAAmF;AACnF,iEAAiE;AACjE,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,KAAa;IAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,IAAI,KAAK,GAAG,IAAI,CAAC;YACjB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,GAAG,EAAE,CAAC;oBACR,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACd,GAAG,GAAG,EAAE,CAAC;gBACX,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5B,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,GAAG,KAAK,EAAE;gBAAE,GAAG,GAAG,KAAK,CAAC;iBACvB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC;gBAAE,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC;iBAC3D,CAAC;gBACJ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACd,GAAG,GAAG,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -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"}
|