@earendil-works/pi-agent-core 0.87.1 → 0.99.1

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 (242) hide show
  1. package/README.md +4 -0
  2. package/dist/agent-loop.d.ts +27 -2
  3. package/dist/agent-loop.d.ts.map +1 -1
  4. package/dist/agent-loop.js +44 -15
  5. package/dist/agent-loop.js.map +1 -1
  6. package/dist/agent.d.ts +9 -0
  7. package/dist/agent.d.ts.map +1 -1
  8. package/dist/agent.js +3 -0
  9. package/dist/agent.js.map +1 -1
  10. package/dist/harness/agent-harness.d.ts.map +1 -1
  11. package/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
  12. package/dist/harness/compaction/branch-summarization.js.map +1 -1
  13. package/dist/harness/compaction/compaction.d.ts.map +1 -1
  14. package/dist/harness/compaction/compaction.js.map +1 -1
  15. package/dist/harness/compaction/utils.d.ts.map +1 -1
  16. package/dist/harness/compaction/utils.js.map +1 -1
  17. package/dist/harness/config.d.ts.map +1 -1
  18. package/dist/harness/config.js.map +1 -1
  19. package/dist/harness/context.d.ts.map +1 -1
  20. package/dist/harness/context.js.map +1 -1
  21. package/dist/harness/env/nodejs.d.ts.map +1 -1
  22. package/dist/harness/env/nodejs.js.map +1 -1
  23. package/dist/harness/events.d.ts.map +1 -1
  24. package/dist/harness/events.js.map +1 -1
  25. package/dist/harness/execution/assistant.d.ts.map +1 -1
  26. package/dist/harness/execution/assistant.js.map +1 -1
  27. package/dist/harness/execution/effect-gate.d.ts.map +1 -1
  28. package/dist/harness/execution/effect-gate.js.map +1 -1
  29. package/dist/harness/execution/tools.d.ts.map +1 -1
  30. package/dist/harness/execution/tools.js.map +1 -1
  31. package/dist/harness/hooks.d.ts.map +1 -1
  32. package/dist/harness/hooks.js.map +1 -1
  33. package/dist/harness/messages.d.ts.map +1 -1
  34. package/dist/harness/messages.js.map +1 -1
  35. package/dist/harness/pico3/bash.d.ts.map +1 -1
  36. package/dist/harness/pico3/bash.js.map +1 -1
  37. package/dist/harness/pico3/bounded.d.ts.map +1 -1
  38. package/dist/harness/pico3/bounded.js.map +1 -1
  39. package/dist/harness/pico3/chord.d.ts.map +1 -1
  40. package/dist/harness/pico3/chord.js.map +1 -1
  41. package/dist/harness/pico3/context.d.ts.map +1 -1
  42. package/dist/harness/pico3/context.js.map +1 -1
  43. package/dist/harness/pico3/harness.d.ts +4 -3
  44. package/dist/harness/pico3/harness.d.ts.map +1 -1
  45. package/dist/harness/pico3/harness.js.map +1 -1
  46. package/dist/harness/pico3/hooks.d.ts +2 -2
  47. package/dist/harness/pico3/hooks.d.ts.map +1 -1
  48. package/dist/harness/pico3/hooks.js.map +1 -1
  49. package/dist/harness/pico3/index.d.ts.map +1 -1
  50. package/dist/harness/pico3/jsonl.d.ts.map +1 -1
  51. package/dist/harness/pico3/jsonl.js.map +1 -1
  52. package/dist/harness/pico3/kinds/collapse.d.ts.map +1 -1
  53. package/dist/harness/pico3/kinds/collapse.js.map +1 -1
  54. package/dist/harness/pico3/kinds/entries.d.ts.map +1 -1
  55. package/dist/harness/pico3/kinds/frames.d.ts.map +1 -1
  56. package/dist/harness/pico3/kinds/frames.js.map +1 -1
  57. package/dist/harness/pico3/kinds/generation.d.ts.map +1 -1
  58. package/dist/harness/pico3/kinds/generation.js.map +1 -1
  59. package/dist/harness/pico3/kinds/job.d.ts.map +1 -1
  60. package/dist/harness/pico3/kinds/job.js.map +1 -1
  61. package/dist/harness/pico3/kinds/plugin.d.ts.map +1 -1
  62. package/dist/harness/pico3/kinds/plugin.js.map +1 -1
  63. package/dist/harness/pico3/kinds/post-tools.d.ts.map +1 -1
  64. package/dist/harness/pico3/kinds/post-tools.js.map +1 -1
  65. package/dist/harness/pico3/kinds/task-api.d.ts.map +1 -1
  66. package/dist/harness/pico3/kinds/task-api.js.map +1 -1
  67. package/dist/harness/pico3/kinds/tool.d.ts.map +1 -1
  68. package/dist/harness/pico3/kinds/tool.js.map +1 -1
  69. package/dist/harness/pico3/legacy-tracker.d.ts +11 -0
  70. package/dist/harness/pico3/legacy-tracker.d.ts.map +1 -0
  71. package/dist/harness/pico3/legacy-tracker.js +41 -0
  72. package/dist/harness/pico3/legacy-tracker.js.map +1 -0
  73. package/dist/harness/pico3/membrane.d.ts.map +1 -1
  74. package/dist/harness/pico3/membrane.js.map +1 -1
  75. package/dist/harness/pico3/memory.d.ts +1 -1
  76. package/dist/harness/pico3/memory.d.ts.map +1 -1
  77. package/dist/harness/pico3/memory.js.map +1 -1
  78. package/dist/harness/pico3/scheduler.d.ts +3 -0
  79. package/dist/harness/pico3/scheduler.d.ts.map +1 -1
  80. package/dist/harness/pico3/scheduler.js.map +1 -1
  81. package/dist/harness/pico3/session.d.ts +3 -2
  82. package/dist/harness/pico3/session.d.ts.map +1 -1
  83. package/dist/harness/pico3/session.js +5 -4
  84. package/dist/harness/pico3/session.js.map +1 -1
  85. package/dist/harness/pico3/system.d.ts +1 -1
  86. package/dist/harness/pico3/system.d.ts.map +1 -1
  87. package/dist/harness/pico3/system.js.map +1 -1
  88. package/dist/harness/pico3/types.d.ts +1 -1
  89. package/dist/harness/pico3/types.d.ts.map +1 -1
  90. package/dist/harness/pico3/types.js.map +1 -1
  91. package/dist/harness/pico3/view.d.ts.map +1 -1
  92. package/dist/harness/pico3/view.js +6 -12
  93. package/dist/harness/pico3/view.js.map +1 -1
  94. package/dist/harness/prompt-templates.d.ts.map +1 -1
  95. package/dist/harness/prompt-templates.js.map +1 -1
  96. package/dist/harness/result.d.ts.map +1 -1
  97. package/dist/harness/result.js.map +1 -1
  98. package/dist/harness/runtime/drive/boundary.d.ts.map +1 -1
  99. package/dist/harness/runtime/drive/boundary.js.map +1 -1
  100. package/dist/harness/runtime/drive/checkpoint.d.ts.map +1 -1
  101. package/dist/harness/runtime/drive/checkpoint.js.map +1 -1
  102. package/dist/harness/runtime/drive/deferred.d.ts.map +1 -1
  103. package/dist/harness/runtime/drive/deferred.js.map +1 -1
  104. package/dist/harness/runtime/drive/generation.d.ts.map +1 -1
  105. package/dist/harness/runtime/drive/generation.js.map +1 -1
  106. package/dist/harness/runtime/drive/reconcile.d.ts.map +1 -1
  107. package/dist/harness/runtime/drive/reconcile.js.map +1 -1
  108. package/dist/harness/runtime/drive/recovery.d.ts.map +1 -1
  109. package/dist/harness/runtime/drive/recovery.js.map +1 -1
  110. package/dist/harness/runtime/drive/response.d.ts.map +1 -1
  111. package/dist/harness/runtime/drive/response.js.map +1 -1
  112. package/dist/harness/runtime/drive/retry.d.ts.map +1 -1
  113. package/dist/harness/runtime/drive/retry.js.map +1 -1
  114. package/dist/harness/runtime/drive/structural.d.ts.map +1 -1
  115. package/dist/harness/runtime/drive/structural.js.map +1 -1
  116. package/dist/harness/runtime/drive/terminal.d.ts.map +1 -1
  117. package/dist/harness/runtime/drive/terminal.js.map +1 -1
  118. package/dist/harness/runtime/drive/tool-placement.d.ts.map +1 -1
  119. package/dist/harness/runtime/drive/tool-placement.js.map +1 -1
  120. package/dist/harness/runtime/drive/tools.d.ts.map +1 -1
  121. package/dist/harness/runtime/drive/tools.js.map +1 -1
  122. package/dist/harness/runtime/drive.d.ts.map +1 -1
  123. package/dist/harness/runtime/drive.js.map +1 -1
  124. package/dist/harness/runtime/harness.d.ts.map +1 -1
  125. package/dist/harness/runtime/harness.js.map +1 -1
  126. package/dist/harness/runtime/index.d.ts.map +1 -1
  127. package/dist/harness/runtime/lane.d.ts +17 -0
  128. package/dist/harness/runtime/lane.d.ts.map +1 -1
  129. package/dist/harness/runtime/lane.js.map +1 -1
  130. package/dist/harness/runtime/progress.d.ts.map +1 -1
  131. package/dist/harness/runtime/progress.js.map +1 -1
  132. package/dist/harness/runtime/reducer.d.ts.map +1 -1
  133. package/dist/harness/runtime/reducer.js.map +1 -1
  134. package/dist/harness/runtime/restore.d.ts.map +1 -1
  135. package/dist/harness/runtime/restore.js.map +1 -1
  136. package/dist/harness/runtime/transcript.d.ts.map +1 -1
  137. package/dist/harness/runtime/transcript.js.map +1 -1
  138. package/dist/harness/runtime/types.d.ts.map +1 -1
  139. package/dist/harness/runtime/types.js.map +1 -1
  140. package/dist/harness/session/commit.d.ts.map +1 -1
  141. package/dist/harness/session/commit.js.map +1 -1
  142. package/dist/harness/session/context.d.ts.map +1 -1
  143. package/dist/harness/session/context.js.map +1 -1
  144. package/dist/harness/session/fork-policy.d.ts.map +1 -1
  145. package/dist/harness/session/fork-policy.js.map +1 -1
  146. package/dist/harness/session/fork.d.ts.map +1 -1
  147. package/dist/harness/session/fork.js.map +1 -1
  148. package/dist/harness/session/in-memory-storage-state.d.ts.map +1 -1
  149. package/dist/harness/session/in-memory-storage-state.js.map +1 -1
  150. package/dist/harness/session/index.d.ts.map +1 -1
  151. package/dist/harness/session/jsonl/codec.d.ts.map +1 -1
  152. package/dist/harness/session/jsonl/codec.js.map +1 -1
  153. package/dist/harness/session/jsonl/fork.d.ts.map +1 -1
  154. package/dist/harness/session/jsonl/fork.js.map +1 -1
  155. package/dist/harness/session/jsonl/index.d.ts.map +1 -1
  156. package/dist/harness/session/jsonl/io.d.ts.map +1 -1
  157. package/dist/harness/session/jsonl/io.js.map +1 -1
  158. package/dist/harness/session/jsonl/legacy-v3.d.ts +1 -0
  159. package/dist/harness/session/jsonl/legacy-v3.d.ts.map +1 -1
  160. package/dist/harness/session/jsonl/legacy-v3.js.map +1 -1
  161. package/dist/harness/session/jsonl/repo.d.ts.map +1 -1
  162. package/dist/harness/session/jsonl/repo.js.map +1 -1
  163. package/dist/harness/session/jsonl/storage.d.ts +1 -0
  164. package/dist/harness/session/jsonl/storage.d.ts.map +1 -1
  165. package/dist/harness/session/jsonl/storage.js.map +1 -1
  166. package/dist/harness/session/jsonl/types.d.ts.map +1 -1
  167. package/dist/harness/session/memory.d.ts.map +1 -1
  168. package/dist/harness/session/memory.js.map +1 -1
  169. package/dist/harness/session/mutation-line.d.ts.map +1 -1
  170. package/dist/harness/session/mutation-line.js.map +1 -1
  171. package/dist/harness/session/session.d.ts.map +1 -1
  172. package/dist/harness/session/session.js.map +1 -1
  173. package/dist/harness/session/testing/benchmark/datasets.d.ts.map +1 -1
  174. package/dist/harness/session/testing/benchmark/datasets.js.map +1 -1
  175. package/dist/harness/session/testing/benchmark/session-repo.d.ts.map +1 -1
  176. package/dist/harness/session/testing/benchmark/session-repo.js.map +1 -1
  177. package/dist/harness/session/testing/benchmark/storage.d.ts.map +1 -1
  178. package/dist/harness/session/testing/benchmark/storage.js.map +1 -1
  179. package/dist/harness/session/testing/conformance/session-repo.d.ts.map +1 -1
  180. package/dist/harness/session/testing/conformance/session-repo.js.map +1 -1
  181. package/dist/harness/session/testing/conformance/storage.d.ts.map +1 -1
  182. package/dist/harness/session/testing/conformance/storage.js.map +1 -1
  183. package/dist/harness/session/testing/gating-storage.d.ts.map +1 -1
  184. package/dist/harness/session/testing/gating-storage.js.map +1 -1
  185. package/dist/harness/session/testing/index.d.ts.map +1 -1
  186. package/dist/harness/session/testing/instrumented-storage.d.ts.map +1 -1
  187. package/dist/harness/session/testing/instrumented-storage.js.map +1 -1
  188. package/dist/harness/session/testing/storage-decorator.d.ts.map +1 -1
  189. package/dist/harness/session/testing/storage-decorator.js.map +1 -1
  190. package/dist/harness/session/testing/types.d.ts.map +1 -1
  191. package/dist/harness/session/types.d.ts.map +1 -1
  192. package/dist/harness/session/types.js.map +1 -1
  193. package/dist/harness/session/values.d.ts +2 -2
  194. package/dist/harness/session/values.d.ts.map +1 -1
  195. package/dist/harness/session/values.js.map +1 -1
  196. package/dist/harness/skills.d.ts.map +1 -1
  197. package/dist/harness/skills.js.map +1 -1
  198. package/dist/harness/system-prompt.d.ts.map +1 -1
  199. package/dist/harness/system-prompt.js.map +1 -1
  200. package/dist/harness/telemetry.d.ts.map +1 -1
  201. package/dist/harness/telemetry.js.map +1 -1
  202. package/dist/harness/tools/bash.d.ts.map +1 -1
  203. package/dist/harness/tools/bash.js.map +1 -1
  204. package/dist/harness/tools/edit-diff.d.ts.map +1 -1
  205. package/dist/harness/tools/edit-diff.js.map +1 -1
  206. package/dist/harness/tools/edit.d.ts.map +1 -1
  207. package/dist/harness/tools/edit.js.map +1 -1
  208. package/dist/harness/tools/file-mutation-queue.d.ts.map +1 -1
  209. package/dist/harness/tools/file-mutation-queue.js.map +1 -1
  210. package/dist/harness/tools/image.d.ts.map +1 -1
  211. package/dist/harness/tools/image.js.map +1 -1
  212. package/dist/harness/tools/index.d.ts.map +1 -1
  213. package/dist/harness/tools/path-utils.d.ts.map +1 -1
  214. package/dist/harness/tools/path-utils.js.map +1 -1
  215. package/dist/harness/tools/read.d.ts.map +1 -1
  216. package/dist/harness/tools/read.js.map +1 -1
  217. package/dist/harness/tools/tool-context.d.ts.map +1 -1
  218. package/dist/harness/tools/write.d.ts.map +1 -1
  219. package/dist/harness/tools/write.js.map +1 -1
  220. package/dist/harness/types.d.ts.map +1 -1
  221. package/dist/harness/types.js.map +1 -1
  222. package/dist/harness/utils/adaptive-publisher.d.ts.map +1 -1
  223. package/dist/harness/utils/adaptive-publisher.js.map +1 -1
  224. package/dist/harness/utils/output-capture.d.ts.map +1 -1
  225. package/dist/harness/utils/output-capture.js.map +1 -1
  226. package/dist/harness/utils/shell-output.d.ts.map +1 -1
  227. package/dist/harness/utils/shell-output.js.map +1 -1
  228. package/dist/harness/utils/truncate.d.ts.map +1 -1
  229. package/dist/harness/utils/truncate.js.map +1 -1
  230. package/dist/harness/utils/usage.d.ts.map +1 -1
  231. package/dist/harness/utils/usage.js.map +1 -1
  232. package/dist/index.d.ts.map +1 -1
  233. package/dist/node.d.ts.map +1 -1
  234. package/dist/proxy.d.ts.map +1 -1
  235. package/dist/proxy.js.map +1 -1
  236. package/dist/search/index.d.ts.map +1 -1
  237. package/dist/stream-fn.d.ts.map +1 -1
  238. package/dist/stream-fn.js.map +1 -1
  239. package/dist/types.d.ts +30 -2
  240. package/dist/types.d.ts.map +1 -1
  241. package/dist/types.js.map +1 -1
  242. package/package.json +9 -10
@@ -1 +1 @@
1
- {"version":3,"file":"nodejs.js","sourceRoot":"","sources":["../../../src/harness/env/nodejs.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcess, spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { constants, createWriteStream, type WriteStream } from \"node:fs\";\nimport {\n\taccess,\n\tappendFile,\n\tlstat,\n\tmkdir,\n\tmkdtemp,\n\topen as openFile,\n\treaddir,\n\treadFile,\n\trealpath,\n\trename,\n\trm,\n\twriteFile,\n} from \"node:fs/promises\";\nimport { homedir, constants as osConstants, tmpdir } from \"node:os\";\nimport { basename, isAbsolute, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { Context } from \"../context.ts\";\nimport {\n\ttype ExecutionEnv,\n\tExecutionError,\n\terr,\n\tFileError,\n\ttype FileInfo,\n\ttype FileKind,\n\tok,\n\ttype Result,\n\ttype ShellExecOptions,\n\ttype ShellExecResult,\n\ttype TextLine,\n\ttype TextLineReader,\n\ttoError,\n} from \"../types.ts\";\nimport { OutputCapture } from \"../utils/output-capture.ts\";\n\nconst MAX_TIMEOUT_MS = 2_147_483_647;\nconst MAX_TIMEOUT_SECONDS = MAX_TIMEOUT_MS / 1000;\nconst EXIT_STDIO_GRACE_MS = 100;\nconst SPILL_HIGH_WATER_MARK = 8 * 1024 * 1024;\n\ntype SpillChunk = string | Uint8Array;\n\nfunction resolveTimeoutMs(timeout: number | undefined): Result<number | undefined, ExecutionError> {\n\tif (timeout === undefined) return ok(undefined);\n\tif (!Number.isFinite(timeout) || timeout <= 0) {\n\t\treturn err(new ExecutionError(\"timeout\", \"Invalid timeout: must be a finite number of seconds\"));\n\t}\n\n\tconst timeoutMs = timeout * 1000;\n\tif (timeoutMs > MAX_TIMEOUT_MS) {\n\t\treturn err(new ExecutionError(\"timeout\", `Invalid timeout: maximum is ${MAX_TIMEOUT_SECONDS} seconds`));\n\t}\n\treturn ok(timeoutMs);\n}\n\nfunction resolvePath(cwd: string, path: string): string {\n\tlet normalized = path;\n\tif (normalized === \"~\") {\n\t\tnormalized = homedir();\n\t} else if (normalized.startsWith(\"~/\") || (process.platform === \"win32\" && normalized.startsWith(\"~\\\\\"))) {\n\t\tnormalized = join(homedir(), normalized.slice(2));\n\t} else if (normalized.startsWith(\"file://\")) {\n\t\ttry {\n\t\t\tnormalized = fileURLToPath(normalized);\n\t\t} catch {\n\t\t\t// Keep malformed URLs as ordinary paths so filesystem methods preserve their non-throwing contract.\n\t\t}\n\t}\n\treturn isAbsolute(normalized) ? resolve(normalized) : resolve(cwd, normalized);\n}\n\nfunction fileKindFromStats(stats: {\n\tisFile(): boolean;\n\tisDirectory(): boolean;\n\tisSymbolicLink(): boolean;\n}): FileKind | undefined {\n\tif (stats.isFile()) return \"file\";\n\tif (stats.isDirectory()) return \"directory\";\n\tif (stats.isSymbolicLink()) return \"symlink\";\n\treturn undefined;\n}\n\nfunction fileInfoFromStats(\n\tpath: string,\n\tstats: { isFile(): boolean; isDirectory(): boolean; isSymbolicLink(): boolean; size: number; mtimeMs: number },\n): Result<FileInfo, FileError> {\n\tconst kind = fileKindFromStats(stats);\n\tif (!kind) return err(new FileError(\"invalid\", \"Unsupported file type\", path));\n\treturn ok({\n\t\tname: basename(path),\n\t\tpath,\n\t\tkind,\n\t\tsize: stats.size,\n\t\tmtimeMs: stats.mtimeMs,\n\t});\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n\treturn error instanceof Error && \"code\" in error;\n}\n\nfunction toFileError(error: unknown, fallbackPath?: string): FileError {\n\tif (error instanceof FileError) return error;\n\tconst cause = toError(error);\n\tconst nodeError = isNodeError(error) ? error : undefined;\n\tconst path = typeof nodeError?.path === \"string\" ? nodeError.path : fallbackPath;\n\tif (nodeError) {\n\t\tconst message = nodeError.message;\n\t\tswitch (nodeError.code) {\n\t\t\tcase \"ABORT_ERR\":\n\t\t\t\treturn new FileError(\"aborted\", message, path, cause);\n\t\t\tcase \"ENOENT\":\n\t\t\t\treturn new FileError(\"not_found\", message, path, cause);\n\t\t\tcase \"EACCES\":\n\t\t\tcase \"EPERM\":\n\t\t\t\treturn new FileError(\"permission_denied\", message, path, cause);\n\t\t\tcase \"ENOTDIR\":\n\t\t\t\treturn new FileError(\"not_directory\", message, path, cause);\n\t\t\tcase \"EISDIR\":\n\t\t\t\treturn new FileError(\"is_directory\", message, path, cause);\n\t\t\tcase \"EINVAL\":\n\t\t\t\treturn new FileError(\"invalid\", message, path, cause);\n\t\t}\n\t}\n\treturn new FileError(\"unknown\", cause.message, path, cause);\n}\n\nfunction abortResult<TValue>(signal: AbortSignal | undefined, path?: string): Result<TValue, FileError> | undefined {\n\treturn signal?.aborted ? err(new FileError(\"aborted\", \"aborted\", path)) : undefined;\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function runCommand(\n\tcommand: string,\n\targs: string[],\n\ttimeoutMs: number,\n): Promise<{ stdout: string; status: number | null }> {\n\treturn await new Promise((resolve) => {\n\t\tlet stdout = \"\";\n\t\tlet child: ReturnType<typeof spawn>;\n\t\ttry {\n\t\t\tchild = spawn(command, args, {\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\t\t\twindowsHide: true,\n\t\t\t});\n\t\t} catch {\n\t\t\tresolve({ stdout: \"\", status: null });\n\t\t\treturn;\n\t\t}\n\t\tconst timeout = setTimeout(() => {\n\t\t\tif (child.pid) killProcessTree(child.pid);\n\t\t}, timeoutMs);\n\t\tchild.stdout?.setEncoding(\"utf8\");\n\t\tchild.stdout?.on(\"data\", (chunk: string) => {\n\t\t\tstdout += chunk;\n\t\t});\n\t\tchild.on(\"error\", () => {\n\t\t\tclearTimeout(timeout);\n\t\t\tresolve({ stdout: \"\", status: null });\n\t\t});\n\t\tchild.on(\"close\", (status) => {\n\t\t\tclearTimeout(timeout);\n\t\t\tresolve({ stdout, status });\n\t\t});\n\t});\n}\n\nasync function findBashOnPath(): Promise<string | null> {\n\tconst result =\n\t\tprocess.platform === \"win32\"\n\t\t\t? await runCommand(\"where\", [\"bash.exe\"], 5000)\n\t\t\t: await runCommand(\"which\", [\"bash\"], 5000);\n\tif (result.status !== 0 || !result.stdout) return null;\n\tconst firstMatch = result.stdout.trim().split(/\\r?\\n/)[0];\n\treturn firstMatch && (await pathExists(firstMatch)) ? firstMatch : null;\n}\n\ninterface ShellConfig {\n\tshell: string;\n\targs: string[];\n\tcommandTransport?: \"argv\" | \"stdin\";\n}\n\nfunction isLegacyWslBashPath(path: string): boolean {\n\tconst normalized = path.replace(/\\//g, \"\\\\\").toLowerCase();\n\treturn /^[a-z]:\\\\windows\\\\(?:system32|sysnative)\\\\bash\\.exe$/.test(normalized);\n}\n\nfunction getBashShellConfig(shell: string): ShellConfig {\n\treturn isLegacyWslBashPath(shell) ? { shell, args: [\"-s\"], commandTransport: \"stdin\" } : { shell, args: [\"-c\"] };\n}\n\nasync function getShellConfig(customShellPath?: string): Promise<Result<ShellConfig, ExecutionError>> {\n\tif (customShellPath) {\n\t\tif (await pathExists(customShellPath)) {\n\t\t\treturn ok(getBashShellConfig(customShellPath));\n\t\t}\n\t\treturn err(new ExecutionError(\"shell_unavailable\", `Custom shell path not found: ${customShellPath}`));\n\t}\n\tif (process.platform === \"win32\") {\n\t\tconst candidates: string[] = [];\n\t\tconst programFiles = process.env.ProgramFiles;\n\t\tif (programFiles) candidates.push(`${programFiles}\\\\Git\\\\bin\\\\bash.exe`);\n\t\tconst programFilesX86 = process.env[\"ProgramFiles(x86)\"];\n\t\tif (programFilesX86) candidates.push(`${programFilesX86}\\\\Git\\\\bin\\\\bash.exe`);\n\t\tfor (const candidate of candidates) {\n\t\t\tif (await pathExists(candidate)) {\n\t\t\t\treturn ok(getBashShellConfig(candidate));\n\t\t\t}\n\t\t}\n\t\tconst bashOnPath = await findBashOnPath();\n\t\tif (bashOnPath) {\n\t\t\treturn ok(getBashShellConfig(bashOnPath));\n\t\t}\n\t\treturn err(\n\t\t\tnew ExecutionError(\n\t\t\t\t\"shell_unavailable\",\n\t\t\t\t`No bash shell found. Options:\\n` +\n\t\t\t\t\t` 1. Install Git for Windows: https://git-scm.com/download/win\\n` +\n\t\t\t\t\t` 2. Add your bash to PATH (Cygwin, MSYS2, etc.)\\n` +\n\t\t\t\t\t\" 3. Configure an explicit shellPath\\n\\n\" +\n\t\t\t\t\t`Searched Git Bash in:\\n${candidates.map((path) => ` ${path}`).join(\"\\n\")}`,\n\t\t\t),\n\t\t);\n\t}\n\n\tif (await pathExists(\"/bin/bash\")) {\n\t\treturn ok(getBashShellConfig(\"/bin/bash\"));\n\t}\n\tconst bashOnPath = await findBashOnPath();\n\tif (bashOnPath) {\n\t\treturn ok(getBashShellConfig(bashOnPath));\n\t}\n\treturn ok({ shell: \"sh\", args: [\"-c\"] });\n}\n\nfunction getShellEnv(\n\tbaseEnv?: NodeJS.ProcessEnv,\n\textraEnv?: Record<string, string>,\n\tinheritEnv = true,\n): NodeJS.ProcessEnv {\n\tif (!inheritEnv) return { ...extraEnv };\n\treturn {\n\t\t...process.env,\n\t\t...baseEnv,\n\t\t...extraEnv,\n\t};\n}\n\nfunction killProcessTree(pid: number): void {\n\tif (process.platform === \"win32\") {\n\t\ttry {\n\t\t\tconst child = spawn(\n\t\t\t\tjoin(process.env.SystemRoot ?? \"C:\\\\Windows\", \"System32\", \"taskkill.exe\"),\n\t\t\t\t[\"/F\", \"/T\", \"/PID\", String(pid)],\n\t\t\t\t{\n\t\t\t\t\tstdio: \"ignore\",\n\t\t\t\t\tdetached: true,\n\t\t\t\t\twindowsHide: true,\n\t\t\t\t},\n\t\t\t);\n\t\t\t// A failed spawn emits \"error\" asynchronously; consume it to avoid crashing Node.\n\t\t\tchild.once(\"error\", () => {});\n\t\t} catch {\n\t\t\t// Ignore errors.\n\t\t}\n\t\treturn;\n\t}\n\n\ttry {\n\t\tprocess.kill(-pid, \"SIGKILL\");\n\t} catch {\n\t\ttry {\n\t\t\tprocess.kill(pid, \"SIGKILL\");\n\t\t} catch {\n\t\t\t// Process already dead.\n\t\t}\n\t}\n}\n\nfunction waitForChildProcess(\n\tchild: ChildProcess,\n\tspillIsDraining: () => boolean,\n): Promise<{ code: number | null; signal: NodeJS.Signals | null }> {\n\treturn new Promise((resolvePromise, reject) => {\n\t\tlet settled = false;\n\t\tlet exited = false;\n\t\tlet exitCode: number | null = null;\n\t\tlet exitSignal: NodeJS.Signals | null = null;\n\t\tlet postExitTimer: ReturnType<typeof setTimeout> | undefined;\n\t\tlet stdoutEnded = child.stdout === null;\n\t\tlet stderrEnded = child.stderr === null;\n\n\t\tconst cleanup = (): void => {\n\t\t\tif (postExitTimer) clearTimeout(postExitTimer);\n\t\t\tchild.removeListener(\"error\", onError);\n\t\t\tchild.removeListener(\"exit\", onExit);\n\t\t\tchild.removeListener(\"close\", onClose);\n\t\t\tchild.stdout?.removeListener(\"end\", onStdoutEnd);\n\t\t\tchild.stderr?.removeListener(\"end\", onStderrEnd);\n\t\t\tchild.stdout?.removeListener(\"data\", onData);\n\t\t\tchild.stderr?.removeListener(\"data\", onData);\n\t\t};\n\t\tconst finalize = (): void => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tchild.stdout?.destroy();\n\t\t\tchild.stderr?.destroy();\n\t\t\tresolvePromise({ code: exitCode, signal: exitSignal });\n\t\t};\n\t\tconst maybeFinalizeAfterExit = (): void => {\n\t\t\tif (exited && stdoutEnded && stderrEnded) finalize();\n\t\t};\n\t\tconst armIdleTimer = (): void => {\n\t\t\tif (postExitTimer) clearTimeout(postExitTimer);\n\t\t\tpostExitTimer = setTimeout(() => {\n\t\t\t\tif (spillIsDraining()) armIdleTimer();\n\t\t\t\telse finalize();\n\t\t\t}, EXIT_STDIO_GRACE_MS);\n\t\t};\n\t\tconst onData = (): void => {\n\t\t\tif (exited && !settled) armIdleTimer();\n\t\t};\n\t\tconst onStdoutEnd = (): void => {\n\t\t\tstdoutEnded = true;\n\t\t\tmaybeFinalizeAfterExit();\n\t\t};\n\t\tconst onStderrEnd = (): void => {\n\t\t\tstderrEnded = true;\n\t\t\tmaybeFinalizeAfterExit();\n\t\t};\n\t\tconst onError = (error: Error): void => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\treject(error);\n\t\t};\n\t\tconst onExit = (code: number | null, signal: NodeJS.Signals | null): void => {\n\t\t\texited = true;\n\t\t\texitCode = code;\n\t\t\texitSignal = signal;\n\t\t\tmaybeFinalizeAfterExit();\n\t\t\tif (!settled) armIdleTimer();\n\t\t};\n\t\tconst onClose = (code: number | null, signal: NodeJS.Signals | null): void => {\n\t\t\texitCode = code;\n\t\t\texitSignal = signal;\n\t\t\tfinalize();\n\t\t};\n\n\t\tchild.stdout?.once(\"end\", onStdoutEnd);\n\t\tchild.stderr?.once(\"end\", onStderrEnd);\n\t\tchild.stdout?.on(\"data\", onData);\n\t\tchild.stderr?.on(\"data\", onData);\n\t\tchild.once(\"error\", onError);\n\t\tchild.once(\"exit\", onExit);\n\t\tchild.once(\"close\", onClose);\n\t});\n}\n\n/** Strict LF reader; Node readline does not report whether its final line was newline-terminated. */\nclass NodeTextLineReader implements TextLineReader {\n\tprivate readonly file: Awaited<ReturnType<typeof openFile>>;\n\tprivate readonly path: string;\n\tprivate readonly decoder = new TextDecoder();\n\tprivate readonly chunk = new Uint8Array(64 * 1024);\n\tprivate byteOffset = 0;\n\tprivate buffered = \"\";\n\tprivate ended = false;\n\tprivate closed = false;\n\n\tconstructor(file: Awaited<ReturnType<typeof openFile>>, path: string) {\n\t\tthis.file = file;\n\t\tthis.path = path;\n\t}\n\n\tasync readLine(context: Context): Promise<Result<TextLine | undefined, FileError>> {\n\t\tconst aborted = abortResult<TextLine | undefined>(context.abortSignal, this.path);\n\t\tif (aborted) return aborted;\n\t\tif (this.closed) return err(new FileError(\"invalid\", \"Text line reader is closed\", this.path));\n\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\tconst newline = this.buffered.indexOf(\"\\n\");\n\t\t\t\tif (newline !== -1) {\n\t\t\t\t\tconst text = this.buffered.slice(0, newline);\n\t\t\t\t\tthis.buffered = this.buffered.slice(newline + 1);\n\t\t\t\t\treturn ok({ text, terminated: true });\n\t\t\t\t}\n\t\t\t\tif (this.ended) {\n\t\t\t\t\tif (this.buffered.length === 0) return ok(undefined);\n\t\t\t\t\tconst text = this.buffered;\n\t\t\t\t\tthis.buffered = \"\";\n\t\t\t\t\treturn ok({ text, terminated: false });\n\t\t\t\t}\n\n\t\t\t\t// Explicit positions allow an aborted read to be retried without skipping bytes.\n\t\t\t\tconst { bytesRead } = await this.file.read(this.chunk, 0, this.chunk.length, this.byteOffset);\n\t\t\t\tconst afterReadAbort = abortResult<TextLine | undefined>(context.abortSignal, this.path);\n\t\t\t\tif (afterReadAbort) return afterReadAbort;\n\t\t\t\tthis.byteOffset += bytesRead;\n\t\t\t\tif (bytesRead === 0) {\n\t\t\t\t\tthis.buffered += this.decoder.decode();\n\t\t\t\t\tthis.ended = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.buffered += this.decoder.decode(this.chunk.subarray(0, bytesRead), { stream: true });\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, this.path));\n\t\t}\n\t}\n\n\tasync close(_context: Context): Promise<void> {\n\t\tif (this.closed) return;\n\t\tthis.closed = true;\n\t\tthis.buffered = \"\";\n\t\ttry {\n\t\t\tawait this.file.close();\n\t\t} catch {\n\t\t\t// Closing is best-effort, including after cancellation or an earlier I/O failure.\n\t\t}\n\t}\n}\n\nexport class NodeExecutionEnv implements ExecutionEnv {\n\tcwd: string;\n\tprivate shellPath?: string;\n\tprivate shellEnv?: NodeJS.ProcessEnv;\n\tprivate activeChildPids = new Set<number>();\n\n\tconstructor(options: { cwd: string; shellPath?: string; shellEnv?: NodeJS.ProcessEnv }) {\n\t\tthis.cwd = options.cwd;\n\t\tthis.shellPath = options.shellPath;\n\t\tthis.shellEnv = options.shellEnv;\n\t}\n\n\tasync absolutePath(path: string, _context: Context): Promise<Result<string, FileError>> {\n\t\treturn ok(resolvePath(this.cwd, path));\n\t}\n\n\tasync joinPath(parts: string[], _context: Context): Promise<Result<string, FileError>> {\n\t\treturn ok(join(...parts));\n\t}\n\n\tasync exec(\n\t\tcommand: string,\n\t\toptions: ShellExecOptions | undefined,\n\t\tcontext: Context,\n\t): Promise<Result<ShellExecResult, ExecutionError>> {\n\t\tconst signal = context.abortSignal;\n\t\tif (signal?.aborted) return err(new ExecutionError(\"aborted\", \"aborted\"));\n\t\tconst timeoutMsResult = resolveTimeoutMs(options?.timeout);\n\t\tif (!timeoutMsResult.ok) return err(timeoutMsResult.error);\n\t\tconst timeoutMs = timeoutMsResult.value;\n\n\t\tconst cwd = options?.cwd ? resolvePath(this.cwd, options.cwd) : this.cwd;\n\t\tconst shellConfig = await getShellConfig(this.shellPath);\n\t\tif (!shellConfig.ok) return shellConfig;\n\t\ttry {\n\t\t\tawait access(cwd, constants.F_OK);\n\t\t} catch (error) {\n\t\t\tconst cause = toError(error);\n\t\t\treturn err(\n\t\t\t\tnew ExecutionError(\n\t\t\t\t\t\"spawn_error\",\n\t\t\t\t\t`Working directory does not exist: ${cwd}\\nCannot execute bash commands.`,\n\t\t\t\t\tcause,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn await new Promise((resolvePromise) => {\n\t\t\tlet settled = false;\n\t\t\tlet timedOut = false;\n\t\t\tlet callbackError: ExecutionError | undefined;\n\t\t\tlet spillError: ExecutionError | undefined;\n\t\t\tlet child: ReturnType<typeof spawn> | undefined;\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\t\t\tconst spillPrefix: SpillChunk[] = [];\n\t\t\tlet spillPath: string | undefined;\n\t\t\tconst spillQueue: SpillChunk[] = [];\n\t\t\tlet spillStart: Promise<void> | undefined;\n\t\t\tlet spillStream: WriteStream | undefined;\n\t\t\tlet spillBackpressured = false;\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tif (child?.pid) killProcessTree(child.pid);\n\t\t\t};\n\t\t\tconst failCallback = (error: unknown) => {\n\t\t\t\tif (callbackError !== undefined) return;\n\t\t\t\tconst cause = toError(error);\n\t\t\t\tcallbackError = new ExecutionError(\"callback_error\", cause.message, cause);\n\t\t\t\tonAbort();\n\t\t\t};\n\t\t\tlet capture: OutputCapture;\n\t\t\ttry {\n\t\t\t\tcapture = new OutputCapture(options?.capture, context, {\n\t\t\t\t\tonUpdate: options?.onUpdate,\n\t\t\t\t\tonError: failCallback,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconst cause = toError(error);\n\t\t\t\tresolvePromise(err(new ExecutionError(\"unknown\", cause.message, cause)));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst settle = (result: Result<ShellExecResult, ExecutionError>) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\tif (signal) signal.removeEventListener(\"abort\", onAbort);\n\t\t\t\tif (child?.pid) this.activeChildPids.delete(child.pid);\n\t\t\t\tcapture.dispose();\n\t\t\t\tresolvePromise(result);\n\t\t\t};\n\t\t\tconst pauseOutput = () => {\n\t\t\t\tchild?.stdout?.pause();\n\t\t\t\tchild?.stderr?.pause();\n\t\t\t};\n\t\t\tconst resumeOutput = () => {\n\t\t\t\tif (callbackError || spillError || timedOut || signal?.aborted || spillBackpressured) return;\n\t\t\t\tchild?.stdout?.resume();\n\t\t\t\tchild?.stderr?.resume();\n\t\t\t};\n\t\t\tconst failSpill = (error: unknown) => {\n\t\t\t\tif (spillError !== undefined) return;\n\t\t\t\tconst cause = toError(error);\n\t\t\t\tspillError = new ExecutionError(\n\t\t\t\t\t\"unknown\",\n\t\t\t\t\t`Failed to preserve complete shell output: ${cause.message}`,\n\t\t\t\t\tcause,\n\t\t\t\t);\n\t\t\t\tspillBackpressured = false;\n\t\t\t\tonAbort();\n\t\t\t};\n\t\t\tconst writeSpill = (chunk: SpillChunk): void => {\n\t\t\t\tif (spillStream === undefined || chunk.length === 0) return;\n\t\t\t\tif (spillStream.write(chunk) || spillBackpressured) return;\n\t\t\t\tspillBackpressured = true;\n\t\t\t\tpauseOutput();\n\t\t\t\tspillStream.once(\"drain\", () => {\n\t\t\t\t\tspillBackpressured = false;\n\t\t\t\t\tresumeOutput();\n\t\t\t\t});\n\t\t\t};\n\t\t\tconst startSpill = (chunk: SpillChunk): void => {\n\t\t\t\tif (spillStream !== undefined) {\n\t\t\t\t\twriteSpill(chunk);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tspillQueue.push(chunk);\n\t\t\t\tif (spillStart !== undefined) return;\n\t\t\t\tpauseOutput();\n\t\t\t\tspillStart = (async () => {\n\t\t\t\t\tconst created = await this.createTempFile({ prefix: \"pi-output-\", suffix: \".log\" }, context);\n\t\t\t\t\tif (!created.ok) throw created.error;\n\t\t\t\t\tspillPath = created.value;\n\t\t\t\t\tcapture.setSpillPath(spillPath);\n\t\t\t\t\tspillStream = createWriteStream(spillPath, { flags: \"a\", highWaterMark: SPILL_HIGH_WATER_MARK });\n\t\t\t\t\tspillStream.on(\"error\", failSpill);\n\t\t\t\t\tfor (const queued of spillQueue) writeSpill(queued);\n\t\t\t\t\tspillQueue.length = 0;\n\t\t\t\t})()\n\t\t\t\t\t.catch(failSpill)\n\t\t\t\t\t.finally(resumeOutput);\n\t\t\t};\n\t\t\tconst finishSpill = async (): Promise<void> => {\n\t\t\t\tawait spillStart;\n\t\t\t\tconst stream = spillStream;\n\t\t\t\tif (stream === undefined || spillError !== undefined || stream.destroyed) return;\n\t\t\t\tawait new Promise<void>((resolveFinish) => {\n\t\t\t\t\tstream.once(\"error\", () => resolveFinish());\n\t\t\t\t\tstream.once(\"finish\", resolveFinish);\n\t\t\t\t\tstream.end();\n\t\t\t\t});\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst commandFromStdin = shellConfig.value.commandTransport === \"stdin\";\n\t\t\t\tchild = spawn(\n\t\t\t\t\tshellConfig.value.shell,\n\t\t\t\t\tcommandFromStdin ? shellConfig.value.args : [...shellConfig.value.args, command],\n\t\t\t\t\t{\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tdetached: process.platform !== \"win32\",\n\t\t\t\t\t\tenv: getShellEnv(this.shellEnv, options?.env, options?.inheritEnv),\n\t\t\t\t\t\tstdio: [commandFromStdin ? \"pipe\" : \"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\t\t\twindowsHide: true,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tif (child.pid) this.activeChildPids.add(child.pid);\n\t\t\t\tif (commandFromStdin) {\n\t\t\t\t\tchild.stdin?.on(\"error\", () => {});\n\t\t\t\t\tchild.stdin?.end(command);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst cause = toError(error);\n\t\t\t\tsettle(err(new ExecutionError(\"spawn_error\", cause.message, cause)));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttimeoutId =\n\t\t\t\ttimeoutMs === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: setTimeout(() => {\n\t\t\t\t\t\t\ttimedOut = true;\n\t\t\t\t\t\t\tonAbort();\n\t\t\t\t\t\t}, timeoutMs);\n\n\t\t\tif (signal) {\n\t\t\t\tif (signal.aborted) onAbort();\n\t\t\t\telse signal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t}\n\n\t\t\tconst feed = (chunk: Uint8Array) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst wasTruncated = capture.truncated;\n\t\t\t\t\tcapture.push(chunk);\n\t\t\t\t\tif (!options?.capture?.spill || chunk.length === 0) return;\n\t\t\t\t\tif (spillPath !== undefined || wasTruncated) {\n\t\t\t\t\t\tstartSpill(chunk);\n\t\t\t\t\t} else if (capture.truncated) {\n\t\t\t\t\t\tfor (const prefix of spillPrefix) startSpill(prefix);\n\t\t\t\t\t\tspillPrefix.length = 0;\n\t\t\t\t\t\tstartSpill(chunk);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tspillPrefix.push(chunk);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfailCallback(error);\n\t\t\t\t}\n\t\t\t};\n\t\t\tchild.stdout?.on(\"data\", feed);\n\t\t\tchild.stderr?.on(\"data\", feed);\n\n\t\t\tvoid waitForChildProcess(\n\t\t\t\tchild,\n\t\t\t\t() =>\n\t\t\t\t\tspillError === undefined &&\n\t\t\t\t\tspillStart !== undefined &&\n\t\t\t\t\t(spillStream === undefined || spillBackpressured),\n\t\t\t).then(\n\t\t\t\tasync ({ code, signal: exitSignal }) => {\n\t\t\t\t\tawait finishSpill();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcapture.finish();\n\t\t\t\t\t\tcapture.flush();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tfailCallback(error);\n\t\t\t\t\t}\n\t\t\t\t\tif (callbackError) {\n\t\t\t\t\t\tsettle(err(callbackError));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (timedOut) {\n\t\t\t\t\t\tsettle(err(new ExecutionError(\"timeout\", `timeout:${options?.timeout}`)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\t\tsettle(err(new ExecutionError(\"aborted\", \"aborted\")));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (spillError) {\n\t\t\t\t\t\tsettle(err(spillError));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst output = capture.snapshot();\n\t\t\t\t\t// A process killed by a signal (e.g. OOM killer) has no exit code; map it\n\t\t\t\t\t// to the conventional 128 + signal number so callers do not mistake it\n\t\t\t\t\t// for a successful exit.\n\t\t\t\t\tconst exitCode = code ?? (exitSignal ? 128 + (osConstants.signals[exitSignal] ?? 0) : 1);\n\t\t\t\t\tsettle(\n\t\t\t\t\t\tok({\n\t\t\t\t\t\t\texitCode,\n\t\t\t\t\t\t\ttruncation: output.truncation,\n\t\t\t\t\t\t\t...(output.spillPath === undefined ? {} : { spillPath: output.spillPath }),\n\t\t\t\t\t\t\t...(output.lastLineBytes === undefined ? {} : { lastLineBytes: output.lastLineBytes }),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\t(error: Error) => settle(err(new ExecutionError(\"spawn_error\", error.message, error))),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync openTextLineReader(path: string, context: Context): Promise<Result<TextLineReader, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst aborted = abortResult<TextLineReader>(context.abortSignal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tconst file = await openFile(resolved, \"r\");\n\t\t\tconst afterOpenAbort = abortResult<TextLineReader>(context.abortSignal, resolved);\n\t\t\tif (afterOpenAbort) {\n\t\t\t\tawait file.close().catch(() => undefined);\n\t\t\t\treturn afterOpenAbort;\n\t\t\t}\n\t\t\treturn ok(new NodeTextLineReader(file, resolved));\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync readTextFile(path: string, context: Context): Promise<Result<string, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst signal = context.abortSignal;\n\t\tconst aborted = abortResult<string>(signal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\treturn ok(await readFile(resolved, { encoding: \"utf8\", signal }));\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync readTextLines(\n\t\tpath: string,\n\t\toptions: { maxLines?: number } | undefined,\n\t\tcontext: Context,\n\t): Promise<Result<string[], FileError>> {\n\t\tif (options?.maxLines !== undefined && options.maxLines <= 0) return ok([]);\n\t\tconst opened = await this.openTextLineReader(path, context);\n\t\tif (!opened.ok) return opened;\n\t\tconst lines: string[] = [];\n\t\ttry {\n\t\t\twhile (options?.maxLines === undefined || lines.length < options.maxLines) {\n\t\t\t\tconst line = await opened.value.readLine(context);\n\t\t\t\tif (!line.ok) return line;\n\t\t\t\tif (line.value === undefined) break;\n\t\t\t\tlines.push(line.value.text);\n\t\t\t}\n\t\t\treturn ok(lines);\n\t\t} finally {\n\t\t\tawait opened.value.close(context);\n\t\t}\n\t}\n\n\tasync readBinaryFile(path: string, context: Context): Promise<Result<Uint8Array, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst signal = context.abortSignal;\n\t\tconst aborted = abortResult<Uint8Array>(signal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\treturn ok(await readFile(resolved, { signal }));\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync writeFile(path: string, content: string | Uint8Array, context: Context): Promise<Result<void, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst signal = context.abortSignal;\n\t\tconst aborted = abortResult<void>(signal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tawait mkdir(resolve(resolved, \"..\"), { recursive: true });\n\t\t\tconst afterMkdirAbort = abortResult<void>(signal, resolved);\n\t\t\tif (afterMkdirAbort) return afterMkdirAbort;\n\t\t\tawait writeFile(resolved, content, { signal });\n\t\t\treturn ok(undefined);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync appendFile(path: string, content: string | Uint8Array, context: Context): Promise<Result<void, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst signal = context.abortSignal;\n\t\tconst aborted = abortResult<void>(signal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tawait mkdir(resolve(resolved, \"..\"), { recursive: true });\n\t\t\tconst afterMkdirAbort = abortResult<void>(signal, resolved);\n\t\t\tif (afterMkdirAbort) return afterMkdirAbort;\n\t\t\tawait appendFile(resolved, content);\n\t\t\tconst afterAppendAbort = abortResult<void>(signal, resolved);\n\t\t\treturn afterAppendAbort ?? ok(undefined);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync renameFile(sourcePath: string, destinationPath: string, context: Context): Promise<Result<void, FileError>> {\n\t\tconst source = resolvePath(this.cwd, sourcePath);\n\t\tconst destination = resolvePath(this.cwd, destinationPath);\n\t\tconst aborted = abortResult<void>(context.abortSignal, destination);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tawait rename(source, destination);\n\t\t\treturn ok(undefined);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, source));\n\t\t}\n\t}\n\n\tasync fileInfo(path: string, context: Context): Promise<Result<FileInfo, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst aborted = abortResult<FileInfo>(context.abortSignal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\treturn fileInfoFromStats(resolved, await lstat(resolved));\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync listDir(path: string, context: Context): Promise<Result<FileInfo[], FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst signal = context.abortSignal;\n\t\tconst aborted = abortResult<FileInfo[]>(signal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tconst entries = await readdir(resolved, { withFileTypes: true });\n\t\t\tconst infos: FileInfo[] = [];\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst loopAbort = abortResult<FileInfo[]>(signal, resolved);\n\t\t\t\tif (loopAbort) return loopAbort;\n\t\t\t\tconst entryPath = resolve(resolved, entry.name);\n\t\t\t\ttry {\n\t\t\t\t\tconst info = fileInfoFromStats(entryPath, await lstat(entryPath));\n\t\t\t\t\tif (info.ok) infos.push(info.value);\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn err(toFileError(error, entryPath));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ok(infos);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync canonicalPath(path: string, context: Context): Promise<Result<string, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst aborted = abortResult<string>(context.abortSignal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\treturn ok(await realpath(resolved));\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync exists(path: string, context: Context): Promise<Result<boolean, FileError>> {\n\t\tconst result = await this.fileInfo(path, context);\n\t\tif (result.ok) return ok(true);\n\t\tif (result.error.code === \"not_found\") return ok(false);\n\t\treturn err(result.error);\n\t}\n\n\tasync createDir(\n\t\tpath: string,\n\t\toptions: { recursive?: boolean } | undefined,\n\t\tcontext: Context,\n\t): Promise<Result<void, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst aborted = abortResult<void>(context.abortSignal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tawait mkdir(resolved, { recursive: options?.recursive ?? true });\n\t\t\treturn ok(undefined);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync remove(\n\t\tpath: string,\n\t\toptions: { recursive?: boolean; force?: boolean } | undefined,\n\t\tcontext: Context,\n\t): Promise<Result<void, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst aborted = abortResult<void>(context.abortSignal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tawait rm(resolved, { recursive: options?.recursive ?? false, force: options?.force ?? false });\n\t\t\treturn ok(undefined);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync createTempDir(prefix: string | undefined, context: Context): Promise<Result<string, FileError>> {\n\t\tconst aborted = abortResult<string>(context.abortSignal);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tprefix ??= \"tmp-\";\n\t\t\treturn ok(await mkdtemp(join(tmpdir(), prefix)));\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error));\n\t\t}\n\t}\n\n\tasync createTempFile(\n\t\toptions: { prefix?: string; suffix?: string } | undefined,\n\t\tcontext: Context,\n\t): Promise<Result<string, FileError>> {\n\t\tconst dir = await this.createTempDir(\"tmp-\", context);\n\t\tif (!dir.ok) return dir;\n\t\tconst filePath = join(dir.value, `${options?.prefix ?? \"\"}${randomUUID()}${options?.suffix ?? \"\"}`);\n\t\ttry {\n\t\t\tawait writeFile(filePath, \"\");\n\t\t\treturn ok(filePath);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, filePath));\n\t\t}\n\t}\n\n\tasync cleanup(_context: Context): Promise<void> {\n\t\tfor (const pid of this.activeChildPids) killProcessTree(pid);\n\t\tthis.activeChildPids.clear();\n\t}\n}\n"]}
1
+ {"version":3,"file":"nodejs.js","sourceRoot":"","sources":["../../../src/harness/env/nodejs.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ChildProcess, spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { constants, createWriteStream, type WriteStream } from \"node:fs\";\nimport {\n\taccess,\n\tappendFile,\n\tlstat,\n\tmkdir,\n\tmkdtemp,\n\topen as openFile,\n\treaddir,\n\treadFile,\n\trealpath,\n\trename,\n\trm,\n\twriteFile,\n} from \"node:fs/promises\";\nimport { homedir, constants as osConstants, tmpdir } from \"node:os\";\nimport { basename, isAbsolute, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { Context } from \"../context.ts\";\nimport {\n\ttype ExecutionEnv,\n\tExecutionError,\n\terr,\n\tFileError,\n\ttype FileInfo,\n\ttype FileKind,\n\tok,\n\ttype Result,\n\ttype ShellExecOptions,\n\ttype ShellExecResult,\n\ttype TextLine,\n\ttype TextLineReader,\n\ttoError,\n} from \"../types.ts\";\nimport { OutputCapture } from \"../utils/output-capture.ts\";\n\nconst MAX_TIMEOUT_MS = 2_147_483_647;\nconst MAX_TIMEOUT_SECONDS = MAX_TIMEOUT_MS / 1000;\nconst EXIT_STDIO_GRACE_MS = 100;\nconst SPILL_HIGH_WATER_MARK = 8 * 1024 * 1024;\n\ntype SpillChunk = string | Uint8Array;\n\nfunction resolveTimeoutMs(timeout: number | undefined): Result<number | undefined, ExecutionError> {\n\tif (timeout === undefined) return ok(undefined);\n\tif (!Number.isFinite(timeout) || timeout <= 0) {\n\t\treturn err(new ExecutionError(\"timeout\", \"Invalid timeout: must be a finite number of seconds\"));\n\t}\n\n\tconst timeoutMs = timeout * 1000;\n\tif (timeoutMs > MAX_TIMEOUT_MS) {\n\t\treturn err(new ExecutionError(\"timeout\", `Invalid timeout: maximum is ${MAX_TIMEOUT_SECONDS} seconds`));\n\t}\n\treturn ok(timeoutMs);\n}\n\nfunction resolvePath(cwd: string, path: string): string {\n\tlet normalized = path;\n\tif (normalized === \"~\") {\n\t\tnormalized = homedir();\n\t} else if (normalized.startsWith(\"~/\") || (process.platform === \"win32\" && normalized.startsWith(\"~\\\\\"))) {\n\t\tnormalized = join(homedir(), normalized.slice(2));\n\t} else if (normalized.startsWith(\"file://\")) {\n\t\ttry {\n\t\t\tnormalized = fileURLToPath(normalized);\n\t\t} catch {\n\t\t\t// Keep malformed URLs as ordinary paths so filesystem methods preserve their non-throwing contract.\n\t\t}\n\t}\n\treturn isAbsolute(normalized) ? resolve(normalized) : resolve(cwd, normalized);\n}\n\nfunction fileKindFromStats(stats: {\n\tisFile(): boolean;\n\tisDirectory(): boolean;\n\tisSymbolicLink(): boolean;\n}): FileKind | undefined {\n\tif (stats.isFile()) return \"file\";\n\tif (stats.isDirectory()) return \"directory\";\n\tif (stats.isSymbolicLink()) return \"symlink\";\n\treturn undefined;\n}\n\nfunction fileInfoFromStats(\n\tpath: string,\n\tstats: { isFile(): boolean; isDirectory(): boolean; isSymbolicLink(): boolean; size: number; mtimeMs: number },\n): Result<FileInfo, FileError> {\n\tconst kind = fileKindFromStats(stats);\n\tif (!kind) return err(new FileError(\"invalid\", \"Unsupported file type\", path));\n\treturn ok({\n\t\tname: basename(path),\n\t\tpath,\n\t\tkind,\n\t\tsize: stats.size,\n\t\tmtimeMs: stats.mtimeMs,\n\t});\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n\treturn error instanceof Error && \"code\" in error;\n}\n\nfunction toFileError(error: unknown, fallbackPath?: string): FileError {\n\tif (error instanceof FileError) return error;\n\tconst cause = toError(error);\n\tconst nodeError = isNodeError(error) ? error : undefined;\n\tconst path = typeof nodeError?.path === \"string\" ? nodeError.path : fallbackPath;\n\tif (nodeError) {\n\t\tconst message = nodeError.message;\n\t\tswitch (nodeError.code) {\n\t\t\tcase \"ABORT_ERR\":\n\t\t\t\treturn new FileError(\"aborted\", message, path, cause);\n\t\t\tcase \"ENOENT\":\n\t\t\t\treturn new FileError(\"not_found\", message, path, cause);\n\t\t\tcase \"EACCES\":\n\t\t\tcase \"EPERM\":\n\t\t\t\treturn new FileError(\"permission_denied\", message, path, cause);\n\t\t\tcase \"ENOTDIR\":\n\t\t\t\treturn new FileError(\"not_directory\", message, path, cause);\n\t\t\tcase \"EISDIR\":\n\t\t\t\treturn new FileError(\"is_directory\", message, path, cause);\n\t\t\tcase \"EINVAL\":\n\t\t\t\treturn new FileError(\"invalid\", message, path, cause);\n\t\t}\n\t}\n\treturn new FileError(\"unknown\", cause.message, path, cause);\n}\n\nfunction abortResult<TValue>(signal: AbortSignal | undefined, path?: string): Result<TValue, FileError> | undefined {\n\treturn signal?.aborted ? err(new FileError(\"aborted\", \"aborted\", path)) : undefined;\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function runCommand(\n\tcommand: string,\n\targs: string[],\n\ttimeoutMs: number,\n): Promise<{ stdout: string; status: number | null }> {\n\treturn await new Promise((resolve) => {\n\t\tlet stdout = \"\";\n\t\tlet child: ReturnType<typeof spawn>;\n\t\ttry {\n\t\t\tchild = spawn(command, args, {\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\t\t\twindowsHide: true,\n\t\t\t});\n\t\t} catch {\n\t\t\tresolve({ stdout: \"\", status: null });\n\t\t\treturn;\n\t\t}\n\t\tconst timeout = setTimeout(() => {\n\t\t\tif (child.pid) killProcessTree(child.pid);\n\t\t}, timeoutMs);\n\t\tchild.stdout?.setEncoding(\"utf8\");\n\t\tchild.stdout?.on(\"data\", (chunk: string) => {\n\t\t\tstdout += chunk;\n\t\t});\n\t\tchild.on(\"error\", () => {\n\t\t\tclearTimeout(timeout);\n\t\t\tresolve({ stdout: \"\", status: null });\n\t\t});\n\t\tchild.on(\"close\", (status) => {\n\t\t\tclearTimeout(timeout);\n\t\t\tresolve({ stdout, status });\n\t\t});\n\t});\n}\n\nasync function findBashOnPath(): Promise<string | null> {\n\tconst result =\n\t\tprocess.platform === \"win32\"\n\t\t\t? await runCommand(\"where\", [\"bash.exe\"], 5000)\n\t\t\t: await runCommand(\"which\", [\"bash\"], 5000);\n\tif (result.status !== 0 || !result.stdout) return null;\n\tconst firstMatch = result.stdout.trim().split(/\\r?\\n/)[0];\n\treturn firstMatch && (await pathExists(firstMatch)) ? firstMatch : null;\n}\n\ninterface ShellConfig {\n\tshell: string;\n\targs: string[];\n\tcommandTransport?: \"argv\" | \"stdin\";\n}\n\nfunction isLegacyWslBashPath(path: string): boolean {\n\tconst normalized = path.replace(/\\//g, \"\\\\\").toLowerCase();\n\treturn /^[a-z]:\\\\windows\\\\(?:system32|sysnative)\\\\bash\\.exe$/.test(normalized);\n}\n\nfunction getBashShellConfig(shell: string): ShellConfig {\n\treturn isLegacyWslBashPath(shell) ? { shell, args: [\"-s\"], commandTransport: \"stdin\" } : { shell, args: [\"-c\"] };\n}\n\nasync function getShellConfig(customShellPath?: string): Promise<Result<ShellConfig, ExecutionError>> {\n\tif (customShellPath) {\n\t\tif (await pathExists(customShellPath)) {\n\t\t\treturn ok(getBashShellConfig(customShellPath));\n\t\t}\n\t\treturn err(new ExecutionError(\"shell_unavailable\", `Custom shell path not found: ${customShellPath}`));\n\t}\n\tif (process.platform === \"win32\") {\n\t\tconst candidates: string[] = [];\n\t\tconst programFiles = process.env.ProgramFiles;\n\t\tif (programFiles) candidates.push(`${programFiles}\\\\Git\\\\bin\\\\bash.exe`);\n\t\tconst programFilesX86 = process.env[\"ProgramFiles(x86)\"];\n\t\tif (programFilesX86) candidates.push(`${programFilesX86}\\\\Git\\\\bin\\\\bash.exe`);\n\t\tfor (const candidate of candidates) {\n\t\t\tif (await pathExists(candidate)) {\n\t\t\t\treturn ok(getBashShellConfig(candidate));\n\t\t\t}\n\t\t}\n\t\tconst bashOnPath = await findBashOnPath();\n\t\tif (bashOnPath) {\n\t\t\treturn ok(getBashShellConfig(bashOnPath));\n\t\t}\n\t\treturn err(\n\t\t\tnew ExecutionError(\n\t\t\t\t\"shell_unavailable\",\n\t\t\t\t`No bash shell found. Options:\\n` +\n\t\t\t\t\t` 1. Install Git for Windows: https://git-scm.com/download/win\\n` +\n\t\t\t\t\t` 2. Add your bash to PATH (Cygwin, MSYS2, etc.)\\n` +\n\t\t\t\t\t\" 3. Configure an explicit shellPath\\n\\n\" +\n\t\t\t\t\t`Searched Git Bash in:\\n${candidates.map((path) => ` ${path}`).join(\"\\n\")}`,\n\t\t\t),\n\t\t);\n\t}\n\n\tif (await pathExists(\"/bin/bash\")) {\n\t\treturn ok(getBashShellConfig(\"/bin/bash\"));\n\t}\n\tconst bashOnPath = await findBashOnPath();\n\tif (bashOnPath) {\n\t\treturn ok(getBashShellConfig(bashOnPath));\n\t}\n\treturn ok({ shell: \"sh\", args: [\"-c\"] });\n}\n\nfunction getShellEnv(\n\tbaseEnv?: NodeJS.ProcessEnv,\n\textraEnv?: Record<string, string>,\n\tinheritEnv = true,\n): NodeJS.ProcessEnv {\n\tif (!inheritEnv) return { ...extraEnv };\n\treturn {\n\t\t...process.env,\n\t\t...baseEnv,\n\t\t...extraEnv,\n\t};\n}\n\nfunction killProcessTree(pid: number): void {\n\tif (process.platform === \"win32\") {\n\t\ttry {\n\t\t\tconst child = spawn(\n\t\t\t\tjoin(process.env.SystemRoot ?? \"C:\\\\Windows\", \"System32\", \"taskkill.exe\"),\n\t\t\t\t[\"/F\", \"/T\", \"/PID\", String(pid)],\n\t\t\t\t{\n\t\t\t\t\tstdio: \"ignore\",\n\t\t\t\t\tdetached: true,\n\t\t\t\t\twindowsHide: true,\n\t\t\t\t},\n\t\t\t);\n\t\t\t// A failed spawn emits \"error\" asynchronously; consume it to avoid crashing Node.\n\t\t\tchild.once(\"error\", () => {});\n\t\t} catch {\n\t\t\t// Ignore errors.\n\t\t}\n\t\treturn;\n\t}\n\n\ttry {\n\t\tprocess.kill(-pid, \"SIGKILL\");\n\t} catch {\n\t\ttry {\n\t\t\tprocess.kill(pid, \"SIGKILL\");\n\t\t} catch {\n\t\t\t// Process already dead.\n\t\t}\n\t}\n}\n\nfunction waitForChildProcess(\n\tchild: ChildProcess,\n\tspillIsDraining: () => boolean,\n): Promise<{ code: number | null; signal: NodeJS.Signals | null }> {\n\treturn new Promise((resolvePromise, reject) => {\n\t\tlet settled = false;\n\t\tlet exited = false;\n\t\tlet exitCode: number | null = null;\n\t\tlet exitSignal: NodeJS.Signals | null = null;\n\t\tlet postExitTimer: ReturnType<typeof setTimeout> | undefined;\n\t\tlet stdoutEnded = child.stdout === null;\n\t\tlet stderrEnded = child.stderr === null;\n\n\t\tconst cleanup = (): void => {\n\t\t\tif (postExitTimer) clearTimeout(postExitTimer);\n\t\t\tchild.removeListener(\"error\", onError);\n\t\t\tchild.removeListener(\"exit\", onExit);\n\t\t\tchild.removeListener(\"close\", onClose);\n\t\t\tchild.stdout?.removeListener(\"end\", onStdoutEnd);\n\t\t\tchild.stderr?.removeListener(\"end\", onStderrEnd);\n\t\t\tchild.stdout?.removeListener(\"data\", onData);\n\t\t\tchild.stderr?.removeListener(\"data\", onData);\n\t\t};\n\t\tconst finalize = (): void => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tchild.stdout?.destroy();\n\t\t\tchild.stderr?.destroy();\n\t\t\tresolvePromise({ code: exitCode, signal: exitSignal });\n\t\t};\n\t\tconst maybeFinalizeAfterExit = (): void => {\n\t\t\tif (exited && stdoutEnded && stderrEnded) finalize();\n\t\t};\n\t\tconst armIdleTimer = (): void => {\n\t\t\tif (postExitTimer) clearTimeout(postExitTimer);\n\t\t\tpostExitTimer = setTimeout(() => {\n\t\t\t\tif (spillIsDraining()) armIdleTimer();\n\t\t\t\telse finalize();\n\t\t\t}, EXIT_STDIO_GRACE_MS);\n\t\t};\n\t\tconst onData = (): void => {\n\t\t\tif (exited && !settled) armIdleTimer();\n\t\t};\n\t\tconst onStdoutEnd = (): void => {\n\t\t\tstdoutEnded = true;\n\t\t\tmaybeFinalizeAfterExit();\n\t\t};\n\t\tconst onStderrEnd = (): void => {\n\t\t\tstderrEnded = true;\n\t\t\tmaybeFinalizeAfterExit();\n\t\t};\n\t\tconst onError = (error: Error): void => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\treject(error);\n\t\t};\n\t\tconst onExit = (code: number | null, signal: NodeJS.Signals | null): void => {\n\t\t\texited = true;\n\t\t\texitCode = code;\n\t\t\texitSignal = signal;\n\t\t\tmaybeFinalizeAfterExit();\n\t\t\tif (!settled) armIdleTimer();\n\t\t};\n\t\tconst onClose = (code: number | null, signal: NodeJS.Signals | null): void => {\n\t\t\texitCode = code;\n\t\t\texitSignal = signal;\n\t\t\tfinalize();\n\t\t};\n\n\t\tchild.stdout?.once(\"end\", onStdoutEnd);\n\t\tchild.stderr?.once(\"end\", onStderrEnd);\n\t\tchild.stdout?.on(\"data\", onData);\n\t\tchild.stderr?.on(\"data\", onData);\n\t\tchild.once(\"error\", onError);\n\t\tchild.once(\"exit\", onExit);\n\t\tchild.once(\"close\", onClose);\n\t});\n}\n\n/** Strict LF reader; Node readline does not report whether its final line was newline-terminated. */\nclass NodeTextLineReader implements TextLineReader {\n\tprivate readonly file: Awaited<ReturnType<typeof openFile>>;\n\tprivate readonly path: string;\n\tprivate readonly decoder = new TextDecoder();\n\tprivate readonly chunk = new Uint8Array(64 * 1024);\n\tprivate byteOffset = 0;\n\tprivate buffered = \"\";\n\tprivate ended = false;\n\tprivate closed = false;\n\n\tconstructor(file: Awaited<ReturnType<typeof openFile>>, path: string) {\n\t\tthis.file = file;\n\t\tthis.path = path;\n\t}\n\n\tasync readLine(context: Context): Promise<Result<TextLine | undefined, FileError>> {\n\t\tconst aborted = abortResult<TextLine | undefined>(context.abortSignal, this.path);\n\t\tif (aborted) return aborted;\n\t\tif (this.closed) return err(new FileError(\"invalid\", \"Text line reader is closed\", this.path));\n\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\tconst newline = this.buffered.indexOf(\"\\n\");\n\t\t\t\tif (newline !== -1) {\n\t\t\t\t\tconst text = this.buffered.slice(0, newline);\n\t\t\t\t\tthis.buffered = this.buffered.slice(newline + 1);\n\t\t\t\t\treturn ok({ text, terminated: true });\n\t\t\t\t}\n\t\t\t\tif (this.ended) {\n\t\t\t\t\tif (this.buffered.length === 0) return ok(undefined);\n\t\t\t\t\tconst text = this.buffered;\n\t\t\t\t\tthis.buffered = \"\";\n\t\t\t\t\treturn ok({ text, terminated: false });\n\t\t\t\t}\n\n\t\t\t\t// Explicit positions allow an aborted read to be retried without skipping bytes.\n\t\t\t\tconst { bytesRead } = await this.file.read(this.chunk, 0, this.chunk.length, this.byteOffset);\n\t\t\t\tconst afterReadAbort = abortResult<TextLine | undefined>(context.abortSignal, this.path);\n\t\t\t\tif (afterReadAbort) return afterReadAbort;\n\t\t\t\tthis.byteOffset += bytesRead;\n\t\t\t\tif (bytesRead === 0) {\n\t\t\t\t\tthis.buffered += this.decoder.decode();\n\t\t\t\t\tthis.ended = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.buffered += this.decoder.decode(this.chunk.subarray(0, bytesRead), { stream: true });\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, this.path));\n\t\t}\n\t}\n\n\tasync close(_context: Context): Promise<void> {\n\t\tif (this.closed) return;\n\t\tthis.closed = true;\n\t\tthis.buffered = \"\";\n\t\ttry {\n\t\t\tawait this.file.close();\n\t\t} catch {\n\t\t\t// Closing is best-effort, including after cancellation or an earlier I/O failure.\n\t\t}\n\t}\n}\n\nexport class NodeExecutionEnv implements ExecutionEnv {\n\tcwd: string;\n\tprivate shellPath?: string;\n\tprivate shellEnv?: NodeJS.ProcessEnv;\n\tprivate activeChildPids = new Set<number>();\n\n\tconstructor(options: { cwd: string; shellPath?: string; shellEnv?: NodeJS.ProcessEnv }) {\n\t\tthis.cwd = options.cwd;\n\t\tthis.shellPath = options.shellPath;\n\t\tthis.shellEnv = options.shellEnv;\n\t}\n\n\tasync absolutePath(path: string, _context: Context): Promise<Result<string, FileError>> {\n\t\treturn ok(resolvePath(this.cwd, path));\n\t}\n\n\tasync joinPath(parts: string[], _context: Context): Promise<Result<string, FileError>> {\n\t\treturn ok(join(...parts));\n\t}\n\n\tasync exec(\n\t\tcommand: string,\n\t\toptions: ShellExecOptions | undefined,\n\t\tcontext: Context,\n\t): Promise<Result<ShellExecResult, ExecutionError>> {\n\t\tconst signal = context.abortSignal;\n\t\tif (signal?.aborted) return err(new ExecutionError(\"aborted\", \"aborted\"));\n\t\tconst timeoutMsResult = resolveTimeoutMs(options?.timeout);\n\t\tif (!timeoutMsResult.ok) return err(timeoutMsResult.error);\n\t\tconst timeoutMs = timeoutMsResult.value;\n\n\t\tconst cwd = options?.cwd ? resolvePath(this.cwd, options.cwd) : this.cwd;\n\t\tconst shellConfig = await getShellConfig(this.shellPath);\n\t\tif (!shellConfig.ok) return shellConfig;\n\t\ttry {\n\t\t\tawait access(cwd, constants.F_OK);\n\t\t} catch (error) {\n\t\t\tconst cause = toError(error);\n\t\t\treturn err(\n\t\t\t\tnew ExecutionError(\n\t\t\t\t\t\"spawn_error\",\n\t\t\t\t\t`Working directory does not exist: ${cwd}\\nCannot execute bash commands.`,\n\t\t\t\t\tcause,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn await new Promise((resolvePromise) => {\n\t\t\tlet settled = false;\n\t\t\tlet timedOut = false;\n\t\t\tlet callbackError: ExecutionError | undefined;\n\t\t\tlet spillError: ExecutionError | undefined;\n\t\t\tlet child: ReturnType<typeof spawn> | undefined;\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | undefined;\n\t\t\tconst spillPrefix: SpillChunk[] = [];\n\t\t\tlet spillPath: string | undefined;\n\t\t\tconst spillQueue: SpillChunk[] = [];\n\t\t\tlet spillStart: Promise<void> | undefined;\n\t\t\tlet spillStream: WriteStream | undefined;\n\t\t\tlet spillBackpressured = false;\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tif (child?.pid) killProcessTree(child.pid);\n\t\t\t};\n\t\t\tconst failCallback = (error: unknown) => {\n\t\t\t\tif (callbackError !== undefined) return;\n\t\t\t\tconst cause = toError(error);\n\t\t\t\tcallbackError = new ExecutionError(\"callback_error\", cause.message, cause);\n\t\t\t\tonAbort();\n\t\t\t};\n\t\t\tlet capture: OutputCapture;\n\t\t\ttry {\n\t\t\t\tcapture = new OutputCapture(options?.capture, context, {\n\t\t\t\t\tonUpdate: options?.onUpdate,\n\t\t\t\t\tonError: failCallback,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconst cause = toError(error);\n\t\t\t\tresolvePromise(err(new ExecutionError(\"unknown\", cause.message, cause)));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst settle = (result: Result<ShellExecResult, ExecutionError>) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\tif (signal) signal.removeEventListener(\"abort\", onAbort);\n\t\t\t\tif (child?.pid) this.activeChildPids.delete(child.pid);\n\t\t\t\tcapture.dispose();\n\t\t\t\tresolvePromise(result);\n\t\t\t};\n\t\t\tconst pauseOutput = () => {\n\t\t\t\tchild?.stdout?.pause();\n\t\t\t\tchild?.stderr?.pause();\n\t\t\t};\n\t\t\tconst resumeOutput = () => {\n\t\t\t\tif (callbackError || spillError || timedOut || signal?.aborted || spillBackpressured) return;\n\t\t\t\tchild?.stdout?.resume();\n\t\t\t\tchild?.stderr?.resume();\n\t\t\t};\n\t\t\tconst failSpill = (error: unknown) => {\n\t\t\t\tif (spillError !== undefined) return;\n\t\t\t\tconst cause = toError(error);\n\t\t\t\tspillError = new ExecutionError(\n\t\t\t\t\t\"unknown\",\n\t\t\t\t\t`Failed to preserve complete shell output: ${cause.message}`,\n\t\t\t\t\tcause,\n\t\t\t\t);\n\t\t\t\tspillBackpressured = false;\n\t\t\t\tonAbort();\n\t\t\t};\n\t\t\tconst writeSpill = (chunk: SpillChunk): void => {\n\t\t\t\tif (spillStream === undefined || chunk.length === 0) return;\n\t\t\t\tif (spillStream.write(chunk) || spillBackpressured) return;\n\t\t\t\tspillBackpressured = true;\n\t\t\t\tpauseOutput();\n\t\t\t\tspillStream.once(\"drain\", () => {\n\t\t\t\t\tspillBackpressured = false;\n\t\t\t\t\tresumeOutput();\n\t\t\t\t});\n\t\t\t};\n\t\t\tconst startSpill = (chunk: SpillChunk): void => {\n\t\t\t\tif (spillStream !== undefined) {\n\t\t\t\t\twriteSpill(chunk);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tspillQueue.push(chunk);\n\t\t\t\tif (spillStart !== undefined) return;\n\t\t\t\tpauseOutput();\n\t\t\t\tspillStart = (async () => {\n\t\t\t\t\tconst created = await this.createTempFile({ prefix: \"pi-output-\", suffix: \".log\" }, context);\n\t\t\t\t\tif (!created.ok) throw created.error;\n\t\t\t\t\tspillPath = created.value;\n\t\t\t\t\tcapture.setSpillPath(spillPath);\n\t\t\t\t\tspillStream = createWriteStream(spillPath, { flags: \"a\", highWaterMark: SPILL_HIGH_WATER_MARK });\n\t\t\t\t\tspillStream.on(\"error\", failSpill);\n\t\t\t\t\tfor (const queued of spillQueue) writeSpill(queued);\n\t\t\t\t\tspillQueue.length = 0;\n\t\t\t\t})()\n\t\t\t\t\t.catch(failSpill)\n\t\t\t\t\t.finally(resumeOutput);\n\t\t\t};\n\t\t\tconst finishSpill = async (): Promise<void> => {\n\t\t\t\tawait spillStart;\n\t\t\t\tconst stream = spillStream;\n\t\t\t\tif (stream === undefined || spillError !== undefined || stream.destroyed) return;\n\t\t\t\tawait new Promise<void>((resolveFinish) => {\n\t\t\t\t\tstream.once(\"error\", () => resolveFinish());\n\t\t\t\t\tstream.once(\"finish\", resolveFinish);\n\t\t\t\t\tstream.end();\n\t\t\t\t});\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst commandFromStdin = shellConfig.value.commandTransport === \"stdin\";\n\t\t\t\tchild = spawn(\n\t\t\t\t\tshellConfig.value.shell,\n\t\t\t\t\tcommandFromStdin ? shellConfig.value.args : [...shellConfig.value.args, command],\n\t\t\t\t\t{\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tdetached: process.platform !== \"win32\",\n\t\t\t\t\t\tenv: getShellEnv(this.shellEnv, options?.env, options?.inheritEnv),\n\t\t\t\t\t\tstdio: [commandFromStdin ? \"pipe\" : \"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\t\t\twindowsHide: true,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tif (child.pid) this.activeChildPids.add(child.pid);\n\t\t\t\tif (commandFromStdin) {\n\t\t\t\t\tchild.stdin?.on(\"error\", () => {});\n\t\t\t\t\tchild.stdin?.end(command);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst cause = toError(error);\n\t\t\t\tsettle(err(new ExecutionError(\"spawn_error\", cause.message, cause)));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttimeoutId =\n\t\t\t\ttimeoutMs === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: setTimeout(() => {\n\t\t\t\t\t\t\ttimedOut = true;\n\t\t\t\t\t\t\tonAbort();\n\t\t\t\t\t\t}, timeoutMs);\n\n\t\t\tif (signal) {\n\t\t\t\tif (signal.aborted) onAbort();\n\t\t\t\telse signal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t}\n\n\t\t\tconst feed = (chunk: Uint8Array) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst wasTruncated = capture.truncated;\n\t\t\t\t\tcapture.push(chunk);\n\t\t\t\t\tif (!options?.capture?.spill || chunk.length === 0) return;\n\t\t\t\t\tif (spillPath !== undefined || wasTruncated) {\n\t\t\t\t\t\tstartSpill(chunk);\n\t\t\t\t\t} else if (capture.truncated) {\n\t\t\t\t\t\tfor (const prefix of spillPrefix) startSpill(prefix);\n\t\t\t\t\t\tspillPrefix.length = 0;\n\t\t\t\t\t\tstartSpill(chunk);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tspillPrefix.push(chunk);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tfailCallback(error);\n\t\t\t\t}\n\t\t\t};\n\t\t\tchild.stdout?.on(\"data\", feed);\n\t\t\tchild.stderr?.on(\"data\", feed);\n\n\t\t\tvoid waitForChildProcess(\n\t\t\t\tchild,\n\t\t\t\t() =>\n\t\t\t\t\tspillError === undefined &&\n\t\t\t\t\tspillStart !== undefined &&\n\t\t\t\t\t(spillStream === undefined || spillBackpressured),\n\t\t\t).then(\n\t\t\t\tasync ({ code, signal: exitSignal }) => {\n\t\t\t\t\tawait finishSpill();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcapture.finish();\n\t\t\t\t\t\tcapture.flush();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tfailCallback(error);\n\t\t\t\t\t}\n\t\t\t\t\tif (callbackError) {\n\t\t\t\t\t\tsettle(err(callbackError));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (timedOut) {\n\t\t\t\t\t\tsettle(err(new ExecutionError(\"timeout\", `timeout:${options?.timeout}`)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\t\tsettle(err(new ExecutionError(\"aborted\", \"aborted\")));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (spillError) {\n\t\t\t\t\t\tsettle(err(spillError));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst output = capture.snapshot();\n\t\t\t\t\t// A process killed by a signal (e.g. OOM killer) has no exit code; map it\n\t\t\t\t\t// to the conventional 128 + signal number so callers do not mistake it\n\t\t\t\t\t// for a successful exit.\n\t\t\t\t\tconst exitCode = code ?? (exitSignal ? 128 + (osConstants.signals[exitSignal] ?? 0) : 1);\n\t\t\t\t\tsettle(\n\t\t\t\t\t\tok({\n\t\t\t\t\t\t\texitCode,\n\t\t\t\t\t\t\ttruncation: output.truncation,\n\t\t\t\t\t\t\t...(output.spillPath === undefined ? {} : { spillPath: output.spillPath }),\n\t\t\t\t\t\t\t...(output.lastLineBytes === undefined ? {} : { lastLineBytes: output.lastLineBytes }),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\t(error: Error) => settle(err(new ExecutionError(\"spawn_error\", error.message, error))),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync openTextLineReader(path: string, context: Context): Promise<Result<TextLineReader, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst aborted = abortResult<TextLineReader>(context.abortSignal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tconst file = await openFile(resolved, \"r\");\n\t\t\tconst afterOpenAbort = abortResult<TextLineReader>(context.abortSignal, resolved);\n\t\t\tif (afterOpenAbort) {\n\t\t\t\tawait file.close().catch(() => undefined);\n\t\t\t\treturn afterOpenAbort;\n\t\t\t}\n\t\t\treturn ok(new NodeTextLineReader(file, resolved));\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync readTextFile(path: string, context: Context): Promise<Result<string, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst signal = context.abortSignal;\n\t\tconst aborted = abortResult<string>(signal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\treturn ok(await readFile(resolved, { encoding: \"utf8\", signal }));\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync readTextLines(\n\t\tpath: string,\n\t\toptions: { maxLines?: number } | undefined,\n\t\tcontext: Context,\n\t): Promise<Result<string[], FileError>> {\n\t\tif (options?.maxLines !== undefined && options.maxLines <= 0) return ok([]);\n\t\tconst opened = await this.openTextLineReader(path, context);\n\t\tif (!opened.ok) return opened;\n\t\tconst lines: string[] = [];\n\t\ttry {\n\t\t\twhile (options?.maxLines === undefined || lines.length < options.maxLines) {\n\t\t\t\tconst line = await opened.value.readLine(context);\n\t\t\t\tif (!line.ok) return line;\n\t\t\t\tif (line.value === undefined) break;\n\t\t\t\tlines.push(line.value.text);\n\t\t\t}\n\t\t\treturn ok(lines);\n\t\t} finally {\n\t\t\tawait opened.value.close(context);\n\t\t}\n\t}\n\n\tasync readBinaryFile(path: string, context: Context): Promise<Result<Uint8Array, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst signal = context.abortSignal;\n\t\tconst aborted = abortResult<Uint8Array>(signal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\treturn ok(await readFile(resolved, { signal }));\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync writeFile(path: string, content: string | Uint8Array, context: Context): Promise<Result<void, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst signal = context.abortSignal;\n\t\tconst aborted = abortResult<void>(signal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tawait mkdir(resolve(resolved, \"..\"), { recursive: true });\n\t\t\tconst afterMkdirAbort = abortResult<void>(signal, resolved);\n\t\t\tif (afterMkdirAbort) return afterMkdirAbort;\n\t\t\tawait writeFile(resolved, content, { signal });\n\t\t\treturn ok(undefined);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync appendFile(path: string, content: string | Uint8Array, context: Context): Promise<Result<void, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst signal = context.abortSignal;\n\t\tconst aborted = abortResult<void>(signal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tawait mkdir(resolve(resolved, \"..\"), { recursive: true });\n\t\t\tconst afterMkdirAbort = abortResult<void>(signal, resolved);\n\t\t\tif (afterMkdirAbort) return afterMkdirAbort;\n\t\t\tawait appendFile(resolved, content);\n\t\t\tconst afterAppendAbort = abortResult<void>(signal, resolved);\n\t\t\treturn afterAppendAbort ?? ok(undefined);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync renameFile(sourcePath: string, destinationPath: string, context: Context): Promise<Result<void, FileError>> {\n\t\tconst source = resolvePath(this.cwd, sourcePath);\n\t\tconst destination = resolvePath(this.cwd, destinationPath);\n\t\tconst aborted = abortResult<void>(context.abortSignal, destination);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tawait rename(source, destination);\n\t\t\treturn ok(undefined);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, source));\n\t\t}\n\t}\n\n\tasync fileInfo(path: string, context: Context): Promise<Result<FileInfo, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst aborted = abortResult<FileInfo>(context.abortSignal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\treturn fileInfoFromStats(resolved, await lstat(resolved));\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync listDir(path: string, context: Context): Promise<Result<FileInfo[], FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst signal = context.abortSignal;\n\t\tconst aborted = abortResult<FileInfo[]>(signal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tconst entries = await readdir(resolved, { withFileTypes: true });\n\t\t\tconst infos: FileInfo[] = [];\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst loopAbort = abortResult<FileInfo[]>(signal, resolved);\n\t\t\t\tif (loopAbort) return loopAbort;\n\t\t\t\tconst entryPath = resolve(resolved, entry.name);\n\t\t\t\ttry {\n\t\t\t\t\tconst info = fileInfoFromStats(entryPath, await lstat(entryPath));\n\t\t\t\t\tif (info.ok) infos.push(info.value);\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn err(toFileError(error, entryPath));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ok(infos);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync canonicalPath(path: string, context: Context): Promise<Result<string, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst aborted = abortResult<string>(context.abortSignal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\treturn ok(await realpath(resolved));\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync exists(path: string, context: Context): Promise<Result<boolean, FileError>> {\n\t\tconst result = await this.fileInfo(path, context);\n\t\tif (result.ok) return ok(true);\n\t\tif (result.error.code === \"not_found\") return ok(false);\n\t\treturn err(result.error);\n\t}\n\n\tasync createDir(\n\t\tpath: string,\n\t\toptions: { recursive?: boolean } | undefined,\n\t\tcontext: Context,\n\t): Promise<Result<void, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst aborted = abortResult<void>(context.abortSignal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tawait mkdir(resolved, { recursive: options?.recursive ?? true });\n\t\t\treturn ok(undefined);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync remove(\n\t\tpath: string,\n\t\toptions: { recursive?: boolean; force?: boolean } | undefined,\n\t\tcontext: Context,\n\t): Promise<Result<void, FileError>> {\n\t\tconst resolved = resolvePath(this.cwd, path);\n\t\tconst aborted = abortResult<void>(context.abortSignal, resolved);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tawait rm(resolved, { recursive: options?.recursive ?? false, force: options?.force ?? false });\n\t\t\treturn ok(undefined);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, resolved));\n\t\t}\n\t}\n\n\tasync createTempDir(prefix: string | undefined, context: Context): Promise<Result<string, FileError>> {\n\t\tconst aborted = abortResult<string>(context.abortSignal);\n\t\tif (aborted) return aborted;\n\t\ttry {\n\t\t\tprefix ??= \"tmp-\";\n\t\t\treturn ok(await mkdtemp(join(tmpdir(), prefix)));\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error));\n\t\t}\n\t}\n\n\tasync createTempFile(\n\t\toptions: { prefix?: string; suffix?: string } | undefined,\n\t\tcontext: Context,\n\t): Promise<Result<string, FileError>> {\n\t\tconst dir = await this.createTempDir(\"tmp-\", context);\n\t\tif (!dir.ok) return dir;\n\t\tconst filePath = join(dir.value, `${options?.prefix ?? \"\"}${randomUUID()}${options?.suffix ?? \"\"}`);\n\t\ttry {\n\t\t\tawait writeFile(filePath, \"\");\n\t\t\treturn ok(filePath);\n\t\t} catch (error) {\n\t\t\treturn err(toFileError(error, filePath));\n\t\t}\n\t}\n\n\tasync cleanup(_context: Context): Promise<void> {\n\t\tfor (const pid of this.activeChildPids) killProcessTree(pid);\n\t\tthis.activeChildPids.clear();\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/harness/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC7G,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,KAAK,iBAAiB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEvF,gEAAgE;AAChE,qBAAa,eAAgB,YAAW,MAAM;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0D;IACpF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmC;IAClE,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,WAAW,CAAoB;IAEvC,EAAE,CAAC,KAAK,SAAS,gBAAgB,EAChC,IAAI,EAAE,KAAK,EACX,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC,GAC7D,MAAM,IAAI,CAWZ;IAED,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;IAED,2FAA2F;IAC3F,SAAS,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAW1E;IAED,KAAK,CAAC,CAAC,EACN,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,EACxC,QAAQ,EAAE,OAAO,EACjB,UAAU,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC/B,WAAW,CAAC,CAAC,CAAC,CAGhB;IAEK,iBAAiB,CAAC,CAAC,EACxB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,EACzC,MAAM,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,EACxC,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAczB;IAED,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAMxB;IAED,OAAO,CAAC,cAAc;IA2CtB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,kBAAkB;YAIZ,OAAO;CAyBrB","sourcesContent":["import type { EventListener, Events, HarnessEvent, HarnessEventType, WatchHandle } from \"./agent-harness.ts\";\nimport type { Context } from \"./context.ts\";\n\ntype UntypedEventListener = (event: HarnessEvent, context: Context) => void | Promise<void>;\ntype ResnapshotCapture<T> = (context: Context, markBoundary: () => void) => Promise<T>;\n\n/** Passive harness event bus with isolated handler failures. */\nexport class HarnessEventBus implements Events {\n\tprivate readonly listeners = new Map<HarnessEventType, Set<UntypedEventListener>>();\n\tprivate readonly watchListeners = new Set<UntypedEventListener>();\n\tprivate deliveryTail: Promise<void> = Promise.resolve();\n\tprivate closedError: Error | undefined;\n\n\ton<TType extends HarnessEventType>(\n\t\ttype: TType,\n\t\tlistener: EventListener<Extract<HarnessEvent, { type: TType }>>,\n\t): () => void {\n\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\tconst wrapped: UntypedEventListener = (event, context) =>\n\t\t\tlistener(event as Extract<HarnessEvent, { type: TType }>, context);\n\t\tlet listeners = this.listeners.get(type);\n\t\tif (listeners === undefined) {\n\t\t\tlisteners = new Set();\n\t\t\tthis.listeners.set(type, listeners);\n\t\t}\n\t\tlisteners.add(wrapped);\n\t\treturn () => listeners?.delete(wrapped);\n\t}\n\n\temit(event: HarnessEvent, context: Context): Promise<void> {\n\t\treturn this.emitBatch([event], context);\n\t}\n\n\t/** Bind current recipients and append one contiguous batch to the global delivery tail. */\n\temitBatch(events: readonly HarnessEvent[], context: Context): Promise<void> {\n\t\tif (this.closedError !== undefined || events.length === 0) return Promise.resolve();\n\t\tconst bound = events.map((event) => {\n\t\t\tconst payload = structuredClone(event);\n\t\t\treturn { payload, recipients: this.snapshotRecipients(payload) };\n\t\t});\n\t\tconst delivery = this.deliveryTail.then(async () => {\n\t\t\tfor (const { payload, recipients } of bound) await this.deliver(payload, recipients, true, context);\n\t\t});\n\t\tthis.deliveryTail = delivery.catch(() => {});\n\t\treturn delivery;\n\t}\n\n\twatch<T>(\n\t\tsnapshot: T,\n\t\tfilter: (event: HarnessEvent) => boolean,\n\t\t_context: Context,\n\t\tresnapshot?: ResnapshotCapture<T>,\n\t): WatchHandle<T> {\n\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\treturn this.installWatcher(snapshot, filter, resnapshot);\n\t}\n\n\tasync watchFromSnapshot<T>(\n\t\tcapture: (context: Context) => Promise<T>,\n\t\tfilter: (event: HarnessEvent) => boolean,\n\t\tcontext: Context,\n\t): Promise<WatchHandle<T>> {\n\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\tconst watcher = this.installWatcher<T>(undefined, filter, async (captureContext, markBoundary) => {\n\t\t\tconst snapshot = await capture(captureContext);\n\t\t\tmarkBoundary();\n\t\t\treturn snapshot;\n\t\t});\n\t\ttry {\n\t\t\twatcher.setSnapshot(await capture(context));\n\t\t\treturn watcher;\n\t\t} catch (error) {\n\t\t\twatcher.unsubscribe();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tclose(error: Error): void {\n\t\tthis.closedError ??= error;\n\t\tvoid this.deliveryTail.finally(() => {\n\t\t\tthis.listeners.clear();\n\t\t\tthis.watchListeners.clear();\n\t\t});\n\t}\n\n\tprivate installWatcher<T>(\n\t\tsnapshot: T | undefined,\n\t\tfilter: (event: HarnessEvent) => boolean,\n\t\tresnapshot: ResnapshotCapture<T> | undefined,\n\t): BufferedEventWatcher<T> {\n\t\tlet watcher!: BufferedEventWatcher<T>;\n\t\tconst capture =\n\t\t\tresnapshot === undefined\n\t\t\t\t? undefined\n\t\t\t\t: async (context: Context) => {\n\t\t\t\t\t\tlet marked = false;\n\t\t\t\t\t\tconst next = await resnapshot(context, () => {\n\t\t\t\t\t\t\tif (marked) throw new Error(\"Resnapshot boundary was already marked\");\n\t\t\t\t\t\t\tmarked = true;\n\t\t\t\t\t\t\tthis.enqueueBarrier(() => watcher.markResnapshotBoundary());\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!marked) throw new Error(\"Resnapshot capture did not mark its boundary\");\n\t\t\t\t\t\treturn next;\n\t\t\t\t\t};\n\t\twatcher = new BufferedEventWatcher(snapshot, capture, async (error, event, context) => {\n\t\t\tif (event.type === \"handler_error\") return;\n\t\t\tconst normalized = error instanceof Error ? error : new Error(String(error));\n\t\t\tconst lane = \"lane\" in event && typeof event.lane === \"string\" ? event.lane : undefined;\n\t\t\tawait this.emit(\n\t\t\t\t{\n\t\t\t\t\ttype: \"handler_error\",\n\t\t\t\t\tkind: \"event\",\n\t\t\t\t\tevent: event.type,\n\t\t\t\t\terror: normalized.message,\n\t\t\t\t\t...(normalized.stack === undefined ? {} : { stack: normalized.stack }),\n\t\t\t\t\t...(lane === undefined ? {} : { lane }),\n\t\t\t\t},\n\t\t\t\tcontext,\n\t\t\t);\n\t\t});\n\t\tconst watchListener: UntypedEventListener = (event, context) => {\n\t\t\tif (filter(event)) watcher.push(event, context);\n\t\t};\n\t\tthis.watchListeners.add(watchListener);\n\t\twatcher.setUnsubscribe(() => this.watchListeners.delete(watchListener));\n\t\treturn watcher;\n\t}\n\n\tprivate enqueueBarrier(barrier: () => void): void {\n\t\tconst delivery = this.deliveryTail.then(barrier);\n\t\tthis.deliveryTail = delivery.catch(() => {});\n\t}\n\n\tprivate snapshotRecipients(event: HarnessEvent): UntypedEventListener[] {\n\t\treturn [...(this.listeners.get(event.type) ?? []), ...this.watchListeners];\n\t}\n\n\tprivate async deliver(\n\t\tevent: HarnessEvent,\n\t\trecipients: readonly UntypedEventListener[],\n\t\treportErrors: boolean,\n\t\tcontext: Context,\n\t): Promise<void> {\n\t\tfor (const listener of recipients) {\n\t\t\ttry {\n\t\t\t\tawait listener(structuredClone(event), context);\n\t\t\t} catch (error) {\n\t\t\t\tif (!reportErrors || event.type === \"handler_error\") continue;\n\t\t\t\tconst normalized = error instanceof Error ? error : new Error(String(error));\n\t\t\t\tconst lane = \"lane\" in event && typeof event.lane === \"string\" ? event.lane : undefined;\n\t\t\t\tconst handlerError: HarnessEvent = {\n\t\t\t\t\ttype: \"handler_error\",\n\t\t\t\t\tkind: \"event\",\n\t\t\t\t\tevent: event.type,\n\t\t\t\t\terror: normalized.message,\n\t\t\t\t\t...(normalized.stack === undefined ? {} : { stack: normalized.stack }),\n\t\t\t\t\t...(lane === undefined ? {} : { lane }),\n\t\t\t\t};\n\t\t\t\tawait this.deliver(handlerError, this.snapshotRecipients(handlerError), false, context);\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass BufferedEventWatcher<T> implements WatchHandle<T> {\n\tsnapshot: T;\n\tprivate readonly resnapshotCallback: ((context: Context) => Promise<T>) | undefined;\n\tprivate readonly onError: (error: unknown, event: HarnessEvent, context: Context) => void | Promise<void>;\n\tprivate buffer: Array<{ event: HarnessEvent; context: Context; epoch: number }> = [];\n\tprivate listener: EventListener | undefined;\n\tprivate unsubscribeCallback: (() => void) | undefined;\n\tprivate deliveryTail: Promise<void> = Promise.resolve();\n\tprivate epoch = 0;\n\tprivate resnapshotState:\n\t\t| {\n\t\t\t\tphase: \"dropping\" | \"holding\";\n\t\t\t\theld: Array<{ event: HarnessEvent; context: Context }>;\n\t\t\t\treached: Promise<void>;\n\t\t\t\tresolveReached: () => void;\n\t\t }\n\t\t| undefined;\n\tprivate state: \"buffering\" | \"started\" | \"unsubscribed\" = \"buffering\";\n\n\tconstructor(\n\t\tsnapshot: T | undefined,\n\t\tresnapshot: ((context: Context) => Promise<T>) | undefined,\n\t\tonError: (error: unknown, event: HarnessEvent, context: Context) => void | Promise<void>,\n\t) {\n\t\tthis.snapshot = snapshot as T;\n\t\tthis.resnapshotCallback = resnapshot;\n\t\tthis.onError = onError;\n\t}\n\n\tsetSnapshot(snapshot: T): void {\n\t\tthis.snapshot = snapshot;\n\t}\n\n\tstart(listener: EventListener): void {\n\t\tif (this.state !== \"buffering\") throw new Error(\"WatchHandle.start() may be called only once\");\n\t\tthis.state = \"started\";\n\t\tthis.listener = listener;\n\t\tconst buffered = this.buffer;\n\t\tthis.buffer = [];\n\t\tfor (const bufferedEvent of buffered) {\n\t\t\tthis.enqueue(bufferedEvent.event, bufferedEvent.context, bufferedEvent.epoch);\n\t\t}\n\t}\n\n\tasync resnapshot(context: Context): Promise<T> {\n\t\tif (this.state === \"unsubscribed\") throw new Error(\"WatchHandle is unsubscribed\");\n\t\tif (this.resnapshotCallback === undefined) throw new Error(\"WatchHandle does not support resnapshot\");\n\t\tif (this.resnapshotState !== undefined) throw new Error(\"WatchHandle resnapshot is already in progress\");\n\t\tlet resolveReached!: () => void;\n\t\tconst reached = new Promise<void>((resolve) => {\n\t\t\tresolveReached = resolve;\n\t\t});\n\t\tconst resnapshotState = {\n\t\t\tphase: \"dropping\" as const,\n\t\t\theld: [] as Array<{ event: HarnessEvent; context: Context }>,\n\t\t\treached,\n\t\t\tresolveReached,\n\t\t};\n\t\tthis.epoch++;\n\t\tthis.resnapshotState = resnapshotState;\n\t\ttry {\n\t\t\tconst snapshot = await this.resnapshotCallback(context);\n\t\t\tawait reached;\n\t\t\tthis.snapshot = snapshot;\n\t\t\tthis.resnapshotState = undefined;\n\t\t\tfor (const held of resnapshotState.held) this.push(held.event, held.context);\n\t\t\treturn snapshot;\n\t\t} catch (error) {\n\t\t\tthis.resnapshotState = undefined;\n\t\t\tfor (const held of resnapshotState.held) this.push(held.event, held.context);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tmarkResnapshotBoundary(): void {\n\t\tconst resnapshot = this.resnapshotState;\n\t\tif (resnapshot === undefined || resnapshot.phase !== \"dropping\") return;\n\t\tresnapshot.phase = \"holding\";\n\t\tresnapshot.resolveReached();\n\t}\n\n\tunsubscribe(): void {\n\t\tif (this.state === \"unsubscribed\") return;\n\t\tthis.state = \"unsubscribed\";\n\t\tthis.buffer = [];\n\t\tthis.listener = undefined;\n\t\tthis.unsubscribeCallback?.();\n\t\tthis.unsubscribeCallback = undefined;\n\t}\n\n\tpush(event: HarnessEvent, context: Context): void {\n\t\tif (this.state === \"unsubscribed\") return;\n\t\tif (this.resnapshotState?.phase === \"dropping\") return;\n\t\tif (this.resnapshotState?.phase === \"holding\") {\n\t\t\tthis.resnapshotState.held.push({ event, context });\n\t\t\treturn;\n\t\t}\n\t\tif (this.state === \"buffering\") {\n\t\t\tthis.buffer.push({ event, context, epoch: this.epoch });\n\t\t\treturn;\n\t\t}\n\t\tthis.enqueue(event, context, this.epoch);\n\t}\n\n\tsetUnsubscribe(callback: () => void): void {\n\t\tthis.unsubscribeCallback = callback;\n\t}\n\n\tprivate enqueue(event: HarnessEvent, context: Context, epoch: number): void {\n\t\tconst listener = this.listener;\n\t\tif (listener === undefined) return;\n\t\tthis.deliveryTail = this.deliveryTail\n\t\t\t.then(async () => {\n\t\t\t\tif (this.state === \"started\" && epoch === this.epoch) await listener(event, context);\n\t\t\t})\n\t\t\t.catch(async (error) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.onError(error, event, context);\n\t\t\t\t} catch {}\n\t\t\t});\n\t}\n}\n"]}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/harness/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC7G,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,KAAK,iBAAiB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEvF,gEAAgE;AAChE,qBAAa,eAAgB,YAAW,MAAM;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0D;IACpF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmC;IAClE,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,WAAW,CAAoB;IAEvC,EAAE,CAAC,KAAK,SAAS,gBAAgB,EAChC,IAAI,EAAE,KAAK,EACX,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC,GAC7D,MAAM,IAAI,CAWZ;IAED,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;IAED,2FAA2F;IAC3F,SAAS,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAW1E;IAED,KAAK,CAAC,CAAC,EACN,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,EACxC,QAAQ,EAAE,OAAO,EACjB,UAAU,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC/B,WAAW,CAAC,CAAC,CAAC,CAGhB;IAEK,iBAAiB,CAAC,CAAC,EACxB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,EACzC,MAAM,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,EACxC,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAczB;IAED,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAMxB;IAED,OAAO,CAAC,cAAc;IA2CtB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,kBAAkB;YAIZ,OAAO;CAyBrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/harness/events.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EventListener, Events, HarnessEvent, HarnessEventType, WatchHandle } from \"./agent-harness.ts\";\nimport type { Context } from \"./context.ts\";\n\ntype UntypedEventListener = (event: HarnessEvent, context: Context) => void | Promise<void>;\ntype ResnapshotCapture<T> = (context: Context, markBoundary: () => void) => Promise<T>;\n\n/** Passive harness event bus with isolated handler failures. */\nexport class HarnessEventBus implements Events {\n\tprivate readonly listeners = new Map<HarnessEventType, Set<UntypedEventListener>>();\n\tprivate readonly watchListeners = new Set<UntypedEventListener>();\n\tprivate deliveryTail: Promise<void> = Promise.resolve();\n\tprivate closedError: Error | undefined;\n\n\ton<TType extends HarnessEventType>(\n\t\ttype: TType,\n\t\tlistener: EventListener<Extract<HarnessEvent, { type: TType }>>,\n\t): () => void {\n\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\tconst wrapped: UntypedEventListener = (event, context) =>\n\t\t\tlistener(event as Extract<HarnessEvent, { type: TType }>, context);\n\t\tlet listeners = this.listeners.get(type);\n\t\tif (listeners === undefined) {\n\t\t\tlisteners = new Set();\n\t\t\tthis.listeners.set(type, listeners);\n\t\t}\n\t\tlisteners.add(wrapped);\n\t\treturn () => listeners?.delete(wrapped);\n\t}\n\n\temit(event: HarnessEvent, context: Context): Promise<void> {\n\t\treturn this.emitBatch([event], context);\n\t}\n\n\t/** Bind current recipients and append one contiguous batch to the global delivery tail. */\n\temitBatch(events: readonly HarnessEvent[], context: Context): Promise<void> {\n\t\tif (this.closedError !== undefined || events.length === 0) return Promise.resolve();\n\t\tconst bound = events.map((event) => {\n\t\t\tconst payload = structuredClone(event);\n\t\t\treturn { payload, recipients: this.snapshotRecipients(payload) };\n\t\t});\n\t\tconst delivery = this.deliveryTail.then(async () => {\n\t\t\tfor (const { payload, recipients } of bound) await this.deliver(payload, recipients, true, context);\n\t\t});\n\t\tthis.deliveryTail = delivery.catch(() => {});\n\t\treturn delivery;\n\t}\n\n\twatch<T>(\n\t\tsnapshot: T,\n\t\tfilter: (event: HarnessEvent) => boolean,\n\t\t_context: Context,\n\t\tresnapshot?: ResnapshotCapture<T>,\n\t): WatchHandle<T> {\n\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\treturn this.installWatcher(snapshot, filter, resnapshot);\n\t}\n\n\tasync watchFromSnapshot<T>(\n\t\tcapture: (context: Context) => Promise<T>,\n\t\tfilter: (event: HarnessEvent) => boolean,\n\t\tcontext: Context,\n\t): Promise<WatchHandle<T>> {\n\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\tconst watcher = this.installWatcher<T>(undefined, filter, async (captureContext, markBoundary) => {\n\t\t\tconst snapshot = await capture(captureContext);\n\t\t\tmarkBoundary();\n\t\t\treturn snapshot;\n\t\t});\n\t\ttry {\n\t\t\twatcher.setSnapshot(await capture(context));\n\t\t\treturn watcher;\n\t\t} catch (error) {\n\t\t\twatcher.unsubscribe();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tclose(error: Error): void {\n\t\tthis.closedError ??= error;\n\t\tvoid this.deliveryTail.finally(() => {\n\t\t\tthis.listeners.clear();\n\t\t\tthis.watchListeners.clear();\n\t\t});\n\t}\n\n\tprivate installWatcher<T>(\n\t\tsnapshot: T | undefined,\n\t\tfilter: (event: HarnessEvent) => boolean,\n\t\tresnapshot: ResnapshotCapture<T> | undefined,\n\t): BufferedEventWatcher<T> {\n\t\tlet watcher!: BufferedEventWatcher<T>;\n\t\tconst capture =\n\t\t\tresnapshot === undefined\n\t\t\t\t? undefined\n\t\t\t\t: async (context: Context) => {\n\t\t\t\t\t\tlet marked = false;\n\t\t\t\t\t\tconst next = await resnapshot(context, () => {\n\t\t\t\t\t\t\tif (marked) throw new Error(\"Resnapshot boundary was already marked\");\n\t\t\t\t\t\t\tmarked = true;\n\t\t\t\t\t\t\tthis.enqueueBarrier(() => watcher.markResnapshotBoundary());\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!marked) throw new Error(\"Resnapshot capture did not mark its boundary\");\n\t\t\t\t\t\treturn next;\n\t\t\t\t\t};\n\t\twatcher = new BufferedEventWatcher(snapshot, capture, async (error, event, context) => {\n\t\t\tif (event.type === \"handler_error\") return;\n\t\t\tconst normalized = error instanceof Error ? error : new Error(String(error));\n\t\t\tconst lane = \"lane\" in event && typeof event.lane === \"string\" ? event.lane : undefined;\n\t\t\tawait this.emit(\n\t\t\t\t{\n\t\t\t\t\ttype: \"handler_error\",\n\t\t\t\t\tkind: \"event\",\n\t\t\t\t\tevent: event.type,\n\t\t\t\t\terror: normalized.message,\n\t\t\t\t\t...(normalized.stack === undefined ? {} : { stack: normalized.stack }),\n\t\t\t\t\t...(lane === undefined ? {} : { lane }),\n\t\t\t\t},\n\t\t\t\tcontext,\n\t\t\t);\n\t\t});\n\t\tconst watchListener: UntypedEventListener = (event, context) => {\n\t\t\tif (filter(event)) watcher.push(event, context);\n\t\t};\n\t\tthis.watchListeners.add(watchListener);\n\t\twatcher.setUnsubscribe(() => this.watchListeners.delete(watchListener));\n\t\treturn watcher;\n\t}\n\n\tprivate enqueueBarrier(barrier: () => void): void {\n\t\tconst delivery = this.deliveryTail.then(barrier);\n\t\tthis.deliveryTail = delivery.catch(() => {});\n\t}\n\n\tprivate snapshotRecipients(event: HarnessEvent): UntypedEventListener[] {\n\t\treturn [...(this.listeners.get(event.type) ?? []), ...this.watchListeners];\n\t}\n\n\tprivate async deliver(\n\t\tevent: HarnessEvent,\n\t\trecipients: readonly UntypedEventListener[],\n\t\treportErrors: boolean,\n\t\tcontext: Context,\n\t): Promise<void> {\n\t\tfor (const listener of recipients) {\n\t\t\ttry {\n\t\t\t\tawait listener(structuredClone(event), context);\n\t\t\t} catch (error) {\n\t\t\t\tif (!reportErrors || event.type === \"handler_error\") continue;\n\t\t\t\tconst normalized = error instanceof Error ? error : new Error(String(error));\n\t\t\t\tconst lane = \"lane\" in event && typeof event.lane === \"string\" ? event.lane : undefined;\n\t\t\t\tconst handlerError: HarnessEvent = {\n\t\t\t\t\ttype: \"handler_error\",\n\t\t\t\t\tkind: \"event\",\n\t\t\t\t\tevent: event.type,\n\t\t\t\t\terror: normalized.message,\n\t\t\t\t\t...(normalized.stack === undefined ? {} : { stack: normalized.stack }),\n\t\t\t\t\t...(lane === undefined ? {} : { lane }),\n\t\t\t\t};\n\t\t\t\tawait this.deliver(handlerError, this.snapshotRecipients(handlerError), false, context);\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass BufferedEventWatcher<T> implements WatchHandle<T> {\n\tsnapshot: T;\n\tprivate readonly resnapshotCallback: ((context: Context) => Promise<T>) | undefined;\n\tprivate readonly onError: (error: unknown, event: HarnessEvent, context: Context) => void | Promise<void>;\n\tprivate buffer: Array<{ event: HarnessEvent; context: Context; epoch: number }> = [];\n\tprivate listener: EventListener | undefined;\n\tprivate unsubscribeCallback: (() => void) | undefined;\n\tprivate deliveryTail: Promise<void> = Promise.resolve();\n\tprivate epoch = 0;\n\tprivate resnapshotState:\n\t\t| {\n\t\t\t\tphase: \"dropping\" | \"holding\";\n\t\t\t\theld: Array<{ event: HarnessEvent; context: Context }>;\n\t\t\t\treached: Promise<void>;\n\t\t\t\tresolveReached: () => void;\n\t\t }\n\t\t| undefined;\n\tprivate state: \"buffering\" | \"started\" | \"unsubscribed\" = \"buffering\";\n\n\tconstructor(\n\t\tsnapshot: T | undefined,\n\t\tresnapshot: ((context: Context) => Promise<T>) | undefined,\n\t\tonError: (error: unknown, event: HarnessEvent, context: Context) => void | Promise<void>,\n\t) {\n\t\tthis.snapshot = snapshot as T;\n\t\tthis.resnapshotCallback = resnapshot;\n\t\tthis.onError = onError;\n\t}\n\n\tsetSnapshot(snapshot: T): void {\n\t\tthis.snapshot = snapshot;\n\t}\n\n\tstart(listener: EventListener): void {\n\t\tif (this.state !== \"buffering\") throw new Error(\"WatchHandle.start() may be called only once\");\n\t\tthis.state = \"started\";\n\t\tthis.listener = listener;\n\t\tconst buffered = this.buffer;\n\t\tthis.buffer = [];\n\t\tfor (const bufferedEvent of buffered) {\n\t\t\tthis.enqueue(bufferedEvent.event, bufferedEvent.context, bufferedEvent.epoch);\n\t\t}\n\t}\n\n\tasync resnapshot(context: Context): Promise<T> {\n\t\tif (this.state === \"unsubscribed\") throw new Error(\"WatchHandle is unsubscribed\");\n\t\tif (this.resnapshotCallback === undefined) throw new Error(\"WatchHandle does not support resnapshot\");\n\t\tif (this.resnapshotState !== undefined) throw new Error(\"WatchHandle resnapshot is already in progress\");\n\t\tlet resolveReached!: () => void;\n\t\tconst reached = new Promise<void>((resolve) => {\n\t\t\tresolveReached = resolve;\n\t\t});\n\t\tconst resnapshotState = {\n\t\t\tphase: \"dropping\" as const,\n\t\t\theld: [] as Array<{ event: HarnessEvent; context: Context }>,\n\t\t\treached,\n\t\t\tresolveReached,\n\t\t};\n\t\tthis.epoch++;\n\t\tthis.resnapshotState = resnapshotState;\n\t\ttry {\n\t\t\tconst snapshot = await this.resnapshotCallback(context);\n\t\t\tawait reached;\n\t\t\tthis.snapshot = snapshot;\n\t\t\tthis.resnapshotState = undefined;\n\t\t\tfor (const held of resnapshotState.held) this.push(held.event, held.context);\n\t\t\treturn snapshot;\n\t\t} catch (error) {\n\t\t\tthis.resnapshotState = undefined;\n\t\t\tfor (const held of resnapshotState.held) this.push(held.event, held.context);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tmarkResnapshotBoundary(): void {\n\t\tconst resnapshot = this.resnapshotState;\n\t\tif (resnapshot === undefined || resnapshot.phase !== \"dropping\") return;\n\t\tresnapshot.phase = \"holding\";\n\t\tresnapshot.resolveReached();\n\t}\n\n\tunsubscribe(): void {\n\t\tif (this.state === \"unsubscribed\") return;\n\t\tthis.state = \"unsubscribed\";\n\t\tthis.buffer = [];\n\t\tthis.listener = undefined;\n\t\tthis.unsubscribeCallback?.();\n\t\tthis.unsubscribeCallback = undefined;\n\t}\n\n\tpush(event: HarnessEvent, context: Context): void {\n\t\tif (this.state === \"unsubscribed\") return;\n\t\tif (this.resnapshotState?.phase === \"dropping\") return;\n\t\tif (this.resnapshotState?.phase === \"holding\") {\n\t\t\tthis.resnapshotState.held.push({ event, context });\n\t\t\treturn;\n\t\t}\n\t\tif (this.state === \"buffering\") {\n\t\t\tthis.buffer.push({ event, context, epoch: this.epoch });\n\t\t\treturn;\n\t\t}\n\t\tthis.enqueue(event, context, this.epoch);\n\t}\n\n\tsetUnsubscribe(callback: () => void): void {\n\t\tthis.unsubscribeCallback = callback;\n\t}\n\n\tprivate enqueue(event: HarnessEvent, context: Context, epoch: number): void {\n\t\tconst listener = this.listener;\n\t\tif (listener === undefined) return;\n\t\tthis.deliveryTail = this.deliveryTail\n\t\t\t.then(async () => {\n\t\t\t\tif (this.state === \"started\" && epoch === this.epoch) await listener(event, context);\n\t\t\t})\n\t\t\t.catch(async (error) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.onError(error, event, context);\n\t\t\t\t} catch {}\n\t\t\t});\n\t}\n}\n"]}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/harness/events.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EventListener, Events, HarnessEvent, HarnessEventType, WatchHandle } from \"./agent-harness.ts\";\nimport type { Context } from \"./context.ts\";\n\ntype UntypedEventListener = (event: HarnessEvent, context: Context) => void | Promise<void>;\ntype ResnapshotCapture<T> = (context: Context, markBoundary: () => void) => Promise<T>;\n\n/** Passive harness event bus with isolated handler failures. */\nexport class HarnessEventBus implements Events {\n\tprivate readonly listeners = new Map<HarnessEventType, Set<UntypedEventListener>>();\n\tprivate readonly watchListeners = new Set<UntypedEventListener>();\n\tprivate deliveryTail: Promise<void> = Promise.resolve();\n\tprivate closedError: Error | undefined;\n\n\ton<TType extends HarnessEventType>(\n\t\ttype: TType,\n\t\tlistener: EventListener<Extract<HarnessEvent, { type: TType }>>,\n\t): () => void {\n\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\tconst wrapped: UntypedEventListener = (event, context) =>\n\t\t\tlistener(event as Extract<HarnessEvent, { type: TType }>, context);\n\t\tlet listeners = this.listeners.get(type);\n\t\tif (listeners === undefined) {\n\t\t\tlisteners = new Set();\n\t\t\tthis.listeners.set(type, listeners);\n\t\t}\n\t\tlisteners.add(wrapped);\n\t\treturn () => listeners?.delete(wrapped);\n\t}\n\n\temit(event: HarnessEvent, context: Context): Promise<void> {\n\t\treturn this.emitBatch([event], context);\n\t}\n\n\t/** Bind current recipients and append one contiguous batch to the global delivery tail. */\n\temitBatch(events: readonly HarnessEvent[], context: Context): Promise<void> {\n\t\tif (this.closedError !== undefined || events.length === 0) return Promise.resolve();\n\t\tconst bound = events.map((event) => {\n\t\t\tconst payload = structuredClone(event);\n\t\t\treturn { payload, recipients: this.snapshotRecipients(payload) };\n\t\t});\n\t\tconst delivery = this.deliveryTail.then(async () => {\n\t\t\tfor (const { payload, recipients } of bound) await this.deliver(payload, recipients, true, context);\n\t\t});\n\t\tthis.deliveryTail = delivery.catch(() => {});\n\t\treturn delivery;\n\t}\n\n\twatch<T>(\n\t\tsnapshot: T,\n\t\tfilter: (event: HarnessEvent) => boolean,\n\t\t_context: Context,\n\t\tresnapshot?: ResnapshotCapture<T>,\n\t): WatchHandle<T> {\n\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\treturn this.installWatcher(snapshot, filter, resnapshot);\n\t}\n\n\tasync watchFromSnapshot<T>(\n\t\tcapture: (context: Context) => Promise<T>,\n\t\tfilter: (event: HarnessEvent) => boolean,\n\t\tcontext: Context,\n\t): Promise<WatchHandle<T>> {\n\t\tif (this.closedError !== undefined) throw this.closedError;\n\t\tconst watcher = this.installWatcher<T>(undefined, filter, async (captureContext, markBoundary) => {\n\t\t\tconst snapshot = await capture(captureContext);\n\t\t\tmarkBoundary();\n\t\t\treturn snapshot;\n\t\t});\n\t\ttry {\n\t\t\twatcher.setSnapshot(await capture(context));\n\t\t\treturn watcher;\n\t\t} catch (error) {\n\t\t\twatcher.unsubscribe();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tclose(error: Error): void {\n\t\tthis.closedError ??= error;\n\t\tvoid this.deliveryTail.finally(() => {\n\t\t\tthis.listeners.clear();\n\t\t\tthis.watchListeners.clear();\n\t\t});\n\t}\n\n\tprivate installWatcher<T>(\n\t\tsnapshot: T | undefined,\n\t\tfilter: (event: HarnessEvent) => boolean,\n\t\tresnapshot: ResnapshotCapture<T> | undefined,\n\t): BufferedEventWatcher<T> {\n\t\tlet watcher!: BufferedEventWatcher<T>;\n\t\tconst capture =\n\t\t\tresnapshot === undefined\n\t\t\t\t? undefined\n\t\t\t\t: async (context: Context) => {\n\t\t\t\t\t\tlet marked = false;\n\t\t\t\t\t\tconst next = await resnapshot(context, () => {\n\t\t\t\t\t\t\tif (marked) throw new Error(\"Resnapshot boundary was already marked\");\n\t\t\t\t\t\t\tmarked = true;\n\t\t\t\t\t\t\tthis.enqueueBarrier(() => watcher.markResnapshotBoundary());\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!marked) throw new Error(\"Resnapshot capture did not mark its boundary\");\n\t\t\t\t\t\treturn next;\n\t\t\t\t\t};\n\t\twatcher = new BufferedEventWatcher(snapshot, capture, async (error, event, context) => {\n\t\t\tif (event.type === \"handler_error\") return;\n\t\t\tconst normalized = error instanceof Error ? error : new Error(String(error));\n\t\t\tconst lane = \"lane\" in event && typeof event.lane === \"string\" ? event.lane : undefined;\n\t\t\tawait this.emit(\n\t\t\t\t{\n\t\t\t\t\ttype: \"handler_error\",\n\t\t\t\t\tkind: \"event\",\n\t\t\t\t\tevent: event.type,\n\t\t\t\t\terror: normalized.message,\n\t\t\t\t\t...(normalized.stack === undefined ? {} : { stack: normalized.stack }),\n\t\t\t\t\t...(lane === undefined ? {} : { lane }),\n\t\t\t\t},\n\t\t\t\tcontext,\n\t\t\t);\n\t\t});\n\t\tconst watchListener: UntypedEventListener = (event, context) => {\n\t\t\tif (filter(event)) watcher.push(event, context);\n\t\t};\n\t\tthis.watchListeners.add(watchListener);\n\t\twatcher.setUnsubscribe(() => this.watchListeners.delete(watchListener));\n\t\treturn watcher;\n\t}\n\n\tprivate enqueueBarrier(barrier: () => void): void {\n\t\tconst delivery = this.deliveryTail.then(barrier);\n\t\tthis.deliveryTail = delivery.catch(() => {});\n\t}\n\n\tprivate snapshotRecipients(event: HarnessEvent): UntypedEventListener[] {\n\t\treturn [...(this.listeners.get(event.type) ?? []), ...this.watchListeners];\n\t}\n\n\tprivate async deliver(\n\t\tevent: HarnessEvent,\n\t\trecipients: readonly UntypedEventListener[],\n\t\treportErrors: boolean,\n\t\tcontext: Context,\n\t): Promise<void> {\n\t\tfor (const listener of recipients) {\n\t\t\ttry {\n\t\t\t\tawait listener(structuredClone(event), context);\n\t\t\t} catch (error) {\n\t\t\t\tif (!reportErrors || event.type === \"handler_error\") continue;\n\t\t\t\tconst normalized = error instanceof Error ? error : new Error(String(error));\n\t\t\t\tconst lane = \"lane\" in event && typeof event.lane === \"string\" ? event.lane : undefined;\n\t\t\t\tconst handlerError: HarnessEvent = {\n\t\t\t\t\ttype: \"handler_error\",\n\t\t\t\t\tkind: \"event\",\n\t\t\t\t\tevent: event.type,\n\t\t\t\t\terror: normalized.message,\n\t\t\t\t\t...(normalized.stack === undefined ? {} : { stack: normalized.stack }),\n\t\t\t\t\t...(lane === undefined ? {} : { lane }),\n\t\t\t\t};\n\t\t\t\tawait this.deliver(handlerError, this.snapshotRecipients(handlerError), false, context);\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass BufferedEventWatcher<T> implements WatchHandle<T> {\n\tsnapshot: T;\n\tprivate readonly resnapshotCallback: ((context: Context) => Promise<T>) | undefined;\n\tprivate readonly onError: (error: unknown, event: HarnessEvent, context: Context) => void | Promise<void>;\n\tprivate buffer: Array<{ event: HarnessEvent; context: Context; epoch: number }> = [];\n\tprivate listener: EventListener | undefined;\n\tprivate unsubscribeCallback: (() => void) | undefined;\n\tprivate deliveryTail: Promise<void> = Promise.resolve();\n\tprivate epoch = 0;\n\tprivate resnapshotState:\n\t\t| {\n\t\t\t\tphase: \"dropping\" | \"holding\";\n\t\t\t\theld: Array<{ event: HarnessEvent; context: Context }>;\n\t\t\t\treached: Promise<void>;\n\t\t\t\tresolveReached: () => void;\n\t\t }\n\t\t| undefined;\n\tprivate state: \"buffering\" | \"started\" | \"unsubscribed\" = \"buffering\";\n\n\tconstructor(\n\t\tsnapshot: T | undefined,\n\t\tresnapshot: ((context: Context) => Promise<T>) | undefined,\n\t\tonError: (error: unknown, event: HarnessEvent, context: Context) => void | Promise<void>,\n\t) {\n\t\tthis.snapshot = snapshot as T;\n\t\tthis.resnapshotCallback = resnapshot;\n\t\tthis.onError = onError;\n\t}\n\n\tsetSnapshot(snapshot: T): void {\n\t\tthis.snapshot = snapshot;\n\t}\n\n\tstart(listener: EventListener): void {\n\t\tif (this.state !== \"buffering\") throw new Error(\"WatchHandle.start() may be called only once\");\n\t\tthis.state = \"started\";\n\t\tthis.listener = listener;\n\t\tconst buffered = this.buffer;\n\t\tthis.buffer = [];\n\t\tfor (const bufferedEvent of buffered) {\n\t\t\tthis.enqueue(bufferedEvent.event, bufferedEvent.context, bufferedEvent.epoch);\n\t\t}\n\t}\n\n\tasync resnapshot(context: Context): Promise<T> {\n\t\tif (this.state === \"unsubscribed\") throw new Error(\"WatchHandle is unsubscribed\");\n\t\tif (this.resnapshotCallback === undefined) throw new Error(\"WatchHandle does not support resnapshot\");\n\t\tif (this.resnapshotState !== undefined) throw new Error(\"WatchHandle resnapshot is already in progress\");\n\t\tlet resolveReached!: () => void;\n\t\tconst reached = new Promise<void>((resolve) => {\n\t\t\tresolveReached = resolve;\n\t\t});\n\t\tconst resnapshotState = {\n\t\t\tphase: \"dropping\" as const,\n\t\t\theld: [] as Array<{ event: HarnessEvent; context: Context }>,\n\t\t\treached,\n\t\t\tresolveReached,\n\t\t};\n\t\tthis.epoch++;\n\t\tthis.resnapshotState = resnapshotState;\n\t\ttry {\n\t\t\tconst snapshot = await this.resnapshotCallback(context);\n\t\t\tawait reached;\n\t\t\tthis.snapshot = snapshot;\n\t\t\tthis.resnapshotState = undefined;\n\t\t\tfor (const held of resnapshotState.held) this.push(held.event, held.context);\n\t\t\treturn snapshot;\n\t\t} catch (error) {\n\t\t\tthis.resnapshotState = undefined;\n\t\t\tfor (const held of resnapshotState.held) this.push(held.event, held.context);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tmarkResnapshotBoundary(): void {\n\t\tconst resnapshot = this.resnapshotState;\n\t\tif (resnapshot === undefined || resnapshot.phase !== \"dropping\") return;\n\t\tresnapshot.phase = \"holding\";\n\t\tresnapshot.resolveReached();\n\t}\n\n\tunsubscribe(): void {\n\t\tif (this.state === \"unsubscribed\") return;\n\t\tthis.state = \"unsubscribed\";\n\t\tthis.buffer = [];\n\t\tthis.listener = undefined;\n\t\tthis.unsubscribeCallback?.();\n\t\tthis.unsubscribeCallback = undefined;\n\t}\n\n\tpush(event: HarnessEvent, context: Context): void {\n\t\tif (this.state === \"unsubscribed\") return;\n\t\tif (this.resnapshotState?.phase === \"dropping\") return;\n\t\tif (this.resnapshotState?.phase === \"holding\") {\n\t\t\tthis.resnapshotState.held.push({ event, context });\n\t\t\treturn;\n\t\t}\n\t\tif (this.state === \"buffering\") {\n\t\t\tthis.buffer.push({ event, context, epoch: this.epoch });\n\t\t\treturn;\n\t\t}\n\t\tthis.enqueue(event, context, this.epoch);\n\t}\n\n\tsetUnsubscribe(callback: () => void): void {\n\t\tthis.unsubscribeCallback = callback;\n\t}\n\n\tprivate enqueue(event: HarnessEvent, context: Context, epoch: number): void {\n\t\tconst listener = this.listener;\n\t\tif (listener === undefined) return;\n\t\tthis.deliveryTail = this.deliveryTail\n\t\t\t.then(async () => {\n\t\t\t\tif (this.state === \"started\" && epoch === this.epoch) await listener(event, context);\n\t\t\t})\n\t\t\t.catch(async (error) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.onError(error, event, context);\n\t\t\t\t} catch {}\n\t\t\t});\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"assistant.d.ts","sourceRoot":"","sources":["../../../src/harness/execution/assistant.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tContext as AiContext,\n\tApi,\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tAssistantMessageEventStream,\n\tMessage,\n\tModel,\n\tSimpleStreamOptions,\n\tTool,\n} from \"@earendil-works/pi-ai\";\nimport type { AgentMessage, ThinkingLevel } from \"../../types.ts\";\nimport { type Context, getTelemetryContext } from \"../context.ts\";\nimport type { SettledAssistantMessage } from \"../session/types.ts\";\nimport type { AgentHarnessStreamOptions } from \"../types.ts\";\nimport { AbortRequested } from \"./effect-gate.ts\";\n\n/** HTTP response metadata captured before the provider response body is consumed. */\nexport interface AssistantResponseMetadata {\n\tstatus?: number;\n\theaders?: Record<string, string>;\n}\n\n/** Process-local lifecycle observer for one assistant stream. */\nexport interface AssistantStreamObserver {\n\tstart(\n\t\tmessage: AssistantMessage,\n\t\tevent: Extract<AssistantMessageEvent, { type: \"start\" }>,\n\t\tcontext: Context,\n\t): void | Promise<void>;\n\tupdate(message: AssistantMessage, event: AssistantMessageEvent, context: Context): void | Promise<void>;\n\tend(message: SettledAssistantMessage, context: Context): void | Promise<void>;\n}\n\n/** Executable inputs for one already-approved assistant provider request. */\nexport interface HarnessAssistantStreamConfig {\n\tmodel: Model<Api>;\n\tsystemPrompt: string;\n\ttools?: Tool[];\n\tthinkingLevel: ThinkingLevel;\n\tstreamOptions: AgentHarnessStreamOptions;\n\ttransformContext?: (\n\t\trequestContext: { messages: AgentMessage[]; systemPrompt: string },\n\t\tcontext: Context,\n\t) => Promise<{ messages: AgentMessage[]; systemPrompt: string }>;\n\ttoProviderMessages: (messages: AgentMessage[], context: Context) => Message[] | Promise<Message[]>;\n\tbeforePayload?: (\n\t\tpayload: unknown,\n\t\tmodel: Model<Api>,\n\t\tcontext: Context,\n\t) => unknown | undefined | Promise<unknown | undefined>;\n\tafterResponse?: (\n\t\tmessage: SettledAssistantMessage,\n\t\tmetadata: AssistantResponseMetadata,\n\t\tcontext: Context,\n\t) => Promise<SettledAssistantMessage>;\n\trequest(\n\t\taiContext: AiContext,\n\t\toptions: SimpleStreamOptions,\n\t\tcontext: Context,\n\t): AssistantMessageEventStream | Promise<AssistantMessageEventStream>;\n\tobserver: AssistantStreamObserver;\n}\n\nfunction createRequestOptions(\n\tconfig: HarnessAssistantStreamConfig,\n\tcaptureMetadata: (metadata: AssistantResponseMetadata) => void,\n\tcontext: Context,\n): SimpleStreamOptions {\n\tconst options = config.streamOptions;\n\treturn {\n\t\ttransport: options.transport,\n\t\ttimeoutMs: options.timeoutMs,\n\t\tmaxRetries: options.maxRetries,\n\t\tmaxRetryDelayMs: options.maxRetryDelayMs,\n\t\theaders: options.headers,\n\t\tmetadata: options.metadata,\n\t\tcacheRetention: options.cacheRetention,\n\t\tdeferred: options.deferred,\n\t\t...(config.thinkingLevel === \"off\" ? {} : { reasoning: config.thinkingLevel }),\n\t\tsignal: context.abortSignal,\n\t\ttelemetryContext: getTelemetryContext(context),\n\t\tonPayload:\n\t\t\tconfig.beforePayload === undefined\n\t\t\t\t? undefined\n\t\t\t\t: (payload, model) => config.beforePayload?.(payload, model, context),\n\t\tonResponse: (response) => {\n\t\t\tcaptureMetadata({ status: response.status, headers: response.headers });\n\t\t},\n\t};\n}\n\nfunction isUpdateEvent(\n\tevent: AssistantMessageEvent,\n): event is Exclude<AssistantMessageEvent, { type: \"start\" | \"done\" | \"error\" }> {\n\treturn event.type !== \"start\" && event.type !== \"done\" && event.type !== \"error\";\n}\n\nexport async function consumeAssistantStream(\n\tstream: AssistantMessageEventStream,\n\tobserver: AssistantStreamObserver,\n\tafterResponse:\n\t\t| ((message: SettledAssistantMessage, context: Context) => Promise<SettledAssistantMessage>)\n\t\t| undefined,\n\tcontext: Context,\n): Promise<SettledAssistantMessage> {\n\tlet started = false;\n\tfor await (const event of stream) {\n\t\tif (event.type === \"start\") {\n\t\t\tif (started) throw new Error(\"Assistant message stream emitted more than one start event\");\n\t\t\tstarted = true;\n\t\t\tawait observer.start({ ...event.partial }, event, context);\n\t\t} else if (isUpdateEvent(event)) {\n\t\t\tif (!started) throw new Error(`Assistant message stream emitted ${event.type} before start`);\n\t\t\tawait observer.update({ ...event.partial }, event, context);\n\t\t} else if (event.type === \"done\" && !started) {\n\t\t\tthrow new Error(\"Assistant message stream emitted done before start\");\n\t\t}\n\t}\n\n\tconst settled = (await stream.result()) as SettledAssistantMessage;\n\tlet finalMessage = settled;\n\tif (afterResponse !== undefined) {\n\t\ttry {\n\t\t\tfinalMessage = await afterResponse(settled, context);\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof AbortRequested)) throw error;\n\t\t\tawait error.cancellation;\n\t\t}\n\t}\n\tawait observer.end(finalMessage, context);\n\treturn finalMessage;\n}\n\n/** Stream one assistant response without mutating the caller's message list. */\nexport async function streamHarnessAssistant(\n\tmessages: AgentMessage[],\n\tconfig: HarnessAssistantStreamConfig,\n\tcontext: Context,\n): Promise<SettledAssistantMessage> {\n\tlet requestContext = { messages: messages.slice(), systemPrompt: config.systemPrompt };\n\tif (config.transformContext) {\n\t\trequestContext = await config.transformContext(requestContext, context);\n\t}\n\n\tconst providerMessages = await config.toProviderMessages(requestContext.messages, context);\n\tconst aiContext: AiContext = {\n\t\tsystemPrompt: requestContext.systemPrompt,\n\t\tmessages: providerMessages,\n\t\ttools: config.tools,\n\t};\n\n\tlet metadata: AssistantResponseMetadata = {};\n\tconst stream = await config.request(\n\t\taiContext,\n\t\tcreateRequestOptions(\n\t\t\tconfig,\n\t\t\t(nextMetadata) => {\n\t\t\t\tmetadata = nextMetadata;\n\t\t\t},\n\t\t\tcontext,\n\t\t),\n\t\tcontext,\n\t);\n\n\tconst afterResponse = config.afterResponse;\n\treturn consumeAssistantStream(\n\t\tstream,\n\t\tconfig.observer,\n\t\tafterResponse === undefined\n\t\t\t? undefined\n\t\t\t: (message, afterContext) => afterResponse(message, metadata, afterContext),\n\t\tcontext,\n\t);\n}\n"]}
1
+ {"version":3,"file":"assistant.d.ts","sourceRoot":"","sources":["../../../src/harness/execution/assistant.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"assistant.js","sourceRoot":"","sources":["../../../src/harness/execution/assistant.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tContext as AiContext,\n\tApi,\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tAssistantMessageEventStream,\n\tMessage,\n\tModel,\n\tSimpleStreamOptions,\n\tTool,\n} from \"@earendil-works/pi-ai\";\nimport type { AgentMessage, ThinkingLevel } from \"../../types.ts\";\nimport { type Context, getTelemetryContext } from \"../context.ts\";\nimport type { SettledAssistantMessage } from \"../session/types.ts\";\nimport type { AgentHarnessStreamOptions } from \"../types.ts\";\nimport { AbortRequested } from \"./effect-gate.ts\";\n\n/** HTTP response metadata captured before the provider response body is consumed. */\nexport interface AssistantResponseMetadata {\n\tstatus?: number;\n\theaders?: Record<string, string>;\n}\n\n/** Process-local lifecycle observer for one assistant stream. */\nexport interface AssistantStreamObserver {\n\tstart(\n\t\tmessage: AssistantMessage,\n\t\tevent: Extract<AssistantMessageEvent, { type: \"start\" }>,\n\t\tcontext: Context,\n\t): void | Promise<void>;\n\tupdate(message: AssistantMessage, event: AssistantMessageEvent, context: Context): void | Promise<void>;\n\tend(message: SettledAssistantMessage, context: Context): void | Promise<void>;\n}\n\n/** Executable inputs for one already-approved assistant provider request. */\nexport interface HarnessAssistantStreamConfig {\n\tmodel: Model<Api>;\n\tsystemPrompt: string;\n\ttools?: Tool[];\n\tthinkingLevel: ThinkingLevel;\n\tstreamOptions: AgentHarnessStreamOptions;\n\ttransformContext?: (\n\t\trequestContext: { messages: AgentMessage[]; systemPrompt: string },\n\t\tcontext: Context,\n\t) => Promise<{ messages: AgentMessage[]; systemPrompt: string }>;\n\ttoProviderMessages: (messages: AgentMessage[], context: Context) => Message[] | Promise<Message[]>;\n\tbeforePayload?: (\n\t\tpayload: unknown,\n\t\tmodel: Model<Api>,\n\t\tcontext: Context,\n\t) => unknown | undefined | Promise<unknown | undefined>;\n\tafterResponse?: (\n\t\tmessage: SettledAssistantMessage,\n\t\tmetadata: AssistantResponseMetadata,\n\t\tcontext: Context,\n\t) => Promise<SettledAssistantMessage>;\n\trequest(\n\t\taiContext: AiContext,\n\t\toptions: SimpleStreamOptions,\n\t\tcontext: Context,\n\t): AssistantMessageEventStream | Promise<AssistantMessageEventStream>;\n\tobserver: AssistantStreamObserver;\n}\n\nfunction createRequestOptions(\n\tconfig: HarnessAssistantStreamConfig,\n\tcaptureMetadata: (metadata: AssistantResponseMetadata) => void,\n\tcontext: Context,\n): SimpleStreamOptions {\n\tconst options = config.streamOptions;\n\treturn {\n\t\ttransport: options.transport,\n\t\ttimeoutMs: options.timeoutMs,\n\t\tmaxRetries: options.maxRetries,\n\t\tmaxRetryDelayMs: options.maxRetryDelayMs,\n\t\theaders: options.headers,\n\t\tmetadata: options.metadata,\n\t\tcacheRetention: options.cacheRetention,\n\t\tdeferred: options.deferred,\n\t\t...(config.thinkingLevel === \"off\" ? {} : { reasoning: config.thinkingLevel }),\n\t\tsignal: context.abortSignal,\n\t\ttelemetryContext: getTelemetryContext(context),\n\t\tonPayload:\n\t\t\tconfig.beforePayload === undefined\n\t\t\t\t? undefined\n\t\t\t\t: (payload, model) => config.beforePayload?.(payload, model, context),\n\t\tonResponse: (response) => {\n\t\t\tcaptureMetadata({ status: response.status, headers: response.headers });\n\t\t},\n\t};\n}\n\nfunction isUpdateEvent(\n\tevent: AssistantMessageEvent,\n): event is Exclude<AssistantMessageEvent, { type: \"start\" | \"done\" | \"error\" }> {\n\treturn event.type !== \"start\" && event.type !== \"done\" && event.type !== \"error\";\n}\n\nexport async function consumeAssistantStream(\n\tstream: AssistantMessageEventStream,\n\tobserver: AssistantStreamObserver,\n\tafterResponse:\n\t\t| ((message: SettledAssistantMessage, context: Context) => Promise<SettledAssistantMessage>)\n\t\t| undefined,\n\tcontext: Context,\n): Promise<SettledAssistantMessage> {\n\tlet started = false;\n\tfor await (const event of stream) {\n\t\tif (event.type === \"start\") {\n\t\t\tif (started) throw new Error(\"Assistant message stream emitted more than one start event\");\n\t\t\tstarted = true;\n\t\t\tawait observer.start({ ...event.partial }, event, context);\n\t\t} else if (isUpdateEvent(event)) {\n\t\t\tif (!started) throw new Error(`Assistant message stream emitted ${event.type} before start`);\n\t\t\tawait observer.update({ ...event.partial }, event, context);\n\t\t} else if (event.type === \"done\" && !started) {\n\t\t\tthrow new Error(\"Assistant message stream emitted done before start\");\n\t\t}\n\t}\n\n\tconst settled = (await stream.result()) as SettledAssistantMessage;\n\tlet finalMessage = settled;\n\tif (afterResponse !== undefined) {\n\t\ttry {\n\t\t\tfinalMessage = await afterResponse(settled, context);\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof AbortRequested)) throw error;\n\t\t\tawait error.cancellation;\n\t\t}\n\t}\n\tawait observer.end(finalMessage, context);\n\treturn finalMessage;\n}\n\n/** Stream one assistant response without mutating the caller's message list. */\nexport async function streamHarnessAssistant(\n\tmessages: AgentMessage[],\n\tconfig: HarnessAssistantStreamConfig,\n\tcontext: Context,\n): Promise<SettledAssistantMessage> {\n\tlet requestContext = { messages: messages.slice(), systemPrompt: config.systemPrompt };\n\tif (config.transformContext) {\n\t\trequestContext = await config.transformContext(requestContext, context);\n\t}\n\n\tconst providerMessages = await config.toProviderMessages(requestContext.messages, context);\n\tconst aiContext: AiContext = {\n\t\tsystemPrompt: requestContext.systemPrompt,\n\t\tmessages: providerMessages,\n\t\ttools: config.tools,\n\t};\n\n\tlet metadata: AssistantResponseMetadata = {};\n\tconst stream = await config.request(\n\t\taiContext,\n\t\tcreateRequestOptions(\n\t\t\tconfig,\n\t\t\t(nextMetadata) => {\n\t\t\t\tmetadata = nextMetadata;\n\t\t\t},\n\t\t\tcontext,\n\t\t),\n\t\tcontext,\n\t);\n\n\tconst afterResponse = config.afterResponse;\n\treturn consumeAssistantStream(\n\t\tstream,\n\t\tconfig.observer,\n\t\tafterResponse === undefined\n\t\t\t? undefined\n\t\t\t: (message, afterContext) => afterResponse(message, metadata, afterContext),\n\t\tcontext,\n\t);\n}\n"]}
1
+ {"version":3,"file":"assistant.js","sourceRoot":"","sources":["../../../src/harness/execution/assistant.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tContext as AiContext,\n\tApi,\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tAssistantMessageEventStream,\n\tMessage,\n\tModel,\n\tSimpleStreamOptions,\n\tTool,\n} from \"@earendil-works/pi-ai\";\nimport type { AgentMessage, ThinkingLevel } from \"../../types.ts\";\nimport { type Context, getTelemetryContext } from \"../context.ts\";\nimport type { SettledAssistantMessage } from \"../session/types.ts\";\nimport type { AgentHarnessStreamOptions } from \"../types.ts\";\nimport { AbortRequested } from \"./effect-gate.ts\";\n\n/** HTTP response metadata captured before the provider response body is consumed. */\nexport interface AssistantResponseMetadata {\n\tstatus?: number;\n\theaders?: Record<string, string>;\n}\n\n/** Process-local lifecycle observer for one assistant stream. */\nexport interface AssistantStreamObserver {\n\tstart(\n\t\tmessage: AssistantMessage,\n\t\tevent: Extract<AssistantMessageEvent, { type: \"start\" }>,\n\t\tcontext: Context,\n\t): void | Promise<void>;\n\tupdate(message: AssistantMessage, event: AssistantMessageEvent, context: Context): void | Promise<void>;\n\tend(message: SettledAssistantMessage, context: Context): void | Promise<void>;\n}\n\n/** Executable inputs for one already-approved assistant provider request. */\nexport interface HarnessAssistantStreamConfig {\n\tmodel: Model<Api>;\n\tsystemPrompt: string;\n\ttools?: Tool[];\n\tthinkingLevel: ThinkingLevel;\n\tstreamOptions: AgentHarnessStreamOptions;\n\ttransformContext?: (\n\t\trequestContext: { messages: AgentMessage[]; systemPrompt: string },\n\t\tcontext: Context,\n\t) => Promise<{ messages: AgentMessage[]; systemPrompt: string }>;\n\ttoProviderMessages: (messages: AgentMessage[], context: Context) => Message[] | Promise<Message[]>;\n\tbeforePayload?: (\n\t\tpayload: unknown,\n\t\tmodel: Model<Api>,\n\t\tcontext: Context,\n\t) => unknown | undefined | Promise<unknown | undefined>;\n\tafterResponse?: (\n\t\tmessage: SettledAssistantMessage,\n\t\tmetadata: AssistantResponseMetadata,\n\t\tcontext: Context,\n\t) => Promise<SettledAssistantMessage>;\n\trequest(\n\t\taiContext: AiContext,\n\t\toptions: SimpleStreamOptions,\n\t\tcontext: Context,\n\t): AssistantMessageEventStream | Promise<AssistantMessageEventStream>;\n\tobserver: AssistantStreamObserver;\n}\n\nfunction createRequestOptions(\n\tconfig: HarnessAssistantStreamConfig,\n\tcaptureMetadata: (metadata: AssistantResponseMetadata) => void,\n\tcontext: Context,\n): SimpleStreamOptions {\n\tconst options = config.streamOptions;\n\treturn {\n\t\ttransport: options.transport,\n\t\ttimeoutMs: options.timeoutMs,\n\t\tmaxRetries: options.maxRetries,\n\t\tmaxRetryDelayMs: options.maxRetryDelayMs,\n\t\theaders: options.headers,\n\t\tmetadata: options.metadata,\n\t\tcacheRetention: options.cacheRetention,\n\t\tdeferred: options.deferred,\n\t\t...(config.thinkingLevel === \"off\" ? {} : { reasoning: config.thinkingLevel }),\n\t\tsignal: context.abortSignal,\n\t\ttelemetryContext: getTelemetryContext(context),\n\t\tonPayload:\n\t\t\tconfig.beforePayload === undefined\n\t\t\t\t? undefined\n\t\t\t\t: (payload, model) => config.beforePayload?.(payload, model, context),\n\t\tonResponse: (response) => {\n\t\t\tcaptureMetadata({ status: response.status, headers: response.headers });\n\t\t},\n\t};\n}\n\nfunction isUpdateEvent(\n\tevent: AssistantMessageEvent,\n): event is Exclude<AssistantMessageEvent, { type: \"start\" | \"done\" | \"error\" }> {\n\treturn event.type !== \"start\" && event.type !== \"done\" && event.type !== \"error\";\n}\n\nexport async function consumeAssistantStream(\n\tstream: AssistantMessageEventStream,\n\tobserver: AssistantStreamObserver,\n\tafterResponse:\n\t\t| ((message: SettledAssistantMessage, context: Context) => Promise<SettledAssistantMessage>)\n\t\t| undefined,\n\tcontext: Context,\n): Promise<SettledAssistantMessage> {\n\tlet started = false;\n\tfor await (const event of stream) {\n\t\tif (event.type === \"start\") {\n\t\t\tif (started) throw new Error(\"Assistant message stream emitted more than one start event\");\n\t\t\tstarted = true;\n\t\t\tawait observer.start({ ...event.partial }, event, context);\n\t\t} else if (isUpdateEvent(event)) {\n\t\t\tif (!started) throw new Error(`Assistant message stream emitted ${event.type} before start`);\n\t\t\tawait observer.update({ ...event.partial }, event, context);\n\t\t} else if (event.type === \"done\" && !started) {\n\t\t\tthrow new Error(\"Assistant message stream emitted done before start\");\n\t\t}\n\t}\n\n\tconst settled = (await stream.result()) as SettledAssistantMessage;\n\tlet finalMessage = settled;\n\tif (afterResponse !== undefined) {\n\t\ttry {\n\t\t\tfinalMessage = await afterResponse(settled, context);\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof AbortRequested)) throw error;\n\t\t\tawait error.cancellation;\n\t\t}\n\t}\n\tawait observer.end(finalMessage, context);\n\treturn finalMessage;\n}\n\n/** Stream one assistant response without mutating the caller's message list. */\nexport async function streamHarnessAssistant(\n\tmessages: AgentMessage[],\n\tconfig: HarnessAssistantStreamConfig,\n\tcontext: Context,\n): Promise<SettledAssistantMessage> {\n\tlet requestContext = { messages: messages.slice(), systemPrompt: config.systemPrompt };\n\tif (config.transformContext) {\n\t\trequestContext = await config.transformContext(requestContext, context);\n\t}\n\n\tconst providerMessages = await config.toProviderMessages(requestContext.messages, context);\n\tconst aiContext: AiContext = {\n\t\tsystemPrompt: requestContext.systemPrompt,\n\t\tmessages: providerMessages,\n\t\ttools: config.tools,\n\t};\n\n\tlet metadata: AssistantResponseMetadata = {};\n\tconst stream = await config.request(\n\t\taiContext,\n\t\tcreateRequestOptions(\n\t\t\tconfig,\n\t\t\t(nextMetadata) => {\n\t\t\t\tmetadata = nextMetadata;\n\t\t\t},\n\t\t\tcontext,\n\t\t),\n\t\tcontext,\n\t);\n\n\tconst afterResponse = config.afterResponse;\n\treturn consumeAssistantStream(\n\t\tstream,\n\t\tconfig.observer,\n\t\tafterResponse === undefined\n\t\t\t? undefined\n\t\t\t: (message, afterContext) => afterResponse(message, metadata, afterContext),\n\t\tcontext,\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"effect-gate.d.ts","sourceRoot":"","sources":["../../../src/harness/execution/effect-gate.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,qBAAa,cAAe,SAAQ,KAAK;IACxC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,YAAY,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,EAItC;CACD;AAED,4EAA4E;AAC5E,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;CAC7B;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC3B,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9C,WAAW,IAAI,IAAI,CAAC;IACpB,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CAC1B;AAOD,kFAAkF;AAClF,wBAAgB,UAAU,IAAI;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAiCjE","sourcesContent":["/** Expected internal control flow when cancellation wins effect admission. */\nexport class AbortRequested extends Error {\n\treadonly cancellation: Promise<void>;\n\n\tconstructor(cancellation: Promise<void>) {\n\t\tsuper(\"Abort requested\");\n\t\tthis.name = \"AbortRequested\";\n\t\tthis.cancellation = cancellation;\n\t}\n}\n\n/** Procedure-facing synchronous admission capability for one drive pass. */\nexport interface Gate {\n\treadonly signal: AbortSignal;\n\tadmit<T>(invoke: () => T): T;\n}\n\n/** Owner-facing lifecycle controls for one drive pass. */\nexport interface GateControl {\n\tbeginAbort(cancellation: Promise<void>): void;\n\tsignalAbort(): void;\n\tclose(error: Error): void;\n}\n\ntype GateState =\n\t| { status: \"open\" }\n\t| { status: \"aborting\"; cancellation: Promise<void> }\n\t| { status: \"closed\"; error: Error };\n\n/** Create separate procedure-facing and owner-facing views of one effect gate. */\nexport function createGate(): { gate: Gate; control: GateControl } {\n\tlet state: GateState = { status: \"open\" };\n\tconst controller = new AbortController();\n\n\tconst check = (): void => {\n\t\tif (state.status === \"aborting\") throw new AbortRequested(state.cancellation);\n\t\tif (state.status === \"closed\") throw state.error;\n\t};\n\n\treturn {\n\t\tgate: {\n\t\t\tadmit<T>(invoke: () => T): T {\n\t\t\t\tcheck();\n\t\t\t\treturn invoke();\n\t\t\t},\n\t\t\tsignal: controller.signal,\n\t\t},\n\t\tcontrol: {\n\t\t\tbeginAbort(cancellation) {\n\t\t\t\tif (state.status !== \"open\") return;\n\t\t\t\tstate = { status: \"aborting\", cancellation };\n\t\t\t},\n\t\t\tsignalAbort() {\n\t\t\t\tif (state.status !== \"aborting\" || controller.signal.aborted) return;\n\t\t\t\tcontroller.abort(new AbortRequested(state.cancellation));\n\t\t\t},\n\t\t\tclose(error) {\n\t\t\t\tif (state.status === \"closed\") return;\n\t\t\t\tstate = { status: \"closed\", error };\n\t\t\t\tif (!controller.signal.aborted) controller.abort(error);\n\t\t\t},\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"effect-gate.d.ts","sourceRoot":"","sources":["../../../src/harness/execution/effect-gate.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,qBAAa,cAAe,SAAQ,KAAK;IACxC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,YAAY,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,EAItC;CACD;AAED,4EAA4E;AAC5E,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;CAC7B;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC3B,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9C,WAAW,IAAI,IAAI,CAAC;IACpB,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CAC1B;AAOD,kFAAkF;AAClF,wBAAgB,UAAU,IAAI;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAiCjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"effect-gate.js","sourceRoot":"","sources":["../../../src/harness/execution/effect-gate.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC/B,YAAY,CAAgB;IAErC,YAAY,YAA2B,EAAE;QACxC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IAAA,CACjC;CACD;AAoBD,kFAAkF;AAClF,MAAM,UAAU,UAAU,GAAyC;IAClE,IAAI,KAAK,GAAc,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU;YAAE,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9E,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC,KAAK,CAAC;IAAA,CACjD,CAAC;IAEF,OAAO;QACN,IAAI,EAAE;YACL,KAAK,CAAI,MAAe,EAAK;gBAC5B,KAAK,EAAE,CAAC;gBACR,OAAO,MAAM,EAAE,CAAC;YAAA,CAChB;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SACzB;QACD,OAAO,EAAE;YACR,UAAU,CAAC,YAAY,EAAE;gBACxB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;oBAAE,OAAO;gBACpC,KAAK,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;YAAA,CAC7C;YACD,WAAW,GAAG;gBACb,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO;gBACrE,UAAU,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;YAAA,CACzD;YACD,KAAK,CAAC,KAAK,EAAE;gBACZ,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;oBAAE,OAAO;gBACtC,KAAK,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAAA,CACxD;SACD;KACD,CAAC;AAAA,CACF","sourcesContent":["/** Expected internal control flow when cancellation wins effect admission. */\nexport class AbortRequested extends Error {\n\treadonly cancellation: Promise<void>;\n\n\tconstructor(cancellation: Promise<void>) {\n\t\tsuper(\"Abort requested\");\n\t\tthis.name = \"AbortRequested\";\n\t\tthis.cancellation = cancellation;\n\t}\n}\n\n/** Procedure-facing synchronous admission capability for one drive pass. */\nexport interface Gate {\n\treadonly signal: AbortSignal;\n\tadmit<T>(invoke: () => T): T;\n}\n\n/** Owner-facing lifecycle controls for one drive pass. */\nexport interface GateControl {\n\tbeginAbort(cancellation: Promise<void>): void;\n\tsignalAbort(): void;\n\tclose(error: Error): void;\n}\n\ntype GateState =\n\t| { status: \"open\" }\n\t| { status: \"aborting\"; cancellation: Promise<void> }\n\t| { status: \"closed\"; error: Error };\n\n/** Create separate procedure-facing and owner-facing views of one effect gate. */\nexport function createGate(): { gate: Gate; control: GateControl } {\n\tlet state: GateState = { status: \"open\" };\n\tconst controller = new AbortController();\n\n\tconst check = (): void => {\n\t\tif (state.status === \"aborting\") throw new AbortRequested(state.cancellation);\n\t\tif (state.status === \"closed\") throw state.error;\n\t};\n\n\treturn {\n\t\tgate: {\n\t\t\tadmit<T>(invoke: () => T): T {\n\t\t\t\tcheck();\n\t\t\t\treturn invoke();\n\t\t\t},\n\t\t\tsignal: controller.signal,\n\t\t},\n\t\tcontrol: {\n\t\t\tbeginAbort(cancellation) {\n\t\t\t\tif (state.status !== \"open\") return;\n\t\t\t\tstate = { status: \"aborting\", cancellation };\n\t\t\t},\n\t\t\tsignalAbort() {\n\t\t\t\tif (state.status !== \"aborting\" || controller.signal.aborted) return;\n\t\t\t\tcontroller.abort(new AbortRequested(state.cancellation));\n\t\t\t},\n\t\t\tclose(error) {\n\t\t\t\tif (state.status === \"closed\") return;\n\t\t\t\tstate = { status: \"closed\", error };\n\t\t\t\tif (!controller.signal.aborted) controller.abort(error);\n\t\t\t},\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"effect-gate.js","sourceRoot":"","sources":["../../../src/harness/execution/effect-gate.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC/B,YAAY,CAAgB;IAErC,YAAY,YAA2B;QACtC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,CAAC;CACD;AAoBD,kFAAkF;AAClF,MAAM,UAAU,UAAU;IACzB,IAAI,KAAK,GAAc,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,MAAM,KAAK,GAAG,GAAS,EAAE;QACxB,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU;YAAE,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9E,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC,KAAK,CAAC;IAClD,CAAC,CAAC;IAEF,OAAO;QACN,IAAI,EAAE;YACL,KAAK,CAAI,MAAe;gBACvB,KAAK,EAAE,CAAC;gBACR,OAAO,MAAM,EAAE,CAAC;YACjB,CAAC;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SACzB;QACD,OAAO,EAAE;YACR,UAAU,CAAC,YAAY;gBACtB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;oBAAE,OAAO;gBACpC,KAAK,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;YAC9C,CAAC;YACD,WAAW;gBACV,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO;gBACrE,UAAU,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,KAAK,CAAC,KAAK;gBACV,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;oBAAE,OAAO;gBACtC,KAAK,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzD,CAAC;SACD;KACD,CAAC;AACH,CAAC","sourcesContent":["/** Expected internal control flow when cancellation wins effect admission. */\nexport class AbortRequested extends Error {\n\treadonly cancellation: Promise<void>;\n\n\tconstructor(cancellation: Promise<void>) {\n\t\tsuper(\"Abort requested\");\n\t\tthis.name = \"AbortRequested\";\n\t\tthis.cancellation = cancellation;\n\t}\n}\n\n/** Procedure-facing synchronous admission capability for one drive pass. */\nexport interface Gate {\n\treadonly signal: AbortSignal;\n\tadmit<T>(invoke: () => T): T;\n}\n\n/** Owner-facing lifecycle controls for one drive pass. */\nexport interface GateControl {\n\tbeginAbort(cancellation: Promise<void>): void;\n\tsignalAbort(): void;\n\tclose(error: Error): void;\n}\n\ntype GateState =\n\t| { status: \"open\" }\n\t| { status: \"aborting\"; cancellation: Promise<void> }\n\t| { status: \"closed\"; error: Error };\n\n/** Create separate procedure-facing and owner-facing views of one effect gate. */\nexport function createGate(): { gate: Gate; control: GateControl } {\n\tlet state: GateState = { status: \"open\" };\n\tconst controller = new AbortController();\n\n\tconst check = (): void => {\n\t\tif (state.status === \"aborting\") throw new AbortRequested(state.cancellation);\n\t\tif (state.status === \"closed\") throw state.error;\n\t};\n\n\treturn {\n\t\tgate: {\n\t\t\tadmit<T>(invoke: () => T): T {\n\t\t\t\tcheck();\n\t\t\t\treturn invoke();\n\t\t\t},\n\t\t\tsignal: controller.signal,\n\t\t},\n\t\tcontrol: {\n\t\t\tbeginAbort(cancellation) {\n\t\t\t\tif (state.status !== \"open\") return;\n\t\t\t\tstate = { status: \"aborting\", cancellation };\n\t\t\t},\n\t\t\tsignalAbort() {\n\t\t\t\tif (state.status !== \"aborting\" || controller.signal.aborted) return;\n\t\t\t\tcontroller.abort(new AbortRequested(state.cancellation));\n\t\t\t},\n\t\t\tclose(error) {\n\t\t\t\tif (state.status === \"closed\") return;\n\t\t\t\tstate = { status: \"closed\", error };\n\t\t\t\tif (!controller.signal.aborted) controller.abort(error);\n\t\t\t},\n\t\t},\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/harness/execution/tools.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ToolResultMessage, validateToolArguments } from \"@earendil-works/pi-ai\";\nimport type { AgentToolCall, AgentToolResult } from \"../../types.ts\";\nimport { type Context, withAbortSignal } from \"../context.ts\";\nimport type { JsonValue } from \"../session/types.ts\";\nimport type { AgentHarnessTool, AgentHarnessToolInvocation, AgentHarnessToolUpdateCallback } from \"../types.ts\";\nimport type { Gate } from \"./effect-gate.ts\";\n\n/** A tool call whose tool exists and whose prepared arguments passed validation. */\nexport interface PreparedToolCall<TContext extends object | undefined> {\n\ttoolCall: AgentToolCall;\n\ttool: AgentHarnessTool<TContext>;\n\targs: Record<string, JsonValue>;\n}\n\n/** Synthetic result produced without crossing the external tool-effect boundary. */\nexport interface ImmediateToolOutcome {\n\tkind: \"immediate\";\n\ttoolCall: AgentToolCall;\n\tresult: AgentToolResult<unknown>;\n\tisError: true;\n\tterminate: boolean;\n}\n\n/** Aggregated decision from the before-tool hook pipeline. */\nexport interface BeforeToolDecision {\n\targs?: Record<string, JsonValue>;\n\tblock?: { reason: string; terminate?: boolean };\n}\n\n/** A prepared call cleared for durable intent publication and execution. */\nexport interface ClearedToolCall<TContext extends object | undefined> {\n\ttoolCall: AgentToolCall;\n\ttool: AgentHarnessTool<TContext>;\n\targs: Record<string, JsonValue>;\n}\n\n/** Raw phase-two tool output before after-tool patching. */\nexport interface ExecutedToolCall {\n\tresult: AgentToolResult<unknown>;\n\tisError: boolean;\n}\n\n/** Aggregated patch from the after-tool hook pipeline. */\nexport interface AfterToolPatch {\n\tcontent?: AgentToolResult<unknown>[\"content\"];\n\tdetails?: JsonValue;\n\tisError?: boolean;\n\tusage?: AgentToolResult<unknown>[\"usage\"];\n\tterminate?: boolean;\n}\n\n/** Final tool output ready to become a durable tool-result message. */\nexport interface FinalizedToolCall {\n\ttoolCall: AgentToolCall;\n\tresult: AgentToolResult<unknown>;\n\tisError: boolean;\n\tterminate: boolean;\n}\n\nfunction createErrorToolResult(message: string): AgentToolResult<unknown> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: message }],\n\t\tdetails: undefined,\n\t};\n}\n\nfunction immediateError(toolCall: AgentToolCall, message: string, terminate = false): ImmediateToolOutcome {\n\treturn {\n\t\tkind: \"immediate\",\n\t\ttoolCall,\n\t\tresult: createErrorToolResult(message),\n\t\tisError: true,\n\t\tterminate,\n\t};\n}\n\n/** Resolve a tool, apply its deterministic argument preparation, and validate the result. */\nexport function prepareToolCall<TContext extends object | undefined>(\n\tcall: AgentToolCall,\n\ttools: AgentHarnessTool<TContext>[],\n): PreparedToolCall<TContext> | ImmediateToolOutcome {\n\tconst tool = tools.find((candidate) => candidate.name === call.name);\n\tif (!tool) {\n\t\treturn immediateError(call, `Tool ${JSON.stringify(call.name)} is unavailable`);\n\t}\n\n\ttry {\n\t\tconst preparedArguments = tool.prepareArguments ? tool.prepareArguments(call.arguments) : call.arguments;\n\t\tconst preparedCall: AgentToolCall =\n\t\t\tpreparedArguments === call.arguments\n\t\t\t\t? call\n\t\t\t\t: { ...call, arguments: preparedArguments as Record<string, JsonValue> };\n\t\tconst args = validateToolArguments(tool, preparedCall) as Record<string, JsonValue>;\n\t\treturn { toolCall: call, tool, args };\n\t} catch (error) {\n\t\treturn immediateError(call, error instanceof Error ? error.message : String(error));\n\t}\n}\n\n/** Apply an explicit hook decision and revalidate replacement arguments. */\nexport function applyBeforeToolDecision<TContext extends object | undefined>(\n\tprepared: PreparedToolCall<TContext>,\n\tdecision: BeforeToolDecision | undefined,\n): ClearedToolCall<TContext> | ImmediateToolOutcome {\n\tif (decision?.block) {\n\t\treturn immediateError(prepared.toolCall, decision.block.reason, decision.block.terminate === true);\n\t}\n\n\tif (!decision?.args) {\n\t\treturn { toolCall: prepared.toolCall, tool: prepared.tool, args: prepared.args };\n\t}\n\n\ttry {\n\t\tconst validatedArgs = validateToolArguments(prepared.tool, {\n\t\t\t...prepared.toolCall,\n\t\t\targuments: decision.args,\n\t\t}) as Record<string, JsonValue>;\n\t\treturn { toolCall: prepared.toolCall, tool: prepared.tool, args: validatedArgs };\n\t} catch (error) {\n\t\treturn immediateError(prepared.toolCall, error instanceof Error ? error.message : String(error));\n\t}\n}\n\n/** Execute one cleared external tool effect, converting expected tool throws to error output. */\nexport function executeToolCall<TContext extends object | undefined>(\n\tcall: ClearedToolCall<TContext>,\n\tgate: Gate,\n\tonUpdate: AgentHarnessToolUpdateCallback<unknown>,\n\ttoolContext: TContext,\n\tinvocation: AgentHarnessToolInvocation,\n\tcontext: Context,\n): Promise<ExecutedToolCall> {\n\tlet acceptingUpdates = true;\n\treturn gate.admit(async () => {\n\t\tconst admittedContext = withAbortSignal(gate.signal, context);\n\t\tadmittedContext.abortSignal?.throwIfAborted();\n\t\ttry {\n\t\t\tconst result = await call.tool.execute(\n\t\t\t\tcall.toolCall.id,\n\t\t\t\tcall.args,\n\t\t\t\t(partial, options) => {\n\t\t\t\t\tif (acceptingUpdates) onUpdate(partial, options);\n\t\t\t\t},\n\t\t\t\ttoolContext,\n\t\t\t\tinvocation,\n\t\t\t\tadmittedContext,\n\t\t\t);\n\t\t\treturn { result, isError: false };\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tresult: createErrorToolResult(error instanceof Error ? error.message : String(error)),\n\t\t\t\tisError: true,\n\t\t\t};\n\t\t} finally {\n\t\t\tacceptingUpdates = false;\n\t\t}\n\t});\n}\n\n/** Apply an after-tool patch field by field. */\nexport function finalizeToolCall<TContext extends object | undefined>(\n\tcall: ClearedToolCall<TContext>,\n\texecuted: ExecutedToolCall,\n\tpatch: AfterToolPatch | undefined,\n): FinalizedToolCall {\n\tconst result: AgentToolResult<unknown> = patch\n\t\t? {\n\t\t\t\t...executed.result,\n\t\t\t\tcontent: patch.content === undefined ? executed.result.content : patch.content,\n\t\t\t\tdetails: patch.details === undefined ? executed.result.details : patch.details,\n\t\t\t\tusage: patch.usage === undefined ? executed.result.usage : patch.usage,\n\t\t\t\tterminate: patch.terminate === undefined ? executed.result.terminate : patch.terminate,\n\t\t\t}\n\t\t: executed.result;\n\treturn {\n\t\ttoolCall: call.toolCall,\n\t\tresult,\n\t\tisError: patch?.isError ?? executed.isError,\n\t\tterminate: result.terminate === true,\n\t};\n}\n\n/** Reconstruct the canonical tool result represented by a staged transcript message. */\nexport function toolResultFromMessage(message: ToolResultMessage, terminate: boolean): AgentToolResult {\n\treturn {\n\t\tcontent: message.content,\n\t\tdetails: message.details,\n\t\t...(message.usage === undefined ? {} : { usage: message.usage }),\n\t\t...(terminate ? { terminate: true } : {}),\n\t};\n}\n\n/** Convert finalized tool output to the provider-facing transcript message. */\nexport function createToolResultMessage(call: FinalizedToolCall): ToolResultMessage {\n\treturn {\n\t\trole: \"toolResult\",\n\t\ttoolCallId: call.toolCall.id,\n\t\ttoolName: call.toolCall.name,\n\t\tcontent: call.result.content ?? [],\n\t\t...(call.result.details === undefined ? {} : { details: call.result.details as JsonValue }),\n\t\t...(call.result.usage === undefined ? {} : { usage: call.result.usage }),\n\t\tisError: call.isError,\n\t\ttimestamp: Date.now(),\n\t};\n}\n"]}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/harness/execution/tools.ts"],"names":[],"mappings":"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"}