@cotal-ai/workspace 0.48.2 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/advisory-lock.d.ts.map +1 -1
- package/dist/advisory-lock.js +6 -4
- package/dist/advisory-lock.js.map +1 -1
- package/dist/auth-paths.d.ts +8 -0
- package/dist/auth-paths.d.ts.map +1 -1
- package/dist/auth-paths.js +25 -1
- package/dist/auth-paths.js.map +1 -1
- package/dist/connect.d.ts +10 -6
- package/dist/connect.d.ts.map +1 -1
- package/dist/connect.js +61 -23
- package/dist/connect.js.map +1 -1
- package/dist/control-target.d.ts +5 -0
- package/dist/control-target.d.ts.map +1 -1
- package/dist/control-target.js +10 -4
- package/dist/control-target.js.map +1 -1
- package/dist/flags.d.ts +6 -0
- package/dist/flags.d.ts.map +1 -1
- package/dist/flags.js +13 -0
- package/dist/flags.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/manager-shutdown.d.ts +40 -0
- package/dist/manager-shutdown.d.ts.map +1 -0
- package/dist/manager-shutdown.js +287 -0
- package/dist/manager-shutdown.js.map +1 -0
- package/dist/mesh-registry.d.ts +27 -11
- package/dist/mesh-registry.d.ts.map +1 -1
- package/dist/mesh-registry.js +3 -14
- package/dist/mesh-registry.js.map +1 -1
- package/dist/mesh-target.d.ts +10 -1
- package/dist/mesh-target.d.ts.map +1 -1
- package/dist/mesh-target.js +25 -9
- package/dist/mesh-target.js.map +1 -1
- package/dist/pid.d.ts +43 -15
- package/dist/pid.d.ts.map +1 -1
- package/dist/pid.js +69 -15
- package/dist/pid.js.map +1 -1
- package/dist/preflight.d.ts +4 -4
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +10 -9
- package/dist/preflight.js.map +1 -1
- package/dist/render.js +4 -1
- package/dist/render.js.map +1 -1
- package/dist/secret-store-fs.d.ts +3 -2
- package/dist/secret-store-fs.d.ts.map +1 -1
- package/dist/secret-store-fs.js +5 -2
- package/dist/secret-store-fs.js.map +1 -1
- package/package.json +6 -3
package/dist/mesh-target.d.ts
CHANGED
|
@@ -49,6 +49,13 @@ export interface ResolveFlags {
|
|
|
49
49
|
server?: string;
|
|
50
50
|
/** `--space <name>` — pick a specific running mesh from the registry. */
|
|
51
51
|
space?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Spaces whose broker the last liveness sweep already found dead. Their records
|
|
54
|
+
* stay (that is the registry's job); they are not live candidates for unflagged
|
|
55
|
+
* resolution. Named `--space` still resolves a dead record so preflight can
|
|
56
|
+
* name its root. Callers that do not sweep omit this; TAB completion must.
|
|
57
|
+
*/
|
|
58
|
+
offline?: readonly string[];
|
|
52
59
|
}
|
|
53
60
|
/** The distinct, command-agnostic reasons {@link resolveMeshTarget} can't pick a single mesh. Each
|
|
54
61
|
* maps 1:1 to a former prose-throw; the recovery copy (`cotal up`/`meshes`/`use`) is the renderer's
|
|
@@ -100,7 +107,9 @@ export declare function targetFromEntry(m: MeshEntry, server: string, source: Me
|
|
|
100
107
|
* 2. `--server` — registry entry on that server (for creds/personas), else the local project.
|
|
101
108
|
* 3. The live `current` selected by `cotal use` — from any directory.
|
|
102
109
|
* 4. A genuine local project (`cwd` walks up to a real `.cotal/`).
|
|
103
|
-
* 5. The registry: 0 ⇒ error; 1 ⇒ use it; N ⇒ error naming
|
|
110
|
+
* 5. The registry's *running* meshes: 0 ⇒ error; 1 ⇒ use it; N ⇒ error naming
|
|
111
|
+
* each + its root. `flags.offline` (from a sweep) is excluded here and from
|
|
112
|
+
* a dangling `current`; a named `--space` is not filtered.
|
|
104
113
|
* No silent fallback — an unresolved target throws one human sentence.
|
|
105
114
|
*/
|
|
106
115
|
export declare function resolveMeshTarget(cwd: string, flags?: ResolveFlags): MeshTarget;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh-target.d.ts","sourceRoot":"","sources":["../src/mesh-target.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE/E,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd;uFACmF;IACnF,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACxB;;;0EAGsE;IACtE,WAAW,EAAE,OAAO,CAAC;IACrB;;sEAEkE;IAClE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;;oGAGgG;IAChG,MAAM,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7B,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;4GAMwG;IACxG,MAAM,EACF,aAAa,GACb,YAAY,GACZ,qBAAqB,GACrB,aAAa,GACb,gBAAgB,GAChB,UAAU,GACV,SAAS,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"mesh-target.d.ts","sourceRoot":"","sources":["../src/mesh-target.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE/E,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd;uFACmF;IACnF,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACxB;;;0EAGsE;IACtE,WAAW,EAAE,OAAO,CAAC;IACrB;;sEAEkE;IAClE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;;oGAGgG;IAChG,MAAM,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7B,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;4GAMwG;IACxG,MAAM,EACF,aAAa,GACb,YAAY,GACZ,qBAAqB,GACrB,aAAa,GACb,gBAAgB,GAChB,UAAU,GACV,SAAS,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;8DAE8D;AAC9D,MAAM,MAAM,mBAAmB,GAC3B,WAAW,GACX,eAAe,GACf,kBAAkB,GAClB,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,GACjB,sBAAsB,CAAC;AAE3B;qGACqG;AACrG,MAAM,WAAW,sBAAsB;IACrC,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+FAA+F;IAC/F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;uGACmG;IACnG,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAID;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,mFAAmF;IACnF,QAAQ,CAAC,KAAK,uCAA0B;IACxC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;gBAEvC,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,sBAA2B,EACpC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAOhC;AAED;uGACuG;AACvG,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,eAAe,CAMvE;AAED;mGACmG;AACnG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AA+CD,wBAAgB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,UAAU,CAqDtG;AA4CD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,YAAiB,GAAG,UAAU,CAwInF"}
|
package/dist/mesh-target.js
CHANGED
|
@@ -92,7 +92,7 @@ export function targetFromEntry(m, server, source) {
|
|
|
92
92
|
if (!auth) {
|
|
93
93
|
const found = listSpaceAccounts(authDir(m.root));
|
|
94
94
|
if (found.length) {
|
|
95
|
-
const removed = pruneMesh(m.space);
|
|
95
|
+
const removed = pruneMesh(m.space, "mismatch");
|
|
96
96
|
throw new MeshTargetError("stale-auth-root", `registry entry "${m.space}" points at ${m.root}, whose on-disk auth is now for "${found.join('", "')}"`, { space: m.space, root: m.root, found: found.join(", "), removed });
|
|
97
97
|
}
|
|
98
98
|
}
|
|
@@ -160,10 +160,13 @@ function isGenuineSpace(root) {
|
|
|
160
160
|
* 2. `--server` — registry entry on that server (for creds/personas), else the local project.
|
|
161
161
|
* 3. The live `current` selected by `cotal use` — from any directory.
|
|
162
162
|
* 4. A genuine local project (`cwd` walks up to a real `.cotal/`).
|
|
163
|
-
* 5. The registry: 0 ⇒ error; 1 ⇒ use it; N ⇒ error naming
|
|
163
|
+
* 5. The registry's *running* meshes: 0 ⇒ error; 1 ⇒ use it; N ⇒ error naming
|
|
164
|
+
* each + its root. `flags.offline` (from a sweep) is excluded here and from
|
|
165
|
+
* a dangling `current`; a named `--space` is not filtered.
|
|
164
166
|
* No silent fallback — an unresolved target throws one human sentence.
|
|
165
167
|
*/
|
|
166
168
|
export function resolveMeshTarget(cwd, flags = {}) {
|
|
169
|
+
const offline = new Set(flags.offline ?? []);
|
|
167
170
|
if (flags.space) {
|
|
168
171
|
const m = findMesh(flags.space);
|
|
169
172
|
if (!m)
|
|
@@ -182,7 +185,7 @@ export function resolveMeshTarget(cwd, flags = {}) {
|
|
|
182
185
|
// server URL - so "the entry on that server" is not a single thing. `.find()` would silently
|
|
183
186
|
// hand back whichever sorted first, connecting the caller to an arbitrary tenant; refuse and
|
|
184
187
|
// name them instead (`--space` picks one explicitly, handled above).
|
|
185
|
-
const onServer = loadMeshes().filter((e) => e.server === flags.server);
|
|
188
|
+
const onServer = loadMeshes().filter((e) => e.server === flags.server && !offline.has(e.space));
|
|
186
189
|
if (onServer.length > 1)
|
|
187
190
|
throw new MeshTargetError("ambiguous-target", `${onServer.length} spaces are recorded at ${flags.server} (${onServer.map((e) => e.space).join(", ")}) - name one with --space`, { server: flags.server, available: onServer.map((e) => `${e.space} (${e.root})`) });
|
|
188
191
|
if (onServer[0]) {
|
|
@@ -199,7 +202,10 @@ export function resolveMeshTarget(cwd, flags = {}) {
|
|
|
199
202
|
const meshes = loadMeshes();
|
|
200
203
|
const current = getCurrent();
|
|
201
204
|
const cur = current ? meshes.find((m) => m.space === current) : undefined;
|
|
202
|
-
|
|
205
|
+
// A `current` whose broker the sweep already found dead is not a live target.
|
|
206
|
+
// Fall through so one remaining running mesh can still resolve, the way a
|
|
207
|
+
// deleted record used to; the record itself stays.
|
|
208
|
+
if (cur && !offline.has(cur.space))
|
|
203
209
|
return targetFromEntry(cur, cur.server, "current");
|
|
204
210
|
const root = findCotalRoot(cwd);
|
|
205
211
|
if (isGenuineSpace(root)) {
|
|
@@ -256,16 +262,26 @@ export function resolveMeshTarget(cwd, flags = {}) {
|
|
|
256
262
|
// is. Kept as `canonicalRoot` anyway, for one reason that is not style: the equivalence is a
|
|
257
263
|
// consequence of the early return above, not a property of this line. Change that return and the
|
|
258
264
|
// `resolve` spelling silently becomes load-bearing and wrong.
|
|
259
|
-
const onDefault = meshes.find((m) => m.server === DEFAULT_SERVER &&
|
|
265
|
+
const onDefault = meshes.find((m) => m.server === DEFAULT_SERVER &&
|
|
266
|
+
canonicalRoot(m.root) !== canonicalRoot(root) &&
|
|
267
|
+
!offline.has(m.space));
|
|
260
268
|
if (onDefault)
|
|
261
269
|
throw new MeshTargetError("default-occupied", `another mesh ("${onDefault.space}") is running at ${DEFAULT_SERVER}`, { space: onDefault.space, server: DEFAULT_SERVER });
|
|
262
270
|
return localTarget(root, DEFAULT_SERVER, "local-space");
|
|
263
271
|
}
|
|
264
|
-
|
|
272
|
+
// The fallback names *running* meshes. A liveness miss used to delete the record and
|
|
273
|
+
// shrink this set; the record now stays, so a known-dead entry must not count here
|
|
274
|
+
// or the error ("no mesh running" / "multiple meshes running") would name a mesh
|
|
275
|
+
// that is not running. Named `--space` above is unfiltered: preflight still has to
|
|
276
|
+
// resolve a dead record to name its root. Zero running includes "recorded but all
|
|
277
|
+
// offline": that is still `no-meshes`. The named-space / preflight path is what
|
|
278
|
+
// reports "recorded at <root> but not running".
|
|
279
|
+
const running = meshes.filter((m) => !offline.has(m.space));
|
|
280
|
+
if (running.length === 0)
|
|
265
281
|
throw new MeshTargetError("no-meshes", "no mesh running");
|
|
266
|
-
if (
|
|
267
|
-
return targetFromEntry(
|
|
268
|
-
const names =
|
|
282
|
+
if (running.length === 1)
|
|
283
|
+
return targetFromEntry(running[0], running[0].server, "registry");
|
|
284
|
+
const names = running.map((m) => `${m.space} (${m.root})`);
|
|
269
285
|
throw new MeshTargetError("ambiguous-target", `multiple meshes running: ${names.join(", ")}`, {
|
|
270
286
|
available: names,
|
|
271
287
|
});
|
package/dist/mesh-target.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh-target.js","sourceRoot":"","sources":["../src/mesh-target.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAClK,OAAO,EACL,aAAa,EACb,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,UAAU,EACV,SAAS,GAGV,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"mesh-target.js","sourceRoot":"","sources":["../src/mesh-target.ts"],"names":[],"mappings":"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"}
|
package/dist/pid.d.ts
CHANGED
|
@@ -92,6 +92,20 @@ export declare function readProcessCommand(pid: number): ProcessCommand;
|
|
|
92
92
|
* direction is the safe one and is chosen deliberately.
|
|
93
93
|
*/
|
|
94
94
|
export declare function commandIsCotalSupervisor(command: string): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Does this command line belong to a Cotal delivery daemon?
|
|
97
|
+
*
|
|
98
|
+
* Same rule and same direction as {@link commandIsCotalSupervisor}, one component over: the test is
|
|
99
|
+
* the `deliver` ARGV TOKEN, which is the daemon's own subcommand and is present however it was
|
|
100
|
+
* started — `cotal up`'s detached re-exec, a container entrypoint, systemd, or an operator typing
|
|
101
|
+
* `cotal deliver --space …`. A token, not a substring, so `delivery-thing` and a `--creds
|
|
102
|
+
* .../delivery.creds` path are not mistaken for the daemon.
|
|
103
|
+
*
|
|
104
|
+
* IT FAILS TOWARD "OURS" for the reason the manager's does: a live pid whose argv cannot be read is
|
|
105
|
+
* still trusted, which is exactly the behaviour every reader had before attribution existed. Only
|
|
106
|
+
* affirmative evidence that the live process is something else may downgrade a record.
|
|
107
|
+
*/
|
|
108
|
+
export declare function commandIsCotalDelivery(command: string): boolean;
|
|
95
109
|
/**
|
|
96
110
|
* A process identity record, as a pidfile's CONTENT. The pid alone is not a stable identity on any
|
|
97
111
|
* OS: PIDs are recycled (aggressively on Windows, eventually on POSIX), and a teardown that signals
|
|
@@ -131,25 +145,38 @@ export declare function formatRecord(record: ProcessIdentityRecord): string;
|
|
|
131
145
|
/**
|
|
132
146
|
* The creation-identity token of a live pid: on Linux `/proc/<pid>/stat` field 22 (starttime —
|
|
133
147
|
* ticks since boot, fixed for the life of the pid); on macOS/BSD `ps -o lstart=`; on Windows
|
|
134
|
-
*
|
|
135
|
-
* `
|
|
136
|
-
*
|
|
137
|
-
*
|
|
148
|
+
* the process creation FILETIME (PowerShell `Get-Process StartTime`, #1437). A pid whose token is
|
|
149
|
+
* `undefined` can still be recorded — the record then carries no start pin, and teardown warns that
|
|
150
|
+
* it is proceeding without the identity check. That pid-only shape is for a record that predates
|
|
151
|
+
* pinning, or a host that could not read a start at all. It is not the Windows steady state.
|
|
138
152
|
*/
|
|
139
153
|
export type ProcessStartTokenReader = (pid: number) => string | undefined;
|
|
154
|
+
/**
|
|
155
|
+
* Parse the stdout of the Windows creation-time reader into a pin token. Accepts only a bare
|
|
156
|
+
* unsigned FILETIME integer so a MSYS `ps` date string cannot become a "token" that drifts
|
|
157
|
+
* between launch and teardown (the original reason the lock reader refuses win32 `ps`).
|
|
158
|
+
*/
|
|
159
|
+
export declare function parseWin32CreationToken(raw: string): string | undefined;
|
|
160
|
+
/**
|
|
161
|
+
* Windows process-creation identity (#1437). A stop runs once, so unlike the advisory lock this
|
|
162
|
+
* may spend a PowerShell spawn: the token must be STABLE, not cheap. `Get-Process StartTime`
|
|
163
|
+
* converted to UTC FILETIME is fixed for the life of that pid and changes when the number is
|
|
164
|
+
* reused. `undefined` means the process is gone or PowerShell could not answer.
|
|
165
|
+
*/
|
|
166
|
+
export declare function win32ProcessCreationToken(pid: number): string | undefined;
|
|
167
|
+
/** Identity's start-token reader: POSIX uses the same `/proc`/`ps` implementation as the advisory
|
|
168
|
+
* lock so launch and teardown cannot drift; win32 uses {@link win32ProcessCreationToken} instead
|
|
169
|
+
* of the lock's `undefined`. `platform` is a parameter so the win32 branch is executable off
|
|
170
|
+
* Windows: a mutation that returns `undefined` on win32 must redden without a Windows kernel. */
|
|
171
|
+
export declare function identityStartToken(pid: number, platform?: string, win32?: ProcessStartTokenReader, posix?: ProcessStartTokenReader): string | undefined;
|
|
172
|
+
export declare function defaultStartToken(pid: number): string | undefined;
|
|
140
173
|
/** The start token for a pid THIS PROCESS is about to record. Prefer the reader passed by the
|
|
141
|
-
* caller (tests inject divergence), fall back to
|
|
142
|
-
*
|
|
143
|
-
* implementation. `undefined` (Windows, or a ps-less host) records a pid-only LEGACY record —
|
|
174
|
+
* caller (tests inject divergence), fall back to {@link defaultStartToken}. `undefined` (a
|
|
175
|
+
* ps-less host, or a Windows pid PowerShell could not read) records a pid-only LEGACY record —
|
|
144
176
|
* visible as such to every reader, never silently. */
|
|
145
177
|
export declare function identityRecord(pid: number, tokenAt?: ProcessStartTokenReader): ProcessIdentityRecord | {
|
|
146
178
|
pid: number;
|
|
147
179
|
};
|
|
148
|
-
/** The start-token reader shared with the advisory lock, so launch and teardown agree on the token
|
|
149
|
-
* for the same live pid. Imported here rather than reimplemented: two token readers that drift
|
|
150
|
-
* would make the SAME process look like a stranger at teardown. */
|
|
151
|
-
import { processStartToken as defaultStartToken } from "./advisory-lock.js";
|
|
152
|
-
export { defaultStartToken };
|
|
153
180
|
/** The verdict of {@link assertRecordIdentity}: does the live process behind `pid` still carry the
|
|
154
181
|
* start this record pinned? `unreadable` is deliberately NOT a variant: the reader signature
|
|
155
182
|
* returns `undefined` for "cannot look" and that folds into `unpinned` (refuse). This differs from
|
|
@@ -196,15 +223,16 @@ export declare function identityLegacyWarning(label: string, pidfilePath: string
|
|
|
196
223
|
export declare function identityPinPath(pidfilePath: string): string;
|
|
197
224
|
/** Write the sibling pin for a pid this launch just spawned. Called AFTER the pidfile write, with
|
|
198
225
|
* the same pid, so a reader that sees a pidfile with no pin yet is reading either a legacy record
|
|
199
|
-
* or a launch mid-pairing - both are visible below, never silent. `undefined` token (
|
|
200
|
-
*
|
|
201
|
-
*
|
|
226
|
+
* or a launch mid-pairing - both are visible below, never silent. `undefined` token (ps-less host,
|
|
227
|
+
* or a pid whose creation time could not be read) writes NO pin. Windows writes a pin whenever
|
|
228
|
+
* {@link win32ProcessCreationToken} returns a FILETIME (#1437). */
|
|
202
229
|
export declare function writeIdentityPin(pidfilePath: string, pid: number, tokenAt?: ProcessStartTokenReader): void;
|
|
203
230
|
/** What {@link verifyIdentityPin} found for one pidfile. */
|
|
204
231
|
export type PinVerdict = {
|
|
205
232
|
kind: "legacy";
|
|
206
233
|
} | {
|
|
207
234
|
kind: "match";
|
|
235
|
+
record: ProcessIdentityRecord;
|
|
208
236
|
} | {
|
|
209
237
|
kind: "gone";
|
|
210
238
|
} | {
|
package/dist/pid.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pid.d.ts","sourceRoot":"","sources":["../src/pid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"pid.d.ts","sourceRoot":"","sources":["../src/pid.ts"],"names":[],"mappings":"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"}
|
package/dist/pid.js
CHANGED
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
* BY CONSTRUCTION, not by oversight; if they need this contract, the fix is a shared local-process
|
|
18
18
|
* module they may depend on, never a core export.
|
|
19
19
|
*/
|
|
20
|
-
import { spawnSync } from "node:child_process";
|
|
20
|
+
import { execFileSync, spawnSync } from "node:child_process";
|
|
21
21
|
import { readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
22
|
+
import { processStartToken as posixStartToken } from "./advisory-lock.js";
|
|
22
23
|
/** A Node/POSIX-signalable pid: a positive INTEGER within the signed 32-bit range `process.kill`
|
|
23
24
|
* accepts (it throws `ERR_INVALID_ARG_TYPE`/`ERR_OUT_OF_RANGE` outside it). Anything else -
|
|
24
25
|
* fractional, non-numeric, non-positive, oversized - is undefined: UNATTRIBUTABLE, never a pid to
|
|
@@ -102,6 +103,22 @@ export function readProcessCommand(pid) {
|
|
|
102
103
|
export function commandIsCotalSupervisor(command) {
|
|
103
104
|
return /(^|\s)supervise(\s|$)/.test(command);
|
|
104
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Does this command line belong to a Cotal delivery daemon?
|
|
108
|
+
*
|
|
109
|
+
* Same rule and same direction as {@link commandIsCotalSupervisor}, one component over: the test is
|
|
110
|
+
* the `deliver` ARGV TOKEN, which is the daemon's own subcommand and is present however it was
|
|
111
|
+
* started — `cotal up`'s detached re-exec, a container entrypoint, systemd, or an operator typing
|
|
112
|
+
* `cotal deliver --space …`. A token, not a substring, so `delivery-thing` and a `--creds
|
|
113
|
+
* .../delivery.creds` path are not mistaken for the daemon.
|
|
114
|
+
*
|
|
115
|
+
* IT FAILS TOWARD "OURS" for the reason the manager's does: a live pid whose argv cannot be read is
|
|
116
|
+
* still trusted, which is exactly the behaviour every reader had before attribution existed. Only
|
|
117
|
+
* affirmative evidence that the live process is something else may downgrade a record.
|
|
118
|
+
*/
|
|
119
|
+
export function commandIsCotalDelivery(command) {
|
|
120
|
+
return /(^|\s)deliver(\s|$)/.test(command);
|
|
121
|
+
}
|
|
105
122
|
export function parseRecord(raw) {
|
|
106
123
|
const trimmed = raw.trim();
|
|
107
124
|
if (trimmed === "")
|
|
@@ -122,20 +139,57 @@ export function parseRecord(raw) {
|
|
|
122
139
|
export function formatRecord(record) {
|
|
123
140
|
return `${record.pid} ${record.token}`;
|
|
124
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Parse the stdout of the Windows creation-time reader into a pin token. Accepts only a bare
|
|
144
|
+
* unsigned FILETIME integer so a MSYS `ps` date string cannot become a "token" that drifts
|
|
145
|
+
* between launch and teardown (the original reason the lock reader refuses win32 `ps`).
|
|
146
|
+
*/
|
|
147
|
+
export function parseWin32CreationToken(raw) {
|
|
148
|
+
const token = raw.trim();
|
|
149
|
+
return /^\d{1,20}$/.test(token) ? token : undefined;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Windows process-creation identity (#1437). A stop runs once, so unlike the advisory lock this
|
|
153
|
+
* may spend a PowerShell spawn: the token must be STABLE, not cheap. `Get-Process StartTime`
|
|
154
|
+
* converted to UTC FILETIME is fixed for the life of that pid and changes when the number is
|
|
155
|
+
* reused. `undefined` means the process is gone or PowerShell could not answer.
|
|
156
|
+
*/
|
|
157
|
+
export function win32ProcessCreationToken(pid) {
|
|
158
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
159
|
+
return undefined;
|
|
160
|
+
try {
|
|
161
|
+
const out = execFileSync("powershell.exe", [
|
|
162
|
+
"-NoProfile",
|
|
163
|
+
"-NonInteractive",
|
|
164
|
+
"-Command",
|
|
165
|
+
`(Get-Process -Id ${pid} -ErrorAction Stop).StartTime.ToUniversalTime().ToFileTimeUtc()`,
|
|
166
|
+
], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 5000 });
|
|
167
|
+
return parseWin32CreationToken(out);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return undefined;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/** Identity's start-token reader: POSIX uses the same `/proc`/`ps` implementation as the advisory
|
|
174
|
+
* lock so launch and teardown cannot drift; win32 uses {@link win32ProcessCreationToken} instead
|
|
175
|
+
* of the lock's `undefined`. `platform` is a parameter so the win32 branch is executable off
|
|
176
|
+
* Windows: a mutation that returns `undefined` on win32 must redden without a Windows kernel. */
|
|
177
|
+
export function identityStartToken(pid, platform = process.platform, win32 = win32ProcessCreationToken, posix = posixStartToken) {
|
|
178
|
+
if (platform === "win32")
|
|
179
|
+
return win32(pid);
|
|
180
|
+
return posix(pid);
|
|
181
|
+
}
|
|
182
|
+
export function defaultStartToken(pid) {
|
|
183
|
+
return identityStartToken(pid);
|
|
184
|
+
}
|
|
125
185
|
/** The start token for a pid THIS PROCESS is about to record. Prefer the reader passed by the
|
|
126
|
-
* caller (tests inject divergence), fall back to
|
|
127
|
-
*
|
|
128
|
-
* implementation. `undefined` (Windows, or a ps-less host) records a pid-only LEGACY record —
|
|
186
|
+
* caller (tests inject divergence), fall back to {@link defaultStartToken}. `undefined` (a
|
|
187
|
+
* ps-less host, or a Windows pid PowerShell could not read) records a pid-only LEGACY record —
|
|
129
188
|
* visible as such to every reader, never silently. */
|
|
130
189
|
export function identityRecord(pid, tokenAt = defaultStartToken) {
|
|
131
190
|
const token = tokenAt(pid);
|
|
132
191
|
return token === undefined ? { pid } : { pid, token };
|
|
133
192
|
}
|
|
134
|
-
/** The start-token reader shared with the advisory lock, so launch and teardown agree on the token
|
|
135
|
-
* for the same live pid. Imported here rather than reimplemented: two token readers that drift
|
|
136
|
-
* would make the SAME process look like a stranger at teardown. */
|
|
137
|
-
import { processStartToken as defaultStartToken } from "./advisory-lock.js";
|
|
138
|
-
export { defaultStartToken };
|
|
139
193
|
/**
|
|
140
194
|
* THE identity check a teardown must pass before signalling (#969). This is the "open, verify,
|
|
141
195
|
* terminate" step: verify BEFORE any signal. A record pins a start token; if the pid's CURRENT
|
|
@@ -187,13 +241,13 @@ export function identityPinPath(pidfilePath) {
|
|
|
187
241
|
}
|
|
188
242
|
/** Write the sibling pin for a pid this launch just spawned. Called AFTER the pidfile write, with
|
|
189
243
|
* the same pid, so a reader that sees a pidfile with no pin yet is reading either a legacy record
|
|
190
|
-
* or a launch mid-pairing - both are visible below, never silent. `undefined` token (
|
|
191
|
-
*
|
|
192
|
-
*
|
|
244
|
+
* or a launch mid-pairing - both are visible below, never silent. `undefined` token (ps-less host,
|
|
245
|
+
* or a pid whose creation time could not be read) writes NO pin. Windows writes a pin whenever
|
|
246
|
+
* {@link win32ProcessCreationToken} returns a FILETIME (#1437). */
|
|
193
247
|
export function writeIdentityPin(pidfilePath, pid, tokenAt = defaultStartToken) {
|
|
194
248
|
const rec = identityRecord(pid, tokenAt);
|
|
195
249
|
if (!("token" in rec))
|
|
196
|
-
return; //
|
|
250
|
+
return; // no start could be established: leave the legacy bare-pid shape, loud
|
|
197
251
|
writeFileSync(identityPinPath(pidfilePath), formatRecord(rec));
|
|
198
252
|
}
|
|
199
253
|
/**
|
|
@@ -240,7 +294,7 @@ export function verifyIdentityPin(pidfilePath, tokenAt = defaultStartToken) {
|
|
|
240
294
|
return dead ? { kind: "gone" } : { kind: "torn-pairing", pinPid: parsed.record.pid };
|
|
241
295
|
const verdict = assertRecordIdentity(parsed.record, tokenAt);
|
|
242
296
|
if (verdict.kind === "match")
|
|
243
|
-
return { kind: "match" };
|
|
297
|
+
return { kind: "match", record: parsed.record };
|
|
244
298
|
if (verdict.kind === "gone")
|
|
245
299
|
return { kind: "gone" };
|
|
246
300
|
if (verdict.kind === "mismatch")
|
|
@@ -262,7 +316,7 @@ export function identityUncertaintyRefusal(label, pidfilePath, verdict) {
|
|
|
262
316
|
`NEXT: inspect the recorded process with \`ps\`. If it should be stopped, stop it, then rerun this command; once the pid is dead the stale record clears automatically.`);
|
|
263
317
|
if (verdict.kind === "torn-pairing")
|
|
264
318
|
return new Error(`refusing to stop ${label} at ${pidfilePath}: its identity pin ${pin} names pid ${verdict.pinPid}, not the pidfile's pid. The record is preserved.\n` +
|
|
265
|
-
`NEXT: inspect the
|
|
319
|
+
`NEXT: inspect both the pidfile pid and the pin pid with \`ps\`. Automatic cleanup follows proven death of the pidfile target. If that process should be stopped, stop it, then rerun this command; do not delete the identity pin.`);
|
|
266
320
|
if (verdict.kind === "unpinned")
|
|
267
321
|
return new Error(`refusing to stop ${label} at ${pidfilePath}: its process is live but no creation identity could be established for it, so target identity cannot be proven. The record is preserved.\n` +
|
|
268
322
|
`NEXT: stop the process, then rerun this command; once the pid is dead the stale record clears automatically.`);
|
package/dist/pid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pid.js","sourceRoot":"","sources":["../src/pid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"pid.js","sourceRoot":"","sources":["../src/pid.ts"],"names":[],"mappings":"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"}
|
package/dist/preflight.d.ts
CHANGED
|
@@ -41,12 +41,12 @@ export declare function preflightTarget(target: MeshTarget, probeCreds?: string)
|
|
|
41
41
|
prune: boolean;
|
|
42
42
|
}>;
|
|
43
43
|
/** What one sweep did. `offline` is the entries whose broker is gone but whose record STAYS —
|
|
44
|
-
*
|
|
45
|
-
* that
|
|
44
|
+
* every origin, because a liveness miss is not a deletion. A surface that lists meshes renders
|
|
45
|
+
* that as a state instead of probing every broker a second time. */
|
|
46
46
|
export interface MeshSweep {
|
|
47
|
-
/** Spaces whose dead record was dropped. */
|
|
47
|
+
/** Spaces whose dead record was dropped. Empty after a liveness-only sweep. */
|
|
48
48
|
pruned: string[];
|
|
49
|
-
/** Spaces kept despite a dead broker
|
|
49
|
+
/** Spaces kept despite a dead broker. */
|
|
50
50
|
offline: string[];
|
|
51
51
|
}
|
|
52
52
|
export declare function pruneStaleMeshes(): Promise<MeshSweep>;
|
package/dist/preflight.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;;;;;;GAUG;AAEH;;kGAEkG;AAClG,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,yBAAyB,GACzB,wBAAwB,GACxB,gBAAgB,GAChB,iBAAiB,GACjB,YAAY;AACd;;;8DAG8D;GAC5D,WAAW,CAAC;AAEhB;;;;;oGAKoG;AACpG,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,EAC5B,MAAM,EAAE,eAAe,GAAG,YAAY,GAAG,aAAa,EACtD,OAAO,EAAE,OAAO,GACf;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAkB5C;AAED;;;uFAGuF;AACvF,wBAAsB,eAAe,CACnC,MAAM,EAAE,UAAU,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CA4D/E;
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;;;;;;GAUG;AAEH;;kGAEkG;AAClG,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,yBAAyB,GACzB,wBAAwB,GACxB,gBAAgB,GAChB,iBAAiB,GACjB,YAAY;AACd;;;8DAG8D;GAC5D,WAAW,CAAC;AAEhB;;;;;oGAKoG;AACpG,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,EAC5B,MAAM,EAAE,eAAe,GAAG,YAAY,GAAG,aAAa,EACtD,OAAO,EAAE,OAAO,GACf;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAkB5C;AAED;;;uFAGuF;AACvF,wBAAsB,eAAe,CACnC,MAAM,EAAE,UAAU,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CA4D/E;AAiFD;;qEAEqE;AACrE,MAAM,WAAW,SAAS;IACxB,+EAA+E;IAC/E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,yCAAyC;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,SAAS,CAAC,CAW3D"}
|
package/dist/preflight.js
CHANGED
|
@@ -58,12 +58,12 @@ export async function preflightTarget(target, probeCreds) {
|
|
|
58
58
|
return { ok: true };
|
|
59
59
|
// CONFIRM BEFORE CONDEMNING. `probeConnect`'s default budget is 1s, and this is a CREDENTIALED
|
|
60
60
|
// connect: TCP, INFO, then the JWT exchange — several round trips. A perfectly healthy broker
|
|
61
|
-
// across a slow or jittery link (a relayed overlay VPN, a loaded host) misses that routinely
|
|
62
|
-
//
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
//
|
|
61
|
+
// across a slow or jittery link (a relayed overlay VPN, a loaded host) misses that routinely.
|
|
62
|
+
// A liveness miss no longer deletes the record, but a mismatch still does, and a false
|
|
63
|
+
// unreachable still reports the mesh as down. The observed failure mode was a live mesh
|
|
64
|
+
// reported as "no mesh running (stale registry entry - removed)" because the handshake needed
|
|
65
|
+
// more than a second. A first failure only makes it a candidate; re-probe with a budget that
|
|
66
|
+
// fits a real network.
|
|
67
67
|
probe = await probeConnect(target.server, { ...auth, timeoutMs: PREFLIGHT_CONFIRM_TIMEOUT_MS });
|
|
68
68
|
if (probe.ok)
|
|
69
69
|
return { ok: true };
|
|
@@ -158,8 +158,9 @@ async function readNatsInfoGreeting(server, timeoutMs = 1_000) {
|
|
|
158
158
|
* registry mutation stays opt-in: callers that act on the registry (`spawn`/`use`/`meshes`, the
|
|
159
159
|
* manager control commands) invoke it; `<TAB>` completion must not.
|
|
160
160
|
*
|
|
161
|
-
*
|
|
162
|
-
* (`cotal meshes add`)
|
|
161
|
+
* A dead broker is never enough to delete a record: {@link pruneMesh} keeps both an
|
|
162
|
+
* operator-registered (`cotal meshes add`) mesh and an `up` / pre-origin one on a liveness miss,
|
|
163
|
+
* and this reports them as `offline` instead. Mismatch deletion is a different path.
|
|
163
164
|
*
|
|
164
165
|
* **Deletion needs CONFIRMATION, not one timeout.** Pruning is destructive: a wrongly pruned mesh
|
|
165
166
|
* costs the operator a re-`up` (or, for a remote one, the exact registration line again) and every
|
|
@@ -181,7 +182,7 @@ export async function pruneStaleMeshes() {
|
|
|
181
182
|
return;
|
|
182
183
|
if (await isReachable(m.server, { timeoutMs: PRUNE_CONFIRM_TIMEOUT_MS }))
|
|
183
184
|
return;
|
|
184
|
-
// pruneMesh, not removeMesh:
|
|
185
|
+
// pruneMesh, not removeMesh: a liveness miss keeps the record (manual and up alike).
|
|
185
186
|
(pruneMesh(m.space) ? sweep.pruned : sweep.offline).push(m.space);
|
|
186
187
|
}));
|
|
187
188
|
return sweep;
|
package/dist/preflight.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AA+B3D;;;;;oGAKoG;AACpG,MAAM,UAAU,wBAAwB,CACtC,MAA4B,EAC5B,MAAsD,EACtD,OAAgB;IAEhB,mGAAmG;IACnG,iGAAiG;IACjG,MAAM,YAAY,GAChB,MAAM,KAAK,UAAU;QACrB,MAAM,KAAK,SAAS;QACpB,MAAM,KAAK,YAAY;QACvB,MAAM,KAAK,gBAAgB,CAAC;IAC9B,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAClF,iGAAiG;IACjG,+FAA+F;IAC/F,2FAA2F;IAC3F,6FAA6F;IAC7F,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IACzE,IAAI,YAAY,IAAI,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;IACrF,IAAI,YAAY;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;IACzE,IAAI,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;IAC7D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;AACnD,CAAC;AAED;;;uFAGuF;AACvF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAkB,EAClB,UAAmB;IAEnB,8FAA8F;IAC9F,4FAA4F;IAC5F,iGAAiG;IACjG,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QACxB,MAAM,IAAI,KAAK,CAAC,sIAAsI,CAAC,CAAC;IAC1J,MAAM,KAAK,GACT,UAAU,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjG,mFAAmF;IACnF,EAAE;IACF,kGAAkG;IAClG,kGAAkG;IAClG,iGAAiG;IACjG,mEAAmE;IACnE,EAAE;IACF,iGAAiG;IACjG,gGAAgG;IAChG,iGAAiG;IACjG,qEAAqE;IACrE,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACpG,IAAI,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAClC,+FAA+F;IAC/F,8FAA8F;IAC9F,
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
|
package/dist/render.js
CHANGED
|
@@ -44,7 +44,10 @@ function renderPreflightFailure(kind, t, pruned) {
|
|
|
44
44
|
// remedy here — this machine can only wait for it or stop pointing at it.
|
|
45
45
|
if (t.origin === "manual")
|
|
46
46
|
return `✗ no broker answered at ${t.server} - "${t.space}" is registered here but its mesh is not up; start it where it runs, or \`cotal meshes rm ${t.space}\` to unregister it`;
|
|
47
|
-
|
|
47
|
+
// An `up` / pre-origin record is KEPT on a liveness miss. Keep `no mesh running at`
|
|
48
|
+
// so existing attach/mint cells still recognise the classified refusal, and name
|
|
49
|
+
// the recorded root so the operator restarts THAT mesh, not a new one from cwd.
|
|
50
|
+
return `✗ no mesh running at ${t.server} - mesh "${t.space}" is recorded at ${t.root} but not running; run \`cotal up\` there to restart`;
|
|
48
51
|
// The registry-mismatch pair, like `unreachable`, must not prescribe `cotal up` for a mesh this
|
|
49
52
|
// machine only registered: the repair there is the credentials under `--root`, or re-registering
|
|
50
53
|
// the entry — `cotal up` would start a DIFFERENT, local mesh under that name.
|
package/dist/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAmBA,+EAA+E;AAC/E,MAAM,UAAU,oBAAoB,CAAC,CAAiB;IACpD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,WAAW;YACd,OAAO,sBAAsB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAC/D,KAAK,WAAW;YACd,OAAO,eAAe,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,qGAAqG;AACrG,SAAS,iBAAiB,CAAC,GAAoB;IAC7C,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;IACtB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,qEAAqE,CAAC;QAC/E,KAAK,eAAe;YAClB,OAAO,oBAAoB,CAAC,CAAC,SAAS,qCAAqC,CAAC;QAC9E,KAAK,kBAAkB;YACrB,OAAO,+BAA+B,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gFAAgF,CAAC;QACvJ,KAAK,kBAAkB;YACrB,OAAO,oBAAoB,CAAC,CAAC,KAAK,oBAAoB,CAAC,CAAC,MAAM,yDAAyD,CAAC,CAAC,KAAK,eAAe,CAAC;QAChJ,KAAK,iBAAiB;YACpB,0FAA0F;YAC1F,sFAAsF;YACtF,OAAO,CAAC,CAAC,OAAO,KAAK,KAAK;gBACxB,CAAC,CAAC,qBAAqB,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,IAAI,4BAA4B,CAAC,CAAC,KAAK,8CAA8C,CAAC,CAAC,KAAK,+EAA+E,CAAC,CAAC,KAAK,IAAI;gBACrO,CAAC,CAAC,qBAAqB,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,IAAI,4BAA4B,CAAC,CAAC,KAAK,wEAAwE,CAAC;QACnK,KAAK,iBAAiB;YACpB,OAAO,YAAY,CAAC,CAAC,KAAK,4BAA4B,CAAC,CAAC,IAAI,mBAAmB,GAAG,CAAC,OAAO,mEAAmE,CAAC;QAChK,KAAK,sBAAsB;YACzB,gFAAgF;YAChF,yFAAyF;YACzF,yFAAyF;YACzF,OAAO,YAAY,CAAC,CAAC,KAAK,6HAA6H,CAAC,CAAC,IAAI,IAAI,iBAAiB,qHAAqH,CAAC;IAC5S,CAAC;AACH,CAAC;AAED,+FAA+F;AAC/F,SAAS,sBAAsB,CAAC,IAAsB,EAAE,CAAa,EAAE,MAAe;IACpF,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa;YAChB,0FAA0F;YAC1F,0EAA0E;YAC1E,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;gBACvB,OAAO,2BAA2B,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,KAAK,6FAA6F,CAAC,CAAC,KAAK,qBAAqB,CAAC;YACpL,OAAO,wBAAwB,CAAC,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type SecretStore } from "@cotal-ai/core";
|
|
1
|
+
import { type SecretStore, type SecretStoreIdentity } from "@cotal-ai/core";
|
|
2
2
|
/** THE local composition of the secret keyspace: a filesystem store rooted at the workspace's
|
|
3
3
|
* `.cotal/` dir, so every canonical key (`delivery.creds`, `auth/<space>/callout.json`, …)
|
|
4
4
|
* lands byte-for-byte on today's paths. Every local caller composes through here — a hand-rolled
|
|
@@ -25,7 +25,8 @@ export declare function workspaceSecretStore(root: string): FsSecretStore;
|
|
|
25
25
|
*/
|
|
26
26
|
export declare class FsSecretStore implements SecretStore {
|
|
27
27
|
private readonly root;
|
|
28
|
-
|
|
28
|
+
readonly identity: SecretStoreIdentity;
|
|
29
|
+
constructor(root: string, identity?: SecretStoreIdentity);
|
|
29
30
|
/** Resolve a logical key to an absolute path strictly UNDER `root`, fail-closed: reject empty,
|
|
30
31
|
* NUL, absolute keys, the root itself (`.`), and any key that normalizes outside the root
|
|
31
32
|
* (`..` traversal). Containment is checked via `path.relative`, not a `root + sep` prefix —
|