humanish 0.0.1 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/AGENTS.md +77 -0
  2. package/CONTRIBUTING.md +39 -0
  3. package/LICENSE +21 -0
  4. package/README.md +437 -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 +363 -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 +357 -0
  32. package/dist/codex-app-server-ui.js.map +1 -0
  33. package/dist/codex-app-server.d.ts +144 -0
  34. package/dist/codex-app-server.js +754 -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 +1094 -0
  50. package/dist/concurrent-shared-world-lab.js.map +1 -0
  51. package/dist/core/git-state.d.ts +33 -0
  52. package/dist/core/git-state.js +277 -0
  53. package/dist/core/git-state.js.map +1 -0
  54. package/dist/core/git-workspace.d.ts +31 -0
  55. package/dist/core/git-workspace.js +447 -0
  56. package/dist/core/git-workspace.js.map +1 -0
  57. package/dist/core/index.d.ts +4 -0
  58. package/dist/core/index.js +3 -0
  59. package/dist/core/index.js.map +1 -0
  60. package/dist/core/run-primitives.d.ts +66 -0
  61. package/dist/core/run-primitives.js +120 -0
  62. package/dist/core/run-primitives.js.map +1 -0
  63. package/dist/cua-actor-lab.d.ts +621 -0
  64. package/dist/cua-actor-lab.js +2845 -0
  65. package/dist/cua-actor-lab.js.map +1 -0
  66. package/dist/device-presets.d.ts +67 -0
  67. package/dist/device-presets.js +50 -0
  68. package/dist/device-presets.js.map +1 -0
  69. package/dist/e2b-desktop-executor.d.ts +101 -0
  70. package/dist/e2b-desktop-executor.js +309 -0
  71. package/dist/e2b-desktop-executor.js.map +1 -0
  72. package/dist/e2b-desktop-launch.d.ts +144 -0
  73. package/dist/e2b-desktop-launch.js +59 -0
  74. package/dist/e2b-desktop-launch.js.map +1 -0
  75. package/dist/e2b-detached.d.ts +53 -0
  76. package/dist/e2b-detached.js +130 -0
  77. package/dist/e2b-detached.js.map +1 -0
  78. package/dist/e2b-terminal-lab.d.ts +345 -0
  79. package/dist/e2b-terminal-lab.js +1532 -0
  80. package/dist/e2b-terminal-lab.js.map +1 -0
  81. package/dist/env-file.d.ts +14 -0
  82. package/dist/env-file.js +108 -0
  83. package/dist/env-file.js.map +1 -0
  84. package/dist/feedback.d.ts +51 -0
  85. package/dist/feedback.js +351 -0
  86. package/dist/feedback.js.map +1 -0
  87. package/dist/image-evidence.d.ts +2 -0
  88. package/dist/image-evidence.js +33 -0
  89. package/dist/image-evidence.js.map +1 -0
  90. package/dist/index.d.ts +63 -0
  91. package/dist/index.js +33 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/init-templates.d.ts +12 -0
  94. package/dist/init-templates.js +369 -0
  95. package/dist/init-templates.js.map +1 -0
  96. package/dist/init.d.ts +26 -0
  97. package/dist/init.js +429 -0
  98. package/dist/init.js.map +1 -0
  99. package/dist/lab-app-runner.d.ts +78 -0
  100. package/dist/lab-app-runner.js +403 -0
  101. package/dist/lab-app-runner.js.map +1 -0
  102. package/dist/lab-config.d.ts +583 -0
  103. package/dist/lab-config.js +1789 -0
  104. package/dist/lab-config.js.map +1 -0
  105. package/dist/lab-engine.d.ts +77 -0
  106. package/dist/lab-engine.js +216 -0
  107. package/dist/lab-engine.js.map +1 -0
  108. package/dist/lab-preflight.d.ts +67 -0
  109. package/dist/lab-preflight.js +385 -0
  110. package/dist/lab-preflight.js.map +1 -0
  111. package/dist/labs.d.ts +53 -0
  112. package/dist/labs.js +382 -0
  113. package/dist/labs.js.map +1 -0
  114. package/dist/observer-assets.d.ts +2 -0
  115. package/dist/observer-assets.js +2630 -0
  116. package/dist/observer-assets.js.map +1 -0
  117. package/dist/observer-data.d.ts +63 -0
  118. package/dist/observer-data.js +145 -0
  119. package/dist/observer-data.js.map +1 -0
  120. package/dist/observer-static.d.ts +39 -0
  121. package/dist/observer-static.js +306 -0
  122. package/dist/observer-static.js.map +1 -0
  123. package/dist/observer.d.ts +46 -0
  124. package/dist/observer.js +550 -0
  125. package/dist/observer.js.map +1 -0
  126. package/dist/openai-responses-cu.d.ts +113 -0
  127. package/dist/openai-responses-cu.js +545 -0
  128. package/dist/openai-responses-cu.js.map +1 -0
  129. package/dist/oss-lab.d.ts +52 -0
  130. package/dist/oss-lab.js +344 -0
  131. package/dist/oss-lab.js.map +1 -0
  132. package/dist/oss-meta-lab-scoring.d.ts +15 -0
  133. package/dist/oss-meta-lab-scoring.js +145 -0
  134. package/dist/oss-meta-lab-scoring.js.map +1 -0
  135. package/dist/oss-meta-lab.d.ts +277 -0
  136. package/dist/oss-meta-lab.js +4529 -0
  137. package/dist/oss-meta-lab.js.map +1 -0
  138. package/dist/oss-remote-telemetry.d.ts +77 -0
  139. package/dist/oss-remote-telemetry.js +403 -0
  140. package/dist/oss-remote-telemetry.js.map +1 -0
  141. package/dist/persona.d.ts +35 -0
  142. package/dist/persona.js +133 -0
  143. package/dist/persona.js.map +1 -0
  144. package/dist/pi-agent-core.d.ts +77 -0
  145. package/dist/pi-agent-core.js +203 -0
  146. package/dist/pi-agent-core.js.map +1 -0
  147. package/dist/program.d.ts +54 -0
  148. package/dist/program.js +2349 -0
  149. package/dist/program.js.map +1 -0
  150. package/dist/redaction.d.ts +90 -0
  151. package/dist/redaction.js +292 -0
  152. package/dist/redaction.js.map +1 -0
  153. package/dist/run-paths.d.ts +56 -0
  154. package/dist/run-paths.js +340 -0
  155. package/dist/run-paths.js.map +1 -0
  156. package/dist/run.d.ts +794 -0
  157. package/dist/run.js +4844 -0
  158. package/dist/run.js.map +1 -0
  159. package/dist/scripted-browser-actor.d.ts +297 -0
  160. package/dist/scripted-browser-actor.js +1399 -0
  161. package/dist/scripted-browser-actor.js.map +1 -0
  162. package/dist/scripted-browser-lab.d.ts +107 -0
  163. package/dist/scripted-browser-lab.js +788 -0
  164. package/dist/scripted-browser-lab.js.map +1 -0
  165. package/dist/selected-output-paths.d.ts +49 -0
  166. package/dist/selected-output-paths.js +354 -0
  167. package/dist/selected-output-paths.js.map +1 -0
  168. package/dist/shared-world-lab.d.ts +208 -0
  169. package/dist/shared-world-lab.js +1049 -0
  170. package/dist/shared-world-lab.js.map +1 -0
  171. package/dist/source-archive.d.ts +82 -0
  172. package/dist/source-archive.js +408 -0
  173. package/dist/source-archive.js.map +1 -0
  174. package/dist/stop-conditions.d.ts +26 -0
  175. package/dist/stop-conditions.js +66 -0
  176. package/dist/stop-conditions.js.map +1 -0
  177. package/dist/terminal-agent-actor.d.ts +36 -0
  178. package/dist/terminal-agent-actor.js +23 -0
  179. package/dist/terminal-agent-actor.js.map +1 -0
  180. package/docs/architecture/actor-contract.md +431 -0
  181. package/docs/architecture/github-feedback-loop.md +189 -0
  182. package/docs/architecture/local-codex-tui-actor.md +213 -0
  183. package/docs/architecture/observer.md +118 -0
  184. package/docs/architecture/oss-lab-poc.md +250 -0
  185. package/docs/architecture/project-layout.md +166 -0
  186. package/docs/architecture/state-driven-executor.md +203 -0
  187. package/docs/architecture/terminal-product-lane.md +148 -0
  188. package/docs/contracts/adapter-fixtures.md +80 -0
  189. package/docs/contracts/core.md +71 -0
  190. package/docs/contracts/feedback.md +145 -0
  191. package/docs/contracts/policy.md +311 -0
  192. package/docs/contracts/run-bundle.md +358 -0
  193. package/docs/contracts/schemas.md +984 -0
  194. package/docs/goals/current.md +428 -0
  195. package/docs/principles/invariants-and-defaults.md +135 -0
  196. package/docs/principles/self-driving-harness.md +129 -0
  197. package/docs/product/open-source-install-experience.md +237 -0
  198. package/docs/ramp/README.md +207 -0
  199. package/docs/release/open-source-readiness.md +208 -0
  200. package/docs/release/public-readiness-standard.md +205 -0
  201. package/docs/roadmap/world-class-open-source-v0.md +311 -0
  202. package/package.json +102 -8
  203. package/skills/humanish/SKILL.md +244 -0
  204. package/skills/humanish/agents/openai.yaml +7 -0
  205. package/index.js +0 -1
@@ -0,0 +1,357 @@
1
+ import { createServer } from "node:http";
2
+ import path from "node:path";
3
+ import { runCodexAppServerSessionInPreparedRoot } from "./codex-app-server.js";
4
+ import { prepareContainedOutputDirectory, prepareContainedOutputFile, prepareManagedHumanishOutputDirectory, prepareSelectedOutputDirectory, prepareSelectedOutputFile, readContainedRegularFile, writeContainedOutputFile, writePreparedSelectedOutputFile } from "./selected-output-paths.js";
5
+ export const CODEX_APP_SERVER_UI_SCHEMA = "humanish.codex-app-server-ui.v1";
6
+ export async function startCodexAppServerUi(options) {
7
+ const cwd = path.resolve(options.cwd);
8
+ const preparedRunRoot = options.runRoot === undefined
9
+ ? await prepareManagedHumanishOutputDirectory(cwd, "codex-app-server-ui")
10
+ : await prepareSelectedOutputDirectory(cwd, options.runRoot);
11
+ const preparedStateFile = options.stateFile === undefined
12
+ ? undefined
13
+ : await prepareSelectedOutputFile(cwd, options.stateFile);
14
+ const stateFile = preparedStateFile?.requestedPath ?? path.join(preparedRunRoot.requestedPath, "state.json");
15
+ if (!preparedStateFile) {
16
+ await prepareContainedOutputFile(preparedRunRoot, "state.json");
17
+ }
18
+ await prepareContainedOutputDirectory(preparedRunRoot, "codex-app-server");
19
+ await Promise.all([
20
+ prepareContainedOutputFile(preparedRunRoot, path.join("codex-app-server", "events.ndjson")),
21
+ prepareContainedOutputFile(preparedRunRoot, path.join("codex-app-server", "summary.json")),
22
+ prepareContainedOutputFile(preparedRunRoot, path.join("codex-app-server", "transcript.txt"))
23
+ ]);
24
+ const publicRunRoot = path.relative(cwd, preparedRunRoot.requestedPath) || ".";
25
+ const publicStateFile = path.relative(cwd, stateFile) || path.basename(stateFile);
26
+ let state = {
27
+ schema: CODEX_APP_SERVER_UI_SCHEMA,
28
+ artifactRoot: publicRunRoot,
29
+ cwd: "[target-cwd]",
30
+ promptDigest: digestText(options.prompt),
31
+ reason: "Codex app-server UI is starting.",
32
+ runRoot: publicRunRoot,
33
+ startedAt: new Date().toISOString(),
34
+ status: "starting",
35
+ stateFile: publicStateFile,
36
+ updatedAt: new Date().toISOString()
37
+ };
38
+ const persistState = async () => {
39
+ const contents = `${JSON.stringify(state, null, 2)}\n`;
40
+ if (preparedStateFile) {
41
+ await writePreparedSelectedOutputFile(preparedStateFile, contents, "utf8");
42
+ }
43
+ else {
44
+ await writeContainedOutputFile(preparedRunRoot, "state.json", contents, "utf8");
45
+ }
46
+ };
47
+ const server = createServer(async (request, response) => {
48
+ if (request.url === "/state") {
49
+ response.writeHead(200, {
50
+ "cache-control": "no-store",
51
+ "content-type": "application/json; charset=utf-8"
52
+ });
53
+ response.end(`${JSON.stringify(state)}\n`);
54
+ return;
55
+ }
56
+ if (request.url?.startsWith("/artifact/")) {
57
+ let requestPath;
58
+ try {
59
+ requestPath = decodeURIComponent(request.url.slice("/artifact/".length));
60
+ }
61
+ catch {
62
+ response.writeHead(404);
63
+ response.end("not found");
64
+ return;
65
+ }
66
+ await serveArtifact({
67
+ requestPath,
68
+ response,
69
+ runRoot: preparedRunRoot
70
+ });
71
+ return;
72
+ }
73
+ response.writeHead(200, {
74
+ "cache-control": "no-store",
75
+ "content-type": "text/html; charset=utf-8"
76
+ });
77
+ response.end(renderCodexAppServerUiHtml());
78
+ });
79
+ const url = await listen(server, options.port ?? 0);
80
+ state = {
81
+ ...state,
82
+ reason: "Codex app-server actor is running.",
83
+ status: "running",
84
+ updatedAt: new Date().toISOString(),
85
+ url
86
+ };
87
+ try {
88
+ await persistState();
89
+ }
90
+ catch (error) {
91
+ await closeServer(server);
92
+ throw error;
93
+ }
94
+ const sessionOptions = {
95
+ cwd,
96
+ prompt: options.prompt,
97
+ runRoot: preparedRunRoot.physicalPath,
98
+ timeoutMs: options.timeoutMs,
99
+ ...(options.actorCommand ? { actorCommand: ["bash", "-lc", options.actorCommand] } : {}),
100
+ approvalPolicy: "never",
101
+ experimentalApi: true,
102
+ ...(options.model === undefined ? {} : { model: options.model }),
103
+ sandbox: options.sandbox ?? "read-only",
104
+ serviceName: options.serviceName ?? "humanish"
105
+ };
106
+ const completion = runCodexAppServerSessionInPreparedRoot(sessionOptions, preparedRunRoot).then(async (result) => {
107
+ state = {
108
+ ...state,
109
+ reason: result.reason,
110
+ result,
111
+ status: result.status,
112
+ updatedAt: new Date().toISOString()
113
+ };
114
+ try {
115
+ await persistState();
116
+ }
117
+ catch (error) {
118
+ await closeServer(server);
119
+ throw error;
120
+ }
121
+ if (options.keepOpen !== true) {
122
+ await closeServer(server);
123
+ }
124
+ return state;
125
+ }, async (error) => {
126
+ state = {
127
+ ...state,
128
+ reason: error instanceof Error ? error.message : String(error),
129
+ status: "blocked",
130
+ updatedAt: new Date().toISOString()
131
+ };
132
+ try {
133
+ await persistState();
134
+ }
135
+ catch (persistError) {
136
+ await closeServer(server);
137
+ throw persistError;
138
+ }
139
+ await closeServer(server);
140
+ return state;
141
+ });
142
+ return {
143
+ close: async () => closeServer(server),
144
+ completion,
145
+ initialState: state,
146
+ stateFile,
147
+ url
148
+ };
149
+ }
150
+ async function serveArtifact(args) {
151
+ const body = await readContainedRegularFile(args.runRoot, args.requestPath);
152
+ if (body) {
153
+ args.response.writeHead(200, {
154
+ "cache-control": "no-store",
155
+ "content-type": contentTypeFor(args.requestPath)
156
+ });
157
+ args.response.end(body);
158
+ return;
159
+ }
160
+ args.response.writeHead(404);
161
+ args.response.end("not found");
162
+ }
163
+ function contentTypeFor(filePath) {
164
+ if (filePath.endsWith(".json"))
165
+ return "application/json; charset=utf-8";
166
+ if (filePath.endsWith(".ndjson"))
167
+ return "application/x-ndjson; charset=utf-8";
168
+ return "text/plain; charset=utf-8";
169
+ }
170
+ async function listen(server, port) {
171
+ return new Promise((resolve, reject) => {
172
+ server.once("error", reject);
173
+ server.listen(port, "127.0.0.1", () => {
174
+ server.off("error", reject);
175
+ const address = server.address();
176
+ if (!address || typeof address === "string") {
177
+ reject(new Error("Codex app-server UI address was unavailable."));
178
+ return;
179
+ }
180
+ resolve(`http://127.0.0.1:${address.port}/`);
181
+ });
182
+ });
183
+ }
184
+ async function closeServer(server) {
185
+ if (!server.listening) {
186
+ return;
187
+ }
188
+ await new Promise((resolve, reject) => {
189
+ server.close((error) => {
190
+ if (error)
191
+ reject(error);
192
+ else
193
+ resolve();
194
+ });
195
+ });
196
+ }
197
+ function digestText(text) {
198
+ let hash = 0x811c9dc5;
199
+ for (const char of text) {
200
+ hash ^= char.charCodeAt(0);
201
+ hash = Math.imul(hash, 0x01000193);
202
+ }
203
+ return (hash >>> 0).toString(16).padStart(8, "0");
204
+ }
205
+ function renderCodexAppServerUiHtml() {
206
+ return `<!doctype html>
207
+ <html>
208
+ <head>
209
+ <meta charset="utf-8">
210
+ <meta name="viewport" content="width=device-width, initial-scale=1">
211
+ <title>Humanish Codex App-Server</title>
212
+ <style>
213
+ :root {
214
+ --bg: #080a0d;
215
+ --surface: #11151b;
216
+ --surface-2: #171d25;
217
+ --line: rgba(255,255,255,.1);
218
+ --line-2: rgba(255,255,255,.16);
219
+ --text: #eef2f7;
220
+ --muted: #9aa4b2;
221
+ --dim: #687281;
222
+ --accent: #5f82ff;
223
+ --green: #38d890;
224
+ --red: #ff6258;
225
+ --amber: #f2b84a;
226
+ color-scheme: dark;
227
+ font-family: "Geist", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
228
+ }
229
+ * { box-sizing: border-box; }
230
+ body { margin: 0; background: var(--bg); color: var(--text); min-height: 100vh; }
231
+ .shell { min-height: 100vh; display: grid; grid-template-rows: auto 1fr; }
232
+ header { display: flex; align-items: center; gap: 14px; padding: 14px 16px; border-bottom: 1px solid var(--line); background: rgba(17,21,27,.95); position: sticky; top: 0; }
233
+ .mark { width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center; border: 1px solid var(--line-2); background: radial-gradient(circle at 25% 20%, rgba(95,130,255,.4), transparent 65%), var(--surface-2); color: #c9d6ff; font-weight: 700; }
234
+ .title { min-width: 0; }
235
+ .title h1 { margin: 0; font-size: 15px; line-height: 1.2; letter-spacing: 0; }
236
+ .title p { margin: 2px 0 0; color: var(--muted); font-size: 12px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 74vw; }
237
+ .pill { margin-left: auto; border: 1px solid var(--line-2); border-radius: 999px; padding: 7px 11px; color: var(--muted); background: var(--surface-2); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11px; text-transform: uppercase; letter-spacing: .12em; }
238
+ .pill[data-status="passed"] { color: var(--green); border-color: rgba(56,216,144,.35); background: rgba(56,216,144,.12); }
239
+ .pill[data-status="failed"], .pill[data-status="blocked"], .pill[data-status="timed_out"] { color: var(--red); border-color: rgba(255,98,88,.35); background: rgba(255,98,88,.12); }
240
+ main { display: grid; grid-template-columns: 300px 1fr; min-height: 0; }
241
+ aside { border-right: 1px solid var(--line); padding: 14px; background: #0c1015; min-width: 0; }
242
+ section { padding: 14px; min-width: 0; overflow: auto; }
243
+ .label { color: var(--dim); text-transform: uppercase; letter-spacing: .16em; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10px; margin: 16px 0 7px; }
244
+ .kv { display: grid; grid-template-columns: 76px 1fr; gap: 7px; padding: 7px 0; border-bottom: 1px solid var(--line); color: var(--muted); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11px; }
245
+ .kv b { color: var(--text); font-weight: 500; overflow-wrap: anywhere; }
246
+ .grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-bottom: 14px; }
247
+ .metric { border: 1px solid var(--line); background: var(--surface); border-radius: 10px; padding: 12px; min-height: 72px; }
248
+ .metric span { color: var(--dim); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; text-transform: uppercase; letter-spacing: .12em; font-size: 10px; }
249
+ .metric strong { display: block; margin-top: 5px; font-size: 22px; }
250
+ .panel { border: 1px solid var(--line); background: var(--surface); border-radius: 12px; margin-bottom: 12px; overflow: hidden; }
251
+ .panel h2 { margin: 0; padding: 11px 12px; font-size: 13px; border-bottom: 1px solid var(--line); }
252
+ .panel pre, .panel .empty { margin: 0; padding: 12px; color: var(--muted); white-space: pre-wrap; overflow-wrap: anywhere; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; line-height: 1.55; max-height: 280px; overflow: auto; }
253
+ .item { padding: 10px 12px; border-bottom: 1px solid var(--line); }
254
+ .item:last-child { border-bottom: none; }
255
+ .item b { display: block; font-size: 12px; margin-bottom: 3px; }
256
+ .item code { color: var(--muted); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11px; overflow-wrap: anywhere; }
257
+ a { color: #b9c9ff; text-decoration: none; }
258
+ @media (max-width: 860px) {
259
+ main { grid-template-columns: 1fr; }
260
+ aside { border-right: 0; border-bottom: 1px solid var(--line); }
261
+ .grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
262
+ }
263
+ </style>
264
+ </head>
265
+ <body>
266
+ <div class="shell">
267
+ <header>
268
+ <div class="mark">CT</div>
269
+ <div class="title">
270
+ <h1>Codex App-Server Actor</h1>
271
+ <p id="subtitle">Connecting to Humanish state...</p>
272
+ </div>
273
+ <div class="pill" id="status" data-status="starting">STARTING</div>
274
+ </header>
275
+ <main>
276
+ <aside>
277
+ <div class="label">Session</div>
278
+ <div class="kv"><span>Status</span><b id="side-status">starting</b></div>
279
+ <div class="kv"><span>Thread</span><b id="thread">pending</b></div>
280
+ <div class="kv"><span>Turn</span><b id="turn">pending</b></div>
281
+ <div class="kv"><span>Model</span><b id="model">pending</b></div>
282
+ <div class="kv"><span>Digest</span><b id="digest">pending</b></div>
283
+ <div class="label">Artifacts</div>
284
+ <div id="artifacts"></div>
285
+ </aside>
286
+ <section>
287
+ <div class="grid" id="metrics"></div>
288
+ <div class="panel"><h2>Latest Agent Message</h2><pre id="message">(waiting)</pre></div>
289
+ <div class="panel"><h2>Reasoning Summary</h2><pre id="reasoning">(waiting)</pre></div>
290
+ <div class="panel"><h2>Commands</h2><div id="commands" class="empty">(waiting)</div></div>
291
+ <div class="panel"><h2>Approvals</h2><div id="approvals" class="empty">(none)</div></div>
292
+ </section>
293
+ </main>
294
+ </div>
295
+ <script>
296
+ function esc(value) {
297
+ return String(value == null ? "" : value).replace(/[&<>"']/g, function(ch) {
298
+ return ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", "\\"": "&quot;", "'": "&#39;" })[ch];
299
+ });
300
+ }
301
+ function latestText(items) {
302
+ if (!Array.isArray(items) || !items.length) return "(waiting)";
303
+ return items[items.length - 1].text || "(empty)";
304
+ }
305
+ function renderItems(items, empty, map) {
306
+ if (!Array.isArray(items) || !items.length) return '<div class="empty">' + esc(empty) + '</div>';
307
+ return items.map(map).join("");
308
+ }
309
+ async function tick() {
310
+ try {
311
+ var response = await fetch("/state", { cache: "no-store" });
312
+ var state = await response.json();
313
+ var trace = state.result && state.result.trace ? state.result.trace : {};
314
+ var counts = trace.counts || {};
315
+ document.getElementById("status").textContent = String(state.status || "unknown").toUpperCase();
316
+ document.getElementById("status").dataset.status = state.status || "unknown";
317
+ document.getElementById("side-status").textContent = state.status || "unknown";
318
+ document.getElementById("subtitle").textContent = state.reason || state.url || "";
319
+ document.getElementById("thread").textContent = trace.threadId || state.result?.threadId || "pending";
320
+ document.getElementById("turn").textContent = trace.turnId || state.result?.turnId || "pending";
321
+ document.getElementById("model").textContent = trace.model || state.result?.model || "pending";
322
+ document.getElementById("digest").textContent = state.promptDigest || "pending";
323
+ var metricDefs = [
324
+ ["Messages", counts.messages || 0],
325
+ ["Reasoning", counts.reasoning || 0],
326
+ ["Commands", counts.commandOutputs || 0],
327
+ ["Envelopes", counts.envelopes || 0]
328
+ ];
329
+ document.getElementById("metrics").innerHTML = metricDefs.map(function(entry) {
330
+ return '<div class="metric"><span>' + esc(entry[0]) + '</span><strong>' + esc(entry[1]) + '</strong></div>';
331
+ }).join("");
332
+ document.getElementById("message").textContent = latestText(trace.messages);
333
+ document.getElementById("reasoning").textContent = latestText(trace.reasoning);
334
+ document.getElementById("commands").innerHTML = renderItems(trace.commands, "(waiting)", function(command) {
335
+ return '<div class="item"><b>' + esc(command.command || "command") + '</b><code>' + esc(command.status || "") + " " + esc(command.outputTail || "") + '</code></div>';
336
+ });
337
+ document.getElementById("approvals").innerHTML = renderItems(trace.approvals, "(none)", function(approval) {
338
+ return '<div class="item"><b>' + esc(approval.method || "approval") + '</b><code>' + esc(approval.decision || "") + " " + esc(approval.reason || "") + '</code></div>';
339
+ });
340
+ var artifacts = [];
341
+ if (state.result?.tracePath) artifacts.push(["Trace", state.result.tracePath]);
342
+ if (state.result?.eventsPath) artifacts.push(["Events", state.result.eventsPath]);
343
+ if (state.result?.transcriptPath) artifacts.push(["Transcript", state.result.transcriptPath]);
344
+ document.getElementById("artifacts").innerHTML = artifacts.length
345
+ ? artifacts.map(function(entry) { return '<div class="item"><b>' + esc(entry[0]) + '</b><code><a href="/artifact/' + encodeURIComponent(entry[1]) + '">' + esc(entry[1]) + '</a></code></div>'; }).join("")
346
+ : '<div class="empty">Artifacts will appear after completion.</div>';
347
+ } catch (error) {
348
+ document.getElementById("subtitle").textContent = "State polling failed: " + error.message;
349
+ }
350
+ }
351
+ tick();
352
+ setInterval(tick, 1000);
353
+ </script>
354
+ </body>
355
+ </html>`;
356
+ }
357
+ //# sourceMappingURL=codex-app-server-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-app-server-ui.js","sourceRoot":"","sources":["../src/codex-app-server-ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ import { type PreparedOutputDirectory } from "./selected-output-paths.js";
2
+ export declare const CODEX_APP_SERVER_TRACE_SCHEMA = "humanish.codex-app-server-trace.v1";
3
+ type JsonObject = Record<string, unknown>;
4
+ type JsonRpcId = number | string;
5
+ export type CodexAppServerStatus = "passed" | "failed" | "blocked" | "timed_out";
6
+ export interface CodexAppServerRunOptions {
7
+ cwd: string;
8
+ prompt: string;
9
+ runRoot: string;
10
+ timeoutMs: number;
11
+ actorCommand?: string[];
12
+ approvalPolicy?: "never" | "on-failure" | "on-request" | "untrusted";
13
+ experimentalApi?: boolean;
14
+ model?: string;
15
+ sandbox?: "read-only" | "workspace-write" | "danger-full-access";
16
+ serviceName?: string;
17
+ }
18
+ export interface CodexAppServerRunResult {
19
+ status: CodexAppServerStatus;
20
+ reason: string;
21
+ durationMs: number;
22
+ exitCode?: number;
23
+ signal?: NodeJS.Signals;
24
+ threadId?: string;
25
+ turnId?: string;
26
+ sessionId?: string;
27
+ model?: string;
28
+ codexCliVersion?: string;
29
+ experimentalApi: boolean;
30
+ counts: CodexAppServerTrace["counts"];
31
+ tail: string;
32
+ trace: CodexAppServerTrace;
33
+ transcriptPath: string;
34
+ tracePath: string;
35
+ eventsPath: string;
36
+ }
37
+ export interface CodexAppServerTrace {
38
+ schema: typeof CODEX_APP_SERVER_TRACE_SCHEMA;
39
+ provider: "codex-app-server";
40
+ protocolVersion: "v2";
41
+ redaction: {
42
+ status: "passed";
43
+ notes: string;
44
+ };
45
+ client: {
46
+ name: "humanish_cli";
47
+ title: "Humanish CLI";
48
+ experimentalApi: boolean;
49
+ };
50
+ server: {
51
+ commandName: string;
52
+ codexCliVersion?: string;
53
+ transport: "stdio";
54
+ };
55
+ cwd: string;
56
+ promptDigest: string;
57
+ startedAt: string;
58
+ completedAt: string;
59
+ durationMs: number;
60
+ status: CodexAppServerStatus;
61
+ reason: string;
62
+ threadId?: string;
63
+ turnId?: string;
64
+ sessionId?: string;
65
+ model?: string;
66
+ counts: {
67
+ approvals: number;
68
+ commandOutputs: number;
69
+ envelopes: number;
70
+ errors: number;
71
+ fileChanges: number;
72
+ itemCompletions: number;
73
+ itemStarts: number;
74
+ messages: number;
75
+ reasoning: number;
76
+ requests: number;
77
+ responses: number;
78
+ tools: number;
79
+ warnings: number;
80
+ };
81
+ methods: Record<string, number>;
82
+ items: CodexTraceItem[];
83
+ messages: CodexTraceText[];
84
+ reasoning: CodexTraceText[];
85
+ plans: CodexTracePlan[];
86
+ commands: CodexTraceCommand[];
87
+ fileChanges: CodexTraceFileChange[];
88
+ tools: CodexTraceToolCall[];
89
+ approvals: CodexTraceApproval[];
90
+ warnings: CodexTraceNotice[];
91
+ errors: CodexTraceNotice[];
92
+ tokenUsage?: JsonObject;
93
+ }
94
+ export interface CodexTraceItem {
95
+ id: string;
96
+ type: string;
97
+ status?: string;
98
+ lifecycle: "started" | "completed";
99
+ title: string;
100
+ }
101
+ export interface CodexTraceText {
102
+ itemId: string;
103
+ text: string;
104
+ }
105
+ export interface CodexTracePlan {
106
+ explanation?: string;
107
+ steps: string[];
108
+ }
109
+ export interface CodexTraceCommand {
110
+ itemId: string;
111
+ command?: string;
112
+ cwd?: string;
113
+ status?: string;
114
+ exitCode?: number;
115
+ outputTail?: string;
116
+ }
117
+ export interface CodexTraceFileChange {
118
+ itemId: string;
119
+ status?: string;
120
+ changeCount?: number;
121
+ outputTail?: string;
122
+ }
123
+ export interface CodexTraceToolCall {
124
+ itemId: string;
125
+ kind: "mcp" | "dynamic" | "unknown";
126
+ server?: string;
127
+ tool?: string;
128
+ status?: string;
129
+ }
130
+ export interface CodexTraceApproval {
131
+ id: JsonRpcId;
132
+ method: string;
133
+ itemId?: string;
134
+ decision: "decline" | "denied" | "empty";
135
+ reason: string;
136
+ }
137
+ export interface CodexTraceNotice {
138
+ method: string;
139
+ message: string;
140
+ }
141
+ export declare function runCodexAppServerSession(options: CodexAppServerRunOptions): Promise<CodexAppServerRunResult>;
142
+ /** Internal UI seam: the selected root was already prepared and must not be re-authorized. */
143
+ export declare function runCodexAppServerSessionInPreparedRoot(options: CodexAppServerRunOptions, runRoot: PreparedOutputDirectory): Promise<CodexAppServerRunResult>;
144
+ export {};