humanish 0.88.1 → 0.89.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +8 -0
  2. package/dist/actor-contract.d.ts +1 -1
  3. package/dist/actor-stop-cause.js +1 -0
  4. package/dist/actor-stop-cause.js.map +1 -1
  5. package/dist/computer-use-actor.d.ts +2 -0
  6. package/dist/computer-use-actor.js +6 -3
  7. package/dist/computer-use-actor.js.map +1 -1
  8. package/dist/computer-use.d.ts +5 -2
  9. package/dist/computer-use.js +38 -3
  10. package/dist/computer-use.js.map +1 -1
  11. package/dist/cua-actor-lab.js +3 -1
  12. package/dist/cua-actor-lab.js.map +1 -1
  13. package/dist/cua-diagnostics.d.ts +1 -1
  14. package/dist/cua-diagnostics.js +1 -1
  15. package/dist/cua-diagnostics.js.map +1 -1
  16. package/dist/export-bundle.js +6 -0
  17. package/dist/export-bundle.js.map +1 -1
  18. package/dist/export.js +67 -10
  19. package/dist/export.js.map +1 -1
  20. package/dist/feedback.d.ts +10 -0
  21. package/dist/feedback.js +58 -1
  22. package/dist/feedback.js.map +1 -1
  23. package/dist/index.d.ts +5 -1
  24. package/dist/index.js +2 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/lab-config.d.ts +1 -1
  27. package/dist/observer-app.html +10 -9
  28. package/dist/observer.d.ts +2 -0
  29. package/dist/observer.js +52 -5
  30. package/dist/observer.js.map +1 -1
  31. package/dist/openai-responses-cu.d.ts +3 -0
  32. package/dist/openai-responses-cu.js +4 -1
  33. package/dist/openai-responses-cu.js.map +1 -1
  34. package/dist/pricing.js +2 -2
  35. package/dist/pricing.js.map +1 -1
  36. package/dist/program.js +146 -3
  37. package/dist/program.js.map +1 -1
  38. package/dist/run.d.ts +19 -1
  39. package/dist/run.js +151 -21
  40. package/dist/run.js.map +1 -1
  41. package/dist/shared-world-lab.d.ts +2 -0
  42. package/dist/shared-world-lab.js +90 -5
  43. package/dist/shared-world-lab.js.map +1 -1
  44. package/dist/study-analysis-engine.d.ts +34 -0
  45. package/dist/study-analysis-engine.js +217 -0
  46. package/dist/study-analysis-engine.js.map +1 -0
  47. package/dist/study-analysis-evidence.d.ts +27 -0
  48. package/dist/study-analysis-evidence.js +420 -0
  49. package/dist/study-analysis-evidence.js.map +1 -0
  50. package/dist/study-analysis-provider.d.ts +38 -0
  51. package/dist/study-analysis-provider.js +140 -0
  52. package/dist/study-analysis-provider.js.map +1 -0
  53. package/dist/study-analysis-service.d.ts +45 -0
  54. package/dist/study-analysis-service.js +207 -0
  55. package/dist/study-analysis-service.js.map +1 -0
  56. package/dist/study-analysis-sharing.d.ts +11 -0
  57. package/dist/study-analysis-sharing.js +27 -0
  58. package/dist/study-analysis-sharing.js.map +1 -0
  59. package/dist/study-analysis-store.d.ts +30 -0
  60. package/dist/study-analysis-store.js +343 -0
  61. package/dist/study-analysis-store.js.map +1 -0
  62. package/dist/study-analysis-validation.d.ts +448 -0
  63. package/dist/study-analysis-validation.js +331 -0
  64. package/dist/study-analysis-validation.js.map +1 -0
  65. package/dist/study-analysis.d.ts +167 -0
  66. package/dist/study-analysis.js +4 -0
  67. package/dist/study-analysis.js.map +1 -0
  68. package/docs/architecture/observer.md +10 -1
  69. package/docs/contracts/feedback.md +9 -3
  70. package/docs/contracts/schemas.md +52 -3
  71. package/docs/contracts/study-analysis.md +150 -0
  72. package/docs/goals/current.md +4 -3
  73. package/docs/ramp/README.md +13 -2
  74. package/docs/release/0.88.2-sequential-study-budgets.md +57 -0
  75. package/docs/release/0.89.0-study-findings.md +79 -0
  76. package/package.json +3 -2
@@ -0,0 +1,343 @@
1
+ import { createHash } from "node:crypto";
2
+ import { lstat, mkdir, opendir } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { validatePreparedRunRootIdentity } from "./run-paths.js";
5
+ import { assertPreparedSelectedOutputDirectory, bindExistingManagedHumanishOutputDirectory, prepareContainedOutputDirectoryRoot, writeContainedOutputFile } from "./selected-output-paths.js";
6
+ import { isStudyEvidencePath, readBoundedStudyFile, STUDY_EVIDENCE_LIMITS, validateStudyAnalysisEvidence } from "./study-analysis-evidence.js";
7
+ import { hashStudyAnalysisValue, validateStudyAnalysisExecutionReceipt, validateStudyAnalysisArtifact, validateStudyAnalysisCorrection } from "./study-analysis-validation.js";
8
+ export const STUDY_ANALYSIS_DIRECTORY = "analysis";
9
+ const ANALYSIS_MAX_BYTES = 4 * 1024 * 1024;
10
+ const MAX_VERSIONS = 256;
11
+ const MAX_CORRECTIONS = 256;
12
+ const safeId = (value) => /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/.test(value);
13
+ const hashBytes = (bytes) => createHash("sha256").update(bytes).digest("hex");
14
+ const empty = (state, warnings = []) => ({ state, analysis: null, corrections: [], warnings });
15
+ /** Check room for both immutable publications before a new provider dispatch.
16
+ * This is read-only; the service's dispatch lock protects ordinary concurrent writers. */
17
+ export async function assertStudyAnalysisPublicationCapacity(prepared) {
18
+ try {
19
+ for (const directory of [STUDY_ANALYSIS_DIRECTORY, STUDY_ANALYSIS_EXECUTION_DIRECTORY]) {
20
+ const root = await existingRoot(prepared, directory);
21
+ if (!root)
22
+ continue;
23
+ const inventory = await directoryIds(root, MAX_VERSIONS - 1, directory === STUDY_ANALYSIS_DIRECTORY);
24
+ if (inventory.warnings.length > 0)
25
+ throw new Error("Unsafe analysis inventory.");
26
+ }
27
+ }
28
+ catch {
29
+ throw new Error("ANALYSIS_HISTORY_UNAVAILABLE");
30
+ }
31
+ }
32
+ async function existingRoot(prepared, directory = STUDY_ANALYSIS_DIRECTORY) {
33
+ await validatePreparedRunRootIdentity(prepared);
34
+ const cwd = path.dirname(path.dirname(path.dirname(prepared.absoluteRunRoot)));
35
+ const root = await bindExistingManagedHumanishOutputDirectory(cwd, "runs", path.basename(prepared.absoluteRunRoot), directory);
36
+ return root ? Object.freeze({ ...root, parentRun: prepared }) : null;
37
+ }
38
+ async function claimDirectory(parent, id) {
39
+ if (!safeId(id))
40
+ throw new Error("ANALYSIS_ID_INVALID");
41
+ await assertPreparedSelectedOutputDirectory(parent);
42
+ try {
43
+ await mkdir(path.join(parent.physicalPath, id), { mode: 0o700 });
44
+ }
45
+ catch (error) {
46
+ if (error instanceof Error && "code" in error && error.code === "EEXIST")
47
+ throw new Error("ANALYSIS_ID_EXISTS");
48
+ throw new Error("ANALYSIS_STORAGE_UNAVAILABLE");
49
+ }
50
+ await assertPreparedSelectedOutputDirectory(parent);
51
+ return prepareContainedOutputDirectoryRoot(parent, id);
52
+ }
53
+ /** A claimed version is never reused, including after interruption before publication. */
54
+ export async function writeStudyAnalysis(prepared, value) {
55
+ const artifact = validateStudyAnalysisArtifact(value);
56
+ const source = await readBoundedStudyFile(prepared, "run.json", STUDY_EVIDENCE_LIMITS.sourceBytes);
57
+ if (!source)
58
+ throw new Error("ANALYSIS_SOURCE_UNAVAILABLE");
59
+ await validateStudyAnalysisEvidence(prepared, artifact, source);
60
+ const bytes = Buffer.from(`${JSON.stringify(artifact, null, 2)}\n`);
61
+ if (bytes.length > ANALYSIS_MAX_BYTES)
62
+ throw new Error("ANALYSIS_ARTIFACT_TOO_LARGE");
63
+ const root = await prepareContainedOutputDirectoryRoot(prepared, STUDY_ANALYSIS_DIRECTORY);
64
+ const claimed = await claimDirectory(root, artifact.id);
65
+ // Recheck source immediately before publishing the immutable record.
66
+ const current = await readBoundedStudyFile(prepared, "run.json", STUDY_EVIDENCE_LIMITS.sourceBytes);
67
+ if (!current?.equals(source))
68
+ throw new Error("ANALYSIS_SOURCE_CHANGED");
69
+ await writeContainedOutputFile(claimed, "analysis.json", bytes);
70
+ }
71
+ async function directoryIds(root, limit, ignoreLegacyFiles = false) {
72
+ await assertPreparedSelectedOutputDirectory(root);
73
+ const directory = await opendir(root.physicalPath);
74
+ const ids = [];
75
+ const warnings = [];
76
+ let count = 0;
77
+ for await (const entry of directory) {
78
+ if (++count > limit)
79
+ throw new Error("ANALYSIS_INVENTORY_LIMIT");
80
+ const stats = await lstat(path.join(root.physicalPath, entry.name)).catch(() => null);
81
+ if (!stats)
82
+ continue;
83
+ if (stats.isSymbolicLink() || (!stats.isDirectory() && !stats.isFile()) || (stats.isFile() && stats.nlink !== 1)) {
84
+ warnings.push("ANALYSIS_UNSAFE_ENTRY_IGNORED");
85
+ continue;
86
+ }
87
+ if (stats.isFile()) {
88
+ if (entry.name.startsWith(".humanish-write-"))
89
+ continue;
90
+ if (ignoreLegacyFiles && isStudyEvidencePath(entry.name)
91
+ && !["analysis.json", "correction.json", "receipt.json"].includes(entry.name))
92
+ continue;
93
+ warnings.push("ANALYSIS_UNSAFE_ENTRY_IGNORED");
94
+ continue;
95
+ }
96
+ if (!safeId(entry.name)) {
97
+ warnings.push("ANALYSIS_UNSAFE_ENTRY_IGNORED");
98
+ continue;
99
+ }
100
+ ids.push(entry.name);
101
+ }
102
+ await assertPreparedSelectedOutputDirectory(root);
103
+ return { ids: ids.sort(), warnings };
104
+ }
105
+ async function readVersion(prepared, root, id, source) {
106
+ if (!safeId(id))
107
+ return { id: "invalid", state: "invalid", analysis: null, warnings: ["ANALYSIS_ID_INVALID"] };
108
+ const bytes = await readBoundedStudyFile(root, `${id}/analysis.json`, ANALYSIS_MAX_BYTES);
109
+ // A claimed directory without a published record is an interrupted write, not a report.
110
+ if (bytes === null) {
111
+ try {
112
+ await lstat(path.join(root.physicalPath, id, "analysis.json"));
113
+ return { id, state: "invalid", analysis: null, warnings: ["ANALYSIS_ARTIFACT_UNREADABLE"] };
114
+ }
115
+ catch (error) {
116
+ if (error instanceof Error && "code" in error && error.code === "ENOENT")
117
+ return null;
118
+ return { id, state: "invalid", analysis: null, warnings: ["ANALYSIS_ARTIFACT_UNREADABLE"] };
119
+ }
120
+ }
121
+ let analysis;
122
+ try {
123
+ analysis = validateStudyAnalysisArtifact(JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes)));
124
+ if (analysis.id !== id || analysis.runId !== path.basename(prepared.physicalRunRoot))
125
+ throw new Error("ANALYSIS_ID_MISMATCH");
126
+ }
127
+ catch {
128
+ return { id, state: "invalid", analysis: null, warnings: ["ANALYSIS_ARTIFACT_INVALID"] };
129
+ }
130
+ if (!source || hashBytes(source) !== analysis.sourceRunSha256) {
131
+ return { id, state: "stale", analysis, warnings: ["ANALYSIS_SOURCE_CHANGED"] };
132
+ }
133
+ try {
134
+ await validateStudyAnalysisEvidence(prepared, analysis, source);
135
+ }
136
+ catch (error) {
137
+ const stale = error instanceof Error && error.message === "ANALYSIS_CAPTURE_CHANGED";
138
+ return { id, state: stale ? "stale" : "invalid", analysis: null,
139
+ warnings: [stale ? "ANALYSIS_CAPTURE_CHANGED" : "ANALYSIS_EVIDENCE_INVALID"] };
140
+ }
141
+ if (analysis.result === null)
142
+ return { id, state: "invalid", analysis,
143
+ warnings: [analysis.status === "cancelled" ? "ANALYSIS_CANCELLED" : "ANALYSIS_FAILED"] };
144
+ return { id, state: "ready", analysis, warnings: [] };
145
+ }
146
+ /** Includes failed attempts; callers must not equate the newest attempt with usable findings. */
147
+ export async function listStudyAnalyses(prepared) {
148
+ try {
149
+ const root = await existingRoot(prepared);
150
+ if (!root)
151
+ return [];
152
+ const inventory = await directoryIds(root, MAX_VERSIONS, true);
153
+ const source = await readBoundedStudyFile(prepared, "run.json", STUDY_EVIDENCE_LIMITS.sourceBytes);
154
+ const results = [];
155
+ for (const id of inventory.ids) {
156
+ const entry = await readVersion(prepared, root, id, source);
157
+ if (entry)
158
+ results.push(entry);
159
+ }
160
+ if (inventory.warnings.length)
161
+ results.push({ id: "invalid", state: "invalid", analysis: null, warnings: inventory.warnings });
162
+ return results.sort((a, b) => (Date.parse(b.analysis?.completedAt ?? "") || 0) - (Date.parse(a.analysis?.completedAt ?? "") || 0) || b.id.localeCompare(a.id));
163
+ }
164
+ catch {
165
+ return [{ id: "invalid", state: "invalid", analysis: null, warnings: ["ANALYSIS_STORAGE_UNAVAILABLE"] }];
166
+ }
167
+ }
168
+ async function readCorrections(prepared, root, analysis) {
169
+ const corrections = [];
170
+ const warnings = [];
171
+ try {
172
+ const cwd = path.dirname(path.dirname(path.dirname(prepared.absoluteRunRoot)));
173
+ const directory = await bindExistingManagedHumanishOutputDirectory(cwd, "runs", analysis.runId, STUDY_ANALYSIS_DIRECTORY, analysis.id, "corrections");
174
+ if (!directory)
175
+ return { corrections, warnings };
176
+ const bound = Object.freeze({ ...directory, parentRun: prepared });
177
+ const inventory = await directoryIds(bound, MAX_CORRECTIONS);
178
+ warnings.push(...inventory.warnings);
179
+ for (const id of inventory.ids) {
180
+ const bytes = await readBoundedStudyFile(root, `${analysis.id}/corrections/${id}/correction.json`, 32 * 1024);
181
+ if (!bytes) {
182
+ // An unpublished claim directory is harmless; a present record that
183
+ // cannot be checked must not silently erase a prior review decision.
184
+ try {
185
+ await lstat(path.join(root.physicalPath, analysis.id, "corrections", id, "correction.json"));
186
+ warnings.push("ANALYSIS_CORRECTION_UNREADABLE");
187
+ }
188
+ catch (error) {
189
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
190
+ warnings.push("ANALYSIS_CORRECTION_UNREADABLE");
191
+ }
192
+ }
193
+ continue;
194
+ }
195
+ try {
196
+ const correction = validateStudyAnalysisCorrection(JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes)));
197
+ assertCorrectionBinding(analysis, correction);
198
+ if (correction.id !== id)
199
+ throw new Error("ANALYSIS_CORRECTION_ID_INVALID");
200
+ corrections.push(correction);
201
+ }
202
+ catch {
203
+ warnings.push("ANALYSIS_CORRECTION_INVALID");
204
+ }
205
+ }
206
+ }
207
+ catch {
208
+ warnings.push("ANALYSIS_CORRECTIONS_UNAVAILABLE");
209
+ }
210
+ corrections.sort((a, b) => a.createdAt.localeCompare(b.createdAt) || a.id.localeCompare(b.id));
211
+ return { corrections, warnings };
212
+ }
213
+ export async function loadStudyAnalysis(prepared, id) {
214
+ if (id !== undefined && !safeId(id))
215
+ return empty("invalid", ["ANALYSIS_ID_INVALID"]);
216
+ try {
217
+ const versions = await listStudyAnalyses(prepared);
218
+ const selected = id === undefined
219
+ ? versions.find((entry) => entry.state === "ready") ?? versions.find((entry) => entry.state === "stale") ?? versions[0]
220
+ : versions.find((entry) => entry.id === id);
221
+ if (!selected)
222
+ return empty("none");
223
+ const warnings = [...selected.warnings];
224
+ if (id === undefined)
225
+ for (const entry of versions)
226
+ if (entry !== selected)
227
+ warnings.push(...entry.warnings);
228
+ if (!selected.analysis || selected.state !== "ready") {
229
+ return { ...empty(selected.state, [...new Set(warnings)]), analysis: selected.analysis };
230
+ }
231
+ const root = await existingRoot(prepared);
232
+ if (!root)
233
+ return empty("invalid", ["ANALYSIS_STORAGE_UNAVAILABLE"]);
234
+ const corrections = await readCorrections(prepared, root, selected.analysis);
235
+ return { state: "ready", analysis: selected.analysis, corrections: corrections.corrections,
236
+ warnings: [...new Set([...warnings, ...corrections.warnings])] };
237
+ }
238
+ catch {
239
+ return empty("invalid", ["ANALYSIS_STORAGE_UNAVAILABLE"]);
240
+ }
241
+ }
242
+ function assertCorrectionBinding(analysis, correction) {
243
+ const finding = analysis.result?.findings.find((entry) => entry.id === correction.findingId);
244
+ if (analysis.id !== correction.analysisId || hashStudyAnalysisValue(analysis) !== correction.analysisSha256
245
+ || !finding || hashStudyAnalysisValue(finding) !== correction.findingSha256
246
+ || Date.parse(correction.createdAt) < Date.parse(analysis.completedAt))
247
+ throw new Error("ANALYSIS_CORRECTION_BINDING_INVALID");
248
+ }
249
+ export async function appendStudyAnalysisCorrection(prepared, value) {
250
+ const correction = validateStudyAnalysisCorrection(value);
251
+ const loaded = await loadStudyAnalysis(prepared, correction.analysisId);
252
+ if (loaded.state !== "ready" || !loaded.analysis)
253
+ throw new Error("ANALYSIS_CORRECTION_SOURCE_UNAVAILABLE");
254
+ assertCorrectionBinding(loaded.analysis, correction);
255
+ const root = await existingRoot(prepared);
256
+ if (!root)
257
+ throw new Error("ANALYSIS_STORAGE_UNAVAILABLE");
258
+ const parent = await prepareContainedOutputDirectoryRoot(root, `${correction.analysisId}/corrections`);
259
+ // The service's run lock serializes this check with ordinary correction writers.
260
+ // Reserve the new entry before claiming it so a full history stays readable.
261
+ try {
262
+ const inventory = await directoryIds(parent, MAX_CORRECTIONS - 1);
263
+ if (inventory.warnings.length > 0)
264
+ throw new Error("Unsafe correction inventory.");
265
+ }
266
+ catch {
267
+ throw new Error("ANALYSIS_CORRECTION_HISTORY_UNAVAILABLE");
268
+ }
269
+ const claimed = await claimDirectory(parent, correction.id);
270
+ await writeContainedOutputFile(claimed, "correction.json", `${JSON.stringify(correction, null, 2)}\n`);
271
+ }
272
+ export const STUDY_ANALYSIS_EXECUTION_DIRECTORY = "analysis-attempts";
273
+ /**
274
+ * Publish accounting first. Unlike a usable report, this receipt does not claim
275
+ * the source still matches; its digests name the exact input that was attempted.
276
+ */
277
+ export async function writeStudyAnalysisExecutionReceipt(prepared, value) {
278
+ const artifact = validateStudyAnalysisArtifact(value);
279
+ if (artifact.runId !== path.basename(prepared.physicalRunRoot))
280
+ throw new Error("ANALYSIS_ID_MISMATCH");
281
+ const receipt = {
282
+ schema: "humanish.analysis-execution.v1",
283
+ model: artifact.config.model,
284
+ maxCostUsd: artifact.config.maxCostUsd,
285
+ id: artifact.id,
286
+ runId: artifact.runId,
287
+ status: artifact.status,
288
+ createdAt: artifact.createdAt,
289
+ completedAt: artifact.completedAt,
290
+ sourceRunSha256: artifact.sourceRunSha256,
291
+ inputDigest: artifact.inputDigest,
292
+ configDigest: artifact.configDigest,
293
+ promptVersion: artifact.promptVersion,
294
+ provider: artifact.provider,
295
+ usage: artifact.usage,
296
+ error: artifact.error
297
+ };
298
+ const root = await prepareContainedOutputDirectoryRoot(prepared, STUDY_ANALYSIS_EXECUTION_DIRECTORY);
299
+ const claimed = await claimDirectory(root, receipt.id);
300
+ await writeContainedOutputFile(claimed, "receipt.json", `${JSON.stringify(receipt, null, 2)}\n`);
301
+ }
302
+ export async function listStudyAnalysisExecutions(prepared) {
303
+ const receipts = [];
304
+ const warnings = [];
305
+ try {
306
+ const root = await existingRoot(prepared, STUDY_ANALYSIS_EXECUTION_DIRECTORY);
307
+ if (!root)
308
+ return { receipts, warnings };
309
+ const inventory = await directoryIds(root, MAX_VERSIONS);
310
+ warnings.push(...inventory.warnings);
311
+ for (const id of inventory.ids) {
312
+ const bytes = await readBoundedStudyFile(root, `${id}/receipt.json`, 16 * 1024);
313
+ if (!bytes) {
314
+ try {
315
+ await lstat(path.join(root.physicalPath, id, "receipt.json"));
316
+ warnings.push("ANALYSIS_RECEIPT_UNREADABLE");
317
+ }
318
+ catch (error) {
319
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT"))
320
+ warnings.push("ANALYSIS_RECEIPT_UNREADABLE");
321
+ }
322
+ continue;
323
+ }
324
+ try {
325
+ const receipt = validateStudyAnalysisExecutionReceipt(JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes)));
326
+ if (receipt.id !== id || receipt.runId !== path.basename(prepared.physicalRunRoot)) {
327
+ warnings.push("ANALYSIS_RECEIPT_INVALID");
328
+ continue;
329
+ }
330
+ receipts.push(receipt);
331
+ }
332
+ catch {
333
+ warnings.push("ANALYSIS_RECEIPT_INVALID");
334
+ }
335
+ }
336
+ receipts.sort((a, b) => Date.parse(b.completedAt) - Date.parse(a.completedAt) || b.id.localeCompare(a.id));
337
+ }
338
+ catch {
339
+ warnings.push("ANALYSIS_RECEIPTS_UNAVAILABLE");
340
+ }
341
+ return { receipts, warnings: [...new Set(warnings)] };
342
+ }
343
+ //# sourceMappingURL=study-analysis-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"study-analysis-store.js","sourceRoot":"","sources":["../src/study-analysis-store.ts"],"names":[],"mappings":"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"}