@janole/ai-sdk-provider-codex-asp 0.4.1 → 0.4.3
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/README.md +26 -3
- package/dist/index.cjs +29 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +113 -24
- package/dist/index.d.ts +113 -24
- package/dist/index.js +29 -12
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`@janole/ai-sdk-provider-codex-asp` is a [Vercel AI SDK](https://ai-sdk.dev/) v6 custom provider for the Codex App Server Protocol.
|
|
4
4
|
|
|
5
|
-
Status: POC feature-complete for language model usage. Currently tested with [codex-cli](https://github.com/openai/codex/releases/tag/rust-v0.
|
|
5
|
+
Status: POC feature-complete for language model usage. Currently tested with [codex-cli](https://github.com/openai/codex/releases/tag/rust-v0.117.0) 0.117.0.
|
|
6
6
|
|
|
7
7
|
- `LanguageModelV3` provider implementation
|
|
8
8
|
- Streaming (`streamText`) and non-streaming (`generateText`)
|
|
@@ -113,8 +113,8 @@ const codex = createCodexAppServer({
|
|
|
113
113
|
persistent?: { poolSize?, idleTimeoutMs?, scope?, key? },
|
|
114
114
|
compaction?: { shouldCompactOnResume?, strict? }, // optional thread/compact/start before resumed turns
|
|
115
115
|
debug?: { logPackets?, logger? }, // packet-level JSON-RPC debug logging
|
|
116
|
-
defaultThreadSettings?: { cwd?, approvalPolicy?, sandbox? },
|
|
117
|
-
defaultTurnSettings?: { cwd?, approvalPolicy?, sandboxPolicy?, model?, effort?, summary? },
|
|
116
|
+
defaultThreadSettings?: { cwd?, approvalPolicy?, approvalsReviewer?, sandbox? },
|
|
117
|
+
defaultTurnSettings?: { cwd?, approvalPolicy?, approvalsReviewer?, sandboxPolicy?, model?, effort?, summary? },
|
|
118
118
|
approvals?: { onCommandApproval?, onFileChangeApproval? },
|
|
119
119
|
toolTimeoutMs?: number, // default: 30000
|
|
120
120
|
interruptTimeoutMs?: number, // default: 10000
|
|
@@ -145,6 +145,29 @@ const codex = createCodexAppServer({
|
|
|
145
145
|
});
|
|
146
146
|
```
|
|
147
147
|
|
|
148
|
+
Approval reviewer example:
|
|
149
|
+
|
|
150
|
+
Set `approvalsReviewer` to `"guardian_subagent"` to let Codex route approval decisions to its built-in reviewer agent instead of prompting the human user.
|
|
151
|
+
|
|
152
|
+
```ts
|
|
153
|
+
const codex = createCodexAppServer({
|
|
154
|
+
defaultThreadSettings: {
|
|
155
|
+
approvalsReviewer: "guardian_subagent",
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
await streamText({
|
|
160
|
+
model: codex("gpt-5.3-codex"),
|
|
161
|
+
prompt: "Delete the old generated protocol files under src/protocol/app-server-protocol if they are no longer referenced, then regenerate the current ones.",
|
|
162
|
+
providerOptions: codexCallOptions({
|
|
163
|
+
approvalsReviewer: "user",
|
|
164
|
+
approvals: {
|
|
165
|
+
onCommandApproval: async () => "decline",
|
|
166
|
+
},
|
|
167
|
+
}),
|
|
168
|
+
});
|
|
169
|
+
```
|
|
170
|
+
|
|
148
171
|
See [`src/provider.ts`](src/provider.ts) for full type definitions.
|
|
149
172
|
|
|
150
173
|
## Examples
|
package/dist/index.cjs
CHANGED
|
@@ -935,7 +935,7 @@ var DynamicToolsDispatcher = class {
|
|
|
935
935
|
// package.json
|
|
936
936
|
var package_default = {
|
|
937
937
|
name: "@janole/ai-sdk-provider-codex-asp",
|
|
938
|
-
version: "0.4.
|
|
938
|
+
version: "0.4.3"};
|
|
939
939
|
|
|
940
940
|
// src/package-info.ts
|
|
941
941
|
var PACKAGE_NAME = package_default.name;
|
|
@@ -1769,6 +1769,12 @@ function sdkToolsToCodexDynamicTools(tools) {
|
|
|
1769
1769
|
inputSchema: t.inputSchema
|
|
1770
1770
|
}));
|
|
1771
1771
|
}
|
|
1772
|
+
function resolveApprovalHandlers(providerSettings, callOptions) {
|
|
1773
|
+
return stripUndefined({
|
|
1774
|
+
onCommandApproval: callOptions?.approvals?.onCommandApproval ?? providerSettings.approvals?.onCommandApproval,
|
|
1775
|
+
onFileChangeApproval: callOptions?.approvals?.onFileChangeApproval ?? providerSettings.approvals?.onFileChangeApproval
|
|
1776
|
+
});
|
|
1777
|
+
}
|
|
1772
1778
|
function isPassThroughContentPart(part) {
|
|
1773
1779
|
switch (part.type) {
|
|
1774
1780
|
case "tool-call":
|
|
@@ -1924,6 +1930,8 @@ var CodexLanguageModel = class {
|
|
|
1924
1930
|
let activeThreadId;
|
|
1925
1931
|
let activeTurnId;
|
|
1926
1932
|
let session;
|
|
1933
|
+
let detachApprovals;
|
|
1934
|
+
let detachDynamicTools;
|
|
1927
1935
|
const interruptTimeoutMs = this.config.providerSettings.interruptTimeoutMs ?? 1e4;
|
|
1928
1936
|
const interruptTurnIfPossible = async () => {
|
|
1929
1937
|
if (!activeThreadId || !activeTurnId) {
|
|
@@ -1950,6 +1958,10 @@ var CodexLanguageModel = class {
|
|
|
1950
1958
|
try {
|
|
1951
1959
|
controller.close();
|
|
1952
1960
|
} finally {
|
|
1961
|
+
detachDynamicTools?.();
|
|
1962
|
+
detachDynamicTools = void 0;
|
|
1963
|
+
detachApprovals?.();
|
|
1964
|
+
detachApprovals = void 0;
|
|
1953
1965
|
await fileResolver.cleanup();
|
|
1954
1966
|
await client.disconnect();
|
|
1955
1967
|
}
|
|
@@ -1963,6 +1975,10 @@ var CodexLanguageModel = class {
|
|
|
1963
1975
|
try {
|
|
1964
1976
|
controller.close();
|
|
1965
1977
|
} finally {
|
|
1978
|
+
detachDynamicTools?.();
|
|
1979
|
+
detachDynamicTools = void 0;
|
|
1980
|
+
detachApprovals?.();
|
|
1981
|
+
detachApprovals = void 0;
|
|
1966
1982
|
await fileResolver.cleanup();
|
|
1967
1983
|
await client.disconnect();
|
|
1968
1984
|
}
|
|
@@ -2024,11 +2040,10 @@ var CodexLanguageModel = class {
|
|
|
2024
2040
|
pendingToolCall.threadId,
|
|
2025
2041
|
closeSuccessfully
|
|
2026
2042
|
);
|
|
2027
|
-
const approvalsDispatcher2 = new ApprovalsDispatcher(
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
approvalsDispatcher2.attach(client);
|
|
2043
|
+
const approvalsDispatcher2 = new ApprovalsDispatcher(
|
|
2044
|
+
resolveApprovalHandlers(this.config.providerSettings, callOptions)
|
|
2045
|
+
);
|
|
2046
|
+
detachApprovals = approvalsDispatcher2.attach(client);
|
|
2032
2047
|
const result = toolResult ?? {
|
|
2033
2048
|
success: false,
|
|
2034
2049
|
contentItems: [{
|
|
@@ -2056,13 +2071,12 @@ var CodexLanguageModel = class {
|
|
|
2056
2071
|
timeoutMs: this.config.providerSettings.toolTimeoutMs,
|
|
2057
2072
|
onDebugEvent: toolLogger
|
|
2058
2073
|
}));
|
|
2059
|
-
dispatcher.attach(client);
|
|
2074
|
+
detachDynamicTools = dispatcher.attach(client);
|
|
2060
2075
|
}
|
|
2061
|
-
const approvalsDispatcher = new ApprovalsDispatcher(
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
approvalsDispatcher.attach(client);
|
|
2076
|
+
const approvalsDispatcher = new ApprovalsDispatcher(
|
|
2077
|
+
resolveApprovalHandlers(this.config.providerSettings, callOptions)
|
|
2078
|
+
);
|
|
2079
|
+
detachApprovals = approvalsDispatcher.attach(client);
|
|
2066
2080
|
client.onAnyNotification((method, params) => {
|
|
2067
2081
|
const parts = mapper.map({ method, params });
|
|
2068
2082
|
const mappedTurnId = mapper.getTurnId();
|
|
@@ -2116,6 +2130,7 @@ var CodexLanguageModel = class {
|
|
|
2116
2130
|
developerInstructions,
|
|
2117
2131
|
cwd: callOptions?.cwd ?? this.config.providerSettings.defaultThreadSettings?.cwd,
|
|
2118
2132
|
approvalPolicy: callOptions?.approvalPolicy ?? this.config.providerSettings.defaultThreadSettings?.approvalPolicy,
|
|
2133
|
+
approvalsReviewer: callOptions?.approvalsReviewer ?? this.config.providerSettings.defaultThreadSettings?.approvalsReviewer,
|
|
2119
2134
|
sandbox: callOptions?.sandbox ?? this.config.providerSettings.defaultThreadSettings?.sandbox,
|
|
2120
2135
|
model: callOptions?.model ?? this.config.providerSettings.defaultModel
|
|
2121
2136
|
});
|
|
@@ -2179,6 +2194,7 @@ var CodexLanguageModel = class {
|
|
|
2179
2194
|
config,
|
|
2180
2195
|
cwd: callOptions?.cwd ?? this.config.providerSettings.defaultThreadSettings?.cwd,
|
|
2181
2196
|
approvalPolicy: callOptions?.approvalPolicy ?? this.config.providerSettings.defaultThreadSettings?.approvalPolicy,
|
|
2197
|
+
approvalsReviewer: callOptions?.approvalsReviewer ?? this.config.providerSettings.defaultThreadSettings?.approvalsReviewer,
|
|
2182
2198
|
sandbox: callOptions?.sandbox ?? this.config.providerSettings.defaultThreadSettings?.sandbox
|
|
2183
2199
|
});
|
|
2184
2200
|
debugLog?.("outbound", "thread/start", threadStartParams);
|
|
@@ -2205,6 +2221,7 @@ var CodexLanguageModel = class {
|
|
|
2205
2221
|
input: turnInput,
|
|
2206
2222
|
cwd: callOptions?.cwd ?? this.config.providerSettings.defaultTurnSettings?.cwd,
|
|
2207
2223
|
approvalPolicy: callOptions?.approvalPolicy ?? this.config.providerSettings.defaultTurnSettings?.approvalPolicy,
|
|
2224
|
+
approvalsReviewer: callOptions?.approvalsReviewer ?? this.config.providerSettings.defaultTurnSettings?.approvalsReviewer,
|
|
2208
2225
|
sandboxPolicy: callOptions?.sandboxPolicy ?? this.config.providerSettings.defaultTurnSettings?.sandboxPolicy,
|
|
2209
2226
|
model: callOptions?.model ?? this.config.providerSettings.defaultTurnSettings?.model,
|
|
2210
2227
|
effort: callOptions?.effort ?? this.config.providerSettings.defaultTurnSettings?.effort,
|