baxian 1.2.53 → 1.2.55
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/dist/agent/bootstrap-poller.d.ts +2 -1
- package/dist/agent/bootstrap-poller.d.ts.map +1 -1
- package/dist/agent/bootstrap-poller.js +3 -1
- package/dist/agent/bootstrap-poller.js.map +1 -1
- package/dist/agent/bootstrap.d.ts +1 -1
- package/dist/agent/bootstrap.d.ts.map +1 -1
- package/dist/agent/bootstrap.js +12 -19
- package/dist/agent/bootstrap.js.map +1 -1
- package/dist/agent/branch.d.ts +64 -0
- package/dist/agent/branch.d.ts.map +1 -0
- package/dist/agent/branch.js +386 -0
- package/dist/agent/branch.js.map +1 -0
- package/dist/agent/detect/manifests/claude-code.json +2 -2
- package/dist/agent/detect/manifests/opencode.json +44 -0
- package/dist/agent/detect/manifests/qodercli.json +49 -0
- package/dist/agent/detect/region.d.ts +1 -0
- package/dist/agent/detect/region.d.ts.map +1 -1
- package/dist/agent/detect/region.js +27 -19
- package/dist/agent/detect/region.js.map +1 -1
- package/dist/agent/lineage.d.ts +1 -1
- package/dist/agent/lineage.d.ts.map +1 -1
- package/dist/agent/lineage.js +6 -7
- package/dist/agent/lineage.js.map +1 -1
- package/dist/agent/manager.d.ts +13 -9
- package/dist/agent/manager.d.ts.map +1 -1
- package/dist/agent/manager.js +1071 -426
- package/dist/agent/manager.js.map +1 -1
- package/dist/agent/preflight.d.ts.map +1 -1
- package/dist/agent/preflight.js +21 -15
- package/dist/agent/preflight.js.map +1 -1
- package/dist/agent/prompt.d.ts +2 -2
- package/dist/agent/prompt.d.ts.map +1 -1
- package/dist/agent/prompt.js +9 -7
- package/dist/agent/prompt.js.map +1 -1
- package/dist/agent/repo-store.d.ts +8 -4
- package/dist/agent/repo-store.d.ts.map +1 -1
- package/dist/agent/repo-store.js +142 -54
- package/dist/agent/repo-store.js.map +1 -1
- package/dist/agent/review-transport.d.ts +6 -4
- package/dist/agent/review-transport.d.ts.map +1 -1
- package/dist/agent/review-transport.js +39 -13
- package/dist/agent/review-transport.js.map +1 -1
- package/dist/agent/runner.d.ts +1 -0
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +5 -0
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/tmux-probe-poller.d.ts.map +1 -1
- package/dist/agent/tmux-probe-poller.js +2 -0
- package/dist/agent/tmux-probe-poller.js.map +1 -1
- package/dist/agent/tmux.d.ts +2 -1
- package/dist/agent/tmux.d.ts.map +1 -1
- package/dist/agent/tmux.js +73 -7
- package/dist/agent/tmux.js.map +1 -1
- package/dist/api/probe.d.ts.map +1 -1
- package/dist/api/probe.js +9 -1
- package/dist/api/probe.js.map +1 -1
- package/dist/api/projects.d.ts.map +1 -1
- package/dist/api/projects.js +228 -56
- package/dist/api/projects.js.map +1 -1
- package/dist/config/validator.d.ts.map +1 -1
- package/dist/config/validator.js +58 -8
- package/dist/config/validator.js.map +1 -1
- package/dist/event/server-handlers.js +8 -8
- package/dist/event/server-handlers.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/shared/constants.d.ts +0 -1
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +0 -1
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/types.d.ts +15 -4
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js.map +1 -1
- package/dist/skills/baxian-pr-feedback/SKILL.md +1 -1
- package/dist/skills/baxian-pr-recheck/SKILL.md +1 -1
- package/dist/skills/baxian-pr-review/SKILL.md +1 -1
- package/dist/skills/baxian-server-feedback/SKILL.md +4 -4
- package/dist/skills/baxian-server-review/SKILL.md +7 -7
- package/dist/skills/baxian-signals/SKILL.md +3 -1
- package/dist/skills/baxian-task-check/SKILL.md +4 -4
- package/dist/state/agent-store.js +4 -4
- package/dist/state/agent-store.js.map +1 -1
- package/dist/state/lock.d.ts +15 -2
- package/dist/state/lock.d.ts.map +1 -1
- package/dist/state/lock.js +104 -21
- package/dist/state/lock.js.map +1 -1
- package/dist/state/task-store.d.ts.map +1 -1
- package/dist/state/task-store.js +5 -2
- package/dist/state/task-store.js.map +1 -1
- package/dist/web/assets/index-BmnSiyut.js +13 -0
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
- package/dist/agent/worktree.d.ts +0 -32
- package/dist/agent/worktree.d.ts.map +0 -1
- package/dist/agent/worktree.js +0 -291
- package/dist/agent/worktree.js.map +0 -1
- package/dist/web/assets/index-DAPd4Nv_.js +0 -13
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { BRANCH_PREFIX, isValidBranchName } from '../shared/index.js';
|
|
3
|
+
import { execNetwork, GIT_NET_ENV } from './net-exec.js';
|
|
4
|
+
import { shellQuote } from './runner.js';
|
|
5
|
+
import { ensureBaxianRuntimeDirsSafe } from './repo-store.js';
|
|
6
|
+
export function isAutoDeletableTaskBranch(identity) {
|
|
7
|
+
if (!identity.taskId || !identity.branchCreatedByBaxian)
|
|
8
|
+
return false;
|
|
9
|
+
const branch = `${BRANCH_PREFIX}${identity.taskId}`;
|
|
10
|
+
return identity.taskBranch === branch && identity.actualRef === `refs/heads/${branch}`;
|
|
11
|
+
}
|
|
12
|
+
export class DirtyWorkdirError extends Error {
|
|
13
|
+
constructor(workdir) {
|
|
14
|
+
super(`Workdir ${workdir} has staged, tracked, untracked, conflicted, or dirty submodule changes`);
|
|
15
|
+
this.name = 'DirtyWorkdirError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class ReviewHeadMismatchError extends Error {
|
|
19
|
+
branch;
|
|
20
|
+
expectedHeadSha;
|
|
21
|
+
actualHeadSha;
|
|
22
|
+
constructor(branch, expectedHeadSha, actualHeadSha) {
|
|
23
|
+
super(`Fetched review head mismatch for ${branch}: expected ${expectedHeadSha}, got ${actualHeadSha}`);
|
|
24
|
+
this.branch = branch;
|
|
25
|
+
this.expectedHeadSha = expectedHeadSha;
|
|
26
|
+
this.actualHeadSha = actualHeadSha;
|
|
27
|
+
this.name = 'ReviewHeadMismatchError';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export class BranchManager {
|
|
31
|
+
runner;
|
|
32
|
+
constructor(runner) {
|
|
33
|
+
this.runner = runner;
|
|
34
|
+
}
|
|
35
|
+
async assertClean(workdir) {
|
|
36
|
+
const result = await this.runner.exec(`git -C ${shellQuote(workdir)} status --porcelain=v1 -z ` +
|
|
37
|
+
`--untracked-files=all --ignore-submodules=none`);
|
|
38
|
+
if (result.exitCode !== 0) {
|
|
39
|
+
throw new Error(`git status failed in ${workdir}: ${result.stderr.trim() || `exit ${result.exitCode}`}`);
|
|
40
|
+
}
|
|
41
|
+
if (result.stdout.length > 0)
|
|
42
|
+
throw new DirtyWorkdirError(workdir);
|
|
43
|
+
}
|
|
44
|
+
async switchToTaskBranch(workdir, taskId, branch, branchCreatedByBaxian) {
|
|
45
|
+
if (!isValidBranchName(branch))
|
|
46
|
+
throw new Error(`Invalid task branch: ${branch}`);
|
|
47
|
+
if (branchCreatedByBaxian && branch !== `${BRANCH_PREFIX}${taskId}`) {
|
|
48
|
+
throw new Error(`baxian task ${taskId} must use exact branch ${BRANCH_PREFIX}${taskId}`);
|
|
49
|
+
}
|
|
50
|
+
await this.assertClean(workdir);
|
|
51
|
+
await this.fetch(workdir);
|
|
52
|
+
const localRef = `refs/heads/${branch}`;
|
|
53
|
+
const local = await this.runner.exec(`git -C ${shellQuote(workdir)} show-ref --verify --quiet ${shellQuote(localRef)}`);
|
|
54
|
+
if (local.exitCode === 0) {
|
|
55
|
+
await this.verifyTaskBranchMarker(workdir, branch, taskId);
|
|
56
|
+
await this.ensureTaskBranchUpstream(workdir, branch);
|
|
57
|
+
await this.switch(workdir, `--no-guess ${shellQuote(branch)}`);
|
|
58
|
+
}
|
|
59
|
+
else if (local.exitCode === 1) {
|
|
60
|
+
await this.assertRemoteBranchAbsent(workdir, branch);
|
|
61
|
+
const baseSha = await this.resolveCommit(workdir, 'origin/HEAD');
|
|
62
|
+
await this.switch(workdir, `--no-track -c ${shellQuote(branch)} ${shellQuote(baseSha)}`);
|
|
63
|
+
await this.markTaskBranch(workdir, branch, taskId);
|
|
64
|
+
const head = await this.resolveCommit(workdir, 'HEAD');
|
|
65
|
+
if (head !== baseSha) {
|
|
66
|
+
throw new Error(`New branch ${branch} started at ${head}, expected base ${baseSha}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
throw new Error(`Failed to probe local branch ${branch}: ${local.stderr.trim()}`);
|
|
71
|
+
}
|
|
72
|
+
await this.verifyRef(workdir, localRef);
|
|
73
|
+
}
|
|
74
|
+
async switchToRemoteBranchDetached(workdir, branch, expectedHeadSha) {
|
|
75
|
+
if (!isValidBranchName(branch))
|
|
76
|
+
throw new Error(`Invalid remote branch: ${branch}`);
|
|
77
|
+
if (!/^[0-9a-f]{40,64}$/i.test(expectedHeadSha)) {
|
|
78
|
+
throw new Error(`Review branch ${branch} is missing a valid expected head SHA`);
|
|
79
|
+
}
|
|
80
|
+
await this.assertClean(workdir);
|
|
81
|
+
const remoteRef = `refs/remotes/origin/${branch}`;
|
|
82
|
+
const fetch = await execNetwork(this.runner, `${GIT_NET_ENV} git -C ${shellQuote(workdir)} fetch origin -- ` +
|
|
83
|
+
`${shellQuote(`+refs/heads/${branch}:${remoteRef}`)}`);
|
|
84
|
+
if (fetch.exitCode !== 0)
|
|
85
|
+
throw new Error(`Failed to fetch branch ${branch}: ${fetch.stderr.trim()}`);
|
|
86
|
+
const headSha = await this.resolveCommit(workdir, remoteRef);
|
|
87
|
+
if (headSha !== expectedHeadSha) {
|
|
88
|
+
throw new ReviewHeadMismatchError(branch, expectedHeadSha, headSha);
|
|
89
|
+
}
|
|
90
|
+
await this.switchDetached(workdir, headSha);
|
|
91
|
+
}
|
|
92
|
+
async switchToDefaultDetached(workdir) {
|
|
93
|
+
await this.assertClean(workdir);
|
|
94
|
+
await this.fetch(workdir);
|
|
95
|
+
await this.switchDetached(workdir, await this.resolveCommit(workdir, 'origin/HEAD'));
|
|
96
|
+
}
|
|
97
|
+
async parkOnDefaultDetached(workdir) {
|
|
98
|
+
await this.assertClean(workdir);
|
|
99
|
+
await this.switchDetached(workdir, await this.resolveCommit(workdir, 'origin/HEAD'));
|
|
100
|
+
}
|
|
101
|
+
async materializeReviewHead(workdir, opts) {
|
|
102
|
+
await this.assertClean(workdir);
|
|
103
|
+
if (!opts.baseSha || !opts.headSha || !opts.headTree) {
|
|
104
|
+
throw new Error('Server review head metadata is incomplete; refusing an unverified checkout');
|
|
105
|
+
}
|
|
106
|
+
const head = await this.runner.exec(`git -C ${shellQuote(workdir)} cat-file -e ${shellQuote(`${opts.headSha}^{commit}`)}`);
|
|
107
|
+
if (head.exitCode === 0) {
|
|
108
|
+
await this.switchDetached(workdir, opts.headSha);
|
|
109
|
+
await this.verifyTree(workdir, opts.headTree);
|
|
110
|
+
return { mode: 'head' };
|
|
111
|
+
}
|
|
112
|
+
await this.fetch(workdir);
|
|
113
|
+
await this.resolveCommit(workdir, opts.baseSha);
|
|
114
|
+
await this.switchDetached(workdir, opts.baseSha);
|
|
115
|
+
await ensureBaxianRuntimeDirsSafe(this.runner, workdir);
|
|
116
|
+
const patchFile = `${workdir}/.baxian/review-inbox/.materialize-${randomBytes(8).toString('hex')}.patch`;
|
|
117
|
+
await this.runner.writeFile(patchFile, opts.patch);
|
|
118
|
+
let operationError;
|
|
119
|
+
try {
|
|
120
|
+
if (opts.patch.trim() !== '') {
|
|
121
|
+
const apply = await this.runner.exec(`git -C ${shellQuote(workdir)} apply --index --binary ${shellQuote(patchFile)}`);
|
|
122
|
+
if (apply.exitCode !== 0) {
|
|
123
|
+
throw new Error(`Review patch apply failed: ${apply.stderr.trim()}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const staged = await this.runner.exec(`git -C ${shellQuote(workdir)} diff --cached --quiet`);
|
|
127
|
+
if (staged.exitCode === 1)
|
|
128
|
+
await this.commitReviewHead(workdir, opts.headSha);
|
|
129
|
+
else if (staged.exitCode !== 0)
|
|
130
|
+
throw new Error(`Review index probe failed: ${staged.stderr.trim()}`);
|
|
131
|
+
await this.verifyTree(workdir, opts.headTree);
|
|
132
|
+
return { mode: 'head' };
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
operationError = err;
|
|
136
|
+
throw err;
|
|
137
|
+
}
|
|
138
|
+
finally {
|
|
139
|
+
const removed = await this.runner.exec(`rm -f ${shellQuote(patchFile)}`);
|
|
140
|
+
if (removed.exitCode !== 0) {
|
|
141
|
+
const cleanupError = new Error(`Review patch cleanup failed: ${removed.stderr.trim()}`);
|
|
142
|
+
if (operationError !== undefined) {
|
|
143
|
+
throw new AggregateError([operationError, cleanupError], 'Review head materialization and patch cleanup both failed');
|
|
144
|
+
}
|
|
145
|
+
throw cleanupError;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async cleanupTaskBranch(workdir, identity, assertOwner) {
|
|
150
|
+
if (!identity.taskId || !identity.taskBranch) {
|
|
151
|
+
return { status: 'skipped', reason: 'missing task branch identity' };
|
|
152
|
+
}
|
|
153
|
+
const actualRef = `refs/heads/${identity.taskBranch}`;
|
|
154
|
+
if (!isAutoDeletableTaskBranch({ ...identity, actualRef })) {
|
|
155
|
+
return { status: 'skipped', reason: 'branch is not provably baxian-owned' };
|
|
156
|
+
}
|
|
157
|
+
await this.assertClean(workdir);
|
|
158
|
+
const exists = await this.runner.exec(`git -C ${shellQuote(workdir)} show-ref --verify --quiet ${shellQuote(actualRef)}`);
|
|
159
|
+
if (exists.exitCode === 1)
|
|
160
|
+
return { status: 'deleted' };
|
|
161
|
+
if (exists.exitCode !== 0) {
|
|
162
|
+
return { status: 'pending', reason: `local ref probe failed: ${exists.stderr.trim()}` };
|
|
163
|
+
}
|
|
164
|
+
const marker = await this.runner.exec(`git -C ${shellQuote(workdir)} config --local --get ` +
|
|
165
|
+
`${shellQuote(`branch.${identity.taskBranch}.baxian-task-id`)}`);
|
|
166
|
+
if (marker.exitCode === 1) {
|
|
167
|
+
return { status: 'skipped', reason: 'local branch lacks the exact baxian ownership marker' };
|
|
168
|
+
}
|
|
169
|
+
if (marker.exitCode !== 0) {
|
|
170
|
+
return {
|
|
171
|
+
status: 'pending',
|
|
172
|
+
reason: `baxian ownership marker probe failed: ${marker.stderr.trim()}`,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
if (marker.stdout.trim() !== identity.taskId) {
|
|
176
|
+
return { status: 'skipped', reason: 'local branch lacks the exact baxian ownership marker' };
|
|
177
|
+
}
|
|
178
|
+
const localTip = await this.resolveCommit(workdir, actualRef);
|
|
179
|
+
const remoteRef = `refs/remotes/origin/${identity.taskBranch}`;
|
|
180
|
+
try {
|
|
181
|
+
if (!await this.remoteBranchExists(workdir, identity.taskBranch)) {
|
|
182
|
+
return {
|
|
183
|
+
status: 'skipped',
|
|
184
|
+
reason: 'remote branch is absent; preserving the local branch without retry',
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
return {
|
|
190
|
+
status: 'pending',
|
|
191
|
+
reason: `remote branch probe failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
let fetched;
|
|
195
|
+
try {
|
|
196
|
+
fetched = await execNetwork(this.runner, `${GIT_NET_ENV} git -C ${shellQuote(workdir)} fetch origin -- ` +
|
|
197
|
+
`${shellQuote(`+refs/heads/${identity.taskBranch}:${remoteRef}`)}`);
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
return {
|
|
201
|
+
status: 'pending',
|
|
202
|
+
reason: `remote fetch failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
if (fetched.exitCode !== 0) {
|
|
206
|
+
try {
|
|
207
|
+
if (!await this.remoteBranchExists(workdir, identity.taskBranch)) {
|
|
208
|
+
return {
|
|
209
|
+
status: 'skipped',
|
|
210
|
+
reason: 'remote branch disappeared during cleanup; preserving the local branch without retry',
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
return {
|
|
216
|
+
status: 'pending',
|
|
217
|
+
reason: `remote branch re-probe failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
return { status: 'pending', reason: `remote branch fetch failed: ${fetched.stderr.trim()}` };
|
|
221
|
+
}
|
|
222
|
+
const upstream = await this.runner.exec(`git -C ${shellQuote(workdir)} rev-parse --symbolic-full-name ` +
|
|
223
|
+
`${shellQuote(`${identity.taskBranch}@{upstream}`)}`);
|
|
224
|
+
if (upstream.exitCode !== 0 || upstream.stdout.trim() !== remoteRef) {
|
|
225
|
+
return { status: 'pending', reason: `upstream is not exact ${remoteRef}` };
|
|
226
|
+
}
|
|
227
|
+
const remoteTip = await this.resolveCommit(workdir, remoteRef);
|
|
228
|
+
const contained = await this.runner.exec(`git -C ${shellQuote(workdir)} merge-base --is-ancestor ` +
|
|
229
|
+
`${shellQuote(localTip)} ${shellQuote(remoteTip)}`);
|
|
230
|
+
if (contained.exitCode === 1) {
|
|
231
|
+
return { status: 'pending', reason: 'remote branch does not contain the local tip' };
|
|
232
|
+
}
|
|
233
|
+
if (contained.exitCode !== 0) {
|
|
234
|
+
return {
|
|
235
|
+
status: 'pending',
|
|
236
|
+
reason: `remote ancestry probe failed: ${contained.stderr.trim()}`,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
await assertOwner();
|
|
240
|
+
await this.assertClean(workdir);
|
|
241
|
+
await this.switchDetached(workdir, await this.resolveCommit(workdir, 'origin/HEAD'));
|
|
242
|
+
await assertOwner();
|
|
243
|
+
const deleted = await this.runner.exec(`git -C ${shellQuote(workdir)} branch -d -- ${shellQuote(identity.taskBranch)}`);
|
|
244
|
+
if (deleted.exitCode !== 0) {
|
|
245
|
+
return {
|
|
246
|
+
status: 'pending',
|
|
247
|
+
reason: `git branch -d refused: ${deleted.stderr.trim()}`,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
const remaining = await this.runner.exec(`git -C ${shellQuote(workdir)} show-ref --verify --quiet ${shellQuote(actualRef)}`);
|
|
251
|
+
if (remaining.exitCode === 0) {
|
|
252
|
+
return { status: 'pending', reason: 'local ref still exists after deletion' };
|
|
253
|
+
}
|
|
254
|
+
if (remaining.exitCode === 1)
|
|
255
|
+
return { status: 'deleted' };
|
|
256
|
+
return {
|
|
257
|
+
status: 'pending',
|
|
258
|
+
reason: `local ref deletion verification failed: ${remaining.stderr.trim()}`,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
async currentRef(workdir) {
|
|
262
|
+
const result = await this.runner.exec(`git -C ${shellQuote(workdir)} symbolic-ref -q HEAD`);
|
|
263
|
+
if (result.exitCode === 1)
|
|
264
|
+
return null;
|
|
265
|
+
if (result.exitCode !== 0)
|
|
266
|
+
throw new Error(`Failed to resolve current ref: ${result.stderr.trim()}`);
|
|
267
|
+
return result.stdout.trim();
|
|
268
|
+
}
|
|
269
|
+
async listLocalTaskRefs(workdir) {
|
|
270
|
+
const result = await this.runner.exec(`git -C ${shellQuote(workdir)} for-each-ref --format=${shellQuote('%(refname)')} ` +
|
|
271
|
+
`${shellQuote(`refs/heads/${BRANCH_PREFIX}`)}`);
|
|
272
|
+
if (result.exitCode !== 0) {
|
|
273
|
+
throw new Error(`Failed to list local baxian branch candidates: ${result.stderr.trim()}`);
|
|
274
|
+
}
|
|
275
|
+
return result.stdout
|
|
276
|
+
.split('\n')
|
|
277
|
+
.map(ref => ref.trim())
|
|
278
|
+
.filter(ref => ref.startsWith(`refs/heads/${BRANCH_PREFIX}`));
|
|
279
|
+
}
|
|
280
|
+
async assertRemoteBranchAbsent(workdir, branch) {
|
|
281
|
+
if (await this.remoteBranchExists(workdir, branch)) {
|
|
282
|
+
throw new Error(`Branch ${branch} already exists on origin; refusing to create it`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
async remoteBranchExists(workdir, branch) {
|
|
286
|
+
const result = await execNetwork(this.runner, `${GIT_NET_ENV} git -C ${shellQuote(workdir)} ls-remote --heads origin -- ` +
|
|
287
|
+
`${shellQuote(`refs/heads/${branch}`)}`);
|
|
288
|
+
if (result.exitCode !== 0) {
|
|
289
|
+
throw new Error(`Failed to probe remote branch ${branch}: ${result.stderr.trim()}`);
|
|
290
|
+
}
|
|
291
|
+
return result.stdout.trim() !== '';
|
|
292
|
+
}
|
|
293
|
+
async verifyUpstreamIfPresent(workdir, branch) {
|
|
294
|
+
const expected = `refs/remotes/origin/${branch}`;
|
|
295
|
+
const upstream = await this.readUpstream(workdir, branch);
|
|
296
|
+
if (upstream && upstream !== expected) {
|
|
297
|
+
throw new Error(`Branch ${branch} tracks ${upstream}, expected ${expected}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
async ensureTaskBranchUpstream(workdir, branch) {
|
|
301
|
+
await this.verifyUpstreamIfPresent(workdir, branch);
|
|
302
|
+
if (await this.readUpstream(workdir, branch))
|
|
303
|
+
return;
|
|
304
|
+
const configured = await this.runner.exec(`git -C ${shellQuote(workdir)} config --local ${shellQuote(`branch.${branch}.remote`)} origin && ` +
|
|
305
|
+
`git -C ${shellQuote(workdir)} config --local ${shellQuote(`branch.${branch}.merge`)} ` +
|
|
306
|
+
`${shellQuote(`refs/heads/${branch}`)}`);
|
|
307
|
+
if (configured.exitCode !== 0) {
|
|
308
|
+
throw new Error(`Failed to configure exact upstream for ${branch}: ${configured.stderr.trim()}`);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
async readUpstream(workdir, branch) {
|
|
312
|
+
const localRef = `refs/heads/${branch}`;
|
|
313
|
+
const result = await this.runner.exec(`git -C ${shellQuote(workdir)} for-each-ref --format=${shellQuote('%(upstream)')} ` +
|
|
314
|
+
`${shellQuote(localRef)}`);
|
|
315
|
+
if (result.exitCode !== 0) {
|
|
316
|
+
throw new Error(`Failed to inspect upstream for ${branch}: ${result.stderr.trim()}`);
|
|
317
|
+
}
|
|
318
|
+
return result.stdout.trim();
|
|
319
|
+
}
|
|
320
|
+
async markTaskBranch(workdir, branch, taskId) {
|
|
321
|
+
const marker = shellQuote(`branch.${branch}.baxian-task-id`);
|
|
322
|
+
const configured = await this.runner.exec(`git -C ${shellQuote(workdir)} config --local ${marker} ${shellQuote(taskId)} && ` +
|
|
323
|
+
`git -C ${shellQuote(workdir)} config --local ${shellQuote(`branch.${branch}.remote`)} origin && ` +
|
|
324
|
+
`git -C ${shellQuote(workdir)} config --local ${shellQuote(`branch.${branch}.merge`)} ` +
|
|
325
|
+
`${shellQuote(`refs/heads/${branch}`)}`);
|
|
326
|
+
if (configured.exitCode !== 0) {
|
|
327
|
+
throw new Error(`Failed to record baxian task binding for ${branch}: ${configured.stderr.trim()}`);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
async verifyTaskBranchMarker(workdir, branch, taskId) {
|
|
331
|
+
const result = await this.runner.exec(`git -C ${shellQuote(workdir)} config --local --get ` +
|
|
332
|
+
`${shellQuote(`branch.${branch}.baxian-task-id`)}`);
|
|
333
|
+
if (result.exitCode !== 0 || result.stdout.trim() !== taskId) {
|
|
334
|
+
throw new Error(`Local branch ${branch} already exists without baxian task binding proof for task ${taskId}`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
async fetch(workdir) {
|
|
338
|
+
const result = await execNetwork(this.runner, `${GIT_NET_ENV} git -C ${shellQuote(workdir)} fetch origin --prune`);
|
|
339
|
+
if (result.exitCode !== 0)
|
|
340
|
+
throw new Error(`git fetch failed in ${workdir}: ${result.stderr.trim()}`);
|
|
341
|
+
}
|
|
342
|
+
async switch(workdir, args) {
|
|
343
|
+
const result = await this.runner.exec(`git -C ${shellQuote(workdir)} switch ${args}`);
|
|
344
|
+
if (result.exitCode !== 0)
|
|
345
|
+
throw new Error(`git switch failed in ${workdir}: ${result.stderr.trim()}`);
|
|
346
|
+
}
|
|
347
|
+
async switchDetached(workdir, commit) {
|
|
348
|
+
await this.switch(workdir, `--detach ${shellQuote(commit)}`);
|
|
349
|
+
const head = await this.resolveCommit(workdir, 'HEAD');
|
|
350
|
+
if (head !== commit)
|
|
351
|
+
throw new Error(`Detached checkout mismatch: expected ${commit}, got ${head}`);
|
|
352
|
+
}
|
|
353
|
+
async resolveCommit(workdir, ref) {
|
|
354
|
+
const result = await this.runner.exec(`git -C ${shellQuote(workdir)} rev-parse --verify ${shellQuote(`${ref}^{commit}`)}`);
|
|
355
|
+
const sha = result.stdout.trim();
|
|
356
|
+
if (result.exitCode !== 0 || !/^[0-9a-f]{40,64}$/i.test(sha)) {
|
|
357
|
+
throw new Error(`Cannot resolve commit ${ref} in ${workdir}: ${result.stderr.trim()}`);
|
|
358
|
+
}
|
|
359
|
+
return sha;
|
|
360
|
+
}
|
|
361
|
+
async verifyRef(workdir, expected) {
|
|
362
|
+
const actual = await this.currentRef(workdir);
|
|
363
|
+
if (actual !== expected)
|
|
364
|
+
throw new Error(`Checkout mismatch: expected ${expected}, got ${actual ?? 'detached HEAD'}`);
|
|
365
|
+
}
|
|
366
|
+
async verifyTree(workdir, expected) {
|
|
367
|
+
const result = await this.runner.exec(`git -C ${shellQuote(workdir)} rev-parse --verify ${shellQuote('HEAD^{tree}')}`);
|
|
368
|
+
if (result.exitCode !== 0 || result.stdout.trim() !== expected) {
|
|
369
|
+
throw new Error(`Review head tree mismatch: expected ${expected}, got ${result.stdout.trim() || '<unresolved>'}`);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
async commitReviewHead(workdir, headSha) {
|
|
373
|
+
const identity = [
|
|
374
|
+
`GIT_AUTHOR_NAME=${shellQuote('baxian review')}`,
|
|
375
|
+
'GIT_AUTHOR_EMAIL=baxian-review@localhost',
|
|
376
|
+
`GIT_COMMITTER_NAME=${shellQuote('baxian review')}`,
|
|
377
|
+
'GIT_COMMITTER_EMAIL=baxian-review@localhost',
|
|
378
|
+
].join(' ');
|
|
379
|
+
const result = await this.runner.exec(`${identity} git -C ${shellQuote(workdir)} -c user.email=baxian-review@localhost ` +
|
|
380
|
+
`-c user.name=${shellQuote('baxian review')} commit --no-gpg-sign --no-verify -q ` +
|
|
381
|
+
`-m ${shellQuote(`baxian review head ${headSha}`)}`);
|
|
382
|
+
if (result.exitCode !== 0)
|
|
383
|
+
throw new Error(`Review patch commit failed: ${result.stderr.trim()}`);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../src/agent/branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -206,7 +206,7 @@
|
|
|
206
206
|
"region": "afterLastHorizontalRule",
|
|
207
207
|
"regex": ["[eE]sc to interru(?:pt|p(?:…|\\.{3})?)"],
|
|
208
208
|
"notAfter": [
|
|
209
|
-
{ "lineRegex": ["^[ \\t]*[❯>][ \\t]*$"] },
|
|
209
|
+
{ "lineRegex": ["^[ \\t\\u00a0]*[❯>][ \\t\\u00a0]*$"] },
|
|
210
210
|
{ "regex": ["(?:^|\\n)[ \\t]*⏵⏵ bypass permissions on[^\\n]*(?:\\n[ \\t]*)*$"] }
|
|
211
211
|
]
|
|
212
212
|
},
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
"region": "tail(6)",
|
|
226
226
|
"visibleIdle": true,
|
|
227
227
|
"any": [
|
|
228
|
-
{ "regex": ["(?:^|\\n)[ \\t]*[❯>][ \\t]*(?:\\n[ \\t]*)*$"] },
|
|
228
|
+
{ "regex": ["(?:^|\\n)[ \\t\\u00a0]*[❯>][ \\t\\u00a0]*(?:\\n[ \\t]*)*$"] },
|
|
229
229
|
{ "regex": ["(?:^|\\n)[ \\t]*⏵⏵ bypass permissions on[^\\n]*(?:\\n[ \\t]*)*$"] }
|
|
230
230
|
]
|
|
231
231
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "opencode",
|
|
3
|
+
"rules": [
|
|
4
|
+
{
|
|
5
|
+
"id": "permission_required",
|
|
6
|
+
"state": "pending",
|
|
7
|
+
"priority": 300,
|
|
8
|
+
"region": "whole",
|
|
9
|
+
"visibleBlocker": true,
|
|
10
|
+
"any": [
|
|
11
|
+
{ "contains": ["△ Permission required"] },
|
|
12
|
+
{ "contains": ["Permission required"] },
|
|
13
|
+
{ "contains": ["Allow once"], "any": [{ "contains": ["Allow always"] }, { "contains": ["Reject"] }] }
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "interrupt_hint_working",
|
|
18
|
+
"state": "working",
|
|
19
|
+
"priority": 110,
|
|
20
|
+
"region": "whole",
|
|
21
|
+
"visibleWorking": true,
|
|
22
|
+
"any": [
|
|
23
|
+
{ "regex": ["esc\\s+(?:to\\s+)?interrupt"] },
|
|
24
|
+
{ "contains": ["ctrl+c to interrupt"] }
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "progress_bar_working",
|
|
29
|
+
"state": "working",
|
|
30
|
+
"priority": 100,
|
|
31
|
+
"region": "whole",
|
|
32
|
+
"visibleWorking": true,
|
|
33
|
+
"regex": ["(?:■|⬝){4,}"]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "idle_composer",
|
|
37
|
+
"state": "idle",
|
|
38
|
+
"priority": 90,
|
|
39
|
+
"region": "tail(6)",
|
|
40
|
+
"visibleIdle": true,
|
|
41
|
+
"contains": ["ctrl+p commands"]
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "qodercli",
|
|
3
|
+
"rules": [
|
|
4
|
+
{
|
|
5
|
+
"id": "confirmation_blocker",
|
|
6
|
+
"state": "pending",
|
|
7
|
+
"priority": 300,
|
|
8
|
+
"region": "whole",
|
|
9
|
+
"visibleBlocker": true,
|
|
10
|
+
"any": [
|
|
11
|
+
{ "contains": ["Permission Required"] },
|
|
12
|
+
{ "contains": ["Allow this command to run"] },
|
|
13
|
+
{ "contains": ["Do you want to allow"] },
|
|
14
|
+
{ "contains": ["waiting for user confirmation"] },
|
|
15
|
+
{ "contains": ["awaiting approval"] },
|
|
16
|
+
{ "contains": ["permission required"] },
|
|
17
|
+
{ "contains": ["allow once or always?"] },
|
|
18
|
+
{ "contains": ["asking user"] },
|
|
19
|
+
{ "contains": ["enter your response"] },
|
|
20
|
+
{ "contains": ["review your answers:"] },
|
|
21
|
+
{ "contains": ["shell awaiting input"] }
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "cancel_hint_working",
|
|
26
|
+
"state": "working",
|
|
27
|
+
"priority": 100,
|
|
28
|
+
"region": "whole",
|
|
29
|
+
"visibleWorking": true,
|
|
30
|
+
"contains": ["(esc to cancel,"]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "spinner_working",
|
|
34
|
+
"state": "working",
|
|
35
|
+
"priority": 90,
|
|
36
|
+
"region": "whole",
|
|
37
|
+
"visibleWorking": true,
|
|
38
|
+
"lineRegex": ["^\\s*[\\u2800-\\u28FF]\\s+.*[A-Za-z]"]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "idle_composer",
|
|
42
|
+
"state": "idle",
|
|
43
|
+
"priority": 80,
|
|
44
|
+
"region": "tail(6)",
|
|
45
|
+
"visibleIdle": true,
|
|
46
|
+
"contains": ["Type your message or @"]
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
@@ -3,5 +3,6 @@ export interface DetectionInput {
|
|
|
3
3
|
oscTitle: string;
|
|
4
4
|
}
|
|
5
5
|
export declare function isHorizontalRule(line: string): boolean;
|
|
6
|
+
export declare function tailNonEmpty(screen: string, count: number): string;
|
|
6
7
|
export declare function extractRegion(input: DetectionInput, spec: string): string;
|
|
7
8
|
//# sourceMappingURL=region.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"region.d.ts","sourceRoot":"","sources":["../../../src/agent/detect/region.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CActD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"region.d.ts","sourceRoot":"","sources":["../../../src/agent/detect/region.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CActD;AAKD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAoBlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA6EzE"}
|
|
@@ -15,6 +15,32 @@ export function isHorizontalRule(line) {
|
|
|
15
15
|
}
|
|
16
16
|
return dashCount >= 3 || (allDashes && dashCount > 0);
|
|
17
17
|
}
|
|
18
|
+
// 自底部起覆盖 count 个非空行的窗口(保留行间空行、剥除尾部空行)。
|
|
19
|
+
// 供 tmux.ts 对 opencode/qodercli 取样:其 fresh 屏顶部锚定/垂直居中,
|
|
20
|
+
// idle/busy 标记会落在物理 tail(N) 之外(尾随空行海),非空行窗口与几何无关。
|
|
21
|
+
export function tailNonEmpty(screen, count) {
|
|
22
|
+
if (count <= 0)
|
|
23
|
+
return '';
|
|
24
|
+
const lines = screen.split('\n');
|
|
25
|
+
let lastNonEmptyIdx = -1;
|
|
26
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
27
|
+
if (lines[i].trim() !== '') {
|
|
28
|
+
lastNonEmptyIdx = i;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (lastNonEmptyIdx < 0)
|
|
33
|
+
return '';
|
|
34
|
+
let startIdx = lastNonEmptyIdx;
|
|
35
|
+
let found = 1;
|
|
36
|
+
for (let i = lastNonEmptyIdx - 1; i >= 0 && found < count; i--) {
|
|
37
|
+
if (lines[i].trim() !== '') {
|
|
38
|
+
found++;
|
|
39
|
+
startIdx = i;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return lines.slice(startIdx, lastNonEmptyIdx + 1).join('\n');
|
|
43
|
+
}
|
|
18
44
|
export function extractRegion(input, spec) {
|
|
19
45
|
const trimmed = spec.trim();
|
|
20
46
|
if (trimmed === 'oscTitle')
|
|
@@ -93,25 +119,7 @@ export function extractRegion(input, spec) {
|
|
|
93
119
|
}
|
|
94
120
|
const tailNonEmptyMatch = trimmed.match(/^tailNonEmpty\((\d+)\)$/);
|
|
95
121
|
if (tailNonEmptyMatch) {
|
|
96
|
-
|
|
97
|
-
let lastNonEmptyIdx = -1;
|
|
98
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
99
|
-
if (lines[i].trim() !== '') {
|
|
100
|
-
lastNonEmptyIdx = i;
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
if (lastNonEmptyIdx < 0)
|
|
105
|
-
return '';
|
|
106
|
-
let startIdx = lastNonEmptyIdx;
|
|
107
|
-
let found = 1;
|
|
108
|
-
for (let i = lastNonEmptyIdx - 1; i >= 0 && found < count; i--) {
|
|
109
|
-
if (lines[i].trim() !== '') {
|
|
110
|
-
found++;
|
|
111
|
-
startIdx = i;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return lines.slice(startIdx, lastNonEmptyIdx + 1).join('\n');
|
|
122
|
+
return tailNonEmpty(input.screen, parseInt(tailNonEmptyMatch[1], 10));
|
|
115
123
|
}
|
|
116
124
|
return '';
|
|
117
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"region.js","sourceRoot":"","sources":["../../../src/agent/detect/region.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"region.js","sourceRoot":"","sources":["../../../src/agent/detect/region.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/lineage.d.ts
CHANGED
|
@@ -9,6 +9,6 @@ export interface LineageViolation {
|
|
|
9
9
|
sha: string;
|
|
10
10
|
}
|
|
11
11
|
type Exec = (cmd: string) => Promise<ExecResult>;
|
|
12
|
-
export declare function findForeignTaskTip(exec: Exec,
|
|
12
|
+
export declare function findForeignTaskTip(exec: Exec, workdir: string, baseSha: string, candidates: LineageCandidate[]): Promise<LineageViolation | null>;
|
|
13
13
|
export {};
|
|
14
14
|
//# sourceMappingURL=lineage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lineage.d.ts","sourceRoot":"","sources":["../../src/agent/lineage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAEjD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,
|
|
1
|
+
{"version":3,"file":"lineage.d.ts","sourceRoot":"","sources":["../../src/agent/lineage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAEjD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,gBAAgB,EAAE,GAC7B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA0ClC"}
|