@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,225 @@
1
+ import http from "node:http";
2
+
3
+ const DEFAULT_RESPONSE_ID = "resp_mock";
4
+ const DEFAULT_MESSAGE_ID = "msg_mock";
5
+
6
+ type ResponseCompletedUsage = {
7
+ input_tokens: number;
8
+ input_tokens_details: { cached_tokens: number } | null;
9
+ output_tokens: number;
10
+ output_tokens_details: { reasoning_tokens: number } | null;
11
+ total_tokens: number;
12
+ };
13
+
14
+ const DEFAULT_COMPLETED_USAGE: ResponseCompletedUsage = {
15
+ input_tokens: 42,
16
+ input_tokens_details: { cached_tokens: 12 },
17
+ output_tokens: 5,
18
+ output_tokens_details: null,
19
+ total_tokens: 47,
20
+ };
21
+
22
+ export type SseEvent = {
23
+ type: string;
24
+ [key: string]: unknown;
25
+ };
26
+
27
+ export type SseResponseBody = {
28
+ kind: "sse";
29
+ events: SseEvent[];
30
+ };
31
+
32
+ export type ResponsesProxyOptions = {
33
+ responseBodies: Generator<SseResponseBody> | SseResponseBody[];
34
+ statusCode?: number;
35
+ };
36
+
37
+ export type ResponsesProxy = {
38
+ url: string;
39
+ close: () => Promise<void>;
40
+ requests: RecordedRequest[];
41
+ };
42
+
43
+ export type ResponsesApiRequest = {
44
+ model?: string;
45
+ input: Array<{
46
+ role: string;
47
+ content?: Array<{ type: string; text: string }>;
48
+ }>;
49
+ text?: {
50
+ format?: Record<string, unknown>;
51
+ };
52
+ };
53
+
54
+ export type RecordedRequest = {
55
+ body: string;
56
+ json: ResponsesApiRequest;
57
+ headers: http.IncomingHttpHeaders;
58
+ };
59
+
60
+ function formatSseEvent(event: SseEvent): string {
61
+ return `event: ${event.type}\n` + `data: ${JSON.stringify(event)}\n\n`;
62
+ }
63
+
64
+ export async function startResponsesTestProxy(
65
+ options: ResponsesProxyOptions,
66
+ ): Promise<ResponsesProxy> {
67
+ function* createGenerator(array: SseResponseBody[]): Generator<SseResponseBody> {
68
+ for (const elem of array) {
69
+ yield elem;
70
+ }
71
+ throw new Error("not enough responses provided");
72
+ }
73
+
74
+ const responseBodies: Generator<SseResponseBody> = Array.isArray(options.responseBodies)
75
+ ? createGenerator(options.responseBodies)
76
+ : options.responseBodies;
77
+
78
+ const requests: RecordedRequest[] = [];
79
+
80
+ function readRequestBody(req: http.IncomingMessage): Promise<string> {
81
+ return new Promise<string>((resolve, reject) => {
82
+ const chunks: Buffer[] = [];
83
+ req.on("data", (chunk) => {
84
+ chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
85
+ });
86
+ req.on("end", () => {
87
+ resolve(Buffer.concat(chunks).toString("utf8"));
88
+ });
89
+ req.on("error", reject);
90
+ });
91
+ }
92
+
93
+ const server = http.createServer((req, res) => {
94
+ async function handle(): Promise<void> {
95
+ if (req.method === "POST" && req.url === "/responses") {
96
+ const body = await readRequestBody(req);
97
+ const json = JSON.parse(body);
98
+ requests.push({ body, json, headers: { ...req.headers } });
99
+
100
+ const status = options.statusCode ?? 200;
101
+ res.statusCode = status;
102
+ res.setHeader("content-type", "text/event-stream");
103
+
104
+ const responseBody = responseBodies.next().value;
105
+ for (const event of responseBody.events) {
106
+ res.write(formatSseEvent(event));
107
+ }
108
+ res.end();
109
+ return;
110
+ }
111
+
112
+ res.statusCode = 404;
113
+ res.end();
114
+ }
115
+
116
+ handle().catch(() => {
117
+ res.statusCode = 500;
118
+ res.end();
119
+ });
120
+ });
121
+
122
+ const url = await new Promise<string>((resolve, reject) => {
123
+ server.listen(0, "127.0.0.1", () => {
124
+ const address = server.address();
125
+ if (!address || typeof address === "string") {
126
+ reject(new Error("Unable to determine proxy address"));
127
+ return;
128
+ }
129
+ server.off("error", reject);
130
+ const info = address;
131
+ resolve(`http://${info.address}:${info.port}`);
132
+ });
133
+ server.once("error", reject);
134
+ });
135
+
136
+ async function close(): Promise<void> {
137
+ await new Promise<void>((resolve, reject) => {
138
+ server.close((err) => {
139
+ if (err) {
140
+ reject(err);
141
+ return;
142
+ }
143
+ resolve();
144
+ });
145
+ });
146
+ }
147
+ return { url, close, requests };
148
+ }
149
+
150
+ export function sse(...events: SseEvent[]): SseResponseBody {
151
+ return {
152
+ kind: "sse",
153
+ events,
154
+ };
155
+ }
156
+
157
+ export function responseStarted(responseId: string = DEFAULT_RESPONSE_ID): SseEvent {
158
+ return {
159
+ type: "response.created",
160
+ response: {
161
+ id: responseId,
162
+ },
163
+ };
164
+ }
165
+
166
+ export function assistantMessage(text: string, itemId: string = DEFAULT_MESSAGE_ID): SseEvent {
167
+ return {
168
+ type: "response.output_item.done",
169
+ item: {
170
+ type: "message",
171
+ role: "assistant",
172
+ id: itemId,
173
+ content: [
174
+ {
175
+ type: "output_text",
176
+ text,
177
+ },
178
+ ],
179
+ },
180
+ };
181
+ }
182
+
183
+ export function shell_call(): SseEvent {
184
+ const command = ["bash", "-lc", "echo 'Hello, world!'"];
185
+ return {
186
+ type: "response.output_item.done",
187
+ item: {
188
+ type: "function_call",
189
+ call_id: `call_id${Math.random().toString(36).slice(2)}`,
190
+ name: "shell",
191
+ arguments: JSON.stringify({
192
+ command,
193
+ timeout_ms: 100,
194
+ }),
195
+ },
196
+ };
197
+ }
198
+
199
+ export function responseFailed(errorMessage: string): SseEvent {
200
+ return {
201
+ type: "error",
202
+ error: { code: "rate_limit_exceeded", message: errorMessage },
203
+ };
204
+ }
205
+
206
+ export function responseCompleted(
207
+ responseId: string = DEFAULT_RESPONSE_ID,
208
+ usage: ResponseCompletedUsage = DEFAULT_COMPLETED_USAGE,
209
+ ): SseEvent {
210
+ const inputDetails = usage.input_tokens_details ? { ...usage.input_tokens_details } : null;
211
+ const outputDetails = usage.output_tokens_details ? { ...usage.output_tokens_details } : null;
212
+ return {
213
+ type: "response.completed",
214
+ response: {
215
+ id: responseId,
216
+ usage: {
217
+ input_tokens: usage.input_tokens,
218
+ input_tokens_details: inputDetails,
219
+ output_tokens: usage.output_tokens,
220
+ output_tokens_details: outputDetails,
221
+ total_tokens: usage.total_tokens,
222
+ },
223
+ },
224
+ };
225
+ }