@openrig/cli 0.3.4 → 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/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +34 -0
- package/daemon/dist/adapters/codex-resume.d.ts +2 -1
- package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-resume.js +18 -6
- package/daemon/dist/adapters/codex-resume.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +5 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +58 -5
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts +28 -14
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +65 -30
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/db/migrations/043_resume_provenance.d.ts +3 -0
- package/daemon/dist/db/migrations/043_resume_provenance.d.ts.map +1 -0
- package/daemon/dist/db/migrations/043_resume_provenance.js +5 -0
- package/daemon/dist/db/migrations/043_resume_provenance.js.map +1 -0
- package/daemon/dist/domain/agent-activity-store.d.ts +11 -1
- package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
- package/daemon/dist/domain/agent-activity-store.js +11 -2
- package/daemon/dist/domain/agent-activity-store.js.map +1 -1
- package/daemon/dist/domain/native-resume-probe.d.ts +2 -1
- package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
- package/daemon/dist/domain/native-resume-probe.js +21 -2
- package/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +70 -46
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts +7 -7
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +0 -22
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/profile-resolver.d.ts +4 -5
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +4 -0
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +21 -2
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/restore-check-service.d.ts +14 -0
- package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
- package/daemon/dist/domain/restore-check-service.js +78 -8
- package/daemon/dist/domain/restore-check-service.js.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +3 -3
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.js +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
- package/daemon/dist/domain/resume-token-validation.d.ts +17 -0
- package/daemon/dist/domain/resume-token-validation.d.ts.map +1 -0
- package/daemon/dist/domain/resume-token-validation.js +46 -0
- package/daemon/dist/domain/resume-token-validation.js.map +1 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +3 -6
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-adapter.js +1 -0
- package/daemon/dist/domain/runtime-adapter.js.map +1 -1
- package/daemon/dist/domain/scope/dot-id.d.ts +43 -0
- package/daemon/dist/domain/scope/dot-id.d.ts.map +1 -0
- package/daemon/dist/domain/scope/dot-id.js +165 -0
- package/daemon/dist/domain/scope/dot-id.js.map +1 -0
- package/daemon/dist/domain/scope/scope-audit.d.ts +26 -0
- package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -0
- package/daemon/dist/domain/scope/scope-audit.js +96 -0
- package/daemon/dist/domain/scope/scope-audit.js.map +1 -0
- package/daemon/dist/domain/scope/types.d.ts +61 -0
- package/daemon/dist/domain/scope/types.d.ts.map +1 -0
- package/daemon/dist/domain/scope/types.js +38 -0
- package/daemon/dist/domain/scope/types.js.map +1 -0
- package/daemon/dist/domain/seat-attention-reconciler.d.ts +12 -0
- package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/seat-attention-reconciler.js +116 -88
- package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
- package/daemon/dist/domain/session-registry.d.ts +15 -1
- package/daemon/dist/domain/session-registry.d.ts.map +1 -1
- package/daemon/dist/domain/session-registry.js +46 -4
- package/daemon/dist/domain/session-registry.js.map +1 -1
- package/daemon/dist/domain/skill-audit.d.ts +47 -0
- package/daemon/dist/domain/skill-audit.d.ts.map +1 -0
- package/daemon/dist/domain/skill-audit.js +218 -0
- package/daemon/dist/domain/skill-audit.js.map +1 -0
- package/daemon/dist/domain/skill-discovery.d.ts +15 -0
- package/daemon/dist/domain/skill-discovery.d.ts.map +1 -1
- package/daemon/dist/domain/skill-discovery.js +70 -0
- package/daemon/dist/domain/skill-discovery.js.map +1 -1
- package/daemon/dist/domain/skill-mirror-drift.d.ts +10 -0
- package/daemon/dist/domain/skill-mirror-drift.d.ts.map +1 -0
- package/daemon/dist/domain/skill-mirror-drift.js +24 -0
- package/daemon/dist/domain/skill-mirror-drift.js.map +1 -0
- package/daemon/dist/domain/startup-orchestrator.js +1 -1
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +38 -14
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +4 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/whoami-service.d.ts +1 -0
- package/daemon/dist/domain/whoami-service.d.ts.map +1 -1
- package/daemon/dist/domain/whoami-service.js +8 -4
- package/daemon/dist/domain/whoami-service.js.map +1 -1
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +25 -3
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/routes/activity.d.ts.map +1 -1
- package/daemon/dist/routes/activity.js +29 -0
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +8 -0
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/restore-check.js +33 -2
- package/daemon/dist/routes/restore-check.js.map +1 -1
- package/daemon/dist/routes/scope-audit.d.ts +3 -0
- package/daemon/dist/routes/scope-audit.d.ts.map +1 -0
- package/daemon/dist/routes/scope-audit.js +148 -0
- package/daemon/dist/routes/scope-audit.js.map +1 -0
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +67 -3
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/skills.d.ts.map +1 -1
- package/daemon/dist/routes/skills.js +43 -0
- package/daemon/dist/routes/skills.js.map +1 -1
- package/daemon/dist/routes/terminal-ws.d.ts +7 -0
- package/daemon/dist/routes/terminal-ws.d.ts.map +1 -0
- package/daemon/dist/routes/terminal-ws.js +132 -0
- package/daemon/dist/routes/terminal-ws.js.map +1 -0
- package/daemon/dist/routes/transport.d.ts +3 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +4 -1
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/routes/whoami.d.ts.map +1 -1
- package/daemon/dist/routes/whoami.js +5 -0
- package/daemon/dist/routes/whoami.js.map +1 -1
- package/daemon/dist/server.d.ts +6 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +29 -2
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts +8 -0
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +27 -8
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/dist/terminal/TerminalSessionBroker.d.ts +173 -0
- package/daemon/dist/terminal/TerminalSessionBroker.d.ts.map +1 -0
- package/daemon/dist/terminal/TerminalSessionBroker.js +570 -0
- package/daemon/dist/terminal/TerminalSessionBroker.js.map +1 -0
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +131 -2
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +29 -0
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +23 -0
- package/dist/client.js.map +1 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +6 -6
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +41 -5
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +27 -0
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +34 -0
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +361 -53
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +60 -3
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/restore-check.d.ts.map +1 -1
- package/dist/commands/restore-check.js +80 -2
- package/dist/commands/restore-check.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +688 -4
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/seat.d.ts +3 -1
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +61 -1
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +6 -6
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/skill.d.ts +4 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +77 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +27 -0
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +208 -20
- package/dist/commands/whoami.js.map +1 -1
- package/dist/cross-host-executor.d.ts +1 -1
- package/dist/cross-host-executor.d.ts.map +1 -1
- package/dist/cross-host-executor.js +3 -2
- package/dist/cross-host-executor.js.map +1 -1
- package/dist/cross-host-types.d.ts +2 -0
- package/dist/cross-host-types.d.ts.map +1 -0
- package/dist/cross-host-types.js +2 -0
- package/dist/cross-host-types.js.map +1 -0
- package/dist/host-registry.d.ts +27 -5
- package/dist/host-registry.d.ts.map +1 -1
- package/dist/host-registry.js +86 -19
- package/dist/host-registry.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/scope/progress-edit.d.ts +42 -0
- package/dist/lib/scope/progress-edit.d.ts.map +1 -0
- package/dist/lib/scope/progress-edit.js +171 -0
- package/dist/lib/scope/progress-edit.js.map +1 -0
- package/dist/lib/scope/scope-audit.d.ts +26 -0
- package/dist/lib/scope/scope-audit.d.ts.map +1 -0
- package/dist/lib/scope/scope-audit.js +96 -0
- package/dist/lib/scope/scope-audit.js.map +1 -0
- package/dist/lib/scope/templates.d.ts +2 -0
- package/dist/lib/scope/templates.d.ts.map +1 -1
- package/dist/lib/scope/templates.js +8 -0
- package/dist/lib/scope/templates.js.map +1 -1
- package/dist/lib/scope/trust.d.ts +30 -0
- package/dist/lib/scope/trust.d.ts.map +1 -0
- package/dist/lib/scope/trust.js +80 -0
- package/dist/lib/scope/trust.js.map +1 -0
- package/dist/lib/scope/types.d.ts +6 -0
- package/dist/lib/scope/types.d.ts.map +1 -1
- package/dist/lib/scope/types.js +8 -0
- package/dist/lib/scope/types.js.map +1 -1
- package/dist/lib/scope-templates/backlog-deprecation.md +1 -0
- package/dist/lib/scope-templates/backlog-tech-debt.md +1 -0
- package/dist/lib/scope-templates/bug-fix.md +1 -0
- package/dist/lib/scope-templates/mission-placeholder.md +1 -0
- package/dist/lib/scope-templates/mission-progress.md +12 -0
- package/dist/lib/scope-templates/mission-release.md +1 -0
- package/dist/lib/scope-templates/placeholder.md +1 -0
- package/dist/lib/scope-templates/release-feature.md +1 -0
- package/dist/lib/scope-templates/research.md +1 -0
- package/dist/lib/scope-templates/slice-progress.md +11 -0
- package/dist/remote-host-ops.d.ts +24 -0
- package/dist/remote-host-ops.d.ts.map +1 -0
- package/dist/remote-host-ops.js +53 -0
- package/dist/remote-host-ops.js.map +1 -0
- package/package.json +1 -1
- package/ui/dist/assets/index-DMI6jeAX.css +32 -0
- package/ui/dist/assets/index-FQgCB6mC.js +580 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-C_Q5FczU.css +0 -1
- package/ui/dist/assets/index-De6vv0yO.js +0 -552
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAiBvC,MAAM,UAAU,aAAa,CAAC,YAAyB;IACrD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,YAAY,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAE3H,KAAK,UAAU,SAAS,CAAC,IAAgB;QACvC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,GAAG;SACA,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;SACpC,QAAQ,CAAC,WAAW,EAAE,4CAA4C,CAAC;SACnE,MAAM,CAAC,eAAe,EAAE,+CAA+C,CAAC;SACxE,MAAM,CAAC,wBAAwB,EAAE,qCAAqC,CAAC;SACvE,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAA2B,EAAE,
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAsH,MAAM,qBAAqB,CAAC;AAC3K,OAAO,EAAE,mBAAmB,EAAE,KAAK,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAqM9F,MAAM,WAAW,MAAO,SAAQ,UAAU;IACxC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAC/D,YAAY,CAAC,EAAE,CACb,IAAI,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAC/C,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,CAAC,EAAE,uBAAuB,KAC3B,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;CAC7C;AAgSD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CA4RxD"}
|
package/dist/commands/ps.js
CHANGED
|
@@ -2,12 +2,19 @@ import { Command } from "commander";
|
|
|
2
2
|
import { DaemonClient } from "../client.js";
|
|
3
3
|
import { getDaemonStatus, getDaemonUrl } from "../daemon-lifecycle.js";
|
|
4
4
|
import { realDeps } from "./daemon.js";
|
|
5
|
-
import { loadHostRegistry, resolveHost } from "../host-registry.js";
|
|
5
|
+
import { loadHostRegistry, resolveHost, hostDisplayTarget, resolveRemoteBearer, classifyHttpFailedStep, classifyHttpError } from "../host-registry.js";
|
|
6
6
|
import { runCrossHostCommand } from "../cross-host-executor.js";
|
|
7
7
|
import { emitCrossHostError, emitCrossHostFailure } from "../cross-host-cli-helpers.js";
|
|
8
|
+
import { readOpenRigEnv } from "../openrig-compat.js";
|
|
8
9
|
// L3-followup: human-output budgets bound default terminal output for hosts
|
|
9
10
|
// with realistic agent counts. `--full` opts out. JSON output remains
|
|
10
11
|
// unbounded by default for back-compat (Decision C hybrid).
|
|
12
|
+
function extractRigName(sessionName) {
|
|
13
|
+
const atIdx = sessionName.lastIndexOf("@");
|
|
14
|
+
if (atIdx < 0 || atIdx === sessionName.length - 1)
|
|
15
|
+
return undefined;
|
|
16
|
+
return sessionName.slice(atIdx + 1);
|
|
17
|
+
}
|
|
11
18
|
const HUMAN_RIG_BUDGET = 50;
|
|
12
19
|
const HUMAN_NODE_BUDGET = 100;
|
|
13
20
|
// L3-followup: --filter accepts only this allow-list. Unknown keys produce a
|
|
@@ -261,6 +268,53 @@ function selectFields(entries, fields) {
|
|
|
261
268
|
return out;
|
|
262
269
|
});
|
|
263
270
|
}
|
|
271
|
+
function needsAttention(node) {
|
|
272
|
+
return node.lifecycleState === "attention_required"
|
|
273
|
+
|| node.startupStatus === "attention_required"
|
|
274
|
+
|| node.startupStatus === "failed"
|
|
275
|
+
|| node.agentActivity?.state === "needs_input";
|
|
276
|
+
}
|
|
277
|
+
// OPR.0.4.0.34 — the compact orch field set (PRD FR-4). Carries the
|
|
278
|
+
// source-available identity + state + resume-summary fields an orchestrator
|
|
279
|
+
// needs at a glance, WITHOUT leaking the resume token value or resumeCommand
|
|
280
|
+
// (security). recoveryGuidance/currentUsage stay on the node detail (slice 26).
|
|
281
|
+
function compactNodeProjection(nodes) {
|
|
282
|
+
return nodes.map((n) => {
|
|
283
|
+
const attention = needsAttention(n);
|
|
284
|
+
const compact = {
|
|
285
|
+
// identity (rigId/rigName + logicalId + session) — disambiguates under -A.
|
|
286
|
+
rigId: n.rigId,
|
|
287
|
+
rigName: n.rigName,
|
|
288
|
+
logicalId: n.logicalId,
|
|
289
|
+
canonicalSessionName: n.canonicalSessionName,
|
|
290
|
+
// lifecycle + session/startup state.
|
|
291
|
+
sessionStatus: n.sessionStatus,
|
|
292
|
+
startupStatus: n.startupStatus,
|
|
293
|
+
lifecycleState: n.lifecycleState,
|
|
294
|
+
// activity (state always; short reason only when attention — keep it lean).
|
|
295
|
+
agentActivity: attention
|
|
296
|
+
? { state: n.agentActivity?.state ?? "unknown", reason: n.agentActivity?.reason }
|
|
297
|
+
: { state: n.agentActivity?.state ?? "unknown" },
|
|
298
|
+
// work counts.
|
|
299
|
+
hasAssignedWork: n.hasAssignedWork,
|
|
300
|
+
pendingWorkCount: n.pendingWorkCount,
|
|
301
|
+
// resume summary — type + PRESENT boolean only (never the token value).
|
|
302
|
+
resumeType: n.resumeType ?? null,
|
|
303
|
+
resumeTokenPresent: Boolean(n.resumeToken),
|
|
304
|
+
// updated/age proxy. The node-list emits no dedicated `updatedAt`; the
|
|
305
|
+
// freshest signal is agentActivity.sampledAt, then startupCompletedAt,
|
|
306
|
+
// else null (documented FR-4 fallback — not a fabricated timestamp).
|
|
307
|
+
lastActivity: n.agentActivity?.sampledAt ?? n.startupCompletedAt ?? null,
|
|
308
|
+
};
|
|
309
|
+
// held/attention reason (short) when present.
|
|
310
|
+
if (n.heldReason)
|
|
311
|
+
compact.heldReason = n.heldReason;
|
|
312
|
+
if (attention && n.latestError) {
|
|
313
|
+
compact.latestError = n.latestError;
|
|
314
|
+
}
|
|
315
|
+
return compact;
|
|
316
|
+
});
|
|
317
|
+
}
|
|
264
318
|
function summarizeRigs(entries) {
|
|
265
319
|
const byLifecycle = {};
|
|
266
320
|
const byStatus = {};
|
|
@@ -329,32 +383,57 @@ export function psCommand(depsOverride) {
|
|
|
329
383
|
const cmd = new Command("ps")
|
|
330
384
|
.description("List rigs and their status")
|
|
331
385
|
.addHelpText("after", `
|
|
386
|
+
Default: current-rig scope (derived from OPENRIG_SESSION_NAME's @<rig> suffix).
|
|
387
|
+
Shows ALL states (stopped, recoverable, attention, idle — non-running IS the
|
|
388
|
+
actionable signal for topology/readiness). Use -A/--all-rigs for fleet breadth.
|
|
389
|
+
|
|
390
|
+
Compact defaults: 'rig ps --nodes' shows a compact summary per node
|
|
391
|
+
(rig, session, lifecycle, activity state, reason when attention, queue counts,
|
|
392
|
+
resume type + present indicator). Resume token values and resumeCommand are
|
|
393
|
+
excluded from compact output (security); use --full to see them.
|
|
394
|
+
|
|
395
|
+
Use '--full' (or '--verbose') for the uncompacted per-node payload (contextUsage
|
|
396
|
+
scalars, resume commands/tokens, agent references). Note (OPR.0.4.0.26): the
|
|
397
|
+
node-list payload carries recoveryGuidance: null and contextUsage.currentUsage:
|
|
398
|
+
null even with --full; fetch the full recovery guidance + currentUsage from the
|
|
399
|
+
single-node detail (/api/rigs/:rigId/nodes/:logicalId) or 'rig whoami'.
|
|
400
|
+
|
|
332
401
|
Examples:
|
|
333
|
-
rig ps
|
|
334
|
-
rig ps
|
|
335
|
-
rig ps --
|
|
402
|
+
rig ps Current rig summary (compact)
|
|
403
|
+
rig ps -A All rigs (fleet breadth)
|
|
404
|
+
rig ps --full Current rig, full detail
|
|
405
|
+
rig ps --json Current rig, compact JSON
|
|
406
|
+
rig ps -A --json All rigs, compact JSON
|
|
336
407
|
rig ps --json --limit 20 Bounded JSON envelope
|
|
337
|
-
rig ps --json --summary Aggregate-only JSON
|
|
408
|
+
rig ps --json --summary Aggregate-only JSON
|
|
338
409
|
rig ps --json --fields rigName,status,lifecycleState
|
|
339
410
|
Project JSON to named fields
|
|
340
411
|
rig ps --filter lifecycleState=attention_required
|
|
341
412
|
Show only rigs needing attention
|
|
342
413
|
rig ps --filter status=running Show only running rigs
|
|
343
414
|
rig ps --filter name-prefix=demo Filter by rig-name prefix
|
|
344
|
-
rig ps --nodes
|
|
415
|
+
rig ps --nodes Current rig per-node compact summary
|
|
416
|
+
rig ps --nodes -A All rigs per-node compact summary
|
|
417
|
+
rig ps --nodes --json Current rig per-node compact JSON
|
|
418
|
+
rig ps --nodes --json --full Complete per-node LIST payload (guidance/currentUsage relocated to node detail)
|
|
419
|
+
rig ps --nodes --json --rig openrig-build Compact nodes for a specific rig
|
|
420
|
+
rig ps --nodes --json --session dev1-impl@myrig Filter to a single session (within current rig; use -A for cross-rig)
|
|
345
421
|
rig ps --nodes --json --limit 50 Bounded per-node JSON envelope
|
|
346
|
-
rig ps --
|
|
347
|
-
rig ps --nodes --
|
|
422
|
+
rig ps --nodes --active Only nodes with agentActivity.state=running
|
|
423
|
+
rig ps --nodes --running Same as --active
|
|
348
424
|
rig ps --nodes --filter agentActivity.state=running
|
|
349
425
|
Same as --active (the explicit form)
|
|
350
|
-
rig ps --host vm-claude-test --nodes --json
|
|
426
|
+
rig ps --host vm-claude-test --nodes --json Remote host (no current-rig default)
|
|
427
|
+
rig ps --include-archived Include archived rigs (marked with *); hidden by default
|
|
428
|
+
|
|
429
|
+
--rig <name> overrides the current-rig default. -A/--all-rigs disables it.
|
|
430
|
+
--session <name> filters within the effective rig scope; use -A if the target
|
|
431
|
+
session is in a different rig.
|
|
351
432
|
|
|
352
|
-
|
|
353
|
-
compatibility; agent code should prefer \`rigName\` (matches per-node JSON).
|
|
433
|
+
--active/--running narrow to agentActivity.state=running. Cannot combine with --filter.
|
|
354
434
|
|
|
355
|
-
--filter accepts: status, lifecycleState, name-prefix, name, agentActivity.state
|
|
356
|
-
Other keys are rejected.
|
|
357
|
-
allowed values: running, needs_input, idle, unknown.
|
|
435
|
+
--filter accepts: status, lifecycleState, name-prefix, name, agentActivity.state,
|
|
436
|
+
contextUsage.percent, contextUsage.state. Other keys are rejected.
|
|
358
437
|
|
|
359
438
|
--fields accepts (rig-level): rigId, name, rigName, nodeCount, runningCount,
|
|
360
439
|
activeCount, hasWorkCount, status, lifecycleState, uptime, latestSnapshot.
|
|
@@ -362,17 +441,10 @@ activeCount, hasWorkCount, status, lifecycleState, uptime, latestSnapshot.
|
|
|
362
441
|
podNamespace, canonicalSessionName, nodeKind, runtime, sessionStatus,
|
|
363
442
|
startupStatus, restoreOutcome, lifecycleState, tmuxAttachCommand,
|
|
364
443
|
resumeCommand, latestError, terminalActive, hasAssignedWork,
|
|
365
|
-
pendingWorkCount, agentActivity
|
|
366
|
-
\`name\` is rig-level only; for node entries use \`rigName\`. Nested-field
|
|
367
|
-
projection (e.g. \`agentActivity.state\`) is not supported in this slice; pass
|
|
368
|
-
\`agentActivity\` to project the whole object and read the nested value
|
|
369
|
-
downstream.
|
|
444
|
+
pendingWorkCount, agentActivity, contextUsage, heldReason.
|
|
370
445
|
|
|
371
|
-
--host runs
|
|
372
|
-
|
|
373
|
-
output is what counts and is surfaced verbatim on success; failure is
|
|
374
|
-
distinguished into ssh-unreachable / permission-gate / remote-daemon-unreachable
|
|
375
|
-
/ remote-command-failed.
|
|
446
|
+
--host runs on a remote host declared in ~/.openrig/hosts.yaml (no current-rig
|
|
447
|
+
default applied; the remote host's rigs are shown).
|
|
376
448
|
|
|
377
449
|
Exit codes:
|
|
378
450
|
0 Success
|
|
@@ -381,18 +453,39 @@ Exit codes:
|
|
|
381
453
|
const getDepsF = () => depsOverride ?? { lifecycleDeps: realDeps(), clientFactory: (url) => new DaemonClient(url) };
|
|
382
454
|
cmd
|
|
383
455
|
.option("--json", "JSON output for agents")
|
|
384
|
-
.option("--nodes", "Show per-node detail for all rigs")
|
|
385
|
-
.option("--full", "
|
|
456
|
+
.option("--nodes", "Show per-node detail (current rig; -A for all rigs)")
|
|
457
|
+
.option("--full", "Show all node-list fields per node (uncompacted rows; node-list recoveryGuidance/currentUsage live on the node detail, not the list)")
|
|
458
|
+
.option("--verbose", "Alias for --full")
|
|
386
459
|
.option("--limit <n>", "Limit number of entries (rigs or nodes)")
|
|
387
460
|
.option("--fields <list>", "Comma-separated field list to project (JSON only)")
|
|
388
461
|
.option("--summary", "Emit aggregate-only output (counts by status/lifecycle)")
|
|
389
462
|
.option("--filter <key=value>", "Filter entries; supported keys: status, lifecycleState, name-prefix, name, agentActivity.state")
|
|
390
463
|
.option("--active", "Shortcut for --filter agentActivity.state=running (PL-019)")
|
|
464
|
+
.option("--running", "Alias for --active")
|
|
465
|
+
.option("-A, --all-rigs", "Show all rigs (default is current rig only)")
|
|
466
|
+
.option("--rig <name>", "Show only nodes belonging to the named rig")
|
|
467
|
+
.option("--session <name>", "Show only the node matching this canonical session name")
|
|
391
468
|
.option("--include-archived", "Include archived rigs (default hides them); parity with 'rig stream list --include-archived'")
|
|
392
|
-
.option("--host <id>", "Run on a remote host declared in ~/.openrig/hosts.yaml
|
|
469
|
+
.option("--host <id>", "Run on a remote host declared in ~/.openrig/hosts.yaml")
|
|
470
|
+
.option("--all-hosts", "Fan out to all registered HTTP hosts (observation-only)")
|
|
471
|
+
.option("--hosts <ids>", "Fan out to specific hosts (comma-separated)")
|
|
393
472
|
.action(async (opts) => {
|
|
473
|
+
if (opts.verbose)
|
|
474
|
+
opts.full = true;
|
|
475
|
+
if (opts.running)
|
|
476
|
+
opts.active = true;
|
|
477
|
+
const isRemote = !!(opts.host || opts.allHosts || opts.hosts);
|
|
478
|
+
if (!opts.allRigs && !opts.rig && !isRemote) {
|
|
479
|
+
const sessionName = readOpenRigEnv("OPENRIG_SESSION_NAME", "RIGGED_SESSION_NAME");
|
|
480
|
+
const callerRig = sessionName ? extractRigName(sessionName) : undefined;
|
|
481
|
+
if (callerRig)
|
|
482
|
+
opts.rig = callerRig;
|
|
483
|
+
}
|
|
394
484
|
const deps = getDepsF();
|
|
395
|
-
|
|
485
|
+
if (opts.allHosts || opts.hosts) {
|
|
486
|
+
await runFanOutPs(opts, deps);
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
396
489
|
if (opts.host) {
|
|
397
490
|
await runCrossHostPs(opts.host, opts, deps);
|
|
398
491
|
return;
|
|
@@ -467,8 +560,11 @@ Exit codes:
|
|
|
467
560
|
return;
|
|
468
561
|
}
|
|
469
562
|
const all = res.data;
|
|
563
|
+
const rigScoped = opts.rig
|
|
564
|
+
? all.filter((e) => (e.rigName ?? e.name) === opts.rig)
|
|
565
|
+
: all;
|
|
470
566
|
// Apply CLI-side filter (Amendment A: prefer CLI shaping).
|
|
471
|
-
const filtered = parsedFilter ? applyRigFilter(
|
|
567
|
+
const filtered = parsedFilter ? applyRigFilter(rigScoped, parsedFilter) : rigScoped;
|
|
472
568
|
// Summary mode short-circuits per-entry output.
|
|
473
569
|
if (opts.summary) {
|
|
474
570
|
const summary = summarizeRigs(filtered);
|
|
@@ -545,23 +641,31 @@ Exit codes:
|
|
|
545
641
|
});
|
|
546
642
|
return cmd;
|
|
547
643
|
}
|
|
548
|
-
async function handleNodes(client, opts, parsedFilter, limit, fields, useEnvelope) {
|
|
549
|
-
const rigRes = await client.get(psApiPath(opts));
|
|
644
|
+
async function handleNodes(client, opts, parsedFilter, limit, fields, useEnvelope, requestHeaders) {
|
|
645
|
+
const rigRes = await client.get(psApiPath(opts), requestHeaders ? { headers: requestHeaders } : undefined);
|
|
550
646
|
if (rigRes.status >= 400) {
|
|
551
647
|
console.error(`Failed to fetch rig list from daemon (HTTP ${rigRes.status}). Check daemon status with: rig status`);
|
|
552
648
|
process.exitCode = 2;
|
|
553
649
|
return;
|
|
554
650
|
}
|
|
651
|
+
const effectiveRigs = opts.rig
|
|
652
|
+
? rigRes.data.filter((r) => (r.rigName ?? r.name) === opts.rig)
|
|
653
|
+
: rigRes.data;
|
|
555
654
|
const allNodes = [];
|
|
556
|
-
for (const rig of
|
|
557
|
-
const nodesRes = await client.get(`/api/rigs/${encodeURIComponent(rig.rigId)}/nodes
|
|
655
|
+
for (const rig of effectiveRigs) {
|
|
656
|
+
const nodesRes = await client.get(`/api/rigs/${encodeURIComponent(rig.rigId)}/nodes`, requestHeaders ? { headers: requestHeaders } : undefined);
|
|
558
657
|
if (nodesRes.status >= 400) {
|
|
559
658
|
console.error(`Warning: failed to fetch nodes for rig "${rig.rigName ?? rig.name}" (HTTP ${nodesRes.status}). List rigs with: rig ps`);
|
|
560
659
|
continue;
|
|
561
660
|
}
|
|
562
661
|
allNodes.push(...nodesRes.data);
|
|
563
662
|
}
|
|
564
|
-
|
|
663
|
+
let narrowed = allNodes;
|
|
664
|
+
if (opts.rig)
|
|
665
|
+
narrowed = narrowed.filter((n) => n.rigName === opts.rig);
|
|
666
|
+
if (opts.session)
|
|
667
|
+
narrowed = narrowed.filter((n) => n.canonicalSessionName === opts.session);
|
|
668
|
+
const filtered = parsedFilter ? applyNodeFilter(narrowed, parsedFilter) : narrowed;
|
|
565
669
|
if (opts.summary) {
|
|
566
670
|
const summary = summarizeNodes(filtered);
|
|
567
671
|
if (opts.json) {
|
|
@@ -576,7 +680,12 @@ async function handleNodes(client, opts, parsedFilter, limit, fields, useEnvelop
|
|
|
576
680
|
}
|
|
577
681
|
const limited = limit !== null ? filtered.slice(0, limit) : filtered;
|
|
578
682
|
const limitTruncated = limit !== null && filtered.length > limit;
|
|
579
|
-
const
|
|
683
|
+
const useCompact = !opts.full && !fields;
|
|
684
|
+
const projected = fields
|
|
685
|
+
? selectFields(limited, fields)
|
|
686
|
+
: useCompact
|
|
687
|
+
? compactNodeProjection(limited)
|
|
688
|
+
: limited;
|
|
580
689
|
if (opts.json) {
|
|
581
690
|
if (useEnvelope) {
|
|
582
691
|
const envelope = {
|
|
@@ -604,17 +713,26 @@ async function handleNodes(client, opts, parsedFilter, limit, fields, useEnvelop
|
|
|
604
713
|
}
|
|
605
714
|
const humanList = (opts.full || limit !== null) ? limited : limited.slice(0, HUMAN_NODE_BUDGET);
|
|
606
715
|
const humanTruncated = !opts.full && limit === null && filtered.length > HUMAN_NODE_BUDGET;
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
716
|
+
if (useCompact) {
|
|
717
|
+
console.log(padCompactNodeRow("RIG", "SESSION", "LIFECYCLE", "ACTIVITY", "WORK", "REASON"));
|
|
718
|
+
for (const n of humanList) {
|
|
719
|
+
const attn = needsAttention(n);
|
|
720
|
+
const reason = attn
|
|
721
|
+
? (n.latestError ? truncate(n.latestError, 40) : n.agentActivity?.reason ?? "—")
|
|
722
|
+
: "—";
|
|
723
|
+
console.log(padCompactNodeRow(n.rigName, n.canonicalSessionName ?? "—", abbrevNodeLifecycle(n.lifecycleState), formatActivity(n.agentActivity), formatHasWork(n.hasAssignedWork, n.pendingWorkCount), reason));
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
else {
|
|
727
|
+
const header = padNodeRow("RIG", "POD", "MEMBER", "SESSION", "RUNTIME", "STATUS", "STARTUP", "LIFECYCLE", "TERMINAL", "WORK", "ACTIVITY", "CTX", "RESTORE", "ERROR");
|
|
728
|
+
console.log(header);
|
|
729
|
+
for (const n of humanList) {
|
|
730
|
+
const parts = n.logicalId.split(".");
|
|
731
|
+
const pod = n.podNamespace ?? (parts.length > 1 ? parts[0] : "—");
|
|
732
|
+
const member = parts.length > 1 ? parts.slice(1).join(".") : n.logicalId;
|
|
733
|
+
const rig = `${n.rigName}#${n.rigId}`;
|
|
734
|
+
console.log(padNodeRow(rig, pod, member, n.canonicalSessionName ?? "—", n.runtime ?? "—", n.sessionStatus ?? "—", n.startupStatus ?? "—", abbrevNodeLifecycle(n.lifecycleState), formatTerminalActive(n.terminalActive), formatHasWork(n.hasAssignedWork, n.pendingWorkCount), formatActivity(n.agentActivity), formatContextUsage(n.contextUsage), n.restoreOutcome, n.latestError ? truncate(n.latestError, 30) : n.heldReason ? `held: ${truncate(n.heldReason, 25)}` : "—"));
|
|
735
|
+
}
|
|
618
736
|
}
|
|
619
737
|
if (humanTruncated) {
|
|
620
738
|
const remaining = filtered.length - HUMAN_NODE_BUDGET;
|
|
@@ -679,6 +797,16 @@ function padNodeRow(rig, pod, member, session, runtime, status, startup, lifecyc
|
|
|
679
797
|
error,
|
|
680
798
|
].join("");
|
|
681
799
|
}
|
|
800
|
+
function padCompactNodeRow(rig, session, lifecycle, activity, work, reason) {
|
|
801
|
+
return [
|
|
802
|
+
fitCell(rig, 22),
|
|
803
|
+
fitCell(session, 38),
|
|
804
|
+
fitCell(lifecycle, 11),
|
|
805
|
+
fitCell(activity, 14),
|
|
806
|
+
fitCell(work, 6),
|
|
807
|
+
reason,
|
|
808
|
+
].join("");
|
|
809
|
+
}
|
|
682
810
|
// Slice 15 — render the terminal-active primitive honestly.
|
|
683
811
|
// `null` (no signal) is rendered distinctly from `false` (silent past
|
|
684
812
|
// threshold) so an operator can see whether the daemon hasn't observed
|
|
@@ -727,12 +855,21 @@ async function runCrossHostPs(hostId, opts, deps) {
|
|
|
727
855
|
return;
|
|
728
856
|
}
|
|
729
857
|
const host = resolved.host;
|
|
730
|
-
|
|
858
|
+
if (host.transport === "http") {
|
|
859
|
+
await runHttpPs(host, opts, deps);
|
|
860
|
+
return;
|
|
861
|
+
}
|
|
862
|
+
// SSH path — reconstruct argv
|
|
731
863
|
const argv = ["rig", "ps"];
|
|
732
864
|
if (opts.nodes)
|
|
733
865
|
argv.push("--nodes");
|
|
734
866
|
if (opts.full)
|
|
735
867
|
argv.push("--full");
|
|
868
|
+
// OPR.0.4.0.34: forward the breadth flag so `--host h -A` keeps all-rigs
|
|
869
|
+
// breadth across the hop (the current-rig default is local-only and never
|
|
870
|
+
// applied to a remote call, but an explicit -A must still reach the remote).
|
|
871
|
+
if (opts.allRigs)
|
|
872
|
+
argv.push("--all-rigs");
|
|
736
873
|
if (opts.limit !== undefined)
|
|
737
874
|
argv.push("--limit", opts.limit);
|
|
738
875
|
if (opts.fields !== undefined)
|
|
@@ -741,6 +878,14 @@ async function runCrossHostPs(hostId, opts, deps) {
|
|
|
741
878
|
argv.push("--summary");
|
|
742
879
|
if (opts.filter !== undefined)
|
|
743
880
|
argv.push("--filter", opts.filter);
|
|
881
|
+
// OPR.0.4.0.34: opts.active is the normalized form (set by --active OR
|
|
882
|
+
// --running). Forward it so the state filter survives the hop.
|
|
883
|
+
if (opts.active)
|
|
884
|
+
argv.push("--active");
|
|
885
|
+
if (opts.rig !== undefined)
|
|
886
|
+
argv.push("--rig", opts.rig);
|
|
887
|
+
if (opts.session !== undefined)
|
|
888
|
+
argv.push("--session", opts.session);
|
|
744
889
|
if (opts.includeArchived)
|
|
745
890
|
argv.push("--include-archived");
|
|
746
891
|
if (opts.json)
|
|
@@ -748,19 +893,16 @@ async function runCrossHostPs(hostId, opts, deps) {
|
|
|
748
893
|
const result = await runner(host, argv);
|
|
749
894
|
if (opts.json) {
|
|
750
895
|
if (result.ok) {
|
|
751
|
-
// Verbatim remote stdout passthrough — the remote `rig ps --json` already
|
|
752
|
-
// produced the correct JSON shape (bare array OR envelope per its own
|
|
753
|
-
// shaping flags); we do NOT double-wrap.
|
|
754
896
|
if (result.stdout)
|
|
755
897
|
process.stdout.write(result.stdout);
|
|
756
898
|
if (result.stderr)
|
|
757
899
|
process.stderr.write(result.stderr);
|
|
758
900
|
return;
|
|
759
901
|
}
|
|
760
|
-
emitCrossHostFailure(host.id, host
|
|
902
|
+
emitCrossHostFailure(host.id, hostDisplayTarget(host), result, true);
|
|
761
903
|
return;
|
|
762
904
|
}
|
|
763
|
-
console.log(`[via host=${host.id} (${host
|
|
905
|
+
console.log(`[via host=${host.id} (${hostDisplayTarget(host)})]`);
|
|
764
906
|
if (result.ok) {
|
|
765
907
|
if (result.stdout)
|
|
766
908
|
process.stdout.write(result.stdout);
|
|
@@ -768,6 +910,172 @@ async function runCrossHostPs(hostId, opts, deps) {
|
|
|
768
910
|
process.stderr.write(result.stderr);
|
|
769
911
|
return;
|
|
770
912
|
}
|
|
771
|
-
emitCrossHostFailure(host.id, host
|
|
913
|
+
emitCrossHostFailure(host.id, hostDisplayTarget(host), result, false);
|
|
914
|
+
}
|
|
915
|
+
function buildRemoteHeaders(token) {
|
|
916
|
+
return { Authorization: `Bearer ${token}` };
|
|
917
|
+
}
|
|
918
|
+
async function runHttpPs(host, opts, deps) {
|
|
919
|
+
const bearerResult = resolveRemoteBearer(host);
|
|
920
|
+
if (!bearerResult.ok) {
|
|
921
|
+
emitCrossHostError(host.id, bearerResult.failedStep, bearerResult.error, opts.json);
|
|
922
|
+
process.exitCode = 1;
|
|
923
|
+
return;
|
|
924
|
+
}
|
|
925
|
+
let effectiveFilter = opts.filter;
|
|
926
|
+
if (opts.active) {
|
|
927
|
+
if (effectiveFilter) {
|
|
928
|
+
console.error("--active and --filter cannot be combined.");
|
|
929
|
+
process.exitCode = 1;
|
|
930
|
+
return;
|
|
931
|
+
}
|
|
932
|
+
effectiveFilter = "agentActivity.state=running";
|
|
933
|
+
}
|
|
934
|
+
let parsedFilter = null;
|
|
935
|
+
if (effectiveFilter) {
|
|
936
|
+
const result = parseFilter(effectiveFilter);
|
|
937
|
+
if ("error" in result) {
|
|
938
|
+
console.error(result.error);
|
|
939
|
+
process.exitCode = 1;
|
|
940
|
+
return;
|
|
941
|
+
}
|
|
942
|
+
parsedFilter = result;
|
|
943
|
+
}
|
|
944
|
+
const limit = opts.limit !== undefined ? Number(opts.limit) : null;
|
|
945
|
+
if (limit !== null && (!Number.isInteger(limit) || limit < 0)) {
|
|
946
|
+
console.error(`--limit must be a non-negative integer; got '${opts.limit}'`);
|
|
947
|
+
process.exitCode = 1;
|
|
948
|
+
return;
|
|
949
|
+
}
|
|
950
|
+
let fields = null;
|
|
951
|
+
if (opts.fields !== undefined) {
|
|
952
|
+
const fieldsLevel = opts.nodes ? "nodes" : "rig";
|
|
953
|
+
const fieldsAllowed = fieldsLevel === "nodes" ? ALLOWED_NODE_FIELDS : ALLOWED_RIG_FIELDS;
|
|
954
|
+
const fieldsResult = parseFields(opts.fields, fieldsAllowed, fieldsLevel);
|
|
955
|
+
if ("error" in fieldsResult) {
|
|
956
|
+
console.error(fieldsResult.error);
|
|
957
|
+
process.exitCode = 1;
|
|
958
|
+
return;
|
|
959
|
+
}
|
|
960
|
+
fields = fieldsResult;
|
|
961
|
+
}
|
|
962
|
+
const client = deps.clientFactory(host.url);
|
|
963
|
+
const headers = buildRemoteHeaders(bearerResult.token);
|
|
964
|
+
const useEnvelope = parsedFilter !== null || limit !== null || fields !== null || opts.summary === true;
|
|
965
|
+
try {
|
|
966
|
+
if (opts.nodes) {
|
|
967
|
+
await handleNodes(client, opts, parsedFilter, limit, fields, useEnvelope, headers);
|
|
968
|
+
return;
|
|
969
|
+
}
|
|
970
|
+
const res = await client.get(psApiPath(opts), { headers });
|
|
971
|
+
const failedStep = classifyHttpFailedStep(res.status);
|
|
972
|
+
if (failedStep !== "none") {
|
|
973
|
+
emitCrossHostError(host.id, failedStep, `HTTP ${res.status}`, opts.json);
|
|
974
|
+
process.exitCode = 1;
|
|
975
|
+
return;
|
|
976
|
+
}
|
|
977
|
+
const all = Array.isArray(res.data) ? res.data : [];
|
|
978
|
+
const filtered = parsedFilter ? applyRigFilter(all, parsedFilter) : all;
|
|
979
|
+
if (opts.summary) {
|
|
980
|
+
const summary = summarizeRigs(filtered);
|
|
981
|
+
if (opts.json) {
|
|
982
|
+
console.log(JSON.stringify(summary));
|
|
983
|
+
}
|
|
984
|
+
else {
|
|
985
|
+
console.log(`[via host=${host.id} (${host.url})]`);
|
|
986
|
+
console.log(JSON.stringify(summary, null, 2));
|
|
987
|
+
}
|
|
988
|
+
return;
|
|
989
|
+
}
|
|
990
|
+
const limited = limit !== null ? filtered.slice(0, limit) : filtered;
|
|
991
|
+
const truncated = limit !== null && filtered.length > limit;
|
|
992
|
+
const projected = fields ? selectFields(limited, fields) : limited;
|
|
993
|
+
if (opts.json) {
|
|
994
|
+
if (useEnvelope) {
|
|
995
|
+
const envelope = { entries: projected, totalRigs: filtered.length, truncated };
|
|
996
|
+
console.log(JSON.stringify(envelope));
|
|
997
|
+
}
|
|
998
|
+
else {
|
|
999
|
+
console.log(JSON.stringify(projected));
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
else {
|
|
1003
|
+
console.log(`[via host=${host.id} (${host.url})]`);
|
|
1004
|
+
console.log(JSON.stringify(projected, null, 2));
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
catch (err) {
|
|
1008
|
+
const failedStep = classifyHttpError(err);
|
|
1009
|
+
emitCrossHostError(host.id, failedStep, err.message, opts.json);
|
|
1010
|
+
process.exitCode = 1;
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
async function runFanOutPs(opts, deps) {
|
|
1014
|
+
const loader = deps.hostRegistryLoader ?? loadHostRegistry;
|
|
1015
|
+
const registry = loader();
|
|
1016
|
+
if (!registry.ok) {
|
|
1017
|
+
console.error(`Error: ${registry.error}`);
|
|
1018
|
+
process.exitCode = 1;
|
|
1019
|
+
return;
|
|
1020
|
+
}
|
|
1021
|
+
const allHosts = registry.registry.hosts;
|
|
1022
|
+
let targetIds;
|
|
1023
|
+
if (opts.hosts) {
|
|
1024
|
+
targetIds = opts.hosts.split(",").map((s) => s.trim()).filter(Boolean);
|
|
1025
|
+
const unknown = targetIds.filter((id) => !allHosts.some((h) => h.id === id));
|
|
1026
|
+
if (unknown.length > 0) {
|
|
1027
|
+
console.error(`Error: unknown host ids: ${unknown.join(", ")}`);
|
|
1028
|
+
process.exitCode = 1;
|
|
1029
|
+
return;
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
1032
|
+
else {
|
|
1033
|
+
targetIds = allHosts.filter((h) => h.transport === "http").map((h) => h.id);
|
|
1034
|
+
}
|
|
1035
|
+
const results = await Promise.all(targetIds.map(async (id) => {
|
|
1036
|
+
const host = allHosts.find((h) => h.id === id);
|
|
1037
|
+
if (!host)
|
|
1038
|
+
return { host: id, ok: false, failedStep: "remote-daemon-unreachable", error: `unknown host ${id}` };
|
|
1039
|
+
if (host.transport !== "http") {
|
|
1040
|
+
return { host: id, ok: false, failedStep: "remote-command-failed", error: `host ${id} uses transport ${host.transport}; HTTP fan-out requires transport: http` };
|
|
1041
|
+
}
|
|
1042
|
+
const httpHost = host;
|
|
1043
|
+
const bearerResult = resolveRemoteBearer(httpHost);
|
|
1044
|
+
if (!bearerResult.ok) {
|
|
1045
|
+
return { host: id, ok: false, failedStep: bearerResult.failedStep, error: bearerResult.error };
|
|
1046
|
+
}
|
|
1047
|
+
const client = deps.clientFactory(httpHost.url);
|
|
1048
|
+
try {
|
|
1049
|
+
const psQuery = opts.includeArchived ? "?includeArchived=true" : "";
|
|
1050
|
+
const res = await client.get(`/api/ps${psQuery}`, {
|
|
1051
|
+
headers: buildRemoteHeaders(bearerResult.token),
|
|
1052
|
+
});
|
|
1053
|
+
const failedStep = classifyHttpFailedStep(res.status);
|
|
1054
|
+
if (failedStep !== "none") {
|
|
1055
|
+
return { host: id, ok: false, failedStep, error: `HTTP ${res.status}` };
|
|
1056
|
+
}
|
|
1057
|
+
return { host: id, ok: true, failedStep: "none", data: res.data };
|
|
1058
|
+
}
|
|
1059
|
+
catch (err) {
|
|
1060
|
+
return { host: id, ok: false, failedStep: classifyHttpError(err), error: err.message };
|
|
1061
|
+
}
|
|
1062
|
+
}));
|
|
1063
|
+
const hasFailure = results.some((r) => !r.ok);
|
|
1064
|
+
if (opts.json) {
|
|
1065
|
+
console.log(JSON.stringify({ hosts: results }));
|
|
1066
|
+
}
|
|
1067
|
+
else {
|
|
1068
|
+
for (const r of results) {
|
|
1069
|
+
if (r.ok) {
|
|
1070
|
+
console.log(`\n[host=${r.host}]`);
|
|
1071
|
+
console.log(JSON.stringify(r.data, null, 2));
|
|
1072
|
+
}
|
|
1073
|
+
else {
|
|
1074
|
+
console.log(`\n[host=${r.host}] FAILED (${r.failedStep}): ${r.error}`);
|
|
1075
|
+
}
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
if (hasFailure)
|
|
1079
|
+
process.exitCode = 3;
|
|
772
1080
|
}
|
|
773
1081
|
//# sourceMappingURL=ps.js.map
|