baxian 1.2.54 → 1.2.56

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 (105) hide show
  1. package/dist/agent/bootstrap-poller.d.ts +2 -1
  2. package/dist/agent/bootstrap-poller.d.ts.map +1 -1
  3. package/dist/agent/bootstrap-poller.js +3 -1
  4. package/dist/agent/bootstrap-poller.js.map +1 -1
  5. package/dist/agent/bootstrap.d.ts +1 -1
  6. package/dist/agent/bootstrap.d.ts.map +1 -1
  7. package/dist/agent/bootstrap.js +12 -19
  8. package/dist/agent/bootstrap.js.map +1 -1
  9. package/dist/agent/branch.d.ts +64 -0
  10. package/dist/agent/branch.d.ts.map +1 -0
  11. package/dist/agent/branch.js +386 -0
  12. package/dist/agent/branch.js.map +1 -0
  13. package/dist/agent/detect/manifests/claude-code.json +2 -2
  14. package/dist/agent/detect/region.d.ts +1 -0
  15. package/dist/agent/detect/region.d.ts.map +1 -1
  16. package/dist/agent/detect/region.js +27 -19
  17. package/dist/agent/detect/region.js.map +1 -1
  18. package/dist/agent/lineage.d.ts +1 -1
  19. package/dist/agent/lineage.d.ts.map +1 -1
  20. package/dist/agent/lineage.js +6 -7
  21. package/dist/agent/lineage.js.map +1 -1
  22. package/dist/agent/manager.d.ts +38 -36
  23. package/dist/agent/manager.d.ts.map +1 -1
  24. package/dist/agent/manager.js +1616 -669
  25. package/dist/agent/manager.js.map +1 -1
  26. package/dist/agent/preflight.d.ts.map +1 -1
  27. package/dist/agent/preflight.js +19 -15
  28. package/dist/agent/preflight.js.map +1 -1
  29. package/dist/agent/prompt.d.ts +2 -2
  30. package/dist/agent/prompt.d.ts.map +1 -1
  31. package/dist/agent/prompt.js +9 -8
  32. package/dist/agent/prompt.js.map +1 -1
  33. package/dist/agent/repo-store.d.ts +8 -4
  34. package/dist/agent/repo-store.d.ts.map +1 -1
  35. package/dist/agent/repo-store.js +143 -54
  36. package/dist/agent/repo-store.js.map +1 -1
  37. package/dist/agent/review-transport.d.ts +11 -5
  38. package/dist/agent/review-transport.d.ts.map +1 -1
  39. package/dist/agent/review-transport.js +170 -19
  40. package/dist/agent/review-transport.js.map +1 -1
  41. package/dist/agent/runner.d.ts +1 -0
  42. package/dist/agent/runner.d.ts.map +1 -1
  43. package/dist/agent/runner.js +5 -0
  44. package/dist/agent/runner.js.map +1 -1
  45. package/dist/agent/tmux.d.ts +1 -0
  46. package/dist/agent/tmux.d.ts.map +1 -1
  47. package/dist/agent/tmux.js +21 -9
  48. package/dist/agent/tmux.js.map +1 -1
  49. package/dist/api/config.d.ts.map +1 -1
  50. package/dist/api/config.js +45 -8
  51. package/dist/api/config.js.map +1 -1
  52. package/dist/api/projects.d.ts.map +1 -1
  53. package/dist/api/projects.js +257 -71
  54. package/dist/api/projects.js.map +1 -1
  55. package/dist/api/tasks.js +2 -2
  56. package/dist/api/tasks.js.map +1 -1
  57. package/dist/config/validator.d.ts.map +1 -1
  58. package/dist/config/validator.js +75 -19
  59. package/dist/config/validator.js.map +1 -1
  60. package/dist/event/handlers.d.ts.map +1 -1
  61. package/dist/event/handlers.js +36 -26
  62. package/dist/event/handlers.js.map +1 -1
  63. package/dist/event/server-handlers.d.ts.map +1 -1
  64. package/dist/event/server-handlers.js +54 -34
  65. package/dist/event/server-handlers.js.map +1 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +1 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/shared/constants.d.ts +3 -2
  70. package/dist/shared/constants.d.ts.map +1 -1
  71. package/dist/shared/constants.js +8 -1
  72. package/dist/shared/constants.js.map +1 -1
  73. package/dist/shared/types.d.ts +35 -8
  74. package/dist/shared/types.d.ts.map +1 -1
  75. package/dist/shared/types.js +8 -0
  76. package/dist/shared/types.js.map +1 -1
  77. package/dist/skills/baxian-pr-feedback/SKILL.md +1 -1
  78. package/dist/skills/baxian-pr-recheck/SKILL.md +1 -1
  79. package/dist/skills/baxian-pr-review/SKILL.md +1 -1
  80. package/dist/skills/baxian-research/SKILL.md +28 -0
  81. package/dist/skills/baxian-server-feedback/SKILL.md +6 -6
  82. package/dist/skills/baxian-server-review/SKILL.md +7 -7
  83. package/dist/skills/baxian-signals/SKILL.md +1 -1
  84. package/dist/skills/baxian-task-check/SKILL.md +4 -4
  85. package/dist/state/agent-store.js +4 -4
  86. package/dist/state/agent-store.js.map +1 -1
  87. package/dist/state/lock.d.ts +15 -2
  88. package/dist/state/lock.d.ts.map +1 -1
  89. package/dist/state/lock.js +104 -21
  90. package/dist/state/lock.js.map +1 -1
  91. package/dist/state/review-store.d.ts +4 -4
  92. package/dist/state/review-store.d.ts.map +1 -1
  93. package/dist/state/review-store.js +57 -6
  94. package/dist/state/review-store.js.map +1 -1
  95. package/dist/state/task-store.d.ts.map +1 -1
  96. package/dist/state/task-store.js +116 -18
  97. package/dist/state/task-store.js.map +1 -1
  98. package/dist/web/assets/index-3Ypk8Gfo.js +13 -0
  99. package/dist/web/index.html +1 -1
  100. package/package.json +1 -1
  101. package/dist/agent/worktree.d.ts +0 -32
  102. package/dist/agent/worktree.d.ts.map +0 -1
  103. package/dist/agent/worktree.js +0 -291
  104. package/dist/agent/worktree.js.map +0 -1
  105. package/dist/web/assets/index-Cx-wa7zd.js +0 -13
@@ -1,31 +1,73 @@
1
1
  import { homedir } from 'node:os';
2
- import { shellQuote, hostGroupKey } from './runner.js';
2
+ import { shellQuote, hostGroupKey, workdirHostGroupKey } from './runner.js';
3
3
  import { CLONE_EXEC_TIMEOUT_MS, GIT_NET_ENV, execNetwork } from './net-exec.js';
4
- import { isGitHubRepo, isSafeGitHost, normalizeRepoUrl, parseGitRemote, redactGitCredentials, repoSlug } from '../shared/index.js';
4
+ import { isGitHubRepo, normalizeRepoUrl, parseGitRemote, redactGitCredentials, repoSlug } from '../shared/index.js';
5
5
  export function createRepoStoreCache() {
6
- return { homes: new Map(), mutex: new Map(), lastFetchAt: new Map() };
6
+ return { homes: new Map(), mutex: new Map(), lastFetchAt: new Map(), owners: new Map() };
7
7
  }
8
8
  const FETCH_THROTTLE_MS = 30_000;
9
+ const BAXIAN_RUNTIME_DIRS = [
10
+ '.baxian',
11
+ '.baxian/review',
12
+ '.baxian/review/inbox',
13
+ '.baxian/review-inbox',
14
+ '.baxian/research',
15
+ ];
16
+ export async function ensureBaxianRuntimeDirsSafe(runner, absRepoPath) {
17
+ const path = shellQuote(absRepoPath);
18
+ const tracked = await runner.exec(`git -C ${path} ls-files -- .baxian`);
19
+ if (tracked.exitCode !== 0) {
20
+ throw new Error(`Failed to inspect tracked .baxian paths in ${absRepoPath}: ${tracked.stderr}`);
21
+ }
22
+ if (tracked.stdout.trim()) {
23
+ throw new Error(`Workdir ${absRepoPath} tracks .baxian paths; baxian runtime files would modify project content.`);
24
+ }
25
+ const dirs = BAXIAN_RUNTIME_DIRS.map(dir => `${absRepoPath}/${dir}`);
26
+ const operands = dirs.map(shellQuote).join(' ');
27
+ const command = `for p in ${operands}; do ` +
28
+ `if [ -L "$p" ] || { [ -e "$p" ] && [ ! -d "$p" ]; }; then exit 9; fi; ` +
29
+ `done && mkdir -p ${operands} && ` +
30
+ `for p in ${operands}; do [ -d "$p" ] && [ ! -L "$p" ] || exit 9; done`;
31
+ const result = await runner.exec(`sh -c ${shellQuote(command)}`);
32
+ if (result.exitCode !== 0) {
33
+ throw new Error(`Workdir ${absRepoPath} has an unsafe .baxian runtime path; ` +
34
+ `baxian requires real directories contained in the Workdir.`);
35
+ }
36
+ }
9
37
  export class RepoStore {
10
38
  runner;
11
39
  mode;
12
40
  host;
13
41
  cache;
42
+ agentId;
43
+ configuredWorkdir;
14
44
  isGitHub;
15
45
  repo;
16
- constructor(runner, repo, mode, host, cache) {
46
+ constructor(runner, repo, mode, host, cache, agentId, configuredWorkdir) {
17
47
  this.runner = runner;
18
48
  this.mode = mode;
19
49
  this.host = host;
20
50
  this.cache = cache;
51
+ this.agentId = agentId;
52
+ this.configuredWorkdir = configuredWorkdir;
21
53
  this.repo = repo.trim();
22
54
  this.isGitHub = isGitHubRepo(this.repo);
23
55
  }
24
56
  async ensure() {
25
57
  const absRepoPath = await this.resolveAbsPath();
26
- const cacheKey = `${this.hostKey()}:${absRepoPath}`;
58
+ const ownerKey = `${this.workdirHostKey()}:${absRepoPath}`;
59
+ const cacheKey = `${this.hostKey()}:${absRepoPath}:${this.agentId}`;
60
+ const owner = this.cache.owners.get(ownerKey);
61
+ if (owner && owner !== this.agentId) {
62
+ throw new Error(`Workdir ${absRepoPath} on ${this.hostKey()} is already owned by agent "${owner}"; ` +
63
+ `different agents must not share a directory.`);
64
+ }
65
+ this.cache.owners.set(ownerKey, this.agentId);
27
66
  return this.runUnderMutex(cacheKey, async () => {
28
67
  const originChanged = await this.cloneIfNeeded(absRepoPath);
68
+ await this.validateClone(absRepoPath);
69
+ await ensureBaxianRuntimeDirsSafe(this.runner, absRepoPath);
70
+ await this.ensureBaxianExcluded(absRepoPath);
29
71
  if (originChanged)
30
72
  this.cache.lastFetchAt.delete(cacheKey);
31
73
  await this.fetchIfStale(cacheKey, absRepoPath);
@@ -33,7 +75,7 @@ export class RepoStore {
33
75
  });
34
76
  }
35
77
  async refresh(absRepoPath) {
36
- const cacheKey = `${this.hostKey()}:${absRepoPath}`;
78
+ const cacheKey = `${this.hostKey()}:${absRepoPath}:${this.agentId}`;
37
79
  await this.runUnderMutex(cacheKey, () => this.fetchIfStale(cacheKey, absRepoPath));
38
80
  }
39
81
  hostKey() {
@@ -43,12 +85,27 @@ export class RepoStore {
43
85
  throw new Error('Remote mode requires host config');
44
86
  return hostGroupKey(this.mode, this.host);
45
87
  }
88
+ workdirHostKey() {
89
+ if (this.mode === 'local')
90
+ return 'local';
91
+ if (!this.host)
92
+ throw new Error('Remote mode requires host config');
93
+ return workdirHostGroupKey(this.mode, this.host);
94
+ }
46
95
  async resolveAbsPath() {
47
- const home = await this.resolveHome();
48
- if (this.isGitHub) {
49
- return `${home}/.baxian/repos/${repoSlug(this.repo).toLowerCase()}`;
96
+ if (this.configuredWorkdir) {
97
+ if (!this.configuredWorkdir.startsWith('/')) {
98
+ throw new Error(`Workdir must be an absolute path: ${this.configuredWorkdir}`);
99
+ }
100
+ const result = await this.runner.exec(`cd ${shellQuote(this.configuredWorkdir)} 2>/dev/null && pwd -P`);
101
+ if (result.exitCode !== 0 || result.stdout.trim() === '') {
102
+ throw new Error(`Configured Workdir ${this.configuredWorkdir} does not exist or is not accessible; ` +
103
+ `baxian never creates a user-specified Workdir implicitly.`);
104
+ }
105
+ return result.stdout.trim();
50
106
  }
51
- return `${home}/.baxian/${nonGitHubSubpath(this.repo)}`;
107
+ const home = await this.resolveHome();
108
+ return `${home}/.baxian/agents/${this.agentId}/repo`;
52
109
  }
53
110
  async resolveHome() {
54
111
  const key = this.hostKey();
@@ -56,7 +113,11 @@ export class RepoStore {
56
113
  const cached = this.cache.homes.get(key);
57
114
  if (cached)
58
115
  return cached;
59
- const home = homedir();
116
+ const result = await this.runner.exec(`cd ${shellQuote(homedir())} && pwd -P`);
117
+ if (result.exitCode !== 0 || !result.stdout.trim()) {
118
+ throw new Error(`Failed to canonicalize local home ${homedir()}: ${result.stderr}`);
119
+ }
120
+ const home = result.stdout.trim();
60
121
  this.cache.homes.set(key, home);
61
122
  return home;
62
123
  }
@@ -67,22 +128,28 @@ export class RepoStore {
67
128
  if (result.exitCode !== 0 || !result.stdout) {
68
129
  throw new Error(`Failed to resolve $HOME on ${key}: ${result.stderr}`);
69
130
  }
70
- const home = result.stdout.trim();
131
+ const canonical = await this.runner.exec(`cd ${shellQuote(result.stdout.trim())} && pwd -P`);
132
+ if (canonical.exitCode !== 0 || !canonical.stdout.trim()) {
133
+ throw new Error(`Failed to canonicalize $HOME on ${key}: ${canonical.stderr}`);
134
+ }
135
+ const home = canonical.stdout.trim();
71
136
  this.cache.homes.set(key, home);
72
137
  return home;
73
138
  }
74
139
  async cloneIfNeeded(absRepoPath) {
75
140
  const dirExists = (await this.runner.exec(`test -d ${shellQuote(absRepoPath)}`)).exitCode === 0;
76
141
  if (!dirExists) {
142
+ if (this.configuredWorkdir) {
143
+ throw new Error(`Configured Workdir ${absRepoPath} does not exist; ` +
144
+ `baxian never creates a user-specified Workdir implicitly.`);
145
+ }
77
146
  const parent = absRepoPath.replace(/\/[^/]+$/, '');
78
147
  const mk = await this.runner.exec(`mkdir -p ${shellQuote(parent)}`);
79
148
  if (mk.exitCode !== 0)
80
149
  throw new Error(`Failed to mkdir ${parent}: ${mk.stderr}`);
81
- // Bare store: no checkout for an agent REPL to contaminate — every task must
82
- // work through its own worktree, and stray git commands in the store dir fail.
83
150
  const cloneCmd = this.isGitHub
84
- ? `${GIT_NET_ENV} gh repo clone ${shellQuote(repoSlug(this.repo))} ${shellQuote(absRepoPath)} --no-upstream -- --bare`
85
- : `${GIT_NET_ENV} git clone --bare ${shellQuote(this.repo)} ${shellQuote(absRepoPath)}`;
151
+ ? `${GIT_NET_ENV} gh repo clone ${shellQuote(repoSlug(this.repo))} ${shellQuote(absRepoPath)} --no-upstream`
152
+ : `${GIT_NET_ENV} git clone ${shellQuote(this.repo)} ${shellQuote(absRepoPath)}`;
86
153
  let clone;
87
154
  try {
88
155
  clone = await execNetwork(this.runner, cloneCmd, {
@@ -99,39 +166,67 @@ export class RepoStore {
99
166
  const cmd = this.isGitHub ? 'gh repo clone' : 'git clone';
100
167
  throw new Error(redactGitCredentials(`${cmd} ${this.repo} failed: ${clone.stderr || clone.stdout}`));
101
168
  }
102
- await this.installFetchRefspec(absRepoPath);
103
169
  if (this.isGitHub && parseGitRemote(this.repo) !== null) {
104
170
  return this.syncMatchingOriginUrl(absRepoPath);
105
171
  }
106
172
  return false;
107
173
  }
108
- // resolve-git-dir validates the directory itself (bare, or its .git for a
109
- // working-tree clone) without git's upward discovery — `git -C <dir> rev-parse`
110
- // would happily match an ancestor repo (e.g. a dotfiles repo in $HOME).
111
- const isRepo = (await this.runner.exec(`git rev-parse --resolve-git-dir ${shellQuote(absRepoPath)} || ` +
112
- `git rev-parse --resolve-git-dir ${shellQuote(`${absRepoPath}/.git`)}`)).exitCode === 0;
174
+ const isRepo = (await this.runner.exec(`git rev-parse --resolve-git-dir ${shellQuote(`${absRepoPath}/.git`)}`)).exitCode === 0;
113
175
  if (!isRepo) {
176
+ const discovered = await this.runner.exec(`git -C ${shellQuote(absRepoPath)} rev-parse --show-toplevel`);
177
+ if (discovered.exitCode === 0) {
178
+ throw new Error(`Workdir ${absRepoPath} must be the repository's exact top-level directory, not a subdirectory.`);
179
+ }
180
+ const bare = await this.runner.exec(`git rev-parse --resolve-git-dir ${shellQuote(absRepoPath)}`);
181
+ if (bare.exitCode === 0) {
182
+ throw new Error(`Workdir ${absRepoPath} must be a non-bare Git clone.`);
183
+ }
114
184
  throw new Error(`${absRepoPath} exists but is not a git repository. Remove it manually or change project.repo.`);
115
185
  }
116
- await this.ensureFetchRefspec(absRepoPath);
117
186
  return this.syncMatchingOriginUrl(absRepoPath);
118
187
  }
119
- async ensureFetchRefspec(absRepoPath) {
120
- // A bare store created outside cloneIfNeeded (e.g. a manual `git clone --bare`)
121
- // has no fetch refspec, so fetch never updates origin/* and origin/HEAD stays
122
- // unresolvable — a dead end `set-head --auto` cannot fix. Install only when
123
- // absent; a deliberate custom refspec is left alone.
124
- const existing = await this.runner.exec(`git -C ${shellQuote(absRepoPath)} config --get-all remote.origin.fetch`);
125
- if (existing.exitCode === 0 && existing.stdout.trim() !== '')
126
- return;
127
- await this.installFetchRefspec(absRepoPath);
188
+ async validateClone(absRepoPath) {
189
+ const path = shellQuote(absRepoPath);
190
+ const top = await this.runner.exec(`git -C ${path} rev-parse --show-toplevel`);
191
+ if (top.exitCode !== 0 || top.stdout.trim() === '') {
192
+ throw new Error(`${absRepoPath} is not a working-tree Git repository.`);
193
+ }
194
+ const canonicalTop = await this.runner.exec(`cd ${shellQuote(top.stdout.trim())} && pwd -P`);
195
+ if (canonicalTop.exitCode !== 0 || canonicalTop.stdout.trim() !== absRepoPath) {
196
+ throw new Error(`Workdir ${absRepoPath} must be the repository's exact top-level directory, not a subdirectory.`);
197
+ }
198
+ const bare = await this.runner.exec(`git -C ${path} rev-parse --is-bare-repository`);
199
+ if (bare.exitCode !== 0 || bare.stdout.trim() !== 'false') {
200
+ throw new Error(`Workdir ${absRepoPath} must be a non-bare Git clone.`);
201
+ }
202
+ const independent = await this.runner.exec(`test -d ${shellQuote(`${absRepoPath}/.git`)} && ` +
203
+ `test "$(git -C ${path} rev-parse --git-common-dir)" = .git && ` +
204
+ `test ! -s ${shellQuote(`${absRepoPath}/.git/objects/info/alternates`)}`);
205
+ if (independent.exitCode !== 0) {
206
+ throw new Error(`Workdir ${absRepoPath} must be an independent ordinary clone, not a linked worktree or alternates-based clone.`);
207
+ }
208
+ const writable = await this.runner.exec(`test -r ${path} -a -w ${path} -a -x ${path}`);
209
+ if (writable.exitCode !== 0) {
210
+ throw new Error(`Workdir ${absRepoPath} is not readable and writable by the agent host user.`);
211
+ }
212
+ const metadata = await this.runner.exec(`git -C ${path} rev-parse --git-dir HEAD >/dev/null`);
213
+ if (metadata.exitCode !== 0) {
214
+ throw new Error(`Workdir ${absRepoPath} has unreadable Git metadata or HEAD.`);
215
+ }
216
+ const remoteRefs = await this.runner.exec(`git -C ${path} for-each-ref --format=${shellQuote('%(refname)')} --count=1 refs/remotes/`);
217
+ if (remoteRefs.exitCode !== 0 || remoteRefs.stdout.trim() === '') {
218
+ throw new Error(`Workdir ${absRepoPath} has no readable remote-tracking refs.`);
219
+ }
128
220
  }
129
- async installFetchRefspec(absRepoPath) {
130
- // git clone --bare configures no remote-tracking refspec; without it fetch
131
- // never updates refs/remotes/origin/* and origin/HEAD stays unresolvable.
132
- const result = await this.runner.exec(`git -C ${shellQuote(absRepoPath)} config remote.origin.fetch ${shellQuote('+refs/heads/*:refs/remotes/origin/*')}`);
133
- if (result.exitCode !== 0) {
134
- throw new Error(`Failed to install fetch refspec at ${absRepoPath}: ${result.stderr}`);
221
+ async ensureBaxianExcluded(absRepoPath) {
222
+ const path = shellQuote(absRepoPath);
223
+ const command = `cd ${path} && p="$(git rev-parse --git-path info/exclude)" && ` +
224
+ `mkdir -p "$(dirname "$p")" && ` +
225
+ `{ grep -qxF '.baxian/' "$p" 2>/dev/null || printf '%s\\n' '.baxian/' >> "$p"; } && ` +
226
+ `git check-ignore -q -- .baxian/__probe__`;
227
+ const excluded = await this.runner.exec(`sh -c ${shellQuote(command)}`);
228
+ if (excluded.exitCode !== 0) {
229
+ throw new Error(`Failed to make .baxian runtime files invisible to Git in ${absRepoPath}.`);
135
230
  }
136
231
  }
137
232
  async syncMatchingOriginUrl(absRepoPath) {
@@ -143,6 +238,8 @@ export class RepoStore {
143
238
  if (!this.originMatches(originUrl)) {
144
239
  throw new Error(redactGitCredentials(`Existing repo at ${absRepoPath} has origin "${originUrl}" which does not match project.repo "${this.repo}". Remove the directory or change project.repo.`));
145
240
  }
241
+ if (this.configuredWorkdir)
242
+ return false;
146
243
  return this.syncOriginUrl(absRepoPath, originUrl);
147
244
  }
148
245
  async syncOriginUrl(absRepoPath, originUrl) {
@@ -174,32 +271,24 @@ export class RepoStore {
174
271
  const last = this.cache.lastFetchAt.get(cacheKey) ?? 0;
175
272
  if (Date.now() - last < FETCH_THROTTLE_MS)
176
273
  return;
177
- const result = await execNetwork(this.runner, `cd ${shellQuote(absRepoPath)} && ${GIT_NET_ENV} git fetch --all --prune && (git remote set-head origin --auto || true)`);
274
+ const result = await execNetwork(this.runner, `cd ${shellQuote(absRepoPath)} && ${GIT_NET_ENV} git fetch --all --prune && git remote set-head origin --auto`);
178
275
  if (result.exitCode !== 0) {
179
- throw new Error(`git fetch failed at ${absRepoPath}: ${result.stderr}`);
276
+ throw new Error(`git fetch failed or origin/HEAD could not be refreshed at ${absRepoPath}: ${result.stderr}`);
180
277
  }
181
278
  this.cache.lastFetchAt.set(cacheKey, Date.now());
182
279
  }
183
280
  async runUnderMutex(key, fn) {
184
281
  const prev = this.cache.mutex.get(key) ?? Promise.resolve();
185
282
  const cur = prev.then(fn, fn);
186
- this.cache.mutex.set(key, cur.then(() => undefined, () => undefined));
283
+ const settled = cur.then(() => undefined, () => undefined);
284
+ this.cache.mutex.set(key, settled);
285
+ void settled.finally(() => {
286
+ if (this.cache.mutex.get(key) === settled)
287
+ this.cache.mutex.delete(key);
288
+ });
187
289
  return cur;
188
290
  }
189
291
  }
190
- export function nonGitHubSubpath(repo) {
191
- const parsed = parseGitRemote(repo);
192
- if (!parsed)
193
- throw new Error(`cannot derive local path for non-GitHub repo "${repo}"`);
194
- if (!isSafeGitHost(parsed.host)) {
195
- throw new Error(`refusing unsafe host in repo "${repo}"`);
196
- }
197
- const segments = parsed.path.split('/');
198
- if (segments.some(s => s === '' || s === '.' || s === '..')) {
199
- throw new Error(`refusing unsafe path segment in repo "${repo}"`);
200
- }
201
- return `repos-ext/${parsed.host.replace(/:/g, '_')}/${segments.join('/')}`;
202
- }
203
292
  function urlScheme(url) {
204
293
  if (/^https:\/\//i.test(url))
205
294
  return 'https';
@@ -1 +1 @@
1
- {"version":3,"file":"repo-store.js","sourceRoot":"","sources":["../../src/agent/repo-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repo-store.js","sourceRoot":"","sources":["../../src/agent/repo-store.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type AgentConfig, type ReviewContentFileRef, type ReviewFindings, type ReviewResponse, type TaskPhase, type TaskState } from '../shared/index.js';
1
+ import { type AgentConfig, type ReviewContentFileRef, type ReviewFindings, type ReviewResponse, type SpecDocument, type TaskPhase, type TaskState } from '../shared/index.js';
2
2
  import { type CommandRunner } from './runner.js';
3
3
  export declare class ReviewExchangeError extends Error {
4
4
  readonly reason: string;
@@ -6,6 +6,7 @@ export declare class ReviewExchangeError extends Error {
6
6
  }
7
7
  export interface ReadContentResult {
8
8
  content: string;
9
+ documents?: SpecDocument[];
9
10
  diffstat?: string;
10
11
  baseSha?: string;
11
12
  headSha?: string;
@@ -14,14 +15,17 @@ export interface ReadContentResult {
14
15
  }
15
16
  export interface ReviewTransportDeps {
16
17
  createRunnerFor(agent: AgentConfig): CommandRunner;
17
- resolveWorktree(agentId: string): string | undefined;
18
+ resolveWorkdir(agentId: string): string | undefined;
18
19
  }
19
20
  export declare function validateReviewFindings(raw: unknown): ReviewFindings;
20
21
  export declare function validateReviewResponse(raw: unknown): ReviewResponse;
21
22
  export declare class ReviewTransport {
22
23
  private readonly deps;
23
24
  constructor(deps: ReviewTransportDeps);
25
+ clearDispatchOutputs(agent: AgentConfig, workdir: string, phase: string): Promise<void>;
24
26
  readContent(task: TaskState, devAgent: AgentConfig, phase: TaskPhase): Promise<ReadContentResult>;
27
+ readSpecDocuments(agent: AgentConfig): Promise<SpecDocument[]>;
28
+ replaceSpecDocuments(agent: AgentConfig, workdir: string, documents: readonly SpecDocument[], assertOwner: () => Promise<void>): Promise<void>;
25
29
  readFindings(task: TaskState, qaAgent: AgentConfig): Promise<ReviewFindings | null>;
26
30
  readResponse(task: TaskState, devAgent: AgentConfig): Promise<ReviewResponse | null>;
27
31
  deleteFindings(qaAgent: AgentConfig): Promise<void>;
@@ -29,11 +33,13 @@ export declare class ReviewTransport {
29
33
  readHeadSha(devAgent: AgentConfig): Promise<string>;
30
34
  readInterdiff(devAgent: AgentConfig, prevSha: string, curSha: string): Promise<string>;
31
35
  readFileRange(devAgent: AgentConfig, file: string, startLine: number, endLine: number): Promise<string>;
32
- deliverToInbox(agent: AgentConfig, worktreePath: string, filename: string, content: string): Promise<ReviewContentFileRef>;
36
+ deliverToInbox(agent: AgentConfig, workdir: string, filename: string, content: string): Promise<ReviewContentFileRef>;
33
37
  private readExchangeFile;
34
38
  private deleteExchangeFile;
39
+ private ensureRuntimeDirs;
40
+ private validateSpecDocuments;
35
41
  private parseJson;
36
- private requireWorktree;
42
+ private requireWorkdir;
37
43
  }
38
44
  export interface ServerPayloadInput {
39
45
  phase: string;
@@ -63,5 +69,5 @@ export interface ServerPayloadPromptOpts {
63
69
  serverPriorResponse?: string;
64
70
  serverPriorResponseFile?: ReviewContentFileRef;
65
71
  }
66
- export declare function resolveServerPayloads(transport: ReviewTransport, agent: AgentConfig, worktreePath: string, input: ServerPayloadInput): Promise<ServerPayloadPromptOpts>;
72
+ export declare function resolveServerPayloads(transport: ReviewTransport, agent: AgentConfig, workdir: string, input: ServerPayloadInput): Promise<ServerPayloadPromptOpts>;
67
73
  //# sourceMappingURL=review-transport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"review-transport.d.ts","sourceRoot":"","sources":["../../src/agent/review-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-transport.d.ts","sourceRoot":"","sources":["../../src/agent/review-transport.ts"],"names":[],"mappings":"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"}