@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.
- package/dashboard-dist/assets/index-D3XaKpZW.js.map +1 -1
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +52 -1
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/reset/constants.d.ts +118 -0
- package/dist/agent-farm/commands/reset/constants.d.ts.map +1 -1
- package/dist/agent-farm/commands/reset/constants.js +118 -0
- package/dist/agent-farm/commands/reset/constants.js.map +1 -1
- package/dist/agent-farm/commands/reset/context.d.ts +18 -0
- package/dist/agent-farm/commands/reset/context.d.ts.map +1 -1
- package/dist/agent-farm/commands/reset/context.js +41 -0
- package/dist/agent-farm/commands/reset/context.js.map +1 -1
- package/dist/agent-farm/commands/reset/receipt.d.ts.map +1 -1
- package/dist/agent-farm/commands/reset/receipt.js +16 -5
- package/dist/agent-farm/commands/reset/receipt.js.map +1 -1
- package/dist/agent-farm/commands/reset/reorient.d.ts +1 -1
- package/dist/agent-farm/commands/reset/reorient.d.ts.map +1 -1
- package/dist/agent-farm/commands/reset/reorient.js +8 -1
- package/dist/agent-farm/commands/reset/reorient.js.map +1 -1
- package/dist/agent-farm/commands/reset/self.d.ts +335 -0
- package/dist/agent-farm/commands/reset/self.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/self.js +636 -0
- package/dist/agent-farm/commands/reset/self.js.map +1 -0
- package/dist/agent-farm/commands/reset.d.ts.map +1 -1
- package/dist/agent-farm/commands/reset.js +23 -18
- package/dist/agent-farm/commands/reset.js.map +1 -1
- package/dist/agent-farm/commands/self-refresh.d.ts +60 -0
- package/dist/agent-farm/commands/self-refresh.d.ts.map +1 -0
- package/dist/agent-farm/commands/self-refresh.js +506 -0
- package/dist/agent-farm/commands/self-refresh.js.map +1 -0
- package/dist/agent-farm/commands/send.d.ts.map +1 -1
- package/dist/agent-farm/commands/send.js +27 -2
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts +7 -0
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +13 -1
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/lib/tower-client.d.ts +12 -0
- package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tower-client.js +12 -0
- package/dist/agent-farm/lib/tower-client.js.map +1 -1
- package/dist/agent-farm/servers/mailbox-delivery.d.ts +141 -13
- package/dist/agent-farm/servers/mailbox-delivery.d.ts.map +1 -1
- package/dist/agent-farm/servers/mailbox-delivery.js +172 -16
- package/dist/agent-farm/servers/mailbox-delivery.js.map +1 -1
- package/dist/agent-farm/servers/mailbox-wiring.d.ts +23 -1
- package/dist/agent-farm/servers/mailbox-wiring.d.ts.map +1 -1
- package/dist/agent-farm/servers/mailbox-wiring.js +91 -31
- package/dist/agent-farm/servers/mailbox-wiring.js.map +1 -1
- package/dist/agent-farm/servers/message-write.d.ts +58 -18
- package/dist/agent-farm/servers/message-write.d.ts.map +1 -1
- package/dist/agent-farm/servers/message-write.js +73 -28
- package/dist/agent-farm/servers/message-write.js.map +1 -1
- package/dist/agent-farm/servers/render-gate.d.ts +13 -0
- package/dist/agent-farm/servers/render-gate.d.ts.map +1 -1
- package/dist/agent-farm/servers/render-gate.js +21 -0
- package/dist/agent-farm/servers/render-gate.js.map +1 -1
- package/dist/agent-farm/servers/session-submit.d.ts +220 -27
- package/dist/agent-farm/servers/session-submit.d.ts.map +1 -1
- package/dist/agent-farm/servers/session-submit.js +333 -42
- package/dist/agent-farm/servers/session-submit.js.map +1 -1
- package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-routes.js +114 -25
- package/dist/agent-farm/servers/tower-routes.js.map +1 -1
- package/dist/agent-farm/servers/tower-tunnel.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-tunnel.js +14 -0
- package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
- package/dist/agent-farm/types.d.ts +36 -1
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/message-format.d.ts +60 -4
- package/dist/agent-farm/utils/message-format.d.ts.map +1 -1
- package/dist/agent-farm/utils/message-format.js +115 -22
- package/dist/agent-farm/utils/message-format.js.map +1 -1
- package/dist/agent-farm/utils/server-utils.d.ts +8 -2
- package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
- package/dist/agent-farm/utils/server-utils.js +19 -2
- package/dist/agent-farm/utils/server-utils.js.map +1 -1
- package/dist/commands/porch/context-refresh.d.ts +181 -0
- package/dist/commands/porch/context-refresh.d.ts.map +1 -0
- package/dist/commands/porch/context-refresh.js +270 -0
- package/dist/commands/porch/context-refresh.js.map +1 -0
- package/dist/commands/porch/index.d.ts +6 -0
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +46 -0
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/next.d.ts +0 -9
- package/dist/commands/porch/next.d.ts.map +1 -1
- package/dist/commands/porch/next.js +133 -4
- package/dist/commands/porch/next.js.map +1 -1
- package/dist/commands/porch/protocol.d.ts.map +1 -1
- package/dist/commands/porch/protocol.js +102 -0
- package/dist/commands/porch/protocol.js.map +1 -1
- package/dist/commands/porch/types.d.ts +61 -0
- package/dist/commands/porch/types.d.ts.map +1 -1
- package/dist/lib/self-refresh-invocation.d.ts +60 -0
- package/dist/lib/self-refresh-invocation.d.ts.map +1 -0
- package/dist/lib/self-refresh-invocation.js +64 -0
- package/dist/lib/self-refresh-invocation.js.map +1 -0
- package/dist/lib/test-env.d.ts +50 -0
- package/dist/lib/test-env.d.ts.map +1 -1
- package/dist/lib/test-env.js +76 -0
- package/dist/lib/test-env.js.map +1 -1
- package/package.json +4 -4
- package/skeleton/.claude/skills/arch-save/SKILL.md +8 -2
- package/skeleton/.claude/skills/builder-refresh/SKILL.md +138 -0
- package/skeleton/.codex/skills/arch-save/SKILL.md +8 -2
- package/skeleton/.codex/skills/builder-refresh/SKILL.md +138 -0
- package/skeleton/protocol-schema.json +17 -0
- package/skeleton/protocols/air/protocol.json +1 -1
- package/skeleton/protocols/aspir/protocol.json +5 -1
- package/skeleton/protocols/bugfix/protocol.json +1 -1
- package/skeleton/protocols/experiment/protocol.json +1 -1
- package/skeleton/protocols/maintain/protocol.json +1 -1
- package/skeleton/protocols/pir/protocol.json +1 -1
- package/skeleton/protocols/protocol-schema.json +17 -0
- package/skeleton/protocols/research/protocol.json +1 -1
- package/skeleton/protocols/spike/protocol.json +1 -1
- 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;
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAElF;;;GAGG;AACH,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB;IACjC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,yEAAyE;IACzE,6EAA6E;IAC7E,qEAAqE;IACrE,uEAAuE;IACvE,oEAAoE;IACpE,8EAA8E;IAC9E,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC5D,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3C,8BAA8B;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QAChG,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,eAAuB,EAAE,GAAY;IAC9F,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,sEAAsE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxG,MAAM,IAAI,GAAG,WAAW;QACtB,CAAC,CAAC,0MAA0M;QAC5M,CAAC,CAAC,wEAAwE,CAAC;IAC7E,OAAO,CACL,iDAAiD,eAAe,KAAK;QACrE,+BAA+B,MAAM,KAAK,MAAM,MAAM,IAAI,GAAG;QAC7D,oGAAoG,CACrG,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,+EAA+E;IAC/E,4EAA4E;IAC5E,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjC,uEAAuE;IACvE,8EAA8E;IAC9E,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,0DAA0D;IAC1D,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,wBAAwB,CAChC,iDAAiD,eAAe,KAAK;YACnE,0BAA0B,MAAM,0BAA0B;YAC1D,oGAAoG,CACvG,CAAC;IACJ,CAAC;IAED,IAAI,GAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,wBAAwB,CAAC,0BAA0B,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,CAAC;QACH,wEAAwE;QACxE,oEAAoE;QACpE,qEAAqE;QACrE,2BAA2B;QAC3B,MAAM,EAAE,GAAG,sBAAsB,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QAC5E,MAAM,IAAI,GAAG,GAAG;aACb,OAAO,CAAC,qFAAqF,CAAC;aAC9F,GAAG,CAAC,EAAE,CAA4C,CAAC;QAEtD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,iBAAiB,CAAC,CAAC;QAC/D,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,EAAE,CAAC;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,eAAe,CAAC,CAAC;QAC7E,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAEzB,MAAM,IAAI,wBAAwB,CAChC,qDAAqD,eAAe,KAAK;YACvE,8BAA8B,MAAM,kBAAkB,EAAE,gDAAgD;YACxG,oGAAoG,CACvG,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,mBAAmB,UAAU,CAAC,MAAM,eAAe,aAAa,gBAAgB,CACjF,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,SAAS;IACtB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACxD,CAAC;AAaD,KAAK,UAAU,SAAS,CACtB,MAAmB,EACnB,OAAe,EACf,SAA6B,EAC7B,IAAY,EACZ,OAAoB;IAEpB,uEAAuE;IACvE,uEAAuE;IACvE,uEAAuE;IACvE,oEAAoE;IACpE,MAAM,KAAK,GAAG,SAAS,CAAC,mBAAmB,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAChE,wEAAwE;IACxE,8EAA8E;IAC9E,+EAA+E;IAC/E,MAAM,OAAO,GAAqB,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAEzF,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE;gBAC3D,IAAI;gBACJ,SAAS;gBACT,aAAa,EAAE,SAAS;gBACxB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,gEAAgE;gBAChE,YAAY,EAAE,OAAO,CAAC,KAAK;aAC5B,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;YACnD,CAAC;YACD,8EAA8E;YAC9E,6EAA6E;YAC7E,+EAA+E;YAC/E,kCAAkC;YAClC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAC5F,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,EAAE,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3G,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAoB;IAC7C,wBAAwB;IACxB,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9B,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAE7B,+EAA+E;IAC/E,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACtC,OAAO,GAAG,MAAM,CAAC;QACjB,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;IAED,sCAAsC;IACtC,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,OAAO,GAAG,MAAM,SAAS,EAAE,CAAC;IAC9B,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,KAAK,CAAC,sFAAsF,CAAC,CAAC;IAChG,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,kFAAkF,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;QAC1B,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACxD,CAAC;IAED,qDAAqD;IACrD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,GAAG,OAAO,GAAG,8BAA8B,GAAG,WAAW,GAAG,OAAO,CAAC;IAC7E,CAAC;IAED,wFAAwF;IACxF,2FAA2F;IAC3F,0FAA0F;IAC1F,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,QAAQ;QAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE9B,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAErC,+DAA+D;IAC/D,MAAM,SAAS,GAAG,mBAAmB,EAAE,IAAI,SAAS,CAAC;IAErD,+EAA+E;IAC/E,0EAA0E;IAC1E,yEAAyE;IACzE,6EAA6E;IAC7E,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,sBAAsB,EAAE,IAAI,WAAW,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,0BAA0B;IAC1B,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,4BAA4B;QAC5B,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAE3E,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,gBAAgB,OAAO,CAAC,SAAS,CAAC,MAAM,gBAAgB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzG,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxF,MAAM,CAAC,IAAI,CACT,YAAY,OAAO,CAAC,IAAI,CAAC,MAAM,gBAAgB,MAAM,IAAI;gBACvD,uDAAuD,CAC1D,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,OAAO,CACZ,iBAAiB,OAAO,CAAC,SAAS,CAAC,MAAM,iBAAiB,OAAO,CAAC,KAAK,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7G,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,yHAAyH,CAAC,CAAC;QACzI,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,MAAM,CAAC,MAAM,gBAAgB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;SAAM,CAAC;QACN,yEAAyE;QACzE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAO,EAAE,OAAO,EAAE;gBACxD,IAAI;gBACJ,SAAS;gBACT,aAAa,EAAE,SAAS;gBACxB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,YAAY,EAAE,OAAO,CAAC,KAAK;aAC5B,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;YACnD,CAAC;YAED,6EAA6E;YAC7E,8EAA8E;YAC9E,8EAA8E;YAC9E,2EAA2E;YAC3E,iBAAiB;YACjB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,MAAM,CAAC,OAAO,CACZ,yBAAyB,MAAM,CAAC,UAAU,IAAI,MAAM,MAAM,OAAO,CAAC,KAAK,IAAI;oBACzE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACnE,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,iHAAiH,CAAC,CAAC;YACjI,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CACT,oBAAoB,MAAM,CAAC,UAAU,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,SAAS,GAAG;oBAC/E,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;oBAClE,qDAAqD,CACxD,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,sFAAsF;gBACtF,uFAAuF;gBACvF,wCAAwC;gBACxC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,UAAU,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpF,MAAM,CAAC,OAAO,CAAC,wBAAwB,MAAM,CAAC,UAAU,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;gBAC7E,sFAAsF;gBACtF,kFAAkF;gBAClF,qFAAqF;gBACrF,uFAAuF;gBACvF,sEAAsE;gBACtE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,MAAM,CAAC,IAAI,CACT,kFAAkF;wBAChF,IAAI,MAAM,CAAC,cAAc,IAAI,sBAAsB,iCAAiC;wBACpF,2DAA2D,CAC9D,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -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
|
*/
|