@northflare/runner 0.0.30 → 0.0.32

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 (119) hide show
  1. package/bin/northflare-runner +1 -1
  2. package/dist/chunk-3QTLJ4CG.js +33622 -0
  3. package/dist/chunk-3QTLJ4CG.js.map +1 -0
  4. package/dist/chunk-7D4SUZUM.js +38 -0
  5. package/dist/chunk-7D4SUZUM.js.map +1 -0
  6. package/dist/dist-W7DZRE4U.js +365 -0
  7. package/dist/dist-W7DZRE4U.js.map +1 -0
  8. package/dist/index.d.ts +764 -5
  9. package/dist/index.js +9872 -202
  10. package/dist/index.js.map +1 -1
  11. package/dist/sdk-query-TRMSGGID-EIENWDKW.js +14 -0
  12. package/dist/sdk-query-TRMSGGID-EIENWDKW.js.map +1 -0
  13. package/package.json +17 -17
  14. package/tsup.config.ts +5 -2
  15. package/dist/components/claude-sdk-manager.d.ts +0 -60
  16. package/dist/components/claude-sdk-manager.d.ts.map +0 -1
  17. package/dist/components/claude-sdk-manager.js +0 -1378
  18. package/dist/components/claude-sdk-manager.js.map +0 -1
  19. package/dist/components/codex-sdk-manager.d.ts +0 -94
  20. package/dist/components/codex-sdk-manager.d.ts.map +0 -1
  21. package/dist/components/codex-sdk-manager.js +0 -1450
  22. package/dist/components/codex-sdk-manager.js.map +0 -1
  23. package/dist/components/enhanced-repository-manager.d.ts +0 -173
  24. package/dist/components/enhanced-repository-manager.d.ts.map +0 -1
  25. package/dist/components/enhanced-repository-manager.js +0 -1097
  26. package/dist/components/enhanced-repository-manager.js.map +0 -1
  27. package/dist/components/message-handler-sse.d.ts +0 -77
  28. package/dist/components/message-handler-sse.d.ts.map +0 -1
  29. package/dist/components/message-handler-sse.js +0 -1224
  30. package/dist/components/message-handler-sse.js.map +0 -1
  31. package/dist/components/northflare-agent-sdk-manager.d.ts +0 -58
  32. package/dist/components/northflare-agent-sdk-manager.d.ts.map +0 -1
  33. package/dist/components/northflare-agent-sdk-manager.js +0 -2032
  34. package/dist/components/northflare-agent-sdk-manager.js.map +0 -1
  35. package/dist/components/repository-manager.d.ts +0 -51
  36. package/dist/components/repository-manager.d.ts.map +0 -1
  37. package/dist/components/repository-manager.js +0 -256
  38. package/dist/components/repository-manager.js.map +0 -1
  39. package/dist/index.d.ts.map +0 -1
  40. package/dist/runner-sse.d.ts +0 -102
  41. package/dist/runner-sse.d.ts.map +0 -1
  42. package/dist/runner-sse.js +0 -877
  43. package/dist/runner-sse.js.map +0 -1
  44. package/dist/services/RunnerAPIClient.d.ts +0 -61
  45. package/dist/services/RunnerAPIClient.d.ts.map +0 -1
  46. package/dist/services/RunnerAPIClient.js +0 -187
  47. package/dist/services/RunnerAPIClient.js.map +0 -1
  48. package/dist/services/SSEClient.d.ts +0 -62
  49. package/dist/services/SSEClient.d.ts.map +0 -1
  50. package/dist/services/SSEClient.js +0 -225
  51. package/dist/services/SSEClient.js.map +0 -1
  52. package/dist/types/claude.d.ts +0 -80
  53. package/dist/types/claude.d.ts.map +0 -1
  54. package/dist/types/claude.js +0 -5
  55. package/dist/types/claude.js.map +0 -1
  56. package/dist/types/index.d.ts +0 -52
  57. package/dist/types/index.d.ts.map +0 -1
  58. package/dist/types/index.js +0 -7
  59. package/dist/types/index.js.map +0 -1
  60. package/dist/types/messages.d.ts +0 -33
  61. package/dist/types/messages.d.ts.map +0 -1
  62. package/dist/types/messages.js +0 -5
  63. package/dist/types/messages.js.map +0 -1
  64. package/dist/types/runner-interface.d.ts +0 -38
  65. package/dist/types/runner-interface.d.ts.map +0 -1
  66. package/dist/types/runner-interface.js +0 -5
  67. package/dist/types/runner-interface.js.map +0 -1
  68. package/dist/utils/StateManager.d.ts +0 -61
  69. package/dist/utils/StateManager.d.ts.map +0 -1
  70. package/dist/utils/StateManager.js +0 -170
  71. package/dist/utils/StateManager.js.map +0 -1
  72. package/dist/utils/config.d.ts +0 -48
  73. package/dist/utils/config.d.ts.map +0 -1
  74. package/dist/utils/config.js +0 -378
  75. package/dist/utils/config.js.map +0 -1
  76. package/dist/utils/console.d.ts +0 -8
  77. package/dist/utils/console.d.ts.map +0 -1
  78. package/dist/utils/console.js +0 -31
  79. package/dist/utils/console.js.map +0 -1
  80. package/dist/utils/debug.d.ts +0 -12
  81. package/dist/utils/debug.d.ts.map +0 -1
  82. package/dist/utils/debug.js +0 -94
  83. package/dist/utils/debug.js.map +0 -1
  84. package/dist/utils/expand-env.d.ts +0 -2
  85. package/dist/utils/expand-env.d.ts.map +0 -1
  86. package/dist/utils/expand-env.js +0 -17
  87. package/dist/utils/expand-env.js.map +0 -1
  88. package/dist/utils/inactivity-timeout.d.ts +0 -19
  89. package/dist/utils/inactivity-timeout.d.ts.map +0 -1
  90. package/dist/utils/inactivity-timeout.js +0 -72
  91. package/dist/utils/inactivity-timeout.js.map +0 -1
  92. package/dist/utils/logger.d.ts +0 -10
  93. package/dist/utils/logger.d.ts.map +0 -1
  94. package/dist/utils/logger.js +0 -129
  95. package/dist/utils/logger.js.map +0 -1
  96. package/dist/utils/message-log.d.ts +0 -23
  97. package/dist/utils/message-log.d.ts.map +0 -1
  98. package/dist/utils/message-log.js +0 -69
  99. package/dist/utils/message-log.js.map +0 -1
  100. package/dist/utils/model.d.ts +0 -8
  101. package/dist/utils/model.d.ts.map +0 -1
  102. package/dist/utils/model.js +0 -37
  103. package/dist/utils/model.js.map +0 -1
  104. package/dist/utils/status-line.d.ts +0 -34
  105. package/dist/utils/status-line.d.ts.map +0 -1
  106. package/dist/utils/status-line.js +0 -131
  107. package/dist/utils/status-line.js.map +0 -1
  108. package/dist/utils/tool-response-sanitizer.d.ts +0 -9
  109. package/dist/utils/tool-response-sanitizer.d.ts.map +0 -1
  110. package/dist/utils/tool-response-sanitizer.js +0 -118
  111. package/dist/utils/tool-response-sanitizer.js.map +0 -1
  112. package/dist/utils/update-coordinator.d.ts +0 -53
  113. package/dist/utils/update-coordinator.d.ts.map +0 -1
  114. package/dist/utils/update-coordinator.js +0 -159
  115. package/dist/utils/update-coordinator.js.map +0 -1
  116. package/dist/utils/version.d.ts +0 -10
  117. package/dist/utils/version.d.ts.map +0 -1
  118. package/dist/utils/version.js +0 -33
  119. package/dist/utils/version.js.map +0 -1
@@ -1,378 +0,0 @@
1
- /**
2
- * Configuration management utilities
3
- */
4
- import fs from "fs/promises";
5
- import { existsSync } from "fs";
6
- import path from "path";
7
- import envPaths from "env-paths";
8
- import os from "os";
9
- import { createLogger } from './logger.js';
10
- import { Command } from "commander";
11
- import readline from "readline/promises";
12
- import { stdin as input, stdout as output } from "node:process";
13
- const logger = createLogger("ConfigManager");
14
- const ENV_PATHS_APP_NAME = resolveEnvPathsAppName();
15
- const ENV_PATHS_OPTIONS = { suffix: "" };
16
- const IS_DEV_APP = ENV_PATHS_APP_NAME.endsWith("-dev");
17
- function resolveEnvPathsAppName() {
18
- if (process.env["NODE_ENV"] === "development")
19
- return "northflare-runner-dev";
20
- try {
21
- // When running from workspace (e.g., pnpm exec or direct node dist/...)
22
- // use the dev app name so config lives under the "-dev" path.
23
- const __dirname = path.dirname(new URL(import.meta.url).pathname);
24
- const repoRoot = path.resolve(__dirname, "../..");
25
- if (existsSync(path.join(repoRoot, "pnpm-workspace.yaml"))) {
26
- return "northflare-runner-dev";
27
- }
28
- }
29
- catch {
30
- // ignore and fall back to prod name
31
- }
32
- return "northflare-runner";
33
- }
34
- // ENV_PATHS_APP_NAME/OPTIONS defined above for reuse across helpers
35
- export class ConfigManager {
36
- static DEFAULT_CONFIG = {
37
- dataDir: ConfigManager.resolveDefaultDataDir(),
38
- heartbeatInterval: 120000, // 2 minutes
39
- retryStrategy: "exponential",
40
- retryIntervalSecs: 60,
41
- retryDurationSecs: 900,
42
- orchestratorUrl: "https://api.northflare.app",
43
- };
44
- static resolveDefaultDataDir() {
45
- try {
46
- const paths = envPaths(ENV_PATHS_APP_NAME, ENV_PATHS_OPTIONS);
47
- return paths.data;
48
- }
49
- catch (error) {
50
- logger.debug("Falling back to cwd-relative data directory", error);
51
- // Keep dev and prod state isolated when env-paths cannot resolve
52
- return path.resolve(IS_DEV_APP ? "./data/dev" : "./data");
53
- }
54
- }
55
- static getDefaultConfigPath() {
56
- try {
57
- const paths = envPaths(ENV_PATHS_APP_NAME, ENV_PATHS_OPTIONS);
58
- return path.join(paths.config, "config.json");
59
- }
60
- catch (error) {
61
- logger.debug("Falling back to repo-relative config path", error);
62
- // Separate dev/prod config files even when env-paths fails
63
- const localDir = IS_DEV_APP ? "./config/dev" : "./config";
64
- return path.resolve(localDir, "config.json");
65
- }
66
- }
67
- /**
68
- * Load configuration without parsing command line arguments
69
- * Used when arguments have already been parsed by the CLI
70
- */
71
- static async loadConfig(configPath, options) {
72
- this.validateEnvironment();
73
- let config = { ...this.DEFAULT_CONFIG };
74
- const effectiveConfigPath = configPath || this.getDefaultConfigPath();
75
- const fileConfig = await this.loadConfigFile(effectiveConfigPath);
76
- // Runner repos are now server-owned; ignore any persisted runnerRepos in config files
77
- if (fileConfig && fileConfig.runnerRepos) {
78
- delete fileConfig.runnerRepos;
79
- }
80
- const migratedWorkspacePath = !fileConfig.workspacePath && fileConfig.workspaceDir
81
- ? fileConfig.workspaceDir
82
- : undefined;
83
- config = { ...config, ...fileConfig };
84
- const envConfig = this.loadFromEnvironment();
85
- config = { ...config, ...envConfig };
86
- // Determine the workspacePath to use after env/CLI overrides
87
- let workspacePath = config.workspacePath;
88
- const appliedMigration = !workspacePath && !!migratedWorkspacePath;
89
- let shouldPersistWorkspacePath = false;
90
- if (appliedMigration) {
91
- workspacePath = migratedWorkspacePath;
92
- shouldPersistWorkspacePath = true;
93
- }
94
- if (!workspacePath) {
95
- if (options?.promptForWorkspacePath) {
96
- workspacePath = await this.promptForWorkspacePath();
97
- shouldPersistWorkspacePath = true;
98
- }
99
- else {
100
- throw new Error("workspacePath is required. Provide NORTHFLARE_WORKSPACE_PATH, --workspace-path, or set it in the runner config file.");
101
- }
102
- }
103
- const normalizedWorkspacePath = this.normalizeWorkspacePath(workspacePath);
104
- config.workspacePath = normalizedWorkspacePath;
105
- if (shouldPersistWorkspacePath) {
106
- await this.persistConfigFile(effectiveConfigPath, {
107
- ...fileConfig,
108
- ...config,
109
- workspacePath: normalizedWorkspacePath,
110
- });
111
- }
112
- this.validateConfig(config);
113
- return config;
114
- }
115
- /**
116
- * Parse command line arguments and load configuration
117
- */
118
- static async parseArgsAndLoadConfig(argv) {
119
- const program = new Command();
120
- program
121
- .name("northflare-runner")
122
- .description("Northflare Runner - Executes Claude agents for task processing")
123
- .version("1.0.0")
124
- .option("-c, --config <path>", "Path to configuration file")
125
- .option("--retry-strategy <strategy>", "Registration retry strategy (none, interval, exponential)", "exponential")
126
- .option("--retry-interval-secs <seconds>", "Retry interval in seconds for interval strategy", "60")
127
- .option("--retry-duration-secs <seconds>", "Max retry duration in seconds for exponential strategy", "900")
128
- .option("--data-dir <path>", "Data directory path")
129
- .option("--heartbeat-interval <ms>", "Heartbeat interval in milliseconds", "120000")
130
- .option("--workspace-path <path>", "Workspace directory path");
131
- program.parse(argv);
132
- const options = program.opts();
133
- // Validate required environment variables
134
- this.validateEnvironment();
135
- // Start with defaults
136
- let config = { ...this.DEFAULT_CONFIG };
137
- // Load from config file (explicit path or default) and capture legacy workspaceDir for migration
138
- const effectiveConfigPath = options["config"] || this.getDefaultConfigPath();
139
- const fileConfig = await this.loadConfigFile(effectiveConfigPath);
140
- if (fileConfig && fileConfig.runnerRepos) {
141
- delete fileConfig.runnerRepos;
142
- }
143
- const migratedWorkspacePath = !fileConfig.workspacePath && fileConfig.workspaceDir
144
- ? fileConfig.workspaceDir
145
- : undefined;
146
- config = { ...config, ...fileConfig };
147
- // Override with environment variables
148
- const envConfig = this.loadFromEnvironment();
149
- config = { ...config, ...envConfig };
150
- // Override with CLI arguments (highest priority)
151
- if (options["retryStrategy"]) {
152
- config.retryStrategy = options["retryStrategy"];
153
- }
154
- if (options["retryIntervalSecs"]) {
155
- config.retryIntervalSecs = parseInt(options["retryIntervalSecs"]);
156
- }
157
- if (options["retryDurationSecs"]) {
158
- config.retryDurationSecs = parseInt(options["retryDurationSecs"]);
159
- }
160
- if (options["dataDir"]) {
161
- config.dataDir = options["dataDir"];
162
- }
163
- if (options["heartbeatInterval"]) {
164
- config.heartbeatInterval = parseInt(options["heartbeatInterval"]);
165
- }
166
- if (options["workspacePath"]) {
167
- config.workspacePath = options["workspacePath"];
168
- }
169
- const appliedMigration = !config.workspacePath && !!migratedWorkspacePath;
170
- let shouldPersistWorkspacePath = false;
171
- if (appliedMigration) {
172
- config.workspacePath = migratedWorkspacePath;
173
- shouldPersistWorkspacePath = true;
174
- }
175
- if (!config.workspacePath) {
176
- // Mirror loadConfig behavior: prompt when missing
177
- const workspacePath = await this.promptForWorkspacePath();
178
- config.workspacePath = workspacePath;
179
- shouldPersistWorkspacePath = true;
180
- }
181
- const normalizedWorkspacePath = this.normalizeWorkspacePath(config.workspacePath);
182
- config.workspacePath = normalizedWorkspacePath;
183
- if (shouldPersistWorkspacePath) {
184
- await this.persistConfigFile(effectiveConfigPath, {
185
- ...fileConfig,
186
- ...config,
187
- workspacePath: normalizedWorkspacePath,
188
- });
189
- }
190
- // Validate final configuration
191
- this.validateConfig(config);
192
- return config;
193
- }
194
- /**
195
- * Validate required environment variables
196
- */
197
- static validateEnvironment() {
198
- const required = ["NORTHFLARE_RUNNER_TOKEN"];
199
- const missing = required.filter((key) => !process.env[key]);
200
- if (missing.length > 0) {
201
- throw new Error(`Missing required environment variables: ${missing.join(", ")}\n` +
202
- "Please set these environment variables before starting the runner.");
203
- }
204
- }
205
- /**
206
- * Load configuration from environment variables
207
- */
208
- static loadFromEnvironment() {
209
- const config = {};
210
- if (process.env["NORTHFLARE_ORCHESTRATOR_URL"]) {
211
- config.orchestratorUrl = process.env["NORTHFLARE_ORCHESTRATOR_URL"];
212
- }
213
- // Optional environment overrides
214
- if (process.env["NORTHFLARE_DATA_DIR"]) {
215
- config.dataDir = process.env["NORTHFLARE_DATA_DIR"];
216
- }
217
- if (process.env["NORTHFLARE_WORKSPACE_PATH"]) {
218
- config.workspacePath = process.env["NORTHFLARE_WORKSPACE_PATH"];
219
- }
220
- return config;
221
- }
222
- /**
223
- * Load configuration from file
224
- */
225
- static async loadConfigFile(configPath) {
226
- try {
227
- const absolutePath = path.resolve(configPath);
228
- const content = await fs.readFile(absolutePath, "utf-8");
229
- // Support both JSON and YAML formats
230
- if (configPath.endsWith(".json")) {
231
- const config = JSON.parse(content);
232
- // Runner repos are now server-sourced; ignore any persisted copy
233
- delete config.runnerRepos;
234
- return config;
235
- }
236
- else if (configPath.endsWith(".yaml") || configPath.endsWith(".yml")) {
237
- // For YAML support, we'd need to add a yaml parser dependency
238
- throw new Error("YAML configuration files are not yet supported");
239
- }
240
- else {
241
- throw new Error("Configuration file must be .json format");
242
- }
243
- }
244
- catch (error) {
245
- if (error.code === "ENOENT") {
246
- logger.warn(`Configuration file not found: ${configPath}`);
247
- return {};
248
- }
249
- throw error;
250
- }
251
- }
252
- static async promptForWorkspacePath() {
253
- const suggestedBase = this.resolveDefaultDataDir();
254
- const defaultPath = path.join(suggestedBase, "workspaces");
255
- const rl = readline.createInterface({ input, output });
256
- try {
257
- // Keep prompting until an absolute path is provided (tilde is allowed)
258
- // to avoid silently resolving relative paths.
259
- while (true) {
260
- const answer = await rl.question(`Enter a local workspace directory for runner workspaces (default: ${defaultPath}): `);
261
- const chosen = answer.trim() === "" ? defaultPath : answer.trim();
262
- try {
263
- const normalized = this.normalizeWorkspacePath(chosen);
264
- await fs.mkdir(normalized, { recursive: true });
265
- logger.info(`Using workspace path: ${normalized}`);
266
- return normalized;
267
- }
268
- catch (error) {
269
- logger.error(error.message ||
270
- "workspacePath must be an absolute path. Please try again.");
271
- }
272
- }
273
- }
274
- finally {
275
- rl.close();
276
- }
277
- }
278
- static normalizeWorkspacePath(workspacePath) {
279
- const trimmed = workspacePath?.trim();
280
- if (!trimmed) {
281
- throw new Error("workspacePath is required");
282
- }
283
- // Expand tilde to the user's home directory without accidentally
284
- // discarding the home path when the remainder begins with a path separator.
285
- let expanded = trimmed;
286
- if (trimmed === "~") {
287
- expanded = os.homedir();
288
- }
289
- else if (trimmed.startsWith("~/")) {
290
- expanded = path.join(os.homedir(), trimmed.slice(2));
291
- }
292
- else if (trimmed.startsWith("~\\")) {
293
- expanded = path.join(os.homedir(), trimmed.slice(2));
294
- }
295
- if (!path.isAbsolute(expanded)) {
296
- throw new Error("workspacePath must be an absolute path");
297
- }
298
- return expanded;
299
- }
300
- static async persistConfigFile(configPath, config) {
301
- try {
302
- const absolutePath = path.resolve(configPath);
303
- await fs.mkdir(path.dirname(absolutePath), { recursive: true });
304
- await this.saveConfigFile(absolutePath, config);
305
- }
306
- catch (error) {
307
- logger.error("Failed to persist config file", error);
308
- }
309
- }
310
- /**
311
- * Validate final configuration
312
- */
313
- static validateConfig(config) {
314
- // Note: Runner ID will be generated by server during registration
315
- if (!config.workspacePath || config.workspacePath.trim() === "") {
316
- throw new Error("workspacePath is required");
317
- }
318
- if (!path.isAbsolute(config.workspacePath)) {
319
- throw new Error("workspacePath must be an absolute path");
320
- }
321
- if (!config.orchestratorUrl) {
322
- throw new Error("orchestratorUrl is required");
323
- }
324
- if (!config.dataDir) {
325
- throw new Error("dataDir is required");
326
- }
327
- if (!config.heartbeatInterval || config.heartbeatInterval < 1000) {
328
- throw new Error("heartbeatInterval must be at least 1000ms");
329
- }
330
- // Validate retry strategy
331
- const validStrategies = [
332
- "none",
333
- "interval",
334
- "exponential",
335
- ];
336
- if (!config.retryStrategy ||
337
- !validStrategies.includes(config.retryStrategy)) {
338
- throw new Error(`retryStrategy must be one of: ${validStrategies.join(", ")}`);
339
- }
340
- if (config.retryStrategy === "interval" &&
341
- (!config.retryIntervalSecs || config.retryIntervalSecs < 1)) {
342
- throw new Error("retryIntervalSecs must be at least 1 when using interval strategy");
343
- }
344
- if (config.retryStrategy === "exponential" &&
345
- (!config.retryDurationSecs || config.retryDurationSecs < 1)) {
346
- throw new Error("retryDurationSecs must be at least 1 when using exponential strategy");
347
- }
348
- }
349
- /**
350
- * Get all environment configuration
351
- */
352
- static getEnvironmentConfig() {
353
- return {
354
- NORTHFLARE_RUNNER_TOKEN: process.env["NORTHFLARE_RUNNER_TOKEN"],
355
- NORTHFLARE_WORKSPACE_PATH: process.env["NORTHFLARE_WORKSPACE_PATH"],
356
- NORTHFLARE_ORCHESTRATOR_URL: process.env["NORTHFLARE_ORCHESTRATOR_URL"],
357
- NORTHFLARE_RUNNER_DEBUG: process.env["NORTHFLARE_RUNNER_DEBUG"],
358
- DEBUG: process.env["DEBUG"],
359
- };
360
- }
361
- /**
362
- * Save configuration file with updated data
363
- */
364
- static async saveConfigFile(configPath, config) {
365
- try {
366
- const absolutePath = path.resolve(configPath);
367
- await fs.mkdir(path.dirname(absolutePath), { recursive: true });
368
- const content = JSON.stringify(config, null, 2);
369
- await fs.writeFile(absolutePath, content, "utf-8");
370
- logger.info(`Updated configuration file: ${absolutePath}`);
371
- }
372
- catch (error) {
373
- logger.error("Failed to save configuration file", error);
374
- throw error;
375
- }
376
- }
377
- }
378
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Console wrapper that suppresses output unless the requested subsystem
3
- * is enabled in the debug filter.
4
- */
5
- import { DebugSubsystem } from './debug.js';
6
- export declare function createScopedConsole(subsystem?: DebugSubsystem): Console;
7
- export declare const console: Console;
8
- //# sourceMappingURL=console.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/utils/console.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAqB,MAAM,YAAY,CAAC;AAE/D,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,cAAyB,GACnC,OAAO,CAkBT;AAGD,eAAO,MAAM,OAAO,SAAgC,CAAC"}
@@ -1,31 +0,0 @@
1
- /**
2
- * Console wrapper that suppresses output unless the requested subsystem
3
- * is enabled in the debug filter.
4
- */
5
- import { isDebugEnabledFor } from './debug.js';
6
- export function createScopedConsole(subsystem = "runner") {
7
- // Check debug flag on each call, not at creation time, so that
8
- // environment variables set after module import are respected
9
- return {
10
- log: (...args) => {
11
- if (isDebugEnabledFor(subsystem))
12
- global.console.log(...args);
13
- },
14
- warn: (...args) => {
15
- if (isDebugEnabledFor(subsystem))
16
- global.console.warn(...args);
17
- },
18
- error: global.console.error.bind(global.console), // Always show errors
19
- info: (...args) => {
20
- if (isDebugEnabledFor(subsystem))
21
- global.console.info(...args);
22
- },
23
- debug: (...args) => {
24
- if (isDebugEnabledFor(subsystem))
25
- global.console.debug(...args);
26
- },
27
- };
28
- }
29
- // Default console scoped to core runner events
30
- export const console = createScopedConsole("runner");
31
- //# sourceMappingURL=console.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/utils/console.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAkB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,UAAU,mBAAmB,CACjC,YAA4B,QAAQ;IAEpC,+DAA+D;IAC/D,8DAA8D;IAC9D,OAAO;QACL,GAAG,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;YAC1B,IAAI,iBAAiB,CAAC,SAAS,CAAC;gBAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;YAC3B,IAAI,iBAAiB,CAAC,SAAS,CAAC;gBAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,qBAAqB;QACvE,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;YAC3B,IAAI,iBAAiB,CAAC,SAAS,CAAC;gBAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;YAC5B,IAAI,iBAAiB,CAAC,SAAS,CAAC;gBAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAClE,CAAC;KACS,CAAC;AACf,CAAC;AAED,+CAA+C;AAC/C,MAAM,CAAC,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC"}
@@ -1,12 +0,0 @@
1
- export type DebugSubsystem = "runner" | "manager" | "rpc" | "sse" | "sdk" | "repo" | "state" | "messages";
2
- type DebugConfig = {
3
- enabled: boolean;
4
- allowAll: boolean;
5
- subsystems: Set<string>;
6
- raw: string;
7
- };
8
- export declare function getDebugConfig(): DebugConfig;
9
- export declare function isRunnerDebugEnabled(): boolean;
10
- export declare function isDebugEnabledFor(subsystem?: DebugSubsystem | string): boolean;
11
- export {};
12
- //# sourceMappingURL=debug.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,SAAS,GACT,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,OAAO,GACP,UAAU,CAAC;AAEf,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAeF,wBAAgB,cAAc,IAAI,WAAW,CAqB5C;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,CAAC,EAAE,cAAc,GAAG,MAAM,GAClC,OAAO,CAQT"}
@@ -1,94 +0,0 @@
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;
18
- }
19
- const explicitFlag = process.env["NORTHFLARE_RUNNER_DEBUG"];
20
- const legacyFlag = process.env["DEBUG"];
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;
25
- }
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;
86
- }
87
- function isTruthy(value) {
88
- const normalized = value.trim().toLowerCase();
89
- return (normalized === "true" ||
90
- normalized === "1" ||
91
- normalized === "yes" ||
92
- normalized === "on");
93
- }
94
- //# sourceMappingURL=debug.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function expandEnv(obj: any, env?: Record<string, string | undefined>): any;
2
- //# sourceMappingURL=expand-env.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expand-env.d.ts","sourceRoot":"","sources":["../../src/utils/expand-env.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CACvB,GAAG,EAAE,GAAG,EACR,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,GAAG,CAkBL"}
@@ -1,17 +0,0 @@
1
- export function expandEnv(obj, env = process.env) {
2
- if (typeof obj === "string") {
3
- return obj.replace(/\$\{([^}]+)\}/g, (match, key) => env[key] || match);
4
- }
5
- if (Array.isArray(obj)) {
6
- return obj.map((item) => expandEnv(item, env));
7
- }
8
- if (obj && typeof obj === "object") {
9
- const result = {};
10
- for (const [key, value] of Object.entries(obj)) {
11
- result[key] = expandEnv(value, env);
12
- }
13
- return result;
14
- }
15
- return obj;
16
- }
17
- //# sourceMappingURL=expand-env.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expand-env.js","sourceRoot":"","sources":["../../src/utils/expand-env.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CACvB,GAAQ,EACR,MAA0C,OAAO,CAAC,GAAG;IAErD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,MAAM,GAAwB,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,19 +0,0 @@
1
- /**
2
- * Utilities for parsing and formatting inactivity timeout values
3
- */
4
- export type InactivityTimeoutUnit = "seconds" | "minutes" | "hours";
5
- export interface ParsedInactivityTimeout {
6
- milliseconds: number;
7
- value: number;
8
- unit: InactivityTimeoutUnit;
9
- display: string;
10
- }
11
- /**
12
- * Parse CLI-provided inactivity timeout values (e.g. 30s, 5m, 1h, 45)
13
- */
14
- export declare function parseInactivityTimeout(rawValue: string): ParsedInactivityTimeout;
15
- /**
16
- * Best-effort formatter for a timeout expressed in milliseconds.
17
- */
18
- export declare function formatInactivityTimeoutFromMs(ms: number): string;
19
- //# sourceMappingURL=inactivity-timeout.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inactivity-timeout.d.ts","sourceRoot":"","sources":["../../src/utils/inactivity-timeout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,qBAAqB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AA+BD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,GACf,uBAAuB,CAiCzB;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAiBhE"}