@songsid/agend 2.1.10 → 2.1.11-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/backend/antigravity.js +3 -2
  2. package/dist/backend/antigravity.js.map +1 -1
  3. package/dist/backend/claude-code.d.ts +7 -0
  4. package/dist/backend/claude-code.js +107 -3
  5. package/dist/backend/claude-code.js.map +1 -1
  6. package/dist/backend/cli-env-probe-worker.js +2 -10
  7. package/dist/backend/cli-env-probe-worker.js.map +1 -1
  8. package/dist/backend/cli-env-probe.d.ts +14 -0
  9. package/dist/backend/cli-env-probe.js +13 -0
  10. package/dist/backend/cli-env-probe.js.map +1 -0
  11. package/dist/backend/codex-metadata.d.ts +14 -0
  12. package/dist/backend/codex-metadata.js +70 -0
  13. package/dist/backend/codex-metadata.js.map +1 -0
  14. package/dist/backend/codex.d.ts +1 -2
  15. package/dist/backend/codex.js +112 -65
  16. package/dist/backend/codex.js.map +1 -1
  17. package/dist/backend/effort-metadata.d.ts +32 -0
  18. package/dist/backend/effort-metadata.js +21 -0
  19. package/dist/backend/effort-metadata.js.map +1 -0
  20. package/dist/backend/grok.js +3 -2
  21. package/dist/backend/grok.js.map +1 -1
  22. package/dist/backend/kiro.d.ts +3 -0
  23. package/dist/backend/kiro.js +19 -4
  24. package/dist/backend/kiro.js.map +1 -1
  25. package/dist/backend/muse.js +3 -2
  26. package/dist/backend/muse.js.map +1 -1
  27. package/dist/backend/opencode.d.ts +31 -4
  28. package/dist/backend/opencode.js +66 -23
  29. package/dist/backend/opencode.js.map +1 -1
  30. package/dist/backend/types.d.ts +14 -1
  31. package/dist/backend/types.js.map +1 -1
  32. package/dist/channel/adapters/discord.js +10 -2
  33. package/dist/channel/adapters/discord.js.map +1 -1
  34. package/dist/cli.js +48 -6
  35. package/dist/cli.js.map +1 -1
  36. package/dist/config.js +1 -0
  37. package/dist/config.js.map +1 -1
  38. package/dist/daemon.d.ts +24 -0
  39. package/dist/daemon.js +109 -12
  40. package/dist/daemon.js.map +1 -1
  41. package/dist/doctor.d.ts +3 -1
  42. package/dist/doctor.js +11 -0
  43. package/dist/doctor.js.map +1 -1
  44. package/dist/fleet-context.d.ts +2 -2
  45. package/dist/fleet-control-audit.d.ts +83 -0
  46. package/dist/fleet-control-audit.js +195 -0
  47. package/dist/fleet-control-audit.js.map +1 -0
  48. package/dist/fleet-manager.d.ts +45 -35
  49. package/dist/fleet-manager.js +327 -384
  50. package/dist/fleet-manager.js.map +1 -1
  51. package/dist/full-restart.js +2 -1
  52. package/dist/full-restart.js.map +1 -1
  53. package/dist/general-knowledge/skills/fleet-config/SKILL.md +3 -2
  54. package/dist/host-memory.d.ts +16 -0
  55. package/dist/host-memory.js +32 -0
  56. package/dist/host-memory.js.map +1 -0
  57. package/dist/instance-lifecycle.js +4 -1
  58. package/dist/instance-lifecycle.js.map +1 -1
  59. package/dist/locale.js +62 -16
  60. package/dist/locale.js.map +1 -1
  61. package/dist/log-tail.d.ts +34 -0
  62. package/dist/log-tail.js +66 -0
  63. package/dist/log-tail.js.map +1 -0
  64. package/dist/logger.d.ts +15 -0
  65. package/dist/logger.js +89 -1
  66. package/dist/logger.js.map +1 -1
  67. package/dist/login-controller.d.ts +1 -3
  68. package/dist/login-controller.js +2 -6
  69. package/dist/login-controller.js.map +1 -1
  70. package/dist/login-flows.d.ts +0 -8
  71. package/dist/login-flows.js +1 -11
  72. package/dist/login-flows.js.map +1 -1
  73. package/dist/login-manager.d.ts +5 -20
  74. package/dist/login-manager.js +0 -53
  75. package/dist/login-manager.js.map +1 -1
  76. package/dist/login-window-lock.d.ts +1 -1
  77. package/dist/login-window-lock.js +1 -1
  78. package/dist/memory-pressure.d.ts +41 -0
  79. package/dist/memory-pressure.js +117 -0
  80. package/dist/memory-pressure.js.map +1 -0
  81. package/dist/probe-worker-pool.d.ts +28 -0
  82. package/dist/probe-worker-pool.js +129 -0
  83. package/dist/probe-worker-pool.js.map +1 -0
  84. package/dist/resource-report.d.ts +31 -0
  85. package/dist/resource-report.js +209 -0
  86. package/dist/resource-report.js.map +1 -0
  87. package/dist/rollout-index.d.ts +66 -0
  88. package/dist/rollout-index.js +124 -0
  89. package/dist/rollout-index.js.map +1 -0
  90. package/dist/slash-authz.d.ts +50 -0
  91. package/dist/slash-authz.js +19 -0
  92. package/dist/slash-authz.js.map +1 -0
  93. package/dist/spawn-gate.d.ts +13 -1
  94. package/dist/spawn-gate.js +108 -39
  95. package/dist/spawn-gate.js.map +1 -1
  96. package/dist/storm-window.d.ts +42 -0
  97. package/dist/storm-window.js +84 -1
  98. package/dist/storm-window.js.map +1 -1
  99. package/dist/topic-commands.d.ts +29 -2
  100. package/dist/topic-commands.js +77 -21
  101. package/dist/topic-commands.js.map +1 -1
  102. package/dist/transcript-sources.d.ts +21 -4
  103. package/dist/transcript-sources.js +55 -41
  104. package/dist/transcript-sources.js.map +1 -1
  105. package/dist/types.d.ts +5 -1
  106. package/dist/ui/settings.html +14 -13
  107. package/package.json +1 -1
package/dist/doctor.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { type SpawnSyncReturns } from "node:child_process";
2
2
  import type { ServiceInfo } from "./service-installer.js";
3
+ import { type ResourceReport } from "./resource-report.js";
3
4
  import { type NetworkFamilyState } from "./network-family.js";
4
5
  export type DoctorCheckStatus = "ok" | "warn" | "error";
5
6
  export interface DoctorCheck {
6
- section: "Prerequisites" | "Service" | "Fleet" | "Channel gateways" | "MCP IPC";
7
+ section: "Prerequisites" | "Service" | "Fleet" | "Channel gateways" | "MCP IPC" | "Resources";
7
8
  status: DoctorCheckStatus;
8
9
  label: string;
9
10
  detail: string;
@@ -20,6 +21,7 @@ interface DoctorDeps {
20
21
  processAlive: (pid: number) => boolean;
21
22
  connectSocket: (path: string) => Promise<boolean>;
22
23
  networkFamily: () => NetworkFamilyState;
24
+ collectResources: (dataDir: string) => Promise<ResourceReport>;
23
25
  fetchFleetHealth: (port: number) => Promise<{
24
26
  adapters?: {
25
27
  details?: Record<string, {
package/dist/doctor.js CHANGED
@@ -8,6 +8,7 @@ import { hasPausedMarker } from "./pause-marker.js";
8
8
  import { getTmuxSessionName, getTmuxSocketName } from "./paths.js";
9
9
  import { BACKENDS } from "./setup-wizard.js";
10
10
  import { t } from "./locale.js";
11
+ import { collectResourceReport, resourceChecks } from "./resource-report.js";
11
12
  import { AGEND_NETWORK_FAMILY_ATTEMPT_TIMEOUT_MS, getNetworkFamilyState, } from "./network-family.js";
12
13
  const defaultDeps = {
13
14
  env: process.env,
@@ -24,6 +25,7 @@ const defaultDeps = {
24
25
  },
25
26
  connectSocket: connectUnixSocket,
26
27
  networkFamily: getNetworkFamilyState,
28
+ collectResources: collectResourceReport,
27
29
  fetchFleetHealth: async (port) => {
28
30
  const response = await fetch(`http://127.0.0.1:${port}/health`, { signal: AbortSignal.timeout(3000) });
29
31
  return await response.json();
@@ -231,6 +233,14 @@ export async function collectDoctorReport(dataDir, service, overrides = {}) {
231
233
  add("MCP IPC", ipcProblems.length === 0 ? "ok" : "error", "channel.sock", ipcProblems.length === 0
232
234
  ? t("doctor.ipc_ok", connected, runningNames.length)
233
235
  : t("doctor.ipc_failed", connected, runningNames.length, ipcProblems.join(", ")));
236
+ try {
237
+ for (const check of resourceChecks(await deps.collectResources(dataDir))) {
238
+ add("Resources", check.status, check.label, check.detail);
239
+ }
240
+ }
241
+ catch {
242
+ add("Resources", "warn", t("resources.title"), t("resources.report_unknown"));
243
+ }
234
244
  return {
235
245
  checks,
236
246
  errors: checks.filter(check => check.status === "error").length,
@@ -244,6 +254,7 @@ export function formatDoctorReport(report) {
244
254
  Fleet: t("doctor.section.fleet"),
245
255
  "Channel gateways": t("doctor.section.gateways"),
246
256
  "MCP IPC": t("doctor.section.ipc"),
257
+ Resources: t("resources.title"),
247
258
  };
248
259
  const lines = ["", ` \x1b[1m${t("doctor.title")}\x1b[0m`];
249
260
  let section;
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
@@ -87,6 +87,8 @@ export interface FleetContext {
87
87
  cancelInstance(instanceName: string): boolean;
88
88
  /** Explicit YAML allowlist entries are fleet administrators. Runtime-paired/open users are not. */
89
89
  isFleetAdmin(userId: string, adapterId?: string): boolean;
90
+ /** Whether the adapter has any fleet admin at all (an empty allowlist turns the admin commands off). */
91
+ hasFleetAdmins(adapterId?: string): boolean;
90
92
  changeInstancePauseState(name: string, action: "pause" | "wake"): Promise<"paused" | "awake" | "not_idle">;
91
93
  startInstance(name: string, config: InstanceConfig, topicMode: boolean): Promise<void>;
92
94
  stopInstance(name: string): Promise<void>;
@@ -143,8 +145,6 @@ export interface FleetContext {
143
145
  skipAuthCheck?: boolean;
144
146
  tokenPresent?: boolean;
145
147
  }): Promise<string | null>;
146
- /** Paste admin-supplied text (auth code / start URL) into the login window. */
147
- loginSubmitInput?(text: string): Promise<string>;
148
148
  /** Abort the active login session. */
149
149
  cancelLoginSession?(): Promise<string>;
150
150
  /** Human-readable effective model for an instance (resolves inherited defaults). */
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Who stopped / restarted / updated the fleet (#1120).
3
+ *
4
+ * 2026-10-03 01:19 an unplanned `agend restart` ran from inside an agent's shell
5
+ * (a backtick in a `gh --body "..."` was command-substituted) and the only way
6
+ * to find the source was journal timing plus a kiro transcript: the fleet.log
7
+ * that would have said so is truncated by the restart itself. So the CLI writes
8
+ * one line to its OWN file before it acts, and a fleet-wide stop / restart /
9
+ * update started from a fleet agent's session — or from a test runner — has to
10
+ * be confirmed or is refused.
11
+ *
12
+ * Observability and a guard rail only: this changes nothing about delivery,
13
+ * authorisation or what a confirmed command does.
14
+ */
15
+ export declare const AUDIT_FILE = "restart-audit.log";
16
+ /** Set by the fleet's own spawn sites: an internal, already-authorised call. */
17
+ export declare const ORIGIN_ENV = "AGEND_RESTART_ORIGIN";
18
+ /** The environment for a child the fleet spawns to stop / restart / update itself. */
19
+ export declare function withOrigin(origin: string, env?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
20
+ /** Escape hatch for a test that really means to run the CLI against a scratch fleet (exactly "1"). */
21
+ export declare const ALLOW_TEST_ENV = "AGEND_ALLOW_TEST_FLEET_CONTROL";
22
+ export type FleetControlAction = "fleet-stop" | "fleet-restart" | "fleet-restart-reload" | "stop" | "restart" | "update" | "instance-stop" | "instance-restart";
23
+ export interface CallerProcess {
24
+ pid: number;
25
+ command: string;
26
+ }
27
+ export interface CallerInfo {
28
+ pid: number;
29
+ /** This process first, then its parents up to the init process (bounded). */
30
+ chain: CallerProcess[];
31
+ cwd: string;
32
+ user: string;
33
+ /** stdin is a terminal: an interactive shell, not a pipe or a command substitution. */
34
+ tty: boolean;
35
+ /** AGEND_INSTANCE_NAME: set in every fleet agent's session, and inherited by everything it runs. */
36
+ instance: string | null;
37
+ /** AGEND_RESTART_ORIGIN: the fleet's own spawn site, when it was one. */
38
+ origin: string | null;
39
+ ssh: boolean;
40
+ }
41
+ export type Verdict = {
42
+ ok: true;
43
+ via: "interactive" | "yes" | "origin";
44
+ } | {
45
+ ok: false;
46
+ reason: "agent-session" | "test-runner";
47
+ };
48
+ /** Pure: may this call go ahead? `yes` is the explicit `--yes`. */
49
+ export declare function judgeFleetControl(env: NodeJS.ProcessEnv, yes: boolean): Verdict;
50
+ export declare function describeCaller(env?: NodeJS.ProcessEnv, maxDepth?: number): CallerInfo;
51
+ export interface AuditEntry {
52
+ ts: string;
53
+ action: FleetControlAction;
54
+ target?: string;
55
+ outcome: "allowed" | "refused";
56
+ detail?: string;
57
+ caller: CallerInfo;
58
+ }
59
+ /** Best effort: an audit line must never be the reason a restart fails. */
60
+ export declare function appendAudit(dataDir: string, entry: AuditEntry): void;
61
+ /** The newest entry written within `withinMs`, for the fleet to name in its own log. */
62
+ export declare function readRecentAudit(dataDir: string, withinMs: number, now?: number): AuditEntry | null;
63
+ /** What the fleet writes into its own log when a signal arrives: who asked, if the CLI said so lately. */
64
+ export declare function describeSignalSource(dataDir: string, signal: string, now?: number): string;
65
+ /** One-line form for a log message. */
66
+ export declare function summariseCaller(entry: AuditEntry): string;
67
+ export declare function refusalMessage(action: FleetControlAction, reason: "agent-session" | "test-runner", instance: string | null): string;
68
+ /**
69
+ * The CLI's gate: record the call, then let it through or refuse it. Returns
70
+ * whether to go ahead; the caller prints nothing and exits on `false`.
71
+ */
72
+ export declare function gateFleetControl(dataDir: string, action: FleetControlAction, opts: {
73
+ yes?: boolean;
74
+ target?: string;
75
+ }, env?: NodeJS.ProcessEnv, report?: (message: string) => void): boolean;
76
+ /** Instance-level stop/restart: recorded for the trail, never blocked (agents do this routinely). */
77
+ export declare function recordInstanceControl(dataDir: string, action: "instance-stop" | "instance-restart", target: string, env?: NodeJS.ProcessEnv): void;
78
+ /**
79
+ * The fleet's own entry points (a /restart or /update slash command, the full-restart
80
+ * helper): written by the fleet process, so the signal or child it sends next can be
81
+ * traced to the person who asked, not just to "the fleet itself".
82
+ */
83
+ export declare function recordInternalRequest(dataDir: string, action: FleetControlAction, origin: string, env?: NodeJS.ProcessEnv): void;
@@ -0,0 +1,195 @@
1
+ import { appendFileSync, existsSync, readFileSync, renameSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { readProcessCommandLine } from "./fleet-lock.js";
4
+ /**
5
+ * Who stopped / restarted / updated the fleet (#1120).
6
+ *
7
+ * 2026-10-03 01:19 an unplanned `agend restart` ran from inside an agent's shell
8
+ * (a backtick in a `gh --body "..."` was command-substituted) and the only way
9
+ * to find the source was journal timing plus a kiro transcript: the fleet.log
10
+ * that would have said so is truncated by the restart itself. So the CLI writes
11
+ * one line to its OWN file before it acts, and a fleet-wide stop / restart /
12
+ * update started from a fleet agent's session — or from a test runner — has to
13
+ * be confirmed or is refused.
14
+ *
15
+ * Observability and a guard rail only: this changes nothing about delivery,
16
+ * authorisation or what a confirmed command does.
17
+ */
18
+ export const AUDIT_FILE = "restart-audit.log";
19
+ const AUDIT_MAX_BYTES = 512 * 1024;
20
+ /** Set by the fleet's own spawn sites: an internal, already-authorised call. */
21
+ export const ORIGIN_ENV = "AGEND_RESTART_ORIGIN";
22
+ /** The environment for a child the fleet spawns to stop / restart / update itself. */
23
+ export function withOrigin(origin, env = process.env) {
24
+ return { ...env, [ORIGIN_ENV]: origin };
25
+ }
26
+ /** Escape hatch for a test that really means to run the CLI against a scratch fleet (exactly "1"). */
27
+ export const ALLOW_TEST_ENV = "AGEND_ALLOW_TEST_FLEET_CONTROL";
28
+ /** Pure: may this call go ahead? `yes` is the explicit `--yes`. */
29
+ export function judgeFleetControl(env, yes) {
30
+ // First, and even for the fleet's own spawn sites: a handler a test drives for real
31
+ // must not reach the live fleet just because it set its origin (fleet decision bd0c88aa).
32
+ const underTestRunner = !!env.VITEST || env.NODE_ENV === "test";
33
+ if (underTestRunner && env[ALLOW_TEST_ENV] !== "1")
34
+ return { ok: false, reason: "test-runner" };
35
+ const origin = (env[ORIGIN_ENV] ?? "").trim();
36
+ if (origin)
37
+ return { ok: true, via: "origin" };
38
+ if ((env.AGEND_INSTANCE_NAME ?? "").trim() && !yes)
39
+ return { ok: false, reason: "agent-session" };
40
+ return { ok: true, via: yes ? "yes" : "interactive" };
41
+ }
42
+ function parentPid(pid) {
43
+ try {
44
+ // "pid (comm) S ppid ..." — comm may contain spaces and parentheses.
45
+ const stat = readFileSync(`/proc/${pid}/stat`, "utf8");
46
+ const rest = stat.slice(stat.lastIndexOf(")") + 2).split(" ");
47
+ const ppid = Number.parseInt(rest[1] ?? "", 10);
48
+ return Number.isInteger(ppid) ? ppid : 0;
49
+ }
50
+ catch {
51
+ return 0;
52
+ }
53
+ }
54
+ export function describeCaller(env = process.env, maxDepth = 6) {
55
+ const chain = [];
56
+ let pid = process.pid;
57
+ for (let depth = 0; depth < maxDepth && pid > 0; depth++) {
58
+ chain.push({ pid, command: readProcessCommandLine(pid).slice(0, 300) });
59
+ const next = parentPid(pid);
60
+ if (next <= 1 || next === pid)
61
+ break;
62
+ pid = next;
63
+ }
64
+ let user = "";
65
+ try {
66
+ user = env.USER ?? env.LOGNAME ?? "";
67
+ }
68
+ catch { /* ignore */ }
69
+ return {
70
+ pid: process.pid,
71
+ chain,
72
+ cwd: (() => { try {
73
+ return process.cwd();
74
+ }
75
+ catch {
76
+ return "";
77
+ } })(),
78
+ user,
79
+ tty: !!process.stdin.isTTY,
80
+ instance: (env.AGEND_INSTANCE_NAME ?? "").trim() || null,
81
+ origin: (env[ORIGIN_ENV] ?? "").trim() || null,
82
+ ssh: !!(env.SSH_CONNECTION || env.SSH_TTY),
83
+ };
84
+ }
85
+ /** Best effort: an audit line must never be the reason a restart fails. */
86
+ export function appendAudit(dataDir, entry) {
87
+ try {
88
+ const path = join(dataDir, AUDIT_FILE);
89
+ try {
90
+ if (existsSync(path) && statSync(path).size > AUDIT_MAX_BYTES)
91
+ renameSync(path, `${path}.1`);
92
+ }
93
+ catch { /* rotation is a nicety */ }
94
+ appendFileSync(path, `${JSON.stringify(entry)}\n`, { mode: 0o600 });
95
+ }
96
+ catch { /* unwritable data dir */ }
97
+ }
98
+ /** The newest entry written within `withinMs`, for the fleet to name in its own log. */
99
+ export function readRecentAudit(dataDir, withinMs, now = Date.now()) {
100
+ try {
101
+ const lines = readFileSync(join(dataDir, AUDIT_FILE), "utf8").trimEnd().split("\n");
102
+ for (let i = lines.length - 1; i >= 0 && i >= lines.length - 20; i--) {
103
+ try {
104
+ const entry = JSON.parse(lines[i]);
105
+ if (entry.outcome !== "allowed")
106
+ continue;
107
+ // A routine instance stop/restart sends no signal to the fleet process: naming it
108
+ // would blame the wrong request for a SIGUSR1/SIGTERM it did not cause.
109
+ if (entry.action === "instance-stop" || entry.action === "instance-restart")
110
+ continue;
111
+ const age = now - Date.parse(entry.ts);
112
+ if (age >= 0 && age <= withinMs)
113
+ return entry;
114
+ }
115
+ catch { /* a torn line */ }
116
+ }
117
+ }
118
+ catch { /* no audit file yet */ }
119
+ return null;
120
+ }
121
+ /** What the fleet writes into its own log when a signal arrives: who asked, if the CLI said so lately. */
122
+ export function describeSignalSource(dataDir, signal, now = Date.now()) {
123
+ const entry = readRecentAudit(dataDir, 2 * 60_000, now);
124
+ return entry
125
+ ? `${signal}: requested by ${summariseCaller(entry)} at ${entry.ts}`
126
+ : `${signal}: no fleet-control request recorded in the last 2 minutes (a service manager, \`kill\`, or a program that signals the process directly)`;
127
+ }
128
+ /** One-line form for a log message. */
129
+ export function summariseCaller(entry) {
130
+ const parent = entry.caller.chain[1];
131
+ return [
132
+ `${entry.action}${entry.target ? ` ${entry.target}` : ""}`,
133
+ entry.caller.instance ? `from agent session ${entry.caller.instance}` : null,
134
+ entry.caller.origin ? `origin ${entry.caller.origin}` : null,
135
+ parent ? `parent pid ${parent.pid} (${parent.command.slice(0, 120)})` : null,
136
+ ].filter(Boolean).join(", ");
137
+ }
138
+ export function refusalMessage(action, reason, instance) {
139
+ if (reason === "test-runner") {
140
+ return `Refusing \`agend ${commandOf(action)}\`: it was started from a test runner and would act on the real fleet. `
141
+ + `Stub the call, or set ${ALLOW_TEST_ENV}=1 if this really targets a scratch fleet.`;
142
+ }
143
+ return `Refusing \`agend ${commandOf(action)}\`: it was started from the fleet agent session "${instance}", and this stops the whole fleet and every instance in it.\n`
144
+ + `If that is what you mean, run it again with --yes. If you did not mean to run it at all, a backtick or $(...) inside a quoted shell argument may have executed it.`;
145
+ }
146
+ function commandOf(action) {
147
+ switch (action) {
148
+ case "fleet-stop": return "fleet stop";
149
+ case "fleet-restart": return "fleet restart";
150
+ case "fleet-restart-reload": return "fleet restart --reload";
151
+ default: return action.replace("instance-", "fleet ");
152
+ }
153
+ }
154
+ /**
155
+ * The CLI's gate: record the call, then let it through or refuse it. Returns
156
+ * whether to go ahead; the caller prints nothing and exits on `false`.
157
+ */
158
+ export function gateFleetControl(dataDir, action, opts, env = process.env, report = message => console.error(message)) {
159
+ const caller = describeCaller(env);
160
+ const verdict = judgeFleetControl(env, !!opts.yes);
161
+ appendAudit(dataDir, {
162
+ ts: new Date().toISOString(),
163
+ action,
164
+ ...(opts.target ? { target: opts.target } : {}),
165
+ outcome: verdict.ok ? "allowed" : "refused",
166
+ ...(verdict.ok ? { detail: verdict.via } : { detail: verdict.reason }),
167
+ caller,
168
+ });
169
+ // The origin marker authorises THIS command only. Left in the environment it would be
170
+ // inherited by the replacement fleet the command starts, and by every agent that fleet
171
+ // runs: a permanent exemption from the confirmation (#1158 review).
172
+ delete env[ORIGIN_ENV];
173
+ if (verdict.ok)
174
+ return true;
175
+ report(refusalMessage(action, verdict.reason, caller.instance));
176
+ return false;
177
+ }
178
+ /** Instance-level stop/restart: recorded for the trail, never blocked (agents do this routinely). */
179
+ export function recordInstanceControl(dataDir, action, target, env = process.env) {
180
+ appendAudit(dataDir, {
181
+ ts: new Date().toISOString(), action, target, outcome: "allowed", caller: describeCaller(env),
182
+ });
183
+ }
184
+ /**
185
+ * The fleet's own entry points (a /restart or /update slash command, the full-restart
186
+ * helper): written by the fleet process, so the signal or child it sends next can be
187
+ * traced to the person who asked, not just to "the fleet itself".
188
+ */
189
+ export function recordInternalRequest(dataDir, action, origin, env = process.env) {
190
+ appendAudit(dataDir, {
191
+ ts: new Date().toISOString(), action, outcome: "allowed", detail: "origin",
192
+ caller: describeCaller(withOrigin(origin, env)),
193
+ });
194
+ }
195
+ //# sourceMappingURL=fleet-control-audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet-control-audit.js","sourceRoot":"","sources":["../src/fleet-control-audit.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type FleetMemory } from "./process-memory.js";
2
+ import { MemoryPressure, type MemoryPressureSnapshot } from "./memory-pressure.js";
2
3
  import { ReplyDeduper } from "./reply-dedup.js";
3
4
  import type { FleetConfig, RawFleetConfig, InstanceConfig } from "./types.js";
4
5
  import { type DeliveryStatus, type GuildEmoji, type GuildEmojiGroup, type ResolvedStatusEmojis } from "./status-emojis.js";
@@ -123,6 +124,7 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
123
124
  readonly lifecycle: InstanceLifecycle;
124
125
  readonly stormWindow: StormWindow;
125
126
  readonly spawnGate: SpawnGate;
127
+ readonly memoryPressure: MemoryPressure;
126
128
  /** Fleet-level backend reachability memory (fed by pty_error / startup panes). */
127
129
  readonly backendOutage: BackendOutageTracker;
128
130
  /** Stable for this FleetManager OS-process lifetime; Daemon objects have their own boot IDs. */
@@ -338,6 +340,11 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
338
340
  private watchdogTimer;
339
341
  private startedAt;
340
342
  private stormOpenNotifyTimer;
343
+ private memoryLogAt;
344
+ private memoryDebugAt;
345
+ private memoryLogLevel;
346
+ private memoryNoticeAt;
347
+ private memoryNoticeLevel;
341
348
  private mirrorBuffer;
342
349
  private mirrorTimer;
343
350
  private sseClients;
@@ -410,8 +417,12 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
410
417
  private dispatchDurableDelivery;
411
418
  private waitForDurableLaneRelease;
412
419
  private spawnConcurrency;
420
+ /** Separate cooldown: changing measurements must not create new text-throttle keys. */
421
+ private reportMemoryPressure;
413
422
  /** Wire the one fleet-wide storm into notification and recovery surfaces. */
414
423
  private bindStormWindowEvents;
424
+ /** What the gate allows while any storm window is open (see SpawnGate.pump). */
425
+ private stormWindowLossRecoveryConcurrency;
415
426
  private formatStormDelay;
416
427
  stormSuppressed(kind: string): boolean;
417
428
  private handleSighup;
@@ -464,6 +475,9 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
464
475
  getSysInfo(): import("./fleet-context.js").SysInfo;
465
476
  /** Load fleet.yaml and build routing table */
466
477
  loadConfig(configPath: string): FleetConfig;
478
+ private relayLoginModeWarned;
479
+ /** `login.mode: relay` was removed (#1139). Still accepted so an upgrade cannot stop a fleet from starting. */
480
+ private warnAboutRemovedLoginMode;
467
481
  /**
468
482
  * A channel's configurable bot_token_env is an env-key writer too. Refuse
469
483
  * an overlap with a registry API key (or a process-reserved key) before the
@@ -508,6 +522,10 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
508
522
  */
509
523
  private isModelAdmin;
510
524
  private handlePauseWakeSlash;
525
+ /** SIGUSR2: restart the instances inside this process. Names who asked (#1120). */
526
+ private onGracefulRestartSignal;
527
+ /** SIGUSR1: full process reload. Names who asked (#1120). */
528
+ private onFullRestartSignal;
511
529
  private handleUpdateSlash;
512
530
  private handleRestartSlash;
513
531
  private handleTipsSlash;
@@ -624,6 +642,21 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
624
642
  deliverToInstance(instanceName: string, payload: Record<string, unknown>, options?: DeliveryOptions): Promise<boolean | void>;
625
643
  /** Fleet admin is an explicit config allowlist entry, not merely an open/paired user. */
626
644
  isFleetAdmin(userId: string, adapterId?: string): boolean;
645
+ /** Whether this adapter has any fleet admin at all (an empty allowlist means the admin commands are off). */
646
+ hasFleetAdmins(adapterId?: string): boolean;
647
+ /**
648
+ * The one question the privileged commands (/update, /doctor, /dashboard, /collab) ask: may THIS caller,
649
+ * through THIS adapter, run it. `disabled` is "nobody can" — an empty list — and is told apart from
650
+ * `denied` only so the reply can say so. An empty list never means "everyone": these commands used to read
651
+ * the primary channel's list and treat empty as open, so on a fleet that had not set one anyone who could
652
+ * type a slash command could `/update` the host.
653
+ */
654
+ fleetAdminGate(userId: string, adapterId?: string): "ok" | "disabled" | "denied";
655
+ /**
656
+ * The door every Discord slash command goes through (src/slash-authz.ts has the rule and the reasoning).
657
+ * Answers the caller itself when it refuses, so a refused command costs one reply and does nothing else.
658
+ */
659
+ private authorizeSlash;
627
660
  /** Phase 2: delivery_worker for a target (instance override → fleet default → wake_only). */
628
661
  deliveryWorkerMode(target: string): ReturnType<typeof resolveDeliveryWorkerMode>;
629
662
  /** Active instances mid-restart: they keep their warm slot through the stop → replacement gap. */
@@ -893,6 +926,7 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
893
926
  * reported separately because they differ by ~60x and only one of them can
894
927
  * show a fleet-manager leak. */
895
928
  memory: FleetMemory;
929
+ hostMemory: MemoryPressureSnapshot;
896
930
  problems: string[];
897
931
  };
898
932
  /** Start the primary adapter (backward-compatible, sets this.adapter) */
@@ -1205,6 +1239,9 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
1205
1239
  private pendingCliEnvProbes;
1206
1240
  /** Forced vendor catalog refreshes are separate flights, but sysinfo joins either flight. */
1207
1241
  private pendingVendorCliEnvProbes;
1242
+ private pendingInstanceModelProbes;
1243
+ private readonly cliEnvProbePool;
1244
+ private cliEnvProbeEpoch;
1208
1245
  /**
1209
1246
  * The status emojis for an instance (#1005): its own `status_emojis`, then
1210
1247
  * its channel's `options.status_emojis`, then the platform built-in. An
@@ -1472,7 +1509,7 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
1472
1509
  private receiveAdapterCallback;
1473
1510
  /**
1474
1511
  * A button from a prompt kind that no longer exists (#1131: `/install-cli`'s
1475
- * picker and its "sign in now?" prompt). Still on screen after an upgrade;
1512
+ * picker and its "sign in now?" prompt; #1139: the relay login's provider picker). Still on screen after an upgrade;
1476
1513
  * a click gets the expired-prompt treatment — a private notice, the buttons
1477
1514
  * collapsed — instead of nothing.
1478
1515
  */
@@ -1698,16 +1735,11 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
1698
1735
  private isDeliveryEpochCurrent;
1699
1736
  /** Invalidate work queued before a user cancel and wake idle-gate waiters. */
1700
1737
  private cancelPendingDeliveries;
1701
- private activeLogin;
1702
- /**
1703
- * Web-terminal login (v2.1.5 default, `login.mode: web`). The relay code
1704
- * below (activeLogin/LoginSession) is `login.mode: relay`, kept for one
1705
- * release as the rollback lever and removed in 2.1.6.
1706
- */
1738
+ /** Web-terminal login: the only sign-in path (the chat-relay mode was removed, #1139). */
1707
1739
  private loginController;
1708
1740
  /**
1709
1741
  * One login/install window fleet-wide. Claimed synchronously before the
1710
- * first await by web login, relay login and install alike (sol B1).
1742
+ * first await by web login and install alike (sol B1).
1711
1743
  */
1712
1744
  private readonly loginWindow;
1713
1745
  private get webLogin();
@@ -1771,23 +1803,12 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
1771
1803
  }): Promise<string | null>;
1772
1804
  /** Which way a `/login` went (#1131) — so the event log shows what users actually need. */
1773
1805
  private recordLoginFlow;
1774
- /** The sign-in itself (web, or the legacy relay) for a CLI that is installed. */
1806
+ /** The sign-in itself, in the web terminal, for a CLI that is installed. */
1775
1807
  private launchSignIn;
1776
- private startRelayClaimed;
1777
- /** Create the login window and session (pre-check already settled). */
1778
- private launchLoginSession;
1779
- /** Fleet shutdown: end any web/relay login or install window and wait for its confirmed teardown. */
1808
+ /** Fleet shutdown: end any web login or install window and wait for its confirmed teardown. */
1780
1809
  private shutdownLoginWindows;
1781
- /** `/login code <text>` — paste admin-supplied text into the login window. */
1782
- loginSubmitInput(text: string): Promise<string>;
1783
1810
  /** `/login cancel` — abort the active session and remove its window. */
1784
1811
  cancelLoginSession(): Promise<string>;
1785
- /**
1786
- * The URL (+ code) is a live credential: whoever completes it binds THEIR
1787
- * account to this fleet's CLI. Telegram gets an HTML spoiler (same treatment
1788
- * as the dashboard token); other adapters get plain text with the warning.
1789
- */
1790
- private sendLoginSecret;
1791
1812
  /**
1792
1813
  * After a successful login: wake the paused instances of that backend AND
1793
1814
  * restart the running ones — a live CLI holds the old token in memory and
@@ -1812,8 +1833,6 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
1812
1833
  private handleLoginConfirm;
1813
1834
  /** "Resend token" button (web login): only the requester may press it; the token never enters the channel. */
1814
1835
  private handleLoginTokenResend;
1815
- /** Kiro provider button → drive the CLI's arrow-key selector. */
1816
- private handleLoginMenuSelect;
1817
1836
  private activeInstall;
1818
1837
  /** An install that succeeded, between its success line and the sign-in it hands over to (#1131). */
1819
1838
  private installHandoff;
@@ -1939,6 +1958,8 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
1939
1958
  * previous list, never stall the command that asked for it.
1940
1959
  */
1941
1960
  private probeBackendBounded;
1961
+ private stopCliEnvProbes;
1962
+ private runBackendProbeWorker;
1942
1963
  private startCliEnvProbeWorker;
1943
1964
  /**
1944
1965
  * Resolve the effective model for a fleet or ClassicBot instance, plus where it
@@ -1955,18 +1976,7 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
1955
1976
  /** Human-readable effective model, e.g. `auto (default)`. Used by /ctx. */
1956
1977
  modelDisplayForInstance(instanceName: string): string;
1957
1978
  private modelChoiceLabel;
1958
- /**
1959
- * Probe one backend's CLI env and cache it. Best-effort; never throws.
1960
- *
1961
- * `refreshVendorCatalog` is the "🔄 Refresh models" path only (#886): first
1962
- * ask the CLI to refetch its own catalog, for backends whose probe merely
1963
- * reads a file the CLI maintains. Every other caller leaves it off, so the
1964
- * startup and /model probes behave exactly as before. A failed vendor
1965
- * refresh fails the probe (null), which the menu reports instead of passing
1966
- * the old list off as fresh.
1967
- */
1968
- private probeBackend;
1969
- /** Preserve the existing cache merge rules for both in-process and worker probes. */
1979
+ /** Preserve the existing cache merge rules for worker probes. */
1970
1980
  private persistCliEnvProbeResult;
1971
1981
  /** Background-probe every distinct backend in use at startup (non-blocking). */
1972
1982
  private probeCliEnvs;