@harapter/adapter-codex 0.1.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.
- package/LICENSE +201 -0
- package/README.md +250 -0
- package/dist/adapter.d.ts +28 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +1033 -0
- package/dist/adapter.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol.d.ts +77 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +631 -0
- package/dist/protocol.js.map +1 -0
- package/package.json +53 -0
package/dist/protocol.js
ADDED
|
@@ -0,0 +1,631 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import { HarnessError, providerId, } from '@harapter/core';
|
|
3
|
+
/** Stable Provider identity owned by the Codex Adapter. */
|
|
4
|
+
export const CODEX_PROVIDER_ID = providerId('openai.codex');
|
|
5
|
+
/** Stable protocol family used to validate resumable Session references. */
|
|
6
|
+
export const CODEX_SESSION_COMPATIBILITY_REF = `${CODEX_PROVIDER_ID};app-server=stable`;
|
|
7
|
+
/** Provider-native input part accepted through the explicit Core escape hatch. */
|
|
8
|
+
export const CODEX_USER_INPUT_PART = 'openai.codex.userInput';
|
|
9
|
+
const approvalPolicies = new Set(['untrusted', 'on-request', 'never']);
|
|
10
|
+
const sandboxModes = new Set([
|
|
11
|
+
'read-only',
|
|
12
|
+
'workspace-write',
|
|
13
|
+
'danger-full-access',
|
|
14
|
+
]);
|
|
15
|
+
const personalities = new Set(['none', 'friendly', 'pragmatic']);
|
|
16
|
+
const reasoningSummaries = new Set(['auto', 'concise', 'detailed', 'none']);
|
|
17
|
+
const maximumTimerMilliseconds = 2_147_483_647;
|
|
18
|
+
const codexErrorCodes = new Set([
|
|
19
|
+
'activeTurnNotSteerable',
|
|
20
|
+
'badRequest',
|
|
21
|
+
'contextWindowExceeded',
|
|
22
|
+
'cyberPolicy',
|
|
23
|
+
'httpConnectionFailed',
|
|
24
|
+
'internalServerError',
|
|
25
|
+
'other',
|
|
26
|
+
'responseStreamConnectionFailed',
|
|
27
|
+
'responseStreamDisconnected',
|
|
28
|
+
'responseTooManyFailedAttempts',
|
|
29
|
+
'sandboxError',
|
|
30
|
+
'serverOverloaded',
|
|
31
|
+
'sessionBudgetExceeded',
|
|
32
|
+
'threadRollbackFailed',
|
|
33
|
+
'unauthorized',
|
|
34
|
+
'usageLimitExceeded',
|
|
35
|
+
]);
|
|
36
|
+
const toolItemTypes = new Set([
|
|
37
|
+
'commandExecution',
|
|
38
|
+
'fileChange',
|
|
39
|
+
'mcpToolCall',
|
|
40
|
+
'dynamicToolCall',
|
|
41
|
+
'collabAgentToolCall',
|
|
42
|
+
'subAgentActivity',
|
|
43
|
+
'webSearch',
|
|
44
|
+
'imageView',
|
|
45
|
+
'imageGeneration',
|
|
46
|
+
]);
|
|
47
|
+
const safeRawKeys = new Set([
|
|
48
|
+
'data',
|
|
49
|
+
'delta',
|
|
50
|
+
'error',
|
|
51
|
+
'id',
|
|
52
|
+
'inputTokens',
|
|
53
|
+
'item',
|
|
54
|
+
'itemId',
|
|
55
|
+
'last',
|
|
56
|
+
'method',
|
|
57
|
+
'outputTokens',
|
|
58
|
+
'params',
|
|
59
|
+
'requestId',
|
|
60
|
+
'result',
|
|
61
|
+
'status',
|
|
62
|
+
'threadId',
|
|
63
|
+
'tokenUsage',
|
|
64
|
+
'total',
|
|
65
|
+
'totalTokens',
|
|
66
|
+
'turn',
|
|
67
|
+
'turnId',
|
|
68
|
+
'type',
|
|
69
|
+
'willRetry',
|
|
70
|
+
]);
|
|
71
|
+
const identifierRawKeys = new Set([
|
|
72
|
+
'id',
|
|
73
|
+
'itemId',
|
|
74
|
+
'requestId',
|
|
75
|
+
'threadId',
|
|
76
|
+
'turnId',
|
|
77
|
+
]);
|
|
78
|
+
/** Build the non-sensitive Session compatibility fingerprint. */
|
|
79
|
+
export function codexCompatibilityIdentity(runtimeVersion) {
|
|
80
|
+
return `${CODEX_PROVIDER_ID};app-server=stable;runtime=${runtimeVersion}`;
|
|
81
|
+
}
|
|
82
|
+
/** Validate the stable initialize response and select its evidence level. */
|
|
83
|
+
export function parseCodexInitializeResponse(value) {
|
|
84
|
+
const response = record(value);
|
|
85
|
+
const userAgent = response?.['userAgent'];
|
|
86
|
+
if (typeof userAgent !== 'string')
|
|
87
|
+
throw incompatible('initialize response');
|
|
88
|
+
const match = userAgent.length <= 1024 && !/[\r\n]/u.test(userAgent)
|
|
89
|
+
? /^[^/\r\n]{1,128}\/(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)(?=[ (]|$)/u.exec(userAgent)
|
|
90
|
+
: null;
|
|
91
|
+
const runtimeVersion = match?.[1];
|
|
92
|
+
if (runtimeVersion === undefined)
|
|
93
|
+
throw incompatible('runtime version');
|
|
94
|
+
if (typeof response?.['codexHome'] !== 'string' ||
|
|
95
|
+
typeof response['platformFamily'] !== 'string' ||
|
|
96
|
+
typeof response['platformOs'] !== 'string') {
|
|
97
|
+
throw incompatible('initialize response');
|
|
98
|
+
}
|
|
99
|
+
return { runtimeVersion };
|
|
100
|
+
}
|
|
101
|
+
/** Extract one required Thread identifier from start or resume. */
|
|
102
|
+
export function parseCodexThreadResponse(value) {
|
|
103
|
+
const id = record(record(value)?.['thread'])?.['id'];
|
|
104
|
+
if (typeof id !== 'string' || id.length === 0) {
|
|
105
|
+
throw incompatible('thread response');
|
|
106
|
+
}
|
|
107
|
+
return id;
|
|
108
|
+
}
|
|
109
|
+
/** Extract one required in-progress Turn identifier from turn/start. */
|
|
110
|
+
export function parseCodexTurnStartResponse(value) {
|
|
111
|
+
const turn = record(record(value)?.['turn']);
|
|
112
|
+
const id = turn?.['id'];
|
|
113
|
+
if (typeof id !== 'string' ||
|
|
114
|
+
id.length === 0 ||
|
|
115
|
+
turn?.['status'] !== 'inProgress') {
|
|
116
|
+
throw incompatible('turn/start response');
|
|
117
|
+
}
|
|
118
|
+
return id;
|
|
119
|
+
}
|
|
120
|
+
/** Convert portable input into the verified stable App Server input union. */
|
|
121
|
+
export function prepareCodexInput(input) {
|
|
122
|
+
if (input.parts.length === 0) {
|
|
123
|
+
throw invalidRequest('A Codex Turn requires at least one input part.');
|
|
124
|
+
}
|
|
125
|
+
return input.parts.map((part) => {
|
|
126
|
+
switch (part.type) {
|
|
127
|
+
case 'text':
|
|
128
|
+
return { type: 'text', text: part.text, text_elements: [] };
|
|
129
|
+
case 'image_ref':
|
|
130
|
+
return imageInput(part.uri);
|
|
131
|
+
case 'file_ref':
|
|
132
|
+
throw unsupported('input.file', 'Codex file input is not mapped.');
|
|
133
|
+
case 'provider':
|
|
134
|
+
if (part.name !== CODEX_USER_INPUT_PART ||
|
|
135
|
+
!isCodexUserInput(part.value)) {
|
|
136
|
+
throw unsupported('input.provider', 'The Provider input part is not a supported Codex user input.');
|
|
137
|
+
}
|
|
138
|
+
return part.value;
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/** Prepare stable thread/start fields without silently ignoring native options. */
|
|
143
|
+
export function prepareCodexSessionParams(input = {}) {
|
|
144
|
+
const options = validatedOptions(input.providerOptions, [
|
|
145
|
+
'approvalPolicy',
|
|
146
|
+
'config',
|
|
147
|
+
'ephemeral',
|
|
148
|
+
'modelProvider',
|
|
149
|
+
'personality',
|
|
150
|
+
'sandbox',
|
|
151
|
+
'serviceTier',
|
|
152
|
+
]);
|
|
153
|
+
if (input.model?.providerOptions !== undefined) {
|
|
154
|
+
throw invalidRequest('Codex model providerOptions are not mapped.');
|
|
155
|
+
}
|
|
156
|
+
const output = {};
|
|
157
|
+
if (input.workspace)
|
|
158
|
+
output['cwd'] = workspacePath(input.workspace.uri);
|
|
159
|
+
if (input.systemContext !== undefined) {
|
|
160
|
+
output['developerInstructions'] = input.systemContext;
|
|
161
|
+
}
|
|
162
|
+
if (input.model)
|
|
163
|
+
output['model'] = nonEmpty(input.model.id, 'model id');
|
|
164
|
+
assignStringOption(output, options, 'modelProvider');
|
|
165
|
+
assignStringOption(output, options, 'serviceTier');
|
|
166
|
+
assignEnumOption(output, options, 'approvalPolicy', approvalPolicies);
|
|
167
|
+
assignEnumOption(output, options, 'sandbox', sandboxModes);
|
|
168
|
+
assignEnumOption(output, options, 'personality', personalities);
|
|
169
|
+
if (options['ephemeral'] !== undefined) {
|
|
170
|
+
if (typeof options['ephemeral'] !== 'boolean') {
|
|
171
|
+
throw invalidRequest('Codex ephemeral must be a boolean.');
|
|
172
|
+
}
|
|
173
|
+
output['ephemeral'] = options['ephemeral'];
|
|
174
|
+
}
|
|
175
|
+
if (options['config'] !== undefined) {
|
|
176
|
+
assertJsonValue(options['config'], 'Codex config');
|
|
177
|
+
if (record(options['config']) === undefined) {
|
|
178
|
+
throw invalidRequest('Codex config must be an object.');
|
|
179
|
+
}
|
|
180
|
+
output['config'] = options['config'];
|
|
181
|
+
}
|
|
182
|
+
return output;
|
|
183
|
+
}
|
|
184
|
+
/** Prepare stable turn/start overrides without silently ignoring native options. */
|
|
185
|
+
export function prepareCodexTurnParams(options = {}) {
|
|
186
|
+
if (options.timeoutMs !== undefined)
|
|
187
|
+
positiveTimer(options.timeoutMs, 'timeoutMs');
|
|
188
|
+
const providerOptions = validatedOptions(options.providerOptions, [
|
|
189
|
+
'approvalPolicy',
|
|
190
|
+
'effort',
|
|
191
|
+
'model',
|
|
192
|
+
'outputSchema',
|
|
193
|
+
'personality',
|
|
194
|
+
'sandboxPolicy',
|
|
195
|
+
'serviceTier',
|
|
196
|
+
'summary',
|
|
197
|
+
]);
|
|
198
|
+
const output = {};
|
|
199
|
+
assignEnumOption(output, providerOptions, 'approvalPolicy', approvalPolicies);
|
|
200
|
+
assignEnumOption(output, providerOptions, 'personality', personalities);
|
|
201
|
+
assignEnumOption(output, providerOptions, 'summary', reasoningSummaries);
|
|
202
|
+
for (const name of ['effort', 'model', 'serviceTier']) {
|
|
203
|
+
assignStringOption(output, providerOptions, name);
|
|
204
|
+
}
|
|
205
|
+
for (const name of ['outputSchema', 'sandboxPolicy']) {
|
|
206
|
+
if (providerOptions[name] === undefined)
|
|
207
|
+
continue;
|
|
208
|
+
assertJsonValue(providerOptions[name], `Codex ${name}`);
|
|
209
|
+
output[name] = providerOptions[name];
|
|
210
|
+
}
|
|
211
|
+
return output;
|
|
212
|
+
}
|
|
213
|
+
/** Map one stable or unknown App Server notification. */
|
|
214
|
+
export function mapCodexNotification(method, params) {
|
|
215
|
+
const context = notificationContext(params);
|
|
216
|
+
const mapped = (events) => ({ ...context, events });
|
|
217
|
+
if (method === 'turn/started' || method === 'thread/started')
|
|
218
|
+
return mapped([]);
|
|
219
|
+
if (method === 'item/agentMessage/delta') {
|
|
220
|
+
const value = stringField(params, 'delta');
|
|
221
|
+
return value === undefined
|
|
222
|
+
? mapped([providerEvent(method, params)])
|
|
223
|
+
: mapped([{ type: 'message.delta', data: { delta: value } }]);
|
|
224
|
+
}
|
|
225
|
+
if (method === 'item/reasoning/summaryTextDelta' ||
|
|
226
|
+
method === 'item/reasoning/textDelta') {
|
|
227
|
+
const value = stringField(params, 'delta');
|
|
228
|
+
return value === undefined
|
|
229
|
+
? mapped([providerEvent(method, params)])
|
|
230
|
+
: mapped([{ type: 'reasoning.delta', data: { delta: value } }]);
|
|
231
|
+
}
|
|
232
|
+
if (method === 'item/started' || method === 'item/completed') {
|
|
233
|
+
const item = record(record(params)?.['item']);
|
|
234
|
+
const itemType = item?.['type'];
|
|
235
|
+
if (item === undefined || typeof itemType !== 'string') {
|
|
236
|
+
return mapped([providerEvent(method, params)]);
|
|
237
|
+
}
|
|
238
|
+
if (itemType === 'agentMessage' && method === 'item/completed') {
|
|
239
|
+
const text = item['text'];
|
|
240
|
+
return typeof text === 'string'
|
|
241
|
+
? mapped([
|
|
242
|
+
{
|
|
243
|
+
type: 'message.completed',
|
|
244
|
+
data: { message: text },
|
|
245
|
+
finalMessage: text,
|
|
246
|
+
},
|
|
247
|
+
])
|
|
248
|
+
: mapped([providerEvent(method, params)]);
|
|
249
|
+
}
|
|
250
|
+
if (itemType === 'reasoning' && method === 'item/completed') {
|
|
251
|
+
return mapped([
|
|
252
|
+
{
|
|
253
|
+
type: 'reasoning.completed',
|
|
254
|
+
data: { item },
|
|
255
|
+
},
|
|
256
|
+
]);
|
|
257
|
+
}
|
|
258
|
+
if (toolItemTypes.has(itemType)) {
|
|
259
|
+
return mapped([
|
|
260
|
+
{
|
|
261
|
+
type: method === 'item/started' ? 'tool.started' : 'tool.completed',
|
|
262
|
+
data: { item },
|
|
263
|
+
},
|
|
264
|
+
]);
|
|
265
|
+
}
|
|
266
|
+
return mapped([providerEvent(method, params)]);
|
|
267
|
+
}
|
|
268
|
+
if (method === 'item/commandExecution/outputDelta' ||
|
|
269
|
+
method === 'item/fileChange/patchUpdated' ||
|
|
270
|
+
method === 'item/mcpToolCall/progress') {
|
|
271
|
+
return mapped([{ type: 'tool.updated', data: params }]);
|
|
272
|
+
}
|
|
273
|
+
if (method === 'thread/tokenUsage/updated') {
|
|
274
|
+
const usage = usageSummary(params);
|
|
275
|
+
return usage === undefined
|
|
276
|
+
? mapped([providerEvent(method, params)])
|
|
277
|
+
: mapped([{ type: 'usage.updated', data: usage, usage }]);
|
|
278
|
+
}
|
|
279
|
+
if (method === 'error') {
|
|
280
|
+
return mapped([
|
|
281
|
+
{
|
|
282
|
+
type: 'provider',
|
|
283
|
+
providerEventType: method,
|
|
284
|
+
data: {
|
|
285
|
+
providerCode: codexErrorCode(record(record(params)?.['error'])?.['codexErrorInfo']),
|
|
286
|
+
willRetry: record(params)?.['willRetry'] === true,
|
|
287
|
+
},
|
|
288
|
+
},
|
|
289
|
+
]);
|
|
290
|
+
}
|
|
291
|
+
if (method === 'turn/completed')
|
|
292
|
+
return mapTerminal(params, mapped);
|
|
293
|
+
return mapped([providerEvent(method, params)]);
|
|
294
|
+
}
|
|
295
|
+
/** Map an in-run App Server request to a portable interaction. */
|
|
296
|
+
export function mapCodexServerRequest(method, params, requestId) {
|
|
297
|
+
const context = notificationContext(params);
|
|
298
|
+
if (method === 'item/commandExecution/requestApproval' ||
|
|
299
|
+
method === 'item/fileChange/requestApproval') {
|
|
300
|
+
const recordParams = record(params);
|
|
301
|
+
const prompt = firstString(recordParams?.['reason'], recordParams?.['command'], 'Codex requests approval.');
|
|
302
|
+
return {
|
|
303
|
+
...context,
|
|
304
|
+
responseKind: 'approval',
|
|
305
|
+
interaction: {
|
|
306
|
+
requestId,
|
|
307
|
+
kind: 'approval',
|
|
308
|
+
title: method === 'item/commandExecution/requestApproval'
|
|
309
|
+
? 'Codex command approval'
|
|
310
|
+
: 'Codex file-change approval',
|
|
311
|
+
prompt,
|
|
312
|
+
},
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
return providerRequest(method, params, requestId, context);
|
|
316
|
+
}
|
|
317
|
+
/** Encode a portable or explicit Provider-native interaction response. */
|
|
318
|
+
export function encodeCodexInteractionResponse(request, response) {
|
|
319
|
+
if (response.kind === 'provider') {
|
|
320
|
+
if (response.value === undefined) {
|
|
321
|
+
throw invalidRequest('A Provider interaction response cannot be undefined.');
|
|
322
|
+
}
|
|
323
|
+
assertJsonValue(response.value, 'Codex Provider interaction response');
|
|
324
|
+
return response.value;
|
|
325
|
+
}
|
|
326
|
+
if (request.responseKind === 'approval') {
|
|
327
|
+
if (response.kind !== 'approval') {
|
|
328
|
+
throw invalidRequest('This Codex interaction requires an approval response.');
|
|
329
|
+
}
|
|
330
|
+
if (response.providerOptions !== undefined) {
|
|
331
|
+
throw invalidRequest('Use a Provider response for Codex-native approval decisions.');
|
|
332
|
+
}
|
|
333
|
+
return { decision: response.decision === 'approve' ? 'accept' : 'decline' };
|
|
334
|
+
}
|
|
335
|
+
throw invalidRequest('This Codex request requires a Provider response.');
|
|
336
|
+
}
|
|
337
|
+
/** Produce a bounded structural summary that never retains string values. */
|
|
338
|
+
export function redactCodexRaw(value) {
|
|
339
|
+
const state = { nodes: 0 };
|
|
340
|
+
return redact(value, 0, state);
|
|
341
|
+
}
|
|
342
|
+
/** Build a bounded redacted raw event for orphan or unknown traffic. */
|
|
343
|
+
export function redactCodexEvent(method, params) {
|
|
344
|
+
return { method: safeMethod(method), params: redactCodexRaw(params) };
|
|
345
|
+
}
|
|
346
|
+
function imageInput(uri) {
|
|
347
|
+
let parsed;
|
|
348
|
+
try {
|
|
349
|
+
parsed = new URL(uri);
|
|
350
|
+
}
|
|
351
|
+
catch {
|
|
352
|
+
throw invalidRequest('Codex image_ref must be an absolute URI.');
|
|
353
|
+
}
|
|
354
|
+
if (parsed.protocol !== 'file:')
|
|
355
|
+
return { type: 'image', url: uri };
|
|
356
|
+
try {
|
|
357
|
+
return { type: 'localImage', path: fileURLToPath(parsed) };
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
throw invalidRequest('Codex image_ref file URI is invalid.');
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
function isCodexUserInput(value) {
|
|
364
|
+
const input = record(value);
|
|
365
|
+
if (input?.['type'] === 'text') {
|
|
366
|
+
return (typeof input['text'] === 'string' && Array.isArray(input['text_elements']));
|
|
367
|
+
}
|
|
368
|
+
if (input?.['type'] === 'image')
|
|
369
|
+
return typeof input['url'] === 'string';
|
|
370
|
+
if (input?.['type'] === 'localImage')
|
|
371
|
+
return typeof input['path'] === 'string';
|
|
372
|
+
return false;
|
|
373
|
+
}
|
|
374
|
+
function workspacePath(uri) {
|
|
375
|
+
let parsed;
|
|
376
|
+
try {
|
|
377
|
+
parsed = new URL(uri);
|
|
378
|
+
}
|
|
379
|
+
catch {
|
|
380
|
+
throw invalidRequest('Codex workspace must be an absolute file URI.');
|
|
381
|
+
}
|
|
382
|
+
if (parsed.protocol !== 'file:') {
|
|
383
|
+
throw unsupported('workspace.file', 'Codex workspace must be a file URI.');
|
|
384
|
+
}
|
|
385
|
+
try {
|
|
386
|
+
return fileURLToPath(parsed);
|
|
387
|
+
}
|
|
388
|
+
catch {
|
|
389
|
+
throw invalidRequest('Codex workspace file URI is invalid.');
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
function validatedOptions(value, allowed) {
|
|
393
|
+
if (value === undefined)
|
|
394
|
+
return {};
|
|
395
|
+
const unknown = Object.keys(value).find((key) => !allowed.includes(key));
|
|
396
|
+
if (unknown !== undefined) {
|
|
397
|
+
throw invalidRequest('Unsupported Codex option.');
|
|
398
|
+
}
|
|
399
|
+
return { ...value };
|
|
400
|
+
}
|
|
401
|
+
function assignStringOption(output, options, name) {
|
|
402
|
+
if (options[name] === undefined)
|
|
403
|
+
return;
|
|
404
|
+
output[name] = nonEmpty(options[name], `Codex ${name}`);
|
|
405
|
+
}
|
|
406
|
+
function assignEnumOption(output, options, name, allowed) {
|
|
407
|
+
const value = options[name];
|
|
408
|
+
if (value === undefined)
|
|
409
|
+
return;
|
|
410
|
+
if (typeof value !== 'string' || !allowed.has(value)) {
|
|
411
|
+
throw invalidRequest(`Codex ${name} is invalid.`);
|
|
412
|
+
}
|
|
413
|
+
output[name] = value;
|
|
414
|
+
}
|
|
415
|
+
function notificationContext(params) {
|
|
416
|
+
const direct = record(params);
|
|
417
|
+
const turn = record(direct?.['turn']);
|
|
418
|
+
return {
|
|
419
|
+
threadId: typeof direct?.['threadId'] === 'string' ? direct['threadId'] : undefined,
|
|
420
|
+
turnId: typeof direct?.['turnId'] === 'string'
|
|
421
|
+
? direct['turnId']
|
|
422
|
+
: typeof turn?.['id'] === 'string'
|
|
423
|
+
? turn['id']
|
|
424
|
+
: undefined,
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
function mapTerminal(params, mapped) {
|
|
428
|
+
const turn = record(record(params)?.['turn']);
|
|
429
|
+
if (!isCompleteCodexTurn(turn)) {
|
|
430
|
+
return mapped([providerEvent('turn/completed', params)]);
|
|
431
|
+
}
|
|
432
|
+
const status = turn?.['status'];
|
|
433
|
+
if (status === 'completed') {
|
|
434
|
+
return mapped([
|
|
435
|
+
{
|
|
436
|
+
type: 'run.completed',
|
|
437
|
+
data: { status: 'completed' },
|
|
438
|
+
terminalResult: { status: 'completed' },
|
|
439
|
+
},
|
|
440
|
+
]);
|
|
441
|
+
}
|
|
442
|
+
if (status === 'interrupted') {
|
|
443
|
+
return mapped([
|
|
444
|
+
{
|
|
445
|
+
type: 'run.cancelled',
|
|
446
|
+
data: { status: 'cancelled' },
|
|
447
|
+
terminalResult: { status: 'cancelled' },
|
|
448
|
+
},
|
|
449
|
+
]);
|
|
450
|
+
}
|
|
451
|
+
if (status === 'failed') {
|
|
452
|
+
const providerCode = codexErrorCode(record(turn?.['error'])?.['codexErrorInfo']);
|
|
453
|
+
const result = {
|
|
454
|
+
status: 'failed',
|
|
455
|
+
...(providerCode === undefined
|
|
456
|
+
? {}
|
|
457
|
+
: { providerResult: { providerCode } }),
|
|
458
|
+
};
|
|
459
|
+
return mapped([
|
|
460
|
+
{
|
|
461
|
+
type: 'run.failed',
|
|
462
|
+
data: result,
|
|
463
|
+
terminalResult: result,
|
|
464
|
+
},
|
|
465
|
+
]);
|
|
466
|
+
}
|
|
467
|
+
const failure = {
|
|
468
|
+
status: 'failed',
|
|
469
|
+
providerResult: { reason: 'unknown_terminal_status' },
|
|
470
|
+
};
|
|
471
|
+
return mapped([
|
|
472
|
+
providerEvent('turn/completed', params),
|
|
473
|
+
{ type: 'run.failed', data: failure, terminalResult: failure },
|
|
474
|
+
]);
|
|
475
|
+
}
|
|
476
|
+
function isCompleteCodexTurn(turn) {
|
|
477
|
+
return (typeof turn?.['id'] === 'string' &&
|
|
478
|
+
turn['id'].length > 0 &&
|
|
479
|
+
Array.isArray(turn['items']) &&
|
|
480
|
+
typeof turn['itemsView'] === 'string' &&
|
|
481
|
+
typeof turn['status'] === 'string' &&
|
|
482
|
+
typeof turn['startedAt'] === 'number' &&
|
|
483
|
+
(turn['completedAt'] === null || typeof turn['completedAt'] === 'number') &&
|
|
484
|
+
(turn['durationMs'] === null || typeof turn['durationMs'] === 'number') &&
|
|
485
|
+
(turn['error'] === null || record(turn['error']) !== undefined));
|
|
486
|
+
}
|
|
487
|
+
function usageSummary(params) {
|
|
488
|
+
const last = record(record(record(params)?.['tokenUsage'])?.['last']);
|
|
489
|
+
const inputTokens = last?.['inputTokens'];
|
|
490
|
+
const outputTokens = last?.['outputTokens'];
|
|
491
|
+
const totalTokens = last?.['totalTokens'];
|
|
492
|
+
if (typeof inputTokens !== 'number' ||
|
|
493
|
+
typeof outputTokens !== 'number' ||
|
|
494
|
+
typeof totalTokens !== 'number') {
|
|
495
|
+
return undefined;
|
|
496
|
+
}
|
|
497
|
+
return { inputTokens, outputTokens, totalTokens };
|
|
498
|
+
}
|
|
499
|
+
function providerEvent(method, params) {
|
|
500
|
+
const raw = redactCodexEvent(method, params);
|
|
501
|
+
return {
|
|
502
|
+
type: 'provider',
|
|
503
|
+
data: { method: raw.method },
|
|
504
|
+
providerEventType: raw.method,
|
|
505
|
+
raw,
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
function providerRequest(method, params, requestId, context) {
|
|
509
|
+
return {
|
|
510
|
+
...context,
|
|
511
|
+
responseKind: 'provider',
|
|
512
|
+
interaction: {
|
|
513
|
+
requestId,
|
|
514
|
+
kind: 'provider',
|
|
515
|
+
title: safeMethod(method),
|
|
516
|
+
schema: redactCodexRaw(params),
|
|
517
|
+
},
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
function codexErrorCode(value) {
|
|
521
|
+
if (typeof value === 'string') {
|
|
522
|
+
return codexErrorCodes.has(value) ? value : undefined;
|
|
523
|
+
}
|
|
524
|
+
const error = record(value);
|
|
525
|
+
if (error === undefined)
|
|
526
|
+
return undefined;
|
|
527
|
+
const keys = Object.keys(error);
|
|
528
|
+
const key = keys.length === 1 ? keys[0] : undefined;
|
|
529
|
+
return key !== undefined && codexErrorCodes.has(key) ? key : undefined;
|
|
530
|
+
}
|
|
531
|
+
function stringField(value, name) {
|
|
532
|
+
const field = record(value)?.[name];
|
|
533
|
+
return typeof field === 'string' ? field : undefined;
|
|
534
|
+
}
|
|
535
|
+
function firstString(...values) {
|
|
536
|
+
return (values.find((value) => typeof value === 'string' && value.length > 0) ?? 'Codex interaction.');
|
|
537
|
+
}
|
|
538
|
+
function redact(value, depth, state) {
|
|
539
|
+
state.nodes += 1;
|
|
540
|
+
if (state.nodes > 64 || depth >= 4)
|
|
541
|
+
return '[truncated]';
|
|
542
|
+
if (value === null || typeof value === 'boolean')
|
|
543
|
+
return value;
|
|
544
|
+
if (typeof value === 'number')
|
|
545
|
+
return '[redacted]';
|
|
546
|
+
if (typeof value === 'string')
|
|
547
|
+
return '[redacted]';
|
|
548
|
+
if (Array.isArray(value)) {
|
|
549
|
+
const result = value
|
|
550
|
+
.slice(0, 16)
|
|
551
|
+
.map((item) => redact(item, depth + 1, state));
|
|
552
|
+
if (value.length > 16)
|
|
553
|
+
result.push('[truncated]');
|
|
554
|
+
return result;
|
|
555
|
+
}
|
|
556
|
+
const object = record(value);
|
|
557
|
+
if (object === undefined)
|
|
558
|
+
return '[redacted]';
|
|
559
|
+
const result = {};
|
|
560
|
+
const entries = Object.entries(object);
|
|
561
|
+
for (const [index, [key, item]] of entries.slice(0, 16).entries()) {
|
|
562
|
+
const safeKey = key.length <= 64 && safeRawKeys.has(key)
|
|
563
|
+
? key
|
|
564
|
+
: `[redacted-key-${String(index)}]`;
|
|
565
|
+
result[safeKey] = identifierRawKeys.has(key)
|
|
566
|
+
? '[redacted]'
|
|
567
|
+
: redact(item, depth + 1, state);
|
|
568
|
+
}
|
|
569
|
+
if (entries.length > 16 || state.nodes > 64)
|
|
570
|
+
result['__truncated__'] = '[truncated]';
|
|
571
|
+
return result;
|
|
572
|
+
}
|
|
573
|
+
function assertJsonValue(value, label) {
|
|
574
|
+
if (value === undefined ||
|
|
575
|
+
typeof value === 'function' ||
|
|
576
|
+
typeof value === 'symbol') {
|
|
577
|
+
throw invalidRequest(`${label} must be JSON serializable.`);
|
|
578
|
+
}
|
|
579
|
+
try {
|
|
580
|
+
JSON.stringify(value);
|
|
581
|
+
}
|
|
582
|
+
catch {
|
|
583
|
+
throw invalidRequest(`${label} must be JSON serializable.`);
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
function safeMethod(value) {
|
|
587
|
+
return /^[A-Za-z][0-9A-Za-z._/-]{0,127}$/u.test(value)
|
|
588
|
+
? value
|
|
589
|
+
: '[redacted-method]';
|
|
590
|
+
}
|
|
591
|
+
function nonEmpty(value, label) {
|
|
592
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
593
|
+
throw invalidRequest(`${label} must be a non-empty string.`);
|
|
594
|
+
}
|
|
595
|
+
return value;
|
|
596
|
+
}
|
|
597
|
+
function positiveInteger(value, label) {
|
|
598
|
+
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
599
|
+
throw invalidRequest(`${label} must be a positive integer.`);
|
|
600
|
+
}
|
|
601
|
+
return value;
|
|
602
|
+
}
|
|
603
|
+
function positiveTimer(value, label) {
|
|
604
|
+
const timeout = positiveInteger(value, label);
|
|
605
|
+
if (timeout > maximumTimerMilliseconds) {
|
|
606
|
+
throw invalidRequest(`${label} exceeds the supported timer range.`);
|
|
607
|
+
}
|
|
608
|
+
return timeout;
|
|
609
|
+
}
|
|
610
|
+
function record(value) {
|
|
611
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
612
|
+
? value
|
|
613
|
+
: undefined;
|
|
614
|
+
}
|
|
615
|
+
function incompatible(surface) {
|
|
616
|
+
return new HarnessError('provider_api_incompatible', `Codex App Server ${surface} is not compatible with the verified stable protocol.`, { retryable: false, providerId: CODEX_PROVIDER_ID });
|
|
617
|
+
}
|
|
618
|
+
function invalidRequest(message) {
|
|
619
|
+
return new HarnessError('invalid_request', message, {
|
|
620
|
+
retryable: false,
|
|
621
|
+
providerId: CODEX_PROVIDER_ID,
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
function unsupported(capability, message) {
|
|
625
|
+
return new HarnessError('unsupported_capability', message, {
|
|
626
|
+
retryable: false,
|
|
627
|
+
providerId: CODEX_PROVIDER_ID,
|
|
628
|
+
details: { capability },
|
|
629
|
+
});
|
|
630
|
+
}
|
|
631
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|