humanish 0.0.1 → 0.15.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 (196) hide show
  1. package/AGENTS.md +77 -0
  2. package/CONTRIBUTING.md +39 -0
  3. package/LICENSE +21 -0
  4. package/README.md +435 -8
  5. package/SECURITY.md +34 -0
  6. package/dist/actor-contract.d.ts +107 -0
  7. package/dist/actor-contract.js +286 -0
  8. package/dist/actor-contract.js.map +1 -0
  9. package/dist/actor-registry.d.ts +73 -0
  10. package/dist/actor-registry.js +93 -0
  11. package/dist/actor-registry.js.map +1 -0
  12. package/dist/adapter-extension.d.ts +54 -0
  13. package/dist/adapter-extension.js +214 -0
  14. package/dist/adapter-extension.js.map +1 -0
  15. package/dist/argv.d.ts +1 -0
  16. package/dist/argv.js +8 -0
  17. package/dist/argv.js.map +1 -0
  18. package/dist/artifact-reference.d.ts +22 -0
  19. package/dist/artifact-reference.js +47 -0
  20. package/dist/artifact-reference.js.map +1 -0
  21. package/dist/browser-evidence-hygiene.d.ts +7 -0
  22. package/dist/browser-evidence-hygiene.js +40 -0
  23. package/dist/browser-evidence-hygiene.js.map +1 -0
  24. package/dist/claude-agent-sdk.d.ts +94 -0
  25. package/dist/claude-agent-sdk.js +356 -0
  26. package/dist/claude-agent-sdk.js.map +1 -0
  27. package/dist/cli.d.ts +2 -0
  28. package/dist/cli.js +5 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/codex-app-server-ui.d.ts +39 -0
  31. package/dist/codex-app-server-ui.js +327 -0
  32. package/dist/codex-app-server-ui.js.map +1 -0
  33. package/dist/codex-app-server.d.ts +141 -0
  34. package/dist/codex-app-server.js +747 -0
  35. package/dist/codex-app-server.js.map +1 -0
  36. package/dist/command-failure.d.ts +29 -0
  37. package/dist/command-failure.js +54 -0
  38. package/dist/command-failure.js.map +1 -0
  39. package/dist/computer-use-actor.d.ts +52 -0
  40. package/dist/computer-use-actor.js +48 -0
  41. package/dist/computer-use-actor.js.map +1 -0
  42. package/dist/computer-use.d.ts +232 -0
  43. package/dist/computer-use.js +615 -0
  44. package/dist/computer-use.js.map +1 -0
  45. package/dist/concurrency.d.ts +1 -0
  46. package/dist/concurrency.js +27 -0
  47. package/dist/concurrency.js.map +1 -0
  48. package/dist/concurrent-shared-world-lab.d.ts +115 -0
  49. package/dist/concurrent-shared-world-lab.js +1092 -0
  50. package/dist/concurrent-shared-world-lab.js.map +1 -0
  51. package/dist/core/git-state.d.ts +31 -0
  52. package/dist/core/git-state.js +142 -0
  53. package/dist/core/git-state.js.map +1 -0
  54. package/dist/core/index.d.ts +4 -0
  55. package/dist/core/index.js +3 -0
  56. package/dist/core/index.js.map +1 -0
  57. package/dist/core/run-primitives.d.ts +66 -0
  58. package/dist/core/run-primitives.js +120 -0
  59. package/dist/core/run-primitives.js.map +1 -0
  60. package/dist/cua-actor-lab.d.ts +620 -0
  61. package/dist/cua-actor-lab.js +2834 -0
  62. package/dist/cua-actor-lab.js.map +1 -0
  63. package/dist/device-presets.d.ts +67 -0
  64. package/dist/device-presets.js +50 -0
  65. package/dist/device-presets.js.map +1 -0
  66. package/dist/e2b-desktop-executor.d.ts +101 -0
  67. package/dist/e2b-desktop-executor.js +309 -0
  68. package/dist/e2b-desktop-executor.js.map +1 -0
  69. package/dist/e2b-desktop-launch.d.ts +144 -0
  70. package/dist/e2b-desktop-launch.js +59 -0
  71. package/dist/e2b-desktop-launch.js.map +1 -0
  72. package/dist/e2b-detached.d.ts +53 -0
  73. package/dist/e2b-detached.js +130 -0
  74. package/dist/e2b-detached.js.map +1 -0
  75. package/dist/e2b-terminal-lab.d.ts +345 -0
  76. package/dist/e2b-terminal-lab.js +1467 -0
  77. package/dist/e2b-terminal-lab.js.map +1 -0
  78. package/dist/env-file.d.ts +14 -0
  79. package/dist/env-file.js +108 -0
  80. package/dist/env-file.js.map +1 -0
  81. package/dist/feedback.d.ts +51 -0
  82. package/dist/feedback.js +313 -0
  83. package/dist/feedback.js.map +1 -0
  84. package/dist/image-evidence.d.ts +2 -0
  85. package/dist/image-evidence.js +33 -0
  86. package/dist/image-evidence.js.map +1 -0
  87. package/dist/index.d.ts +63 -0
  88. package/dist/index.js +33 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/init-templates.d.ts +12 -0
  91. package/dist/init-templates.js +369 -0
  92. package/dist/init-templates.js.map +1 -0
  93. package/dist/init.d.ts +26 -0
  94. package/dist/init.js +343 -0
  95. package/dist/init.js.map +1 -0
  96. package/dist/lab-app-runner.d.ts +78 -0
  97. package/dist/lab-app-runner.js +403 -0
  98. package/dist/lab-app-runner.js.map +1 -0
  99. package/dist/lab-config.d.ts +578 -0
  100. package/dist/lab-config.js +1751 -0
  101. package/dist/lab-config.js.map +1 -0
  102. package/dist/lab-engine.d.ts +77 -0
  103. package/dist/lab-engine.js +216 -0
  104. package/dist/lab-engine.js.map +1 -0
  105. package/dist/lab-preflight.d.ts +67 -0
  106. package/dist/lab-preflight.js +385 -0
  107. package/dist/lab-preflight.js.map +1 -0
  108. package/dist/labs.d.ts +53 -0
  109. package/dist/labs.js +176 -0
  110. package/dist/labs.js.map +1 -0
  111. package/dist/observer-assets.d.ts +2 -0
  112. package/dist/observer-assets.js +2630 -0
  113. package/dist/observer-assets.js.map +1 -0
  114. package/dist/observer-data.d.ts +63 -0
  115. package/dist/observer-data.js +145 -0
  116. package/dist/observer-data.js.map +1 -0
  117. package/dist/observer-static.d.ts +39 -0
  118. package/dist/observer-static.js +192 -0
  119. package/dist/observer-static.js.map +1 -0
  120. package/dist/observer.d.ts +46 -0
  121. package/dist/observer.js +353 -0
  122. package/dist/observer.js.map +1 -0
  123. package/dist/openai-responses-cu.d.ts +113 -0
  124. package/dist/openai-responses-cu.js +531 -0
  125. package/dist/openai-responses-cu.js.map +1 -0
  126. package/dist/oss-lab.d.ts +52 -0
  127. package/dist/oss-lab.js +299 -0
  128. package/dist/oss-lab.js.map +1 -0
  129. package/dist/oss-meta-lab-scoring.d.ts +15 -0
  130. package/dist/oss-meta-lab-scoring.js +145 -0
  131. package/dist/oss-meta-lab-scoring.js.map +1 -0
  132. package/dist/oss-meta-lab.d.ts +279 -0
  133. package/dist/oss-meta-lab.js +4889 -0
  134. package/dist/oss-meta-lab.js.map +1 -0
  135. package/dist/oss-remote-telemetry.d.ts +77 -0
  136. package/dist/oss-remote-telemetry.js +403 -0
  137. package/dist/oss-remote-telemetry.js.map +1 -0
  138. package/dist/persona.d.ts +35 -0
  139. package/dist/persona.js +133 -0
  140. package/dist/persona.js.map +1 -0
  141. package/dist/pi-agent-core.d.ts +77 -0
  142. package/dist/pi-agent-core.js +203 -0
  143. package/dist/pi-agent-core.js.map +1 -0
  144. package/dist/program.d.ts +54 -0
  145. package/dist/program.js +2347 -0
  146. package/dist/program.js.map +1 -0
  147. package/dist/redaction.d.ts +90 -0
  148. package/dist/redaction.js +292 -0
  149. package/dist/redaction.js.map +1 -0
  150. package/dist/run.d.ts +784 -0
  151. package/dist/run.js +4555 -0
  152. package/dist/run.js.map +1 -0
  153. package/dist/scripted-browser-actor.d.ts +294 -0
  154. package/dist/scripted-browser-actor.js +1286 -0
  155. package/dist/scripted-browser-actor.js.map +1 -0
  156. package/dist/scripted-browser-lab.d.ts +107 -0
  157. package/dist/scripted-browser-lab.js +738 -0
  158. package/dist/scripted-browser-lab.js.map +1 -0
  159. package/dist/shared-world-lab.d.ts +208 -0
  160. package/dist/shared-world-lab.js +1048 -0
  161. package/dist/shared-world-lab.js.map +1 -0
  162. package/dist/source-archive.d.ts +82 -0
  163. package/dist/source-archive.js +365 -0
  164. package/dist/source-archive.js.map +1 -0
  165. package/dist/stop-conditions.d.ts +26 -0
  166. package/dist/stop-conditions.js +66 -0
  167. package/dist/stop-conditions.js.map +1 -0
  168. package/dist/terminal-agent-actor.d.ts +36 -0
  169. package/dist/terminal-agent-actor.js +23 -0
  170. package/dist/terminal-agent-actor.js.map +1 -0
  171. package/docs/architecture/actor-contract.md +431 -0
  172. package/docs/architecture/github-feedback-loop.md +189 -0
  173. package/docs/architecture/local-codex-tui-actor.md +213 -0
  174. package/docs/architecture/observer.md +118 -0
  175. package/docs/architecture/oss-lab-poc.md +242 -0
  176. package/docs/architecture/project-layout.md +166 -0
  177. package/docs/architecture/state-driven-executor.md +203 -0
  178. package/docs/architecture/terminal-product-lane.md +148 -0
  179. package/docs/contracts/adapter-fixtures.md +80 -0
  180. package/docs/contracts/core.md +71 -0
  181. package/docs/contracts/feedback.md +145 -0
  182. package/docs/contracts/policy.md +305 -0
  183. package/docs/contracts/run-bundle.md +358 -0
  184. package/docs/contracts/schemas.md +984 -0
  185. package/docs/goals/current.md +409 -0
  186. package/docs/principles/invariants-and-defaults.md +135 -0
  187. package/docs/principles/self-driving-harness.md +129 -0
  188. package/docs/product/open-source-install-experience.md +229 -0
  189. package/docs/ramp/README.md +200 -0
  190. package/docs/release/open-source-readiness.md +208 -0
  191. package/docs/release/public-readiness-standard.md +205 -0
  192. package/docs/roadmap/world-class-open-source-v0.md +311 -0
  193. package/package.json +102 -8
  194. package/skills/humanish/SKILL.md +244 -0
  195. package/skills/humanish/agents/openai.yaml +7 -0
  196. package/index.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer-assets.js","sourceRoot":"","sources":["../src/observer-assets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { RunBundle, RunEvent, RunSimulation, RunStream, RunStreamKind } from "./run.js";
2
+ export declare const OBSERVER_DATA_SCHEMA = "humanish.observer-data.v1";
3
+ export interface ObserverArtifactLink {
4
+ label: string;
5
+ href: string;
6
+ kind: string;
7
+ }
8
+ export interface ObserverData {
9
+ schema: typeof OBSERVER_DATA_SCHEMA;
10
+ schemaVersion: 1;
11
+ generatedAt: string;
12
+ run: {
13
+ runId: string;
14
+ mode: RunBundle["mode"];
15
+ status: RunBundle["review"]["verdict"];
16
+ title: string;
17
+ createdAt: string;
18
+ simCount: number;
19
+ persona: RunBundle["persona"];
20
+ scenario: RunBundle["scenario"];
21
+ packageName: string | null;
22
+ redaction: RunBundle["redaction"];
23
+ lifecycle: RunBundle["lifecycle"];
24
+ knownGaps: string[];
25
+ };
26
+ summary: {
27
+ streams: number;
28
+ byKind: Record<RunStreamKind, number>;
29
+ active: number;
30
+ blocked: number;
31
+ warnings: number;
32
+ };
33
+ laneGroups: ObserverLaneGroup[];
34
+ streams: ObserverStream[];
35
+ events: RunEvent[];
36
+ artifactLinks: ObserverArtifactLink[];
37
+ publicSafety: {
38
+ publishable: false;
39
+ note: string;
40
+ };
41
+ raw: {
42
+ bundleSchema: string;
43
+ artifactRoot: string;
44
+ };
45
+ }
46
+ export interface ObserverStream extends RunStream {
47
+ sim: RunSimulation;
48
+ kindLabel: string;
49
+ statusLabel: string;
50
+ terminalPlain: string;
51
+ timeline: RunEvent[];
52
+ }
53
+ export interface ObserverLaneGroup {
54
+ roleId: string;
55
+ simId: string;
56
+ streamId: string;
57
+ status: string;
58
+ actorType?: string;
59
+ surface?: string;
60
+ caseGroup?: string;
61
+ }
62
+ export declare function buildObserverData(bundle: RunBundle, generatedAt?: string): ObserverData;
63
+ export declare function stripAnsi(value: string): string;
@@ -0,0 +1,145 @@
1
+ export const OBSERVER_DATA_SCHEMA = "humanish.observer-data.v1";
2
+ const allKinds = ["ui", "browser", "terminal", "tui", "codex-ui", "artifact", "summary"];
3
+ export function buildObserverData(bundle, generatedAt = new Date().toISOString()) {
4
+ const byKind = Object.fromEntries(allKinds.map((kind) => [kind, 0]));
5
+ const events = [...(bundle.events ?? [])];
6
+ const streams = (bundle.streams ?? []).map((stream) => {
7
+ const sim = bundle.simulations.find((candidate) => candidate.id === stream.simId) ?? fallbackSimulation(bundle, stream);
8
+ byKind[stream.kind] += 1;
9
+ return {
10
+ ...stream,
11
+ sim,
12
+ kindLabel: kindLabel(stream.kind),
13
+ statusLabel: statusLabel(stream.status),
14
+ terminalPlain: stripAnsi(stream.terminal?.tail ?? ""),
15
+ timeline: events.filter((event) => event.simId === sim.id || event.streamId === stream.id)
16
+ };
17
+ });
18
+ const warnings = events.filter((event) => event.level === "warn").length;
19
+ const blocked = streams.filter((stream) => stream.status === "blocked" || stream.status === "failed" || stream.status === "timed_out").length;
20
+ const active = streams.filter((stream) => stream.status === "running" || stream.status === "preparing").length;
21
+ return {
22
+ schema: OBSERVER_DATA_SCHEMA,
23
+ schemaVersion: 1,
24
+ generatedAt,
25
+ run: {
26
+ runId: bundle.runId,
27
+ mode: bundle.mode,
28
+ status: bundle.review.verdict,
29
+ title: `${bundle.scenario.title} - ${bundle.persona.name}`,
30
+ createdAt: bundle.createdAt,
31
+ simCount: bundle.simCount ?? bundle.simulations.length,
32
+ persona: bundle.persona,
33
+ scenario: bundle.scenario,
34
+ packageName: bundle.source.packageName,
35
+ redaction: bundle.redaction,
36
+ lifecycle: bundle.lifecycle,
37
+ knownGaps: bundle.review.gaps
38
+ },
39
+ summary: {
40
+ streams: streams.length,
41
+ byKind,
42
+ active,
43
+ blocked,
44
+ warnings
45
+ },
46
+ laneGroups: buildLaneGroups(bundle),
47
+ streams,
48
+ events,
49
+ artifactLinks: [
50
+ { label: "run bundle", href: "../run.json", kind: "bundle" },
51
+ { label: "review JSON", href: "../review.json", kind: "review" },
52
+ { label: "review Markdown", href: "../review.md", kind: "review" },
53
+ { label: "event log", href: "../events.ndjson", kind: "events" },
54
+ { label: "observer data", href: "observer-data.json", kind: "observer" },
55
+ ...(bundle.adapterArtifacts ?? []).map((artifact) => ({
56
+ label: artifact.label,
57
+ href: `../${artifact.path}`,
58
+ kind: artifact.kind
59
+ }))
60
+ ],
61
+ publicSafety: {
62
+ publishable: false,
63
+ note: "Observer artifacts are local evidence. Before filing a public issue, use `humanish feedback issue` so redaction and public-safety checks gate the payload."
64
+ },
65
+ raw: {
66
+ bundleSchema: bundle.schema,
67
+ artifactRoot: bundle.artifactRoot
68
+ }
69
+ };
70
+ }
71
+ function buildLaneGroups(bundle) {
72
+ const outcomes = new Map((bundle.sharedWorld?.outcomes ?? []).map((outcome) => [outcome.roleId, outcome.status]));
73
+ return (bundle.sharedWorld?.laneWindows ?? []).map((lane) => ({
74
+ roleId: lane.roleId,
75
+ simId: lane.simId,
76
+ streamId: lane.streamId,
77
+ status: outcomes.get(lane.roleId) ?? lane.verdict,
78
+ ...(lane.actorType === undefined ? {} : { actorType: lane.actorType }),
79
+ ...(lane.surface === undefined ? {} : { surface: lane.surface }),
80
+ ...(lane.caseGroup === undefined ? {} : { caseGroup: lane.caseGroup })
81
+ }));
82
+ }
83
+ export function stripAnsi(value) {
84
+ return value
85
+ .replace(/\u001b\[[0-9;?]*[ -/]*[@-~]/g, "")
86
+ .replace(/\u001b\][^\u0007]*(?:\u0007|\u001b\\)/g, "");
87
+ }
88
+ function fallbackSimulation(bundle, stream) {
89
+ return {
90
+ id: stream.simId,
91
+ index: bundle.simulations.length + 1,
92
+ personaId: bundle.persona.id,
93
+ scenarioId: bundle.scenario.id,
94
+ status: stream.status,
95
+ streamKind: stream.kind,
96
+ mode: "cli-sim",
97
+ progress: 0,
98
+ currentStep: "Unknown sim stream",
99
+ summary: "This stream did not include matching sim metadata.",
100
+ streamIds: [stream.id],
101
+ startedAt: bundle.createdAt,
102
+ updatedAt: stream.updatedAt
103
+ };
104
+ }
105
+ function kindLabel(kind) {
106
+ switch (kind) {
107
+ case "ui":
108
+ return "UI";
109
+ case "browser":
110
+ return "Browser";
111
+ case "terminal":
112
+ return "CLI";
113
+ case "tui":
114
+ return "TUI";
115
+ case "codex-ui":
116
+ return "Codex UI";
117
+ case "artifact":
118
+ return "Artifact";
119
+ case "summary":
120
+ return "Summary";
121
+ }
122
+ }
123
+ function statusLabel(status) {
124
+ switch (status) {
125
+ case "contract_proof_only":
126
+ return "Contract proof";
127
+ case "preparing":
128
+ return "Preparing";
129
+ case "queued":
130
+ return "Queued";
131
+ case "running":
132
+ return "Running";
133
+ case "passed":
134
+ return "Passed";
135
+ case "complete":
136
+ return "Complete";
137
+ case "blocked":
138
+ return "Blocked";
139
+ case "timed_out":
140
+ return "Timed out";
141
+ case "failed":
142
+ return "Failed";
143
+ }
144
+ }
145
+ //# sourceMappingURL=observer-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer-data.js","sourceRoot":"","sources":["../src/observer-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ export declare const OBSERVER_STATIC_HOST = "127.0.0.1";
3
+ export interface ObserverStaticHandlerOptions {
4
+ /** Directory served as the loopback root. Requests can never escape it. */
5
+ root: string;
6
+ /** File served for directory requests. Defaults to `index.html`. */
7
+ indexPath?: string;
8
+ /**
9
+ * When set, an exact `/` request returns a 302 to `/<redirectRootTo>` instead
10
+ * of serving a file. Used to land visitors on `observer/index.html` so the
11
+ * Observer's relative artifact links (`../run.json`, ...) resolve.
12
+ */
13
+ redirectRootTo?: string;
14
+ }
15
+ export interface ObserverStaticServeOptions extends ObserverStaticHandlerOptions {
16
+ /** TCP port to bind on 127.0.0.1. Defaults to an ephemeral port (0). */
17
+ port?: number;
18
+ /**
19
+ * Relative entry page (e.g. `observer/index.html`). Drives the returned
20
+ * `url` and the `/` -> entry redirect so callers open the page directly.
21
+ */
22
+ entryPath?: string;
23
+ }
24
+ export interface ObserverStaticServer {
25
+ url: string;
26
+ port: number;
27
+ host: string;
28
+ close(): Promise<void>;
29
+ }
30
+ export declare function observerStaticContentType(filePath: string): string;
31
+ /**
32
+ * Resolve, guard, and serve a single static request from `root`. Never throws:
33
+ * any unexpected failure is reported as a 500 so the connection always closes.
34
+ * Exported directly so the security guards can be unit-tested without binding a
35
+ * socket.
36
+ */
37
+ export declare function respondToObserverStaticRequest(options: ObserverStaticHandlerOptions, request: Pick<IncomingMessage, "method" | "url">, response: ServerResponse): Promise<void>;
38
+ export declare function createObserverStaticHandler(options: ObserverStaticHandlerOptions): (request: IncomingMessage, response: ServerResponse) => void;
39
+ export declare function serveObserverStatic(options: ObserverStaticServeOptions): Promise<ObserverStaticServer>;
@@ -0,0 +1,192 @@
1
+ import { createServer } from "node:http";
2
+ import { readFile, stat } from "node:fs/promises";
3
+ import path from "node:path";
4
+ // Loopback-only host for the Observer static server. We never bind 0.0.0.0:
5
+ // the Observer surfaces local run evidence and must stay reachable only from
6
+ // the machine that owns the run bundle.
7
+ export const OBSERVER_STATIC_HOST = "127.0.0.1";
8
+ // Minimal extension -> content-type map. Kept dependency-free (no `mime`
9
+ // package) because the Observer ships a small, known set of asset kinds.
10
+ const CONTENT_TYPES = {
11
+ ".html": "text/html; charset=utf-8",
12
+ ".htm": "text/html; charset=utf-8",
13
+ ".js": "text/javascript; charset=utf-8",
14
+ ".mjs": "text/javascript; charset=utf-8",
15
+ ".css": "text/css; charset=utf-8",
16
+ ".json": "application/json; charset=utf-8",
17
+ ".map": "application/json; charset=utf-8",
18
+ ".svg": "image/svg+xml",
19
+ ".png": "image/png",
20
+ ".jpg": "image/jpeg",
21
+ ".jpeg": "image/jpeg",
22
+ ".webp": "image/webp",
23
+ ".gif": "image/gif",
24
+ ".ico": "image/x-icon",
25
+ ".md": "text/markdown; charset=utf-8",
26
+ ".ndjson": "application/x-ndjson; charset=utf-8",
27
+ ".txt": "text/plain; charset=utf-8",
28
+ ".woff": "font/woff",
29
+ ".woff2": "font/woff2"
30
+ };
31
+ export function observerStaticContentType(filePath) {
32
+ return CONTENT_TYPES[path.extname(filePath).toLowerCase()] ?? "application/octet-stream";
33
+ }
34
+ /**
35
+ * Resolve, guard, and serve a single static request from `root`. Never throws:
36
+ * any unexpected failure is reported as a 500 so the connection always closes.
37
+ * Exported directly so the security guards can be unit-tested without binding a
38
+ * socket.
39
+ */
40
+ export async function respondToObserverStaticRequest(options, request, response) {
41
+ const root = path.resolve(options.root);
42
+ const indexRelative = options.indexPath ?? "index.html";
43
+ try {
44
+ const method = request.method ?? "GET";
45
+ if (method !== "GET" && method !== "HEAD") {
46
+ writeText(response, 405, "Method Not Allowed");
47
+ return;
48
+ }
49
+ let pathname;
50
+ try {
51
+ pathname = new URL(request.url ?? "/", `http://${OBSERVER_STATIC_HOST}`).pathname;
52
+ }
53
+ catch {
54
+ writeText(response, 400, "Bad Request");
55
+ return;
56
+ }
57
+ if (pathname === "/" && options.redirectRootTo) {
58
+ const location = `/${options.redirectRootTo.replace(/^\/+/, "")}`;
59
+ response.writeHead(302, {
60
+ location,
61
+ "cache-control": "no-store",
62
+ "content-length": "0"
63
+ });
64
+ response.end();
65
+ return;
66
+ }
67
+ let decoded;
68
+ try {
69
+ decoded = decodeURIComponent(pathname);
70
+ }
71
+ catch {
72
+ writeText(response, 400, "Bad Request");
73
+ return;
74
+ }
75
+ // Reject embedded NUL bytes outright rather than letting them reach the fs.
76
+ if (decoded.includes("\0")) {
77
+ writeText(response, 400, "Bad Request");
78
+ return;
79
+ }
80
+ let relative = decoded.replace(/^\/+/, "");
81
+ if (relative === "" || relative.endsWith("/")) {
82
+ relative = `${relative}${indexRelative}`;
83
+ }
84
+ const target = path.resolve(root, relative);
85
+ if (!isPathInside(root, target)) {
86
+ writeText(response, 403, "Forbidden");
87
+ return;
88
+ }
89
+ let info;
90
+ try {
91
+ info = await stat(target);
92
+ }
93
+ catch {
94
+ writeText(response, 404, "Not Found");
95
+ return;
96
+ }
97
+ let filePath = target;
98
+ if (info.isDirectory()) {
99
+ filePath = path.resolve(target, indexRelative);
100
+ if (!isPathInside(root, filePath)) {
101
+ writeText(response, 403, "Forbidden");
102
+ return;
103
+ }
104
+ }
105
+ let body;
106
+ try {
107
+ body = await readFile(filePath);
108
+ }
109
+ catch {
110
+ writeText(response, 404, "Not Found");
111
+ return;
112
+ }
113
+ response.writeHead(200, {
114
+ "cache-control": "no-store",
115
+ "content-type": observerStaticContentType(filePath),
116
+ "content-length": String(body.byteLength)
117
+ });
118
+ if (method === "HEAD") {
119
+ response.end();
120
+ return;
121
+ }
122
+ response.end(body);
123
+ }
124
+ catch (error) {
125
+ if (response.headersSent) {
126
+ response.end();
127
+ return;
128
+ }
129
+ writeText(response, 500, error instanceof Error ? error.message : String(error));
130
+ }
131
+ }
132
+ export function createObserverStaticHandler(options) {
133
+ return (request, response) => {
134
+ void respondToObserverStaticRequest(options, request, response);
135
+ };
136
+ }
137
+ export async function serveObserverStatic(options) {
138
+ const entryPath = options.entryPath?.replace(/^\/+/, "") ?? "";
139
+ const handler = createObserverStaticHandler({
140
+ root: options.root,
141
+ ...(options.indexPath === undefined ? {} : { indexPath: options.indexPath }),
142
+ ...(entryPath ? { redirectRootTo: entryPath } : {})
143
+ });
144
+ const server = createServer(handler);
145
+ const port = await listen(server, options.port ?? 0);
146
+ return {
147
+ url: `http://${OBSERVER_STATIC_HOST}:${port}/${entryPath}`,
148
+ port,
149
+ host: OBSERVER_STATIC_HOST,
150
+ close: () => closeServer(server)
151
+ };
152
+ }
153
+ function writeText(response, status, message) {
154
+ const body = `${message}\n`;
155
+ response.writeHead(status, {
156
+ "cache-control": "no-store",
157
+ "content-type": "text/plain; charset=utf-8",
158
+ "content-length": String(Buffer.byteLength(body))
159
+ });
160
+ response.end(body);
161
+ }
162
+ function isPathInside(root, candidate) {
163
+ const relative = path.relative(root, candidate);
164
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
165
+ }
166
+ function listen(server, port) {
167
+ return new Promise((resolve, reject) => {
168
+ server.once("error", reject);
169
+ server.listen(port, OBSERVER_STATIC_HOST, () => {
170
+ server.off("error", reject);
171
+ const address = server.address();
172
+ if (!address || typeof address === "string") {
173
+ reject(new Error("Observer static server did not bind to a TCP port."));
174
+ return;
175
+ }
176
+ resolve(address.port);
177
+ });
178
+ });
179
+ }
180
+ function closeServer(server) {
181
+ return new Promise((resolve, reject) => {
182
+ server.close((error) => {
183
+ if (error) {
184
+ reject(error);
185
+ }
186
+ else {
187
+ resolve();
188
+ }
189
+ });
190
+ });
191
+ }
192
+ //# sourceMappingURL=observer-static.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer-static.js","sourceRoot":"","sources":["../src/observer-static.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ export declare const OBSERVER_SCHEMA = "humanish.observer-result.v1";
2
+ export interface ObserverResult {
3
+ schema: typeof OBSERVER_SCHEMA;
4
+ ok: boolean;
5
+ cwd: string;
6
+ run: string;
7
+ observerPath?: string;
8
+ observerDataPath?: string;
9
+ eventsPath?: string;
10
+ observerUrl?: string;
11
+ serverUrl?: string;
12
+ bundlePath?: string;
13
+ opened?: boolean;
14
+ openCommand?: string;
15
+ warnings: string[];
16
+ error?: {
17
+ code: "HUMANISH_RUN_NOT_FOUND" | "HUMANISH_INVALID_RUN_BUNDLE";
18
+ message: string;
19
+ };
20
+ }
21
+ export interface ObserverOptions {
22
+ open?: boolean;
23
+ }
24
+ export interface ObserverServeOptions {
25
+ open?: boolean;
26
+ port?: number;
27
+ }
28
+ export interface ObserverServer {
29
+ url: string;
30
+ opened: boolean;
31
+ openCommand?: string;
32
+ warning?: string;
33
+ close(): Promise<void>;
34
+ }
35
+ export interface ObserverRuntimeStreamUrl {
36
+ streamId: string;
37
+ url: string;
38
+ }
39
+ export declare function attachObserverRuntimeStreamUrls(result: ObserverResult, streams: ObserverRuntimeStreamUrl[]): void;
40
+ export declare function renderObserver(cwdInput: string, runInput: string, options?: ObserverOptions): Promise<ObserverResult>;
41
+ export declare function serveObserver(result: ObserverResult, options?: ObserverServeOptions): Promise<ObserverServer>;
42
+ export declare function openTarget(target: string): {
43
+ opened: boolean;
44
+ command?: string;
45
+ warning?: string;
46
+ };