@cotal-ai/cli 0.147.8 → 0.148.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.
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { type ConversationGrant, type ConversationPending, type ParsedArgs } from "@cotal-ai/core";
|
|
2
2
|
import { ConversationRefusal } from "../lib/app-user-identity.js";
|
|
3
3
|
/**
|
|
4
|
-
* `cotal app-identity`: machine-facing plumbing for a
|
|
5
|
-
*
|
|
6
|
-
* and again to retire it. It prints one JSON line on stdout and nothing else there. The credential is
|
|
7
|
-
* never in that line: it goes to a 0600 file whose path the env names.
|
|
8
|
-
*
|
|
4
|
+
* `cotal app-identity`: machine-facing plumbing for a personal app conversation. The local server
|
|
5
|
+
* of the Claude or Codex plugin runs it to open one conversation's own identity on the selected
|
|
6
|
+
* mesh, and again to retire it. It prints one JSON line on stdout and nothing else there. The credential is
|
|
7
|
+
* never in that line: it goes to a 0600 file whose path the env names. Every identity belongs to the
|
|
8
|
+
* native conversation the host names. On a signed-in mesh a new one opens only after a person
|
|
9
|
+
* approves it at the mesh's authority. On an open or static mesh this computer runs, it opens with
|
|
10
|
+
* the grant a bare `cotal spawn` gets there, and a static mesh's own signing authority issues it.
|
|
9
11
|
*/
|
|
10
12
|
export declare const appIdentityFlags: readonly [{
|
|
11
13
|
readonly name: "name";
|
|
@@ -26,7 +28,7 @@ export declare const appIdentityFlags: readonly [{
|
|
|
26
28
|
readonly name: "session";
|
|
27
29
|
readonly type: "string";
|
|
28
30
|
readonly value: "<id>";
|
|
29
|
-
readonly description: "provision: the native conversation identity";
|
|
31
|
+
readonly description: "provision: the native conversation identity, required";
|
|
30
32
|
}, {
|
|
31
33
|
readonly name: "events";
|
|
32
34
|
readonly type: "boolean";
|
|
@@ -39,7 +41,7 @@ export declare const appIdentityFlags: readonly [{
|
|
|
39
41
|
}, {
|
|
40
42
|
readonly name: "require-approval";
|
|
41
43
|
readonly type: "boolean";
|
|
42
|
-
readonly description: "provision: the caller accepts only an identity a person approved";
|
|
44
|
+
readonly description: "provision: on a signed-in mesh, the caller accepts only an identity a person approved";
|
|
43
45
|
}];
|
|
44
46
|
/** `pending` names the request a person has not decided yet and the page where they decide it. It
|
|
45
47
|
* carries no credential, secret or path. Provisioning again replays that same request. `refused`
|
|
@@ -56,6 +58,9 @@ export type AppIdentityReply = {
|
|
|
56
58
|
ok: false;
|
|
57
59
|
pending: true;
|
|
58
60
|
} & ConversationPending) | {
|
|
61
|
+
ok: false;
|
|
62
|
+
taken: true;
|
|
63
|
+
} | {
|
|
59
64
|
ok: false;
|
|
60
65
|
error: string;
|
|
61
66
|
refused?: ConversationRefusal["decision"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-identity.d.ts","sourceRoot":"","sources":["../../src/commands/app-identity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-identity.d.ts","sourceRoot":"","sources":["../../src/commands/app-identity.ts"],"names":[],"mappings":"AAIA,OAAO,EAkBL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EAIxB,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,mBAAmB,EAAqE,MAAM,6BAA6B,CAAC;AAUrI;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWW,CAAC;AAczC;;;gEAGgE;AAChE,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;CAAE,GAC9F,CAAC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,GAAG,mBAAmB,CAAC,GACpD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GAC1B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAA;CAAE,CAAC;AAW5E,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAWjE"}
|
|
@@ -1,31 +1,39 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync, lstatSync, mkdtempSync, readdirSync, readFileSync, rmdirSync, rmSync, writeFileSync } from "node:fs";
|
|
2
3
|
import { tmpdir } from "node:os";
|
|
3
4
|
import { basename, dirname, join, resolve } from "node:path";
|
|
4
|
-
import { checkConversationSelection, deprovisionAgent, isReachable, mintCreds, newIdentity, } from "@cotal-ai/core";
|
|
5
|
-
import { resolveTargetOrThrow } from "@cotal-ai/workspace";
|
|
5
|
+
import { acquireLock, agentFilePath, checkConversationSelection, CotalEndpoint, DEV_OWNER, deprovisionAgent, eventChannel, isReachable, loadAgentFile, mintCreds, mintLifecycleUid, mkSecretDir, newIdentity, patternInAllow, provisionAgent, resolveReadAcl, } from "@cotal-ai/core";
|
|
6
|
+
import { activateTerminalSeat, defaultPersonaRef, homeCotalDir, issueTerminalSeat, resolveTargetOrThrow, retireTerminalSeat } from "@cotal-ai/workspace";
|
|
7
|
+
import { defaultPersonaFix } from "../lib/default-persona.js";
|
|
8
|
+
import { liveMeshNames } from "../lib/live-names.js";
|
|
6
9
|
import { ConversationRefusal, isUserAppDir, provisionUserApp, retireDeadUserApps, retireUserApp } from "../lib/app-user-identity.js";
|
|
7
|
-
/** Every
|
|
8
|
-
* OS temp dir with this prefix
|
|
10
|
+
/** Every conversation identity on an open or static mesh has a fresh `mkdtemp` directory under the
|
|
11
|
+
* OS temp dir with this prefix, which retire removes. */
|
|
9
12
|
const CRED_DIR_PREFIX = "cotal-app-identity-";
|
|
10
13
|
/** The file in that directory that says what to retire. It carries no secret. */
|
|
11
14
|
const RECORD = "identity.json";
|
|
15
|
+
/** A native conversation identity, as the hosts pass it. */
|
|
16
|
+
const SESSION = /^[A-Za-z0-9_-]{1,128}$/;
|
|
12
17
|
/**
|
|
13
|
-
* `cotal app-identity`: machine-facing plumbing for a
|
|
14
|
-
*
|
|
15
|
-
* and again to retire it. It prints one JSON line on stdout and nothing else there. The credential is
|
|
16
|
-
* never in that line: it goes to a 0600 file whose path the env names.
|
|
17
|
-
*
|
|
18
|
+
* `cotal app-identity`: machine-facing plumbing for a personal app conversation. The local server
|
|
19
|
+
* of the Claude or Codex plugin runs it to open one conversation's own identity on the selected
|
|
20
|
+
* mesh, and again to retire it. It prints one JSON line on stdout and nothing else there. The credential is
|
|
21
|
+
* never in that line: it goes to a 0600 file whose path the env names. Every identity belongs to the
|
|
22
|
+
* native conversation the host names. On a signed-in mesh a new one opens only after a person
|
|
23
|
+
* approves it at the mesh's authority. On an open or static mesh this computer runs, it opens with
|
|
24
|
+
* the grant a bare `cotal spawn` gets there, and a static mesh's own signing authority issues it.
|
|
18
25
|
*/
|
|
19
26
|
export const appIdentityFlags = [
|
|
20
27
|
{ name: "name", type: "string", value: "<name>", description: "provision: the agent name to open, exactly" },
|
|
21
28
|
{ name: "space", type: "string", value: "<space>", description: "the mesh to use; defaults as `cotal spawn` does" },
|
|
22
29
|
{ name: "dir", type: "string", value: "<dir>", description: "retire: the credential directory provision returned" },
|
|
23
|
-
{ name: "session", type: "string", value: "<id>", description: "provision: the native conversation identity" },
|
|
30
|
+
{ name: "session", type: "string", value: "<id>", description: "provision: the native conversation identity, required" },
|
|
24
31
|
{ name: "events", type: "boolean", description: "provision: a real native transcript source is bound" },
|
|
25
32
|
{ name: "selection", type: "string", value: "<json>", description: "provision: channels, role and capabilities to request within your own grant" },
|
|
26
|
-
// Every provision
|
|
27
|
-
// that an earlier CLI, which opened identities without approval, refuses
|
|
28
|
-
|
|
33
|
+
// Every provision on a signed-in mesh needs a person's approval, with or without this flag. A caller
|
|
34
|
+
// passes it so that an earlier CLI, which opened signed-in identities without approval, refuses
|
|
35
|
+
// the unknown flag first.
|
|
36
|
+
{ name: "require-approval", type: "boolean", description: "provision: on a signed-in mesh, the caller accepts only an identity a person approved" },
|
|
29
37
|
];
|
|
30
38
|
function reply(r) {
|
|
31
39
|
process.stdout.write(`${JSON.stringify(r)}\n`);
|
|
@@ -69,10 +77,141 @@ async function provision(values) {
|
|
|
69
77
|
const connection = await provisionUserApp(t, name, values.session, values.events === true, selection);
|
|
70
78
|
return "pending" in connection ? { ok: false, pending: true, ...connection.pending } : { ok: true, ...connection };
|
|
71
79
|
}
|
|
72
|
-
//
|
|
73
|
-
// What a host that died without retiring left behind is still retired here.
|
|
80
|
+
// What a host that died without retiring left behind is retired first.
|
|
74
81
|
await retireOrphans();
|
|
75
|
-
return
|
|
82
|
+
return provisionLocal(t, name, values.session, values.events === true, selection);
|
|
83
|
+
}
|
|
84
|
+
/** What to run when the persona a bare spawn loads is missing. `up` in the root of a space this
|
|
85
|
+
* machine started writes the `default` one; another name comes from `COTAL_DEFAULT_PERSONA`. */
|
|
86
|
+
function missingPersonaNext(persona, t) {
|
|
87
|
+
if (persona !== "default")
|
|
88
|
+
return "Create it, or point COTAL_DEFAULT_PERSONA at a persona that exists.";
|
|
89
|
+
const fix = defaultPersonaFix(t);
|
|
90
|
+
return fix.cwd ? `Run \`${fix.command}\` in ${fix.cwd} to write it.` : `Create it with \`${fix.command}\`.`;
|
|
91
|
+
}
|
|
92
|
+
/** The grant a conversation gets on an open or static mesh: the channels, role and capabilities of
|
|
93
|
+
* the persona a bare `cotal spawn` loads there, or the part of them a selection names. A selection
|
|
94
|
+
* only narrows, and an item the persona does not hold refuses the whole request. */
|
|
95
|
+
function localGrant(def, selection) {
|
|
96
|
+
const subscribe = def.subscribe ?? [];
|
|
97
|
+
const allowSubscribe = resolveReadAcl(subscribe, def.allowSubscribe);
|
|
98
|
+
const allowPublish = def.allowPublish ?? [];
|
|
99
|
+
const role = def.role ?? null;
|
|
100
|
+
const scope = def.capabilities ?? [];
|
|
101
|
+
if (!selection)
|
|
102
|
+
return { subscribe, grant: { scope, role, allowSubscribe, allowPublish, subscribe: [] } };
|
|
103
|
+
for (const capability of selection.capabilities.filter((c) => !c.startsWith("role:")))
|
|
104
|
+
if (!scope.includes(capability))
|
|
105
|
+
throw new Error(`capability "${capability}" is not within what this mesh's default persona grants; nothing was opened`);
|
|
106
|
+
if (selection.role !== null && selection.role !== role)
|
|
107
|
+
throw new Error(`the role "${selection.role}" is not within what this mesh's default persona grants; nothing was opened`);
|
|
108
|
+
for (const { channel, access } of selection.channels)
|
|
109
|
+
if (!patternInAllow(allowSubscribe, channel) || (access === "read-post" && !patternInAllow(allowPublish, channel)))
|
|
110
|
+
throw new Error(`channel "${channel}" (${access}) is not within what this mesh's default persona grants; nothing was opened`);
|
|
111
|
+
return { subscribe: [], grant: {
|
|
112
|
+
scope: [...selection.capabilities], role: selection.role, subscribe: [], endpoints: [],
|
|
113
|
+
allowSubscribe: selection.channels.map((c) => c.channel),
|
|
114
|
+
allowPublish: selection.channels.filter((c) => c.access === "read-post").map((c) => c.channel),
|
|
115
|
+
} };
|
|
116
|
+
}
|
|
117
|
+
/** Open one native conversation's identity on an open or static mesh this computer runs. A static
|
|
118
|
+
* mesh's own signing authority issues it as a terminal seat (SPEC 13.15) scoped to its grant, with
|
|
119
|
+
* the durable footprint of a foreground spawn; the credential stays in this account's private
|
|
120
|
+
* files. An open mesh takes no credential. Either way a record names the conversation, so the
|
|
121
|
+
* conversation holds one identity at a time and what its host leaves behind is retired. */
|
|
122
|
+
async function provisionLocal(t, name, session, events, selection) {
|
|
123
|
+
if (!session || !SESSION.test(session))
|
|
124
|
+
return { ok: false, error: `a conversation needs its native session identity before connecting, and this app supplies none; nothing was opened on "${t.space}"` };
|
|
125
|
+
const root = join(homeCotalDir(), "app-identities");
|
|
126
|
+
mkSecretDir(root);
|
|
127
|
+
const lock = acquireLock(join(root, `session-${createHash("sha256").update(session).digest("hex")}.lock`), { waitMs: 0 });
|
|
128
|
+
try {
|
|
129
|
+
return await provisionLocalLocked(t, name, session, events, selection);
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
lock.release();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async function provisionLocalLocked(t, name, session, events, selection) {
|
|
136
|
+
if (t.mode === "auth" && !t.auth)
|
|
137
|
+
return { ok: false, error: `the mesh "${t.space}" takes static credentials, and this account holds no signing authority for it in ${t.root}, so no identity was opened` };
|
|
138
|
+
if (t.policy?.events === "required" && !events)
|
|
139
|
+
return { ok: false, error: "this mesh requires a real native conversation event source; no identity was opened" };
|
|
140
|
+
const held = localRecords().find(({ record }) => record.session === session && alive(record.owner));
|
|
141
|
+
if (held)
|
|
142
|
+
return { ok: false, error: `this native conversation already has a live identity on "${held.record.space}"; disconnect it before connecting again` };
|
|
143
|
+
const taken = await liveMeshNames(t);
|
|
144
|
+
if (!taken)
|
|
145
|
+
return { ok: false, error: `the mesh "${t.space}" at ${t.server} is not answering. Start it with \`cotal up\`.` };
|
|
146
|
+
if (taken.has(name))
|
|
147
|
+
return { ok: false, taken: true };
|
|
148
|
+
const persona = defaultPersonaRef();
|
|
149
|
+
let def;
|
|
150
|
+
try {
|
|
151
|
+
def = loadAgentFile(agentFilePath(t.root, persona));
|
|
152
|
+
}
|
|
153
|
+
catch (e) {
|
|
154
|
+
if (e.code === "ENOENT")
|
|
155
|
+
return { ok: false, error: `no "${persona}" persona in ${t.personaRoot} for the mesh "${t.space}". ${missingPersonaNext(persona, t)}` };
|
|
156
|
+
throw e;
|
|
157
|
+
}
|
|
158
|
+
const { subscribe, grant } = localGrant(def, selection);
|
|
159
|
+
const identity = newIdentity();
|
|
160
|
+
const lifecycleUid = mintLifecycleUid();
|
|
161
|
+
// The conversation publishes its own activity on its own event channel, as a spawned seat does.
|
|
162
|
+
const allowPublish = events ? [eventChannel({ owner: DEV_OWNER, actor: identity.id }), ...grant.allowPublish] : grant.allowPublish;
|
|
163
|
+
const env = {
|
|
164
|
+
COTAL_SPACE: t.space, COTAL_SERVERS: t.server, COTAL_NAME: name, COTAL_TLS: t.tlsRequired ? "1" : "0",
|
|
165
|
+
COTAL_ID: identity.id, COTAL_LIFECYCLE_UID: lifecycleUid, COTAL_CAPABILITIES: grant.scope.join(","),
|
|
166
|
+
COTAL_SUBSCRIBE: subscribe.join(","), COTAL_ALLOW_SUBSCRIBE: grant.allowSubscribe.join(","), COTAL_ALLOW_PUBLISH: allowPublish.join(","),
|
|
167
|
+
...(grant.role ? { COTAL_ROLE: grant.role } : {}), COTAL_WORKSPACE_ROOT: homeCotalDir(), ...(events ? { COTAL_EVENTS: "1" } : {}),
|
|
168
|
+
...(t.policy?.events === "required" ? { COTAL_EVENTS_REQUIRED: "1" } : {}),
|
|
169
|
+
};
|
|
170
|
+
const dir = mkdtempSync(join(tmpdir(), CRED_DIR_PREFIX));
|
|
171
|
+
// Written before anything reaches the broker, so a provision killed partway still leaves a record.
|
|
172
|
+
const record = { space: t.space, id: identity.id, lifecycleUid, owner: process.ppid, session, ...(t.auth ? { alias: name } : {}) };
|
|
173
|
+
writeFileSync(join(dir, RECORD), JSON.stringify(record), { mode: 0o600 });
|
|
174
|
+
const reply = { ok: true, env, retire: { dir }, grant: { ...grant, allowPublish } };
|
|
175
|
+
if (!t.auth)
|
|
176
|
+
return reply;
|
|
177
|
+
const auth = t.auth;
|
|
178
|
+
const prov = new CotalEndpoint({
|
|
179
|
+
space: t.space,
|
|
180
|
+
servers: t.server,
|
|
181
|
+
creds: await mintCreds(auth, newIdentity(), "provisioner"),
|
|
182
|
+
tls: t.tlsRequired,
|
|
183
|
+
channels: [],
|
|
184
|
+
consume: false,
|
|
185
|
+
registerPresence: false,
|
|
186
|
+
watchPresence: false,
|
|
187
|
+
watchChannels: false,
|
|
188
|
+
card: { name: "app-provisioner", role: "provisioner", kind: "endpoint" },
|
|
189
|
+
});
|
|
190
|
+
// The awaited calls below own the verdict; the provisioner's own events would only reach stdout.
|
|
191
|
+
prov.on("error", () => { });
|
|
192
|
+
prov.on("warning", () => { });
|
|
193
|
+
const seatTarget = { server: t.server, space: t.space, tlsRequired: t.tlsRequired, auth };
|
|
194
|
+
const seat = { actor: identity.id, alias: name, lifecycleUid };
|
|
195
|
+
let acceptedToken;
|
|
196
|
+
try {
|
|
197
|
+
await prov.start();
|
|
198
|
+
await activateTerminalSeat(seatTarget, seat);
|
|
199
|
+
const creds = await issueTerminalSeat(seatTarget, seat, undefined, (issue) => {
|
|
200
|
+
acceptedToken = issue.issued.acceptedToken;
|
|
201
|
+
return provisionAgent(prov, auth, identity, {
|
|
202
|
+
subscribe, allowSubscribe: grant.allowSubscribe, allowPublish, ...(grant.role ? { role: grant.role } : {}), capabilities: grant.scope,
|
|
203
|
+
lifecycleUid, expiresAt: issue.expiresAt, issued: issue.issued, issuance: issue.issuance,
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
writeFileSync(join(dir, "agent.creds"), creds, { mode: 0o600 });
|
|
207
|
+
}
|
|
208
|
+
catch (e) {
|
|
209
|
+
await prov.stop().catch(() => { });
|
|
210
|
+
await retireDir(dir).catch(() => { });
|
|
211
|
+
throw e;
|
|
212
|
+
}
|
|
213
|
+
await prov.stop();
|
|
214
|
+
return { ...reply, env: { ...env, COTAL_CREDS: join(dir, "agent.creds"), COTAL_ACCEPTED_TOKEN: acceptedToken } };
|
|
76
215
|
}
|
|
77
216
|
async function retire(values) {
|
|
78
217
|
if (!values.dir)
|
|
@@ -91,8 +230,8 @@ async function reap(values) {
|
|
|
91
230
|
await retireDeadUserApps(t);
|
|
92
231
|
return { ok: true };
|
|
93
232
|
}
|
|
94
|
-
/** Remove what provision made in `dirArg`: on an auth mesh the identity's
|
|
95
|
-
*
|
|
233
|
+
/** Remove what provision made in `dirArg`: on an auth mesh the identity's issuance gate and broker
|
|
234
|
+
* footprint first, with credentials pinned to that one identity, then the credential, the record and
|
|
96
235
|
* the directory. The directory must have provision's shape, and only those two files go, so a wrong
|
|
97
236
|
* path removes nothing else. When the broker footprint cannot be removed the files stay, so a
|
|
98
237
|
* later attempt still knows what to retire. */
|
|
@@ -105,6 +244,8 @@ async function retireDir(dirArg) {
|
|
|
105
244
|
if (t.auth) {
|
|
106
245
|
if (!(await isReachable(t.server)))
|
|
107
246
|
throw new Error(`the mesh "${t.space}" at ${t.server} is not answering, so ${record.id} keeps its broker footprint`);
|
|
247
|
+
if (record.alias)
|
|
248
|
+
await retireTerminalSeat({ server: t.server, space: t.space, tlsRequired: t.tlsRequired, auth: t.auth }, { actor: record.id, alias: record.alias, lifecycleUid: record.lifecycleUid });
|
|
108
249
|
const creds = await mintCreds(t.auth, newIdentity(), "deprovisioner", { deprovisionTarget: { principal: record.id, lifecycleUid: record.lifecycleUid } });
|
|
109
250
|
await deprovisionAgent({ servers: t.server, space: t.space, targetId: record.id, lifecycleUid: record.lifecycleUid, creds });
|
|
110
251
|
}
|
|
@@ -113,26 +254,32 @@ async function retireDir(dirArg) {
|
|
|
113
254
|
if (existsSync(dir))
|
|
114
255
|
rmdirSync(dir);
|
|
115
256
|
}
|
|
116
|
-
/**
|
|
117
|
-
*
|
|
118
|
-
|
|
257
|
+
/** This user's credential directories with a readable record. Unreadable or half-written ones are
|
|
258
|
+
* left for a later provision. */
|
|
259
|
+
function localRecords() {
|
|
119
260
|
const uid = process.getuid?.();
|
|
120
|
-
|
|
261
|
+
return readdirSync(tmpdir()).flatMap((name) => {
|
|
121
262
|
if (!name.startsWith(CRED_DIR_PREFIX))
|
|
122
|
-
|
|
263
|
+
return [];
|
|
123
264
|
const dir = join(tmpdir(), name);
|
|
124
265
|
try {
|
|
125
266
|
const st = lstatSync(dir);
|
|
126
267
|
if (!st.isDirectory() || (uid !== undefined && st.uid !== uid))
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if (alive(record.owner))
|
|
130
|
-
continue;
|
|
131
|
-
await retireDir(dir);
|
|
268
|
+
return [];
|
|
269
|
+
return [{ dir, record: JSON.parse(readFileSync(join(dir, RECORD), "utf8")) }];
|
|
132
270
|
}
|
|
133
271
|
catch {
|
|
134
|
-
|
|
272
|
+
return [];
|
|
135
273
|
}
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
/** Retire every credential directory of this user's whose owning process is gone: a host killed
|
|
277
|
+
* before it could retire. One that cannot be retired now stays for the next provision. */
|
|
278
|
+
async function retireOrphans() {
|
|
279
|
+
for (const { dir, record } of localRecords()) {
|
|
280
|
+
if (alive(record.owner))
|
|
281
|
+
continue;
|
|
282
|
+
await retireDir(dir).catch(() => { });
|
|
136
283
|
}
|
|
137
284
|
}
|
|
138
285
|
/** Whether `pid` names a running process. A reused pid reads as alive, so its directory is kept. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-identity.js","sourceRoot":"","sources":["../../src/commands/app-identity.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-identity.js","sourceRoot":"","sources":["../../src/commands/app-identity.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cotal-ai/cli",
|
|
3
3
|
"description": "Cotal mesh CLI: up, join, watch, console, spawn, mint, channels, history, ext.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.148.0",
|
|
5
5
|
"homepage": "https://cotal.ai",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"repository": {
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@cotal-ai/core": "0.
|
|
31
|
-
"@cotal-ai/workspace": "0.
|
|
30
|
+
"@cotal-ai/core": "0.148.0",
|
|
31
|
+
"@cotal-ai/workspace": "0.148.0",
|
|
32
32
|
"@nats-io/jetstream": "^3.4.0",
|
|
33
33
|
"@nats-io/kv": "^3.4.0",
|
|
34
34
|
"@nats-io/obj": "^3.4.0",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"@eplightning/nats-server-win32-x64": "^2.14.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@cotal-ai/auth": "0.
|
|
52
|
+
"@cotal-ai/auth": "0.148.0",
|
|
53
53
|
"@cotal-ai/smoke-kit": "0.0.0",
|
|
54
54
|
"@types/react": "^19.0.0",
|
|
55
55
|
"@types/ws": "^8.18.1"
|