@cotal-ai/manager 0.16.0 → 0.17.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/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 +9 -4
- 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/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 +504 -22
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +2193 -257
- package/dist/manager.js.map +1 -1
- 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 +9 -5
package/dist/attach-endpoint.js
CHANGED
|
@@ -4,7 +4,7 @@ import { createRequire } from "node:module";
|
|
|
4
4
|
import { readFileSync } from "node:fs";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { dirname, join } from "node:path";
|
|
7
|
-
import {
|
|
7
|
+
import { EpEnvelopeError } from "@cotal-ai/core";
|
|
8
8
|
const require = createRequire(import.meta.url);
|
|
9
9
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
10
10
|
/** Vendored xterm.js assets (served from node_modules, resolved at startup). */
|
|
@@ -14,20 +14,20 @@ const ASSETS = {
|
|
|
14
14
|
"/assets/addon-fit.js": { path: require.resolve("@xterm/addon-fit/lib/addon-fit.js"), type: "text/javascript" },
|
|
15
15
|
"/assets/addon-attach.js": { path: require.resolve("@xterm/addon-attach/lib/addon-attach.js"), type: "text/javascript" },
|
|
16
16
|
};
|
|
17
|
-
/** Anything the console page needs to render itself, served from this dir.
|
|
17
|
+
/** Anything the console page needs to render itself, served from this dir. `session-bundle.js` is
|
|
18
|
+
* the pre-built (esbuild) mesh §13.6 session client — present only in a built dist, so the page
|
|
19
|
+
* falls back to a clear "bundle not loaded" notice when running from source (P2 item 6). */
|
|
18
20
|
const PAGE = {
|
|
19
21
|
"/": { path: join(here, "console/index.html"), type: "text/html" },
|
|
20
22
|
"/app.js": { path: join(here, "console/app.js"), type: "text/javascript" },
|
|
23
|
+
"/session-bundle.js": { path: join(here, "console/session-bundle.js"), type: "text/javascript" },
|
|
21
24
|
};
|
|
22
25
|
/**
|
|
23
|
-
* The address the
|
|
24
|
-
* attached to. Keeping the two in step is the whole point — a client that reached the control plane
|
|
25
|
-
* to request an attach URL demonstrably has a route to that address, whereas a hardcoded
|
|
26
|
-
* `127.0.0.1` resolves to the client's own machine.
|
|
26
|
+
* The address the console endpoint binds and advertises, derived from a mesh broker URL.
|
|
27
27
|
*
|
|
28
28
|
* With no server URL there is no mesh address to follow, so this is loopback: the conservative
|
|
29
|
-
* default
|
|
30
|
-
*
|
|
29
|
+
* default. An unparseable URL is a caller bug and throws rather than quietly binding somewhere the
|
|
30
|
+
* operator did not ask for.
|
|
31
31
|
*/
|
|
32
32
|
export function attachHost(servers) {
|
|
33
33
|
if (!servers)
|
|
@@ -44,106 +44,78 @@ export function attachHost(servers) {
|
|
|
44
44
|
// BIND address, and `#advertised` puts the brackets back for the URL form.
|
|
45
45
|
return hostname.startsWith("[") && hostname.endsWith("]") ? hostname.slice(1, -1) : hostname;
|
|
46
46
|
}
|
|
47
|
-
/** How long an issued attach capability stays redeemable. The client redeems it immediately (the
|
|
48
|
-
* control-plane reply goes straight into a connect), so this only has to cover that round trip;
|
|
49
|
-
* short means a URL that leaked into a log or shell history is already dead. */
|
|
50
|
-
const ATTACH_TICKET_TTL_MS = 120_000;
|
|
51
47
|
/**
|
|
52
|
-
* The manager's local HTTP
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
48
|
+
* The manager's local HTTP face. It serves the **console** (a lightweight xterm.js page + its
|
|
49
|
+
* assets) and is the browser's credential broker: `POST /session/<name>` mints a mesh §13.6 session
|
|
50
|
+
* for the console to drive the terminal over the broker's WebSocket listener. The terminal never
|
|
51
|
+
* rides a manager-hosted socket (P2 item 6 replaced the loopback `ws://.../attach/` transport with
|
|
52
|
+
* the mesh session, closing the bearer-less-local hole) — `cotal attach` reaches a manager on
|
|
53
|
+
* another machine over the mesh, not by dialing this face.
|
|
56
54
|
*
|
|
57
|
-
* **Where it binds, and why it is credentialed.**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* deliberately NOT used as the bind: a manager may supervise a broker on another host and could not
|
|
63
|
-
* bind that address at all. Where the manager can only name loopback (a wildcard bind), the CLIENT
|
|
64
|
-
* substitutes the broker address its own control connection reached.
|
|
55
|
+
* **Where it binds, and why it is credentialed.** The bind address is an explicit option (default
|
|
56
|
+
* loopback, so nothing is exposed by accident); `cotal up` passes the address it bound the broker
|
|
57
|
+
* to when the operator asked for an exposed console. A broker DIAL address is deliberately NOT used
|
|
58
|
+
* as the bind: a manager may supervise a broker on another host and could not bind that address at
|
|
59
|
+
* all. Where the manager can only name loopback (a wildcard bind), it advertises loopback.
|
|
65
60
|
*
|
|
66
|
-
* Reachability is why the surface is credentialed
|
|
67
|
-
*
|
|
68
|
-
*
|
|
61
|
+
* Reachability is why the surface is credentialed. It carries the managed roster, the live mesh
|
|
62
|
+
* feed, and — through `POST /session/<name>` — the mint of a real §13.6 session grant plus its
|
|
63
|
+
* per-session caller credential. Once the face can leave the box, "unauthenticated but
|
|
64
|
+
* loopback-only" stops being a safe position, so every DATA route requires the manager's console
|
|
65
|
+
* token. The console SHELL (its HTML, its script, the vendored xterm assets) is static and carries
|
|
66
|
+
* nothing about this mesh, so it stays open — that is what lets the page load and then present the
|
|
67
|
+
* token, held in memory from its own URL, on the requests that do matter.
|
|
69
68
|
*
|
|
70
|
-
*
|
|
71
|
-
* the ONE agent the manager just authorized, single-use, short-lived. This is what makes the
|
|
72
|
-
* per-agent/owner check real — a manager-wide token would let a caller authorized for its own
|
|
73
|
-
* agent swap the path and take over anyone's terminal.
|
|
74
|
-
* - **The console token** is the operator's own: it reaches every agent, because the console
|
|
75
|
-
* legitimately drives all of them, and it is printed solely to this manager process's output
|
|
76
|
-
* (so it is as sensitive as `.cotal/manager.log`, and never handed to a mesh caller).
|
|
77
|
-
*
|
|
78
|
-
* Credentials travel in `?t=` or a bearer header, never a cookie: cookies are host-scoped, not
|
|
69
|
+
* The credential travels in `?t=` or a bearer header, never a cookie: cookies are host-scoped, not
|
|
79
70
|
* port-scoped, so one set here would be sent to every other HTTP service on this host and would
|
|
80
71
|
* collide between two managers on one box. The console URL carries its token in the FRAGMENT, which
|
|
81
72
|
* a browser never sends to a server.
|
|
82
73
|
*
|
|
83
|
-
* Routes: `GET /` console page
|
|
84
|
-
* `GET /feed` the live mesh feed (SSE: presence roster + comms)
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* Attach protocol: server → client sends raw terminal bytes (binary). client →
|
|
88
|
-
* server: binary frames are keystrokes; a text frame `r:<cols>,<rows>` resizes.
|
|
74
|
+
* Routes: `GET /` console page + `/app.js` + `/session-bundle.js` + `/assets/*`; `GET /agents` the
|
|
75
|
+
* managed roster (JSON); `GET /feed` the live mesh feed (SSE: presence roster + comms);
|
|
76
|
+
* `POST /session/<name>` the mesh session establishment.
|
|
89
77
|
*/
|
|
90
78
|
export class AttachEndpoint {
|
|
91
|
-
lookup;
|
|
92
79
|
list;
|
|
93
80
|
snapshot;
|
|
81
|
+
establishSession;
|
|
94
82
|
token;
|
|
95
83
|
#http;
|
|
96
|
-
#wss;
|
|
97
84
|
#port;
|
|
98
85
|
#host;
|
|
99
86
|
#sse = new Set();
|
|
100
87
|
#ping;
|
|
101
|
-
|
|
102
|
-
* `handle` is the identity that actually matters — see {@link AttachEndpoint.url}. */
|
|
103
|
-
#tickets = new Map();
|
|
104
|
-
constructor(lookup, list,
|
|
88
|
+
constructor(list,
|
|
105
89
|
/** Events replayed to each console as it connects to `/feed` (e.g. the current roster). */
|
|
106
90
|
snapshot, port = 0,
|
|
107
|
-
/**
|
|
108
|
-
*
|
|
109
|
-
|
|
91
|
+
/** P2 item 6: the manager-injected mesh-session establisher backing `POST /session/<name>`
|
|
92
|
+
* (the console's session-client transport). Absent ⇒ the route 503s. Wired at 6b-2. */
|
|
93
|
+
establishSession,
|
|
94
|
+
/** Bind address, and the host advertised in {@link consoleUrl}. Defaults to loopback; the
|
|
95
|
+
* manager passes an operator-chosen address when the console is meant to be reachable from
|
|
96
|
+
* another machine. A wildcard bind still advertises loopback, since a wildcard is not a
|
|
97
|
+
* dialable name. */
|
|
110
98
|
host = "127.0.0.1",
|
|
111
|
-
/** The endpoint credential. Generated per manager process; required on every route. */
|
|
99
|
+
/** The endpoint credential. Generated per manager process; required on every data route. */
|
|
112
100
|
token = randomBytes(32).toString("hex")) {
|
|
113
|
-
this.lookup = lookup;
|
|
114
101
|
this.list = list;
|
|
115
102
|
this.snapshot = snapshot;
|
|
103
|
+
this.establishSession = establishSession;
|
|
116
104
|
this.token = token;
|
|
105
|
+
// A blank credential is the fail-OPEN shape of this gate, and it would only ever be consulted on
|
|
106
|
+
// the dangerous path. Refuse it at CONSTRUCTION, not at request time: an endpoint that cannot be
|
|
107
|
+
// credentialed must not exist rather than serve the roster, the feed and the session mint to
|
|
108
|
+
// anyone who can reach the bind host. (The default above means "no token configured" is already
|
|
109
|
+
// a fresh per-process secret; this closes the one way a caller could ask for none.)
|
|
110
|
+
if (!token)
|
|
111
|
+
throw new Error("AttachEndpoint: refusing to serve without a console token - the roster, the feed and the session mint are all credentialed on it");
|
|
117
112
|
this.#port = port;
|
|
118
113
|
this.#host = host;
|
|
119
114
|
this.#http = createServer((req, res) => this.#onRequest(req, res));
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
socket.destroy();
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
let name;
|
|
128
|
-
try {
|
|
129
|
-
name = decodeURIComponent(path.slice("/attach/".length));
|
|
130
|
-
}
|
|
131
|
-
catch {
|
|
132
|
-
socket.end("HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n");
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
// Terminal read+write, so the capability must name THIS agent: a ticket issued for one agent
|
|
136
|
-
// must never attach another. Redeemed against the decoded name — the name is parsed first only
|
|
137
|
-
// because the check needs it, and a malformed name is refused before any credential is looked
|
|
138
|
-
// at, so neither order leaks the other's outcome.
|
|
139
|
-
if (!this.#redeemAttach(req, name)) {
|
|
140
|
-
socket.end("HTTP/1.1 401 Unauthorized\r\nConnection: close\r\n\r\n");
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
this.#wss.handleUpgrade(req, socket, head, (ws) => {
|
|
144
|
-
this.#onConnection(ws, name).catch(() => ws.close());
|
|
145
|
-
});
|
|
146
|
-
});
|
|
115
|
+
// HTTP-only face: refuse any WebSocket upgrade with a clean 400 (P2 item 6 removed the loopback
|
|
116
|
+
// `ws://.../attach/` terminal transport — the console drives the terminal over the mesh session).
|
|
117
|
+
// A proper response beats leaving a stray/malformed upgrade hanging or resetting it abruptly.
|
|
118
|
+
this.#http.on("upgrade", (_req, socket) => socket.end("HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n"));
|
|
147
119
|
}
|
|
148
120
|
/** The credential a request presents, from `?t=` or a bearer header. */
|
|
149
121
|
#presented(req) {
|
|
@@ -158,67 +130,22 @@ export class AttachEndpoint {
|
|
|
158
130
|
const b = Buffer.from(secret);
|
|
159
131
|
return a.length === b.length && timingSafeEqual(a, b);
|
|
160
132
|
}
|
|
161
|
-
/** The
|
|
162
|
-
*
|
|
163
|
-
*
|
|
133
|
+
/** The operator's own console credential. It reaches every managed agent, because the console
|
|
134
|
+
* legitimately drives all of them, and it is printed solely to this manager process's output (so
|
|
135
|
+
* it is as sensitive as `.cotal/manager.log`, and never handed to a mesh caller). */
|
|
164
136
|
#authorized(req) {
|
|
165
137
|
return this.#sameSecret(this.#presented(req), this.token);
|
|
166
138
|
}
|
|
167
|
-
/**
|
|
168
|
-
* Redeem an attach capability for EXACTLY `name`.
|
|
169
|
-
*
|
|
170
|
-
* The per-name control-plane authorization (`Manager.opAttach` → `authorizeNamed`) is only real if
|
|
171
|
-
* the credential it hands back is bound to the agent it authorized. A manager-wide token is not:
|
|
172
|
-
* a caller legitimately authorized for its own agent could edit `/attach/mine` to `/attach/victim`
|
|
173
|
-
* and the endpoint, checking only "is this the manager's token", would attach it — silently
|
|
174
|
-
* defeating the owner-domain and cross-owner admin boundaries on a user-auth mesh. So a mesh
|
|
175
|
-
* caller receives a ticket that names one agent, expires, and is consumed on redemption.
|
|
176
|
-
*
|
|
177
|
-
* The console token is also accepted here, because the console legitimately drives every agent.
|
|
178
|
-
*/
|
|
179
|
-
#redeemAttach(req, name) {
|
|
180
|
-
const presented = this.#presented(req);
|
|
181
|
-
if (!presented)
|
|
182
|
-
return false;
|
|
183
|
-
if (this.#sameSecret(presented, this.token))
|
|
184
|
-
return true; // operator console: all agents
|
|
185
|
-
const ticket = this.#tickets.get(presented);
|
|
186
|
-
if (!ticket)
|
|
187
|
-
return false;
|
|
188
|
-
this.#tickets.delete(presented); // single use, redeemed or not
|
|
189
|
-
if (ticket.expires < Date.now())
|
|
190
|
-
return false;
|
|
191
|
-
// Compare the BOUND name against the requested one in constant time, so a redemption cannot be
|
|
192
|
-
// probed character-by-character for another agent's name.
|
|
193
|
-
if (!this.#sameSecret(name, ticket.name))
|
|
194
|
-
return false;
|
|
195
|
-
// A NAME IS A REUSABLE SLOT, not an identity. Binding the capability to the name alone leaves it
|
|
196
|
-
// valid for whoever occupies that slot at redemption time: if the authorized agent exits and a
|
|
197
|
-
// same-name successor — possibly a different owner's — takes the slot inside the TTL, the
|
|
198
|
-
// untouched URL would attach the successor's terminal. Bind to the incarnation instead. The
|
|
199
|
-
// handle object IS that identity: the manager creates a new one per spawn, so a successor can
|
|
200
|
-
// never compare equal to its predecessor.
|
|
201
|
-
return this.lookup(name) === ticket.handle;
|
|
202
|
-
}
|
|
203
|
-
/** Drop expired tickets so an idle manager doesn't accumulate them. */
|
|
204
|
-
#sweepTickets() {
|
|
205
|
-
const now = Date.now();
|
|
206
|
-
for (const [t, v] of this.#tickets)
|
|
207
|
-
if (v.expires < now)
|
|
208
|
-
this.#tickets.delete(t);
|
|
209
|
-
}
|
|
210
139
|
async start() {
|
|
211
|
-
// The bind host is the
|
|
212
|
-
//
|
|
213
|
-
//
|
|
214
|
-
// from deep inside startup: the address is the diagnosis, and the two real resolutions are to
|
|
215
|
-
// run the manager on the broker's host or to give this space a broker address this host owns.
|
|
140
|
+
// The bind host is the operator's explicit choice. A manager asked to bind an address this
|
|
141
|
+
// machine does not own dies deep inside startup with a bare errno; say so in operator terms
|
|
142
|
+
// instead — the address is the diagnosis.
|
|
216
143
|
await new Promise((resolve, reject) => {
|
|
217
144
|
const onError = (e) => {
|
|
218
145
|
if (e.code === "EADDRNOTAVAIL" || e.code === "EADDRINUSE") {
|
|
219
146
|
reject(new Error(e.code === "EADDRINUSE"
|
|
220
|
-
? `the manager's
|
|
221
|
-
: `the manager's
|
|
147
|
+
? `the manager's console endpoint cannot bind ${this.#host}:${this.#port} - that port is already in use on this host`
|
|
148
|
+
: `the manager's console endpoint cannot bind ${this.#host} - this machine has no such address. Give this manager a console host it owns, or leave it on loopback.`));
|
|
222
149
|
return;
|
|
223
150
|
}
|
|
224
151
|
reject(e);
|
|
@@ -245,8 +172,6 @@ export class AttachEndpoint {
|
|
|
245
172
|
for (const res of this.#sse)
|
|
246
173
|
res.end();
|
|
247
174
|
this.#sse.clear();
|
|
248
|
-
for (const ws of this.#wss.clients)
|
|
249
|
-
ws.terminate();
|
|
250
175
|
await new Promise((resolve) => this.#http.close(() => resolve()));
|
|
251
176
|
}
|
|
252
177
|
/** Push a named event to every connected console (SSE). */
|
|
@@ -261,31 +186,6 @@ export class AttachEndpoint {
|
|
|
261
186
|
return "127.0.0.1";
|
|
262
187
|
return this.#host.includes(":") && !this.#host.startsWith("[") ? `[${this.#host}]` : this.#host;
|
|
263
188
|
}
|
|
264
|
-
/**
|
|
265
|
-
* The ws URL a client uses to attach to `name`, carrying a capability bound to THAT agent.
|
|
266
|
-
*
|
|
267
|
-
* Called once per authorized control-plane `attach` request, so the ticket inherits exactly the
|
|
268
|
-
* authorization the manager just performed for this caller and this agent. It is single-use and
|
|
269
|
-
* short-lived: the client redeems it immediately, and a leaked URL (shell history, a log, a
|
|
270
|
-
* `Referer`) is spent or expired rather than a standing key to someone's terminal.
|
|
271
|
-
*
|
|
272
|
-
* `expected` is the handle the caller actually authorized, and it is REQUIRED. A name is a reusable
|
|
273
|
-
* slot, and authorization is async (a user-mode ledger read), so between the caller resolving the
|
|
274
|
-
* name and arriving here the slot can have been stopped and refilled by a same-name successor.
|
|
275
|
-
* Re-resolving the name would then mint a valid ticket for an agent nobody authorized. Binding to
|
|
276
|
-
* the caller's own handle closes that window: if the slot moved, there is no capability to issue.
|
|
277
|
-
*/
|
|
278
|
-
url(name, expected) {
|
|
279
|
-
this.#sweepTickets();
|
|
280
|
-
const handle = this.lookup(name);
|
|
281
|
-
if (!handle)
|
|
282
|
-
throw new Error(`cannot issue an attach capability for "${name}": no such running agent`);
|
|
283
|
-
if (handle !== expected)
|
|
284
|
-
throw new Error(`cannot issue an attach capability for "${name}": it was replaced during authorization`);
|
|
285
|
-
const ticket = randomBytes(32).toString("hex");
|
|
286
|
-
this.#tickets.set(ticket, { name, handle: expected, expires: Date.now() + ATTACH_TICKET_TTL_MS });
|
|
287
|
-
return `ws://${this.#advertised}:${this.#port}/attach/${encodeURIComponent(name)}?t=${ticket}`;
|
|
288
|
-
}
|
|
289
189
|
/** The console page URL. The token rides the FRAGMENT, which a browser never sends to a server:
|
|
290
190
|
* it stays out of this endpoint's request handling, out of any proxy's logs, and out of the
|
|
291
191
|
* `Referer` a click on the page would otherwise leak. The page reads it from `location.hash` and
|
|
@@ -297,30 +197,37 @@ export class AttachEndpoint {
|
|
|
297
197
|
#onRequest(req, res) {
|
|
298
198
|
try {
|
|
299
199
|
const path = (req.url ?? "/").split("?")[0];
|
|
300
|
-
//
|
|
301
|
-
// real agents. The console shell (its HTML, its script, the vendored xterm assets) is static
|
|
302
|
-
// and carries nothing about this mesh, so it stays open — that is what lets the page load and
|
|
303
|
-
// then present the token, held in memory from its own URL, on the requests that do matter.
|
|
304
|
-
//
|
|
305
|
-
// Deliberately NOT a cookie. Cookies are host-scoped, not port-scoped: a `cotal_attach` cookie
|
|
306
|
-
// set by a manager on one port would be sent by the browser to EVERY other HTTP service on
|
|
307
|
-
// that host, handing a terminal credential to anything the operator happens to visit, and two
|
|
308
|
-
// managers on one host would silently overwrite each other's. `Secure` fixes neither, and is
|
|
309
|
-
// unavailable over plain HTTP anyway.
|
|
310
|
-
// The console shell must not be cached or leak a referrer: the page holds a terminal-capable
|
|
200
|
+
// The console shell must not be cached or leak a referrer: the page holds the console
|
|
311
201
|
// credential in memory, and a stale cached copy would keep working against a restarted
|
|
312
202
|
// manager whose token has rotated.
|
|
313
203
|
if (PAGE[path]) {
|
|
314
204
|
res.setHeader("cache-control", "no-store");
|
|
315
205
|
res.setHeader("referrer-policy", "no-referrer");
|
|
316
206
|
}
|
|
317
|
-
|
|
207
|
+
// Every DATA route is credentialed. The roster and the live feed describe real agents, and
|
|
208
|
+
// `POST /session/` MINTS a §13.6 grant plus a per-session caller credential — the most
|
|
209
|
+
// sensitive thing this face does. Loopback alone stopped being the trust boundary once the
|
|
210
|
+
// bind host became an operator choice, so the token gate is unconditional.
|
|
211
|
+
if (path === "/agents" || path === "/feed" || path.startsWith("/session/")) {
|
|
318
212
|
if (!this.#authorized(req)) {
|
|
319
213
|
res.writeHead(401, { "content-type": "text/plain" });
|
|
320
214
|
res.end("unauthorized - this endpoint requires the manager's console token");
|
|
321
215
|
return;
|
|
322
216
|
}
|
|
323
217
|
}
|
|
218
|
+
// P2 item 6: the console's mesh §13.6 session establishment. `POST /session/<name>` mints the
|
|
219
|
+
// holder-bound offer + the per-session caller credential (via the injected establisher) and
|
|
220
|
+
// returns {grant, wsUrl, creds} for the browser to open the caller rail — no ws:// terminal
|
|
221
|
+
// transport in the reply.
|
|
222
|
+
if (path.startsWith("/session/")) {
|
|
223
|
+
this.#onSession(req, res, path);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
// Browsers request the favicon unprompted; answer 204 so it isn't a noisy 404 in the console.
|
|
227
|
+
if (path === "/favicon.ico") {
|
|
228
|
+
res.writeHead(204).end();
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
324
231
|
if (path === "/agents") {
|
|
325
232
|
const body = JSON.stringify(this.list());
|
|
326
233
|
res.writeHead(200, { "content-type": "application/json" });
|
|
@@ -350,6 +257,47 @@ export class AttachEndpoint {
|
|
|
350
257
|
}
|
|
351
258
|
}
|
|
352
259
|
}
|
|
260
|
+
/** `POST /session/<name>` (P2 item 6): establish a mesh §13.6 session for the console and return
|
|
261
|
+
* {grant, wsUrl, creds}. POST because it has side effects (it mints a one-use offer + a
|
|
262
|
+
* per-session credential). 503 when no establisher is wired (open mesh / pre-6b-2). */
|
|
263
|
+
#onSession(req, res, path) {
|
|
264
|
+
if (req.method !== "POST") {
|
|
265
|
+
res.writeHead(405, { allow: "POST" }).end("method not allowed");
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
if (!this.establishSession) {
|
|
269
|
+
res.writeHead(503).end("mesh session establishment is not available (open mesh, or not yet wired)");
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
let name;
|
|
273
|
+
try {
|
|
274
|
+
name = decodeURIComponent(path.slice("/session/".length));
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
res.writeHead(400).end("bad agent name");
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
if (!name) {
|
|
281
|
+
res.writeHead(400).end("missing agent name");
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
this.establishSession(name)
|
|
285
|
+
.then((est) => {
|
|
286
|
+
res.writeHead(200, { "content-type": "application/json" });
|
|
287
|
+
res.end(JSON.stringify(est));
|
|
288
|
+
})
|
|
289
|
+
.catch((e) => {
|
|
290
|
+
// A CAPACITY refusal is not an internal fault, and the browser has to be able to tell them
|
|
291
|
+
// apart: the live-session ceiling is a bounded, retryable condition (429), while a 500 says
|
|
292
|
+
// the manager broke. Both carry the envelope `code`, so the page branches on a stable token
|
|
293
|
+
// rather than on message text.
|
|
294
|
+
const code = e instanceof EpEnvelopeError ? e.code : undefined;
|
|
295
|
+
const status = code === "resource-exhausted" ? 429 : 500;
|
|
296
|
+
if (!res.headersSent)
|
|
297
|
+
res.writeHead(status, { "content-type": "application/json" });
|
|
298
|
+
res.end(JSON.stringify({ error: e.message, ...(code ? { code } : {}) }));
|
|
299
|
+
});
|
|
300
|
+
}
|
|
353
301
|
#serveFile(res, file, type) {
|
|
354
302
|
try {
|
|
355
303
|
const body = readFileSync(file);
|
|
@@ -389,77 +337,5 @@ export class AttachEndpoint {
|
|
|
389
337
|
return;
|
|
390
338
|
res.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`);
|
|
391
339
|
}
|
|
392
|
-
async #onConnection(ws, name) {
|
|
393
|
-
const handle = this.lookup(name);
|
|
394
|
-
if (!handle || handle.status() !== "running") {
|
|
395
|
-
ws.close();
|
|
396
|
-
return;
|
|
397
|
-
}
|
|
398
|
-
// Only streamable backends (pty/host) can be attached over the wire; external runtimes are watched
|
|
399
|
-
// natively and their attach() throws. Close cleanly instead of letting it crash the upgrade.
|
|
400
|
-
let session;
|
|
401
|
-
try {
|
|
402
|
-
session = handle.attach();
|
|
403
|
-
}
|
|
404
|
-
catch {
|
|
405
|
-
ws.close(1011, `attach unsupported for the ${handle.kind} runtime - watch its surface directly`);
|
|
406
|
-
return;
|
|
407
|
-
}
|
|
408
|
-
const send = (b) => {
|
|
409
|
-
if (ws.readyState === ws.OPEN)
|
|
410
|
-
ws.send(b);
|
|
411
|
-
};
|
|
412
|
-
// Subscribe to live output BEFORE requesting the snapshot, and buffer what arrives until the
|
|
413
|
-
// snapshot is sent. The snapshot (below) is a point-in-time screen image; anything the child
|
|
414
|
-
// emits after it must land after it, in order. Subscribing first (no await in between) means no
|
|
415
|
-
// chunk can slip through unobserved, and the buffer stops a mid-snapshot burst from racing ahead
|
|
416
|
-
// of — or being lost before — the image.
|
|
417
|
-
let live = false;
|
|
418
|
-
const buffered = [];
|
|
419
|
-
const offData = session.onData((chunk) => {
|
|
420
|
-
if (live)
|
|
421
|
-
send(chunk);
|
|
422
|
-
else
|
|
423
|
-
buffered.push(chunk);
|
|
424
|
-
});
|
|
425
|
-
const offExit = session.onExit(() => ws.close());
|
|
426
|
-
// Wire input + cleanup now too, so the client's initial `r:cols,rows` (and any early keystrokes)
|
|
427
|
-
// during the snapshot await aren't dropped, and a disconnect mid-await still unsubscribes.
|
|
428
|
-
ws.on("message", (data, isBinary) => {
|
|
429
|
-
if (isBinary) {
|
|
430
|
-
session.write(data.toString("utf8"));
|
|
431
|
-
return;
|
|
432
|
-
}
|
|
433
|
-
const text = data.toString();
|
|
434
|
-
const m = /^r:(\d+),(\d+)$/.exec(text);
|
|
435
|
-
if (!m) {
|
|
436
|
-
session.write(text);
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
session.resize(Number(m[1]), Number(m[2]));
|
|
440
|
-
});
|
|
441
|
-
ws.on("close", () => {
|
|
442
|
-
offData();
|
|
443
|
-
offExit();
|
|
444
|
-
});
|
|
445
|
-
// Reconstructed screen image: the backend replays a byte-exact snapshot — including the
|
|
446
|
-
// alternate-screen buffer of a full-screen TUI (OpenCode/Claude) — so a late or concurrent attach
|
|
447
|
-
// paints correctly without depending on the child to repaint. (Raw scrollback replay couldn't
|
|
448
|
-
// rebuild an alt-screen, leaving same-size re/co-attaches a partial screen.) Then flush anything
|
|
449
|
-
// that arrived while we built it, and switch to sending live output straight through.
|
|
450
|
-
let snapshot;
|
|
451
|
-
try {
|
|
452
|
-
snapshot = await session.backlog();
|
|
453
|
-
}
|
|
454
|
-
catch {
|
|
455
|
-
ws.close(1011, "attach snapshot failed");
|
|
456
|
-
return;
|
|
457
|
-
}
|
|
458
|
-
if (snapshot.length)
|
|
459
|
-
send(snapshot);
|
|
460
|
-
for (const chunk of buffered)
|
|
461
|
-
send(chunk);
|
|
462
|
-
live = true; // snapshot delivered — stream subsequent output straight through
|
|
463
|
-
}
|
|
464
340
|
}
|
|
465
341
|
//# sourceMappingURL=attach-endpoint.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach-endpoint.js","sourceRoot":"","sources":["../src/attach-endpoint.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attach-endpoint.js","sourceRoot":"","sources":["../src/attach-endpoint.ts"],"names":[],"mappings":"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"}
|
package/dist/commands.js
CHANGED
|
@@ -45,9 +45,12 @@ async function runManager(args, defaultRuntime) {
|
|
|
45
45
|
process.exit(1);
|
|
46
46
|
}
|
|
47
47
|
const consolePort = v["console-port"] ? Number(v["console-port"]) : undefined;
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
|
|
48
|
+
// P2 item 6: the broker ws listener port (loopback) `cotal up` allocated — the console's mesh
|
|
49
|
+
// session client builds its wsUrl from it. Absent ⇒ no console session client (POST /session 503s).
|
|
50
|
+
const wsPort = v["ws-port"] ? Number(v["ws-port"]) : undefined;
|
|
51
|
+
// Where the console face binds. Absent → loopback, so a bare `cotal supervise` keeps a
|
|
52
|
+
// machine-local console. `cotal up` passes the address it bound the broker to when the operator
|
|
53
|
+
// asked for an exposed console; the terminal itself rides the mesh either way.
|
|
51
54
|
const attachHost = v["console-host"];
|
|
52
55
|
// Construction resolves the runtime (createRuntime) — which fails loud on an unusable env, e.g. the
|
|
53
56
|
// pty runtime under Bun. Render that as one actionable line, not a raw stack (this also lands in
|
|
@@ -62,6 +65,7 @@ async function runManager(args, defaultRuntime) {
|
|
|
62
65
|
servers: server,
|
|
63
66
|
runtime,
|
|
64
67
|
consolePort,
|
|
68
|
+
wsPort,
|
|
65
69
|
attachHost,
|
|
66
70
|
installedExtensions: true,
|
|
67
71
|
resumeAttemptId: v["resume-attempt"],
|
|
@@ -165,7 +169,8 @@ const managerCommands = [
|
|
|
165
169
|
{ name: "server", type: "string", value: "<url>", description: "broker URL (default: the local mesh)" },
|
|
166
170
|
{ name: "runtime", type: "string", value: "<name>", description: "agent runtime (default pty; others come from installed extensions)" },
|
|
167
171
|
{ 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
|
|
172
|
+
{ name: "console-host", type: "string", value: "<host>", description: "bind host for the console endpoint (default: loopback)" },
|
|
173
|
+
{ name: "ws-port", type: "string", value: "<n>", description: "broker ws listener port for the console session client (P2 item 6)" },
|
|
169
174
|
{ name: "roster", type: "string", value: "<file>", description: "declarative roster to boot at startup" },
|
|
170
175
|
{ name: "launch", type: "string", value: "<spec>", description: "resolved mesh-manifest launch spec (cotal up -f / spawn -f)" },
|
|
171
176
|
{ name: "resume-attempt", type: "string", value: "<id>", description: "maintenance restore attempt accepted by resumePreserved" },
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,QAAQ,GAGT,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAoB,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,SAAS,CAAC;AAI5B;qGACqG;AACrG,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,CAAC,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,aAAa,CAAC;AAC3E,CAAC;AAED;;;;;;8FAM8F;AAC9F,wFAAwF;AACxF,0FAA0F;AAC1F,wBAAwB;AACxB,KAAK,UAAU,UAAU,CAAC,IAAgB,EAAE,cAA2B;IACrE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAgB,CAAC;IAChC,IAAI,OAAO,GAAG,cAAc,CAAC;IAC7B,IAAI,cAAc,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3C,OAAO,GAAG,CAAC,CAAC,OAAsB,CAAC;IACrC,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,cAAc,CAAC;IAC1C,kGAAkG;IAClG,uDAAuD;IACvD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,mJAAmJ,CAAC,CAAC,CAAC;QAC1K,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,uBAAuB,MAAM,iBAAiB,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,8FAA8F;IAC9F,
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|