@almyty/runner 1.3.0 → 1.5.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/README.md +39 -13
- package/dist/cli-args.d.ts +2 -0
- package/dist/cli-args.js +6 -1
- package/dist/cli-args.js.map +1 -1
- package/dist/cli.d.ts +3 -2
- package/dist/cli.js +10 -5
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.js +23 -1
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +4 -1
- package/dist/daemon.js +41 -5
- package/dist/daemon.js.map +1 -1
- package/dist/handlers.js +32 -6
- package/dist/handlers.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/policy.d.ts +9 -2
- package/dist/policy.js +10 -2
- package/dist/policy.js.map +1 -1
- package/dist/process-manager.d.ts +11 -2
- package/dist/process-manager.js +12 -2
- package/dist/process-manager.js.map +1 -1
- package/dist/protocol.d.ts +58 -0
- package/dist/protocol.js +29 -0
- package/dist/protocol.js.map +1 -1
- package/dist/streamable-client.d.ts +7 -0
- package/dist/streamable-client.js +9 -2
- package/dist/streamable-client.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.js.map +1 -1
- package/dist/workspace-reclaimer.d.ts +72 -0
- package/dist/workspace-reclaimer.js +100 -0
- package/dist/workspace-reclaimer.js.map +1 -0
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAC;AACtF,OAAO,EACL,cAAc,EACd,SAAS,EACT,2BAA2B,GAG5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,GAKrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAkB,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAuB,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,QAAQ,GAET,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAC;AACtF,OAAO,EACL,cAAc,EACd,SAAS,EACT,2BAA2B,GAG5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,GAKrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAkB,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAuB,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,QAAQ,GAET,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAOlB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,GAGnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,WAAW,EACX,kBAAkB,GAanB,MAAM,YAAY,CAAC"}
|
package/dist/policy.d.ts
CHANGED
|
@@ -10,7 +10,14 @@ export declare function enforceSpawnPolicy(config: RunnerConfig, opts: {
|
|
|
10
10
|
}): {
|
|
11
11
|
env?: Record<string, string>;
|
|
12
12
|
};
|
|
13
|
-
/**
|
|
14
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Enforce policy for a shell.exec; returns the sanitized env to use.
|
|
15
|
+
*
|
|
16
|
+
* `cwd` is where the command will run. It is held to `allowedCwdRoots`
|
|
17
|
+
* exactly as a spawn's is: this used to check the command and env only,
|
|
18
|
+
* so shell.exec ran wherever the daemon happened to be started, whatever
|
|
19
|
+
* roots the config listed.
|
|
20
|
+
*/
|
|
21
|
+
export declare function enforceShellPolicy(config: RunnerConfig, cmd: string, env?: Record<string, string>, cwd?: string): {
|
|
15
22
|
env?: Record<string, string>;
|
|
16
23
|
};
|
package/dist/policy.js
CHANGED
|
@@ -125,9 +125,17 @@ export function enforceSpawnPolicy(config, opts) {
|
|
|
125
125
|
assertCommandAllowed(config, [opts.binary, ...opts.args].join(' '));
|
|
126
126
|
return { env: sanitizeEnv(opts.env) };
|
|
127
127
|
}
|
|
128
|
-
/**
|
|
129
|
-
|
|
128
|
+
/**
|
|
129
|
+
* Enforce policy for a shell.exec; returns the sanitized env to use.
|
|
130
|
+
*
|
|
131
|
+
* `cwd` is where the command will run. It is held to `allowedCwdRoots`
|
|
132
|
+
* exactly as a spawn's is: this used to check the command and env only,
|
|
133
|
+
* so shell.exec ran wherever the daemon happened to be started, whatever
|
|
134
|
+
* roots the config listed.
|
|
135
|
+
*/
|
|
136
|
+
export function enforceShellPolicy(config, cmd, env, cwd) {
|
|
130
137
|
assertIsolationSupported(config);
|
|
138
|
+
assertCwdAllowed(config, cwd);
|
|
131
139
|
assertCommandAllowed(config, cmd);
|
|
132
140
|
return { env: sanitizeEnv(env) };
|
|
133
141
|
}
|
package/dist/policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -99,9 +99,18 @@ export declare class ProcessManager {
|
|
|
99
99
|
closeInput(workspaceId: string, processId: string): void;
|
|
100
100
|
signal(workspaceId: string, processId: string, sig: ProcessSignal): void;
|
|
101
101
|
wait(workspaceId: string, processId: string, timeoutMs?: number): Promise<WaitResult>;
|
|
102
|
-
/**
|
|
102
|
+
/**
|
|
103
|
+
* Kill all processes for a workspace and forget them.
|
|
104
|
+
*
|
|
105
|
+
* Called by `WorkspaceReclaimer` when a heartbeat ack shows the
|
|
106
|
+
* backend no longer lists the workspace as active — which covers
|
|
107
|
+
* release, TTL expiry and stranding alike. Forgetting the entries (not
|
|
108
|
+
* just killing them) is what makes repeated heartbeats idempotent: the
|
|
109
|
+
* workspace stops being hosted, so the next ack has nothing to say
|
|
110
|
+
* about it.
|
|
111
|
+
*/
|
|
103
112
|
killWorkspace(workspaceId: string): Promise<number>;
|
|
104
113
|
}
|
|
105
114
|
export declare function createDefaultAdapterFactory(): AdapterFactory;
|
|
106
|
-
export declare function shellExec(cmd: string, env?: Record<string, string>, timeoutMs?: number): Promise<ShellExecResult>;
|
|
115
|
+
export declare function shellExec(cmd: string, env?: Record<string, string>, timeoutMs?: number, cwd?: string): Promise<ShellExecResult>;
|
|
107
116
|
export {};
|
package/dist/process-manager.js
CHANGED
|
@@ -269,7 +269,16 @@ export class ProcessManager {
|
|
|
269
269
|
}),
|
|
270
270
|
]);
|
|
271
271
|
}
|
|
272
|
-
/**
|
|
272
|
+
/**
|
|
273
|
+
* Kill all processes for a workspace and forget them.
|
|
274
|
+
*
|
|
275
|
+
* Called by `WorkspaceReclaimer` when a heartbeat ack shows the
|
|
276
|
+
* backend no longer lists the workspace as active — which covers
|
|
277
|
+
* release, TTL expiry and stranding alike. Forgetting the entries (not
|
|
278
|
+
* just killing them) is what makes repeated heartbeats idempotent: the
|
|
279
|
+
* workspace stops being hosted, so the next ack has nothing to say
|
|
280
|
+
* about it.
|
|
281
|
+
*/
|
|
273
282
|
async killWorkspace(workspaceId) {
|
|
274
283
|
let killed = 0;
|
|
275
284
|
for (const [id, proc] of this.processes) {
|
|
@@ -347,12 +356,13 @@ export function createDefaultAdapterFactory() {
|
|
|
347
356
|
};
|
|
348
357
|
}
|
|
349
358
|
// ── Standalone shell.exec (no PTY, no buffer; one-shot) ─────────────
|
|
350
|
-
export async function shellExec(cmd, env, timeoutMs = 60_000) {
|
|
359
|
+
export async function shellExec(cmd, env, timeoutMs = 60_000, cwd) {
|
|
351
360
|
try {
|
|
352
361
|
const { stdout, stderr } = await execFileAsync('/bin/sh', ['-c', cmd], {
|
|
353
362
|
env: { ...process.env, ...(env ?? {}) },
|
|
354
363
|
timeout: timeoutMs,
|
|
355
364
|
maxBuffer: 10 * 1024 * 1024,
|
|
365
|
+
...(cwd ? { cwd } : {}),
|
|
356
366
|
});
|
|
357
367
|
return { stdout, stderr, exitCode: 0 };
|
|
358
368
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../src/process-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../src/process-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/protocol.d.ts
CHANGED
|
@@ -40,6 +40,13 @@ export interface RequestPayload {
|
|
|
40
40
|
* is the exception (returns global metadata, not workspace-scoped).
|
|
41
41
|
*/
|
|
42
42
|
workspaceId?: string;
|
|
43
|
+
/**
|
|
44
|
+
* The workspace's root directory, as the backend recorded it when the
|
|
45
|
+
* workspace was created. Sent alongside workspaceId once the backend
|
|
46
|
+
* has checked the workspace is live on this runner; shell.exec runs
|
|
47
|
+
* there and resolves a relative `cwd` against it.
|
|
48
|
+
*/
|
|
49
|
+
workspaceCwd?: string;
|
|
43
50
|
}
|
|
44
51
|
export interface ResponsePayload {
|
|
45
52
|
ok: boolean;
|
|
@@ -51,3 +58,54 @@ export interface HeartbeatPayload {
|
|
|
51
58
|
/** Number of running processes the runner is currently hosting. */
|
|
52
59
|
inUse?: number;
|
|
53
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Payload of the `heartbeat` envelope the backend pushes back down the
|
|
63
|
+
* command stream, correlated to the heartbeat's own envelope id.
|
|
64
|
+
*
|
|
65
|
+
* `workspaces.active` is the complete set of workspaces the backend
|
|
66
|
+
* still considers ACTIVE for this runner. Anything this machine is
|
|
67
|
+
* hosting outside that set has been released, expired or stranded, and
|
|
68
|
+
* its processes are reclaimed.
|
|
69
|
+
*
|
|
70
|
+
* The field is optional, and absent is NOT the same as empty:
|
|
71
|
+
*
|
|
72
|
+
* - absent -> "no answer". An older backend never acks at all, and a
|
|
73
|
+
* newer one that could not compute the set omits the key.
|
|
74
|
+
* Either way the runner reclaims nothing.
|
|
75
|
+
* - present -> authoritative. An empty `active` means every workspace
|
|
76
|
+
* on this runner is gone and everything should be
|
|
77
|
+
* reclaimed.
|
|
78
|
+
*
|
|
79
|
+
* `v` stays 1 deliberately: this is an added payload field on an
|
|
80
|
+
* existing envelope type, not a frame change, and `isWorkerEnvelope`
|
|
81
|
+
* hard-rejects any other version — a bump would cut off every runner
|
|
82
|
+
* already in the field.
|
|
83
|
+
*/
|
|
84
|
+
export interface HeartbeatAckPayload {
|
|
85
|
+
ts: number;
|
|
86
|
+
workspaces?: {
|
|
87
|
+
active: string[];
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Result of reading a heartbeat ack. Deliberately three-valued: a
|
|
92
|
+
* usable set, "the backend did not answer", and "the answer did not
|
|
93
|
+
* parse". The last two both reclaim nothing, but they are logged
|
|
94
|
+
* differently because only one of them is a bug.
|
|
95
|
+
*/
|
|
96
|
+
export type HeartbeatAckParse = {
|
|
97
|
+
ok: true;
|
|
98
|
+
activeWorkspaceIds: string[];
|
|
99
|
+
} | {
|
|
100
|
+
ok: false;
|
|
101
|
+
reason: 'absent' | 'malformed';
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Read the active-workspace set out of a heartbeat ack payload.
|
|
105
|
+
*
|
|
106
|
+
* Fails safe in every ambiguous case. This decides whether processes on
|
|
107
|
+
* someone's own machine get killed, so anything that is not an
|
|
108
|
+
* unambiguous list of workspace id strings returns `malformed` and
|
|
109
|
+
* reclaims nothing.
|
|
110
|
+
*/
|
|
111
|
+
export declare function parseHeartbeatAck(payload: unknown): HeartbeatAckParse;
|
package/dist/protocol.js
CHANGED
|
@@ -36,4 +36,33 @@ export function isWorkerEnvelope(value) {
|
|
|
36
36
|
return false;
|
|
37
37
|
return true;
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Read the active-workspace set out of a heartbeat ack payload.
|
|
41
|
+
*
|
|
42
|
+
* Fails safe in every ambiguous case. This decides whether processes on
|
|
43
|
+
* someone's own machine get killed, so anything that is not an
|
|
44
|
+
* unambiguous list of workspace id strings returns `malformed` and
|
|
45
|
+
* reclaims nothing.
|
|
46
|
+
*/
|
|
47
|
+
export function parseHeartbeatAck(payload) {
|
|
48
|
+
if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
|
|
49
|
+
return { ok: false, reason: 'malformed' };
|
|
50
|
+
}
|
|
51
|
+
const workspaces = payload.workspaces;
|
|
52
|
+
if (workspaces === undefined || workspaces === null) {
|
|
53
|
+
return { ok: false, reason: 'absent' };
|
|
54
|
+
}
|
|
55
|
+
if (typeof workspaces !== 'object' || Array.isArray(workspaces)) {
|
|
56
|
+
return { ok: false, reason: 'malformed' };
|
|
57
|
+
}
|
|
58
|
+
const active = workspaces.active;
|
|
59
|
+
if (!Array.isArray(active))
|
|
60
|
+
return { ok: false, reason: 'malformed' };
|
|
61
|
+
for (const id of active) {
|
|
62
|
+
if (typeof id !== 'string' || id.length === 0) {
|
|
63
|
+
return { ok: false, reason: 'malformed' };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return { ok: true, activeWorkspaceIds: active };
|
|
67
|
+
}
|
|
39
68
|
//# sourceMappingURL=protocol.js.map
|
package/dist/protocol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAU,CAAC;AAmBlD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,kBAAkB,EAAE,CAAC,KAAK;IAC1B,eAAe,EAAE,CAAC,KAAK;IACvB,kBAAkB,EAAE,CAAC,KAAK;IAC1B,QAAQ,EAAE,CAAC,KAAK;CACR,CAAC;AAEX,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,IAAI,CAAC,CAAC,CAAC,KAAK,uBAAuB;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAChG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,SAAS,CAAC;QAAC,KAAK,UAAU,CAAC;QAAC,KAAK,OAAO,CAAC;QAAC,KAAK,WAAW,CAAC;QAAC,KAAK,OAAO,CAAC,CAAC,MAAM;QACrF,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAU,CAAC;AAmBlD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,kBAAkB,EAAE,CAAC,KAAK;IAC1B,eAAe,EAAE,CAAC,KAAK;IACvB,kBAAkB,EAAE,CAAC,KAAK;IAC1B,QAAQ,EAAE,CAAC,KAAK;CACR,CAAC;AAEX,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,IAAI,CAAC,CAAC,CAAC,KAAK,uBAAuB;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAChG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,SAAS,CAAC;QAAC,KAAK,UAAU,CAAC;QAAC,KAAK,OAAO,CAAC;QAAC,KAAK,WAAW,CAAC;QAAC,KAAK,OAAO,CAAC,CAAC,MAAM;QACrF,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AA4ED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC5C,CAAC;IACD,MAAM,UAAU,GAAI,OAAoC,CAAC,UAAU,CAAC;IACpE,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC5C,CAAC;IACD,MAAM,MAAM,GAAI,UAAmC,CAAC,MAAM,CAAC;IAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACtE,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAkB,EAAE,CAAC;AAC9D,CAAC"}
|
|
@@ -29,6 +29,11 @@ import { WorkerEnvelope } from './protocol.js';
|
|
|
29
29
|
export interface StreamableClientOptions {
|
|
30
30
|
baseUrl: string;
|
|
31
31
|
token: string;
|
|
32
|
+
/**
|
|
33
|
+
* Sent as X-Organization-Id on every request, so a user in several
|
|
34
|
+
* organizations opens the session in the same one it registered in.
|
|
35
|
+
*/
|
|
36
|
+
organizationId?: string;
|
|
32
37
|
/** Test injection: replace the global fetch with a stub. */
|
|
33
38
|
fetch?: typeof globalThis.fetch;
|
|
34
39
|
/** Test injection: replace setTimeout with a controllable timer. */
|
|
@@ -46,6 +51,8 @@ export declare class StreamableClient extends EventEmitter {
|
|
|
46
51
|
constructor(opts: StreamableClientOptions);
|
|
47
52
|
/** Returns the session id once the first POST has assigned one. */
|
|
48
53
|
getSessionId(): string | null;
|
|
54
|
+
/** Authorization plus, when configured, the organization header. */
|
|
55
|
+
private authHeaders;
|
|
49
56
|
/** Send an envelope. Returns the parsed response envelope when the
|
|
50
57
|
* backend hands one back inline (for unary requests); otherwise null. */
|
|
51
58
|
send<T>(env: WorkerEnvelope<T>): Promise<WorkerEnvelope | null>;
|
|
@@ -20,12 +20,19 @@ export class StreamableClient extends EventEmitter {
|
|
|
20
20
|
getSessionId() {
|
|
21
21
|
return this.sessionId;
|
|
22
22
|
}
|
|
23
|
+
/** Authorization plus, when configured, the organization header. */
|
|
24
|
+
authHeaders() {
|
|
25
|
+
const headers = { 'Authorization': `Bearer ${this.opts.token}` };
|
|
26
|
+
if (this.opts.organizationId)
|
|
27
|
+
headers['X-Organization-Id'] = this.opts.organizationId;
|
|
28
|
+
return headers;
|
|
29
|
+
}
|
|
23
30
|
/** Send an envelope. Returns the parsed response envelope when the
|
|
24
31
|
* backend hands one back inline (for unary requests); otherwise null. */
|
|
25
32
|
async send(env) {
|
|
26
33
|
const headers = {
|
|
27
34
|
'Content-Type': 'application/json',
|
|
28
|
-
|
|
35
|
+
...this.authHeaders(),
|
|
29
36
|
};
|
|
30
37
|
if (this.sessionId)
|
|
31
38
|
headers['Mcp-Session-Id'] = this.sessionId;
|
|
@@ -59,7 +66,7 @@ export class StreamableClient extends EventEmitter {
|
|
|
59
66
|
}
|
|
60
67
|
this.streamAbort = new AbortController();
|
|
61
68
|
const headers = {
|
|
62
|
-
|
|
69
|
+
...this.authHeaders(),
|
|
63
70
|
'Mcp-Session-Id': this.sessionId,
|
|
64
71
|
'Accept': 'text/event-stream',
|
|
65
72
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamable-client.js","sourceRoot":"","sources":["../src/streamable-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EACL,uBAAuB,EAEvB,gBAAgB,GACjB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"streamable-client.js","sourceRoot":"","sources":["../src/streamable-client.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -41,6 +41,12 @@ export interface ResolvedConfig {
|
|
|
41
41
|
config: RunnerConfig;
|
|
42
42
|
binaryProbeList: string[];
|
|
43
43
|
backendUrl: string;
|
|
44
|
+
/**
|
|
45
|
+
* The organization to register in, sent as X-Organization-Id. Needed
|
|
46
|
+
* when the logged-in user belongs to more than one organization; the
|
|
47
|
+
* backend refuses an organization the user is not a member of.
|
|
48
|
+
*/
|
|
49
|
+
organizationId?: string;
|
|
44
50
|
}
|
|
45
51
|
export interface RunnerInfo {
|
|
46
52
|
name: string;
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsHA,uEAAuE;AAEvE,MAAM,OAAO,WAAY,SAAQ,KAAK;IACS;IAA8B;IAA3E,YAAY,OAAe,EAAkB,IAAY,EAAkB,IAAc;QACvF,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,SAAI,GAAJ,IAAI,CAAQ;QAAkB,SAAI,GAAJ,IAAI,CAAU;QAEvF,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,iBAAiB,EAAE,mBAAmB;IACtC,uBAAuB,EAAE,yBAAyB;IAClD,iBAAiB,EAAE,mBAAmB;IACtC,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,gBAAgB;IAChC,sBAAsB,EAAE,wBAAwB;IAChD,OAAO,EAAE,SAAS;CACV,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { ProcessManager } from './process-manager.js';
|
|
2
|
+
import { WorkerEnvelope } from './protocol.js';
|
|
3
|
+
/**
|
|
4
|
+
* Reclaims processes for workspaces the backend no longer considers
|
|
5
|
+
* active.
|
|
6
|
+
*
|
|
7
|
+
* Shape: heartbeat reconciliation, not a release RPC. The runner
|
|
8
|
+
* heartbeats every 30s; the backend answers each heartbeat with the set
|
|
9
|
+
* of workspaces it still lists as ACTIVE for this runner; anything this
|
|
10
|
+
* machine is hosting outside that set is killed. A `workspace.release`
|
|
11
|
+
* message would be a single point of failure — drop it once and the
|
|
12
|
+
* user's processes run forever — whereas a set that is re-sent every
|
|
13
|
+
* beat self-heals: a missed reconciliation is corrected 30s later.
|
|
14
|
+
*
|
|
15
|
+
* Two safety rules, because these are processes on the user's own
|
|
16
|
+
* machine:
|
|
17
|
+
*
|
|
18
|
+
* 1. Ambiguity reclaims nothing. An ack with no workspace set, an
|
|
19
|
+
* unparseable set, or an ack that does not correlate to a
|
|
20
|
+
* heartbeat this runner actually sent, all kill nothing and log.
|
|
21
|
+
* The only thing that kills is an explicit, well-formed answer.
|
|
22
|
+
*
|
|
23
|
+
* 2. Nothing newer than the question gets killed. The backend built
|
|
24
|
+
* its answer at the moment it received the heartbeat; a workspace
|
|
25
|
+
* that started on this machine after that could not have been in
|
|
26
|
+
* it. Reclaiming is therefore limited to workspaces whose oldest
|
|
27
|
+
* running process predates the heartbeat we are being answered.
|
|
28
|
+
* Without this, a workspace created in the window between sending
|
|
29
|
+
* a heartbeat and receiving its ack is killed the instant it
|
|
30
|
+
* starts work.
|
|
31
|
+
*/
|
|
32
|
+
/** Minimal surface this needs from the process manager. */
|
|
33
|
+
export type ReclaimableProcesses = Pick<ProcessManager, 'list' | 'killWorkspace'>;
|
|
34
|
+
export interface ReclaimerLog {
|
|
35
|
+
/** User-visible: something on their machine was terminated. */
|
|
36
|
+
info(line: string): void;
|
|
37
|
+
/** Diagnostics: why nothing was terminated. */
|
|
38
|
+
warn(line: string): void;
|
|
39
|
+
}
|
|
40
|
+
export declare class WorkspaceReclaimer {
|
|
41
|
+
private readonly processes;
|
|
42
|
+
private readonly log;
|
|
43
|
+
/** Envelope id -> local ms timestamp at which we sent that heartbeat. */
|
|
44
|
+
private readonly sent;
|
|
45
|
+
constructor(processes: ReclaimableProcesses, log: ReclaimerLog);
|
|
46
|
+
/**
|
|
47
|
+
* Record a heartbeat we just put on the wire, so its ack can be
|
|
48
|
+
* correlated. An ack whose id is not here is ignored: it is either a
|
|
49
|
+
* replayed frame (the stream replays on reconnect via Last-Event-ID)
|
|
50
|
+
* or something we did not ask for, and neither is a reason to kill
|
|
51
|
+
* anything.
|
|
52
|
+
*/
|
|
53
|
+
noteSent(envelopeId: string, sentAt: number): void;
|
|
54
|
+
/**
|
|
55
|
+
* Handle an inbound `heartbeat` envelope from the backend. Returns the
|
|
56
|
+
* workspace ids actually reclaimed (empty when nothing was, for any
|
|
57
|
+
* reason).
|
|
58
|
+
*/
|
|
59
|
+
onAck(env: WorkerEnvelope): Promise<string[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Workspaces with at least one RUNNING process, keyed by id, with the
|
|
62
|
+
* start time of the oldest of them.
|
|
63
|
+
*
|
|
64
|
+
* Only running processes count. Exited ones linger in the manager's
|
|
65
|
+
* retention window so callers can still collect exit info, and
|
|
66
|
+
* treating those as something to reclaim would log a kill that killed
|
|
67
|
+
* nothing. It also makes the whole thing idempotent for free:
|
|
68
|
+
* killWorkspace forgets the processes it killed, so the next
|
|
69
|
+
* heartbeat finds the workspace unhosted and says nothing.
|
|
70
|
+
*/
|
|
71
|
+
private hostedWorkspaces;
|
|
72
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { parseHeartbeatAck } from './protocol.js';
|
|
2
|
+
/**
|
|
3
|
+
* How many un-acked heartbeats to remember. The daemon beats every 30s
|
|
4
|
+
* and an ack rides the same stream, so anything older than a handful of
|
|
5
|
+
* beats is never going to be answered.
|
|
6
|
+
*/
|
|
7
|
+
const MAX_TRACKED_HEARTBEATS = 8;
|
|
8
|
+
export class WorkspaceReclaimer {
|
|
9
|
+
processes;
|
|
10
|
+
log;
|
|
11
|
+
/** Envelope id -> local ms timestamp at which we sent that heartbeat. */
|
|
12
|
+
sent = new Map();
|
|
13
|
+
constructor(processes, log) {
|
|
14
|
+
this.processes = processes;
|
|
15
|
+
this.log = log;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Record a heartbeat we just put on the wire, so its ack can be
|
|
19
|
+
* correlated. An ack whose id is not here is ignored: it is either a
|
|
20
|
+
* replayed frame (the stream replays on reconnect via Last-Event-ID)
|
|
21
|
+
* or something we did not ask for, and neither is a reason to kill
|
|
22
|
+
* anything.
|
|
23
|
+
*/
|
|
24
|
+
noteSent(envelopeId, sentAt) {
|
|
25
|
+
this.sent.set(envelopeId, sentAt);
|
|
26
|
+
while (this.sent.size > MAX_TRACKED_HEARTBEATS) {
|
|
27
|
+
const oldest = this.sent.keys().next().value;
|
|
28
|
+
if (oldest === undefined)
|
|
29
|
+
break;
|
|
30
|
+
this.sent.delete(oldest);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Handle an inbound `heartbeat` envelope from the backend. Returns the
|
|
35
|
+
* workspace ids actually reclaimed (empty when nothing was, for any
|
|
36
|
+
* reason).
|
|
37
|
+
*/
|
|
38
|
+
async onAck(env) {
|
|
39
|
+
if (env.type !== 'heartbeat')
|
|
40
|
+
return [];
|
|
41
|
+
const sentAt = this.sent.get(env.id);
|
|
42
|
+
if (sentAt === undefined) {
|
|
43
|
+
// Consumed already, or never ours. Replayed acks land here, which
|
|
44
|
+
// is what we want: an ack is answered once.
|
|
45
|
+
this.log.warn(`heartbeat ack ${env.id} does not match an outstanding heartbeat; reclaiming nothing`);
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
this.sent.delete(env.id);
|
|
49
|
+
const parsed = parseHeartbeatAck(env.payload);
|
|
50
|
+
if (!parsed.ok) {
|
|
51
|
+
this.log.warn(parsed.reason === 'absent'
|
|
52
|
+
? 'heartbeat ack carried no workspace set; reclaiming nothing ' +
|
|
53
|
+
'(backend predates workspace reconciliation, or could not build the set)'
|
|
54
|
+
: 'heartbeat ack carried an unreadable workspace set; reclaiming nothing');
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
const active = new Set(parsed.activeWorkspaceIds);
|
|
58
|
+
const reclaimed = [];
|
|
59
|
+
for (const [workspaceId, hosted] of this.hostedWorkspaces()) {
|
|
60
|
+
if (active.has(workspaceId))
|
|
61
|
+
continue;
|
|
62
|
+
if (hosted.oldestStartedAt > sentAt) {
|
|
63
|
+
// Started after the backend answered; it could not have been in
|
|
64
|
+
// the set. The next heartbeat will see it listed, or reclaim it.
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const killed = await this.processes.killWorkspace(workspaceId);
|
|
68
|
+
reclaimed.push(workspaceId);
|
|
69
|
+
this.log.info(`workspace ${workspaceId} reclaimed: killed ${killed} process(es) ` +
|
|
70
|
+
'because the backend no longer lists it as active');
|
|
71
|
+
}
|
|
72
|
+
return reclaimed;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Workspaces with at least one RUNNING process, keyed by id, with the
|
|
76
|
+
* start time of the oldest of them.
|
|
77
|
+
*
|
|
78
|
+
* Only running processes count. Exited ones linger in the manager's
|
|
79
|
+
* retention window so callers can still collect exit info, and
|
|
80
|
+
* treating those as something to reclaim would log a kill that killed
|
|
81
|
+
* nothing. It also makes the whole thing idempotent for free:
|
|
82
|
+
* killWorkspace forgets the processes it killed, so the next
|
|
83
|
+
* heartbeat finds the workspace unhosted and says nothing.
|
|
84
|
+
*/
|
|
85
|
+
hostedWorkspaces() {
|
|
86
|
+
const hosted = new Map();
|
|
87
|
+
for (const handle of this.processes.list()) {
|
|
88
|
+
if (handle.status !== 'running')
|
|
89
|
+
continue;
|
|
90
|
+
const startedAt = handle.startedAt.getTime();
|
|
91
|
+
const existing = hosted.get(handle.workspaceId);
|
|
92
|
+
if (!existing)
|
|
93
|
+
hosted.set(handle.workspaceId, { oldestStartedAt: startedAt });
|
|
94
|
+
else if (startedAt < existing.oldestStartedAt)
|
|
95
|
+
existing.oldestStartedAt = startedAt;
|
|
96
|
+
}
|
|
97
|
+
return hosted;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=workspace-reclaimer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-reclaimer.js","sourceRoot":"","sources":["../src/workspace-reclaimer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@almyty/runner",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"node-pty": "^1.0.0",
|
|
28
|
-
"@almyty/client": "^1.
|
|
28
|
+
"@almyty/client": "^1.5.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "^25.4.0",
|