humanish 0.15.0 → 0.15.2

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 (72) hide show
  1. package/README.md +33 -31
  2. package/dist/claude-agent-sdk.js +14 -7
  3. package/dist/claude-agent-sdk.js.map +1 -1
  4. package/dist/codex-app-server-ui.d.ts +1 -1
  5. package/dist/codex-app-server-ui.js +69 -39
  6. package/dist/codex-app-server-ui.js.map +1 -1
  7. package/dist/codex-app-server.d.ts +3 -0
  8. package/dist/codex-app-server.js +15 -8
  9. package/dist/codex-app-server.js.map +1 -1
  10. package/dist/concurrent-shared-world-lab.js +18 -16
  11. package/dist/concurrent-shared-world-lab.js.map +1 -1
  12. package/dist/core/git-state.d.ts +2 -0
  13. package/dist/core/git-state.js +152 -17
  14. package/dist/core/git-state.js.map +1 -1
  15. package/dist/core/git-workspace.d.ts +31 -0
  16. package/dist/core/git-workspace.js +447 -0
  17. package/dist/core/git-workspace.js.map +1 -0
  18. package/dist/cua-actor-lab.d.ts +3 -2
  19. package/dist/cua-actor-lab.js +34 -23
  20. package/dist/cua-actor-lab.js.map +1 -1
  21. package/dist/e2b-terminal-lab.js +111 -46
  22. package/dist/e2b-terminal-lab.js.map +1 -1
  23. package/dist/feedback.js +139 -101
  24. package/dist/feedback.js.map +1 -1
  25. package/dist/init.d.ts +1 -1
  26. package/dist/init.js +108 -22
  27. package/dist/init.js.map +1 -1
  28. package/dist/lab-config.d.ts +5 -0
  29. package/dist/lab-config.js +38 -0
  30. package/dist/lab-config.js.map +1 -1
  31. package/dist/labs.js +258 -52
  32. package/dist/labs.js.map +1 -1
  33. package/dist/observer-assets.js +3 -2
  34. package/dist/observer-assets.js.map +1 -1
  35. package/dist/observer-static.js +131 -17
  36. package/dist/observer-static.js.map +1 -1
  37. package/dist/observer.js +263 -66
  38. package/dist/observer.js.map +1 -1
  39. package/dist/openai-responses-cu.js +18 -4
  40. package/dist/openai-responses-cu.js.map +1 -1
  41. package/dist/oss-lab.js +59 -14
  42. package/dist/oss-lab.js.map +1 -1
  43. package/dist/oss-meta-lab.d.ts +2 -4
  44. package/dist/oss-meta-lab.js +117 -477
  45. package/dist/oss-meta-lab.js.map +1 -1
  46. package/dist/program.js +23 -21
  47. package/dist/program.js.map +1 -1
  48. package/dist/run-paths.d.ts +56 -0
  49. package/dist/run-paths.js +340 -0
  50. package/dist/run-paths.js.map +1 -0
  51. package/dist/run.d.ts +14 -4
  52. package/dist/run.js +595 -306
  53. package/dist/run.js.map +1 -1
  54. package/dist/scripted-browser-actor.d.ts +7 -4
  55. package/dist/scripted-browser-actor.js +154 -41
  56. package/dist/scripted-browser-actor.js.map +1 -1
  57. package/dist/scripted-browser-lab.js +95 -45
  58. package/dist/scripted-browser-lab.js.map +1 -1
  59. package/dist/selected-output-paths.d.ts +49 -0
  60. package/dist/selected-output-paths.js +354 -0
  61. package/dist/selected-output-paths.js.map +1 -0
  62. package/dist/shared-world-lab.js +13 -12
  63. package/dist/shared-world-lab.js.map +1 -1
  64. package/dist/source-archive.js +44 -1
  65. package/dist/source-archive.js.map +1 -1
  66. package/docs/architecture/oss-lab-poc.md +8 -0
  67. package/docs/assets/humanish-observer-hero.png +0 -0
  68. package/docs/contracts/policy.md +7 -1
  69. package/docs/goals/current.md +20 -1
  70. package/docs/product/open-source-install-experience.md +9 -1
  71. package/docs/ramp/README.md +14 -7
  72. package/package.json +1 -1
package/dist/observer.js CHANGED
@@ -1,65 +1,84 @@
1
1
  import { spawn } from "node:child_process";
2
+ import { constants as fsConstants } from "node:fs";
2
3
  import { createServer } from "node:http";
3
- import { mkdir, readFile, writeFile } from "node:fs/promises";
4
+ import { lstat, open, realpath } from "node:fs/promises";
4
5
  import path from "node:path";
5
6
  import { pathToFileURL } from "node:url";
6
7
  import { buildObserverData } from "./observer-data.js";
7
8
  import { observerClientJs, observerCss } from "./observer-assets.js";
8
9
  import { listRuns, loadRunBundle, verifyRun } from "./run.js";
10
+ import { bindExistingRunArtifactPaths, isPathInside, isSafeRunIdSegment, resolveLatestRunDirectory, validatePreparedRunArtifactPaths } from "./run-paths.js";
11
+ import { writeContainedOutputFile } from "./selected-output-paths.js";
9
12
  export const OBSERVER_SCHEMA = "humanish.observer-result.v1";
10
13
  const observerRuntimeStreamUrls = new WeakMap();
14
+ const observerPreparedRunPaths = new WeakMap();
11
15
  export function attachObserverRuntimeStreamUrls(result, streams) {
12
16
  observerRuntimeStreamUrls.set(result, streams.filter((stream) => stream.streamId && stream.url));
13
17
  }
14
18
  export async function renderObserver(cwdInput, runInput, options = {}) {
15
19
  const cwd = path.resolve(cwdInput);
16
- const verified = await verifyRun(cwd, runInput);
20
+ let selection;
21
+ try {
22
+ selection = await resolveObserverRunSelection(cwd, runInput);
23
+ }
24
+ catch {
25
+ selection = null;
26
+ }
27
+ if (!selection) {
28
+ return observerRunError(cwd, runInput, "HUMANISH_RUN_NOT_FOUND", `Run not found: ${runInput}`);
29
+ }
30
+ let preparedRunPaths;
31
+ try {
32
+ const selectedPhysicalCwd = path.dirname(path.dirname(selection.runsRoot.physicalPath));
33
+ preparedRunPaths = await bindExistingRunArtifactPaths(selectedPhysicalCwd, selection.runId);
34
+ if (preparedRunPaths.physicalRunsRoot !== selection.runsRoot.physicalPath
35
+ || preparedRunPaths.physicalRunRoot !== selection.runRoot.physicalPath
36
+ || preparedRunPaths.runsRootIdentity.birthtimeNs !== selection.runsRoot.birthtimeNs
37
+ || preparedRunPaths.runsRootIdentity.dev !== selection.runsRoot.dev
38
+ || preparedRunPaths.runsRootIdentity.ino !== selection.runsRoot.ino
39
+ || preparedRunPaths.runRootIdentity.birthtimeNs !== selection.runRoot.birthtimeNs
40
+ || preparedRunPaths.runRootIdentity.dev !== selection.runRoot.dev
41
+ || preparedRunPaths.runRootIdentity.ino !== selection.runRoot.ino) {
42
+ throw new Error("Observer run selection changed physical identity.");
43
+ }
44
+ }
45
+ catch {
46
+ return observerRunError(cwd, runInput, "HUMANISH_INVALID_RUN_BUNDLE", "Observer run storage is unavailable or unsafe.");
47
+ }
48
+ await validatePreparedRunArtifactPaths(preparedRunPaths);
49
+ const selectedPhysicalCwd = path.dirname(path.dirname(selection.runsRoot.physicalPath));
50
+ const verified = await verifyRun(selectedPhysicalCwd, selection.runId);
51
+ await validatePreparedRunArtifactPaths(preparedRunPaths);
17
52
  if (!verified.ok) {
18
- return {
19
- schema: OBSERVER_SCHEMA,
20
- ok: false,
21
- cwd,
22
- run: runInput,
23
- warnings: [],
24
- error: {
25
- code: verified.error?.code === "HUMANISH_RUN_NOT_FOUND" ? "HUMANISH_RUN_NOT_FOUND" : "HUMANISH_INVALID_RUN_BUNDLE",
26
- message: verified.error?.message ?? "Run bundle failed verification."
27
- }
28
- };
53
+ return observerRunError(cwd, runInput, verified.error?.code === "HUMANISH_RUN_NOT_FOUND" ? "HUMANISH_RUN_NOT_FOUND" : "HUMANISH_INVALID_RUN_BUNDLE", verified.error?.message ?? "Run bundle failed verification.");
29
54
  }
30
- const loaded = await loadRunBundle(cwd, runInput);
55
+ const loaded = await loadRunBundle(selectedPhysicalCwd, selection.runId);
56
+ await validatePreparedRunArtifactPaths(preparedRunPaths);
31
57
  if (!loaded) {
32
- return {
33
- schema: OBSERVER_SCHEMA,
34
- ok: false,
35
- cwd,
36
- run: runInput,
37
- warnings: [],
38
- error: {
39
- code: "HUMANISH_RUN_NOT_FOUND",
40
- message: `Run not found: ${runInput}`
41
- }
42
- };
58
+ return observerRunError(cwd, runInput, "HUMANISH_RUN_NOT_FOUND", `Run not found: ${runInput}`);
59
+ }
60
+ if (loaded.bundle.runId !== selection.runId
61
+ || await realpath(loaded.runDir) !== preparedRunPaths.physicalRunRoot) {
62
+ throw new Error("Observer output directory does not match the selected run.");
43
63
  }
44
- const observerDir = path.join(loaded.runDir, "observer");
45
- const observerPath = path.join(observerDir, "index.html");
46
- const observerDataPath = path.join(observerDir, "observer-data.json");
47
- const eventsPath = path.join(loaded.runDir, "events.ndjson");
64
+ const observerPath = path.join(preparedRunPaths.physicalRunRoot, "observer", "index.html");
48
65
  const observerData = buildObserverData(loaded.bundle);
49
- await mkdir(observerDir, { recursive: true });
50
- await writeJson(observerDataPath, observerData);
51
- await writeFile(observerPath, renderObserverHtml(observerData), "utf8");
52
- const relativeObserverPath = path.relative(cwd, observerPath);
66
+ await writeContainedOutputFile(preparedRunPaths, path.join("observer", "observer-data.json"), `${JSON.stringify(observerData, null, 2)}\n`, "utf8");
67
+ await writeContainedOutputFile(preparedRunPaths, path.join("observer", "index.html"), renderObserverHtml(observerData), "utf8");
68
+ await validatePreparedRunArtifactPaths(preparedRunPaths);
69
+ const relativeObserverPath = path.join(preparedRunPaths.relativeRunRoot, "observer", "index.html");
70
+ const relativeObserverDataPath = path.join(preparedRunPaths.relativeRunRoot, "observer", "observer-data.json");
71
+ const relativeEventsPath = path.join(preparedRunPaths.relativeRunRoot, "events.ndjson");
53
72
  const observerUrl = pathToFileURL(observerPath).href;
54
73
  const openResult = options.open === true ? openTarget(observerPath) : { opened: false };
55
- return {
74
+ const result = {
56
75
  schema: OBSERVER_SCHEMA,
57
76
  ok: true,
58
77
  cwd,
59
78
  run: loaded.bundle.runId,
60
79
  observerPath: relativeObserverPath,
61
- observerDataPath: path.relative(cwd, observerDataPath),
62
- eventsPath: path.relative(cwd, eventsPath),
80
+ observerDataPath: relativeObserverDataPath,
81
+ eventsPath: relativeEventsPath,
63
82
  observerUrl,
64
83
  bundlePath: loaded.bundlePath,
65
84
  opened: openResult.opened,
@@ -72,15 +91,66 @@ export async function renderObserver(cwdInput, runInput, options = {}) {
72
91
  ...(openResult.warning ? [openResult.warning] : [])
73
92
  ]
74
93
  };
94
+ observerPreparedRunPaths.set(result, preparedRunPaths);
95
+ return result;
96
+ }
97
+ function observerRunError(cwd, run, code, message) {
98
+ return {
99
+ schema: OBSERVER_SCHEMA,
100
+ ok: false,
101
+ cwd,
102
+ run,
103
+ warnings: [],
104
+ error: { code, message }
105
+ };
106
+ }
107
+ async function resolveObserverRunSelection(cwd, runInput) {
108
+ const runsRoot = await pinDirectory(path.join(cwd, ".humanish", "runs"));
109
+ if (runInput !== "latest") {
110
+ const runRoot = isSafeRunIdSegment(runInput)
111
+ ? await pinDirectChildDirectory(runsRoot, runInput)
112
+ : null;
113
+ return runRoot ? { runId: runInput, runRoot, runsRoot } : null;
114
+ }
115
+ const latestBytes = await readContainedFile(runsRoot, path.join(runsRoot.physicalPath, "latest.json"));
116
+ if (!latestBytes)
117
+ return null;
118
+ const pointer = JSON.parse(latestBytes.toString("utf8"));
119
+ if (typeof pointer.runId !== "string" || typeof pointer.path !== "string" || !isSafeRunIdSegment(pointer.runId)) {
120
+ return null;
121
+ }
122
+ const declared = resolveLatestRunDirectory(cwd, { path: pointer.path, runId: pointer.runId });
123
+ if (!declared)
124
+ return null;
125
+ const expected = path.join(runsRoot.physicalPath, pointer.runId);
126
+ const runRoot = await pinDirectChildDirectory(runsRoot, pointer.runId);
127
+ if (!runRoot || runRoot.physicalPath !== expected)
128
+ return null;
129
+ return { runId: pointer.runId, runRoot, runsRoot };
75
130
  }
76
131
  export async function serveObserver(result, options = {}) {
77
132
  if (!result.ok || !result.observerPath) {
78
133
  throw new Error("Cannot serve an observer result that did not render successfully.");
79
134
  }
80
135
  const cwd = path.resolve(result.cwd);
81
- const observerPath = path.join(cwd, result.observerPath);
82
- const runRoot = path.dirname(path.dirname(observerPath));
83
- const proofRoot = path.dirname(runRoot);
136
+ const retainedRunPaths = observerPreparedRunPaths.get(result);
137
+ const preparedRunPaths = retainedRunPaths
138
+ ? await validatePreparedRunArtifactPaths(retainedRunPaths)
139
+ : await bindExistingRunArtifactPaths(cwd, result.run);
140
+ const runRoot = await pinDirectory(preparedRunPaths.physicalRunRoot);
141
+ const proofRoot = await pinDirectory(preparedRunPaths.physicalRunsRoot);
142
+ const expectedRelativeObserverPath = path.join(preparedRunPaths.relativeRunRoot, "observer", "index.html");
143
+ if (result.observerPath !== expectedRelativeObserverPath) {
144
+ throw new Error("Observer path does not match the selected run.");
145
+ }
146
+ // The live server renders observer/index.html from the pinned run bundle on
147
+ // each request, so an attached in-progress Observer legitimately has no
148
+ // static index file yet. The exact lexical result path was checked above;
149
+ // keep serving from the identity-bound physical run root.
150
+ const observerPath = path.join(preparedRunPaths.physicalRunRoot, "observer", "index.html");
151
+ if (observerPath !== path.join(runRoot.physicalPath, "observer", "index.html")) {
152
+ throw new Error("Observer path does not match the selected run.");
153
+ }
84
154
  const runtimeStreamUrls = () => observerRuntimeStreamUrls.get(result) ?? [];
85
155
  const server = createServer(async (request, response) => {
86
156
  try {
@@ -91,20 +161,28 @@ export async function serveObserver(result, options = {}) {
91
161
  return;
92
162
  }
93
163
  if (url.pathname === "/_humanish/history.json") {
94
- const history = await buildHistoryIndex(cwd);
164
+ const history = await buildHistoryIndex(proofRoot);
95
165
  writeResponse(response, 200, JSON.stringify(history, null, 2), "application/json; charset=utf-8");
96
166
  return;
97
167
  }
98
- const runRoute = matchRunRoute(url.pathname);
99
- if (runRoute) {
100
- const targetRoot = path.join(proofRoot, runRoute.runId);
168
+ if (url.pathname.startsWith("/_humanish/runs/")) {
169
+ const runRoute = matchRunRoute(url.pathname);
170
+ if (!runRoute) {
171
+ writeResponse(response, 404, "Run not found", "text/plain; charset=utf-8");
172
+ return;
173
+ }
174
+ const targetRoot = await pinDirectChildDirectory(proofRoot, runRoute.runId);
175
+ if (!targetRoot) {
176
+ writeResponse(response, 404, "Run not found", "text/plain; charset=utf-8");
177
+ return;
178
+ }
101
179
  await serveRunPath(targetRoot, runRoute.relativePath || "observer/index.html", response, runtimeStreamUrls());
102
180
  return;
103
181
  }
104
182
  await serveRunPath(runRoot, decodeURIComponent(url.pathname.slice(1)), response, runtimeStreamUrls());
105
183
  }
106
- catch (error) {
107
- writeResponse(response, 500, error instanceof Error ? error.message : String(error), "text/plain; charset=utf-8");
184
+ catch {
185
+ writeResponse(response, 500, "Observer request failed", "text/plain; charset=utf-8");
108
186
  }
109
187
  });
110
188
  const port = await listen(server, options.port ?? 0);
@@ -142,7 +220,7 @@ function renderObserverHtml(data) {
142
220
  `;
143
221
  }
144
222
  async function serveRunPath(runRoot, relativePath, response, runtimeStreamUrls = []) {
145
- const root = path.resolve(runRoot);
223
+ const root = runRoot.physicalPath;
146
224
  const cleanedRelativePath = relativePath === "" ? "observer/index.html" : relativePath;
147
225
  const filePath = path.resolve(root, cleanedRelativePath);
148
226
  if (!isPathInside(root, filePath)) {
@@ -150,7 +228,7 @@ async function serveRunPath(runRoot, relativePath, response, runtimeStreamUrls =
150
228
  return;
151
229
  }
152
230
  if (cleanedRelativePath === "observer/index.html") {
153
- const observerData = await readObserverData(root, runtimeStreamUrls);
231
+ const observerData = await readObserverData(runRoot, runtimeStreamUrls);
154
232
  if (!observerData) {
155
233
  writeResponse(response, 404, "Observer data not found", "text/plain; charset=utf-8");
156
234
  return;
@@ -159,7 +237,7 @@ async function serveRunPath(runRoot, relativePath, response, runtimeStreamUrls =
159
237
  return;
160
238
  }
161
239
  if (cleanedRelativePath === "observer/observer-data.json") {
162
- const observerData = await readObserverData(root, runtimeStreamUrls);
240
+ const observerData = await readObserverData(runRoot, runtimeStreamUrls);
163
241
  if (!observerData) {
164
242
  writeResponse(response, 404, "Observer data not found", "text/plain; charset=utf-8");
165
243
  return;
@@ -168,7 +246,11 @@ async function serveRunPath(runRoot, relativePath, response, runtimeStreamUrls =
168
246
  return;
169
247
  }
170
248
  try {
171
- const body = await readFile(filePath);
249
+ const body = await readContainedFile(runRoot, filePath);
250
+ if (!body) {
251
+ writeResponse(response, 404, "Not found", "text/plain; charset=utf-8");
252
+ return;
253
+ }
172
254
  response.writeHead(200, {
173
255
  "cache-control": "no-store",
174
256
  "content-type": contentTypeForPath(filePath)
@@ -186,12 +268,18 @@ async function readObserverData(runRoot, runtimeStreamUrls = []) {
186
268
  // by observer-data.json. A transient failure just falls through to the next
187
269
  // source, or to null -> a 404 the poller retries; it must not surface a 500.
188
270
  try {
189
- const bundle = JSON.parse(await readFile(path.join(runRoot, "run.json"), "utf8"));
271
+ const bundleBytes = await readContainedFile(runRoot, path.join(runRoot.physicalPath, "run.json"));
272
+ if (!bundleBytes)
273
+ throw new Error("run.json unavailable");
274
+ const bundle = JSON.parse(bundleBytes.toString("utf8"));
190
275
  return withRuntimeStreamUrls(buildObserverData(bundle), runtimeStreamUrls);
191
276
  }
192
277
  catch { }
193
278
  try {
194
- return withRuntimeStreamUrls(JSON.parse(await readFile(path.join(runRoot, "observer", "observer-data.json"), "utf8")), runtimeStreamUrls);
279
+ const observerBytes = await readContainedFile(runRoot, path.join(runRoot.physicalPath, "observer", "observer-data.json"));
280
+ if (!observerBytes)
281
+ throw new Error("observer-data.json unavailable");
282
+ return withRuntimeStreamUrls(JSON.parse(observerBytes.toString("utf8")), runtimeStreamUrls);
195
283
  }
196
284
  catch { }
197
285
  return null;
@@ -221,11 +309,13 @@ function withRuntimeStreamUrls(data, runtimeStreamUrls) {
221
309
  })
222
310
  };
223
311
  }
224
- async function buildHistoryIndex(cwd) {
225
- const listed = await listRuns(cwd);
312
+ async function buildHistoryIndex(proofRoot) {
313
+ await assertPinnedDirectory(proofRoot);
314
+ const physicalCwd = path.dirname(path.dirname(proofRoot.physicalPath));
315
+ const listed = await listRuns(physicalCwd);
226
316
  const runs = await Promise.all(listed.runs.slice(0, 80).map(async (run) => {
227
- const root = path.join(cwd, run.path);
228
- const data = await readObserverData(root);
317
+ const root = await pinDirectChildDirectory(proofRoot, run.runId);
318
+ const data = root ? await readObserverData(root) : null;
229
319
  return {
230
320
  runId: run.runId,
231
321
  createdAt: run.createdAt,
@@ -235,19 +325,130 @@ async function buildHistoryIndex(cwd) {
235
325
  streamCount: data?.streams.length ?? 0
236
326
  };
237
327
  }));
238
- return { latestRunId: listed.latest, runs };
328
+ await assertPinnedDirectory(proofRoot);
329
+ return {
330
+ latestRunId: listed.latest && isSafeRunIdSegment(listed.latest) ? listed.latest : null,
331
+ runs
332
+ };
239
333
  }
240
334
  function matchRunRoute(pathname) {
241
335
  const match = pathname.match(/^\/_humanish\/runs\/([^/]+)(?:\/(.*))?$/);
242
336
  if (!match)
243
337
  return null;
244
- return {
245
- runId: decodeURIComponent(match[1] ?? ""),
246
- relativePath: decodeURIComponent(match[2] || "observer/index.html")
247
- };
338
+ try {
339
+ const runId = decodeURIComponent(match[1] ?? "");
340
+ if (!isSafeRunIdSegment(runId))
341
+ return null;
342
+ return {
343
+ runId,
344
+ relativePath: decodeURIComponent(match[2] || "observer/index.html")
345
+ };
346
+ }
347
+ catch {
348
+ return null;
349
+ }
248
350
  }
249
- function writeJson(filePath, value) {
250
- return writeFile(filePath, `${JSON.stringify(value, null, 2)}\n`, "utf8");
351
+ async function readContainedFile(root, filePathInput) {
352
+ const filePath = path.resolve(filePathInput);
353
+ if (!isPathInside(root.physicalPath, filePath)) {
354
+ return null;
355
+ }
356
+ try {
357
+ await assertPinnedDirectory(root);
358
+ const expectedStats = await inspectContainedRegularFile(root, filePath);
359
+ if (!expectedStats) {
360
+ return null;
361
+ }
362
+ const handle = await open(filePath, fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW);
363
+ try {
364
+ const openedStats = await handle.stat({ bigint: true });
365
+ if (!openedStats.isFile()
366
+ || openedStats.nlink !== 1n
367
+ || openedStats.dev !== expectedStats.dev
368
+ || openedStats.ino !== expectedStats.ino) {
369
+ return null;
370
+ }
371
+ const recheckedStats = await inspectContainedRegularFile(root, filePath);
372
+ if (!recheckedStats
373
+ || recheckedStats.dev !== expectedStats.dev
374
+ || recheckedStats.ino !== expectedStats.ino) {
375
+ return null;
376
+ }
377
+ await assertPinnedDirectory(root);
378
+ const body = await handle.readFile();
379
+ await assertPinnedDirectory(root);
380
+ return body;
381
+ }
382
+ finally {
383
+ await handle.close();
384
+ }
385
+ }
386
+ catch {
387
+ return null;
388
+ }
389
+ }
390
+ async function inspectContainedRegularFile(root, filePath) {
391
+ const relative = path.relative(root.physicalPath, filePath);
392
+ if (!relative || relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
393
+ return null;
394
+ }
395
+ const segments = relative.split(path.sep).filter(Boolean);
396
+ let current = root.physicalPath;
397
+ let fileIdentity = null;
398
+ for (const [index, segment] of segments.entries()) {
399
+ current = path.join(current, segment);
400
+ const stats = await lstat(current, { bigint: true });
401
+ if (stats.isSymbolicLink())
402
+ return null;
403
+ if (index < segments.length - 1) {
404
+ if (!stats.isDirectory())
405
+ return null;
406
+ }
407
+ else {
408
+ if (!stats.isFile() || stats.nlink !== 1n)
409
+ return null;
410
+ fileIdentity = { dev: stats.dev, ino: stats.ino };
411
+ }
412
+ }
413
+ if (await realpath(filePath) !== filePath)
414
+ return null;
415
+ return fileIdentity;
416
+ }
417
+ async function pinDirectory(directoryInput) {
418
+ const physicalPath = await realpath(path.resolve(directoryInput));
419
+ const stats = await lstat(physicalPath, { bigint: true });
420
+ if (stats.isSymbolicLink() || !stats.isDirectory()) {
421
+ throw new Error("Observer roots must be physical directories.");
422
+ }
423
+ return Object.freeze({ birthtimeNs: stats.birthtimeNs, dev: stats.dev, ino: stats.ino, physicalPath });
424
+ }
425
+ async function pinDirectChildDirectory(root, name) {
426
+ if (!isSafeRunIdSegment(name))
427
+ return null;
428
+ try {
429
+ await assertPinnedDirectory(root);
430
+ const candidate = path.join(root.physicalPath, name);
431
+ const pinned = await pinDirectory(candidate);
432
+ if (pinned.physicalPath !== candidate || path.dirname(pinned.physicalPath) !== root.physicalPath) {
433
+ return null;
434
+ }
435
+ await assertPinnedDirectory(root);
436
+ return pinned;
437
+ }
438
+ catch {
439
+ return null;
440
+ }
441
+ }
442
+ async function assertPinnedDirectory(root) {
443
+ const stats = await lstat(root.physicalPath, { bigint: true });
444
+ if (stats.isSymbolicLink()
445
+ || !stats.isDirectory()
446
+ || stats.birthtimeNs !== root.birthtimeNs
447
+ || stats.dev !== root.dev
448
+ || stats.ino !== root.ino
449
+ || await realpath(root.physicalPath) !== root.physicalPath) {
450
+ throw new Error("Observer root identity changed.");
451
+ }
251
452
  }
252
453
  function writeResponse(response, status, body, contentType) {
253
454
  response.writeHead(status, {
@@ -322,10 +523,6 @@ function closeServer(server) {
322
523
  });
323
524
  });
324
525
  }
325
- function isPathInside(root, filePath) {
326
- const relative = path.relative(root, filePath);
327
- return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
328
- }
329
526
  function escapeHtml(value) {
330
527
  return value.replace(/[&<>"']/g, (char) => {
331
528
  switch (char) {
@@ -1 +1 @@
1
- {"version":3,"file":"observer.js","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observer.js","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
- import { mkdir, writeFile } from "node:fs/promises";
2
- import path from "node:path";
3
1
  import { redactText } from "./redaction.js";
2
+ import { prepareContainedOutputFile, prepareSelectedOutputDirectory, writeContainedOutputFile } from "./selected-output-paths.js";
4
3
  // A public-safe re-derivation of the OpenAI Responses API computer-use provider,
5
4
  // behind the CuaProvider port from src/computer-use.ts. It mirrors the
6
5
  // pure-mapper-plus-injectable-shim pattern proven in src/claude-agent-sdk.ts:
@@ -402,15 +401,26 @@ export function createOpenAiResponsesProvider(options) {
402
401
  // zero behavior change. The counter is per-provider, so file order is call order.
403
402
  const captureDir = optionalString((options.env ?? process.env)[WIRE_CAPTURE_ENV]?.trim());
404
403
  let captureCount = 0;
404
+ let preparedCaptureRoot;
405
+ const prepareNextCapture = async () => {
406
+ if (captureDir === undefined)
407
+ return undefined;
408
+ preparedCaptureRoot ??= prepareSelectedOutputDirectory(process.cwd(), captureDir);
409
+ const captureRoot = await preparedCaptureRoot;
410
+ await prepareContainedOutputFile(captureRoot, wireCaptureFileName(captureCount + 1));
411
+ return captureRoot;
412
+ };
405
413
  // Persist one successful RESPONSE body, redacted and pretty-printed. Fails loud:
406
414
  // a silent capture failure would mean missing turns in a fixture refresh — the
407
415
  // exact "fixtures drift from the wire" pathology capture exists to prevent.
408
416
  const captureResponse = async (raw) => {
409
417
  if (captureDir === undefined)
410
418
  return;
419
+ const captureRoot = await prepareNextCapture();
420
+ if (!captureRoot)
421
+ return;
411
422
  captureCount += 1;
412
- await mkdir(captureDir, { recursive: true });
413
- await writeFile(path.join(captureDir, wireCaptureFileName(captureCount)), `${JSON.stringify(redactWireJson(raw), null, 2)}\n`, "utf8");
423
+ await writeContainedOutputFile(captureRoot, wireCaptureFileName(captureCount), `${JSON.stringify(redactWireJson(raw), null, 2)}\n`, "utf8");
414
424
  };
415
425
  let lastResponseId;
416
426
  let pendingCallIds = [];
@@ -427,6 +437,9 @@ export function createOpenAiResponsesProvider(options) {
427
437
  // ZdrError; any other non-ok status throws with the STATUS ONLY (never the
428
438
  // body, which can echo the input/screenshot).
429
439
  const post = async (body, signal) => {
440
+ // Preflight the deterministic next capture leaf before any network side
441
+ // effect. A hostile generated path must fail with zero provider calls.
442
+ await prepareNextCapture();
430
443
  const headers = {
431
444
  Authorization: `Bearer ${options.apiKey}`,
432
445
  "Content-Type": "application/json"
@@ -491,6 +504,7 @@ export function createOpenAiResponsesProvider(options) {
491
504
  // (harness_error) when a state-only executor is paired with it (provider-authoring contract).
492
505
  requiresFrame: true,
493
506
  async nextTurn(req, signal) {
507
+ await prepareNextCapture();
494
508
  const ctx = buildContext(req.instructions);
495
509
  const isFirstTurn = lastResponseId === undefined && pendingCallIds.length === 0;
496
510
  let raw;