@cotal-ai/cli 0.10.1 → 0.11.1
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/command.d.ts.map +1 -1
- package/dist/command.js +17 -4
- package/dist/command.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +30 -13
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/channels.d.ts.map +1 -1
- package/dist/commands/channels.js +16 -6
- package/dist/commands/channels.js.map +1 -1
- package/dist/commands/clean.d.ts +40 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +138 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/completion.js +5 -5
- package/dist/commands/console.d.ts +1 -1
- package/dist/commands/console.d.ts.map +1 -1
- package/dist/commands/console.js +17 -11
- package/dist/commands/console.js.map +1 -1
- package/dist/commands/doctor.d.ts +14 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +171 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/down-manifest.js +15 -15
- package/dist/commands/down.d.ts +16 -0
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +83 -32
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/ext.d.ts.map +1 -1
- package/dist/commands/ext.js +30 -17
- package/dist/commands/ext.js.map +1 -1
- package/dist/commands/feedback.js +2 -2
- package/dist/commands/history.d.ts +3 -2
- package/dist/commands/history.d.ts.map +1 -1
- package/dist/commands/history.js +6 -17
- package/dist/commands/history.js.map +1 -1
- package/dist/commands/join.d.ts.map +1 -1
- package/dist/commands/join.js +14 -7
- package/dist/commands/join.js.map +1 -1
- package/dist/commands/meshes.js +2 -2
- package/dist/commands/mint.d.ts.map +1 -1
- package/dist/commands/mint.js +16 -5
- package/dist/commands/mint.js.map +1 -1
- package/dist/commands/models.js +1 -1
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/personas.js +4 -4
- package/dist/commands/send.js +1 -1
- package/dist/commands/setup.js +27 -27
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/spawn-manifest.d.ts.map +1 -1
- package/dist/commands/spawn-manifest.js +47 -25
- package/dist/commands/spawn-manifest.js.map +1 -1
- package/dist/commands/spawn.d.ts +6 -0
- package/dist/commands/spawn.d.ts.map +1 -1
- package/dist/commands/spawn.js +257 -46
- package/dist/commands/spawn.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +85 -22
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/topology.js +2 -2
- package/dist/commands/up.d.ts +5 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +272 -49
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/use.js +1 -1
- package/dist/console/commands.js +2 -2
- package/dist/console/mesh.js +1 -1
- package/dist/console/mesh.js.map +1 -1
- package/dist/console/root.d.ts +15 -3
- package/dist/console/root.d.ts.map +1 -1
- package/dist/console/root.js +12 -7
- package/dist/console/root.js.map +1 -1
- package/dist/console/ui/Confirm.js +1 -1
- package/dist/console/ui/Confirm.js.map +1 -1
- package/dist/console/ui/Feed.js +1 -1
- package/dist/console/ui/Feed.js.map +1 -1
- package/dist/console/ui/Help.js +2 -2
- package/dist/console/ui/Help.js.map +1 -1
- package/dist/console/ui/NeedsYou.js +1 -1
- package/dist/console/ui/NeedsYou.js.map +1 -1
- package/dist/console/ui/SpacePicker.js +1 -1
- package/dist/console/ui/SpacePicker.js.map +1 -1
- package/dist/console/ui/Tiles.js +1 -1
- package/dist/console/ui/topo/Map.js +1 -1
- package/dist/console/ui/topo/Map.js.map +1 -1
- package/dist/console/ui/topo/Matrix.js +2 -2
- package/dist/console/ui/topo/Matrix.js.map +1 -1
- package/dist/console/ui/topo/Sequence.js +1 -1
- package/dist/console/ui/topo/Sequence.js.map +1 -1
- package/dist/ext-loader.d.ts.map +1 -1
- package/dist/ext-loader.js +20 -8
- package/dist/ext-loader.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +47 -18
- package/dist/index.js.map +1 -1
- package/dist/lib/attach-client.js +1 -1
- package/dist/lib/auth-proc.d.ts +19 -0
- package/dist/lib/auth-proc.d.ts.map +1 -0
- package/dist/lib/auth-proc.js +81 -0
- package/dist/lib/auth-proc.js.map +1 -0
- package/dist/lib/connect.d.ts +1 -1
- package/dist/lib/connect.d.ts.map +1 -1
- package/dist/lib/connect.js +2 -2
- package/dist/lib/connect.js.map +1 -1
- package/dist/lib/control.d.ts +14 -6
- package/dist/lib/control.d.ts.map +1 -1
- package/dist/lib/control.js +31 -13
- package/dist/lib/control.js.map +1 -1
- package/dist/lib/delivery-proc.js +2 -2
- package/dist/lib/manifest/apply.d.ts +3 -2
- package/dist/lib/manifest/apply.d.ts.map +1 -1
- package/dist/lib/manifest/apply.js +7 -2
- package/dist/lib/manifest/apply.js.map +1 -1
- package/dist/lib/manifest/ledger.js +4 -4
- package/dist/lib/manifest/live.d.ts +23 -9
- package/dist/lib/manifest/live.d.ts.map +1 -1
- package/dist/lib/manifest/live.js +22 -12
- package/dist/lib/manifest/live.js.map +1 -1
- package/dist/lib/manifest/model.d.ts +4 -1
- package/dist/lib/manifest/model.d.ts.map +1 -1
- package/dist/lib/manifest/prepare.d.ts +2 -0
- package/dist/lib/manifest/prepare.d.ts.map +1 -1
- package/dist/lib/manifest/prepare.js +5 -2
- package/dist/lib/manifest/prepare.js.map +1 -1
- package/dist/lib/manifest/render.d.ts.map +1 -1
- package/dist/lib/manifest/render.js +14 -13
- package/dist/lib/manifest/render.js.map +1 -1
- package/dist/lib/manifest/resolve.js +19 -6
- package/dist/lib/manifest/resolve.js.map +1 -1
- package/dist/lib/manifest/schema.d.ts +4 -1
- package/dist/lib/manifest/schema.d.ts.map +1 -1
- package/dist/lib/manifest/schema.js +10 -2
- package/dist/lib/manifest/schema.js.map +1 -1
- package/dist/lib/setup-log.js +1 -1
- package/dist/lib/status.d.ts +1 -1
- package/dist/lib/status.js +1 -1
- package/dist/lib/transient.d.ts +8 -10
- package/dist/lib/transient.d.ts.map +1 -1
- package/dist/lib/transient.js +11 -11
- package/dist/lib/transient.js.map +1 -1
- package/dist/render.js +2 -2
- package/dist/ui.d.ts +5 -0
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +13 -1
- package/dist/ui.js.map +1 -1
- package/package.json +3 -3
package/dist/command.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAuD7F,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B;;;oCAGgC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;uFAEuF;AACvF,wBAAsB,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAuD7F,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B;;;oCAGgC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;uFAEuF;AACvF,wBAAsB,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgExG"}
|
package/dist/command.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { commandUsage, parseCommandArgs } from "@cotal-ai/core";
|
|
2
|
-
import { c } from "./ui.js";
|
|
2
|
+
import { c, staleStoreHint } from "./ui.js";
|
|
3
3
|
import { isExtensionStub, materializeExtensionCommand, overlayExtensions, setCommandSurface } from "./ext-loader.js";
|
|
4
4
|
/** Display order for the help groups — an explicit ranking, NOT registration order: modules
|
|
5
5
|
* self-register on import and the dev runner (tsx) doesn't guarantee entry-import evaluation
|
|
@@ -21,7 +21,7 @@ function help(commands) {
|
|
|
21
21
|
};
|
|
22
22
|
const ordered = [...groups.entries()].sort(([a], [b]) => rank(a) - rank(b));
|
|
23
23
|
const pad = Math.max(...visible.map((c) => c.name.length));
|
|
24
|
-
let out = `${c.bold("cotal")}
|
|
24
|
+
let out = `${c.bold("cotal")} - lateral agent coordination over NATS\n`;
|
|
25
25
|
for (const [group, cmds] of ordered) {
|
|
26
26
|
out += `\n${c.bold(group)}\n`;
|
|
27
27
|
for (const cmd of cmds)
|
|
@@ -32,7 +32,7 @@ function help(commands) {
|
|
|
32
32
|
/** Full help for one command, generated from its declared specs: summary, usage line, and a
|
|
33
33
|
* flag table (short, long, metavar, description). */
|
|
34
34
|
function commandHelp(cmd) {
|
|
35
|
-
console.log(`${c.bold(`cotal ${cmd.name}`)}
|
|
35
|
+
console.log(`${c.bold(`cotal ${cmd.name}`)} - ${cmd.summary}`);
|
|
36
36
|
console.log(c.dim(`usage: ${commandUsage(cmd)}`));
|
|
37
37
|
const flags = cmd.flags ?? [];
|
|
38
38
|
if (!flags.length)
|
|
@@ -107,7 +107,20 @@ export async function runCli(registry, argv, opts = {}) {
|
|
|
107
107
|
commandHelp(cmd);
|
|
108
108
|
process.exit(1);
|
|
109
109
|
}
|
|
110
|
-
|
|
110
|
+
// Every other command failure (a broker permission denial, a missing --creds file, a failed
|
|
111
|
+
// connect) is presented as ONE clean line, never a raw Node stack trace: the CLI's fail-loud
|
|
112
|
+
// contract is "denied, not absent", not a crash. The full stack stays available under
|
|
113
|
+
// COTAL_DEBUG for diagnosis.
|
|
114
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
115
|
+
console.error(c.red(`✗ ${msg}`));
|
|
116
|
+
// Known failure signatures get a one-line operator hint (e.g. a stale-store durable
|
|
117
|
+
// collision names the `cotal clean` reset) - the error itself stays verbatim.
|
|
118
|
+
const hint = staleStoreHint(msg);
|
|
119
|
+
if (hint)
|
|
120
|
+
console.error(c.dim(` ↳ ${hint}`));
|
|
121
|
+
if (process.env.COTAL_DEBUG && e instanceof Error && e.stack)
|
|
122
|
+
console.error(c.dim(e.stack));
|
|
123
|
+
process.exit(1);
|
|
111
124
|
}
|
|
112
125
|
}
|
|
113
126
|
//# sourceMappingURL=command.js.map
|
package/dist/command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAA+B,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,CAAC,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,gBAAgB,EAAkC,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAiB3I,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;EAAwG,CAAC;AAC/H,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;EAA0D,CAAC;AAC/E,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;EAA6G,CAAC;AAEtI,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAQrE;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB1D;AAED,wBAAsB,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CxD;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB5D"}
|
package/dist/commands/agents.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CONTROL_ADMIN } from "@cotal-ai/core";
|
|
1
|
+
import { CONTROL_ADMIN, CONTROL_PRIVILEGED } from "@cotal-ai/core";
|
|
2
2
|
import { loadMeshes, targetFlags } from "@cotal-ai/workspace";
|
|
3
3
|
import { c } from "../ui.js";
|
|
4
4
|
import { askManager, failIfNotOk, resolveControlTarget } from "../lib/control.js";
|
|
@@ -32,19 +32,27 @@ export async function stop(args) {
|
|
|
32
32
|
console.error(c.red("--name is required"));
|
|
33
33
|
process.exit(1);
|
|
34
34
|
}
|
|
35
|
-
//
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
//
|
|
35
|
+
// STATIC mesh: operator stop is a cross-agent op — the admin tier with the scoped
|
|
36
|
+
// `control-caller-admin` cred (holding ONLY the admin-subject publish; that cred IS the
|
|
37
|
+
// cross-agent authority, the manager honors any named target on it).
|
|
38
|
+
// USER mesh: ONE deterministic path — the op rides the operator's own bearer on the SPAWN
|
|
39
|
+
// (privileged) tier, and the MANAGER authorizes: agents under your own owner pass with scope
|
|
40
|
+
// "spawn" (owner-domain), another owner's agent needs "admin" on your ledger row. No
|
|
41
|
+
// client-side try-admin-then-privileged fallback; sending on ctl.admin would die at the
|
|
42
|
+
// broker for every spawn-scoped operator before the manager could decide anything.
|
|
39
43
|
const t = await resolveControlTarget(v, "control-caller-admin");
|
|
40
|
-
const
|
|
44
|
+
const tier = t.auth.bearer ? CONTROL_PRIVILEGED : CONTROL_ADMIN;
|
|
45
|
+
const reply = await askManager(t.space, t.server, "stop", { name: v.name }, t.auth, tier);
|
|
41
46
|
failIfNotOk(reply);
|
|
42
|
-
|
|
47
|
+
// User mesh: a stop IS a grant revoke (rows are runtime grants — a non-running agent holds no
|
|
48
|
+
// standing mint secret); a respawn re-grants automatically. Say so, so the operator's
|
|
49
|
+
// restart-vs-revoke model is visible at the command, not inferred from docs.
|
|
50
|
+
console.log(c.dim(`✓ stopped ${v.name}${t.auth.bearer ? " - its actor grant is revoked; a respawn re-grants automatically" : ""}`));
|
|
43
51
|
}
|
|
44
52
|
export async function ps(args) {
|
|
45
53
|
const v = args.values;
|
|
46
54
|
const t = await resolveControlTarget(v, "control-caller-privileged");
|
|
47
|
-
const reply = await askManager(t.space, t.server, "ps", undefined, t.
|
|
55
|
+
const reply = await askManager(t.space, t.server, "ps", undefined, t.auth);
|
|
48
56
|
failIfNotOk(reply);
|
|
49
57
|
const rows = reply.data ?? [];
|
|
50
58
|
if (!rows.length) {
|
|
@@ -61,7 +69,14 @@ export async function ps(args) {
|
|
|
61
69
|
: r.mesh === "waiting"
|
|
62
70
|
? c.yellow("waiting")
|
|
63
71
|
: c.cyan(r.mesh);
|
|
64
|
-
|
|
72
|
+
// Confirmed failure is red; ambiguity/warning states (unknown/stale) are yellow — the operator
|
|
73
|
+
// triages "definitely broken" before "might be".
|
|
74
|
+
const authColor = r.authHealth === "auth-renewal-failed" ? c.red : c.yellow;
|
|
75
|
+
console.log(`${c.bold(r.name)}${r.role ? c.dim("/" + r.role) : ""} ${c.dim(r.agent + " · " + r.mode)} ${status}${r.authHealth ? " " + authColor(r.authHealth) : ""}`);
|
|
76
|
+
// The detached agent's ONLY operator window into a failing bearer refresh: the provider
|
|
77
|
+
// command's operator-exact sentence, verbatim (it already names the repair).
|
|
78
|
+
if (r.authHealth && r.authReason)
|
|
79
|
+
console.log(authColor(` ${r.authReason}`));
|
|
65
80
|
}
|
|
66
81
|
}
|
|
67
82
|
export async function attach(args) {
|
|
@@ -70,13 +85,15 @@ export async function attach(args) {
|
|
|
70
85
|
console.error(c.red("--name is required"));
|
|
71
86
|
process.exit(1);
|
|
72
87
|
}
|
|
73
|
-
//
|
|
74
|
-
//
|
|
88
|
+
// Same tier routing as stop: static mesh → admin tier on the scoped `control-caller-admin`
|
|
89
|
+
// cred; user mesh → the operator's own bearer on the SPAWN tier, with the manager deciding
|
|
90
|
+
// (own owner-domain passes with "spawn", cross-owner needs ledger "admin").
|
|
75
91
|
const t = await resolveControlTarget(v, "control-caller-admin");
|
|
76
|
-
const
|
|
92
|
+
const tier = t.auth.bearer ? CONTROL_PRIVILEGED : CONTROL_ADMIN;
|
|
93
|
+
const reply = await askManager(t.space, t.server, "attach", { name: v.name }, t.auth, tier);
|
|
77
94
|
failIfNotOk(reply);
|
|
78
95
|
const { ws } = reply.data;
|
|
79
|
-
console.error(c.dim(`attached to ${v.name}
|
|
96
|
+
console.error(c.dim(`attached to ${v.name} - ${detachKey().label} to detach`));
|
|
80
97
|
await attachClient(ws);
|
|
81
98
|
console.error(c.dim(`\ndetached from ${v.name}`));
|
|
82
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA0E,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/commands/channels.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAIxB;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/commands/channels.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAIxB;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D9D"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { seedChannelRegistry, readChannelRegistry, effectiveReplay, } from "@cotal-ai/core";
|
|
2
|
-
import { connectOrExit } from "../lib/connect.js";
|
|
2
|
+
import { connectOrExit, userViewAuthOrExit } from "../lib/connect.js";
|
|
3
3
|
import { c } from "../ui.js";
|
|
4
4
|
/**
|
|
5
5
|
* `cotal channels` — inspect and mutate the per-space channel registry (replay policy,
|
|
@@ -27,11 +27,21 @@ export async function channels(args) {
|
|
|
27
27
|
// `list` is read-only → the scoped `operator` cred (channel-registry read, no stream-admin).
|
|
28
28
|
// `set`/`default` WRITE the registry → the narrow `channel-writer` cred ($KV.<channelBucket>.> +
|
|
29
29
|
// read-before-write; no stream data, no other bucket, no chat/DM).
|
|
30
|
+
// USER MODE: `list` rides the caller's OWN agent-view bearer (the registry is world-readable
|
|
31
|
+
// in-space); writes ride a one-shot "channel-writer" VIEW bearer, exchange-gated on ledger
|
|
32
|
+
// scope "admin" (the refusal names the exact re-grant).
|
|
30
33
|
const profile = sub === "list" ? "operator" : "channel-writer";
|
|
31
|
-
const
|
|
34
|
+
const conn = await connectOrExit(values, profile); // creds undefined ⇒ open mode
|
|
35
|
+
const user = conn.bearer && sub !== "list" ? await userViewAuthOrExit(conn, "channel-writer") : undefined;
|
|
36
|
+
const { server, space, creds } = conn;
|
|
37
|
+
const auth = user
|
|
38
|
+
? { bearer: user.bearer, sentinelCreds: user.sentinelCreds }
|
|
39
|
+
: conn.bearer
|
|
40
|
+
? { bearer: conn.bearer, sentinelCreds: conn.sentinelCreds }
|
|
41
|
+
: { creds };
|
|
32
42
|
switch (sub) {
|
|
33
43
|
case "list": {
|
|
34
|
-
printRegistry(await readChannelRegistry({ servers: server, space,
|
|
44
|
+
printRegistry(await readChannelRegistry({ servers: server, space, ...auth }));
|
|
35
45
|
return;
|
|
36
46
|
}
|
|
37
47
|
case "set": {
|
|
@@ -48,10 +58,10 @@ export async function channels(args) {
|
|
|
48
58
|
if (values.instructions !== undefined)
|
|
49
59
|
cfg.instructions = values.instructions;
|
|
50
60
|
if (!Object.keys(cfg).length) {
|
|
51
|
-
console.error(c.red("nothing to set
|
|
61
|
+
console.error(c.red("nothing to set - pass --replay/--no-replay, --window, --desc, or --instructions"));
|
|
52
62
|
process.exit(1);
|
|
53
63
|
}
|
|
54
|
-
await seedChannelRegistry({ servers: server, space,
|
|
64
|
+
await seedChannelRegistry({ servers: server, space, ...auth, file: { channels: { [name]: cfg } } });
|
|
55
65
|
console.log(c.green(`✓ set #${name} in "${space}"`));
|
|
56
66
|
return;
|
|
57
67
|
}
|
|
@@ -65,7 +75,7 @@ export async function channels(args) {
|
|
|
65
75
|
console.error(c.red("usage: cotal channels default [--replay|--no-replay] [--window <dur>]"));
|
|
66
76
|
process.exit(1);
|
|
67
77
|
}
|
|
68
|
-
await seedChannelRegistry({ servers: server, space,
|
|
78
|
+
await seedChannelRegistry({ servers: server, space, ...auth, file: { defaults } });
|
|
69
79
|
console.log(c.green(`✓ set space defaults in "${space}"`));
|
|
70
80
|
return;
|
|
71
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/commands/channels.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,GAKhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/commands/channels.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type CompletionResult, type ParsedArgs } from "@cotal-ai/core";
|
|
2
|
+
/** `cotal clean <history|store|all>` - one configurable cleanup verb.
|
|
3
|
+
* - `history`: purge the retained message backlog on the RUNNING broker (CHAT, plus DMs with
|
|
4
|
+
* `--dms`) via the least-privilege purger cred. `cotal history clear` is a thin alias.
|
|
5
|
+
* - `store`: delete the STOPPED mesh's JetStream store (`.cotal/nats` or `--store-dir`) - streams,
|
|
6
|
+
* durables, and messages. The reset for stale on-disk state (e.g. durables minted by an older,
|
|
7
|
+
* incompatible protocol generation).
|
|
8
|
+
* - `all`: `store` plus the space identity (`.cotal/auth`) and every local cred derived from it;
|
|
9
|
+
* the next `cotal up` mints a fresh identity.
|
|
10
|
+
* `history` needs the mesh UP (it is a live purge); `store`/`all` need it DOWN (files can't be
|
|
11
|
+
* deleted under a live server) and refuse loudly while any recorded process is still alive.
|
|
12
|
+
* Personas (`.cotal/agents`) are source and are never touched. */
|
|
13
|
+
export declare function clean(args: ParsedArgs): Promise<void>;
|
|
14
|
+
/** The live-purge half, shared with the `cotal history clear` alias. Resolves the running mesh (from
|
|
15
|
+
* any dir) + a least-privilege PURGER cred - `--creds` is a raw off-registry connect. Purge-only and
|
|
16
|
+
* destructive, so it mints exactly the purge grant (STREAM.PURGE on CHAT + DM), not the broad
|
|
17
|
+
* operator cred. In USER MODE the purge rides a one-shot "purger" VIEW bearer, exchange-gated on
|
|
18
|
+
* ledger scope "admin" (the refusal names the exact re-grant). */
|
|
19
|
+
export declare function purgeHistory(values: {
|
|
20
|
+
server?: string;
|
|
21
|
+
space?: string;
|
|
22
|
+
creds?: string;
|
|
23
|
+
dms?: boolean;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
/** The recorded mesh process still alive under this root, as a "label (pid N)" string - or
|
|
26
|
+
* undefined when everything is stopped. A stale pidfile (recorded pid no longer alive) does not
|
|
27
|
+
* block: a crashed broker must not wedge its own cleanup. Liveness rides the shared hardened
|
|
28
|
+
* probe (`pidfileState`): pid > 0 only, EPERM counts as alive. */
|
|
29
|
+
export declare function liveMeshProcess(root: string): string | undefined;
|
|
30
|
+
/** Delete the stopped mesh's local state and return what was removed (paths relative to the root).
|
|
31
|
+
* `store`: the JetStream store directory. `all` adds the space identity (`.cotal/auth`), the
|
|
32
|
+
* locally persisted creds/markers tied to it - all invalid once the identity regenerates, and
|
|
33
|
+
* re-minted by the next fresh `cotal up` - plus crash residue a normal `down` would have swept
|
|
34
|
+
* (stale pidfiles, `run/`). Callers guard liveness first (`liveMeshProcess`). */
|
|
35
|
+
export declare function removeLocalState(root: string, opts: {
|
|
36
|
+
includeAuth: boolean;
|
|
37
|
+
storeDir?: string;
|
|
38
|
+
}): string[];
|
|
39
|
+
export declare function cleanComplete(argv: string[]): CompletionResult;
|
|
40
|
+
//# sourceMappingURL=clean.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAU3F;;;;;;;;;;mEAUmE;AACnE,wBAAsB,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B3D;AAED;;;;mEAImE;AACnE,wBAAsB,YAAY,CAAC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5H;AAED;;;mEAGmE;AACnE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMhE;AAED;;;;kFAIkF;AAClF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,EAAE,CAgC1G;AAaD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAG9D"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { existsSync, rmSync } from "node:fs";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { clearSpaceHistory } from "@cotal-ai/core";
|
|
4
|
+
import { removeMeshesByRoot, resolveSpace } from "@cotal-ai/workspace";
|
|
5
|
+
import { connectOrExit, userViewAuthOrExit } from "../lib/connect.js";
|
|
6
|
+
import { c } from "../ui.js";
|
|
7
|
+
import { cotalRoot } from "../lib/paths.js";
|
|
8
|
+
import { pidfileState, pidfileTargets } from "./down.js";
|
|
9
|
+
const TARGETS = ["history", "store", "all"];
|
|
10
|
+
/** `cotal clean <history|store|all>` - one configurable cleanup verb.
|
|
11
|
+
* - `history`: purge the retained message backlog on the RUNNING broker (CHAT, plus DMs with
|
|
12
|
+
* `--dms`) via the least-privilege purger cred. `cotal history clear` is a thin alias.
|
|
13
|
+
* - `store`: delete the STOPPED mesh's JetStream store (`.cotal/nats` or `--store-dir`) - streams,
|
|
14
|
+
* durables, and messages. The reset for stale on-disk state (e.g. durables minted by an older,
|
|
15
|
+
* incompatible protocol generation).
|
|
16
|
+
* - `all`: `store` plus the space identity (`.cotal/auth`) and every local cred derived from it;
|
|
17
|
+
* the next `cotal up` mints a fresh identity.
|
|
18
|
+
* `history` needs the mesh UP (it is a live purge); `store`/`all` need it DOWN (files can't be
|
|
19
|
+
* deleted under a live server) and refuse loudly while any recorded process is still alive.
|
|
20
|
+
* Personas (`.cotal/agents`) are source and are never touched. */
|
|
21
|
+
export async function clean(args) {
|
|
22
|
+
const target = args.positionals[0];
|
|
23
|
+
const values = args.values;
|
|
24
|
+
if (!target || !TARGETS.includes(target))
|
|
25
|
+
return usage();
|
|
26
|
+
if (!values.force) {
|
|
27
|
+
console.error(c.red(`refusing to clean ${target} without --force`));
|
|
28
|
+
console.error(c.dim(`usage: ${USAGE}`));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
if (target === "history")
|
|
32
|
+
return purgeHistory(values);
|
|
33
|
+
const root = cotalRoot();
|
|
34
|
+
const running = liveMeshProcess(root);
|
|
35
|
+
if (running) {
|
|
36
|
+
console.error(c.red(`✗ the mesh is still running (${running}) - stop it first: \`cotal down\`, then \`cotal clean ${target}\``));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const removed = removeLocalState(root, { includeAuth: target === "all", storeDir: values["store-dir"] });
|
|
40
|
+
// Full reset also drops the mesh from the machine registry (and the `current` pointer),
|
|
41
|
+
// keyed by ROOT - see removeMeshesByRoot for why a space-name key would be wrong. A normal
|
|
42
|
+
// `down` already did this; after a crash it is exactly the ghost entry to clear.
|
|
43
|
+
if (target === "all")
|
|
44
|
+
removeMeshesByRoot(root);
|
|
45
|
+
if (removed.length === 0) {
|
|
46
|
+
console.log(c.dim("nothing to clean - no local state found"));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
for (const path of removed)
|
|
50
|
+
console.log(c.green(`✓ removed ${path}`));
|
|
51
|
+
if (target === "all")
|
|
52
|
+
console.log(c.dim("a fresh space identity is minted on the next `cotal up`"));
|
|
53
|
+
}
|
|
54
|
+
/** The live-purge half, shared with the `cotal history clear` alias. Resolves the running mesh (from
|
|
55
|
+
* any dir) + a least-privilege PURGER cred - `--creds` is a raw off-registry connect. Purge-only and
|
|
56
|
+
* destructive, so it mints exactly the purge grant (STREAM.PURGE on CHAT + DM), not the broad
|
|
57
|
+
* operator cred. In USER MODE the purge rides a one-shot "purger" VIEW bearer, exchange-gated on
|
|
58
|
+
* ledger scope "admin" (the refusal names the exact re-grant). */
|
|
59
|
+
export async function purgeHistory(values) {
|
|
60
|
+
const conn = await connectOrExit(values, "purger");
|
|
61
|
+
const user = conn.bearer ? await userViewAuthOrExit(conn, "purger") : undefined;
|
|
62
|
+
const { server, space, creds } = conn;
|
|
63
|
+
const result = await clearSpaceHistory({
|
|
64
|
+
servers: server,
|
|
65
|
+
space,
|
|
66
|
+
...(user ? { bearer: user.bearer, sentinelCreds: user.sentinelCreds } : { creds }),
|
|
67
|
+
includeDms: values.dms,
|
|
68
|
+
});
|
|
69
|
+
const dm = result.dm === undefined ? "" : `, ${result.dm} DM message${result.dm === 1 ? "" : "s"}`;
|
|
70
|
+
console.log(c.green(`✓ cleared ${result.chat} channel message${result.chat === 1 ? "" : "s"}${dm} from "${space}"`));
|
|
71
|
+
}
|
|
72
|
+
/** The recorded mesh process still alive under this root, as a "label (pid N)" string - or
|
|
73
|
+
* undefined when everything is stopped. A stale pidfile (recorded pid no longer alive) does not
|
|
74
|
+
* block: a crashed broker must not wedge its own cleanup. Liveness rides the shared hardened
|
|
75
|
+
* probe (`pidfileState`): pid > 0 only, EPERM counts as alive. */
|
|
76
|
+
export function liveMeshProcess(root) {
|
|
77
|
+
for (const [file, label] of pidfileTargets(resolveSpace(root))) {
|
|
78
|
+
const s = pidfileState(join(root, ".cotal", file));
|
|
79
|
+
if (s.live)
|
|
80
|
+
return `${label}, pid ${s.pid}`;
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
/** Delete the stopped mesh's local state and return what was removed (paths relative to the root).
|
|
85
|
+
* `store`: the JetStream store directory. `all` adds the space identity (`.cotal/auth`), the
|
|
86
|
+
* locally persisted creds/markers tied to it - all invalid once the identity regenerates, and
|
|
87
|
+
* re-minted by the next fresh `cotal up` - plus crash residue a normal `down` would have swept
|
|
88
|
+
* (stale pidfiles, `run/`). Callers guard liveness first (`liveMeshProcess`). */
|
|
89
|
+
export function removeLocalState(root, opts) {
|
|
90
|
+
const removed = [];
|
|
91
|
+
const rm = (path, label) => {
|
|
92
|
+
if (!existsSync(path))
|
|
93
|
+
return;
|
|
94
|
+
rmSync(path, { recursive: true, force: true });
|
|
95
|
+
removed.push(label);
|
|
96
|
+
};
|
|
97
|
+
// The space must be read before `.cotal/auth` goes - it names the auth service's pidfile.
|
|
98
|
+
const space = resolveSpace(root);
|
|
99
|
+
const storeDir = opts.storeDir ? resolve(opts.storeDir) : join(root, ".cotal", "nats");
|
|
100
|
+
rm(storeDir, opts.storeDir ? storeDir : ".cotal/nats (JetStream store)");
|
|
101
|
+
if (opts.includeAuth) {
|
|
102
|
+
rm(join(root, ".cotal", "auth"), ".cotal/auth (space identity + creds)");
|
|
103
|
+
// Creds/records signed by (or tied to) the deleted identity: stale the moment it is gone.
|
|
104
|
+
// The fresh-`up` path re-mints every one of these (keep in sync with `provisionMembershipCreds`
|
|
105
|
+
// in up.ts); sweeping them keeps `doctor auth` honest in between and guarantees no
|
|
106
|
+
// old-operator material survives the reset.
|
|
107
|
+
for (const f of [
|
|
108
|
+
"delivery.creds",
|
|
109
|
+
"manager.delivery-aware",
|
|
110
|
+
"membership-observer.creds",
|
|
111
|
+
"membership-rw.creds",
|
|
112
|
+
"connection-evictor.creds",
|
|
113
|
+
"membership.json",
|
|
114
|
+
"renewal.json",
|
|
115
|
+
])
|
|
116
|
+
rm(join(root, ".cotal", f), `.cotal/${f}`);
|
|
117
|
+
// Crash residue: after a clean `down` none of this exists; after a crash the dead pidfiles and
|
|
118
|
+
// transient launch artifacts are exactly the leftovers a "full local reset" must not keep.
|
|
119
|
+
for (const [file] of pidfileTargets(space))
|
|
120
|
+
rm(join(root, ".cotal", file), `.cotal/${file} (stale pidfile)`);
|
|
121
|
+
rm(join(root, ".cotal", "run"), ".cotal/run (launch artifacts)");
|
|
122
|
+
}
|
|
123
|
+
return removed;
|
|
124
|
+
}
|
|
125
|
+
const USAGE = "cotal clean <history|store|all> --force [--dms] [--space <s>] [--server <url>] [--creds <path>] [--store-dir <dir>]";
|
|
126
|
+
function usage() {
|
|
127
|
+
console.error(c.red(`usage: ${USAGE}`));
|
|
128
|
+
console.error(c.dim(" history purge the message backlog on the running broker (--dms to include DMs)"));
|
|
129
|
+
console.error(c.dim(" store delete the stopped mesh's JetStream store (.cotal/nats)"));
|
|
130
|
+
console.error(c.dim(" all store + the space identity (.cotal/auth) - full local reset"));
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
export function cleanComplete(argv) {
|
|
134
|
+
if (argv.length <= 1)
|
|
135
|
+
return { items: TARGETS.map((value) => ({ value })), directive: "nofiles" };
|
|
136
|
+
return { items: [], directive: "nofiles" };
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=clean.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,10 +83,10 @@ async function emitCommandCompletion(cmd, argv) {
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
const SCRIPTS = {
|
|
86
|
-
bash: lines("# cotal bash completion
|
|
87
|
-
zsh: lines("#compdef cotal", "# cotal zsh completion
|
|
88
|
-
fish: lines("# cotal fish completion
|
|
89
|
-
powershell: lines("# cotal PowerShell completion
|
|
86
|
+
bash: lines("# cotal bash completion - forwards each <TAB> to `cotal __complete` (dynamic).", "_cotal_complete() {", ' local cur out line', ' cur="${COMP_WORDS[COMP_CWORD]}"', ' local -a args=("${COMP_WORDS[@]:1:COMP_CWORD}")', ' out="$(cotal __complete "${args[@]}" 2>/dev/null)" || return', " local -a values=()", " while IFS= read -r line; do", ' [ -z "$line" ] && continue', ' case "$line" in', " :nospace) compopt -o nospace 2>/dev/null ;;", " :*) ;;", ` *) values+=("\${line%%$'\\t'*}") ;;`, " esac", ' done <<< "$out"', ' COMPREPLY=($(compgen -W "${values[*]}" -- "$cur"))', "}", "complete -F _cotal_complete cotal"),
|
|
87
|
+
zsh: lines("#compdef cotal", "# cotal zsh completion - forwards each <TAB> to `cotal __complete` (dynamic).", "_cotal() {", " local -a args; args=(\"${(@)words[2,CURRENT]}\")", ' local out line val desc', ' out="$(cotal __complete "${args[@]}" 2>/dev/null)"', " local -a descs", " while IFS= read -r line; do", ' [[ -z "$line" || "$line" == :* ]] && continue', ` val="\${line%%$'\\t'*}"; desc="\${line#*$'\\t'}"`, ' if [[ "$desc" != "$line" ]]; then descs+=("$val:$desc"); else descs+=("$val"); fi', ' done <<< "$out"', " (( ${#descs} )) && _describe -t cotal cotal descs", "}", "compdef _cotal cotal"),
|
|
88
|
+
fish: lines("# cotal fish completion - forwards each <TAB> to `cotal __complete` (dynamic).", "function __cotal_complete", " set -l tokens (commandline -opc) (commandline -ct)", " cotal __complete $tokens[2..-1] 2>/dev/null | string match -rv '^:'", "end", "complete -c cotal -f -a '(__cotal_complete)'"),
|
|
89
|
+
powershell: lines("# cotal PowerShell completion - forwards each <TAB> to `cotal __complete` (dynamic).", "Register-ArgumentCompleter -Native -CommandName cotal -ScriptBlock {", " param($wordToComplete, $commandAst, $cursorPosition)", ' $elements = @($commandAst.CommandElements | Select-Object -Skip 1 | ForEach-Object { "$_" })', " if (-not $wordToComplete) { $elements += '' }", " $out = & cotal __complete @elements 2>$null", " foreach ($line in $out) {", " if ([string]::IsNullOrEmpty($line) -or $line.StartsWith(':')) { continue }", ' $parts = $line -split "`t", 2', " $val = $parts[0]", ' if ($val -notlike "$wordToComplete*") { continue }', " $desc = if ($parts.Length -gt 1) { $parts[1] } else { $val }", " [System.Management.Automation.CompletionResult]::new($val, $val, 'ParameterValue', $desc)", " }", "}"),
|
|
90
90
|
};
|
|
91
91
|
export async function completion(args) {
|
|
92
92
|
const argv = args.positionals;
|
|
@@ -110,7 +110,7 @@ export async function completion(args) {
|
|
|
110
110
|
function install(shell) {
|
|
111
111
|
const sh = shell ?? basename(process.env.SHELL ?? "");
|
|
112
112
|
if (!SCRIPTS[sh]) {
|
|
113
|
-
console.error(c.red(`can't install for "${sh || "unknown shell"}"
|
|
113
|
+
console.error(c.red(`can't install for "${sh || "unknown shell"}" - pass one of: bash, zsh, fish`));
|
|
114
114
|
process.exit(1);
|
|
115
115
|
}
|
|
116
116
|
if (sh === "fish") {
|
|
@@ -3,7 +3,7 @@ import { type ParsedArgs } from "@cotal-ai/core";
|
|
|
3
3
|
* `cotal console` — the live protocol view. A real terminal gets the lazygit-style Ink TUI; a pipe
|
|
4
4
|
* or `--plain` gets the passive line stream. With no `--space` on an open mesh it opens an admin
|
|
5
5
|
* overview of every space first (pick one to drill in, `b` to come back); `--space X` goes straight
|
|
6
|
-
* in. Renders over a read-only observer whose lifecycle `useMesh` owns. See docs/
|
|
6
|
+
* in. Renders over a read-only observer whose lifecycle `useMesh` owns. See docs/mesh-view.md.
|
|
7
7
|
*/
|
|
8
8
|
export declare function console_(args: ParsedArgs): Promise<void>;
|
|
9
9
|
//# sourceMappingURL=console.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/commands/console.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/commands/console.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK/D;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwE9D"}
|
package/dist/commands/console.js
CHANGED
|
@@ -3,15 +3,14 @@ import { userInfo } from "node:os";
|
|
|
3
3
|
import { createElement } from "react";
|
|
4
4
|
import { render } from "ink";
|
|
5
5
|
import { chatWildcard } from "@cotal-ai/core";
|
|
6
|
-
import { connectOrExit } from "../lib/connect.js";
|
|
7
|
-
import { c } from "../ui.js";
|
|
6
|
+
import { connectOrExit, userViewAuthOrExit } from "../lib/connect.js";
|
|
8
7
|
import { runLog } from "../render.js";
|
|
9
8
|
import { Root, makeObserver } from "../console/root.js";
|
|
10
9
|
/**
|
|
11
10
|
* `cotal console` — the live protocol view. A real terminal gets the lazygit-style Ink TUI; a pipe
|
|
12
11
|
* or `--plain` gets the passive line stream. With no `--space` on an open mesh it opens an admin
|
|
13
12
|
* overview of every space first (pick one to drill in, `b` to come back); `--space X` goes straight
|
|
14
|
-
* in. Renders over a read-only observer whose lifecycle `useMesh` owns. See docs/
|
|
13
|
+
* in. Renders over a read-only observer whose lifecycle `useMesh` owns. See docs/mesh-view.md.
|
|
15
14
|
*/
|
|
16
15
|
export async function console_(args) {
|
|
17
16
|
const values = args.values;
|
|
@@ -19,12 +18,19 @@ export async function console_(args) {
|
|
|
19
18
|
// Auth mode self-mints an admin god-view cred (the console shows DMs/anycast, which the narrower
|
|
20
19
|
// `observer` profile denies → NATS Authorization Violation); an authed server hosts exactly one
|
|
21
20
|
// space, so we enter it directly. Open mode connects bare; with no --space, the TTY shows the
|
|
22
|
-
// space overview. An explicit --creds wins.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
21
|
+
// space overview. An explicit --creds wins. USER MODE rides an exchange-gated "admin" VIEW
|
|
22
|
+
// bearer (ledger scope "admin") with a bearer source, same standing shape as `cotal web`.
|
|
23
|
+
const conn = await connectOrExit(values, "admin");
|
|
24
|
+
const user = conn.bearer ? await userViewAuthOrExit(conn, "admin") : undefined;
|
|
25
|
+
const { server, space: resolvedSpace, creds, auth } = conn;
|
|
26
|
+
// Auth/user mode pins its one space; open mode keeps --space (undefined → the overview picker).
|
|
27
|
+
const space = auth || user ? resolvedSpace : values.space;
|
|
28
|
+
const observerAuth = user
|
|
29
|
+
? { user: { source: user.source, sentinelCreds: user.sentinelCreds, owner: user.owner, actor: user.actor } }
|
|
30
|
+
: { creds };
|
|
26
31
|
// Operator identity for sent messages (still off the roster). Open mode or an explicit --creds can
|
|
27
|
-
// write; the self-minted observer cred (auth default)
|
|
32
|
+
// write; the self-minted observer cred (auth default) and the user-mode admin view are read-only,
|
|
33
|
+
// so the palette/`D` are inert there.
|
|
28
34
|
const operator = (() => {
|
|
29
35
|
try {
|
|
30
36
|
return userInfo().username || "operator";
|
|
@@ -33,12 +39,12 @@ export async function console_(args) {
|
|
|
33
39
|
return "operator";
|
|
34
40
|
}
|
|
35
41
|
})();
|
|
36
|
-
const canWrite = !creds || !!values.creds;
|
|
42
|
+
const canWrite = user ? false : !creds || !!values.creds;
|
|
37
43
|
// No TTY (piped/headless) or --plain → the passive line stream; Ink needs a real terminal, and a
|
|
38
44
|
// stream can't host the picker, so it falls back to the RESOLVED mesh's space (not the cwd's).
|
|
39
45
|
if (values.plain || process.stdout.isTTY !== true) {
|
|
40
46
|
const s = space ?? resolvedSpace;
|
|
41
|
-
await runLog(makeObserver(s, server,
|
|
47
|
+
await runLog(makeObserver(s, server, observerAuth, operator), s, creds || user ? chatWildcard(s) : undefined);
|
|
42
48
|
return;
|
|
43
49
|
}
|
|
44
50
|
// Full-screen takeover + mouse-wheel scroll: the alternate screen gives a clean app-like
|
|
@@ -70,7 +76,7 @@ export async function console_(args) {
|
|
|
70
76
|
restore();
|
|
71
77
|
process.exit(0);
|
|
72
78
|
});
|
|
73
|
-
const { waitUntilExit } = render(createElement(Root, { server,
|
|
79
|
+
const { waitUntilExit } = render(createElement(Root, { server, auth: observerAuth, space, canWrite, name: operator }), {
|
|
74
80
|
exitOnCtrlC: true,
|
|
75
81
|
maxFps: 30,
|
|
76
82
|
incrementalRendering: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/commands/console.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAmB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/commands/console.ts"],"names":[],"mappings":"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"}
|