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.
Files changed (55) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/bootstrap-poller.d.ts +6 -0
  3. package/dist/agent/bootstrap-poller.d.ts.map +1 -1
  4. package/dist/agent/bootstrap-poller.js +30 -0
  5. package/dist/agent/bootstrap-poller.js.map +1 -1
  6. package/dist/agent/bootstrap.d.ts +7 -0
  7. package/dist/agent/bootstrap.d.ts.map +1 -1
  8. package/dist/agent/bootstrap.js +104 -5
  9. package/dist/agent/bootstrap.js.map +1 -1
  10. package/dist/agent/manager.js +5 -5
  11. package/dist/agent/manager.js.map +1 -1
  12. package/dist/agent/marker-protocol.d.ts +10 -4
  13. package/dist/agent/marker-protocol.d.ts.map +1 -1
  14. package/dist/agent/marker-protocol.js +42 -34
  15. package/dist/agent/marker-protocol.js.map +1 -1
  16. package/dist/agent/post-approve-marker-watcher.d.ts.map +1 -1
  17. package/dist/agent/post-approve-marker-watcher.js +3 -7
  18. package/dist/agent/post-approve-marker-watcher.js.map +1 -1
  19. package/dist/agent/prompt.d.ts +3 -1
  20. package/dist/agent/prompt.d.ts.map +1 -1
  21. package/dist/agent/prompt.js +33 -51
  22. package/dist/agent/prompt.js.map +1 -1
  23. package/dist/agent/spec-review-marker-watcher.d.ts +3 -2
  24. package/dist/agent/spec-review-marker-watcher.d.ts.map +1 -1
  25. package/dist/agent/spec-review-marker-watcher.js +5 -7
  26. package/dist/agent/spec-review-marker-watcher.js.map +1 -1
  27. package/dist/api/config.d.ts.map +1 -1
  28. package/dist/api/config.js +16 -0
  29. package/dist/api/config.js.map +1 -1
  30. package/dist/api/projects.d.ts.map +1 -1
  31. package/dist/api/projects.js +30 -0
  32. package/dist/api/projects.js.map +1 -1
  33. package/dist/app.d.ts +2 -0
  34. package/dist/app.d.ts.map +1 -1
  35. package/dist/app.js.map +1 -1
  36. package/dist/event/handlers.js +2 -2
  37. package/dist/event/handlers.js.map +1 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +32 -9
  40. package/dist/index.js.map +1 -1
  41. package/dist/shared/types.d.ts +1 -8
  42. package/dist/shared/types.d.ts.map +1 -1
  43. package/dist/state/error-record-store.d.ts +12 -0
  44. package/dist/state/error-record-store.d.ts.map +1 -1
  45. package/dist/state/error-record-store.js +130 -1
  46. package/dist/state/error-record-store.js.map +1 -1
  47. package/dist/state/snapshot.d.ts +8 -2
  48. package/dist/state/snapshot.d.ts.map +1 -1
  49. package/dist/state/snapshot.js +45 -4
  50. package/dist/state/snapshot.js.map +1 -1
  51. package/dist/web/assets/index-53CBbz4w.js +4 -0
  52. package/dist/web/assets/{index-BztIjbNF.css → index-B9D6BV08.css} +1 -1
  53. package/dist/web/index.html +2 -2
  54. package/package.json +1 -1
  55. 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` (or uses `./baxian.json` if you're inside a project dir). Open the printed URL in your browser to manage projects and agents.
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;YAIjB,WAAW;CAiB1B"}
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":"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"}
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;CAChB;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;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,CAmEhC"}
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"}
@@ -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: target.agents.map(a => a.id), updated },
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: target.agents.map(a => a.id) },
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: 'BOOTSTRAP_REPO_ENSURE_FAILED',
99
- message,
197
+ reason: classified.reason,
198
+ message: classified.message,
100
199
  occurredAt,
101
- recommendation: 'Check repository access and retry bootstrap.',
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":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/agent/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { randomUUID } from 'node:crypto';
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 = randomUUID();
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 = randomUUID();
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: randomUUID(),
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: randomUUID(),
3473
+ newToken: createMarkerToken(),
3474
3474
  currentRound: task.specReviewRound ?? 1,
3475
3475
  };
3476
3476
  });