openpaean 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/client.d.ts +13 -3
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +130 -24
- package/dist/api/client.js.map +1 -1
- package/dist/api/gateway-api.d.ts +46 -0
- package/dist/api/gateway-api.d.ts.map +1 -0
- package/dist/api/gateway-api.js +50 -0
- package/dist/api/gateway-api.js.map +1 -0
- package/dist/api/worker-api.d.ts +94 -0
- package/dist/api/worker-api.d.ts.map +1 -0
- package/dist/api/worker-api.js +85 -0
- package/dist/api/worker-api.js.map +1 -0
- package/dist/cli.js +13 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/agent.d.ts +4 -0
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +57 -5
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/gateway.d.ts +8 -0
- package/dist/commands/gateway.d.ts.map +1 -0
- package/dist/commands/gateway.js +86 -0
- package/dist/commands/gateway.js.map +1 -0
- package/dist/commands/worker.d.ts +7 -0
- package/dist/commands/worker.d.ts.map +1 -0
- package/dist/commands/worker.js +283 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/gateway/service.d.ts +94 -0
- package/dist/gateway/service.d.ts.map +1 -0
- package/dist/gateway/service.js +331 -0
- package/dist/gateway/service.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +12 -1
- package/dist/mcp/client.js.map +1 -1
- package/dist/utils/config.d.ts +13 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +24 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/output.d.ts +4 -0
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +17 -0
- package/dist/utils/output.js.map +1 -1
- package/dist/worker/executors/articulate.d.ts +19 -0
- package/dist/worker/executors/articulate.d.ts.map +1 -0
- package/dist/worker/executors/articulate.js +147 -0
- package/dist/worker/executors/articulate.js.map +1 -0
- package/dist/worker/executors/claude.d.ts +17 -0
- package/dist/worker/executors/claude.d.ts.map +1 -0
- package/dist/worker/executors/claude.js +102 -0
- package/dist/worker/executors/claude.js.map +1 -0
- package/dist/worker/executors/index.d.ts +26 -0
- package/dist/worker/executors/index.d.ts.map +1 -0
- package/dist/worker/executors/index.js +81 -0
- package/dist/worker/executors/index.js.map +1 -0
- package/dist/worker/index.d.ts +9 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +9 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/service.d.ts +48 -0
- package/dist/worker/service.d.ts.map +1 -0
- package/dist/worker/service.js +551 -0
- package/dist/worker/service.js.map +1 -0
- package/dist/worker/types.d.ts +133 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js +70 -0
- package/dist/worker/types.js.map +1 -0
- package/package.json +8 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,YAAY,SA0BnB,CAAC;AAEP;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IACxC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B,GAAG,OAAO,CAAC,IAAI,CAAC,CAuMhB"}
|
package/dist/commands/agent.js
CHANGED
|
@@ -14,24 +14,30 @@ export const agentCommand = new Command('agent')
|
|
|
14
14
|
.option('--fullscreen', 'Enable fullscreen mode (default: scrolling mode)')
|
|
15
15
|
.option('-d, --debug', 'Enable debug logging')
|
|
16
16
|
.option('-m, --message <message>', 'Send a single message and exit')
|
|
17
|
+
.option('--gateway', 'Enable gateway relay for remote clients')
|
|
18
|
+
.option('--worker', 'Enable background worker for task processing')
|
|
19
|
+
.option('--gateway-interval <ms>', 'Gateway poll interval in milliseconds', '3000')
|
|
20
|
+
.option('--worker-interval <ms>', 'Worker poll interval in milliseconds', '30000')
|
|
17
21
|
.action(async (options) => {
|
|
18
|
-
// Check authentication
|
|
19
22
|
if (!isAuthenticated()) {
|
|
20
23
|
console.log(chalk.yellow('⚠️ Not logged in. Run `openpaean login` first.\n'));
|
|
21
24
|
process.exit(1);
|
|
22
25
|
}
|
|
23
26
|
await runAgentMode({
|
|
24
27
|
mcp: options.mcp !== false,
|
|
25
|
-
fullscreen: options.fullscreen === true,
|
|
28
|
+
fullscreen: options.fullscreen === true,
|
|
26
29
|
debug: options.debug ?? false,
|
|
27
30
|
message: options.message,
|
|
31
|
+
gatewayEnabled: options.gateway ?? false,
|
|
32
|
+
gatewayPollInterval: parseInt(options.gatewayInterval, 10) || 3000,
|
|
33
|
+
workerEnabled: options.worker ?? false,
|
|
34
|
+
workerPollInterval: parseInt(options.workerInterval, 10) || 30000,
|
|
28
35
|
});
|
|
29
36
|
});
|
|
30
37
|
/**
|
|
31
38
|
* Start agent mode directly (for default command)
|
|
32
39
|
*/
|
|
33
40
|
export async function runAgentMode(options) {
|
|
34
|
-
// Check authentication
|
|
35
41
|
if (!isAuthenticated()) {
|
|
36
42
|
console.log(chalk.yellow('⚠️ Not logged in. Run `openpaean login` first.\n'));
|
|
37
43
|
process.exit(1);
|
|
@@ -143,8 +149,49 @@ export async function runAgentMode(options) {
|
|
|
143
149
|
}
|
|
144
150
|
return;
|
|
145
151
|
}
|
|
152
|
+
// Initialize gateway service if enabled
|
|
153
|
+
let gatewayService;
|
|
154
|
+
if (options.gatewayEnabled) {
|
|
155
|
+
const { GatewayService } = await import('../gateway/service.js');
|
|
156
|
+
gatewayService = new GatewayService({
|
|
157
|
+
pollInterval: options.gatewayPollInterval ?? 3000,
|
|
158
|
+
debug,
|
|
159
|
+
});
|
|
160
|
+
gatewayService.setMcpState(mcpState, onMcpToolCall, mcpClient);
|
|
161
|
+
if (debug) {
|
|
162
|
+
console.log(chalk.dim('[Gateway] Enabled — polling for remote requests'));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Initialize worker service if enabled
|
|
166
|
+
let workerService;
|
|
167
|
+
if (options.workerEnabled) {
|
|
168
|
+
const { WorkerService } = await import('../worker/service.js');
|
|
169
|
+
workerService = new WorkerService({
|
|
170
|
+
pollInterval: options.workerPollInterval ?? 30000,
|
|
171
|
+
debug,
|
|
172
|
+
autonomousMode: true,
|
|
173
|
+
});
|
|
174
|
+
workerService.setMcpState(mcpState, onMcpToolCall, mcpClient);
|
|
175
|
+
if (gatewayService) {
|
|
176
|
+
workerService.setIdleCheck(() => !gatewayService.isProcessingRemote());
|
|
177
|
+
}
|
|
178
|
+
if (debug) {
|
|
179
|
+
console.log(chalk.dim('[Worker] Enabled — polling for tasks'));
|
|
180
|
+
}
|
|
181
|
+
}
|
|
146
182
|
// Start interactive chat (scrolling mode by default, fullscreen if requested)
|
|
147
183
|
try {
|
|
184
|
+
// Start background services
|
|
185
|
+
if (gatewayService) {
|
|
186
|
+
gatewayService.start().catch((err) => {
|
|
187
|
+
console.log(chalk.yellow(`Gateway failed to start: ${err instanceof Error ? err.message : err}`));
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
if (workerService) {
|
|
191
|
+
workerService.start().catch((err) => {
|
|
192
|
+
console.log(chalk.yellow(`Worker failed to start: ${err instanceof Error ? err.message : err}`));
|
|
193
|
+
});
|
|
194
|
+
}
|
|
148
195
|
if (enableFullscreen) {
|
|
149
196
|
await startFullscreenChat({
|
|
150
197
|
mcpState,
|
|
@@ -153,7 +200,6 @@ export async function runAgentMode(options) {
|
|
|
153
200
|
});
|
|
154
201
|
}
|
|
155
202
|
else {
|
|
156
|
-
// New default: scrolling mode (Claude Code style)
|
|
157
203
|
await startScrollingChat({
|
|
158
204
|
mcpState,
|
|
159
205
|
onMcpToolCall,
|
|
@@ -162,7 +208,13 @@ export async function runAgentMode(options) {
|
|
|
162
208
|
}
|
|
163
209
|
}
|
|
164
210
|
finally {
|
|
165
|
-
// Cleanup MCP connections on exit
|
|
211
|
+
// Cleanup gateway, worker, and MCP connections on exit
|
|
212
|
+
if (gatewayService) {
|
|
213
|
+
await gatewayService.stop().catch(() => { });
|
|
214
|
+
}
|
|
215
|
+
if (workerService) {
|
|
216
|
+
await workerService.stop().catch(() => { });
|
|
217
|
+
}
|
|
166
218
|
await mcpClient?.disconnectAll();
|
|
167
219
|
}
|
|
168
220
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC3C,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC1D,MAAM,CAAC,cAAc,EAAE,kDAAkD,CAAC;KAC1E,MAAM,CAAC,aAAa,EAAE,sBAAsB,CAAC;KAC7C,MAAM,CAAC,yBAAyB,EAAE,gCAAgC,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACtB,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway Command
|
|
3
|
+
* CLI commands for the cross-device session gateway.
|
|
4
|
+
* Allows the local OpenPaean CLI to serve as a relay for remote web/mobile clients.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
export declare const gatewayCommand: Command;
|
|
8
|
+
//# sourceMappingURL=gateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/commands/gateway.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,eAAO,MAAM,cAAc,SAC+D,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway Command
|
|
3
|
+
* CLI commands for the cross-device session gateway.
|
|
4
|
+
* Allows the local OpenPaean CLI to serve as a relay for remote web/mobile clients.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { readFileSync, existsSync, unlinkSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
import { getConfigDir } from '../utils/config.js';
|
|
11
|
+
function getGatewayPidFile() {
|
|
12
|
+
return join(getConfigDir(), 'gateway.pid');
|
|
13
|
+
}
|
|
14
|
+
function removeGatewayPid() {
|
|
15
|
+
try {
|
|
16
|
+
unlinkSync(getGatewayPidFile());
|
|
17
|
+
}
|
|
18
|
+
catch { /* ignore */ }
|
|
19
|
+
}
|
|
20
|
+
function readGatewayPid() {
|
|
21
|
+
try {
|
|
22
|
+
const pidFile = getGatewayPidFile();
|
|
23
|
+
if (!existsSync(pidFile))
|
|
24
|
+
return null;
|
|
25
|
+
return JSON.parse(readFileSync(pidFile, 'utf-8'));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function isProcessRunning(pid) {
|
|
32
|
+
try {
|
|
33
|
+
process.kill(pid, 0);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export const gatewayCommand = new Command('gateway')
|
|
41
|
+
.description('Cross-device session gateway — relay remote requests through local CLI');
|
|
42
|
+
gatewayCommand
|
|
43
|
+
.command('status')
|
|
44
|
+
.description('Check gateway status')
|
|
45
|
+
.action(() => {
|
|
46
|
+
const pidInfo = readGatewayPid();
|
|
47
|
+
if (!pidInfo) {
|
|
48
|
+
console.log(chalk.gray('No gateway running.'));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (!isProcessRunning(pidInfo.pid)) {
|
|
52
|
+
console.log(chalk.yellow('Gateway process not found (stale PID file).'));
|
|
53
|
+
removeGatewayPid();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
console.log(chalk.green.bold('Gateway is running'));
|
|
57
|
+
console.log(chalk.gray(` PID: ${pidInfo.pid}`));
|
|
58
|
+
console.log(chalk.gray(` Started: ${pidInfo.startedAt}`));
|
|
59
|
+
if (pidInfo.workspace) {
|
|
60
|
+
console.log(chalk.gray(` Workspace: ${pidInfo.workspace}`));
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
gatewayCommand
|
|
64
|
+
.command('stop')
|
|
65
|
+
.description('Stop the running gateway')
|
|
66
|
+
.action(() => {
|
|
67
|
+
const pidInfo = readGatewayPid();
|
|
68
|
+
if (!pidInfo) {
|
|
69
|
+
console.log(chalk.gray('No gateway running.'));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (!isProcessRunning(pidInfo.pid)) {
|
|
73
|
+
console.log(chalk.yellow('Gateway process not found (stale PID file).'));
|
|
74
|
+
removeGatewayPid();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
process.kill(pidInfo.pid, 'SIGTERM');
|
|
79
|
+
console.log(chalk.green(`Sent stop signal to gateway (PID: ${pidInfo.pid})`));
|
|
80
|
+
removeGatewayPid();
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.error(chalk.red(`Failed to stop gateway: ${error instanceof Error ? error.message : error}`));
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/commands/gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/commands/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6DpC,eAAO,MAAM,aAAa,SAC8C,CAAC"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker Command
|
|
3
|
+
* CLI commands for the OpenPaean Local Autonomous Worker
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { writeFileSync, readFileSync, existsSync, unlinkSync } from 'fs';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { WorkerService, DEFAULT_WORKER_CONFIG, getExecutorRegistry, ArticulateExecutor, ClaudeExecutor, } from '../worker/index.js';
|
|
10
|
+
import { isAuthenticated, getConfigDir } from '../utils/config.js';
|
|
11
|
+
import * as output from '../utils/output.js';
|
|
12
|
+
function getWorkerPidFile() {
|
|
13
|
+
return join(getConfigDir(), 'worker.pid');
|
|
14
|
+
}
|
|
15
|
+
function writeWorkerPid(workspace) {
|
|
16
|
+
const info = {
|
|
17
|
+
pid: process.pid,
|
|
18
|
+
startedAt: new Date().toISOString(),
|
|
19
|
+
workspace,
|
|
20
|
+
};
|
|
21
|
+
try {
|
|
22
|
+
writeFileSync(getWorkerPidFile(), JSON.stringify(info, null, 2));
|
|
23
|
+
}
|
|
24
|
+
catch { /* best effort */ }
|
|
25
|
+
}
|
|
26
|
+
function readWorkerPid() {
|
|
27
|
+
try {
|
|
28
|
+
if (!existsSync(getWorkerPidFile()))
|
|
29
|
+
return null;
|
|
30
|
+
return JSON.parse(readFileSync(getWorkerPidFile(), 'utf-8'));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function removeWorkerPid() {
|
|
37
|
+
try {
|
|
38
|
+
unlinkSync(getWorkerPidFile());
|
|
39
|
+
}
|
|
40
|
+
catch { /* ignore */ }
|
|
41
|
+
}
|
|
42
|
+
function isWorkerRunning(pid) {
|
|
43
|
+
try {
|
|
44
|
+
process.kill(pid, 0);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function requireAuth() {
|
|
52
|
+
if (!isAuthenticated()) {
|
|
53
|
+
output.error('Not authenticated. Please run "openpaean login" first.');
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export const workerCommand = new Command('worker')
|
|
58
|
+
.description('Autonomous worker mode for continuous task execution');
|
|
59
|
+
workerCommand
|
|
60
|
+
.command('start')
|
|
61
|
+
.description('Start the autonomous worker loop')
|
|
62
|
+
.option('-i, --interval <ms>', 'Poll interval in milliseconds', String(DEFAULT_WORKER_CONFIG.pollInterval))
|
|
63
|
+
.option('-r, --max-retries <n>', 'Maximum retries per task', String(DEFAULT_WORKER_CONFIG.maxRetries))
|
|
64
|
+
.option('-t, --timeout <ms>', 'Task timeout in milliseconds', String(DEFAULT_WORKER_CONFIG.taskTimeout))
|
|
65
|
+
.option('--no-verification', 'Disable verification step')
|
|
66
|
+
.option('-d, --debug', 'Enable debug logging')
|
|
67
|
+
.action(async (options) => {
|
|
68
|
+
console.log(chalk.yellow('\n [Deprecated] `openpaean worker start` will be removed in a future release.'));
|
|
69
|
+
console.log(chalk.yellow(' Use `openpaean --worker` to enable the worker within the interactive CLI.\n'));
|
|
70
|
+
requireAuth();
|
|
71
|
+
const parsedInterval = parseInt(options.interval, 10);
|
|
72
|
+
const parsedRetries = parseInt(options.maxRetries, 10);
|
|
73
|
+
const parsedTimeout = parseInt(options.timeout, 10);
|
|
74
|
+
const config = {
|
|
75
|
+
pollInterval: Math.max(1000, isNaN(parsedInterval) ? DEFAULT_WORKER_CONFIG.pollInterval : parsedInterval),
|
|
76
|
+
maxRetries: Math.max(1, Math.min(10, isNaN(parsedRetries) ? DEFAULT_WORKER_CONFIG.maxRetries : parsedRetries)),
|
|
77
|
+
taskTimeout: Math.max(10000, isNaN(parsedTimeout) ? DEFAULT_WORKER_CONFIG.taskTimeout : parsedTimeout),
|
|
78
|
+
verificationEnabled: options.verification !== false,
|
|
79
|
+
debug: options.debug ?? false,
|
|
80
|
+
autonomousMode: true,
|
|
81
|
+
};
|
|
82
|
+
console.log('');
|
|
83
|
+
console.log(chalk.bold.cyan(' ╔══════════════════════════════════════════════════╗'));
|
|
84
|
+
console.log(chalk.bold.cyan(' ║') + chalk.bold.white(' OPENPAEAN WORKER ') + chalk.green('●') + chalk.white(' Starting...') + chalk.bold.cyan(' ║'));
|
|
85
|
+
console.log(chalk.bold.cyan(' ╚══════════════════════════════════════════════════╝'));
|
|
86
|
+
console.log('');
|
|
87
|
+
output.tableRow('Poll Interval', `${config.pollInterval / 1000}s`, 20);
|
|
88
|
+
output.tableRow('Max Retries', String(config.maxRetries), 20);
|
|
89
|
+
output.tableRow('Task Timeout', `${config.taskTimeout / 60000}min`, 20);
|
|
90
|
+
output.tableRow('Verification', config.verificationEnabled ? 'Enabled' : 'Disabled', 20);
|
|
91
|
+
console.log('');
|
|
92
|
+
const worker = new WorkerService(config);
|
|
93
|
+
writeWorkerPid();
|
|
94
|
+
const startTime = Date.now();
|
|
95
|
+
worker.onEvent((event) => {
|
|
96
|
+
const elapsed = output.formatDuration(Date.now() - startTime);
|
|
97
|
+
switch (event.type) {
|
|
98
|
+
case 'started':
|
|
99
|
+
console.log(chalk.green('✓') + chalk.dim(' Worker started'));
|
|
100
|
+
console.log(chalk.dim(` Press Ctrl+C to stop\n`));
|
|
101
|
+
break;
|
|
102
|
+
case 'stopped':
|
|
103
|
+
console.log(chalk.yellow('●') + chalk.dim(' Worker stopped'));
|
|
104
|
+
break;
|
|
105
|
+
case 'task_claimed':
|
|
106
|
+
console.log(chalk.cyan('▶') + ` Task claimed: ${chalk.white(output.truncate(event.task.content, 50))}`);
|
|
107
|
+
console.log(chalk.dim(` ID: ${event.task.id} | Priority: ${event.task.priority}`));
|
|
108
|
+
break;
|
|
109
|
+
case 'task_started':
|
|
110
|
+
console.log(chalk.blue('◉') + ` Executing (attempt ${event.attempt}/${config.maxRetries})...`);
|
|
111
|
+
break;
|
|
112
|
+
case 'task_completed':
|
|
113
|
+
console.log(chalk.green('✓') + ` Task completed in ${output.formatDuration(event.duration)}`);
|
|
114
|
+
console.log('');
|
|
115
|
+
break;
|
|
116
|
+
case 'task_failed':
|
|
117
|
+
console.log(chalk.red('✗') + ` Task failed: ${chalk.dim(output.truncate(event.error, 60))}`);
|
|
118
|
+
if (event.willRetry) {
|
|
119
|
+
console.log(chalk.yellow('↻') + chalk.dim(' Will retry...'));
|
|
120
|
+
}
|
|
121
|
+
break;
|
|
122
|
+
case 'task_verification_failed':
|
|
123
|
+
console.log(chalk.yellow('⚠') + ' Verification failed, will retry...');
|
|
124
|
+
break;
|
|
125
|
+
case 'poll_empty':
|
|
126
|
+
if (config.debug) {
|
|
127
|
+
console.log(chalk.dim(` [${elapsed}] No pending tasks`));
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
case 'error':
|
|
131
|
+
console.log(chalk.red('✗') + ` Error: ${event.error}`);
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
let cleaningUp = false;
|
|
136
|
+
let lastSigintTime = 0;
|
|
137
|
+
const cleanup = async () => {
|
|
138
|
+
if (cleaningUp)
|
|
139
|
+
return;
|
|
140
|
+
cleaningUp = true;
|
|
141
|
+
process.off('SIGINT', handleSigint);
|
|
142
|
+
process.off('SIGTERM', cleanup);
|
|
143
|
+
console.log('');
|
|
144
|
+
console.log(chalk.yellow('Stopping worker...'));
|
|
145
|
+
try {
|
|
146
|
+
await worker.stop();
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
if (config.debug) {
|
|
150
|
+
console.log(chalk.dim(` Warning: cleanup error: ${err.message}`));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
removeWorkerPid();
|
|
154
|
+
const state = worker.getState();
|
|
155
|
+
console.log('');
|
|
156
|
+
console.log(chalk.bold('Session Summary:'));
|
|
157
|
+
output.tableRow('Completed', String(state.completedCount), 15);
|
|
158
|
+
output.tableRow('Failed', String(state.failedCount), 15);
|
|
159
|
+
output.tableRow('Uptime', output.formatDuration(Date.now() - startTime), 15);
|
|
160
|
+
console.log('');
|
|
161
|
+
process.exit(0);
|
|
162
|
+
};
|
|
163
|
+
const handleSigint = () => {
|
|
164
|
+
const now = Date.now();
|
|
165
|
+
if (now - lastSigintTime < 1000) {
|
|
166
|
+
cleanup();
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
lastSigintTime = now;
|
|
170
|
+
console.log('');
|
|
171
|
+
console.log(chalk.dim(' Press Ctrl+C again to stop the worker'));
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
process.on('SIGINT', handleSigint);
|
|
175
|
+
process.on('SIGTERM', cleanup);
|
|
176
|
+
try {
|
|
177
|
+
await worker.start();
|
|
178
|
+
await new Promise(() => { });
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
console.log(chalk.red('✗') + ` Failed to start worker: ${error.message}`);
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
workerCommand
|
|
186
|
+
.command('status')
|
|
187
|
+
.description('Check worker status')
|
|
188
|
+
.option('--json', 'Output as JSON')
|
|
189
|
+
.action((options) => {
|
|
190
|
+
const pidInfo = readWorkerPid();
|
|
191
|
+
if (!pidInfo) {
|
|
192
|
+
console.log(chalk.dim('No worker is currently running.'));
|
|
193
|
+
console.log(chalk.dim('Use `openpaean worker start` to start a worker.'));
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const running = isWorkerRunning(pidInfo.pid);
|
|
197
|
+
if (!running) {
|
|
198
|
+
removeWorkerPid();
|
|
199
|
+
console.log(chalk.dim('No worker is currently running (stale PID file cleaned up).'));
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (options.json) {
|
|
203
|
+
console.log(JSON.stringify({ ...pidInfo, running }, null, 2));
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
const uptime = output.formatDuration(Date.now() - new Date(pidInfo.startedAt).getTime());
|
|
207
|
+
console.log(chalk.bold.blue('\nWorker Status\n'));
|
|
208
|
+
output.tableRow('Status', chalk.green('Running'), 15);
|
|
209
|
+
output.tableRow('PID', String(pidInfo.pid), 15);
|
|
210
|
+
output.tableRow('Uptime', uptime, 15);
|
|
211
|
+
output.tableRow('Started', new Date(pidInfo.startedAt).toLocaleString(), 15);
|
|
212
|
+
if (pidInfo.workspace) {
|
|
213
|
+
output.tableRow('Workspace', pidInfo.workspace, 15);
|
|
214
|
+
}
|
|
215
|
+
console.log('');
|
|
216
|
+
});
|
|
217
|
+
workerCommand
|
|
218
|
+
.command('prompt')
|
|
219
|
+
.description('Execute a task with a specific executor')
|
|
220
|
+
.argument('[prompt...]', 'Natural language task prompt')
|
|
221
|
+
.option('-p, --prompt <text>', 'Prompt text (alternative to positional)')
|
|
222
|
+
.option('-e, --executor <type>', 'Force specific executor (claude|articulate)')
|
|
223
|
+
.option('--auto-approve', 'Skip confirmation prompts')
|
|
224
|
+
.option('-w, --workspace <path>', 'Working directory')
|
|
225
|
+
.option('-v, --verbose', 'Enable verbose logging')
|
|
226
|
+
.action(async (promptArgs, options) => {
|
|
227
|
+
requireAuth();
|
|
228
|
+
const promptText = options.prompt || promptArgs.join(' ');
|
|
229
|
+
if (!promptText.trim()) {
|
|
230
|
+
output.error('No prompt provided. Usage: openpaean worker prompt "Your task"');
|
|
231
|
+
process.exit(1);
|
|
232
|
+
}
|
|
233
|
+
const debug = options.verbose ?? false;
|
|
234
|
+
const cwd = options.workspace || process.cwd();
|
|
235
|
+
const registry = getExecutorRegistry();
|
|
236
|
+
registry.register(new ArticulateExecutor());
|
|
237
|
+
registry.register(new ClaudeExecutor());
|
|
238
|
+
const executorType = options.executor || 'articulate';
|
|
239
|
+
const available = await registry.getAvailable();
|
|
240
|
+
if (debug) {
|
|
241
|
+
console.log(chalk.dim(`Available executors: ${available.join(', ')}`));
|
|
242
|
+
}
|
|
243
|
+
const finalExecutor = available.includes(executorType) ? executorType : (available[0] || 'articulate');
|
|
244
|
+
if (!available.includes(executorType)) {
|
|
245
|
+
console.log(chalk.yellow('⚠') + ` Executor '${executorType}' not available, using '${finalExecutor}'`);
|
|
246
|
+
}
|
|
247
|
+
console.log(chalk.blue('◉') + ` Executing with ${chalk.bold(finalExecutor)} executor...`);
|
|
248
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
249
|
+
const startTime = Date.now();
|
|
250
|
+
const result = await registry.execute(finalExecutor, promptText, {
|
|
251
|
+
cwd,
|
|
252
|
+
skipPermissions: options.autoApprove,
|
|
253
|
+
timeout: 600000,
|
|
254
|
+
onOutput: (text, stream) => {
|
|
255
|
+
const lines = text.split('\n');
|
|
256
|
+
for (const line of lines) {
|
|
257
|
+
if (line.trim()) {
|
|
258
|
+
const prefix = stream === 'stderr' ? chalk.yellow('│') : chalk.dim('│');
|
|
259
|
+
console.log(prefix + ' ' + output.truncate(line, 70));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
265
|
+
const totalDuration = Date.now() - startTime;
|
|
266
|
+
if (result.success) {
|
|
267
|
+
console.log(chalk.green('✓') + ` Execution completed`);
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
console.log(chalk.red('✗') + ` Execution failed`);
|
|
271
|
+
if (result.error) {
|
|
272
|
+
console.log(chalk.dim(` Error: ${output.truncate(result.error, 60)}`));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
console.log('');
|
|
276
|
+
console.log(chalk.bold('Summary:'));
|
|
277
|
+
output.tableRow('Status', result.success ? 'Success' : 'Failed', 15);
|
|
278
|
+
output.tableRow('Executor', finalExecutor, 15);
|
|
279
|
+
output.tableRow('Duration', output.formatDuration(totalDuration), 15);
|
|
280
|
+
console.log('');
|
|
281
|
+
process.exit(result.success ? 0 : 1);
|
|
282
|
+
});
|
|
283
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/commands/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway Service
|
|
3
|
+
*
|
|
4
|
+
* Runs the OpenPaean CLI as a gateway node that polls for remote messages
|
|
5
|
+
* from web/mobile clients, processes them locally with full MCP tool access,
|
|
6
|
+
* and relays streaming events back through the server.
|
|
7
|
+
*/
|
|
8
|
+
import { EventEmitter } from 'events';
|
|
9
|
+
import { type GatewayRequest } from '../api/gateway-api.js';
|
|
10
|
+
export interface GatewayConfig {
|
|
11
|
+
pollInterval: number;
|
|
12
|
+
eventBatchInterval: number;
|
|
13
|
+
requestTimeout: number;
|
|
14
|
+
debug?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export type GatewayStatus = 'idle' | 'running' | 'stopping';
|
|
17
|
+
export interface GatewayState {
|
|
18
|
+
status: GatewayStatus;
|
|
19
|
+
currentRequest?: GatewayRequest;
|
|
20
|
+
completedCount: number;
|
|
21
|
+
failedCount: number;
|
|
22
|
+
startedAt?: Date;
|
|
23
|
+
lastPollAt?: Date;
|
|
24
|
+
}
|
|
25
|
+
export type GatewayEvent = {
|
|
26
|
+
type: 'started';
|
|
27
|
+
} | {
|
|
28
|
+
type: 'stopped';
|
|
29
|
+
} | {
|
|
30
|
+
type: 'request_claimed';
|
|
31
|
+
request: GatewayRequest;
|
|
32
|
+
} | {
|
|
33
|
+
type: 'request_completed';
|
|
34
|
+
request: GatewayRequest;
|
|
35
|
+
durationMs: number;
|
|
36
|
+
} | {
|
|
37
|
+
type: 'request_failed';
|
|
38
|
+
request: GatewayRequest;
|
|
39
|
+
error: string;
|
|
40
|
+
} | {
|
|
41
|
+
type: 'poll_empty';
|
|
42
|
+
} | {
|
|
43
|
+
type: 'error';
|
|
44
|
+
error: string;
|
|
45
|
+
} | {
|
|
46
|
+
type: 'remote_content';
|
|
47
|
+
text: string;
|
|
48
|
+
partial: boolean;
|
|
49
|
+
} | {
|
|
50
|
+
type: 'remote_tool_call';
|
|
51
|
+
id: string;
|
|
52
|
+
name: string;
|
|
53
|
+
serverName?: string;
|
|
54
|
+
isMcp: boolean;
|
|
55
|
+
} | {
|
|
56
|
+
type: 'remote_tool_result';
|
|
57
|
+
id: string;
|
|
58
|
+
name: string;
|
|
59
|
+
status: 'completed' | 'error';
|
|
60
|
+
} | {
|
|
61
|
+
type: 'remote_done';
|
|
62
|
+
conversationId?: string;
|
|
63
|
+
} | {
|
|
64
|
+
type: 'remote_error';
|
|
65
|
+
error: string;
|
|
66
|
+
};
|
|
67
|
+
export declare class GatewayService extends EventEmitter {
|
|
68
|
+
private config;
|
|
69
|
+
private state;
|
|
70
|
+
private pollTimer;
|
|
71
|
+
private heartbeatTimer;
|
|
72
|
+
private abortController;
|
|
73
|
+
private mcpState;
|
|
74
|
+
private onMcpToolCall;
|
|
75
|
+
private mcpClient;
|
|
76
|
+
private sessionId?;
|
|
77
|
+
private deviceName;
|
|
78
|
+
constructor(config?: Partial<GatewayConfig>);
|
|
79
|
+
getState(): GatewayState;
|
|
80
|
+
isProcessingRemote(): boolean;
|
|
81
|
+
setMcpState(mcpState: unknown, onMcpToolCall: unknown, mcpClient: unknown): void;
|
|
82
|
+
start(): Promise<void>;
|
|
83
|
+
stop(): Promise<void>;
|
|
84
|
+
private startHeartbeat;
|
|
85
|
+
private sendHeartbeatUpdate;
|
|
86
|
+
private startPolling;
|
|
87
|
+
private pollAndProcess;
|
|
88
|
+
private processRequest;
|
|
89
|
+
private finishRequest;
|
|
90
|
+
private log;
|
|
91
|
+
}
|
|
92
|
+
export declare function getGateway(config?: Partial<GatewayConfig>): GatewayService;
|
|
93
|
+
export declare function resetGateway(): void;
|
|
94
|
+
//# sourceMappingURL=service.d.ts.map
|