@northflare/runner 0.0.17 → 0.0.20
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/bin/northflare-runner +17 -3
- package/dist/components/claude-sdk-manager.d.ts +6 -3
- package/dist/components/claude-sdk-manager.d.ts.map +1 -1
- package/dist/components/claude-sdk-manager.js +62 -42
- package/dist/components/claude-sdk-manager.js.map +1 -1
- package/dist/components/codex-sdk-manager.d.ts +6 -3
- package/dist/components/codex-sdk-manager.d.ts.map +1 -1
- package/dist/components/codex-sdk-manager.js +60 -16
- package/dist/components/codex-sdk-manager.js.map +1 -1
- package/dist/components/enhanced-repository-manager.d.ts.map +1 -1
- package/dist/components/enhanced-repository-manager.js +2 -1
- package/dist/components/enhanced-repository-manager.js.map +1 -1
- package/dist/components/message-handler-sse.d.ts.map +1 -1
- package/dist/components/message-handler-sse.js +157 -116
- package/dist/components/message-handler-sse.js.map +1 -1
- package/dist/components/northflare-agent-sdk-manager.d.ts +10 -6
- package/dist/components/northflare-agent-sdk-manager.d.ts.map +1 -1
- package/dist/components/northflare-agent-sdk-manager.js +350 -98
- package/dist/components/northflare-agent-sdk-manager.js.map +1 -1
- package/dist/components/repository-manager.d.ts.map +1 -1
- package/dist/components/repository-manager.js +2 -1
- package/dist/components/repository-manager.js.map +1 -1
- package/dist/runner-sse.d.ts.map +1 -1
- package/dist/runner-sse.js +7 -0
- package/dist/runner-sse.js.map +1 -1
- package/dist/types/claude.d.ts +4 -1
- package/dist/types/claude.d.ts.map +1 -1
- package/dist/utils/console.d.ts +5 -8
- package/dist/utils/console.d.ts.map +1 -1
- package/dist/utils/console.js +28 -10
- package/dist/utils/console.js.map +1 -1
- package/dist/utils/debug.d.ts +10 -0
- package/dist/utils/debug.d.ts.map +1 -1
- package/dist/utils/debug.js +86 -8
- package/dist/utils/debug.js.map +1 -1
- package/dist/utils/logger.d.ts +2 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +43 -13
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/message-log.d.ts +23 -0
- package/dist/utils/message-log.d.ts.map +1 -0
- package/dist/utils/message-log.js +69 -0
- package/dist/utils/message-log.js.map +1 -0
- package/dist/utils/status-line.d.ts +5 -1
- package/dist/utils/status-line.d.ts.map +1 -1
- package/dist/utils/status-line.js +13 -3
- package/dist/utils/status-line.js.map +1 -1
- package/package.json +3 -4
- package/{lib/codex-sdk/tsup.config.ts → tsup.config.ts} +2 -2
- package/lib/codex-sdk/.prettierignore +0 -3
- package/lib/codex-sdk/.prettierrc +0 -5
- package/lib/codex-sdk/README.md +0 -133
- package/lib/codex-sdk/dist/index.d.ts +0 -260
- package/lib/codex-sdk/dist/index.js +0 -426
- package/lib/codex-sdk/dist/samples/basic_streaming.d.ts +0 -3
- package/lib/codex-sdk/dist/samples/basic_streaming.d.ts.map +0 -1
- package/lib/codex-sdk/dist/samples/basic_streaming.js +0 -81
- package/lib/codex-sdk/dist/samples/basic_streaming.js.map +0 -1
- package/lib/codex-sdk/dist/samples/helpers.d.ts +0 -2
- package/lib/codex-sdk/dist/samples/helpers.d.ts.map +0 -1
- package/lib/codex-sdk/dist/samples/helpers.js +0 -6
- package/lib/codex-sdk/dist/samples/helpers.js.map +0 -1
- package/lib/codex-sdk/dist/samples/structured_output.d.ts +0 -3
- package/lib/codex-sdk/dist/samples/structured_output.d.ts.map +0 -1
- package/lib/codex-sdk/dist/samples/structured_output.js +0 -17
- package/lib/codex-sdk/dist/samples/structured_output.js.map +0 -1
- package/lib/codex-sdk/dist/samples/structured_output_zod.d.ts +0 -3
- package/lib/codex-sdk/dist/samples/structured_output_zod.d.ts.map +0 -1
- package/lib/codex-sdk/dist/samples/structured_output_zod.js +0 -16
- package/lib/codex-sdk/dist/samples/structured_output_zod.js.map +0 -1
- package/lib/codex-sdk/dist/src/codex.d.ts +0 -27
- package/lib/codex-sdk/dist/src/codex.d.ts.map +0 -1
- package/lib/codex-sdk/dist/src/codex.js +0 -33
- package/lib/codex-sdk/dist/src/codex.js.map +0 -1
- package/lib/codex-sdk/dist/src/codexOptions.d.ts +0 -11
- package/lib/codex-sdk/dist/src/codexOptions.d.ts.map +0 -1
- package/lib/codex-sdk/dist/src/codexOptions.js +0 -2
- package/lib/codex-sdk/dist/src/codexOptions.js.map +0 -1
- package/lib/codex-sdk/dist/src/events.d.ts +0 -60
- package/lib/codex-sdk/dist/src/events.d.ts.map +0 -1
- package/lib/codex-sdk/dist/src/events.js +0 -3
- package/lib/codex-sdk/dist/src/events.js.map +0 -1
- package/lib/codex-sdk/dist/src/exec.d.ts +0 -27
- package/lib/codex-sdk/dist/src/exec.d.ts.map +0 -1
- package/lib/codex-sdk/dist/src/exec.js +0 -264
- package/lib/codex-sdk/dist/src/exec.js.map +0 -1
- package/lib/codex-sdk/dist/src/index.d.ts +0 -9
- package/lib/codex-sdk/dist/src/index.d.ts.map +0 -1
- package/lib/codex-sdk/dist/src/index.js +0 -3
- package/lib/codex-sdk/dist/src/index.js.map +0 -1
- package/lib/codex-sdk/dist/src/items.d.ts +0 -103
- package/lib/codex-sdk/dist/src/items.d.ts.map +0 -1
- package/lib/codex-sdk/dist/src/items.js +0 -3
- package/lib/codex-sdk/dist/src/items.js.map +0 -1
- package/lib/codex-sdk/dist/src/outputSchemaFile.d.ts +0 -6
- package/lib/codex-sdk/dist/src/outputSchemaFile.d.ts.map +0 -1
- package/lib/codex-sdk/dist/src/outputSchemaFile.js +0 -33
- package/lib/codex-sdk/dist/src/outputSchemaFile.js.map +0 -1
- package/lib/codex-sdk/dist/src/thread.d.ts +0 -41
- package/lib/codex-sdk/dist/src/thread.d.ts.map +0 -1
- package/lib/codex-sdk/dist/src/thread.js +0 -109
- package/lib/codex-sdk/dist/src/thread.js.map +0 -1
- package/lib/codex-sdk/dist/src/threadOptions.d.ts +0 -16
- package/lib/codex-sdk/dist/src/threadOptions.d.ts.map +0 -1
- package/lib/codex-sdk/dist/src/threadOptions.js +0 -2
- package/lib/codex-sdk/dist/src/threadOptions.js.map +0 -1
- package/lib/codex-sdk/dist/src/turnOptions.d.ts +0 -7
- package/lib/codex-sdk/dist/src/turnOptions.d.ts.map +0 -1
- package/lib/codex-sdk/dist/src/turnOptions.js +0 -2
- package/lib/codex-sdk/dist/src/turnOptions.js.map +0 -1
- package/lib/codex-sdk/dist/tests/abort.test.d.ts +0 -2
- package/lib/codex-sdk/dist/tests/abort.test.d.ts.map +0 -1
- package/lib/codex-sdk/dist/tests/abort.test.js +0 -130
- package/lib/codex-sdk/dist/tests/abort.test.js.map +0 -1
- package/lib/codex-sdk/dist/tests/codexExecSpy.d.ts +0 -6
- package/lib/codex-sdk/dist/tests/codexExecSpy.d.ts.map +0 -1
- package/lib/codex-sdk/dist/tests/codexExecSpy.js +0 -28
- package/lib/codex-sdk/dist/tests/codexExecSpy.js.map +0 -1
- package/lib/codex-sdk/dist/tests/responsesProxy.d.ts +0 -56
- package/lib/codex-sdk/dist/tests/responsesProxy.d.ts.map +0 -1
- package/lib/codex-sdk/dist/tests/responsesProxy.js +0 -155
- package/lib/codex-sdk/dist/tests/responsesProxy.js.map +0 -1
- package/lib/codex-sdk/dist/tests/run.test.d.ts +0 -2
- package/lib/codex-sdk/dist/tests/run.test.d.ts.map +0 -1
- package/lib/codex-sdk/dist/tests/run.test.js +0 -524
- package/lib/codex-sdk/dist/tests/run.test.js.map +0 -1
- package/lib/codex-sdk/dist/tests/runStreamed.test.d.ts +0 -2
- package/lib/codex-sdk/dist/tests/runStreamed.test.d.ts.map +0 -1
- package/lib/codex-sdk/dist/tests/runStreamed.test.js +0 -153
- package/lib/codex-sdk/dist/tests/runStreamed.test.js.map +0 -1
- package/lib/codex-sdk/dist/tsup.config.d.ts +0 -3
- package/lib/codex-sdk/dist/tsup.config.js +0 -12
- package/lib/codex-sdk/eslint.config.js +0 -21
- package/lib/codex-sdk/jest.config.cjs +0 -31
- package/lib/codex-sdk/package.json +0 -65
- package/lib/codex-sdk/samples/basic_streaming.ts +0 -90
- package/lib/codex-sdk/samples/helpers.ts +0 -8
- package/lib/codex-sdk/samples/structured_output.ts +0 -22
- package/lib/codex-sdk/samples/structured_output_zod.ts +0 -19
- package/lib/codex-sdk/src/codex.ts +0 -38
- package/lib/codex-sdk/src/codexOptions.ts +0 -10
- package/lib/codex-sdk/src/events.ts +0 -80
- package/lib/codex-sdk/src/exec.ts +0 -336
- package/lib/codex-sdk/src/index.ts +0 -39
- package/lib/codex-sdk/src/items.ts +0 -127
- package/lib/codex-sdk/src/outputSchemaFile.ts +0 -40
- package/lib/codex-sdk/src/thread.ts +0 -155
- package/lib/codex-sdk/src/threadOptions.ts +0 -18
- package/lib/codex-sdk/src/turnOptions.ts +0 -6
- package/lib/codex-sdk/tests/abort.test.ts +0 -165
- package/lib/codex-sdk/tests/codexExecSpy.ts +0 -37
- package/lib/codex-sdk/tests/responsesProxy.ts +0 -225
- package/lib/codex-sdk/tests/run.test.ts +0 -687
- package/lib/codex-sdk/tests/runStreamed.test.ts +0 -211
package/dist/utils/debug.js
CHANGED
|
@@ -1,16 +1,94 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
const KNOWN_SUBSYSTEMS = new Set([
|
|
2
|
+
"runner",
|
|
3
|
+
"manager",
|
|
4
|
+
"rpc",
|
|
5
|
+
"sse",
|
|
6
|
+
"sdk",
|
|
7
|
+
"repo",
|
|
8
|
+
"state",
|
|
9
|
+
"messages",
|
|
10
|
+
]);
|
|
11
|
+
let cachedConfig = null;
|
|
12
|
+
export function getDebugConfig() {
|
|
13
|
+
// Only use cache if we have already parsed a non-empty debug value.
|
|
14
|
+
// This allows modules that load before CLI sets env vars to re-check
|
|
15
|
+
// the config later once the env vars are actually set.
|
|
16
|
+
if (cachedConfig && cachedConfig.enabled) {
|
|
17
|
+
return cachedConfig;
|
|
5
18
|
}
|
|
19
|
+
const explicitFlag = process.env["NORTHFLARE_RUNNER_DEBUG"];
|
|
6
20
|
const legacyFlag = process.env["DEBUG"];
|
|
7
|
-
|
|
8
|
-
|
|
21
|
+
const config = parseDebugValue(typeof explicitFlag === "string" ? explicitFlag : legacyFlag);
|
|
22
|
+
// Only cache if debug is enabled (meaning env vars were set)
|
|
23
|
+
if (config.enabled) {
|
|
24
|
+
cachedConfig = config;
|
|
9
25
|
}
|
|
10
|
-
return
|
|
26
|
+
return config;
|
|
27
|
+
}
|
|
28
|
+
export function isRunnerDebugEnabled() {
|
|
29
|
+
return getDebugConfig().enabled;
|
|
30
|
+
}
|
|
31
|
+
export function isDebugEnabledFor(subsystem) {
|
|
32
|
+
const config = getDebugConfig();
|
|
33
|
+
if (!config.enabled)
|
|
34
|
+
return false;
|
|
35
|
+
if (config.allowAll)
|
|
36
|
+
return true;
|
|
37
|
+
if (!subsystem)
|
|
38
|
+
return false;
|
|
39
|
+
const normalized = normalizeSubsystem(subsystem);
|
|
40
|
+
return config.subsystems.has(normalized);
|
|
41
|
+
}
|
|
42
|
+
function parseDebugValue(value) {
|
|
43
|
+
if (!value) {
|
|
44
|
+
return {
|
|
45
|
+
enabled: false,
|
|
46
|
+
allowAll: false,
|
|
47
|
+
subsystems: new Set(),
|
|
48
|
+
raw: "",
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const trimmed = value.trim();
|
|
52
|
+
const normalized = trimmed.toLowerCase();
|
|
53
|
+
// Support boolean-style flags
|
|
54
|
+
if (isTruthy(normalized) || normalized === "*" || normalized === "all") {
|
|
55
|
+
return {
|
|
56
|
+
enabled: true,
|
|
57
|
+
allowAll: true,
|
|
58
|
+
subsystems: new Set(),
|
|
59
|
+
raw: trimmed,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const parts = normalized
|
|
63
|
+
.split(",")
|
|
64
|
+
.map((part) => part.trim())
|
|
65
|
+
.filter(Boolean)
|
|
66
|
+
.map((part) => normalizeSubsystem(part));
|
|
67
|
+
return {
|
|
68
|
+
enabled: parts.length > 0,
|
|
69
|
+
allowAll: false,
|
|
70
|
+
subsystems: new Set(parts),
|
|
71
|
+
raw: trimmed,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function normalizeSubsystem(value) {
|
|
75
|
+
const normalized = value.trim().toLowerCase();
|
|
76
|
+
// Common aliases
|
|
77
|
+
if (normalized === "managers")
|
|
78
|
+
return "manager";
|
|
79
|
+
if (normalized === "repos" || normalized === "git")
|
|
80
|
+
return "repo";
|
|
81
|
+
if (normalized === "state-manager")
|
|
82
|
+
return "state";
|
|
83
|
+
if (normalized === "message" || normalized === "msg")
|
|
84
|
+
return "messages";
|
|
85
|
+
return KNOWN_SUBSYSTEMS.has(normalized) ? normalized : normalized;
|
|
11
86
|
}
|
|
12
87
|
function isTruthy(value) {
|
|
13
88
|
const normalized = value.trim().toLowerCase();
|
|
14
|
-
return normalized === "true" ||
|
|
89
|
+
return (normalized === "true" ||
|
|
90
|
+
normalized === "1" ||
|
|
91
|
+
normalized === "yes" ||
|
|
92
|
+
normalized === "on");
|
|
15
93
|
}
|
|
16
94
|
//# sourceMappingURL=debug.js.map
|
package/dist/utils/debug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Logger configuration using Winston
|
|
3
3
|
*/
|
|
4
4
|
import winston from "winston";
|
|
5
|
+
import { DebugSubsystem } from './debug.js';
|
|
5
6
|
export declare const logger: winston.Logger;
|
|
6
7
|
export declare function configureFileLogging(logDir: string): void;
|
|
7
|
-
export declare function createLogger(component: string): winston.Logger;
|
|
8
|
+
export declare function createLogger(component: string, subsystem?: DebugSubsystem): winston.Logger;
|
|
8
9
|
export default logger;
|
|
9
10
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EACL,cAAc,EAGf,MAAM,YAAY,CAAC;AAiGpB,eAAO,MAAM,MAAM,gBAUjB,CAAC;AAGH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAkCzD;AAGD,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,MAAM,CAIhB;AAeD,eAAe,MAAM,CAAC"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import winston from "winston";
|
|
5
5
|
import path from "path";
|
|
6
|
-
import {
|
|
6
|
+
import { getDebugConfig, isDebugEnabledFor, } from './debug.js';
|
|
7
7
|
// Custom log levels
|
|
8
8
|
const levels = {
|
|
9
9
|
error: 0,
|
|
@@ -25,17 +25,44 @@ const colors = {
|
|
|
25
25
|
silly: "gray",
|
|
26
26
|
};
|
|
27
27
|
winston.addColors(colors);
|
|
28
|
-
|
|
28
|
+
// Use a getter function so debug state is checked at call time, not module load time
|
|
29
|
+
function isDebugEnabled() {
|
|
30
|
+
return getDebugConfig().enabled;
|
|
31
|
+
}
|
|
32
|
+
const componentSubsystemMap = {
|
|
33
|
+
MessageHandler: "rpc",
|
|
34
|
+
RunnerApp: "runner",
|
|
35
|
+
SSEClient: "sse",
|
|
36
|
+
RunnerAPIClient: "rpc",
|
|
37
|
+
ConfigManager: "runner",
|
|
38
|
+
StateManager: "state",
|
|
39
|
+
MessageFlow: "messages",
|
|
40
|
+
};
|
|
41
|
+
function resolveSubsystem(value) {
|
|
42
|
+
if (value && typeof value === "string") {
|
|
43
|
+
return value.toLowerCase();
|
|
44
|
+
}
|
|
45
|
+
return "runner";
|
|
46
|
+
}
|
|
47
|
+
const subsystemFilter = winston.format((info) => {
|
|
48
|
+
if (info.level !== "debug")
|
|
49
|
+
return info;
|
|
50
|
+
const subsystem = resolveSubsystem(info.subsystem || info.component);
|
|
51
|
+
return isDebugEnabledFor(subsystem) ? info : false;
|
|
52
|
+
});
|
|
29
53
|
// Format for console output
|
|
30
|
-
const consoleFormat = winston.format.combine(winston.format.colorize({ all: true }), winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), winston.format.printf(({ timestamp, level, message, stack, ...metadata }) => {
|
|
31
|
-
|
|
54
|
+
const consoleFormat = winston.format.combine(subsystemFilter(), winston.format.colorize({ all: true }), winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), winston.format.printf(({ timestamp, level, message, stack, component, subsystem, ...metadata }) => {
|
|
55
|
+
const scopeParts = [subsystem, component].filter(Boolean);
|
|
56
|
+
const scope = scopeParts.length ? ` ${scopeParts.join('/')}` : "";
|
|
57
|
+
let msg = `${timestamp} [${level}]${scope}: ${message}`;
|
|
32
58
|
// Only show stack traces and metadata in debug mode
|
|
33
|
-
if (
|
|
59
|
+
if (isDebugEnabled()) {
|
|
34
60
|
if (stack) {
|
|
35
61
|
msg += `\n${stack}`;
|
|
36
62
|
}
|
|
37
63
|
const filteredMetadata = { ...metadata };
|
|
38
|
-
delete filteredMetadata["component"];
|
|
64
|
+
delete filteredMetadata["component"];
|
|
65
|
+
delete filteredMetadata["subsystem"];
|
|
39
66
|
if (Object.keys(filteredMetadata).length > 0) {
|
|
40
67
|
msg += ` ${JSON.stringify(filteredMetadata)}`;
|
|
41
68
|
}
|
|
@@ -43,16 +70,18 @@ const consoleFormat = winston.format.combine(winston.format.colorize({ all: true
|
|
|
43
70
|
return msg;
|
|
44
71
|
}));
|
|
45
72
|
// Format for file output
|
|
46
|
-
const fileFormat = winston.format.combine(winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), winston.format.errors({ stack: true }), winston.format.json());
|
|
73
|
+
const fileFormat = winston.format.combine(subsystemFilter(), winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), winston.format.errors({ stack: true }), winston.format.json());
|
|
47
74
|
// Create logger instance
|
|
75
|
+
// Set level to debug unconditionally - the subsystemFilter will decide what to actually output
|
|
76
|
+
// This avoids issues with env vars not being set at module load time
|
|
48
77
|
export const logger = winston.createLogger({
|
|
49
|
-
level:
|
|
78
|
+
level: "debug",
|
|
50
79
|
levels,
|
|
51
80
|
transports: [
|
|
52
|
-
//
|
|
81
|
+
// Console transport set to debug - subsystemFilter handles the actual filtering
|
|
53
82
|
new winston.transports.Console({
|
|
54
83
|
format: consoleFormat,
|
|
55
|
-
level:
|
|
84
|
+
level: "debug",
|
|
56
85
|
}),
|
|
57
86
|
],
|
|
58
87
|
});
|
|
@@ -74,7 +103,7 @@ export function configureFileLogging(logDir) {
|
|
|
74
103
|
maxFiles: 10,
|
|
75
104
|
}));
|
|
76
105
|
// Debug log file (only in debug mode)
|
|
77
|
-
if (
|
|
106
|
+
if (isDebugEnabled()) {
|
|
78
107
|
logger.add(new winston.transports.File({
|
|
79
108
|
filename: path.join(logDir, "debug.log"),
|
|
80
109
|
level: "debug",
|
|
@@ -85,8 +114,9 @@ export function configureFileLogging(logDir) {
|
|
|
85
114
|
}
|
|
86
115
|
}
|
|
87
116
|
// Create child logger for specific components
|
|
88
|
-
export function createLogger(component) {
|
|
89
|
-
|
|
117
|
+
export function createLogger(component, subsystem) {
|
|
118
|
+
const resolvedSubsystem = subsystem || componentSubsystemMap[component] || "runner";
|
|
119
|
+
return logger.child({ component, subsystem: resolvedSubsystem });
|
|
90
120
|
}
|
|
91
121
|
// Log unhandled errors
|
|
92
122
|
// Route unhandled exceptions/rejections to the console so we don't litter local
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { JsonRpcMessage, RunnerMessage } from '../types/index.js';
|
|
2
|
+
export declare const MESSAGE_LOG_SEGMENT = 500;
|
|
3
|
+
export declare const messageFlowLogger: import("winston").Logger;
|
|
4
|
+
export declare const messagesDebugEnabled: () => boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Trim a long string by keeping the first and last segments.
|
|
7
|
+
*/
|
|
8
|
+
export declare function trimStringForLog(value: string, segment?: number): string;
|
|
9
|
+
/**
|
|
10
|
+
* Recursively clone a payload for logging, trimming long string values when requested.
|
|
11
|
+
*/
|
|
12
|
+
export declare function clonePayloadForLog<T>(payload: T, options: {
|
|
13
|
+
trimLongStrings: boolean;
|
|
14
|
+
}): T;
|
|
15
|
+
/**
|
|
16
|
+
* Prepare a concise log entry for an incoming RunnerMessage.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildIncomingMessageLog(message: RunnerMessage): Record<string, unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* Prepare a verbose log entry for an outgoing JsonRpcMessage.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildOutgoingMessageLog(message: JsonRpcMessage): Record<string, unknown>;
|
|
23
|
+
//# sourceMappingURL=message-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-log.d.ts","sourceRoot":"","sources":["../../src/utils/message-log.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAGvC,eAAO,MAAM,iBAAiB,0BAA0C,CAAC;AACzE,eAAO,MAAM,oBAAoB,QAAO,OAAwC,CAAC;AAEjF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAA4B,GAAG,MAAM,CAI7F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,GAAG,CAAC,CA0B1F;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWvF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASxF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { createLogger } from './logger.js';
|
|
2
|
+
import { isDebugEnabledFor } from './debug.js';
|
|
3
|
+
// Limit used when trimming long content fields
|
|
4
|
+
export const MESSAGE_LOG_SEGMENT = 500;
|
|
5
|
+
// Shared logger + flag for message flow tracing
|
|
6
|
+
export const messageFlowLogger = createLogger("MessageFlow", "messages");
|
|
7
|
+
export const messagesDebugEnabled = () => isDebugEnabledFor("messages");
|
|
8
|
+
/**
|
|
9
|
+
* Trim a long string by keeping the first and last segments.
|
|
10
|
+
*/
|
|
11
|
+
export function trimStringForLog(value, segment = MESSAGE_LOG_SEGMENT) {
|
|
12
|
+
if (value.length <= segment * 2)
|
|
13
|
+
return value;
|
|
14
|
+
const omitted = value.length - segment * 2;
|
|
15
|
+
return `${value.slice(0, segment)}...[${omitted} chars trimmed]...${value.slice(-segment)}`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Recursively clone a payload for logging, trimming long string values when requested.
|
|
19
|
+
*/
|
|
20
|
+
export function clonePayloadForLog(payload, options) {
|
|
21
|
+
if (!options.trimLongStrings) {
|
|
22
|
+
return payload;
|
|
23
|
+
}
|
|
24
|
+
const clone = (value) => {
|
|
25
|
+
if (typeof value === "string") {
|
|
26
|
+
return trimStringForLog(value);
|
|
27
|
+
}
|
|
28
|
+
if (Array.isArray(value)) {
|
|
29
|
+
return value.map(clone);
|
|
30
|
+
}
|
|
31
|
+
if (value && typeof value === "object") {
|
|
32
|
+
const result = {};
|
|
33
|
+
for (const [key, val] of Object.entries(value)) {
|
|
34
|
+
result[key] = clone(val);
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
};
|
|
40
|
+
return clone(payload);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Prepare a concise log entry for an incoming RunnerMessage.
|
|
44
|
+
*/
|
|
45
|
+
export function buildIncomingMessageLog(message) {
|
|
46
|
+
return {
|
|
47
|
+
direction: message.direction,
|
|
48
|
+
messageId: message.id,
|
|
49
|
+
method: message.payload?.method,
|
|
50
|
+
taskId: message.taskId,
|
|
51
|
+
conversationId: message.conversationId || message.payload?.params?.conversationId || null,
|
|
52
|
+
workspaceId: message.workspaceId,
|
|
53
|
+
payload: clonePayloadForLog(message.payload, { trimLongStrings: true }),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Prepare a verbose log entry for an outgoing JsonRpcMessage.
|
|
58
|
+
*/
|
|
59
|
+
export function buildOutgoingMessageLog(message) {
|
|
60
|
+
return {
|
|
61
|
+
direction: "to_orchestrator",
|
|
62
|
+
method: message.method,
|
|
63
|
+
id: message.id,
|
|
64
|
+
params: message.params,
|
|
65
|
+
result: message.result,
|
|
66
|
+
error: message.error,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=message-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-log.js","sourceRoot":"","sources":["../../src/utils/message-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,+CAA+C;AAC/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,gDAAgD;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAY,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAEjF;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,UAAkB,mBAAmB;IACnF,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;IAC3C,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,OAAO,qBAAqB,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;AAC9F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAI,OAAU,EAAE,OAAqC;IACrF,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,KAAU,EAAO,EAAE;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,MAAM,GAAwB,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,OAAO,KAAK,CAAC,OAAO,CAAM,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAsB;IAC5D,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM;QAC/B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,cAAc,EACZ,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,IAAI,IAAI;QAC3E,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;KACxE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAuB;IAC7D,OAAO;QACL,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;AACJ,CAAC"}
|
|
@@ -3,8 +3,12 @@ export declare class StatusLineManager {
|
|
|
3
3
|
private alignTimeoutId?;
|
|
4
4
|
private activeCount;
|
|
5
5
|
private lastLine;
|
|
6
|
-
private
|
|
6
|
+
private isEnabledCached;
|
|
7
7
|
constructor();
|
|
8
|
+
/**
|
|
9
|
+
* Check if status line is enabled (only enabled when not in debug mode)
|
|
10
|
+
*/
|
|
11
|
+
private get isEnabled();
|
|
8
12
|
/**
|
|
9
13
|
* Updates the count of active conversations
|
|
10
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
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,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,
|
|
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,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,eAAe,CAAwB;;IAO/C;;OAEG;IACH,OAAO,KAAK,SAAS,GAMpB;IAED;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAqBtC;;OAEG;IACH,OAAO,CAAC,aAAa;IAmBrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACH,OAAO,CAAC,UAAU;IAmClB;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB;AAGD,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|
|
@@ -12,10 +12,20 @@ export class StatusLineManager {
|
|
|
12
12
|
alignTimeoutId;
|
|
13
13
|
activeCount = 0;
|
|
14
14
|
lastLine = "";
|
|
15
|
-
|
|
15
|
+
isEnabledCached = null;
|
|
16
16
|
constructor() {
|
|
17
|
-
//
|
|
18
|
-
|
|
17
|
+
// Don't cache debug state here - defer until first use
|
|
18
|
+
// This allows env vars to be set after module load
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Check if status line is enabled (only enabled when not in debug mode)
|
|
22
|
+
*/
|
|
23
|
+
get isEnabled() {
|
|
24
|
+
// Cache on first call, after env vars have been set
|
|
25
|
+
if (this.isEnabledCached === null) {
|
|
26
|
+
this.isEnabledCached = !isRunnerDebugEnabled();
|
|
27
|
+
}
|
|
28
|
+
return this.isEnabledCached;
|
|
19
29
|
}
|
|
20
30
|
/**
|
|
21
31
|
* Updates the count of active conversations
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/utils/status-line.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,OAAO,iBAAiB;IACpB,UAAU,CAAkB;IAC5B,cAAc,CAAkB;IAChC,WAAW,GAAW,CAAC,CAAC;IACxB,QAAQ,GAAW,EAAE,CAAC;IACtB,
|
|
1
|
+
{"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/utils/status-line.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@northflare/runner",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.20",
|
|
4
4
|
"description": "Distributed conversation runner for Northflare",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -12,8 +12,6 @@
|
|
|
12
12
|
"@anthropic-ai/claude-agent-sdk": "0.1.51",
|
|
13
13
|
"@botanicastudios/claude-code-sdk-ts": "0.2.22-fork",
|
|
14
14
|
"@botanicastudios/mcp-host-rpc": "^0.4.0",
|
|
15
|
-
"@northflare/codex-sdk": "file:lib/codex-sdk",
|
|
16
|
-
"@openai/codex-sdk": "^0.60.1",
|
|
17
15
|
"@openrouter/ai-sdk-provider": "^1.2.8",
|
|
18
16
|
"@tanstack/react-query": "^5.x.x",
|
|
19
17
|
"@types/jsonwebtoken": "^9.0.10",
|
|
@@ -28,7 +26,8 @@
|
|
|
28
26
|
"simple-git": "^3.x.x",
|
|
29
27
|
"winston": "^3.x.x",
|
|
30
28
|
"zod": "^3.25.8",
|
|
31
|
-
"@northflare/agent": "0.1.
|
|
29
|
+
"@northflare/agent": "0.1.3",
|
|
30
|
+
"@northflare/codex-sdk": "0.1.0"
|
|
32
31
|
},
|
|
33
32
|
"devDependencies": {
|
|
34
33
|
"@types/eventsource": "^1.1.15",
|
package/lib/codex-sdk/README.md
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
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.
|