backlot 0.4.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/LICENSE +202 -0
- package/README.md +106 -0
- package/dist/cli/client.d.ts +22 -0
- package/dist/cli/client.js +83 -0
- package/dist/cli/client.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +308 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/events.d.ts +10 -0
- package/dist/core/events.js +42 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/journal.d.ts +80 -0
- package/dist/core/journal.js +186 -0
- package/dist/core/journal.js.map +1 -0
- package/dist/core/manifest.d.ts +76 -0
- package/dist/core/manifest.js +46 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/paths.d.ts +17 -0
- package/dist/core/paths.js +32 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/policy.d.ts +15 -0
- package/dist/core/policy.js +45 -0
- package/dist/core/policy.js.map +1 -0
- package/dist/core/ports.d.ts +3 -0
- package/dist/core/ports.js +22 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/retention.d.ts +19 -0
- package/dist/core/retention.js +101 -0
- package/dist/core/retention.js.map +1 -0
- package/dist/core/sync.d.ts +15 -0
- package/dist/core/sync.js +150 -0
- package/dist/core/sync.js.map +1 -0
- package/dist/core/types.d.ts +82 -0
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/upkeep.d.ts +11 -0
- package/dist/core/upkeep.js +47 -0
- package/dist/core/upkeep.js.map +1 -0
- package/dist/core/util.d.ts +36 -0
- package/dist/core/util.js +100 -0
- package/dist/core/util.js.map +1 -0
- package/dist/daemon/engine.d.ts +284 -0
- package/dist/daemon/engine.js +858 -0
- package/dist/daemon/engine.js.map +1 -0
- package/dist/daemon/index.d.ts +2 -0
- package/dist/daemon/index.js +183 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/supervisor.d.ts +36 -0
- package/dist/daemon/supervisor.js +189 -0
- package/dist/daemon/supervisor.js.map +1 -0
- package/dist/drivers/datastore-sqlite.d.ts +27 -0
- package/dist/drivers/datastore-sqlite.js +83 -0
- package/dist/drivers/datastore-sqlite.js.map +1 -0
- package/dist/drivers/datastores.d.ts +22 -0
- package/dist/drivers/datastores.js +190 -0
- package/dist/drivers/datastores.js.map +1 -0
- package/dist/drivers/types.d.ts +71 -0
- package/dist/drivers/types.js +14 -0
- package/dist/drivers/types.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.js +144 -0
- package/dist/mcp/index.js.map +1 -0
- package/package.json +57 -0
- package/schema/stack.schema.json +172 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/daemon/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* The backlot daemon: HTTP over a unix socket, auto-spawned by the CLI
|
|
4
|
+
* (decision 0009). One RPC endpoint; the CLI is a thin client. Serializes
|
|
5
|
+
* requests through a simple queue — policy code stays race-free.
|
|
6
|
+
*/
|
|
7
|
+
import { createServer, request } from 'node:http';
|
|
8
|
+
import { existsSync, rmSync, writeFileSync, chmodSync } from 'node:fs';
|
|
9
|
+
import { socketPath, pidPath } from '../core/paths.js';
|
|
10
|
+
import { BrokerError } from '../core/util.js';
|
|
11
|
+
import { Engine } from './engine.js';
|
|
12
|
+
// Singleton guard: recover() and listen happen only AFTER we win the socket,
|
|
13
|
+
// so a losing daemon never reaps the winner's children or mutates the journal.
|
|
14
|
+
const engine = new Engine();
|
|
15
|
+
// Concurrency lives in the engine: a short pool lock for claim bookkeeping and
|
|
16
|
+
// one lock per environment. Requests for different environments overlap; two
|
|
17
|
+
// operations on one environment never do.
|
|
18
|
+
async function dispatch(verb, args, emit) {
|
|
19
|
+
const cwd = String(args.cwd ?? process.cwd());
|
|
20
|
+
const holder = args.holder ? String(args.holder) : undefined;
|
|
21
|
+
switch (verb) {
|
|
22
|
+
case 'ping':
|
|
23
|
+
return { pid: process.pid };
|
|
24
|
+
case 'up':
|
|
25
|
+
return engine.up({
|
|
26
|
+
cwd, holder,
|
|
27
|
+
hygiene: args.hygiene ?? undefined,
|
|
28
|
+
watch: Boolean(args.watch),
|
|
29
|
+
ttlMs: args.ttlMs ? Number(args.ttlMs) : undefined,
|
|
30
|
+
onProgress: emit,
|
|
31
|
+
});
|
|
32
|
+
case 'run':
|
|
33
|
+
return engine.run({ cwd, holder, check: String(args.check), hygiene: args.hygiene ?? undefined, onProgress: emit });
|
|
34
|
+
case 'run-detach': {
|
|
35
|
+
const jobId = engine.createJob(cwd, String(args.check));
|
|
36
|
+
// Fire-and-forget — env/pool locks make it safe; the journaled verdict
|
|
37
|
+
// outlives the client (decision 0015).
|
|
38
|
+
void engine.executeJob(jobId, { cwd, holder, check: String(args.check), hygiene: args.hygiene ?? undefined });
|
|
39
|
+
return { jobId, poll: `backlot job ${jobId}` };
|
|
40
|
+
}
|
|
41
|
+
case 'job':
|
|
42
|
+
return engine.jobStatus(String(args.jobId));
|
|
43
|
+
case 'job-ls':
|
|
44
|
+
return engine.jobList();
|
|
45
|
+
case 'bind-ref':
|
|
46
|
+
return engine.bindRef(cwd, String(args.ref), holder);
|
|
47
|
+
case 'ctx':
|
|
48
|
+
return engine.ctx(cwd, holder);
|
|
49
|
+
case 'sync':
|
|
50
|
+
return engine.syncLease(cwd, holder, emit);
|
|
51
|
+
case 'reset-data':
|
|
52
|
+
return engine.resetData(cwd, holder, emit);
|
|
53
|
+
case 'exec':
|
|
54
|
+
return engine.exec(cwd, String(args.cmd), holder);
|
|
55
|
+
case 'logs':
|
|
56
|
+
return engine.logs(cwd, String(args.service), Number(args.lines ?? 40), holder);
|
|
57
|
+
case 'token':
|
|
58
|
+
return engine.token(cwd, String(args.role ?? 'admin'), holder);
|
|
59
|
+
case 'pull':
|
|
60
|
+
return engine.pull(cwd, holder);
|
|
61
|
+
case 'release':
|
|
62
|
+
return engine.release(cwd, holder);
|
|
63
|
+
case 'status':
|
|
64
|
+
return engine.status();
|
|
65
|
+
case 'doctor':
|
|
66
|
+
return engine.doctor();
|
|
67
|
+
case 'pool-recycle':
|
|
68
|
+
return engine.poolRecycle(Boolean(args.all));
|
|
69
|
+
case 'pool-reconcile':
|
|
70
|
+
// Local substrate: reconcile = doctor + reap anything degraded/stuck.
|
|
71
|
+
return engine.poolReconcile();
|
|
72
|
+
case 'shutdown':
|
|
73
|
+
setTimeout(async () => {
|
|
74
|
+
await engine.shutdown();
|
|
75
|
+
process.exit(0);
|
|
76
|
+
}, 50);
|
|
77
|
+
return { stopping: true };
|
|
78
|
+
default:
|
|
79
|
+
throw new BrokerError('env-error', `daemon does not know verb '${verb}'`, 'rpc');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const sock = socketPath();
|
|
83
|
+
let ownsSocket = false;
|
|
84
|
+
/** Is a LIVE daemon already answering on the socket? (vs. a stale socket file) */
|
|
85
|
+
function pingExisting() {
|
|
86
|
+
return new Promise((resolve) => {
|
|
87
|
+
if (!existsSync(sock))
|
|
88
|
+
return resolve(false);
|
|
89
|
+
const req = request({ socketPath: sock, path: '/', method: 'POST', timeout: 1500 }, (res) => {
|
|
90
|
+
res.resume();
|
|
91
|
+
resolve(res.statusCode === 200);
|
|
92
|
+
});
|
|
93
|
+
req.on('error', () => resolve(false)); // ECONNREFUSED = stale socket
|
|
94
|
+
req.on('timeout', () => {
|
|
95
|
+
req.destroy();
|
|
96
|
+
resolve(false);
|
|
97
|
+
});
|
|
98
|
+
req.end(JSON.stringify({ verb: 'ping', args: {} }));
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
const server = createServer((req, res) => {
|
|
102
|
+
let body = '';
|
|
103
|
+
req.on('data', (d) => (body += d));
|
|
104
|
+
req.on('end', () => {
|
|
105
|
+
void (async () => {
|
|
106
|
+
// Response is newline-delimited JSON: zero or more {type:'progress'}
|
|
107
|
+
// frames, then exactly one {type:'result'} frame. The CLI renders
|
|
108
|
+
// progress to stderr (TTY only) and the result to stdout.
|
|
109
|
+
res.writeHead(200, { 'content-type': 'application/x-ndjson' });
|
|
110
|
+
const emit = (phase) => {
|
|
111
|
+
try {
|
|
112
|
+
res.write(JSON.stringify({ type: 'progress', phase }) + '\n');
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
/* client hung up mid-stream */
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
try {
|
|
119
|
+
const { verb, args } = JSON.parse(body || '{}');
|
|
120
|
+
const data = await dispatch(verb, args ?? {}, emit);
|
|
121
|
+
res.end(JSON.stringify({ type: 'result', ok: true, data }) + '\n');
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
const e = err instanceof BrokerError ? err.toJSON() : { class: 'env-error', message: String(err.message ?? err) };
|
|
125
|
+
res.end(JSON.stringify({ type: 'result', ok: false, error: e }) + '\n');
|
|
126
|
+
}
|
|
127
|
+
})();
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
// EADDRINUSE means another daemon won the listen race between our ping and our
|
|
131
|
+
// bind — concede cleanly rather than clobber it.
|
|
132
|
+
server.on('error', (err) => {
|
|
133
|
+
if (err.code === 'EADDRINUSE') {
|
|
134
|
+
if (process.send)
|
|
135
|
+
process.send('ready'); // a live daemon exists; the client can proceed
|
|
136
|
+
process.exit(0);
|
|
137
|
+
}
|
|
138
|
+
throw err;
|
|
139
|
+
});
|
|
140
|
+
async function start() {
|
|
141
|
+
if (await pingExisting()) {
|
|
142
|
+
// A healthy daemon already owns the socket — do NOT recover() or listen.
|
|
143
|
+
if (process.send)
|
|
144
|
+
process.send('ready');
|
|
145
|
+
process.exit(0);
|
|
146
|
+
}
|
|
147
|
+
if (existsSync(sock))
|
|
148
|
+
rmSync(sock, { force: true }); // stale socket from a dead daemon
|
|
149
|
+
server.listen(sock, () => {
|
|
150
|
+
ownsSocket = true;
|
|
151
|
+
// The socket has no RPC auth and exposes arbitrary-shell verbs (exec/token),
|
|
152
|
+
// so it must be owner-only. On macOS the socket-file mode is what actually
|
|
153
|
+
// gates connect() (the dir traversal isn't enough), so this chmod is the
|
|
154
|
+
// real boundary, not just belt-and-suspenders.
|
|
155
|
+
try {
|
|
156
|
+
chmodSync(sock, 0o600);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
/* best-effort; the 0700 state dir is the backstop */
|
|
160
|
+
}
|
|
161
|
+
writeFileSync(pidPath(), String(process.pid));
|
|
162
|
+
// Only NOW, as the sole owner, reconcile prior daemon state.
|
|
163
|
+
engine.recover();
|
|
164
|
+
const sweepMs = Number(process.env.BACKLOT_SWEEP_MS ?? 15_000);
|
|
165
|
+
setInterval(() => void engine.sweep(), sweepMs).unref();
|
|
166
|
+
// Detach from the spawning CLI's lifetime.
|
|
167
|
+
if (process.send)
|
|
168
|
+
process.send('ready');
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
void start();
|
|
172
|
+
for (const sig of ['SIGINT', 'SIGTERM']) {
|
|
173
|
+
process.on(sig, () => {
|
|
174
|
+
void engine.shutdown().then(() => {
|
|
175
|
+
// Only remove the socket if WE own it — a losing/duplicate daemon must
|
|
176
|
+
// never delete the healthy daemon's socket.
|
|
177
|
+
if (ownsSocket)
|
|
178
|
+
rmSync(sock, { force: true });
|
|
179
|
+
process.exit(0);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ServiceSpec } from '../core/manifest.js';
|
|
2
|
+
export interface ServiceEvent {
|
|
3
|
+
at: number;
|
|
4
|
+
service: string;
|
|
5
|
+
event: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class EnvSupervisor {
|
|
8
|
+
readonly envId: string;
|
|
9
|
+
private readonly envTree;
|
|
10
|
+
private readonly logDir;
|
|
11
|
+
/** Fired when a service flaps past its restart budget (decision 0007/0010). */
|
|
12
|
+
private readonly onDegraded?;
|
|
13
|
+
/** Fired whenever a service's pid changes (start/restart) so the journal
|
|
14
|
+
* stays truthful for recovery — a stale pid gets an innocent SIGTERM and
|
|
15
|
+
* misses the real orphan holding the port. */
|
|
16
|
+
private readonly onPidsChanged?;
|
|
17
|
+
private services;
|
|
18
|
+
readonly events: ServiceEvent[];
|
|
19
|
+
constructor(envId: string, envTree: string, logDir: string,
|
|
20
|
+
/** Fired when a service flaps past its restart budget (decision 0007/0010). */
|
|
21
|
+
onDegraded?: ((service: string) => void) | undefined,
|
|
22
|
+
/** Fired whenever a service's pid changes (start/restart) so the journal
|
|
23
|
+
* stays truthful for recovery — a stale pid gets an innocent SIGTERM and
|
|
24
|
+
* misses the real orphan holding the port. */
|
|
25
|
+
onPidsChanged?: (() => void) | undefined);
|
|
26
|
+
private note;
|
|
27
|
+
logPath(name: string): string;
|
|
28
|
+
logs(name: string): string;
|
|
29
|
+
pids(): Record<string, number>;
|
|
30
|
+
allHealthyPids(): boolean;
|
|
31
|
+
start(name: string, spec: ServiceSpec, env: Record<string, string>, watchMode: boolean): void;
|
|
32
|
+
waitReady(name: string, spec: ServiceSpec, url: string | undefined, env: Record<string, string>): Promise<void>;
|
|
33
|
+
stopAll(): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
/** Kill PIDs recorded by a previous daemon life (recovery, decision 0009). */
|
|
36
|
+
export declare function reapPids(pids: Record<string, number>): void;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon-as-parent service supervision (decision 0009/0010): spawn with env
|
|
3
|
+
* injection, capture logs, probe readiness (http/log/cmd) with fatal-log
|
|
4
|
+
* fast-fail, restart session services with bounded backoff, and never let a
|
|
5
|
+
* crash pass silently.
|
|
6
|
+
*/
|
|
7
|
+
import { spawn, execFile } from 'node:child_process';
|
|
8
|
+
import { appendFileSync, mkdirSync } from 'node:fs';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { BrokerError } from '../core/util.js';
|
|
11
|
+
export class EnvSupervisor {
|
|
12
|
+
envId;
|
|
13
|
+
envTree;
|
|
14
|
+
logDir;
|
|
15
|
+
onDegraded;
|
|
16
|
+
onPidsChanged;
|
|
17
|
+
services = new Map();
|
|
18
|
+
events = [];
|
|
19
|
+
constructor(envId, envTree, logDir,
|
|
20
|
+
/** Fired when a service flaps past its restart budget (decision 0007/0010). */
|
|
21
|
+
onDegraded,
|
|
22
|
+
/** Fired whenever a service's pid changes (start/restart) so the journal
|
|
23
|
+
* stays truthful for recovery — a stale pid gets an innocent SIGTERM and
|
|
24
|
+
* misses the real orphan holding the port. */
|
|
25
|
+
onPidsChanged) {
|
|
26
|
+
this.envId = envId;
|
|
27
|
+
this.envTree = envTree;
|
|
28
|
+
this.logDir = logDir;
|
|
29
|
+
this.onDegraded = onDegraded;
|
|
30
|
+
this.onPidsChanged = onPidsChanged;
|
|
31
|
+
mkdirSync(logDir, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
note(service, event) {
|
|
34
|
+
this.events.push({ at: Date.now(), service, event });
|
|
35
|
+
if (this.events.length > 100)
|
|
36
|
+
this.events.shift();
|
|
37
|
+
}
|
|
38
|
+
logPath(name) {
|
|
39
|
+
return join(this.logDir, `${name}.log`);
|
|
40
|
+
}
|
|
41
|
+
logs(name) {
|
|
42
|
+
return this.services.get(name)?.buf ?? '';
|
|
43
|
+
}
|
|
44
|
+
pids() {
|
|
45
|
+
const out = {};
|
|
46
|
+
for (const [name, r] of this.services)
|
|
47
|
+
if (r.proc.pid && r.proc.exitCode === null)
|
|
48
|
+
out[name] = r.proc.pid;
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
allHealthyPids() {
|
|
52
|
+
return [...this.services.values()].every((r) => r.proc.exitCode === null);
|
|
53
|
+
}
|
|
54
|
+
start(name, spec, env, watchMode) {
|
|
55
|
+
const cmd = watchMode && spec.watch_run ? spec.watch_run : spec.run;
|
|
56
|
+
const cwd = spec.cwd ? join(this.envTree, spec.cwd) : this.envTree;
|
|
57
|
+
const running = { proc: null, buf: '', restarts: 0, expectedExit: false, restartTimer: null };
|
|
58
|
+
const launch = () => {
|
|
59
|
+
running.restartTimer = null;
|
|
60
|
+
// A teardown that landed while this restart was pending: do not respawn.
|
|
61
|
+
if (running.expectedExit)
|
|
62
|
+
return;
|
|
63
|
+
const proc = spawn('sh', ['-c', cmd], {
|
|
64
|
+
cwd,
|
|
65
|
+
env: { ...process.env, ...env },
|
|
66
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
67
|
+
detached: false,
|
|
68
|
+
});
|
|
69
|
+
running.proc = proc;
|
|
70
|
+
this.onPidsChanged?.();
|
|
71
|
+
const sink = (d) => {
|
|
72
|
+
const s = d.toString();
|
|
73
|
+
running.buf = (running.buf + s).slice(-64_000);
|
|
74
|
+
try {
|
|
75
|
+
appendFileSync(this.logPath(name), s);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
/* log dir gone mid-teardown */
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
proc.stdout.on('data', sink);
|
|
82
|
+
proc.stderr.on('data', sink);
|
|
83
|
+
// A spawn failure (EAGAIN/EMFILE under fleet load) emits 'error'; with no
|
|
84
|
+
// listener it becomes an uncaught exception that kills the whole daemon.
|
|
85
|
+
proc.on('error', (err) => {
|
|
86
|
+
this.note(name, `spawn error: ${err.message}`);
|
|
87
|
+
});
|
|
88
|
+
proc.on('exit', (code) => {
|
|
89
|
+
if (running.expectedExit)
|
|
90
|
+
return;
|
|
91
|
+
this.note(name, `exited (${code})`);
|
|
92
|
+
this.onPidsChanged?.(); // the dead pid must leave the journal
|
|
93
|
+
// Bounded restart for long-lived services (decision 0010).
|
|
94
|
+
if (running.restarts < 3) {
|
|
95
|
+
running.restarts++;
|
|
96
|
+
this.note(name, `restarting (attempt ${running.restarts})`);
|
|
97
|
+
running.restartTimer = setTimeout(launch, 500 * running.restarts);
|
|
98
|
+
running.restartTimer.unref();
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.note(name, 'flapping — giving up (environment degraded)');
|
|
102
|
+
this.onDegraded?.(name);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
launch();
|
|
107
|
+
this.services.set(name, running);
|
|
108
|
+
this.note(name, 'started');
|
|
109
|
+
}
|
|
110
|
+
async waitReady(name, spec, url, env) {
|
|
111
|
+
const ready = spec.ready ?? (spec.port ? { http: '/' } : { log: '.' });
|
|
112
|
+
const timeoutMs = (ready.timeout ?? 120) * 1000;
|
|
113
|
+
const fatal = spec.fatal_logs ? new RegExp(spec.fatal_logs) : undefined;
|
|
114
|
+
const start = Date.now();
|
|
115
|
+
const running = this.services.get(name);
|
|
116
|
+
if (!running)
|
|
117
|
+
throw new BrokerError('env-error', `service '${name}' was never started`, name);
|
|
118
|
+
for (;;) {
|
|
119
|
+
const buf = running.buf;
|
|
120
|
+
if (fatal && fatal.test(buf)) {
|
|
121
|
+
throw new BrokerError('work-error', `service '${name}' hit a fatal log marker during boot`, name, tail(buf));
|
|
122
|
+
}
|
|
123
|
+
if (running.proc.exitCode !== null && running.restarts >= 3) {
|
|
124
|
+
throw new BrokerError('work-error', `service '${name}' exited during boot (${running.proc.exitCode})`, name, tail(buf));
|
|
125
|
+
}
|
|
126
|
+
if (ready.http && url) {
|
|
127
|
+
try {
|
|
128
|
+
const res = await fetch(`${url}${ready.http}`, { signal: AbortSignal.timeout(1500) });
|
|
129
|
+
if (res.status === 200)
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
/* not yet */
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else if (ready.log) {
|
|
137
|
+
if (new RegExp(ready.log).test(buf))
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
else if (ready.cmd) {
|
|
141
|
+
const ok = await new Promise((resolve) => {
|
|
142
|
+
execFile('sh', ['-c', ready.cmd], { cwd: this.envTree, env: { ...process.env, ...env } }, (err) => resolve(!err));
|
|
143
|
+
});
|
|
144
|
+
if (ok)
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (Date.now() - start > timeoutMs) {
|
|
148
|
+
throw new BrokerError('env-error', `service '${name}' not ready after ${ready.timeout ?? 120}s`, name, tail(running.buf));
|
|
149
|
+
}
|
|
150
|
+
await new Promise((r) => setTimeout(r, 150));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async stopAll() {
|
|
154
|
+
for (const [name, r] of this.services) {
|
|
155
|
+
r.expectedExit = true;
|
|
156
|
+
// Cancel any pending restart BEFORE it can fire — otherwise launch()
|
|
157
|
+
// respawns an untracked process that squats the port after teardown.
|
|
158
|
+
if (r.restartTimer) {
|
|
159
|
+
clearTimeout(r.restartTimer);
|
|
160
|
+
r.restartTimer = null;
|
|
161
|
+
}
|
|
162
|
+
if (r.proc && r.proc.exitCode === null) {
|
|
163
|
+
await new Promise((resolve) => {
|
|
164
|
+
r.proc.once('exit', () => resolve());
|
|
165
|
+
r.proc.kill();
|
|
166
|
+
setTimeout(() => {
|
|
167
|
+
r.proc.kill('SIGKILL');
|
|
168
|
+
resolve();
|
|
169
|
+
}, 2000).unref();
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
this.note(name, 'stopped');
|
|
173
|
+
}
|
|
174
|
+
this.services.clear();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
const tail = (s, n = 600) => s.slice(-n);
|
|
178
|
+
/** Kill PIDs recorded by a previous daemon life (recovery, decision 0009). */
|
|
179
|
+
export function reapPids(pids) {
|
|
180
|
+
for (const pid of Object.values(pids)) {
|
|
181
|
+
try {
|
|
182
|
+
process.kill(pid);
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
/* already gone */
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=supervisor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../src/daemon/supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { DatastoreSpec } from '../core/manifest.js';
|
|
2
|
+
export interface DatastoreBinding {
|
|
3
|
+
name: string;
|
|
4
|
+
url: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class SqliteDatastore {
|
|
7
|
+
private readonly name;
|
|
8
|
+
private readonly spec;
|
|
9
|
+
private readonly stackId;
|
|
10
|
+
constructor(name: string, spec: DatastoreSpec, stackId: string);
|
|
11
|
+
get capabilities(): {
|
|
12
|
+
template: boolean;
|
|
13
|
+
ephemeral: boolean;
|
|
14
|
+
};
|
|
15
|
+
/** ns for sqlite = the db file path inside the env's data dir. */
|
|
16
|
+
url(dataDir: string): string;
|
|
17
|
+
probe(): Promise<void>;
|
|
18
|
+
private seedKey;
|
|
19
|
+
private templatePath;
|
|
20
|
+
private runCreate;
|
|
21
|
+
/** Create/restore the namespace at the given preset. Template-first. */
|
|
22
|
+
create(envTree: string, dataDir: string, preset: string): Promise<DatastoreBinding>;
|
|
23
|
+
drop(dataDir: string): void;
|
|
24
|
+
/** @rebake-template: invalidate baked templates so the next create re-seeds. */
|
|
25
|
+
rebake(): void;
|
|
26
|
+
}
|
|
27
|
+
export declare function makeDatastore(name: string, spec: DatastoreSpec, stackId: string): SqliteDatastore;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sqlite datastore driver: the zero-infrastructure reference implementation.
|
|
3
|
+
* A namespace is a file under the environment's data dir; template bake/restore
|
|
4
|
+
* is a file copy keyed by preset + create-command hash (decision 0006/0008).
|
|
5
|
+
*/
|
|
6
|
+
import { copyFileSync, mkdirSync, rmSync, existsSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { execFile } from 'node:child_process';
|
|
9
|
+
import { templatesRoot } from '../core/paths.js';
|
|
10
|
+
import { sha256, template, BrokerError } from '../core/util.js';
|
|
11
|
+
export class SqliteDatastore {
|
|
12
|
+
name;
|
|
13
|
+
spec;
|
|
14
|
+
stackId;
|
|
15
|
+
constructor(name, spec, stackId) {
|
|
16
|
+
this.name = name;
|
|
17
|
+
this.spec = spec;
|
|
18
|
+
this.stackId = stackId;
|
|
19
|
+
}
|
|
20
|
+
get capabilities() {
|
|
21
|
+
return { template: this.spec.template === true, ephemeral: false };
|
|
22
|
+
}
|
|
23
|
+
/** ns for sqlite = the db file path inside the env's data dir. */
|
|
24
|
+
url(dataDir) {
|
|
25
|
+
return join(dataDir, `${this.name}.db`);
|
|
26
|
+
}
|
|
27
|
+
async probe() {
|
|
28
|
+
// sqlite is in-process — nothing external to probe.
|
|
29
|
+
}
|
|
30
|
+
seedKey(preset) {
|
|
31
|
+
return `${this.name}-${preset}@${sha256(this.spec.create ?? '').slice(0, 12)}`;
|
|
32
|
+
}
|
|
33
|
+
templatePath(preset) {
|
|
34
|
+
const dir = join(templatesRoot(), this.stackId);
|
|
35
|
+
mkdirSync(dir, { recursive: true });
|
|
36
|
+
return join(dir, `${this.seedKey(preset)}.db`);
|
|
37
|
+
}
|
|
38
|
+
runCreate(envTree, dbPath, preset) {
|
|
39
|
+
const cmd = this.spec.create;
|
|
40
|
+
if (!cmd)
|
|
41
|
+
throw new BrokerError('work-error', `datastore '${this.name}' has no create: command`, 'datastore');
|
|
42
|
+
const resolved = template(cmd, { ns: dbPath, preset });
|
|
43
|
+
return new Promise((resolve, reject) => {
|
|
44
|
+
execFile('sh', ['-c', resolved], { cwd: envTree, maxBuffer: 16 * 1024 * 1024 }, (err, _out, stderr) => {
|
|
45
|
+
if (err) {
|
|
46
|
+
reject(new BrokerError('work-error', `seed failed for '${this.name}' preset '${preset}'`, 'datastore', String(stderr).slice(0, 800)));
|
|
47
|
+
}
|
|
48
|
+
else
|
|
49
|
+
resolve();
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/** Create/restore the namespace at the given preset. Template-first. */
|
|
54
|
+
async create(envTree, dataDir, preset) {
|
|
55
|
+
mkdirSync(dataDir, { recursive: true });
|
|
56
|
+
const dbPath = this.url(dataDir);
|
|
57
|
+
if (this.capabilities.template) {
|
|
58
|
+
const tpl = this.templatePath(preset);
|
|
59
|
+
if (!existsSync(tpl)) {
|
|
60
|
+
await this.runCreate(envTree, tpl, preset); // bake once per seed-content hash
|
|
61
|
+
}
|
|
62
|
+
copyFileSync(tpl, dbPath); // restore = file copy: seconds, deterministic
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
await this.runCreate(envTree, dbPath, preset);
|
|
66
|
+
}
|
|
67
|
+
return { name: this.name, url: dbPath };
|
|
68
|
+
}
|
|
69
|
+
drop(dataDir) {
|
|
70
|
+
rmSync(this.url(dataDir), { force: true });
|
|
71
|
+
}
|
|
72
|
+
/** @rebake-template: invalidate baked templates so the next create re-seeds. */
|
|
73
|
+
rebake() {
|
|
74
|
+
rmSync(join(templatesRoot(), this.stackId), { recursive: true, force: true });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export function makeDatastore(name, spec, stackId) {
|
|
78
|
+
if (spec.driver !== 'sqlite') {
|
|
79
|
+
throw new BrokerError('infra-error', `datastore driver '${spec.driver}' is not implemented yet (v0.1 ships sqlite; postgres/mssql land in 0.2)`, 'datastore');
|
|
80
|
+
}
|
|
81
|
+
return new SqliteDatastore(name, spec, stackId);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=datastore-sqlite.js.map
|