baxian 0.1.0 → 0.2.0
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 +1 -1
- package/dist/agent/bootstrap-poller.d.ts +6 -0
- package/dist/agent/bootstrap-poller.d.ts.map +1 -1
- package/dist/agent/bootstrap-poller.js +30 -0
- package/dist/agent/bootstrap-poller.js.map +1 -1
- package/dist/agent/bootstrap.d.ts +7 -0
- package/dist/agent/bootstrap.d.ts.map +1 -1
- package/dist/agent/bootstrap.js +104 -5
- package/dist/agent/bootstrap.js.map +1 -1
- package/dist/agent/manager.js +5 -5
- package/dist/agent/manager.js.map +1 -1
- package/dist/agent/marker-protocol.d.ts +10 -4
- package/dist/agent/marker-protocol.d.ts.map +1 -1
- package/dist/agent/marker-protocol.js +42 -34
- package/dist/agent/marker-protocol.js.map +1 -1
- package/dist/agent/post-approve-marker-watcher.d.ts.map +1 -1
- package/dist/agent/post-approve-marker-watcher.js +3 -7
- package/dist/agent/post-approve-marker-watcher.js.map +1 -1
- package/dist/agent/prompt.d.ts +3 -1
- package/dist/agent/prompt.d.ts.map +1 -1
- package/dist/agent/prompt.js +33 -51
- package/dist/agent/prompt.js.map +1 -1
- package/dist/agent/spec-review-marker-watcher.d.ts +3 -2
- package/dist/agent/spec-review-marker-watcher.d.ts.map +1 -1
- package/dist/agent/spec-review-marker-watcher.js +5 -7
- package/dist/agent/spec-review-marker-watcher.js.map +1 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +16 -0
- package/dist/api/config.js.map +1 -1
- package/dist/api/projects.d.ts.map +1 -1
- package/dist/api/projects.js +30 -0
- package/dist/api/projects.js.map +1 -1
- package/dist/app.d.ts +2 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js.map +1 -1
- package/dist/event/handlers.js +2 -2
- package/dist/event/handlers.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -9
- package/dist/index.js.map +1 -1
- package/dist/shared/types.d.ts +1 -8
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/state/error-record-store.d.ts +12 -0
- package/dist/state/error-record-store.d.ts.map +1 -1
- package/dist/state/error-record-store.js +130 -1
- package/dist/state/error-record-store.js.map +1 -1
- package/dist/state/snapshot.d.ts +8 -2
- package/dist/state/snapshot.d.ts.map +1 -1
- package/dist/state/snapshot.js +45 -4
- package/dist/state/snapshot.js.map +1 -1
- package/dist/web/assets/index-53CBbz4w.js +4 -0
- package/dist/web/assets/{index-BztIjbNF.css → index-B9D6BV08.css} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/index-eKI0WBRQ.js +0 -4
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
|
|
1
|
+
export type ShortMarkerKind = 'spec-ready' | 'spec-review-complete' | 'spec-fix-complete' | 'post-approve-complete';
|
|
2
|
+
export type ShortMarkerCode = 'sr' | 'sc' | 'sf' | 'pc';
|
|
3
|
+
export interface ShortMarker {
|
|
4
|
+
kind: ShortMarkerKind;
|
|
5
|
+
token: string;
|
|
6
|
+
}
|
|
5
7
|
export declare function stripMarkerAnsi(text: string): string;
|
|
8
|
+
export declare function buildShortMarker(kind: ShortMarkerKind, token: string): string;
|
|
9
|
+
export declare function createMarkerToken(): string;
|
|
10
|
+
export declare function buildShortMarkerTemplate(kind: ShortMarkerKind): string;
|
|
11
|
+
export declare function scanShortMarkers(text: string): ShortMarker[];
|
|
6
12
|
//# sourceMappingURL=marker-protocol.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marker-protocol.d.ts","sourceRoot":"","sources":["../../src/agent/marker-protocol.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"marker-protocol.d.ts","sourceRoot":"","sources":["../../src/agent/marker-protocol.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,sBAAsB,GACtB,mBAAmB,GACnB,uBAAuB,CAAC;AAE5B,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAyBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7E;AAKD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAMD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAEtE;AAKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAQ5D"}
|
|
@@ -1,44 +1,52 @@
|
|
|
1
|
-
|
|
2
|
-
const
|
|
3
|
-
'
|
|
4
|
-
'
|
|
5
|
-
'
|
|
6
|
-
'post-approve-complete',
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
'spec-
|
|
10
|
-
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
const CODE_BY_KIND = {
|
|
3
|
+
'spec-ready': 'sr',
|
|
4
|
+
'spec-review-complete': 'sc',
|
|
5
|
+
'spec-fix-complete': 'sf',
|
|
6
|
+
'post-approve-complete': 'pc',
|
|
7
|
+
};
|
|
8
|
+
const KIND_BY_CODE = {
|
|
9
|
+
sr: 'spec-ready',
|
|
10
|
+
sc: 'spec-review-complete',
|
|
11
|
+
sf: 'spec-fix-complete',
|
|
12
|
+
pc: 'post-approve-complete',
|
|
13
|
+
};
|
|
11
14
|
const ANSI_PATTERN = /\x1b\[[0-?]*[ -/]*[@-~]/g;
|
|
12
15
|
const OSC_PATTERN = /\x1b\][\s\S]*?(?:\x07|\x1b\\)/g;
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
// Compact form (after whitespace strip); 6-char token is the floor, no upper
|
|
17
|
+
// bound here. Character set is base64url + dash so legacy randomUUID() tokens
|
|
18
|
+
// persisted before the format switch still parse after upgrade (task state
|
|
19
|
+
// carries the token across the redispatch boundary; new tokens use 12 hex).
|
|
20
|
+
const COMPACT_MARKER_RE = /\[bx:(sr|sc|sf|pc):([A-Za-z0-9_-]{6,64})\]/g;
|
|
21
|
+
export function stripMarkerAnsi(text) {
|
|
22
|
+
return text.replace(OSC_PATTERN, '').replace(ANSI_PATTERN, '');
|
|
23
|
+
}
|
|
24
|
+
export function buildShortMarker(kind, token) {
|
|
25
|
+
return `[bx:${CODE_BY_KIND[kind]}:${token}]`;
|
|
26
|
+
}
|
|
27
|
+
// 12 hex chars = 48 bits, plenty against guess/collision for per-marker tokens
|
|
28
|
+
// (only one is active per task+kind at a time, and rotate-on-dispatch makes
|
|
29
|
+
// stale tokens unusable). Matches COMPACT_MARKER_RE token capture.
|
|
30
|
+
export function createMarkerToken() {
|
|
31
|
+
return randomUUID().replace(/-/g, '').slice(0, 12);
|
|
15
32
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return undefined;
|
|
23
|
-
return {
|
|
24
|
-
version: 1,
|
|
25
|
-
kind,
|
|
26
|
-
agentId: m[2],
|
|
27
|
-
taskId: m[3] === '-' ? undefined : m[3],
|
|
28
|
-
token: m[4],
|
|
29
|
-
};
|
|
33
|
+
// Template embeds <token> placeholder, never the real token, so the prompt
|
|
34
|
+
// text we send to the agent does NOT contain a fireable marker. The agent must
|
|
35
|
+
// actively substitute <token> when it decides to emit — that's what prevents
|
|
36
|
+
// false fires from the prompt's own text echoing through the pane.
|
|
37
|
+
export function buildShortMarkerTemplate(kind) {
|
|
38
|
+
return `[bx:${CODE_BY_KIND[kind]}:<token>]`;
|
|
30
39
|
}
|
|
31
|
-
|
|
40
|
+
// Scan a chunk of pane bytes for short markers. Strips ANSI escapes (split
|
|
41
|
+
// across chunks merged at call site by the watcher), then strips whitespace so
|
|
42
|
+
// TUI soft-wrap (`[bx:sr:abc\n 12345]`) still matches.
|
|
43
|
+
export function scanShortMarkers(text) {
|
|
32
44
|
const stripped = stripMarkerAnsi(text);
|
|
45
|
+
const compact = stripped.replace(/\s+/g, '');
|
|
33
46
|
const markers = [];
|
|
34
|
-
for (const
|
|
35
|
-
|
|
36
|
-
if (marker)
|
|
37
|
-
markers.push(marker);
|
|
47
|
+
for (const m of compact.matchAll(COMPACT_MARKER_RE)) {
|
|
48
|
+
markers.push({ kind: KIND_BY_CODE[m[1]], token: m[2] });
|
|
38
49
|
}
|
|
39
50
|
return markers;
|
|
40
51
|
}
|
|
41
|
-
export function stripMarkerAnsi(text) {
|
|
42
|
-
return text.replace(OSC_PATTERN, '').replace(ANSI_PATTERN, '');
|
|
43
|
-
}
|
|
44
52
|
//# sourceMappingURL=marker-protocol.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marker-protocol.js","sourceRoot":"","sources":["../../src/agent/marker-protocol.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"marker-protocol.js","sourceRoot":"","sources":["../../src/agent/marker-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAsBzC,MAAM,YAAY,GAA6C;IAC7D,YAAY,EAAE,IAAI;IAClB,sBAAsB,EAAE,IAAI;IAC5B,mBAAmB,EAAE,IAAI;IACzB,uBAAuB,EAAE,IAAI;CAC9B,CAAC;AAEF,MAAM,YAAY,GAA6C;IAC7D,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,sBAAsB;IAC1B,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,uBAAuB;CAC5B,CAAC;AAEF,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAChD,MAAM,WAAW,GAAG,gCAAgC,CAAC;AAErD,6EAA6E;AAC7E,8EAA8E;AAC9E,2EAA2E;AAC3E,4EAA4E;AAC5E,MAAM,iBAAiB,GAAG,6CAA6C,CAAC;AAExE,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAqB,EAAE,KAAa;IACnE,OAAO,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC;AAC/C,CAAC;AAED,+EAA+E;AAC/E,4EAA4E;AAC5E,mEAAmE;AACnE,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,2EAA2E;AAC3E,+EAA+E;AAC/E,6EAA6E;AAC7E,mEAAmE;AACnE,MAAM,UAAU,wBAAwB,CAAC,IAAqB;IAC5D,OAAO,OAAO,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9C,CAAC;AAED,2EAA2E;AAC3E,+EAA+E;AAC/E,wDAAwD;AACxD,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAoB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-approve-marker-watcher.d.ts","sourceRoot":"","sources":["../../src/agent/post-approve-marker-watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAetE,MAAM,WAAW,4BAA4B;IAC3C,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,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IAEd,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,wBAAwB;IAGvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;gBAE5B,IAAI,EAAE,4BAA4B;IAEzD,KAAK,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC5D,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAW1B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI5B,OAAO,CAAC,UAAU;
|
|
1
|
+
{"version":3,"file":"post-approve-marker-watcher.d.ts","sourceRoot":"","sources":["../../src/agent/post-approve-marker-watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAetE,MAAM,WAAW,4BAA4B;IAC3C,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,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IAEd,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,wBAAwB;IAGvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;gBAE5B,IAAI,EAAE,4BAA4B;IAEzD,KAAK,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC5D,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAW1B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI5B,OAAO,CAAC,UAAU;YAgCJ,cAAc;IAgC5B,OAAO,CAAC,aAAa;YAaP,0BAA0B;YAa1B,6BAA6B;CA2B5C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { scanShortMarkers } from './marker-protocol.js';
|
|
2
2
|
const MATCH_BUFFER_CHARS = 1024;
|
|
3
3
|
export class PostApproveMarkerWatcher {
|
|
4
4
|
deps;
|
|
@@ -58,14 +58,10 @@ export class PostApproveMarkerWatcher {
|
|
|
58
58
|
onPaneData(entry, chunk) {
|
|
59
59
|
if (entry.fired)
|
|
60
60
|
return;
|
|
61
|
-
//
|
|
61
|
+
// Merge before scan so chunk-split markers and ANSI escapes both rejoin.
|
|
62
62
|
// Search BEFORE slicing — initial snapshot may exceed the buffer cap.
|
|
63
63
|
const rawCombined = entry.buffer + chunk;
|
|
64
|
-
const
|
|
65
|
-
const marker = scanBaxianMarkers(combined).find(candidate => candidate.kind === 'post-approve-complete'
|
|
66
|
-
&& candidate.agentId === entry.agentId
|
|
67
|
-
&& candidate.taskId === entry.taskId
|
|
68
|
-
&& candidate.token === entry.expectedToken);
|
|
64
|
+
const marker = scanShortMarkers(rawCombined).find(candidate => candidate.kind === 'post-approve-complete' && candidate.token === entry.expectedToken);
|
|
69
65
|
entry.buffer = rawCombined.slice(-MATCH_BUFFER_CHARS);
|
|
70
66
|
if (!marker)
|
|
71
67
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-approve-marker-watcher.js","sourceRoot":"","sources":["../../src/agent/post-approve-marker-watcher.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"post-approve-marker-watcher.js","sourceRoot":"","sources":["../../src/agent/post-approve-marker-watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/prompt.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type AgentConfig, type AgentRole, type TaskState } from '../shared/index.js';
|
|
2
2
|
import type { SkillRegistry } from '../skill/registry.js';
|
|
3
|
+
import { type ShortMarkerKind } from './marker-protocol.js';
|
|
3
4
|
export declare const BAXIAN_PR_MARKER = "<!-- baxian:managed -->";
|
|
4
5
|
export declare const MAX_PROMPT_BYTES: number;
|
|
5
6
|
export declare const MAX_PROMPT_BYTES_ROUTE_LIMIT: number;
|
|
@@ -28,6 +29,7 @@ export interface BuildPromptOpts {
|
|
|
28
29
|
}
|
|
29
30
|
export declare const MAX_INLINE_FINDINGS_BYTES: number;
|
|
30
31
|
export declare function buildPromptInline(opts: BuildPromptOpts): string;
|
|
32
|
+
declare function buildMarkerEmitBlock(kind: ShortMarkerKind, token: string): string;
|
|
31
33
|
export interface PostMergeCleanupContext {
|
|
32
34
|
prNumber: number;
|
|
33
35
|
taskId: string;
|
|
@@ -38,5 +40,5 @@ export interface PostMergeBranchCleanupResult {
|
|
|
38
40
|
detail: string;
|
|
39
41
|
}
|
|
40
42
|
export declare function buildPostMergeCleanupPrompt(ctx: PostMergeCleanupContext, result: PostMergeBranchCleanupResult): string;
|
|
41
|
-
export
|
|
43
|
+
export { buildMarkerEmitBlock };
|
|
42
44
|
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAA8C,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAExG,eAAO,MAAM,gBAAgB,4BAA4B,CAAC;AAE1D,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;CAQ9C;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,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAI1B,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,eAAO,MAAM,yBAAyB,QAAY,CAAC;AAOnD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CA0B/D;AA0ID,iBAAS,oBAAoB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAO1E;AAED,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;AAgBD,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
package/dist/agent/prompt.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AGENT_PHASES } from '../shared/index.js';
|
|
2
|
-
import {
|
|
2
|
+
import { buildShortMarker, buildShortMarkerTemplate } from './marker-protocol.js';
|
|
3
3
|
export const BAXIAN_PR_MARKER = '<!-- baxian:managed -->';
|
|
4
4
|
export const MAX_PROMPT_BYTES = 80 * 1024;
|
|
5
5
|
// 1KB margin: preview uses placeholders; real worktree path may be longer at inject.
|
|
@@ -81,7 +81,6 @@ export function buildPromptInline(opts) {
|
|
|
81
81
|
task: opts.task,
|
|
82
82
|
phase: opts.phase,
|
|
83
83
|
role: opts.agent.role,
|
|
84
|
-
agentId: opts.agent.id,
|
|
85
84
|
worktreePath: opts.worktreePath,
|
|
86
85
|
postApproveToken: opts.postApproveToken,
|
|
87
86
|
specMarkerToken: opts.specMarkerToken,
|
|
@@ -96,7 +95,7 @@ export function buildPromptInline(opts) {
|
|
|
96
95
|
return fullPrompt;
|
|
97
96
|
}
|
|
98
97
|
function buildTaskBody(args) {
|
|
99
|
-
const { task, phase, role,
|
|
98
|
+
const { task, phase, role, worktreePath, postApproveToken, specMarkerToken, specFindings, currentSpecRound, } = args;
|
|
100
99
|
const header = `Phase: ${phase}\nRole: ${role}\nTask ID: ${task.id}\nWorktree: ${worktreePath}\n` +
|
|
101
100
|
`cd into the worktree before any file operations.\n\n`;
|
|
102
101
|
if (phase === 'post_approve' && !postApproveToken) {
|
|
@@ -105,25 +104,19 @@ function buildTaskBody(args) {
|
|
|
105
104
|
if ((phase === 'spec-review' || phase === 'spec-fix') && !specMarkerToken) {
|
|
106
105
|
throw new Error(`${phase} prompt requires specMarkerToken`);
|
|
107
106
|
}
|
|
107
|
+
// Guard: the rendered prompt must not contain a filled marker literal —
|
|
108
|
+
// PaneStreamer would fire on the prompt itself if the agent verbatim-echoed
|
|
109
|
+
// it. buildMarkerEmitBlock keeps the template (with `<token>` placeholder)
|
|
110
|
+
// and the token on separate lines for exactly this reason.
|
|
108
111
|
const postApproveMarker = postApproveToken
|
|
109
|
-
?
|
|
110
|
-
kind: 'post-approve-complete',
|
|
111
|
-
agentId,
|
|
112
|
-
taskId: task.id,
|
|
113
|
-
token: postApproveToken,
|
|
114
|
-
})
|
|
112
|
+
? buildShortMarker('post-approve-complete', postApproveToken)
|
|
115
113
|
: undefined;
|
|
116
|
-
const
|
|
117
|
-
?
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
: 'spec-ready',
|
|
123
|
-
agentId,
|
|
124
|
-
taskId: task.id,
|
|
125
|
-
token: specMarkerToken,
|
|
126
|
-
})
|
|
114
|
+
const specKind = phase === 'spec-review' ? 'spec-review-complete'
|
|
115
|
+
: phase === 'spec-fix' ? 'spec-fix-complete'
|
|
116
|
+
: phase === 'develop' ? 'spec-ready'
|
|
117
|
+
: undefined;
|
|
118
|
+
const specMarkerLiteral = specMarkerToken && specKind
|
|
119
|
+
? buildShortMarker(specKind, specMarkerToken)
|
|
127
120
|
: undefined;
|
|
128
121
|
let phaseInstructions = '';
|
|
129
122
|
if (phase === 'post_approve') {
|
|
@@ -135,11 +128,8 @@ function buildTaskBody(args) {
|
|
|
135
128
|
'- For each item that does need a response, either fix it or reply "Won\'t fix" with a concrete reason.',
|
|
136
129
|
'- If you make code changes, commit and push them; baxian will send the PR back to QA for recheck.',
|
|
137
130
|
'- Before echoing the marker: re-fetch the three feedback sources one more time. The server suppresses redispatches while you are running, so any human comment that arrived during your pass only reaches you through this final re-fetch. If any new non-self item now has created_at > T_self, handle it and re-fetch again. Only echo the marker when a re-fetch returns no unhandled items.',
|
|
138
|
-
'- If no code changes are needed after responding, signal completion
|
|
139
|
-
'
|
|
140
|
-
' the resulting concatenated string in your reply text, in code, or in summaries, or it will',
|
|
141
|
-
' fire completion prematurely.',
|
|
142
|
-
` ${buildPostApproveMarkerPrintCommand(agentId, task.id, postApproveToken)}`,
|
|
131
|
+
'- If no code changes are needed after responding, signal completion and then stop:',
|
|
132
|
+
buildMarkerEmitBlock('post-approve-complete', postApproveToken),
|
|
143
133
|
'- Do not merge the PR yourself from this phase.',
|
|
144
134
|
'',
|
|
145
135
|
].join('\n');
|
|
@@ -147,10 +137,9 @@ function buildTaskBody(args) {
|
|
|
147
137
|
else if (phase === 'develop' && specMarkerToken) {
|
|
148
138
|
phaseInstructions = [
|
|
149
139
|
'Spec review (optional):',
|
|
150
|
-
'- If you want QA to review a written spec before coding, commit + push the spec on this task\'s branch, then
|
|
151
|
-
|
|
140
|
+
'- If you want QA to review a written spec before coding, commit + push the spec on this task\'s branch, then signal:',
|
|
141
|
+
buildMarkerEmitBlock('spec-ready', specMarkerToken),
|
|
152
142
|
'- Otherwise you may proceed straight to implementing and opening a PR.',
|
|
153
|
-
'- Do NOT inline the concatenated marker string anywhere in your reply text or code; only the printf above is recognised.',
|
|
154
143
|
'',
|
|
155
144
|
].join('\n');
|
|
156
145
|
}
|
|
@@ -167,9 +156,8 @@ function buildTaskBody(args) {
|
|
|
167
156
|
`- This worktree is checked out in detached HEAD. After committing, push with explicit refspec:`,
|
|
168
157
|
` git push origin HEAD:${branch}`,
|
|
169
158
|
` (a plain "git push" has no upstream and will fail.)`,
|
|
170
|
-
`- Then
|
|
171
|
-
|
|
172
|
-
`- Do NOT inline the concatenated marker string anywhere in your reply text.`,
|
|
159
|
+
`- Then signal completion:`,
|
|
160
|
+
buildMarkerEmitBlock('spec-review-complete', specMarkerToken),
|
|
173
161
|
'',
|
|
174
162
|
].join('\n');
|
|
175
163
|
}
|
|
@@ -185,9 +173,8 @@ function buildTaskBody(args) {
|
|
|
185
173
|
`- After applying fixes, write a response file at .baxian/spec-review/round-${round}-response.json with this schema:`,
|
|
186
174
|
` { "round": ${round}, "responses": [{ "findingId": "f-1", "action": "fix"|"reject", "rationale": "..." }] }`,
|
|
187
175
|
`- Commit + push BOTH the revised spec and the response file on this branch.`,
|
|
188
|
-
`- Then
|
|
189
|
-
|
|
190
|
-
`- Do NOT inline the concatenated marker string anywhere in your reply text.`,
|
|
176
|
+
`- Then signal completion:`,
|
|
177
|
+
buildMarkerEmitBlock('spec-fix-complete', specMarkerToken),
|
|
191
178
|
...(truncatedFindings
|
|
192
179
|
? [
|
|
193
180
|
'',
|
|
@@ -226,8 +213,17 @@ function truncateFindings(text) {
|
|
|
226
213
|
cut--;
|
|
227
214
|
return { text: buf.subarray(0, cut).toString('utf8'), truncated: true };
|
|
228
215
|
}
|
|
229
|
-
|
|
230
|
-
|
|
216
|
+
// Block agents inline in their reply text. Template contains a `<token>`
|
|
217
|
+
// placeholder and the real token is shown on a separate line — the agent must
|
|
218
|
+
// actively substitute when it decides to emit. This keeps the prompt itself
|
|
219
|
+
// marker-free, so PaneStreamer can't fire on a verbatim echo of these lines.
|
|
220
|
+
function buildMarkerEmitBlock(kind, token) {
|
|
221
|
+
return [
|
|
222
|
+
`- Emit on its own line in your reply, substituting <token>:`,
|
|
223
|
+
` ${buildShortMarkerTemplate(kind)}`,
|
|
224
|
+
` token: ${token}`,
|
|
225
|
+
` Output the filled marker exactly once; do NOT inline it elsewhere.`,
|
|
226
|
+
].join('\n');
|
|
231
227
|
}
|
|
232
228
|
export function buildPostMergeCleanupPrompt(ctx, result) {
|
|
233
229
|
const status = renderCleanupStatus(ctx.branch, result);
|
|
@@ -252,19 +248,5 @@ function renderCleanupStatus(branch, result) {
|
|
|
252
248
|
return `Local feature branch \`${branch}\` was not touched: ${result.detail || 'no repo path available'}.`;
|
|
253
249
|
}
|
|
254
250
|
}
|
|
255
|
-
export
|
|
256
|
-
return [
|
|
257
|
-
"printf '%s%s%s%s%s%s%s\\n'",
|
|
258
|
-
shellSingleQuote(`[baxian:v1:${kind}:`),
|
|
259
|
-
shellSingleQuote(agentId),
|
|
260
|
-
shellSingleQuote(':'),
|
|
261
|
-
shellSingleQuote(taskId),
|
|
262
|
-
shellSingleQuote(':'),
|
|
263
|
-
shellSingleQuote(token),
|
|
264
|
-
shellSingleQuote(']'),
|
|
265
|
-
].join(' ');
|
|
266
|
-
}
|
|
267
|
-
function shellSingleQuote(value) {
|
|
268
|
-
return `'${value.replace(/'/g, "'\\''")}'`;
|
|
269
|
-
}
|
|
251
|
+
export { buildMarkerEmitBlock };
|
|
270
252
|
//# sourceMappingURL=prompt.js.map
|
package/dist/agent/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoD,MAAM,oBAAoB,CAAC;AAEpG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/agent/prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
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 ShortMarkerKind } from './marker-protocol.js';
|
|
5
|
+
export type SpecMarkerKind = Extract<ShortMarkerKind, 'spec-ready' | 'spec-review-complete' | 'spec-fix-complete'>;
|
|
5
6
|
export interface SpecReviewMarkerWatcherDeps {
|
|
6
7
|
paneStreamerManager: PaneStreamerManager;
|
|
7
8
|
eventBus: EventBus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-review-marker-watcher.d.ts","sourceRoot":"","sources":["../../src/agent/spec-review-marker-watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,
|
|
1
|
+
{"version":3,"file":"spec-review-marker-watcher.d.ts","sourceRoot":"","sources":["../../src/agent/spec-review-marker-watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAGZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI9E,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC,eAAe,EACf,YAAY,GAAG,sBAAsB,GAAG,mBAAmB,CAC5D,CAAC;AAmBF,MAAM,WAAW,2BAA2B;IAC1C,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,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IAEd,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAMD,qBAAa,uBAAuB;IAGtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;gBAE5B,IAAI,EAAE,2BAA2B;IAExD,KAAK,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoD3D,sEAAsE;IACtE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,IAAI;IAgBjD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO;IAIlD,OAAO,CAAC,UAAU;YA8BJ,cAAc;IAoB5B,OAAO,CAAC,aAAa;YAcP,0BAA0B;YAa1B,6BAA6B;CA2B5C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { scanShortMarkers } from './marker-protocol.js';
|
|
2
2
|
const MATCH_BUFFER_CHARS = 1024;
|
|
3
3
|
const KIND_TO_EVENT = {
|
|
4
4
|
'spec-ready': 'spec.ready',
|
|
@@ -87,13 +87,11 @@ export class SpecReviewMarkerWatcher {
|
|
|
87
87
|
onPaneData(entry, chunk) {
|
|
88
88
|
if (entry.fired)
|
|
89
89
|
return;
|
|
90
|
-
//
|
|
90
|
+
// Merge before scan so chunk-split markers (e.g. `[bx:sr:ab` then `cdef]`)
|
|
91
|
+
// and ANSI escapes split across chunks both rejoin. scanShortMarkers strips
|
|
92
|
+
// ANSI + whitespace so TUI soft-wrap inside the marker still matches.
|
|
91
93
|
const rawCombined = entry.buffer + chunk;
|
|
92
|
-
const
|
|
93
|
-
const marker = scanBaxianMarkers(combined).find(candidate => candidate.kind === entry.kind
|
|
94
|
-
&& candidate.agentId === entry.agentId
|
|
95
|
-
&& candidate.taskId === entry.taskId
|
|
96
|
-
&& candidate.token === entry.expectedToken);
|
|
94
|
+
const marker = scanShortMarkers(rawCombined).find(candidate => candidate.kind === entry.kind && candidate.token === entry.expectedToken);
|
|
97
95
|
entry.buffer = rawCombined.slice(-MATCH_BUFFER_CHARS);
|
|
98
96
|
if (!marker)
|
|
99
97
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-review-marker-watcher.js","sourceRoot":"","sources":["../../src/agent/spec-review-marker-watcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spec-review-marker-watcher.js","sourceRoot":"","sources":["../../src/agent/spec-review-marker-watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/api/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAkBvD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAQ/D;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGtE"}
|
package/dist/api/config.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { autoBootstrapAgentIds } from '../agent/bootstrap.js';
|
|
1
2
|
import { saveConfig, prepareConfig, ConfigValidationError, } from '../config/loader.js';
|
|
2
3
|
import { withConfigLock } from '../config/mutex.js';
|
|
3
4
|
const REDACTED = '***';
|
|
@@ -87,6 +88,21 @@ export async function configRoutes(app) {
|
|
|
87
88
|
}
|
|
88
89
|
await saveConfig(app.ctx.configPath, validated);
|
|
89
90
|
app.ctx.config = validated;
|
|
91
|
+
// PATCH /config bulk-replaces project definitions. Both "agent id removed" and "agent id
|
|
92
|
+
// kept but transitioned out of auto-bootstrap (workdir set)" leave stale bootstrap errors
|
|
93
|
+
// that would otherwise resurface as red cards after the operator restarts. Sweep by the
|
|
94
|
+
// new auto-bootstrap set so both cases are covered in a single pass.
|
|
95
|
+
// Note: endpoint returns restartRequired=true and does NOT hot-replace bootstrapPoller,
|
|
96
|
+
// so the old poller may append fresh stale records in the pre-restart window. That race
|
|
97
|
+
// is closed by the matching sweep at server startup in index.ts.
|
|
98
|
+
if (app.ctx.errorRecordStore) {
|
|
99
|
+
try {
|
|
100
|
+
await app.ctx.errorRecordStore.sweepStaleBootstrapErrors(autoBootstrapAgentIds(validated));
|
|
101
|
+
}
|
|
102
|
+
catch (purgeErr) {
|
|
103
|
+
app.log.warn({ err: purgeErr }, 'PATCH /config sweepStaleBootstrapErrors failed');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
90
106
|
return reply.send({
|
|
91
107
|
config: redactConfig(validated),
|
|
92
108
|
restartRequired: true,
|
package/dist/api/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/api/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA6C/C,wBAAsB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/api/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA6C/C,wBAAsB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAyiBvE"}
|
package/dist/api/projects.js
CHANGED
|
@@ -36,6 +36,25 @@ export async function projectRoutes(app) {
|
|
|
36
36
|
}
|
|
37
37
|
return project;
|
|
38
38
|
});
|
|
39
|
+
app.post('/projects/:id/bootstrap', async (request, reply) => {
|
|
40
|
+
if (!app.ctx.bootstrapPoller) {
|
|
41
|
+
return reply.status(503).send({ error: 'bootstrap poller not initialised' });
|
|
42
|
+
}
|
|
43
|
+
// Use the poller's view of config (not app.ctx.config) as the source of truth — PATCH /config
|
|
44
|
+
// updates ctx.config but only DELETE /agents currently hot-replaces the poller, so during the
|
|
45
|
+
// PATCH-then-restart window ctx.config can list projects the poller doesn't know yet.
|
|
46
|
+
const result = await app.ctx.bootstrapPoller.pollProject(request.params.id);
|
|
47
|
+
if (!result.knownProject) {
|
|
48
|
+
return reply.status(404).send({
|
|
49
|
+
error: `Project "${request.params.id}" not found in active bootstrap config (a recent PATCH /config may need a server restart to take effect)`,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (result.ran === 0) {
|
|
53
|
+
// Project exists but has no auto-mode agents (all have explicit workdir) → success no-op.
|
|
54
|
+
return reply.send({ ok: true, ran: 0, message: 'no bootstrap targets for this project' });
|
|
55
|
+
}
|
|
56
|
+
return reply.send({ ok: result.ok, ran: result.ran });
|
|
57
|
+
});
|
|
39
58
|
app.post('/projects/:id/checks', async (request, reply) => {
|
|
40
59
|
const project = app.ctx.config.project.find(p => p.id === request.params.id);
|
|
41
60
|
if (!project) {
|
|
@@ -350,6 +369,17 @@ export async function projectRoutes(app) {
|
|
|
350
369
|
catch (delErr) {
|
|
351
370
|
app.log.warn({ err: delErr, agentId: id }, 'DELETE /agents Phase 3 agentStore.delete failed');
|
|
352
371
|
}
|
|
372
|
+
// Clear stale error records so reusing the same agent id (delete + recreate) doesn't
|
|
373
|
+
// inherit the previous incarnation's bootstrap failures in the new snapshot.
|
|
374
|
+
// Best-effort; failure is logged but doesn't block deletion.
|
|
375
|
+
if (app.ctx.errorRecordStore) {
|
|
376
|
+
try {
|
|
377
|
+
await app.ctx.errorRecordStore.purgeAgent(id);
|
|
378
|
+
}
|
|
379
|
+
catch (purgeErr) {
|
|
380
|
+
app.log.warn({ err: purgeErr, agentId: id }, 'DELETE /agents errorRecordStore.purgeAgent failed');
|
|
381
|
+
}
|
|
382
|
+
}
|
|
353
383
|
await app.ctx.lockManager.release(id);
|
|
354
384
|
}
|
|
355
385
|
return reply.send({ removed: targets, restartRequired: false });
|