@northflare/runner 0.0.14 → 0.0.17

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 (196) hide show
  1. package/README.md +8 -5
  2. package/bin/northflare-runner +44 -16
  3. package/dist/components/claude-sdk-manager.d.ts +3 -3
  4. package/dist/components/claude-sdk-manager.d.ts.map +1 -1
  5. package/dist/components/claude-sdk-manager.js +80 -111
  6. package/dist/components/claude-sdk-manager.js.map +1 -1
  7. package/dist/components/codex-sdk-manager.d.ts +15 -6
  8. package/dist/components/codex-sdk-manager.d.ts.map +1 -1
  9. package/dist/components/codex-sdk-manager.js +128 -97
  10. package/dist/components/codex-sdk-manager.js.map +1 -1
  11. package/dist/components/enhanced-repository-manager.d.ts +2 -2
  12. package/dist/components/enhanced-repository-manager.d.ts.map +1 -1
  13. package/dist/components/enhanced-repository-manager.js +68 -75
  14. package/dist/components/enhanced-repository-manager.js.map +1 -1
  15. package/dist/components/message-handler-sse.d.ts +1 -1
  16. package/dist/components/message-handler-sse.d.ts.map +1 -1
  17. package/dist/components/message-handler-sse.js +205 -97
  18. package/dist/components/message-handler-sse.js.map +1 -1
  19. package/dist/components/{claude-manager.d.ts → northflare-agent-sdk-manager.d.ts} +17 -14
  20. package/dist/components/northflare-agent-sdk-manager.d.ts.map +1 -0
  21. package/dist/components/northflare-agent-sdk-manager.js +1456 -0
  22. package/dist/components/northflare-agent-sdk-manager.js.map +1 -0
  23. package/dist/components/repository-manager.d.ts +2 -2
  24. package/dist/components/repository-manager.d.ts.map +1 -1
  25. package/dist/components/repository-manager.js +34 -74
  26. package/dist/components/repository-manager.js.map +1 -1
  27. package/dist/index.d.ts +3 -3
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +115 -79
  30. package/dist/index.js.map +1 -1
  31. package/dist/runner-sse.d.ts +22 -5
  32. package/dist/runner-sse.d.ts.map +1 -1
  33. package/dist/runner-sse.js +95 -74
  34. package/dist/runner-sse.js.map +1 -1
  35. package/dist/services/RunnerAPIClient.d.ts +1 -1
  36. package/dist/services/RunnerAPIClient.d.ts.map +1 -1
  37. package/dist/services/RunnerAPIClient.js +3 -7
  38. package/dist/services/RunnerAPIClient.js.map +1 -1
  39. package/dist/services/SSEClient.js +5 -9
  40. package/dist/services/SSEClient.js.map +1 -1
  41. package/dist/types/claude.d.ts +16 -2
  42. package/dist/types/claude.d.ts.map +1 -1
  43. package/dist/types/claude.js +1 -2
  44. package/dist/types/claude.js.map +1 -1
  45. package/dist/types/index.d.ts +5 -3
  46. package/dist/types/index.d.ts.map +1 -1
  47. package/dist/types/index.js +3 -19
  48. package/dist/types/index.js.map +1 -1
  49. package/dist/types/messages.js +1 -2
  50. package/dist/types/messages.js.map +1 -1
  51. package/dist/types/runner-interface.d.ts +8 -4
  52. package/dist/types/runner-interface.d.ts.map +1 -1
  53. package/dist/types/runner-interface.js +1 -2
  54. package/dist/types/runner-interface.js.map +1 -1
  55. package/dist/utils/StateManager.js +12 -19
  56. package/dist/utils/StateManager.js.map +1 -1
  57. package/dist/utils/config.d.ts +1 -1
  58. package/dist/utils/config.d.ts.map +1 -1
  59. package/dist/utils/config.js +19 -26
  60. package/dist/utils/config.js.map +1 -1
  61. package/dist/utils/console.js +3 -6
  62. package/dist/utils/console.js.map +1 -1
  63. package/dist/utils/debug.js +1 -4
  64. package/dist/utils/debug.js.map +1 -1
  65. package/dist/utils/expand-env.js +1 -4
  66. package/dist/utils/expand-env.js.map +1 -1
  67. package/dist/utils/inactivity-timeout.d.ts +19 -0
  68. package/dist/utils/inactivity-timeout.d.ts.map +1 -0
  69. package/dist/utils/inactivity-timeout.js +72 -0
  70. package/dist/utils/inactivity-timeout.js.map +1 -0
  71. package/dist/utils/logger.js +21 -29
  72. package/dist/utils/logger.js.map +1 -1
  73. package/dist/utils/model.d.ts +3 -1
  74. package/dist/utils/model.d.ts.map +1 -1
  75. package/dist/utils/model.js +18 -4
  76. package/dist/utils/model.js.map +1 -1
  77. package/dist/utils/status-line.d.ts +1 -0
  78. package/dist/utils/status-line.d.ts.map +1 -1
  79. package/dist/utils/status-line.js +25 -18
  80. package/dist/utils/status-line.js.map +1 -1
  81. package/dist/utils/tool-response-sanitizer.js +6 -10
  82. package/dist/utils/tool-response-sanitizer.js.map +1 -1
  83. package/lib/codex-sdk/dist/index.d.ts +1 -1
  84. package/lib/codex-sdk/dist/samples/basic_streaming.d.ts +3 -0
  85. package/lib/codex-sdk/dist/samples/basic_streaming.d.ts.map +1 -0
  86. package/lib/codex-sdk/dist/samples/basic_streaming.js +81 -0
  87. package/lib/codex-sdk/dist/samples/basic_streaming.js.map +1 -0
  88. package/lib/codex-sdk/dist/samples/helpers.d.ts +2 -0
  89. package/lib/codex-sdk/dist/samples/helpers.d.ts.map +1 -0
  90. package/lib/codex-sdk/dist/samples/helpers.js +6 -0
  91. package/lib/codex-sdk/dist/samples/helpers.js.map +1 -0
  92. package/lib/codex-sdk/dist/samples/structured_output.d.ts +3 -0
  93. package/lib/codex-sdk/dist/samples/structured_output.d.ts.map +1 -0
  94. package/lib/codex-sdk/dist/samples/structured_output.js +17 -0
  95. package/lib/codex-sdk/dist/samples/structured_output.js.map +1 -0
  96. package/lib/codex-sdk/dist/samples/structured_output_zod.d.ts +3 -0
  97. package/lib/codex-sdk/dist/samples/structured_output_zod.d.ts.map +1 -0
  98. package/lib/codex-sdk/dist/samples/structured_output_zod.js +16 -0
  99. package/lib/codex-sdk/dist/samples/structured_output_zod.js.map +1 -0
  100. package/lib/codex-sdk/dist/src/codex.d.ts +27 -0
  101. package/lib/codex-sdk/dist/src/codex.d.ts.map +1 -0
  102. package/lib/codex-sdk/dist/src/codex.js +33 -0
  103. package/lib/codex-sdk/dist/src/codex.js.map +1 -0
  104. package/lib/codex-sdk/dist/src/codexOptions.d.ts +11 -0
  105. package/lib/codex-sdk/dist/src/codexOptions.d.ts.map +1 -0
  106. package/lib/codex-sdk/dist/src/codexOptions.js +2 -0
  107. package/lib/codex-sdk/dist/src/codexOptions.js.map +1 -0
  108. package/lib/codex-sdk/dist/src/events.d.ts +60 -0
  109. package/lib/codex-sdk/dist/src/events.d.ts.map +1 -0
  110. package/lib/codex-sdk/dist/src/events.js +3 -0
  111. package/lib/codex-sdk/dist/src/events.js.map +1 -0
  112. package/lib/codex-sdk/dist/src/exec.d.ts +27 -0
  113. package/lib/codex-sdk/dist/src/exec.d.ts.map +1 -0
  114. package/lib/codex-sdk/dist/src/exec.js +264 -0
  115. package/lib/codex-sdk/dist/src/exec.js.map +1 -0
  116. package/lib/codex-sdk/dist/src/index.d.ts +9 -0
  117. package/lib/codex-sdk/dist/src/index.d.ts.map +1 -0
  118. package/lib/codex-sdk/dist/src/index.js +3 -0
  119. package/lib/codex-sdk/dist/src/index.js.map +1 -0
  120. package/lib/codex-sdk/dist/src/items.d.ts +103 -0
  121. package/lib/codex-sdk/dist/src/items.d.ts.map +1 -0
  122. package/lib/codex-sdk/dist/src/items.js +3 -0
  123. package/lib/codex-sdk/dist/src/items.js.map +1 -0
  124. package/lib/codex-sdk/dist/src/outputSchemaFile.d.ts +6 -0
  125. package/lib/codex-sdk/dist/src/outputSchemaFile.d.ts.map +1 -0
  126. package/lib/codex-sdk/dist/src/outputSchemaFile.js +33 -0
  127. package/lib/codex-sdk/dist/src/outputSchemaFile.js.map +1 -0
  128. package/lib/codex-sdk/dist/src/thread.d.ts +41 -0
  129. package/lib/codex-sdk/dist/src/thread.d.ts.map +1 -0
  130. package/lib/codex-sdk/dist/src/thread.js +109 -0
  131. package/lib/codex-sdk/dist/src/thread.js.map +1 -0
  132. package/lib/codex-sdk/dist/src/threadOptions.d.ts +16 -0
  133. package/lib/codex-sdk/dist/src/threadOptions.d.ts.map +1 -0
  134. package/lib/codex-sdk/dist/src/threadOptions.js +2 -0
  135. package/lib/codex-sdk/dist/src/threadOptions.js.map +1 -0
  136. package/lib/codex-sdk/dist/src/turnOptions.d.ts +7 -0
  137. package/lib/codex-sdk/dist/src/turnOptions.d.ts.map +1 -0
  138. package/lib/codex-sdk/dist/src/turnOptions.js +2 -0
  139. package/lib/codex-sdk/dist/src/turnOptions.js.map +1 -0
  140. package/lib/codex-sdk/dist/tests/abort.test.d.ts +2 -0
  141. package/lib/codex-sdk/dist/tests/abort.test.d.ts.map +1 -0
  142. package/lib/codex-sdk/dist/tests/abort.test.js +130 -0
  143. package/lib/codex-sdk/dist/tests/abort.test.js.map +1 -0
  144. package/lib/codex-sdk/dist/tests/codexExecSpy.d.ts +6 -0
  145. package/lib/codex-sdk/dist/tests/codexExecSpy.d.ts.map +1 -0
  146. package/lib/codex-sdk/dist/tests/codexExecSpy.js +28 -0
  147. package/lib/codex-sdk/dist/tests/codexExecSpy.js.map +1 -0
  148. package/lib/codex-sdk/dist/tests/responsesProxy.d.ts +56 -0
  149. package/lib/codex-sdk/dist/tests/responsesProxy.d.ts.map +1 -0
  150. package/lib/codex-sdk/dist/tests/responsesProxy.js +155 -0
  151. package/lib/codex-sdk/dist/tests/responsesProxy.js.map +1 -0
  152. package/lib/codex-sdk/dist/tests/run.test.d.ts +2 -0
  153. package/lib/codex-sdk/dist/tests/run.test.d.ts.map +1 -0
  154. package/lib/codex-sdk/dist/tests/run.test.js +524 -0
  155. package/lib/codex-sdk/dist/tests/run.test.js.map +1 -0
  156. package/lib/codex-sdk/dist/tests/runStreamed.test.d.ts +2 -0
  157. package/lib/codex-sdk/dist/tests/runStreamed.test.d.ts.map +1 -0
  158. package/lib/codex-sdk/dist/tests/runStreamed.test.js +153 -0
  159. package/lib/codex-sdk/dist/tests/runStreamed.test.js.map +1 -0
  160. package/lib/codex-sdk/dist/tsup.config.d.ts +3 -0
  161. package/lib/codex-sdk/dist/tsup.config.js +12 -0
  162. package/lib/codex-sdk/samples/basic_streaming.ts +0 -0
  163. package/lib/codex-sdk/samples/structured_output.ts +0 -0
  164. package/lib/codex-sdk/samples/structured_output_zod.ts +0 -0
  165. package/lib/codex-sdk/src/codex.ts +38 -0
  166. package/lib/codex-sdk/src/codexOptions.ts +10 -0
  167. package/lib/codex-sdk/src/events.ts +80 -0
  168. package/lib/codex-sdk/src/exec.ts +336 -0
  169. package/lib/codex-sdk/src/index.ts +39 -0
  170. package/lib/codex-sdk/src/items.ts +127 -0
  171. package/lib/codex-sdk/src/outputSchemaFile.ts +40 -0
  172. package/lib/codex-sdk/src/thread.ts +155 -0
  173. package/lib/codex-sdk/src/threadOptions.ts +18 -0
  174. package/lib/codex-sdk/src/turnOptions.ts +6 -0
  175. package/lib/codex-sdk/tests/abort.test.ts +165 -0
  176. package/lib/codex-sdk/tests/codexExecSpy.ts +37 -0
  177. package/lib/codex-sdk/tests/responsesProxy.ts +225 -0
  178. package/lib/codex-sdk/tests/run.test.ts +687 -0
  179. package/lib/codex-sdk/tests/runStreamed.test.ts +211 -0
  180. package/package.json +22 -18
  181. package/scripts/verify-openrouter-agent.ts +163 -0
  182. package/dist/collections/runner-messages.d.ts +0 -52
  183. package/dist/collections/runner-messages.d.ts.map +0 -1
  184. package/dist/collections/runner-messages.js +0 -161
  185. package/dist/collections/runner-messages.js.map +0 -1
  186. package/dist/components/claude-manager.d.ts.map +0 -1
  187. package/dist/components/claude-manager.js +0 -783
  188. package/dist/components/claude-manager.js.map +0 -1
  189. package/dist/components/message-handler.d.ts +0 -35
  190. package/dist/components/message-handler.d.ts.map +0 -1
  191. package/dist/components/message-handler.js +0 -689
  192. package/dist/components/message-handler.js.map +0 -1
  193. package/dist/runner.d.ts +0 -51
  194. package/dist/runner.d.ts.map +0 -1
  195. package/dist/runner.js +0 -530
  196. package/dist/runner.js.map +0 -1
@@ -0,0 +1,524 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { codexExecSpy } from "./codexExecSpy";
5
+ import { describe, expect, it } from "@jest/globals";
6
+ import { Codex } from "../src/codex";
7
+ import { assistantMessage, responseCompleted, responseStarted, sse, responseFailed, startResponsesTestProxy, } from "./responsesProxy";
8
+ const codexExecPath = path.join(process.cwd(), "..", "..", "codex-rs", "target", "debug", "codex");
9
+ describe("Codex", () => {
10
+ it("returns thread events", async () => {
11
+ const { url, close } = await startResponsesTestProxy({
12
+ statusCode: 200,
13
+ responseBodies: [sse(responseStarted(), assistantMessage("Hi!"), responseCompleted())],
14
+ });
15
+ try {
16
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
17
+ const thread = client.startThread();
18
+ const result = await thread.run("Hello, world!");
19
+ const expectedItems = [
20
+ {
21
+ id: expect.any(String),
22
+ type: "agent_message",
23
+ text: "Hi!",
24
+ },
25
+ ];
26
+ expect(result.items).toEqual(expectedItems);
27
+ expect(result.usage).toEqual({
28
+ cached_input_tokens: 12,
29
+ input_tokens: 42,
30
+ output_tokens: 5,
31
+ });
32
+ expect(thread.id).toEqual(expect.any(String));
33
+ }
34
+ finally {
35
+ await close();
36
+ }
37
+ });
38
+ it("sends previous items when run is called twice", async () => {
39
+ const { url, close, requests } = await startResponsesTestProxy({
40
+ statusCode: 200,
41
+ responseBodies: [
42
+ sse(responseStarted("response_1"), assistantMessage("First response", "item_1"), responseCompleted("response_1")),
43
+ sse(responseStarted("response_2"), assistantMessage("Second response", "item_2"), responseCompleted("response_2")),
44
+ ],
45
+ });
46
+ try {
47
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
48
+ const thread = client.startThread();
49
+ await thread.run("first input");
50
+ await thread.run("second input");
51
+ // Check second request continues the same thread
52
+ expect(requests.length).toBeGreaterThanOrEqual(2);
53
+ const secondRequest = requests[1];
54
+ expect(secondRequest).toBeDefined();
55
+ const payload = secondRequest.json;
56
+ const assistantEntry = payload.input.find((entry) => entry.role === "assistant");
57
+ expect(assistantEntry).toBeDefined();
58
+ const assistantText = assistantEntry?.content?.find((item) => item.type === "output_text")?.text;
59
+ expect(assistantText).toBe("First response");
60
+ }
61
+ finally {
62
+ await close();
63
+ }
64
+ });
65
+ it("continues the thread when run is called twice with options", async () => {
66
+ const { url, close, requests } = await startResponsesTestProxy({
67
+ statusCode: 200,
68
+ responseBodies: [
69
+ sse(responseStarted("response_1"), assistantMessage("First response", "item_1"), responseCompleted("response_1")),
70
+ sse(responseStarted("response_2"), assistantMessage("Second response", "item_2"), responseCompleted("response_2")),
71
+ ],
72
+ });
73
+ try {
74
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
75
+ const thread = client.startThread();
76
+ await thread.run("first input");
77
+ await thread.run("second input");
78
+ // Check second request continues the same thread
79
+ expect(requests.length).toBeGreaterThanOrEqual(2);
80
+ const secondRequest = requests[1];
81
+ expect(secondRequest).toBeDefined();
82
+ const payload = secondRequest.json;
83
+ expect(payload.input.at(-1).content[0].text).toBe("second input");
84
+ const assistantEntry = payload.input.find((entry) => entry.role === "assistant");
85
+ expect(assistantEntry).toBeDefined();
86
+ const assistantText = assistantEntry?.content?.find((item) => item.type === "output_text")?.text;
87
+ expect(assistantText).toBe("First response");
88
+ }
89
+ finally {
90
+ await close();
91
+ }
92
+ });
93
+ it("resumes thread by id", async () => {
94
+ const { url, close, requests } = await startResponsesTestProxy({
95
+ statusCode: 200,
96
+ responseBodies: [
97
+ sse(responseStarted("response_1"), assistantMessage("First response", "item_1"), responseCompleted("response_1")),
98
+ sse(responseStarted("response_2"), assistantMessage("Second response", "item_2"), responseCompleted("response_2")),
99
+ ],
100
+ });
101
+ try {
102
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
103
+ const originalThread = client.startThread();
104
+ await originalThread.run("first input");
105
+ const resumedThread = client.resumeThread(originalThread.id);
106
+ const result = await resumedThread.run("second input");
107
+ expect(resumedThread.id).toBe(originalThread.id);
108
+ expect(result.finalResponse).toBe("Second response");
109
+ expect(requests.length).toBeGreaterThanOrEqual(2);
110
+ const secondRequest = requests[1];
111
+ expect(secondRequest).toBeDefined();
112
+ const payload = secondRequest.json;
113
+ const assistantEntry = payload.input.find((entry) => entry.role === "assistant");
114
+ expect(assistantEntry).toBeDefined();
115
+ const assistantText = assistantEntry?.content?.find((item) => item.type === "output_text")?.text;
116
+ expect(assistantText).toBe("First response");
117
+ }
118
+ finally {
119
+ await close();
120
+ }
121
+ });
122
+ it("passes turn options to exec", async () => {
123
+ const { url, close, requests } = await startResponsesTestProxy({
124
+ statusCode: 200,
125
+ responseBodies: [
126
+ sse(responseStarted("response_1"), assistantMessage("Turn options applied", "item_1"), responseCompleted("response_1")),
127
+ ],
128
+ });
129
+ const { args: spawnArgs, restore } = codexExecSpy();
130
+ try {
131
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
132
+ const thread = client.startThread({
133
+ model: "gpt-test-1",
134
+ sandboxMode: "workspace-write",
135
+ });
136
+ await thread.run("apply options");
137
+ const payload = requests[0];
138
+ expect(payload).toBeDefined();
139
+ const json = payload.json;
140
+ expect(json?.model).toBe("gpt-test-1");
141
+ expect(spawnArgs.length).toBeGreaterThan(0);
142
+ const commandArgs = spawnArgs[0];
143
+ expectPair(commandArgs, ["--sandbox", "workspace-write"]);
144
+ expectPair(commandArgs, ["--model", "gpt-test-1"]);
145
+ }
146
+ finally {
147
+ restore();
148
+ await close();
149
+ }
150
+ });
151
+ it("passes modelReasoningEffort to exec", async () => {
152
+ const { url, close } = await startResponsesTestProxy({
153
+ statusCode: 200,
154
+ responseBodies: [
155
+ sse(responseStarted("response_1"), assistantMessage("Reasoning effort applied", "item_1"), responseCompleted("response_1")),
156
+ ],
157
+ });
158
+ const { args: spawnArgs, restore } = codexExecSpy();
159
+ try {
160
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
161
+ const thread = client.startThread({
162
+ modelReasoningEffort: "high",
163
+ });
164
+ await thread.run("apply reasoning effort");
165
+ const commandArgs = spawnArgs[0];
166
+ expect(commandArgs).toBeDefined();
167
+ expectPair(commandArgs, ["--config", 'model_reasoning_effort="high"']);
168
+ }
169
+ finally {
170
+ restore();
171
+ await close();
172
+ }
173
+ });
174
+ it("passes networkAccessEnabled to exec", async () => {
175
+ const { url, close } = await startResponsesTestProxy({
176
+ statusCode: 200,
177
+ responseBodies: [
178
+ sse(responseStarted("response_1"), assistantMessage("Network access enabled", "item_1"), responseCompleted("response_1")),
179
+ ],
180
+ });
181
+ const { args: spawnArgs, restore } = codexExecSpy();
182
+ try {
183
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
184
+ const thread = client.startThread({
185
+ networkAccessEnabled: true,
186
+ });
187
+ await thread.run("test network access");
188
+ const commandArgs = spawnArgs[0];
189
+ expect(commandArgs).toBeDefined();
190
+ expectPair(commandArgs, ["--config", "sandbox_workspace_write.network_access=true"]);
191
+ }
192
+ finally {
193
+ restore();
194
+ await close();
195
+ }
196
+ });
197
+ it("passes webSearchEnabled to exec", async () => {
198
+ const { url, close } = await startResponsesTestProxy({
199
+ statusCode: 200,
200
+ responseBodies: [
201
+ sse(responseStarted("response_1"), assistantMessage("Web search enabled", "item_1"), responseCompleted("response_1")),
202
+ ],
203
+ });
204
+ const { args: spawnArgs, restore } = codexExecSpy();
205
+ try {
206
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
207
+ const thread = client.startThread({
208
+ webSearchEnabled: true,
209
+ });
210
+ await thread.run("test web search");
211
+ const commandArgs = spawnArgs[0];
212
+ expect(commandArgs).toBeDefined();
213
+ expectPair(commandArgs, ["--config", "features.web_search_request=true"]);
214
+ }
215
+ finally {
216
+ restore();
217
+ await close();
218
+ }
219
+ });
220
+ it("passes approvalPolicy to exec", async () => {
221
+ const { url, close } = await startResponsesTestProxy({
222
+ statusCode: 200,
223
+ responseBodies: [
224
+ sse(responseStarted("response_1"), assistantMessage("Approval policy set", "item_1"), responseCompleted("response_1")),
225
+ ],
226
+ });
227
+ const { args: spawnArgs, restore } = codexExecSpy();
228
+ try {
229
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
230
+ const thread = client.startThread({
231
+ approvalPolicy: "on-request",
232
+ });
233
+ await thread.run("test approval policy");
234
+ const commandArgs = spawnArgs[0];
235
+ expect(commandArgs).toBeDefined();
236
+ expectPair(commandArgs, ["--config", 'approval_policy="on-request"']);
237
+ }
238
+ finally {
239
+ restore();
240
+ await close();
241
+ }
242
+ });
243
+ it("allows overriding the env passed to the Codex CLI", async () => {
244
+ const { url, close } = await startResponsesTestProxy({
245
+ statusCode: 200,
246
+ responseBodies: [
247
+ sse(responseStarted("response_1"), assistantMessage("Custom env", "item_1"), responseCompleted("response_1")),
248
+ ],
249
+ });
250
+ const { envs: spawnEnvs, restore } = codexExecSpy();
251
+ process.env.CODEX_ENV_SHOULD_NOT_LEAK = "leak";
252
+ try {
253
+ const client = new Codex({
254
+ codexPathOverride: codexExecPath,
255
+ baseUrl: url,
256
+ apiKey: "test",
257
+ env: { CUSTOM_ENV: "custom" },
258
+ });
259
+ const thread = client.startThread();
260
+ await thread.run("custom env");
261
+ const spawnEnv = spawnEnvs[0];
262
+ expect(spawnEnv).toBeDefined();
263
+ if (!spawnEnv) {
264
+ throw new Error("Spawn env missing");
265
+ }
266
+ expect(spawnEnv.CUSTOM_ENV).toBe("custom");
267
+ expect(spawnEnv.CODEX_ENV_SHOULD_NOT_LEAK).toBeUndefined();
268
+ expect(spawnEnv.OPENAI_BASE_URL).toBe(url);
269
+ expect(spawnEnv.CODEX_API_KEY).toBe("test");
270
+ expect(spawnEnv.CODEX_INTERNAL_ORIGINATOR_OVERRIDE).toBeDefined();
271
+ }
272
+ finally {
273
+ delete process.env.CODEX_ENV_SHOULD_NOT_LEAK;
274
+ restore();
275
+ await close();
276
+ }
277
+ });
278
+ it("passes additionalDirectories as repeated flags", async () => {
279
+ const { url, close } = await startResponsesTestProxy({
280
+ statusCode: 200,
281
+ responseBodies: [
282
+ sse(responseStarted("response_1"), assistantMessage("Additional directories applied", "item_1"), responseCompleted("response_1")),
283
+ ],
284
+ });
285
+ const { args: spawnArgs, restore } = codexExecSpy();
286
+ try {
287
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
288
+ const thread = client.startThread({
289
+ additionalDirectories: ["../backend", "/tmp/shared"],
290
+ });
291
+ await thread.run("test additional dirs");
292
+ const commandArgs = spawnArgs[0];
293
+ expect(commandArgs).toBeDefined();
294
+ if (!commandArgs) {
295
+ throw new Error("Command args missing");
296
+ }
297
+ // Find the --add-dir flags
298
+ const addDirArgs = [];
299
+ for (let i = 0; i < commandArgs.length; i += 1) {
300
+ if (commandArgs[i] === "--add-dir") {
301
+ addDirArgs.push(commandArgs[i + 1] ?? "");
302
+ }
303
+ }
304
+ expect(addDirArgs).toEqual(["../backend", "/tmp/shared"]);
305
+ }
306
+ finally {
307
+ restore();
308
+ await close();
309
+ }
310
+ });
311
+ it("writes output schema to a temporary file and forwards it", async () => {
312
+ const { url, close, requests } = await startResponsesTestProxy({
313
+ statusCode: 200,
314
+ responseBodies: [
315
+ sse(responseStarted("response_1"), assistantMessage("Structured response", "item_1"), responseCompleted("response_1")),
316
+ ],
317
+ });
318
+ const { args: spawnArgs, restore } = codexExecSpy();
319
+ const schema = {
320
+ type: "object",
321
+ properties: {
322
+ answer: { type: "string" },
323
+ },
324
+ required: ["answer"],
325
+ additionalProperties: false,
326
+ };
327
+ try {
328
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
329
+ const thread = client.startThread();
330
+ await thread.run("structured", { outputSchema: schema });
331
+ expect(requests.length).toBeGreaterThanOrEqual(1);
332
+ const payload = requests[0];
333
+ expect(payload).toBeDefined();
334
+ const text = payload.json.text;
335
+ expect(text).toBeDefined();
336
+ expect(text?.format).toEqual({
337
+ name: "codex_output_schema",
338
+ type: "json_schema",
339
+ strict: true,
340
+ schema,
341
+ });
342
+ const commandArgs = spawnArgs[0];
343
+ expect(commandArgs).toBeDefined();
344
+ const schemaFlagIndex = commandArgs.indexOf("--output-schema");
345
+ expect(schemaFlagIndex).toBeGreaterThan(-1);
346
+ const schemaPath = commandArgs[schemaFlagIndex + 1];
347
+ expect(typeof schemaPath).toBe("string");
348
+ if (typeof schemaPath !== "string") {
349
+ throw new Error("--output-schema flag missing path argument");
350
+ }
351
+ expect(fs.existsSync(schemaPath)).toBe(false);
352
+ }
353
+ finally {
354
+ restore();
355
+ await close();
356
+ }
357
+ });
358
+ it("combines structured text input segments", async () => {
359
+ const { url, close, requests } = await startResponsesTestProxy({
360
+ statusCode: 200,
361
+ responseBodies: [
362
+ sse(responseStarted("response_1"), assistantMessage("Combined input applied", "item_1"), responseCompleted("response_1")),
363
+ ],
364
+ });
365
+ try {
366
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
367
+ const thread = client.startThread();
368
+ await thread.run([
369
+ { type: "text", text: "Describe file changes" },
370
+ { type: "text", text: "Focus on impacted tests" },
371
+ ]);
372
+ const payload = requests[0];
373
+ expect(payload).toBeDefined();
374
+ const lastUser = payload.json.input.at(-1);
375
+ expect(lastUser?.content?.[0]?.text).toBe("Describe file changes\n\nFocus on impacted tests");
376
+ }
377
+ finally {
378
+ await close();
379
+ }
380
+ });
381
+ it("forwards images to exec", async () => {
382
+ const { url, close } = await startResponsesTestProxy({
383
+ statusCode: 200,
384
+ responseBodies: [
385
+ sse(responseStarted("response_1"), assistantMessage("Images applied", "item_1"), responseCompleted("response_1")),
386
+ ],
387
+ });
388
+ const { args: spawnArgs, restore } = codexExecSpy();
389
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "codex-images-"));
390
+ const imagesDirectoryEntries = [
391
+ path.join(tempDir, "first.png"),
392
+ path.join(tempDir, "second.jpg"),
393
+ ];
394
+ imagesDirectoryEntries.forEach((image, index) => {
395
+ fs.writeFileSync(image, `image-${index}`);
396
+ });
397
+ try {
398
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
399
+ const thread = client.startThread();
400
+ await thread.run([
401
+ { type: "text", text: "describe the images" },
402
+ { type: "local_image", path: imagesDirectoryEntries[0] },
403
+ { type: "local_image", path: imagesDirectoryEntries[1] },
404
+ ]);
405
+ const commandArgs = spawnArgs[0];
406
+ expect(commandArgs).toBeDefined();
407
+ const forwardedImages = [];
408
+ for (let i = 0; i < commandArgs.length; i += 1) {
409
+ if (commandArgs[i] === "--image") {
410
+ forwardedImages.push(commandArgs[i + 1] ?? "");
411
+ }
412
+ }
413
+ expect(forwardedImages).toEqual(imagesDirectoryEntries);
414
+ }
415
+ finally {
416
+ fs.rmSync(tempDir, { recursive: true, force: true });
417
+ restore();
418
+ await close();
419
+ }
420
+ });
421
+ it("runs in provided working directory", async () => {
422
+ const { url, close } = await startResponsesTestProxy({
423
+ statusCode: 200,
424
+ responseBodies: [
425
+ sse(responseStarted("response_1"), assistantMessage("Working directory applied", "item_1"), responseCompleted("response_1")),
426
+ ],
427
+ });
428
+ const { args: spawnArgs, restore } = codexExecSpy();
429
+ try {
430
+ const workingDirectory = fs.mkdtempSync(path.join(os.tmpdir(), "codex-working-dir-"));
431
+ const client = new Codex({
432
+ codexPathOverride: codexExecPath,
433
+ baseUrl: url,
434
+ apiKey: "test",
435
+ });
436
+ const thread = client.startThread({
437
+ workingDirectory,
438
+ skipGitRepoCheck: true,
439
+ });
440
+ await thread.run("use custom working directory");
441
+ const commandArgs = spawnArgs[0];
442
+ expectPair(commandArgs, ["--cd", workingDirectory]);
443
+ }
444
+ finally {
445
+ restore();
446
+ await close();
447
+ }
448
+ });
449
+ it("throws if working directory is not git and no skipGitRepoCheck is provided", async () => {
450
+ const { url, close } = await startResponsesTestProxy({
451
+ statusCode: 200,
452
+ responseBodies: [
453
+ sse(responseStarted("response_1"), assistantMessage("Working directory applied", "item_1"), responseCompleted("response_1")),
454
+ ],
455
+ });
456
+ try {
457
+ const workingDirectory = fs.mkdtempSync(path.join(os.tmpdir(), "codex-working-dir-"));
458
+ const client = new Codex({
459
+ codexPathOverride: codexExecPath,
460
+ baseUrl: url,
461
+ apiKey: "test",
462
+ });
463
+ const thread = client.startThread({
464
+ workingDirectory,
465
+ });
466
+ await expect(thread.run("use custom working directory")).rejects.toThrow(/Not inside a trusted directory/);
467
+ }
468
+ finally {
469
+ await close();
470
+ }
471
+ });
472
+ it("sets the codex sdk originator header", async () => {
473
+ const { url, close, requests } = await startResponsesTestProxy({
474
+ statusCode: 200,
475
+ responseBodies: [sse(responseStarted(), assistantMessage("Hi!"), responseCompleted())],
476
+ });
477
+ try {
478
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
479
+ const thread = client.startThread();
480
+ await thread.run("Hello, originator!");
481
+ expect(requests.length).toBeGreaterThan(0);
482
+ const originatorHeader = requests[0].headers["originator"];
483
+ if (Array.isArray(originatorHeader)) {
484
+ expect(originatorHeader).toContain("codex_sdk_ts");
485
+ }
486
+ else {
487
+ expect(originatorHeader).toBe("codex_sdk_ts");
488
+ }
489
+ }
490
+ finally {
491
+ await close();
492
+ }
493
+ });
494
+ it("throws ThreadRunError on turn failures", async () => {
495
+ const { url, close } = await startResponsesTestProxy({
496
+ statusCode: 200,
497
+ responseBodies: (function* () {
498
+ yield sse(responseStarted("response_1"));
499
+ while (true) {
500
+ yield sse(responseFailed("rate limit exceeded"));
501
+ }
502
+ })(),
503
+ });
504
+ try {
505
+ const client = new Codex({ codexPathOverride: codexExecPath, baseUrl: url, apiKey: "test" });
506
+ const thread = client.startThread();
507
+ await expect(thread.run("fail")).rejects.toThrow("stream disconnected before completion:");
508
+ }
509
+ finally {
510
+ await close();
511
+ }
512
+ }, 10000); // TODO(pakrym): remove timeout
513
+ });
514
+ function expectPair(args, pair) {
515
+ if (!args) {
516
+ throw new Error("Args is undefined");
517
+ }
518
+ const index = args.indexOf(pair[0]);
519
+ if (index === -1) {
520
+ throw new Error(`Pair ${pair[0]} not found in args`);
521
+ }
522
+ expect(args[index + 1]).toBe(pair[1]);
523
+ }
524
+ //# sourceMappingURL=run.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.test.js","sourceRoot":"","sources":["../../tests/run.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=runStreamed.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runStreamed.test.d.ts","sourceRoot":"","sources":["../../tests/runStreamed.test.ts"],"names":[],"mappings":""}