@uppercut-labs/agent-native 0.0.0-stage → 1.1.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 (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +164 -2
  3. package/agent/agent-prompt-short.md +1 -0
  4. package/agent/agent-prompt.md +26 -0
  5. package/bin/agent-native-site.mjs +269 -0
  6. package/bin/discover-routes.mjs +162 -0
  7. package/bin/verify-publication.mjs +317 -0
  8. package/dist/adapters/zod.d.ts +4 -0
  9. package/dist/adapters/zod.d.ts.map +1 -0
  10. package/dist/adapters/zod.js +20 -0
  11. package/dist/adapters/zod.js.map +1 -0
  12. package/dist/astro.d.ts +13 -0
  13. package/dist/astro.d.ts.map +1 -0
  14. package/dist/astro.js +41 -0
  15. package/dist/astro.js.map +1 -0
  16. package/dist/auth.d.ts +52 -0
  17. package/dist/auth.d.ts.map +1 -0
  18. package/dist/auth.js +128 -0
  19. package/dist/auth.js.map +1 -0
  20. package/dist/browser.d.ts +47 -0
  21. package/dist/browser.d.ts.map +1 -0
  22. package/dist/browser.js +219 -0
  23. package/dist/browser.js.map +1 -0
  24. package/dist/cli.d.ts +80 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +484 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/core/assert-never.d.ts +2 -0
  29. package/dist/core/assert-never.d.ts.map +1 -0
  30. package/dist/core/assert-never.js +5 -0
  31. package/dist/core/assert-never.js.map +1 -0
  32. package/dist/core/binding-internal.d.ts +10 -0
  33. package/dist/core/binding-internal.d.ts.map +1 -0
  34. package/dist/core/binding-internal.js +15 -0
  35. package/dist/core/binding-internal.js.map +1 -0
  36. package/dist/core/composition.d.ts +119 -0
  37. package/dist/core/composition.d.ts.map +1 -0
  38. package/dist/core/composition.js +545 -0
  39. package/dist/core/composition.js.map +1 -0
  40. package/dist/core/contracts.d.ts +55 -0
  41. package/dist/core/contracts.d.ts.map +1 -0
  42. package/dist/core/contracts.js +271 -0
  43. package/dist/core/contracts.js.map +1 -0
  44. package/dist/core/diagnostics.d.ts +14 -0
  45. package/dist/core/diagnostics.d.ts.map +1 -0
  46. package/dist/core/diagnostics.js +29 -0
  47. package/dist/core/diagnostics.js.map +1 -0
  48. package/dist/core/executor.d.ts +52 -0
  49. package/dist/core/executor.d.ts.map +1 -0
  50. package/dist/core/executor.js +98 -0
  51. package/dist/core/executor.js.map +1 -0
  52. package/dist/core/registry.d.ts +37 -0
  53. package/dist/core/registry.d.ts.map +1 -0
  54. package/dist/core/registry.js +75 -0
  55. package/dist/core/registry.js.map +1 -0
  56. package/dist/core/schema.d.ts +9 -0
  57. package/dist/core/schema.d.ts.map +1 -0
  58. package/dist/core/schema.js +36 -0
  59. package/dist/core/schema.js.map +1 -0
  60. package/dist/discovery.d.ts +16 -0
  61. package/dist/discovery.d.ts.map +1 -0
  62. package/dist/discovery.js +23 -0
  63. package/dist/discovery.js.map +1 -0
  64. package/dist/doctor.d.ts +200 -0
  65. package/dist/doctor.d.ts.map +1 -0
  66. package/dist/doctor.js +287 -0
  67. package/dist/doctor.js.map +1 -0
  68. package/dist/harness-codex.d.ts +17 -0
  69. package/dist/harness-codex.d.ts.map +1 -0
  70. package/dist/harness-codex.js +485 -0
  71. package/dist/harness-codex.js.map +1 -0
  72. package/dist/harness-mcp-bridge.d.ts +14 -0
  73. package/dist/harness-mcp-bridge.d.ts.map +1 -0
  74. package/dist/harness-mcp-bridge.js +159 -0
  75. package/dist/harness-mcp-bridge.js.map +1 -0
  76. package/dist/harness.d.ts +72 -0
  77. package/dist/harness.d.ts.map +1 -0
  78. package/dist/harness.js +101 -0
  79. package/dist/harness.js.map +1 -0
  80. package/dist/http.d.ts +20 -0
  81. package/dist/http.d.ts.map +1 -0
  82. package/dist/http.js +537 -0
  83. package/dist/http.js.map +1 -0
  84. package/dist/index.d.ts +16 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +8 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/init.d.ts +73 -0
  89. package/dist/init.d.ts.map +1 -0
  90. package/dist/init.js +1039 -0
  91. package/dist/init.js.map +1 -0
  92. package/dist/mcp-apps.d.ts +9 -0
  93. package/dist/mcp-apps.d.ts.map +1 -0
  94. package/dist/mcp-apps.js +171 -0
  95. package/dist/mcp-apps.js.map +1 -0
  96. package/dist/mcp-core.d.ts +64 -0
  97. package/dist/mcp-core.d.ts.map +1 -0
  98. package/dist/mcp-core.js +358 -0
  99. package/dist/mcp-core.js.map +1 -0
  100. package/dist/mcp.d.ts +3 -0
  101. package/dist/mcp.d.ts.map +1 -0
  102. package/dist/mcp.js +2 -0
  103. package/dist/mcp.js.map +1 -0
  104. package/dist/next-browser.d.ts +14 -0
  105. package/dist/next-browser.d.ts.map +1 -0
  106. package/dist/next-browser.js +14 -0
  107. package/dist/next-browser.js.map +1 -0
  108. package/dist/next.d.ts +24 -0
  109. package/dist/next.d.ts.map +1 -0
  110. package/dist/next.js +28 -0
  111. package/dist/next.js.map +1 -0
  112. package/dist/package-version.d.ts +2 -0
  113. package/dist/package-version.d.ts.map +1 -0
  114. package/dist/package-version.js +3 -0
  115. package/dist/package-version.js.map +1 -0
  116. package/dist/publication.d.ts +115 -0
  117. package/dist/publication.d.ts.map +1 -0
  118. package/dist/publication.js +441 -0
  119. package/dist/publication.js.map +1 -0
  120. package/dist/registry.d.ts +3 -0
  121. package/dist/registry.d.ts.map +1 -0
  122. package/dist/registry.js +2 -0
  123. package/dist/registry.js.map +1 -0
  124. package/docs/adopt-existing-site.md +189 -0
  125. package/docs/browser.md +70 -0
  126. package/docs/capabilities-and-bindings.md +141 -0
  127. package/docs/cli.md +88 -0
  128. package/docs/compatibility.md +32 -0
  129. package/docs/composition-and-versioning.md +113 -0
  130. package/docs/doctor-and-troubleshooting.md +58 -0
  131. package/docs/evidence/GHSA-ch52-4w7c-c8xp-2026-10-03.md +17 -0
  132. package/docs/evidence/GHSA-ch52-4w7c-c8xp-2026-10-10.md +30 -0
  133. package/docs/evidence/GHSA-ch52-4w7c-c8xp-2026-10-12.md +10 -0
  134. package/docs/evidence/UAN-002-house-style-review.md +29 -0
  135. package/docs/evidence/UAN-007-astro.md +43 -0
  136. package/docs/evidence/UAN-008-worker-sidecar.md +56 -0
  137. package/docs/evidence/UAN-009-init.md +43 -0
  138. package/docs/evidence/UAN-010-auth.md +17 -0
  139. package/docs/evidence/UAN-011-discovery.md +18 -0
  140. package/docs/evidence/UAN-012-mcp-apps.md +14 -0
  141. package/docs/evidence/UAN-013-astro-on-demand.md +47 -0
  142. package/docs/evidence/UAN-014-next.md +57 -0
  143. package/docs/evidence/UAN-015-node-hono.md +69 -0
  144. package/docs/evidence/UAN-016-composition.md +52 -0
  145. package/docs/evidence/UAN-017-version-migrations.md +50 -0
  146. package/docs/evidence/UAN-018-surface-overrides.md +30 -0
  147. package/docs/evidence/UAN-019-doctor.md +19 -0
  148. package/docs/evidence/UAN-020-negative-security-fixtures.md +61 -0
  149. package/docs/evidence/UAN-020-operational-failure-safety.md +49 -0
  150. package/docs/evidence/UAN-021-docs-coverage.md +30 -0
  151. package/docs/evidence/UAN-022-cross-platform-license-notices.md +39 -0
  152. package/docs/evidence/UAN-022-overhead-license-audit.md +233 -0
  153. package/docs/evidence/UAN-022-package-portability.md +54 -0
  154. package/docs/evidence/UAN-023-commercial-agent-hosts.md +36 -0
  155. package/docs/evidence/UAN-023-inspector-host-probe.md +37 -0
  156. package/docs/evidence/UAN-023-inspector-web-and-astro-adoption.md +44 -0
  157. package/docs/evidence/UAN-023-native-webmcp-chrome.md +44 -0
  158. package/docs/evidence/UAN-024-release-readiness-2026-10-10.md +33 -0
  159. package/docs/evidence/UAN-024-release-readiness.md +41 -0
  160. package/docs/evidence/codex-harness.md +56 -0
  161. package/docs/evidence/gate-2-domain-expansion.md +35 -0
  162. package/docs/evidence/recovery-and-selection-recipes-2026-10-15.md +63 -0
  163. package/docs/for-agents.md +50 -0
  164. package/docs/frameworks.md +62 -0
  165. package/docs/getting-started.md +109 -0
  166. package/docs/harness-codex.md +117 -0
  167. package/docs/harness-mcp-bridge.md +30 -0
  168. package/docs/http.md +80 -0
  169. package/docs/installation.md +95 -0
  170. package/docs/mcp-apps.md +57 -0
  171. package/docs/mcp.md +178 -0
  172. package/docs/next.md +73 -0
  173. package/docs/permissions-and-discovery.md +58 -0
  174. package/docs/programmatic-harness.md +88 -0
  175. package/docs/readability-frameworks.md +18 -0
  176. package/docs/reference.md +161 -0
  177. package/docs/release-handoff.md +41 -0
  178. package/docs/site-publication.md +85 -0
  179. package/docs/stability.md +53 -0
  180. package/docs/static-sites.md +141 -0
  181. package/docs/support-and-limitations.md +20 -0
  182. package/docs/surfaces.md +27 -0
  183. package/docs/upgrading-to-1.0.md +26 -0
  184. package/package.json +188 -4
  185. package/skill/agent-native/SKILL.md +54 -0
  186. package/skill/agent-native/references/adapter-decision.md +19 -0
  187. package/skill/agent-native/references/verification.md +25 -0
@@ -0,0 +1,485 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { realpath, stat } from 'node:fs/promises';
3
+ import { isAbsolute } from 'node:path';
4
+ import { HarnessError, assertHarnessSupport, createHarnessEvent, } from './harness.js';
5
+ export class CodexHarnessError extends HarnessError {
6
+ constructor(reason) {
7
+ super(reason);
8
+ if (reason === 'provider-unavailable') {
9
+ this.message = 'Codex CLI unavailable. Install Codex or select its executable path.';
10
+ }
11
+ else if (reason === 'authentication-required') {
12
+ this.message =
13
+ 'Run codex login with ChatGPT sign-in, then retry. API-key auth is not supported by this adapter.';
14
+ }
15
+ }
16
+ }
17
+ function object(value) {
18
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
19
+ }
20
+ function identifier(value) {
21
+ if (typeof value !== 'string' ||
22
+ value.length === 0 ||
23
+ value.length > 1024 ||
24
+ /[\p{Cc}]/u.test(value)) {
25
+ throw new CodexHarnessError('provider-failed');
26
+ }
27
+ return value;
28
+ }
29
+ function bounded(value, fallback, maximum) {
30
+ const result = value ?? fallback;
31
+ if (!Number.isSafeInteger(result) || result < 1 || result > maximum) {
32
+ throw new CodexHarnessError('invalid-request');
33
+ }
34
+ return result;
35
+ }
36
+ // Raw protocol values are short-lived and never returned as normalized harness events.
37
+ class AppServer {
38
+ options;
39
+ timeoutMs;
40
+ child;
41
+ pending = new Map();
42
+ onNotification;
43
+ onFailure;
44
+ nextId = 0;
45
+ buffer = '';
46
+ failure;
47
+ closing;
48
+ exited;
49
+ constructor(options, timeoutMs, workspace) {
50
+ this.options = options;
51
+ this.timeoutMs = timeoutMs;
52
+ this.child = spawn(options.executable ?? 'codex', [...(options.executableArgs ?? []), 'app-server', '--listen', 'stdio://'], { cwd: workspace, stdio: 'pipe', shell: false, windowsHide: true });
53
+ this.exited = new Promise((resolve) => {
54
+ this.child.once('close', () => {
55
+ this.fail('provider-failed');
56
+ resolve();
57
+ });
58
+ });
59
+ this.child.on('error', () => this.fail('provider-unavailable'));
60
+ this.child.stdin.on('error', () => this.fail('provider-failed'));
61
+ this.child.stderr.resume();
62
+ this.child.stdout.setEncoding('utf8');
63
+ this.child.stdout.on('data', (chunk) => {
64
+ this.buffer += chunk;
65
+ if (this.buffer.length > 2_097_152) {
66
+ this.fail('provider-failed');
67
+ return;
68
+ }
69
+ let newline = this.buffer.indexOf('\n');
70
+ while (newline !== -1 && !this.failure) {
71
+ const line = this.buffer.slice(0, newline);
72
+ this.buffer = this.buffer.slice(newline + 1);
73
+ try {
74
+ this.receive(JSON.parse(line));
75
+ }
76
+ catch {
77
+ this.fail('provider-failed');
78
+ }
79
+ newline = this.buffer.indexOf('\n');
80
+ }
81
+ });
82
+ }
83
+ send(value) {
84
+ if (this.failure)
85
+ throw this.failure;
86
+ this.child.stdin.write(`${JSON.stringify(value)}\n`);
87
+ }
88
+ receive(value) {
89
+ if (!object(value))
90
+ throw new CodexHarnessError('provider-failed');
91
+ if (typeof value['method'] === 'string') {
92
+ if (value['id'] !== undefined) {
93
+ // This noninteractive adapter never grants server-initiated permissions.
94
+ const method = value['method'];
95
+ const result = method === 'item/commandExecution/requestApproval' ||
96
+ method === 'item/fileChange/requestApproval'
97
+ ? { decision: 'decline' }
98
+ : method === 'mcpServer/elicitation/request'
99
+ ? { action: 'decline', content: null }
100
+ : undefined;
101
+ this.send(result === undefined
102
+ ? {
103
+ id: value['id'],
104
+ error: { code: -32601, message: 'Interactive request unsupported.' },
105
+ }
106
+ : { id: value['id'], result });
107
+ }
108
+ else if (object(value['params']))
109
+ this.onNotification?.(value['method'], value['params']);
110
+ return;
111
+ }
112
+ if (typeof value['id'] !== 'number')
113
+ throw new CodexHarnessError('provider-failed');
114
+ const pending = this.pending.get(value['id']);
115
+ if (!pending)
116
+ return;
117
+ clearTimeout(pending.timer);
118
+ this.pending.delete(value['id']);
119
+ if (object(value['error']))
120
+ pending.reject(new CodexHarnessError('provider-failed'));
121
+ else if (object(value['result']))
122
+ pending.resolve(value['result']);
123
+ else
124
+ pending.reject(new CodexHarnessError('provider-failed'));
125
+ }
126
+ request(method, params) {
127
+ if (this.failure)
128
+ return Promise.reject(this.failure);
129
+ const id = ++this.nextId;
130
+ return new Promise((resolve, reject) => {
131
+ const timer = setTimeout(() => this.fail('timeout'), this.timeoutMs);
132
+ this.pending.set(id, { resolve, reject, timer });
133
+ try {
134
+ this.send({ id, method, params });
135
+ }
136
+ catch {
137
+ this.fail('provider-failed');
138
+ }
139
+ });
140
+ }
141
+ async initialize() {
142
+ await this.request('initialize', {
143
+ clientInfo: { name: 'agent_native_harness', version: '0.1.0' },
144
+ });
145
+ this.send({ method: 'initialized', params: {} });
146
+ const account = await this.request('account/read', { refreshToken: false });
147
+ if (account['requiresOpenaiAuth'] !== true ||
148
+ !object(account['account']) ||
149
+ account['account']['type'] !== 'chatgpt') {
150
+ throw new CodexHarnessError('authentication-required');
151
+ }
152
+ }
153
+ fail(reason) {
154
+ if (this.failure)
155
+ return;
156
+ this.failure = new CodexHarnessError(reason);
157
+ this.buffer = '';
158
+ for (const pending of this.pending.values()) {
159
+ clearTimeout(pending.timer);
160
+ pending.reject(this.failure);
161
+ }
162
+ this.pending.clear();
163
+ this.onFailure?.(this.failure);
164
+ queueMicrotask(() => {
165
+ void this.close().catch(() => console.error('Codex app-server cleanup failed.'));
166
+ });
167
+ }
168
+ close() {
169
+ this.closing ??= this.stop();
170
+ return this.closing;
171
+ }
172
+ async stop() {
173
+ this.fail('session-closed');
174
+ this.child.stdin.end();
175
+ const timeout = bounded(this.options.shutdownTimeoutMs, 2000, 10_000);
176
+ const wait = async () => {
177
+ let timer;
178
+ const closed = await Promise.race([
179
+ this.exited.then(() => true),
180
+ new Promise((resolve) => {
181
+ timer = setTimeout(() => resolve(false), timeout);
182
+ }),
183
+ ]);
184
+ if (timer)
185
+ clearTimeout(timer);
186
+ return closed;
187
+ };
188
+ if (await wait())
189
+ return;
190
+ this.child.kill('SIGTERM');
191
+ if (await wait())
192
+ return;
193
+ this.child.kill('SIGKILL');
194
+ if (!(await wait()))
195
+ throw new CodexHarnessError('timeout');
196
+ }
197
+ }
198
+ class EventQueue {
199
+ events = [];
200
+ wake;
201
+ error;
202
+ push(event) {
203
+ if (this.events.length >= 256) {
204
+ this.fail(new CodexHarnessError('provider-failed'));
205
+ return;
206
+ }
207
+ this.events.push(event);
208
+ this.wake?.();
209
+ }
210
+ fail(error) {
211
+ this.error ??= error;
212
+ this.wake?.();
213
+ }
214
+ async next() {
215
+ while (this.events.length === 0 && !this.error) {
216
+ await new Promise((resolve) => {
217
+ this.wake = resolve;
218
+ });
219
+ this.wake = undefined;
220
+ }
221
+ if (this.error)
222
+ throw this.error;
223
+ const event = this.events.shift();
224
+ if (!event)
225
+ throw new CodexHarnessError('provider-failed');
226
+ return event;
227
+ }
228
+ }
229
+ export function createCodexHarnessAdapter(input) {
230
+ const options = Object.freeze({
231
+ ...input,
232
+ ...(input.executableArgs === undefined
233
+ ? {}
234
+ : { executableArgs: Object.freeze([...input.executableArgs]) }),
235
+ });
236
+ if (typeof options.model !== 'string' ||
237
+ !/^[a-zA-Z0-9._-]{1,128}$/.test(options.model) ||
238
+ (options.effort !== undefined &&
239
+ !['low', 'medium', 'high', 'xhigh', 'max'].includes(options.effort)) ||
240
+ (options.sandbox !== undefined && !['read-only', 'workspace-write'].includes(options.sandbox))) {
241
+ throw new CodexHarnessError('invalid-request');
242
+ }
243
+ const requestTimeout = bounded(options.requestTimeoutMs, 30_000, 300_000);
244
+ const turnTimeout = bounded(options.turnTimeoutMs, 180_000, 3_600_000);
245
+ bounded(options.shutdownTimeoutMs, 2000, 10_000);
246
+ let sessions = new Map();
247
+ const descriptor = Object.freeze({
248
+ provider: 'codex',
249
+ targets: Object.freeze(['local']),
250
+ features: Object.freeze(['resume', 'cancel', 'usage']),
251
+ });
252
+ async function workspaceFor(path) {
253
+ if (typeof path !== 'string' || !isAbsolute(path))
254
+ throw new CodexHarnessError('invalid-request');
255
+ try {
256
+ const canonical = await realpath(path);
257
+ if (!(await stat(canonical)).isDirectory())
258
+ throw new CodexHarnessError('invalid-request');
259
+ return canonical;
260
+ }
261
+ catch {
262
+ throw new CodexHarnessError('invalid-request');
263
+ }
264
+ }
265
+ function stateFor(session, allowClosed = false) {
266
+ if (session.provider !== 'codex' || session.target !== 'local')
267
+ throw new CodexHarnessError('session-not-found');
268
+ const state = sessions.get(session.sessionId);
269
+ if (!state)
270
+ throw new CodexHarnessError('session-not-found');
271
+ if (state.closed && !allowClosed)
272
+ throw new CodexHarnessError('session-closed');
273
+ return state;
274
+ }
275
+ function threadParams(workspace) {
276
+ return {
277
+ cwd: workspace,
278
+ model: options.model,
279
+ modelProvider: 'openai',
280
+ approvalPolicy: 'never',
281
+ sandbox: options.sandbox ?? 'workspace-write',
282
+ };
283
+ }
284
+ async function startServer(workspace) {
285
+ let server = new AppServer(options, requestTimeout, workspace);
286
+ try {
287
+ await server.initialize();
288
+ return server;
289
+ }
290
+ catch (error) {
291
+ await server.close();
292
+ throw error;
293
+ }
294
+ }
295
+ return {
296
+ async describe() {
297
+ return descriptor;
298
+ },
299
+ async openSession(request) {
300
+ assertHarnessSupport(descriptor, request.target);
301
+ if (request.target !== 'local')
302
+ throw new CodexHarnessError('unsupported-target');
303
+ const workspace = await workspaceFor(request.workspace);
304
+ let server = await startServer(workspace);
305
+ try {
306
+ const result = await server.request('thread/start', threadParams(workspace));
307
+ if (!object(result['thread']) || result['thread']['cwd'] !== workspace)
308
+ throw new CodexHarnessError('provider-failed');
309
+ const session = createHarnessEvent({
310
+ type: 'session-started',
311
+ session: {
312
+ provider: 'codex',
313
+ target: 'local',
314
+ sessionId: identifier(result['thread']['id']),
315
+ },
316
+ }).session;
317
+ if (sessions.has(session.sessionId))
318
+ throw new CodexHarnessError('provider-failed');
319
+ sessions.set(session.sessionId, { workspace, server, closed: false });
320
+ return session;
321
+ }
322
+ catch (error) {
323
+ await server.close();
324
+ throw error;
325
+ }
326
+ },
327
+ async resumeSession(request) {
328
+ assertHarnessSupport(descriptor, request.target, 'resume');
329
+ if (request.target !== 'local')
330
+ throw new CodexHarnessError('unsupported-target');
331
+ const workspace = await workspaceFor(request.workspace);
332
+ let state = sessions.get(request.session.sessionId);
333
+ if (request.session.provider !== 'codex' || request.session.target !== 'local')
334
+ throw new CodexHarnessError('session-not-found');
335
+ if (state && state.workspace !== workspace)
336
+ throw new CodexHarnessError('invalid-request');
337
+ if (state?.active)
338
+ throw new CodexHarnessError('turn-active');
339
+ const newServer = !state || state.closed;
340
+ let server = state && !state.closed ? state.server : await startServer(workspace);
341
+ try {
342
+ const existing = await server.request('thread/read', {
343
+ threadId: request.session.sessionId,
344
+ includeTurns: false,
345
+ });
346
+ if (!object(existing['thread']) || existing['thread']['cwd'] !== workspace)
347
+ throw new CodexHarnessError('invalid-request');
348
+ const result = await server.request('thread/resume', {
349
+ ...threadParams(workspace),
350
+ threadId: request.session.sessionId,
351
+ });
352
+ if (!object(result['thread']) ||
353
+ result['thread']['id'] !== request.session.sessionId ||
354
+ result['thread']['cwd'] !== workspace) {
355
+ throw new CodexHarnessError('invalid-request');
356
+ }
357
+ state = { workspace, server, closed: false };
358
+ sessions.set(request.session.sessionId, state);
359
+ return createHarnessEvent({ type: 'session-started', session: request.session }).session;
360
+ }
361
+ catch (error) {
362
+ if (newServer)
363
+ await server.close();
364
+ throw error;
365
+ }
366
+ },
367
+ async *runTurn({ session, prompt, }) {
368
+ let state = stateFor(session);
369
+ if (state.active)
370
+ throw new CodexHarnessError('turn-active');
371
+ if (typeof prompt !== 'string' || !prompt.trim() || prompt.length > 65_536)
372
+ throw new CodexHarnessError('invalid-request');
373
+ let active = { queue: new EventQueue() };
374
+ state.active = active;
375
+ let timer;
376
+ let terminal = false;
377
+ let providerTerminalId;
378
+ state.server.onFailure = (error) => active.queue.fail(error);
379
+ state.server.onNotification = (method, params) => {
380
+ if (params['threadId'] !== session.sessionId)
381
+ return;
382
+ const turn = params['turn'];
383
+ if (method === 'turn/completed' && object(turn)) {
384
+ const turnId = identifier(turn['id']);
385
+ const status = turn['status'];
386
+ providerTerminalId = turnId;
387
+ if (active.turnId === turnId && timer)
388
+ clearTimeout(timer);
389
+ active.queue.push(createHarnessEvent(status === 'completed'
390
+ ? { type: 'completed', session, turnId }
391
+ : status === 'interrupted'
392
+ ? { type: 'cancelled', session, turnId }
393
+ : {
394
+ type: 'failed',
395
+ session,
396
+ turnId,
397
+ reason: object(turn['error']) && turn['error']['codexErrorInfo'] === 'unauthorized'
398
+ ? 'authentication-required'
399
+ : 'provider-failed',
400
+ }));
401
+ }
402
+ else if (method === 'thread/tokenUsage/updated' &&
403
+ object(params['tokenUsage']) &&
404
+ object(params['tokenUsage']['last'])) {
405
+ const quantity = params['tokenUsage']['last']['totalTokens'];
406
+ if (typeof quantity === 'number' && Number.isSafeInteger(quantity) && quantity >= 0) {
407
+ active.queue.push(createHarnessEvent({
408
+ type: 'usage',
409
+ session,
410
+ turnId: identifier(params['turnId']),
411
+ unit: 'tokens',
412
+ quantity,
413
+ }));
414
+ }
415
+ }
416
+ else if (method === 'item/started' &&
417
+ object(params['item']) &&
418
+ ['commandExecution', 'fileChange', 'mcpToolCall'].includes(String(params['item']['type']))) {
419
+ active.queue.push(createHarnessEvent({
420
+ type: 'tool',
421
+ session,
422
+ turnId: identifier(params['turnId']),
423
+ message: 'Codex is using a tool.',
424
+ }));
425
+ }
426
+ };
427
+ try {
428
+ const result = await state.server.request('turn/start', {
429
+ threadId: session.sessionId,
430
+ input: [{ type: 'text', text: prompt }],
431
+ effort: options.effort ?? 'low',
432
+ });
433
+ if (!object(result['turn']))
434
+ throw new CodexHarnessError('provider-failed');
435
+ active.turnId = identifier(result['turn']['id']);
436
+ if (providerTerminalId !== active.turnId)
437
+ timer = setTimeout(() => state.server.fail('timeout'), turnTimeout);
438
+ yield createHarnessEvent({ type: 'turn-started', session, turnId: active.turnId });
439
+ while (!terminal) {
440
+ const event = await active.queue.next();
441
+ if (event.type === 'session-started' || event.turnId !== active.turnId)
442
+ continue;
443
+ terminal = ['completed', 'failed', 'cancelled'].includes(event.type);
444
+ yield event;
445
+ }
446
+ }
447
+ catch (error) {
448
+ if (!active.turnId)
449
+ throw error;
450
+ terminal = true;
451
+ yield createHarnessEvent({
452
+ type: 'failed',
453
+ session,
454
+ turnId: active.turnId,
455
+ reason: error instanceof HarnessError ? error.reason : 'provider-failed',
456
+ });
457
+ state.closed = true;
458
+ await state.server.close();
459
+ }
460
+ finally {
461
+ if (timer)
462
+ clearTimeout(timer);
463
+ state.server.onNotification = undefined;
464
+ state.server.onFailure = undefined;
465
+ delete state.active;
466
+ if (!terminal) {
467
+ state.closed = true;
468
+ await state.server.close();
469
+ }
470
+ }
471
+ },
472
+ async cancelTurn({ session, turnId }) {
473
+ const state = stateFor(session);
474
+ if (!state.active || state.active.turnId !== turnId)
475
+ throw new CodexHarnessError('turn-not-found');
476
+ await state.server.request('turn/interrupt', { threadId: session.sessionId, turnId });
477
+ },
478
+ async closeSession({ session }) {
479
+ let state = stateFor(session, true);
480
+ state.closed = true;
481
+ await state.server.close();
482
+ },
483
+ };
484
+ }
485
+ //# sourceMappingURL=harness-codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-codex.js","sourceRoot":"","sources":["../src/harness-codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type HarnessMcpBridgeOptions = {
2
+ readonly handler: (request: Request) => Promise<Response>;
3
+ readonly host?: '127.0.0.1';
4
+ readonly port?: number;
5
+ readonly maxRequestBytes?: number;
6
+ readonly deadlineMs?: number;
7
+ };
8
+ export interface HarnessMcpBridge {
9
+ readonly url: string;
10
+ close(): Promise<void>;
11
+ }
12
+ /** Transport only: the supplied handler retains authentication and capability authorization. */
13
+ export declare function startHarnessMcpBridge(options: HarnessMcpBridgeOptions): Promise<HarnessMcpBridge>;
14
+ //# sourceMappingURL=harness-mcp-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-mcp-bridge.d.ts","sourceRoot":"","sources":["../src/harness-mcp-bridge.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,gGAAgG;AAChG,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAwJ3B"}