@songsid/agend 2.1.6-beta.1 → 2.1.6-beta.10

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 (184) hide show
  1. package/dist/agent-endpoint.d.ts +18 -0
  2. package/dist/agent-endpoint.js +53 -2
  3. package/dist/agent-endpoint.js.map +1 -1
  4. package/dist/apply-job.d.ts +114 -0
  5. package/dist/apply-job.js +214 -0
  6. package/dist/apply-job.js.map +1 -0
  7. package/dist/backend/claude-code.d.ts +25 -0
  8. package/dist/backend/claude-code.js +127 -0
  9. package/dist/backend/claude-code.js.map +1 -1
  10. package/dist/backend/codex.d.ts +41 -0
  11. package/dist/backend/codex.js +133 -0
  12. package/dist/backend/codex.js.map +1 -1
  13. package/dist/backend/credential-profile.d.ts +159 -0
  14. package/dist/backend/credential-profile.js +340 -0
  15. package/dist/backend/credential-profile.js.map +1 -0
  16. package/dist/backend/factory.js +4 -1
  17. package/dist/backend/factory.js.map +1 -1
  18. package/dist/backend/kiro-auth-store.d.ts +25 -0
  19. package/dist/backend/kiro-auth-store.js +61 -0
  20. package/dist/backend/kiro-auth-store.js.map +1 -0
  21. package/dist/backend/kiro.d.ts +8 -0
  22. package/dist/backend/kiro.js +31 -2
  23. package/dist/backend/kiro.js.map +1 -1
  24. package/dist/backend/muse.d.ts +90 -0
  25. package/dist/backend/muse.js +437 -0
  26. package/dist/backend/muse.js.map +1 -0
  27. package/dist/backend/types.d.ts +41 -0
  28. package/dist/backend/types.js.map +1 -1
  29. package/dist/channel/access-manager.d.ts +20 -0
  30. package/dist/channel/access-manager.js +25 -0
  31. package/dist/channel/access-manager.js.map +1 -1
  32. package/dist/channel/adapters/discord.d.ts +17 -0
  33. package/dist/channel/adapters/discord.js +72 -11
  34. package/dist/channel/adapters/discord.js.map +1 -1
  35. package/dist/channel/adapters/telegram.d.ts +6 -0
  36. package/dist/channel/adapters/telegram.js +36 -0
  37. package/dist/channel/adapters/telegram.js.map +1 -1
  38. package/dist/channel/markdown-chunk.d.ts +8 -3
  39. package/dist/channel/markdown-chunk.js +12 -3
  40. package/dist/channel/markdown-chunk.js.map +1 -1
  41. package/dist/channel/mcp-server.js +9 -12
  42. package/dist/channel/mcp-server.js.map +1 -1
  43. package/dist/channel/mcp-tools.d.ts +6 -2
  44. package/dist/channel/mcp-tools.js +6 -36
  45. package/dist/channel/mcp-tools.js.map +1 -1
  46. package/dist/channel/tool-router.js +32 -3
  47. package/dist/channel/tool-router.js.map +1 -1
  48. package/dist/channel/types.d.ts +18 -0
  49. package/dist/cli.js +113 -0
  50. package/dist/cli.js.map +1 -1
  51. package/dist/config-validator.js +45 -5
  52. package/dist/config-validator.js.map +1 -1
  53. package/dist/connection-secrets.d.ts +96 -0
  54. package/dist/connection-secrets.js +25 -0
  55. package/dist/connection-secrets.js.map +1 -0
  56. package/dist/daemon.d.ts +61 -0
  57. package/dist/daemon.js +359 -88
  58. package/dist/daemon.js.map +1 -1
  59. package/dist/event-log.d.ts +9 -0
  60. package/dist/event-log.js +21 -0
  61. package/dist/event-log.js.map +1 -1
  62. package/dist/fleet-level-config.d.ts +42 -0
  63. package/dist/fleet-level-config.js +78 -0
  64. package/dist/fleet-level-config.js.map +1 -0
  65. package/dist/fleet-lock.d.ts +21 -0
  66. package/dist/fleet-lock.js +42 -8
  67. package/dist/fleet-lock.js.map +1 -1
  68. package/dist/fleet-manager.d.ts +417 -2
  69. package/dist/fleet-manager.js +1981 -182
  70. package/dist/fleet-manager.js.map +1 -1
  71. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +145 -0
  72. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +11 -1
  73. package/dist/instance-config-impact.d.ts +55 -0
  74. package/dist/instance-config-impact.js +152 -0
  75. package/dist/instance-config-impact.js.map +1 -0
  76. package/dist/instance-lifecycle.js +8 -4
  77. package/dist/instance-lifecycle.js.map +1 -1
  78. package/dist/locale.js +24 -0
  79. package/dist/locale.js.map +1 -1
  80. package/dist/logger.js +42 -25
  81. package/dist/logger.js.map +1 -1
  82. package/dist/muse-usage-relay.d.ts +72 -0
  83. package/dist/muse-usage-relay.js +419 -0
  84. package/dist/muse-usage-relay.js.map +1 -0
  85. package/dist/outbound-handlers.d.ts +5 -1
  86. package/dist/outbound-handlers.js +199 -1
  87. package/dist/outbound-handlers.js.map +1 -1
  88. package/dist/outbound-schemas.d.ts +7 -5
  89. package/dist/outbound-schemas.js +3 -2
  90. package/dist/outbound-schemas.js.map +1 -1
  91. package/dist/provider-probe.d.ts +48 -0
  92. package/dist/provider-probe.js +121 -0
  93. package/dist/provider-probe.js.map +1 -0
  94. package/dist/provider-secret-registry.d.ts +98 -0
  95. package/dist/provider-secret-registry.js +334 -0
  96. package/dist/provider-secret-registry.js.map +1 -0
  97. package/dist/quickstart-api.d.ts +164 -0
  98. package/dist/quickstart-api.js +351 -0
  99. package/dist/quickstart-api.js.map +1 -0
  100. package/dist/quickstart.js +23 -50
  101. package/dist/quickstart.js.map +1 -1
  102. package/dist/scheduler/db.js +17 -5
  103. package/dist/scheduler/db.js.map +1 -1
  104. package/dist/scheduler/db.test.js +34 -1
  105. package/dist/scheduler/db.test.js.map +1 -1
  106. package/dist/scheduler/types.d.ts +4 -0
  107. package/dist/scheduler/types.js.map +1 -1
  108. package/dist/secret-store.d.ts +25 -0
  109. package/dist/secret-store.js +165 -0
  110. package/dist/secret-store.js.map +1 -0
  111. package/dist/self-restart-limit.d.ts +21 -0
  112. package/dist/self-restart-limit.js +129 -0
  113. package/dist/self-restart-limit.js.map +1 -0
  114. package/dist/settings-api.d.ts +116 -0
  115. package/dist/settings-api.js +530 -5
  116. package/dist/settings-api.js.map +1 -1
  117. package/dist/setup-auth.d.ts +113 -0
  118. package/dist/setup-auth.js +181 -0
  119. package/dist/setup-auth.js.map +1 -0
  120. package/dist/setup-form.d.ts +18 -0
  121. package/dist/setup-form.js +315 -0
  122. package/dist/setup-form.js.map +1 -0
  123. package/dist/setup-host.d.ts +162 -0
  124. package/dist/setup-host.js +496 -0
  125. package/dist/setup-host.js.map +1 -0
  126. package/dist/setup-marker.d.ts +8 -0
  127. package/dist/setup-marker.js +39 -0
  128. package/dist/setup-marker.js.map +1 -0
  129. package/dist/setup-tunnel-consent.d.ts +53 -0
  130. package/dist/setup-tunnel-consent.js +82 -0
  131. package/dist/setup-tunnel-consent.js.map +1 -0
  132. package/dist/setup-wizard.js +4 -0
  133. package/dist/setup-wizard.js.map +1 -1
  134. package/dist/steer-capability.js +4 -1
  135. package/dist/steer-capability.js.map +1 -1
  136. package/dist/tips.js +1 -1
  137. package/dist/tips.js.map +1 -1
  138. package/dist/tmux-manager.js +29 -4
  139. package/dist/tmux-manager.js.map +1 -1
  140. package/dist/tool-permissions-notice.d.ts +38 -0
  141. package/dist/tool-permissions-notice.js +92 -0
  142. package/dist/tool-permissions-notice.js.map +1 -0
  143. package/dist/tool-permissions.d.ts +120 -0
  144. package/dist/tool-permissions.js +277 -0
  145. package/dist/tool-permissions.js.map +1 -0
  146. package/dist/topic-commands.js +1 -0
  147. package/dist/topic-commands.js.map +1 -1
  148. package/dist/transcript-sources.d.ts +12 -1
  149. package/dist/transcript-sources.js +19 -3
  150. package/dist/transcript-sources.js.map +1 -1
  151. package/dist/tunnel/cloudflared.d.ts +71 -0
  152. package/dist/tunnel/cloudflared.js +447 -0
  153. package/dist/tunnel/cloudflared.js.map +1 -0
  154. package/dist/tunnel/lease.d.ts +75 -0
  155. package/dist/tunnel/lease.js +209 -0
  156. package/dist/tunnel/lease.js.map +1 -0
  157. package/dist/tunnel/manager.d.ts +56 -0
  158. package/dist/tunnel/manager.js +167 -0
  159. package/dist/tunnel/manager.js.map +1 -0
  160. package/dist/tunnel/types.d.ts +119 -0
  161. package/dist/tunnel/types.js +33 -0
  162. package/dist/tunnel/types.js.map +1 -0
  163. package/dist/types.d.ts +2 -0
  164. package/dist/ui/dashboard.html +4 -3
  165. package/dist/ui/settings.html +808 -156
  166. package/dist/ui/view.html +2 -2
  167. package/dist/usage/i18n-keys.d.ts +1 -1
  168. package/dist/usage/i18n-keys.js +1 -1
  169. package/dist/usage/i18n-keys.js.map +1 -1
  170. package/dist/usage/providers.d.ts +23 -14
  171. package/dist/usage/providers.js +220 -58
  172. package/dist/usage/providers.js.map +1 -1
  173. package/dist/usage/usage-api.d.ts +13 -0
  174. package/dist/usage/usage-api.js +69 -1
  175. package/dist/usage/usage-api.js.map +1 -1
  176. package/dist/web-api.js +8 -5
  177. package/dist/web-api.js.map +1 -1
  178. package/dist/web-auth.d.ts +75 -0
  179. package/dist/web-auth.js +208 -2
  180. package/dist/web-auth.js.map +1 -1
  181. package/dist/web-terminal.d.ts +30 -1
  182. package/dist/web-terminal.js +86 -3
  183. package/dist/web-terminal.js.map +1 -1
  184. package/package.json +2 -1
@@ -32,4 +32,22 @@ export interface AgentEndpointContext extends OutboundContext {
32
32
  handleSetDescriptionHttp(instance: string, description: string): Promise<unknown>;
33
33
  }
34
34
  export declare function handleAgentRequest(req: IncomingMessage, res: ServerResponse, ctx: AgentEndpointContext): void;
35
+ /** An op this endpoint has never heard of: the caller's mistake, answered 400. */
36
+ export declare class UnknownAgentOpError extends Error {
37
+ readonly status = 400;
38
+ constructor(message: string);
39
+ }
40
+ /** Refused by policy, not by a bad request: the endpoint answers this as 403. */
41
+ export declare class ToolNotPermittedError extends Error {
42
+ readonly status = 403;
43
+ constructor(message: string);
44
+ }
45
+ /**
46
+ * The tool an op means, whichever way it is dispatched.
47
+ *
48
+ * `OP_MAP` alone would miss six: the schedule, decision, task, usage and rename
49
+ * ops are answered before it is consulted, so a permission table built from it
50
+ * would have had holes exactly where the early returns are.
51
+ */
52
+ export declare function toolForAgentOp(op: string): string | null;
35
53
  export declare function dispatchAgentOperation(ctx: AgentEndpointContext, instance: string, op: string, args: Record<string, unknown>): Promise<unknown>;
@@ -3,6 +3,7 @@ import { join } from "node:path";
3
3
  import { timingSafeEqual } from "node:crypto";
4
4
  import { outboundHandlers } from "./outbound-handlers.js";
5
5
  import { routeToolCall } from "./channel/tool-router.js";
6
+ import { EARLY_AGENT_OP_TOOLS, mayUseTool, resolveToolSet, toolRefusedMessage, } from "./tool-permissions.js";
6
7
  /** Read the last real channel target persisted by the instance daemon. */
7
8
  export function readPersistedReplyContext(dataDir, instance) {
8
9
  // Prevent path traversal; allow Unicode (e.g. Chinese instance names)
@@ -116,12 +117,60 @@ export function handleAgentRequest(req, res, ctx) {
116
117
  res.end(JSON.stringify(result));
117
118
  }
118
119
  catch (err) {
119
- res.writeHead(400);
120
+ // A refusal is not a malformed request: 403 says "you, specifically, may
121
+ // not", which is what the caller has to act on.
122
+ const status = err instanceof ToolNotPermittedError ? 403
123
+ : err instanceof UnknownAgentOpError ? err.status
124
+ : 400;
125
+ res.writeHead(status);
120
126
  res.end(JSON.stringify({ error: err.message }));
121
127
  }
122
128
  });
123
129
  }
130
+ /** An op this endpoint has never heard of: the caller's mistake, answered 400. */
131
+ export class UnknownAgentOpError extends Error {
132
+ status = 400;
133
+ constructor(message) {
134
+ super(message);
135
+ this.name = "UnknownAgentOpError";
136
+ }
137
+ }
138
+ /** Refused by policy, not by a bad request: the endpoint answers this as 403. */
139
+ export class ToolNotPermittedError extends Error {
140
+ status = 403;
141
+ constructor(message) {
142
+ super(message);
143
+ this.name = "ToolNotPermittedError";
144
+ }
145
+ }
146
+ /**
147
+ * The tool an op means, whichever way it is dispatched.
148
+ *
149
+ * `OP_MAP` alone would miss six: the schedule, decision, task, usage and rename
150
+ * ops are answered before it is consulted, so a permission table built from it
151
+ * would have had holes exactly where the early returns are.
152
+ */
153
+ export function toolForAgentOp(op) {
154
+ // Own-property only: `"constructor"` is in both objects by inheritance, and
155
+ // would otherwise resolve to a function that then gets treated as a name.
156
+ if (Object.hasOwn(EARLY_AGENT_OP_TOOLS, op))
157
+ return EARLY_AGENT_OP_TOOLS[op];
158
+ if (Object.hasOwn(OP_MAP, op))
159
+ return OP_MAP[op];
160
+ return null;
161
+ }
124
162
  export async function dispatchAgentOperation(ctx, instance, op, args) {
163
+ // Sink 3 of 3, before any branch below: the early-returning ops are as much
164
+ // a tool call as the mapped ones. Stage 1 records and continues; the refusal
165
+ // arrives in stage 2.
166
+ const requestedTool = toolForAgentOp(op);
167
+ if (requestedTool) {
168
+ const profile = resolveToolSet(ctx.fleetConfig?.instances[instance], instance);
169
+ if (!mayUseTool(profile, requestedTool)) {
170
+ ctx.logger.warn({ sink: "agent-endpoint", instance, profile, tool: requestedTool, enforced: true }, "tool-permissions: refused");
171
+ throw new ToolNotPermittedError(toolRefusedMessage(profile, requestedTool));
172
+ }
173
+ }
125
174
  // Schedule CRUD
126
175
  if (op.startsWith("schedule-")) {
127
176
  const subOp = op.replace("schedule-", "");
@@ -154,7 +203,9 @@ export async function dispatchAgentOperation(ctx, instance, op, args) {
154
203
  // Map CLI op to internal tool name
155
204
  const tool = OP_MAP[op];
156
205
  if (!tool) {
157
- return { error: `Unknown op: ${op}` };
206
+ // 200 with an error body reads as success to anything checking the status,
207
+ // and an unknown op is the caller's mistake.
208
+ throw new UnknownAgentOpError(`Unknown op: ${op}`);
158
209
  }
159
210
  // Channel tools (reply, react, edit, download)
160
211
  const channelTools = new Set(["reply", "react", "edit_message", "download_attachment"]);
@@ -1 +1 @@
1
- {"version":3,"file":"agent-endpoint.js","sourceRoot":"","sources":["../src/agent-endpoint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-endpoint.js","sourceRoot":"","sources":["../src/agent-endpoint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /** How long a finished job stays answerable, and how long a key is honoured. */
2
+ export declare const APPLY_JOB_RETENTION_MS: number;
3
+ /**
4
+ * Wall clock, not a step count: the user is looking at a spinner, and the thing
5
+ * they need to be told is that it has been N seconds, not which internal phase
6
+ * it is in. Generous — a reconcile that restarts several agents on a loaded
7
+ * machine is slow but fine.
8
+ */
9
+ export declare const APPLY_JOB_DEADLINE_MS = 120000;
10
+ /** Outcome of asking the fleet to restart itself for a Settings change. */
11
+ export type SelfRestartResult = {
12
+ ok: true;
13
+ jobId: string;
14
+ reused?: boolean;
15
+ } | {
16
+ ok: false;
17
+ status: 409 | 429 | 503;
18
+ error: string;
19
+ retryAfterSeconds?: number;
20
+ };
21
+ /** The row for the fleet process itself, as opposed to one of its agents. */
22
+ export declare const APPLY_FLEET_TARGET = "fleet";
23
+ export type ApplyTargetKind = "hot" | "restart";
24
+ /**
25
+ * `restart-required` is a terminal state, not a stalled one: the change is saved
26
+ * and valid, and a running fleet process cannot adopt it. Reporting it as done
27
+ * would tell the user AgEnD is on the new configuration when it is not.
28
+ */
29
+ export type ApplyTargetStatus = "pending" | "running" | "done" | "failed" | "restart-required";
30
+ export type ApplyJobStatus = "running" | "done" | "failed";
31
+ export interface ApplyTarget {
32
+ /** Instance name, or `fleet` for the process-level row. */
33
+ target: string;
34
+ kind: ApplyTargetKind;
35
+ status: ApplyTargetStatus;
36
+ error?: string;
37
+ /**
38
+ * Who finished the row, when it was not this job's own work:
39
+ * `fleet-restart` — a process restart applied it;
40
+ * `no-change` — the plan expected work the reconcile found unnecessary.
41
+ */
42
+ settled_by?: "fleet-restart" | "no-change";
43
+ }
44
+ export interface ApplyJob {
45
+ id: string;
46
+ /** The client's idempotency key. */
47
+ key: string;
48
+ status: ApplyJobStatus;
49
+ startedAt: number;
50
+ finishedAt?: number;
51
+ targets: ApplyTarget[];
52
+ /** Deadline for "still working" messaging; it never cancels the work. */
53
+ deadlineMs: number;
54
+ /** The process that created the job, so a restart is detectable. */
55
+ pid: number;
56
+ error?: string;
57
+ /**
58
+ * The idempotency key of the self-restart this job's fleet row was consumed
59
+ * by. Stored on the job rather than in memory because the process it belongs
60
+ * to is about to be replaced — a retry after the restart has to find it.
61
+ */
62
+ restart_key?: string;
63
+ }
64
+ /** Everything a caller needs to render, computed rather than stored so it stays
65
+ * true while the job is being read long after the last write. */
66
+ export interface ApplyJobView extends ApplyJob {
67
+ elapsed_ms: number;
68
+ /** Past the deadline and still working — say so instead of spinning silently. */
69
+ overdue: boolean;
70
+ /** Human sentence for the overdue case; empty otherwise. */
71
+ message: string;
72
+ }
73
+ export declare function viewOf(job: ApplyJob, now?: number): ApplyJobView;
74
+ /**
75
+ * The jobs file. Small, rewritten whole on every transition — a settings apply
76
+ * happens at human speed, so the simplest durable thing is the right one.
77
+ */
78
+ /** Just enough of a logger for the one thing this module has to report. */
79
+ export interface ApplyJobLogger {
80
+ warn(data: unknown, message: string): void;
81
+ }
82
+ export declare class ApplyJobStore {
83
+ private readonly dataDir;
84
+ private readonly now;
85
+ private readonly logger?;
86
+ private jobs;
87
+ constructor(dataDir: string, now?: () => number, logger?: ApplyJobLogger | undefined);
88
+ private path;
89
+ private read;
90
+ private write;
91
+ private prune;
92
+ /**
93
+ * A job created in an earlier process cannot still be running in this one.
94
+ *
95
+ * The restart is what applied the config: every agent came up from the saved
96
+ * file. So rows left pending or running are done — recorded as settled by the
97
+ * restart rather than by the job, because "who finished this" is exactly what
98
+ * the user is trying to find out.
99
+ */
100
+ settleAfterRestart(): ApplyJob[];
101
+ get(id: string): ApplyJob | null;
102
+ /** The job whose fleet row a given self-restart key already consumed. */
103
+ findByRestartKey(key: string): ApplyJob | null;
104
+ /** The live job for a key, if the client is retrying rather than re-applying. */
105
+ findByKey(key: string): ApplyJob | null;
106
+ create(key: string, targets: Array<Pick<ApplyTarget, "target" | "kind">>, deadlineMs?: number): ApplyJob;
107
+ /** Mutate one job and persist. Every transition hits the disk, because the
108
+ * transition we care most about is the last one before the process dies. */
109
+ update(id: string, mutate: (job: ApplyJob) => void): ApplyJob | null;
110
+ setTargetStatus(id: string, target: string, status: ApplyTargetStatus, error?: string): void;
111
+ finish(id: string, error?: string): void;
112
+ /** Test/introspection seam. */
113
+ all(): ApplyJob[];
114
+ }
@@ -0,0 +1,214 @@
1
+ /**
2
+ * A Settings "Apply" that the user can watch, and that survives the restart it
3
+ * asks for.
4
+ *
5
+ * The old path was `POST /api/settings/reload` → SIGHUP → nothing. The page said
6
+ * "changes applied" the moment the signal was sent, while the reconcile was
7
+ * still stopping and starting agents behind it, and a change that restarts AgEnD
8
+ * itself killed the only place the answer lived.
9
+ *
10
+ * Two properties carry the whole design:
11
+ *
12
+ * 1. **The job is on disk, not in the process.** A fleet-impact change takes the
13
+ * fleet process down with it. An in-memory job dies there, `GET` starts
14
+ * answering 404, and the page shows "restarting…" forever (#722/#748 are the
15
+ * same shape). The replacement process reads the marker, settles whatever was
16
+ * still in flight, and can answer for a job it never started.
17
+ * 2. **The client owns the idempotency key.** A server-minted job id cannot stop
18
+ * a duplicate: on a phone the POST leaves, the answer never arrives, and the
19
+ * retry is a second request the server has no way to recognise. A key the
20
+ * client generates before the first attempt makes the retry identifiable, so
21
+ * it returns the original job instead of applying everything twice.
22
+ */
23
+ import { readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
24
+ import { randomUUID } from "node:crypto";
25
+ import { join } from "node:path";
26
+ const FILE = "settings-apply-jobs.json";
27
+ /** How long a finished job stays answerable, and how long a key is honoured. */
28
+ export const APPLY_JOB_RETENTION_MS = 30 * 60_000;
29
+ /**
30
+ * Wall clock, not a step count: the user is looking at a spinner, and the thing
31
+ * they need to be told is that it has been N seconds, not which internal phase
32
+ * it is in. Generous — a reconcile that restarts several agents on a loaded
33
+ * machine is slow but fine.
34
+ */
35
+ export const APPLY_JOB_DEADLINE_MS = 120_000;
36
+ /** At most this many jobs are kept, newest first. */
37
+ const MAX_JOBS = 20;
38
+ /** The row for the fleet process itself, as opposed to one of its agents. */
39
+ export const APPLY_FLEET_TARGET = "fleet";
40
+ function isTerminal(status) {
41
+ return status === "done" || status === "failed";
42
+ }
43
+ export function viewOf(job, now = Date.now()) {
44
+ const elapsed = Math.max(0, (job.finishedAt ?? now) - job.startedAt);
45
+ const overdue = !isTerminal(job.status) && elapsed > job.deadlineMs;
46
+ return {
47
+ ...job,
48
+ elapsed_ms: elapsed,
49
+ overdue,
50
+ message: overdue ? `Still restarting (${Math.round(elapsed / 1000)}s)` : "",
51
+ };
52
+ }
53
+ export class ApplyJobStore {
54
+ dataDir;
55
+ now;
56
+ logger;
57
+ jobs = [];
58
+ constructor(dataDir, now = Date.now, logger) {
59
+ this.dataDir = dataDir;
60
+ this.now = now;
61
+ this.logger = logger;
62
+ this.jobs = this.read();
63
+ }
64
+ path() {
65
+ return join(this.dataDir, FILE);
66
+ }
67
+ read() {
68
+ try {
69
+ const parsed = JSON.parse(readFileSync(this.path(), "utf-8"));
70
+ if (!Array.isArray(parsed.jobs))
71
+ return [];
72
+ return parsed.jobs.filter(job => typeof job?.id === "string"
73
+ && typeof job?.key === "string"
74
+ && typeof job?.startedAt === "number"
75
+ && Array.isArray(job?.targets));
76
+ }
77
+ catch {
78
+ // Missing or corrupt: an unreadable history must not stop the user from
79
+ // applying settings.
80
+ return [];
81
+ }
82
+ }
83
+ write() {
84
+ const path = this.path();
85
+ const temp = `${path}.${process.pid}.${this.now()}.tmp`;
86
+ try {
87
+ writeFileSync(temp, JSON.stringify({ jobs: this.jobs }), { mode: 0o600 });
88
+ renameSync(temp, path);
89
+ }
90
+ catch (err) {
91
+ try {
92
+ unlinkSync(temp);
93
+ }
94
+ catch { /* never created */ }
95
+ // A full or read-only data dir means this job will not survive a restart.
96
+ // Swallowing that silently is how the symptom becomes "progress just
97
+ // vanished" with nothing to look at.
98
+ this.logger?.warn({ err, path }, "Settings apply job could not be persisted");
99
+ }
100
+ }
101
+ prune() {
102
+ const cutoff = this.now() - APPLY_JOB_RETENTION_MS;
103
+ this.jobs = this.jobs
104
+ .filter(job => (job.finishedAt ?? job.startedAt) >= cutoff)
105
+ .slice(0, MAX_JOBS);
106
+ }
107
+ /**
108
+ * A job created in an earlier process cannot still be running in this one.
109
+ *
110
+ * The restart is what applied the config: every agent came up from the saved
111
+ * file. So rows left pending or running are done — recorded as settled by the
112
+ * restart rather than by the job, because "who finished this" is exactly what
113
+ * the user is trying to find out.
114
+ */
115
+ settleAfterRestart() {
116
+ const settled = [];
117
+ for (const job of this.jobs) {
118
+ if (isTerminal(job.status))
119
+ continue;
120
+ // Only a job from another process. The health server accepts requests a
121
+ // little before startup finishes, so an apply started seconds ago in THIS
122
+ // process would otherwise be declared finished by a restart that already
123
+ // happened. (A recycled pid would leave such a job running until its
124
+ // deadline reports it — the harmless direction.)
125
+ if (job.pid === process.pid)
126
+ continue;
127
+ for (const row of job.targets) {
128
+ if (row.status === "done" || row.status === "failed")
129
+ continue;
130
+ row.status = "done";
131
+ row.settled_by = "fleet-restart";
132
+ }
133
+ job.status = "done";
134
+ job.finishedAt = this.now();
135
+ settled.push(job);
136
+ }
137
+ if (settled.length)
138
+ this.write();
139
+ return settled;
140
+ }
141
+ get(id) {
142
+ return this.jobs.find(job => job.id === id) ?? null;
143
+ }
144
+ /** The job whose fleet row a given self-restart key already consumed. */
145
+ findByRestartKey(key) {
146
+ return this.jobs.find(job => job.restart_key === key) ?? null;
147
+ }
148
+ /** The live job for a key, if the client is retrying rather than re-applying. */
149
+ findByKey(key) {
150
+ const cutoff = this.now() - APPLY_JOB_RETENTION_MS;
151
+ return this.jobs.find(job => job.key === key && (job.finishedAt ?? job.startedAt) >= cutoff) ?? null;
152
+ }
153
+ create(key, targets, deadlineMs = APPLY_JOB_DEADLINE_MS) {
154
+ const job = {
155
+ id: randomUUID(),
156
+ key,
157
+ status: "running",
158
+ startedAt: this.now(),
159
+ targets: targets.map(row => ({ ...row, status: "pending" })),
160
+ deadlineMs,
161
+ pid: process.pid,
162
+ };
163
+ this.jobs.unshift(job);
164
+ this.prune();
165
+ this.write();
166
+ return job;
167
+ }
168
+ /** Mutate one job and persist. Every transition hits the disk, because the
169
+ * transition we care most about is the last one before the process dies. */
170
+ update(id, mutate) {
171
+ const job = this.get(id);
172
+ if (!job)
173
+ return null;
174
+ mutate(job);
175
+ this.write();
176
+ return job;
177
+ }
178
+ setTargetStatus(id, target, status, error) {
179
+ this.update(id, job => {
180
+ const row = job.targets.find(item => item.target === target);
181
+ if (!row)
182
+ return;
183
+ row.status = status;
184
+ if (error)
185
+ row.error = error;
186
+ });
187
+ }
188
+ finish(id, error) {
189
+ this.update(id, job => {
190
+ for (const row of job.targets) {
191
+ if (row.status !== "pending" && row.status !== "running")
192
+ continue;
193
+ if (error) {
194
+ row.status = "failed";
195
+ row.error = error;
196
+ continue;
197
+ }
198
+ // The plan forecast work the reconcile then found unnecessary. Saying
199
+ // plain "done" would read as "this agent was restarted".
200
+ row.status = "done";
201
+ row.settled_by = "no-change";
202
+ }
203
+ job.status = error ? "failed" : job.targets.some(row => row.status === "failed") ? "failed" : "done";
204
+ job.finishedAt = this.now();
205
+ if (error)
206
+ job.error = error;
207
+ });
208
+ }
209
+ /** Test/introspection seam. */
210
+ all() {
211
+ return this.jobs;
212
+ }
213
+ }
214
+ //# sourceMappingURL=apply-job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-job.js","sourceRoot":"","sources":["../src/apply-job.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,31 @@ export declare function claudeResumeMenuState(pane: string): {
42
42
  active: boolean;
43
43
  defaultCursor: boolean;
44
44
  };
45
+ /**
46
+ * Claude Code's destructive shell-command confirmation menu. Claude renders
47
+ * the dangerous-operation warning and the question on separate rows; the
48
+ * question row is the stable identity. The active-region predicate below
49
+ * adds the stronger bottom anchor and option/footer checks before any key can
50
+ * be sent.
51
+ */
52
+ export declare const CLAUDE_DANGEROUS_COMMAND_PROMPT: RegExp;
53
+ export type ClaudeDangerousCommandCursor = "yes" | "no" | "unknown";
54
+ export interface ClaudeDangerousCommandPromptState {
55
+ active: boolean;
56
+ cursor: ClaudeDangerousCommandCursor;
57
+ }
58
+ /**
59
+ * Return the current interactive danger menu shape. The menu must have the
60
+ * question immediately followed by exactly the canonical two options and be
61
+ * bottom-anchored: after the two option rows there may only be its footer and
62
+ * blank rows. This rejects normal output, the three-option permissions menu,
63
+ * and transcript/code snippets that happen to contain the same words.
64
+ * Unknown cursor/order is deliberately a positive detection but is never
65
+ * auto-answered.
66
+ */
67
+ export declare function claudeDangerousCommandPromptState(pane: string): ClaudeDangerousCommandPromptState;
68
+ /** This text is code-owned and intentionally never includes the command. */
69
+ export declare const CLAUDE_DANGEROUS_COMMAND_BLOCKED_NOTICE = "[system:dangerous-command-blocked]\nThe previous command was classified as dangerous and was automatically denied. Do not retry it. Use a safe form instead (for example `${VAR:?}` validation, a literal path, or skip the destructive operation).";
45
70
  /** Startup budget for a resuming claude-code launch (fresh starts keep the default). */
46
71
  export declare const CLAUDE_RESUME_STARTUP_BUDGET_MS = 60000;
47
72
  export declare class ClaudeCodeBackend implements CliBackend {