@cotal-ai/workspace 0.13.2 → 0.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth-paths.d.ts +180 -18
- package/dist/auth-paths.d.ts.map +1 -1
- package/dist/auth-paths.js +739 -31
- package/dist/auth-paths.js.map +1 -1
- package/dist/connect.js +3 -3
- package/dist/connect.js.map +1 -1
- package/dist/local-process.d.ts +2 -1
- package/dist/local-process.d.ts.map +1 -1
- package/dist/local-process.js +37 -3
- package/dist/local-process.js.map +1 -1
- package/dist/mesh-registry.d.ts +3 -1
- package/dist/mesh-registry.d.ts.map +1 -1
- package/dist/mesh-registry.js +59 -6
- package/dist/mesh-registry.js.map +1 -1
- package/dist/mesh-target.d.ts +1 -1
- package/dist/mesh-target.d.ts.map +1 -1
- package/dist/mesh-target.js +98 -30
- package/dist/mesh-target.js.map +1 -1
- package/dist/render.js +2 -0
- package/dist/render.js.map +1 -1
- package/dist/renewal.d.ts +28 -7
- package/dist/renewal.d.ts.map +1 -1
- package/dist/renewal.js +66 -11
- package/dist/renewal.js.map +1 -1
- package/dist/space.d.ts +4 -2
- package/dist/space.d.ts.map +1 -1
- package/dist/space.js +6 -4
- package/dist/space.js.map +1 -1
- package/package.json +2 -2
package/dist/auth-paths.d.ts
CHANGED
|
@@ -1,19 +1,50 @@
|
|
|
1
|
-
import { type SecretStore, type SpaceAuth } from "@cotal-ai/core";
|
|
1
|
+
import { type BrokerAuth, type SecretStore, type SpaceAccountAuth, type SpaceAuth } from "@cotal-ai/core";
|
|
2
2
|
export declare function authDir(root: string): string;
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
3
|
+
/** The ONE injective, case-safe space key: lowercase hex of the space's UTF-8 bytes. Every
|
|
4
|
+
* tenant-keyed namespace derives its key from this — the account filename, the user-auth state
|
|
5
|
+
* dir, the auth secret-store keys, and the machine mesh registry — because every namespace that
|
|
6
|
+
* invented its own encoding (raw name, `encodeURIComponent`) turned out to alias: ASCII case is
|
|
7
|
+
* preserved by those, so on a case-insensitive filesystem (the macOS/Windows default) `alpha` and
|
|
8
|
+
* `Alpha` addressed ONE path and the second tenant silently absorbed the first. Hex over
|
|
9
|
+
* `[0-9a-f]` cannot case-fold-collide, cannot contain a separator, and round-trips exactly. */
|
|
10
|
+
export declare function spaceKey(space: string): string;
|
|
11
|
+
/** THE per-space path/key segment — `space.<hex>`, the {@link spaceKey} under a fixed prefix so a
|
|
12
|
+
* segment is self-describing on disk and can never collide with a reserved sibling of the auth
|
|
13
|
+
* dir (`broker.json`, `account.<hex>.json`, `server.conf`, `creds/`): none of those start with
|
|
14
|
+
* `space.`, and the hex body cannot smuggle one in. Consumed by the state dir AND the auth
|
|
15
|
+
* secret-store key builders; two independently-guarded encoders were the defect generator (one
|
|
16
|
+
* gains a rule the other doesn't), so keep exactly one. */
|
|
9
17
|
export declare function spaceSegment(space: string): string;
|
|
10
|
-
/** The
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*
|
|
18
|
+
/** The space a canonical segment encodes, or undefined when the name is not one {@link spaceSegment}
|
|
19
|
+
* wrote (wrong prefix, non-hex body, or a body that does not round-trip). Enumeration and the
|
|
20
|
+
* legacy-layout shim both need this to tell the canonical namespace from strays. */
|
|
21
|
+
export declare function spaceFromSegment(name: string): string | undefined;
|
|
22
|
+
/** The SPACE-SCOPED user-auth state dir (`<root>/.cotal/auth/space.<hex>`) — the one layout fact
|
|
23
|
+
* the workstation layer owns about user auth: the auth provider persists its material under this
|
|
24
|
+
* dir (opaque to us), and its EXISTENCE marks the space as user-auth-enabled on disk. Keyed by
|
|
25
|
+
* {@link spaceSegment} so two case-differing tenants can never share one state dir and no space
|
|
26
|
+
* name can alias a reserved sibling of the auth dir. Fails loud on a degenerate space — BEFORE
|
|
27
|
+
* any caller can mutate at an aliased path.
|
|
28
|
+
*
|
|
29
|
+
* Also the ONE migration point for pre-hex layouts (`<authDir>/<encodeURIComponent(space)>`):
|
|
30
|
+
* every consumer of a space's user-auth state — the marker check, the provider's `dir`, and the
|
|
31
|
+
* secret-store keys resolved beside it — obtains this path first, so renaming the legacy dir to
|
|
32
|
+
* the canonical segment HERE means no flow can ever read (or worse, `ensure*`-REGENERATE) beside
|
|
33
|
+
* material the old layout still holds. Deliberately not in {@link hasUserAuthState} alone: a
|
|
34
|
+
* user-mode connect through a registry record never consults the marker before minting. */
|
|
16
35
|
export declare function userAuthStateDir(root: string, space: string): string;
|
|
36
|
+
/** Whether `space` is user-auth-enabled ON DISK under `root` — the authoritative marker, NOT a bare
|
|
37
|
+
* `existsSync` on {@link userAuthStateDir}: only a real provider pin inside a real directory
|
|
38
|
+
* counts. The state-dir read goes through {@link userAuthStateDir}, so a pre-hex legacy layout
|
|
39
|
+
* has already been migrated by the time the marker is checked. */
|
|
40
|
+
export declare function hasUserAuthState(root: string, space: string): boolean;
|
|
41
|
+
/** Every space with user-auth state under this auth dir, detectable WITHOUT `broker.json`/accounts:
|
|
42
|
+
* each enabled space is a `space.<hex>` subdirectory carrying a provider pin. The enumerating
|
|
43
|
+
* companion to {@link hasUserAuthState}; both share {@link pathHasUserAuthMarker} so a single
|
|
44
|
+
* space and the whole-dir sweep can never disagree on what "user-auth on disk" means. Pre-hex
|
|
45
|
+
* legacy dirs are reported too (decoded from their verbatim names), so a guard reading this stays
|
|
46
|
+
* fail-closed before the one-time migration has run. */
|
|
47
|
+
export declare function userAuthSpacesOnDisk(dir: string): string[];
|
|
17
48
|
/** The dir every per-agent standing secret materializes under (`<root>/.cotal/auth/creds`) —
|
|
18
49
|
* space-INDEPENDENT today (one root serves one space); multi-space-per-root re-keys this layout
|
|
19
50
|
* as a caller change, same as {@link userAuthStateDir}'s note. */
|
|
@@ -60,10 +91,141 @@ export declare function materializeSecretToFile(store: SecretStore, key: string,
|
|
|
60
91
|
* directory that *contains* `.cotal/`. Falls back to `start` when none is found up the tree (a
|
|
61
92
|
* fresh setup creates `.cotal/` there). Lets `cotal` run from any subdirectory of a project. */
|
|
62
93
|
export declare function findCotalRoot(start?: string): string;
|
|
63
|
-
/**
|
|
64
|
-
|
|
65
|
-
|
|
94
|
+
/** Where the one broker trust record lives. */
|
|
95
|
+
export declare function brokerAuthPath(dir: string): string;
|
|
96
|
+
/** Where one space's own account record lives: a FLAT file beside `broker.json`, keyed by
|
|
97
|
+
* {@link accountFileKey}. Flat (not `<space>/account.json`) because `<authDir>/<space>/` is
|
|
98
|
+
* {@link userAuthStateDir}; hex-keyed because a raw space name in the filename both aliased that
|
|
99
|
+
* user-auth marker and case-folded on macOS/Windows. The name of a space is authoritative in the
|
|
100
|
+
* document, so enumeration never has to trust the filename beyond finding the record. */
|
|
101
|
+
export declare function spaceAccountPath(dir: string, space: string): string;
|
|
102
|
+
/** Persist BROKER trust. `sys.signingSeed` is STRIPPED before writing: it is broker-admin minting
|
|
103
|
+
* capability, so it never lands on disk (it lives only in the in-memory {@link createBrokerAuth}
|
|
104
|
+
* result). A composition that must add spaces after first boot has to hold that seed in a
|
|
105
|
+
* BROKER-scoped secret store instead; see core's `BrokerAuth`. */
|
|
106
|
+
export declare function saveBrokerAuth(dir: string, broker: BrokerAuth): void;
|
|
107
|
+
/** Load BROKER trust, or undefined if auth was never set up here. Reads the pre-W4 monolith as
|
|
108
|
+
* MIGRATION INPUT when the broker record does not exist yet. */
|
|
109
|
+
export declare function loadBrokerAuth(dir: string): BrokerAuth | undefined;
|
|
110
|
+
/** Persist ONE space's account record. Never carries broker material. Refuses to overwrite a record
|
|
111
|
+
* that already holds a DIFFERENT space: with an injective hex key that only happens on a corrupted
|
|
112
|
+
* or hand-swapped file, and silently replacing one tenant's signing authority with another's must
|
|
113
|
+
* fail loud. */
|
|
114
|
+
export declare function saveSpaceAccountAuth(dir: string, spaceAccount: SpaceAccountAuth): void;
|
|
115
|
+
/** Load ONE space's account record, or undefined. Reads the pre-W4 monolith as MIGRATION INPUT when
|
|
116
|
+
* the per-space record does not exist yet AND that monolith is for this same space - a monolith for
|
|
117
|
+
* a DIFFERENT space must never satisfy a load for this one. */
|
|
118
|
+
export declare function loadSpaceAccountAuth(dir: string, space: string): SpaceAccountAuth | undefined;
|
|
119
|
+
/** Load the COMPOSED read view of one space's trust chain, or undefined if either authority is
|
|
120
|
+
* missing. The space key is REQUIRED: once a broker holds N accounts, a root-wide "the auth" load is
|
|
121
|
+
* intrinsically ambiguous, and picking a default silently would let (for example) a manager bound to
|
|
122
|
+
* space B mint B's agents into space A's account. Composition also asserts that this account really
|
|
123
|
+
* was signed by this broker's operator. */
|
|
124
|
+
export declare function loadSpaceAuth(dir: string, space: string): SpaceAuth | undefined;
|
|
125
|
+
/** The composed trust of the ONE space this auth dir holds - the space-blind convenience for callers
|
|
126
|
+
* that predate multi-space (a folder's own mesh, `mint` in a checkout, a status read). Fails loud
|
|
127
|
+
* when the root holds several, via {@link soleSpaceOf}. Prefer {@link loadSpaceAuth} with an
|
|
128
|
+
* explicit space wherever the caller can know it. */
|
|
129
|
+
export declare function loadSoleSpaceAuth(dir: string): SpaceAuth | undefined;
|
|
130
|
+
/** Persist a composed value by DECOMPOSING it into its two authorities. This is the migration-era
|
|
131
|
+
* writer for the many existing callers that hold a composed {@link SpaceAuth}; it is safe because
|
|
132
|
+
* there is exactly ONE broker record, so writing broker trust through any space updates the single
|
|
133
|
+
* owner rather than a per-space copy. It refuses a stripped value outright: `stripSpaceAuth` blanks
|
|
134
|
+
* the operator and system account, and decomposing that would blank broker persistence. */
|
|
66
135
|
export declare function saveSpaceAuth(dir: string, auth: SpaceAuth): void;
|
|
67
|
-
/**
|
|
68
|
-
|
|
136
|
+
/** The ONE space this auth dir holds, for the legacy paths that predate multi-space and carry no
|
|
137
|
+
* explicit space (a folder's "its own" space, a root-wide daemon remint). Undefined when the root
|
|
138
|
+
* has no auth at all.
|
|
139
|
+
*
|
|
140
|
+
* FAILS LOUD when the root holds several, rather than picking the first or a "current": a
|
|
141
|
+
* space-blind caller that silently picks is exactly how a component bound to space B mints into
|
|
142
|
+
* space A's account. Callers that can know their space must pass it explicitly instead of using
|
|
143
|
+
* this; this exists so the remaining space-blind paths become a loud error rather than a wrong
|
|
144
|
+
* answer the day a root holds two. */
|
|
145
|
+
export declare function soleSpaceOf(dir: string): string | undefined;
|
|
146
|
+
/** Refuse a BROKER-WIDE operation on a root that hosts several spaces - or whose tenant list cannot
|
|
147
|
+
* be read with certainty.
|
|
148
|
+
*
|
|
149
|
+
* Distinct from {@link soleSpaceOf}'s ambiguity, and the distinction is the whole point: the
|
|
150
|
+
* broker process, its JetStream store and the single `.cotal/auth` broker record are shared by
|
|
151
|
+
* every space on the root, so naming a space cannot scope `down`, `clean store|all`, `backup` or a
|
|
152
|
+
* restore - they would apply to all of them regardless. Sending the operator after a `--space` they
|
|
153
|
+
* cannot use (two of these commands do not even take one) is a dead end dressed as advice, so this
|
|
154
|
+
* refusal names the blast radius and stops, and stays a refusal until per-space teardown exists.
|
|
155
|
+
*
|
|
156
|
+
* A corrupt/foreign account record is refused too, NOT skipped: an under-count is the fail-open
|
|
157
|
+
* this guard exists to prevent - a file that occupies the account namespace but will not validate
|
|
158
|
+
* might be a real tenant, so the blast radius is unknown and a broker-wide delete must not proceed. */
|
|
159
|
+
export declare function assertSingleSpaceBroker(dir: string, operation: string): void;
|
|
160
|
+
/** The VALIDATED tenant inventory of an auth dir - the ONE read of "how many tenants" every other
|
|
161
|
+
* surface derives from (the broker-wide guards, `soleSpaceOf`, `cotal status`, the target
|
|
162
|
+
* resolver). Four surfaces each reading the disk their own way is how an under-count slips past
|
|
163
|
+
* exactly one of them; there must be a single answer.
|
|
164
|
+
*
|
|
165
|
+
* `spaces` are the tenants whose account records are regular files that parse, carry a `space`
|
|
166
|
+
* equal to their own injective filename key, and round-trip. `corrupt` is every entry that
|
|
167
|
+
* OCCUPIES the account namespace (`account.*.json`) yet fails any of that - including a
|
|
168
|
+
* non-regular entry (symlink, directory): `Dirent.isFile()` is lstat-semantics, so skipping those
|
|
169
|
+
* would drop a tenant whose record was symlinked while `loadSpaceAccountAuth`'s path still
|
|
170
|
+
* resolved it - the exact under-count the guards exist to refuse. The authoritative name is the
|
|
171
|
+
* record's own `space`, never inferred from the filename. `corrupt` is what turns the guards
|
|
172
|
+
* fail-CLOSED: an unreadable record is uncertainty about how many tenants exist, and a
|
|
173
|
+
* broker-wide operation must not proceed on an under-count. */
|
|
174
|
+
export declare function accountInventory(dir: string): {
|
|
175
|
+
spaces: string[];
|
|
176
|
+
corrupt: string[];
|
|
177
|
+
};
|
|
178
|
+
/** Every space that has a VALID account record under this auth dir. The broker's tenant list on disk;
|
|
179
|
+
* names come from each record's authoritative `space`. Callers that must act on the blast radius use
|
|
180
|
+
* {@link assertSingleSpaceBroker} / {@link soleSpaceOf}, which also refuse on an unreadable record. */
|
|
181
|
+
export declare function listSpaceAccounts(dir: string): string[];
|
|
182
|
+
/** THE store key of the broker trust record. Under the workspace store (rooted at `.cotal`) it
|
|
183
|
+
* resolves byte-for-byte to `.cotal/auth/broker.json`. One source for every signer-bearing tier -
|
|
184
|
+
* a drifted literal would silently split the kind. */
|
|
185
|
+
export declare const BROKER_AUTH_KEY = "auth/broker.json";
|
|
186
|
+
/** The LEGACY monolith store key (`auth/auth.json`) - migration INPUT and the container signer
|
|
187
|
+
* mount only; nothing writes this shape now (see the layout note above). */
|
|
188
|
+
export declare const SPACE_AUTH_KEY = "auth/auth.json";
|
|
189
|
+
/** THE store key of one space's account record - `auth/account.<key>.json`, the same injective
|
|
190
|
+
* {@link spaceKey} filename the FS layout uses. */
|
|
191
|
+
export declare function spaceAccountKey(space: string): string;
|
|
192
|
+
/** Load one space's COMPOSED trust view through the seam - THE reader for signer-bearing paths (the
|
|
193
|
+
* manager's signer hold, the renewal owner, CLI mint/backup/restore/…). The store is the sole
|
|
194
|
+
* authority for the material; the space is REQUIRED for the same reason as {@link loadSpaceAuth}'s:
|
|
195
|
+
* a root-wide "the auth" read is ambiguous the moment a broker holds two accounts (space-blind CLI
|
|
196
|
+
* paths resolve theirs first via {@link getSoleSpaceAuth}). Mirrors the FS reader's shapes exactly -
|
|
197
|
+
* split records compose (and verify the account really was signed by this broker's operator), either
|
|
198
|
+
* half may still come from the legacy monolith during migration, and with both split records absent
|
|
199
|
+
* the monolith is read whole (full bundle or the stripped container signer) and validated against
|
|
200
|
+
* the caller's space; there a wrong-space or malformed value fails LOUD rather than reading as
|
|
201
|
+
* absent, because the monolith names exactly one tenant. Every error names only store keys and the
|
|
202
|
+
* caller's own space label, never the stored bytes. */
|
|
203
|
+
export declare function getSpaceAuth(store: SecretStore, space: string): Promise<SpaceAuth | undefined>;
|
|
204
|
+
/** The seam companion of {@link loadSoleSpaceAuth} for the space-blind CLI paths: the FS inventory
|
|
205
|
+
* (tenant NAMES only - non-secret) supplies the one space this root holds, failing loud on several
|
|
206
|
+
* via {@link soleSpaceOf}, and the store stays the sole authority for the trust material itself.
|
|
207
|
+
* Every space-blind caller is a workstation CLI verb with the root's auth dir on this disk; a
|
|
208
|
+
* hosted composition knows its space and calls {@link getSpaceAuth} directly. */
|
|
209
|
+
export declare function getSoleSpaceAuth(store: SecretStore, dir: string): Promise<SpaceAuth | undefined>;
|
|
210
|
+
/** Persist a composed value through the seam by DECOMPOSING it into its two records - the seam
|
|
211
|
+
* writer with the SAME refusals as the FS pair ({@link saveBrokerAuth}/{@link saveSpaceAccountAuth},
|
|
212
|
+
* shared via {@link guardBrokerOverwrite}): a stripped value, a foreign-operator overwrite, a stale
|
|
213
|
+
* or rolled-back system-account generation, and another tenant's account record all refuse loud.
|
|
214
|
+
* All guards run BEFORE either put, so a refusal never leaves a half-written pair. `sys.signingSeed`
|
|
215
|
+
* never lands at rest (broker-admin minting capability; the record shape drops it).
|
|
216
|
+
*
|
|
217
|
+
* With NO broker record in the store, the FS writer's whole-inventory orphan check cannot run - a
|
|
218
|
+
* {@link SecretStore} has no enumeration - so it ranges over the ADDRESSABLE records instead: this
|
|
219
|
+
* space's own account and the legacy monolith, each of which the incoming operator must have signed.
|
|
220
|
+
* That is complete for a hosted store (scoped per-tenant inside its own resolve, per the seam's
|
|
221
|
+
* design) and for every same-space local repair; a lost broker.json beside a DIFFERENT tenant's
|
|
222
|
+
* account on the local FS stays covered by the FS writer wherever {@link saveSpaceAuth} is the
|
|
223
|
+
* writer (accepted residual, documented here rather than silently absorbed). */
|
|
224
|
+
export declare function putSpaceAuth(store: SecretStore, auth: SpaceAuth): Promise<void>;
|
|
225
|
+
/** Remove the space trust material through the seam - the authoritative delete for a non-FS store.
|
|
226
|
+
* BROKER-WIDE by nature (the broker record dies with its last space's account), so its one caller
|
|
227
|
+
* is `clean all` AFTER the failure gate and the {@link assertSingleSpaceBroker} guard - on a
|
|
228
|
+
* multi-tenant root that guard refuses long before this runs. Deletes the space's account record,
|
|
229
|
+
* the broker record, and the legacy monolith. Idempotent. */
|
|
230
|
+
export declare function deleteSpaceAuth(store: SecretStore, space: string): Promise<void>;
|
|
69
231
|
//# sourceMappingURL=auth-paths.d.ts.map
|
package/dist/auth-paths.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-paths.d.ts","sourceRoot":"","sources":["../src/auth-paths.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"auth-paths.d.ts","sourceRoot":"","sources":["../src/auth-paths.ts"],"names":[],"mappings":"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"}
|