@northflare/runner 0.0.8 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/claude-sdk-manager.d.ts +1 -1
- package/dist/components/claude-sdk-manager.d.ts.map +1 -1
- package/dist/components/claude-sdk-manager.js +30 -16
- package/dist/components/claude-sdk-manager.js.map +1 -1
- package/dist/components/codex-sdk-manager.d.ts +60 -0
- package/dist/components/codex-sdk-manager.d.ts.map +1 -0
- package/dist/components/codex-sdk-manager.js +988 -0
- package/dist/components/codex-sdk-manager.js.map +1 -0
- package/dist/components/message-handler-sse.d.ts +3 -0
- package/dist/components/message-handler-sse.d.ts.map +1 -1
- package/dist/components/message-handler-sse.js +66 -21
- package/dist/components/message-handler-sse.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/runner-sse.d.ts +4 -0
- package/dist/runner-sse.d.ts.map +1 -1
- package/dist/runner-sse.js +63 -20
- package/dist/runner-sse.js.map +1 -1
- package/dist/runner.js +3 -3
- package/dist/types/claude.d.ts +11 -1
- package/dist/types/claude.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/runner-interface.d.ts +2 -0
- package/dist/types/runner-interface.d.ts.map +1 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +1 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/console.d.ts.map +1 -1
- package/dist/utils/console.js +2 -1
- package/dist/utils/console.js.map +1 -1
- package/dist/utils/debug.d.ts +2 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/debug.js +19 -0
- package/dist/utils/debug.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +6 -4
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/model.d.ts +6 -0
- package/dist/utils/model.d.ts.map +1 -0
- package/dist/utils/model.js +23 -0
- package/dist/utils/model.js.map +1 -0
- package/dist/utils/status-line.d.ts +0 -8
- package/dist/utils/status-line.d.ts.map +1 -1
- package/dist/utils/status-line.js +9 -8
- package/dist/utils/status-line.js.map +1 -1
- package/dist/utils/tool-response-sanitizer.d.ts +9 -0
- package/dist/utils/tool-response-sanitizer.d.ts.map +1 -0
- package/dist/utils/tool-response-sanitizer.js +122 -0
- package/dist/utils/tool-response-sanitizer.js.map +1 -0
- package/exceptions.log +2 -0
- package/lib/codex-sdk/.prettierignore +3 -0
- package/lib/codex-sdk/.prettierrc +5 -0
- package/lib/codex-sdk/README.md +133 -0
- package/lib/codex-sdk/dist/index.d.ts +260 -0
- package/lib/codex-sdk/dist/index.js +426 -0
- package/lib/codex-sdk/eslint.config.js +21 -0
- package/lib/codex-sdk/jest.config.cjs +31 -0
- package/lib/codex-sdk/package.json +65 -0
- package/lib/codex-sdk/samples/basic_streaming.ts +90 -0
- package/lib/codex-sdk/samples/helpers.ts +8 -0
- package/lib/codex-sdk/samples/structured_output.ts +22 -0
- package/lib/codex-sdk/samples/structured_output_zod.ts +19 -0
- package/lib/codex-sdk/src/codex.ts +38 -0
- package/lib/codex-sdk/src/codexOptions.ts +10 -0
- package/lib/codex-sdk/src/events.ts +80 -0
- package/lib/codex-sdk/src/exec.ts +336 -0
- package/lib/codex-sdk/src/index.ts +39 -0
- package/lib/codex-sdk/src/items.ts +127 -0
- package/lib/codex-sdk/src/outputSchemaFile.ts +40 -0
- package/lib/codex-sdk/src/thread.ts +155 -0
- package/lib/codex-sdk/src/threadOptions.ts +18 -0
- package/lib/codex-sdk/src/turnOptions.ts +6 -0
- package/lib/codex-sdk/tests/abort.test.ts +165 -0
- package/lib/codex-sdk/tests/codexExecSpy.ts +37 -0
- package/lib/codex-sdk/tests/responsesProxy.ts +225 -0
- package/lib/codex-sdk/tests/run.test.ts +687 -0
- package/lib/codex-sdk/tests/runStreamed.test.ts +211 -0
- package/lib/codex-sdk/tsconfig.json +24 -0
- package/lib/codex-sdk/tsup.config.ts +12 -0
- package/package.json +3 -1
- package/rejections.log +5 -0
- package/src/components/claude-sdk-manager.ts +38 -17
- package/src/components/codex-sdk-manager.ts +1349 -0
- package/src/components/message-handler-sse.ts +94 -22
- package/src/index.ts +4 -2
- package/src/runner-sse.ts +75 -20
- package/src/types/claude.ts +12 -1
- package/src/types/index.ts +1 -0
- package/src/types/runner-interface.ts +3 -1
- package/src/utils/config.ts +1 -0
- package/src/utils/console.ts +4 -2
- package/src/utils/debug.ts +18 -0
- package/src/utils/logger.ts +8 -5
- package/src/utils/model.ts +29 -0
- package/src/utils/status-line.ts +9 -8
- package/src/utils/tool-response-sanitizer.ts +160 -0
- package/tests/tool-response-sanitizer.test.ts +63 -0
- package/src/utils/codex-sdk.js +0 -448
- package/src/utils/sdk-demo.js +0 -34
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/utils/model.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAQ7D,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,oBAAoB,CAAC;CACxC,CAiBA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseModelValue = parseModelValue;
|
|
4
|
+
const REASONING_VALUES = [
|
|
5
|
+
"low",
|
|
6
|
+
"medium",
|
|
7
|
+
"high",
|
|
8
|
+
];
|
|
9
|
+
function parseModelValue(value) {
|
|
10
|
+
if (!value) {
|
|
11
|
+
return {};
|
|
12
|
+
}
|
|
13
|
+
const [model, possibleEffort] = value.split(":");
|
|
14
|
+
if (possibleEffort &&
|
|
15
|
+
REASONING_VALUES.includes(possibleEffort)) {
|
|
16
|
+
return {
|
|
17
|
+
baseModel: model,
|
|
18
|
+
reasoningEffort: possibleEffort,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return { baseModel: value };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/utils/model.ts"],"names":[],"mappings":";;AAQA,0CAoBC;AA1BD,MAAM,gBAAgB,GAAoC;IACxD,KAAK;IACL,QAAQ;IACR,MAAM;CACP,CAAC;AAEF,SAAgB,eAAe,CAAC,KAAqB;IAInD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjD,IACE,cAAc;QACd,gBAAgB,CAAC,QAAQ,CAAC,cAAsC,CAAC,EACjE,CAAC;QACD,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,eAAe,EAAE,cAAsC;SACxD,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* StatusLineManager - Manages persistent status line output for active Claude Code processes
|
|
3
|
-
*
|
|
4
|
-
* This component maintains a single-line status output that updates every minute to show
|
|
5
|
-
* the count of active Claude Code processes. It prevents the machine from entering idle
|
|
6
|
-
* state while processes are running and provides clear visual feedback without cluttering
|
|
7
|
-
* the terminal with multiple log lines.
|
|
8
|
-
*/
|
|
9
1
|
export declare class StatusLineManager {
|
|
10
2
|
private intervalId?;
|
|
11
3
|
private activeCount;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-line.d.ts","sourceRoot":"","sources":["../../src/utils/status-line.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status-line.d.ts","sourceRoot":"","sources":["../../src/utils/status-line.ts"],"names":[],"mappings":"AAUA,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,SAAS,CAAiB;;IAOlC;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAetC;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,UAAU;IA6BlB;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB;AAGD,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.statusLineManager = exports.StatusLineManager = void 0;
|
|
2
4
|
/**
|
|
3
|
-
* StatusLineManager - Manages persistent status line output for active
|
|
5
|
+
* StatusLineManager - Manages persistent status line output for active agent processes
|
|
4
6
|
*
|
|
5
7
|
* This component maintains a single-line status output that updates every minute to show
|
|
6
|
-
* the count of active
|
|
8
|
+
* the count of active agent processes. It prevents the machine from entering idle
|
|
7
9
|
* state while processes are running and provides clear visual feedback without cluttering
|
|
8
10
|
* the terminal with multiple log lines.
|
|
9
11
|
*/
|
|
10
|
-
|
|
11
|
-
exports.statusLineManager = exports.StatusLineManager = void 0;
|
|
12
|
+
const debug_1 = require("./debug");
|
|
12
13
|
class StatusLineManager {
|
|
13
14
|
intervalId;
|
|
14
15
|
activeCount = 0;
|
|
@@ -16,7 +17,7 @@ class StatusLineManager {
|
|
|
16
17
|
isEnabled = true;
|
|
17
18
|
constructor() {
|
|
18
19
|
// Only enable status line when not in debug mode
|
|
19
|
-
this.isEnabled =
|
|
20
|
+
this.isEnabled = !(0, debug_1.isRunnerDebugEnabled)();
|
|
20
21
|
}
|
|
21
22
|
/**
|
|
22
23
|
* Updates the count of active conversations
|
|
@@ -75,13 +76,13 @@ class StatusLineManager {
|
|
|
75
76
|
const timeStr = now.toTimeString().slice(0, 5); // HH:MM format
|
|
76
77
|
let newLine;
|
|
77
78
|
if (this.activeCount === 0) {
|
|
78
|
-
newLine = "No active
|
|
79
|
+
newLine = "No active agent processes";
|
|
79
80
|
}
|
|
80
81
|
else if (this.activeCount === 1) {
|
|
81
|
-
newLine = `${timeStr} 1 active
|
|
82
|
+
newLine = `${timeStr} 1 active agent process`;
|
|
82
83
|
}
|
|
83
84
|
else {
|
|
84
|
-
newLine = `${timeStr} ${this.activeCount} active
|
|
85
|
+
newLine = `${timeStr} ${this.activeCount} active agent processes`;
|
|
85
86
|
}
|
|
86
87
|
// If this is the first status line, position it
|
|
87
88
|
if (!this.lastLine) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/utils/status-line.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/utils/status-line.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const TOOL_RESPONSE_BYTE_LIMIT: number;
|
|
2
|
+
export declare const TOOL_RESPONSE_SUFFIX = "... [truncated]";
|
|
3
|
+
export interface ToolResponseSanitizationResult {
|
|
4
|
+
params: any;
|
|
5
|
+
truncated: boolean;
|
|
6
|
+
toolUseId?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function sanitizeToolResponsePayload(method: string | undefined, params: any): ToolResponseSanitizationResult;
|
|
9
|
+
//# sourceMappingURL=tool-response-sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-response-sanitizer.d.ts","sourceRoot":"","sources":["../../src/utils/tool-response-sanitizer.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,QAAa,CAAC;AACnD,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AAEtD,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,GAAG,GACV,8BAA8B,CAyBhC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TOOL_RESPONSE_SUFFIX = exports.TOOL_RESPONSE_BYTE_LIMIT = void 0;
|
|
4
|
+
exports.sanitizeToolResponsePayload = sanitizeToolResponsePayload;
|
|
5
|
+
exports.TOOL_RESPONSE_BYTE_LIMIT = 500 * 1024; // 500 KiB cap per tool response payload
|
|
6
|
+
exports.TOOL_RESPONSE_SUFFIX = "... [truncated]";
|
|
7
|
+
function sanitizeToolResponsePayload(method, params) {
|
|
8
|
+
if (method !== "message.agent" || !params) {
|
|
9
|
+
return { params, truncated: false };
|
|
10
|
+
}
|
|
11
|
+
if (!isToolResultPayload(params)) {
|
|
12
|
+
return { params, truncated: false };
|
|
13
|
+
}
|
|
14
|
+
const context = {
|
|
15
|
+
bytesRemaining: exports.TOOL_RESPONSE_BYTE_LIMIT,
|
|
16
|
+
truncated: false,
|
|
17
|
+
};
|
|
18
|
+
const [sanitized, changed] = truncateStringsRecursively(params, context);
|
|
19
|
+
if (!changed && !context.truncated) {
|
|
20
|
+
return { params, truncated: false };
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
params: sanitized,
|
|
24
|
+
truncated: true,
|
|
25
|
+
toolUseId: extractToolUseId(params),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function isToolResultPayload(payload) {
|
|
29
|
+
if (!payload) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (payload.type === "tool_result" || payload.subtype === "tool_result") {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
if (Array.isArray(payload.content)) {
|
|
36
|
+
return payload.content.some((entry) => isToolResultBlock(entry));
|
|
37
|
+
}
|
|
38
|
+
return isToolResultBlock(payload.content);
|
|
39
|
+
}
|
|
40
|
+
function isToolResultBlock(block) {
|
|
41
|
+
if (!block) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return (block.type === "tool_result" ||
|
|
45
|
+
block.subtype === "tool_result" ||
|
|
46
|
+
typeof block.tool_use_id === "string");
|
|
47
|
+
}
|
|
48
|
+
function extractToolUseId(payload) {
|
|
49
|
+
if (!payload) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
if (typeof payload.tool_use_id === "string") {
|
|
53
|
+
return payload.tool_use_id;
|
|
54
|
+
}
|
|
55
|
+
if (Array.isArray(payload.content)) {
|
|
56
|
+
const match = payload.content.find((entry) => entry && typeof entry.tool_use_id === "string");
|
|
57
|
+
if (match) {
|
|
58
|
+
return match.tool_use_id;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (payload.content && typeof payload.content === "object") {
|
|
62
|
+
return extractToolUseId(payload.content);
|
|
63
|
+
}
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
function truncateStringsRecursively(value, context) {
|
|
67
|
+
if (typeof value === "string") {
|
|
68
|
+
return truncateStringValue(value, context);
|
|
69
|
+
}
|
|
70
|
+
if (Array.isArray(value)) {
|
|
71
|
+
let mutated = false;
|
|
72
|
+
let result = value;
|
|
73
|
+
for (let i = 0; i < value.length; i++) {
|
|
74
|
+
const [newItem, changed] = truncateStringsRecursively(value[i], context);
|
|
75
|
+
if (changed) {
|
|
76
|
+
if (!mutated) {
|
|
77
|
+
result = value.slice();
|
|
78
|
+
mutated = true;
|
|
79
|
+
}
|
|
80
|
+
result[i] = newItem;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return [result, mutated];
|
|
84
|
+
}
|
|
85
|
+
if (value && typeof value === "object") {
|
|
86
|
+
let mutated = false;
|
|
87
|
+
let result = value;
|
|
88
|
+
for (const key of Object.keys(value)) {
|
|
89
|
+
const [newVal, changed] = truncateStringsRecursively(value[key], context);
|
|
90
|
+
if (changed) {
|
|
91
|
+
if (!mutated) {
|
|
92
|
+
result = { ...value };
|
|
93
|
+
mutated = true;
|
|
94
|
+
}
|
|
95
|
+
result[key] = newVal;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return [result, mutated];
|
|
99
|
+
}
|
|
100
|
+
return [value, false];
|
|
101
|
+
}
|
|
102
|
+
function truncateStringValue(value, context) {
|
|
103
|
+
if (context.bytesRemaining <= 0) {
|
|
104
|
+
if (value.length === 0) {
|
|
105
|
+
return [value, false];
|
|
106
|
+
}
|
|
107
|
+
context.truncated = true;
|
|
108
|
+
return ["", true];
|
|
109
|
+
}
|
|
110
|
+
const byteLength = Buffer.byteLength(value, "utf8");
|
|
111
|
+
if (byteLength <= context.bytesRemaining) {
|
|
112
|
+
context.bytesRemaining -= byteLength;
|
|
113
|
+
return [value, false];
|
|
114
|
+
}
|
|
115
|
+
const suffixBytes = Buffer.byteLength(exports.TOOL_RESPONSE_SUFFIX, "utf8");
|
|
116
|
+
const maxBytes = Math.max(0, context.bytesRemaining - suffixBytes);
|
|
117
|
+
const truncatedBuffer = Buffer.from(value, "utf8").subarray(0, maxBytes);
|
|
118
|
+
context.bytesRemaining = 0;
|
|
119
|
+
context.truncated = true;
|
|
120
|
+
return [truncatedBuffer.toString("utf8") + exports.TOOL_RESPONSE_SUFFIX, true];
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=tool-response-sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-response-sanitizer.js","sourceRoot":"","sources":["../../src/utils/tool-response-sanitizer.ts"],"names":[],"mappings":"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"}
|
package/exceptions.log
CHANGED
|
@@ -20,3 +20,5 @@
|
|
|
20
20
|
{"date":"Sat Sep 06 2025 16:40:27 GMT+0200 (Central European Summer Time)","error":{"code":"EIO","errno":-5,"syscall":"write"},"exception":true,"level":"error","message":"uncaughtException: write EIO\nError: write EIO\n at afterWriteDispatched (node:internal/stream_base_commons:159:15)\n at writeGeneric (node:internal/stream_base_commons:150:3)\n at Socket._writeGeneric (node:net:971:11)\n at Socket._write (node:net:983:8)\n at writeOrBuffer (node:internal/streams/writable:572:12)\n at _write (node:internal/streams/writable:501:10)\n at Writable.write (node:internal/streams/writable:510:10)\n at Console.log (/Users/toby/Code/claudette/runner/node_modules/winston/lib/winston/transports/console.js:87:23)\n at Console._write (/Users/toby/Code/claudette/runner/node_modules/winston-transport/modern.js:103:17)\n at doWrite (/Users/toby/Code/claudette/runner/node_modules/readable-stream/lib/_stream_writable.js:390:139)","os":{"loadavg":[4.64794921875,4.4501953125,5.123046875],"uptime":711730},"process":{"argv":["/Users/toby/.nvm/versions/node/v22.15.0/bin/node","/Users/toby/Code/claudette/runner/bin/claudette-runner"],"cwd":"/Users/toby/Code/claudette/runner","execPath":"/Users/toby/.nvm/versions/node/v22.15.0/bin/node","gid":20,"memoryUsage":{"arrayBuffers":444282,"external":4011748,"heapTotal":20381696,"heapUsed":17927296,"rss":47316992},"pid":27683,"uid":501,"version":"v22.15.0"},"stack":"Error: write EIO\n at afterWriteDispatched (node:internal/stream_base_commons:159:15)\n at writeGeneric (node:internal/stream_base_commons:150:3)\n at Socket._writeGeneric (node:net:971:11)\n at Socket._write (node:net:983:8)\n at writeOrBuffer (node:internal/streams/writable:572:12)\n at _write (node:internal/streams/writable:501:10)\n at Writable.write (node:internal/streams/writable:510:10)\n at Console.log (/Users/toby/Code/claudette/runner/node_modules/winston/lib/winston/transports/console.js:87:23)\n at Console._write (/Users/toby/Code/claudette/runner/node_modules/winston-transport/modern.js:103:17)\n at doWrite (/Users/toby/Code/claudette/runner/node_modules/readable-stream/lib/_stream_writable.js:390:139)","trace":[{"column":15,"file":"node:internal/stream_base_commons","function":"afterWriteDispatched","line":159,"method":null,"native":false},{"column":3,"file":"node:internal/stream_base_commons","function":"writeGeneric","line":150,"method":null,"native":false},{"column":11,"file":"node:net","function":"Socket._writeGeneric","line":971,"method":"_writeGeneric","native":false},{"column":8,"file":"node:net","function":"Socket._write","line":983,"method":"_write","native":false},{"column":12,"file":"node:internal/streams/writable","function":"writeOrBuffer","line":572,"method":null,"native":false},{"column":10,"file":"node:internal/streams/writable","function":"_write","line":501,"method":null,"native":false},{"column":10,"file":"node:internal/streams/writable","function":"Writable.write","line":510,"method":"write","native":false},{"column":23,"file":"/Users/toby/Code/claudette/runner/node_modules/winston/lib/winston/transports/console.js","function":"Console.log","line":87,"method":"log","native":false},{"column":17,"file":"/Users/toby/Code/claudette/runner/node_modules/winston-transport/modern.js","function":"Console._write","line":103,"method":"_write","native":false},{"column":139,"file":"/Users/toby/Code/claudette/runner/node_modules/readable-stream/lib/_stream_writable.js","function":"doWrite","line":390,"method":null,"native":false}]}
|
|
21
21
|
{"date":"Mon Sep 08 2025 22:11:00 GMT+0200 (Central European Summer Time)","error":{"code":"EPIPE","errno":-32,"syscall":"write"},"exception":true,"level":"error","message":"uncaughtException: write EPIPE\nError: write EPIPE\n at afterWriteDispatched (node:internal/stream_base_commons:159:15)\n at writeGeneric (node:internal/stream_base_commons:150:3)\n at Socket._writeGeneric (node:net:971:11)\n at Socket._write (node:net:983:8)\n at writeOrBuffer (node:internal/streams/writable:572:12)\n at _write (node:internal/streams/writable:501:10)\n at Writable.write (node:internal/streams/writable:510:10)\n at Console.log (/Users/toby/Code/claudette/runner/node_modules/winston/lib/winston/transports/console.js:87:23)\n at Console._write (/Users/toby/Code/claudette/runner/node_modules/winston-transport/modern.js:103:17)\n at doWrite (/Users/toby/Code/claudette/runner/node_modules/readable-stream/lib/_stream_writable.js:390:139)","os":{"loadavg":[6.78125,5.298828125,4.9677734375],"uptime":191941},"process":{"argv":["/Users/toby/.nvm/versions/node/v22.15.0/bin/node","/Users/toby/Code/claudette/runner/bin/claudette-runner"],"cwd":"/Users/toby/Code/claudette/runner","execPath":"/Users/toby/.nvm/versions/node/v22.15.0/bin/node","gid":20,"memoryUsage":{"arrayBuffers":119555,"external":3681779,"heapTotal":16187392,"heapUsed":14192632,"rss":72040448},"pid":58196,"uid":501,"version":"v22.15.0"},"stack":"Error: write EPIPE\n at afterWriteDispatched (node:internal/stream_base_commons:159:15)\n at writeGeneric (node:internal/stream_base_commons:150:3)\n at Socket._writeGeneric (node:net:971:11)\n at Socket._write (node:net:983:8)\n at writeOrBuffer (node:internal/streams/writable:572:12)\n at _write (node:internal/streams/writable:501:10)\n at Writable.write (node:internal/streams/writable:510:10)\n at Console.log (/Users/toby/Code/claudette/runner/node_modules/winston/lib/winston/transports/console.js:87:23)\n at Console._write (/Users/toby/Code/claudette/runner/node_modules/winston-transport/modern.js:103:17)\n at doWrite (/Users/toby/Code/claudette/runner/node_modules/readable-stream/lib/_stream_writable.js:390:139)","trace":[{"column":15,"file":"node:internal/stream_base_commons","function":"afterWriteDispatched","line":159,"method":null,"native":false},{"column":3,"file":"node:internal/stream_base_commons","function":"writeGeneric","line":150,"method":null,"native":false},{"column":11,"file":"node:net","function":"Socket._writeGeneric","line":971,"method":"_writeGeneric","native":false},{"column":8,"file":"node:net","function":"Socket._write","line":983,"method":"_write","native":false},{"column":12,"file":"node:internal/streams/writable","function":"writeOrBuffer","line":572,"method":null,"native":false},{"column":10,"file":"node:internal/streams/writable","function":"_write","line":501,"method":null,"native":false},{"column":10,"file":"node:internal/streams/writable","function":"Writable.write","line":510,"method":"write","native":false},{"column":23,"file":"/Users/toby/Code/claudette/runner/node_modules/winston/lib/winston/transports/console.js","function":"Console.log","line":87,"method":"log","native":false},{"column":17,"file":"/Users/toby/Code/claudette/runner/node_modules/winston-transport/modern.js","function":"Console._write","line":103,"method":"_write","native":false},{"column":139,"file":"/Users/toby/Code/claudette/runner/node_modules/readable-stream/lib/_stream_writable.js","function":"doWrite","line":390,"method":null,"native":false}]}
|
|
22
22
|
{"date":"Wed Sep 24 2025 20:45:13 GMT+0200 (Central European Summer Time)","error":{"code":"EIO","errno":-5,"syscall":"write"},"exception":true,"level":"error","message":"uncaughtException: write EIO\nError: write EIO\n at afterWriteDispatched (node:internal/stream_base_commons:159:15)\n at writeGeneric (node:internal/stream_base_commons:150:3)\n at Socket._writeGeneric (node:net:971:11)\n at Socket._write (node:net:983:8)\n at writeOrBuffer (node:internal/streams/writable:572:12)\n at _write (node:internal/streams/writable:501:10)\n at Writable.write (node:internal/streams/writable:510:10)\n at Console.log (/Users/toby/Code/claudette/runner/node_modules/winston/lib/winston/transports/console.js:87:23)\n at Console._write (/Users/toby/Code/claudette/runner/node_modules/winston-transport/modern.js:103:17)\n at doWrite (/Users/toby/Code/claudette/runner/node_modules/readable-stream/lib/_stream_writable.js:390:139)","os":{"loadavg":[7.310546875,8.75048828125,7.3759765625],"uptime":564848},"process":{"argv":["/Users/toby/.nvm/versions/node/v22.15.0/bin/node","/Users/toby/Code/claudette/runner/bin/claudette-runner"],"cwd":"/Users/toby/Code/claudette/runner","execPath":"/Users/toby/.nvm/versions/node/v22.15.0/bin/node","gid":20,"memoryUsage":{"arrayBuffers":120073,"external":3596940,"heapTotal":34619392,"heapUsed":24498536,"rss":46694400},"pid":52025,"uid":501,"version":"v22.15.0"},"stack":"Error: write EIO\n at afterWriteDispatched (node:internal/stream_base_commons:159:15)\n at writeGeneric (node:internal/stream_base_commons:150:3)\n at Socket._writeGeneric (node:net:971:11)\n at Socket._write (node:net:983:8)\n at writeOrBuffer (node:internal/streams/writable:572:12)\n at _write (node:internal/streams/writable:501:10)\n at Writable.write (node:internal/streams/writable:510:10)\n at Console.log (/Users/toby/Code/claudette/runner/node_modules/winston/lib/winston/transports/console.js:87:23)\n at Console._write (/Users/toby/Code/claudette/runner/node_modules/winston-transport/modern.js:103:17)\n at doWrite (/Users/toby/Code/claudette/runner/node_modules/readable-stream/lib/_stream_writable.js:390:139)","trace":[{"column":15,"file":"node:internal/stream_base_commons","function":"afterWriteDispatched","line":159,"method":null,"native":false},{"column":3,"file":"node:internal/stream_base_commons","function":"writeGeneric","line":150,"method":null,"native":false},{"column":11,"file":"node:net","function":"Socket._writeGeneric","line":971,"method":"_writeGeneric","native":false},{"column":8,"file":"node:net","function":"Socket._write","line":983,"method":"_write","native":false},{"column":12,"file":"node:internal/streams/writable","function":"writeOrBuffer","line":572,"method":null,"native":false},{"column":10,"file":"node:internal/streams/writable","function":"_write","line":501,"method":null,"native":false},{"column":10,"file":"node:internal/streams/writable","function":"Writable.write","line":510,"method":"write","native":false},{"column":23,"file":"/Users/toby/Code/claudette/runner/node_modules/winston/lib/winston/transports/console.js","function":"Console.log","line":87,"method":"log","native":false},{"column":17,"file":"/Users/toby/Code/claudette/runner/node_modules/winston-transport/modern.js","function":"Console._write","line":103,"method":"_write","native":false},{"column":139,"file":"/Users/toby/Code/claudette/runner/node_modules/readable-stream/lib/_stream_writable.js","function":"doWrite","line":390,"method":null,"native":false}]}
|
|
23
|
+
{"date":"Tue Nov 18 2025 20:47:42 GMT+0100 (Central European Standard Time)","error":{},"exception":true,"level":"error","message":"uncaughtException: Invalid string length\nRangeError: Invalid string length\n at [_normalWrite] [as _normalWrite] (node:internal/readline/interface:618:31)\n at Socket.ondata (node:internal/readline/interface:246:23)\n at Socket.emit (node:events:518:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at Pipe.onStreamRead (node:internal/stream_base_commons:189:23)","os":{"loadavg":[7.28466796875,5.82568359375,5.478515625],"uptime":131045},"process":{"argv":["/Users/toby/.nvm/versions/node/v22.15.0/bin/node","/Users/toby/Code/claudette/runner/bin/northflare-runner"],"cwd":"/Users/toby/Code/claudette/runner","execPath":"/Users/toby/.nvm/versions/node/v22.15.0/bin/node","gid":20,"memoryUsage":{"arrayBuffers":6679914,"external":10202964,"heapTotal":650330112,"heapUsed":609094464,"rss":721158144},"pid":64467,"uid":501,"version":"v22.15.0"},"stack":"RangeError: Invalid string length\n at [_normalWrite] [as _normalWrite] (node:internal/readline/interface:618:31)\n at Socket.ondata (node:internal/readline/interface:246:23)\n at Socket.emit (node:events:518:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at Pipe.onStreamRead (node:internal/stream_base_commons:189:23)","trace":[{"column":31,"file":"node:internal/readline/interface","function":"[_normalWrite] [as _normalWrite]","line":618,"method":null,"native":false},{"column":23,"file":"node:internal/readline/interface","function":"Socket.ondata","line":246,"method":"ondata","native":false},{"column":28,"file":"node:events","function":"Socket.emit","line":518,"method":"emit","native":false},{"column":12,"file":"node:internal/streams/readable","function":"addChunk","line":561,"method":null,"native":false},{"column":3,"file":"node:internal/streams/readable","function":"readableAddChunkPushByteMode","line":512,"method":null,"native":false},{"column":5,"file":"node:internal/streams/readable","function":"Readable.push","line":392,"method":"push","native":false},{"column":23,"file":"node:internal/stream_base_commons","function":"Pipe.onStreamRead","line":189,"method":"onStreamRead","native":false}]}
|
|
24
|
+
{"date":"Wed Nov 19 2025 12:56:38 GMT+0100 (Central European Standard Time)","error":{},"exception":true,"level":"error","message":"uncaughtException: Invalid string length\nRangeError: Invalid string length\n at [_normalWrite] [as _normalWrite] (node:internal/readline/interface:618:31)\n at Socket.ondata (node:internal/readline/interface:246:23)\n at Socket.emit (node:events:518:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at Pipe.onStreamRead (node:internal/stream_base_commons:189:23)","os":{"loadavg":[5.94970703125,5.3193359375,4.1474609375],"uptime":189181},"process":{"argv":["/Users/toby/.nvm/versions/node/v22.15.0/bin/node","/Users/toby/.nvm/versions/node/v22.15.0/bin/runner"],"cwd":"/Users/toby/Code/claudette/runner","execPath":"/Users/toby/.nvm/versions/node/v22.15.0/bin/node","gid":20,"memoryUsage":{"arrayBuffers":1765208,"external":5288258,"heapTotal":633290752,"heapUsed":588990800,"rss":693665792},"pid":83130,"uid":501,"version":"v22.15.0"},"stack":"RangeError: Invalid string length\n at [_normalWrite] [as _normalWrite] (node:internal/readline/interface:618:31)\n at Socket.ondata (node:internal/readline/interface:246:23)\n at Socket.emit (node:events:518:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at Pipe.onStreamRead (node:internal/stream_base_commons:189:23)","trace":[{"column":31,"file":"node:internal/readline/interface","function":"[_normalWrite] [as _normalWrite]","line":618,"method":null,"native":false},{"column":23,"file":"node:internal/readline/interface","function":"Socket.ondata","line":246,"method":"ondata","native":false},{"column":28,"file":"node:events","function":"Socket.emit","line":518,"method":"emit","native":false},{"column":12,"file":"node:internal/streams/readable","function":"addChunk","line":561,"method":null,"native":false},{"column":3,"file":"node:internal/streams/readable","function":"readableAddChunkPushByteMode","line":512,"method":null,"native":false},{"column":5,"file":"node:internal/streams/readable","function":"Readable.push","line":392,"method":"push","native":false},{"column":23,"file":"node:internal/stream_base_commons","function":"Pipe.onStreamRead","line":189,"method":"onStreamRead","native":false}]}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Codex SDK
|
|
2
|
+
|
|
3
|
+
Embed the Codex agent in your workflows and apps.
|
|
4
|
+
|
|
5
|
+
The TypeScript SDK wraps the bundled `codex` binary. It spawns the CLI and exchanges JSONL events over stdin/stdout.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @openai/codex-sdk
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Requires Node.js 18+.
|
|
14
|
+
|
|
15
|
+
## Quickstart
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { Codex } from "@openai/codex-sdk";
|
|
19
|
+
|
|
20
|
+
const codex = new Codex();
|
|
21
|
+
const thread = codex.startThread();
|
|
22
|
+
const turn = await thread.run("Diagnose the test failure and propose a fix");
|
|
23
|
+
|
|
24
|
+
console.log(turn.finalResponse);
|
|
25
|
+
console.log(turn.items);
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Call `run()` repeatedly on the same `Thread` instance to continue that conversation.
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
const nextTurn = await thread.run("Implement the fix");
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Streaming responses
|
|
35
|
+
|
|
36
|
+
`run()` buffers events until the turn finishes. To react to intermediate progress—tool calls, streaming responses, and file change notifications—use `runStreamed()` instead, which returns an async generator of structured events.
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
const { events } = await thread.runStreamed("Diagnose the test failure and propose a fix");
|
|
40
|
+
|
|
41
|
+
for await (const event of events) {
|
|
42
|
+
switch (event.type) {
|
|
43
|
+
case "item.completed":
|
|
44
|
+
console.log("item", event.item);
|
|
45
|
+
break;
|
|
46
|
+
case "turn.completed":
|
|
47
|
+
console.log("usage", event.usage);
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Structured output
|
|
54
|
+
|
|
55
|
+
The Codex agent can produce a JSON response that conforms to a specified schema. The schema can be provided for each turn as a plain JSON object.
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
const schema = {
|
|
59
|
+
type: "object",
|
|
60
|
+
properties: {
|
|
61
|
+
summary: { type: "string" },
|
|
62
|
+
status: { type: "string", enum: ["ok", "action_required"] },
|
|
63
|
+
},
|
|
64
|
+
required: ["summary", "status"],
|
|
65
|
+
additionalProperties: false,
|
|
66
|
+
} as const;
|
|
67
|
+
|
|
68
|
+
const turn = await thread.run("Summarize repository status", { outputSchema: schema });
|
|
69
|
+
console.log(turn.finalResponse);
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
You can also create a JSON schema from a [Zod schema](https://github.com/colinhacks/zod) using the [`zod-to-json-schema`](https://www.npmjs.com/package/zod-to-json-schema) package and setting the `target` to `"openAi"`.
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
const schema = z.object({
|
|
76
|
+
summary: z.string(),
|
|
77
|
+
status: z.enum(["ok", "action_required"]),
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
const turn = await thread.run("Summarize repository status", {
|
|
81
|
+
outputSchema: zodToJsonSchema(schema, { target: "openAi" }),
|
|
82
|
+
});
|
|
83
|
+
console.log(turn.finalResponse);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Attaching images
|
|
87
|
+
|
|
88
|
+
Provide structured input entries when you need to include images alongside text. Text entries are concatenated into the final prompt while image entries are passed to the Codex CLI via `--image`.
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
const turn = await thread.run([
|
|
92
|
+
{ type: "text", text: "Describe these screenshots" },
|
|
93
|
+
{ type: "local_image", path: "./ui.png" },
|
|
94
|
+
{ type: "local_image", path: "./diagram.jpg" },
|
|
95
|
+
]);
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Resuming an existing thread
|
|
99
|
+
|
|
100
|
+
Threads are persisted in `~/.codex/sessions`. If you lose the in-memory `Thread` object, reconstruct it with `resumeThread()` and keep going.
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
const savedThreadId = process.env.CODEX_THREAD_ID!;
|
|
104
|
+
const thread = codex.resumeThread(savedThreadId);
|
|
105
|
+
await thread.run("Implement the fix");
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Working directory controls
|
|
109
|
+
|
|
110
|
+
Codex runs in the current working directory by default. To avoid unrecoverable errors, Codex requires the working directory to be a Git repository. You can skip the Git repository check by passing the `skipGitRepoCheck` option when creating a thread.
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
const thread = codex.startThread({
|
|
114
|
+
workingDirectory: "/path/to/project",
|
|
115
|
+
skipGitRepoCheck: true,
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Controlling the Codex CLI environment
|
|
120
|
+
|
|
121
|
+
By default, the Codex CLI inherits the Node.js process environment. Provide the optional `env` parameter when instantiating the
|
|
122
|
+
`Codex` client to fully control which variables the CLI receives—useful for sandboxed hosts like Electron apps.
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
const codex = new Codex({
|
|
126
|
+
env: {
|
|
127
|
+
PATH: "/usr/local/bin",
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The SDK still injects its required variables (such as `OPENAI_BASE_URL` and `CODEX_API_KEY`) on top of the environment you
|
|
133
|
+
provide.
|