@groundnuty/macf-core 0.2.47 → 0.2.49

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.
@@ -7,30 +7,191 @@
7
7
  * logic lives in macf-core; the per-runtime driver bodies live in `packages/macf`
8
8
  * or a future K8s package). It NEVER touches `/proc`, tmux, `capture-pane`, or
9
9
  * kubectl — it drives entirely off the injected `FleetDriver` verbs
10
- * (`probe`/`discoverWorkspaces`/`isBusy`/`upgrade`/`restart`) plus an injected
11
- * `verifyGreen` runner, so the SAME sequencer rolls a VM tmux fleet, a macOS
12
- * host, and a far-future K8s deployment by swapping only the driver.
10
+ * (`probe`/`discoverWorkspaces`/`isBusy`/`listDirtyConfig`/`upgrade`/`restart`/
11
+ * `listModifiedFiles`/`acquireLock`/`startHeartbeat`/`releaseLock`) plus an
12
+ * injected `verifyGreen` runner, so the SAME sequencer rolls a VM tmux fleet, a
13
+ * macOS host, and a far-future K8s deployment by swapping only the driver.
13
14
  *
14
15
  * The state machine (per fleet, one agent at a time):
15
16
  *
16
17
  * probe() + discoverWorkspaces()
17
18
  * → for each member whose RUNNING version < target (compareSemver):
18
- * busy-gate (driver.isBusy → busy ⇒ SKIP+REPORT, or `--wait` for idle)
19
- * → driver.upgrade(agent)
20
- * → driver.restart(agent)
21
- * → verifyGreen({agent, target}) // re-resolves the fresh endpoint
22
- * → green ⇒ next agent
23
- * → NOT green within the budget ⇒ HALT the roll (a bad release
24
- * stalls at agent 1 and CANNOT brick the fleet)
19
+ * PRE-FLIGHT gate (BEFORE any mutation — never touches the agent):
20
+ * config-dirty-gate (driver.listDirtyConfig → non-empty ⇒ OBJECT:
21
+ * SKIP+REPORT the list of uncommitted files + an agent-directed
22
+ * message to inspect-and-commit-or-delete-or-gitignore-then-retry,
23
+ * unless `--force`; macf#725 — TRANSACTIONAL revision of macf#722
24
+ * Fix B: rather than silently stashing operator dirt, the roll
25
+ * OBJECTS and does NOTHING until the agent resolves it)
26
+ * busy-gate (driver.isBusy → busy ⇒ SKIP+REPORT, or `--wait` for idle)
27
+ * → driver.acquireLock(agent, target) // DR-040 Decision 4 (macf#752):
28
+ * SET the maintenance lock BEFORE anything touches the agent, so a
29
+ * watchdog sweep racing the restart reads "planned maintenance,"
30
+ * never "unplanned outage." driver.startHeartbeat(agent) then
31
+ * keeps it fresh across the whole transaction below (background,
32
+ * decoupled from these awaits); its stop-handle fires exactly
33
+ * once, on whichever terminal branch is reached.
34
+ * → driver.upgrade(agent) // dirties the managed config surface —
35
+ * // this is EXPECTED, not a fault
36
+ * → driver.restart(agent, { leaveConfigUncommitted: true })
37
+ * // relaunches WITHOUT stashing macf update's own regeneration —
38
+ * // the pre-flight gate already proved the ONLY dirt is the
39
+ * // upgrade's, so leaving it uncommitted (visible via `git status`
40
+ * // in the relaunched agent) is safe + intended (macf#725)
41
+ * → verifyGreen({agent, target}) // re-resolves the fresh endpoint
42
+ * each poll, over a relaunch-aware grace budget (`--verify-timeout`)
43
+ * → green on TARGET ⇒ driver.listModifiedFiles(agent) → emit an
44
+ * agent-directed "review + commit what macf update regenerated"
45
+ * message + list; stopHeartbeat() + driver.releaseLock(agent)
46
+ * (DR-040 Decision 3 — release ONLY on confirmed clean success);
47
+ * THEN next agent (`upgraded`)
48
+ * → confirmed back on the OLD (pre-upgrade) version ⇒ stopHeartbeat()
49
+ * WITHOUT releasing the lock, then HALT the roll, reason
50
+ * `bad-release` (a crash-loop / stuck-old-process release stalls
51
+ * at agent 1 and CANNOT brick the fleet)
52
+ * → past-grace still NOT confirmed green (down / unreachable /
53
+ * some other unknown version) ⇒ stopHeartbeat() WITHOUT
54
+ * releasing the lock, then HALT the roll, reason
55
+ * `relaunch-unconfirmed` — this is NOT a continue: "not yet
56
+ * green" cannot distinguish a slow-but-fine relaunch from a
57
+ * release that crashes on startup (which never shows the old
58
+ * version either), so continuing past an unconfirmed agent
59
+ * would risk cascading a crash-on-start release across the
60
+ * fleet (macf#722 Fix A). Both HALT paths deliberately LEAVE the
61
+ * lock in place (DR-040 Decision 3) — it self-clears once its
62
+ * heartbeat goes stale (`MAINT_LOCK_TTL`), giving the operator a
63
+ * bounded grace window before the watchdog resumes automatic
64
+ * action on a possibly-broken, mid-transition agent.
25
65
  *
26
66
  * Multi-fleet (`--fleet a,b,c`) rolls fleet-by-fleet: each fleet's roll must
27
67
  * finish without a HALT before the next fleet starts (a bad release in fleet-1
28
68
  * stops fleet-2 from ever being touched).
29
69
  *
30
70
  * DRY-RUN is the default at the command boundary: `execute: false` computes +
31
- * reports the PLAN (probe + classify) and performs NO driver mutations.
71
+ * reports the PLAN (probe + classify) and performs NO driver mutations —
72
+ * `rollFleet` (and therefore the maintenance lock) is never even called on
73
+ * that path; `upgradeFleets` only invokes it when `execute: true`.
74
+ *
75
+ * **Reconcile is MANUAL this iteration (macf#725).** The config-dirty OBJECT
76
+ * path surfaces the dirt via `onEvent` + a non-mutating skip; it does NOT
77
+ * auto-resolve (no auto-stash, no auto-commit, no auto-delete). A clean
78
+ * re-run, after the agent (or operator) resolves the flagged files, completes
79
+ * the roll for that agent.
32
80
  */
33
81
  import { compareSemver } from './semver.js';
82
+ /**
83
+ * The roll's MEANINGFUL config surface (macf#722 Fix B / macf#725 UNION,
84
+ * narrowed by DR-040 Decision 6 / macf#698). The path globs that BOTH
85
+ * consumers of this constant key on:
86
+ *
87
+ * 1. **The dirty-CHECK gate** — `rollFleet`'s pre-flight config-dirty
88
+ * gate (`isConfigDirty` / `listDirtyConfig` in `vm-driver.ts`) +
89
+ * `restart-self`'s standalone stash-refusal guard
90
+ * (`hasUncommittedConfigChanges`). `git status --porcelain -- <pattern>`
91
+ * → non-empty ⇒ OBJECT / refuse. Narrowing here narrows what OBJECTS.
92
+ * 2. **The `excludeConfigSurface` stash** — `restart-self`'s roll-path
93
+ * relaunch (`git stash push -- . ':!<pattern>'` per entry) stashes
94
+ * everything EXCEPT this pattern, so the roll's own `macf update`
95
+ * regeneration stays uncommitted for the relaunched agent to see. A
96
+ * path DROPPED from the pattern is therefore no longer excluded → it
97
+ * gets STASHED on relaunch. For a TRACKED operator-evolution file
98
+ * (`CLAUDE.md`), that means the agent comes back with it reverted to
99
+ * HEAD and the edits buried in a stash = silent pre-reconcile loss.
100
+ *
101
+ * Because of use #2, this is a **UNION, not the overwrite-set alone**
102
+ * (macf#725): (a) the files `macf update` OVERWRITES ∪ (b) the
103
+ * operator-evolution files that must NOT be silently stashed on relaunch.
104
+ * The `.claude/**` wildcard was the ONLY bug — it swept in runtime logs
105
+ * (`.claude/audit.log`) + agent scratch that `macf update` never writes,
106
+ * producing false CONFIG-DIRTY objections. This revision replaces ONLY that
107
+ * wildcard with the specific managed paths; the union's meaningful members
108
+ * are preserved.
109
+ *
110
+ * **(a) The exact set `macf update` OVERWRITES** — verified directly against
111
+ * the CLI source (`update.ts` + `env-files-update.ts` + `rules.ts` +
112
+ * `claude-sh.ts` + `host-prelude.ts` + `settings-writer.ts`):
113
+ *
114
+ * - `claude.sh` — `writeClaudeSh` (unconditional for a macf-managed workspace;
115
+ * preserved only when hand-authored/header-less, in which case it's never
116
+ * legitimately dirty from `macf update`'s perspective anyway — harmless to
117
+ * include unconditionally, same reasoning as the prior revision).
118
+ * - `.claude/rules/**` — `copyCanonicalRules` (universal `.claude/rules/*.md`)
119
+ * + `fetchProjectRules` (project-tier `.claude/rules/project/*.md`); both
120
+ * land under this one glob.
121
+ * - `.claude/scripts/**` — `copyCanonicalScripts`. Still the exact overwrite
122
+ * set as of DR-039 phase 2 (macf#749, hook SCRIPT FILES moved to
123
+ * `plugin/scripts/`): `macf update` still writes a `.claude/scripts/`
124
+ * compat copy for hand-wired substrate hooks + non-plugin-init'd
125
+ * workspaces (see `rules.ts` `copyCanonicalScripts` doc comment). Drop this
126
+ * entry once that compat copy is retired.
127
+ * - `.claude/settings.json` — `installGhTokenHook` / `installPluginSkillPermissions`
128
+ * / `installSandboxFdAllowRead` / `installSandboxExcludedCommands` (all
129
+ * merge-preserving writers targeting this one file). Deliberately EXCLUDES
130
+ * `.claude/settings.local.json` — `macf update` only ever READS it (for the
131
+ * getters' merged-view), never writes it (+ it's gitignored → never dirty
132
+ * in the first place → no stash risk).
133
+ * - `.claude/.macf/env._helpers` / `env.identity` / `env.github` / `env.certs`
134
+ * / `env.registry` — the 5 `MANAGED_ENV_FILES` (`env-files-update.ts`),
135
+ * regenerated unconditionally + warn-on-hand-edit. Deliberately EXCLUDES the
136
+ * 2 `OPERATOR_ENV_FILES` (`env.telemetry`, `env.tmux` — bootstrap-write-if-
137
+ * absent, else preserved unconditionally).
138
+ * - `.claude/.macf/host-prelude.sh` — `writeHostPrelude`, "macf-managed +
139
+ * RE-DETECTED (never preserve-existing)" per its own doc comment
140
+ * (`host-prelude.ts`). Genuinely overwritten every `macf update` run; ADDED
141
+ * here (the prior `.claude/**` wildcard caught it incidentally — narrowing
142
+ * the wildcard away would have silently dropped coverage for this file
143
+ * without this explicit addition).
144
+ *
145
+ * **(b) The operator-evolution surface that must NOT be silently stashed**
146
+ * (macf#725 union half — kept, NOT dropped, per the use-#2 reasoning above):
147
+ *
148
+ * - `CLAUDE.md` — TRACKED operator/workbench doc. `macf update` never writes
149
+ * it (no write path in any CLI command), so it's NOT an overwrite-set
150
+ * member — but it IS a meaningful operator-evolution file: a dirty
151
+ * `CLAUDE.md` legitimately warrants a gate objection (unlike `audit.log`,
152
+ * it's real work, not runtime noise), and it MUST stay in the pattern so
153
+ * `excludeConfigSurface` leaves it uncommitted rather than stashing the
154
+ * operator's edits away on relaunch (verified TRACKED → live stash-loss
155
+ * hazard if dropped).
156
+ * - `env.local.*` — the operator-custom env-extension slot (bare pathspec,
157
+ * preserved verbatim from the prior union). Untracked in practice (so no
158
+ * live stash risk today), but kept for union fidelity + zero-cost safety as
159
+ * a genuine operator-surface member.
160
+ *
161
+ * **Motivating incident** (devops review, PR #748 / macf#698): the prior
162
+ * `.claude/**` wildcard matched `.claude/audit.log` — a runtime log a custom
163
+ * `ConfigChange` hook appends to (hence perpetually git-dirty on that
164
+ * workspace) that `macf update` never writes — and **blocked devops's
165
+ * v0.2.48 fleet upgrade** with a false CONFIG-DIRTY objection on 2026-07-02.
166
+ * Untracking `audit.log` itself (the `.gitignore` force-include +
167
+ * `git rm --cached`) is a separate, devops-owned LOCAL workspace cleanup —
168
+ * out of scope here; this pattern-narrowing is the FRAMEWORK-side fix so no
169
+ * future non-canonical `.claude/` file (runtime logs, agent scratch, custom-
170
+ * hook output) can trip the gate at all, regardless of gitignore state on any
171
+ * given workspace.
172
+ *
173
+ * Both gate consumers already pathspec-filter their `git status --porcelain`
174
+ * calls by this exact array (as does the stash), so this revision narrows
175
+ * ALL consumers' behavior identically; no separate no-pathspec fix was needed
176
+ * at any call site.
177
+ */
178
+ export const ROLL_TOUCHED_CONFIG_PATTERNS = [
179
+ // (a) the exact set `macf update` OVERWRITES:
180
+ 'claude.sh',
181
+ '.claude/rules/**',
182
+ '.claude/scripts/**',
183
+ '.claude/settings.json',
184
+ '.claude/.macf/env._helpers',
185
+ '.claude/.macf/env.identity',
186
+ '.claude/.macf/env.github',
187
+ '.claude/.macf/env.certs',
188
+ '.claude/.macf/env.registry',
189
+ '.claude/.macf/host-prelude.sh',
190
+ // (b) operator-evolution files that must NOT be silently stashed on relaunch
191
+ // (macf#725 union half — `excludeConfigSurface` leaves these uncommitted):
192
+ 'CLAUDE.md',
193
+ 'env.local.*',
194
+ ];
34
195
  /**
35
196
  * Classify each discovered fleet member against the target version. PURE — no
36
197
  * driver, no clock, no network. The single source of the behind/at-target/offline
@@ -53,7 +214,7 @@ export function planFleetUpgrade(members, state, targetVersion) {
53
214
  }
54
215
  return {
55
216
  agent: m.agent,
56
- fleet: m.registry,
217
+ fleet: m.project,
57
218
  runningVersion,
58
219
  pinnedVersion: m.versionPin,
59
220
  disposition,
@@ -82,20 +243,132 @@ async function waitForIdle(agent, opts, deps) {
82
243
  return false;
83
244
  }
84
245
  /**
85
- * Roll ONE fleet: for every `behind` plan (in order) run the busy-gate → upgrade
86
- * → restart → verify-green cycle, HALTING the roll on the first agent that fails
87
- * to come up green. Non-`behind` plans are ignored (planned skips). Busy agents
88
- * are skipped + reported (never a halt); with `wait`, they are re-polled for idle
89
- * first. The verb order + HALT semantics mirror `fleet/upgrade.sh`'s `roll_one`.
246
+ * Classify a failed verify-green against the agent's PRE-upgrade running
247
+ * version (macf#722 Fix A). `bad-release` requires POSITIVE confirmation that
248
+ * the agent came back reachable at the OLD pin — everything else (never
249
+ * reachable, or reachable at some other unrecognized version) is
250
+ * `relaunch-unconfirmed`. Never infer `bad-release` from absence of success;
251
+ * only from the last-seen version actually matching the old pin.
252
+ */
253
+ function classifyHalt(green, oldVersion) {
254
+ if (green.reason === 'wrong-version' &&
255
+ green.lastVersion !== null &&
256
+ oldVersion !== null &&
257
+ compareSemver(green.lastVersion, oldVersion) === 0) {
258
+ return 'bad-release';
259
+ }
260
+ return 'relaunch-unconfirmed';
261
+ }
262
+ /**
263
+ * Build the agent-directed OBJECT message for a config-dirty pre-flight skip
264
+ * (macf#725). Pure — exported for CLI-rendering reuse / tests.
265
+ */
266
+ export function buildConfigDirtyMessage(agent, files) {
267
+ return (`Fleet upgrade skipped ${agent} — these files have uncommitted changes ` +
268
+ `\`macf update\` would overwrite: ${files.join(', ')}. Inspect each and ` +
269
+ `commit, delete, or .gitignore it, then re-run the upgrade.`);
270
+ }
271
+ /**
272
+ * Build the agent-directed post-upgrade modified-files message (macf#725).
273
+ * Pure — exported for CLI-rendering reuse / tests.
274
+ *
275
+ * The message names the intended STEADY-STATE explicitly: a clean roll LEAVES
276
+ * this regeneration uncommitted (so the agent can review it), which means the
277
+ * NEXT roll's pre-flight WILL re-flag these same files as uncommitted unless
278
+ * they're committed. That re-flag is intended hygiene ("commit last update's
279
+ * regen before upgrading again"), not a surprise — so the message tells the
280
+ * agent to commit them, not merely review them.
281
+ */
282
+ export function buildModifiedFilesMessage(agent, files) {
283
+ return (`Fleet upgrade regenerated these files in ${agent}'s workspace: ` +
284
+ `${files.join(', ')}. Review with \`git diff\` and commit them (so the next ` +
285
+ `upgrade's pre-flight doesn't re-flag them as uncommitted) or act as needed.`);
286
+ }
287
+ /**
288
+ * Roll ONE fleet: for every `behind` plan (in order) run the PRE-FLIGHT gates
289
+ * (config-dirty tier-first, then busy) → upgrade → restart → verify-green
290
+ * cycle, HALTING the roll on the first agent whose post-restart state isn't
291
+ * confirmed-green. Non-`behind` plans are ignored (planned skips).
292
+ * Pre-flight-gated agents are skipped + reported and NEVER a halt (they were
293
+ * never mutated, so continuing is always safe) — config-dirty is checked
294
+ * first because a busy-but-clean agent may still become idle later
295
+ * (`--wait`), whereas a dirty (genuine-delta) agent is skip-only regardless.
296
+ * With `wait`, a busy agent is re-polled for idle first. The verb order +
297
+ * HALT semantics mirror `fleet/upgrade.sh`'s `roll_one`.
298
+ *
299
+ * **Transactional + OBJECT-with-message revision (macf#725).** The pre-flight
300
+ * config-dirty gate is the ONLY decision point that inspects PRE-upgrade
301
+ * state: clean (or explicitly `--force`-bypassed) ⇒ the roll enters the
302
+ * transaction and MUST complete it — `upgrade` → `restart(agent,
303
+ * { leaveConfigUncommitted: true })` always runs together, never mutating
304
+ * `upgrade` without following through to `restart`. Dirty (and not forced) ⇒
305
+ * the roll does NOTHING to this agent (no `upgrade`, no `restart`) and OBJECTS
306
+ * via `onEvent` with the exact file list + an agent-directed message —
307
+ * reconcile is MANUAL: the agent (or operator) resolves the flagged files and
308
+ * a clean re-run completes it. This replaces the earlier (macf#722 Fix B)
309
+ * silent-skip + separately-force-stashed-restart shape, which could dirty the
310
+ * workspace via `upgrade` and then have `restart-self`'s OWN guard refuse —
311
+ * aborting mid-transaction with the workspace already mutated.
312
+ *
313
+ * **Tier-first auto-resolve (DR-040 Decision 3 / macf#698 R1).** Before
314
+ * deciding OBJECT-or-proceed, `deps.driver.classifyDirtyConfig` splits the
315
+ * dirty set into `alreadyCanonical` (content already equals what `macf
316
+ * update` would write — the common case: a stale-branch workspace, both
317
+ * code-agent AND science hit ONLY this tier on the v0.2.48 roll) and
318
+ * `genuineDelta` (a real local difference). `alreadyCanonical` files are
319
+ * committed automatically via `autoResolveCanonical` — no agent/operator
320
+ * involvement, no OBJECT — clearing the false config-dirty signal. Only a
321
+ * non-empty `genuineDelta` still triggers the OBJECT-and-skip path, and its
322
+ * message + `onEvent` payload are scoped to the genuine-delta files ONLY
323
+ * (the auto-resolved noise is never re-surfaced as something to inspect).
324
+ * When `genuineDelta` is empty (either the whole dirty set was
325
+ * already-canonical, or there was nothing dirty at all), the roll falls
326
+ * through into the transaction exactly as the clean case always has.
90
327
  */
91
328
  export async function rollFleet(plans, opts, deps) {
92
329
  const results = [];
93
330
  let upgraded = 0;
94
331
  let busySkipped = 0;
332
+ let configDirtySkipped = 0;
333
+ let configAutoResolved = 0;
95
334
  for (const plan of plans) {
96
335
  if (plan.disposition !== 'behind')
97
336
  continue;
98
337
  const agent = plan.agent;
338
+ // PRE-FLIGHT config-dirty gate — tier-first (DR-040 Decision 3 /
339
+ // macf#698 R1). By-design inter-roll STEADY-STATE (macf#725): a clean
340
+ // roll LEAVES `macf update`'s regeneration uncommitted (so the relaunched
341
+ // agent reviews it — see `restart`'s `leaveConfigUncommitted` below +
342
+ // `buildModifiedFilesMessage`). Consequently, the NEXT roll's pre-flight
343
+ // will re-classify that still-uncommitted regen — almost always as
344
+ // ALREADY-CANONICAL (it IS what `macf update` just wrote) and therefore
345
+ // auto-resolved here rather than objected on. This is the steady-state
346
+ // this tier exists to smooth over.
347
+ let autoResolvedFiles;
348
+ if (!opts.force) {
349
+ const { alreadyCanonical, genuineDelta } = await deps.driver.classifyDirtyConfig(agent);
350
+ if (alreadyCanonical.length > 0) {
351
+ await deps.driver.autoResolveCanonical(agent, alreadyCanonical);
352
+ configAutoResolved += 1;
353
+ autoResolvedFiles = alreadyCanonical;
354
+ deps.onEvent?.({ kind: 'config-auto-resolved', agent, files: alreadyCanonical });
355
+ }
356
+ if (genuineDelta.length > 0) {
357
+ configDirtySkipped += 1;
358
+ const message = buildConfigDirtyMessage(agent, genuineDelta);
359
+ results.push({
360
+ agent,
361
+ outcome: 'config-dirty-skipped',
362
+ detail: message,
363
+ ...(autoResolvedFiles ? { autoResolvedFiles } : {}),
364
+ });
365
+ deps.onEvent?.({ kind: 'config-dirty-skip', agent, files: genuineDelta, message });
366
+ continue;
367
+ }
368
+ // genuineDelta is empty (nothing dirty at all, or everything dirty WAS
369
+ // already-canonical and is now committed) — fall through into the
370
+ // transaction below exactly as the always-clean case does.
371
+ }
99
372
  let busy = await deps.driver.isBusy(agent);
100
373
  let waited = false;
101
374
  if (busy && opts.wait) {
@@ -104,13 +377,34 @@ export async function rollFleet(plans, opts, deps) {
104
377
  }
105
378
  if (busy) {
106
379
  busySkipped += 1;
107
- results.push({ agent, outcome: 'busy-skipped', detail: waited ? 'still busy after --wait' : 'busy' });
380
+ results.push({
381
+ agent,
382
+ outcome: 'busy-skipped',
383
+ detail: waited ? 'still busy after --wait' : 'busy',
384
+ ...(autoResolvedFiles ? { autoResolvedFiles } : {}),
385
+ });
108
386
  deps.onEvent?.({ kind: 'busy-skip', agent, waited });
109
387
  continue;
110
388
  }
389
+ // --- ENTERING THE TRANSACTION: upgrade + restart run together, always. ---
111
390
  deps.onEvent?.({ kind: 'roll-start', agent, from: plan.runningVersion, to: opts.targetVersion });
391
+ // DR-040 Decision 4 (macf-devops-toolkit#158/#159, macf#752) — SET the
392
+ // maintenance lock BEFORE anything touches the agent's process, so a
393
+ // watchdog sweep racing the very first SIGTERM already reads "planned
394
+ // maintenance," never "unplanned outage." The background heartbeat keeps
395
+ // the lock fresh across the WHOLE transaction below (upgrade → restart →
396
+ // verify-green can each individually take a while); `stopHeartbeat` is
397
+ // invoked exactly once, on whichever terminal branch is reached.
398
+ await deps.driver.acquireLock(agent, opts.targetVersion);
399
+ const stopHeartbeat = deps.driver.startHeartbeat(agent);
112
400
  await deps.driver.upgrade(agent);
113
- await deps.driver.restart(agent);
401
+ // The pre-flight gate above (clean, or explicitly `--force`-bypassed) is
402
+ // the only thing that decided whether to enter this transaction. Once
403
+ // entered, `restart` must NOT stash or refuse on the config surface —
404
+ // `upgrade` (macf update) is EXPECTED to have just dirtied it, and that
405
+ // dirt (plus any pre-existing `--force`-bypassed dirt) is deliberately
406
+ // LEFT UNCOMMITTED for the relaunched agent to see via `git status`.
407
+ await deps.driver.restart(agent, { leaveConfigUncommitted: true });
114
408
  const green = await deps.verifyGreen({
115
409
  agent,
116
410
  targetVersion: opts.targetVersion,
@@ -118,27 +412,52 @@ export async function rollFleet(plans, opts, deps) {
118
412
  });
119
413
  if (green.ok) {
120
414
  upgraded += 1;
121
- results.push({ agent, outcome: 'upgraded', detail: green.version });
122
- deps.onEvent?.({ kind: 'upgraded', agent, version: green.version });
415
+ const modifiedFiles = await deps.driver.listModifiedFiles(agent);
416
+ const message = buildModifiedFilesMessage(agent, modifiedFiles);
417
+ results.push({
418
+ agent,
419
+ outcome: 'upgraded',
420
+ detail: message,
421
+ ...(autoResolvedFiles ? { autoResolvedFiles } : {}),
422
+ });
423
+ deps.onEvent?.({ kind: 'upgraded', agent, version: green.version, modifiedFiles, message });
424
+ // Clean GREEN is the ONLY release path (DR-040 Decision 3) — hand the
425
+ // agent back to normal watchdog reconciliation immediately.
426
+ stopHeartbeat();
427
+ await deps.driver.releaseLock(agent);
123
428
  continue;
124
429
  }
125
- const reason = green.reason;
430
+ const reason = classifyHalt(green, plan.runningVersion);
126
431
  results.push({
127
432
  agent,
128
433
  outcome: 'halted',
129
- detail: `verify-green ${reason} (last=${green.lastVersion ?? 'down'})`,
434
+ reason,
435
+ detail: `${reason}: verify-green ${green.reason} (last=${green.lastVersion ?? 'down'})`,
436
+ ...(autoResolvedFiles ? { autoResolvedFiles } : {}),
130
437
  });
131
438
  deps.onEvent?.({ kind: 'halt', agent, reason, lastVersion: green.lastVersion });
132
- return { results, halted: true, upgraded, busySkipped };
439
+ // HALT deliberately LEAVES the lock in place (DR-040 Decision 3): a
440
+ // possibly-broken, mid-transition agent must NOT be handed straight back
441
+ // to the watchdog's Tier-1/2/3 healing ladder the instant the roll fails
442
+ // — that is exactly the uncoordinated, racing intervention the
443
+ // transactional halt exists to avoid. Only the background heartbeat is
444
+ // stopped here; the lock self-clears once its heartbeat goes stale
445
+ // (MAINT_LOCK_TTL), giving the operator a bounded grace window to
446
+ // inspect the halted roll before the watchdog resumes automatic action.
447
+ stopHeartbeat();
448
+ return { results, halted: true, upgraded, busySkipped, configDirtySkipped, configAutoResolved };
133
449
  }
134
- return { results, halted: false, upgraded, busySkipped };
450
+ return { results, halted: false, upgraded, busySkipped, configDirtySkipped, configAutoResolved };
135
451
  }
136
452
  /**
137
- * Orchestrate a rolling upgrade across the ORDERED `fleets` (registry
138
- * identifiers), fleet-by-fleet. Each fleet is probed + planned; in EXECUTE mode
139
- * it is then rolled, and a HALT in one fleet STOPS the whole run — later fleets
140
- * are never started (a bad release cannot cascade across fleets). An unresolvable
141
- * fleet is skipped + reported and does NOT halt the run.
453
+ * Orchestrate a rolling upgrade across the ORDERED `fleets` (PROJECT
454
+ * identifiers — macf#710: a "fleet" == a project, which owns its own CA +
455
+ * registry namespace + version cadence; a profile/org registry scope hosting N
456
+ * projects yields N fleets here, never one), fleet-by-fleet. Each fleet is
457
+ * probed + planned; in EXECUTE mode it is then rolled, and a HALT in one fleet
458
+ * STOPS the whole run — later fleets are never started (a bad release cannot
459
+ * cascade across fleets). An unresolvable fleet is skipped + reported and does
460
+ * NOT halt the run.
142
461
  */
143
462
  export async function upgradeFleets(fleets, opts, deps) {
144
463
  const reports = [];
@@ -150,7 +469,7 @@ export async function upgradeFleets(fleets, opts, deps) {
150
469
  deps.onEvent?.({ kind: 'fleet-skipped', fleet, reason: 'driver-unresolved' });
151
470
  continue;
152
471
  }
153
- const members = driver.discoverWorkspaces().filter((r) => r.registry === fleet);
472
+ const members = driver.discoverWorkspaces().filter((r) => r.project === fleet);
154
473
  const state = await driver.probe();
155
474
  const plans = planFleetUpgrade(members, state, opts.targetVersion);
156
475
  const behind = plans.filter((p) => p.disposition === 'behind').length;
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-upgrade.js","sourceRoot":"","sources":["../src/fleet-upgrade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet-upgrade.js","sourceRoot":"","sources":["../src/fleet-upgrade.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -31,6 +31,7 @@ export * from './protected-invariant-norms.js';
31
31
  export * from './mtls-health-ping.js';
32
32
  export * from './certs/index.js';
33
33
  export * from './registry/index.js';
34
+ export * from './delivery/index.js';
34
35
  export { createChallengeStore, DEFAULT_CHALLENGE_TTL_MS } from './certs/challenge-store.js';
35
36
  export type { ChallengeRecord, ChallengeStore, Clock } from './certs/challenge-store.js';
36
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAIpC,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AAIpC,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -31,6 +31,7 @@ export * from './protected-invariant-norms.js';
31
31
  export * from './mtls-health-ping.js';
32
32
  export * from './certs/index.js';
33
33
  export * from './registry/index.js';
34
+ export * from './delivery/index.js';
34
35
  // Subpath modules NOT re-exported from the subdir index.ts files;
35
36
  // surface them here so consumers can use the flat barrel uniformly.
36
37
  export { createChallengeStore, DEFAULT_CHALLENGE_TTL_MS } from './certs/challenge-store.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAEpC,kEAAkE;AAClE,oEAAoE;AACpE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AAEpC,kEAAkE;AAClE,oEAAoE;AACpE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -144,6 +144,15 @@ export declare function loadPromptResponses(raw: unknown): LoadedPromptResponses
144
144
  * confirmation) is the dangerous case: an unknown prompt we must NOT answer.
145
145
  * Broad on purpose — false-positive (alert on a non-prompt) is cheap; a
146
146
  * false-negative (miss a real unknown prompt) is the hazard.
147
+ *
148
+ * `❯` is overloaded (groundnuty/macf#729): it is BOTH the menu-selection
149
+ * cursor on a real numbered ceremony prompt (`❯ 1. Yes`) AND the Claude Code
150
+ * free-form input-box cursor (`❯ <queued/typed text>`). A bare `frame.includes('❯')`
151
+ * misclassified a queued message in the input box as an unknown prompt,
152
+ * firing repeated ALERT spam. Match only when `❯` sits directly on a
153
+ * NUMBERED OPTION line — that excludes the free-form input box (whose text
154
+ * after `❯` is not `[0-9]+[.)]`) while still catching real numbered menus.
155
+ * Kept in lockstep with the watcher's bash `_looks_prompt_like`.
147
156
  */
148
157
  export declare function looksPromptLike(frame: string): boolean;
149
158
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-responses.d.ts","sourceRoot":"","sources":["../src/prompt-responses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-responses.d.ts","sourceRoot":"","sources":["../src/prompt-responses.ts"],"names":[],"mappings":"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"}
@@ -165,9 +165,18 @@ export function loadPromptResponses(raw) {
165
165
  * confirmation) is the dangerous case: an unknown prompt we must NOT answer.
166
166
  * Broad on purpose — false-positive (alert on a non-prompt) is cheap; a
167
167
  * false-negative (miss a real unknown prompt) is the hazard.
168
+ *
169
+ * `❯` is overloaded (groundnuty/macf#729): it is BOTH the menu-selection
170
+ * cursor on a real numbered ceremony prompt (`❯ 1. Yes`) AND the Claude Code
171
+ * free-form input-box cursor (`❯ <queued/typed text>`). A bare `frame.includes('❯')`
172
+ * misclassified a queued message in the input box as an unknown prompt,
173
+ * firing repeated ALERT spam. Match only when `❯` sits directly on a
174
+ * NUMBERED OPTION line — that excludes the free-form input box (whose text
175
+ * after `❯` is not `[0-9]+[.)]`) while still catching real numbered menus.
176
+ * Kept in lockstep with the watcher's bash `_looks_prompt_like`.
168
177
  */
169
178
  export function looksPromptLike(frame) {
170
- if (frame.includes('❯'))
179
+ if (/❯[ \t]*[0-9]+[.)]/.test(frame))
171
180
  return true;
172
181
  return /\((?:y\/n|y\/N|Y\/n)\)|\[(?:y\/N|Y\/n|y\/n)\]/.test(frame);
173
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-responses.js","sourceRoot":"","sources":["../src/prompt-responses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAY,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAEtG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAU,CAAC;AAEzF,uEAAuE;AACvE,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC;KACvC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAClD,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC;IAC1D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACxD,CAAC,CAAC;AAMH;;;;;GAKG;AACH,SAAS,aAAa,CAAC,KAA0B;IAC/C,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC3F,CAAC;AAED,sEAAsE;AACtE,SAAS,cAAc,CAAC,KAA0B,EAAE,IAAuB;IACzE,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAA0B;IAChE,IAAI,cAAc,CAAC,KAAK,EAAE,wBAAwB,CAAC,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACnF,IAAI,cAAc,CAAC,KAAK,EAAE,sBAAsB,CAAC,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC;AAmBD;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,oBAAoB,CAC5B,uCAAuC,MAAM,CAAC,KAAK,CAAC,MAAM;aACvD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC3D,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAA0B,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,wBAAwB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxF,SAAS,CAAC,yDAAyD;QACrE,CAAC;QACD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,sBAAsB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,+CAA+C,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,UAAkB,EAAE,IAAY;IAC9E,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,SAAS;QACzC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,oEAAoE;QACpE,4EAA4E;QAC5E,0EAA0E;QAC1E,2EAA2E;QAC3E,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,kCAAkC;QAC7E,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,KAA0B;IACzE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAQD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,OAAuC;IAEvC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAChF,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,OAAO,CAAC,KAA0B,EAAE,UAAkB;IACpE,OAAO,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;AACtC,CAAC;AAcD,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,KAA0B;IAC1E,IAAI,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC;IAC/D,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC;IAC7E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA0B;IAC1D,cAAc,EAAE,+BAA+B;IAC/C,OAAO,EAAE;QACP;YACE,IAAI,EAAE,cAAc;YACpB,cAAc,EAAE,CAAC,uCAAuC,CAAC;YACzD,WAAW,EAAE,uCAAuC;YACpD,IAAI,EAAE,GAAG;YACT,SAAS,EAAE,CAAC;SACb;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,cAAc,EAAE,CAAC,2BAA2B,CAAC;YAC7C,WAAW,EAAE,2BAA2B;YACxC,IAAI,EAAE,GAAG;YACT,SAAS,EAAE,CAAC;SACb;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"prompt-responses.js","sourceRoot":"","sources":["../src/prompt-responses.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -47,6 +47,7 @@ export declare const NotifyPayloadSchema: z.ZodObject<{
47
47
  "turn-complete": "turn-complete";
48
48
  }>>;
49
49
  github_anchor: z.ZodOptional<z.ZodString>;
50
+ message_id: z.ZodOptional<z.ZodString>;
50
51
  review_state: z.ZodOptional<z.ZodEnum<{
51
52
  approved: "approved";
52
53
  changes_requested: "changes_requested";
@@ -109,6 +110,7 @@ export declare const PeerNotificationPayloadSchema: z.ZodObject<{
109
110
  }>;
110
111
  message: z.ZodOptional<z.ZodString>;
111
112
  context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
113
+ message_id: z.ZodOptional<z.ZodString>;
112
114
  }, z.core.$strip>;
113
115
  export type PeerNotificationPayload = z.infer<typeof PeerNotificationPayloadSchema>;
114
116
  /**