baxian 0.1.0 → 0.3.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-BRLVtzDj.css +1 -0
- package/dist/web/assets/index-U9e8DquG.js +4 -0
- package/dist/web/assets/{router-B_Nv0oRz.js → router-BVggVFlO.js} +1 -1
- package/dist/web/fonts/ia-writer-license.md +100 -0
- package/dist/web/fonts/ia-writer-quattro-s-bold.woff2 +0 -0
- package/dist/web/fonts/ia-writer-quattro-s-bolditalic.woff2 +0 -0
- package/dist/web/fonts/ia-writer-quattro-s-italic.woff2 +0 -0
- package/dist/web/fonts/ia-writer-quattro-s-regular.woff2 +0 -0
- package/dist/web/fonts/lilex-ofl.txt +93 -0
- package/dist/web/fonts/lilex-variable.woff2 +0 -0
- package/dist/web/index.html +3 -3
- package/package.json +1 -1
- package/dist/web/assets/index-BztIjbNF.css +0 -1
- package/dist/web/assets/index-eKI0WBRQ.js +0 -4
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ npm install -g baxian
|
|
|
14
14
|
baxian
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
First run auto-creates `~/.baxian/config.json
|
|
17
|
+
First run auto-creates `~/.baxian/config.json`.
|
|
18
18
|
|
|
19
19
|
## License
|
|
20
20
|
|
|
@@ -12,6 +12,7 @@ export interface BootstrapPollerOptions {
|
|
|
12
12
|
errorRecordStore?: ErrorRecordStore;
|
|
13
13
|
runnerFactory?: (agent: AgentConfig) => CommandRunner;
|
|
14
14
|
repoStoreFactory?: (runner: CommandRunner, repoSlug: string, mode: AgentConfig['mode'], host: AgentConfig['host'], cache: RepoStoreCache) => RepoStore;
|
|
15
|
+
onAgentAffected?: (agentIds: string[]) => void;
|
|
15
16
|
intervalMs?: number;
|
|
16
17
|
}
|
|
17
18
|
export declare class BootstrapPoller {
|
|
@@ -23,6 +24,11 @@ export declare class BootstrapPoller {
|
|
|
23
24
|
start(): void;
|
|
24
25
|
stop(): void;
|
|
25
26
|
pollOnce(): Promise<void>;
|
|
27
|
+
pollProject(projectId: string): Promise<{
|
|
28
|
+
ok: boolean;
|
|
29
|
+
ran: number;
|
|
30
|
+
knownProject: boolean;
|
|
31
|
+
}>;
|
|
26
32
|
private pollTargets;
|
|
27
33
|
}
|
|
28
34
|
//# sourceMappingURL=bootstrap-poller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-poller.d.ts","sourceRoot":"","sources":["../../src/agent/bootstrap-poller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,aAAa,CAAC;IACtD,gBAAgB,CAAC,EAAE,CACjB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,KAAK,EAAE,cAAc,KAClB,SAAS,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,mBAAmB,CAA6B;gBAE5C,OAAO,EAAE,sBAAsB;IAe3C,aAAa,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAQ5C,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAIN,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap-poller.d.ts","sourceRoot":"","sources":["../../src/agent/bootstrap-poller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,aAAa,CAAC;IACtD,gBAAgB,CAAC,EAAE,CACjB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,KAAK,EAAE,cAAc,KAClB,SAAS,CAAC;IACf,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,mBAAmB,CAA6B;gBAE5C,OAAO,EAAE,sBAAsB;IAe3C,aAAa,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAQ5C,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAIN,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAYzB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;YAqBpF,WAAW;CAiB1B"}
|
|
@@ -36,6 +36,36 @@ export class BootstrapPoller {
|
|
|
36
36
|
async pollOnce() {
|
|
37
37
|
await this.periodicRunner.runOnce();
|
|
38
38
|
}
|
|
39
|
+
// User-triggered retry from the web UI. Bypasses suppressFailureMessage dedup so the same
|
|
40
|
+
// error re-emits on the bus / errorRecordStore even if it matches the last cached failure —
|
|
41
|
+
// operators clicking "Retry" want a fresh signal, not silent "still failing".
|
|
42
|
+
//
|
|
43
|
+
// knownProject distinguishes "project doesn't exist in the active poller config" (404 in the
|
|
44
|
+
// endpoint) from "project has zero auto-mode targets" (legitimate ran=0 success). Without
|
|
45
|
+
// this, a PATCH /config that adds a project but hasn't been replaceConfig'd onto the poller
|
|
46
|
+
// yet would silently return ran=0 and the operator would think retry succeeded.
|
|
47
|
+
async pollProject(projectId) {
|
|
48
|
+
const knownProject = this.opts.config.project.some(p => p.id === projectId);
|
|
49
|
+
if (!knownProject)
|
|
50
|
+
return { ok: false, ran: 0, knownProject: false };
|
|
51
|
+
const targets = collectTargets(this.opts.config).filter(t => t.project.id === projectId);
|
|
52
|
+
if (targets.length === 0)
|
|
53
|
+
return { ok: true, ran: 0, knownProject: true };
|
|
54
|
+
let allOk = true;
|
|
55
|
+
await Promise.allSettled(targets.map(async (target) => {
|
|
56
|
+
const key = targetKey(target);
|
|
57
|
+
const result = await runSingleTarget(target, this.opts, { emitOnUnchanged: true });
|
|
58
|
+
if (result.ok) {
|
|
59
|
+
this.lastFailureByTarget.delete(key);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
allOk = false;
|
|
63
|
+
if (result.failureMessage)
|
|
64
|
+
this.lastFailureByTarget.set(key, result.failureMessage);
|
|
65
|
+
}
|
|
66
|
+
}));
|
|
67
|
+
return { ok: allOk, ran: targets.length, knownProject: true };
|
|
68
|
+
}
|
|
39
69
|
async pollTargets() {
|
|
40
70
|
const targets = collectTargets(this.opts.config);
|
|
41
71
|
await Promise.allSettled(targets.map(async (target) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-poller.js","sourceRoot":"","sources":["../../src/agent/bootstrap-poller.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap-poller.js","sourceRoot":"","sources":["../../src/agent/bootstrap-poller.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export interface BootstrapDeps {
|
|
|
12
12
|
errorRecordStore?: ErrorRecordStore;
|
|
13
13
|
runnerFactory?: (agent: AgentConfig) => CommandRunner;
|
|
14
14
|
repoStoreFactory?: (runner: CommandRunner, repoSlug: string, mode: AgentConfig['mode'], host: AgentConfig['host'], cache: RepoStoreCache) => RepoStore;
|
|
15
|
+
onAgentAffected?: (agentIds: string[]) => void;
|
|
15
16
|
}
|
|
16
17
|
export interface BootstrapTarget {
|
|
17
18
|
project: ProjectConfig;
|
|
@@ -27,6 +28,12 @@ export interface RunSingleTargetResult {
|
|
|
27
28
|
failureMessage?: string;
|
|
28
29
|
}
|
|
29
30
|
export declare function bootstrapAutoRepos(deps: BootstrapDeps): Promise<void>;
|
|
31
|
+
export declare function autoBootstrapAgentIds(config: BaxianConfig): Set<string>;
|
|
30
32
|
export declare function collectTargets(config: BaxianConfig): BootstrapTarget[];
|
|
31
33
|
export declare function runSingleTarget(target: BootstrapTarget, deps: BootstrapDeps, opts: RunSingleTargetOptions): Promise<RunSingleTargetResult>;
|
|
34
|
+
export declare function classifyBootstrapError(message: string, repo: string): {
|
|
35
|
+
reason: string;
|
|
36
|
+
message: string;
|
|
37
|
+
recommendation: string;
|
|
38
|
+
};
|
|
32
39
|
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/agent/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAe,MAAM,oBAAoB,CAAC;AAChG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,aAAa,CAAC;IACtD,gBAAgB,CAAC,EAAE,CACjB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,KAAK,EAAE,cAAc,KAClB,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/agent/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAe,MAAM,oBAAoB,CAAC;AAChG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,aAAa,CAAC;IACtD,gBAAgB,CAAC,EAAE,CACjB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,KAAK,EAAE,cAAc,KAClB,SAAS,CAAC;IAKf,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,mBAAmB,EAAE,WAAW,CAAC;CAClC;AAED,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,OAAO,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3E;AAKD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,CAWvE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,EAAE,CAuBtE;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CAgGhC;AAqCD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB,CAmBA"}
|
package/dist/agent/bootstrap.js
CHANGED
|
@@ -5,6 +5,22 @@ export async function bootstrapAutoRepos(deps) {
|
|
|
5
5
|
const targets = collectTargets(deps.config);
|
|
6
6
|
await Promise.allSettled(targets.map(target => runSingleTarget(target, deps, { emitOnUnchanged: true })));
|
|
7
7
|
}
|
|
8
|
+
// Set of agent ids that are subject to bootstrap (auto-mode = no explicit workdir). Used by
|
|
9
|
+
// the sweep path in startup / config-replace to filter stale bootstrap errors for agents that
|
|
10
|
+
// no longer participate in bootstrap (either deleted or transitioned to explicit workdir).
|
|
11
|
+
export function autoBootstrapAgentIds(config) {
|
|
12
|
+
const ids = new Set();
|
|
13
|
+
for (const project of config.project) {
|
|
14
|
+
for (const pair of project.agent) {
|
|
15
|
+
for (const agent of pair) {
|
|
16
|
+
if (agent.workdir)
|
|
17
|
+
continue;
|
|
18
|
+
ids.add(agent.id);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return ids;
|
|
23
|
+
}
|
|
8
24
|
export function collectTargets(config) {
|
|
9
25
|
const groups = new Map();
|
|
10
26
|
for (const project of config.project) {
|
|
@@ -45,6 +61,7 @@ export async function runSingleTarget(target, deps, opts) {
|
|
|
45
61
|
ensureError = err instanceof Error ? err : new Error(String(err));
|
|
46
62
|
}
|
|
47
63
|
const now = new Date().toISOString();
|
|
64
|
+
const affectedAgentIds = target.agents.map(a => a.id);
|
|
48
65
|
if (ensureError === null) {
|
|
49
66
|
let updated = 0;
|
|
50
67
|
for (const agent of target.agents) {
|
|
@@ -69,9 +86,37 @@ export async function runSingleTarget(target, deps, opts) {
|
|
|
69
86
|
type: 'agent.bootstrap_succeeded',
|
|
70
87
|
timestamp: now,
|
|
71
88
|
projectId: target.project.id,
|
|
72
|
-
data: { repoPath, agentIds:
|
|
89
|
+
data: { repoPath, agentIds: affectedAgentIds, updated },
|
|
73
90
|
});
|
|
74
91
|
}
|
|
92
|
+
// Truth source for the red card is "is there a current bootstrap error record?". Purge stale
|
|
93
|
+
// failures so retries that succeed actually clear the card — covers (a) never-dispatched
|
|
94
|
+
// agents that have no binding for repoPath-based gating to work on, and (b) post-first-success
|
|
95
|
+
// failure → retry → success cycles where binding.repoPath was set long ago and isn't temporal.
|
|
96
|
+
// purgeBootstrapForAgent uses an internal substring quickCheck so the no-stale common case
|
|
97
|
+
// is just one readFile per jsonl with no parse/rewrite, and returns removed count so we can
|
|
98
|
+
// gate the downstream snapshot publish on actual state change (not synthetic noop publishes).
|
|
99
|
+
let bootstrapErrorPurged = 0;
|
|
100
|
+
if (deps.errorRecordStore) {
|
|
101
|
+
for (const id of affectedAgentIds) {
|
|
102
|
+
try {
|
|
103
|
+
const purgeResult = await deps.errorRecordStore.purgeBootstrapForAgent(id);
|
|
104
|
+
bootstrapErrorPurged += purgeResult.removed;
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
console.warn(`[bootstrap] purgeBootstrapForAgent failed for ${id}:`, err);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Notify only for state changes that bypass agentStore. Binding updates (updated > 0) already
|
|
112
|
+
// fire AgentStore.onChange → eventPublisher.publishAgentChange in production wiring; calling
|
|
113
|
+
// onAgentAffected here too would double-publish the same snapshot. The two cases that *do*
|
|
114
|
+
// need this hook are (a) bootstrap error cleared without touching agentStore (red card just
|
|
115
|
+
// disappeared from the snapshot but agentStore is untouched), (b) manual retry which wants a
|
|
116
|
+
// fresh signal regardless. Steady-state success is a no-op.
|
|
117
|
+
if (bootstrapErrorPurged > 0 || opts.emitOnUnchanged) {
|
|
118
|
+
deps.onAgentAffected?.(affectedAgentIds);
|
|
119
|
+
}
|
|
75
120
|
return { ok: true };
|
|
76
121
|
}
|
|
77
122
|
const message = ensureError.message;
|
|
@@ -82,23 +127,77 @@ export async function runSingleTarget(target, deps, opts) {
|
|
|
82
127
|
type: 'agent.bootstrap_failed',
|
|
83
128
|
timestamp: now,
|
|
84
129
|
projectId: target.project.id,
|
|
85
|
-
data: { error: message, agentIds:
|
|
130
|
+
data: { error: message, agentIds: affectedAgentIds },
|
|
86
131
|
});
|
|
87
132
|
console.warn(`[bootstrap] retry failed for ${target.project.id}: ${message}`);
|
|
133
|
+
deps.onAgentAffected?.(affectedAgentIds);
|
|
88
134
|
}
|
|
89
135
|
return { ok: false, failureMessage: message };
|
|
90
136
|
}
|
|
137
|
+
// Strong, GitHub-specific failure signatures from `gh repo clone` / GraphQL — no risk of
|
|
138
|
+
// false-matching local errors. These alone justify the "grant collaborator access" hint.
|
|
139
|
+
//
|
|
140
|
+
// Intentionally NOT including bare `/\bgh:\s/i` — `gh: command not found`, `gh: API rate limit
|
|
141
|
+
// exceeded`, etc. are gh CLI runtime/tooling errors, not repo access denials, and would mislead
|
|
142
|
+
// operators toward fixing repo permissions instead of installing/authenticating gh.
|
|
143
|
+
const STRONG_ACCESS_PATTERNS = [
|
|
144
|
+
/could not resolve to a repository/i,
|
|
145
|
+
/repository not found/i,
|
|
146
|
+
/\bGraphQL:/,
|
|
147
|
+
];
|
|
148
|
+
// Generic auth/permission keywords that ALSO match local OS errors (mkdir EACCES, etc.).
|
|
149
|
+
// Only treat as ACCESS_DENIED when paired with a GitHub-context signal (see GITHUB_CONTEXT_PATTERNS).
|
|
150
|
+
const GENERIC_AUTH_PATTERNS = [
|
|
151
|
+
/permission denied/i,
|
|
152
|
+
/authentication failed/i,
|
|
153
|
+
/access denied/i,
|
|
154
|
+
/\b(HTTP\s+)?404\b/,
|
|
155
|
+
];
|
|
156
|
+
// Markers that the failing operation was actually talking to GitHub (vs. local fs / unrelated
|
|
157
|
+
// network). Required to disambiguate `Permission denied` from a real gh-permission issue vs.
|
|
158
|
+
// a local `mkdir EACCES`.
|
|
159
|
+
// `/^gh:\s/m` (line-start) lets `gh: Not Found (HTTP 404)` upgrade to ACCESS_DENIED via the
|
|
160
|
+
// 404 generic, but stops `sh: gh: command not found` from matching because there gh: isn't at
|
|
161
|
+
// line start (the runtime shell prefix wins).
|
|
162
|
+
const GITHUB_CONTEXT_PATTERNS = [
|
|
163
|
+
/github\.com/i,
|
|
164
|
+
/\bgit@/,
|
|
165
|
+
/\(publickey\)/i,
|
|
166
|
+
/gh repo/i,
|
|
167
|
+
/^gh:\s/m,
|
|
168
|
+
];
|
|
169
|
+
export function classifyBootstrapError(message, repo) {
|
|
170
|
+
// Intentionally do NOT use `message.includes(repo)` as a GitHub-context signal — local
|
|
171
|
+
// mkdir/path errors embed the repo string in filesystem paths (e.g. `/var/baxian/repos/<repo>`)
|
|
172
|
+
// and would false-match. Trust only the explicit GitHub markers below.
|
|
173
|
+
const accessDenied = STRONG_ACCESS_PATTERNS.some(re => re.test(message))
|
|
174
|
+
|| (GENERIC_AUTH_PATTERNS.some(re => re.test(message))
|
|
175
|
+
&& GITHUB_CONTEXT_PATTERNS.some(re => re.test(message)));
|
|
176
|
+
if (accessDenied) {
|
|
177
|
+
return {
|
|
178
|
+
reason: 'BOOTSTRAP_REPO_ACCESS_DENIED',
|
|
179
|
+
message: `GitHub repo "${repo}" not found or access denied (underlying error: ${message}).`,
|
|
180
|
+
recommendation: `Verify the repo URL and grant the host's gh account collaborator access to "${repo}", then retry.`,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
reason: 'BOOTSTRAP_REPO_ENSURE_FAILED',
|
|
185
|
+
message,
|
|
186
|
+
recommendation: 'Check repository access and retry bootstrap.',
|
|
187
|
+
};
|
|
188
|
+
}
|
|
91
189
|
async function recordBootstrapFailure(target, deps, message, occurredAt) {
|
|
92
190
|
if (!deps.errorRecordStore)
|
|
93
191
|
return;
|
|
192
|
+
const classified = classifyBootstrapError(message, target.project.repo);
|
|
94
193
|
await Promise.allSettled(target.agents.map(agent => deps.errorRecordStore.append({
|
|
95
194
|
agentId: agent.id,
|
|
96
195
|
projectId: target.project.id,
|
|
97
196
|
operation: 'bootstrap',
|
|
98
|
-
reason:
|
|
99
|
-
message,
|
|
197
|
+
reason: classified.reason,
|
|
198
|
+
message: classified.message,
|
|
100
199
|
occurredAt,
|
|
101
|
-
recommendation:
|
|
200
|
+
recommendation: classified.recommendation,
|
|
102
201
|
})));
|
|
103
202
|
}
|
|
104
203
|
async function safeEmit(bus, event) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/agent/bootstrap.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/agent/bootstrap.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAuC3D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAmB;IAC1D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,OAAO,CAAC,UAAU,CACtB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAChF,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,8FAA8F;AAC9F,2FAA2F;AAC3F,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,OAAO;oBAAE,SAAS;gBAC5B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAClD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,OAAO;oBAAE,SAAS;gBAC5B,kEAAkE;gBAClE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO;oBACpC,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI;wBAChB,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE;wBAC1D,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC7C,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,IAAmB,EACnB,IAA4B;IAE5B,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,WAAW,GAAiB,IAAI,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,oBAAoB,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACxF,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB;YACrC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CACnB,MAAM,EACN,MAAM,CAAC,OAAO,CAAC,IAAI,EACnB,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAC/B,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAC/B,IAAI,CAAC,SAAS,CACf;YACH,CAAC,CAAC,IAAI,SAAS,CACX,MAAM,EACN,MAAM,CAAC,OAAO,CAAC,IAAI,EACnB,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAC/B,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAC/B,IAAI,CAAC,SAAS,CACf,CAAC;QACN,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,IAAI,UAAU,GAAG,KAAK,CAAC;gBACvB,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE;oBAClD,IAAI,CAAC,QAAQ;wBAAE,OAAO,gBAAgB,CAAC;oBACvC,UAAU,GAAG,IAAI,CAAC;oBAClB,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;gBAC5E,CAAC,CAAC,CAAC;gBACH,IAAI,UAAU;oBAAE,OAAO,EAAE,CAAC;YAC5B,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,4CAA4C,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC5B,EAAE,EAAE,EAAE;gBACN,IAAI,EAAE,2BAA2B;gBACjC,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;gBAC5B,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE;aACxD,CAAC,CAAC;QACL,CAAC;QACD,6FAA6F;QAC7F,yFAAyF;QACzF,+FAA+F;QAC/F,+FAA+F;QAC/F,2FAA2F;QAC3F,4FAA4F;QAC5F,8FAA8F;QAC9F,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,KAAK,MAAM,EAAE,IAAI,gBAAgB,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;oBAC3E,oBAAoB,IAAI,WAAW,CAAC,OAAO,CAAC;gBAC9C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;QACH,CAAC;QACD,8FAA8F;QAC9F,6FAA6F;QAC7F,2FAA2F;QAC3F,4FAA4F;QAC5F,6FAA6F;QAC7F,4DAA4D;QAC5D,IAAI,oBAAoB,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACrD,IAAI,CAAC,eAAe,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IACpC,IAAI,OAAO,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5C,MAAM,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACzD,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC5B,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,wBAAwB;YAC9B,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;YAC5B,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE;SACrD,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,gCAAgC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,eAAe,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC;AAED,yFAAyF;AACzF,yFAAyF;AACzF,EAAE;AACF,+FAA+F;AAC/F,gGAAgG;AAChG,oFAAoF;AACpF,MAAM,sBAAsB,GAAG;IAC7B,oCAAoC;IACpC,uBAAuB;IACvB,YAAY;CACb,CAAC;AAEF,yFAAyF;AACzF,sGAAsG;AACtG,MAAM,qBAAqB,GAAG;IAC5B,oBAAoB;IACpB,wBAAwB;IACxB,gBAAgB;IAChB,mBAAmB;CACpB,CAAC;AAEF,8FAA8F;AAC9F,6FAA6F;AAC7F,0BAA0B;AAC1B,4FAA4F;AAC5F,8FAA8F;AAC9F,8CAA8C;AAC9C,MAAM,uBAAuB,GAAG;IAC9B,cAAc;IACd,QAAQ;IACR,gBAAgB;IAChB,UAAU;IACV,SAAS;CACV,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,IAAY;IAKlE,uFAAuF;IACvF,gGAAgG;IAChG,uEAAuE;IACvE,MAAM,YAAY,GAAG,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;WACnE,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;eAC/C,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO;YACL,MAAM,EAAE,8BAA8B;YACtC,OAAO,EAAE,gBAAgB,IAAI,mDAAmD,OAAO,IAAI;YAC3F,cAAc,EAAE,+EAA+E,IAAI,gBAAgB;SACpH,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,8BAA8B;QACtC,OAAO;QACP,cAAc,EAAE,8CAA8C;KAC/D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,MAAuB,EACvB,IAAmB,EACnB,OAAe,EACf,UAAkB;IAElB,IAAI,CAAC,IAAI,CAAC,gBAAgB;QAAE,OAAO;IACnC,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAiB,CAAC,MAAM,CAAC;QAChF,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;QAC5B,SAAS,EAAE,WAAW;QACtB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,UAAU;QACV,cAAc,EAAE,UAAU,CAAC,cAAc;KAC1C,CAAC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAa,EAAE,KAAkB;IACvD,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,IAAI,qDAAqD,EAAE,GAAG,CAAC,CAAC;IAC7G,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAkB;IAC9C,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC"}
|
package/dist/agent/manager.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createMarkerToken } from './marker-protocol.js';
|
|
2
2
|
import { BRANCH_PREFIX, PHASE_EXPECTED_STATUS, PHASE_REQUIRES_AGENT_BOUND_TO_TASK, TASK_TERMINAL_STATUSES as TERMINAL_STATUSES, } from '../shared/index.js';
|
|
3
3
|
import { AGENT_STORE_NOOP } from '../state/agent-store.js';
|
|
4
4
|
import { PostApproveStore } from '../state/post-approve-store.js';
|
|
@@ -1938,7 +1938,7 @@ export class AgentManager {
|
|
|
1938
1938
|
const task = await this.createTask(projectId, input);
|
|
1939
1939
|
if (task.status === 'in_progress' && task.agentId) {
|
|
1940
1940
|
// Persist token first — prompt build 和 watcher 验证共用 task.specMarkerToken。
|
|
1941
|
-
const specMarkerToken =
|
|
1941
|
+
const specMarkerToken = createMarkerToken();
|
|
1942
1942
|
await this.updateTask(task.id, { specMarkerToken });
|
|
1943
1943
|
let started = false;
|
|
1944
1944
|
let dispatchErr = null;
|
|
@@ -2026,7 +2026,7 @@ export class AgentManager {
|
|
|
2026
2026
|
});
|
|
2027
2027
|
if (!taken)
|
|
2028
2028
|
continue;
|
|
2029
|
-
const specMarkerToken =
|
|
2029
|
+
const specMarkerToken = createMarkerToken();
|
|
2030
2030
|
await this.updateTask(taken.id, { specMarkerToken });
|
|
2031
2031
|
let started = false;
|
|
2032
2032
|
let dispatchErr = null;
|
|
@@ -3303,7 +3303,7 @@ export class AgentManager {
|
|
|
3303
3303
|
qaId: qa.id,
|
|
3304
3304
|
devAgentId: task.agentId,
|
|
3305
3305
|
projectId: task.projectId,
|
|
3306
|
-
newToken:
|
|
3306
|
+
newToken: createMarkerToken(),
|
|
3307
3307
|
newRound: (task.specReviewRound ?? 0) + 1,
|
|
3308
3308
|
originalStatus: task.status,
|
|
3309
3309
|
// 记录原 spec-ready token — pre-spec entry rollback 时 restore,
|
|
@@ -3470,7 +3470,7 @@ export class AgentManager {
|
|
|
3470
3470
|
devAgentId,
|
|
3471
3471
|
qaAgentId: task.qaAgentId,
|
|
3472
3472
|
projectId: task.projectId,
|
|
3473
|
-
newToken:
|
|
3473
|
+
newToken: createMarkerToken(),
|
|
3474
3474
|
currentRound: task.specReviewRound ?? 1,
|
|
3475
3475
|
};
|
|
3476
3476
|
});
|