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.
- package/README.md +33 -31
- package/dist/claude-agent-sdk.js +14 -7
- package/dist/claude-agent-sdk.js.map +1 -1
- package/dist/codex-app-server-ui.d.ts +1 -1
- package/dist/codex-app-server-ui.js +69 -39
- package/dist/codex-app-server-ui.js.map +1 -1
- package/dist/codex-app-server.d.ts +3 -0
- package/dist/codex-app-server.js +15 -8
- package/dist/codex-app-server.js.map +1 -1
- package/dist/concurrent-shared-world-lab.js +18 -16
- package/dist/concurrent-shared-world-lab.js.map +1 -1
- package/dist/core/git-state.d.ts +2 -0
- package/dist/core/git-state.js +152 -17
- package/dist/core/git-state.js.map +1 -1
- package/dist/core/git-workspace.d.ts +31 -0
- package/dist/core/git-workspace.js +447 -0
- package/dist/core/git-workspace.js.map +1 -0
- package/dist/cua-actor-lab.d.ts +3 -2
- package/dist/cua-actor-lab.js +34 -23
- package/dist/cua-actor-lab.js.map +1 -1
- package/dist/e2b-terminal-lab.js +111 -46
- package/dist/e2b-terminal-lab.js.map +1 -1
- package/dist/feedback.js +139 -101
- package/dist/feedback.js.map +1 -1
- package/dist/init.d.ts +1 -1
- package/dist/init.js +108 -22
- package/dist/init.js.map +1 -1
- package/dist/lab-config.d.ts +5 -0
- package/dist/lab-config.js +38 -0
- package/dist/lab-config.js.map +1 -1
- package/dist/labs.js +258 -52
- package/dist/labs.js.map +1 -1
- package/dist/observer-assets.js +3 -2
- package/dist/observer-assets.js.map +1 -1
- package/dist/observer-static.js +131 -17
- package/dist/observer-static.js.map +1 -1
- package/dist/observer.js +263 -66
- package/dist/observer.js.map +1 -1
- package/dist/openai-responses-cu.js +18 -4
- package/dist/openai-responses-cu.js.map +1 -1
- package/dist/oss-lab.js +59 -14
- package/dist/oss-lab.js.map +1 -1
- package/dist/oss-meta-lab.d.ts +2 -4
- package/dist/oss-meta-lab.js +117 -477
- package/dist/oss-meta-lab.js.map +1 -1
- package/dist/program.js +23 -21
- package/dist/program.js.map +1 -1
- package/dist/run-paths.d.ts +56 -0
- package/dist/run-paths.js +340 -0
- package/dist/run-paths.js.map +1 -0
- package/dist/run.d.ts +14 -4
- package/dist/run.js +595 -306
- package/dist/run.js.map +1 -1
- package/dist/scripted-browser-actor.d.ts +7 -4
- package/dist/scripted-browser-actor.js +154 -41
- package/dist/scripted-browser-actor.js.map +1 -1
- package/dist/scripted-browser-lab.js +95 -45
- package/dist/scripted-browser-lab.js.map +1 -1
- package/dist/selected-output-paths.d.ts +49 -0
- package/dist/selected-output-paths.js +354 -0
- package/dist/selected-output-paths.js.map +1 -0
- package/dist/shared-world-lab.js +13 -12
- package/dist/shared-world-lab.js.map +1 -1
- package/dist/source-archive.js +44 -1
- package/dist/source-archive.js.map +1 -1
- package/docs/architecture/oss-lab-poc.md +8 -0
- package/docs/assets/humanish-observer-hero.png +0 -0
- package/docs/contracts/policy.md +7 -1
- package/docs/goals/current.md +20 -1
- package/docs/product/open-source-install-experience.md +9 -1
- package/docs/ramp/README.md +14 -7
- 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 {
|
|
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
|
-
|
|
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(
|
|
55
|
+
const loaded = await loadRunBundle(selectedPhysicalCwd, selection.runId);
|
|
56
|
+
await validatePreparedRunArtifactPaths(preparedRunPaths);
|
|
31
57
|
if (!loaded) {
|
|
32
|
-
return {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
|
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
|
|
50
|
-
await
|
|
51
|
-
await
|
|
52
|
-
const relativeObserverPath = path.
|
|
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
|
-
|
|
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:
|
|
62
|
-
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
|
|
82
|
-
const
|
|
83
|
-
|
|
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(
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
|
107
|
-
writeResponse(response, 500,
|
|
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 =
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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
|
-
|
|
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(
|
|
225
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
245
|
-
runId
|
|
246
|
-
|
|
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
|
|
250
|
-
|
|
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) {
|
package/dist/observer.js.map
CHANGED
|
@@ -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
|
|
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;
|