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.
Files changed (70) hide show
  1. package/dist/api/client.d.ts +13 -3
  2. package/dist/api/client.d.ts.map +1 -1
  3. package/dist/api/client.js +130 -24
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/gateway-api.d.ts +46 -0
  6. package/dist/api/gateway-api.d.ts.map +1 -0
  7. package/dist/api/gateway-api.js +50 -0
  8. package/dist/api/gateway-api.js.map +1 -0
  9. package/dist/api/worker-api.d.ts +94 -0
  10. package/dist/api/worker-api.d.ts.map +1 -0
  11. package/dist/api/worker-api.js +85 -0
  12. package/dist/api/worker-api.js.map +1 -0
  13. package/dist/cli.js +13 -2
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/agent.d.ts +4 -0
  16. package/dist/commands/agent.d.ts.map +1 -1
  17. package/dist/commands/agent.js +57 -5
  18. package/dist/commands/agent.js.map +1 -1
  19. package/dist/commands/gateway.d.ts +8 -0
  20. package/dist/commands/gateway.d.ts.map +1 -0
  21. package/dist/commands/gateway.js +86 -0
  22. package/dist/commands/gateway.js.map +1 -0
  23. package/dist/commands/worker.d.ts +7 -0
  24. package/dist/commands/worker.d.ts.map +1 -0
  25. package/dist/commands/worker.js +283 -0
  26. package/dist/commands/worker.js.map +1 -0
  27. package/dist/gateway/service.d.ts +94 -0
  28. package/dist/gateway/service.d.ts.map +1 -0
  29. package/dist/gateway/service.js +331 -0
  30. package/dist/gateway/service.js.map +1 -0
  31. package/dist/index.d.ts +5 -3
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +7 -3
  34. package/dist/index.js.map +1 -1
  35. package/dist/mcp/client.d.ts.map +1 -1
  36. package/dist/mcp/client.js +12 -1
  37. package/dist/mcp/client.js.map +1 -1
  38. package/dist/utils/config.d.ts +13 -0
  39. package/dist/utils/config.d.ts.map +1 -1
  40. package/dist/utils/config.js +24 -0
  41. package/dist/utils/config.js.map +1 -1
  42. package/dist/utils/output.d.ts +4 -0
  43. package/dist/utils/output.d.ts.map +1 -1
  44. package/dist/utils/output.js +17 -0
  45. package/dist/utils/output.js.map +1 -1
  46. package/dist/worker/executors/articulate.d.ts +19 -0
  47. package/dist/worker/executors/articulate.d.ts.map +1 -0
  48. package/dist/worker/executors/articulate.js +147 -0
  49. package/dist/worker/executors/articulate.js.map +1 -0
  50. package/dist/worker/executors/claude.d.ts +17 -0
  51. package/dist/worker/executors/claude.d.ts.map +1 -0
  52. package/dist/worker/executors/claude.js +102 -0
  53. package/dist/worker/executors/claude.js.map +1 -0
  54. package/dist/worker/executors/index.d.ts +26 -0
  55. package/dist/worker/executors/index.d.ts.map +1 -0
  56. package/dist/worker/executors/index.js +81 -0
  57. package/dist/worker/executors/index.js.map +1 -0
  58. package/dist/worker/index.d.ts +9 -0
  59. package/dist/worker/index.d.ts.map +1 -0
  60. package/dist/worker/index.js +9 -0
  61. package/dist/worker/index.js.map +1 -0
  62. package/dist/worker/service.d.ts +48 -0
  63. package/dist/worker/service.d.ts.map +1 -0
  64. package/dist/worker/service.js +551 -0
  65. package/dist/worker/service.js.map +1 -0
  66. package/dist/worker/types.d.ts +133 -0
  67. package/dist/worker/types.d.ts.map +1 -0
  68. package/dist/worker/types.js +70 -0
  69. package/dist/worker/types.js.map +1 -0
  70. 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,SAmBnB,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;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuJhB"}
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"}
@@ -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, // Changed: fullscreen is opt-in
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":"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"}
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,7 @@
1
+ /**
2
+ * Worker Command
3
+ * CLI commands for the OpenPaean Local Autonomous Worker
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const workerCommand: Command;
7
+ //# sourceMappingURL=worker.d.ts.map
@@ -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