@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.
- package/DEBUG_LOGGING.md +60 -0
- package/LICENSE +21 -0
- package/MIGRATION_PLAN.md +52 -0
- package/README.md +220 -0
- package/SDK_IMPLEMENTATION_GUIDE.md +1036 -0
- package/bin/northflare-runner +367 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/coverage-final.json +12 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +176 -0
- package/coverage/lib/index.html +116 -0
- package/coverage/lib/preload-script.js.html +964 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/coverage/src/collections/index.html +116 -0
- package/coverage/src/collections/runner-messages.ts.html +312 -0
- package/coverage/src/components/claude-manager.ts.html +1290 -0
- package/coverage/src/components/index.html +146 -0
- package/coverage/src/components/message-handler.ts.html +730 -0
- package/coverage/src/components/repository-manager.ts.html +841 -0
- package/coverage/src/index.html +131 -0
- package/coverage/src/index.ts.html +448 -0
- package/coverage/src/runner.ts.html +1239 -0
- package/coverage/src/utils/config.ts.html +780 -0
- package/coverage/src/utils/console.ts.html +121 -0
- package/coverage/src/utils/index.html +161 -0
- package/coverage/src/utils/logger.ts.html +475 -0
- package/coverage/src/utils/status-line.ts.html +445 -0
- package/dist/collections/runner-messages.d.ts +52 -0
- package/dist/collections/runner-messages.d.ts.map +1 -0
- package/dist/collections/runner-messages.js +161 -0
- package/dist/collections/runner-messages.js.map +1 -0
- package/dist/components/claude-manager.d.ts +39 -0
- package/dist/components/claude-manager.d.ts.map +1 -0
- package/dist/components/claude-manager.js +783 -0
- package/dist/components/claude-manager.js.map +1 -0
- package/dist/components/claude-sdk-manager.d.ts +47 -0
- package/dist/components/claude-sdk-manager.d.ts.map +1 -0
- package/dist/components/claude-sdk-manager.js +1088 -0
- package/dist/components/claude-sdk-manager.js.map +1 -0
- package/dist/components/enhanced-repository-manager.d.ts +134 -0
- package/dist/components/enhanced-repository-manager.d.ts.map +1 -0
- package/dist/components/enhanced-repository-manager.js +602 -0
- package/dist/components/enhanced-repository-manager.js.map +1 -0
- package/dist/components/message-handler-sse.d.ts +46 -0
- package/dist/components/message-handler-sse.d.ts.map +1 -0
- package/dist/components/message-handler-sse.js +734 -0
- package/dist/components/message-handler-sse.js.map +1 -0
- package/dist/components/message-handler.d.ts +35 -0
- package/dist/components/message-handler.d.ts.map +1 -0
- package/dist/components/message-handler.js +689 -0
- package/dist/components/message-handler.js.map +1 -0
- package/dist/components/repository-manager.d.ts +51 -0
- package/dist/components/repository-manager.d.ts.map +1 -0
- package/dist/components/repository-manager.js +295 -0
- package/dist/components/repository-manager.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +166 -0
- package/dist/index.js.map +1 -0
- package/dist/runner-sse.d.ts +57 -0
- package/dist/runner-sse.d.ts.map +1 -0
- package/dist/runner-sse.js +698 -0
- package/dist/runner-sse.js.map +1 -0
- package/dist/runner.d.ts +51 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +530 -0
- package/dist/runner.js.map +1 -0
- package/dist/services/RunnerAPIClient.d.ts +30 -0
- package/dist/services/RunnerAPIClient.d.ts.map +1 -0
- package/dist/services/RunnerAPIClient.js +112 -0
- package/dist/services/RunnerAPIClient.js.map +1 -0
- package/dist/services/SSEClient.d.ts +60 -0
- package/dist/services/SSEClient.d.ts.map +1 -0
- package/dist/services/SSEClient.js +204 -0
- package/dist/services/SSEClient.js.map +1 -0
- package/dist/types/claude.d.ts +45 -0
- package/dist/types/claude.d.ts.map +1 -0
- package/dist/types/claude.js +6 -0
- package/dist/types/claude.js.map +1 -0
- package/dist/types/index.d.ts +47 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/messages.d.ts +31 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +6 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/runner-interface.d.ts +24 -0
- package/dist/types/runner-interface.d.ts.map +1 -0
- package/dist/types/runner-interface.js +6 -0
- package/dist/types/runner-interface.js.map +1 -0
- package/dist/utils/StateManager.d.ts +52 -0
- package/dist/utils/StateManager.d.ts.map +1 -0
- package/dist/utils/StateManager.js +162 -0
- package/dist/utils/StateManager.js.map +1 -0
- package/dist/utils/config.d.ts +41 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +250 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/console.d.ts +11 -0
- package/dist/utils/console.d.ts.map +1 -0
- package/dist/utils/console.js +15 -0
- package/dist/utils/console.js.map +1 -0
- package/dist/utils/expand-env.d.ts +2 -0
- package/dist/utils/expand-env.d.ts.map +1 -0
- package/dist/utils/expand-env.js +20 -0
- package/dist/utils/expand-env.js.map +1 -0
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +108 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/status-line.d.ts +37 -0
- package/dist/utils/status-line.d.ts.map +1 -0
- package/dist/utils/status-line.js +113 -0
- package/dist/utils/status-line.js.map +1 -0
- package/docs/claude-manager.md +91 -0
- package/exceptions.log +22 -0
- package/lib/preload-script.js +293 -0
- package/package.json +55 -0
- package/rejections.log +63 -0
- package/runner.log +488 -0
- package/src/components/claude-sdk-manager.ts +1354 -0
- package/src/components/enhanced-repository-manager.ts +823 -0
- package/src/components/message-handler-sse.ts +1011 -0
- package/src/components/repository-manager.ts +337 -0
- package/src/index.ts +166 -0
- package/src/runner-sse.ts +847 -0
- package/src/services/RunnerAPIClient.ts +135 -0
- package/src/services/SSEClient.ts +258 -0
- package/src/types/claude.ts +55 -0
- package/src/types/computer-name.d.ts +4 -0
- package/src/types/index.ts +63 -0
- package/src/types/messages.ts +39 -0
- package/src/types/runner-interface.ts +34 -0
- package/src/utils/StateManager.ts +187 -0
- package/src/utils/codex-sdk.js +448 -0
- package/src/utils/config.ts +315 -0
- package/src/utils/console.ts +13 -0
- package/src/utils/expand-env.ts +22 -0
- package/src/utils/logger.ts +131 -0
- package/src/utils/sdk-demo.js +34 -0
- package/src/utils/status-line.ts +121 -0
- package/test-debug.sh +26 -0
- package/tests/retry-strategies.test.ts +410 -0
- package/tests/sdk-integration.test.ts +329 -0
- package/tests/sdk-streaming.test.ts +1180 -0
- package/tests/setup.ts +5 -0
- package/tests/test-claude-manager.ts +120 -0
- package/tsconfig.json +36 -0
- 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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"}
|
package/dist/runner.d.ts
ADDED
|
@@ -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
|