@cluesmith/codev 3.3.1 → 3.3.2

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 (118) hide show
  1. package/dashboard-dist/assets/index-D3XaKpZW.js.map +1 -1
  2. package/dist/agent-farm/cli.d.ts.map +1 -1
  3. package/dist/agent-farm/cli.js +52 -1
  4. package/dist/agent-farm/cli.js.map +1 -1
  5. package/dist/agent-farm/commands/reset/constants.d.ts +118 -0
  6. package/dist/agent-farm/commands/reset/constants.d.ts.map +1 -1
  7. package/dist/agent-farm/commands/reset/constants.js +118 -0
  8. package/dist/agent-farm/commands/reset/constants.js.map +1 -1
  9. package/dist/agent-farm/commands/reset/context.d.ts +18 -0
  10. package/dist/agent-farm/commands/reset/context.d.ts.map +1 -1
  11. package/dist/agent-farm/commands/reset/context.js +41 -0
  12. package/dist/agent-farm/commands/reset/context.js.map +1 -1
  13. package/dist/agent-farm/commands/reset/receipt.d.ts.map +1 -1
  14. package/dist/agent-farm/commands/reset/receipt.js +16 -5
  15. package/dist/agent-farm/commands/reset/receipt.js.map +1 -1
  16. package/dist/agent-farm/commands/reset/reorient.d.ts +1 -1
  17. package/dist/agent-farm/commands/reset/reorient.d.ts.map +1 -1
  18. package/dist/agent-farm/commands/reset/reorient.js +8 -1
  19. package/dist/agent-farm/commands/reset/reorient.js.map +1 -1
  20. package/dist/agent-farm/commands/reset/self.d.ts +335 -0
  21. package/dist/agent-farm/commands/reset/self.d.ts.map +1 -0
  22. package/dist/agent-farm/commands/reset/self.js +636 -0
  23. package/dist/agent-farm/commands/reset/self.js.map +1 -0
  24. package/dist/agent-farm/commands/reset.d.ts.map +1 -1
  25. package/dist/agent-farm/commands/reset.js +23 -18
  26. package/dist/agent-farm/commands/reset.js.map +1 -1
  27. package/dist/agent-farm/commands/self-refresh.d.ts +60 -0
  28. package/dist/agent-farm/commands/self-refresh.d.ts.map +1 -0
  29. package/dist/agent-farm/commands/self-refresh.js +506 -0
  30. package/dist/agent-farm/commands/self-refresh.js.map +1 -0
  31. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  32. package/dist/agent-farm/commands/send.js +27 -2
  33. package/dist/agent-farm/commands/send.js.map +1 -1
  34. package/dist/agent-farm/commands/spawn.d.ts +7 -0
  35. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  36. package/dist/agent-farm/commands/spawn.js +13 -1
  37. package/dist/agent-farm/commands/spawn.js.map +1 -1
  38. package/dist/agent-farm/lib/tower-client.d.ts +12 -0
  39. package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
  40. package/dist/agent-farm/lib/tower-client.js +12 -0
  41. package/dist/agent-farm/lib/tower-client.js.map +1 -1
  42. package/dist/agent-farm/servers/mailbox-delivery.d.ts +141 -13
  43. package/dist/agent-farm/servers/mailbox-delivery.d.ts.map +1 -1
  44. package/dist/agent-farm/servers/mailbox-delivery.js +172 -16
  45. package/dist/agent-farm/servers/mailbox-delivery.js.map +1 -1
  46. package/dist/agent-farm/servers/mailbox-wiring.d.ts +23 -1
  47. package/dist/agent-farm/servers/mailbox-wiring.d.ts.map +1 -1
  48. package/dist/agent-farm/servers/mailbox-wiring.js +91 -31
  49. package/dist/agent-farm/servers/mailbox-wiring.js.map +1 -1
  50. package/dist/agent-farm/servers/message-write.d.ts +58 -18
  51. package/dist/agent-farm/servers/message-write.d.ts.map +1 -1
  52. package/dist/agent-farm/servers/message-write.js +73 -28
  53. package/dist/agent-farm/servers/message-write.js.map +1 -1
  54. package/dist/agent-farm/servers/render-gate.d.ts +13 -0
  55. package/dist/agent-farm/servers/render-gate.d.ts.map +1 -1
  56. package/dist/agent-farm/servers/render-gate.js +21 -0
  57. package/dist/agent-farm/servers/render-gate.js.map +1 -1
  58. package/dist/agent-farm/servers/session-submit.d.ts +220 -27
  59. package/dist/agent-farm/servers/session-submit.d.ts.map +1 -1
  60. package/dist/agent-farm/servers/session-submit.js +333 -42
  61. package/dist/agent-farm/servers/session-submit.js.map +1 -1
  62. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  63. package/dist/agent-farm/servers/tower-routes.js +114 -25
  64. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  65. package/dist/agent-farm/servers/tower-tunnel.d.ts.map +1 -1
  66. package/dist/agent-farm/servers/tower-tunnel.js +14 -0
  67. package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
  68. package/dist/agent-farm/types.d.ts +36 -1
  69. package/dist/agent-farm/types.d.ts.map +1 -1
  70. package/dist/agent-farm/utils/message-format.d.ts +60 -4
  71. package/dist/agent-farm/utils/message-format.d.ts.map +1 -1
  72. package/dist/agent-farm/utils/message-format.js +115 -22
  73. package/dist/agent-farm/utils/message-format.js.map +1 -1
  74. package/dist/agent-farm/utils/server-utils.d.ts +8 -2
  75. package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
  76. package/dist/agent-farm/utils/server-utils.js +19 -2
  77. package/dist/agent-farm/utils/server-utils.js.map +1 -1
  78. package/dist/commands/porch/context-refresh.d.ts +181 -0
  79. package/dist/commands/porch/context-refresh.d.ts.map +1 -0
  80. package/dist/commands/porch/context-refresh.js +270 -0
  81. package/dist/commands/porch/context-refresh.js.map +1 -0
  82. package/dist/commands/porch/index.d.ts +6 -0
  83. package/dist/commands/porch/index.d.ts.map +1 -1
  84. package/dist/commands/porch/index.js +46 -0
  85. package/dist/commands/porch/index.js.map +1 -1
  86. package/dist/commands/porch/next.d.ts +0 -9
  87. package/dist/commands/porch/next.d.ts.map +1 -1
  88. package/dist/commands/porch/next.js +133 -4
  89. package/dist/commands/porch/next.js.map +1 -1
  90. package/dist/commands/porch/protocol.d.ts.map +1 -1
  91. package/dist/commands/porch/protocol.js +102 -0
  92. package/dist/commands/porch/protocol.js.map +1 -1
  93. package/dist/commands/porch/types.d.ts +61 -0
  94. package/dist/commands/porch/types.d.ts.map +1 -1
  95. package/dist/lib/self-refresh-invocation.d.ts +60 -0
  96. package/dist/lib/self-refresh-invocation.d.ts.map +1 -0
  97. package/dist/lib/self-refresh-invocation.js +64 -0
  98. package/dist/lib/self-refresh-invocation.js.map +1 -0
  99. package/dist/lib/test-env.d.ts +50 -0
  100. package/dist/lib/test-env.d.ts.map +1 -1
  101. package/dist/lib/test-env.js +76 -0
  102. package/dist/lib/test-env.js.map +1 -1
  103. package/package.json +4 -4
  104. package/skeleton/.claude/skills/arch-save/SKILL.md +8 -2
  105. package/skeleton/.claude/skills/builder-refresh/SKILL.md +138 -0
  106. package/skeleton/.codex/skills/arch-save/SKILL.md +8 -2
  107. package/skeleton/.codex/skills/builder-refresh/SKILL.md +138 -0
  108. package/skeleton/protocol-schema.json +17 -0
  109. package/skeleton/protocols/air/protocol.json +1 -1
  110. package/skeleton/protocols/aspir/protocol.json +5 -1
  111. package/skeleton/protocols/bugfix/protocol.json +1 -1
  112. package/skeleton/protocols/experiment/protocol.json +1 -1
  113. package/skeleton/protocols/maintain/protocol.json +1 -1
  114. package/skeleton/protocols/pir/protocol.json +1 -1
  115. package/skeleton/protocols/protocol-schema.json +17 -0
  116. package/skeleton/protocols/research/protocol.json +1 -1
  117. package/skeleton/protocols/spike/protocol.json +1 -1
  118. package/skeleton/protocols/spir/protocol.json +5 -1
@@ -0,0 +1,506 @@
1
+ /**
2
+ * `afx self-refresh` — the builder-side command surface (Spec 1470, Phase 4).
3
+ *
4
+ * Deliberately thin, exactly like `reset.ts`: resolve identity, bind real
5
+ * implementations to the orchestrator's ports, print the report. Every decision,
6
+ * every ordering rule and every refusal lives in `reset/self.ts`, where it is
7
+ * testable without Tower, a PTY, or a live builder.
8
+ *
9
+ * ## Why this is a separate command, not a flag on `afx refresh`
10
+ *
11
+ * `afx refresh <builder>` takes a target. This one takes **no positional
12
+ * argument at all**, and that is a safety property rather than a style choice:
13
+ * with nothing to pass, there is nothing to point at another session. A
14
+ * `--self` flag on the existing command would have left the target parameter
15
+ * present and merely ignored, which is a rule that can be broken by a future
16
+ * edit. `--begin` is a MODE flag, not a target, so the two-step handshake
17
+ * preserves the property.
18
+ *
19
+ * ## Identity is derived, never supplied
20
+ *
21
+ * `detectCurrentBuilderId()` resolves from the worktree path against the shared
22
+ * `global.db` and THROWS rather than falling back — the #1094 anti-spoofing
23
+ * path, built because a silent bare-name fallback once misrouted builder
24
+ * messages to `main`. Refusing here is right: a refresh that cannot prove whose
25
+ * context it is about to destroy must not proceed.
26
+ *
27
+ * ## What Phase 3's reviews told this file to do
28
+ *
29
+ * - Always pass `expectedBoundary`. An optional guard is opt-in, and an opt-in
30
+ * guard protects nobody by default.
31
+ * - Validate every safety flag at the boundary, as `afx refresh` does. Each one
32
+ * tunes a gate, so a bad value disables a protection while still reporting
33
+ * success. The core validates too; the two catch different mistakes (a human
34
+ * typing a flag versus code passing an argument).
35
+ * - Introduce NO Tower call that can fail AFTER the clear. `scheduleReentry` is
36
+ * the only Tower touch before it, and that is load-bearing: a call added later
37
+ * in the sequence could fail once the context is already gone.
38
+ */
39
+ import { readFileSync, realpathSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
40
+ import { isAbsolute, relative, resolve, sep } from 'node:path';
41
+ import { execFileSync } from 'node:child_process';
42
+ import { TowerClient } from '../lib/tower-client.js';
43
+ import { logger, fatal } from '../utils/logger.js';
44
+ import { getBuilder } from '../state.js';
45
+ import { getConfig } from '../utils/index.js';
46
+ import { loadConfig } from '../../lib/config.js';
47
+ import { fetchIssue as fetchForgeIssue } from '../../lib/github.js';
48
+ import { loadForgeConfig } from '../../lib/forge.js';
49
+ import { buildPromptFromTemplate, buildResumeNotice } from './spawn-roles.js';
50
+ import { detectWorkspaceRoot, detectCurrentBuilderId } from './send.js';
51
+ import { buildContextFsPort, resolveBuilderContext } from './reset/context.js';
52
+ import { DEFAULT_REENTRY_DELAY_SECONDS, MIN_ALLOWED_CHALLENGE_MAX_AGE_MS, MIN_ALLOWED_MIN_BYTES, MIN_ALLOWED_REENTRY_DELAY_SECONDS, MIN_ALLOWED_STABILITY_WINDOW_MS, } from './reset/constants.js';
53
+ import { beginSelfRefresh, formatSelfRefreshReport, runSelfRefresh, } from './reset/self.js';
54
+ import { selfRefreshInvocation } from '../../lib/self-refresh-invocation.js';
55
+ // ============================================================================
56
+ // Entry point
57
+ // ============================================================================
58
+ /**
59
+ * Re-exported from `reset/context.ts`, where the single implementation lives.
60
+ * Kept as a named re-export so existing importers do not have to care which
61
+ * module owns it — what matters is that there is exactly one.
62
+ */
63
+ export { buildContextFsPort };
64
+ export async function selfRefresh(options) {
65
+ logger.header(options.begin ? 'Context Refresh — Begin' : 'Context Refresh');
66
+ // ------------------------------------------------------------------
67
+ // Flag validation, before anything reads state.
68
+ // ------------------------------------------------------------------
69
+ // Same reasoning `afx refresh` documents for its own flags: every one of
70
+ // these tunes a SAFETY GATE, so a bad value does not degrade the run — it
71
+ // disables a protection while still reporting success. `--min-bytes 0`
72
+ // accepts an empty save; a non-positive stability window collapses the
73
+ // two-observation check into one read.
74
+ // FLOORS, not merely positivity. A small positive value neuters the gate it
75
+ // configures while still reporting success — and `--delay 0.001` is the fatal
76
+ // direction, because the re-entry and the clear then race for the same clean
77
+ // prompt. If the re-entry lands first it is delivered and immediately wiped:
78
+ // a cleared builder with nobody coming back.
79
+ const minBytes = boundedInt(options.minBytes, '--min-bytes', MIN_ALLOWED_MIN_BYTES);
80
+ const delaySeconds = boundedInt(options.delay, '--delay', MIN_ALLOWED_REENTRY_DELAY_SECONDS);
81
+ const stabilityWindowMs = boundedInt(options.stabilityWindow, '--stability-window', MIN_ALLOWED_STABILITY_WINDOW_MS);
82
+ const challengeMaxAgeMs = boundedInt(options.challengeMaxAge, '--challenge-max-age', MIN_ALLOWED_CHALLENGE_MAX_AGE_MS);
83
+ // ------------------------------------------------------------------
84
+ // Identity — derived from the worktree, never supplied.
85
+ // ------------------------------------------------------------------
86
+ const workspace = detectWorkspaceRoot() ?? undefined;
87
+ let builderId;
88
+ try {
89
+ builderId = detectCurrentBuilderId();
90
+ }
91
+ catch (err) {
92
+ // BuilderIdResolutionError carries the specific reason (#1094). Surface it
93
+ // verbatim: "could not resolve identity" alone would leave the operator
94
+ // guessing between a stale worktree, a missing DB, and an unregistered row.
95
+ fatal(err instanceof Error ? err.message : String(err));
96
+ return;
97
+ }
98
+ if (!builderId) {
99
+ fatal('afx self-refresh must be run from inside a builder worktree — this is a builder ' +
100
+ 'refreshing ITSELF. To refresh a different builder from outside, use `afx refresh <builder>`.');
101
+ return;
102
+ }
103
+ // Look the row up scoped to the PARENT workspace, not `getConfig().workspaceRoot`.
104
+ //
105
+ // This is the one place `afx refresh`'s pattern cannot be copied. That command
106
+ // runs from the main workspace root, where `getConfig().workspaceRoot` and the
107
+ // workspace the registry rows are keyed by are the same directory, so
108
+ // `findBuilderById` works. This one runs INSIDE `.builders/<id>/`, where
109
+ // `findWorkspaceRoot()` returns the WORKTREE (it has its own `codev/`) while
110
+ // rows are keyed by the parent — so `findBuilderById` would scope the query to
111
+ // a workspace that owns no builders and report "no matching row" for every
112
+ // valid builder.
113
+ //
114
+ // `detectWorkspaceRoot()` is the same resolver `detectCurrentBuilderId()` used
115
+ // to derive the id a line above, so identity and lookup now agree by
116
+ // construction rather than by coincidence.
117
+ if (!workspace) {
118
+ fatal('Could not determine the parent workspace for this worktree. Refusing to refresh ' +
119
+ 'against unresolved state.');
120
+ return;
121
+ }
122
+ const builder = getBuilder(builderId, workspace);
123
+ if (!builder) {
124
+ fatal(`Resolved builder id '${builderId}' from this worktree, but no matching registry row ` +
125
+ `exists in workspace ${workspace}. Refusing to refresh against unresolved state.`);
126
+ return;
127
+ }
128
+ if (!builder.worktree || !builder.branch) {
129
+ fatal(`Builder '${builderId}' has an incomplete registry row (worktree='${builder.worktree}', ` +
130
+ `branch='${builder.branch}'). Refusing to refresh against unresolved state.`);
131
+ return;
132
+ }
133
+ // The registry row must describe THIS worktree.
134
+ //
135
+ // `detectCurrentBuilderId` falls back to a tail-segment match for legacy rows,
136
+ // so a row whose `worktree` points somewhere else can still resolve. Every
137
+ // path downstream — the challenge, the state file, the re-orientation — is
138
+ // built from `builder.worktree`, so a mismatch would read and write in a
139
+ // DIFFERENT worktree and then abort with "state file missing", which sends the
140
+ // reader looking for a save they did write, in a place nobody looked.
141
+ // Path CONTAINMENT, not string prefix.
142
+ //
143
+ // `startsWith` is not a containment test: `/a/b-other` starts with `/a/b`, so
144
+ // a registry row pointing at a sibling directory would sail through the very
145
+ // check meant to catch a mismatched row. It also refuses legitimate runs when
146
+ // one side is a symlink and the other is its physical target — the worktree
147
+ // path in the registry and the one `process.cwd()` reports need not be spelled
148
+ // the same way.
149
+ //
150
+ // `realpathSync` canonicalises both sides; `relative()` then answers the real
151
+ // question — is cwd at or below the worktree — component by component rather
152
+ // than character by character.
153
+ if (!isInside(builder.worktree, process.cwd())) {
154
+ fatal(`Registry row for '${builderId}' points at ${builder.worktree}, but this command is ` +
155
+ `running in ${process.cwd()}. Refusing to refresh: every path below is built from the ` +
156
+ `registry worktree, so continuing would read and write in the wrong tree and then fail ` +
157
+ `with a misleading "state file missing".`);
158
+ return;
159
+ }
160
+ // NOTE: `getConfig().workspaceRoot` resolves to the WORKTREE here, not the
161
+ // parent — that is the ambiguity that produced the registry-lookup defect
162
+ // earlier in this phase. It is correct for the three uses below (loading the
163
+ // worktree's own config, resolving its prompt templates, and reading its
164
+ // forge config), all of which genuinely want worktree-local files. The
165
+ // registry lookup above deliberately uses `workspace` instead.
166
+ const config = getConfig();
167
+ const userConfig = loadConfig(config.workspaceRoot);
168
+ const fs = buildFsPort();
169
+ // ------------------------------------------------------------------
170
+ // begin — mint the challenge and print what to write.
171
+ // ------------------------------------------------------------------
172
+ if (options.begin) {
173
+ // No Tower needed: begin writes one file and prints. Requiring a live Tower
174
+ // here would make the harmless half of the handshake fail for a reason that
175
+ // only matters to the destructive half.
176
+ //
177
+ // `--dry-run` is honoured here too. It is documented as writing and
178
+ // consuming nothing, and minting a challenge would both write a file and
179
+ // INVALIDATE any challenge already outstanding — so a rehearsal would
180
+ // silently break the real handshake it was rehearsing.
181
+ const result = beginSelfRefresh({
182
+ fs: options.dryRun ? { ...fs, write: () => { } } : fs,
183
+ clock: realClock,
184
+ worktree: builder.worktree,
185
+ boundary: options.boundary,
186
+ });
187
+ if (options.dryRun) {
188
+ logger.info('DRY RUN — no challenge was written and none was invalidated.');
189
+ logger.info(`Would write the challenge to: ${result.challengePath}`);
190
+ logger.warn(`The nonce below (${result.nonce}) is ILLUSTRATIVE — no challenge carries it. A save ` +
191
+ `written against it would be refused as wrong-nonce. Re-run without --dry-run to get a ` +
192
+ `real one.`);
193
+ console.log('');
194
+ console.log(result.saveRequest);
195
+ return;
196
+ }
197
+ logger.success(`Challenge issued (${result.nonce}).`);
198
+ logger.info(`Write your working state to: ${result.statePath}`);
199
+ console.log('');
200
+ console.log(result.saveRequest);
201
+ console.log('');
202
+ // The follow-up MUST carry --boundary through.
203
+ //
204
+ // Printing a bare `afx self-refresh` would hand the operator an instruction
205
+ // that silently drops the stale-boundary guard: `expectedBoundary` becomes
206
+ // undefined, and a challenge left over from an aborted refresh could then
207
+ // clear the builder at a LATER boundary against a superseded save. The same
208
+ // omission had already made the guard inert once, in porch's task text —
209
+ // fixing that and leaving this would be the same mistake at a second
210
+ // instructed workflow.
211
+ logger.info(`When the file is written, run: ${selfRefreshInvocation(options.boundary).execute}`);
212
+ return;
213
+ }
214
+ // ------------------------------------------------------------------
215
+ // execute — verify, assemble, schedule, clear.
216
+ // ------------------------------------------------------------------
217
+ // Checked before the dry-run branch too, deliberately. A rehearsal whose point
218
+ // is "would this refresh proceed?" must answer honestly, and it would not
219
+ // proceed with Tower down — reporting a clean dry run in that state would be
220
+ // the rehearsal lying about the thing most likely to stop the real run.
221
+ const client = new TowerClient();
222
+ if (!(await client.isRunning())) {
223
+ fatal('Tower is not running, so the post-clear re-entry cannot be scheduled. Refusing to ' +
224
+ 'clear — a cleared builder with no re-entry is a builder nobody is coming back for. ' +
225
+ 'Start it with: afx tower start');
226
+ return;
227
+ }
228
+ const context = resolveBuilderContext({
229
+ fs: buildContextFsPort(),
230
+ builderId: builder.id,
231
+ worktree: builder.worktree,
232
+ branch: builder.branch,
233
+ issueNumber: builder.issueNumber === undefined ? undefined : String(builder.issueNumber),
234
+ taskText: builder.taskText,
235
+ modeOverride: options.mode,
236
+ customHarnesses: userConfig?.harness,
237
+ });
238
+ const result = await runSelfRefresh({
239
+ fs,
240
+ clock: realClock,
241
+ terminal: buildSelfTerminalPort(client, builder.id, workspace),
242
+ git: buildGitPort(builder.worktree),
243
+ context,
244
+ buildSpawnPrompt: (protocol, templateContext) => buildPromptFromTemplate(config, protocol, templateContext),
245
+ buildResumeNotice,
246
+ issue: await fetchIssuePayload(context.issueNumber, config.workspaceRoot),
247
+ addendum: options.note,
248
+ minBytes,
249
+ stabilityWindowMs,
250
+ challengeMaxAgeMs,
251
+ reentryDelaySeconds: delaySeconds,
252
+ dryRun: options.dryRun,
253
+ allowDirty: options.allowDirty,
254
+ // ALWAYS passed, never conditional. An optional guard that callers may omit
255
+ // is a guard that protects nobody by default; when the caller has no
256
+ // boundary, `undefined` is an explicit "no expectation" rather than a
257
+ // forgotten argument.
258
+ expectedBoundary: options.boundary,
259
+ });
260
+ console.log(formatSelfRefreshReport(result));
261
+ if (result.outcome === 'dry-run') {
262
+ // Report every side effect the real run WOULD have, not just the frame.
263
+ // A rehearsal that shows one of three actions invites the reader to assume
264
+ // the other two do not exist.
265
+ console.log('');
266
+ // The list must match `runSelfRefresh`'s real order, including the
267
+ // challenge rewrite — that is a pre-clear write and a safety-critical one
268
+ // (it is what makes the challenge single-use), not housekeeping. Omitting it
269
+ // would tell a reader the rehearsal covers every mutation when it does not.
270
+ //
271
+ // "ATTEMPT TO DELETE" rather than "DELETE": the deletion is best-effort and
272
+ // its failure is deliberately swallowed, because the challenge is already
273
+ // neutralised by the rewrite. Promising a deletion that may not happen is
274
+ // the kind of small inaccuracy that costs someone an hour later.
275
+ logger.info(`WOULD WRITE ${result.reorientPath}`);
276
+ logger.info(`WOULD SEND delayed re-entry (+${delaySeconds ?? DEFAULT_REENTRY_DELAY_SECONDS}s)`);
277
+ logger.info('WOULD REWRITE the challenge as consumed');
278
+ logger.info('WOULD SEND /clear as raw input to this terminal');
279
+ logger.info('WOULD ATTEMPT TO DELETE the challenge');
280
+ console.log('');
281
+ logger.info('--- inline re-entry (what would arrive after the clear) ---');
282
+ console.log(result.payload?.inline ?? '');
283
+ console.log('');
284
+ logger.info(`--- long form that would be written to ${result.reorientPath} ---`);
285
+ console.log(result.payload?.longForm ?? '');
286
+ return;
287
+ }
288
+ if (result.outcome === 'aborted') {
289
+ // Non-zero even though refusing is the SAFE outcome: silence here would let
290
+ // a caller read "refused to clear" as "cleared and fine".
291
+ process.exitCode = 1;
292
+ return;
293
+ }
294
+ }
295
+ // ============================================================================
296
+ // Flag validation
297
+ // ============================================================================
298
+ /**
299
+ * Reject a safety flag that is non-numeric, fractional, or below its floor.
300
+ *
301
+ * Modelled on `afx refresh`'s guard and extended past it. That one checks
302
+ * positivity, which is VALIDITY; these gates need SANITY. `--min-bytes 1`
303
+ * reduces the substance check to "contains the nonce"; `--stability-window 1`
304
+ * makes the sleep a single event-loop tick, which detects nothing; and
305
+ * `--delay 0.001` risks the unrecoverable outcome the whole ordering exists to
306
+ * avoid.
307
+ *
308
+ * Integers only, despite `Number` accepting `0.001` happily — every one of these
309
+ * is a count of bytes, milliseconds or seconds, and a fractional value is a typo
310
+ * rather than an intent.
311
+ */
312
+ function boundedInt(raw, flag, floor) {
313
+ if (raw === undefined)
314
+ return undefined;
315
+ const parsed = typeof raw === 'number' ? raw : Number(raw);
316
+ if (!Number.isInteger(parsed)) {
317
+ fatal(`${flag} must be a whole number, got '${raw}'`);
318
+ }
319
+ if (parsed < floor) {
320
+ fatal(`${flag} must be at least ${floor}, got '${raw}'. Values below that disable the ` +
321
+ `protection this flag configures instead of failing loudly.`);
322
+ }
323
+ return parsed;
324
+ }
325
+ // ============================================================================
326
+ // Port bindings
327
+ // ============================================================================
328
+ const realClock = {
329
+ now: () => Date.now(),
330
+ sleep: (ms) => new Promise(resolve => setTimeout(resolve, ms)),
331
+ /**
332
+ * Monotonic, deliberately distinct from `now()`.
333
+ *
334
+ * `Date.now()` can step forward under NTP, which would make the measured
335
+ * stability gap satisfy the check when no real time had passed — spoofing the
336
+ * measurement that was introduced precisely to stop the gap being asserted on
337
+ * faith. Timestamps still use the wall clock, because `issuedAt` is compared
338
+ * across processes.
339
+ */
340
+ monotonicNow: () => performance.now(),
341
+ };
342
+ function buildFsPort() {
343
+ return {
344
+ read: (p) => safeRead(p),
345
+ sizeOf: (p) => {
346
+ try {
347
+ return statSync(p).size;
348
+ }
349
+ catch {
350
+ return null;
351
+ }
352
+ },
353
+ write: (p, content) => writeFileSync(p, content, 'utf-8'),
354
+ remove: (p) => unlinkSync(p),
355
+ };
356
+ }
357
+ /**
358
+ * Is `child` the same directory as `parent`, or below it?
359
+ *
360
+ * Exported for test: the prefix-sibling case (`/a/b-other` inside `/a/b`) is not
361
+ * reachable through the command without constructing a real directory pair, and
362
+ * a containment predicate is worth pinning directly.
363
+ *
364
+ * Falls back to lexical resolution when `realpathSync` throws — a path that does
365
+ * not exist yet cannot be canonicalised, and refusing on that basis would turn a
366
+ * missing directory into a confusing identity error.
367
+ */
368
+ export function isInside(parent, child) {
369
+ const canon = (p) => {
370
+ try {
371
+ return realpathSync(p);
372
+ }
373
+ catch {
374
+ return resolve(p);
375
+ }
376
+ };
377
+ const rel = relative(canon(parent), canon(child));
378
+ // '' means the same directory; anything starting with '..' escapes it; an
379
+ // absolute result means the two share no root at all.
380
+ return rel === '' || (!rel.startsWith(`..${sep}`) && rel !== '..' && !isAbsolute(rel));
381
+ }
382
+ function safeRead(p) {
383
+ try {
384
+ return readFileSync(p, 'utf-8');
385
+ }
386
+ catch {
387
+ return null;
388
+ }
389
+ }
390
+ /**
391
+ * Tracked-changes check.
392
+ *
393
+ * `--quiet` + exit code, not porcelain parsing: we want the single boolean
394
+ * "are there uncommitted TRACKED changes", and `git diff --quiet` answers it
395
+ * without us classifying paths. Untracked files are invisible to it, which is
396
+ * the behaviour the gate wants — the worktree legitimately carries untracked
397
+ * `.builder-*` scaffold, including the two files this very command writes.
398
+ */
399
+ function buildGitPort(worktree) {
400
+ return {
401
+ hasUncommittedTrackedChanges() {
402
+ for (const args of [
403
+ ['diff', '--quiet'],
404
+ ['diff', '--cached', '--quiet'],
405
+ ]) {
406
+ try {
407
+ execFileSync('git', args, { cwd: worktree, stdio: 'ignore' });
408
+ }
409
+ catch {
410
+ return true; // non-zero exit = differences exist
411
+ }
412
+ }
413
+ return false;
414
+ },
415
+ };
416
+ }
417
+ /**
418
+ * The two ways this command touches its own terminal.
419
+ *
420
+ * NOTE the deliberate absence of anything else. Phase 3's review established
421
+ * that `scheduleReentry` must remain the ONLY Tower call before the clear: a
422
+ * call added later in the sequence could fail once the context is already gone,
423
+ * and there would be nothing left to report it to.
424
+ */
425
+ function buildSelfTerminalPort(client, selfId, workspace) {
426
+ return {
427
+ /**
428
+ * A normal, formatted message with `deliverAfter`.
429
+ *
430
+ * Not `raw`: this is prose the harness should render as a message. And not a
431
+ * bare timer — `--delay` persists the body to the durable mailbox at request
432
+ * time, so it survives a Tower restart, and the render gate holds it until
433
+ * the prompt is verifiably clean.
434
+ */
435
+ async scheduleReentry(message, delaySeconds) {
436
+ const result = await client.sendMessage(selfId, message, {
437
+ from: selfId,
438
+ workspace,
439
+ fromWorkspace: workspace,
440
+ deliverAfter: delaySeconds,
441
+ });
442
+ if (!result.ok)
443
+ throw new Error(result.error || 'Re-entry scheduling failed');
444
+ // `ok` alone is not enough: a Tower that does not honour `deliverAfter`
445
+ // reports success and delivers the frame IMMEDIATELY, which turns the
446
+ // re-entry and the not-yet-sent `/clear` into the race the spec calls the
447
+ // damaging direction — the frame lands, the clear wipes it, and nobody
448
+ // comes back.
449
+ //
450
+ // Version skew is the realistic cause and it is about to matter: the live
451
+ // run in Phase 8 drives a subject builder whose Tower may predate this.
452
+ // Throwing here aborts BEFORE the clear, so an old Tower costs a refused
453
+ // refresh rather than a lost builder.
454
+ if (result.scheduled !== true) {
455
+ throw new Error('Tower accepted the re-entry but did not schedule it (no `scheduled` flag). ' +
456
+ 'That means it would be delivered immediately and then wiped by the clear. ' +
457
+ 'Refusing to continue — a Tower that ignores deliverAfter cannot be used for a ' +
458
+ 'self-refresh.');
459
+ }
460
+ },
461
+ /**
462
+ * `raw: true`, NOT `escape: true` — the same trap `afx refresh` documents.
463
+ *
464
+ * Tower's escape route writes a hardcoded ESC and discards the body, so
465
+ * binding this to `escape` would turn `/clear` into an interrupt: the run
466
+ * would report success while the builder kept its entire context.
467
+ */
468
+ async sendRaw(text) {
469
+ const result = await client.sendMessage(selfId, text, {
470
+ from: selfId,
471
+ workspace,
472
+ fromWorkspace: workspace,
473
+ raw: true,
474
+ });
475
+ if (!result.ok)
476
+ throw new Error(result.error || 'Raw write failed');
477
+ },
478
+ };
479
+ }
480
+ // ============================================================================
481
+ // Issue metadata
482
+ // ============================================================================
483
+ async function fetchIssuePayload(issueNumber, workspaceRoot) {
484
+ if (!issueNumber)
485
+ return undefined;
486
+ try {
487
+ const issue = await fetchForgeIssue(issueNumber, {
488
+ cwd: workspaceRoot,
489
+ forgeConfig: loadForgeConfig(workspaceRoot),
490
+ });
491
+ if (!issue)
492
+ return undefined;
493
+ return {
494
+ number: issueNumber,
495
+ title: issue.title,
496
+ body: issue.body || '(No description provided)',
497
+ };
498
+ }
499
+ catch {
500
+ // A missing issue is surfaced inside the re-orientation itself, with a
501
+ // recovery instruction. Failing the whole refresh over unreachable issue
502
+ // metadata would trade a complete refresh for a cosmetic one.
503
+ return undefined;
504
+ }
505
+ }
506
+ //# sourceMappingURL=self-refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-refresh.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/self-refresh.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/send.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS/C;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAkBnD;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAWxG;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAyDtD;AAiGD;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0H9D"}
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/send.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAc/C;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAkBnD;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAWxG;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAyDtD;AAiGD;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgJ9D"}
@@ -15,7 +15,12 @@ import { loadState } from '../state.js';
15
15
  import { getGlobalDbPath } from '../db/index.js';
16
16
  import { normalizeWorkspacePath } from '../utils/workspace-path.js';
17
17
  import { TowerClient } from '../lib/tower-client.js';
18
- const MAX_FILE_SIZE = 48 * 1024; // 48KB limit per spec
18
+ import { MAX_MESSAGE_BYTES, messageLimitError } from '../utils/message-format.js';
19
+ /**
20
+ * `--file` attachment cap. One constant with the message-body ceiling (Issue #1573): the file's
21
+ * content is APPENDED to the message, so two independent numbers could only ever disagree.
22
+ */
23
+ const MAX_FILE_SIZE = MAX_MESSAGE_BYTES;
19
24
  /**
20
25
  * Detect workspace root from CWD by walking up to find .git or .codev/config.json.
21
26
  * Builder worktrees are at .builders/<id>/ which is inside the workspace root.
@@ -261,6 +266,12 @@ export async function send(options) {
261
266
  const fileContent = readFileContent(options.file);
262
267
  message = message + '\n\nAttached content:\n```\n' + fileContent + '\n```';
263
268
  }
269
+ // Mirror Tower's body ceiling here (Issue #1573) so the refusal is local, immediate and
270
+ // identically worded, instead of a 400 the user has to interpret. Checked AFTER the --file
271
+ // append because that content travels in the same body and counts against the same limit.
272
+ const tooLarge = messageLimitError(message);
273
+ if (tooLarge)
274
+ fatal(tooLarge);
264
275
  logger.header('Sending Instruction');
265
276
  // Detect workspace for target resolution and sender provenance
266
277
  const workspace = detectWorkspaceRoot() ?? undefined;
@@ -331,7 +342,21 @@ export async function send(options) {
331
342
  `It delivers automatically when the prompt is clear.`);
332
343
  }
333
344
  else {
334
- logger.success(`Message delivered to ${result.resolvedTo ?? target}`);
345
+ // Issue #1573: report WHAT was sent, not just that a send happened. The failures this
346
+ // echo exists for (#1564: a ~1,900-char message arriving as its final ~30) all read as
347
+ // an unqualified success at the sender.
348
+ const size = result.bodyLength !== undefined ? ` (${result.bodyLength} bytes)` : '';
349
+ logger.success(`Message delivered to ${result.resolvedTo ?? target}${size}`);
350
+ // Issue #1365: an interrupt/escape that gave up waiting for the terminal's submission
351
+ // lock wrote unserialized, so its bytes may have interleaved with the delivery it
352
+ // skipped. The row is claimed `delivered` before the write (un-claiming would risk a
353
+ // double delivery), so without this the sender would read an unqualified success for a
354
+ // possibly-mangled body. Warn rather than fail: the write did happen.
355
+ if (result.degraded) {
356
+ logger.warn(`...but it was NOT serialized against a write already in flight on that terminal ` +
357
+ `(${result.degradedReason ?? 'wait ceiling expired'}), so it may have interleaved. ` +
358
+ `Check the agent's prompt before assuming it read cleanly.`);
359
+ }
335
360
  }
336
361
  }
337
362
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/send.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/send.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,13 @@ export declare function discoverResumeSession(worktreePath: string, isResume: bo
31
31
  args: string[];
32
32
  scriptFragment: string;
33
33
  } | undefined;
34
+ /**
35
+ * The reply channel, stated in the task-lane spawn prompt (#1574).
36
+ *
37
+ * Exported so a test pins the literal a task builder is actually given, rather than
38
+ * a paraphrase that could drift away from it.
39
+ */
40
+ export declare const TASK_REPLY_CHANNEL: string;
34
41
  /**
35
42
  * Spawn a new builder
36
43
  */