fleet update

This commit is contained in:
thePR0M3TH3AN committed 2026-10-22 16:38:46 -04:00
1 parent 75bc92f3a4
commit d917053daa
15 files changed
+1090 -37

No files matched your search

+11 -3
View File
@@ -38,6 +38,7 @@
// the same tools as tools/fleet/bin/<name>.mjs
// fleet status areas, run state (running / exited / failed / timeout / stopped), lander up or down
// fleet wakes recent wake attempts, and plain words for a likely failure
// fleet health [--json] one snapshot: CPU, memory, disk, temps, battery, per-area use
// fleet prompt <id> print the composed system prompt for an area
// fleet crontab PRINT the crontab lines for scheduled jobs (never installs)
// fleet run-job <name> one headless run of docs/agents/schedules/<name>.md (sched.sh calls this)
@@ -53,6 +54,7 @@ import { spawnSync } from 'node:child_process';
import { KIT, loadConfig, loadAdapter, area as getArea, dispatcher, sessionName, flag, die, writeAtomic, tryGit, mainRef, today, runProcessGroup, runForeground, finishHeadless, withHandoff, applyHeadlessSession, assignLaunchSession, areaBudgetMin, readRun, writeRun, outcomeOfRun, pidAlive, killProcessGroup, landerIsUp, landerPid, startLander, writableRoots } from './lib.mjs';
import { commitWork, setupCommit, tellDispatch, hearInterpreter, fleetStatus } from './core/ops.mjs';
import { readWakeLog } from './core/wake-log.mjs';
import { fleetHealth, formatHealth } from './core/health.mjs';
import { fleetUpdate, recordInstalled, isTemplatePath } from './core/update.mjs';
const argv = process.argv.slice(2);
@@ -101,7 +103,7 @@ function composePrompt(a, adapter) {
'area.neighbours': a.neighbours.join(', ') || '(none listed)',
'area.branch': a.branch, 'area.worktree': a.worktree, mainBranch: c.mainBranch, peers,
dispatcher: dispatcher(c)?.id ?? '(none)', gate: c.gates.land ?? '(no gate configured)',
quietHours: c.clock.quietHours.join('–'), messaging: adapter.messaging?.instructions ?? '',
quietHours: c.clock.quietHours.join('–'), stateDir: c.stateDir, messaging: adapter.messaging?.instructions ?? '',
};
return `${common}\n\n${own}`.replace(/\{\{([\w.]+)\}\}/g, (m, k) => vars[k] ?? m);
}
@@ -310,6 +312,12 @@ async function status() {
for (const id of report.recovered) console.log(`nudged ${id} again`);
}
function healthCmd() {
const report = fleetHealth(c);
if (argv.includes('--json')) console.log(JSON.stringify(report, null, 2));
else console.log(formatHealth(report));
}
function wakesCmd() {
const report = readWakeLog(c);
if (!report.entries.length) {
@@ -319,7 +327,7 @@ function wakesCmd() {
console.log(report.path);
for (const e of report.entries) {
if (e.kind === 'stale') console.log(`${e.t} stale ${e.area} ${e.file} ${e.flag}`);
else console.log(`${e.t} ${e.trigger} ${e.area} ${e.window} ${e.file || '-'} ${e.action} enter=${e.enterAttempts} ${e.outcome} ${e.flag}`);
else console.log(`${e.t} ${e.trigger} ${e.area} ${e.window} ${e.file || '-'} ${e.action} enter=${e.enterAttempts}${Array.isArray(e.enterDelays) && e.enterDelays.length ? ` delays=${e.enterDelays.join('+')}` : ''} ${e.outcome} ${e.flag}`);
}
}
@@ -633,7 +641,7 @@ function tool(name) {
const run = { up, down, status, supervise: () => supervise(argv[1]), worktrees, crontab,
prompt: async () => console.log(composePrompt(getArea(c, argv[1]), await adapterFor(getArea(c, argv[1]).harness))),
'run-job': () => runJob(argv[1]), 'sched-env': () => schedEnv(argv[1]), lander: () => lander(argv[1] ?? 'status'),
commit: commitCmd, 'setup-commit': setupCommitCmd, update: updateCmd, tell: tellCmd, hear: hearCmd, wakes: wakesCmd,
commit: commitCmd, 'setup-commit': setupCommitCmd, update: updateCmd, tell: tellCmd, hear: hearCmd, wakes: wakesCmd, health: healthCmd,
doctor: () => tool('doctor'), landq: () => tool('landq'), backlog: () => tool('backlog'),
mailbox: () => tool('mailbox') }[cmd];
if (!run) die(`unknown command "${cmd}" (fleet help)`);