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.
- package/README.md +5 -7
- package/README.zh-CN.md +5 -7
- package/dist/agent/bootstrap.d.ts.map +1 -1
- package/dist/agent/bootstrap.js +2 -4
- package/dist/agent/bootstrap.js.map +1 -1
- package/dist/agent/branch.d.ts +0 -12
- package/dist/agent/branch.d.ts.map +1 -1
- package/dist/agent/branch.js +1 -78
- package/dist/agent/branch.js.map +1 -1
- package/dist/agent/detect/region.d.ts.map +1 -1
- package/dist/agent/detect/region.js +0 -3
- package/dist/agent/detect/region.js.map +1 -1
- package/dist/agent/dispatch-reconciler.d.ts.map +1 -1
- package/dist/agent/dispatch-reconciler.js +8 -59
- package/dist/agent/dispatch-reconciler.js.map +1 -1
- package/dist/agent/lineage.d.ts.map +1 -1
- package/dist/agent/lineage.js +0 -9
- package/dist/agent/lineage.js.map +1 -1
- package/dist/agent/manager.d.ts +66 -142
- package/dist/agent/manager.d.ts.map +1 -1
- package/dist/agent/manager.js +936 -2738
- package/dist/agent/manager.js.map +1 -1
- package/dist/agent/net-exec.d.ts.map +1 -1
- package/dist/agent/net-exec.js +0 -5
- package/dist/agent/net-exec.js.map +1 -1
- package/dist/agent/pane-streamer-manager.d.ts.map +1 -1
- package/dist/agent/pane-streamer-manager.js +0 -36
- package/dist/agent/pane-streamer-manager.js.map +1 -1
- package/dist/agent/pane-streamer.d.ts +10 -1
- package/dist/agent/pane-streamer.d.ts.map +1 -1
- package/dist/agent/pane-streamer.js +142 -79
- package/dist/agent/pane-streamer.js.map +1 -1
- package/dist/agent/phase-signal-watcher.d.ts +2 -11
- package/dist/agent/phase-signal-watcher.d.ts.map +1 -1
- package/dist/agent/phase-signal-watcher.js +36 -160
- package/dist/agent/phase-signal-watcher.js.map +1 -1
- package/dist/agent/phase-signal.d.ts +13 -40
- package/dist/agent/phase-signal.d.ts.map +1 -1
- package/dist/agent/phase-signal.js +38 -98
- package/dist/agent/phase-signal.js.map +1 -1
- package/dist/agent/preflight.d.ts +0 -1
- package/dist/agent/preflight.d.ts.map +1 -1
- package/dist/agent/preflight.js +6 -31
- package/dist/agent/preflight.js.map +1 -1
- package/dist/agent/prompt.d.ts +1 -30
- package/dist/agent/prompt.d.ts.map +1 -1
- package/dist/agent/prompt.js +20 -148
- package/dist/agent/prompt.js.map +1 -1
- package/dist/agent/repo-store.d.ts.map +1 -1
- package/dist/agent/repo-store.js +0 -42
- package/dist/agent/repo-store.js.map +1 -1
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +0 -2
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/tmux-install.js +0 -1
- package/dist/agent/tmux-install.js.map +1 -1
- package/dist/agent/tmux-probe-poller.d.ts.map +1 -1
- package/dist/agent/tmux-probe-poller.js +0 -7
- package/dist/agent/tmux-probe-poller.js.map +1 -1
- package/dist/agent/tmux.d.ts.map +1 -1
- package/dist/agent/tmux.js +0 -86
- package/dist/agent/tmux.js.map +1 -1
- package/dist/agent/vt-visible-text.d.ts +87 -0
- package/dist/agent/vt-visible-text.d.ts.map +1 -0
- package/dist/agent/vt-visible-text.js +1058 -0
- package/dist/agent/vt-visible-text.js.map +1 -0
- package/dist/api/agents.d.ts.map +1 -1
- package/dist/api/agents.js +1 -42
- package/dist/api/agents.js.map +1 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +8 -53
- package/dist/api/config.js.map +1 -1
- package/dist/api/hosts.d.ts.map +1 -1
- package/dist/api/hosts.js +2 -57
- package/dist/api/hosts.js.map +1 -1
- package/dist/api/platform-guard.d.ts.map +1 -1
- package/dist/api/platform-guard.js +2 -3
- package/dist/api/platform-guard.js.map +1 -1
- package/dist/api/probe.d.ts.map +1 -1
- package/dist/api/probe.js +0 -1
- package/dist/api/probe.js.map +1 -1
- package/dist/api/projects.d.ts.map +1 -1
- package/dist/api/projects.js +599 -332
- package/dist/api/projects.js.map +1 -1
- package/dist/api/tasks.d.ts.map +1 -1
- package/dist/api/tasks.js +15 -40
- package/dist/api/tasks.js.map +1 -1
- package/dist/app.d.ts +0 -2
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +0 -6
- package/dist/app.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -29
- package/dist/cli.js.map +1 -1
- package/dist/config/hot-reload.d.ts.map +1 -1
- package/dist/config/hot-reload.js +0 -4
- package/dist/config/hot-reload.js.map +1 -1
- package/dist/config/loader.d.ts +5 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +36 -47
- package/dist/config/loader.js.map +1 -1
- package/dist/config/normalizer.d.ts.map +1 -1
- package/dist/config/normalizer.js +0 -19
- package/dist/config/normalizer.js.map +1 -1
- package/dist/config/validator.d.ts +7 -4
- package/dist/config/validator.d.ts.map +1 -1
- package/dist/config/validator.js +56 -270
- package/dist/config/validator.js.map +1 -1
- package/dist/event/handlers.d.ts.map +1 -1
- package/dist/event/handlers.js +356 -234
- package/dist/event/handlers.js.map +1 -1
- package/dist/event/log.js +0 -2
- package/dist/event/log.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -50
- package/dist/index.js.map +1 -1
- package/dist/platform/body-digest.d.ts.map +1 -1
- package/dist/platform/body-digest.js +0 -4
- package/dist/platform/body-digest.js.map +1 -1
- package/dist/platform/command-renderer.d.ts +6 -0
- package/dist/platform/command-renderer.d.ts.map +1 -1
- package/dist/platform/command-renderer.js +20 -3
- package/dist/platform/command-renderer.js.map +1 -1
- package/dist/platform/comment-cursor.d.ts.map +1 -1
- package/dist/platform/comment-cursor.js +0 -21
- package/dist/platform/comment-cursor.js.map +1 -1
- package/dist/platform/driver-host.d.ts.map +1 -1
- package/dist/platform/driver-host.js +3 -1
- package/dist/platform/driver-host.js.map +1 -1
- package/dist/platform/driver-spec.d.ts.map +1 -1
- package/dist/platform/driver-spec.js +33 -46
- package/dist/platform/driver-spec.js.map +1 -1
- package/dist/platform/field-mapper.d.ts.map +1 -1
- package/dist/platform/field-mapper.js +3 -11
- package/dist/platform/field-mapper.js.map +1 -1
- package/dist/platform/git-driver.d.ts +2 -0
- package/dist/platform/git-driver.d.ts.map +1 -1
- package/dist/platform/git-driver.js +9 -23
- package/dist/platform/git-driver.js.map +1 -1
- package/dist/platform/manifest.d.ts.map +1 -1
- package/dist/platform/manifest.js +0 -3
- package/dist/platform/manifest.js.map +1 -1
- package/dist/platform/markers.d.ts.map +1 -1
- package/dist/platform/markers.js +0 -19
- package/dist/platform/markers.js.map +1 -1
- package/dist/platform/platform-poller.d.ts +0 -1
- package/dist/platform/platform-poller.d.ts.map +1 -1
- package/dist/platform/platform-poller.js +0 -49
- package/dist/platform/platform-poller.js.map +1 -1
- package/dist/platform/plugin-registry.d.ts.map +1 -1
- package/dist/platform/plugin-registry.js +1 -12
- package/dist/platform/plugin-registry.js.map +1 -1
- package/dist/platform/plugins/github/driver.json +5 -0
- package/dist/platform/plugins/github/skills/baxian-cli-gh/SKILL.md +20 -14
- package/dist/platform/pr-conversation-cache.d.ts.map +1 -1
- package/dist/platform/pr-conversation-cache.js +0 -17
- package/dist/platform/pr-conversation-cache.js.map +1 -1
- package/dist/platform/preflight-exec.d.ts.map +1 -1
- package/dist/platform/preflight-exec.js +0 -9
- package/dist/platform/preflight-exec.js.map +1 -1
- package/dist/platform/response-parser.d.ts.map +1 -1
- package/dist/platform/response-parser.js +0 -4
- package/dist/platform/response-parser.js.map +1 -1
- package/dist/platform/review-timeline.d.ts.map +1 -1
- package/dist/platform/review-timeline.js +0 -22
- package/dist/platform/review-timeline.js.map +1 -1
- package/dist/platform/row-schema.d.ts.map +1 -1
- package/dist/platform/row-schema.js +0 -11
- package/dist/platform/row-schema.js.map +1 -1
- package/dist/platform/startup.d.ts.map +1 -1
- package/dist/platform/startup.js +6 -17
- package/dist/platform/startup.js.map +1 -1
- package/dist/platform/types.d.ts +1 -0
- package/dist/platform/types.d.ts.map +1 -1
- package/dist/platform/types.js +3 -8
- package/dist/platform/types.js.map +1 -1
- package/dist/platform/verdict-engine.d.ts.map +1 -1
- package/dist/platform/verdict-engine.js +0 -15
- package/dist/platform/verdict-engine.js.map +1 -1
- package/dist/shared/concurrency.d.ts.map +1 -1
- package/dist/shared/concurrency.js +0 -2
- package/dist/shared/concurrency.js.map +1 -1
- package/dist/shared/constants.d.ts +1 -8
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +2 -32
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/git-url.d.ts.map +1 -1
- package/dist/shared/git-url.js +0 -9
- package/dist/shared/git-url.js.map +1 -1
- package/dist/shared/types.d.ts +28 -135
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +7 -6
- package/dist/shared/types.js.map +1 -1
- package/dist/skill/registry.d.ts.map +1 -1
- package/dist/skill/registry.js +0 -5
- package/dist/skill/registry.js.map +1 -1
- package/dist/skills/baxian-pr-feedback/SKILL.md +5 -3
- package/dist/skills/baxian-pr-recheck/SKILL.md +4 -0
- package/dist/skills/baxian-pr-review/SKILL.md +4 -0
- package/dist/skills/baxian-signals/SKILL.md +15 -38
- package/dist/skills/baxian-task-check/SKILL.md +13 -14
- package/dist/state/agent-store.d.ts.map +1 -1
- package/dist/state/agent-store.js +0 -6
- package/dist/state/agent-store.js.map +1 -1
- package/dist/state/error-record-store.d.ts.map +1 -1
- package/dist/state/error-record-store.js +0 -5
- package/dist/state/error-record-store.js.map +1 -1
- package/dist/state/init.d.ts.map +1 -1
- package/dist/state/init.js +0 -1
- package/dist/state/init.js.map +1 -1
- package/dist/state/lock.d.ts.map +1 -1
- package/dist/state/lock.js +0 -1
- package/dist/state/lock.js.map +1 -1
- package/dist/state/snapshot.d.ts.map +1 -1
- package/dist/state/snapshot.js +5 -2
- package/dist/state/snapshot.js.map +1 -1
- package/dist/state/task-store.d.ts.map +1 -1
- package/dist/state/task-store.js +56 -143
- package/dist/state/task-store.js.map +1 -1
- package/dist/terminal/attach.d.ts.map +1 -1
- package/dist/terminal/attach.js +0 -4
- package/dist/terminal/attach.js.map +1 -1
- package/dist/terminal/stream-ws.js +0 -5
- package/dist/terminal/stream-ws.js.map +1 -1
- package/dist/web/assets/index-CiAnjs1_.js +15 -0
- package/dist/web/assets/index-yqxawAPJ.css +1 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/agent/review-transport.d.ts +0 -92
- package/dist/agent/review-transport.d.ts.map +0 -1
- package/dist/agent/review-transport.js +0 -512
- package/dist/agent/review-transport.js.map +0 -1
- package/dist/agent/root-agent-runtime.d.ts +0 -80
- package/dist/agent/root-agent-runtime.d.ts.map +0 -1
- package/dist/agent/root-agent-runtime.js +0 -635
- package/dist/agent/root-agent-runtime.js.map +0 -1
- package/dist/agent/root-recovery-coordinator.d.ts +0 -125
- package/dist/agent/root-recovery-coordinator.d.ts.map +0 -1
- package/dist/agent/root-recovery-coordinator.js +0 -1579
- package/dist/agent/root-recovery-coordinator.js.map +0 -1
- package/dist/event/server-handlers.d.ts +0 -4
- package/dist/event/server-handlers.d.ts.map +0 -1
- package/dist/event/server-handlers.js +0 -1294
- package/dist/event/server-handlers.js.map +0 -1
- package/dist/skills/baxian-research/SKILL.md +0 -28
- package/dist/skills/baxian-server-feedback/SKILL.md +0 -40
- package/dist/skills/baxian-server-feedback/agents/openai.yaml +0 -2
- package/dist/skills/baxian-server-review/SKILL.md +0 -58
- package/dist/skills/baxian-server-review/agents/openai.yaml +0 -2
- package/dist/state/review-store.d.ts +0 -33
- package/dist/state/review-store.d.ts.map +0 -1
- package/dist/state/review-store.js +0 -272
- package/dist/state/review-store.js.map +0 -1
- package/dist/state/root-recovery-store.d.ts +0 -107
- package/dist/state/root-recovery-store.d.ts.map +0 -1
- package/dist/state/root-recovery-store.js +0 -400
- package/dist/state/root-recovery-store.js.map +0 -1
- package/dist/web/assets/index-BPv6vv3U.css +0 -1
- package/dist/web/assets/index-BXfgaFNm.js +0 -18
package/dist/agent/prompt.js
CHANGED
|
@@ -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 (
|
|
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
|
-
|
|
133
|
-
|
|
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
|
-
'
|
|
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,
|
|
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 === '
|
|
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
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
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;
|
package/dist/agent/prompt.js.map
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAA2F,MAAM,oBAAoB,CAAC;AAE3I,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC1C,MAAM,CAAC,MAAM,4BAA4B,GAAG,gBAAgB,GAAG,IAAI,CAAC;AAEpE,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACZ;IAA5B,YAA4B,KAAa;QACvC,KAAK,CACH,eAAe,KAAK,kBAAkB,gBAAgB,UAAU;YAChE,iEAAiE,CAClE,CAAC;QAJwB,UAAK,GAAL,KAAK,CAAQ;QAKvC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACvB;IAA5B,YAA4B,OAAiB;QAC3C,KAAK,CACH,4CAA4C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAClE,wDAAwD,CACzD,CAAC;QAJwB,YAAO,GAAP,OAAO,CAAU;QAK3C,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,kBAAkB,GAAiC;IACvD,aAAa,EAAE,GAAG;IAClB,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;CACd,CAAC;AAUF,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;AAErG,SAAS,YAAY,CAAC,KAAa,EAAE,QAAgB;IACnD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,GAAG,QAAQ;YAAE,MAAM;QAChC,GAAG,IAAI,EAAE,CAAC;QACV,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAC1B,IAAe,EACf,KAAa,EACb,WAAmC;IAEnC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CACR,QAAQ,WAAW,CAAC,IAAI,EAAE,EAC1B,aAAa,WAAW,CAAC,IAAI,EAAE,EAC/B,aAAa,WAAW,CAAC,IAAI,EAAE,EAC/B,qBAAqB,WAAW,CAAC,WAAW,EAAE,CAC/C,CAAC;QACF,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,cAAc,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5D,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,wBAAwB,IAAI,CAAC,EAAE,yCAAyC,CAAC,CAAC;QACpG,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,SAAS,EAAE,EAAE,eAAe,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAe,EAAE,KAAa;IACvD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,KAA+C,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;IACnG,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAaD,MAAM,UAAU,iBAAiB,CAAC,IAAqB;IACrD,MAAM,QAAQ,GAAG;QACf,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;QAC9D,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,aAAa,CAAC;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,SAAS;QAC1B,CAAC,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,IAAI;QAC3D,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,KAAK,GAAG,gBAAgB;QAAE,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,OAAqB;IACtE,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,2BAA2B,KAAK,IAAI,CAAC;AAC5E,CAAC;AAoBD,SAAS,YAAY,CAAC,EAAE,IAAI,EAAkB;IAC5C,OAAO;QACL,MAAM,EAAE;YACN,OAAO,IAAI,CAAC,QAAQ,IAAI,aAAa,EAAE;YACvC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD;KACF,CAAC;AACJ,CAAC;AAED,MAAM,qBAAqB,GAA8C;IACvE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC/B,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC5B,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAClB,MAAM,EAAE;YACN,OAAO,IAAI,CAAC,QAAQ,IAAI,aAAa,EAAE;YACvC,WAAW,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE;YACtC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD;KACF,CAAC;IACF,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7B,MAAM,EAAE,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,aAAa,EAAE,CAAC;KAClD,CAAC;IACF,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC;IAClC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC;CACpC,CAAC;AAEF,SAAS,aAAa,CAAC,IAAkB;IACvC,MAAM,EACJ,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EACjC,UAAU,EAAE,WAAW,GACxB,GAAG,IAAI,CAAC;IACT,IAAI,KAAK,KAAK,cAAc,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvG,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,YAAY,GAAI,qBAA4D,CAAC,KAAK,CAAC,CAAC;IAC1F,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,0DAA0D,KAAK,GAAG,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,MAAM,UAAU,GAAG;QACjB,UAAU,KAAK,EAAE;QACjB,YAAY,OAAO,EAAE;QACrB,GAAG,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC;QAChD,GAAG,MAAM;QACT,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW;QACnC,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE;QAC/C,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAG,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QACrD,CAAC,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,QAAQ,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,MAAM,IAAI,GAAG,GAAG,UAAU,OAAO,YAAY,GAAG,WAAW,GAAG,QAAQ,IAAI,CAAC;IAC3E,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;YACxE,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,qCAAqC,MAAM,CAAC,IAAI,iBAAiB,CAAC,CAAC;YAC7F,CAAC;YACD,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6DAA6D,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-store.d.ts","sourceRoot":"","sources":["../../src/agent/repo-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAS7D,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;
|
|
1
|
+
{"version":3,"file":"repo-store.d.ts","sourceRoot":"","sources":["../../src/agent/repo-store.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/repo-store.js
CHANGED
|
@@ -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}`);
|