@northflare/runner 0.0.1

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 (154) hide show
  1. package/DEBUG_LOGGING.md +60 -0
  2. package/LICENSE +21 -0
  3. package/MIGRATION_PLAN.md +52 -0
  4. package/README.md +220 -0
  5. package/SDK_IMPLEMENTATION_GUIDE.md +1036 -0
  6. package/bin/northflare-runner +367 -0
  7. package/coverage/base.css +224 -0
  8. package/coverage/block-navigation.js +87 -0
  9. package/coverage/coverage-final.json +12 -0
  10. package/coverage/favicon.png +0 -0
  11. package/coverage/index.html +176 -0
  12. package/coverage/lib/index.html +116 -0
  13. package/coverage/lib/preload-script.js.html +964 -0
  14. package/coverage/prettify.css +1 -0
  15. package/coverage/prettify.js +2 -0
  16. package/coverage/sort-arrow-sprite.png +0 -0
  17. package/coverage/sorter.js +196 -0
  18. package/coverage/src/collections/index.html +116 -0
  19. package/coverage/src/collections/runner-messages.ts.html +312 -0
  20. package/coverage/src/components/claude-manager.ts.html +1290 -0
  21. package/coverage/src/components/index.html +146 -0
  22. package/coverage/src/components/message-handler.ts.html +730 -0
  23. package/coverage/src/components/repository-manager.ts.html +841 -0
  24. package/coverage/src/index.html +131 -0
  25. package/coverage/src/index.ts.html +448 -0
  26. package/coverage/src/runner.ts.html +1239 -0
  27. package/coverage/src/utils/config.ts.html +780 -0
  28. package/coverage/src/utils/console.ts.html +121 -0
  29. package/coverage/src/utils/index.html +161 -0
  30. package/coverage/src/utils/logger.ts.html +475 -0
  31. package/coverage/src/utils/status-line.ts.html +445 -0
  32. package/dist/collections/runner-messages.d.ts +52 -0
  33. package/dist/collections/runner-messages.d.ts.map +1 -0
  34. package/dist/collections/runner-messages.js +161 -0
  35. package/dist/collections/runner-messages.js.map +1 -0
  36. package/dist/components/claude-manager.d.ts +39 -0
  37. package/dist/components/claude-manager.d.ts.map +1 -0
  38. package/dist/components/claude-manager.js +783 -0
  39. package/dist/components/claude-manager.js.map +1 -0
  40. package/dist/components/claude-sdk-manager.d.ts +47 -0
  41. package/dist/components/claude-sdk-manager.d.ts.map +1 -0
  42. package/dist/components/claude-sdk-manager.js +1088 -0
  43. package/dist/components/claude-sdk-manager.js.map +1 -0
  44. package/dist/components/enhanced-repository-manager.d.ts +134 -0
  45. package/dist/components/enhanced-repository-manager.d.ts.map +1 -0
  46. package/dist/components/enhanced-repository-manager.js +602 -0
  47. package/dist/components/enhanced-repository-manager.js.map +1 -0
  48. package/dist/components/message-handler-sse.d.ts +46 -0
  49. package/dist/components/message-handler-sse.d.ts.map +1 -0
  50. package/dist/components/message-handler-sse.js +734 -0
  51. package/dist/components/message-handler-sse.js.map +1 -0
  52. package/dist/components/message-handler.d.ts +35 -0
  53. package/dist/components/message-handler.d.ts.map +1 -0
  54. package/dist/components/message-handler.js +689 -0
  55. package/dist/components/message-handler.js.map +1 -0
  56. package/dist/components/repository-manager.d.ts +51 -0
  57. package/dist/components/repository-manager.d.ts.map +1 -0
  58. package/dist/components/repository-manager.js +295 -0
  59. package/dist/components/repository-manager.js.map +1 -0
  60. package/dist/index.d.ts +9 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +166 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/runner-sse.d.ts +57 -0
  65. package/dist/runner-sse.d.ts.map +1 -0
  66. package/dist/runner-sse.js +698 -0
  67. package/dist/runner-sse.js.map +1 -0
  68. package/dist/runner.d.ts +51 -0
  69. package/dist/runner.d.ts.map +1 -0
  70. package/dist/runner.js +530 -0
  71. package/dist/runner.js.map +1 -0
  72. package/dist/services/RunnerAPIClient.d.ts +30 -0
  73. package/dist/services/RunnerAPIClient.d.ts.map +1 -0
  74. package/dist/services/RunnerAPIClient.js +112 -0
  75. package/dist/services/RunnerAPIClient.js.map +1 -0
  76. package/dist/services/SSEClient.d.ts +60 -0
  77. package/dist/services/SSEClient.d.ts.map +1 -0
  78. package/dist/services/SSEClient.js +204 -0
  79. package/dist/services/SSEClient.js.map +1 -0
  80. package/dist/types/claude.d.ts +45 -0
  81. package/dist/types/claude.d.ts.map +1 -0
  82. package/dist/types/claude.js +6 -0
  83. package/dist/types/claude.js.map +1 -0
  84. package/dist/types/index.d.ts +47 -0
  85. package/dist/types/index.d.ts.map +1 -0
  86. package/dist/types/index.js +23 -0
  87. package/dist/types/index.js.map +1 -0
  88. package/dist/types/messages.d.ts +31 -0
  89. package/dist/types/messages.d.ts.map +1 -0
  90. package/dist/types/messages.js +6 -0
  91. package/dist/types/messages.js.map +1 -0
  92. package/dist/types/runner-interface.d.ts +24 -0
  93. package/dist/types/runner-interface.d.ts.map +1 -0
  94. package/dist/types/runner-interface.js +6 -0
  95. package/dist/types/runner-interface.js.map +1 -0
  96. package/dist/utils/StateManager.d.ts +52 -0
  97. package/dist/utils/StateManager.d.ts.map +1 -0
  98. package/dist/utils/StateManager.js +162 -0
  99. package/dist/utils/StateManager.js.map +1 -0
  100. package/dist/utils/config.d.ts +41 -0
  101. package/dist/utils/config.d.ts.map +1 -0
  102. package/dist/utils/config.js +250 -0
  103. package/dist/utils/config.js.map +1 -0
  104. package/dist/utils/console.d.ts +11 -0
  105. package/dist/utils/console.d.ts.map +1 -0
  106. package/dist/utils/console.js +15 -0
  107. package/dist/utils/console.js.map +1 -0
  108. package/dist/utils/expand-env.d.ts +2 -0
  109. package/dist/utils/expand-env.d.ts.map +1 -0
  110. package/dist/utils/expand-env.js +20 -0
  111. package/dist/utils/expand-env.js.map +1 -0
  112. package/dist/utils/logger.d.ts +9 -0
  113. package/dist/utils/logger.d.ts.map +1 -0
  114. package/dist/utils/logger.js +108 -0
  115. package/dist/utils/logger.js.map +1 -0
  116. package/dist/utils/status-line.d.ts +37 -0
  117. package/dist/utils/status-line.d.ts.map +1 -0
  118. package/dist/utils/status-line.js +113 -0
  119. package/dist/utils/status-line.js.map +1 -0
  120. package/docs/claude-manager.md +91 -0
  121. package/exceptions.log +22 -0
  122. package/lib/preload-script.js +293 -0
  123. package/package.json +55 -0
  124. package/rejections.log +63 -0
  125. package/runner.log +488 -0
  126. package/src/components/claude-sdk-manager.ts +1354 -0
  127. package/src/components/enhanced-repository-manager.ts +823 -0
  128. package/src/components/message-handler-sse.ts +1011 -0
  129. package/src/components/repository-manager.ts +337 -0
  130. package/src/index.ts +166 -0
  131. package/src/runner-sse.ts +847 -0
  132. package/src/services/RunnerAPIClient.ts +135 -0
  133. package/src/services/SSEClient.ts +258 -0
  134. package/src/types/claude.ts +55 -0
  135. package/src/types/computer-name.d.ts +4 -0
  136. package/src/types/index.ts +63 -0
  137. package/src/types/messages.ts +39 -0
  138. package/src/types/runner-interface.ts +34 -0
  139. package/src/utils/StateManager.ts +187 -0
  140. package/src/utils/codex-sdk.js +448 -0
  141. package/src/utils/config.ts +315 -0
  142. package/src/utils/console.ts +13 -0
  143. package/src/utils/expand-env.ts +22 -0
  144. package/src/utils/logger.ts +131 -0
  145. package/src/utils/sdk-demo.js +34 -0
  146. package/src/utils/status-line.ts +121 -0
  147. package/test-debug.sh +26 -0
  148. package/tests/retry-strategies.test.ts +410 -0
  149. package/tests/sdk-integration.test.ts +329 -0
  150. package/tests/sdk-streaming.test.ts +1180 -0
  151. package/tests/setup.ts +5 -0
  152. package/tests/test-claude-manager.ts +120 -0
  153. package/tsconfig.json +36 -0
  154. package/vitest.config.ts +27 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-sse.js","sourceRoot":"","sources":["../src/runner-sse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Main RunnerApp class - entry point and lifecycle manager for the runner app
3
+ */
4
+ import { RunnerConfig, ConversationContext, JsonRpcMessage } from "./types";
5
+ import { ClaudeManager } from "./components/claude-manager";
6
+ import { EnhancedRepositoryManager } from "./components/enhanced-repository-manager";
7
+ export declare class RunnerApp {
8
+ private messageHandler;
9
+ private claudeManager;
10
+ private repositoryManager;
11
+ private agentConversations;
12
+ private config;
13
+ private configPath?;
14
+ private heartbeatInterval?;
15
+ private isRunning;
16
+ private isRegistered;
17
+ private delayFn;
18
+ private runnerUid;
19
+ private lastProcessedAt;
20
+ private isActiveRunner;
21
+ private preHandoffConversations;
22
+ constructor(config: RunnerConfig, configPath?: string);
23
+ private initializeComponents;
24
+ start(): Promise<void>;
25
+ stop(): Promise<void>;
26
+ notify(method: string, params: any): Promise<void>;
27
+ sendToOrchestrator(message: JsonRpcMessage): Promise<any>;
28
+ getConversationContext(conversationId: string): ConversationContext | undefined;
29
+ getConversationContextByTaskId(taskId: string): ConversationContext | undefined;
30
+ getConversationContextByAgentSessionId(agentSessionId: string): ConversationContext | undefined;
31
+ fetchConversationDetails(conversationId: string): Promise<any>;
32
+ getWorkspaceIdForTask(taskId: string): string | undefined;
33
+ private registerRunner;
34
+ private registerWithRetry;
35
+ private updateRunnerReposWithIds;
36
+ private startHeartbeat;
37
+ private stopAllConversations;
38
+ get config_(): RunnerConfig;
39
+ get activeConversations_(): Map<string, ConversationContext>;
40
+ get claudeManager_(): ClaudeManager;
41
+ get repositoryManager_(): EnhancedRepositoryManager;
42
+ getRunnerId(): string | undefined;
43
+ getRunnerUid(): string | null;
44
+ getLastProcessedAt(): Date | null;
45
+ getIsActiveRunner(): boolean;
46
+ setIsActiveRunner(active: boolean): void;
47
+ setLastProcessedAt(timestamp: Date | null): void;
48
+ getPreHandoffConversations(): Set<string>;
49
+ setDelayFunction(fn: (ms: number) => Promise<void>): void;
50
+ }
51
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAA6B,MAAM,SAAS,CAAC;AAEvG,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAQrF,qBAAa,SAAS;IACpB,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAC,CAAiB;IAC3C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,OAAO,CAA0F;IAGzG,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,cAAc,CAAkB;IAGxC,OAAO,CAAC,uBAAuB,CAAqB;gBAExC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM;IAOrD,OAAO,CAAC,oBAAoB;IAWtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuCtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BrB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBlD,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAkD/D,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAY/E,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAU/E,sCAAsC,CAAC,cAAc,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAUzF,wBAAwB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAgBpE,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;YAK3C,cAAc;YAwFd,iBAAiB;YAgFjB,wBAAwB;IA0CtC,OAAO,CAAC,cAAc;YAoBR,oBAAoB;IAmBlC,IAAI,OAAO,IAAI,YAAY,CAE1B;IAED,IAAI,oBAAoB,IAAI,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAE3D;IAED,IAAI,cAAc,IAAI,aAAa,CAElC;IACD,IAAI,kBAAkB,IAAI,yBAAyB,CAElD;IAED,WAAW,IAAI,MAAM,GAAG,SAAS;IAKjC,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,kBAAkB,IAAI,IAAI,GAAG,IAAI;IAIjC,iBAAiB,IAAI,OAAO;IAI5B,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAcxC,kBAAkB,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;IAchD,0BAA0B,IAAI,GAAG,CAAC,MAAM,CAAC;IAKzC,gBAAgB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAG1D"}
package/dist/runner.js ADDED
@@ -0,0 +1,530 @@
1
+ "use strict";
2
+ /**
3
+ * Main RunnerApp class - entry point and lifecycle manager for the runner app
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.RunnerApp = void 0;
43
+ const message_handler_1 = require("./components/message-handler");
44
+ const claude_manager_1 = require("./components/claude-manager");
45
+ const enhanced_repository_manager_1 = require("./components/enhanced-repository-manager");
46
+ const logger_1 = require("./utils/logger");
47
+ const status_line_1 = require("./utils/status-line");
48
+ const promises_1 = __importDefault(require("fs/promises"));
49
+ const path_1 = __importDefault(require("path"));
50
+ const logger = (0, logger_1.createLogger)("RunnerApp");
51
+ class RunnerApp {
52
+ messageHandler;
53
+ claudeManager;
54
+ repositoryManager;
55
+ agentConversations; // Keyed by conversation.id
56
+ config;
57
+ configPath;
58
+ heartbeatInterval;
59
+ isRunning = false;
60
+ isRegistered = false;
61
+ delayFn = (ms) => new Promise(resolve => setTimeout(resolve, ms));
62
+ // UID ownership fields
63
+ runnerUid = null;
64
+ lastProcessedAt = null;
65
+ isActiveRunner = false;
66
+ // Track conversations started before takeover
67
+ preHandoffConversations = new Set();
68
+ constructor(config, configPath) {
69
+ this.config = config;
70
+ this.configPath = configPath;
71
+ this.agentConversations = new Map();
72
+ this.initializeComponents();
73
+ }
74
+ initializeComponents() {
75
+ // Initialize repository manager first as it's used by Claude manager
76
+ this.repositoryManager = new enhanced_repository_manager_1.EnhancedRepositoryManager(this);
77
+ // Initialize Claude manager with repository manager
78
+ this.claudeManager = new claude_manager_1.ClaudeManager(this, this.repositoryManager);
79
+ // Initialize message handler
80
+ this.messageHandler = new message_handler_1.MessageHandler(this);
81
+ }
82
+ async start() {
83
+ if (this.isRunning) {
84
+ throw new Error("Runner is already running");
85
+ }
86
+ try {
87
+ // Register with retry strategy
88
+ await this.registerWithRetry();
89
+ // Note: Message collection will be initialized when we become the active runner
90
+ // and receive our lastProcessedAt timestamp via runner.uid.changed message
91
+ // Log debug info after registration
92
+ if (process.env["DEBUG"] === "true") {
93
+ logger.debug("Runner initialized with ownership details", {
94
+ runnerId: this.config.runnerId,
95
+ runnerUid: this.runnerUid,
96
+ lastProcessedAt: this.lastProcessedAt?.toISOString() || "null",
97
+ isActiveRunner: this.isActiveRunner,
98
+ electricUrl: this.config.electricUrl,
99
+ orchestratorUrl: this.config.orchestratorUrl
100
+ });
101
+ }
102
+ // Only start processing after successful registration
103
+ await this.messageHandler.startProcessing();
104
+ // Only start heartbeat after successful registration
105
+ this.startHeartbeat();
106
+ this.isRunning = true;
107
+ logger.info(`Runner ${this.config.runnerId} started successfully`);
108
+ }
109
+ catch (error) {
110
+ logger.error("Failed to start runner:", error);
111
+ throw error;
112
+ }
113
+ }
114
+ async stop() {
115
+ if (!this.isRunning) {
116
+ return;
117
+ }
118
+ logger.info(`Stopping runner ${this.config.runnerId}...`);
119
+ // Stop heartbeat
120
+ if (this.heartbeatInterval) {
121
+ clearInterval(this.heartbeatInterval);
122
+ this.heartbeatInterval = undefined;
123
+ }
124
+ // Stop all conversations
125
+ await this.stopAllConversations();
126
+ // Stop message processing
127
+ await this.messageHandler.stopProcessing();
128
+ // Clean up status line
129
+ status_line_1.statusLineManager.dispose();
130
+ // Collections automatically handle cleanup
131
+ this.isRunning = false;
132
+ logger.info(`Runner ${this.config.runnerId} stopped`);
133
+ }
134
+ async notify(method, params) {
135
+ try {
136
+ // Send notification to orchestrator via HTTP
137
+ await this.sendToOrchestrator({
138
+ jsonrpc: "2.0",
139
+ method,
140
+ params,
141
+ });
142
+ }
143
+ catch (error) {
144
+ // Special handling for heartbeat errors - just log a simple line
145
+ if (method === "runner.heartbeat") {
146
+ const errorMessage = error instanceof Error ? error.message : String(error);
147
+ logger.error(`Heartbeat failed: ${errorMessage}`);
148
+ }
149
+ else {
150
+ // For other RPC errors, log the method and error without stack
151
+ const errorMessage = error instanceof Error ? error.message : String(error);
152
+ logger.error(`RPC Error: Failed to notify with method '${method}': ${errorMessage}`);
153
+ }
154
+ throw error;
155
+ }
156
+ }
157
+ async sendToOrchestrator(message) {
158
+ try {
159
+ // Build headers - only include X-Runner-Id if we have one (not during registration)
160
+ const headers = {
161
+ "Content-Type": "application/json",
162
+ Authorization: `Bearer ${process.env["CLAUDETTE_RUNNER_TOKEN"]}`,
163
+ };
164
+ // Only add X-Runner-Id if we're registered (not during registration)
165
+ if (this.config.runnerId && message.method !== "runner.register") {
166
+ headers["X-Runner-Id"] = this.config.runnerId;
167
+ }
168
+ const response = await fetch(`${this.config.orchestratorUrl}/api/runner/messages`, {
169
+ method: "POST",
170
+ headers,
171
+ body: JSON.stringify(message),
172
+ signal: AbortSignal.timeout(30000), // 30 second timeout
173
+ });
174
+ if (!response.ok) {
175
+ const errorText = await response.text();
176
+ throw new Error(`HTTP ${response.status}: ${errorText}`);
177
+ }
178
+ return await response.json();
179
+ }
180
+ catch (error) {
181
+ const errorMessage = error instanceof Error ? error.message : String(error);
182
+ // Don't log verbose errors for heartbeat failures
183
+ if (message.method === "runner.heartbeat") {
184
+ // Heartbeat errors are already logged in notify()
185
+ }
186
+ else if (message.method === "runner.register") {
187
+ // Special case for registration failures
188
+ logger.error(`Registration failed: ${errorMessage}`);
189
+ }
190
+ else {
191
+ // For other RPC messages, log the attempted message and error
192
+ logger.error(`RPC failed:`, {
193
+ method: message.method,
194
+ params: message.params,
195
+ error: errorMessage
196
+ });
197
+ }
198
+ throw error;
199
+ }
200
+ }
201
+ getConversationContext(conversationId) {
202
+ // Using conversation.id as primary key for conversation tracking
203
+ const context = this.agentConversations.get(conversationId);
204
+ console.log(`[Runner] getConversationContext lookup:`, {
205
+ conversationId,
206
+ found: !!context,
207
+ totalConversations: this.agentConversations.size,
208
+ allConversationIds: Array.from(this.agentConversations.keys()),
209
+ });
210
+ return context;
211
+ }
212
+ getConversationContextByTaskId(taskId) {
213
+ // Helper method to find conversation by taskId (for backward compatibility)
214
+ for (const context of this.agentConversations.values()) {
215
+ if (context.taskId === taskId) {
216
+ return context;
217
+ }
218
+ }
219
+ return undefined;
220
+ }
221
+ getConversationContextByAgentSessionId(agentSessionId) {
222
+ // Helper method to find conversation by agentSessionId
223
+ for (const context of this.agentConversations.values()) {
224
+ if (context.agentSessionId === agentSessionId) {
225
+ return context;
226
+ }
227
+ }
228
+ return undefined;
229
+ }
230
+ async fetchConversationDetails(conversationId) {
231
+ // Send RPC request to fetch conversation details
232
+ const response = await this.sendToOrchestrator({
233
+ jsonrpc: "2.0",
234
+ id: `conv-get-${Date.now()}`,
235
+ method: "conversation.get",
236
+ params: { conversationId }
237
+ });
238
+ if (response?.error) {
239
+ throw new Error(`Failed to fetch conversation: ${response.error.message}`);
240
+ }
241
+ return response?.result;
242
+ }
243
+ getWorkspaceIdForTask(taskId) {
244
+ const context = this.getConversationContextByTaskId(taskId);
245
+ return context?.workspaceId;
246
+ }
247
+ async registerRunner() {
248
+ try {
249
+ // Filter runnerRepos by valid paths
250
+ let filteredRunnerRepos = [];
251
+ if (this.config.runnerRepos) {
252
+ for (const repo of this.config.runnerRepos) {
253
+ try {
254
+ const resolvedPath = path_1.default.resolve(repo.path);
255
+ const stats = await promises_1.default.stat(resolvedPath);
256
+ if (stats.isDirectory()) {
257
+ filteredRunnerRepos.push(repo);
258
+ logger.info(`RunnerRepo validated: ${repo.name} at ${resolvedPath}`);
259
+ }
260
+ else {
261
+ logger.error(`RunnerRepo path is not a directory: ${repo.name} at ${resolvedPath}`);
262
+ }
263
+ }
264
+ catch (error) {
265
+ logger.error(`RunnerRepo path does not exist: ${repo.name} at ${repo.path}`);
266
+ }
267
+ }
268
+ }
269
+ const response = await this.sendToOrchestrator({
270
+ jsonrpc: "2.0",
271
+ id: "register-" + Date.now(),
272
+ method: "runner.register",
273
+ params: {
274
+ version: "1.0.0",
275
+ runnerRepos: filteredRunnerRepos,
276
+ },
277
+ });
278
+ // Debug log the full response
279
+ logger.info(`Registration response:`, JSON.stringify(response, null, 2));
280
+ // Log the runnerRepos being sent and received
281
+ if (process.env["DEBUG"] === "true") {
282
+ logger.debug("Registration runnerRepos sent:", JSON.stringify(filteredRunnerRepos));
283
+ logger.debug("Registration runnerRepos received:", JSON.stringify(response?.result?.runnerRepos));
284
+ }
285
+ // Check for JSONRPC error response
286
+ if (response?.error) {
287
+ logger.error(`Registration error from server:`, response.error);
288
+ throw new Error(`Server error: ${response.error.message || 'Unknown error'}`);
289
+ }
290
+ // Extract result from JSONRPC response structure
291
+ const result = response?.result;
292
+ if (result?.runnerId) {
293
+ this.config.runnerId = result.runnerId;
294
+ this.runnerUid = result.runnerUid;
295
+ this.lastProcessedAt = result.lastProcessedAt ? new Date(result.lastProcessedAt) : null;
296
+ this.isRegistered = true;
297
+ logger.info(`Runner registered successfully with ID: ${this.config.runnerId} and UID: ${this.runnerUid}`);
298
+ // Process runnerRepos from response
299
+ if (result.runnerRepos && Array.isArray(result.runnerRepos)) {
300
+ await this.updateRunnerReposWithIds(result.runnerRepos);
301
+ }
302
+ // Debug logging for registration details
303
+ if (process.env["DEBUG"] === "true") {
304
+ logger.debug("Registration complete with details", {
305
+ runnerId: this.config.runnerId,
306
+ runnerUid: this.runnerUid,
307
+ lastProcessedAt: this.lastProcessedAt?.toISOString() || "null",
308
+ electricUrl: this.config.electricUrl,
309
+ orchestratorUrl: this.config.orchestratorUrl,
310
+ dataDir: this.config.dataDir,
311
+ runnerReposCount: result.runnerRepos?.length || 0
312
+ });
313
+ }
314
+ }
315
+ else {
316
+ logger.error(`Registration failed. Expected result.runnerId but got:`, {
317
+ hasResult: !!result,
318
+ resultKeys: result ? Object.keys(result) : [],
319
+ fullResponse: JSON.stringify(response, null, 2)
320
+ });
321
+ throw new Error("Registration response did not include runnerId");
322
+ }
323
+ }
324
+ catch (error) {
325
+ const errorMessage = error instanceof Error ? error.message : String(error);
326
+ logger.error(`Failed to register runner: ${errorMessage}`);
327
+ throw error;
328
+ }
329
+ }
330
+ async registerWithRetry() {
331
+ const strategy = this.config.retryStrategy;
332
+ if (strategy === "none") {
333
+ // Single attempt, no retries
334
+ await this.registerRunner();
335
+ return;
336
+ }
337
+ if (strategy === "interval") {
338
+ // Retry at fixed intervals
339
+ const intervalMs = this.config.retryIntervalSecs * 1000;
340
+ let attempt = 0;
341
+ while (!this.isRegistered) {
342
+ attempt++;
343
+ try {
344
+ logger.info(`Registration attempt ${attempt}...`);
345
+ await this.registerRunner();
346
+ return;
347
+ }
348
+ catch (error) {
349
+ const errorMessage = error instanceof Error ? error.message : String(error);
350
+ logger.error(`Registration attempt ${attempt} failed: ${errorMessage}`);
351
+ logger.info(`Retrying in ${this.config.retryIntervalSecs} seconds...`);
352
+ await this.delayFn(intervalMs);
353
+ }
354
+ }
355
+ }
356
+ if (strategy === "exponential") {
357
+ // Exponential backoff with max duration
358
+ const maxDurationMs = this.config.retryDurationSecs * 1000;
359
+ const startTime = Date.now();
360
+ let delayMs = 8000; // Start with 8 seconds
361
+ let attempt = 0;
362
+ while (!this.isRegistered) {
363
+ attempt++;
364
+ try {
365
+ logger.info(`Registration attempt ${attempt}...`);
366
+ await this.registerRunner();
367
+ return;
368
+ }
369
+ catch (error) {
370
+ const errorMessage = error instanceof Error ? error.message : String(error);
371
+ logger.error(`Registration attempt ${attempt} failed: ${errorMessage}`);
372
+ const elapsedMs = Date.now() - startTime;
373
+ if (elapsedMs >= maxDurationMs) {
374
+ // Final retry at max duration
375
+ const remainingMs = maxDurationMs - elapsedMs;
376
+ if (remainingMs > 0) {
377
+ logger.info(`Final retry in ${Math.ceil(remainingMs / 1000)} seconds...`);
378
+ await this.delayFn(remainingMs);
379
+ try {
380
+ logger.info("Final registration attempt...");
381
+ await this.registerRunner();
382
+ return;
383
+ }
384
+ catch (finalError) {
385
+ const errorMessage = finalError instanceof Error ? finalError.message : String(finalError);
386
+ logger.error(`Final registration attempt failed: ${errorMessage}`);
387
+ throw new Error(`Failed to register after ${this.config.retryDurationSecs} seconds`);
388
+ }
389
+ }
390
+ else {
391
+ throw new Error(`Failed to register after ${this.config.retryDurationSecs} seconds`);
392
+ }
393
+ }
394
+ // Calculate next delay with exponential backoff
395
+ const nextDelayMs = Math.min(delayMs, maxDurationMs - elapsedMs);
396
+ logger.info(`Retrying in ${Math.ceil(nextDelayMs / 1000)} seconds...`);
397
+ await this.delayFn(nextDelayMs);
398
+ // Double the delay for next attempt
399
+ delayMs = Math.min(delayMs * 2, maxDurationMs);
400
+ }
401
+ }
402
+ }
403
+ }
404
+ async updateRunnerReposWithIds(serverRunnerRepos) {
405
+ if (!this.configPath) {
406
+ logger.info("No config path specified, cannot update runnerRepos with IDs");
407
+ return;
408
+ }
409
+ try {
410
+ // Load the current config file
411
+ const { ConfigManager } = await Promise.resolve().then(() => __importStar(require("./utils/config")));
412
+ const configContent = await promises_1.default.readFile(path_1.default.resolve(this.configPath), "utf-8");
413
+ const config = JSON.parse(configContent);
414
+ if (!config.runnerRepos || !Array.isArray(config.runnerRepos)) {
415
+ logger.info("No runnerRepos in config file to update");
416
+ return;
417
+ }
418
+ // Update runnerRepos with IDs from server
419
+ let hasUpdates = false;
420
+ for (const serverRepo of serverRunnerRepos) {
421
+ const localRepo = config.runnerRepos.find((r) => r.name === serverRepo.name && r.path === serverRepo.path);
422
+ if (localRepo && !localRepo.id && serverRepo.uuid) {
423
+ localRepo.id = serverRepo.uuid;
424
+ hasUpdates = true;
425
+ logger.info(`Updated RunnerRepo "${localRepo.name}" with UUID: ${serverRepo.uuid}`);
426
+ }
427
+ }
428
+ // Save the updated config if there were changes
429
+ if (hasUpdates) {
430
+ await ConfigManager.saveConfigFile(this.configPath, config);
431
+ // Update our in-memory config
432
+ this.config.runnerRepos = config.runnerRepos;
433
+ }
434
+ }
435
+ catch (error) {
436
+ logger.error("Failed to update runnerRepos with IDs", error);
437
+ }
438
+ }
439
+ startHeartbeat() {
440
+ if (!this.isRegistered || !this.config.runnerId) {
441
+ logger.warn("Cannot start heartbeat: runner not registered");
442
+ return;
443
+ }
444
+ this.heartbeatInterval = setInterval(async () => {
445
+ try {
446
+ await this.notify("runner.heartbeat", {
447
+ runnerId: this.config.runnerId,
448
+ activeConversations: this.agentConversations.size,
449
+ uptime: process.uptime(),
450
+ memoryUsage: process.memoryUsage(),
451
+ });
452
+ }
453
+ catch (error) {
454
+ // Error is already logged in notify() method
455
+ }
456
+ }, this.config.heartbeatInterval);
457
+ }
458
+ async stopAllConversations() {
459
+ const stopPromises = [];
460
+ for (const [conversationId, context] of this.agentConversations) {
461
+ if (context.status === "active" || context.status === "starting") {
462
+ stopPromises.push(this.claudeManager.stopConversation(context.agentSessionId, context)
463
+ .catch(error => {
464
+ logger.error(`Failed to stop conversation ${context.agentSessionId}:`, error);
465
+ }));
466
+ }
467
+ }
468
+ await Promise.all(stopPromises);
469
+ this.agentConversations.clear();
470
+ }
471
+ // Getters for components
472
+ get config_() {
473
+ return this.config;
474
+ }
475
+ get activeConversations_() {
476
+ return this.agentConversations;
477
+ }
478
+ get claudeManager_() {
479
+ return this.claudeManager;
480
+ }
481
+ get repositoryManager_() {
482
+ return this.repositoryManager;
483
+ }
484
+ getRunnerId() {
485
+ return this.config.runnerId;
486
+ }
487
+ // UID ownership getters/setters
488
+ getRunnerUid() {
489
+ return this.runnerUid;
490
+ }
491
+ getLastProcessedAt() {
492
+ return this.lastProcessedAt;
493
+ }
494
+ getIsActiveRunner() {
495
+ return this.isActiveRunner;
496
+ }
497
+ setIsActiveRunner(active) {
498
+ const previousState = this.isActiveRunner;
499
+ this.isActiveRunner = active;
500
+ if (process.env["DEBUG"] === "true") {
501
+ logger.debug("Active runner status changed", {
502
+ previous: previousState,
503
+ new: active,
504
+ runnerUid: this.runnerUid,
505
+ lastProcessedAt: this.lastProcessedAt?.toISOString() || "null"
506
+ });
507
+ }
508
+ }
509
+ setLastProcessedAt(timestamp) {
510
+ const previousTimestamp = this.lastProcessedAt;
511
+ this.lastProcessedAt = timestamp;
512
+ if (process.env["DEBUG"] === "true") {
513
+ logger.debug("LastProcessedAt updated", {
514
+ previous: previousTimestamp?.toISOString() || "null",
515
+ new: timestamp?.toISOString() || "null",
516
+ runnerUid: this.runnerUid,
517
+ isActiveRunner: this.isActiveRunner
518
+ });
519
+ }
520
+ }
521
+ getPreHandoffConversations() {
522
+ return this.preHandoffConversations;
523
+ }
524
+ // For testing purposes - allows mocking delays
525
+ setDelayFunction(fn) {
526
+ this.delayFn = fn;
527
+ }
528
+ }
529
+ exports.RunnerApp = RunnerApp;
530
+ //# sourceMappingURL=runner.js.map