@cotal-ai/cli 0.10.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/dist/command.d.ts.map +1 -1
  2. package/dist/command.js +11 -3
  3. package/dist/command.js.map +1 -1
  4. package/dist/commands/agents.d.ts.map +1 -1
  5. package/dist/commands/agents.js +30 -13
  6. package/dist/commands/agents.js.map +1 -1
  7. package/dist/commands/channels.d.ts.map +1 -1
  8. package/dist/commands/channels.js +16 -6
  9. package/dist/commands/channels.js.map +1 -1
  10. package/dist/commands/completion.js +5 -5
  11. package/dist/commands/console.d.ts +1 -1
  12. package/dist/commands/console.d.ts.map +1 -1
  13. package/dist/commands/console.js +17 -11
  14. package/dist/commands/console.js.map +1 -1
  15. package/dist/commands/doctor.d.ts +14 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +171 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/down-manifest.js +15 -15
  20. package/dist/commands/down.d.ts.map +1 -1
  21. package/dist/commands/down.js +4 -1
  22. package/dist/commands/down.js.map +1 -1
  23. package/dist/commands/ext.js +11 -11
  24. package/dist/commands/feedback.js +2 -2
  25. package/dist/commands/history.d.ts.map +1 -1
  26. package/dist/commands/history.js +7 -3
  27. package/dist/commands/history.js.map +1 -1
  28. package/dist/commands/join.d.ts.map +1 -1
  29. package/dist/commands/join.js +14 -7
  30. package/dist/commands/join.js.map +1 -1
  31. package/dist/commands/meshes.js +2 -2
  32. package/dist/commands/mint.d.ts.map +1 -1
  33. package/dist/commands/mint.js +16 -5
  34. package/dist/commands/mint.js.map +1 -1
  35. package/dist/commands/models.js +1 -1
  36. package/dist/commands/models.js.map +1 -1
  37. package/dist/commands/personas.js +4 -4
  38. package/dist/commands/send.js +1 -1
  39. package/dist/commands/setup.js +25 -25
  40. package/dist/commands/setup.js.map +1 -1
  41. package/dist/commands/spawn-manifest.d.ts.map +1 -1
  42. package/dist/commands/spawn-manifest.js +47 -25
  43. package/dist/commands/spawn-manifest.js.map +1 -1
  44. package/dist/commands/spawn.d.ts +6 -0
  45. package/dist/commands/spawn.d.ts.map +1 -1
  46. package/dist/commands/spawn.js +257 -46
  47. package/dist/commands/spawn.js.map +1 -1
  48. package/dist/commands/status.d.ts.map +1 -1
  49. package/dist/commands/status.js +71 -6
  50. package/dist/commands/status.js.map +1 -1
  51. package/dist/commands/topology.js +2 -2
  52. package/dist/commands/up.d.ts +5 -0
  53. package/dist/commands/up.d.ts.map +1 -1
  54. package/dist/commands/up.js +269 -48
  55. package/dist/commands/up.js.map +1 -1
  56. package/dist/commands/use.js +1 -1
  57. package/dist/console/commands.js +2 -2
  58. package/dist/console/mesh.js +1 -1
  59. package/dist/console/mesh.js.map +1 -1
  60. package/dist/console/root.d.ts +15 -3
  61. package/dist/console/root.d.ts.map +1 -1
  62. package/dist/console/root.js +12 -7
  63. package/dist/console/root.js.map +1 -1
  64. package/dist/console/ui/Confirm.js +1 -1
  65. package/dist/console/ui/Confirm.js.map +1 -1
  66. package/dist/console/ui/Feed.js +1 -1
  67. package/dist/console/ui/Feed.js.map +1 -1
  68. package/dist/console/ui/Help.js +2 -2
  69. package/dist/console/ui/Help.js.map +1 -1
  70. package/dist/console/ui/NeedsYou.js +1 -1
  71. package/dist/console/ui/NeedsYou.js.map +1 -1
  72. package/dist/console/ui/SpacePicker.js +1 -1
  73. package/dist/console/ui/SpacePicker.js.map +1 -1
  74. package/dist/console/ui/Tiles.js +1 -1
  75. package/dist/console/ui/topo/Map.js +1 -1
  76. package/dist/console/ui/topo/Map.js.map +1 -1
  77. package/dist/console/ui/topo/Matrix.js +2 -2
  78. package/dist/console/ui/topo/Matrix.js.map +1 -1
  79. package/dist/console/ui/topo/Sequence.js +1 -1
  80. package/dist/console/ui/topo/Sequence.js.map +1 -1
  81. package/dist/ext-loader.js +8 -8
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +29 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/lib/attach-client.js +1 -1
  86. package/dist/lib/auth-proc.d.ts +19 -0
  87. package/dist/lib/auth-proc.d.ts.map +1 -0
  88. package/dist/lib/auth-proc.js +81 -0
  89. package/dist/lib/auth-proc.js.map +1 -0
  90. package/dist/lib/connect.d.ts +1 -1
  91. package/dist/lib/connect.d.ts.map +1 -1
  92. package/dist/lib/connect.js +2 -2
  93. package/dist/lib/connect.js.map +1 -1
  94. package/dist/lib/control.d.ts +14 -6
  95. package/dist/lib/control.d.ts.map +1 -1
  96. package/dist/lib/control.js +23 -11
  97. package/dist/lib/control.js.map +1 -1
  98. package/dist/lib/delivery-proc.js +2 -2
  99. package/dist/lib/manifest/apply.d.ts +3 -2
  100. package/dist/lib/manifest/apply.d.ts.map +1 -1
  101. package/dist/lib/manifest/apply.js +7 -2
  102. package/dist/lib/manifest/apply.js.map +1 -1
  103. package/dist/lib/manifest/ledger.js +4 -4
  104. package/dist/lib/manifest/live.d.ts +23 -9
  105. package/dist/lib/manifest/live.d.ts.map +1 -1
  106. package/dist/lib/manifest/live.js +22 -12
  107. package/dist/lib/manifest/live.js.map +1 -1
  108. package/dist/lib/manifest/model.d.ts +4 -1
  109. package/dist/lib/manifest/model.d.ts.map +1 -1
  110. package/dist/lib/manifest/prepare.d.ts +2 -0
  111. package/dist/lib/manifest/prepare.d.ts.map +1 -1
  112. package/dist/lib/manifest/prepare.js +5 -2
  113. package/dist/lib/manifest/prepare.js.map +1 -1
  114. package/dist/lib/manifest/render.d.ts.map +1 -1
  115. package/dist/lib/manifest/render.js +14 -13
  116. package/dist/lib/manifest/render.js.map +1 -1
  117. package/dist/lib/manifest/resolve.js +19 -6
  118. package/dist/lib/manifest/resolve.js.map +1 -1
  119. package/dist/lib/manifest/schema.d.ts +4 -1
  120. package/dist/lib/manifest/schema.d.ts.map +1 -1
  121. package/dist/lib/manifest/schema.js +10 -2
  122. package/dist/lib/manifest/schema.js.map +1 -1
  123. package/dist/lib/setup-log.js +1 -1
  124. package/dist/lib/status.d.ts +1 -1
  125. package/dist/lib/status.js +1 -1
  126. package/dist/lib/transient.d.ts +8 -10
  127. package/dist/lib/transient.d.ts.map +1 -1
  128. package/dist/lib/transient.js +11 -11
  129. package/dist/lib/transient.js.map +1 -1
  130. package/dist/render.js +2 -2
  131. package/dist/ui.js +1 -1
  132. package/dist/ui.js.map +1 -1
  133. package/package.json +3 -3
@@ -1,7 +1,8 @@
1
- import { spawn as spawnProcess } from "node:child_process";
1
+ import { spawn as spawnProcess, execFile } from "node:child_process";
2
+ import { rmSync } from "node:fs";
2
3
  import { join, dirname, resolve as resolvePath } from "node:path";
3
- import { agentFilePath, connectorServers, firstFreeName, isReachable, loadAgentFile, loadCotalConfig, mintCreds, mkSecretDir, newIdentity, parseShareSelection, provisionAgent, registry, writeSecretFile, CotalEndpoint, CONTROL_PRIVILEGED, } from "@cotal-ai/core";
4
- import { authDir, credsFlag, defaultAgentOverride, defaultAgentType, defaultPersonaOverride, defaultPersonaRef, launchFlags, loadMeshes, provenance, resolveMeshTarget, serverFlag, spaceFlag, } from "@cotal-ai/workspace";
4
+ import { agentFilePath, connectorServers, deprovisionAgent, firstFreeName, isReachable, loadAgentFile, loadCotalConfig, mintCreds, mkSecretDir, newIdentity, parseShareSelection, principalKey, provisionAgent, provisionAgentDurables, registry, resolveAuthProvider, writeSecretFile, CotalEndpoint, CONTROL_PRIVILEGED, } from "@cotal-ai/core";
5
+ import { authDir, credsFlag, defaultAgentOverride, defaultAgentType, defaultPersonaOverride, defaultPersonaRef, launchFlags, loadMeshes, loadSpaceAuth, mergeLaunchOptions, parseLaunchOptions, provenance, resolveMeshTarget, serverFlag, spaceFlag, userAuthStateDir, } from "@cotal-ai/workspace";
5
6
  import { c } from "../ui.js";
6
7
  import { completedFlagValue, completingFlagValue, hasCompletedFlagValue, positionalsForCompletion } from "../lib/completion.js";
7
8
  import { preflightOrExit, resolveTargetOrExit } from "../lib/connect.js";
@@ -145,7 +146,7 @@ const splitFlag = (v) => (v ? v.split(",").map((s) => s.trim()).filter(Boolean)
145
146
  /** The `--detach` mode: hand the launch to the running manager over the control plane. One grammar
146
147
  * with the foreground path; the persona file is resolved (and is the access default) manager-side,
147
148
  * overridden by the same flags, which ride the `start` op. Replaces the removed `cotal start`. */
148
- async function spawnDetached(values, positionals, transcript) {
149
+ async function spawnDetached(values, positionals, transcript, launchOptions) {
149
150
  // WHICH file the manager loads — the exact foreground precedence (`--config` > positional >
150
151
  // `COTAL_DEFAULT_PERSONA` > `default`). Identity is separate:
151
152
  // when `--name` is given it OVERRIDES the file's `name:` (foreground's `requested`), threaded
@@ -155,7 +156,7 @@ async function spawnDetached(values, positionals, transcript) {
155
156
  const managerConfigRef = values.config ?? (!positionals[0] && defaultPersona ? ref : undefined);
156
157
  const t = await resolveControlTarget({ space: values.space, server: values.server, creds: values.creds }, "control-caller-privileged");
157
158
  provenance.read("mesh", `${t.space} (${t.server})`);
158
- console.error(c.dim("waiting for it to join the mesh (the manager replies on a real outcome join, exit, or ~30s) …"));
159
+ console.error(c.dim("waiting for it to join the mesh (the manager replies on a real outcome - join, exit, or ~30s) …"));
159
160
  const reply = await askManager(t.space, t.server, "start", {
160
161
  name: ref,
161
162
  identity: values.name,
@@ -164,6 +165,7 @@ async function spawnDetached(values, positionals, transcript) {
164
165
  config: managerConfigRef,
165
166
  model: values.model,
166
167
  variant: values.variant,
168
+ launchOptions,
167
169
  cwd: values.cwd,
168
170
  resume: values.resume, // host-local session id; the manager preflights connector resume support
169
171
  prompt: values.prompt,
@@ -175,11 +177,11 @@ async function spawnDetached(values, positionals, transcript) {
175
177
  transcript,
176
178
  // #159 B1: the manager replies only on a REAL outcome (presence join / process exit / ~30s
177
179
  // readiness backstop) — the start request must outlive that window, not the 5s op default.
178
- }, t.creds, CONTROL_PRIVILEGED, START_TIMEOUT_MS);
180
+ }, t.auth, CONTROL_PRIVILEGED, START_TIMEOUT_MS);
179
181
  failIfNotOk(reply);
180
182
  const d = reply.data;
181
183
  console.log(c.green(`✓ spawned ${c.bold(d.name)} (detached)`) +
182
- c.dim(` (${d.role ?? "no role"} · ${d.agent} · ${d.mode}) attach with: cotal attach --name ${d.name}`));
184
+ c.dim(` (${d.role ?? "no role"} · ${d.agent} · ${d.mode}) - attach with: cotal attach --name ${d.name}`));
183
185
  }
184
186
  export async function spawn(args) {
185
187
  const positionals = args.positionals;
@@ -206,6 +208,22 @@ export async function spawn(args) {
206
208
  console.error("--variant needs a variant name (got an empty value)");
207
209
  process.exit(1);
208
210
  }
211
+ // `--dry-run` is a manifest-only flag (`-f`): on an imperative spawn it would have to be ignored
212
+ // (and once WAS, silently spawning a real agent) — refuse instead.
213
+ if (values["dry-run"]) {
214
+ console.error(c.red("✗ --dry-run only applies to a manifest deploy (`cotal spawn -f <manifest> --dry-run`)"));
215
+ process.exit(1);
216
+ }
217
+ // Parse `--opt k=v` pairs once, up front — a malformed pair fails loud before either launch path
218
+ // (foreground or detached) does any work. The opaque map is core-agnostic; the connector validates.
219
+ let cliLaunchOptions;
220
+ try {
221
+ cliLaunchOptions = parseLaunchOptions(values.opt);
222
+ }
223
+ catch (e) {
224
+ console.error(e.message);
225
+ process.exit(1);
226
+ }
209
227
  // Transcript mirroring to `tr-<name>` is OFF by default. Tri-state: true (--transcript),
210
228
  // false (--no-transcript, explicit), undefined (absent). Foreground treats absent as off;
211
229
  // detached forwards the tri-state so absent defers to the manager's default.
@@ -214,7 +232,7 @@ export async function spawn(args) {
214
232
  // resolved manager-side (its workspace root owns `.cotal/agents`); flags ride the control
215
233
  // request and override the file exactly as the foreground path does.
216
234
  if (values.detach) {
217
- return spawnDetached(values, positionals, transcript);
235
+ return spawnDetached(values, positionals, transcript, cliLaunchOptions);
218
236
  }
219
237
  // `--creds` names a CONTROL-CALLER credential (reach an off-registry manager) — meaningless for
220
238
  // a foreground launch, which provisions the agent's own creds. Fail loud, never ignore.
@@ -240,8 +258,8 @@ export async function spawn(args) {
240
258
  const code = e.code;
241
259
  if (code === "ENOENT") {
242
260
  console.error(c.red(ref === "default" && !defaultPersona
243
- ? "✗ no default persona yet run `cotal setup` to seed one, or name a persona: `cotal spawn <name>`"
244
- : `✗ no persona "${ref}"${!values.config && !positionals[0] && defaultPersona ? " from COTAL_DEFAULT_PERSONA" : ""} in ${target.space}'s ${target.personaRoot} pass a catalog name, or use \`--config <path>\` for a file elsewhere`));
261
+ ? "✗ no default persona yet - run `cotal setup` to seed one, or name a persona: `cotal spawn <name>`"
262
+ : `✗ no persona "${ref}"${!values.config && !positionals[0] && defaultPersona ? " from COTAL_DEFAULT_PERSONA" : ""} in ${target.space}'s ${target.personaRoot} - pass a catalog name, or use \`--config <path>\` for a file elsewhere`));
245
263
  }
246
264
  else {
247
265
  console.error(c.red(`✗ ${e.message}`));
@@ -260,9 +278,13 @@ export async function spawn(args) {
260
278
  // A second `cotal spawn` of the same agent would otherwise join under a duplicate mesh identity:
261
279
  // auto-number the name past anyone already present (best-effort — this path bypasses the manager's
262
280
  // race-free reservation; see uniqueMeshName). Everything below (creds path, launch) uses `name`.
263
- const name = await uniqueMeshName(requested, { space, server, auth });
281
+ // USER mesh: the advisory presence read has no credential to ride (no static mint — U10), so the
282
+ // requested name stands; a same-name respawn ROTATES that actor's grant (upsert), which kills the
283
+ // previous holder's next bearer refresh with the "secret is stale — respawn" health state rather
284
+ // than aliasing it silently.
285
+ const name = target.mode === "user" ? requested : await uniqueMeshName(requested, { space, server, auth });
264
286
  if (name !== requested)
265
- console.error(`"${requested}" is already on the mesh spawning as ${name} instead`);
287
+ console.error(`"${requested}" is already on the mesh - spawning as ${name} instead`);
266
288
  // When the target was auto-resolved (one mesh up, or the `current` default), say which mesh we
267
289
  // picked — it isn't obvious from the cwd. An explicit --space/--server or a local project is
268
290
  // self-evident, so stay quiet there.
@@ -288,6 +310,8 @@ export async function spawn(args) {
288
310
  // Open mode (no `.cotal/auth`): unchanged — the session connects without creds.
289
311
  let id;
290
312
  let credsPath;
313
+ let userAuth;
314
+ let userCleanup;
291
315
  // The agent's access policy (flags > persona file) — minted into the creds AND forwarded to the
292
316
  // connector (COTAL_SUBSCRIBE / COTAL_ALLOW_*) so the session's runtime read/post set matches its
293
317
  // credentials. One source, so a `--subscribe` override can't land in the creds yet be lost at
@@ -295,7 +319,20 @@ export async function spawn(args) {
295
319
  const subscribe = splitFlag(values.subscribe) ?? def.subscribe;
296
320
  const allowSubscribe = splitFlag(values["allow-subscribe"]) ?? def.allowSubscribe ?? subscribe;
297
321
  const allowPublish = splitFlag(values["allow-publish"]) ?? def.allowPublish;
298
- if (auth) {
322
+ if (target.mode === "user") {
323
+ // USER mesh: the agent runs as a ledger-granted (owner, actor) principal under the LOGGED-IN
324
+ // operator's owner — never a static identity (U10). Provisioning + grant + a one-shot bearer
325
+ // preflight all happen BEFORE launch, so the spawned agent is never the first to discover a
326
+ // dead auth plane.
327
+ ({ userAuth, cleanup: userCleanup } = await provisionUserForeground(target, name, ref, {
328
+ subscribe,
329
+ allowSubscribe,
330
+ allowPublish,
331
+ role,
332
+ capabilities: def.capabilities,
333
+ }));
334
+ }
335
+ else if (auth) {
299
336
  const identity = newIdentity();
300
337
  const prov = new CotalEndpoint({
301
338
  space,
@@ -334,47 +371,221 @@ export async function spawn(args) {
334
371
  // config (global ~/.config/cotal + the target mesh's .cotal), narrowed by an optional
335
372
  // --share-tools selection. Default (no config) is none — the connector launches isolated.
336
373
  const mcpServers = connectorServers(loadCotalConfig(target.root), agentType, parseShareSelection(values["share-tools"]));
337
- const spec = connector.buildLaunch({
338
- space,
339
- name,
340
- role,
341
- id,
342
- creds: credsPath,
343
- servers: server,
344
- configPath: path,
345
- // Model override (wins over the agent file's `model:`) — launch-grammar parity with --detach.
346
- model: values.model,
347
- variant,
348
- subscribe,
349
- allowSubscribe,
350
- allowPublish,
351
- prompt: values.prompt,
352
- // Fork an existing session into the mesh. `prompt + resume` is a supported combo (claude accepts
353
- // the positional prompt alongside `--resume … --fork-session`); an unsupported connector throws.
354
- resume: values.resume,
355
- transcript,
356
- mcpServers,
357
- });
358
- console.error(`spawning ${name}${role ? ` (${role})` : ""} on the mesh press Enter at the dev-channels prompt`);
359
- const child = spawnProcess(spec.command, spec.args, {
360
- stdio: "inherit",
361
- // P3: only the connector-declared env (OS allow-list + identity + named model key) — never
362
- // `...process.env`, so the operator's unrelated secrets don't bleed into the foreground agent.
363
- env: spec.env ?? {},
364
- // `--cwd` roots the agent at another folder/repo (launch-grammar parity with --detach); a
365
- // relative path resolves against the invoking shell's cwd. Omitted → inherit this cwd.
366
- cwd: values.cwd ? resolvePath(values.cwd) : undefined,
367
- });
374
+ // Auth mode provisions the identity + writes its creds to disk BEFORE the connector validates the
375
+ // launch (e.g. `buildLaunch` throws on a rejected `--opt`) and before the child execs. If either
376
+ // fails the agent never joins the mesh, so roll the provision back — mirror the manager's
377
+ // `deprovision`: drop the creds file and tear down the broker footprint (durables + ACL) with an
378
+ // ephemeral, target-pinned deprovisioner cred. A no-op in open mode (nothing was minted).
379
+ const rollbackProvision = async (why) => {
380
+ if (!auth || !id || !credsPath)
381
+ return;
382
+ rmSync(credsPath, { force: true });
383
+ console.error(` ↩ rolled back creds for ${name} (${why})`);
384
+ try {
385
+ const dc = await mintCreds(auth, newIdentity(), "deprovisioner", { deprovisionTarget: id });
386
+ await deprovisionAgent({ servers: server, space, targetId: id, creds: dc });
387
+ }
388
+ catch (e) {
389
+ console.error(`! rollback: broker teardown for ${name} failed: ${e.message}`);
390
+ }
391
+ };
392
+ // From here through a successful child launch, a THROW must undo whatever this spawn provisioned —
393
+ // the user-mode actor grant (userCleanup) OR the static-auth creds + broker footprint
394
+ // (rollbackProvision) — otherwise a buildLaunch/spawn rejection (unsupported resume/model/`--opt`,
395
+ // a bad connector) leaves the just-granted identity standing. The planes are exclusive, so each
396
+ // cleanup is a no-op in the other's mode.
397
+ let child;
398
+ let spec;
399
+ try {
400
+ spec = connector.buildLaunch({
401
+ space,
402
+ name,
403
+ role,
404
+ id,
405
+ creds: credsPath,
406
+ userAuth,
407
+ servers: server,
408
+ configPath: path,
409
+ // Model override (wins over the agent file's `model:`) — launch-grammar parity with --detach.
410
+ model: values.model,
411
+ variant,
412
+ // Opaque connector options: `--opt` flags win per key over the persona's `launchOptions:`.
413
+ launchOptions: mergeLaunchOptions(def.launchOptions, cliLaunchOptions),
414
+ subscribe,
415
+ allowSubscribe,
416
+ allowPublish,
417
+ prompt: values.prompt,
418
+ // Fork an existing session into the mesh. `prompt + resume` is a supported combo (claude accepts
419
+ // the positional prompt alongside `--resume … --fork-session`); an unsupported connector throws.
420
+ resume: values.resume,
421
+ transcript,
422
+ mcpServers,
423
+ });
424
+ console.error(`spawning ${name}${role ? ` (${role})` : ""} on the mesh - press Enter at the dev-channels prompt`);
425
+ if (userAuth)
426
+ console.error(c.dim(` running as you: ${userAuth.owner}.${name} (actor granted; revoked automatically when this process exits)`));
427
+ child = spawnProcess(spec.command, spec.args, {
428
+ stdio: "inherit",
429
+ // P3: only the connector-declared env (OS allow-list + identity + named model key) — never
430
+ // `...process.env`, so the operator's unrelated secrets don't bleed into the foreground agent.
431
+ env: spec.env ?? {},
432
+ // `--cwd` roots the agent at another folder/repo (launch-grammar parity with --detach); a
433
+ // relative path resolves against the invoking shell's cwd. Omitted → inherit this cwd.
434
+ cwd: values.cwd ? resolvePath(values.cwd) : undefined,
435
+ });
436
+ }
437
+ catch (e) {
438
+ // Launch construction / spawn threw AFTER provisioning — undo BOTH planes (each a no-op in the
439
+ // other's mode): revoke the user-mode actor grant AND roll back the static-auth creds + footprint,
440
+ // before rethrowing, so no standing grant survives a spawn that never started.
441
+ if (userCleanup)
442
+ await userCleanup().catch((err) => console.error(c.red(`✗ revoking ${name}'s actor grant: ${err.message}`)));
443
+ await rollbackProvision("launch build failed");
444
+ throw e;
445
+ }
368
446
  await new Promise((resolve) => {
369
447
  child.on("error", (e) => {
448
+ // The exec never started, so the just-provisioned static-auth identity is orphaned — roll it
449
+ // back. (User-mode revoke runs unconditionally once this promise settles, below.)
370
450
  console.error(`✗ failed to launch ${spec.command}: ${e.message}`);
371
- process.exitCode = 1;
372
- resolve();
451
+ void rollbackProvision("exec failed").finally(() => {
452
+ process.exitCode = 1;
453
+ resolve();
454
+ });
373
455
  });
374
456
  child.on("exit", (code) => {
375
457
  process.exitCode = code ?? 0;
376
458
  resolve();
377
459
  });
378
460
  });
461
+ // USER MODE: the runtime-grant invariant applies to the foreground departure too — the agent is
462
+ // gone, so its standing mint authority (ledger row + secret files) goes with it. Best-effort
463
+ // (a SIGKILLed CLI can't run this; the next same-name spawn's rotation is the backstop), loud
464
+ // on failure, never blocking the exit code already set above.
465
+ if (userCleanup)
466
+ await userCleanup().catch((e) => console.error(c.red(`✗ revoking ${name}'s actor grant: ${e.message}`)));
467
+ }
468
+ /** Foreground USER-MODE onboarding — the CLI-side twin of the manager's user spawn provisioning:
469
+ * owner = the logged-in operator (offline, from the login cache + local user-auth material);
470
+ * principal-keyed durables on an ephemeral provisioner (LIVE-ONLY, like static foreground);
471
+ * ledger grant with a fresh per-agent secret (upsert rotates); 0600 secret/sentinel files; and a
472
+ * one-shot bearer preflight whose operator-exact sentence is the refusal. Exits on any failure —
473
+ * the agent process is never launched into a broken auth chain. */
474
+ async function provisionUserForeground(target, name, ref, opts) {
475
+ const { space, server } = target;
476
+ const dir = userAuthStateDir(target.root, space);
477
+ const fail = (msg) => {
478
+ console.error(c.red(`✗ ${msg}`));
479
+ process.exit(1);
480
+ };
481
+ let provider;
482
+ let owner;
483
+ try {
484
+ provider = resolveAuthProvider();
485
+ owner = await provider.ownerForLogin({ dir, space });
486
+ }
487
+ catch (e) {
488
+ return fail(e.message);
489
+ }
490
+ // The provisioner cred is INFRA (pre-flip static coexistence, like the manager's own creds) —
491
+ // loaded explicitly here for durable pre-creation only, never for the agent's identity.
492
+ const infra = loadSpaceAuth(authDir(target.root));
493
+ if (!infra)
494
+ return fail(`space "${space}" has user-auth state but no auth.json under ${authDir(target.root)} - re-run \`cotal up --user-auth\` here`);
495
+ const credsDir = join(authDir(target.root), "creds");
496
+ const tokenPath = join(credsDir, `${name}.actor-token`);
497
+ const sentinelPath = join(credsDir, `${name}.sentinel.creds`);
498
+ const healthPath = join(credsDir, `${name}.auth-health.json`);
499
+ try {
500
+ // The GRANT first — it is the envelope-rule enforcement point (a delegation must sit within
501
+ // the spawner's own grant), so a refused delegation exits here with zero broker footprint —
502
+ // the same ordering as Manager.provisionUserAgent, for the same reason.
503
+ const grant = await provider.grantAgent({
504
+ dir,
505
+ space,
506
+ owner,
507
+ actor: name,
508
+ scope: (opts.capabilities ?? []).filter((s) => s === "spawn" || s === "admin" || /^role:[A-Za-z0-9_-]+$/.test(s)),
509
+ allowSubscribe: opts.allowSubscribe?.length ? opts.allowSubscribe : (opts.subscribe?.length ? opts.subscribe : ["general"]),
510
+ allowPublish: opts.allowPublish ?? [],
511
+ role: opts.role,
512
+ parent: `${owner}.cli`,
513
+ label: ref,
514
+ });
515
+ const prov = new CotalEndpoint({
516
+ space,
517
+ servers: server,
518
+ creds: await mintCreds(infra, newIdentity(), "provisioner"),
519
+ channels: [],
520
+ consume: false,
521
+ registerPresence: false,
522
+ watchPresence: false,
523
+ watchChannels: false,
524
+ card: { name: "spawn-provisioner", role: "provisioner", kind: "endpoint" },
525
+ });
526
+ prov.on("error", (e) => console.error(`! provisioner: ${e.message}`));
527
+ await prov.start();
528
+ try {
529
+ // Live-only, like static foreground spawn: no ACL row → no durable backstop (that requires a
530
+ // managing daemon; use `cotal spawn --detach` / `cotal up` for one).
531
+ await provisionAgentDurables(prov, { owner, actor: name }, {
532
+ subscribe: opts.subscribe,
533
+ allowSubscribe: opts.allowSubscribe,
534
+ role: opts.role,
535
+ durableMembership: false,
536
+ });
537
+ }
538
+ finally {
539
+ await prov.stop();
540
+ }
541
+ mkSecretDir(credsDir);
542
+ writeSecretFile(tokenPath, grant.actorToken);
543
+ writeSecretFile(sentinelPath, grant.sentinelCreds);
544
+ rmSync(healthPath, { force: true });
545
+ provenance.wrote(`actor grant ${owner}.${name} (user mode)`, tokenPath);
546
+ const bearerCmd = [
547
+ process.execPath,
548
+ ...process.execArgv,
549
+ process.argv[1],
550
+ provider.agentBearerCommand,
551
+ "--dir", dir,
552
+ "--space", space,
553
+ "--owner", owner,
554
+ "--actor", name,
555
+ "--token-file", tokenPath,
556
+ "--health-file", healthPath,
557
+ ];
558
+ await new Promise((res, rej) => {
559
+ execFile(bearerCmd[0], bearerCmd.slice(1), { timeout: 30_000, maxBuffer: 64 * 1024 }, (err, _stdout, stderr) => {
560
+ if (err)
561
+ return rej(new Error(stderr.trim() || err.message));
562
+ res();
563
+ });
564
+ });
565
+ return {
566
+ userAuth: { owner, actor: name, sentinelCredsPath: sentinelPath, bearerCmd },
567
+ // The foreground departure's half of the runtime-grant invariant: the caller runs this when
568
+ // the agent process exits — revoke the row, shred the secret material.
569
+ cleanup: async () => {
570
+ await provider.revokeAgent({ dir, owner, actor: name });
571
+ rmSync(tokenPath, { force: true });
572
+ rmSync(sentinelPath, { force: true });
573
+ rmSync(healthPath, { force: true });
574
+ },
575
+ };
576
+ }
577
+ catch (e) {
578
+ // Roll back EVERYTHING this attempt materialized, including the broker footprint the durable
579
+ // provisioning above created — a refused spawn leaves no row, no secret, no orphaned durables.
580
+ await provider.revokeAgent({ dir, owner, actor: name }).catch(() => { });
581
+ rmSync(tokenPath, { force: true });
582
+ rmSync(sentinelPath, { force: true });
583
+ rmSync(healthPath, { force: true });
584
+ const targetId = principalKey(owner, name).key;
585
+ await mintCreds(infra, newIdentity(), "deprovisioner", { deprovisionTarget: targetId })
586
+ .then((creds) => deprovisionAgent({ servers: server, space, targetId, creds }))
587
+ .catch((err) => console.error(c.red(`✗ rollback deprovision ${name}: ${err.message}`)));
588
+ return fail(`agent auth preflight failed for "${name}": ${e.message}`);
589
+ }
379
590
  }
380
591
  //# sourceMappingURL=spawn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/commands/spawn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/commands/spawn.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAmBxB,eAAO,MAAM,WAAW;;;;;;;;;;EAAmC,CAAC;AAI5D,8FAA8F;AAC9F,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAW5D"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,UAAU,EAEhB,MAAM,gBAAgB,CAAC;AAqBxB,eAAO,MAAM,WAAW;;;;;;;;;;EAAmC,CAAC;AAI5D,8FAA8F;AAC9F,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAW5D"}
@@ -1,7 +1,7 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
- import { CotalEndpoint, isReachable, mintCreds, newIdentity, } from "@cotal-ai/core";
4
- import { authDir, findCotalRoot, getCurrent, isWorkspaceTargetError, loadExtensionsManifest, loadMeshes, loadSpaceAuth, preflightTarget, resolveMeshTarget, serverFlag, spaceFlag, } from "@cotal-ai/workspace";
3
+ import { CotalEndpoint, isReachable, mintCreds, newIdentity, resolveAuthProvider, } from "@cotal-ai/core";
4
+ import { authDir, CLI_USER_ACTOR, findCotalRoot, getCurrent, isWorkspaceTargetError, loadExtensionsManifest, loadMeshes, loadSpaceAuth, preflightTarget, resolveMeshTarget, serverFlag, spaceFlag, userAuthStateDir, } from "@cotal-ai/workspace";
5
5
  import { managerHasDeliveryMarker } from "../lib/manager-proc.js";
6
6
  import { machineStatus, webUp, WEB_URL } from "../lib/status.js";
7
7
  import { displayCmd } from "../lib/self-exec.js";
@@ -33,11 +33,14 @@ async function printMachine() {
33
33
  }
34
34
  function printProject(root) {
35
35
  const auth = loadSpaceAuth(authDir(root));
36
+ const userDisk = auth && existsSync(userAuthStateDir(root, auth.space));
36
37
  section("This Folder");
37
38
  row("root", root);
38
- row("auth", auth ? c.green(`space ${auth.space}`) : c.dim("none (open/local only)"));
39
+ row("auth", auth ? c.green(`space ${auth.space}${userDisk ? " · user-auth" : ""}`) : c.dim("none (open/local only)"));
39
40
  row("personas", personaSummary(root));
40
41
  row("nats", formatProc(proc(root, "nats.pid")));
42
+ if (userDisk)
43
+ row("auth-service", formatProc(proc(root, `auth-service.${encodeURIComponent(auth.space)}.pid`)));
41
44
  row("delivery", formatProc(proc(root, "delivery.pid")));
42
45
  const mgr = proc(root, "manager.pid");
43
46
  row("manager", `${formatProc(mgr)}${mgr.live ? c.dim(managerHasDeliveryMarker() ? " · delivery-aware" : " · old/unknown build") : ""}`);
@@ -48,7 +51,7 @@ async function printRegistry() {
48
51
  const current = getCurrent();
49
52
  section("Recorded Meshes");
50
53
  if (!meshes.length) {
51
- console.log(c.dim(" none start one with `cotal up --detach`"));
54
+ console.log(c.dim(" none - start one with `cotal up --detach`"));
52
55
  return;
53
56
  }
54
57
  const pad = Math.max(...meshes.map((m) => m.space.length));
@@ -76,9 +79,46 @@ async function printTarget(cwd, values, cmd) {
76
79
  }
77
80
  row("space", target.space);
78
81
  row("server", target.server);
79
- row("mode", target.auth ? "auth" : "open");
82
+ row("mode", target.mode);
83
+ if (target.userAuth)
84
+ row("idp", target.userAuth.idp.url);
80
85
  row("source", target.source);
81
86
  row("root", target.root);
87
+ if (target.mode === "user") {
88
+ // Status never static-mints on a user-auth mesh (the flip). Everything here is offline
89
+ // introspection — the login cache + the locally-readable ledger — plus, only when this
90
+ // machine holds a signed-in AND granted login, a real user-mode connect for the snapshot.
91
+ const live = await isReachable(target.server);
92
+ row("connection", live ? c.green("reachable") : c.red("unreachable"));
93
+ const stateDir = userAuthStateDir(target.root, target.space);
94
+ let st;
95
+ try {
96
+ st = await resolveAuthProvider().userStatus({ dir: stateDir, space: target.space, actor: CLI_USER_ACTOR });
97
+ }
98
+ catch (e) {
99
+ row("login", c.dim(e.message));
100
+ }
101
+ if (st && !st.login)
102
+ row("login", c.yellow(`not signed in - ${cmd} login --idp ${st.idpUrl}`));
103
+ if (st?.login) {
104
+ row("login", c.green(st.login.sub) + c.dim(` · session until ${new Date(st.login.expiresAt * 1000).toISOString()}`));
105
+ if (st.grant === "not-granted")
106
+ row("actor", c.yellow(`"${CLI_USER_ACTOR}" not granted - ${cmd} actor grant ${CLI_USER_ACTOR} --sub ${st.login.sub}`));
107
+ else if (st.grant)
108
+ row("actor", c.green(`"${CLI_USER_ACTOR}" granted${st.grant.label ? ` (${st.grant.label})` : ""}`) +
109
+ c.dim(` - read [${st.grant.allowSubscribe.join(", ")}], post [${st.grant.allowPublish.join(", ")}]${st.grant.scope.length ? `, scope [${st.grant.scope.join(", ")}]` : ""}`));
110
+ else
111
+ row("actor", c.dim("grant not checkable on this machine (no local ledger)"));
112
+ }
113
+ const granted = Boolean(st?.login && st.grant && st.grant !== "not-granted");
114
+ if (live && granted) {
115
+ await userLiveSnapshot(target, stateDir).catch((e) => row("live snapshot", c.dim(`unavailable (${e.message})`)));
116
+ }
117
+ else {
118
+ row("live snapshot", c.dim(live ? "needs a signed-in, granted login (see above)" : "broker unreachable"));
119
+ }
120
+ return;
121
+ }
82
122
  const preflight = await preflightTarget(target);
83
123
  if (!preflight.ok) {
84
124
  row("connection", c.red(`${preflight.kind}${preflight.prune ? " (stale registry entry)" : ""}`));
@@ -103,6 +143,31 @@ async function liveSnapshot(target) {
103
143
  watchChannels: watchBrokerState,
104
144
  card: { id: id.id, name: "status", kind: "endpoint" },
105
145
  });
146
+ await renderSnapshot(ep, watchBrokerState);
147
+ }
148
+ /** The user-auth live snapshot: the same read-only roster/channels view, connected as THIS
149
+ * machine's signed-in, ledger-granted login (bearer + sentinel — the flip forbids a status mint). */
150
+ async function userLiveSnapshot(target, stateDir) {
151
+ const { bearer, sentinelCreds } = await resolveAuthProvider().userCredentials({
152
+ dir: stateDir,
153
+ space: target.space,
154
+ actor: CLI_USER_ACTOR,
155
+ });
156
+ const ep = new CotalEndpoint({
157
+ space: target.space,
158
+ servers: target.server,
159
+ bearer,
160
+ sentinelCreds,
161
+ channels: [],
162
+ consume: false,
163
+ registerPresence: false,
164
+ watchPresence: true,
165
+ watchChannels: true,
166
+ card: { name: "status", kind: "endpoint" }, // card.id derives from the bearer principal
167
+ });
168
+ await renderSnapshot(ep, true);
169
+ }
170
+ async function renderSnapshot(ep, watchBrokerState) {
106
171
  ep.on("error", () => { });
107
172
  await ep.start();
108
173
  try {
@@ -114,7 +179,7 @@ async function liveSnapshot(target) {
114
179
  : c.dim("skipped in open mode (read-only)"));
115
180
  for (const p of roster.slice(0, 8)) {
116
181
  const label = p.card.role ? `${p.card.name}/${p.card.role}` : p.card.name;
117
- console.log(` ${statusBadge(p.status)} ${label}${p.activity ? c.dim(` ${p.activity}`) : ""}`);
182
+ console.log(` ${statusBadge(p.status)} ${label}${p.activity ? c.dim(` - ${p.activity}`) : ""}`);
118
183
  }
119
184
  if (roster.length > 8)
120
185
  console.log(c.dim(` +${roster.length - 8} more`));