@kodelyth/codex 2026.5.42 → 2026.6.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/package.json +16 -1
- package/doctor-contract-api.test.ts +0 -44
- package/doctor-contract-api.ts +0 -68
- package/harness.ts +0 -72
- package/index.test.ts +0 -230
- package/index.ts +0 -66
- package/media-understanding-provider.test.ts +0 -486
- package/media-understanding-provider.ts +0 -521
- package/prompt-overlay-runtime-contract.test.ts +0 -48
- package/prompt-overlay.ts +0 -21
- package/provider-catalog.ts +0 -83
- package/provider-discovery.ts +0 -45
- package/provider.test.ts +0 -384
- package/provider.ts +0 -243
- package/src/app-server/app-inventory-cache.test.ts +0 -176
- package/src/app-server/app-inventory-cache.ts +0 -324
- package/src/app-server/approval-bridge.test.ts +0 -1471
- package/src/app-server/approval-bridge.ts +0 -1211
- package/src/app-server/auth-bridge.test.ts +0 -1449
- package/src/app-server/auth-bridge.ts +0 -614
- package/src/app-server/auth-profile-runtime-contract.test.ts +0 -239
- package/src/app-server/capabilities.ts +0 -27
- package/src/app-server/client-factory.ts +0 -24
- package/src/app-server/client.test.ts +0 -563
- package/src/app-server/client.ts +0 -715
- package/src/app-server/compact.test.ts +0 -710
- package/src/app-server/compact.ts +0 -500
- package/src/app-server/computer-use.test.ts +0 -788
- package/src/app-server/computer-use.ts +0 -683
- package/src/app-server/config.test.ts +0 -879
- package/src/app-server/config.ts +0 -1038
- package/src/app-server/context-engine-projection.test.ts +0 -252
- package/src/app-server/context-engine-projection.ts +0 -403
- package/src/app-server/delivery-no-reply-runtime-contract.test.ts +0 -80
- package/src/app-server/dynamic-tool-diagnostics.ts +0 -73
- package/src/app-server/dynamic-tool-profile.ts +0 -69
- package/src/app-server/dynamic-tools.test.ts +0 -1302
- package/src/app-server/dynamic-tools.ts +0 -623
- package/src/app-server/elicitation-bridge.test.ts +0 -1056
- package/src/app-server/elicitation-bridge.ts +0 -783
- package/src/app-server/event-projector.test.ts +0 -2668
- package/src/app-server/event-projector.ts +0 -2057
- package/src/app-server/image-payload-sanitizer.test.ts +0 -49
- package/src/app-server/image-payload-sanitizer.ts +0 -167
- package/src/app-server/klaw-owned-tool-runtime-contract.test.ts +0 -456
- package/src/app-server/local-runtime-attribution.ts +0 -39
- package/src/app-server/managed-binary.test.ts +0 -139
- package/src/app-server/managed-binary.ts +0 -193
- package/src/app-server/models.test.ts +0 -246
- package/src/app-server/models.ts +0 -172
- package/src/app-server/native-hook-relay.test.ts +0 -271
- package/src/app-server/native-hook-relay.ts +0 -150
- package/src/app-server/native-subagent-task-mirror.test.ts +0 -573
- package/src/app-server/native-subagent-task-mirror.ts +0 -497
- package/src/app-server/outcome-fallback-runtime-contract.test.ts +0 -404
- package/src/app-server/plugin-activation.test.ts +0 -336
- package/src/app-server/plugin-activation.ts +0 -283
- package/src/app-server/plugin-app-cache-key.ts +0 -74
- package/src/app-server/plugin-approval-roundtrip.ts +0 -122
- package/src/app-server/plugin-inventory.test.ts +0 -355
- package/src/app-server/plugin-inventory.ts +0 -357
- package/src/app-server/plugin-thread-config.test.ts +0 -865
- package/src/app-server/plugin-thread-config.ts +0 -455
- package/src/app-server/protocol-generated/json/DynamicToolCallParams.json +0 -33
- package/src/app-server/protocol-generated/json/v2/ErrorNotification.json +0 -199
- package/src/app-server/protocol-generated/json/v2/GetAccountResponse.json +0 -102
- package/src/app-server/protocol-generated/json/v2/ModelListResponse.json +0 -227
- package/src/app-server/protocol-generated/json/v2/ThreadResumeResponse.json +0 -2630
- package/src/app-server/protocol-generated/json/v2/ThreadStartResponse.json +0 -2630
- package/src/app-server/protocol-generated/json/v2/TurnCompletedNotification.json +0 -1659
- package/src/app-server/protocol-generated/json/v2/TurnStartResponse.json +0 -1655
- package/src/app-server/protocol-validators.test.ts +0 -75
- package/src/app-server/protocol-validators.ts +0 -203
- package/src/app-server/protocol.ts +0 -520
- package/src/app-server/rate-limit-cache.ts +0 -48
- package/src/app-server/rate-limits.test.ts +0 -202
- package/src/app-server/rate-limits.ts +0 -583
- package/src/app-server/request.ts +0 -73
- package/src/app-server/run-attempt.context-engine.test.ts +0 -1004
- package/src/app-server/run-attempt.test.ts +0 -9477
- package/src/app-server/run-attempt.ts +0 -4683
- package/src/app-server/run-attempt.vision-tools.test.ts +0 -35
- package/src/app-server/schema-normalization-runtime-contract.test.ts +0 -206
- package/src/app-server/session-binding.test.ts +0 -303
- package/src/app-server/session-binding.ts +0 -398
- package/src/app-server/session-history.ts +0 -44
- package/src/app-server/shared-client.test.ts +0 -589
- package/src/app-server/shared-client.ts +0 -289
- package/src/app-server/side-question.test.ts +0 -1175
- package/src/app-server/side-question.ts +0 -1007
- package/src/app-server/test-support.ts +0 -48
- package/src/app-server/thread-lifecycle.test.ts +0 -447
- package/src/app-server/thread-lifecycle.ts +0 -939
- package/src/app-server/thread-lifecycle.user-mcp-servers.test.ts +0 -442
- package/src/app-server/timeout.ts +0 -9
- package/src/app-server/tool-progress-normalization.ts +0 -77
- package/src/app-server/trajectory.test.ts +0 -205
- package/src/app-server/trajectory.ts +0 -365
- package/src/app-server/transcript-mirror.test.ts +0 -524
- package/src/app-server/transcript-mirror.ts +0 -208
- package/src/app-server/transcript-repair-runtime-contract.test.ts +0 -44
- package/src/app-server/transport-stdio.test.ts +0 -171
- package/src/app-server/transport-stdio.ts +0 -107
- package/src/app-server/transport-websocket.test.ts +0 -69
- package/src/app-server/transport-websocket.ts +0 -90
- package/src/app-server/transport.ts +0 -117
- package/src/app-server/user-input-bridge.test.ts +0 -249
- package/src/app-server/user-input-bridge.ts +0 -316
- package/src/app-server/version.ts +0 -4
- package/src/app-server/vision-tools.ts +0 -12
- package/src/command-account.ts +0 -544
- package/src/command-formatters.ts +0 -425
- package/src/command-handlers.ts +0 -2004
- package/src/command-rpc.test.ts +0 -16
- package/src/command-rpc.ts +0 -142
- package/src/commands.test.ts +0 -3312
- package/src/commands.ts +0 -65
- package/src/conversation-binding-data.ts +0 -124
- package/src/conversation-binding.test.ts +0 -599
- package/src/conversation-binding.ts +0 -561
- package/src/conversation-control.test.ts +0 -126
- package/src/conversation-control.ts +0 -303
- package/src/conversation-turn-collector.test.ts +0 -191
- package/src/conversation-turn-collector.ts +0 -186
- package/src/conversation-turn-input.test.ts +0 -141
- package/src/conversation-turn-input.ts +0 -106
- package/src/manifest.test.ts +0 -20
- package/src/migration/apply.ts +0 -501
- package/src/migration/helpers.ts +0 -55
- package/src/migration/plan.ts +0 -461
- package/src/migration/provider.test.ts +0 -1741
- package/src/migration/provider.ts +0 -41
- package/src/migration/source.ts +0 -643
- package/src/migration/targets.ts +0 -25
- package/src/node-cli-sessions.test.ts +0 -180
- package/src/node-cli-sessions.ts +0 -711
- package/test-api.ts +0 -82
- package/tsconfig.json +0 -16
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import {
|
|
3
|
-
assertCodexThreadStartResponse,
|
|
4
|
-
assertCodexThreadResumeResponse,
|
|
5
|
-
} from "./protocol-validators.js";
|
|
6
|
-
|
|
7
|
-
function makeMinimalThread(overrides: Record<string, unknown> = {}) {
|
|
8
|
-
return {
|
|
9
|
-
id: "thread-1",
|
|
10
|
-
sessionId: "session-1",
|
|
11
|
-
cliVersion: "0.129.0",
|
|
12
|
-
createdAt: 1715299200,
|
|
13
|
-
updatedAt: 1715299200,
|
|
14
|
-
cwd: "/tmp",
|
|
15
|
-
ephemeral: false,
|
|
16
|
-
modelProvider: "openai",
|
|
17
|
-
preview: "test thread",
|
|
18
|
-
source: "appServer",
|
|
19
|
-
status: { type: "notLoaded" },
|
|
20
|
-
turns: [],
|
|
21
|
-
...overrides,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function makeMinimalResponse(threadOverrides: Record<string, unknown> = {}) {
|
|
26
|
-
return {
|
|
27
|
-
approvalPolicy: "never",
|
|
28
|
-
approvalsReviewer: "user",
|
|
29
|
-
cwd: "/tmp",
|
|
30
|
-
model: "gpt-5.4",
|
|
31
|
-
modelProvider: "openai",
|
|
32
|
-
sandbox: { type: "dangerFullAccess" },
|
|
33
|
-
thread: makeMinimalThread(threadOverrides),
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
describe("assertCodexThreadStartResponse", () => {
|
|
38
|
-
it("accepts response with both id and sessionId", () => {
|
|
39
|
-
const response = makeMinimalResponse();
|
|
40
|
-
const result = assertCodexThreadStartResponse(response);
|
|
41
|
-
expect(result.thread.id).toBe("thread-1");
|
|
42
|
-
expect(result.thread.sessionId).toBe("session-1");
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it("normalizes missing sessionId from id", () => {
|
|
46
|
-
const response = makeMinimalResponse({ sessionId: undefined });
|
|
47
|
-
// Remove the sessionId key entirely
|
|
48
|
-
delete (response.thread as Record<string, unknown>).sessionId;
|
|
49
|
-
const result = assertCodexThreadStartResponse(response);
|
|
50
|
-
expect(result.thread.id).toBe("thread-1");
|
|
51
|
-
expect(result.thread.sessionId).toBe("thread-1");
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it("normalizes missing id from sessionId", () => {
|
|
55
|
-
const response = makeMinimalResponse({ id: undefined, sessionId: "session-1" });
|
|
56
|
-
delete (response.thread as Record<string, unknown>).id;
|
|
57
|
-
const result = assertCodexThreadStartResponse(response);
|
|
58
|
-
expect(result.thread.id).toBe("session-1");
|
|
59
|
-
expect(result.thread.sessionId).toBe("session-1");
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it("throws on invalid response", () => {
|
|
63
|
-
expect(() => assertCodexThreadStartResponse({})).toThrow("Invalid Codex app-server");
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
describe("assertCodexThreadResumeResponse", () => {
|
|
68
|
-
it("normalizes missing sessionId from id", () => {
|
|
69
|
-
const response = makeMinimalResponse({ sessionId: undefined });
|
|
70
|
-
delete (response.thread as Record<string, unknown>).sessionId;
|
|
71
|
-
const result = assertCodexThreadResumeResponse(response);
|
|
72
|
-
expect(result.thread.id).toBe("thread-1");
|
|
73
|
-
expect(result.thread.sessionId).toBe("thread-1");
|
|
74
|
-
});
|
|
75
|
-
});
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
import AjvPkg, { type ValidateFunction } from "ajv";
|
|
2
|
-
import dynamicToolCallParamsSchema from "./protocol-generated/json/DynamicToolCallParams.json" with { type: "json" };
|
|
3
|
-
import errorNotificationSchema from "./protocol-generated/json/v2/ErrorNotification.json" with { type: "json" };
|
|
4
|
-
import modelListResponseSchema from "./protocol-generated/json/v2/ModelListResponse.json" with { type: "json" };
|
|
5
|
-
import threadResumeResponseSchema from "./protocol-generated/json/v2/ThreadResumeResponse.json" with { type: "json" };
|
|
6
|
-
import threadStartResponseSchema from "./protocol-generated/json/v2/ThreadStartResponse.json" with { type: "json" };
|
|
7
|
-
import turnCompletedNotificationSchema from "./protocol-generated/json/v2/TurnCompletedNotification.json" with { type: "json" };
|
|
8
|
-
import turnStartResponseSchema from "./protocol-generated/json/v2/TurnStartResponse.json" with { type: "json" };
|
|
9
|
-
import type {
|
|
10
|
-
CodexDynamicToolCallParams,
|
|
11
|
-
CodexErrorNotification,
|
|
12
|
-
CodexModelListResponse,
|
|
13
|
-
CodexThreadForkResponse,
|
|
14
|
-
CodexThreadResumeResponse,
|
|
15
|
-
CodexThreadStartResponse,
|
|
16
|
-
CodexTurn,
|
|
17
|
-
CodexTurnCompletedNotification,
|
|
18
|
-
CodexTurnStartResponse,
|
|
19
|
-
} from "./protocol.js";
|
|
20
|
-
|
|
21
|
-
type AjvInstance = import("ajv").default;
|
|
22
|
-
|
|
23
|
-
const AjvCtor = AjvPkg as unknown as new (opts?: object) => AjvInstance;
|
|
24
|
-
const ajv = new AjvCtor({
|
|
25
|
-
allErrors: true,
|
|
26
|
-
strict: false,
|
|
27
|
-
useDefaults: true,
|
|
28
|
-
validateFormats: false,
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
const validateDynamicToolCallParams = ajv.compile<CodexDynamicToolCallParams>(
|
|
32
|
-
dynamicToolCallParamsSchema,
|
|
33
|
-
);
|
|
34
|
-
const validateErrorNotification = ajv.compile<CodexErrorNotification>(errorNotificationSchema);
|
|
35
|
-
const validateModelListResponse = ajv.compile<CodexModelListResponse>(modelListResponseSchema);
|
|
36
|
-
const validateThreadResumeResponse = ajv.compile<CodexThreadResumeResponse>(
|
|
37
|
-
threadResumeResponseSchema,
|
|
38
|
-
);
|
|
39
|
-
const validateThreadStartResponse =
|
|
40
|
-
ajv.compile<CodexThreadStartResponse>(threadStartResponseSchema);
|
|
41
|
-
const validateTurnCompletedNotification = ajv.compile<CodexTurnCompletedNotification>(
|
|
42
|
-
turnCompletedNotificationSchema,
|
|
43
|
-
);
|
|
44
|
-
const validateTurnStartResponse = ajv.compile<CodexTurnStartResponse>(turnStartResponseSchema);
|
|
45
|
-
|
|
46
|
-
export function assertCodexThreadStartResponse(value: unknown): CodexThreadStartResponse {
|
|
47
|
-
return assertCodexShape(
|
|
48
|
-
validateThreadStartResponse,
|
|
49
|
-
normalizeThreadResponse(value),
|
|
50
|
-
"thread/start response",
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function assertCodexThreadForkResponse(value: unknown): CodexThreadForkResponse {
|
|
55
|
-
return assertCodexShape(
|
|
56
|
-
validateThreadStartResponse,
|
|
57
|
-
normalizeThreadResponse(value),
|
|
58
|
-
"thread/fork response",
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export function assertCodexThreadResumeResponse(value: unknown): CodexThreadResumeResponse {
|
|
63
|
-
return assertCodexShape(
|
|
64
|
-
validateThreadResumeResponse,
|
|
65
|
-
normalizeThreadResponse(value),
|
|
66
|
-
"thread/resume response",
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export function assertCodexTurnStartResponse(value: unknown): CodexTurnStartResponse {
|
|
71
|
-
return assertCodexShape(
|
|
72
|
-
validateTurnStartResponse,
|
|
73
|
-
normalizeTurnStartResponse(value),
|
|
74
|
-
"turn/start response",
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export function readCodexDynamicToolCallParams(
|
|
79
|
-
value: unknown,
|
|
80
|
-
): CodexDynamicToolCallParams | undefined {
|
|
81
|
-
return readCodexShape(validateDynamicToolCallParams, value);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export function readCodexErrorNotification(value: unknown): CodexErrorNotification | undefined {
|
|
85
|
-
return readCodexShape(validateErrorNotification, value);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export function readCodexModelListResponse(value: unknown): CodexModelListResponse | undefined {
|
|
89
|
-
return readCodexShape(validateModelListResponse, value);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export function readCodexTurn(value: unknown): CodexTurn | undefined {
|
|
93
|
-
const response = readCodexShape(validateTurnStartResponse, { turn: normalizeTurn(value) });
|
|
94
|
-
return response?.turn;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export function readCodexTurnCompletedNotification(
|
|
98
|
-
value: unknown,
|
|
99
|
-
): CodexTurnCompletedNotification | undefined {
|
|
100
|
-
return readCodexShape(
|
|
101
|
-
validateTurnCompletedNotification,
|
|
102
|
-
normalizeTurnCompletedNotification(value),
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function assertCodexShape<T>(validate: ValidateFunction<T>, value: unknown, label: string): T {
|
|
107
|
-
if (validate(value)) {
|
|
108
|
-
return value;
|
|
109
|
-
}
|
|
110
|
-
throw new Error(`Invalid Codex app-server ${label}: ${formatAjvErrors(validate)}`);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function readCodexShape<T>(validate: ValidateFunction<T>, value: unknown): T | undefined {
|
|
114
|
-
return validate(value) ? value : undefined;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
function normalizeTurn(value: unknown): unknown {
|
|
118
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
119
|
-
return value;
|
|
120
|
-
}
|
|
121
|
-
return {
|
|
122
|
-
error: null,
|
|
123
|
-
startedAt: null,
|
|
124
|
-
completedAt: null,
|
|
125
|
-
durationMs: null,
|
|
126
|
-
...value,
|
|
127
|
-
items: Array.isArray((value as { items?: unknown }).items)
|
|
128
|
-
? (value as { items: unknown[] }).items.map(normalizeThreadItem)
|
|
129
|
-
: [],
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function normalizeThreadItem(value: unknown): unknown {
|
|
134
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
135
|
-
return value;
|
|
136
|
-
}
|
|
137
|
-
const item = value as { type?: unknown };
|
|
138
|
-
switch (item.type) {
|
|
139
|
-
case "agentMessage":
|
|
140
|
-
return { phase: null, memoryCitation: null, ...value };
|
|
141
|
-
case "plan":
|
|
142
|
-
return { text: "", ...value };
|
|
143
|
-
case "reasoning":
|
|
144
|
-
return { summary: [], content: [], ...value };
|
|
145
|
-
case "dynamicToolCall":
|
|
146
|
-
return {
|
|
147
|
-
namespace: null,
|
|
148
|
-
arguments: null,
|
|
149
|
-
status: "completed",
|
|
150
|
-
contentItems: null,
|
|
151
|
-
success: null,
|
|
152
|
-
durationMs: null,
|
|
153
|
-
...value,
|
|
154
|
-
};
|
|
155
|
-
default:
|
|
156
|
-
return value;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
function normalizeThreadResponse(value: unknown): unknown {
|
|
161
|
-
if (!value || typeof value !== "object" || Array.isArray(value) || !("thread" in value)) {
|
|
162
|
-
return value;
|
|
163
|
-
}
|
|
164
|
-
const thread = (value as { thread?: unknown }).thread;
|
|
165
|
-
if (thread && typeof thread === "object" && !Array.isArray(thread)) {
|
|
166
|
-
const t = thread as { id?: string; sessionId?: string };
|
|
167
|
-
if (typeof t.id === "string" && typeof t.sessionId !== "string") {
|
|
168
|
-
return { ...value, thread: { ...thread, sessionId: t.id } };
|
|
169
|
-
}
|
|
170
|
-
if (typeof t.sessionId === "string" && typeof t.id !== "string") {
|
|
171
|
-
return { ...value, thread: { ...thread, id: t.sessionId } };
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
return value;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
function normalizeTurnStartResponse(value: unknown): unknown {
|
|
178
|
-
if (!value || typeof value !== "object" || Array.isArray(value) || !("turn" in value)) {
|
|
179
|
-
return value;
|
|
180
|
-
}
|
|
181
|
-
return {
|
|
182
|
-
...value,
|
|
183
|
-
turn: normalizeTurn((value as { turn?: unknown }).turn),
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
function normalizeTurnCompletedNotification(value: unknown): unknown {
|
|
188
|
-
if (!value || typeof value !== "object" || Array.isArray(value) || !("turn" in value)) {
|
|
189
|
-
return value;
|
|
190
|
-
}
|
|
191
|
-
return {
|
|
192
|
-
...value,
|
|
193
|
-
turn: normalizeTurn((value as { turn?: unknown }).turn),
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
function formatAjvErrors(validate: ValidateFunction): string {
|
|
198
|
-
const errors = validate.errors;
|
|
199
|
-
if (!errors || errors.length === 0) {
|
|
200
|
-
return "schema validation failed";
|
|
201
|
-
}
|
|
202
|
-
return ajv.errorsText(errors, { separator: "; " });
|
|
203
|
-
}
|