baxian 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/bootstrap.d.ts +1 -1
- package/dist/agent/bootstrap.d.ts.map +1 -1
- package/dist/agent/bootstrap.js +33 -0
- package/dist/agent/bootstrap.js.map +1 -1
- package/dist/agent/manager.d.ts +16 -13
- package/dist/agent/manager.d.ts.map +1 -1
- package/dist/agent/manager.js +272 -465
- package/dist/agent/manager.js.map +1 -1
- package/dist/agent/phase-signal-watcher.d.ts +1 -4
- package/dist/agent/phase-signal-watcher.d.ts.map +1 -1
- package/dist/agent/phase-signal-watcher.js +3 -22
- package/dist/agent/phase-signal-watcher.js.map +1 -1
- package/dist/agent/phase-signal.d.ts +1 -10
- package/dist/agent/phase-signal.d.ts.map +1 -1
- package/dist/agent/phase-signal.js +5 -8
- package/dist/agent/phase-signal.js.map +1 -1
- package/dist/agent/preflight.d.ts.map +1 -1
- package/dist/agent/preflight.js +49 -22
- package/dist/agent/preflight.js.map +1 -1
- package/dist/agent/prompt.d.ts +2 -3
- package/dist/agent/prompt.d.ts.map +1 -1
- package/dist/agent/prompt.js +35 -67
- package/dist/agent/prompt.js.map +1 -1
- package/dist/agent/repo-store.d.ts +5 -4
- package/dist/agent/repo-store.d.ts.map +1 -1
- package/dist/agent/repo-store.js +53 -49
- package/dist/agent/repo-store.js.map +1 -1
- package/dist/agent/review-transport.js +2 -2
- package/dist/agent/review-transport.js.map +1 -1
- package/dist/agent/tmux-probe-poller.js +4 -4
- package/dist/agent/tmux-probe-poller.js.map +1 -1
- package/dist/agent/tmux.js +9 -9
- package/dist/agent/tmux.js.map +1 -1
- package/dist/agent/worktree.d.ts +1 -0
- package/dist/agent/worktree.d.ts.map +1 -1
- package/dist/agent/worktree.js +14 -0
- package/dist/agent/worktree.js.map +1 -1
- package/dist/api/agents.d.ts.map +1 -1
- package/dist/api/agents.js +5 -1
- package/dist/api/agents.js.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/config.js.map +1 -1
- package/dist/api/hosts.js +2 -2
- package/dist/api/hosts.js.map +1 -1
- package/dist/api/tasks.js +2 -2
- package/dist/api/tasks.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +8 -1
- package/dist/cli.js.map +1 -1
- package/dist/config/loader.js +5 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/config/validator.d.ts.map +1 -1
- package/dist/config/validator.js +37 -3
- package/dist/config/validator.js.map +1 -1
- package/dist/event/handlers.d.ts.map +1 -1
- package/dist/event/handlers.js +18 -439
- package/dist/event/handlers.js.map +1 -1
- package/dist/event/server-handlers.d.ts.map +1 -1
- package/dist/event/server-handlers.js +31 -24
- package/dist/event/server-handlers.js.map +1 -1
- package/dist/github/poller.d.ts.map +1 -1
- package/dist/github/poller.js +13 -3
- package/dist/github/poller.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/shared/constants.d.ts +1 -1
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +1 -7
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/git-url.d.ts +14 -0
- package/dist/shared/git-url.d.ts.map +1 -0
- package/dist/shared/git-url.js +76 -0
- package/dist/shared/git-url.js.map +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/types.d.ts +2 -2
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/skills/server-feedback/SKILL.md +4 -2
- package/dist/terminal/attach.d.ts.map +1 -1
- package/dist/terminal/attach.js +19 -3
- package/dist/terminal/attach.js.map +1 -1
- package/dist/web/assets/index-CC3XRKh1.js +4 -0
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
- package/dist/web/assets/index-DE_xpPQe.js +0 -4
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { AgentConfig
|
|
1
|
+
import type { AgentConfig } from '../shared/index.js';
|
|
2
2
|
import type { EventBus } from '../event/bus.js';
|
|
3
3
|
import type { PaneStreamerManager } from './pane-streamer-manager.js';
|
|
4
4
|
import { type PhaseSignalKind, type ReadFileSignal } from './phase-signal.js';
|
|
5
|
-
export declare function resolveEventType(kind: PhaseSignalKind, reviewMode: ReviewMode): EventType;
|
|
6
5
|
export interface PhaseSignalWatcherDeps {
|
|
7
6
|
paneStreamerManager: PaneStreamerManager;
|
|
8
7
|
eventBus: EventBus;
|
|
@@ -15,8 +14,6 @@ export interface PhaseSignalWatcherStartArgs {
|
|
|
15
14
|
/** Kinds we accept; first match wins. QA review verdict uses {pr-approved, pr-changes-requested}. */
|
|
16
15
|
expectedKinds: PhaseSignalKind | readonly PhaseSignalKind[] | ReadonlySet<PhaseSignalKind>;
|
|
17
16
|
token: string;
|
|
18
|
-
/** From TaskState.reviewMode (creation-time snapshot); routes colliding kinds. Default 'github'. */
|
|
19
|
-
reviewMode?: ReviewMode;
|
|
20
17
|
/** Server-mode QA context requests; fired per distinct request, does not consume the watch. */
|
|
21
18
|
onReadFile?: (req: ReadFileSignal) => void;
|
|
22
19
|
/** skipSnapshot=true: scrollback signal would re-fire on recovery. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase-signal-watcher.d.ts","sourceRoot":"","sources":["../../src/agent/phase-signal-watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"phase-signal-watcher.d.ts","sourceRoot":"","sources":["../../src/agent/phase-signal-watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA0B,MAAM,oBAAoB,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAsC3B,MAAM,WAAW,sBAAsB;IACrC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;CAC5D;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,qGAAqG;IACrG,aAAa,EAAE,eAAe,GAAG,SAAS,eAAe,EAAE,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;IAC3F,KAAK,EAAE,MAAM,CAAC;IACd,+FAA+F;IAC/F,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,sEAAsE;IACtE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAUD,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;gBAE5B,IAAI,EAAE,sBAAsB;IAKnD,KAAK,CAAC,IAAI,EAAE,2BAA2B,GAAG,OAAO,CAAC,OAAO,CAAC;IAiEhE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO1B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI5B,+EAA+E;IAC/E,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,eAAe,CAAC;IAI9D,yFAAyF;IACzF,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIpC,OAAO,CAAC,UAAU;YA4DJ,cAAc;IAmB5B,OAAO,CAAC,aAAa;YAcP,6BAA6B;CA2B5C"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { scanPhaseSignals, scanReadFileSignals, } from './phase-signal.js';
|
|
2
2
|
const MATCH_BUFFER_CHARS = 1024;
|
|
3
|
-
// Dispatch
|
|
3
|
+
// Dispatch table. Each pane-signal kind maps to the EventBus event type the
|
|
4
4
|
// handler chain will receive. pr-* kinds reuse existing event types (the
|
|
5
5
|
// data.source='pane-signal' tag tells the handler the trigger came from a
|
|
6
6
|
// pane signal echo rather than a GitHub poll cycle, so idempotency dedup can
|
|
7
7
|
// be applied if the same logical transition also gets reported by the poller).
|
|
8
8
|
const KIND_TO_EVENT_TYPE = {
|
|
9
|
-
'spec-
|
|
10
|
-
'spec-approved': 'spec.review.submitted',
|
|
11
|
-
'spec-changes-requested': 'spec.review.submitted',
|
|
12
|
-
'spec-fixed': 'spec.fix.submitted',
|
|
9
|
+
'spec-fixed': 'server.spec.fix.submitted',
|
|
13
10
|
'pr-created': 'pr.created',
|
|
14
11
|
'pr-approved': 'review.submitted',
|
|
15
12
|
'pr-changes-requested': 'review.submitted',
|
|
@@ -22,21 +19,6 @@ const KIND_TO_EVENT_TYPE = {
|
|
|
22
19
|
'code-fixed': 'server.code.fix.submitted',
|
|
23
20
|
'code-ready': 'server.code.published',
|
|
24
21
|
};
|
|
25
|
-
// spec-fixed exists in BOTH protocols: github mode routes it to the legacy
|
|
26
|
-
// handler, server mode to the new one. The mode comes from TaskState.reviewMode
|
|
27
|
-
// (snapshotted at task creation) via start args — never live config, so a hot
|
|
28
|
-
// mode flip cannot retarget an in-flight task's signals.
|
|
29
|
-
const SERVER_KIND_TO_EVENT_TYPE = {
|
|
30
|
-
'spec-fixed': 'server.spec.fix.submitted',
|
|
31
|
-
};
|
|
32
|
-
export function resolveEventType(kind, reviewMode) {
|
|
33
|
-
if (reviewMode === 'server') {
|
|
34
|
-
const mapped = SERVER_KIND_TO_EVENT_TYPE[kind];
|
|
35
|
-
if (mapped)
|
|
36
|
-
return mapped;
|
|
37
|
-
}
|
|
38
|
-
return KIND_TO_EVENT_TYPE[kind];
|
|
39
|
-
}
|
|
40
22
|
function normalizeKinds(input) {
|
|
41
23
|
if (input instanceof Set)
|
|
42
24
|
return input;
|
|
@@ -76,7 +58,6 @@ export class PhaseSignalWatcher {
|
|
|
76
58
|
agentId: args.agentId,
|
|
77
59
|
expectedKinds,
|
|
78
60
|
expectedToken: args.token,
|
|
79
|
-
reviewMode: args.reviewMode ?? 'github',
|
|
80
61
|
...(args.onReadFile ? { onReadFile: args.onReadFile } : {}),
|
|
81
62
|
seenReadFile: new Set(),
|
|
82
63
|
recovered: args.recovered ?? false,
|
|
@@ -173,7 +154,7 @@ export class PhaseSignalWatcher {
|
|
|
173
154
|
: undefined;
|
|
174
155
|
const event = {
|
|
175
156
|
id: '',
|
|
176
|
-
type:
|
|
157
|
+
type: KIND_TO_EVENT_TYPE[signal.kind],
|
|
177
158
|
timestamp: new Date().toISOString(),
|
|
178
159
|
projectId: entry.projectId,
|
|
179
160
|
agentId: entry.agentId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase-signal-watcher.js","sourceRoot":"","sources":["../../src/agent/phase-signal-watcher.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GAGpB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,
|
|
1
|
+
{"version":3,"file":"phase-signal-watcher.js","sourceRoot":"","sources":["../../src/agent/phase-signal-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
export type PhaseSignalKind = 'spec-
|
|
1
|
+
export type PhaseSignalKind = 'spec-fixed' | 'pr-created' | 'pr-approved' | 'pr-changes-requested' | 'pr-fixed' | 'pr-merge-ready' | 'spec-done' | 'spec-reviewed' | 'code-done' | 'code-reviewed' | 'code-fixed' | 'code-ready';
|
|
2
2
|
export declare const PHASE_SIGNAL_KINDS: readonly PhaseSignalKind[];
|
|
3
3
|
export type PhaseSignal = {
|
|
4
|
-
kind: 'spec-created';
|
|
5
|
-
token: string;
|
|
6
|
-
} | {
|
|
7
|
-
kind: 'spec-approved';
|
|
8
|
-
token: string;
|
|
9
|
-
} | {
|
|
10
|
-
kind: 'spec-changes-requested';
|
|
11
|
-
token: string;
|
|
12
|
-
} | {
|
|
13
4
|
kind: 'spec-fixed';
|
|
14
5
|
token: string;
|
|
15
6
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase-signal.d.ts","sourceRoot":"","sources":["../../src/agent/phase-signal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"phase-signal.d.ts","sourceRoot":"","sources":["../../src/agent/phase-signal.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,sBAAsB,GACtB,UAAU,GACV,gBAAgB,GAChB,WAAW,GACX,eAAe,GACf,WAAW,GACX,eAAe,GACf,YAAY,GACZ,YAAY,CAAC;AAEjB,eAAO,MAAM,kBAAkB,EAAE,SAAS,eAAe,EAa/C,CAAC;AAKX,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAwB7D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAID,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE,YAAY,GAAG,YAAY,CAAC,EAC3D,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC;AACV,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC;AACV,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAAC;AAqBV,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAQD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAGtE;AAOD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAyB5D;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CAUlE"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
export const PHASE_SIGNAL_KINDS = [
|
|
3
|
-
'spec-created',
|
|
4
|
-
'spec-approved',
|
|
5
|
-
'spec-changes-requested',
|
|
6
3
|
'spec-fixed',
|
|
7
4
|
'pr-created',
|
|
8
5
|
'pr-approved',
|
|
@@ -19,11 +16,11 @@ export const PHASE_SIGNAL_KINDS = [
|
|
|
19
16
|
const VALID_KINDS = new Set(PHASE_SIGNAL_KINDS);
|
|
20
17
|
const ANSI_PATTERN = /\x1b\[[0-?]*[ -/]*[@-~]/g;
|
|
21
18
|
const OSC_PATTERN = /\x1b\][\s\S]*?(?:\x07|\x1b\\)/g;
|
|
22
|
-
//
|
|
19
|
+
// Token range: 6-64 chars of base64url+dash.
|
|
23
20
|
// `pr-created` extracts the PR number (1+ digits) before the token segment.
|
|
24
21
|
const TOKEN_RANGE = '[A-Za-z0-9_-]{6,64}';
|
|
25
22
|
const COMPACT_SIGNAL_RE_PR_CREATED = new RegExp(`\\[bx:(pr-created):(\\d+):(${TOKEN_RANGE})\\]`, 'g');
|
|
26
|
-
const COMPACT_SIGNAL_RE_PLAIN = new RegExp(`\\[bx:(spec-
|
|
23
|
+
const COMPACT_SIGNAL_RE_PLAIN = new RegExp(`\\[bx:(spec-fixed|pr-approved|pr-changes-requested|pr-fixed|pr-merge-ready|spec-done|spec-reviewed|code-done|code-reviewed|code-fixed):(${TOKEN_RANGE})\\]`, 'g');
|
|
27
24
|
// code-ready's PR-number segment is optional: afterDone:'pr' emits 3-segment, 'branch' 2-segment.
|
|
28
25
|
const COMPACT_SIGNAL_RE_CODE_READY = new RegExp(`\\[bx:(code-ready)(?::(\\d+))?:(${TOKEN_RANGE})\\]`, 'g');
|
|
29
26
|
export function stripSignalAnsi(text) {
|
|
@@ -60,9 +57,9 @@ export function buildPhaseSignalTemplate(kind) {
|
|
|
60
57
|
}
|
|
61
58
|
// Scan a chunk of pane bytes for phase signals. Strips ANSI escapes, then
|
|
62
59
|
// strips whitespace so TUI soft-wrap inside the signal still matches.
|
|
63
|
-
// Returns signals in text-order: when develop dispatches
|
|
64
|
-
// pr-created}
|
|
65
|
-
// stream, not first by which regex pass we happened to run.
|
|
60
|
+
// Returns signals in text-order: when develop dispatches a multi-kind watcher
|
|
61
|
+
// (e.g. {spec-done, pr-created}), "first match wins" must mean first by position
|
|
62
|
+
// in the stream, not first by which regex pass we happened to run.
|
|
66
63
|
export function scanPhaseSignals(text) {
|
|
67
64
|
const stripped = stripSignalAnsi(text);
|
|
68
65
|
const compact = stripped.replace(/\s+/g, '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase-signal.js","sourceRoot":"","sources":["../../src/agent/phase-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"phase-signal.js","sourceRoot":"","sources":["../../src/agent/phase-signal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/agent/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAC;AAElE,OAAO,KAAK,EAAE,WAAW,EAAgB,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/agent/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAC;AAElE,OAAO,KAAK,EAAE,WAAW,EAAgB,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIhF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAiDD,wBAAsB,YAAY,CAChC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,UAAU,GAChB,OAAO,CAAC,eAAe,EAAE,CAAC,CA4F5B"}
|
package/dist/agent/preflight.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { LocalRunner, buildSshOptions, ensureMuxDir, shellQuote, sshTarget, sshEnv } from './runner.js';
|
|
2
|
+
import { isGitHubRepo, redactGitCredentials, repoSlug } from '../shared/index.js';
|
|
3
|
+
import { nonGitHubSubpath } from './repo-store.js';
|
|
2
4
|
const CLI_BINARY = {
|
|
3
5
|
'claude-code': 'claude',
|
|
4
6
|
codex: 'codex',
|
|
@@ -38,6 +40,8 @@ async function probeBinary(runner, binary, step, okMessage, failMessage, options
|
|
|
38
40
|
}
|
|
39
41
|
}
|
|
40
42
|
export async function runPreflight(runner, agent, repo, host) {
|
|
43
|
+
// Trim so a whitespace-padded config value probes the same canonical URL RepoStore clones.
|
|
44
|
+
repo = repo.trim();
|
|
41
45
|
const results = [];
|
|
42
46
|
const binary = CLI_BINARY[agent.runtime];
|
|
43
47
|
if (agent.mode === 'remote') {
|
|
@@ -76,20 +80,25 @@ export async function runPreflight(runner, agent, repo, host) {
|
|
|
76
80
|
else {
|
|
77
81
|
await runManualModePreflight(runner, agent.workdir, repo, results);
|
|
78
82
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
:
|
|
92
|
-
|
|
83
|
+
// GitHub-only platform checks: a generic git remote has no gh CLI / API. Its access is
|
|
84
|
+
// proven by the `git ls-remote` step in the mode-specific preflight above.
|
|
85
|
+
if (isGitHubRepo(repo)) {
|
|
86
|
+
const slug = repoSlug(repo);
|
|
87
|
+
const ghCheck = await runner.exec('gh auth status');
|
|
88
|
+
results.push({
|
|
89
|
+
step: 'gh',
|
|
90
|
+
ok: ghCheck.exitCode === 0,
|
|
91
|
+
message: ghCheck.exitCode === 0 ? 'GitHub CLI authenticated' : 'Run "gh auth login" or set GITHUB_TOKEN',
|
|
92
|
+
});
|
|
93
|
+
const ghRepoCheck = await runner.exec(`gh api repos/${slug}`);
|
|
94
|
+
results.push({
|
|
95
|
+
step: 'gh-repo',
|
|
96
|
+
ok: ghRepoCheck.exitCode === 0,
|
|
97
|
+
message: ghRepoCheck.exitCode === 0
|
|
98
|
+
? `gh api access to ${slug} OK`
|
|
99
|
+
: `gh api repos/${slug} failed — check token scopes`,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
93
102
|
return results;
|
|
94
103
|
}
|
|
95
104
|
async function runManualModePreflight(runner, workdir, repo, results) {
|
|
@@ -101,7 +110,8 @@ async function runManualModePreflight(runner, workdir, repo, results) {
|
|
|
101
110
|
? `${workdir} is a git workdir`
|
|
102
111
|
: `${workdir} is not accessible or not a git repository`,
|
|
103
112
|
});
|
|
104
|
-
const
|
|
113
|
+
const lsRemoteUrl = isGitHubRepo(repo) ? `https://github.com/${repoSlug(repo)}.git` : repo;
|
|
114
|
+
const gitCheck = await runner.exec(`git ls-remote ${shellQuote(lsRemoteUrl)} HEAD`);
|
|
105
115
|
results.push({
|
|
106
116
|
step: 'git',
|
|
107
117
|
ok: gitCheck.exitCode === 0,
|
|
@@ -111,14 +121,16 @@ async function runManualModePreflight(runner, workdir, repo, results) {
|
|
|
111
121
|
});
|
|
112
122
|
}
|
|
113
123
|
async function runAutoModePreflight(runner, repo, results) {
|
|
114
|
-
const
|
|
115
|
-
const
|
|
116
|
-
const
|
|
124
|
+
const gh = isGitHubRepo(repo);
|
|
125
|
+
const relPath = gh ? `repos/${repoSlug(repo).toLowerCase()}` : nonGitHubSubpath(repo);
|
|
126
|
+
const root = `~/.baxian/${relPath.split('/')[0]}`;
|
|
127
|
+
const absRepoPath = `~/.baxian/${relPath}`;
|
|
128
|
+
const mk = await runner.exec(`mkdir -p ${root} && test -w ${root}`);
|
|
117
129
|
if (mk.exitCode !== 0) {
|
|
118
130
|
results.push({
|
|
119
131
|
step: 'workdir',
|
|
120
132
|
ok: false,
|
|
121
|
-
message: `Cannot create or write to ${
|
|
133
|
+
message: `Cannot create or write to ${root}: ${mk.stderr || mk.stdout}`,
|
|
122
134
|
});
|
|
123
135
|
return;
|
|
124
136
|
}
|
|
@@ -144,14 +156,29 @@ async function runAutoModePreflight(runner, repo, results) {
|
|
|
144
156
|
results.push({
|
|
145
157
|
step: 'workdir',
|
|
146
158
|
ok: true,
|
|
147
|
-
message: `${absRepoPath} does not yet exist; will be created by gh repo clone`,
|
|
159
|
+
message: `${absRepoPath} does not yet exist; will be created by ${gh ? 'gh repo clone' : 'git clone'}`,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
if (!gh) {
|
|
163
|
+
// Generic remote: plain git is the only assumed capability; the full URL carries credentials.
|
|
164
|
+
const ls = await runner.exec(`git ls-remote ${shellQuote(repo)} HEAD`);
|
|
165
|
+
results.push({
|
|
166
|
+
step: 'git',
|
|
167
|
+
ok: ls.exitCode === 0,
|
|
168
|
+
message: ls.exitCode === 0
|
|
169
|
+
? 'git ls-remote OK'
|
|
170
|
+
// redact: a non-github HTTPS remote may carry an embedded token, and this message is
|
|
171
|
+
// returned to the /checks caller — never echo the raw credentialed URL.
|
|
172
|
+
: `git ls-remote ${redactGitCredentials(repo)} failed — check the git credentials (HTTPS credential helper or SSH key) for this host`,
|
|
148
173
|
});
|
|
174
|
+
return;
|
|
149
175
|
}
|
|
176
|
+
const slug = repoSlug(repo);
|
|
150
177
|
const proto = await runner.exec('gh config get git_protocol');
|
|
151
178
|
const protocol = proto.stdout.trim() || 'https';
|
|
152
179
|
const lsRemoteUrl = protocol === 'ssh'
|
|
153
|
-
? `git@github.com:${
|
|
154
|
-
: `https://github.com/${
|
|
180
|
+
? `git@github.com:${slug}.git`
|
|
181
|
+
: `https://github.com/${slug}.git`;
|
|
155
182
|
const ls = await runner.exec(`git ls-remote ${shellQuote(lsRemoteUrl)} HEAD`);
|
|
156
183
|
results.push({
|
|
157
184
|
step: 'git',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/agent/preflight.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/agent/preflight.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/prompt.d.ts
CHANGED
|
@@ -21,12 +21,10 @@ export interface BuildPromptOpts {
|
|
|
21
21
|
/** Current pending pane-signal token. Required for phases that emit a signal. */
|
|
22
22
|
signalToken?: string;
|
|
23
23
|
postApproveRedispatchCount?: number;
|
|
24
|
-
/** findings.json 内容,caller 负责截断到 MAX_INLINE_FINDINGS_BYTES 以下。 */
|
|
25
|
-
specFindings?: string;
|
|
26
24
|
/** Caller-transmitted round — task field is stale during dispatch. */
|
|
27
25
|
currentSpecRound?: number;
|
|
28
26
|
excludeSkills?: readonly string[];
|
|
29
|
-
/** Absolute agent-host image paths to weave into the task body
|
|
27
|
+
/** Absolute agent-host image paths to weave into the task body. */
|
|
30
28
|
imagePaths?: string[];
|
|
31
29
|
/** Server mode: injected review input (diff or spec doc), pre-sized by the caller. */
|
|
32
30
|
serverContent?: string;
|
|
@@ -42,6 +40,7 @@ export interface BuildPromptOpts {
|
|
|
42
40
|
branch: string;
|
|
43
41
|
};
|
|
44
42
|
contentTruncated?: boolean;
|
|
43
|
+
hasQaPartner?: boolean;
|
|
45
44
|
}
|
|
46
45
|
export declare const MAX_INLINE_FINDINGS_BYTES: number;
|
|
47
46
|
export declare function buildPromptInline(opts: BuildPromptOpts): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,WAAW,EAAE,KAAK,SAAS,EAAsB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/J,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAEzD,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAE1C,eAAO,MAAM,4BAA4B,QAA0B,CAAC;AAEpE,qBAAa,eAAgB,SAAQ,KAAK;aACZ,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;CAO1C;AAED,qBAAa,0BAA2B,SAAQ,KAAK;aACvB,OAAO,EAAE,MAAM,EAAE;gBAAjB,OAAO,EAAE,MAAM,EAAE;CAO9C;AAyBD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,EACvB,aAAa,GAAE,SAAS,MAAM,EAAO,GACpC,MAAM,CAqBR;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,WAAW,EAAE,KAAK,SAAS,EAAsB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/J,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAEzD,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAE1C,eAAO,MAAM,4BAA4B,QAA0B,CAAC;AAEpE,qBAAa,eAAgB,SAAQ,KAAK;aACZ,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;CAO1C;AAED,qBAAa,0BAA2B,SAAQ,KAAK;aACvB,OAAO,EAAE,MAAM,EAAE;gBAAjB,OAAO,EAAE,MAAM,EAAE;CAO9C;AAyBD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,EACvB,aAAa,GAAE,SAAS,MAAM,EAAO,GACpC,MAAM,CAqBR;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAI1B,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,yBAAyB,QAAY,CAAC;AAOnD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAkC/D;AAuaD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACrD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,uBAAuB,EAC5B,MAAM,EAAE,4BAA4B,GACnC,MAAM,CASR"}
|
package/dist/agent/prompt.js
CHANGED
|
@@ -83,7 +83,6 @@ export function buildPromptInline(opts) {
|
|
|
83
83
|
worktreePath: opts.worktreePath,
|
|
84
84
|
signalToken: opts.signalToken,
|
|
85
85
|
postApproveRedispatchCount: opts.postApproveRedispatchCount,
|
|
86
|
-
specFindings: opts.specFindings,
|
|
87
86
|
currentSpecRound: opts.currentSpecRound,
|
|
88
87
|
imagePaths: opts.imagePaths,
|
|
89
88
|
serverContent: opts.serverContent,
|
|
@@ -93,6 +92,7 @@ export function buildPromptInline(opts) {
|
|
|
93
92
|
serverPriorResponse: opts.serverPriorResponse,
|
|
94
93
|
serverAfterDone: opts.serverAfterDone,
|
|
95
94
|
contentTruncated: opts.contentTruncated,
|
|
95
|
+
hasQaPartner: opts.hasQaPartner,
|
|
96
96
|
});
|
|
97
97
|
const taskBlock = `<task>${cdata(taskBody)}</task>`;
|
|
98
98
|
const fullPrompt = skillsXml ? `${skillsXml}\n${taskBlock}` : taskBlock;
|
|
@@ -118,33 +118,42 @@ function buildReviewOrRecheckInstructions({ task, signalToken }, isRecheck) {
|
|
|
118
118
|
].join('\n');
|
|
119
119
|
}
|
|
120
120
|
// Single source of truth for per-phase prompt instructions, keyed by an exhaustive
|
|
121
|
-
// Record<DispatchPhase, …>: a phase shipped without a builder is a COMPILE error
|
|
122
|
-
// the
|
|
123
|
-
// the /compact cleanup path (not buildTaskBody), so its builder is empty by design.
|
|
121
|
+
// Record<DispatchPhase, …>: a phase shipped without a builder is a COMPILE error.
|
|
122
|
+
// `merge` runs through the /compact cleanup path (not buildTaskBody), so its builder is empty by design.
|
|
124
123
|
const PHASE_PROMPT_BUILDERS = {
|
|
125
124
|
merge: () => '',
|
|
126
|
-
develop: ({ task, signalToken }) => {
|
|
125
|
+
develop: ({ task, signalToken, hasQaPartner }) => {
|
|
127
126
|
if (!signalToken)
|
|
128
127
|
return '';
|
|
128
|
+
// spec review 由 QA 执行;没有 QA 时不提供该路线,spec-done 会派不出去。
|
|
129
|
+
const offerSpec = hasQaPartner !== false;
|
|
129
130
|
if (task.reviewMode === 'server') {
|
|
130
131
|
return [
|
|
131
132
|
'Server review mode — no PRs, no branch pushes during review.',
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
133
|
+
...(offerSpec
|
|
134
|
+
? [
|
|
135
|
+
'Specification-Driven Development (SDD) — optional:',
|
|
136
|
+
`- To get QA spec review first, write the spec to ${SPEC_DOC_RELPATH} in your worktree (do NOT commit or push it), then signal:`,
|
|
137
|
+
` ${buildPhaseSignalTemplate('spec-done')}`,
|
|
138
|
+
` token: ${signalToken}`,
|
|
139
|
+
'- Otherwise implement the change, commit locally (do NOT push), then signal:',
|
|
140
|
+
]
|
|
141
|
+
: ['- Implement the change, commit locally (do NOT push), then signal:']),
|
|
137
142
|
` ${buildPhaseSignalTemplate('code-done')}`,
|
|
138
143
|
` token: ${signalToken}`,
|
|
139
144
|
'',
|
|
140
145
|
].join('\n');
|
|
141
146
|
}
|
|
142
147
|
return [
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
+
...(offerSpec
|
|
149
|
+
? [
|
|
150
|
+
'Specification-Driven Development (SDD) — optional:',
|
|
151
|
+
`- To get QA spec review first, write the spec to ${SPEC_DOC_RELPATH} in your worktree (do NOT commit or push it), then signal:`,
|
|
152
|
+
` ${buildPhaseSignalTemplate('spec-done')}`,
|
|
153
|
+
` token: ${signalToken}`,
|
|
154
|
+
'- Otherwise proceed straight to implementing the change. After `gh pr create`, signal:',
|
|
155
|
+
]
|
|
156
|
+
: ['Implement the change. After `gh pr create`, signal:']),
|
|
148
157
|
` ${buildPhaseSignalTemplate('pr-created')}`,
|
|
149
158
|
` token: ${signalToken}`,
|
|
150
159
|
'',
|
|
@@ -162,7 +171,7 @@ const PHASE_PROMPT_BUILDERS = {
|
|
|
162
171
|
].join('\n')
|
|
163
172
|
: [
|
|
164
173
|
'Code phase:',
|
|
165
|
-
|
|
174
|
+
`- Spec is approved. Implement code per the spec at ${SPEC_DOC_RELPATH}.`,
|
|
166
175
|
'- Commit+push, open PR via `gh pr create`. After it returns, signal with PR number:',
|
|
167
176
|
` ${buildPhaseSignalTemplate('pr-created')}`,
|
|
168
177
|
` token: ${signalToken}`,
|
|
@@ -204,49 +213,6 @@ const PHASE_PROMPT_BUILDERS = {
|
|
|
204
213
|
'- Do not merge the PR yourself from this phase.',
|
|
205
214
|
'',
|
|
206
215
|
].join('\n'),
|
|
207
|
-
'spec-review': ({ task, signalToken, currentSpecRound }) => {
|
|
208
|
-
const round = currentSpecRound ?? task.specReviewRound ?? 1;
|
|
209
|
-
const branch = task.branch ?? '<branch>';
|
|
210
|
-
return [
|
|
211
|
-
`Spec-review phase (round ${round}):`,
|
|
212
|
-
`- Fetch origin/${branch}, read spec at docs/spec/${task.id}.md (or wherever dev placed it).`,
|
|
213
|
-
`- Review for completeness, correctness, ambiguity, edge cases.`,
|
|
214
|
-
`- Write findings to .baxian/spec-review/round-${round}-findings.json:`,
|
|
215
|
-
` { "round": ${round}, "findings": [{ "id": "f-1", "severity": "critical"|"major"|"minor", "location": "...", "message": "..." }] }`,
|
|
216
|
-
`- Approve verdict MAY have empty findings array.`,
|
|
217
|
-
`- Commit findings, then push from detached HEAD: git push origin HEAD:${branch}`,
|
|
218
|
-
`- Verdict — exactly one:`,
|
|
219
|
-
` ${buildPhaseSignalTemplate('spec-approved')}`,
|
|
220
|
-
` ${buildPhaseSignalTemplate('spec-changes-requested')}`,
|
|
221
|
-
` token: ${signalToken}`,
|
|
222
|
-
'',
|
|
223
|
-
].join('\n');
|
|
224
|
-
},
|
|
225
|
-
'spec-fix': ({ task, signalToken, currentSpecRound, specFindings }) => {
|
|
226
|
-
const round = currentSpecRound ?? task.specReviewRound ?? 1;
|
|
227
|
-
const branch = task.branch ?? '<branch>';
|
|
228
|
-
const truncatedFindings = specFindings ? truncateFindings(specFindings) : undefined;
|
|
229
|
-
return [
|
|
230
|
-
`Spec-fix phase (round ${round}):`,
|
|
231
|
-
`- Pull latest task branch first: \`git pull origin ${branch}\`.`,
|
|
232
|
-
`- Read .baxian/spec-review/round-${round}-findings.json (cached below if present).`,
|
|
233
|
-
`- Each finding: fix (revise spec) or reject (with rationale).`,
|
|
234
|
-
`- Write .baxian/spec-review/round-${round}-response.json:`,
|
|
235
|
-
` { "round": ${round}, "responses": [{ "findingId": "f-1", "action": "fix"|"reject", "rationale": "..." }] }`,
|
|
236
|
-
`- Commit+push both files: \`git push origin HEAD:${branch}\`.`,
|
|
237
|
-
`- Signal:`,
|
|
238
|
-
` ${buildPhaseSignalTemplate('spec-fixed')}`,
|
|
239
|
-
` token: ${signalToken}`,
|
|
240
|
-
...(truncatedFindings
|
|
241
|
-
? [
|
|
242
|
-
'',
|
|
243
|
-
`findings.json (round ${round})${truncatedFindings.truncated ? ' [truncated, fetch full file from branch]' : ''}:`,
|
|
244
|
-
truncatedFindings.text,
|
|
245
|
-
]
|
|
246
|
-
: []),
|
|
247
|
-
'',
|
|
248
|
-
].join('\n');
|
|
249
|
-
},
|
|
250
216
|
review: (ctx) => buildReviewOrRecheckInstructions(ctx, false),
|
|
251
217
|
recheck: (ctx) => buildReviewOrRecheckInstructions(ctx, true),
|
|
252
218
|
'server-review': (ctx) => buildServerReviewInstructions(ctx, false),
|
|
@@ -289,11 +255,15 @@ const PHASE_PROMPT_BUILDERS = {
|
|
|
289
255
|
return [
|
|
290
256
|
`Server feedback phase (${isSpec ? 'spec' : 'code'} round ${round}):`,
|
|
291
257
|
`- QA findings are injected below. Handle EVERY finding by id:`,
|
|
292
|
-
|
|
258
|
+
isSpec
|
|
259
|
+
? ` fix — revise ${SPEC_DOC_RELPATH} in place (do NOT commit or push it).`
|
|
260
|
+
: ' fix — change the code/spec, commit; include commitSha in your response item.',
|
|
293
261
|
' reject — concrete rationale why the finding is wrong or not applicable.',
|
|
294
262
|
' out-of-scope — rationale plus where it is tracked (issue link or task note).',
|
|
295
263
|
`- Write your response to ${REVIEW_EXCHANGE_DIR}/response.json in your worktree (\`mkdir -p ${REVIEW_EXCHANGE_DIR}\` first). Atomic write: response.json.tmp then \`mv\`.`,
|
|
296
|
-
|
|
264
|
+
isSpec
|
|
265
|
+
? `- Schema: {"round":${round},"responses":[{"findingId":"f-1","action":"fix"|"reject"|"out-of-scope","rationale":"..."}]}`
|
|
266
|
+
: `- Schema: {"round":${round},"responses":[{"findingId":"f-1","action":"fix"|"reject"|"out-of-scope","rationale":"...","commitSha":"..."}]}`,
|
|
297
267
|
'- Every finding id MUST have exactly one response item (ids may look like b0-f-1 when the review was batched).',
|
|
298
268
|
`- Then emit exactly once: ${buildPhaseSignalTemplate(signalKind)}`,
|
|
299
269
|
` token: ${signalToken}`,
|
|
@@ -366,15 +336,12 @@ function buildServerReviewInstructions({ task, signalToken, serverContent, serve
|
|
|
366
336
|
].join('\n');
|
|
367
337
|
}
|
|
368
338
|
function buildTaskBody(args) {
|
|
369
|
-
const { task, phase, role, worktreePath, signalToken, postApproveRedispatchCount,
|
|
339
|
+
const { task, phase, role, worktreePath, signalToken, postApproveRedispatchCount, currentSpecRound, imagePaths, serverContent, serverDiffstat, serverBatch, serverPriorFindings, serverPriorResponse, serverAfterDone, contentTruncated, hasQaPartner, } = args;
|
|
370
340
|
const header = `Phase: ${phase}\nRole: ${role}\nTask ID: ${task.id}\nWorktree: ${worktreePath}\n` +
|
|
371
341
|
`cd into the worktree before any file operations.\n\n`;
|
|
372
342
|
if (phase === 'post-approve' && !signalToken) {
|
|
373
343
|
throw new Error('post-approve prompt requires signalToken');
|
|
374
344
|
}
|
|
375
|
-
if ((phase === 'spec-review' || phase === 'spec-fix') && !signalToken) {
|
|
376
|
-
throw new Error(`${phase} prompt requires signalToken`);
|
|
377
|
-
}
|
|
378
345
|
// 'code' (pr-created) always needs a token; review/recheck need it for the
|
|
379
346
|
// same-identity (422) fallback verdict signal; 'fix' needs it for the pr-fixed
|
|
380
347
|
// completion signal that drives fixing→review — see the phase blocks below.
|
|
@@ -387,13 +354,14 @@ function buildTaskBody(args) {
|
|
|
387
354
|
const phaseBuilder = PHASE_PROMPT_BUILDERS[phase];
|
|
388
355
|
if (!phaseBuilder) {
|
|
389
356
|
// Fail loud: an unknown phase reaching here is a dispatch typo, not an empty
|
|
390
|
-
// prompt to ship silently
|
|
357
|
+
// prompt to ship silently.
|
|
391
358
|
throw new Error(`buildTaskBody: no prompt builder registered for phase "${phase}"`);
|
|
392
359
|
}
|
|
393
360
|
const phaseInstructions = phaseBuilder({
|
|
394
|
-
task, signalToken, currentSpecRound,
|
|
361
|
+
task, signalToken, currentSpecRound, postApproveRedispatchCount,
|
|
395
362
|
serverContent, serverDiffstat, serverBatch,
|
|
396
363
|
serverPriorFindings, serverPriorResponse, serverAfterDone, contentTruncated,
|
|
364
|
+
hasQaPartner,
|
|
397
365
|
});
|
|
398
366
|
const titleAndBody = `Title: ${task.title}\n\n${task.description}`;
|
|
399
367
|
const imagesBlock = imagePaths && imagePaths.length > 0
|