openpaean 0.4.1 → 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/README.md +16 -1
- 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 +15 -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/update.d.ts +7 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +92 -0
- package/dist/commands/update.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
package/dist/cli.js
CHANGED
|
@@ -14,6 +14,9 @@ import { contextCommand } from './commands/context.js';
|
|
|
14
14
|
import { serveCommand } from './commands/serve.js';
|
|
15
15
|
import { validateCommand } from './commands/validate.js';
|
|
16
16
|
import { agentCommand, runAgentMode } from './commands/agent.js';
|
|
17
|
+
import { updateCommand } from './commands/update.js';
|
|
18
|
+
import { workerCommand } from './commands/worker.js';
|
|
19
|
+
import { gatewayCommand } from './commands/gateway.js';
|
|
17
20
|
import { getConfigPath } from './utils/config.js';
|
|
18
21
|
// Read version from package.json
|
|
19
22
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -22,24 +25,31 @@ const packageJson = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'
|
|
|
22
25
|
const program = new Command();
|
|
23
26
|
program
|
|
24
27
|
.name('openpaean')
|
|
25
|
-
.description('OpenPaean - Open source AI agent with scrolling TUI
|
|
28
|
+
.description('OpenPaean - Open source AI agent with scrolling TUI, MCP integration, gateway and worker modes')
|
|
26
29
|
.version(packageJson.version)
|
|
27
30
|
.option('--config', 'Show config file path')
|
|
28
31
|
.option('--no-mcp', 'Disable local MCP server integration')
|
|
29
32
|
.option('--fullscreen', 'Enable fullscreen mode (default: scrolling mode)')
|
|
30
33
|
.option('-d, --debug', 'Enable debug logging')
|
|
31
34
|
.option('-m, --message <message>', 'Send a single message to agent')
|
|
35
|
+
.option('--gateway', 'Enable gateway relay for remote clients')
|
|
36
|
+
.option('--worker', 'Enable background worker for task processing')
|
|
37
|
+
.option('--gateway-interval <ms>', 'Gateway poll interval in milliseconds', '3000')
|
|
38
|
+
.option('--worker-interval <ms>', 'Worker poll interval in milliseconds', '30000')
|
|
32
39
|
.action(async (options) => {
|
|
33
40
|
if (options.config) {
|
|
34
41
|
console.log(getConfigPath());
|
|
35
42
|
return;
|
|
36
43
|
}
|
|
37
|
-
// Default action: start agent mode
|
|
38
44
|
await runAgentMode({
|
|
39
45
|
mcp: options.mcp !== false,
|
|
40
46
|
fullscreen: options.fullscreen === true,
|
|
41
47
|
debug: options.debug,
|
|
42
48
|
message: options.message,
|
|
49
|
+
gatewayEnabled: options.gateway ?? false,
|
|
50
|
+
gatewayPollInterval: parseInt(options.gatewayInterval, 10) || 3000,
|
|
51
|
+
workerEnabled: options.worker ?? false,
|
|
52
|
+
workerPollInterval: parseInt(options.workerInterval, 10) || 30000,
|
|
43
53
|
});
|
|
44
54
|
});
|
|
45
55
|
// Register commands
|
|
@@ -50,6 +60,9 @@ program.addCommand(tasksCommand);
|
|
|
50
60
|
program.addCommand(contextCommand);
|
|
51
61
|
program.addCommand(serveCommand);
|
|
52
62
|
program.addCommand(validateCommand);
|
|
63
|
+
program.addCommand(workerCommand);
|
|
64
|
+
program.addCommand(gatewayCommand);
|
|
65
|
+
program.addCommand(updateCommand);
|
|
53
66
|
// Parse arguments
|
|
54
67
|
program.parse();
|
|
55
68
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,iCAAiC;AACjC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAE7F,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/agent.d.ts
CHANGED
|
@@ -12,5 +12,9 @@ export declare function runAgentMode(options: {
|
|
|
12
12
|
fullscreen?: boolean;
|
|
13
13
|
debug?: boolean;
|
|
14
14
|
message?: string;
|
|
15
|
+
gatewayEnabled?: boolean;
|
|
16
|
+
gatewayPollInterval?: number;
|
|
17
|
+
workerEnabled?: boolean;
|
|
18
|
+
workerPollInterval?: number;
|
|
15
19
|
}): Promise<void>;
|
|
16
20
|
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -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":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwDpC,eAAO,MAAM,aAAa,SAwCtB,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update Command
|
|
3
|
+
* Self-update the OpenPaean CLI to the latest version via the detected package manager
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { execSync } from 'child_process';
|
|
7
|
+
import { readFileSync } from 'fs';
|
|
8
|
+
import { fileURLToPath } from 'url';
|
|
9
|
+
import { dirname, join } from 'path';
|
|
10
|
+
import * as output from '../utils/output.js';
|
|
11
|
+
const NPM_REGISTRY_URL = 'https://registry.npmjs.org/openpaean/latest';
|
|
12
|
+
const PACKAGE_NAME = 'openpaean';
|
|
13
|
+
function getCurrentVersion() {
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = dirname(__filename);
|
|
16
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, '..', '..', 'package.json'), 'utf-8'));
|
|
17
|
+
return pkg.version;
|
|
18
|
+
}
|
|
19
|
+
async function getLatestVersion() {
|
|
20
|
+
const res = await fetch(NPM_REGISTRY_URL);
|
|
21
|
+
if (!res.ok) {
|
|
22
|
+
throw new Error(`Failed to fetch latest version: ${res.statusText}`);
|
|
23
|
+
}
|
|
24
|
+
const data = await res.json();
|
|
25
|
+
return data.version;
|
|
26
|
+
}
|
|
27
|
+
function detectPackageManager() {
|
|
28
|
+
const managers = [
|
|
29
|
+
{ name: 'bun', command: `bun add -g ${PACKAGE_NAME}@latest` },
|
|
30
|
+
{ name: 'pnpm', command: `pnpm add -g ${PACKAGE_NAME}@latest` },
|
|
31
|
+
{ name: 'yarn', command: `yarn global add ${PACKAGE_NAME}@latest` },
|
|
32
|
+
{ name: 'npm', command: `npm install -g ${PACKAGE_NAME}@latest` },
|
|
33
|
+
];
|
|
34
|
+
for (const pm of managers) {
|
|
35
|
+
try {
|
|
36
|
+
execSync(`command -v ${pm.name}`, { stdio: 'ignore' });
|
|
37
|
+
return pm;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// not found, try next
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return managers[managers.length - 1]; // fallback to npm
|
|
44
|
+
}
|
|
45
|
+
function compareVersions(current, latest) {
|
|
46
|
+
const a = current.split('.').map(Number);
|
|
47
|
+
const b = latest.split('.').map(Number);
|
|
48
|
+
for (let i = 0; i < 3; i++) {
|
|
49
|
+
if ((a[i] ?? 0) < (b[i] ?? 0))
|
|
50
|
+
return -1;
|
|
51
|
+
if ((a[i] ?? 0) > (b[i] ?? 0))
|
|
52
|
+
return 1;
|
|
53
|
+
}
|
|
54
|
+
return 0;
|
|
55
|
+
}
|
|
56
|
+
export const updateCommand = new Command('update')
|
|
57
|
+
.description('Update OpenPaean CLI to the latest version')
|
|
58
|
+
.option('--check', 'Check for updates without installing')
|
|
59
|
+
.action(async (options) => {
|
|
60
|
+
const currentVersion = getCurrentVersion();
|
|
61
|
+
output.info(`Current version: ${currentVersion}`);
|
|
62
|
+
let latestVersion;
|
|
63
|
+
try {
|
|
64
|
+
latestVersion = await getLatestVersion();
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
output.error(`Failed to check for updates: ${err instanceof Error ? err.message : err}`);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
const cmp = compareVersions(currentVersion, latestVersion);
|
|
71
|
+
if (cmp >= 0) {
|
|
72
|
+
output.success(`Already up to date (v${currentVersion})`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
output.info(`New version available: ${currentVersion} → ${latestVersion}`);
|
|
76
|
+
if (options.check) {
|
|
77
|
+
output.dim(`Run "openpaean update" to install the latest version.`);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const pm = detectPackageManager();
|
|
81
|
+
output.info(`Updating via ${pm.name}...`);
|
|
82
|
+
try {
|
|
83
|
+
execSync(pm.command, { stdio: 'inherit' });
|
|
84
|
+
output.success(`Successfully updated to v${latestVersion}`);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
output.error(`Update failed. You can try manually:`);
|
|
88
|
+
output.dim(` ${pm.command}`);
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.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"}
|