harness-dispatch 0.4.0 → 0.6.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 (185) hide show
  1. package/CHANGELOG.md +152 -0
  2. package/README.md +232 -87
  3. package/config.default.yaml +416 -397
  4. package/dist/auth.d.ts.map +1 -1
  5. package/dist/auth.js +2 -2
  6. package/dist/auth.js.map +1 -1
  7. package/dist/billing.d.ts +35 -4
  8. package/dist/billing.d.ts.map +1 -1
  9. package/dist/billing.js +48 -17
  10. package/dist/billing.js.map +1 -1
  11. package/dist/bin.d.ts.map +1 -1
  12. package/dist/bin.js +147 -91
  13. package/dist/bin.js.map +1 -1
  14. package/dist/breaker-store.d.ts +60 -9
  15. package/dist/breaker-store.d.ts.map +1 -1
  16. package/dist/breaker-store.js +246 -50
  17. package/dist/breaker-store.js.map +1 -1
  18. package/dist/circuit-breaker.d.ts +35 -0
  19. package/dist/circuit-breaker.d.ts.map +1 -1
  20. package/dist/circuit-breaker.js +68 -11
  21. package/dist/circuit-breaker.js.map +1 -1
  22. package/dist/config/coercions.d.ts +31 -0
  23. package/dist/config/coercions.d.ts.map +1 -0
  24. package/dist/config/coercions.js +169 -0
  25. package/dist/config/coercions.js.map +1 -0
  26. package/dist/config/env-interpolation.d.ts +36 -0
  27. package/dist/config/env-interpolation.d.ts.map +1 -0
  28. package/dist/config/env-interpolation.js +73 -0
  29. package/dist/config/env-interpolation.js.map +1 -0
  30. package/dist/config/protocol.d.ts +51 -0
  31. package/dist/config/protocol.d.ts.map +1 -0
  32. package/dist/config/protocol.js +300 -0
  33. package/dist/config/protocol.js.map +1 -0
  34. package/dist/config/route-fields.d.ts +72 -0
  35. package/dist/config/route-fields.d.ts.map +1 -0
  36. package/dist/config/route-fields.js +128 -0
  37. package/dist/config/route-fields.js.map +1 -0
  38. package/dist/config/validation.d.ts +72 -0
  39. package/dist/config/validation.d.ts.map +1 -0
  40. package/dist/config/validation.js +189 -0
  41. package/dist/config/validation.js.map +1 -0
  42. package/dist/config.d.ts +19 -2
  43. package/dist/config.d.ts.map +1 -1
  44. package/dist/config.js +214 -635
  45. package/dist/config.js.map +1 -1
  46. package/dist/configure-yaml.d.ts +23 -0
  47. package/dist/configure-yaml.d.ts.map +1 -0
  48. package/dist/configure-yaml.js +193 -0
  49. package/dist/configure-yaml.js.map +1 -0
  50. package/dist/dispatch-log.d.ts.map +1 -1
  51. package/dist/dispatch-log.js +2 -3
  52. package/dist/dispatch-log.js.map +1 -1
  53. package/dist/dispatchers/base.d.ts +3 -0
  54. package/dist/dispatchers/base.d.ts.map +1 -1
  55. package/dist/dispatchers/base.js.map +1 -1
  56. package/dist/dispatchers/generic-cli.d.ts +15 -1
  57. package/dist/dispatchers/generic-cli.d.ts.map +1 -1
  58. package/dist/dispatchers/generic-cli.js +69 -5
  59. package/dist/dispatchers/generic-cli.js.map +1 -1
  60. package/dist/dispatchers/openai-compatible.d.ts.map +1 -1
  61. package/dist/dispatchers/openai-compatible.js +70 -2
  62. package/dist/dispatchers/openai-compatible.js.map +1 -1
  63. package/dist/dispatchers/shared/kill-tree.d.ts +17 -4
  64. package/dist/dispatchers/shared/kill-tree.d.ts.map +1 -1
  65. package/dist/dispatchers/shared/kill-tree.js +28 -4
  66. package/dist/dispatchers/shared/kill-tree.js.map +1 -1
  67. package/dist/dispatchers/shared/rate-limit-headers.d.ts +17 -0
  68. package/dist/dispatchers/shared/rate-limit-headers.d.ts.map +1 -1
  69. package/dist/dispatchers/shared/rate-limit-headers.js +27 -0
  70. package/dist/dispatchers/shared/rate-limit-headers.js.map +1 -1
  71. package/dist/dispatchers/shared/stream-subprocess.d.ts +11 -0
  72. package/dist/dispatchers/shared/stream-subprocess.d.ts.map +1 -1
  73. package/dist/dispatchers/shared/stream-subprocess.js +62 -35
  74. package/dist/dispatchers/shared/stream-subprocess.js.map +1 -1
  75. package/dist/dispatchers/shared/subprocess.d.ts.map +1 -1
  76. package/dist/dispatchers/shared/subprocess.js +3 -0
  77. package/dist/dispatchers/shared/subprocess.js.map +1 -1
  78. package/dist/dispatchers/shared/which-available.d.ts.map +1 -1
  79. package/dist/dispatchers/shared/which-available.js +16 -2
  80. package/dist/dispatchers/shared/which-available.js.map +1 -1
  81. package/dist/file-lock.d.ts +17 -0
  82. package/dist/file-lock.d.ts.map +1 -0
  83. package/dist/file-lock.js +143 -0
  84. package/dist/file-lock.js.map +1 -0
  85. package/dist/http/parse.d.ts +64 -0
  86. package/dist/http/parse.d.ts.map +1 -0
  87. package/dist/http/parse.js +230 -0
  88. package/dist/http/parse.js.map +1 -0
  89. package/dist/http/server.d.ts +2 -0
  90. package/dist/http/server.d.ts.map +1 -1
  91. package/dist/http/server.js +249 -286
  92. package/dist/http/server.js.map +1 -1
  93. package/dist/index.d.ts +1 -1
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +3 -2
  96. package/dist/index.js.map +1 -1
  97. package/dist/job-runner.js +23 -5
  98. package/dist/job-runner.js.map +1 -1
  99. package/dist/jobs/context.d.ts +17 -0
  100. package/dist/jobs/context.d.ts.map +1 -0
  101. package/dist/jobs/context.js +84 -0
  102. package/dist/jobs/context.js.map +1 -0
  103. package/dist/jobs/store.d.ts +80 -0
  104. package/dist/jobs/store.d.ts.map +1 -0
  105. package/dist/jobs/store.js +279 -0
  106. package/dist/jobs/store.js.map +1 -0
  107. package/dist/jobs/types.d.ts +135 -0
  108. package/dist/jobs/types.d.ts.map +1 -0
  109. package/dist/jobs/types.js +11 -0
  110. package/dist/jobs/types.js.map +1 -0
  111. package/dist/jobs.d.ts +165 -85
  112. package/dist/jobs.d.ts.map +1 -1
  113. package/dist/jobs.js +824 -208
  114. package/dist/jobs.js.map +1 -1
  115. package/dist/leaderboard.d.ts +24 -1
  116. package/dist/leaderboard.d.ts.map +1 -1
  117. package/dist/leaderboard.js +94 -2
  118. package/dist/leaderboard.js.map +1 -1
  119. package/dist/mcp/config-hot-reload.d.ts.map +1 -1
  120. package/dist/mcp/config-hot-reload.js +1 -1
  121. package/dist/mcp/config-hot-reload.js.map +1 -1
  122. package/dist/mcp/dispatcher-factory.d.ts +16 -1
  123. package/dist/mcp/dispatcher-factory.d.ts.map +1 -1
  124. package/dist/mcp/dispatcher-factory.js +41 -3
  125. package/dist/mcp/dispatcher-factory.js.map +1 -1
  126. package/dist/mcp/tool-schemas.d.ts +194 -0
  127. package/dist/mcp/tool-schemas.d.ts.map +1 -0
  128. package/dist/mcp/tool-schemas.js +311 -0
  129. package/dist/mcp/tool-schemas.js.map +1 -0
  130. package/dist/mcp/tools.d.ts +26 -51
  131. package/dist/mcp/tools.d.ts.map +1 -1
  132. package/dist/mcp/tools.js +122 -151
  133. package/dist/mcp/tools.js.map +1 -1
  134. package/dist/observability/index.d.ts +16 -3
  135. package/dist/observability/index.d.ts.map +1 -1
  136. package/dist/observability/index.js +23 -7
  137. package/dist/observability/index.js.map +1 -1
  138. package/dist/observability/spans.d.ts.map +1 -1
  139. package/dist/observability/spans.js +4 -1
  140. package/dist/observability/spans.js.map +1 -1
  141. package/dist/quota.d.ts +106 -22
  142. package/dist/quota.d.ts.map +1 -1
  143. package/dist/quota.js +198 -58
  144. package/dist/quota.js.map +1 -1
  145. package/dist/route-policy.d.ts.map +1 -1
  146. package/dist/route-policy.js +13 -3
  147. package/dist/route-policy.js.map +1 -1
  148. package/dist/router.d.ts +29 -1
  149. package/dist/router.d.ts.map +1 -1
  150. package/dist/router.js +102 -40
  151. package/dist/router.js.map +1 -1
  152. package/dist/safety.d.ts.map +1 -1
  153. package/dist/safety.js +11 -2
  154. package/dist/safety.js.map +1 -1
  155. package/dist/state-dir.d.ts +17 -0
  156. package/dist/state-dir.d.ts.map +1 -0
  157. package/dist/state-dir.js +21 -0
  158. package/dist/state-dir.js.map +1 -0
  159. package/dist/status.d.ts +49 -0
  160. package/dist/status.d.ts.map +1 -1
  161. package/dist/status.js +67 -4
  162. package/dist/status.js.map +1 -1
  163. package/dist/types.d.ts +74 -1
  164. package/dist/types.d.ts.map +1 -1
  165. package/dist/working-dir.d.ts +13 -0
  166. package/dist/working-dir.d.ts.map +1 -1
  167. package/dist/working-dir.js +27 -0
  168. package/dist/working-dir.js.map +1 -1
  169. package/dist/workspace-lock.d.ts +40 -0
  170. package/dist/workspace-lock.d.ts.map +1 -0
  171. package/dist/workspace-lock.js +258 -0
  172. package/dist/workspace-lock.js.map +1 -0
  173. package/dist/workspace-resolve.d.ts +98 -0
  174. package/dist/workspace-resolve.d.ts.map +1 -0
  175. package/dist/workspace-resolve.js +382 -0
  176. package/dist/workspace-resolve.js.map +1 -0
  177. package/dist/workspaces.d.ts +16 -0
  178. package/dist/workspaces.d.ts.map +1 -1
  179. package/dist/workspaces.js +166 -22
  180. package/dist/workspaces.js.map +1 -1
  181. package/package.json +99 -96
  182. package/dist/dashboard/live.d.ts +0 -49
  183. package/dist/dashboard/live.d.ts.map +0 -1
  184. package/dist/dashboard/live.js +0 -149
  185. package/dist/dashboard/live.js.map +0 -1
@@ -1,11 +1,12 @@
1
1
  import { execFile as execFileCb } from "node:child_process";
2
2
  import { createHash, randomUUID } from "node:crypto";
3
+ import { constants as fsConstants } from "node:fs";
3
4
  import { copyFile, mkdir, readdir, readFile, readlink, rm, stat, symlink, } from "node:fs/promises";
4
5
  import os from "node:os";
5
6
  import path from "node:path";
6
7
  import { promisify } from "node:util";
7
8
  const execFile = promisify(execFileCb);
8
- const EXCLUDED_DIRS = new Set([
9
+ export const EXCLUDED_DIRS = new Set([
9
10
  ".git",
10
11
  "node_modules",
11
12
  "dist",
@@ -138,32 +139,100 @@ function shouldExclude(relPath, direntName) {
138
139
  const normalized = relPath.split(path.sep).join("/");
139
140
  return normalized === ".harness-dispatch/workspaces" || normalized.startsWith(".harness-dispatch/workspaces/");
140
141
  }
141
- async function copyTree(sourceRoot, destRoot, rel = "") {
142
+ /**
143
+ * Recreate one symlink in the copy, but only if it stays inside the workspace.
144
+ *
145
+ * The previous version read the target and recreated it verbatim, with no
146
+ * containment check, under a comment saying "preserve relative symlinks" over
147
+ * code that preserved absolute ones just as happily. A link pointing at /etc
148
+ * or a home directory was faithfully rebuilt inside the "isolated" copy, so an
149
+ * agent writing through it wrote to the real host path — isolation defeated by
150
+ * a link the agent may itself have created on an earlier turn.
151
+ *
152
+ * On Windows this happened to be inert: unprivileged fs.symlink fails EPERM
153
+ * and the old bare `catch {}` swallowed it. That is an accident of platform
154
+ * permissions, not a defence, and it does not hold on Linux or macOS where the
155
+ * call succeeds. Verified on Windows with a directory JUNCTION, which needs no
156
+ * privileges and which readdir reports as a symlink.
157
+ *
158
+ * Escaping links are dropped rather than followed. Copying the TARGET's
159
+ * contents in would smuggle host files into the workspace — the same leak
160
+ * pointing the other way.
161
+ */
162
+ async function copyLink(sourceRoot, destRoot, childRel, skipped) {
163
+ const linkPath = path.join(sourceRoot, childRel);
164
+ let target;
165
+ try {
166
+ target = await readlink(linkPath);
167
+ }
168
+ catch {
169
+ return;
170
+ }
171
+ // Resolve against the link's own directory, exactly as the OS would.
172
+ const resolved = path.resolve(path.dirname(linkPath), target);
173
+ const rel = path.relative(sourceRoot, resolved);
174
+ if (rel !== "" && (rel.startsWith("..") || path.isAbsolute(rel))) {
175
+ skipped.push(`${childRel} -> ${target}`);
176
+ return;
177
+ }
178
+ try {
179
+ await symlink(target, path.join(destRoot, childRel));
180
+ }
181
+ catch {
182
+ // Best effort: Windows refuses symlink creation without privileges, and a
183
+ // missing in-tree link is a far smaller problem than an escaping one.
184
+ }
185
+ }
186
+ async function copyTree(sourceRoot, destRoot, rel = "", skipped = [], vanished = []) {
142
187
  const sourceDir = rel ? path.join(sourceRoot, rel) : sourceRoot;
143
188
  const destDir = rel ? path.join(destRoot, rel) : destRoot;
144
189
  await mkdir(destDir, { recursive: true });
145
190
  const entries = await readdir(sourceDir, { withFileTypes: true });
146
191
  for (const entry of entries) {
147
192
  const childRel = rel ? path.join(rel, entry.name) : entry.name;
148
- if (entry.isDirectory()) {
149
- if (shouldExclude(childRel, entry.name))
193
+ try {
194
+ if (entry.isDirectory()) {
195
+ if (shouldExclude(childRel, entry.name))
196
+ continue;
197
+ await copyTree(sourceRoot, destRoot, childRel, skipped, vanished);
150
198
  continue;
151
- await copyTree(sourceRoot, destRoot, childRel);
152
- continue;
153
- }
154
- if (entry.isFile()) {
155
- await copyFile(path.join(sourceRoot, childRel), path.join(destRoot, childRel));
156
- continue;
157
- }
158
- if (entry.isSymbolicLink()) {
159
- // Preserve relative symlinks, but do not resolve links during copying.
160
- try {
161
- const target = await readlink(path.join(sourceRoot, childRel));
162
- await symlink(target, path.join(destRoot, childRel));
163
199
  }
164
- catch {
165
- // Symlink preservation is best effort; agents can still work with the copied files.
200
+ if (entry.isFile()) {
201
+ // COPYFILE_FICLONE asks the filesystem for a copy-on-write reflink:
202
+ // the new file shares the original's blocks until one of them is
203
+ // written to. On APFS, Btrfs/XFS and ReFS/Dev Drive that makes a
204
+ // workspace clone near-instant and free of duplicate allocation,
205
+ // which matters because `copy` duplicates a whole project per
206
+ // dispatch and fanout does it per arm.
207
+ //
208
+ // FICLONE, deliberately NOT FICLONE_FORCE: the plain flag falls back
209
+ // to an ordinary copy when the filesystem cannot reflink (plain NTFS,
210
+ // ext4, or a cross-device copy), while FORCE fails outright. A
211
+ // best-effort speedup must never turn a working copy into an error.
212
+ await copyFile(path.join(sourceRoot, childRel), path.join(destRoot, childRel), fsConstants.COPYFILE_FICLONE);
213
+ continue;
166
214
  }
215
+ if (entry.isSymbolicLink()) {
216
+ await copyLink(sourceRoot, destRoot, childRel, skipped);
217
+ }
218
+ }
219
+ catch (err) {
220
+ // A working directory is LIVE while it is being copied. readdir gives a
221
+ // listing, and by the time each entry is read it may be gone — an editor
222
+ // saving over a temp file, a build watcher cleaning output, another
223
+ // fanout arm writing into the same tree (write-capable fanout REQUIRES
224
+ // copy, so concurrent copies of one directory are the documented case,
225
+ // not an edge one). Failing the whole dispatch on a raw ENOENT because
226
+ // one incidental file blinked out is the wrong trade: the caller loses
227
+ // real work over a file they did not care about.
228
+ //
229
+ // Only "it disappeared" is tolerated. A permission error or a full disk
230
+ // still fails loudly, because those mean the copy is not the snapshot it
231
+ // claims to be for reasons that will not have fixed themselves.
232
+ const code = err?.code;
233
+ if (code !== "ENOENT")
234
+ throw err;
235
+ vanished.push(childRel.split(path.sep).join("/"));
167
236
  }
168
237
  }
169
238
  }
@@ -187,7 +256,16 @@ async function fingerprintTree(root, rel = "", out = new Map()) {
187
256
  }
188
257
  if (!entry.isFile())
189
258
  continue;
190
- out.set(childRel.split(path.sep).join("/"), await fingerprintFile(path.join(root, childRel)));
259
+ try {
260
+ out.set(childRel.split(path.sep).join("/"), await fingerprintFile(path.join(root, childRel)));
261
+ }
262
+ catch (err) {
263
+ // Same race, other end: a file listed a moment ago can be gone before it
264
+ // is hashed. An absent file simply does not appear in the fingerprint,
265
+ // which diffFingerprints already reads as "deleted" — the truth.
266
+ if (err?.code !== "ENOENT")
267
+ throw err;
268
+ }
191
269
  }
192
270
  return out;
193
271
  }
@@ -218,9 +296,38 @@ function mapFiles(files, originalWorkingDir, effectiveWorkingDir) {
218
296
  if (rel === "" || (!rel.startsWith("..") && !path.isAbsolute(rel))) {
219
297
  return path.join(effectiveWorkingDir, rel);
220
298
  }
299
+ // Deliberately passed through unmapped: there is nothing inside the
300
+ // isolated workspace that corresponds to a file from outside it, and
301
+ // rewriting the path would hand the agent a path that doesn't exist.
302
+ // The cost is real though — see escapedFiles() — so callers warn.
221
303
  return file;
222
304
  });
223
305
  }
306
+ /**
307
+ * Files that sit outside `workingDir`, i.e. the ones mapFiles cannot bring
308
+ * into an isolated workspace.
309
+ *
310
+ * These are not merely "still readable at their original path". On CLI routes
311
+ * each such file's PARENT DIRECTORY is passed to the spawned agent as an
312
+ * access grant (generic-cli.ts includedDirectories -> {{file_dirs}} ->
313
+ * `--add-dir`), so under workspace_policy copy/git_worktree a single
314
+ * out-of-tree entry silently widens the "isolated" workspace to include a
315
+ * host directory. files: ["~/.ssh/id_rsa"] grants ~/.ssh.
316
+ *
317
+ * Isolation is the caller's stated intent, so this is surfaced as a warning
318
+ * rather than silently honoured or silently dropped.
319
+ */
320
+ export function escapedFiles(files, originalWorkingDir) {
321
+ const root = resolveDir(originalWorkingDir);
322
+ const out = new Set();
323
+ for (const file of files) {
324
+ const rel = path.relative(root, path.resolve(file));
325
+ if (rel.startsWith("..") || path.isAbsolute(rel)) {
326
+ out.add(path.dirname(path.resolve(file)));
327
+ }
328
+ }
329
+ return [...out];
330
+ }
224
331
  function diffSummary(changes) {
225
332
  if (changes.length === 0)
226
333
  return "No file changes detected in the agent workspace.";
@@ -229,6 +336,23 @@ function diffSummary(changes) {
229
336
  counts[change.kind] += 1;
230
337
  return `${changes.length} changed file(s): ${counts.added} added, ${counts.modified} modified, ${counts.deleted} deleted.`;
231
338
  }
339
+ /**
340
+ * Note appended to an isolated run when `files` reach outside workingDir.
341
+ *
342
+ * Silence here would be the worst option: the caller asked for isolation and
343
+ * would reasonably assume they got it, while the agent was handed host
344
+ * directories via --add-dir.
345
+ */
346
+ function escapeNote(files, originalWorkingDir) {
347
+ const dirs = escapedFiles(files, originalWorkingDir);
348
+ if (dirs.length === 0)
349
+ return [];
350
+ return [
351
+ `ISOLATION WIDENED: ${dirs.length} director${dirs.length === 1 ? "y" : "ies"} outside ` +
352
+ `the workspace ${dirs.length === 1 ? "was" : "were"} granted to the agent because \`files\` referenced them — ` +
353
+ `${dirs.join(", ")}. Those paths are NOT isolated; edits there hit the real filesystem.`,
354
+ ];
355
+ }
232
356
  function attachWorkspace(result, workspace) {
233
357
  return {
234
358
  ...result,
@@ -251,7 +375,7 @@ async function prepareSharedWorkspace(policy, workingDir, files) {
251
375
  isolated: false,
252
376
  securityBoundary: "none",
253
377
  notes: policy === "shared_locked"
254
- ? ["Write-capable shared workspace dispatches are serialized within this router process."]
378
+ ? ["Write-capable shared workspace dispatches are serialized across ALL processes (see workspace-lock.ts; this was per-process until 304a1b5)."]
255
379
  : ["Shared workspace dispatches run directly in the caller's working directory."],
256
380
  });
257
381
  },
@@ -263,7 +387,9 @@ async function prepareCopyWorkspace(routeName, workingDir, files) {
263
387
  await pruneStaleCopyWorkspaces(root);
264
388
  const workspaceRoot = path.join(root, workspaceRunId(routeName));
265
389
  const effectiveWorkingDir = path.join(workspaceRoot, "workspace");
266
- await copyTree(originalWorkingDir, effectiveWorkingDir);
390
+ const skippedLinks = [];
391
+ const vanishedFiles = [];
392
+ await copyTree(originalWorkingDir, effectiveWorkingDir, "", skippedLinks, vanishedFiles);
267
393
  const before = await fingerprintTree(effectiveWorkingDir);
268
394
  return {
269
395
  policy: "copy",
@@ -288,6 +414,21 @@ async function prepareCopyWorkspace(routeName, workingDir, files) {
288
414
  notes: [
289
415
  "The source workspace was copied before dispatch, so edits in the agent workspace are not applied automatically.",
290
416
  "This isolates project state, but it is not a hardened OS sandbox for commands with host filesystem access.",
417
+ ...(vanishedFiles.length > 0
418
+ ? [
419
+ `${vanishedFiles.length} file(s) disappeared while the workspace was being ` +
420
+ `copied and are absent from it: ${vanishedFiles.slice(0, 5).join(", ")}` +
421
+ `${vanishedFiles.length > 5 ? ", …" : ""}. The copy is a snapshot of a ` +
422
+ `directory that was being written to.`,
423
+ ]
424
+ : []),
425
+ ...(skippedLinks.length > 0
426
+ ? [
427
+ `Dropped ${skippedLinks.length} symlink(s) pointing outside the workspace, which would ` +
428
+ `otherwise have resolved to real host paths from inside the copy: ${skippedLinks.join(", ")}.`,
429
+ ]
430
+ : []),
431
+ ...escapeNote(files, originalWorkingDir),
291
432
  ],
292
433
  });
293
434
  },
@@ -306,7 +447,8 @@ async function prepareGitWorktreeWorkspace(routeName, workingDir, files) {
306
447
  const workspaceRoot = path.join(gitWorkspaceRoot, workspaceRunId(routeName));
307
448
  const worktreeRoot = path.join(workspaceRoot, "worktree");
308
449
  await mkdir(workspaceRoot, { recursive: true });
309
- await git(["worktree", "add", "--detach", worktreeRoot, "HEAD"], gitRoot);
450
+ const baseCommit = await git(["rev-parse", "HEAD"], gitRoot);
451
+ await git(["worktree", "add", "--detach", worktreeRoot, baseCommit], gitRoot);
310
452
  const effectiveWorkingDir = prefix ? path.join(worktreeRoot, prefix) : worktreeRoot;
311
453
  await stat(effectiveWorkingDir);
312
454
  const before = await fingerprintTree(worktreeRoot);
@@ -325,6 +467,7 @@ async function prepareGitWorktreeWorkspace(routeName, workingDir, files) {
325
467
  originalWorkingDir,
326
468
  effectiveWorkingDir,
327
469
  workspaceRoot,
470
+ baseCommit,
328
471
  isolated: true,
329
472
  securityBoundary: "project_state_and_process_cwd",
330
473
  changedFiles,
@@ -333,6 +476,7 @@ async function prepareGitWorktreeWorkspace(routeName, workingDir, files) {
333
476
  notes: [
334
477
  "The git worktree starts from HEAD; uncommitted source-workspace changes are not copied into it.",
335
478
  "This isolates project state, but it is not a hardened OS sandbox for commands with host filesystem access.",
479
+ ...escapeNote(files, originalWorkingDir),
336
480
  ],
337
481
  });
338
482
  },
@@ -1 +1 @@
1
- {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../src/workspaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../src/workspaces.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,96 +1,99 @@
1
- {
2
- "name": "harness-dispatch",
3
- "version": "0.4.0",
4
- "description": "Turn locally installed coding harnesses (Claude Code, Codex, Cursor, Antigravity) and local/remote API endpoints into tools any AI can call, with async job handling for long-running agent work.",
5
- "keywords": [
6
- "mcp",
7
- "claude",
8
- "coding",
9
- "ai-agents",
10
- "llm",
11
- "cursor",
12
- "codex",
13
- "dispatch",
14
- "antigravity"
15
- ],
16
- "license": "MIT",
17
- "author": "Felix Stubner",
18
- "homepage": "https://fstubner.github.io/harness-dispatch/",
19
- "type": "module",
20
- "main": "./dist/index.js",
21
- "types": "./dist/index.d.ts",
22
- "exports": {
23
- ".": {
24
- "types": "./dist/index.d.ts",
25
- "import": "./dist/index.js"
26
- }
27
- },
28
- "bin": {
29
- "harness-dispatch": "./dist/bin.js"
30
- },
31
- "files": [
32
- "dist/",
33
- "data/",
34
- "config.default.yaml",
35
- "README.md"
36
- ],
37
- "engines": {
38
- "node": ">=24.15.0"
39
- },
40
- "publishConfig": {
41
- "access": "public",
42
- "provenance": true
43
- },
44
- "scripts": {
45
- "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
46
- "build": "npm run clean && tsc -p tsconfig.json",
47
- "check": "npm run typecheck && npm test",
48
- "dev": "tsx src/bin.ts",
49
- "smoke": "node scripts/smoke.mjs",
50
- "smoke:agents": "node scripts/smoke-agents.mjs",
51
- "test": "vitest run",
52
- "test:coverage": "vitest run --coverage",
53
- "test:watch": "vitest",
54
- "test:parity": "vitest run tests/scoring-parity.test.ts",
55
- "typecheck": "tsc --noEmit",
56
- "prepublishOnly": "npm run build",
57
- "prepack": "npm run build"
58
- },
59
- "dependencies": {
60
- "@modelcontextprotocol/sdk": "^1.29.0",
61
- "@opentelemetry/api": "^1.9.1",
62
- "@opentelemetry/auto-instrumentations-node": "^0.79.0",
63
- "@opentelemetry/core": "^2.8.0",
64
- "@opentelemetry/exporter-trace-otlp-http": "^0.221.0",
65
- "@opentelemetry/sdk-node": "^0.221.0",
66
- "cross-spawn": "^7.0.6",
67
- "js-yaml": "^4.2.0",
68
- "which": "^7.0.0",
69
- "zod": "^4.4.3"
70
- },
71
- "devDependencies": {
72
- "@types/cross-spawn": "^6.0.6",
73
- "@types/js-yaml": "^4.0.9",
74
- "@types/node": "^24.0.0",
75
- "@types/which": "^3.0.4",
76
- "@vitest/coverage-v8": "^4.1.10",
77
- "tsx": "^4.23.1",
78
- "typescript": "^6.0.3",
79
- "vitest": "^4.1.10"
80
- },
81
- "overrides": {
82
- "fast-uri": "^3.1.4",
83
- "body-parser": "^2.3.0",
84
- "@opentelemetry/core": "^2.8.0",
85
- "@opentelemetry/propagator-jaeger": "^2.9.0",
86
- "esbuild": "^0.28.1",
87
- "@hono/node-server": "^2.0.11"
88
- },
89
- "repository": {
90
- "type": "git",
91
- "url": "https://github.com/fstubner/harness-dispatch"
92
- },
93
- "bugs": {
94
- "url": "https://github.com/fstubner/harness-dispatch/issues"
95
- }
96
- }
1
+ {
2
+ "name": "harness-dispatch",
3
+ "version": "0.6.0",
4
+ "description": "Turn locally installed coding harnesses (Claude Code, Codex, Cursor, Antigravity) and local/remote API endpoints into tools any AI can call, with async job handling for long-running agent work.",
5
+ "keywords": [
6
+ "mcp",
7
+ "claude",
8
+ "coding",
9
+ "ai-agents",
10
+ "llm",
11
+ "cursor",
12
+ "codex",
13
+ "dispatch",
14
+ "antigravity"
15
+ ],
16
+ "license": "MIT",
17
+ "author": "Felix Stubner",
18
+ "homepage": "https://fstubner.github.io/harness-dispatch/",
19
+ "type": "module",
20
+ "main": "./dist/index.js",
21
+ "types": "./dist/index.d.ts",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "import": "./dist/index.js"
26
+ }
27
+ },
28
+ "bin": {
29
+ "harness-dispatch": "dist/bin.js"
30
+ },
31
+ "files": [
32
+ "dist/",
33
+ "data/",
34
+ "config.default.yaml",
35
+ "README.md",
36
+ "CHANGELOG.md"
37
+ ],
38
+ "engines": {
39
+ "node": ">=22.22.2"
40
+ },
41
+ "publishConfig": {
42
+ "access": "public",
43
+ "provenance": true
44
+ },
45
+ "scripts": {
46
+ "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
47
+ "build": "npm run clean && tsc -p tsconfig.json",
48
+ "check": "npm run typecheck && npm test",
49
+ "dev": "tsx src/bin.ts",
50
+ "smoke": "node scripts/smoke.mjs",
51
+ "smoke:agents": "node scripts/smoke-agents.mjs",
52
+ "test": "npm run build && vitest run",
53
+ "test:coverage": "npm run build && vitest run --coverage",
54
+ "test:watch": "vitest",
55
+ "test:parity": "vitest run tests/scoring-parity.test.ts",
56
+ "typecheck": "tsc --noEmit",
57
+ "prepublishOnly": "npm run build",
58
+ "prepack": "npm run build",
59
+ "test:unit": "vitest run"
60
+ },
61
+ "dependencies": {
62
+ "@modelcontextprotocol/sdk": "^1.29.0",
63
+ "@opentelemetry/api": "^1.9.1",
64
+ "@opentelemetry/core": "^2.8.0",
65
+ "@opentelemetry/exporter-trace-otlp-http": "^0.221.0",
66
+ "@opentelemetry/instrumentation-fs": "^0.40.0",
67
+ "@opentelemetry/instrumentation-http": "^0.221.0",
68
+ "@opentelemetry/sdk-node": "^0.221.0",
69
+ "cross-spawn": "^7.0.6",
70
+ "js-yaml": "^4.3.1",
71
+ "which": "^7.0.0",
72
+ "zod": "^4.4.3"
73
+ },
74
+ "devDependencies": {
75
+ "@types/cross-spawn": "^6.0.6",
76
+ "@types/js-yaml": "^4.0.9",
77
+ "@types/node": "^24.0.0",
78
+ "@types/which": "^3.0.4",
79
+ "@vitest/coverage-v8": "^4.1.10",
80
+ "tsx": "^4.23.1",
81
+ "typescript": "^6.0.3",
82
+ "vitest": "^4.1.10"
83
+ },
84
+ "overrides": {
85
+ "fast-uri": "^3.1.5",
86
+ "body-parser": "^2.3.0",
87
+ "@opentelemetry/core": "^2.8.0",
88
+ "@opentelemetry/propagator-jaeger": "^2.9.0",
89
+ "esbuild": "^0.28.1",
90
+ "@hono/node-server": "^2.0.11"
91
+ },
92
+ "repository": {
93
+ "type": "git",
94
+ "url": "git+https://github.com/fstubner/harness-dispatch.git"
95
+ },
96
+ "bugs": {
97
+ "url": "https://github.com/fstubner/harness-dispatch/issues"
98
+ }
99
+ }
@@ -1,49 +0,0 @@
1
- /**
2
- * Live dashboard renderer for harness-dispatch.
3
- *
4
- * Pure function `renderDashboard(state)` → ANSI-formatted string. Consumed
5
- * by:
6
- * - legacy dashboard tests.
7
- * - the hidden `dashboard --watch` compatibility alias.
8
- *
9
- * Keeping the renderer pure (no I/O) makes it unit-testable with a simple
10
- * snapshot-style assertion.
11
- */
12
- import type { ServiceConfig } from "../types.js";
13
- export interface BreakerState {
14
- tripped: boolean;
15
- failures: number;
16
- cooldownRemainingSec?: number;
17
- }
18
- export interface QuotaState {
19
- score: number;
20
- remaining?: number | null;
21
- limit?: number | null;
22
- localCallCount?: number;
23
- resetAt?: string;
24
- }
25
- export interface RecentEvent {
26
- kind: "stdout" | "stderr" | "tool_use" | "thinking" | "completion" | "error";
27
- service: string;
28
- at: number;
29
- message: string;
30
- }
31
- export interface DashboardState {
32
- services: Array<{
33
- name: string;
34
- config: ServiceConfig;
35
- reachable: boolean;
36
- }>;
37
- quotas: Record<string, QuotaState | undefined>;
38
- breakers: Record<string, BreakerState | undefined>;
39
- recentEvents: RecentEvent[];
40
- /** Optional "last refreshed at" timestamp. */
41
- generatedAt?: number;
42
- /** If true, the renderer will emit ANSI cursor codes (clear screen + home). */
43
- ansi?: boolean;
44
- }
45
- /**
46
- * Render a dashboard snapshot. Deterministic for a given state.
47
- */
48
- export declare function renderDashboard(state: DashboardState): string;
49
- //# sourceMappingURL=live.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/dashboard/live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7E,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;IAC/C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC,CAAC;IACnD,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAuDD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAkF7D"}