@revisium/orchestrator 0.1.0-alpha.7 → 0.1.0-alpha.9
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 +35 -1
- package/control-plane/default-playbook/catalog/pipelines.json +65 -5
- package/dist/cli/commands/doctor-report.js +18 -0
- package/dist/cli/commands/doctor-report.js.map +1 -1
- package/dist/cli/commands/lifecycle.js +167 -8
- package/dist/cli/commands/lifecycle.js.map +1 -1
- package/dist/cli/commands/mcp.js +8 -1
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/process-tree.js +87 -0
- package/dist/cli/commands/process-tree.js.map +1 -0
- package/dist/cli/commands/rogue-reaper.js +63 -0
- package/dist/cli/commands/rogue-reaper.js.map +1 -0
- package/dist/config.js +9 -0
- package/dist/config.js.map +1 -1
- package/dist/e2e/kit/assertions.js +6 -5
- package/dist/e2e/kit/assertions.js.map +1 -1
- package/dist/e2e/kit/gh-emulator.js +2 -1
- package/dist/e2e/kit/gh-emulator.js.map +1 -1
- package/dist/host/daemon.js +14 -1
- package/dist/host/daemon.js.map +1 -1
- package/dist/host/dbos-identity.js +42 -0
- package/dist/host/dbos-identity.js.map +1 -0
- package/dist/host/ensure-host.js +6 -2
- package/dist/host/ensure-host.js.map +1 -1
- package/dist/host/host-runtime.js +20 -2
- package/dist/host/host-runtime.js.map +1 -1
- package/dist/host/queue-ownership.js +26 -9
- package/dist/host/queue-ownership.js.map +1 -1
- package/dist/host/queue-poller-census.js +47 -0
- package/dist/host/queue-poller-census.js.map +1 -0
- package/dist/mcp/mcp-capabilities.js +2 -0
- package/dist/mcp/mcp-capabilities.js.map +1 -1
- package/dist/mcp/mcp-facade.service.js +20 -2
- package/dist/mcp/mcp-facade.service.js.map +1 -1
- package/dist/mcp/mcp-tools.js +20 -1
- package/dist/mcp/mcp-tools.js.map +1 -1
- package/dist/pipeline/data-driven-task.workflow.js +67 -4
- package/dist/pipeline/data-driven-task.workflow.js.map +1 -1
- package/dist/pipeline-core/interpret.js +2 -0
- package/dist/pipeline-core/interpret.js.map +1 -1
- package/dist/pipeline-core/kit/builders.js +2 -0
- package/dist/pipeline-core/kit/builders.js.map +1 -1
- package/dist/pipeline-core/types.js +2 -0
- package/dist/pipeline-core/types.js.map +1 -1
- package/dist/pipeline-core/validate-dataflow.js +32 -0
- package/dist/pipeline-core/validate-dataflow.js.map +1 -1
- package/dist/run/inspect-run.js +21 -2
- package/dist/run/inspect-run.js.map +1 -1
- package/dist/runners/integrator-branch-naming.js +20 -5
- package/dist/runners/integrator-branch-naming.js.map +1 -1
- package/dist/runners/integrator.js +60 -12
- package/dist/runners/integrator.js.map +1 -1
- package/dist/task-control-plane/run-watch.service.js +281 -0
- package/dist/task-control-plane/run-watch.service.js.map +1 -0
- package/dist/task-control-plane/task-control-plane-api.service.js +5 -0
- package/dist/task-control-plane/task-control-plane-api.service.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -47,12 +47,46 @@ pnpm run revo -- stop --profile dev
|
|
|
47
47
|
Any single knob can be overridden explicitly — `REVO_DATA_DIR` / `REVO_PORT` / `REVO_PG_PORT` /
|
|
48
48
|
`REVO_GRAPHQL_PORT` / `REVO_DBOS_DB` — and an explicit env var always wins over the profile band.
|
|
49
49
|
|
|
50
|
-
Connect an agent over MCP (a thin stdio bridge
|
|
50
|
+
Connect an agent over MCP (`revo mcp` is a thin stdio bridge — it does not launch its own DBOS;
|
|
51
|
+
if the daemon isn't already running, the bridge auto-starts it on first use; the profile comes
|
|
52
|
+
from the process environment, not per-call args):
|
|
53
|
+
|
|
54
|
+
**Claude Code**
|
|
51
55
|
|
|
52
56
|
```sh
|
|
57
|
+
# global install
|
|
58
|
+
claude mcp add revo -- revo mcp
|
|
59
|
+
|
|
60
|
+
# dev checkout
|
|
53
61
|
claude mcp add revo -- pnpm --dir "$PWD" run revo -- mcp
|
|
54
62
|
```
|
|
55
63
|
|
|
64
|
+
**Codex CLI** (`codex mcp add` or edit `~/.codex/config.toml` directly)
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
# global install
|
|
68
|
+
codex mcp add revo -- revo mcp
|
|
69
|
+
|
|
70
|
+
# dev checkout (use an absolute path — $PWD does not expand in TOML args)
|
|
71
|
+
codex mcp add revo-dev -- pnpm --dir /abs/path/to/agent-orchestrator run revo -- mcp
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
To use a non-`default` profile with Codex, append `--env REVO_PROFILE=dev` (and the other
|
|
75
|
+
dev-band vars; see the JSON block under **Live Run Observability Smoke**) to `codex mcp add`,
|
|
76
|
+
or export the vars in the shell before launching Codex — stdio servers inherit the parent
|
|
77
|
+
environment. Equivalent TOML for the global install form:
|
|
78
|
+
|
|
79
|
+
```toml
|
|
80
|
+
# ~/.codex/config.toml
|
|
81
|
+
[mcp_servers.revo]
|
|
82
|
+
command = "revo" # or the absolute path from `which revo` if revo is not on Codex's PATH
|
|
83
|
+
args = ["mcp"]
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Verify the connection** — run `claude mcp list` or `codex mcp list` to confirm the server
|
|
87
|
+
appears, then have the agent call `get_status` for a healthy JSON status reply. `list_pipelines`
|
|
88
|
+
is a good read-only alternative.
|
|
89
|
+
|
|
56
90
|
Run the local verification gates:
|
|
57
91
|
|
|
58
92
|
```sh
|
|
@@ -109,10 +109,34 @@
|
|
|
109
109
|
"goto": "analyst"
|
|
110
110
|
},
|
|
111
111
|
{
|
|
112
|
-
"default": "
|
|
112
|
+
"default": "planStuckGate"
|
|
113
113
|
}
|
|
114
114
|
]
|
|
115
115
|
},
|
|
116
|
+
"planStuckGate": {
|
|
117
|
+
"id": "planStuckGate",
|
|
118
|
+
"kind": "humanGate",
|
|
119
|
+
"reason": "plan-stuck",
|
|
120
|
+
"outcomes": [
|
|
121
|
+
"approved"
|
|
122
|
+
],
|
|
123
|
+
"branches": [
|
|
124
|
+
{
|
|
125
|
+
"when": {
|
|
126
|
+
"op": "verdict.eq",
|
|
127
|
+
"value": "approved"
|
|
128
|
+
},
|
|
129
|
+
"goto": "developer"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"default": "blockedEnd"
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
"gatedArtifact": {
|
|
136
|
+
"node": "analyst",
|
|
137
|
+
"as": "plan"
|
|
138
|
+
}
|
|
139
|
+
},
|
|
116
140
|
"planGate": {
|
|
117
141
|
"id": "planGate",
|
|
118
142
|
"kind": "humanGate",
|
|
@@ -131,7 +155,11 @@
|
|
|
131
155
|
{
|
|
132
156
|
"default": "blockedEnd"
|
|
133
157
|
}
|
|
134
|
-
]
|
|
158
|
+
],
|
|
159
|
+
"gatedArtifact": {
|
|
160
|
+
"node": "analyst",
|
|
161
|
+
"as": "plan"
|
|
162
|
+
}
|
|
135
163
|
},
|
|
136
164
|
"developer": {
|
|
137
165
|
"id": "developer",
|
|
@@ -190,10 +218,34 @@
|
|
|
190
218
|
"goto": "reworkDeveloper"
|
|
191
219
|
},
|
|
192
220
|
{
|
|
193
|
-
"default": "
|
|
221
|
+
"default": "codeStuckGate"
|
|
194
222
|
}
|
|
195
223
|
]
|
|
196
224
|
},
|
|
225
|
+
"codeStuckGate": {
|
|
226
|
+
"id": "codeStuckGate",
|
|
227
|
+
"kind": "humanGate",
|
|
228
|
+
"reason": "code-review-stuck",
|
|
229
|
+
"outcomes": [
|
|
230
|
+
"approved"
|
|
231
|
+
],
|
|
232
|
+
"branches": [
|
|
233
|
+
{
|
|
234
|
+
"when": {
|
|
235
|
+
"op": "verdict.eq",
|
|
236
|
+
"value": "approved"
|
|
237
|
+
},
|
|
238
|
+
"goto": "integrator"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"default": "blockedEnd"
|
|
242
|
+
}
|
|
243
|
+
],
|
|
244
|
+
"gatedArtifact": {
|
|
245
|
+
"node": "analyst",
|
|
246
|
+
"as": "plan"
|
|
247
|
+
}
|
|
248
|
+
},
|
|
197
249
|
"reworkDeveloper": {
|
|
198
250
|
"id": "reworkDeveloper",
|
|
199
251
|
"kind": "agent",
|
|
@@ -241,7 +293,11 @@
|
|
|
241
293
|
{
|
|
242
294
|
"default": "blockedEnd"
|
|
243
295
|
}
|
|
244
|
-
]
|
|
296
|
+
],
|
|
297
|
+
"gatedArtifact": {
|
|
298
|
+
"node": "pollPr",
|
|
299
|
+
"as": "prFeedback"
|
|
300
|
+
}
|
|
245
301
|
},
|
|
246
302
|
"confirmMerge": {
|
|
247
303
|
"id": "confirmMerge",
|
|
@@ -448,7 +504,11 @@
|
|
|
448
504
|
{
|
|
449
505
|
"default": "blockedEnd"
|
|
450
506
|
}
|
|
451
|
-
]
|
|
507
|
+
],
|
|
508
|
+
"gatedArtifact": {
|
|
509
|
+
"node": "triage",
|
|
510
|
+
"as": "triage"
|
|
511
|
+
}
|
|
452
512
|
},
|
|
453
513
|
"reviewRework": {
|
|
454
514
|
"id": "reviewRework",
|
|
@@ -21,6 +21,24 @@ export function buildDoctorReport(o) {
|
|
|
21
21
|
issues.push(`Running daemon is version ${o.versionMismatch.running} but this build is ${o.versionMismatch.current} — ` +
|
|
22
22
|
'run `revo restart` to replace the stale daemon.');
|
|
23
23
|
}
|
|
24
|
+
// Rogue queue pollers: a legacy/duplicate daemon connected to the dbos DB under a foreign executor id.
|
|
25
|
+
// The advisory lock can't coordinate it and port-based stop can't see it; reap the stale process.
|
|
26
|
+
const rogues = o.queuePollerRogues ?? [];
|
|
27
|
+
if (rogues.length > 0) {
|
|
28
|
+
const byExecutor = new Map();
|
|
29
|
+
for (const r of rogues)
|
|
30
|
+
byExecutor.set(r.executorId, [...(byExecutor.get(r.executorId) ?? []), r.pid]);
|
|
31
|
+
for (const [executorId, pids] of byExecutor) {
|
|
32
|
+
issues.push(`DBOS queue database has ${pids.length} connection(s) from a foreign executor "${executorId}" ` +
|
|
33
|
+
`(backend pid${pids.length === 1 ? '' : 's'} ${pids.join(', ')}) — a stale/duplicate daemon polling ` +
|
|
34
|
+
'dev-tasks. The advisory lock cannot evict an outbound poller; reap the stale revo process ' +
|
|
35
|
+
'(`pkill -f "revo mcp"` / `pkill -f "revo __daemon"`), then `revo restart`.');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else if (o.rogueCensusUnavailable) {
|
|
39
|
+
issues.push('Could not census the DBOS queue database for duplicate pollers (DB unreachable or insufficient ' +
|
|
40
|
+
'privilege) — single-ownership could not be verified.');
|
|
41
|
+
}
|
|
24
42
|
// Nothing recorded on either tier → the stack is simply down (unless a rogue process was flagged above).
|
|
25
43
|
if (!o.host.present && !o.standalone.present) {
|
|
26
44
|
if (issues.length === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-report.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"doctor-report.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
+
import pg from 'pg';
|
|
1
2
|
import { closeSync, existsSync, openSync, readSync, statSync } from 'node:fs';
|
|
2
3
|
import { execFileSync } from 'node:child_process';
|
|
3
4
|
import { baseUrl, getConfig, isAlive, isHealthy, readRuntime, removeRuntime, } from '../config.js';
|
|
4
5
|
import { killTree, tailLines, waitForExit } from './revisium-helpers.js';
|
|
5
6
|
import { buildDoctorReport } from './doctor-report.js';
|
|
7
|
+
import { isPidWithin, listProcesses, parentPid, processStartTime } from './process-tree.js';
|
|
8
|
+
import { classifyRevoProcess, evictByTermination, selectReapTargets, } from './rogue-reaper.js';
|
|
9
|
+
import { classifyQueuePollerRogues } from '../../host/queue-poller-census.js';
|
|
10
|
+
import { dbosExecutorId } from '../../host/dbos-identity.js';
|
|
11
|
+
import { resolveDbosDbName } from '../../engine/ensure-postgres.js';
|
|
6
12
|
import { ensureHost, expectedGraphqlPort, isGraphqlHealthy } from '../../host/ensure-host.js';
|
|
7
13
|
import { runHostDaemon } from '../../host/daemon.js';
|
|
8
|
-
import { hostCodeVersion, isHostRunning, readHostRuntime, removeHostRuntime, } from '../../host/host-runtime.js';
|
|
14
|
+
import { allTrackedHostPids, hostCodeVersion, isHostRunning, readHostRuntime, removeHostRuntime, } from '../../host/host-runtime.js';
|
|
9
15
|
// Resolve lsof to a FIXED absolute path — never via $PATH (S4036: a writable PATH entry could shadow
|
|
10
16
|
// the binary). null if lsof isn't installed, in which case port-owner detection/reaping degrade to no-op.
|
|
11
17
|
const LSOF_PATH = ['/usr/sbin/lsof', '/usr/bin/lsof', '/bin/lsof'].find((p) => existsSync(p)) ?? null;
|
|
@@ -80,6 +86,11 @@ async function stopStack(options) {
|
|
|
80
86
|
const standalone = readRuntime();
|
|
81
87
|
const ports = profilePortList(host, standalone);
|
|
82
88
|
let stopped = false;
|
|
89
|
+
// `--all`: evict rogue queue CONNECTIONS while the standalone Postgres is still up (slice 140) —
|
|
90
|
+
// must happen BEFORE we stop the standalone below, or there is no DB to evict against.
|
|
91
|
+
if (options.all && standalone && isAlive(standalone.pid)) {
|
|
92
|
+
await evictQueuePollers(getConfig().profile, standalone.pgPort);
|
|
93
|
+
}
|
|
83
94
|
// Host first (it owns DBOS); then the standalone daemon underneath it.
|
|
84
95
|
if (host && isAlive(host.pid)) {
|
|
85
96
|
await stopProcess(host.pid);
|
|
@@ -102,8 +113,16 @@ async function stopStack(options) {
|
|
|
102
113
|
reaped += 1;
|
|
103
114
|
}
|
|
104
115
|
}
|
|
116
|
+
// `--all`: also reap untracked rogue daemon/mcp PROCESSES machine-wide (durable stop — a killed
|
|
117
|
+
// connection alone reconnects), protecting every profile's tracked tree.
|
|
118
|
+
const reapedProcs = options.all ? await reapRogueProcesses() : 0;
|
|
119
|
+
const parts = [];
|
|
105
120
|
if (reaped > 0)
|
|
106
|
-
|
|
121
|
+
parts.push(`${reaped} orphan port owner${reaped === 1 ? '' : 's'}`);
|
|
122
|
+
if (reapedProcs > 0)
|
|
123
|
+
parts.push(`${reapedProcs} rogue process${reapedProcs === 1 ? '' : 'es'}`);
|
|
124
|
+
if (parts.length > 0)
|
|
125
|
+
console.log(`stopped (reaped ${parts.join(', ')})`);
|
|
107
126
|
else
|
|
108
127
|
console.log(stopped ? 'stopped' : 'not running');
|
|
109
128
|
}
|
|
@@ -137,6 +156,109 @@ async function restartStack(options) {
|
|
|
137
156
|
await stopStack(options);
|
|
138
157
|
await startStack(options);
|
|
139
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Census the profile's `dbos` database for FOREIGN DBOS queue pollers (slice 140) — a legacy/duplicate
|
|
161
|
+
* daemon polling `dev-tasks` under an executor id that is not this profile's pinned owner. Connects to
|
|
162
|
+
* the maintenance `postgres` db (pg_stat_activity is cluster-wide) and inspects `dbos_transact_%`
|
|
163
|
+
* connections on the dbos db. Best-effort: returns `unavailable:true` when the DB is unreachable or the
|
|
164
|
+
* role can't see other backends, so `doctor` warns rather than falsely reporting "clean".
|
|
165
|
+
*/
|
|
166
|
+
async function censusQueuePollers(profile, pgPort) {
|
|
167
|
+
const client = new pg.Client(`postgresql://revisium:password@localhost:${pgPort}/postgres`);
|
|
168
|
+
try {
|
|
169
|
+
await client.connect();
|
|
170
|
+
// Without privilege to see OTHER backends, pg_stat_activity hides their application_name → a silent
|
|
171
|
+
// empty roster. Superuser OR pg_read_all_stats membership both suffice; anything less is reported as
|
|
172
|
+
// "unavailable", never as "no rogues".
|
|
173
|
+
const cap = await client.query(`SELECT (current_setting('is_superuser') = 'on'
|
|
174
|
+
OR pg_has_role(current_user, 'pg_read_all_stats', 'MEMBER')) AS can_see`);
|
|
175
|
+
if (cap.rows[0]?.['can_see'] !== true)
|
|
176
|
+
return { rogues: [], unavailable: true };
|
|
177
|
+
const res = await client.query(`SELECT pid, application_name AS app, backend_start AS started
|
|
178
|
+
FROM pg_stat_activity WHERE datname = $1 AND application_name LIKE 'dbos_transact_%'`, [resolveDbosDbName()]);
|
|
179
|
+
const rogues = classifyQueuePollerRogues(res.rows.map((r) => ({ pid: Number(r['pid']), applicationName: String(r['app']), backendStart: r['started'] })), dbosExecutorId(profile)).map((r) => ({ pid: r.pid, executorId: r.executorId, applicationName: r.applicationName }));
|
|
180
|
+
return { rogues, unavailable: false };
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return { rogues: [], unavailable: true };
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
await client.end().catch(() => undefined);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* EVICT rogue queue connections (slice 140 Phase 2): `pg_terminate_backend` every foreign DBOS poller
|
|
191
|
+
* on this profile's `dbos` DB, in a TOCTOU loop (a rogue can dequeue a fresh row between census and
|
|
192
|
+
* kill). Profile-scoped by `datname` → never touches another profile. Needs BOTH `pg_read_all_stats`
|
|
193
|
+
* (to SEE foreign backends) and `pg_signal_backend` (to terminate); lacking either is reported, never
|
|
194
|
+
* silently treated as "no rogues".
|
|
195
|
+
*/
|
|
196
|
+
async function evictQueuePollers(profile, pgPort) {
|
|
197
|
+
const idle = { converged: false, rounds: 0, terminated: 0, unavailable: true, cannotEvict: false };
|
|
198
|
+
const client = new pg.Client(`postgresql://revisium:password@localhost:${pgPort}/postgres`);
|
|
199
|
+
try {
|
|
200
|
+
await client.connect();
|
|
201
|
+
const cap = await client.query(`SELECT (current_setting('is_superuser') = 'on' OR pg_has_role(current_user, 'pg_read_all_stats', 'MEMBER')) AS can_see,
|
|
202
|
+
(current_setting('is_superuser') = 'on' OR pg_has_role(current_user, 'pg_signal_backend', 'MEMBER')) AS can_signal`);
|
|
203
|
+
if (cap.rows[0]?.['can_see'] !== true)
|
|
204
|
+
return idle;
|
|
205
|
+
if (cap.rows[0]?.['can_signal'] !== true) {
|
|
206
|
+
return { converged: false, rounds: 0, terminated: 0, unavailable: false, cannotEvict: true };
|
|
207
|
+
}
|
|
208
|
+
const owner = dbosExecutorId(profile);
|
|
209
|
+
const dbosDb = resolveDbosDbName();
|
|
210
|
+
const census = async () => {
|
|
211
|
+
const res = await client.query(`SELECT pid, application_name AS app FROM pg_stat_activity WHERE datname = $1 AND application_name LIKE 'dbos_transact_%'`, [dbosDb]);
|
|
212
|
+
return classifyQueuePollerRogues(res.rows.map((r) => ({ pid: Number(r['pid']), applicationName: String(r['app']) })), owner).map((r) => r.pid);
|
|
213
|
+
};
|
|
214
|
+
const terminate = async (pid) => {
|
|
215
|
+
await client.query('SELECT pg_terminate_backend($1)', [pid]);
|
|
216
|
+
};
|
|
217
|
+
const outcome = await evictByTermination(census, terminate);
|
|
218
|
+
return { ...outcome, unavailable: false, cannotEvict: false };
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return idle; // census/terminate threw → not converged, never "clean"
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
await client.end().catch(() => undefined);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Durable stop: SIGTERM→SIGKILL the rogue revo daemon/mcp PROCESS (its DBOS pool would otherwise
|
|
229
|
+
* reconnect after `evictQueuePollers`). Protects the tracked daemon tree of EVERY profile — so a reap
|
|
230
|
+
* on one profile can never kill a sibling profile's live daemon. pid+start-time identity: re-check the
|
|
231
|
+
* start time before SIGKILL so a recycled pid (the rogue already exited) is never wrongly killed.
|
|
232
|
+
*/
|
|
233
|
+
async function reapRogueProcesses() {
|
|
234
|
+
const protectedPids = new Set(allTrackedHostPids());
|
|
235
|
+
const candidates = [];
|
|
236
|
+
for (const { pid, command } of listProcesses()) {
|
|
237
|
+
if (pid === process.pid)
|
|
238
|
+
continue; // never reap the running CLI itself
|
|
239
|
+
const kind = classifyRevoProcess(command);
|
|
240
|
+
// Only reap a `__daemon` (always a full DBOS host → an untracked one is a genuine rogue). A modern
|
|
241
|
+
// `revo mcp` is a THIN bridge holding no DBOS connection — reaping it is pure collateral (drops a
|
|
242
|
+
// live MCP client), so it is left alone; its polling, if any legacy host, is handled by the
|
|
243
|
+
// connection eviction. (Reviewer-flagged: don't disrupt healthy bridges.)
|
|
244
|
+
if (kind === 'daemon')
|
|
245
|
+
candidates.push({ pid, command, startTime: processStartTime(pid), kind });
|
|
246
|
+
}
|
|
247
|
+
const targets = selectReapTargets(candidates, protectedPids, parentPid);
|
|
248
|
+
if (targets.length === 0)
|
|
249
|
+
return 0;
|
|
250
|
+
for (const t of targets)
|
|
251
|
+
killTree(t.pid, 'SIGTERM');
|
|
252
|
+
if (!(await waitForExit(targets[targets.length - 1].pid, 8_000))) {
|
|
253
|
+
await new Promise((resolve) => setTimeout(resolve, 1_000));
|
|
254
|
+
}
|
|
255
|
+
for (const t of targets) {
|
|
256
|
+
// SIGKILL only if STILL the same process (start-time unchanged) — defeats pid reuse.
|
|
257
|
+
if (isAlive(t.pid) && processStartTime(t.pid) === t.startTime)
|
|
258
|
+
killTree(t.pid, 'SIGKILL');
|
|
259
|
+
}
|
|
260
|
+
return targets.length;
|
|
261
|
+
}
|
|
140
262
|
/** `revo doctor` — diagnose the stack as a pure client: process/port/profile/stale-file health. */
|
|
141
263
|
async function doctorStack(options) {
|
|
142
264
|
applyProfileEnv(options);
|
|
@@ -159,11 +281,28 @@ async function doctorStack(options) {
|
|
|
159
281
|
const unexpectedPortOwners = [];
|
|
160
282
|
for (const check of portChecks) {
|
|
161
283
|
const pid = listenerPid(check.port);
|
|
162
|
-
if (pid
|
|
284
|
+
if (pid === null)
|
|
285
|
+
continue;
|
|
286
|
+
// Legitimate = the tracked pid ITSELF or one of its descendants. The standalone tier is a process
|
|
287
|
+
// tree (launcher → HTTP-binding worker → embedded Postgres), so the actual port owner is usually a
|
|
288
|
+
// child of the tracked launcher pid, not the launcher itself. Exact equality here mis-flagged the
|
|
289
|
+
// healthy stack as a rogue daemon (dogfood, alpha.7). Only a listener OUTSIDE the tracked tree —
|
|
290
|
+
// or any listener when nothing is tracked (expected === null) — is a real orphan/second daemon.
|
|
291
|
+
const owned = check.expected !== null && isPidWithin(pid, new Set([check.expected]));
|
|
292
|
+
if (!owned) {
|
|
163
293
|
unexpectedPortOwners.push({ label: check.label, port: check.port, pid });
|
|
164
294
|
}
|
|
165
295
|
}
|
|
166
296
|
const versionMismatch = host?.version !== undefined ? { running: host.version, current: hostCodeVersion() } : undefined;
|
|
297
|
+
// Rogue queue-poller census — only when the standalone (and thus its Postgres) is alive; a foreign
|
|
298
|
+
// executor connected to the dbos DB is a legacy/duplicate daemon the lock can't stop (slice 140).
|
|
299
|
+
let queuePollerRogues;
|
|
300
|
+
let rogueCensusUnavailable;
|
|
301
|
+
if (standalone && standaloneAlive) {
|
|
302
|
+
const census = await censusQueuePollers(profile, standalone.pgPort);
|
|
303
|
+
queuePollerRogues = census.rogues;
|
|
304
|
+
rogueCensusUnavailable = census.unavailable;
|
|
305
|
+
}
|
|
167
306
|
const report = buildDoctorReport({
|
|
168
307
|
host: {
|
|
169
308
|
present: host !== null,
|
|
@@ -181,16 +320,34 @@ async function doctorStack(options) {
|
|
|
181
320
|
},
|
|
182
321
|
unexpectedPortOwners,
|
|
183
322
|
versionMismatch,
|
|
323
|
+
queuePollerRogues,
|
|
324
|
+
rogueCensusUnavailable,
|
|
184
325
|
});
|
|
185
326
|
console.log(`Profile: ${profile}`);
|
|
186
327
|
console.log(`Data dir: ${dataDir}`);
|
|
187
|
-
if (report.ok)
|
|
328
|
+
if (report.ok)
|
|
188
329
|
console.log('OK — stack is healthy.');
|
|
189
|
-
|
|
330
|
+
else {
|
|
331
|
+
for (const issue of report.issues)
|
|
332
|
+
console.log(`✗ ${issue}`);
|
|
333
|
+
process.exitCode = 1;
|
|
334
|
+
}
|
|
335
|
+
// `--fix`: actively evict the rogues `doctor` reports — terminate their queue connections, then
|
|
336
|
+
// reap the untracked process (durable, cross-profile-safe). slice 140 Phase 2.
|
|
337
|
+
if (options.fix) {
|
|
338
|
+
console.log('— fix: evicting rogue queue pollers —');
|
|
339
|
+
if (standalone && standaloneAlive) {
|
|
340
|
+
const e = await evictQueuePollers(profile, standalone.pgPort);
|
|
341
|
+
if (e.unavailable)
|
|
342
|
+
console.log(' connection eviction unavailable (DB unreachable / missing pg_read_all_stats)');
|
|
343
|
+
else if (e.cannotEvict)
|
|
344
|
+
console.log(' cannot terminate: role lacks pg_signal_backend');
|
|
345
|
+
else
|
|
346
|
+
console.log(` terminated ${e.terminated} rogue connection(s) — ${e.converged ? 'converged' : 'NOT converged (reconnecting; process reap follows)'}`);
|
|
347
|
+
}
|
|
348
|
+
const reaped = await reapRogueProcesses();
|
|
349
|
+
console.log(` reaped ${reaped} untracked revo process${reaped === 1 ? '' : 'es'}`);
|
|
190
350
|
}
|
|
191
|
-
for (const issue of report.issues)
|
|
192
|
-
console.log(`✗ ${issue}`);
|
|
193
|
-
process.exitCode = 1;
|
|
194
351
|
}
|
|
195
352
|
/** Resolve which logs to read: `host`, `standalone`, or both (default). Profile-scoped paths. */
|
|
196
353
|
function resolveLogTargets(target) {
|
|
@@ -272,6 +429,7 @@ export function registerLifecycle(program) {
|
|
|
272
429
|
.command('stop')
|
|
273
430
|
.description('Stop the Revo stack (host daemon first, then standalone)')
|
|
274
431
|
.option('--profile <name>', 'Runtime profile (default|dev)')
|
|
432
|
+
.option('--all', 'Also evict rogue queue pollers + reap untracked revo processes machine-wide')
|
|
275
433
|
.action((options) => stopStack(options));
|
|
276
434
|
program
|
|
277
435
|
.command('status')
|
|
@@ -287,6 +445,7 @@ export function registerLifecycle(program) {
|
|
|
287
445
|
.command('doctor')
|
|
288
446
|
.description('Diagnose the Revo stack (process/port/profile health)')
|
|
289
447
|
.option('--profile <name>', 'Runtime profile (default|dev)')
|
|
448
|
+
.option('--fix', 'Evict rogue queue pollers (terminate connections + reap untracked processes)')
|
|
290
449
|
.action((options) => doctorStack(options));
|
|
291
450
|
program
|
|
292
451
|
.command('logs [target]')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/cli/commands/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/cli/commands/lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/commands/mcp.js
CHANGED
|
@@ -6,6 +6,13 @@ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprot
|
|
|
6
6
|
import { readPackageVersion } from '../../package-info.js';
|
|
7
7
|
import { ensureHost } from '../../host/ensure-host.js';
|
|
8
8
|
import { readHostRuntime } from '../../host/host-runtime.js';
|
|
9
|
+
/**
|
|
10
|
+
* Explicit inner-hop (bridge→daemon) request timeout. Matches the SDK's DEFAULT_REQUEST_TIMEOUT_MSEC
|
|
11
|
+
* but pins it intentionally: the daemon's longest tool (wait_for_any_gate / watch_runs) holds a single
|
|
12
|
+
* request ≤45s, comfortably under this — so a bounded long-poll resolves over the bridge, while a hung
|
|
13
|
+
* daemon call still fails fast instead of waiting forever.
|
|
14
|
+
*/
|
|
15
|
+
const INNER_HOP_TIMEOUT_MS = 60_000;
|
|
9
16
|
/**
|
|
10
17
|
* `revo mcp` — a thin stdio↔daemon MCP bridge (ADR 0006). It ensures the host daemon is up, then
|
|
11
18
|
* proxies tool list/call from the stdio client (Claude Code) to the daemon's in-process MCP server
|
|
@@ -26,7 +33,7 @@ async function runMcpBridge() {
|
|
|
26
33
|
// Downstream stdio server (faces Claude Code) — forwards tools to the daemon's MCP server.
|
|
27
34
|
const server = new Server({ name: 'revo', version }, { capabilities: { tools: {} } });
|
|
28
35
|
server.setRequestHandler(ListToolsRequestSchema, () => upstream.listTools());
|
|
29
|
-
server.setRequestHandler(CallToolRequestSchema, (request) => upstream.callTool(request.params));
|
|
36
|
+
server.setRequestHandler(CallToolRequestSchema, (request) => upstream.callTool(request.params, undefined, { timeout: INNER_HOP_TIMEOUT_MS }));
|
|
30
37
|
const transport = new StdioServerTransport();
|
|
31
38
|
const closed = new Promise((resolve) => {
|
|
32
39
|
transport.onclose = () => resolve();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D;;;;;GAKG;AACH,KAAK,UAAU,YAAY;IACzB,MAAM,UAAU,EAAE,CAAC;IACnB,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACvE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,CAAC;IAClE,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,6BAA6B,CAAC,IAAI,GAAG,CAAC,oBAAoB,OAAO,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAE9G,2FAA2F;IAC3F,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7E,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAEpC;;;;;GAKG;AACH,KAAK,UAAU,YAAY;IACzB,MAAM,UAAU,EAAE,CAAC;IACnB,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACvE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,CAAC;IAClE,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,6BAA6B,CAAC,IAAI,GAAG,CAAC,oBAAoB,OAAO,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAE9G,2FAA2F;IAC3F,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7E,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE,CAC1D,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAChF,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC3C,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,MAAM,CAAC;IACf,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,uEAAuE,CAAC;SACpF,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-tree ancestry — used by `revo doctor` to decide whether a port's listener belongs to the
|
|
3
|
+
* tracked stack. A profile's standalone tier is NOT a single pid: the tracked launcher forks a worker
|
|
4
|
+
* that binds the HTTP port and spawns embedded Postgres, so the actual port owners are *descendants*
|
|
5
|
+
* of the tracked pid. Exact-pid equality therefore mis-flags the legitimate stack as a rogue daemon;
|
|
6
|
+
* ancestry-walking is the correct test.
|
|
7
|
+
*/
|
|
8
|
+
import { execFileSync } from 'node:child_process';
|
|
9
|
+
import { existsSync } from 'node:fs';
|
|
10
|
+
// Resolve ps to a FIXED absolute path — never via $PATH (S4036: a writable PATH entry could shadow
|
|
11
|
+
// the binary). null if ps is unavailable, in which case ancestry checks degrade to "not within".
|
|
12
|
+
const PS_PATH = ['/bin/ps', '/usr/bin/ps'].find((p) => existsSync(p)) ?? null;
|
|
13
|
+
/** All processes as `{pid, command}` via `ps -ax` (full command line). Empty if ps is unavailable. */
|
|
14
|
+
export function listProcesses() {
|
|
15
|
+
if (PS_PATH === null)
|
|
16
|
+
return [];
|
|
17
|
+
try {
|
|
18
|
+
const out = execFileSync(PS_PATH, ['-axww', '-o', 'pid=,command='], {
|
|
19
|
+
encoding: 'utf8',
|
|
20
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
21
|
+
maxBuffer: 8 * 1024 * 1024,
|
|
22
|
+
});
|
|
23
|
+
const procs = [];
|
|
24
|
+
for (const line of out.split('\n')) {
|
|
25
|
+
const m = line.match(/^\s*(\d+)\s+(.*)$/);
|
|
26
|
+
if (m)
|
|
27
|
+
procs.push({ pid: Number(m[1]), command: m[2] });
|
|
28
|
+
}
|
|
29
|
+
return procs;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Parent pid of `pid` via ps, or null (no such process / ps unavailable). Best-effort. */
|
|
36
|
+
export function parentPid(pid) {
|
|
37
|
+
if (PS_PATH === null)
|
|
38
|
+
return null;
|
|
39
|
+
try {
|
|
40
|
+
const out = execFileSync(PS_PATH, ['-o', 'ppid=', '-p', String(pid)], {
|
|
41
|
+
encoding: 'utf8',
|
|
42
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
43
|
+
}).trim();
|
|
44
|
+
const ppid = Number(out);
|
|
45
|
+
return Number.isInteger(ppid) && ppid > 0 ? ppid : null;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null; // process gone / ps error
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Process start time as an opaque stable string (`ps -o lstart=`, portable on macOS + Linux — avoids
|
|
53
|
+
* brittle `/proc/<pid>/stat` parsing). Returns null if the process is gone / ps unavailable. Paired
|
|
54
|
+
* with the pid it forms a reuse-proof identity: a recycled pid gets a different start time, so the
|
|
55
|
+
* rogue reaper re-checks it before SIGKILL and never kills an innocent process that inherited the pid.
|
|
56
|
+
*/
|
|
57
|
+
export function processStartTime(pid) {
|
|
58
|
+
if (PS_PATH === null)
|
|
59
|
+
return null;
|
|
60
|
+
try {
|
|
61
|
+
const out = execFileSync(PS_PATH, ['-o', 'lstart=', '-p', String(pid)], {
|
|
62
|
+
encoding: 'utf8',
|
|
63
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
64
|
+
}).trim();
|
|
65
|
+
return out.length > 0 ? out : null;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null; // process gone / ps error
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* True if `pid` is one of `ancestors`, or descends from one — walking the parent chain via `getParent`.
|
|
73
|
+
* `getParent` is injectable so the traversal is unit-testable without real processes; production passes
|
|
74
|
+
* `parentPid`. Bounded by `maxHops` (and stops at init, pid ≤ 1) so a missing/cyclic chain can't loop.
|
|
75
|
+
*/
|
|
76
|
+
export function isPidWithin(pid, ancestors, getParent = parentPid, maxHops = 32) {
|
|
77
|
+
let current = pid;
|
|
78
|
+
for (let hops = 0; current !== null && hops <= maxHops; hops += 1) {
|
|
79
|
+
if (ancestors.has(current))
|
|
80
|
+
return true;
|
|
81
|
+
if (current <= 1)
|
|
82
|
+
return false; // reached init (or invalid) — not within the tracked tree
|
|
83
|
+
current = getParent(current);
|
|
84
|
+
}
|
|
85
|
+
return false; // exhausted hops / chain broke before reaching an ancestor
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=process-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-tree.js","sourceRoot":"","sources":["../../../src/cli/commands/process-tree.ts"],"names":[],"mappings":"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"}
|