baxian 2.0.1 → 2.0.3

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 (259) hide show
  1. package/README.md +5 -7
  2. package/README.zh-CN.md +5 -7
  3. package/dist/agent/bootstrap.d.ts.map +1 -1
  4. package/dist/agent/bootstrap.js +2 -4
  5. package/dist/agent/bootstrap.js.map +1 -1
  6. package/dist/agent/branch.d.ts +0 -12
  7. package/dist/agent/branch.d.ts.map +1 -1
  8. package/dist/agent/branch.js +1 -78
  9. package/dist/agent/branch.js.map +1 -1
  10. package/dist/agent/detect/region.d.ts.map +1 -1
  11. package/dist/agent/detect/region.js +0 -3
  12. package/dist/agent/detect/region.js.map +1 -1
  13. package/dist/agent/dispatch-reconciler.d.ts.map +1 -1
  14. package/dist/agent/dispatch-reconciler.js +8 -59
  15. package/dist/agent/dispatch-reconciler.js.map +1 -1
  16. package/dist/agent/lineage.d.ts.map +1 -1
  17. package/dist/agent/lineage.js +0 -9
  18. package/dist/agent/lineage.js.map +1 -1
  19. package/dist/agent/manager.d.ts +66 -142
  20. package/dist/agent/manager.d.ts.map +1 -1
  21. package/dist/agent/manager.js +936 -2738
  22. package/dist/agent/manager.js.map +1 -1
  23. package/dist/agent/net-exec.d.ts.map +1 -1
  24. package/dist/agent/net-exec.js +0 -5
  25. package/dist/agent/net-exec.js.map +1 -1
  26. package/dist/agent/pane-streamer-manager.d.ts.map +1 -1
  27. package/dist/agent/pane-streamer-manager.js +0 -36
  28. package/dist/agent/pane-streamer-manager.js.map +1 -1
  29. package/dist/agent/pane-streamer.d.ts +10 -1
  30. package/dist/agent/pane-streamer.d.ts.map +1 -1
  31. package/dist/agent/pane-streamer.js +142 -79
  32. package/dist/agent/pane-streamer.js.map +1 -1
  33. package/dist/agent/phase-signal-watcher.d.ts +2 -11
  34. package/dist/agent/phase-signal-watcher.d.ts.map +1 -1
  35. package/dist/agent/phase-signal-watcher.js +36 -160
  36. package/dist/agent/phase-signal-watcher.js.map +1 -1
  37. package/dist/agent/phase-signal.d.ts +13 -40
  38. package/dist/agent/phase-signal.d.ts.map +1 -1
  39. package/dist/agent/phase-signal.js +38 -98
  40. package/dist/agent/phase-signal.js.map +1 -1
  41. package/dist/agent/preflight.d.ts +0 -1
  42. package/dist/agent/preflight.d.ts.map +1 -1
  43. package/dist/agent/preflight.js +6 -31
  44. package/dist/agent/preflight.js.map +1 -1
  45. package/dist/agent/prompt.d.ts +1 -30
  46. package/dist/agent/prompt.d.ts.map +1 -1
  47. package/dist/agent/prompt.js +20 -148
  48. package/dist/agent/prompt.js.map +1 -1
  49. package/dist/agent/repo-store.d.ts.map +1 -1
  50. package/dist/agent/repo-store.js +0 -42
  51. package/dist/agent/repo-store.js.map +1 -1
  52. package/dist/agent/runner.d.ts.map +1 -1
  53. package/dist/agent/runner.js +0 -2
  54. package/dist/agent/runner.js.map +1 -1
  55. package/dist/agent/tmux-install.js +0 -1
  56. package/dist/agent/tmux-install.js.map +1 -1
  57. package/dist/agent/tmux-probe-poller.d.ts.map +1 -1
  58. package/dist/agent/tmux-probe-poller.js +0 -7
  59. package/dist/agent/tmux-probe-poller.js.map +1 -1
  60. package/dist/agent/tmux.d.ts.map +1 -1
  61. package/dist/agent/tmux.js +0 -86
  62. package/dist/agent/tmux.js.map +1 -1
  63. package/dist/agent/vt-visible-text.d.ts +87 -0
  64. package/dist/agent/vt-visible-text.d.ts.map +1 -0
  65. package/dist/agent/vt-visible-text.js +1058 -0
  66. package/dist/agent/vt-visible-text.js.map +1 -0
  67. package/dist/api/agents.d.ts.map +1 -1
  68. package/dist/api/agents.js +1 -42
  69. package/dist/api/agents.js.map +1 -1
  70. package/dist/api/config.d.ts.map +1 -1
  71. package/dist/api/config.js +8 -53
  72. package/dist/api/config.js.map +1 -1
  73. package/dist/api/hosts.d.ts.map +1 -1
  74. package/dist/api/hosts.js +2 -57
  75. package/dist/api/hosts.js.map +1 -1
  76. package/dist/api/platform-guard.d.ts.map +1 -1
  77. package/dist/api/platform-guard.js +2 -3
  78. package/dist/api/platform-guard.js.map +1 -1
  79. package/dist/api/probe.d.ts.map +1 -1
  80. package/dist/api/probe.js +0 -1
  81. package/dist/api/probe.js.map +1 -1
  82. package/dist/api/projects.d.ts.map +1 -1
  83. package/dist/api/projects.js +599 -332
  84. package/dist/api/projects.js.map +1 -1
  85. package/dist/api/tasks.d.ts.map +1 -1
  86. package/dist/api/tasks.js +15 -40
  87. package/dist/api/tasks.js.map +1 -1
  88. package/dist/app.d.ts +0 -2
  89. package/dist/app.d.ts.map +1 -1
  90. package/dist/app.js +0 -6
  91. package/dist/app.js.map +1 -1
  92. package/dist/cli.d.ts.map +1 -1
  93. package/dist/cli.js +4 -29
  94. package/dist/cli.js.map +1 -1
  95. package/dist/config/hot-reload.d.ts.map +1 -1
  96. package/dist/config/hot-reload.js +0 -4
  97. package/dist/config/hot-reload.js.map +1 -1
  98. package/dist/config/loader.d.ts +5 -1
  99. package/dist/config/loader.d.ts.map +1 -1
  100. package/dist/config/loader.js +36 -47
  101. package/dist/config/loader.js.map +1 -1
  102. package/dist/config/normalizer.d.ts.map +1 -1
  103. package/dist/config/normalizer.js +0 -19
  104. package/dist/config/normalizer.js.map +1 -1
  105. package/dist/config/validator.d.ts +7 -4
  106. package/dist/config/validator.d.ts.map +1 -1
  107. package/dist/config/validator.js +56 -270
  108. package/dist/config/validator.js.map +1 -1
  109. package/dist/event/handlers.d.ts.map +1 -1
  110. package/dist/event/handlers.js +356 -234
  111. package/dist/event/handlers.js.map +1 -1
  112. package/dist/event/log.js +0 -2
  113. package/dist/event/log.js.map +1 -1
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +0 -50
  116. package/dist/index.js.map +1 -1
  117. package/dist/platform/body-digest.d.ts.map +1 -1
  118. package/dist/platform/body-digest.js +0 -4
  119. package/dist/platform/body-digest.js.map +1 -1
  120. package/dist/platform/command-renderer.d.ts +6 -0
  121. package/dist/platform/command-renderer.d.ts.map +1 -1
  122. package/dist/platform/command-renderer.js +20 -3
  123. package/dist/platform/command-renderer.js.map +1 -1
  124. package/dist/platform/comment-cursor.d.ts.map +1 -1
  125. package/dist/platform/comment-cursor.js +0 -21
  126. package/dist/platform/comment-cursor.js.map +1 -1
  127. package/dist/platform/driver-host.d.ts.map +1 -1
  128. package/dist/platform/driver-host.js +3 -1
  129. package/dist/platform/driver-host.js.map +1 -1
  130. package/dist/platform/driver-spec.d.ts.map +1 -1
  131. package/dist/platform/driver-spec.js +33 -46
  132. package/dist/platform/driver-spec.js.map +1 -1
  133. package/dist/platform/field-mapper.d.ts.map +1 -1
  134. package/dist/platform/field-mapper.js +3 -11
  135. package/dist/platform/field-mapper.js.map +1 -1
  136. package/dist/platform/git-driver.d.ts +2 -0
  137. package/dist/platform/git-driver.d.ts.map +1 -1
  138. package/dist/platform/git-driver.js +9 -23
  139. package/dist/platform/git-driver.js.map +1 -1
  140. package/dist/platform/manifest.d.ts.map +1 -1
  141. package/dist/platform/manifest.js +0 -3
  142. package/dist/platform/manifest.js.map +1 -1
  143. package/dist/platform/markers.d.ts.map +1 -1
  144. package/dist/platform/markers.js +0 -19
  145. package/dist/platform/markers.js.map +1 -1
  146. package/dist/platform/platform-poller.d.ts +0 -1
  147. package/dist/platform/platform-poller.d.ts.map +1 -1
  148. package/dist/platform/platform-poller.js +0 -49
  149. package/dist/platform/platform-poller.js.map +1 -1
  150. package/dist/platform/plugin-registry.d.ts.map +1 -1
  151. package/dist/platform/plugin-registry.js +1 -12
  152. package/dist/platform/plugin-registry.js.map +1 -1
  153. package/dist/platform/plugins/github/driver.json +5 -0
  154. package/dist/platform/plugins/github/skills/baxian-cli-gh/SKILL.md +20 -14
  155. package/dist/platform/pr-conversation-cache.d.ts.map +1 -1
  156. package/dist/platform/pr-conversation-cache.js +0 -17
  157. package/dist/platform/pr-conversation-cache.js.map +1 -1
  158. package/dist/platform/preflight-exec.d.ts.map +1 -1
  159. package/dist/platform/preflight-exec.js +0 -9
  160. package/dist/platform/preflight-exec.js.map +1 -1
  161. package/dist/platform/response-parser.d.ts.map +1 -1
  162. package/dist/platform/response-parser.js +0 -4
  163. package/dist/platform/response-parser.js.map +1 -1
  164. package/dist/platform/review-timeline.d.ts.map +1 -1
  165. package/dist/platform/review-timeline.js +0 -22
  166. package/dist/platform/review-timeline.js.map +1 -1
  167. package/dist/platform/row-schema.d.ts.map +1 -1
  168. package/dist/platform/row-schema.js +0 -11
  169. package/dist/platform/row-schema.js.map +1 -1
  170. package/dist/platform/startup.d.ts.map +1 -1
  171. package/dist/platform/startup.js +6 -17
  172. package/dist/platform/startup.js.map +1 -1
  173. package/dist/platform/types.d.ts +1 -0
  174. package/dist/platform/types.d.ts.map +1 -1
  175. package/dist/platform/types.js +3 -8
  176. package/dist/platform/types.js.map +1 -1
  177. package/dist/platform/verdict-engine.d.ts.map +1 -1
  178. package/dist/platform/verdict-engine.js +0 -15
  179. package/dist/platform/verdict-engine.js.map +1 -1
  180. package/dist/shared/concurrency.d.ts.map +1 -1
  181. package/dist/shared/concurrency.js +0 -2
  182. package/dist/shared/concurrency.js.map +1 -1
  183. package/dist/shared/constants.d.ts +1 -8
  184. package/dist/shared/constants.d.ts.map +1 -1
  185. package/dist/shared/constants.js +2 -32
  186. package/dist/shared/constants.js.map +1 -1
  187. package/dist/shared/git-url.d.ts.map +1 -1
  188. package/dist/shared/git-url.js +0 -9
  189. package/dist/shared/git-url.js.map +1 -1
  190. package/dist/shared/types.d.ts +28 -135
  191. package/dist/shared/types.d.ts.map +1 -1
  192. package/dist/shared/types.js +7 -6
  193. package/dist/shared/types.js.map +1 -1
  194. package/dist/skill/registry.d.ts.map +1 -1
  195. package/dist/skill/registry.js +0 -5
  196. package/dist/skill/registry.js.map +1 -1
  197. package/dist/skills/baxian-pr-feedback/SKILL.md +5 -3
  198. package/dist/skills/baxian-pr-recheck/SKILL.md +4 -0
  199. package/dist/skills/baxian-pr-review/SKILL.md +4 -0
  200. package/dist/skills/baxian-signals/SKILL.md +15 -38
  201. package/dist/skills/baxian-task-check/SKILL.md +13 -14
  202. package/dist/state/agent-store.d.ts.map +1 -1
  203. package/dist/state/agent-store.js +0 -6
  204. package/dist/state/agent-store.js.map +1 -1
  205. package/dist/state/error-record-store.d.ts.map +1 -1
  206. package/dist/state/error-record-store.js +0 -5
  207. package/dist/state/error-record-store.js.map +1 -1
  208. package/dist/state/init.d.ts.map +1 -1
  209. package/dist/state/init.js +0 -1
  210. package/dist/state/init.js.map +1 -1
  211. package/dist/state/lock.d.ts.map +1 -1
  212. package/dist/state/lock.js +0 -1
  213. package/dist/state/lock.js.map +1 -1
  214. package/dist/state/snapshot.d.ts.map +1 -1
  215. package/dist/state/snapshot.js +5 -2
  216. package/dist/state/snapshot.js.map +1 -1
  217. package/dist/state/task-store.d.ts.map +1 -1
  218. package/dist/state/task-store.js +56 -143
  219. package/dist/state/task-store.js.map +1 -1
  220. package/dist/terminal/attach.d.ts.map +1 -1
  221. package/dist/terminal/attach.js +0 -4
  222. package/dist/terminal/attach.js.map +1 -1
  223. package/dist/terminal/stream-ws.js +0 -5
  224. package/dist/terminal/stream-ws.js.map +1 -1
  225. package/dist/web/assets/index-CiAnjs1_.js +15 -0
  226. package/dist/web/assets/index-yqxawAPJ.css +1 -0
  227. package/dist/web/index.html +2 -2
  228. package/package.json +1 -1
  229. package/dist/agent/review-transport.d.ts +0 -92
  230. package/dist/agent/review-transport.d.ts.map +0 -1
  231. package/dist/agent/review-transport.js +0 -512
  232. package/dist/agent/review-transport.js.map +0 -1
  233. package/dist/agent/root-agent-runtime.d.ts +0 -80
  234. package/dist/agent/root-agent-runtime.d.ts.map +0 -1
  235. package/dist/agent/root-agent-runtime.js +0 -635
  236. package/dist/agent/root-agent-runtime.js.map +0 -1
  237. package/dist/agent/root-recovery-coordinator.d.ts +0 -125
  238. package/dist/agent/root-recovery-coordinator.d.ts.map +0 -1
  239. package/dist/agent/root-recovery-coordinator.js +0 -1579
  240. package/dist/agent/root-recovery-coordinator.js.map +0 -1
  241. package/dist/event/server-handlers.d.ts +0 -4
  242. package/dist/event/server-handlers.d.ts.map +0 -1
  243. package/dist/event/server-handlers.js +0 -1294
  244. package/dist/event/server-handlers.js.map +0 -1
  245. package/dist/skills/baxian-research/SKILL.md +0 -28
  246. package/dist/skills/baxian-server-feedback/SKILL.md +0 -40
  247. package/dist/skills/baxian-server-feedback/agents/openai.yaml +0 -2
  248. package/dist/skills/baxian-server-review/SKILL.md +0 -58
  249. package/dist/skills/baxian-server-review/agents/openai.yaml +0 -2
  250. package/dist/state/review-store.d.ts +0 -33
  251. package/dist/state/review-store.d.ts.map +0 -1
  252. package/dist/state/review-store.js +0 -272
  253. package/dist/state/review-store.js.map +0 -1
  254. package/dist/state/root-recovery-store.d.ts +0 -107
  255. package/dist/state/root-recovery-store.d.ts.map +0 -1
  256. package/dist/state/root-recovery-store.js +0 -400
  257. package/dist/state/root-recovery-store.js.map +0 -1
  258. package/dist/web/assets/index-BPv6vv3U.css +0 -1
  259. package/dist/web/assets/index-BXfgaFNm.js +0 -18
@@ -1,5 +1,6 @@
1
1
  import { AGENT_PHASES } from '../shared/index.js';
2
2
  import { scanNeedInputSignals, scanPhaseSignals } from './phase-signal.js';
3
+ import { visibleText } from './vt-visible-text.js';
3
4
  export const MAX_PROMPT_BYTES = 80 * 1024;
4
5
  export const MAX_PROMPT_BYTES_ROUTE_LIMIT = MAX_PROMPT_BYTES - 1024;
5
6
  export class PromptSizeError extends Error {
@@ -43,7 +44,7 @@ function truncateUtf8(value, maxBytes) {
43
44
  return out;
44
45
  }
45
46
  function gitDescriptorFields(task, phase, platformCli) {
46
- if (task.reviewMode !== 'git' || !GIT_PLATFORM_PHASES.has(phase))
47
+ if (!GIT_PLATFORM_PHASES.has(phase))
47
48
  return [];
48
49
  const lines = [];
49
50
  if (platformCli) {
@@ -56,6 +57,8 @@ function gitDescriptorFields(task, phase, platformCli) {
56
57
  lines.push(`branch: ${task.branch ?? '<branch>'}`);
57
58
  if (task.baseBranch)
58
59
  lines.push(`base: ${task.baseBranch}`);
60
+ if (phase === 'code' && task.prNumber !== undefined)
61
+ lines.push(`pr: ${task.prNumber}`);
59
62
  }
60
63
  if (phase === 'review' || phase === 'recheck') {
61
64
  if (!task.passToken || !task.failToken) {
@@ -82,24 +85,7 @@ export function buildPromptInline(opts) {
82
85
  phase: opts.phase,
83
86
  workdir: opts.workdir,
84
87
  signalToken: opts.signalToken,
85
- currentSpecRound: opts.currentSpecRound,
86
88
  imagePaths: opts.imagePaths,
87
- serverContent: opts.serverContent,
88
- serverContentFile: opts.serverContentFile,
89
- serverDiffstat: opts.serverDiffstat,
90
- serverDiffstatFile: opts.serverDiffstatFile,
91
- serverInterdiff: opts.serverInterdiff,
92
- serverInterdiffFile: opts.serverInterdiffFile,
93
- serverReviewCheckout: opts.serverReviewCheckout,
94
- serverBatch: opts.serverBatch,
95
- serverPriorFindings: opts.serverPriorFindings,
96
- serverPriorFindingsFile: opts.serverPriorFindingsFile,
97
- serverFindingsDigest: opts.serverFindingsDigest,
98
- serverFeedbackCorrection: opts.serverFeedbackCorrection,
99
- serverPriorResponse: opts.serverPriorResponse,
100
- serverPriorResponseFile: opts.serverPriorResponseFile,
101
- serverAfterDone: opts.serverAfterDone,
102
- hasQaPartner: opts.hasQaPartner,
103
89
  platformCli: opts.platformCli,
104
90
  });
105
91
  const primary = phasePrimarySkill(opts.agent.role, opts.phase);
@@ -121,159 +107,43 @@ function reviewFields({ task }) {
121
107
  fields: [
122
108
  `pr: ${task.prNumber ?? '<pr-number>'}`,
123
109
  ...(task.reviewHeadAnchorSha ? [`anchor-sha: ${task.reviewHeadAnchorSha}`] : []),
110
+ ...(task.phase === 'spec' ? ['stage: spec'] : []),
124
111
  ],
125
112
  };
126
113
  }
127
- function fileField(name, ref) {
128
- return `${name}: ${ref.path} (${Math.max(1, Math.round(ref.bytes / 1024))}KB)`;
129
- }
130
114
  const PHASE_PROMPT_BUILDERS = {
131
115
  merge: () => ({ fields: [] }),
132
- research: () => ({ fields: ['signal: spec-done'] }),
133
- develop: ({ task, signalToken, hasQaPartner }) => {
134
- if (!signalToken)
135
- return { fields: [] };
136
- return {
137
- fields: [
138
- ...(hasQaPartner !== false ? ['spec-signal: spec-done'] : []),
139
- `signal: ${task.reviewMode === 'server' ? 'code-done' : 'pr-created'}`,
140
- ],
141
- };
142
- },
143
- code: ({ task }) => ({
144
- fields: [`signal: ${task.reviewMode === 'server' ? 'code-done' : 'pr-created'}`],
145
- }),
116
+ develop: () => ({ fields: [] }),
117
+ code: () => ({ fields: [] }),
146
118
  fix: ({ task }) => ({
147
119
  fields: [
148
120
  `pr: ${task.prNumber ?? '<pr-number>'}`,
149
121
  `branch: ${task.branch ?? '<branch>'}`,
150
- 'signal: pr-fixed',
122
+ ...(task.phase === 'spec' ? ['stage: spec'] : []),
151
123
  ],
152
124
  }),
153
125
  'post-approve': ({ task }) => ({
154
- fields: [
155
- `pr: ${task.prNumber ?? '<pr-number>'}`,
156
- 'signal: pr-merge-ready',
157
- ],
126
+ fields: [`pr: ${task.prNumber ?? '<pr-number>'}`],
158
127
  }),
159
128
  review: (ctx) => reviewFields(ctx),
160
129
  recheck: (ctx) => reviewFields(ctx),
161
- 'server-review': (ctx) => buildServerReviewInstructions(ctx),
162
- 'server-recheck': (ctx) => buildServerReviewInstructions(ctx),
163
- 'server-spec-review': ({ task, currentSpecRound, serverContent, serverContentFile, serverPriorFindings, serverPriorFindingsFile, serverPriorResponse, serverPriorResponseFile }) => {
164
- const round = currentSpecRound ?? task.specReviewRound ?? 1;
165
- return {
166
- fields: [
167
- `round: ${round}`,
168
- ...(serverContentFile ? [fileField('spec-file', serverContentFile)] : []),
169
- ...(serverPriorFindingsFile ? [fileField('prior-findings-file', serverPriorFindingsFile)] : []),
170
- ...(serverPriorResponseFile ? [fileField('prior-response-file', serverPriorResponseFile)] : []),
171
- 'signal: spec-reviewed',
172
- ],
173
- blocks: [
174
- ...(serverPriorFindings ? ['prior-findings:', serverPriorFindings] : []),
175
- ...(serverPriorResponse ? ['prior-response:', serverPriorResponse] : []),
176
- ...(serverContent !== undefined ? ['spec:', serverContent] : []),
177
- ],
178
- };
179
- },
180
- 'server-feedback': ({ task, currentSpecRound, serverPriorFindings, serverPriorFindingsFile, serverFindingsDigest, serverFeedbackCorrection, }) => {
181
- if (!serverFindingsDigest)
182
- throw new Error('server-feedback prompt requires findings digest');
183
- const isSpec = task.phase === 'spec';
184
- const round = isSpec ? (currentSpecRound ?? task.specReviewRound ?? 1) : Math.max(task.reviewRound, 1);
185
- return {
186
- fields: [
187
- `feedback: ${isSpec ? 'spec' : 'code'}`,
188
- `round: ${round}`,
189
- `findings-digest: ${serverFindingsDigest}`,
190
- ...(serverPriorFindingsFile ? [fileField('findings-file', serverPriorFindingsFile)] : []),
191
- ...(serverFeedbackCorrection ? [
192
- `correction-reason: ${serverFeedbackCorrection.reason}`,
193
- `missing-finding-ids: ${JSON.stringify(serverFeedbackCorrection.missingFindingIds ?? [])}`,
194
- `unknown-finding-ids: ${JSON.stringify(serverFeedbackCorrection.unknownFindingIds ?? [])}`,
195
- `schema-violation-codes: ${JSON.stringify(serverFeedbackCorrection.schemaViolationCodes ?? [])}`,
196
- ] : []),
197
- `signal: ${isSpec ? 'spec-fixed' : 'code-fixed'}`,
198
- ],
199
- blocks: serverPriorFindings ? ['findings:', serverPriorFindings] : undefined,
200
- };
201
- },
202
- 'server-after-done': ({ task, serverAfterDone }) => {
203
- // publish: pr 走 baxian-server-feedback 的 PR 分支,它要显式 -R/--base/--head:
204
- // 归一化 repo 身份与 base 快照都由 server 下发,agent 不现场推断远端。
205
- const publishesPr = serverAfterDone?.kind === 'pr';
206
- return {
207
- fields: [
208
- `publish: ${publishesPr ? 'pr' : 'branch'}`,
209
- `branch: ${serverAfterDone?.branch ?? task.branch ?? '<branch>'}`,
210
- ...(publishesPr && task.platformBinding ? [`repo: ${task.platformBinding.repoKey}`] : []),
211
- ...(publishesPr && task.baseBranch ? [`base: ${task.baseBranch}`] : []),
212
- 'signal: code-ready',
213
- ],
214
- };
215
- },
216
130
  };
217
- function buildServerReviewInstructions({ task, serverContent, serverContentFile, serverDiffstat, serverDiffstatFile, serverInterdiff, serverInterdiffFile, serverReviewCheckout, serverBatch, serverPriorFindings, serverPriorFindingsFile, serverPriorResponse, serverPriorResponseFile, }) {
218
- const round = task.reviewRound || 1;
219
- return {
220
- fields: [
221
- `round: ${round}`,
222
- ...(serverReviewCheckout ? [`review-checkout: ${serverReviewCheckout}`] : []),
223
- ...(serverBatch ? [`batch: ${serverBatch.index + 1}/${serverBatch.total}`] : []),
224
- ...(serverContentFile ? [fileField('diff-file', serverContentFile)] : []),
225
- ...(serverDiffstatFile ? [fileField('diffstat-file', serverDiffstatFile)] : []),
226
- ...(serverInterdiffFile ? [fileField('interdiff-file', serverInterdiffFile)] : []),
227
- ...(serverPriorFindingsFile ? [fileField('prior-findings-file', serverPriorFindingsFile)] : []),
228
- ...(serverPriorResponseFile ? [fileField('prior-response-file', serverPriorResponseFile)] : []),
229
- 'signal: code-reviewed',
230
- ],
231
- blocks: [
232
- ...(serverDiffstat ? ['diffstat:', serverDiffstat] : []),
233
- ...(serverPriorFindings ? ['prior-findings:', serverPriorFindings] : []),
234
- ...(serverPriorResponse ? ['prior-response:', serverPriorResponse] : []),
235
- ...(serverInterdiff !== undefined ? ['interdiff (本轮相对上一轮的增量,优先核对;全量 diff 供交叉确认):', serverInterdiff] : []),
236
- ...(serverContent !== undefined ? ['diff:', serverContent] : []),
237
- ],
238
- };
239
- }
240
131
  function buildTaskBody(args) {
241
- const { task, phase, workdir, signalToken, currentSpecRound, imagePaths, serverContent, serverContentFile, serverDiffstat, serverDiffstatFile, serverInterdiff, serverInterdiffFile, serverReviewCheckout, serverBatch, serverPriorFindings, serverPriorFindingsFile, serverFindingsDigest, serverFeedbackCorrection, serverPriorResponse, serverPriorResponseFile, serverAfterDone, hasQaPartner, platformCli, } = args;
132
+ const { task, phase, workdir, signalToken, imagePaths, platformCli, } = args;
242
133
  if (phase === 'post-approve' && !signalToken) {
243
134
  throw new Error('post-approve prompt requires signalToken');
244
135
  }
245
- if ((phase === 'research' || phase === 'code' || phase === 'review' || phase === 'recheck' || phase === 'fix') && !signalToken) {
246
- throw new Error(`${phase} prompt requires signalToken`);
247
- }
248
- if (phase.startsWith('server-') && !signalToken) {
136
+ if ((phase === 'code' || phase === 'review' || phase === 'recheck' || phase === 'fix') && !signalToken) {
249
137
  throw new Error(`${phase} prompt requires signalToken`);
250
138
  }
251
- if ((serverContent !== undefined && serverContentFile)
252
- || (serverDiffstat !== undefined && serverDiffstatFile)
253
- || (serverInterdiff !== undefined && serverInterdiffFile)
254
- || (serverPriorFindings !== undefined && serverPriorFindingsFile)
255
- || (serverPriorResponse !== undefined && serverPriorResponseFile)) {
256
- throw new Error(`${phase} prompt: inline and file payload forms are mutually exclusive`);
257
- }
258
139
  const phaseBuilder = PHASE_PROMPT_BUILDERS[phase];
259
140
  if (!phaseBuilder) {
260
141
  throw new Error(`buildTaskBody: no prompt builder registered for phase "${phase}"`);
261
142
  }
262
- const { fields, blocks } = phaseBuilder({
263
- task, signalToken, currentSpecRound,
264
- serverContent, serverContentFile, serverDiffstat, serverDiffstatFile, serverInterdiff, serverInterdiffFile,
265
- serverReviewCheckout, serverBatch,
266
- serverPriorFindings, serverPriorFindingsFile, serverFindingsDigest, serverFeedbackCorrection,
267
- serverPriorResponse, serverPriorResponseFile,
268
- serverAfterDone, hasQaPartner,
269
- });
270
- // exchange 只有 baxian-task-check(develop/code)消费,其余 phase 不输出
271
- const carriesExchange = phase === 'develop' || phase === 'code';
272
- const exchange = task.reviewMode === 'server' ? 'server-files' : 'git-pr';
143
+ const { fields, blocks } = phaseBuilder({ task });
273
144
  const descriptor = [
274
145
  `phase: ${phase}`,
275
146
  `workdir: ${workdir}`,
276
- ...(carriesExchange ? [`exchange: ${exchange}`] : []),
277
147
  ...gitDescriptorFields(task, phase, platformCli),
278
148
  ...fields,
279
149
  ...(signalToken ? [`token: ${signalToken}`] : []),
@@ -287,12 +157,14 @@ function buildTaskBody(args) {
287
157
  const injected = blocks && blocks.length > 0 ? '\n\n' + blocks.join('\n') : '';
288
158
  const body = `${descriptor}\n\n${titleAndBody}${imagesBlock}${injected}\n`;
289
159
  if (signalToken) {
290
- const leaked = scanPhaseSignals(body).find(s => s.token === signalToken);
291
- if (leaked) {
292
- throw new Error(`${phase} prompt must not contain a filled ${leaked.kind} signal literal`);
293
- }
294
- if (scanNeedInputSignals(body).some(s => s.token === signalToken)) {
295
- throw new Error(`${phase} prompt must not contain a filled need-input signal literal`);
160
+ for (const arm of [body, visibleText(body)]) {
161
+ const leaked = scanPhaseSignals(arm).find(s => s.token === signalToken);
162
+ if (leaked) {
163
+ throw new Error(`${phase} prompt must not contain a filled ${leaked.kind} signal literal`);
164
+ }
165
+ if (scanNeedInputSignals(arm).some(s => s.token === signalToken)) {
166
+ throw new Error(`${phase} prompt must not contain a filled need-input signal literal`);
167
+ }
296
168
  }
297
169
  }
298
170
  return body;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"repo-store.d.ts","sourceRoot":"","sources":["../../src/agent/repo-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repo-store.d.ts","sourceRoot":"","sources":["../../src/agent/repo-store.ts"],"names":[],"mappings":"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"}
@@ -9,10 +9,6 @@ export function createRepoStoreCache() {
9
9
  const FETCH_THROTTLE_MS = 30_000;
10
10
  const BAXIAN_RUNTIME_DIRS = [
11
11
  '.baxian',
12
- '.baxian/review',
13
- '.baxian/review/inbox',
14
- '.baxian/review-inbox',
15
- '.baxian/research',
16
12
  ];
17
13
  export class BaxianRuntimeDirsError extends Error {
18
14
  reason;
@@ -43,7 +39,6 @@ export async function ensureBaxianRuntimeDirsSafe(runner, absRepoPath) {
43
39
  const dirs = BAXIAN_RUNTIME_DIRS.map(dir => `${absRepoPath}/${dir}`);
44
40
  const operands = dirs.map(shellQuote).join(' ');
45
41
  const q = shellQuote(absRepoPath);
46
- // Canonical root guard rides the same command: a rebound Workdir root never receives a mkdir.
47
42
  const command = `[ "$(cd -- ${q} 2>/dev/null && pwd -P)" = ${q} ] || exit 9; ` +
48
43
  `for p in ${operands}; do ` +
49
44
  `if [ -L "$p" ] || { [ -e "$p" ] && [ ! -d "$p" ]; }; then exit 9; fi; ` +
@@ -68,28 +63,22 @@ export async function ensureBaxianRuntimeDirsSafe(runner, absRepoPath) {
68
63
  }
69
64
  }
70
65
  function normalizeRoot(root) {
71
- // Strip trailing slashes, but keep the filesystem root as "/" — collapsing it to "" would make the
72
- // guard `cd -- ''` and break cloning on root-home (HOME=/) container hosts.
73
66
  const cleaned = root.replace(/\/+$/, '');
74
67
  return cleaned === '' ? '/' : cleaned;
75
68
  }
76
- // Canonical Workdir (pwd -P) is symlink-free by construction; this equality re-proves it in the SAME command as a mutation so a mid-ensure root rebind can't be written through.
77
69
  export function canonicalSelfGuard(path) {
78
70
  const q = shellQuote(path);
79
71
  return `[ "$(cd -- ${q} 2>/dev/null && pwd -P)" = ${q} ]`;
80
72
  }
81
73
  export function isUnder(root, path) {
82
74
  const r = normalizeRoot(root);
83
- // Root "/" contributes a single leading slash, not "//".
84
75
  return r === '/' ? path.startsWith('/') && path !== '/' : path.startsWith(`${r}/`);
85
76
  }
86
- // Canonical (pwd -P) root proves the whole chain symlink-free; a bare [ ! -L root ] misses a rebound mid-path ancestor. Root MUST be canonical (state.workdir / physical home).
87
77
  export function ancestorSymlinkGuard(root, target) {
88
78
  const rootClean = normalizeRoot(root);
89
79
  if (!isUnder(root, target)) {
90
80
  throw new Error(`ancestorSymlinkGuard: ${target} is not under ${rootClean}`);
91
81
  }
92
- // For root "/" the separator IS the leading slash (offset 1); otherwise it is an extra "/" (offset +1).
93
82
  const sliceFrom = rootClean === '/' ? rootClean.length : rootClean.length + 1;
94
83
  const parts = target.slice(sliceFrom).split('/').filter(Boolean);
95
84
  const q = shellQuote(rootClean);
@@ -101,14 +90,12 @@ export function ancestorSymlinkGuard(root, target) {
101
90
  }
102
91
  return checks.join(' && ');
103
92
  }
104
- // The guard/op/quoting composition for destructive removes lives here once.
105
93
  export function guardedRemoveClause(root, target, opts = {}) {
106
94
  const rm = opts.recursive ? 'rm -rf' : 'rm -f';
107
95
  return `${ancestorSymlinkGuard(root, target)} && ${rm} -- ${shellQuote(target)}`;
108
96
  }
109
97
  const SWEEP_REMOVED = 'BX_SWEEP_REMOVED';
110
98
  const SWEEP_REFUSED = 'BX_SWEEP_REFUSED';
111
- // Four audited outcomes: removed-or-absent, guard-refused (deliberate keep), rm-failed, and probe-unknown (exec reject / exit 255 — rm may have run, reply lost) which is kept and flagged, never folded into the others.
112
99
  async function sweepGuardedPath(runner, path, guardClause) {
113
100
  const rm = `rm -f -- ${shellQuote(path)} && printf '%s' ${shellQuote(SWEEP_REMOVED)}`;
114
101
  const cmd = guardClause
@@ -141,7 +128,6 @@ function nestedSweepGuard(final, guardRoot) {
141
128
  const finalIsRealDir = `[ -d ${shellQuote(final)} ] && [ ! -L ${shellQuote(final)} ]`;
142
129
  return guardRoot ? `${ancestorSymlinkGuard(guardRoot, final)} && ${finalIsRealDir}` : finalIsRealDir;
143
130
  }
144
- // Guard and write share one command so a rebound ancestor never receives staging bytes; mkdir -p recreates components the guard just cleared as not-yet-existing.
145
131
  export async function stageFileGuarded(runner, root, tmp, content, opts = {}) {
146
132
  const buf = typeof content === 'string' ? Buffer.from(content, 'utf8') : content;
147
133
  const guard = ancestorSymlinkGuard(root, tmp);
@@ -168,7 +154,6 @@ export async function stageFileGuarded(runner, root, tmp, content, opts = {}) {
168
154
  throw new Error(`staged write of ${tmp} failed (exit ${res.exitCode}): ${res.stderr.trim() || 'symlink-free path required'}`);
169
155
  }
170
156
  }
171
- // mv onto a directory target nests instead of replacing: fail closed ahead, verify after, sweep both tmp homes on failure.
172
157
  export async function moveFileIntoPlace(runner, tmp, final, opts = {}) {
173
158
  const tmpBase = tmp.slice(tmp.lastIndexOf('/') + 1);
174
159
  const clauses = [
@@ -184,7 +169,6 @@ export async function moveFileIntoPlace(runner, tmp, final, opts = {}) {
184
169
  const tmpGuard = guardCovers(tmp) ? ancestorSymlinkGuard(opts.guardRoot, tmp) : undefined;
185
170
  const nestedGuard = nestedSweepGuard(final, guardCovers(final) ? opts.guardRoot : undefined);
186
171
  const nested = `${final}/${tmpBase}`;
187
- // Each home swept independently so a first-step failure can't be masked by a second-step no-op.
188
172
  const sweepBoth = async () => {
189
173
  await sweepGuardedPath(runner, tmp, tmpGuard);
190
174
  await sweepGuardedPath(runner, nested, nestedGuard);
@@ -225,8 +209,6 @@ export class RepoStore {
225
209
  this.configuredWorkdir = configuredWorkdir;
226
210
  this.repo = repo.trim();
227
211
  this.isGitHub = isGitHubRepo(this.repo);
228
- // clone 是 agent 执行面:github 仓库仅 resolved tool 为 gh 时走 gh repo clone,
229
- // 自定义 tool 走朴素 git(repo clone 是 gh 专属子命令)。
230
212
  this.cloneWithGh = cloneViaGh ?? this.isGitHub;
231
213
  }
232
214
  async ensure() {
@@ -319,7 +301,6 @@ export class RepoStore {
319
301
  throw new Error(`Configured Workdir ${absRepoPath} does not exist; ` +
320
302
  `baxian never creates a user-specified Workdir implicitly.`);
321
303
  }
322
- // Auto mode only (configured Workdir threw above), so physical home is the provable root; mkdir and clone carry the same chain guard, leaving only the in-command race during the long clone.
323
304
  const guardRoot = await this.resolveHome();
324
305
  const parent = absRepoPath.replace(/\/[^/]+$/, '');
325
306
  const staging = `${absRepoPath}.claim-${randomUUID()}`;
@@ -370,7 +351,6 @@ export class RepoStore {
370
351
  }
371
352
  return this.syncMatchingOriginUrl(absRepoPath);
372
353
  }
373
- // gh resolves a two-segment slug against the ambient GH_HOST, so the clone must pin the host from the authoritative repo URL.
374
354
  ghCloneHostEnv() {
375
355
  let host = 'github.com';
376
356
  if (!this.isGitHub) {
@@ -381,7 +361,6 @@ export class RepoStore {
381
361
  }
382
362
  return host === undefined ? '' : `GH_HOST=${shellQuote(host)} `;
383
363
  }
384
- // Runs a remote probe; an uncertain transport outcome throws instead of masquerading as "no".
385
364
  async probe(cmd, what) {
386
365
  const result = await this.runner.exec(cmd);
387
366
  if (result.exitCode !== 0 && execOutcomeUnknown(result)) {
@@ -410,8 +389,6 @@ export class RepoStore {
410
389
  if (independent.exitCode !== 0) {
411
390
  throw new Error(`Workdir ${absRepoPath} must be an independent ordinary clone, not a linked worktree or alternates-based clone.`);
412
391
  }
413
- // A promisor/partial clone lazy-fetches missing objects on read, so an unguarded object query
414
- // could write packs into an externally-rebound .git; reject it as non-independent up front.
415
392
  const partial = await probe(`git -C ${path} config --get-regexp ${shellQuote('^(remote\\..*\\.(promisor|partialclonefilter)|extensions\\.partialclone)$')}`, 'partial-clone markers');
416
393
  if (partial.exitCode === 0 && partial.stdout.trim() !== '') {
417
394
  throw new Error(`Workdir ${absRepoPath} is a partial/promisor clone (${partial.stdout.trim().split('\n')[0]}); ` +
@@ -454,16 +431,13 @@ export class RepoStore {
454
431
  return false;
455
432
  return this.syncOriginUrl(absRepoPath, originUrl);
456
433
  }
457
- // pushurl is cleared BEFORE the URL flips, so a failure keeps the diff visible and the next ensure() retries.
458
434
  async syncOriginUrl(absRepoPath, originUrl) {
459
435
  if (parseGitRemote(this.repo) === null)
460
436
  return false;
461
437
  if (!accessMethodDiffers(this.repo, originUrl))
462
438
  return false;
463
- // These config writes precede validateClone, so a rebound-to-external Workdir would be mutated first; each carries the canonical self-guard in its own command.
464
439
  const guard = canonicalSelfGuard(absRepoPath);
465
440
  const unset = await this.probe(`${guard} && git -C ${shellQuote(absRepoPath)} config --unset-all remote.origin.pushurl`, `remote.origin.pushurl removal at ${absRepoPath}`);
466
- // git config exit 5 = key absent, the normal case here.
467
441
  if (unset.exitCode !== 0 && unset.exitCode !== 5) {
468
442
  throw new Error(redactGitCredentials(`Failed to clear remote.origin.pushurl at ${absRepoPath} (exit ${unset.exitCode}): ${unset.stderr.trim()}`));
469
443
  }
@@ -481,7 +455,6 @@ export class RepoStore {
481
455
  const got = parseGitRemote(originUrl);
482
456
  return want !== null && got !== null && want.host === got.host && want.path === got.path;
483
457
  }
484
- // exit 1 is test(1) saying "no" — unless transport noise rode along, proving nothing.
485
458
  async probeDirExists(absRepoPath) {
486
459
  const probe = await this.probe(`test -d ${shellQuote(absRepoPath)}`, `workdir ${absRepoPath}`);
487
460
  if (probe.exitCode === 0)
@@ -490,10 +463,8 @@ export class RepoStore {
490
463
  return false;
491
464
  throw new Error(`Cannot probe workdir ${absRepoPath} (exit ${probe.exitCode}): ${probe.stderr.trim() || 'exec layer failure'}`);
492
465
  }
493
- // The staging name embeds a UUID, so deleting by name cannot hit anyone else's work.
494
466
  async discardStaging(staging, reason, guardClause) {
495
467
  console.warn(`[repo-store] removing staged clone ${staging}: ${redactGitCredentials(reason)}`);
496
- // Emit a marker so a guard-refused sweep is not masked by the `if`'s exit 0 (destructive cleanup must not fail silently).
497
468
  const rmCmd = guardClause
498
469
  ? `if ${guardClause}; then rm -rf ${shellQuote(staging)} && echo BX_STAGING_REMOVED; else echo BX_STAGING_REFUSED; fi`
499
470
  : `rm -rf ${shellQuote(staging)} && echo BX_STAGING_REMOVED`;
@@ -513,11 +484,9 @@ export class RepoStore {
513
484
  console.warn(`[repo-store] failed to remove staged clone ${staging}:`, err);
514
485
  }
515
486
  }
516
- // mv has three homes (unmoved staging / moved final / nested-on-race); a nonce in staging/.git survives the move so an unknown outcome is reconciled by which home holds our bytes, never guessed.
517
487
  async promoteStaging(staging, absRepoPath, guardRoot) {
518
488
  const base = staging.slice(staging.lastIndexOf('/') + 1);
519
489
  const nestedPath = `${absRepoPath}/${base}`;
520
- // Sweeps carry the FULL ancestor chain from the managed root: a leaf-only [ ! -L ] would still fire inside an external dir if `.baxian/agents/<id>` rebinds.
521
490
  const stagingGuard = ancestorSymlinkGuard(guardRoot, staging);
522
491
  const nestedGuard = ancestorSymlinkGuard(guardRoot, nestedPath);
523
492
  const discardBoth = async (reason) => {
@@ -534,7 +503,6 @@ export class RepoStore {
534
503
  await this.discardStaging(staging, `promote-claim write failed: ${mark.stderr.trim() || `exit ${mark.exitCode}`}`, markGuard);
535
504
  throw new Error(`Cannot stamp staged clone ${staging}: ${mark.stderr.trim() || `exit ${mark.exitCode}`}`);
536
505
  }
537
- // Guard + free-and-not-symlink + mv share one command: a rebound ancestor never receives the move.
538
506
  const promoteCmd = `${ancestorSymlinkGuard(guardRoot, absRepoPath)} && ` +
539
507
  `[ ! -e ${shellQuote(absRepoPath)} ] && [ ! -L ${shellQuote(absRepoPath)} ] && ` +
540
508
  `mv ${shellQuote(staging)} ${shellQuote(absRepoPath)}`;
@@ -547,7 +515,6 @@ export class RepoStore {
547
515
  return;
548
516
  }
549
517
  if (promote.exitCode === 0) {
550
- // Confirm the landing site BEFORE touching any marker: an exit-0 mv can nest staging into a raced-in target, making `final` foreign — clearing its baxian-promote-claim would delete someone else's file.
551
518
  const nested = await this.runner.exec(`test -e ${shellQuote(nestedPath)}`);
552
519
  if (execOutcomeUnknown(nested) || (nested.exitCode !== 0 && nested.exitCode !== 1)) {
553
520
  const reason = `promote verification failed (exit ${nested.exitCode}): ${nested.stderr.trim() || 'exec layer failure'}`;
@@ -555,8 +522,6 @@ export class RepoStore {
555
522
  throw new Error(`Cannot verify promoted clone at ${absRepoPath}; ${reason}`);
556
523
  }
557
524
  if (nested.exitCode === 1) {
558
- // No nested copy: our mv landed at `final`. Its marker must still hold our nonce to adopt it — a
559
- // refused clear means `final` was replaced after the mv (foreign clone), so promote is inconclusive.
560
525
  const cleared = await this.clearPromoteClaim(finalClaim, ancestorSymlinkGuard(guardRoot, finalClaim), nonce);
561
526
  if (cleared !== 'removed') {
562
527
  throw new Error(`Promote to ${absRepoPath} landed but its ownership marker was ${cleared} (replaced/foreign or unverifiable); refusing to adopt. Retry DELETE/clone.`);
@@ -573,7 +538,6 @@ export class RepoStore {
573
538
  await discardBoth(`promote failed: ${promote.stderr.trim() || `exit ${promote.exitCode}`}`);
574
539
  throw new Error(`Cannot promote staged clone into ${absRepoPath}: ${promote.stderr.trim() || `exit ${promote.exitCode}`}`);
575
540
  }
576
- // Three-home reconciliation of an unknown mv: staging present → not executed (discard); final holds our nonce → done; nested → target race (discard); else inconclusive (keep).
577
541
  async reconcilePromote(staging, absRepoPath, nestedPath, finalClaim, nonce, guardRoot, cause) {
578
542
  const stagingExists = await this.runner.exec(`test -e ${shellQuote(staging)}`);
579
543
  if (stagingExists.exitCode === 0) {
@@ -583,8 +547,6 @@ export class RepoStore {
583
547
  if (stagingExists.exitCode === 1) {
584
548
  const marker = await this.runner.exec(`cat ${shellQuote(finalClaim)} 2>/dev/null`);
585
549
  if (marker.exitCode === 0 && marker.stdout.trim() === nonce) {
586
- // The separate cat above can race a replacement of `final`; the atomic clear is authoritative —
587
- // only treat the promote as completed-and-ours if the marker was actually removed under nonce.
588
550
  const cleared = await this.clearPromoteClaim(finalClaim, ancestorSymlinkGuard(guardRoot, finalClaim), nonce);
589
551
  if (cleared !== 'removed') {
590
552
  throw new Error(`Promote to ${absRepoPath} reconciliation: ownership marker was ${cleared} (final replaced after the nonce read); refusing to adopt. ${cause}`);
@@ -603,7 +565,6 @@ export class RepoStore {
603
565
  }
604
566
  async clearPromoteClaim(finalClaim, guard, nonce) {
605
567
  try {
606
- // Nonce re-check and rm in ONE command (a separate cat→rm could delete a replaced foreign marker); the echoed marker surfaces a guard/nonce-refused clear that the `if`'s exit 0 would otherwise mask.
607
568
  const rm = await this.runner.exec(`if ${guard} && [ "$(cat ${shellQuote(finalClaim)} 2>/dev/null)" = ${shellQuote(nonce)} ]; ` +
608
569
  `then rm -f ${shellQuote(finalClaim)} && echo BX_MARKER_REMOVED; else echo BX_MARKER_REFUSED; fi`);
609
570
  if (rm.exitCode !== 0) {
@@ -621,7 +582,6 @@ export class RepoStore {
621
582
  return 'failed';
622
583
  }
623
584
  }
624
- // rmdir can't touch anything non-empty and the chain guard binds it to the physical managed root, so a rebound parent can't be hit.
625
585
  async recoverEmptyLeftoverDir(absRepoPath) {
626
586
  if (this.configuredWorkdir)
627
587
  return false;
@@ -637,8 +597,6 @@ export class RepoStore {
637
597
  const last = this.cache.lastFetchAt.get(cacheKey) ?? 0;
638
598
  if (Date.now() - last < FETCH_THROTTLE_MS)
639
599
  return;
640
- // fetch/set-head write refs and FETCH_HEAD; the canonical self-guard rides the same command so a
641
- // rebind after validateClone can't redirect the writes into an external repo.
642
600
  const result = await execNetwork(this.runner, `${canonicalSelfGuard(absRepoPath)} && cd ${shellQuote(absRepoPath)} && ${GIT_NET_ENV} git fetch --all --prune && git remote set-head origin --auto`);
643
601
  if (result.exitCode !== 0) {
644
602
  throw new Error(`git fetch failed or origin/HEAD could not be refreshed at ${absRepoPath}: ${result.stderr}`);