@usine/agents 0.2.0 → 0.4.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.
- package/README.md +93 -29
- package/dist/child-host/child-host.d.ts +60 -0
- package/dist/child-host/child-host.d.ts.map +1 -0
- package/dist/child-host/child-host.js +84 -0
- package/dist/child-host/child-host.js.map +1 -0
- package/dist/child-host/command.d.ts +11 -0
- package/dist/child-host/command.d.ts.map +1 -0
- package/dist/child-host/command.js +26 -0
- package/dist/child-host/command.js.map +1 -0
- package/dist/pi/authentication.d.ts +11 -2
- package/dist/pi/authentication.d.ts.map +1 -1
- package/dist/pi/authentication.js +15 -2
- package/dist/pi/authentication.js.map +1 -1
- package/dist/pi/children.d.ts +1 -4
- package/dist/pi/children.d.ts.map +1 -1
- package/dist/pi/children.js +1 -4
- package/dist/pi/children.js.map +1 -1
- package/dist/pi/claude.d.ts +8 -9
- package/dist/pi/claude.d.ts.map +1 -1
- package/dist/pi/claude.js +413 -39
- package/dist/pi/claude.js.map +1 -1
- package/dist/pi/codex/account.d.ts +3 -3
- package/dist/pi/codex/account.d.ts.map +1 -1
- package/dist/pi/codex/account.js +5 -5
- package/dist/pi/codex/account.js.map +1 -1
- package/dist/pi/codex/app-server.d.ts +19 -7
- package/dist/pi/codex/app-server.d.ts.map +1 -1
- package/dist/pi/codex/app-server.js +41 -36
- package/dist/pi/codex/app-server.js.map +1 -1
- package/dist/pi/codex/codec.d.ts +118 -0
- package/dist/pi/codex/codec.d.ts.map +1 -0
- package/dist/pi/codex/codec.js +137 -0
- package/dist/pi/codex/codec.js.map +1 -0
- package/dist/pi/codex/codex.d.ts +0 -1
- package/dist/pi/codex/codex.d.ts.map +1 -1
- package/dist/pi/codex/codex.js +169 -133
- package/dist/pi/codex/codex.js.map +1 -1
- package/dist/pi/conversation.d.ts +43 -0
- package/dist/pi/conversation.d.ts.map +1 -0
- package/dist/pi/conversation.js +129 -0
- package/dist/pi/conversation.js.map +1 -0
- package/dist/pi/pi.d.ts +1 -4
- package/dist/pi/pi.d.ts.map +1 -1
- package/dist/pi/pi.js +38 -201
- package/dist/pi/pi.js.map +1 -1
- package/dist/pi/sdk.d.ts +11 -15
- package/dist/pi/sdk.d.ts.map +1 -1
- package/dist/pi/sdk.js +35 -53
- package/dist/pi/sdk.js.map +1 -1
- package/dist/pi/session.d.ts +13 -14
- package/dist/pi/session.d.ts.map +1 -1
- package/dist/pi/session.js +68 -16
- package/dist/pi/session.js.map +1 -1
- package/dist/pi/turns.d.ts +28 -0
- package/dist/pi/turns.d.ts.map +1 -0
- package/dist/pi/turns.js +67 -0
- package/dist/pi/turns.js.map +1 -0
- package/dist/pi/usage.d.ts +39 -0
- package/dist/pi/usage.d.ts.map +1 -0
- package/dist/pi/usage.js +96 -0
- package/dist/pi/usage.js.map +1 -0
- package/dist/preflight/command.d.ts +16 -3
- package/dist/preflight/command.d.ts.map +1 -1
- package/dist/preflight/command.js +30 -17
- package/dist/preflight/command.js.map +1 -1
- package/dist/preflight/preflight.d.ts +10 -5
- package/dist/preflight/preflight.d.ts.map +1 -1
- package/dist/preflight/preflight.js +52 -25
- package/dist/preflight/preflight.js.map +1 -1
- package/dist/prompt.d.ts +12 -9
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +33 -4
- package/dist/prompt.js.map +1 -1
- package/dist/protocol/codex.d.ts +4 -7
- package/dist/protocol/codex.d.ts.map +1 -1
- package/dist/protocol/codex.js +1 -1
- package/dist/protocol/codex.js.map +1 -1
- package/dist/runtime.d.ts +101 -40
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +108 -27
- package/dist/runtime.js.map +1 -1
- package/package.json +22 -10
- package/dist/pi/live.d.ts +0 -4
- package/dist/pi/live.d.ts.map +0 -1
- package/dist/pi/live.js +0 -11
- package/dist/pi/live.js.map +0 -1
- package/dist/pi/subagents.d.ts +0 -27
- package/dist/pi/subagents.d.ts.map +0 -1
- package/dist/pi/subagents.js +0 -113
- package/dist/pi/subagents.js.map +0 -1
- package/dist/pi/thinking.d.ts +0 -8
- package/dist/pi/thinking.d.ts.map +0 -1
- package/dist/pi/thinking.js +0 -15
- package/dist/pi/thinking.js.map +0 -1
|
@@ -2,10 +2,10 @@ import type { ModelId } from "@usine/core/agent/brain";
|
|
|
2
2
|
import { Effect } from "effect";
|
|
3
3
|
import { PoolUnavailableError } from "../../runtime.ts";
|
|
4
4
|
import type { CodexConnection } from "./app-server.ts";
|
|
5
|
-
/**
|
|
5
|
+
/** Sends `initialize` and `initialized` to the app server; must run before account checks or creating a child. */
|
|
6
6
|
export declare const initializeCodex: (connection: CodexConnection) => Effect.Effect<void, import("../../runtime.ts").SessionOperationError, never>;
|
|
7
|
-
/**
|
|
7
|
+
/** Returns the error for when Codex cannot confirm that it uses the ChatGPT pool. */
|
|
8
8
|
export declare const codexPoolUnavailable: (model: ModelId) => PoolUnavailableError;
|
|
9
|
-
/**
|
|
9
|
+
/** Verifies the Codex account before any model request. Fails with `PoolUnavailableError` for unknown, missing, or API-key authentication (ADR 0013). */
|
|
10
10
|
export declare const verifyCodexAccount: (connection: CodexConnection, model: string & import("effect/Brand").Brand<"ModelId">) => Effect.Effect<"chatgptPlan", PoolUnavailableError | import("../../runtime.ts").SessionOperationError, never>;
|
|
11
11
|
//# sourceMappingURL=account.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/pi/codex/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAMxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/pi/codex/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAMxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,kHAAkH;AAClH,eAAO,MAAM,eAAe,+GAS1B,CAAC;AAEH,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,UAAW,OAAO,yBAM/C,CAAC;AAEL,yJAAyJ;AACzJ,eAAO,MAAM,kBAAkB,wMAgC7B,CAAC"}
|
package/dist/pi/codex/account.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import { PoolUnavailableError } from "../../runtime.js";
|
|
3
3
|
import { AccountResponse, } from "../../protocol/codex.js";
|
|
4
|
-
/**
|
|
4
|
+
/** Sends `initialize` and `initialized` to the app server; must run before account checks or creating a child. */
|
|
5
5
|
export const initializeCodex = Effect.fn("Codex.initialize")(function* (connection) {
|
|
6
6
|
const params = {
|
|
7
7
|
clientInfo: { name: "usine", title: "usine", version: "0.0.1" },
|
|
@@ -10,20 +10,20 @@ export const initializeCodex = Effect.fn("Codex.initialize")(function* (connecti
|
|
|
10
10
|
yield* connection.request("launch", "initialize", Schema.decodeUnknownSync(Schema.Json)(params));
|
|
11
11
|
yield* connection.notify("launch", "initialized", {});
|
|
12
12
|
});
|
|
13
|
-
/**
|
|
13
|
+
/** Returns the error for when Codex cannot confirm that it uses the ChatGPT pool. */
|
|
14
14
|
export const codexPoolUnavailable = (model) => new PoolUnavailableError({
|
|
15
15
|
harness: "codex",
|
|
16
16
|
model,
|
|
17
17
|
pool: "chatgptPlan",
|
|
18
|
-
message: "Codex children
|
|
18
|
+
message: "Codex children need a ChatGPT login. Run codex login on the worker.",
|
|
19
19
|
});
|
|
20
|
-
/**
|
|
20
|
+
/** Verifies the Codex account before any model request. Fails with `PoolUnavailableError` for unknown, missing, or API-key authentication (ADR 0013). */
|
|
21
21
|
export const verifyCodexAccount = Effect.fn("Codex.verifyAccount")(function* (connection, model) {
|
|
22
22
|
yield* Effect.annotateCurrentSpan({ harness: "codex", model });
|
|
23
23
|
const params = { refreshToken: false };
|
|
24
24
|
const response = yield* connection.request("launch", "account/read", Schema.decodeUnknownSync(Schema.Json)(params));
|
|
25
25
|
const account = yield* Schema.decodeUnknownEffect(AccountResponse)(response).pipe(Effect.tapError(() => Effect.logError("Codex returned an unrecognized account status", { model })),
|
|
26
|
-
// An
|
|
26
|
+
// An auth response that does not decode is treated as an unsupported billing pool.
|
|
27
27
|
Effect.mapError(() => codexPoolUnavailable(model)));
|
|
28
28
|
if (account.account?.type !== "chatgpt" || !account.requiresOpenaiAuth) {
|
|
29
29
|
yield* Effect.logError("Codex rejected an unavailable billing pool", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/pi/codex/account.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,eAAe,GAGhB,MAAM,yBAAyB,CAAC;AAGjC,
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/pi/codex/account.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,eAAe,GAGhB,MAAM,yBAAyB,CAAC;AAGjC,kHAAkH;AAClH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,EACpE,UAA2B;IAE3B,MAAM,MAAM,GAAqB;QAC/B,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;QAC/D,YAAY,EAAE,IAAI;KACnB,CAAC;IACF,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACjG,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,qFAAqF;AACrF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAE,EAAE,CACrD,IAAI,oBAAoB,CAAC;IACvB,OAAO,EAAE,OAAO;IAChB,KAAK;IACL,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,qEAAqE;CAC/E,CAAC,CAAC;AAEL,yJAAyJ;AACzJ,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EAC1E,UAA2B,EAC3B,KAAc;IAEd,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAqB,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CACxC,QAAQ,EACR,cAAc,EACd,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAC9C,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC/E,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CACnB,MAAM,CAAC,QAAQ,CAAC,+CAA+C,EAAE,EAAE,KAAK,EAAE,CAAC,CAC5E;IACD,mFAAmF;IACnF,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CACnD,CAAC;IACF,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACvE,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,4CAA4C,EAAE;YACnE,KAAK;YACL,YAAY,EAAE,aAAa;YAC3B,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,YAAY;SACtD,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,6BAA6B,EAAE;QACnD,KAAK;QACL,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;QACpC,IAAI,EAAE,aAAa;KACpB,CAAC,CAAC;IACH,OAAO,aAAsB,CAAC;AAChC,CAAC,CAAC,CAAC"}
|
|
@@ -1,20 +1,28 @@
|
|
|
1
1
|
import { Context, Effect, Layer, Option, Schema, Scope, Stream } from "effect";
|
|
2
|
-
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
|
|
2
|
+
import { type ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
|
|
3
3
|
import type { AgentSessionId } from "@usine/core/agent/session";
|
|
4
|
+
import { type ChildHost } from "../../child-host/child-host.ts";
|
|
4
5
|
import { type WorkingDirectory, SessionOperationError } from "../../runtime.ts";
|
|
5
|
-
/**
|
|
6
|
+
/** The settings of one app-server connection. */
|
|
6
7
|
export interface CodexClient {
|
|
8
|
+
/** The checkout directory on `host`. */
|
|
7
9
|
readonly cwd: WorkingDirectory;
|
|
8
|
-
/** None during preflight, before a child
|
|
10
|
+
/** `None` during preflight, before a child session exists. */
|
|
9
11
|
readonly sessionId: Option.Option<AgentSessionId>;
|
|
12
|
+
/**
|
|
13
|
+
* The complete environment of the app server and its commands on a local host, or the variables
|
|
14
|
+
* exported on top of a remote host's environment.
|
|
15
|
+
*/
|
|
16
|
+
readonly environment: Readonly<Record<string, string>>;
|
|
17
|
+
readonly host: ChildHost;
|
|
10
18
|
}
|
|
11
19
|
export interface CodexNotification {
|
|
12
20
|
readonly method: string;
|
|
13
21
|
readonly params: Schema.Json;
|
|
14
22
|
}
|
|
15
|
-
/**
|
|
23
|
+
/** A JSON-RPC connection to the app server, scoped to its process. */
|
|
16
24
|
export interface CodexConnection {
|
|
17
|
-
/** Closes stdin and waits for the app server to
|
|
25
|
+
/** Closes stdin and waits for the app server to shut down its threads and commands. */
|
|
18
26
|
readonly close: Effect.Effect<void, SessionOperationError>;
|
|
19
27
|
readonly notifications: Stream.Stream<CodexNotification, SessionOperationError>;
|
|
20
28
|
readonly request: (operation: SessionOperationError["operation"], method: string, params: Schema.Json) => Effect.Effect<Schema.Json, SessionOperationError>;
|
|
@@ -23,11 +31,15 @@ export interface CodexConnection {
|
|
|
23
31
|
declare const CodexAppServer_base: Context.ServiceClass<CodexAppServer, "@usine/agents/pi/CodexAppServer", {
|
|
24
32
|
readonly open: (request: CodexClient) => Effect.Effect<CodexConnection, SessionOperationError, Scope.Scope>;
|
|
25
33
|
}>;
|
|
26
|
-
/**
|
|
34
|
+
/** The service that spawns the Codex app-server process and provides its JSON-RPC connection. */
|
|
27
35
|
export declare class CodexAppServer extends CodexAppServer_base {
|
|
28
36
|
}
|
|
29
37
|
export declare const operationError: (operation: SessionOperationError["operation"], request: CodexClient, message: string, cause: unknown) => SessionOperationError;
|
|
30
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Returns the app-server command for `client` on its host. The process starts in the home directory,
|
|
40
|
+
* not the worktree, so startup cannot read repository config before thread trust is set.
|
|
41
|
+
*/
|
|
42
|
+
export declare const codexAppServerCommand: (client: CodexClient, stdin?: ChildProcess.CommandOptions["stdin"]) => ChildProcess.Command;
|
|
31
43
|
export declare const codexAppServerLive: Layer.Layer<CodexAppServer, never, ChildProcessSpawner.ChildProcessSpawner>;
|
|
32
44
|
export {};
|
|
33
45
|
//# sourceMappingURL=app-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-server.d.ts","sourceRoot":"","sources":["../../../src/pi/codex/app-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EAEP,MAAM,EAEN,KAAK,EACL,MAAM,EAGN,MAAM,EACN,KAAK,EACL,MAAM,EACP,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"app-server.d.ts","sourceRoot":"","sources":["../../../src/pi/codex/app-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EAEP,MAAM,EAEN,KAAK,EACL,MAAM,EAGN,MAAM,EACN,KAAK,EACL,MAAM,EACP,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,KAAK,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,gCAAgC,CAAC;AAE9E,OAAO,EAAE,KAAK,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEhF,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;CAC9B;AAED,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,uFAAuF;IACvF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAC3D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IAChF,QAAQ,CAAC,OAAO,EAAE,CAChB,SAAS,EAAE,qBAAqB,CAAC,WAAW,CAAC,EAC7C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,IAAI,KAChB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,CACf,SAAS,EAAE,qBAAqB,CAAC,WAAW,CAAC,EAC7C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,IAAI,KAChB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;CACjD;;mBAMkB,CACb,OAAO,EAAE,WAAW,KACjB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,qBAAqB,EAAE,KAAK,CAAC,KAAK,CAAC;;AAN3E,iGAAiG;AACjG,qBAAa,cAAe,SAAQ,mBAOE;CAAG;AA2BzC,eAAO,MAAM,cAAc,cACd,qBAAqB,CAAC,WAAW,CAAC,WACpC,WAAW,WACX,MAAM,SACR,OAAO,KACb,qBAMC,CAAC;AAWL;;;GAGG;AACH,eAAO,MAAM,qBAAqB,WACxB,WAAW,UACX,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,KAC3C,YAAY,CAAC,OA0Bf,CAAC;AAyVF,eAAO,MAAM,kBAAkB,6EAAmD,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Cause, Context, Deferred, Effect, Fiber, Layer, Option, Queue, Ref, Schema, Scope, Stream, } from "effect";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { ChildProcessSpawner } from "effect/unstable/process";
|
|
3
|
+
import { childPidFile } from "../../child-host/child-host.js";
|
|
4
|
+
import { hostCommand } from "../../child-host/command.js";
|
|
4
5
|
import { SessionOperationError } from "../../runtime.js";
|
|
5
|
-
/**
|
|
6
|
+
/** The service that spawns the Codex app-server process and provides its JSON-RPC connection. */
|
|
6
7
|
export class CodexAppServer extends Context.Service()("@usine/agents/pi/CodexAppServer") {
|
|
7
8
|
}
|
|
8
9
|
const RpcSuccessResponse = Schema.Struct({
|
|
@@ -36,25 +37,30 @@ export const operationError = (operation, request, message, cause) => new Sessio
|
|
|
36
37
|
});
|
|
37
38
|
const repositoryTrustOverride = (cwd) => `projects.${JSON.stringify(cwd)}.trust_level="untrusted"`;
|
|
38
39
|
const disableRecursiveAgentsOverride = "features.multi_agent=false";
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
//
|
|
46
|
-
//
|
|
40
|
+
/**
|
|
41
|
+
* Returns the app-server command for `client` on its host. The process starts in the home directory,
|
|
42
|
+
* not the worktree, so startup cannot read repository config before thread trust is set.
|
|
43
|
+
*/
|
|
44
|
+
export const codexAppServerCommand = (client, stdin) => {
|
|
45
|
+
const lifetime = {
|
|
46
|
+
// Not detached, so killing the launching process group also kills the app server; SIGTERM is
|
|
47
|
+
// followed by SIGKILL after 5 seconds (ADR 0006).
|
|
47
48
|
detached: false,
|
|
48
49
|
forceKillAfter: "5 seconds",
|
|
49
50
|
};
|
|
50
|
-
return
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
"
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
51
|
+
return hostCommand(client.host, {
|
|
52
|
+
environment: client.environment,
|
|
53
|
+
pidFile: Option.getOrUndefined(Option.map(client.sessionId, (sessionId) => childPidFile(client.cwd, sessionId))),
|
|
54
|
+
command: "codex",
|
|
55
|
+
args: [
|
|
56
|
+
"app-server",
|
|
57
|
+
"--stdio",
|
|
58
|
+
"-c",
|
|
59
|
+
repositoryTrustOverride(client.cwd),
|
|
60
|
+
"-c",
|
|
61
|
+
disableRecursiveAgentsOverride,
|
|
62
|
+
],
|
|
63
|
+
}, stdin === undefined ? lifetime : { ...lifetime, stdin });
|
|
58
64
|
};
|
|
59
65
|
const makeCodexAppServer = Effect.gen(function* () {
|
|
60
66
|
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
@@ -71,7 +77,7 @@ const makeCodexAppServer = Effect.gen(function* () {
|
|
|
71
77
|
const failure = yield* Ref.make(Option.none());
|
|
72
78
|
const stderrTail = yield* Ref.make([]);
|
|
73
79
|
const handle = yield* spawner
|
|
74
|
-
.spawn(codexAppServerCommand(request
|
|
80
|
+
.spawn(codexAppServerCommand(request, {
|
|
75
81
|
stream: Stream.fromQueue(input),
|
|
76
82
|
endOnDone: true,
|
|
77
83
|
}))
|
|
@@ -80,7 +86,7 @@ const makeCodexAppServer = Effect.gen(function* () {
|
|
|
80
86
|
? Effect.void
|
|
81
87
|
: Effect.fail(operationError(operation, request, "Codex app-server input is closed", new Error("input queue closed")))), Effect.mapError((cause) => cause instanceof SessionOperationError
|
|
82
88
|
? cause
|
|
83
|
-
: operationError(operation, request, "
|
|
89
|
+
: operationError(operation, request, "Can't write to Codex app-server", cause)));
|
|
84
90
|
const failAll = Effect.fn("CodexAppServer.failAll")(function* (error) {
|
|
85
91
|
yield* Ref.update(failure, Option.orElseSome(() => error));
|
|
86
92
|
const waiting = yield* Ref.getAndSet(pending, new Map());
|
|
@@ -88,9 +94,8 @@ const makeCodexAppServer = Effect.gen(function* () {
|
|
|
88
94
|
yield* Deferred.fail(entry.response, error);
|
|
89
95
|
yield* Queue.fail(notifications, error);
|
|
90
96
|
});
|
|
91
|
-
//
|
|
92
|
-
//
|
|
93
|
-
// cannot fail the session and trigger an infra retry (ADR 0002).
|
|
97
|
+
// Handles one stdout line, without a span. Unrecognized input is logged and skipped, so a
|
|
98
|
+
// stray frame does not fail the session and cause an infra retry (ADR 0002).
|
|
94
99
|
const routeLine = (line) => Effect.gen(function* () {
|
|
95
100
|
if (line.trim().length === 0)
|
|
96
101
|
return;
|
|
@@ -117,7 +122,7 @@ const makeCodexAppServer = Effect.gen(function* () {
|
|
|
117
122
|
});
|
|
118
123
|
}
|
|
119
124
|
if (Schema.is(RpcErrorResponse)(decoded)) {
|
|
120
|
-
return yield* Deferred.fail(found.value.response, operationError(found.value.operation, request, `Codex app-server
|
|
125
|
+
return yield* Deferred.fail(found.value.response, operationError(found.value.operation, request, `Codex app-server returned an error: ${decoded.error.message}`, decoded.error));
|
|
121
126
|
}
|
|
122
127
|
return yield* Deferred.succeed(found.value.response, decoded.result);
|
|
123
128
|
}
|
|
@@ -145,30 +150,30 @@ const makeCodexAppServer = Effect.gen(function* () {
|
|
|
145
150
|
const stdoutReader = yield* handle.stdout.pipe(Stream.decodeText(), Stream.splitLines, Stream.runForEach(routeLine), Effect.flatMap(() => Ref.get(closing).pipe(Effect.flatMap((closed) => closed
|
|
146
151
|
? Effect.void
|
|
147
152
|
: handle.exitCode.pipe(
|
|
148
|
-
//
|
|
149
|
-
//
|
|
153
|
+
// If the process exits within 5 seconds, its exit monitor reports the error;
|
|
154
|
+
// otherwise a running process that closed stdout fails here.
|
|
150
155
|
Effect.timeout("5 seconds"), Effect.matchEffect({
|
|
151
156
|
onSuccess: () => Effect.void,
|
|
152
157
|
onFailure: (cause) => failAll(operationError("stream", request, "Codex app-server output closed unexpectedly", cause)),
|
|
153
158
|
}))))), Effect.catch((error) => failAll(error instanceof SessionOperationError
|
|
154
159
|
? error
|
|
155
|
-
: operationError("stream", request, "
|
|
160
|
+
: operationError("stream", request, "Can't read Codex app-server output", error))), Effect.forkScoped);
|
|
156
161
|
const stderrReader = yield* handle.stderr.pipe(Stream.decodeText(), Stream.splitLines, Stream.runForEach((line) => line.trim().length === 0
|
|
157
162
|
? Effect.void
|
|
158
163
|
: Effect.logDebug("Codex app-server stderr", {
|
|
159
164
|
line: preview(line),
|
|
160
165
|
sessionId: Option.getOrUndefined(request.sessionId),
|
|
161
|
-
}).pipe(Effect.andThen(Ref.update(stderrTail, (tail) => [...tail, line].slice(-STDERR_TAIL_LINES))))), Effect.catch((cause) => failAll(operationError("stream", request, "
|
|
166
|
+
}).pipe(Effect.andThen(Ref.update(stderrTail, (tail) => [...tail, line].slice(-STDERR_TAIL_LINES))))), Effect.catch((cause) => failAll(operationError("stream", request, "Can't read Codex app-server diagnostics", cause))), Effect.forkScoped);
|
|
162
167
|
yield* handle.exitCode.pipe(Effect.flatMap((exitCode) => Effect.all([Ref.get(closing), Ref.get(stderrTail)]).pipe(Effect.flatMap(([closed, stderr]) => closed
|
|
163
168
|
? Effect.void
|
|
164
|
-
: failAll(operationError("stream", request, `Codex app-server exited with code ${String(exitCode)}`, { exitCode, stderr }))))), Effect.catch((cause) => failAll(operationError("stream", request, "
|
|
165
|
-
//
|
|
166
|
-
//
|
|
167
|
-
//
|
|
169
|
+
: failAll(operationError("stream", request, `Codex app-server exited with code ${String(exitCode)}`, { exitCode, stderr }))))), Effect.catch((cause) => failAll(operationError("stream", request, "Can't monitor Codex app-server", cause))), Effect.forkScoped);
|
|
170
|
+
// Closing stdin runs Codex's thread shutdown, including background commands; SIGTERM skips it
|
|
171
|
+
// in stdio mode. One bounded shutdown is shared by terminal delivery and scope release, and
|
|
172
|
+
// it runs even if the caller is interrupted.
|
|
168
173
|
const rejectPending = (cause) => Effect.gen(function* () {
|
|
169
174
|
const waiting = yield* Ref.getAndSet(pending, new Map());
|
|
170
175
|
for (const entry of waiting.values())
|
|
171
|
-
yield* Deferred.fail(entry.response, operationError(entry.operation, request, "Codex app-server closed before
|
|
176
|
+
yield* Deferred.fail(entry.response, operationError(entry.operation, request, "Codex app-server closed before it responded to the request", cause));
|
|
172
177
|
});
|
|
173
178
|
const close = yield* Effect.cached(Effect.fn("CodexAppServer.close")(function* () {
|
|
174
179
|
yield* Effect.annotateCurrentSpan({
|
|
@@ -178,7 +183,7 @@ const makeCodexAppServer = Effect.gen(function* () {
|
|
|
178
183
|
yield* Queue.end(input);
|
|
179
184
|
const [exitCode] = yield* Effect.all([handle.exitCode, Fiber.join(stdoutReader), Fiber.join(stderrReader)], {
|
|
180
185
|
concurrency: "unbounded",
|
|
181
|
-
}).pipe(Effect.timeout("15 seconds"), Effect.mapError((cause) => operationError("interrupt", request, "Codex app-server
|
|
186
|
+
}).pipe(Effect.timeout("15 seconds"), Effect.mapError((cause) => operationError("interrupt", request, "Codex app-server didn't shut down cleanly", cause)), Effect.tapError(rejectPending));
|
|
182
187
|
yield* rejectPending({ exitCode });
|
|
183
188
|
if (exitCode !== 0)
|
|
184
189
|
return yield* operationError("interrupt", request, `Codex app-server exited with code ${String(exitCode)} during shutdown`, { exitCode, stderr: yield* Ref.get(stderrTail) });
|
|
@@ -210,7 +215,7 @@ const makeCodexAppServer = Effect.gen(function* () {
|
|
|
210
215
|
yield* write({ id, method, params }, operation).pipe(Effect.tapError(() => forget));
|
|
211
216
|
return yield* Deferred.await(response).pipe(Effect.timeoutOrElse({
|
|
212
217
|
duration: RPC_TIMEOUT,
|
|
213
|
-
orElse: () => forget.pipe(Effect.andThen(operationError(operation, request, `Codex app-server
|
|
218
|
+
orElse: () => forget.pipe(Effect.andThen(operationError(operation, request, `Codex app-server didn't respond to ${method} within ${RPC_TIMEOUT}`, new Error("request timed out")))),
|
|
214
219
|
}));
|
|
215
220
|
});
|
|
216
221
|
const notify = (operation, method, params) => write({ method, params }, operation);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-server.js","sourceRoot":"","sources":["../../../src/pi/codex/app-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-server.js","sourceRoot":"","sources":["../../../src/pi/codex/app-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { AgentSessionId, RateLimitWindow as CoreRateLimitWindow } from "@usine/core/agent/session";
|
|
2
|
+
import { Effect, Option, Schema } from "effect";
|
|
3
|
+
import type { ModelListParams, ThreadStartParams, TurnInterruptParams, TurnStartParams, TurnSteerParams } from "../../protocol/codex.ts";
|
|
4
|
+
import { SessionOperationError } from "../../runtime.ts";
|
|
5
|
+
import { type CodexClient } from "./app-server.ts";
|
|
6
|
+
type CodexRequestPayload = ModelListParams | ThreadStartParams | TurnStartParams | TurnSteerParams | TurnInterruptParams;
|
|
7
|
+
/** Returns typed Codex request parameters as JSON for the app-server transport. */
|
|
8
|
+
export declare const json: (value: CodexRequestPayload) => Schema.Json;
|
|
9
|
+
/** The model catalog page, used to validate the requested model and reasoning effort. */
|
|
10
|
+
export declare const ModelListResponse: Schema.Struct<{
|
|
11
|
+
readonly data: Schema.$Array<Schema.Struct<{
|
|
12
|
+
readonly id: Schema.String;
|
|
13
|
+
readonly model: Schema.String;
|
|
14
|
+
readonly supportedReasoningEfforts: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
15
|
+
readonly reasoningEffort: Schema.String;
|
|
16
|
+
}>>>;
|
|
17
|
+
}>>;
|
|
18
|
+
readonly nextCursor: Schema.NullOr<Schema.String>;
|
|
19
|
+
}>;
|
|
20
|
+
/** The thread ID and effective model returned when a child thread starts. */
|
|
21
|
+
export declare const ThreadStartResponse: Schema.Struct<{
|
|
22
|
+
readonly thread: Schema.Struct<{
|
|
23
|
+
readonly id: Schema.brand<Schema.NonEmptyString, "HarnessSessionId">;
|
|
24
|
+
}>;
|
|
25
|
+
readonly model: Schema.NonEmptyString;
|
|
26
|
+
readonly instructionSources: Schema.$Array<Schema.String>;
|
|
27
|
+
}>;
|
|
28
|
+
/** The turn ID, needed to steer or interrupt the turn. */
|
|
29
|
+
export declare const TurnStartResponse: Schema.Struct<{
|
|
30
|
+
readonly turn: Schema.Struct<{
|
|
31
|
+
readonly id: Schema.NonEmptyString;
|
|
32
|
+
}>;
|
|
33
|
+
}>;
|
|
34
|
+
/** An item notification with its thread and turn IDs; `item` is kept as JSON. */
|
|
35
|
+
export declare const ItemNotification: Schema.Struct<{
|
|
36
|
+
readonly item: Schema.Codec<Schema.Json, Schema.Json, never, never>;
|
|
37
|
+
readonly threadId: Schema.String;
|
|
38
|
+
readonly turnId: Schema.String;
|
|
39
|
+
}>;
|
|
40
|
+
/** A user message recorded in the thread: a turn's input, or steered input once the running turn reads it. */
|
|
41
|
+
export declare const UserMessageItem: Schema.Struct<{
|
|
42
|
+
readonly type: Schema.Literal<"userMessage">;
|
|
43
|
+
readonly content: Schema.$Array<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
|
|
44
|
+
}>;
|
|
45
|
+
/** Returns the text of a recorded user message as the executor sent it. */
|
|
46
|
+
export declare const userMessageText: (item: typeof UserMessageItem.Type) => string;
|
|
47
|
+
/** A completed assistant message; `phase` distinguishes a final answer from commentary. */
|
|
48
|
+
export declare const AgentMessageItem: Schema.Struct<{
|
|
49
|
+
readonly type: Schema.Literal<"agentMessage">;
|
|
50
|
+
readonly id: Schema.NonEmptyString;
|
|
51
|
+
readonly text: Schema.String;
|
|
52
|
+
readonly phase: Schema.optionalKey<Schema.NullOr<Schema.String>>;
|
|
53
|
+
}>;
|
|
54
|
+
/** A recognized tool item, with the fields needed to match starts and results. */
|
|
55
|
+
export declare const ToolItem: Schema.Struct<{
|
|
56
|
+
readonly type: Schema.Literals<readonly ["commandExecution", "fileChange", "mcpToolCall", "dynamicToolCall", "webSearch", "imageView", "imageGeneration"]>;
|
|
57
|
+
readonly id: Schema.NonEmptyString;
|
|
58
|
+
readonly status: Schema.optionalKey<Schema.String>;
|
|
59
|
+
readonly success: Schema.optionalKey<Schema.NullOr<Schema.Boolean>>;
|
|
60
|
+
}>;
|
|
61
|
+
/** The outcome of a turn, used to resume a conversation on Hold or report a session failure. */
|
|
62
|
+
export declare const TurnCompleted: Schema.Struct<{
|
|
63
|
+
readonly turn: Schema.Struct<{
|
|
64
|
+
readonly id: Schema.String;
|
|
65
|
+
readonly status: Schema.Literals<readonly ["completed", "interrupted", "failed", "inProgress"]>;
|
|
66
|
+
readonly error: Schema.NullOr<Schema.Struct<{
|
|
67
|
+
readonly message: Schema.String;
|
|
68
|
+
readonly additionalDetails: Schema.NullOr<Schema.String>;
|
|
69
|
+
}>>;
|
|
70
|
+
}>;
|
|
71
|
+
}>;
|
|
72
|
+
/** A turn error from the app server; if `willRetry` is set, the model provider request is retried, for example `Reconnecting... 2/5`. */
|
|
73
|
+
export declare const ErrorNotification: Schema.Struct<{
|
|
74
|
+
readonly error: Schema.Struct<{
|
|
75
|
+
readonly message: Schema.String;
|
|
76
|
+
readonly additionalDetails: Schema.optionalKey<Schema.NullOr<Schema.String>>;
|
|
77
|
+
}>;
|
|
78
|
+
readonly willRetry: Schema.Boolean;
|
|
79
|
+
readonly turnId: Schema.String;
|
|
80
|
+
}>;
|
|
81
|
+
/** Any notification for one turn, for example an item or a streaming delta. */
|
|
82
|
+
export declare const TurnActivity: Schema.Struct<{
|
|
83
|
+
readonly turnId: Schema.String;
|
|
84
|
+
}>;
|
|
85
|
+
/** Returns the retry message followed by its details in parentheses. */
|
|
86
|
+
export declare const providerRetryMessage: (error: (typeof ErrorNotification.Type)["error"]) => string;
|
|
87
|
+
declare const RateLimitWindow: Schema.Struct<{
|
|
88
|
+
readonly usedPercent: Schema.Number;
|
|
89
|
+
readonly windowDurationMins: Schema.optionalKey<Schema.NullOr<Schema.Number>>;
|
|
90
|
+
readonly resetsAt: Schema.optionalKey<Schema.NullOr<Schema.Number>>;
|
|
91
|
+
}>;
|
|
92
|
+
/** A partial account usage update; omitted windows are also absent in the normalized snapshot. */
|
|
93
|
+
export declare const RateLimitsUpdated: Schema.Struct<{
|
|
94
|
+
readonly rateLimits: Schema.Struct<{
|
|
95
|
+
readonly limitId: Schema.optionalKey<Schema.NullOr<Schema.String>>;
|
|
96
|
+
readonly limitName: Schema.optionalKey<Schema.NullOr<Schema.String>>;
|
|
97
|
+
readonly primary: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
98
|
+
readonly usedPercent: Schema.Number;
|
|
99
|
+
readonly windowDurationMins: Schema.optionalKey<Schema.NullOr<Schema.Number>>;
|
|
100
|
+
readonly resetsAt: Schema.optionalKey<Schema.NullOr<Schema.Number>>;
|
|
101
|
+
}>>>;
|
|
102
|
+
readonly secondary: Schema.optionalKey<Schema.NullOr<Schema.Struct<{
|
|
103
|
+
readonly usedPercent: Schema.Number;
|
|
104
|
+
readonly windowDurationMins: Schema.optionalKey<Schema.NullOr<Schema.Number>>;
|
|
105
|
+
readonly resetsAt: Schema.optionalKey<Schema.NullOr<Schema.Number>>;
|
|
106
|
+
}>>>;
|
|
107
|
+
}>;
|
|
108
|
+
}>;
|
|
109
|
+
/** Decodes a required response. Fails with `SessionOperationError` for `operation` if the data is malformed. */
|
|
110
|
+
export declare const decodeResponse: <S extends Schema.Top>(schema: S, operation: SessionOperationError["operation"], client: CodexClient, label: string, value: Schema.Json) => Effect.Effect<S["Type"], SessionOperationError, S["DecodingServices"]>;
|
|
111
|
+
/** Decodes a notification payload; if it does not decode, logs a warning and returns `None`. */
|
|
112
|
+
export declare const decodeNotification: <S extends Schema.Top>(schema: S, label: string, sessionId: AgentSessionId, value: Schema.Json) => Effect.Effect<Option.Option<S["Type"]>, never, S["DecodingServices"]>;
|
|
113
|
+
/** Returns the transcript tool name for a Codex tool item. */
|
|
114
|
+
export declare const toolName: (item: typeof ToolItem.Type) => string;
|
|
115
|
+
/** Converts a rate-limit window, with reset timestamps in UTC and absent values as `None`. */
|
|
116
|
+
export declare const rateLimitWindow: (window: typeof RateLimitWindow.Type) => CoreRateLimitWindow;
|
|
117
|
+
export {};
|
|
118
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../../src/pi/codex/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,eAAe,IAAI,mBAAmB,EACvC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAY,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,eAAe,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAEnE,KAAK,mBAAmB,GACpB,eAAe,GACf,iBAAiB,GACjB,eAAe,GACf,eAAe,GACf,mBAAmB,CAAC;AAExB,mFAAmF;AACnF,eAAO,MAAM,IAAI,UAAW,mBAAmB,KAAG,MAAM,CAAC,IACiB,CAAC;AAE3E,yFAAyF;AACzF,eAAO,MAAM,iBAAiB;;;;;;;;;EAW5B,CAAC;AACH,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB;;;;;;EAI9B,CAAC;AACH,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB;;;;EAE5B,CAAC;AACH,iFAAiF;AACjF,eAAO,MAAM,gBAAgB;;;;EAI3B,CAAC;AACH,8GAA8G;AAC9G,eAAO,MAAM,eAAe;;;EAG1B,CAAC;AAEH,2EAA2E;AAC3E,eAAO,MAAM,eAAe,SAAU,OAAO,eAAe,CAAC,IAAI,KAAG,MAIvD,CAAC;AACd,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB;;;;;EAK3B,CAAC;AACH,kFAAkF;AAClF,eAAO,MAAM,QAAQ;;;;;EAanB,CAAC;AACH,gGAAgG;AAChG,eAAO,MAAM,aAAa;;;;;;;;;EAWxB,CAAC;AACH,yIAAyI;AACzI,eAAO,MAAM,iBAAiB;;;;;;;EAO5B,CAAC;AACH,+EAA+E;AAC/E,eAAO,MAAM,YAAY;;EAA2C,CAAC;AAErE,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,UAAW,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAG,MAItF,CAAC;AAEF,QAAA,MAAM,eAAe;;;;EAInB,CAAC;AACH,kGAAkG;AAClG,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAO5B,CAAC;AAEH,gHAAgH;AAChH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,CAAC,GAAG,UACzC,CAAC,aACE,qBAAqB,CAAC,WAAW,CAAC,UACrC,WAAW,SACZ,MAAM,SACN,MAAM,CAAC,IAAI,KACjB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAKrE,CAAC;AAEJ,gGAAgG;AAChG,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,MAAM,CAAC,GAAG,UAC7C,CAAC,SACF,MAAM,aACF,cAAc,SAClB,MAAM,CAAC,IAAI,KACjB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAQpE,CAAC;AAEJ,8DAA8D;AAC9D,eAAO,MAAM,QAAQ,SAAU,OAAO,QAAQ,CAAC,IAAI,KAAG,MAiBrD,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,eAAe,WAAY,OAAO,eAAe,CAAC,IAAI,KAAG,mBAKlE,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { HarnessSessionId, AgentSessionId, RateLimitWindow as CoreRateLimitWindow, } from "@usine/core/agent/session";
|
|
2
|
+
import { DateTime, Effect, Option, Schema } from "effect";
|
|
3
|
+
import { SessionOperationError } from "../../runtime.js";
|
|
4
|
+
import { operationError } from "./app-server.js";
|
|
5
|
+
/** Returns typed Codex request parameters as JSON for the app-server transport. */
|
|
6
|
+
export const json = (value) => Schema.decodeUnknownSync(Schema.Json)(JSON.parse(JSON.stringify(value)));
|
|
7
|
+
/** The model catalog page, used to validate the requested model and reasoning effort. */
|
|
8
|
+
export const ModelListResponse = Schema.Struct({
|
|
9
|
+
data: Schema.Array(Schema.Struct({
|
|
10
|
+
id: Schema.String,
|
|
11
|
+
model: Schema.String,
|
|
12
|
+
supportedReasoningEfforts: Schema.optionalKey(Schema.Array(Schema.Struct({ reasoningEffort: Schema.String }))),
|
|
13
|
+
})),
|
|
14
|
+
nextCursor: Schema.NullOr(Schema.String),
|
|
15
|
+
});
|
|
16
|
+
/** The thread ID and effective model returned when a child thread starts. */
|
|
17
|
+
export const ThreadStartResponse = Schema.Struct({
|
|
18
|
+
thread: Schema.Struct({ id: HarnessSessionId }),
|
|
19
|
+
model: Schema.NonEmptyString,
|
|
20
|
+
instructionSources: Schema.Array(Schema.String),
|
|
21
|
+
});
|
|
22
|
+
/** The turn ID, needed to steer or interrupt the turn. */
|
|
23
|
+
export const TurnStartResponse = Schema.Struct({
|
|
24
|
+
turn: Schema.Struct({ id: Schema.NonEmptyString }),
|
|
25
|
+
});
|
|
26
|
+
/** An item notification with its thread and turn IDs; `item` is kept as JSON. */
|
|
27
|
+
export const ItemNotification = Schema.Struct({
|
|
28
|
+
item: Schema.Json,
|
|
29
|
+
threadId: Schema.String,
|
|
30
|
+
turnId: Schema.String,
|
|
31
|
+
});
|
|
32
|
+
/** A user message recorded in the thread: a turn's input, or steered input once the running turn reads it. */
|
|
33
|
+
export const UserMessageItem = Schema.Struct({
|
|
34
|
+
type: Schema.Literal("userMessage"),
|
|
35
|
+
content: Schema.Array(Schema.Json),
|
|
36
|
+
});
|
|
37
|
+
const UserTextInput = Schema.Struct({ type: Schema.Literal("text"), text: Schema.String });
|
|
38
|
+
/** Returns the text of a recorded user message as the executor sent it. */
|
|
39
|
+
export const userMessageText = (item) => item.content
|
|
40
|
+
.filter(Schema.is(UserTextInput))
|
|
41
|
+
.map(({ text }) => text)
|
|
42
|
+
.join("");
|
|
43
|
+
/** A completed assistant message; `phase` distinguishes a final answer from commentary. */
|
|
44
|
+
export const AgentMessageItem = Schema.Struct({
|
|
45
|
+
type: Schema.Literal("agentMessage"),
|
|
46
|
+
id: Schema.NonEmptyString,
|
|
47
|
+
text: Schema.String,
|
|
48
|
+
phase: Schema.optionalKey(Schema.NullOr(Schema.String)),
|
|
49
|
+
});
|
|
50
|
+
/** A recognized tool item, with the fields needed to match starts and results. */
|
|
51
|
+
export const ToolItem = Schema.Struct({
|
|
52
|
+
type: Schema.Literals([
|
|
53
|
+
"commandExecution",
|
|
54
|
+
"fileChange",
|
|
55
|
+
"mcpToolCall",
|
|
56
|
+
"dynamicToolCall",
|
|
57
|
+
"webSearch",
|
|
58
|
+
"imageView",
|
|
59
|
+
"imageGeneration",
|
|
60
|
+
]),
|
|
61
|
+
id: Schema.NonEmptyString,
|
|
62
|
+
status: Schema.optionalKey(Schema.String),
|
|
63
|
+
success: Schema.optionalKey(Schema.NullOr(Schema.Boolean)),
|
|
64
|
+
});
|
|
65
|
+
/** The outcome of a turn, used to resume a conversation on Hold or report a session failure. */
|
|
66
|
+
export const TurnCompleted = Schema.Struct({
|
|
67
|
+
turn: Schema.Struct({
|
|
68
|
+
id: Schema.String,
|
|
69
|
+
status: Schema.Literals(["completed", "interrupted", "failed", "inProgress"]),
|
|
70
|
+
error: Schema.NullOr(Schema.Struct({
|
|
71
|
+
message: Schema.String,
|
|
72
|
+
additionalDetails: Schema.NullOr(Schema.String),
|
|
73
|
+
})),
|
|
74
|
+
}),
|
|
75
|
+
});
|
|
76
|
+
/** A turn error from the app server; if `willRetry` is set, the model provider request is retried, for example `Reconnecting... 2/5`. */
|
|
77
|
+
export const ErrorNotification = Schema.Struct({
|
|
78
|
+
error: Schema.Struct({
|
|
79
|
+
message: Schema.String,
|
|
80
|
+
additionalDetails: Schema.optionalKey(Schema.NullOr(Schema.String)),
|
|
81
|
+
}),
|
|
82
|
+
willRetry: Schema.Boolean,
|
|
83
|
+
turnId: Schema.String,
|
|
84
|
+
});
|
|
85
|
+
/** Any notification for one turn, for example an item or a streaming delta. */
|
|
86
|
+
export const TurnActivity = Schema.Struct({ turnId: Schema.String });
|
|
87
|
+
/** Returns the retry message followed by its details in parentheses. */
|
|
88
|
+
export const providerRetryMessage = (error) => {
|
|
89
|
+
const message = error.message.trim() || "Codex is retrying its model provider";
|
|
90
|
+
const details = error.additionalDetails?.trim() ?? "";
|
|
91
|
+
return details === "" ? message : `${message} (${details})`;
|
|
92
|
+
};
|
|
93
|
+
// Upstream sends partial updates where any field can be absent, so only `usedPercent` is required.
|
|
94
|
+
const RateLimitWindow = Schema.Struct({
|
|
95
|
+
usedPercent: Schema.Number,
|
|
96
|
+
windowDurationMins: Schema.optionalKey(Schema.NullOr(Schema.Number)),
|
|
97
|
+
resetsAt: Schema.optionalKey(Schema.NullOr(Schema.Number)),
|
|
98
|
+
});
|
|
99
|
+
/** A partial account usage update; omitted windows are also absent in the normalized snapshot. */
|
|
100
|
+
export const RateLimitsUpdated = Schema.Struct({
|
|
101
|
+
rateLimits: Schema.Struct({
|
|
102
|
+
limitId: Schema.optionalKey(Schema.NullOr(Schema.String)),
|
|
103
|
+
limitName: Schema.optionalKey(Schema.NullOr(Schema.String)),
|
|
104
|
+
primary: Schema.optionalKey(Schema.NullOr(RateLimitWindow)),
|
|
105
|
+
secondary: Schema.optionalKey(Schema.NullOr(RateLimitWindow)),
|
|
106
|
+
}),
|
|
107
|
+
});
|
|
108
|
+
/** Decodes a required response. Fails with `SessionOperationError` for `operation` if the data is malformed. */
|
|
109
|
+
export const decodeResponse = (schema, operation, client, label, value) => Schema.decodeUnknownEffect(schema)(value).pipe(Effect.mapError((cause) => operationError(operation, client, `Codex returned an invalid ${label}`, cause)));
|
|
110
|
+
/** Decodes a notification payload; if it does not decode, logs a warning and returns `None`. */
|
|
111
|
+
export const decodeNotification = (schema, label, sessionId, value) => Schema.decodeUnknownEffect(schema)(value).pipe(Effect.map(Option.some), Effect.catch((cause) => Effect.logWarning(`Skipping an undecodable Codex ${label}`, { cause, sessionId }).pipe(Effect.as(Option.none()))));
|
|
112
|
+
/** Returns the transcript tool name for a Codex tool item. */
|
|
113
|
+
export const toolName = (item) => {
|
|
114
|
+
switch (item.type) {
|
|
115
|
+
case "commandExecution":
|
|
116
|
+
return "command";
|
|
117
|
+
case "fileChange":
|
|
118
|
+
return "file_change";
|
|
119
|
+
case "mcpToolCall":
|
|
120
|
+
return "mcp_tool";
|
|
121
|
+
case "dynamicToolCall":
|
|
122
|
+
return "dynamic_tool";
|
|
123
|
+
case "webSearch":
|
|
124
|
+
return "web_search";
|
|
125
|
+
case "imageView":
|
|
126
|
+
return "image_view";
|
|
127
|
+
case "imageGeneration":
|
|
128
|
+
return "image_generation";
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
/** Converts a rate-limit window, with reset timestamps in UTC and absent values as `None`. */
|
|
132
|
+
export const rateLimitWindow = (window) => new CoreRateLimitWindow({
|
|
133
|
+
usedPercent: window.usedPercent,
|
|
134
|
+
windowDurationMinutes: Option.fromNullishOr(window.windowDurationMins),
|
|
135
|
+
resetsAt: Option.fromNullishOr(window.resetsAt).pipe(Option.map(DateTime.fromEpochSeconds)),
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=codec.js.map
|