@shivaedev/agent-codex 0.1.0 → 0.3.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 (188) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +47 -1
  3. package/dist/adapters/Request.d.ts +4 -0
  4. package/dist/adapters/Request.d.ts.map +1 -0
  5. package/dist/adapters/Request.js +2 -0
  6. package/dist/adapters/Request.js.map +1 -0
  7. package/dist/adapters/UserMessageItem.d.ts +22 -0
  8. package/dist/adapters/UserMessageItem.d.ts.map +1 -0
  9. package/dist/adapters/UserMessageItem.js +24 -0
  10. package/dist/adapters/UserMessageItem.js.map +1 -0
  11. package/dist/adapters/attributed.d.ts +6 -0
  12. package/dist/adapters/attributed.d.ts.map +1 -0
  13. package/dist/adapters/attributed.js +17 -0
  14. package/dist/adapters/attributed.js.map +1 -0
  15. package/dist/adapters/backend.d.ts +5 -0
  16. package/dist/adapters/backend.d.ts.map +1 -0
  17. package/dist/adapters/backend.js +23 -0
  18. package/dist/adapters/backend.js.map +1 -0
  19. package/dist/adapters/census.d.ts +4 -0
  20. package/dist/adapters/census.d.ts.map +1 -0
  21. package/dist/adapters/census.js +10 -0
  22. package/dist/adapters/census.js.map +1 -0
  23. package/dist/adapters/codexFailure.d.ts +3 -0
  24. package/dist/adapters/codexFailure.d.ts.map +1 -0
  25. package/dist/adapters/codexFailure.js +5 -0
  26. package/dist/adapters/codexFailure.js.map +1 -0
  27. package/dist/adapters/configuredBackend.d.ts +6 -0
  28. package/dist/adapters/configuredBackend.d.ts.map +1 -0
  29. package/dist/adapters/configuredBackend.js +3 -0
  30. package/dist/adapters/configuredBackend.js.map +1 -0
  31. package/dist/adapters/connect.d.ts +11 -0
  32. package/dist/adapters/connect.d.ts.map +1 -0
  33. package/dist/adapters/connect.js +100 -0
  34. package/dist/adapters/connect.js.map +1 -0
  35. package/dist/adapters/delivery.d.ts +18 -0
  36. package/dist/adapters/delivery.d.ts.map +1 -0
  37. package/dist/adapters/delivery.js +115 -0
  38. package/dist/adapters/delivery.js.map +1 -0
  39. package/dist/adapters/deliveryState.d.ts +31 -0
  40. package/dist/adapters/deliveryState.d.ts.map +1 -0
  41. package/dist/adapters/deliveryState.js +29 -0
  42. package/dist/adapters/deliveryState.js.map +1 -0
  43. package/dist/adapters/engine.d.ts +8 -0
  44. package/dist/adapters/engine.d.ts.map +1 -0
  45. package/dist/adapters/engine.js +9 -0
  46. package/dist/adapters/engine.js.map +1 -0
  47. package/dist/adapters/features.d.ts +726 -0
  48. package/dist/adapters/features.d.ts.map +1 -0
  49. package/dist/adapters/features.js +46 -0
  50. package/dist/adapters/features.js.map +1 -0
  51. package/dist/adapters/handshake.d.ts +5 -0
  52. package/dist/adapters/handshake.d.ts.map +1 -0
  53. package/dist/adapters/handshake.js +30 -0
  54. package/dist/adapters/handshake.js.map +1 -0
  55. package/dist/adapters/initializeCodex.d.ts +770 -0
  56. package/dist/adapters/initializeCodex.d.ts.map +1 -0
  57. package/dist/adapters/initializeCodex.js +8 -0
  58. package/dist/adapters/initializeCodex.js.map +1 -0
  59. package/dist/adapters/initializeEngine.d.ts +774 -0
  60. package/dist/adapters/initializeEngine.d.ts.map +1 -0
  61. package/dist/adapters/initializeEngine.js +63 -0
  62. package/dist/adapters/initializeEngine.js.map +1 -0
  63. package/dist/adapters/items.d.ts +7 -0
  64. package/dist/adapters/items.d.ts.map +1 -0
  65. package/dist/adapters/items.js +105 -0
  66. package/dist/adapters/items.js.map +1 -0
  67. package/dist/adapters/mapping.d.ts +9 -0
  68. package/dist/adapters/mapping.d.ts.map +1 -0
  69. package/dist/adapters/mapping.js +57 -0
  70. package/dist/adapters/mapping.js.map +1 -0
  71. package/dist/adapters/process.d.ts +15 -0
  72. package/dist/adapters/process.d.ts.map +1 -0
  73. package/dist/adapters/process.js +55 -0
  74. package/dist/adapters/process.js.map +1 -0
  75. package/dist/adapters/protocol.d.ts +178 -0
  76. package/dist/adapters/protocol.d.ts.map +1 -0
  77. package/dist/adapters/protocol.js +97 -0
  78. package/dist/adapters/protocol.js.map +1 -0
  79. package/dist/adapters/protocolItems.d.ts +89 -0
  80. package/dist/adapters/protocolItems.d.ts.map +1 -0
  81. package/dist/adapters/protocolItems.js +100 -0
  82. package/dist/adapters/protocolItems.js.map +1 -0
  83. package/dist/adapters/rateLimits.d.ts +7 -0
  84. package/dist/adapters/rateLimits.d.ts.map +1 -0
  85. package/dist/adapters/rateLimits.js +40 -0
  86. package/dist/adapters/rateLimits.js.map +1 -0
  87. package/dist/adapters/reads.d.ts +324 -0
  88. package/dist/adapters/reads.d.ts.map +1 -0
  89. package/dist/adapters/reads.js +83 -0
  90. package/dist/adapters/reads.js.map +1 -0
  91. package/dist/adapters/recovery.d.ts +324 -0
  92. package/dist/adapters/recovery.d.ts.map +1 -0
  93. package/dist/adapters/recovery.js +39 -0
  94. package/dist/adapters/recovery.js.map +1 -0
  95. package/dist/adapters/residualApproval.d.ts +4 -0
  96. package/dist/adapters/residualApproval.d.ts.map +1 -0
  97. package/dist/adapters/residualApproval.js +21 -0
  98. package/dist/adapters/residualApproval.js.map +1 -0
  99. package/dist/adapters/rpc.d.ts +8 -0
  100. package/dist/adapters/rpc.d.ts.map +1 -0
  101. package/dist/adapters/rpc.js +2 -0
  102. package/dist/adapters/rpc.js.map +1 -0
  103. package/dist/adapters/rpcProtocol.d.ts +11 -0
  104. package/dist/adapters/rpcProtocol.d.ts.map +1 -0
  105. package/dist/adapters/rpcProtocol.js +29 -0
  106. package/dist/adapters/rpcProtocol.js.map +1 -0
  107. package/dist/adapters/server.d.ts +30 -0
  108. package/dist/adapters/server.d.ts.map +1 -0
  109. package/dist/adapters/server.js +68 -0
  110. package/dist/adapters/server.js.map +1 -0
  111. package/dist/adapters/session.d.ts +312 -0
  112. package/dist/adapters/session.d.ts.map +1 -0
  113. package/dist/adapters/session.js +45 -0
  114. package/dist/adapters/session.js.map +1 -0
  115. package/dist/adapters/subagentItems.d.ts +16 -0
  116. package/dist/adapters/subagentItems.d.ts.map +1 -0
  117. package/dist/adapters/subagentItems.js +58 -0
  118. package/dist/adapters/subagentItems.js.map +1 -0
  119. package/dist/adapters/tellCliVersionOnce.d.ts +5 -0
  120. package/dist/adapters/tellCliVersionOnce.d.ts.map +1 -0
  121. package/dist/adapters/tellCliVersionOnce.js +13 -0
  122. package/dist/adapters/tellCliVersionOnce.js.map +1 -0
  123. package/dist/adapters/threadClaims.d.ts +8 -0
  124. package/dist/adapters/threadClaims.d.ts.map +1 -0
  125. package/dist/adapters/threadClaims.js +20 -0
  126. package/dist/adapters/threadClaims.js.map +1 -0
  127. package/dist/adapters/threadSweep.d.ts +15 -0
  128. package/dist/adapters/threadSweep.d.ts.map +1 -0
  129. package/dist/adapters/threadSweep.js +57 -0
  130. package/dist/adapters/threadSweep.js.map +1 -0
  131. package/dist/adapters/threadTree.d.ts +8 -0
  132. package/dist/adapters/threadTree.d.ts.map +1 -0
  133. package/dist/adapters/threadTree.js +125 -0
  134. package/dist/adapters/threadTree.js.map +1 -0
  135. package/dist/adapters/turnRequests.d.ts +13 -0
  136. package/dist/adapters/turnRequests.d.ts.map +1 -0
  137. package/dist/adapters/turnRequests.js +27 -0
  138. package/dist/adapters/turnRequests.js.map +1 -0
  139. package/dist/adapters/userMessageEvent.d.ts +7 -0
  140. package/dist/adapters/userMessageEvent.d.ts.map +1 -0
  141. package/dist/adapters/userMessageEvent.js +19 -0
  142. package/dist/adapters/userMessageEvent.js.map +1 -0
  143. package/dist/codex.d.ts +10 -1
  144. package/dist/codex.d.ts.map +1 -1
  145. package/dist/codex.js +15 -1
  146. package/dist/codex.js.map +1 -1
  147. package/dist/config.d.ts +24 -0
  148. package/dist/config.d.ts.map +1 -0
  149. package/dist/config.js +4 -0
  150. package/dist/config.js.map +1 -0
  151. package/package.json +23 -6
  152. package/src/adapters/Request.ts +3 -0
  153. package/src/adapters/UserMessageItem.ts +28 -0
  154. package/src/adapters/attributed.ts +21 -0
  155. package/src/adapters/backend.ts +29 -0
  156. package/src/adapters/census.ts +17 -0
  157. package/src/adapters/codexFailure.ts +4 -0
  158. package/src/adapters/configuredBackend.ts +6 -0
  159. package/src/adapters/connect.ts +129 -0
  160. package/src/adapters/delivery.ts +137 -0
  161. package/src/adapters/deliveryState.ts +43 -0
  162. package/src/adapters/engine.ts +11 -0
  163. package/src/adapters/features.ts +62 -0
  164. package/src/adapters/handshake.ts +35 -0
  165. package/src/adapters/initializeCodex.ts +8 -0
  166. package/src/adapters/initializeEngine.ts +75 -0
  167. package/src/adapters/items.ts +133 -0
  168. package/src/adapters/mapping.ts +66 -0
  169. package/src/adapters/process.ts +69 -0
  170. package/src/adapters/protocol.ts +125 -0
  171. package/src/adapters/protocolItems.ts +113 -0
  172. package/src/adapters/rateLimits.ts +55 -0
  173. package/src/adapters/reads.ts +93 -0
  174. package/src/adapters/recovery.ts +44 -0
  175. package/src/adapters/residualApproval.ts +23 -0
  176. package/src/adapters/rpc.ts +8 -0
  177. package/src/adapters/rpcProtocol.ts +28 -0
  178. package/src/adapters/server.ts +96 -0
  179. package/src/adapters/session.ts +71 -0
  180. package/src/adapters/subagentItems.ts +73 -0
  181. package/src/adapters/tellCliVersionOnce.ts +20 -0
  182. package/src/adapters/threadClaims.ts +26 -0
  183. package/src/adapters/threadSweep.ts +79 -0
  184. package/src/adapters/threadTree.ts +149 -0
  185. package/src/adapters/turnRequests.ts +45 -0
  186. package/src/adapters/userMessageEvent.ts +22 -0
  187. package/src/codex.ts +15 -1
  188. package/src/config.ts +17 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.0 - 2026-11-04
4
+
5
+ ### Breaking
6
+
7
+ - TypeScript source exports now use `@shivaedev/source` instead of `source`. Replace `source` with `@shivaedev/source` in Node `--conditions`, TypeScript `customConditions`, and Vite/Vitest `resolve.conditions`. Bare `source` selects built JavaScript; no compatibility alias is provided.
8
+
9
+ ## 0.2.0 - 2026-11-04
10
+
11
+ ### Added
12
+
13
+ - Run local Codex through the shared agent port with session resume, dynamic tools, native images, queued turns, expected-turn steering, interruption, item transcripts, rate-limit and child-thread events, passive census, and exact-operation recovery after ambiguous submissions.
14
+
3
15
  ## 0.1.0 - 2026-11-03
4
16
 
5
17
  ### Added
package/README.md CHANGED
@@ -1,3 +1,49 @@
1
1
  # @shivaedev/agent-codex
2
2
 
3
- Codex integration for Effect applications; no API yet.
3
+ Run local Codex sessions through the shared Effect agent port. Applications keep their own storage and identity while this adapter handles Codex's app-server protocol and submission recovery.
4
+
5
+ ## One agent port for Codex
6
+
7
+ Negotiate the capabilities your application needs, then submit work with an operation ID you can reconcile if its acknowledgement is lost.
8
+
9
+ ```ts
10
+ import { Effect } from "effect";
11
+ import { requireFeatures } from "@shivaedev/agent/agent.ts";
12
+
13
+ const program = Effect.gen(function* () {
14
+ const agent = yield* requireFeatures(["transcript", "steering"]);
15
+ const receipt = yield* agent.start({
16
+ cwd: "/project",
17
+ operationId: "change-42",
18
+ input: { parts: [{ type: "text", text: "Implement the requested change" }] },
19
+ });
20
+ return yield* agent.inspect(receipt);
21
+ });
22
+ ```
23
+
24
+ ## Using the adapter
25
+
26
+ The Layer owns one local `codex app-server` process. Keep the caller's scope open for queued delivery and event observation. A receipt identifies a provider turn and its thread; acceptance does not mean completion. `inspect` and transcript reads query provider history without resuming a thread.
27
+
28
+ Provide the program above with the Codex Layer and its configuration:
29
+
30
+ ```ts
31
+ import { Effect, Layer } from "effect";
32
+ import { CodexConfig } from "@shivaedev/agent-codex/config.ts";
33
+ import { codexLayer } from "@shivaedev/agent-codex/codex.ts";
34
+
35
+ const live = codexLayer.pipe(Layer.provide(Layer.succeed(CodexConfig)({})));
36
+ await Effect.runPromise(program.pipe(Effect.scoped, Effect.provide(live)));
37
+ ```
38
+
39
+ The backend declares sessions, queued input, steering, interruption, transcripts, native image input and model discovery as supported. Queued input waits locally for the active turn to complete. Steering includes the receipt's expected turn ID; an old receipt never redirects input to a newer turn. Interruption waits for the matching completion notification before queued delivery starts, including Codex's residual-draining rejection.
40
+
41
+ `operationId` becomes Codex's `clientUserMessageId`. A mutation timeout or unreadable acknowledgement yields `UnknownAcceptance`; `reconcile(operationId)` looks for the exact user-item `clientId`. Missing or duplicate evidence remains uncertain and never authorizes resubmission. Keep operation IDs stable when retrying. Recovery associations live only for the Layer's lifetime; recovery after application restart without a known thread association is unsupported. Persist receipts in the application.
42
+
43
+ `CodexConfig` accepts a command, arguments, process working directory, request timeout, sandbox, base instructions and dynamic tools. A tool supplies its name, description, JSON input schema and an Effect returning `{ ok, text }`. Tools are registered for the live root thread on start and resume. Tool inheritance by child threads is unsupported. Provider approval and interactive input consumers are unsupported; requests are declined. Cloud transport, remote endpoints, runner logs, wake scheduling, application storage and agent identity are outside this package.
44
+
45
+ Read `Codex` from Effect's environment and call `census(rootThreadId)` to passively list descendants and claim their ownership. Child threads cannot be resumed because doing so changes their goals. Event mapping preserves item content, child attribution, rate-limit windows and raw frames when the shared vocabulary cannot express a provider item. Usage is provider-reported cumulative session usage; cost estimation is unsupported.
46
+
47
+ The initialize response is compared with the protocol's CLI pin and a mismatch is logged. Version drift is diagnostic, not protocol negotiation. Live provider validation belongs in the consuming application; scripted peers do not prove compatibility with a running provider.
48
+
49
+ Install with `pnpm add @shivaedev/agent-codex @shivaedev/agent effect`, install and authenticate the Codex CLI separately, then provide `CodexConfig` to `codexLayer`. No other backend SDK is required.
@@ -0,0 +1,4 @@
1
+ import type { Effect } from "effect";
2
+ import type { BackendFailure } from "@shivaedev/agent/failures.ts";
3
+ export type Request = (method: string, params: unknown, operationId?: string) => Effect.Effect<unknown, BackendFailure>;
4
+ //# sourceMappingURL=Request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../src/adapters/Request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Request.js","sourceRoot":"","sources":["../../src/adapters/Request.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { Schema } from "effect";
2
+ export declare const UserMessageItem: Schema.Struct<{
3
+ readonly clientId: Schema.optional<Schema.NullOr<Schema.String>>;
4
+ readonly content: Schema.$Array<Schema.Union<readonly [Schema.encodeKeys<Schema.Struct<{
5
+ readonly text: Schema.String;
6
+ readonly textElements: Schema.optional<Schema.$Array<Schema.Unknown>>;
7
+ readonly type: Schema.Literal<"text">;
8
+ }>, {
9
+ readonly textElements: "text_elements";
10
+ }>, Schema.Struct<{
11
+ readonly detail: Schema.optional<Schema.NullOr<Schema.String>>;
12
+ readonly type: Schema.Literal<"image">;
13
+ readonly url: Schema.String;
14
+ }>, Schema.Struct<{
15
+ readonly detail: Schema.optional<Schema.NullOr<Schema.String>>;
16
+ readonly path: Schema.String;
17
+ readonly type: Schema.Literal<"localImage">;
18
+ }>]>>;
19
+ readonly id: Schema.String;
20
+ readonly type: Schema.Literal<"userMessage">;
21
+ }>;
22
+ //# sourceMappingURL=UserMessageItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserMessageItem.d.ts","sourceRoot":"","sources":["../../src/adapters/UserMessageItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAsBhC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;EAK1B,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { Schema } from "effect";
2
+ const TextContentPart = Schema.Struct({
3
+ text: Schema.String,
4
+ textElements: Schema.optional(Schema.Array(Schema.Unknown)),
5
+ type: Schema.Literal("text"),
6
+ }).pipe(Schema.encodeKeys({ textElements: "text_elements" }));
7
+ const ImageContentPart = Schema.Struct({
8
+ detail: Schema.optional(Schema.NullOr(Schema.String)),
9
+ type: Schema.Literal("image"),
10
+ url: Schema.String,
11
+ });
12
+ const LocalImageContentPart = Schema.Struct({
13
+ detail: Schema.optional(Schema.NullOr(Schema.String)),
14
+ path: Schema.String,
15
+ type: Schema.Literal("localImage"),
16
+ });
17
+ const UserContentPart = Schema.Union([TextContentPart, ImageContentPart, LocalImageContentPart]);
18
+ export const UserMessageItem = Schema.Struct({
19
+ clientId: Schema.optional(Schema.NullOr(Schema.String)),
20
+ content: Schema.Array(UserContentPart),
21
+ id: Schema.String,
22
+ type: Schema.Literal("userMessage"),
23
+ });
24
+ //# sourceMappingURL=UserMessageItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserMessageItem.js","sourceRoot":"","sources":["../../src/adapters/UserMessageItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;CAC5B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;AAE9D,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC,MAAM;CAClB,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAEjG,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;CACnC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Origin as OriginSchema } from "@shivaedev/agent/eventData.ts";
2
+ import type { RunEvent as AgentEvent } from "@shivaedev/agent/events.ts";
3
+ type Origin = typeof OriginSchema.Type;
4
+ export declare function attributed(event: AgentEvent, origin: Origin): AgentEvent;
5
+ export {};
6
+ //# sourceMappingURL=attributed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributed.d.ts","sourceRoot":"","sources":["../../src/adapters/attributed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEzE,KAAK,MAAM,GAAG,OAAO,YAAY,CAAC,IAAI,CAAC;AAEvC,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAexE"}
@@ -0,0 +1,17 @@
1
+ export function attributed(event, origin) {
2
+ switch (event.type) {
3
+ case "message":
4
+ case "model.changed":
5
+ case "raw":
6
+ case "gap":
7
+ case "thinking":
8
+ case "tool.completed":
9
+ case "tool.started":
10
+ case "execution":
11
+ case "usage":
12
+ return { ...event, origin };
13
+ default:
14
+ return event;
15
+ }
16
+ }
17
+ //# sourceMappingURL=attributed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributed.js","sourceRoot":"","sources":["../../src/adapters/attributed.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,UAAU,CAAC,KAAiB,EAAE,MAAc;IAC3D,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS,CAAC;QACf,KAAK,eAAe,CAAC;QACrB,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC;QACX,KAAK,UAAU,CAAC;QAChB,KAAK,gBAAgB,CAAC;QACtB,KAAK,cAAc,CAAC;QACpB,KAAK,WAAW,CAAC;QACjB,KAAK,OAAO;YACX,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC;QAC7B;YACC,OAAO,KAAK,CAAC;IACf,CAAC;AACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Effect } from "effect";
2
+ import type { ConfiguredBackend } from "@shivaedev/agent/backend.ts";
3
+ import type { EngineState } from "#adapters/initializeEngine.ts";
4
+ export declare function backend(state: EngineState): () => Effect.Effect<ConfiguredBackend, never, never>;
5
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/adapters/backend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkB,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,wDAuBzC"}
@@ -0,0 +1,23 @@
1
+ import { Effect, PubSub, Stream } from "effect";
2
+ export function backend(state) {
3
+ const configured = {
4
+ backend: "codex",
5
+ events: (receipt) => Stream.unwrap(Effect.gen(function* () {
6
+ const session = state.sessions.get(receipt.session?.value ?? "");
7
+ if (session === undefined) {
8
+ return Stream.empty;
9
+ }
10
+ const subscription = yield* PubSub.subscribe(session.events);
11
+ return Stream.fromIterable([
12
+ { receipt, type: "acknowledged" },
13
+ { reference: session.threadId, type: "session.opened" },
14
+ ]).pipe(Stream.concat(Stream.fromSubscription(subscription)), Stream.interruptWhen(state.exited));
15
+ })),
16
+ features: state.features,
17
+ inspect: state.inspect,
18
+ reconcile: state.reconcile,
19
+ start: state.start,
20
+ };
21
+ return Effect.fn("Codex.backend")(() => Effect.succeed(configured));
22
+ }
23
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/adapters/backend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhD,MAAM,UAAU,OAAO,CAAC,KAAkB;IACzC,MAAM,UAAU,GAAsB;QACrC,OAAO,EAAE,OAAO;QAChB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CACnB,MAAM,CAAC,MAAM,CACZ,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACjE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,MAAM,CAAC,KAAK,CAAC;YACrB,CAAC;YACD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7D,OAAO,MAAM,CAAC,YAAY,CAAW;gBACpC,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE;gBACjC,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE;aACvD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACnG,CAAC,CAAC,CACF;QACF,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;KAClB,CAAC;IACF,OAAO,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Effect } from "effect";
2
+ import type { EngineState } from "#adapters/initializeEngine.ts";
3
+ export declare function census(state: Pick<EngineState, "claims" | "read">): (rootThreadId: string) => Effect.Effect<import("#adapters/threadSweep.ts").CensusSweep, import("@shivaedev/agent/failures.ts").ReadFailure, never>;
4
+ //# sourceMappingURL=census.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"census.d.ts","sourceRoot":"","sources":["../../src/adapters/census.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGjE,wBAAgB,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAC,sJAYjE"}
@@ -0,0 +1,10 @@
1
+ import { Effect } from "effect";
2
+ import { sweepSpawnedDescendants } from "#adapters/threadSweep.ts";
3
+ export function census(state) {
4
+ return Effect.fn("Codex.census")((rootThreadId) => sweepSpawnedDescendants(state.read, rootThreadId).pipe(Effect.tap((children) => Effect.sync(() => {
5
+ for (const child of children) {
6
+ state.claims.claim(rootThreadId, child.threadId);
7
+ }
8
+ }))));
9
+ }
10
+ //# sourceMappingURL=census.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"census.js","sourceRoot":"","sources":["../../src/adapters/census.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,MAAM,UAAU,MAAM,CAAC,KAA2C;IACjE,OAAO,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,YAAoB,EAAE,EAAE,CACzD,uBAAuB,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,IAAI,CACrD,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACvB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QAChB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC9B,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;IACF,CAAC,CAAC,CACF,CACD,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ProtocolFailure } from "@shivaedev/agent/failures.ts";
2
+ export declare function codexFailure(message: string): ProtocolFailure;
3
+ //# sourceMappingURL=codexFailure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexFailure.d.ts","sourceRoot":"","sources":["../../src/adapters/codexFailure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,mBAE3C"}
@@ -0,0 +1,5 @@
1
+ import { ProtocolFailure } from "@shivaedev/agent/failures.ts";
2
+ export function codexFailure(message) {
3
+ return new ProtocolFailure({ backend: "codex", message });
4
+ }
5
+ //# sourceMappingURL=codexFailure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexFailure.js","sourceRoot":"","sources":["../../src/adapters/codexFailure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,MAAM,UAAU,YAAY,CAAC,OAAe;IAC3C,OAAO,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Effect } from "effect";
2
+ import type { ConfiguredBackend } from "@shivaedev/agent/backend.ts";
3
+ export declare const configuredBackend: (codex: {
4
+ readonly backend: () => Effect.Effect<ConfiguredBackend>;
5
+ }) => Effect.Effect<ConfiguredBackend, never, never>;
6
+ //# sourceMappingURL=configuredBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuredBackend.d.ts","sourceRoot":"","sources":["../../src/adapters/configuredBackend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,eAAO,MAAM,iBAAiB;sBAAoE,MAAM,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC;oDAEvI,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Effect } from "effect";
2
+ export const configuredBackend = Effect.fn("Codex.configuredBackend")((codex) => codex.backend());
3
+ //# sourceMappingURL=configuredBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuredBackend.js","sourceRoot":"","sources":["../../src/adapters/configuredBackend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAmE,EAAE,EAAE,CAC7I,KAAK,CAAC,OAAO,EAAE,CACf,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Effect } from "effect";
2
+ import { BackendUnavailable, ProtocolFailure, UnknownAcceptance } from "@shivaedev/agent/failures.ts";
3
+ import type { LineProcess } from "#adapters/process.ts";
4
+ import type { RpcNotification } from "#adapters/rpc.ts";
5
+ export declare function connect(child: LineProcess, timeoutMs: number, notified: (notification: RpcNotification) => void, serverRequest: (id: number | string, method: string, params: unknown) => void, exited: () => void): {
6
+ deny: (id: number | string) => void;
7
+ notify: (method: string, params: unknown) => void;
8
+ request: (method: string, params: unknown, operationId?: string) => Effect.Effect<unknown, BackendUnavailable | ProtocolFailure | import("@shivaedev/agent/failures.ts").Rejected | UnknownAcceptance, never>;
9
+ respond: (id: number | string, result: unknown) => void;
10
+ };
11
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/adapters/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAuB,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAC3H,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOxD,wBAAgB,OAAO,CACtB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,YAAY,EAAE,eAAe,KAAK,IAAI,EACjD,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,EAC7E,MAAM,EAAE,MAAM,IAAI;eA4GN,MAAM,GAAG,MAAM;qBACT,MAAM,UAAU,OAAO;sBA/BhB,MAAM,UAAU,OAAO,gBAAgB,MAAM;kBAiCvD,MAAM,GAAG,MAAM,UAAU,OAAO;EAE/C"}
@@ -0,0 +1,100 @@
1
+ import { Effect, Schema } from "effect";
2
+ import { BackendUnavailable, ProtocolFailure, UnknownAcceptance } from "@shivaedev/agent/failures.ts";
3
+ import { Envelope, rejected } from "#adapters/rpcProtocol.ts";
4
+ export function connect(child, timeoutMs, notified, serverRequest, exited) {
5
+ const pending = new Map();
6
+ let closed = false;
7
+ let nextId = 0;
8
+ function send(message) {
9
+ return child.write(JSON.stringify(message));
10
+ }
11
+ function unavailable() {
12
+ return new BackendUnavailable({ backend: "codex", message: "Codex app-server exited" });
13
+ }
14
+ function ambiguous(operationId, message) {
15
+ return new UnknownAcceptance({ backend: "codex", message, operationId });
16
+ }
17
+ child.onExit(() => {
18
+ closed = true;
19
+ for (const entry of pending.values()) {
20
+ entry.complete(Effect.fail(entry.operationId === undefined
21
+ ? unavailable()
22
+ : ambiguous(entry.operationId, "Codex disconnected after submission; reconcile before retrying")));
23
+ }
24
+ pending.clear();
25
+ exited();
26
+ });
27
+ child.onLine((line) => {
28
+ let envelope;
29
+ try {
30
+ envelope = Schema.decodeUnknownSync(Envelope)(JSON.parse(line));
31
+ }
32
+ catch {
33
+ for (const entry of pending.values()) {
34
+ entry.complete(Effect.fail(entry.operationId === undefined
35
+ ? new ProtocolFailure({ backend: "codex", message: "Invalid Codex RPC envelope" })
36
+ : ambiguous(entry.operationId, "Invalid response after mutation")));
37
+ }
38
+ pending.clear();
39
+ return;
40
+ }
41
+ dispatch(envelope);
42
+ });
43
+ function dispatch(envelope) {
44
+ if (envelope.method !== undefined) {
45
+ if (envelope.id === undefined) {
46
+ notified({ method: envelope.method, params: envelope.params });
47
+ }
48
+ else {
49
+ serverRequest(envelope.id, envelope.method, envelope.params);
50
+ }
51
+ return;
52
+ }
53
+ if (typeof envelope.id !== "number") {
54
+ return;
55
+ }
56
+ const entry = pending.get(envelope.id);
57
+ pending.delete(envelope.id);
58
+ if (entry === undefined) {
59
+ return;
60
+ }
61
+ if (envelope.error === undefined) {
62
+ entry.complete(Effect.succeed(envelope.result));
63
+ return;
64
+ }
65
+ const error = rejected(envelope.error);
66
+ entry.complete(Effect.fail(error._tag === "ProtocolFailure" && entry.operationId !== undefined
67
+ ? ambiguous(entry.operationId, "Invalid rejection after mutation")
68
+ : error));
69
+ }
70
+ function request(method, params, operationId) {
71
+ return Effect.callback((complete) => {
72
+ if (closed) {
73
+ complete(Effect.fail(unavailable()));
74
+ return;
75
+ }
76
+ nextId += 1;
77
+ const id = nextId;
78
+ pending.set(id, { complete, operationId });
79
+ try {
80
+ send({ id, method, params });
81
+ }
82
+ catch {
83
+ pending.delete(id);
84
+ complete(Effect.fail(operationId === undefined ? unavailable() : ambiguous(operationId, "Codex write failed after submission")));
85
+ }
86
+ return Effect.sync(() => {
87
+ pending.delete(id);
88
+ });
89
+ }).pipe(Effect.timeout(`${timeoutMs} millis`), Effect.catchTag("TimeoutError", () => Effect.fail(operationId === undefined
90
+ ? new BackendUnavailable({ backend: "codex", message: `Codex ${method} timed out` })
91
+ : ambiguous(operationId, `Codex ${method} timed out; reconcile before retrying`))));
92
+ }
93
+ return {
94
+ deny: (id) => send({ error: { code: -32_601, message: "No approval handler configured" }, id }),
95
+ notify: (method, params) => send({ method, params }),
96
+ request,
97
+ respond: (id, result) => send({ id, result }),
98
+ };
99
+ }
100
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/adapters/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Effect } from "effect";
2
+ import { BackendUnavailable, Rejected, UnknownAcceptance } from "@shivaedev/agent/failures.ts";
3
+ import type { ImageInput, Input } from "@shivaedev/agent/run.ts";
4
+ import type { RpcNotification } from "#adapters/rpc.ts";
5
+ import { AppServer } from "#adapters/server.ts";
6
+ export declare const delivery: (threadId: string, settings: {
7
+ model?: string;
8
+ effort?: string;
9
+ }, remember: (operationId: string) => void) => Effect.Effect<{
10
+ interrupt: (turnId: string) => Effect.Effect<void, BackendUnavailable | import("@shivaedev/agent/failures.ts").ProtocolFailure | Rejected | UnknownAcceptance, never>;
11
+ queue: (input: Input) => Effect.Effect<void, BackendUnavailable | import("@shivaedev/agent/failures.ts").ProtocolFailure | Rejected | UnknownAcceptance, never>;
12
+ recovered: (turnId: string, running: boolean) => Effect.Effect<void, never, never>;
13
+ start: (input: ImageInput, operationId: string) => Effect.Effect<string, BackendUnavailable | import("@shivaedev/agent/failures.ts").ProtocolFailure | Rejected | UnknownAcceptance, never>;
14
+ steer: (expected: string, input: Input) => Effect.Effect<undefined, BackendUnavailable | import("@shivaedev/agent/failures.ts").ProtocolFailure | Rejected | UnknownAcceptance, never>;
15
+ track: (notification: RpcNotification) => Effect.Effect<void, never, never>;
16
+ }, never, AppServer | import("effect/Scope").Scope>;
17
+ export type Delivery = Effect.Success<ReturnType<typeof delivery>>;
18
+ //# sourceMappingURL=delivery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/adapters/delivery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAqB,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAuB,kBAAkB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACpH,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,eAAO,MAAM,QAAQ;YAEA,MAAM;aAAW,MAAM;2BACnB,MAAM,KAAK,IAAI;wBAoFlB,MAAM;mBAcX,KAAK;wBACA,MAAM,WAAW,OAAO;mBAW7B,UAAU,eAAe,MAAM;sBAC5B,MAAM,SAAS,KAAK;0BAWhB,eAAe;mDAErC,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,115 @@
1
+ import { Deferred, Effect, Schema, Semaphore } from "effect";
2
+ import { BackendUnavailable, Rejected, UnknownAcceptance } from "@shivaedev/agent/failures.ts";
3
+ import { deliveryState } from "#adapters/deliveryState.ts";
4
+ import { TurnNotification } from "#adapters/protocol.ts";
5
+ import { AppServer } from "#adapters/server.ts";
6
+ import { turnRequests } from "#adapters/turnRequests.ts";
7
+ export const delivery = Effect.fn("Codex.delivery")(function* (threadId, settings, remember) {
8
+ const server = yield* AppServer;
9
+ const { state, gate, close, queue } = yield* deliveryState;
10
+ const requests = yield* turnRequests(threadId, settings);
11
+ function closedError() {
12
+ return new BackendUnavailable({ backend: "codex", message: "Session closed before delivery reached Codex" });
13
+ }
14
+ const start = Effect.fn("Codex.start")(function* (input, operationId) {
15
+ if (state.closed) {
16
+ return yield* closedError();
17
+ }
18
+ if (state.uncertain !== undefined) {
19
+ return yield* new UnknownAcceptance({
20
+ backend: "codex",
21
+ message: "Reconcile the previous submission before sending another turn",
22
+ operationId: state.uncertain,
23
+ });
24
+ }
25
+ remember(operationId);
26
+ state.active = yield* requests.start(input, operationId).pipe(Effect.tapError((error) => Effect.sync(() => {
27
+ if (error._tag !== "Rejected") {
28
+ state.uncertain = operationId;
29
+ }
30
+ })));
31
+ if (!state.finished.has(state.active)) {
32
+ state.finished.set(state.active, yield* Deferred.make());
33
+ }
34
+ return state.active;
35
+ });
36
+ const flush = Effect.gen(function* () {
37
+ if (state.active !== undefined || state.uncertain !== undefined || state.closed) {
38
+ return;
39
+ }
40
+ const next = state.pending.shift();
41
+ if (next === undefined) {
42
+ return;
43
+ }
44
+ yield* start(next.input, next.input.id ?? crypto.randomUUID()).pipe(Effect.matchEffect({
45
+ onFailure: (error) => Deferred.fail(next.accepted, error),
46
+ onSuccess: () => Deferred.succeed(next.accepted, undefined),
47
+ }));
48
+ });
49
+ const settle = Effect.fn("Codex.settle")(function* (turnId) {
50
+ if (state.active !== turnId) {
51
+ return;
52
+ }
53
+ state.active = undefined;
54
+ const signal = state.finished.get(turnId);
55
+ if (signal !== undefined) {
56
+ yield* Deferred.succeed(signal, undefined);
57
+ }
58
+ yield* flush;
59
+ });
60
+ const track = Effect.fn("Codex.track")(function* (notification) {
61
+ const value = Schema.decodeUnknownOption(TurnNotification)(notification.params);
62
+ if (value._tag === "None" || value.value.threadId !== threadId) {
63
+ return;
64
+ }
65
+ const id = value.value.turn.id;
66
+ if (notification.method === "turn/completed") {
67
+ yield* settle(id);
68
+ return;
69
+ }
70
+ if (notification.method !== "turn/started") {
71
+ return;
72
+ }
73
+ state.active = id;
74
+ if (!state.finished.has(id)) {
75
+ state.finished.set(id, yield* Deferred.make());
76
+ }
77
+ });
78
+ yield* Effect.addFinalizer(() => close);
79
+ yield* Effect.forkScoped(server.exited.pipe(Effect.andThen(close)));
80
+ return {
81
+ interrupt: (turnId) => Effect.gen(function* () {
82
+ if (state.active !== turnId) {
83
+ return;
84
+ }
85
+ const outcome = yield* requests.interrupt(turnId);
86
+ if (outcome === "inactive") {
87
+ yield* Semaphore.withPermit(gate)(settle(turnId));
88
+ }
89
+ const signal = state.finished.get(turnId);
90
+ if (signal !== undefined) {
91
+ yield* Deferred.await(signal);
92
+ }
93
+ }),
94
+ queue: (input) => queue(input, flush),
95
+ recovered: (turnId, running) => Semaphore.withPermit(gate)(Effect.gen(function* () {
96
+ state.active = running ? turnId : undefined;
97
+ state.uncertain = undefined;
98
+ if (running && !state.finished.has(turnId)) {
99
+ state.finished.set(turnId, yield* Deferred.make());
100
+ }
101
+ yield* flush;
102
+ })),
103
+ start: (input, operationId) => Semaphore.withPermit(gate)(start(input, operationId)),
104
+ steer: (expected, input) => Semaphore.withPermit(gate)(Effect.gen(function* () {
105
+ if (state.active !== expected) {
106
+ return yield* new Rejected({ backend: "codex", message: "The expected turn is no longer active" });
107
+ }
108
+ const operationId = input.id ?? crypto.randomUUID();
109
+ remember(operationId);
110
+ yield* requests.steer(expected, input, operationId);
111
+ })),
112
+ track: (notification) => Semaphore.withPermit(gate)(track(notification)),
113
+ };
114
+ });
115
+ //# sourceMappingURL=delivery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/adapters/delivery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { Deferred, Effect, Semaphore } from "effect";
2
+ import { type BackendFailure, BackendUnavailable } from "@shivaedev/agent/failures.ts";
3
+ import type { Input } from "@shivaedev/agent/run.ts";
4
+ interface Pending {
5
+ readonly accepted: Deferred.Deferred<void, BackendFailure>;
6
+ readonly input: Input;
7
+ }
8
+ interface State {
9
+ active: string | undefined;
10
+ closed: boolean;
11
+ finished: Map<string, Deferred.Deferred<void, BackendFailure>>;
12
+ pending: Pending[];
13
+ uncertain: string | undefined;
14
+ }
15
+ export declare const deliveryState: Effect.Effect<{
16
+ close: Effect.Effect<void, never, never>;
17
+ gate: Semaphore.Semaphore;
18
+ queue: (input: {
19
+ readonly id?: string | undefined;
20
+ readonly parts: readonly [{
21
+ readonly text: string;
22
+ readonly type: "text";
23
+ }, ...{
24
+ readonly text: string;
25
+ readonly type: "text";
26
+ }[]];
27
+ }, flush: Effect.Effect<void, never, never>) => Effect.Effect<void, BackendUnavailable | import("@shivaedev/agent/failures.ts").ProtocolFailure | import("@shivaedev/agent/failures.ts").Rejected | import("@shivaedev/agent/failures.ts").UnknownAcceptance, never>;
28
+ state: State;
29
+ }, never, never>;
30
+ export {};
31
+ //# sourceMappingURL=deliveryState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliveryState.d.ts","sourceRoot":"","sources":["../../src/adapters/deliveryState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,KAAK,cAAc,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD,UAAU,OAAO;IAChB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACtB;AACD,UAAU,KAAK;IACd,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IAC/D,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AACD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;gBA2BxB,CAAC"}