@yu_robotics/remote-cli 1.0.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/LICENSE +21 -0
- package/README.md +94 -0
- package/bin/remote-cli.js +2 -0
- package/dist/client/MessageHandler.d.ts +92 -0
- package/dist/client/MessageHandler.d.ts.map +1 -0
- package/dist/client/MessageHandler.js +496 -0
- package/dist/client/MessageHandler.js.map +1 -0
- package/dist/client/WebSocketClient.d.ts +109 -0
- package/dist/client/WebSocketClient.d.ts.map +1 -0
- package/dist/client/WebSocketClient.js +234 -0
- package/dist/client/WebSocketClient.js.map +1 -0
- package/dist/commands/config.d.ts +35 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +195 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +25 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +112 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/start.d.ts +20 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +108 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +37 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +71 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +23 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +52 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/config/ConfigManager.d.ts +109 -0
- package/dist/config/ConfigManager.d.ts.map +1 -0
- package/dist/config/ConfigManager.js +262 -0
- package/dist/config/ConfigManager.js.map +1 -0
- package/dist/executor/ClaudeExecutor.d.ts +89 -0
- package/dist/executor/ClaudeExecutor.d.ts.map +1 -0
- package/dist/executor/ClaudeExecutor.js +365 -0
- package/dist/executor/ClaudeExecutor.js.map +1 -0
- package/dist/executor/ClaudePersistentExecutor.d.ts +175 -0
- package/dist/executor/ClaudePersistentExecutor.d.ts.map +1 -0
- package/dist/executor/ClaudePersistentExecutor.js +958 -0
- package/dist/executor/ClaudePersistentExecutor.js.map +1 -0
- package/dist/executor/index.d.ts +20 -0
- package/dist/executor/index.d.ts.map +1 -0
- package/dist/executor/index.js +48 -0
- package/dist/executor/index.js.map +1 -0
- package/dist/hooks/ClaudeCodeHooks.d.ts +281 -0
- package/dist/hooks/ClaudeCodeHooks.d.ts.map +1 -0
- package/dist/hooks/ClaudeCodeHooks.js +350 -0
- package/dist/hooks/ClaudeCodeHooks.js.map +1 -0
- package/dist/hooks/FeishuNotificationAdapter.d.ts +87 -0
- package/dist/hooks/FeishuNotificationAdapter.d.ts.map +1 -0
- package/dist/hooks/FeishuNotificationAdapter.js +280 -0
- package/dist/hooks/FeishuNotificationAdapter.js.map +1 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +10 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +333 -0
- package/dist/index.js.map +1 -0
- package/dist/security/DirectoryGuard.d.ts +54 -0
- package/dist/security/DirectoryGuard.d.ts.map +1 -0
- package/dist/security/DirectoryGuard.js +143 -0
- package/dist/security/DirectoryGuard.js.map +1 -0
- package/dist/types/config.d.ts +46 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +22 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +110 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/FeishuMessageFormatter.d.ts +84 -0
- package/dist/utils/FeishuMessageFormatter.d.ts.map +1 -0
- package/dist/utils/FeishuMessageFormatter.js +395 -0
- package/dist/utils/FeishuMessageFormatter.js.map +1 -0
- package/dist/utils/stripAnsi.d.ts +21 -0
- package/dist/utils/stripAnsi.d.ts.map +1 -0
- package/dist/utils/stripAnsi.js +30 -0
- package/dist/utils/stripAnsi.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.startCommand = startCommand;
|
|
7
|
+
const ConfigManager_1 = require("../config/ConfigManager");
|
|
8
|
+
const WebSocketClient_1 = require("../client/WebSocketClient");
|
|
9
|
+
const executor_1 = require("../executor");
|
|
10
|
+
const MessageHandler_1 = require("../client/MessageHandler");
|
|
11
|
+
const DirectoryGuard_1 = require("../security/DirectoryGuard");
|
|
12
|
+
const ora_1 = __importDefault(require("ora"));
|
|
13
|
+
/**
|
|
14
|
+
* Start the remote CLI service
|
|
15
|
+
*/
|
|
16
|
+
async function startCommand(options) {
|
|
17
|
+
const spinner = (0, ora_1.default)('Starting remote CLI service...').start();
|
|
18
|
+
try {
|
|
19
|
+
const config = await ConfigManager_1.ConfigManager.initialize();
|
|
20
|
+
// Check if initialized
|
|
21
|
+
if (!config.has('deviceId')) {
|
|
22
|
+
spinner.fail('Device not initialized');
|
|
23
|
+
return {
|
|
24
|
+
success: false,
|
|
25
|
+
error: 'Device not initialized. Please run "remote-cli init" first.',
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// Get configuration
|
|
29
|
+
const allConfig = config.getAll();
|
|
30
|
+
const { deviceId, serverUrl, security, service } = allConfig;
|
|
31
|
+
// Validate configuration
|
|
32
|
+
if (!deviceId) {
|
|
33
|
+
spinner.fail('Missing deviceId');
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
error: 'Configuration error: deviceId is missing',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
if (!serverUrl) {
|
|
40
|
+
spinner.fail('Missing serverUrl');
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
error: 'Configuration error: serverUrl is missing',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (!security?.allowedDirectories || security.allowedDirectories.length === 0) {
|
|
47
|
+
spinner.fail('Missing allowedDirectories');
|
|
48
|
+
return {
|
|
49
|
+
success: false,
|
|
50
|
+
error: 'Configuration error: allowedDirectories is missing',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// Initialize components
|
|
54
|
+
spinner.text = 'Initializing components...';
|
|
55
|
+
const directoryGuard = new DirectoryGuard_1.DirectoryGuard(security.allowedDirectories);
|
|
56
|
+
const executor = (0, executor_1.createClaudeExecutor)(directoryGuard, 'auto');
|
|
57
|
+
// Create WebSocket URL
|
|
58
|
+
const wsUrl = serverUrl.replace(/^http/, 'ws') + '/ws';
|
|
59
|
+
const wsClient = new WebSocketClient_1.WebSocketClient(wsUrl, deviceId);
|
|
60
|
+
const messageHandler = new MessageHandler_1.MessageHandler(wsClient, executor, directoryGuard);
|
|
61
|
+
// Setup event handlers
|
|
62
|
+
wsClient.on('connected', () => {
|
|
63
|
+
console.log('✅ Connected to server');
|
|
64
|
+
});
|
|
65
|
+
wsClient.on('disconnected', () => {
|
|
66
|
+
console.log('⚠️ Disconnected from server');
|
|
67
|
+
});
|
|
68
|
+
wsClient.on('error', (error) => {
|
|
69
|
+
console.error('❌ WebSocket error:', error);
|
|
70
|
+
});
|
|
71
|
+
wsClient.on('message', async (message) => {
|
|
72
|
+
await messageHandler.handleMessage(message);
|
|
73
|
+
});
|
|
74
|
+
// Connect to server
|
|
75
|
+
spinner.text = 'Connecting to server...';
|
|
76
|
+
try {
|
|
77
|
+
await wsClient.connect();
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
spinner.fail('Connection failed');
|
|
81
|
+
return {
|
|
82
|
+
success: false,
|
|
83
|
+
error: error instanceof Error ? error.message : 'Connection failed',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Save service state
|
|
87
|
+
await config.set('service.running', true);
|
|
88
|
+
await config.set('service.startedAt', Date.now());
|
|
89
|
+
if (options.daemon) {
|
|
90
|
+
await config.set('service.pid', process.pid);
|
|
91
|
+
}
|
|
92
|
+
spinner.succeed(options.daemon
|
|
93
|
+
? 'Remote CLI service started in daemon mode'
|
|
94
|
+
: 'Remote CLI service started');
|
|
95
|
+
return {
|
|
96
|
+
success: true,
|
|
97
|
+
daemonMode: options.daemon,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
spinner.fail('Failed to start service');
|
|
102
|
+
return {
|
|
103
|
+
success: false,
|
|
104
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status command options
|
|
3
|
+
*/
|
|
4
|
+
export interface StatusCommandOptions {
|
|
5
|
+
/** Output as JSON */
|
|
6
|
+
json?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Service status
|
|
10
|
+
*/
|
|
11
|
+
export interface ServiceStatus {
|
|
12
|
+
initialized: boolean;
|
|
13
|
+
deviceId?: string;
|
|
14
|
+
serverUrl?: string;
|
|
15
|
+
openId?: string;
|
|
16
|
+
bound: boolean;
|
|
17
|
+
running: boolean;
|
|
18
|
+
connected: boolean;
|
|
19
|
+
uptime?: number;
|
|
20
|
+
allowedDirectories?: string[];
|
|
21
|
+
startedAt?: number;
|
|
22
|
+
pid?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Status command result
|
|
26
|
+
*/
|
|
27
|
+
export interface StatusCommandResult {
|
|
28
|
+
success: boolean;
|
|
29
|
+
status?: ServiceStatus;
|
|
30
|
+
json?: boolean;
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get service status
|
|
35
|
+
*/
|
|
36
|
+
export declare function statusCommand(options?: StatusCommandOptions): Promise<StatusCommandResult>;
|
|
37
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,qBAAqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAkE9B"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.statusCommand = statusCommand;
|
|
4
|
+
const ConfigManager_1 = require("../config/ConfigManager");
|
|
5
|
+
const WebSocketClient_1 = require("../client/WebSocketClient");
|
|
6
|
+
/**
|
|
7
|
+
* Get service status
|
|
8
|
+
*/
|
|
9
|
+
async function statusCommand(options = {}) {
|
|
10
|
+
try {
|
|
11
|
+
const config = await ConfigManager_1.ConfigManager.initialize();
|
|
12
|
+
// Get all configuration
|
|
13
|
+
const allConfig = config.getAll();
|
|
14
|
+
// Check if initialized
|
|
15
|
+
if (!config.has('deviceId')) {
|
|
16
|
+
return {
|
|
17
|
+
success: true,
|
|
18
|
+
status: {
|
|
19
|
+
initialized: false,
|
|
20
|
+
bound: false,
|
|
21
|
+
running: false,
|
|
22
|
+
connected: false,
|
|
23
|
+
},
|
|
24
|
+
json: options.json,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const { deviceId, serverUrl, openId, security, service } = allConfig;
|
|
28
|
+
// Calculate uptime
|
|
29
|
+
let uptime;
|
|
30
|
+
if (service?.running && service.startedAt) {
|
|
31
|
+
uptime = Date.now() - service.startedAt;
|
|
32
|
+
}
|
|
33
|
+
// Check WebSocket connection (if service is running)
|
|
34
|
+
let connected = false;
|
|
35
|
+
if (service?.running) {
|
|
36
|
+
try {
|
|
37
|
+
const wsUrl = serverUrl?.replace(/^http/, 'ws') + '/ws';
|
|
38
|
+
const wsClient = new WebSocketClient_1.WebSocketClient(wsUrl || '', deviceId || '');
|
|
39
|
+
connected = wsClient.isConnected();
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
connected = false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const status = {
|
|
46
|
+
initialized: true,
|
|
47
|
+
deviceId,
|
|
48
|
+
serverUrl,
|
|
49
|
+
openId,
|
|
50
|
+
bound: Boolean(openId),
|
|
51
|
+
running: Boolean(service?.running),
|
|
52
|
+
connected,
|
|
53
|
+
uptime,
|
|
54
|
+
allowedDirectories: security?.allowedDirectories,
|
|
55
|
+
startedAt: service?.startedAt,
|
|
56
|
+
pid: service?.pid,
|
|
57
|
+
};
|
|
58
|
+
return {
|
|
59
|
+
success: true,
|
|
60
|
+
status,
|
|
61
|
+
json: options.json,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":";;AAyCA,sCAoEC;AA7GD,2DAAwD;AACxD,+DAA4D;AAqC5D;;GAEG;AACI,KAAK,UAAU,aAAa,CACjC,UAAgC,EAAE;IAElC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,6BAAa,CAAC,UAAU,EAAE,CAAC;QAEhD,wBAAwB;QACxB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAElC,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE;oBACN,WAAW,EAAE,KAAK;oBAClB,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,KAAK;iBACjB;gBACD,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;QAErE,mBAAmB;QACnB,IAAI,MAA0B,CAAC;QAC/B,IAAI,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;QAC1C,CAAC;QAED,qDAAqD;QACrD,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;gBACxD,MAAM,QAAQ,GAAG,IAAI,iCAAe,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;gBAClE,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAkB;YAC5B,WAAW,EAAE,IAAI;YACjB,QAAQ;YACR,SAAS;YACT,MAAM;YACN,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;YAClC,SAAS;YACT,MAAM;YACN,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB;YAChD,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,GAAG,EAAE,OAAO,EAAE,GAAG;SAClB,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM;YACN,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stop command options
|
|
3
|
+
*/
|
|
4
|
+
export interface StopCommandOptions {
|
|
5
|
+
/** Graceful shutdown */
|
|
6
|
+
graceful?: boolean;
|
|
7
|
+
/** Force stop */
|
|
8
|
+
force?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Stop command result
|
|
12
|
+
*/
|
|
13
|
+
export interface StopCommandResult {
|
|
14
|
+
success: boolean;
|
|
15
|
+
graceful?: boolean;
|
|
16
|
+
force?: boolean;
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Stop the remote CLI service
|
|
21
|
+
*/
|
|
22
|
+
export declare function stopCommand(options?: StopCommandOptions): Promise<StopCommandResult>;
|
|
23
|
+
//# sourceMappingURL=stop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CA6C5B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.stopCommand = stopCommand;
|
|
7
|
+
const ConfigManager_1 = require("../config/ConfigManager");
|
|
8
|
+
const ora_1 = __importDefault(require("ora"));
|
|
9
|
+
/**
|
|
10
|
+
* Stop the remote CLI service
|
|
11
|
+
*/
|
|
12
|
+
async function stopCommand(options = {}) {
|
|
13
|
+
const spinner = (0, ora_1.default)('Stopping remote CLI service...').start();
|
|
14
|
+
try {
|
|
15
|
+
const config = await ConfigManager_1.ConfigManager.initialize();
|
|
16
|
+
// Get service state
|
|
17
|
+
const allConfig = config.getAll();
|
|
18
|
+
const service = allConfig.service;
|
|
19
|
+
// Check if service is running
|
|
20
|
+
if (!service || !service.running) {
|
|
21
|
+
spinner.fail('Service not running');
|
|
22
|
+
return {
|
|
23
|
+
success: false,
|
|
24
|
+
error: 'Service is not running',
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// Handle graceful shutdown
|
|
28
|
+
if (options.graceful) {
|
|
29
|
+
spinner.text = 'Waiting for pending tasks to complete...';
|
|
30
|
+
// In a real implementation, we would wait for tasks to finish
|
|
31
|
+
// For now, just simulate a delay
|
|
32
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
33
|
+
}
|
|
34
|
+
// Update service state
|
|
35
|
+
await config.set('service.running', false);
|
|
36
|
+
await config.set('service.stoppedAt', Date.now());
|
|
37
|
+
spinner.succeed('Remote CLI service stopped');
|
|
38
|
+
return {
|
|
39
|
+
success: true,
|
|
40
|
+
graceful: options.graceful,
|
|
41
|
+
force: options.force,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
spinner.fail('Failed to stop service');
|
|
46
|
+
return {
|
|
47
|
+
success: false,
|
|
48
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":";;;;;AA0BA,kCA+CC;AAzED,2DAAwD;AACxD,8CAAsB;AAsBtB;;GAEG;AACI,KAAK,UAAU,WAAW,CAC/B,UAA8B,EAAE;IAEhC,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;IAE9D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,6BAAa,CAAC,UAAU,EAAE,CAAC;QAEhD,oBAAoB;QACpB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAElC,8BAA8B;QAC9B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACpC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,wBAAwB;aAChC,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,GAAG,0CAA0C,CAAC;YAC1D,8DAA8D;YAC9D,iCAAiC;YACjC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,uBAAuB;QACvB,MAAM,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAElD,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAE9C,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Config } from '../types/config';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration Manager
|
|
4
|
+
* Responsible for reading, writing and managing configuration files
|
|
5
|
+
*/
|
|
6
|
+
export declare class ConfigManager {
|
|
7
|
+
private config;
|
|
8
|
+
private configDir;
|
|
9
|
+
private configFile;
|
|
10
|
+
private constructor();
|
|
11
|
+
/**
|
|
12
|
+
* Initialize configuration manager
|
|
13
|
+
* @returns ConfigManager instance
|
|
14
|
+
*/
|
|
15
|
+
static initialize(): Promise<ConfigManager>;
|
|
16
|
+
/**
|
|
17
|
+
* Validate configuration structure
|
|
18
|
+
* @param config Configuration object
|
|
19
|
+
* @returns Whether it is valid
|
|
20
|
+
*/
|
|
21
|
+
private static isValidConfig;
|
|
22
|
+
/**
|
|
23
|
+
* Get current configuration
|
|
24
|
+
* @returns Configuration object (deep copy)
|
|
25
|
+
*/
|
|
26
|
+
getConfig(): Config;
|
|
27
|
+
/**
|
|
28
|
+
* Get configuration directory path
|
|
29
|
+
* @returns Configuration directory path
|
|
30
|
+
*/
|
|
31
|
+
getConfigDir(): string;
|
|
32
|
+
/**
|
|
33
|
+
* Get configuration file path
|
|
34
|
+
* @returns Configuration file path
|
|
35
|
+
*/
|
|
36
|
+
getConfigFile(): string;
|
|
37
|
+
/**
|
|
38
|
+
* Save configuration to file
|
|
39
|
+
*/
|
|
40
|
+
private saveConfig;
|
|
41
|
+
/**
|
|
42
|
+
* Add allowed directory
|
|
43
|
+
* @param directory Directory path (supports ~ and relative paths)
|
|
44
|
+
*/
|
|
45
|
+
addAllowedDirectory(directory: string): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Remove allowed directory
|
|
48
|
+
* @param directory Directory path
|
|
49
|
+
*/
|
|
50
|
+
removeAllowedDirectory(directory: string): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Add denied command
|
|
53
|
+
* @param command Command pattern
|
|
54
|
+
*/
|
|
55
|
+
addDeniedCommand(command: string): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Remove denied command
|
|
58
|
+
* @param command Command pattern
|
|
59
|
+
*/
|
|
60
|
+
removeDeniedCommand(command: string): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Update server URL
|
|
63
|
+
* @param url WebSocket server URL
|
|
64
|
+
*/
|
|
65
|
+
updateServerUrl(url: string): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Update maximum concurrent tasks
|
|
68
|
+
* @param max Maximum concurrent tasks
|
|
69
|
+
*/
|
|
70
|
+
updateMaxConcurrentTasks(max: number): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Reset configuration to defaults
|
|
73
|
+
*/
|
|
74
|
+
resetToDefaults(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Export configuration as JSON string
|
|
77
|
+
* @returns JSON string
|
|
78
|
+
*/
|
|
79
|
+
exportConfig(): string;
|
|
80
|
+
/**
|
|
81
|
+
* Import configuration from JSON string
|
|
82
|
+
* @param json JSON string
|
|
83
|
+
*/
|
|
84
|
+
importConfig(json: string): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Check if configuration key exists
|
|
87
|
+
* @param keyPath Key path (supports dot-separated nested paths)
|
|
88
|
+
* @returns Whether it exists
|
|
89
|
+
*/
|
|
90
|
+
has(keyPath: string): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Get configuration value
|
|
93
|
+
* @param keyPath Key path (supports dot-separated nested paths, e.g. 'security.allowedDirectories')
|
|
94
|
+
* @returns Configuration value
|
|
95
|
+
*/
|
|
96
|
+
get(keyPath: string): any;
|
|
97
|
+
/**
|
|
98
|
+
* Set configuration value
|
|
99
|
+
* @param keyPath Key path (supports dot-separated nested paths)
|
|
100
|
+
* @param value Configuration value
|
|
101
|
+
*/
|
|
102
|
+
set(keyPath: string, value: any): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Get all configuration (alias for getConfig)
|
|
105
|
+
* @returns Configuration object (deep copy)
|
|
106
|
+
*/
|
|
107
|
+
getAll(): Config;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=ConfigManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAkB,MAAM,iBAAiB,CAAC;AAEzD;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO;IAMP;;;OAGG;WACU,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IA8BjD;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAiB5B;;;OAGG;IACH,SAAS,IAAI,MAAM;IAInB;;;OAGG;IACH,YAAY,IAAI,MAAM;IAItB;;;OAGG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;YACW,UAAU;IAIxB;;;OAGG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3D;;;OAGG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9D;;;OAGG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtD;;;OAGG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD;;;OAGG;IACG,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjD;;;OAGG;IACG,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1D;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC;;;OAGG;IACH,YAAY,IAAI,MAAM;IAItB;;;OAGG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB/C;;;;OAIG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7B;;;;OAIG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG;IAczB;;;;OAIG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBrD;;;OAGG;IACH,MAAM,IAAI,MAAM;CAGjB"}
|