@cotal-ai/manager 0.16.0 → 0.18.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/README.md +2 -1
- package/dist/attach-endpoint.d.ts +53 -59
- package/dist/attach-endpoint.d.ts.map +1 -1
- package/dist/attach-endpoint.js +120 -244
- package/dist/attach-endpoint.js.map +1 -1
- package/dist/commands.js +88 -8
- package/dist/commands.js.map +1 -1
- package/dist/console/app.js +68 -30
- package/dist/console/index.html +3 -2
- package/dist/console/session-bundle.js +9736 -0
- package/dist/console-crypto-shim.d.ts +16 -0
- package/dist/console-crypto-shim.d.ts.map +1 -0
- package/dist/console-crypto-shim.js +20 -0
- package/dist/console-crypto-shim.js.map +1 -0
- package/dist/console-session-entry.d.ts +2 -0
- package/dist/console-session-entry.d.ts.map +1 -0
- package/dist/console-session-entry.js +26 -0
- package/dist/console-session-entry.js.map +1 -0
- package/dist/endpoint-evict.d.ts +29 -0
- package/dist/endpoint-evict.d.ts.map +1 -0
- package/dist/endpoint-evict.js +80 -0
- package/dist/endpoint-evict.js.map +1 -0
- package/dist/holder-liveness.d.ts +40 -0
- package/dist/holder-liveness.d.ts.map +1 -0
- package/dist/holder-liveness.js +98 -0
- package/dist/holder-liveness.js.map +1 -0
- package/dist/manager-service-contract.d.ts +132 -0
- package/dist/manager-service-contract.d.ts.map +1 -0
- package/dist/manager-service-contract.js +332 -0
- package/dist/manager-service-contract.js.map +1 -0
- package/dist/manager.d.ts +519 -22
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +2273 -262
- package/dist/manager.js.map +1 -1
- package/dist/reconcile-gate.d.ts +82 -0
- package/dist/reconcile-gate.d.ts.map +1 -0
- package/dist/reconcile-gate.js +118 -0
- package/dist/reconcile-gate.js.map +1 -0
- package/dist/runtime/pty.d.ts.map +1 -1
- package/dist/runtime/pty.js +15 -2
- package/dist/runtime/pty.js.map +1 -1
- package/dist/session/bridge.d.ts +63 -0
- package/dist/session/bridge.d.ts.map +1 -0
- package/dist/session/bridge.js +157 -0
- package/dist/session/bridge.js.map +1 -0
- package/dist/session/establish.d.ts +212 -0
- package/dist/session/establish.d.ts.map +1 -0
- package/dist/session/establish.js +174 -0
- package/dist/session/establish.js.map +1 -0
- package/dist/session/index.d.ts +12 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +15 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/plane.d.ts +120 -0
- package/dist/session/plane.d.ts.map +1 -0
- package/dist/session/plane.js +327 -0
- package/dist/session/plane.js.map +1 -0
- package/dist/static-lifecycle.d.ts +97 -0
- package/dist/static-lifecycle.d.ts.map +1 -0
- package/dist/static-lifecycle.js +262 -0
- package/dist/static-lifecycle.js.map +1 -0
- package/package.json +10 -6
package/dist/commands.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { connect } from "@nats-io/transport-node";
|
|
2
|
+
import { Kvm } from "@nats-io/kv";
|
|
3
|
+
import { isReachable, epAuthBucket, mintCreds, newIdentity, standaloneConnectOpts, DEFAULT_SERVER, DEFAULT_SPACE, registry, } from "@cotal-ai/core";
|
|
4
|
+
import { authDir, findCotalRoot, getSpaceAuth, loadManagerInstanceIdentity, soleSpaceOf, workspaceSecretStore } from "@cotal-ai/workspace";
|
|
3
5
|
import { Manager } from "./manager.js";
|
|
6
|
+
import { MANAGER_ENDPOINT } from "./manager-service-contract.js";
|
|
7
|
+
import { makeManagerEndpointEvictor } from "./endpoint-evict.js";
|
|
8
|
+
import { makeManagerHolderLivenessProbe } from "./holder-liveness.js";
|
|
9
|
+
import { GateReconcileRefused, reconcileEndpointGate } from "./reconcile-gate.js";
|
|
4
10
|
import { loadRoster } from "./roster.js";
|
|
5
11
|
import { loadLaunchSpec, materializePersona, launchAgentToStartOpts } from "./launch.js";
|
|
6
12
|
import {} from "./runtime/index.js";
|
|
@@ -45,9 +51,12 @@ async function runManager(args, defaultRuntime) {
|
|
|
45
51
|
process.exit(1);
|
|
46
52
|
}
|
|
47
53
|
const consolePort = v["console-port"] ? Number(v["console-port"]) : undefined;
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
|
|
54
|
+
// P2 item 6: the broker ws listener port (loopback) `cotal up` allocated — the console's mesh
|
|
55
|
+
// session client builds its wsUrl from it. Absent ⇒ no console session client (POST /session 503s).
|
|
56
|
+
const wsPort = v["ws-port"] ? Number(v["ws-port"]) : undefined;
|
|
57
|
+
// Where the console face binds. Absent → loopback, so a bare `cotal supervise` keeps a
|
|
58
|
+
// machine-local console. `cotal up` passes the address it bound the broker to when the operator
|
|
59
|
+
// asked for an exposed console; the terminal itself rides the mesh either way.
|
|
51
60
|
const attachHost = v["console-host"];
|
|
52
61
|
// Construction resolves the runtime (createRuntime) — which fails loud on an unusable env, e.g. the
|
|
53
62
|
// pty runtime under Bun. Render that as one actionable line, not a raw stack (this also lands in
|
|
@@ -62,6 +71,7 @@ async function runManager(args, defaultRuntime) {
|
|
|
62
71
|
servers: server,
|
|
63
72
|
runtime,
|
|
64
73
|
consolePort,
|
|
74
|
+
wsPort,
|
|
65
75
|
attachHost,
|
|
66
76
|
installedExtensions: true,
|
|
67
77
|
resumeAttemptId: v["resume-attempt"],
|
|
@@ -152,8 +162,64 @@ async function runManager(args, defaultRuntime) {
|
|
|
152
162
|
}
|
|
153
163
|
await new Promise(() => { });
|
|
154
164
|
}
|
|
155
|
-
/**
|
|
156
|
-
*
|
|
165
|
+
/**
|
|
166
|
+
* `cotal reconcile-gate` — the guarded exit from an issuance gate left FROZEN by a crashed
|
|
167
|
+
* re-registration whose freeze-holder is dead (#391).
|
|
168
|
+
*
|
|
169
|
+
* WHY THIS IS A CLI COMMAND AND NOT AN ADMIN VERB ON THE MANAGER ENDPOINT: the wedged state IS
|
|
170
|
+
* "the manager cannot complete registration", so anything the manager endpoint serves is
|
|
171
|
+
* unreachable in exactly the state it would exist to repair. This runs operator-locally against
|
|
172
|
+
* the auth KV and the delivery daemon, needing nothing from the wedged endpoint.
|
|
173
|
+
*
|
|
174
|
+
* Read-only until the guard passes: it observes and probes before it constructs the barrier.
|
|
175
|
+
*/
|
|
176
|
+
async function runReconcileGate(args) {
|
|
177
|
+
const v = args.values;
|
|
178
|
+
const space = spaceFor(v);
|
|
179
|
+
const servers = v.server ?? DEFAULT_SERVER;
|
|
180
|
+
const endpoint = v.endpoint ?? MANAGER_ENDPOINT;
|
|
181
|
+
const root = findCotalRoot();
|
|
182
|
+
// The instanceId is the manager's PERSISTED identity by default — the same one the crashed
|
|
183
|
+
// incarnation registered under. An explicit --instance covers a non-manager endpoint.
|
|
184
|
+
const instanceId = v.instance ?? loadManagerInstanceIdentity(root, space)?.instanceId;
|
|
185
|
+
if (!instanceId)
|
|
186
|
+
throw new Error(`no persisted manager instance identity under ${root} for space "${space}" — pass --instance <id> for a non-manager endpoint`);
|
|
187
|
+
const auth = await getSpaceAuth(workspaceSecretStore(root), space);
|
|
188
|
+
if (!auth)
|
|
189
|
+
throw new Error(`no space auth for "${space}" here — run this on the mesh root that holds the space's auth material`);
|
|
190
|
+
console.error(c.dim(`• reconciling the ${endpoint} issuance gate for ${instanceId} on ${servers} (space ${space})`));
|
|
191
|
+
const identity = newIdentity();
|
|
192
|
+
const creds = await mintCreds(auth, identity, "endpoint-serve-executor", {
|
|
193
|
+
endpointServeExecutor: { endpoint, instanceId },
|
|
194
|
+
});
|
|
195
|
+
const nc = await connect({ servers, ...standaloneConnectOpts({ creds, tls: false }), maxReconnectAttempts: 0 });
|
|
196
|
+
try {
|
|
197
|
+
const kv = await new Kvm(nc).open(epAuthBucket(space));
|
|
198
|
+
const report = await reconcileEndpointGate({
|
|
199
|
+
kv, space, endpoint, instanceId,
|
|
200
|
+
probeHolder: makeManagerHolderLivenessProbe({ space, servers, auth, log: (l) => console.error(c.dim(` ${l}`)) }),
|
|
201
|
+
evict: makeManagerEndpointEvictor({ space, servers, auth, log: (l) => console.error(c.dim(` ${l}`)) }),
|
|
202
|
+
log: (l) => console.error(` ${l}`),
|
|
203
|
+
});
|
|
204
|
+
console.log(c.green(`✓ ${endpoint}/${instanceId}: gate reopened at generation ${report.reopenedAtGeneration}`) +
|
|
205
|
+
` (processEpoch unchanged at ${report.before.processEpoch}; ${report.revoked.length} credential(s) revoked, ${report.evicted.length} holder(s) verify-evicted). Start the manager to let its normal takeover run.`);
|
|
206
|
+
}
|
|
207
|
+
catch (e) {
|
|
208
|
+
// A refusal is the DESIGNED outcome for every state this does not repair, so it prints the
|
|
209
|
+
// condition by name — an operator must never have to guess which guard fired.
|
|
210
|
+
if (e instanceof GateReconcileRefused) {
|
|
211
|
+
console.error(c.red(`✗ refused (${e.condition}): ${e.message}`));
|
|
212
|
+
process.exitCode = 2;
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
throw e;
|
|
216
|
+
}
|
|
217
|
+
finally {
|
|
218
|
+
await nc.drain().catch(() => nc.close());
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/** The manager's commands: the `supervise` daemon runner, and the guarded `reconcile-gate` repair.
|
|
222
|
+
* Self-registered on import; the `cotal` binary resolves them from the registry. */
|
|
157
223
|
const managerCommands = [
|
|
158
224
|
{
|
|
159
225
|
kind: "command",
|
|
@@ -165,7 +231,8 @@ const managerCommands = [
|
|
|
165
231
|
{ name: "server", type: "string", value: "<url>", description: "broker URL (default: the local mesh)" },
|
|
166
232
|
{ name: "runtime", type: "string", value: "<name>", description: "agent runtime (default pty; others come from installed extensions)" },
|
|
167
233
|
{ name: "console-port", type: "string", value: "<n>", description: "protocol-console port" },
|
|
168
|
-
{ name: "console-host", type: "string", value: "<host>", description: "bind host for the console
|
|
234
|
+
{ name: "console-host", type: "string", value: "<host>", description: "bind host for the console endpoint (default: loopback)" },
|
|
235
|
+
{ name: "ws-port", type: "string", value: "<n>", description: "broker ws listener port for the console session client (P2 item 6)" },
|
|
169
236
|
{ name: "roster", type: "string", value: "<file>", description: "declarative roster to boot at startup" },
|
|
170
237
|
{ name: "launch", type: "string", value: "<spec>", description: "resolved mesh-manifest launch spec (cotal up -f / spawn -f)" },
|
|
171
238
|
{ name: "resume-attempt", type: "string", value: "<id>", description: "maintenance restore attempt accepted by resumePreserved" },
|
|
@@ -178,6 +245,19 @@ const managerCommands = [
|
|
|
178
245
|
},
|
|
179
246
|
run: (args) => runManager(args, "auto"),
|
|
180
247
|
},
|
|
248
|
+
{
|
|
249
|
+
kind: "command",
|
|
250
|
+
name: "reconcile-gate",
|
|
251
|
+
group: "Manager",
|
|
252
|
+
summary: "reconcile an issuance gate left frozen by a crashed re-registration - verifies the freeze-holder is gone, then completes the dead op (refuses if it is alive or unprovable) [--space <s>] [--server <url>] [--endpoint <e>] [--instance <id>]",
|
|
253
|
+
flags: [
|
|
254
|
+
{ name: "space", type: "string", value: "<s>", description: "space to reconcile in (default: this folder's auth space)" },
|
|
255
|
+
{ name: "server", type: "string", value: "<url>", description: "broker URL (default: the local mesh)" },
|
|
256
|
+
{ name: "endpoint", type: "string", value: "<e>", description: `endpoint whose gate is frozen (default: ${MANAGER_ENDPOINT})` },
|
|
257
|
+
{ name: "instance", type: "string", value: "<id>", description: "instance id (default: this folder's persisted manager instance)" },
|
|
258
|
+
],
|
|
259
|
+
run: runReconcileGate,
|
|
260
|
+
},
|
|
181
261
|
];
|
|
182
262
|
registry.register(...managerCommands);
|
|
183
263
|
//# sourceMappingURL=commands.js.map
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/console/app.js
CHANGED
|
@@ -1,36 +1,32 @@
|
|
|
1
|
-
// Cotal console client: one xterm pane per managed agent, each wired
|
|
2
|
-
//
|
|
3
|
-
// (the
|
|
4
|
-
//
|
|
1
|
+
// Cotal console client (P2 item 6): one xterm pane per managed agent, each wired to the manager
|
|
2
|
+
// over a mesh §13.6 SESSION — never a 127.0.0.1 terminal socket. Per pane we POST /session/<name>
|
|
3
|
+
// (the loopback face mints a holder-bound offer + a per-session, rails-only caller credential),
|
|
4
|
+
// connect to the broker's WebSocket listener with that credential, open the caller rail with the
|
|
5
|
+
// redeemed grant, and drive xterm over the SAME core rail code the manager serves. Agents are
|
|
6
|
+
// discovered over HTTP (/agents, cross-referenced with mesh presence).
|
|
5
7
|
const { Terminal } = window;
|
|
6
8
|
const { FitAddon } = window.FitAddon;
|
|
7
|
-
const
|
|
9
|
+
const S = window.CotalSession; // the served session bundle (wsconnect + core rail + frame codec)
|
|
8
10
|
|
|
9
11
|
const grid = document.getElementById("grid");
|
|
10
12
|
const empty = document.getElementById("empty");
|
|
11
13
|
const meta = document.getElementById("meta");
|
|
12
|
-
const panes = new Map(); // name -> { el, term, fit,
|
|
14
|
+
const panes = new Map(); // name -> { el, term, fit, session, status }
|
|
13
15
|
|
|
14
16
|
// The console token, taken once from this page's own URL and kept only in memory. Deliberately not
|
|
15
17
|
// stored in a cookie: cookies are host-scoped and not port-scoped, so a cookie set here would be
|
|
16
18
|
// sent to every other HTTP service on this host, and two managers on one host would clobber each
|
|
17
|
-
// other's. The manager serves the static shell openly and requires this on
|
|
18
|
-
// real data (/agents)
|
|
19
|
+
// other's. The manager serves the static shell openly and requires this on every route that carries
|
|
20
|
+
// real data (/agents, /feed) or mints one (/session/<name>).
|
|
19
21
|
// Preferred source is the FRAGMENT: a browser never sends it to a server, so the credential stays
|
|
20
22
|
// out of request logs, proxies, and `Referer`. The query is accepted as a fallback for a hand-built
|
|
21
|
-
// URL.
|
|
22
|
-
// it would leak to every other service on this host and collide between two managers).
|
|
23
|
+
// URL.
|
|
23
24
|
const TOKEN =
|
|
24
25
|
new URLSearchParams(location.hash.replace(/^#/, "")).get("t") ??
|
|
25
26
|
new URLSearchParams(location.search).get("t") ??
|
|
26
27
|
"";
|
|
27
28
|
const withToken = (path) => `${path}${path.includes("?") ? "&" : "?"}t=${encodeURIComponent(TOKEN)}`;
|
|
28
29
|
|
|
29
|
-
function wsUrl(name) {
|
|
30
|
-
const proto = location.protocol === "https:" ? "wss" : "ws";
|
|
31
|
-
return `${proto}://${location.host}${withToken(`/attach/${encodeURIComponent(name)}`)}`;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
30
|
function layout() {
|
|
35
31
|
const n = panes.size;
|
|
36
32
|
const cols = n <= 1 ? 1 : n <= 4 ? 2 : 3;
|
|
@@ -56,30 +52,71 @@ function addPane(agent) {
|
|
|
56
52
|
term.loadAddon(fit);
|
|
57
53
|
term.open(el.querySelector(".term"));
|
|
58
54
|
|
|
59
|
-
const
|
|
60
|
-
ws.binaryType = "arraybuffer";
|
|
61
|
-
ws.onopen = () => {
|
|
62
|
-
term.loadAddon(new AttachAddon(ws));
|
|
63
|
-
fit.fit();
|
|
64
|
-
sendResize(ws, term);
|
|
65
|
-
};
|
|
66
|
-
// addon-attach forwards keystrokes; resize is our own text frame (r:cols,rows).
|
|
67
|
-
term.onResize(() => sendResize(ws, term));
|
|
68
|
-
|
|
69
|
-
const pane = { el, term, fit, ws, status: agent.status };
|
|
55
|
+
const pane = { el, term, fit, session: undefined, status: agent.status };
|
|
70
56
|
panes.set(agent.name, pane);
|
|
71
57
|
empty.style.display = "none";
|
|
72
58
|
layout();
|
|
59
|
+
void openSession(agent.name, pane);
|
|
73
60
|
}
|
|
74
61
|
|
|
75
|
-
|
|
76
|
-
|
|
62
|
+
// Open the mesh §13.6 session for one pane: POST /session, connect over the broker ws with the
|
|
63
|
+
// per-session cred, open the caller rail with the grant, and bridge it to xterm.
|
|
64
|
+
async function openSession(name, pane) {
|
|
65
|
+
const { term, fit } = pane;
|
|
66
|
+
if (!S) { term.write("\r\n[cotal: session bundle not loaded]\r\n"); return; }
|
|
67
|
+
let est;
|
|
68
|
+
try {
|
|
69
|
+
const res = await fetch(withToken(`/session/${encodeURIComponent(name)}`), { method: "POST" });
|
|
70
|
+
if (!res.ok) { term.write(`\r\n[cotal: attach failed (${res.status})]\r\n`); return; }
|
|
71
|
+
est = await res.json();
|
|
72
|
+
} catch { term.write("\r\n[cotal: attach request failed]\r\n"); return; }
|
|
73
|
+
const { grant, wsUrl, creds } = est;
|
|
74
|
+
let nc;
|
|
75
|
+
try {
|
|
76
|
+
nc = await S.wsconnect({
|
|
77
|
+
servers: wsUrl,
|
|
78
|
+
...(creds ? { authenticator: S.credsAuthenticator(new TextEncoder().encode(creds)) } : {}),
|
|
79
|
+
});
|
|
80
|
+
} catch { term.write("\r\n[cotal: broker connection failed]\r\n"); return; }
|
|
81
|
+
if (!panes.has(name)) { void nc.close(); return; } // pane removed while connecting
|
|
82
|
+
|
|
83
|
+
// Mark the pane's dot as dead when the SESSION ends — honest even if /agents still lists the
|
|
84
|
+
// agent for a beat (the terminal is gone). `ended` wins over the roster-poll dot (setStatus).
|
|
85
|
+
const markEnded = () => { pane.ended = true; const dot = pane.el.querySelector(".dot"); if (dot) dot.className = "dot exited"; };
|
|
86
|
+
const rail = S.openSessionRail({
|
|
87
|
+
nc,
|
|
88
|
+
grant,
|
|
89
|
+
role: "caller",
|
|
90
|
+
onData: (data) => {
|
|
91
|
+
let frame;
|
|
92
|
+
try { frame = S.decodeTerminalFrame(data); } catch { return; }
|
|
93
|
+
if (frame.k === "data") term.write(S.terminalFrameBytes(frame));
|
|
94
|
+
else if (frame.k === "end") { term.write(`\r\n[cotal: session ended - ${frame.reason}]\r\n`); markEnded(); }
|
|
95
|
+
else if (frame.k === "drop") term.write(`\r\n[cotal: ${frame.bytes} bytes dropped - backpressure]\r\n`);
|
|
96
|
+
},
|
|
97
|
+
onClose: () => { term.write("\r\n[cotal: session closed]\r\n"); markEnded(); },
|
|
98
|
+
onProtocolError: (reason) => { term.write(`\r\n[cotal: session error - ${reason}]\r\n`); markEnded(); },
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
// The caller's `out` subscription must be live before the serving side replays (EPS is at-most-
|
|
102
|
+
// once, no retention). flush() forces the SUB, then send `ready` and go.
|
|
103
|
+
await nc.flush();
|
|
104
|
+
try { rail.send({ k: "ready" }); } catch { /* the onProtocolError path surfaces it */ }
|
|
105
|
+
fit.fit();
|
|
106
|
+
// xterm's onData is a STRING, but the §13.6 data frame carries raw bytes — UTF-8-encode it (a raw
|
|
107
|
+
// string would base64-encode its chars as NUL bytes the pty silently ignores: no echo).
|
|
108
|
+
term.onData((data) => { try { rail.send(S.encodeTerminalData(new TextEncoder().encode(data))); } catch (e) { console.error("[cotal] keystroke send failed", e); } });
|
|
109
|
+
// Guard the resize: a pane fitting before it is laid out can compute a 0 dimension, which the
|
|
110
|
+
// §13.6 codec rejects — a bad frame the serving side now tolerates, but never emit it in the first place.
|
|
111
|
+
term.onResize(() => { if (term.cols > 0 && term.rows > 0) { try { rail.send({ k: "resize", cols: term.cols, rows: term.rows }); } catch { /* advisory */ } } });
|
|
112
|
+
pane.session = { nc, rail };
|
|
77
113
|
}
|
|
78
114
|
|
|
79
115
|
function removePane(name) {
|
|
80
116
|
const p = panes.get(name);
|
|
81
117
|
if (!p) return;
|
|
82
|
-
try { p.
|
|
118
|
+
try { p.session?.rail.close(); } catch {}
|
|
119
|
+
try { void p.session?.nc.close(); } catch {}
|
|
83
120
|
p.term.dispose();
|
|
84
121
|
p.el.remove();
|
|
85
122
|
panes.delete(name);
|
|
@@ -91,6 +128,7 @@ function setStatus(name, status) {
|
|
|
91
128
|
const p = panes.get(name);
|
|
92
129
|
if (!p) return;
|
|
93
130
|
p.status = status;
|
|
131
|
+
if (p.ended) { p.el.querySelector(".dot").className = "dot exited"; return; } // a dead session stays dead in the UI
|
|
94
132
|
p.el.querySelector(".dot").className = `dot ${status === "running" ? "running" : "exited"}`;
|
|
95
133
|
}
|
|
96
134
|
|
|
@@ -105,7 +143,7 @@ async function poll() {
|
|
|
105
143
|
setStatus(a.name, a.status);
|
|
106
144
|
}
|
|
107
145
|
for (const name of [...panes.keys()]) if (!seen.has(name)) removePane(name);
|
|
108
|
-
} catch
|
|
146
|
+
} catch {
|
|
109
147
|
meta.textContent = "manager unreachable";
|
|
110
148
|
}
|
|
111
149
|
}
|
package/dist/console/index.html
CHANGED
|
@@ -58,11 +58,12 @@
|
|
|
58
58
|
<h1>COTAL CONSOLE</h1>
|
|
59
59
|
<span class="meta" id="meta">connecting…</span>
|
|
60
60
|
</header>
|
|
61
|
-
<div id="grid"><div id="empty">no agents yet
|
|
61
|
+
<div id="grid"><div id="empty">no agents yet: <code>cotal start --agent claude --name …</code></div></div>
|
|
62
62
|
|
|
63
63
|
<script src="/assets/xterm.js"></script>
|
|
64
64
|
<script src="/assets/addon-fit.js"></script>
|
|
65
|
-
|
|
65
|
+
<!-- P2 item 6: the mesh §13.6 session client bundle (wsconnect + core rail + frame codec). -->
|
|
66
|
+
<script src="/session-bundle.js"></script>
|
|
66
67
|
<script src="/app.js"></script>
|
|
67
68
|
</body>
|
|
68
69
|
</html>
|