@janole/ai-sdk-provider-codex-asp 0.2.2 → 0.2.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 +1 -1
- package/dist/index.cjs +53 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +37 -2
- package/dist/index.d.ts +37 -2
- package/dist/index.js +53 -9
- 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.106.0) 0.106.0.
|
|
6
6
|
|
|
7
7
|
- `LanguageModelV3` provider implementation
|
|
8
8
|
- Streaming (`streamText`) and non-streaming (`generateText`)
|
package/dist/index.cjs
CHANGED
|
@@ -274,6 +274,7 @@ var AppServerClient = class {
|
|
|
274
274
|
// src/client/transport-persistent.ts
|
|
275
275
|
var PersistentTransport = class {
|
|
276
276
|
pool;
|
|
277
|
+
signal;
|
|
277
278
|
worker = null;
|
|
278
279
|
pendingInitializeId = null;
|
|
279
280
|
initializeIntercepted = false;
|
|
@@ -282,9 +283,10 @@ var PersistentTransport = class {
|
|
|
282
283
|
closeListeners = /* @__PURE__ */ new Set();
|
|
283
284
|
constructor(settings) {
|
|
284
285
|
this.pool = settings.pool;
|
|
286
|
+
this.signal = settings.signal;
|
|
285
287
|
}
|
|
286
288
|
async connect() {
|
|
287
|
-
this.worker = this.pool.acquire();
|
|
289
|
+
this.worker = await this.pool.acquire(stripUndefined({ signal: this.signal }));
|
|
288
290
|
await this.worker.ensureConnected();
|
|
289
291
|
}
|
|
290
292
|
disconnect() {
|
|
@@ -724,6 +726,7 @@ var CodexWorker = class {
|
|
|
724
726
|
var CodexWorkerPool = class {
|
|
725
727
|
workers;
|
|
726
728
|
shutdownCalled = false;
|
|
729
|
+
waiters = [];
|
|
727
730
|
constructor(settings) {
|
|
728
731
|
const size = settings.poolSize ?? 1;
|
|
729
732
|
const idleTimeoutMs = settings.idleTimeoutMs ?? 3e5;
|
|
@@ -735,7 +738,7 @@ var CodexWorkerPool = class {
|
|
|
735
738
|
})
|
|
736
739
|
);
|
|
737
740
|
}
|
|
738
|
-
acquire() {
|
|
741
|
+
async acquire(options) {
|
|
739
742
|
if (this.shutdownCalled) {
|
|
740
743
|
throw new CodexProviderError("Worker pool has been shut down.");
|
|
741
744
|
}
|
|
@@ -743,20 +746,61 @@ var CodexWorkerPool = class {
|
|
|
743
746
|
(w) => w.state === "idle" || w.state === "disconnected"
|
|
744
747
|
);
|
|
745
748
|
if (!worker) {
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
+
if (options?.signal?.aborted) {
|
|
750
|
+
throw new CodexProviderError("Worker acquisition aborted while waiting.");
|
|
751
|
+
}
|
|
752
|
+
return new Promise((resolve, reject) => {
|
|
753
|
+
const waiter = {
|
|
754
|
+
resolve,
|
|
755
|
+
reject,
|
|
756
|
+
signal: options?.signal,
|
|
757
|
+
abortHandler: void 0
|
|
758
|
+
};
|
|
759
|
+
if (waiter.signal) {
|
|
760
|
+
waiter.abortHandler = () => {
|
|
761
|
+
this.removeWaiter(waiter);
|
|
762
|
+
waiter.reject(new CodexProviderError("Worker acquisition aborted while waiting."));
|
|
763
|
+
};
|
|
764
|
+
waiter.signal.addEventListener("abort", waiter.abortHandler, { once: true });
|
|
765
|
+
}
|
|
766
|
+
this.waiters.push(waiter);
|
|
767
|
+
});
|
|
749
768
|
}
|
|
750
769
|
worker.acquire();
|
|
751
770
|
return worker;
|
|
752
771
|
}
|
|
753
772
|
release(worker) {
|
|
754
|
-
|
|
773
|
+
const waiter = this.waiters.shift();
|
|
774
|
+
if (waiter) {
|
|
775
|
+
this.clearWaiterAbortHandler(waiter);
|
|
776
|
+
waiter.resolve(worker);
|
|
777
|
+
} else {
|
|
778
|
+
worker.release();
|
|
779
|
+
}
|
|
755
780
|
}
|
|
756
781
|
async shutdown() {
|
|
757
782
|
this.shutdownCalled = true;
|
|
783
|
+
while (this.waiters.length > 0) {
|
|
784
|
+
const waiter = this.waiters.shift();
|
|
785
|
+
this.clearWaiterAbortHandler(waiter);
|
|
786
|
+
waiter.reject(new CodexProviderError("Worker pool has been shut down."));
|
|
787
|
+
}
|
|
758
788
|
await Promise.all(this.workers.map((w) => w.shutdown()));
|
|
759
789
|
}
|
|
790
|
+
removeWaiter(target) {
|
|
791
|
+
const index = this.waiters.indexOf(target);
|
|
792
|
+
if (index >= 0) {
|
|
793
|
+
this.waiters.splice(index, 1);
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
/** Remove the abort listener so it doesn't fire after the waiter is already served. */
|
|
797
|
+
clearWaiterAbortHandler(waiter) {
|
|
798
|
+
if (!waiter.signal || !waiter.abortHandler) {
|
|
799
|
+
return;
|
|
800
|
+
}
|
|
801
|
+
waiter.signal.removeEventListener("abort", waiter.abortHandler);
|
|
802
|
+
waiter.abortHandler = void 0;
|
|
803
|
+
}
|
|
760
804
|
};
|
|
761
805
|
|
|
762
806
|
// src/dynamic-tools.ts
|
|
@@ -886,7 +930,7 @@ var DynamicToolsDispatcher = class {
|
|
|
886
930
|
// package.json
|
|
887
931
|
var package_default = {
|
|
888
932
|
name: "@janole/ai-sdk-provider-codex-asp",
|
|
889
|
-
version: "0.2.
|
|
933
|
+
version: "0.2.3"};
|
|
890
934
|
|
|
891
935
|
// src/package-info.ts
|
|
892
936
|
var PACKAGE_NAME = package_default.name;
|
|
@@ -1555,7 +1599,7 @@ var CodexLanguageModel = class {
|
|
|
1555
1599
|
});
|
|
1556
1600
|
}
|
|
1557
1601
|
doStream(options) {
|
|
1558
|
-
const transport = this.config.providerSettings.transportFactory ? this.config.providerSettings.transportFactory() : this.config.providerSettings.transport?.type === "websocket" ? new WebSocketTransport(this.config.providerSettings.transport.websocket) : new StdioTransport(this.config.providerSettings.transport?.stdio);
|
|
1602
|
+
const transport = this.config.providerSettings.transportFactory ? this.config.providerSettings.transportFactory(options.abortSignal) : this.config.providerSettings.transport?.type === "websocket" ? new WebSocketTransport(this.config.providerSettings.transport.websocket) : new StdioTransport(this.config.providerSettings.transport?.stdio);
|
|
1559
1603
|
const packetLogger = this.config.providerSettings.debug?.logPackets === true ? this.config.providerSettings.debug.logger ?? ((packet) => {
|
|
1560
1604
|
if (packet.direction === "inbound") {
|
|
1561
1605
|
console.debug("[codex packet]", packet.message);
|
|
@@ -1969,7 +2013,7 @@ function createCodexAppServer(settings = {}) {
|
|
|
1969
2013
|
});
|
|
1970
2014
|
}
|
|
1971
2015
|
const persistentPool = persistentPoolHandle?.pool ?? null;
|
|
1972
|
-
const effectiveTransportFactory = persistentPool ? () => new PersistentTransport({ pool: persistentPool }) : baseTransportFactory;
|
|
2016
|
+
const effectiveTransportFactory = persistentPool ? (signal) => new PersistentTransport(stripUndefined({ pool: persistentPool, signal })) : baseTransportFactory;
|
|
1973
2017
|
const resolvedSettings = Object.freeze(stripUndefined({
|
|
1974
2018
|
defaultModel: settings.defaultModel,
|
|
1975
2019
|
experimentalApi: settings.experimentalApi,
|