@cotal-ai/workspace 0.111.1 → 0.112.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/build/Release/darwin-arm64/build.json +1 -1
- package/build/Release/darwin-x64/build.json +1 -1
- package/build/Release/win32-arm64/build.json +1 -1
- package/build/Release/win32-x64/build.json +1 -1
- package/dist/deprecated-daemon-entries.d.ts +3 -0
- package/dist/deprecated-daemon-entries.d.ts.map +1 -1
- package/dist/deprecated-daemon-entries.js +4 -0
- package/dist/deprecated-daemon-entries.js.map +1 -1
- package/dist/space-host.d.ts +36 -8
- package/dist/space-host.d.ts.map +1 -1
- package/dist/space-host.js +189 -56
- package/dist/space-host.js.map +1 -1
- package/package.json +2 -2
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"platform": "darwin",
|
|
4
4
|
"arch": "arm64",
|
|
5
5
|
"nodeApi": 8,
|
|
6
|
-
"source": "
|
|
6
|
+
"source": "d4543d735e4651e5820fb270e71564558c096184",
|
|
7
7
|
"sourceHashes": {
|
|
8
8
|
"native/win32-process.c": "889b215135b60dd3a45096737a3219ce114bc424e4b6cce42624f0913f8447dc",
|
|
9
9
|
"native/win32-system-id.cpp": "2dd51f24425e8239aeac1aae01e67f43264f04f09cd9097a12d288be7a84e074",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"platform": "darwin",
|
|
4
4
|
"arch": "x64",
|
|
5
5
|
"nodeApi": 8,
|
|
6
|
-
"source": "
|
|
6
|
+
"source": "d4543d735e4651e5820fb270e71564558c096184",
|
|
7
7
|
"sourceHashes": {
|
|
8
8
|
"native/win32-process.c": "889b215135b60dd3a45096737a3219ce114bc424e4b6cce42624f0913f8447dc",
|
|
9
9
|
"native/win32-system-id.cpp": "2dd51f24425e8239aeac1aae01e67f43264f04f09cd9097a12d288be7a84e074",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"platform": "win32",
|
|
4
4
|
"arch": "arm64",
|
|
5
5
|
"nodeApi": 8,
|
|
6
|
-
"source": "
|
|
6
|
+
"source": "d4543d735e4651e5820fb270e71564558c096184",
|
|
7
7
|
"sourceHashes": {
|
|
8
8
|
"native/win32-process.c": "889b215135b60dd3a45096737a3219ce114bc424e4b6cce42624f0913f8447dc",
|
|
9
9
|
"native/win32-system-id.cpp": "2dd51f24425e8239aeac1aae01e67f43264f04f09cd9097a12d288be7a84e074",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"platform": "win32",
|
|
4
4
|
"arch": "x64",
|
|
5
5
|
"nodeApi": 8,
|
|
6
|
-
"source": "
|
|
6
|
+
"source": "d4543d735e4651e5820fb270e71564558c096184",
|
|
7
7
|
"sourceHashes": {
|
|
8
8
|
"native/win32-process.c": "889b215135b60dd3a45096737a3219ce114bc424e4b6cce42624f0913f8447dc",
|
|
9
9
|
"native/win32-system-id.cpp": "2dd51f24425e8239aeac1aae01e67f43264f04f09cd9097a12d288be7a84e074",
|
|
@@ -17,6 +17,9 @@ export declare const SUPERVISE_ONLY_FLAGS: readonly ["execution", "spawn", "seat
|
|
|
17
17
|
/** The `deliver` flags the `delivery` service preset has no form for yet: the preset starts one
|
|
18
18
|
* space's daemon, and `--spaces` serves several from one process. */
|
|
19
19
|
export declare const DELIVER_ONLY_FLAGS: readonly ["spaces"];
|
|
20
|
+
/** The `auth-service` flags the `auth-service` service preset has no form for yet: the preset starts
|
|
21
|
+
* one space's service, and `--spaces` serves several from one process. */
|
|
22
|
+
export declare const AUTH_SERVICE_ONLY_FLAGS: readonly ["spaces"];
|
|
20
23
|
/** The hidden twin `up` launches for each deprecated entry it still starts, and the manager's daemon
|
|
21
24
|
* entry. A twin is the entry's own declaration and runner without the warning, so only a persisted
|
|
22
25
|
* caller sees the warning. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deprecated-daemon-entries.d.ts","sourceRoot":"","sources":["../src/deprecated-daemon-entries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI1D;wDACwD;AACxD,eAAO,MAAM,4BAA4B,UAAU,CAAC;AAEpD,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX;iCACiC;AACjC,eAAO,MAAM,wBAAwB,cAAc,CAAC;AAEpD;yFACyF;AACzF,eAAO,MAAM,oBAAoB,oIAAqI,CAAC;AAEvK;sEACsE;AACtE,eAAO,MAAM,kBAAkB,qBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"deprecated-daemon-entries.d.ts","sourceRoot":"","sources":["../src/deprecated-daemon-entries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI1D;wDACwD;AACxD,eAAO,MAAM,4BAA4B,UAAU,CAAC;AAEpD,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX;iCACiC;AACjC,eAAO,MAAM,wBAAwB,cAAc,CAAC;AAEpD;yFACyF;AACzF,eAAO,MAAM,oBAAoB,oIAAqI,CAAC;AAEvK;sEACsE;AACtE,eAAO,MAAM,kBAAkB,qBAAsB,CAAC;AAEtD;2EAC2E;AAC3E,eAAO,MAAM,uBAAuB,qBAAsB,CAAC;AAS3D;;+BAE+B;AAC/B,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC;AAEX,iGAAiG;AACjG,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,yBAAyB,GAAG,OAAO,wBAAwB,GAAG,iBAAiB,CAAC;AAEjI;;wFAEwF;AACxF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,GAAE,SAAS,MAAM,EAAO,GAAG,MAAM,CAW/G;AAED;uCACuC;AACvC,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,OAAO,yBAAyB,GAAG,OAAO,wBAAwB,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrJ;AAED;uFACuF;AACvF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,EAAE,IAAI,GAAE,SAAS,MAAM,EAAO,GAAG,IAAI,CAG1G;AAED;;iEAEiE;AACjE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,OAAO,kBAAkB,EACtC,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,CAAC,IAAI,EAAE,UAAU,KAAK,qBAAmC,GACjE,OAAO,CAQT"}
|
|
@@ -18,10 +18,14 @@ export const SUPERVISE_ONLY_FLAGS = ["execution", "spawn", "seat-cap", "resume-a
|
|
|
18
18
|
/** The `deliver` flags the `delivery` service preset has no form for yet: the preset starts one
|
|
19
19
|
* space's daemon, and `--spaces` serves several from one process. */
|
|
20
20
|
export const DELIVER_ONLY_FLAGS = ["spaces"];
|
|
21
|
+
/** The `auth-service` flags the `auth-service` service preset has no form for yet: the preset starts
|
|
22
|
+
* one space's service, and `--spaces` serves several from one process. */
|
|
23
|
+
export const AUTH_SERVICE_ONLY_FLAGS = ["spaces"];
|
|
21
24
|
/** Per entry, the flags its replacement has no form for. */
|
|
22
25
|
const ENTRY_ONLY_FLAGS = {
|
|
23
26
|
[DEPRECATED_MANAGER_ENTRY]: SUPERVISE_ONLY_FLAGS,
|
|
24
27
|
deliver: DELIVER_ONLY_FLAGS,
|
|
28
|
+
"auth-service": AUTH_SERVICE_ONLY_FLAGS,
|
|
25
29
|
};
|
|
26
30
|
/** The hidden twin `up` launches for each deprecated entry it still starts, and the manager's daemon
|
|
27
31
|
* entry. A twin is the entry's own declaration and runner without the warning, so only a persisted
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deprecated-daemon-entries.js","sourceRoot":"","sources":["../src/deprecated-daemon-entries.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE1D;wDACwD;AACxD,MAAM,CAAC,MAAM,4BAA4B,GAAG,OAAO,CAAC;AAEpD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,OAAO,EAAE,UAAU;IACnB,cAAc,EAAE,cAAc;IAC9B,iBAAiB,EAAE,iBAAiB;CAC5B,CAAC;AAEX;iCACiC;AACjC,MAAM,CAAC,MAAM,wBAAwB,GAAG,WAAW,CAAC;AAEpD;yFACyF;AACzF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,sBAAsB,CAAU,CAAC;AAEvK;sEACsE;AACtE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAQ,CAAU,CAAC;AAEtD,4DAA4D;AAC5D,MAAM,gBAAgB,GAAiH;IACrI,CAAC,wBAAwB,CAAC,EAAE,oBAAoB;IAChD,OAAO,EAAE,kBAAkB;
|
|
1
|
+
{"version":3,"file":"deprecated-daemon-entries.js","sourceRoot":"","sources":["../src/deprecated-daemon-entries.ts"],"names":[],"mappings":"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"}
|
package/dist/space-host.d.ts
CHANGED
|
@@ -5,21 +5,45 @@ export interface SpaceManifest {
|
|
|
5
5
|
version: 1;
|
|
6
6
|
spaces: string[];
|
|
7
7
|
}
|
|
8
|
+
/** A version 2 manifest: one object per space, `{ "space": "<s>", ...settings }`, read by a host
|
|
9
|
+
* whose lanes take per-space settings. */
|
|
10
|
+
export interface SpaceSettingsManifest<S> {
|
|
11
|
+
version: 2;
|
|
12
|
+
spaces: string[];
|
|
13
|
+
settings: ReadonlyMap<string, S>;
|
|
14
|
+
}
|
|
15
|
+
/** How a host reads the per-space settings of a version 2 manifest. */
|
|
16
|
+
export interface SpaceSettings<S> {
|
|
17
|
+
/** Parse one entry's fields other than `space`, or throw naming what is wrong. Return a JSON
|
|
18
|
+
* value built in a fixed key order: the host compares two parses as JSON to tell whether a live
|
|
19
|
+
* lane's settings changed. */
|
|
20
|
+
parse(space: string, fields: Readonly<Record<string, unknown>>): S;
|
|
21
|
+
/** Refuse entries that conflict with each other, such as two spaces naming one port. */
|
|
22
|
+
across?(settings: ReadonlyMap<string, S>): void;
|
|
23
|
+
}
|
|
8
24
|
/** One space's lane, as a host holds it. */
|
|
9
25
|
export interface SpaceLane {
|
|
10
26
|
readonly space: string;
|
|
11
27
|
/** Settles with what this lane lost once it stops serving, by {@link close} or by a loss. It never
|
|
12
28
|
* rejects: a holder distinguishes the two by whether it asked for the close. */
|
|
13
29
|
readonly lost: Promise<string>;
|
|
14
|
-
/** Stop serving and release everything the lane holds. Safe to call more than once.
|
|
30
|
+
/** Stop serving and release everything the lane holds. Safe to call more than once. A rejection
|
|
31
|
+
* says the lane may still serve: the host then acknowledges nothing until a later close resolves. */
|
|
15
32
|
close(): Promise<void>;
|
|
16
33
|
}
|
|
17
34
|
/** What a multi-space daemon supplies to {@link runSpaceHost}. */
|
|
18
|
-
export interface SpaceHostOptions {
|
|
35
|
+
export interface SpaceHostOptions<S = undefined> {
|
|
19
36
|
/** Path of the manifest file. */
|
|
20
37
|
manifest: string;
|
|
38
|
+
/** Present for a host whose lanes take per-space settings: it reads version 2 manifests only.
|
|
39
|
+
* Absent, the host reads version 1 only, so neither kind of host runs on the other's file. */
|
|
40
|
+
settings?: SpaceSettings<S>;
|
|
21
41
|
/** Open one space's lane, or throw naming why the space cannot be served. */
|
|
22
|
-
open(space: string): Promise<SpaceLane>;
|
|
42
|
+
open(space: string, settings: S): Promise<SpaceLane>;
|
|
43
|
+
/** `every` (the default) refuses to start unless every space opens, and leaves no lane running.
|
|
44
|
+
* `servable` starts with the spaces that open, reports each one that does not, and retries it as
|
|
45
|
+
* reconcile does after startup. A manifest that does not read whole refuses either way. */
|
|
46
|
+
startup?: "every" | "servable";
|
|
23
47
|
/** Names the host in its log lines, such as `auth callout host`. */
|
|
24
48
|
label: string;
|
|
25
49
|
/** Names the command in a startup refusal, such as `auth-service --callout-only --spaces`. */
|
|
@@ -34,17 +58,21 @@ export interface SpaceHostOptions {
|
|
|
34
58
|
/** A started host. `ended` resolves with the exit code once a signal has closed every lane. */
|
|
35
59
|
export interface SpaceHost {
|
|
36
60
|
readonly lanes: ReadonlyMap<string, SpaceLane>;
|
|
61
|
+
/** The spaces the manifest named at startup, in manifest order. */
|
|
62
|
+
readonly named: readonly string[];
|
|
37
63
|
readonly ended: Promise<number>;
|
|
38
64
|
}
|
|
39
65
|
/** Parse a space manifest. Throws with what is wrong: the caller keeps its live lanes rather than
|
|
40
|
-
* acting on a file it could not read whole. */
|
|
66
|
+
* acting on a file it could not read whole. With `settings` it reads version 2, otherwise version 1. */
|
|
41
67
|
export declare function parseSpaceManifest(text: string): SpaceManifest;
|
|
68
|
+
export declare function parseSpaceManifest<S>(text: string, settings: SpaceSettings<S>): SpaceSettingsManifest<S>;
|
|
42
69
|
/** Read and parse the manifest at `path`. The error names the path, so a host log line is legible
|
|
43
70
|
* without the operator correlating it. */
|
|
44
71
|
export declare function readSpaceManifest(path: string): SpaceManifest;
|
|
45
72
|
/** Open a lane for every space in the manifest, then keep the live lanes equal to the manifest until
|
|
46
|
-
* a signal stops the host.
|
|
47
|
-
* error naming the space, and no lane is left running
|
|
48
|
-
*
|
|
49
|
-
|
|
73
|
+
* a signal stops the host. Under the default `every` startup, a space that cannot open is a
|
|
74
|
+
* configuration error naming the space, and no lane is left running; under `servable` the host
|
|
75
|
+
* starts with the spaces that open. Returns once startup has succeeded; the caller prints its ready
|
|
76
|
+
* line and exits with `ended`. */
|
|
77
|
+
export declare function runSpaceHost<S = undefined>(options: SpaceHostOptions<S>): Promise<SpaceHost>;
|
|
50
78
|
//# sourceMappingURL=space-host.d.ts.map
|
package/dist/space-host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-host.d.ts","sourceRoot":"","sources":["../src/space-host.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"space-host.d.ts","sourceRoot":"","sources":["../src/space-host.ts"],"names":[],"mappings":"AA+BA;;0BAE0B;AAC1B,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;2CAC2C;AAC3C,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CAClC;AAED,uEAAuE;AACvE,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B;;mCAE+B;IAC/B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,wFAAwF;IACxF,MAAM,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;CACjD;AAED,4CAA4C;AAC5C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;qFACiF;IACjF,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B;0GACsG;IACtG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,kEAAkE;AAClE,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,SAAS;IAC7C,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB;mGAC+F;IAC/F,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,6EAA6E;IAC7E,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACrD;;gGAE4F;IAC5F,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC/B,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;IAC1C,iDAAiD;IACjD,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,+FAA+F;AAC/F,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/C,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC;AAED;yGACyG;AACzG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;AAChE,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAgD1G;2CAC2C;AAC3C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAE7D;AAmBD;;;;mCAImC;AACnC,wBAAsB,YAAY,CAAC,CAAC,GAAG,SAAS,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CA+NlG"}
|
package/dist/space-host.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* One process holding one lane per space named in a manifest file. The auth callout host
|
|
3
|
-
* (`cotal auth-service --callout-only --spaces <manifest>`)
|
|
4
|
-
* (`cotal
|
|
5
|
-
* lifecycle are one piece of code
|
|
3
|
+
* (`cotal auth-service --callout-only --spaces <manifest>`), the auth service host
|
|
4
|
+
* (`cotal auth-service --spaces <manifest>`) and the delivery host (`cotal deliver --spaces
|
|
5
|
+
* <manifest>`) all run on this, so the manifest grammar and the lane lifecycle are one piece of code
|
|
6
|
+
* for every multi-space daemon.
|
|
6
7
|
*
|
|
7
8
|
* A lane is whatever the caller opens for one space. The host shares nothing between lanes but the
|
|
8
9
|
* process: a lane that ends leaves the map and the others keep serving.
|
|
@@ -11,8 +12,13 @@
|
|
|
11
12
|
* opens or closes the difference. It runs when the manifest changes on disk, on `SIGHUP`, when a
|
|
12
13
|
* lane is lost, after a short fixed wait when a lane failed to open, and on a slow backstop
|
|
13
14
|
* interval. A manifest that does not read or parse whole leaves the live lanes alone.
|
|
15
|
+
*
|
|
16
|
+
* Once a pass has closed every lane its manifest does not name, the host writes
|
|
17
|
+
* `<manifest>.applied` naming the SHA-256 of the manifest bytes that pass read. A writer that
|
|
18
|
+
* removes a space waits for that record to know the space has no lane left in this process.
|
|
14
19
|
*/
|
|
15
|
-
import {
|
|
20
|
+
import { createHash } from "node:crypto";
|
|
21
|
+
import { readFileSync, renameSync, watch, writeFileSync } from "node:fs";
|
|
16
22
|
import { basename, dirname, resolve } from "node:path";
|
|
17
23
|
/** How long after a lane fails to open the host tries it again. One fixed wait, never a growing
|
|
18
24
|
* backoff, and the log line that reports the failure names it. */
|
|
@@ -20,9 +26,7 @@ const REOPEN_WAIT_SECONDS = 5;
|
|
|
20
26
|
/** The backstop reconcile. A lost lane and a changed manifest each reconcile at once, so this only
|
|
21
27
|
* catches a change no watch reported. */
|
|
22
28
|
const BACKSTOP_INTERVAL_SECONDS = 60;
|
|
23
|
-
|
|
24
|
-
* acting on a file it could not read whole. */
|
|
25
|
-
export function parseSpaceManifest(text) {
|
|
29
|
+
export function parseSpaceManifest(text, settings) {
|
|
26
30
|
let doc;
|
|
27
31
|
try {
|
|
28
32
|
doc = JSON.parse(text);
|
|
@@ -37,53 +41,89 @@ export function parseSpaceManifest(text) {
|
|
|
37
41
|
if (unknown.length)
|
|
38
42
|
throw new Error(`unknown field(s) ${unknown.join(", ")}; the manifest takes version and spaces`);
|
|
39
43
|
const { version, spaces } = doc;
|
|
40
|
-
if (version !== 1)
|
|
41
|
-
throw new Error(`version must be 1, got ${JSON.stringify(version)}`);
|
|
44
|
+
if (settings === undefined && version !== 1)
|
|
45
|
+
throw new Error(`version must be 1, got ${JSON.stringify(version)}${version === 2 ? "; this host takes no per-space settings" : ""}`);
|
|
46
|
+
if (settings !== undefined && version !== 2)
|
|
47
|
+
throw new Error(`version must be 2, got ${JSON.stringify(version)}${version === 1 ? '; this host reads one object per space, {"space": "<s>", ...}' : ""}`);
|
|
42
48
|
if (!Array.isArray(spaces))
|
|
43
|
-
throw new Error(
|
|
49
|
+
throw new Error(`spaces must be an array of ${settings === undefined ? "space names" : "space objects"}`);
|
|
44
50
|
if (spaces.length === 0)
|
|
45
51
|
throw new Error("spaces is empty; a host serves at least one space");
|
|
52
|
+
const names = [];
|
|
53
|
+
const parsed = new Map();
|
|
46
54
|
for (const entry of spaces) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (
|
|
55
|
+
let name = entry;
|
|
56
|
+
let fields = {};
|
|
57
|
+
if (settings === undefined) {
|
|
58
|
+
if (typeof entry !== "string")
|
|
59
|
+
throw new Error(`every entry of spaces must be a space name string, got ${JSON.stringify(entry)}; one host serves one broker, so run one host per broker rather than naming a server per space`);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
if (typeof entry !== "object" || entry === null || Array.isArray(entry))
|
|
63
|
+
throw new Error(`every entry of spaces must be an object {"space": "<s>", ...}, got ${JSON.stringify(entry)}`);
|
|
64
|
+
({ space: name, ...fields } = entry);
|
|
65
|
+
if (typeof name !== "string")
|
|
66
|
+
throw new Error(`every entry of spaces needs a space name string, got ${JSON.stringify(name)}`);
|
|
67
|
+
}
|
|
68
|
+
if (name.trim() === "")
|
|
50
69
|
throw new Error("a space name is empty");
|
|
70
|
+
if (names.includes(name))
|
|
71
|
+
throw new Error(`space ${JSON.stringify(name)} is named more than once`);
|
|
72
|
+
names.push(name);
|
|
73
|
+
if (settings === undefined)
|
|
74
|
+
continue;
|
|
75
|
+
try {
|
|
76
|
+
parsed.set(name, settings.parse(name, fields));
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
throw new Error(`space ${JSON.stringify(name)}: ${e instanceof Error ? e.message : String(e)}`);
|
|
80
|
+
}
|
|
51
81
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
seen.add(entry);
|
|
57
|
-
}
|
|
58
|
-
return { version: 1, spaces: spaces };
|
|
82
|
+
if (settings === undefined)
|
|
83
|
+
return { version: 1, spaces: names };
|
|
84
|
+
settings.across?.(parsed);
|
|
85
|
+
return { version: 2, spaces: names, settings: parsed };
|
|
59
86
|
}
|
|
60
87
|
/** Read and parse the manifest at `path`. The error names the path, so a host log line is legible
|
|
61
88
|
* without the operator correlating it. */
|
|
62
89
|
export function readSpaceManifest(path) {
|
|
63
|
-
|
|
90
|
+
return readManifestFile(path, undefined).manifest;
|
|
91
|
+
}
|
|
92
|
+
/** Read the manifest at `path` and the SHA-256 of the bytes read, which an acknowledgment names. */
|
|
93
|
+
function readManifestFile(path, settings) {
|
|
94
|
+
let bytes;
|
|
64
95
|
try {
|
|
65
|
-
|
|
96
|
+
bytes = readFileSync(path);
|
|
66
97
|
}
|
|
67
98
|
catch (e) {
|
|
68
99
|
throw new Error(`${path} could not be read (${e instanceof Error ? e.message : String(e)})`);
|
|
69
100
|
}
|
|
70
101
|
try {
|
|
71
|
-
|
|
102
|
+
const text = bytes.toString("utf8");
|
|
103
|
+
const manifest = settings === undefined ? parseSpaceManifest(text) : parseSpaceManifest(text, settings);
|
|
104
|
+
return { manifest, sha256: createHash("sha256").update(bytes).digest("hex") };
|
|
72
105
|
}
|
|
73
106
|
catch (e) {
|
|
74
107
|
throw new Error(`${path} is invalid: ${e instanceof Error ? e.message : String(e)}`);
|
|
75
108
|
}
|
|
76
109
|
}
|
|
77
110
|
/** Open a lane for every space in the manifest, then keep the live lanes equal to the manifest until
|
|
78
|
-
* a signal stops the host.
|
|
79
|
-
* error naming the space, and no lane is left running
|
|
80
|
-
*
|
|
111
|
+
* a signal stops the host. Under the default `every` startup, a space that cannot open is a
|
|
112
|
+
* configuration error naming the space, and no lane is left running; under `servable` the host
|
|
113
|
+
* starts with the spaces that open. Returns once startup has succeeded; the caller prints its ready
|
|
114
|
+
* line and exits with `ended`. */
|
|
81
115
|
export async function runSpaceHost(options) {
|
|
82
116
|
const { label } = options;
|
|
83
117
|
const manifestPath = resolve(options.manifest);
|
|
84
118
|
const log = options.log ?? ((l) => console.error(l));
|
|
85
119
|
const lanes = new Map();
|
|
120
|
+
/** Each live lane's settings as JSON, which a changed entry no longer matches. */
|
|
121
|
+
const opened = new Map();
|
|
122
|
+
/** Lanes taken out of service whose close rejected. Each may still serve, so while any is here
|
|
123
|
+
* no acknowledgment is written and its space is not opened again; every pass retries its close. */
|
|
124
|
+
const unclosed = new Map();
|
|
86
125
|
let stopping = false;
|
|
126
|
+
const settingsOf = (wanted, space) => (wanted.version === 2 ? wanted.settings.get(space) : undefined);
|
|
87
127
|
/** Watch one lane for a loss. A lane the host deliberately removed is no longer the map's lane for
|
|
88
128
|
* its space, so its settled `lost` is ignored rather than read as a failure to recover from. */
|
|
89
129
|
const watchLane = (lane) => {
|
|
@@ -91,16 +131,54 @@ export async function runSpaceHost(options) {
|
|
|
91
131
|
if (stopping || lanes.get(lane.space) !== lane)
|
|
92
132
|
return;
|
|
93
133
|
lanes.delete(lane.space);
|
|
134
|
+
opened.delete(lane.space);
|
|
94
135
|
log(`✗ ${label}: space "${lane.space}" lost ${what} - that lane stopped ${options.serving}; ${lanes.size} lane(s) still up`);
|
|
95
136
|
schedule(0);
|
|
96
137
|
});
|
|
97
138
|
};
|
|
98
|
-
const open = async (space) => {
|
|
99
|
-
const lane = await options.open(space);
|
|
139
|
+
const open = async (space, settings) => {
|
|
140
|
+
const lane = await options.open(space, settings);
|
|
100
141
|
lanes.set(space, lane);
|
|
142
|
+
opened.set(space, JSON.stringify(settings) ?? "");
|
|
101
143
|
watchLane(lane);
|
|
102
144
|
return lane;
|
|
103
145
|
};
|
|
146
|
+
/** Open every wanted space without a lane. Each failure is reported and retried after the fixed
|
|
147
|
+
* wait; the others still open. */
|
|
148
|
+
const openWanted = async (wanted) => {
|
|
149
|
+
let failed = false;
|
|
150
|
+
for (const space of wanted.spaces) {
|
|
151
|
+
if (lanes.has(space) || unclosed.has(space) || stopping)
|
|
152
|
+
continue;
|
|
153
|
+
try {
|
|
154
|
+
await open(space, settingsOf(wanted, space));
|
|
155
|
+
log(`${label}: space "${space}" opened - ${lanes.size} lane(s) up`);
|
|
156
|
+
}
|
|
157
|
+
catch (e) {
|
|
158
|
+
failed = true;
|
|
159
|
+
log(`✗ ${label}: space "${space}" could not be served (${e instanceof Error ? e.message : String(e)}) - retrying in ${REOPEN_WAIT_SECONDS}s`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (failed)
|
|
163
|
+
schedule(REOPEN_WAIT_SECONDS);
|
|
164
|
+
};
|
|
165
|
+
// ---- the acknowledgment ------------------------------------------------------------------------
|
|
166
|
+
// Sound because passes are serialized and each reads the manifest afresh: a pass that read an
|
|
167
|
+
// older manifest and is still opening a removed space is followed by one that closes it before
|
|
168
|
+
// it acknowledges, nothing opens a space except a pass whose own manifest names it, and no pass
|
|
169
|
+
// acknowledges while a lane whose close rejected may still serve.
|
|
170
|
+
const appliedPath = `${manifestPath}.applied`;
|
|
171
|
+
let acknowledged;
|
|
172
|
+
/** Record that every space the manifest with this digest does not name has no lane. Written
|
|
173
|
+
* through a sibling and a rename, so a reader never sees a partial record. */
|
|
174
|
+
const acknowledge = (sha256) => {
|
|
175
|
+
if (sha256 === acknowledged)
|
|
176
|
+
return;
|
|
177
|
+
const tmp = `${appliedPath}.${process.pid}.tmp`;
|
|
178
|
+
writeFileSync(tmp, `${JSON.stringify({ version: 1, sha256 })}\n`);
|
|
179
|
+
renameSync(tmp, appliedPath);
|
|
180
|
+
acknowledged = sha256;
|
|
181
|
+
};
|
|
104
182
|
// ---- reconcile: the one path that adds and removes a lane -------------------------------------
|
|
105
183
|
let reconciling = false;
|
|
106
184
|
let pending = false;
|
|
@@ -129,54 +207,108 @@ export async function runSpaceHost(options) {
|
|
|
129
207
|
try {
|
|
130
208
|
do {
|
|
131
209
|
pending = false;
|
|
132
|
-
let
|
|
210
|
+
let read;
|
|
133
211
|
try {
|
|
134
|
-
|
|
212
|
+
read = readManifestFile(manifestPath, options.settings);
|
|
135
213
|
}
|
|
136
214
|
catch (e) {
|
|
137
215
|
log(`✗ ${label}: ${e instanceof Error ? e.message : String(e)} - keeping the ${lanes.size} lane(s) already open`);
|
|
138
216
|
return;
|
|
139
217
|
}
|
|
218
|
+
const wanted = read.manifest;
|
|
140
219
|
const want = new Set(wanted.spaces);
|
|
220
|
+
for (const [space, lane] of [...unclosed]) {
|
|
221
|
+
if (stopping)
|
|
222
|
+
continue;
|
|
223
|
+
if (await closeLane(space, lane))
|
|
224
|
+
log(`${label}: space "${space}" closed its lane on a retry`);
|
|
225
|
+
}
|
|
141
226
|
for (const [space, lane] of [...lanes]) {
|
|
142
|
-
if (
|
|
227
|
+
if (stopping)
|
|
228
|
+
continue;
|
|
229
|
+
const changed = want.has(space) && opened.get(space) !== (JSON.stringify(settingsOf(wanted, space)) ?? "");
|
|
230
|
+
if (want.has(space) && !changed)
|
|
143
231
|
continue;
|
|
144
232
|
// Out of the map before the close, so this lane's `lost` reads as the removal it is.
|
|
145
233
|
lanes.delete(space);
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
let failed = false;
|
|
150
|
-
for (const space of wanted.spaces) {
|
|
151
|
-
if (lanes.has(space) || stopping)
|
|
234
|
+
opened.delete(space);
|
|
235
|
+
if (!(await closeLane(space, lane)))
|
|
152
236
|
continue;
|
|
237
|
+
log(changed
|
|
238
|
+
? `${label}: space "${space}" changed its settings - closed its lane to reopen it; ${lanes.size} lane(s) up`
|
|
239
|
+
: `${label}: space "${space}" left the manifest - closed its lane; ${lanes.size} lane(s) up`);
|
|
240
|
+
}
|
|
241
|
+
if (stopping)
|
|
242
|
+
return;
|
|
243
|
+
if (unclosed.size === 0) {
|
|
153
244
|
try {
|
|
154
|
-
|
|
155
|
-
log(`${label}: space "${space}" opened - ${lanes.size} lane(s) up`);
|
|
245
|
+
acknowledge(read.sha256);
|
|
156
246
|
}
|
|
157
247
|
catch (e) {
|
|
158
|
-
|
|
159
|
-
log(`✗ ${label}: space "${space}" could not be served (${e instanceof Error ? e.message : String(e)}) - retrying in ${REOPEN_WAIT_SECONDS}s`);
|
|
248
|
+
log(`✗ ${label}: could not write ${appliedPath} (${e instanceof Error ? e.message : String(e)}) - a writer waiting on it keeps waiting; retrying on the next pass`);
|
|
160
249
|
}
|
|
161
250
|
}
|
|
162
|
-
|
|
251
|
+
else {
|
|
163
252
|
schedule(REOPEN_WAIT_SECONDS);
|
|
253
|
+
}
|
|
254
|
+
await openWanted(wanted);
|
|
164
255
|
} while (pending && !stopping);
|
|
165
256
|
}
|
|
166
257
|
finally {
|
|
167
258
|
reconciling = false;
|
|
168
259
|
}
|
|
169
260
|
};
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
261
|
+
/** Close a lane already out of the map. A close that rejects keeps the lane in `unclosed`, which
|
|
262
|
+
* holds back every acknowledgment until a later pass closes it. */
|
|
263
|
+
const closeLane = async (space, lane) => {
|
|
173
264
|
try {
|
|
174
|
-
await
|
|
265
|
+
await lane.close();
|
|
266
|
+
unclosed.delete(space);
|
|
267
|
+
return true;
|
|
175
268
|
}
|
|
176
269
|
catch (e) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
270
|
+
unclosed.set(space, lane);
|
|
271
|
+
log(`✗ ${label}: space "${space}" did not confirm its lane closed (${e instanceof Error ? e.message : String(e)}) - acknowledging nothing until it does; retrying in ${REOPEN_WAIT_SECONDS}s`);
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
/** Close every lane at once. Each leaves the maps before its close, so its `lost` reads as the
|
|
276
|
+
* deliberate close it is and never schedules a reconcile that would open it again. */
|
|
277
|
+
const closeAll = async () => {
|
|
278
|
+
const all = [...lanes.values(), ...unclosed.values()];
|
|
279
|
+
lanes.clear();
|
|
280
|
+
opened.clear();
|
|
281
|
+
unclosed.clear();
|
|
282
|
+
await Promise.all(all.map((lane) => lane.close().catch(() => { })));
|
|
283
|
+
};
|
|
284
|
+
// ---- startup ----------------------------------------------------------------------------------
|
|
285
|
+
// A manifest that does not read whole refuses under either policy: there is no list to serve. The
|
|
286
|
+
// acknowledgment is written before any lane opens, so a host that cannot write it refuses too.
|
|
287
|
+
const initial = readManifestFile(manifestPath, options.settings);
|
|
288
|
+
try {
|
|
289
|
+
acknowledge(initial.sha256);
|
|
290
|
+
}
|
|
291
|
+
catch (e) {
|
|
292
|
+
throw new Error(`${options.entry}: cannot write ${appliedPath} (${e instanceof Error ? e.message : String(e)}) - no lane was opened`);
|
|
293
|
+
}
|
|
294
|
+
if (options.startup === "servable") {
|
|
295
|
+
reconciling = true;
|
|
296
|
+
try {
|
|
297
|
+
await openWanted(initial.manifest);
|
|
298
|
+
}
|
|
299
|
+
finally {
|
|
300
|
+
reconciling = false;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
for (const space of initial.manifest.spaces) {
|
|
305
|
+
try {
|
|
306
|
+
await open(space, settingsOf(initial.manifest, space));
|
|
307
|
+
}
|
|
308
|
+
catch (e) {
|
|
309
|
+
await closeAll();
|
|
310
|
+
throw new Error(`${options.entry}: space "${space}" could not be served (${e instanceof Error ? e.message : String(e)}) - no lane was left running`);
|
|
311
|
+
}
|
|
180
312
|
}
|
|
181
313
|
}
|
|
182
314
|
// ---- triggers ---------------------------------------------------------------------------------
|
|
@@ -197,10 +329,14 @@ export async function runSpaceHost(options) {
|
|
|
197
329
|
});
|
|
198
330
|
}
|
|
199
331
|
catch (e) {
|
|
200
|
-
|
|
201
|
-
|
|
332
|
+
if (retry !== undefined)
|
|
333
|
+
clearTimeout(retry);
|
|
334
|
+
await closeAll();
|
|
202
335
|
throw new Error(`${options.entry}: cannot watch ${dirname(manifestPath)} for manifest changes (${e instanceof Error ? e.message : String(e)})`);
|
|
203
336
|
}
|
|
337
|
+
// A trigger that arrived during a servable startup's opens runs now.
|
|
338
|
+
if (pending)
|
|
339
|
+
schedule(0);
|
|
204
340
|
const backstop = setInterval(() => schedule(0), BACKSTOP_INTERVAL_SECONDS * 1000);
|
|
205
341
|
backstop.unref();
|
|
206
342
|
const ended = new Promise((resolve_) => {
|
|
@@ -216,15 +352,12 @@ export async function runSpaceHost(options) {
|
|
|
216
352
|
clearInterval(backstop);
|
|
217
353
|
watcher?.close();
|
|
218
354
|
// Every lane closes at once: one lane waiting on a slow broker must not hold the others open.
|
|
219
|
-
void
|
|
220
|
-
lanes.clear();
|
|
221
|
-
resolve_(0);
|
|
222
|
-
});
|
|
355
|
+
void closeAll().then(() => resolve_(0));
|
|
223
356
|
};
|
|
224
357
|
process.on("SIGINT", stop("SIGINT"));
|
|
225
358
|
process.on("SIGTERM", stop("SIGTERM"));
|
|
226
359
|
process.on("SIGHUP", () => schedule(0));
|
|
227
360
|
});
|
|
228
|
-
return { lanes, ended };
|
|
361
|
+
return { lanes, named: initial.manifest.spaces, ended };
|
|
229
362
|
}
|
|
230
363
|
//# sourceMappingURL=space-host.js.map
|
package/dist/space-host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-host.js","sourceRoot":"","sources":["../src/space-host.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"space-host.js","sourceRoot":"","sources":["../src/space-host.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cotal-ai/workspace",
|
|
3
3
|
"description": "Cotal machine-local workstation layer: the ~/.cotal mesh registry, target resolution, preflight, on-disk auth-path I/O, and the command-copy renderer — operator concerns over a local checkout, kept separate from the wire protocol in @cotal-ai/core.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.112.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@cotal-ai/core": "0.
|
|
25
|
+
"@cotal-ai/core": "0.112.0",
|
|
26
26
|
"ajv": "^8.20.0",
|
|
27
27
|
"string-width": "^8.2.1",
|
|
28
28
|
"yaml": "^2.9.0",
|