@usine/agents 0.0.0 → 0.1.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.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +28 -1
  3. package/dist/index.d.ts +4 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +4 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/pi/authentication.d.ts +13 -0
  8. package/dist/pi/authentication.d.ts.map +1 -0
  9. package/dist/pi/authentication.js +14 -0
  10. package/dist/pi/authentication.js.map +1 -0
  11. package/dist/pi/children.d.ts +5 -0
  12. package/dist/pi/children.d.ts.map +1 -0
  13. package/dist/pi/children.js +26 -0
  14. package/dist/pi/children.js.map +1 -0
  15. package/dist/pi/claude.d.ts +32 -0
  16. package/dist/pi/claude.d.ts.map +1 -0
  17. package/dist/pi/claude.js +237 -0
  18. package/dist/pi/claude.js.map +1 -0
  19. package/dist/pi/codex/app-server.d.ts +24 -0
  20. package/dist/pi/codex/app-server.d.ts.map +1 -0
  21. package/dist/pi/codex/app-server.js +188 -0
  22. package/dist/pi/codex/app-server.js.map +1 -0
  23. package/dist/pi/codex/codex.d.ts +5 -0
  24. package/dist/pi/codex/codex.d.ts.map +1 -0
  25. package/dist/pi/codex/codex.js +342 -0
  26. package/dist/pi/codex/codex.js.map +1 -0
  27. package/dist/pi/index.d.ts +11 -0
  28. package/dist/pi/index.d.ts.map +1 -0
  29. package/dist/pi/index.js +18 -0
  30. package/dist/pi/index.js.map +1 -0
  31. package/dist/pi/pi.d.ts +7 -0
  32. package/dist/pi/pi.d.ts.map +1 -0
  33. package/dist/pi/pi.js +273 -0
  34. package/dist/pi/pi.js.map +1 -0
  35. package/dist/pi/sdk.d.ts +66 -0
  36. package/dist/pi/sdk.d.ts.map +1 -0
  37. package/dist/pi/sdk.js +154 -0
  38. package/dist/pi/sdk.js.map +1 -0
  39. package/dist/pi/session.d.ts +46 -0
  40. package/dist/pi/session.d.ts.map +1 -0
  41. package/dist/pi/session.js +180 -0
  42. package/dist/pi/session.js.map +1 -0
  43. package/dist/pi/subagents.d.ts +23 -0
  44. package/dist/pi/subagents.d.ts.map +1 -0
  45. package/dist/pi/subagents.js +83 -0
  46. package/dist/pi/subagents.js.map +1 -0
  47. package/dist/prompt.d.ts +22 -0
  48. package/dist/prompt.d.ts.map +1 -0
  49. package/dist/prompt.js +42 -0
  50. package/dist/prompt.js.map +1 -0
  51. package/dist/protocol/codex.d.ts +56 -0
  52. package/dist/protocol/codex.d.ts.map +1 -0
  53. package/dist/protocol/codex.js +2 -0
  54. package/dist/protocol/codex.js.map +1 -0
  55. package/dist/runtime.d.ts +114 -0
  56. package/dist/runtime.d.ts.map +1 -0
  57. package/dist/runtime.js +96 -0
  58. package/dist/runtime.js.map +1 -0
  59. package/package.json +54 -4
@@ -0,0 +1,188 @@
1
+ import { Cause, Context, Deferred, Effect, Layer, Option, Queue, Ref, Schema, Scope, Stream, } from "effect";
2
+ import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
3
+ import { homedir } from "node:os";
4
+ import { SessionOperationError } from "../../runtime.js";
5
+ /** Process seam for the Codex app-server transport. */
6
+ export class CodexAppServer extends Context.Service()("@usine/agents/pi/CodexAppServer") {
7
+ }
8
+ const RpcSuccessResponse = Schema.Struct({
9
+ id: Schema.Int,
10
+ result: Schema.Json,
11
+ });
12
+ const RpcErrorResponse = Schema.Struct({
13
+ id: Schema.Int,
14
+ error: Schema.Struct({
15
+ code: Schema.Number,
16
+ message: Schema.String,
17
+ data: Schema.optionalKey(Schema.Json),
18
+ }),
19
+ });
20
+ const RpcResponse = Schema.Union([RpcSuccessResponse, RpcErrorResponse]);
21
+ const RpcMessage = Schema.Struct({
22
+ method: Schema.String,
23
+ params: Schema.optionalKey(Schema.Json),
24
+ id: Schema.optionalKey(Schema.Union([Schema.Number, Schema.String])),
25
+ });
26
+ const decodeLine = Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Json));
27
+ const encoder = new TextEncoder();
28
+ const RPC_TIMEOUT = "60 seconds";
29
+ const STDERR_TAIL_LINES = 5;
30
+ const preview = (line) => (line.length > 200 ? `${line.slice(0, 200)}…` : line);
31
+ export const operationError = (operation, request, message, cause) => new SessionOperationError({
32
+ operation,
33
+ sessionId: Option.some(request.session.id),
34
+ message,
35
+ cause,
36
+ });
37
+ const repositoryTrustOverride = (cwd) => `projects.${JSON.stringify(cwd)}.trust_level="untrusted"`;
38
+ const disableRecursiveAgentsOverride = "features.multi_agent=false";
39
+ export const codexAppServerCommand = (cwd, stdin) => {
40
+ const options = {
41
+ // Starting outside the worktree prevents process startup from
42
+ // discovering repository-owned config before thread trust is set.
43
+ cwd: homedir(),
44
+ // The app-server must die with the run host: staying in the host's
45
+ // process group keeps the executor's hard kill able to reap it, and the
46
+ // bounded SIGTERM window implements ADR 0006's grace-then-force stop.
47
+ detached: false,
48
+ forceKillAfter: "5 seconds",
49
+ };
50
+ return ChildProcess.make("codex", [
51
+ "app-server",
52
+ "--stdio",
53
+ "-c",
54
+ repositoryTrustOverride(cwd),
55
+ "-c",
56
+ disableRecursiveAgentsOverride,
57
+ ], stdin === undefined ? options : { ...options, stdin });
58
+ };
59
+ const makeCodexAppServer = Effect.gen(function* () {
60
+ const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
61
+ const open = Effect.fn("CodexAppServer.open")(function* (request) {
62
+ const input = yield* Queue.make();
63
+ const notifications = yield* Queue.make();
64
+ const pending = yield* Ref.make(new Map());
65
+ const nextId = yield* Ref.make(1);
66
+ const closing = yield* Ref.make(false);
67
+ const failure = yield* Ref.make(Option.none());
68
+ const stderrTail = yield* Ref.make([]);
69
+ const handle = yield* spawner
70
+ .spawn(codexAppServerCommand(request.cwd, {
71
+ stream: Stream.fromQueue(input),
72
+ endOnDone: true,
73
+ }))
74
+ .pipe(Effect.mapError((cause) => operationError("launch", request, "Codex app-server failed to start", cause)));
75
+ const write = (message, operation) => Queue.offer(input, encoder.encode(`${JSON.stringify(message)}\n`)).pipe(Effect.flatMap((accepted) => accepted
76
+ ? Effect.void
77
+ : Effect.fail(operationError(operation, request, "Codex app-server input is closed", new Error("input queue closed")))), Effect.mapError((cause) => cause instanceof SessionOperationError
78
+ ? cause
79
+ : operationError(operation, request, "Could not write to Codex app-server", cause)));
80
+ const failAll = Effect.fn("CodexAppServer.failAll")(function* (error) {
81
+ yield* Ref.update(failure, Option.orElseSome(() => error));
82
+ const waiting = yield* Ref.getAndSet(pending, new Map());
83
+ for (const entry of waiting.values())
84
+ yield* Deferred.fail(entry.response, error);
85
+ yield* Queue.fail(notifications, error);
86
+ });
87
+ // One effect per stdout line, deliberately span-free: a line is not an
88
+ // operation, and unrecognized input is logged and skipped so a stray
89
+ // frame can never fail the session (ADR 0002 would retry it as infra).
90
+ const routeLine = (line) => Effect.gen(function* () {
91
+ if (line.trim().length === 0)
92
+ return;
93
+ const decoded = yield* decodeLine(line).pipe(Effect.catch((cause) => Effect.logWarning("Skipping a non-JSON Codex app-server line", {
94
+ cause,
95
+ line: preview(line),
96
+ sessionId: request.session.id,
97
+ }).pipe(Effect.as(undefined))));
98
+ if (decoded === undefined)
99
+ return;
100
+ if (Schema.is(RpcResponse)(decoded)) {
101
+ const found = yield* Ref.modify(pending, (entries) => {
102
+ const entry = entries.get(decoded.id);
103
+ if (entry === undefined)
104
+ return [Option.none(), entries];
105
+ const updated = new Map(entries);
106
+ updated.delete(decoded.id);
107
+ return [Option.some(entry), updated];
108
+ });
109
+ if (Option.isNone(found)) {
110
+ return yield* Effect.logDebug("Ignoring a Codex response with no waiting request", {
111
+ id: decoded.id,
112
+ sessionId: request.session.id,
113
+ });
114
+ }
115
+ if (Schema.is(RpcErrorResponse)(decoded)) {
116
+ return yield* Deferred.fail(found.value.response, operationError(found.value.operation, request, `Codex app-server rejected ${decoded.error.message}`, decoded.error));
117
+ }
118
+ return yield* Deferred.succeed(found.value.response, decoded.result);
119
+ }
120
+ if (!Schema.is(RpcMessage)(decoded)) {
121
+ return yield* Effect.logWarning("Skipping an unknown Codex JSON-RPC shape", {
122
+ line: preview(line),
123
+ sessionId: request.session.id,
124
+ });
125
+ }
126
+ if (decoded.id !== undefined) {
127
+ yield* Effect.logWarning("Codex app-server requested unsupported client input", {
128
+ method: decoded.method,
129
+ sessionId: request.session.id,
130
+ });
131
+ return yield* write({
132
+ id: decoded.id,
133
+ error: { code: -32601, message: "usine runs Codex headlessly" },
134
+ }, "stream");
135
+ }
136
+ yield* Queue.offer(notifications, {
137
+ method: decoded.method,
138
+ params: decoded.params ?? null,
139
+ });
140
+ });
141
+ yield* handle.stdout.pipe(Stream.decodeText(), Stream.splitLines, Stream.runForEach(routeLine), Effect.flatMap(() => Ref.get(closing).pipe(Effect.flatMap((closed) => closed
142
+ ? Effect.void
143
+ : failAll(operationError("stream", request, "Codex app-server output closed unexpectedly", new Error("unexpected end of output")))))), Effect.catch((error) => failAll(error instanceof SessionOperationError
144
+ ? error
145
+ : operationError("stream", request, "Could not read Codex app-server output", error))), Effect.forkScoped);
146
+ yield* handle.stderr.pipe(Stream.decodeText(), Stream.splitLines, Stream.runForEach((line) => line.trim().length === 0
147
+ ? Effect.void
148
+ : Effect.logDebug("Codex app-server stderr", {
149
+ line: preview(line),
150
+ sessionId: request.session.id,
151
+ }).pipe(Effect.andThen(Ref.update(stderrTail, (tail) => [...tail, line].slice(-STDERR_TAIL_LINES))))), Effect.catch((cause) => failAll(operationError("stream", request, "Could not read Codex app-server diagnostics", cause))), Effect.forkScoped);
152
+ yield* handle.exitCode.pipe(Effect.flatMap((exitCode) => Effect.all([Ref.get(closing), Ref.get(stderrTail)]).pipe(Effect.flatMap(([closed, stderr]) => closed
153
+ ? Effect.void
154
+ : failAll(operationError("stream", request, `Codex app-server exited with code ${String(exitCode)}`, { exitCode, stderr }))))), Effect.catch((cause) => failAll(operationError("stream", request, "Could not monitor Codex app-server", cause))), Effect.forkScoped);
155
+ yield* Effect.addFinalizer(() => Effect.logDebug("Closing Codex app-server", { sessionId: request.session.id }).pipe(Effect.andThen(Ref.set(closing, true)), Effect.andThen(Queue.end(input)), Effect.andThen(handle.kill()), Effect.catch((cause) => Effect.logWarning("Could not stop Codex app-server cleanly", {
156
+ cause,
157
+ sessionId: request.session.id,
158
+ }))));
159
+ const requestRpc = (operation, method, params) => Effect.gen(function* () {
160
+ const failed = yield* Ref.get(failure);
161
+ if (Option.isSome(failed)) {
162
+ return yield* operationError(operation, request, "Codex app-server connection already failed", failed.value);
163
+ }
164
+ const id = yield* Ref.getAndUpdate(nextId, (current) => current + 1);
165
+ const response = yield* Deferred.make();
166
+ yield* Ref.update(pending, (entries) => new Map(entries).set(id, { operation, response }));
167
+ const forget = Ref.update(pending, (entries) => {
168
+ const updated = new Map(entries);
169
+ updated.delete(id);
170
+ return updated;
171
+ });
172
+ yield* write({ id, method, params }, operation).pipe(Effect.tapError(() => forget));
173
+ return yield* Deferred.await(response).pipe(Effect.timeoutOrElse({
174
+ duration: RPC_TIMEOUT,
175
+ orElse: () => forget.pipe(Effect.andThen(operationError(operation, request, `Codex app-server did not answer ${method} within ${RPC_TIMEOUT}`, new Error("request timed out")))),
176
+ }));
177
+ });
178
+ const notify = (operation, method, params) => write({ method, params }, operation);
179
+ return {
180
+ notifications: Stream.fromQueue(notifications),
181
+ request: requestRpc,
182
+ notify,
183
+ };
184
+ });
185
+ return CodexAppServer.of({ open });
186
+ });
187
+ export const codexAppServerLive = Layer.effect(CodexAppServer, makeCodexAppServer);
188
+ //# sourceMappingURL=app-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-server.js","sourceRoot":"","sources":["../../../src/pi/codex/app-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Layer } from "effect";
2
+ import { CodexChildBackend } from "../../runtime.ts";
3
+ import { CodexAppServer } from "./app-server.ts";
4
+ export declare const codexChildBackendLayer: Layer.Layer<CodexChildBackend, never, CodexAppServer>;
5
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/pi/codex/codex.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,EAA0B,MAAM,QAAQ,CAAC;AASnF,OAAO,EAEL,iBAAiB,EAMlB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAkB,MAAM,iBAAiB,CAAC;AAqdjE,eAAO,MAAM,sBAAsB,uDAAkD,CAAC"}
@@ -0,0 +1,342 @@
1
+ import { Agent } from "@usine/core";
2
+ import { DateTime, Deferred, Effect, Layer, Option, Schema, Stream } from "effect";
3
+ import { AgentResultError, CodexChildBackend, SessionOperationError, UnknownModelError, UnsupportedEffortError, } from "../../runtime.js";
4
+ import { sessionChannel } from "../session.js";
5
+ import { CodexAppServer, operationError } from "./app-server.js";
6
+ const json = (value) => Schema.decodeUnknownSync(Schema.Json)(JSON.parse(JSON.stringify(value)));
7
+ const ModelListResponse = Schema.Struct({
8
+ data: Schema.Array(Schema.Struct({
9
+ id: Schema.String,
10
+ model: Schema.String,
11
+ supportedReasoningEfforts: Schema.optionalKey(Schema.Array(Schema.Struct({ reasoningEffort: Schema.String }))),
12
+ })),
13
+ nextCursor: Schema.NullOr(Schema.String),
14
+ });
15
+ const ThreadStartResponse = Schema.Struct({
16
+ thread: Schema.Struct({ id: Schema.NonEmptyString }),
17
+ model: Schema.NonEmptyString,
18
+ instructionSources: Schema.Array(Schema.String),
19
+ });
20
+ const TurnStartResponse = Schema.Struct({
21
+ turn: Schema.Struct({ id: Schema.NonEmptyString }),
22
+ });
23
+ const ItemNotification = Schema.Struct({
24
+ item: Schema.Json,
25
+ threadId: Schema.String,
26
+ turnId: Schema.String,
27
+ });
28
+ const AgentMessageItem = Schema.Struct({
29
+ type: Schema.Literal("agentMessage"),
30
+ id: Schema.NonEmptyString,
31
+ text: Schema.String,
32
+ phase: Schema.optionalKey(Schema.NullOr(Schema.String)),
33
+ });
34
+ const ToolItem = Schema.Struct({
35
+ type: Schema.Literals([
36
+ "commandExecution",
37
+ "fileChange",
38
+ "mcpToolCall",
39
+ "dynamicToolCall",
40
+ "webSearch",
41
+ "imageView",
42
+ "imageGeneration",
43
+ ]),
44
+ id: Schema.NonEmptyString,
45
+ status: Schema.optionalKey(Schema.String),
46
+ success: Schema.optionalKey(Schema.NullOr(Schema.Boolean)),
47
+ });
48
+ const TurnCompleted = Schema.Struct({
49
+ turn: Schema.Struct({
50
+ id: Schema.String,
51
+ status: Schema.Literals(["completed", "interrupted", "failed", "inProgress"]),
52
+ error: Schema.NullOr(Schema.Struct({
53
+ message: Schema.String,
54
+ additionalDetails: Schema.NullOr(Schema.String),
55
+ })),
56
+ }),
57
+ });
58
+ // Upstream documents this notification as a sparse rolling update: any
59
+ // account metadata may be absent, so every field except the load figure
60
+ // itself is optional here.
61
+ const RateLimitWindow = Schema.Struct({
62
+ usedPercent: Schema.Number,
63
+ windowDurationMins: Schema.optionalKey(Schema.NullOr(Schema.Number)),
64
+ resetsAt: Schema.optionalKey(Schema.NullOr(Schema.Number)),
65
+ });
66
+ const RateLimitsUpdated = Schema.Struct({
67
+ rateLimits: Schema.Struct({
68
+ limitId: Schema.optionalKey(Schema.NullOr(Schema.String)),
69
+ limitName: Schema.optionalKey(Schema.NullOr(Schema.String)),
70
+ primary: Schema.optionalKey(Schema.NullOr(RateLimitWindow)),
71
+ secondary: Schema.optionalKey(Schema.NullOr(RateLimitWindow)),
72
+ }),
73
+ });
74
+ const decodeResponse = (schema, operation, request, label, value) => Schema.decodeUnknownEffect(schema)(value).pipe(Effect.mapError((cause) => operationError(operation, request, `Codex returned an invalid ${label}`, cause)));
75
+ /** Decodes one notification payload, logging and skipping instead of failing the session. */
76
+ 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()))));
77
+ const toolName = (item) => {
78
+ switch (item.type) {
79
+ case "commandExecution":
80
+ return "command";
81
+ case "fileChange":
82
+ return "file_change";
83
+ case "mcpToolCall":
84
+ return "mcp_tool";
85
+ case "dynamicToolCall":
86
+ return "dynamic_tool";
87
+ case "webSearch":
88
+ return "web_search";
89
+ case "imageView":
90
+ return "image_view";
91
+ case "imageGeneration":
92
+ return "image_generation";
93
+ }
94
+ };
95
+ const rateLimitWindow = (window) => new Agent.RateLimitWindow({
96
+ usedPercent: window.usedPercent,
97
+ windowDurationMinutes: Option.fromNullishOr(window.windowDurationMins),
98
+ resetsAt: Option.fromNullishOr(window.resetsAt).pipe(Option.map(DateTime.fromEpochSeconds)),
99
+ });
100
+ /** Server pushes that must reach the operator's logs even though no session event carries them. */
101
+ const DIAGNOSTIC_METHODS = new Set([
102
+ "error",
103
+ "warning",
104
+ "configWarning",
105
+ "deprecationNotice",
106
+ "guardianWarning",
107
+ "model/rerouted",
108
+ ]);
109
+ const makeCodexChild = Effect.gen(function* () {
110
+ const appServer = yield* CodexAppServer;
111
+ const launch = Effect.fn("CodexChildBackend.launch")(function* (request) {
112
+ yield* Effect.annotateCurrentSpan({
113
+ agent: request.session.agent,
114
+ effort: request.session.brain.effort,
115
+ harness: request.session.brain.harness,
116
+ model: request.session.brain.model,
117
+ parentSessionId: request.session.parentId,
118
+ sessionId: request.session.id,
119
+ });
120
+ yield* Effect.logInfo("Launching Codex child session");
121
+ const connection = yield* appServer.open(request);
122
+ const initialize = {
123
+ clientInfo: { name: "usine", title: "usine", version: "0.0.1" },
124
+ capabilities: null,
125
+ };
126
+ yield* connection.request("launch", "initialize", json(initialize));
127
+ yield* connection.notify("launch", "initialized", {});
128
+ const models = [];
129
+ let cursor = null;
130
+ do {
131
+ const params = { cursor, includeHidden: true, limit: 100 };
132
+ const response = yield* connection.request("launch", "model/list", json(params));
133
+ const page = yield* decodeResponse(ModelListResponse, "launch", request, "model list", response);
134
+ models.push(...page.data);
135
+ cursor = page.nextCursor;
136
+ } while (cursor !== null);
137
+ const requestedModel = request.session.brain.model;
138
+ const catalogModel = models.find((model) => model.id === requestedModel || model.model === requestedModel);
139
+ if (catalogModel === undefined) {
140
+ yield* Effect.logError("Codex child rejected an unknown model", { model: requestedModel });
141
+ return yield* new UnknownModelError({
142
+ harness: "codex",
143
+ model: requestedModel,
144
+ message: `Codex does not expose model ${requestedModel}`,
145
+ });
146
+ }
147
+ const effort = request.session.brain.effort === "off" ? "none" : request.session.brain.effort;
148
+ const supportedEfforts = catalogModel.supportedReasoningEfforts;
149
+ if (supportedEfforts !== undefined &&
150
+ supportedEfforts.length > 0 &&
151
+ !supportedEfforts.some((option) => option.reasoningEffort === effort)) {
152
+ yield* Effect.logError("Codex child rejected an unsupported effort", {
153
+ effort: request.session.brain.effort,
154
+ model: requestedModel,
155
+ supported: supportedEfforts.map((option) => option.reasoningEffort),
156
+ });
157
+ return yield* new UnsupportedEffortError({
158
+ harness: "codex",
159
+ model: requestedModel,
160
+ effort: request.session.brain.effort,
161
+ message: `Codex model ${requestedModel} does not support effort ${effort}`,
162
+ });
163
+ }
164
+ const threadParams = {
165
+ model: requestedModel,
166
+ allowProviderModelFallback: false,
167
+ cwd: request.cwd,
168
+ approvalPolicy: "never",
169
+ sandbox: "danger-full-access",
170
+ ephemeral: true,
171
+ serviceName: "usine",
172
+ };
173
+ const threadJson = yield* connection.request("launch", "thread/start", json(threadParams));
174
+ const thread = yield* decodeResponse(ThreadStartResponse, "launch", request, "thread start response", threadJson);
175
+ yield* Effect.logDebug("Codex child started a thread", {
176
+ instructionSources: thread.instructionSources.length,
177
+ model: thread.model,
178
+ sessionId: request.session.id,
179
+ });
180
+ const session = new Agent.ChildSession({
181
+ id: request.session.id,
182
+ parentId: request.session.parentId,
183
+ agent: request.session.agent,
184
+ brain: new Agent.BrainSpec({
185
+ harness: "codex",
186
+ model: Agent.ModelId.make(thread.model),
187
+ effort: request.session.brain.effort,
188
+ }),
189
+ });
190
+ const channel = yield* sessionChannel({
191
+ label: "Codex child session",
192
+ sessionId: session.id,
193
+ });
194
+ yield* channel.emit(new Agent.SessionStarted({ session }));
195
+ const turnParams = {
196
+ threadId: thread.thread.id,
197
+ input: [{ type: "text", text: request.prompt, text_elements: [] }],
198
+ cwd: request.cwd,
199
+ approvalPolicy: "never",
200
+ sandboxPolicy: { type: "dangerFullAccess" },
201
+ effort,
202
+ };
203
+ const turnJson = yield* connection.request("stream", "turn/start", json(turnParams));
204
+ const turn = yield* decodeResponse(TurnStartResponse, "stream", request, "turn start response", turnJson);
205
+ let lastText;
206
+ let finalText;
207
+ const consume = connection.notifications.pipe(Stream.runForEach(({ method, params }) => Effect.gen(function* () {
208
+ if (method === "item/started") {
209
+ const notification = yield* decodeNotification(ItemNotification, "item notification", session.id, params);
210
+ if (Option.isNone(notification))
211
+ return;
212
+ if (notification.value.turnId !== turn.turn.id) {
213
+ return yield* Effect.logDebug("Skipping a Codex item from another turn", {
214
+ sessionId: session.id,
215
+ turnId: notification.value.turnId,
216
+ });
217
+ }
218
+ if (!Schema.is(ToolItem)(notification.value.item))
219
+ return;
220
+ return yield* channel.emit(new Agent.ToolStarted({
221
+ session,
222
+ callId: notification.value.item.id,
223
+ tool: toolName(notification.value.item),
224
+ input: notification.value.item,
225
+ }));
226
+ }
227
+ if (method === "item/completed") {
228
+ const notification = yield* decodeNotification(ItemNotification, "item notification", session.id, params);
229
+ if (Option.isNone(notification))
230
+ return;
231
+ if (notification.value.turnId !== turn.turn.id) {
232
+ return yield* Effect.logDebug("Skipping a Codex item from another turn", {
233
+ sessionId: session.id,
234
+ turnId: notification.value.turnId,
235
+ });
236
+ }
237
+ const item = notification.value.item;
238
+ if (Schema.is(AgentMessageItem)(item)) {
239
+ const text = item.text.trim();
240
+ if (text.length === 0)
241
+ return;
242
+ lastText = text;
243
+ if (item.phase === "final_answer")
244
+ finalText = text;
245
+ return yield* channel.emit(new Agent.TextOutput({ session, text }));
246
+ }
247
+ if (!Schema.is(ToolItem)(item))
248
+ return;
249
+ return yield* channel.emit(new Agent.ToolFinished({
250
+ session,
251
+ callId: item.id,
252
+ tool: toolName(item),
253
+ output: item,
254
+ isError: item.status === "failed" ||
255
+ item.status === "declined" ||
256
+ item.success === false,
257
+ }));
258
+ }
259
+ if (method === "account/rateLimits/updated") {
260
+ const notification = yield* decodeNotification(RateLimitsUpdated, "rate-limit notification", session.id, params);
261
+ if (Option.isNone(notification))
262
+ return;
263
+ const snapshot = notification.value.rateLimits;
264
+ return yield* channel.emit(new Agent.PoolRateLimitsUpdated({
265
+ session,
266
+ // Workers provision Codex children on ChatGPT-plan login
267
+ // state (ADR 0005); an API-key login would misattribute
268
+ // these windows, and preflighting it is issue #60's scope.
269
+ pool: "chatgptPlan",
270
+ rateLimits: new Agent.RateLimitsSnapshot({
271
+ limitId: Option.fromNullishOr(snapshot.limitId),
272
+ limitName: Option.fromNullishOr(snapshot.limitName),
273
+ primary: Option.fromNullishOr(snapshot.primary).pipe(Option.map(rateLimitWindow)),
274
+ secondary: Option.fromNullishOr(snapshot.secondary).pipe(Option.map(rateLimitWindow)),
275
+ }),
276
+ }));
277
+ }
278
+ if (method === "turn/completed") {
279
+ const completed = yield* decodeResponse(TurnCompleted, "stream", request, "turn completion", params);
280
+ if (completed.turn.id !== turn.turn.id) {
281
+ return yield* Effect.logDebug("Skipping another turn's completion", {
282
+ sessionId: session.id,
283
+ turnId: completed.turn.id,
284
+ });
285
+ }
286
+ if (completed.turn.status === "completed") {
287
+ return yield* channel.finish(session, finalText ?? lastText ?? "Codex child session completed");
288
+ }
289
+ const detail = completed.turn.error?.message ??
290
+ (completed.turn.status === "interrupted"
291
+ ? "Codex child session was interrupted"
292
+ : "Codex child session failed");
293
+ return yield* channel.fail(new AgentResultError({
294
+ sessionId: Option.some(session.id),
295
+ message: detail,
296
+ }));
297
+ }
298
+ if (DIAGNOSTIC_METHODS.has(method)) {
299
+ return yield* Effect.logWarning("Codex reported a diagnostic", {
300
+ method,
301
+ params,
302
+ sessionId: session.id,
303
+ });
304
+ }
305
+ // Streaming deltas re-deliver content the completed items carry.
306
+ if (method.toLowerCase().includes("delta"))
307
+ return;
308
+ yield* Effect.logDebug("Ignoring an unhandled Codex notification", {
309
+ method,
310
+ sessionId: session.id,
311
+ });
312
+ })), Effect.flatMap(() => channel.isTerminal.pipe(Effect.flatMap((terminal) => terminal
313
+ ? Effect.void
314
+ : channel.fail(operationError("stream", request, "Codex notification stream closed without a result", new Error("unexpected end of notifications")))))), Effect.catch((error) => channel.fail(error)));
315
+ yield* Effect.forkScoped(consume);
316
+ const steer = Effect.fn("CodexChildBackend.steer")((message) => {
317
+ const params = {
318
+ threadId: thread.thread.id,
319
+ expectedTurnId: turn.turn.id,
320
+ input: [{ type: "text", text: message, text_elements: [] }],
321
+ };
322
+ return Effect.logDebug("Steering Codex child session", { sessionId: session.id }).pipe(Effect.andThen(connection.request("steer", "turn/steer", json(params))), Effect.asVoid);
323
+ });
324
+ const interruptParams = {
325
+ threadId: thread.thread.id,
326
+ turnId: turn.turn.id,
327
+ };
328
+ const interrupt = Effect.logInfo("Interrupting Codex child session", {
329
+ sessionId: session.id,
330
+ }).pipe(Effect.andThen(connection.request("interrupt", "turn/interrupt", json(interruptParams))), Effect.asVoid);
331
+ return {
332
+ session,
333
+ events: Stream.fromQueue(channel.events),
334
+ interrupt,
335
+ result: Deferred.await(channel.result),
336
+ steer,
337
+ };
338
+ });
339
+ return CodexChildBackend.of({ launch });
340
+ });
341
+ export const codexChildBackendLayer = Layer.effect(CodexChildBackend, makeCodexChild);
342
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/pi/codex/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /** Node-only Pi parent plus all harness child adapters. */
2
+ import { Layer } from "effect";
3
+ export * from "./claude.ts";
4
+ export * from "./children.ts";
5
+ export * from "./codex/app-server.ts";
6
+ export * from "./codex/codex.ts";
7
+ export * from "./pi.ts";
8
+ export * from "./subagents.ts";
9
+ /** Production in-process agent runtime: Pi parent with the three harness child backends. */
10
+ export declare const layer: Layer.Layer<import("../runtime.ts").AgentRuntime, never, import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pi/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAE3D,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAO/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAW/B,4FAA4F;AAC5F,eAAO,MAAM,KAAK,qIAAuE,CAAC"}
@@ -0,0 +1,18 @@
1
+ /** Node-only Pi parent plus all harness child adapters. */
2
+ import { Layer } from "effect";
3
+ import { claudeChildBackendLayer, claudeSdkLive } from "./claude.js";
4
+ import { childDispatcherLayer } from "./children.js";
5
+ import { codexAppServerLive } from "./codex/app-server.js";
6
+ import { codexChildBackendLayer } from "./codex/codex.js";
7
+ import { piChildBackendLayer, piParentLayer, piSdkLive } from "./pi.js";
8
+ export * from "./claude.js";
9
+ export * from "./children.js";
10
+ export * from "./codex/app-server.js";
11
+ export * from "./codex/codex.js";
12
+ export * from "./pi.js";
13
+ export * from "./subagents.js";
14
+ const childImplementations = Layer.merge(claudeChildBackendLayer.pipe(Layer.provide(claudeSdkLive)), Layer.merge(codexChildBackendLayer.pipe(Layer.provide(codexAppServerLive)), piChildBackendLayer.pipe(Layer.provide(piSdkLive))));
15
+ const childLive = childDispatcherLayer.pipe(Layer.provide(childImplementations));
16
+ /** Production in-process agent runtime: Pi parent with the three harness child backends. */
17
+ export const layer = piParentLayer.pipe(Layer.provide(Layer.merge(piSdkLive, childLive)));
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pi/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAE3D,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAExE,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAE/B,MAAM,oBAAoB,GAAG,KAAK,CAAC,KAAK,CACtC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EAC1D,KAAK,CAAC,KAAK,CACT,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,EAC9D,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnD,CACF,CAAC;AACF,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAEjF,4FAA4F;AAC5F,MAAM,CAAC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Layer } from "effect";
2
+ import { AgentRuntime, ChildBackend, PiChildBackend } from "../runtime.ts";
3
+ import { PiSdk } from "./sdk.ts";
4
+ export { PiSdk, piParentSessionToolPolicy, piSdkLive, type PiSession, type PiSessionEvent, type PiStartOptions, type PiStartResult, } from "./sdk.ts";
5
+ export declare const piParentLayer: Layer.Layer<AgentRuntime, never, ChildBackend | PiSdk>;
6
+ export declare const piChildBackendLayer: Layer.Layer<PiChildBackend, never, PiSdk>;
7
+ //# sourceMappingURL=pi.d.ts.map