@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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directory Security Guard
|
|
3
|
+
* Responsible for validating path safety and preventing path traversal attacks
|
|
4
|
+
*/
|
|
5
|
+
export declare class DirectoryGuard {
|
|
6
|
+
private allowedDirs;
|
|
7
|
+
private homeDir;
|
|
8
|
+
constructor(allowedDirectories: string[]);
|
|
9
|
+
/**
|
|
10
|
+
* Normalize path
|
|
11
|
+
* @param targetPath Target path (supports ~, relative paths, absolute paths)
|
|
12
|
+
* @param cwd Current working directory (for resolving relative paths)
|
|
13
|
+
* @returns Normalized absolute path
|
|
14
|
+
*/
|
|
15
|
+
normalizePath(targetPath: string, cwd?: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Check if path is safe
|
|
18
|
+
* @param targetPath Target path
|
|
19
|
+
* @param cwd Current working directory
|
|
20
|
+
* @returns Whether it is safe
|
|
21
|
+
*/
|
|
22
|
+
isSafePath(targetPath: string, cwd?: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Resolve working directory
|
|
25
|
+
* @param targetPath Target path
|
|
26
|
+
* @param cwd Current working directory
|
|
27
|
+
* @returns Normalized working directory
|
|
28
|
+
* @throws If path is not safe
|
|
29
|
+
*/
|
|
30
|
+
resolveWorkingDirectory(targetPath: string, cwd?: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Check if all paths are safe
|
|
33
|
+
* @param paths Path list
|
|
34
|
+
* @param cwd Current working directory
|
|
35
|
+
* @returns Whether all are safe
|
|
36
|
+
*/
|
|
37
|
+
areAllPathsSafe(paths: string[], cwd?: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Get allowed directories list
|
|
40
|
+
* @returns Allowed directories list
|
|
41
|
+
*/
|
|
42
|
+
getAllowedDirectories(): string[];
|
|
43
|
+
/**
|
|
44
|
+
* Add allowed directory
|
|
45
|
+
* @param directory Directory path
|
|
46
|
+
*/
|
|
47
|
+
addAllowedDirectory(directory: string): void;
|
|
48
|
+
/**
|
|
49
|
+
* Remove allowed directory
|
|
50
|
+
* @param directory Directory path
|
|
51
|
+
*/
|
|
52
|
+
removeAllowedDirectory(directory: string): void;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=DirectoryGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DirectoryGuard.d.ts","sourceRoot":"","sources":["../../src/security/DirectoryGuard.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAS;gBAEZ,kBAAkB,EAAE,MAAM,EAAE;IAKxC;;;;;OAKG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM;IAkCvD;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAqCrD;;;;;;OAMG;IACH,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM;IAUjE;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAQvD;;;OAGG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;;OAGG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAM5C;;;OAGG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGhD"}
|
|
@@ -0,0 +1,143 @@
|
|
|
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.DirectoryGuard = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const os_1 = __importDefault(require("os"));
|
|
9
|
+
/**
|
|
10
|
+
* Directory Security Guard
|
|
11
|
+
* Responsible for validating path safety and preventing path traversal attacks
|
|
12
|
+
*/
|
|
13
|
+
class DirectoryGuard {
|
|
14
|
+
allowedDirs;
|
|
15
|
+
homeDir;
|
|
16
|
+
constructor(allowedDirectories) {
|
|
17
|
+
this.allowedDirs = new Set(allowedDirectories);
|
|
18
|
+
this.homeDir = os_1.default.homedir();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Normalize path
|
|
22
|
+
* @param targetPath Target path (supports ~, relative paths, absolute paths)
|
|
23
|
+
* @param cwd Current working directory (for resolving relative paths)
|
|
24
|
+
* @returns Normalized absolute path
|
|
25
|
+
*/
|
|
26
|
+
normalizePath(targetPath, cwd) {
|
|
27
|
+
if (!targetPath || targetPath.trim() === '') {
|
|
28
|
+
throw new Error('Path cannot be empty');
|
|
29
|
+
}
|
|
30
|
+
let normalized;
|
|
31
|
+
// Handle paths starting with ~
|
|
32
|
+
if (targetPath.startsWith('~/')) {
|
|
33
|
+
normalized = path_1.default.join(this.homeDir, targetPath.slice(2));
|
|
34
|
+
}
|
|
35
|
+
// Handle relative paths
|
|
36
|
+
else if (targetPath.startsWith('./') || targetPath.startsWith('../')) {
|
|
37
|
+
const basePath = cwd || process.cwd();
|
|
38
|
+
normalized = path_1.default.resolve(basePath, targetPath);
|
|
39
|
+
}
|
|
40
|
+
// Handle absolute paths
|
|
41
|
+
else if (path_1.default.isAbsolute(targetPath)) {
|
|
42
|
+
normalized = path_1.default.resolve(targetPath);
|
|
43
|
+
}
|
|
44
|
+
// Treat other cases as relative paths
|
|
45
|
+
else {
|
|
46
|
+
const basePath = cwd || process.cwd();
|
|
47
|
+
normalized = path_1.default.resolve(basePath, targetPath);
|
|
48
|
+
}
|
|
49
|
+
// Remove trailing slash
|
|
50
|
+
if (normalized.endsWith(path_1.default.sep) && normalized !== path_1.default.sep) {
|
|
51
|
+
normalized = normalized.slice(0, -1);
|
|
52
|
+
}
|
|
53
|
+
return normalized;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Check if path is safe
|
|
57
|
+
* @param targetPath Target path
|
|
58
|
+
* @param cwd Current working directory
|
|
59
|
+
* @returns Whether it is safe
|
|
60
|
+
*/
|
|
61
|
+
isSafePath(targetPath, cwd) {
|
|
62
|
+
try {
|
|
63
|
+
const normalized = this.normalizePath(targetPath, cwd);
|
|
64
|
+
// Check if it's a system directory
|
|
65
|
+
const systemDirs = ['/etc', '/var', '/usr', '/bin', '/sbin', '/System', '/Library', '/boot', '/dev', '/proc', '/sys'];
|
|
66
|
+
if (systemDirs.some(sysDir => normalized === sysDir || normalized.startsWith(sysDir + path_1.default.sep))) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
// Check if outside user home directory (for absolute paths)
|
|
70
|
+
if (path_1.default.isAbsolute(targetPath) && !targetPath.startsWith('~/')) {
|
|
71
|
+
if (!normalized.startsWith(this.homeDir)) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Check if in allowed directories list
|
|
76
|
+
if (this.allowedDirs.size === 0) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
for (const allowedDir of this.allowedDirs) {
|
|
80
|
+
const normalizedAllowedDir = this.normalizePath(allowedDir, cwd);
|
|
81
|
+
// Check if it's the allowed directory itself or its subdirectory
|
|
82
|
+
if (normalized === normalizedAllowedDir || normalized.startsWith(normalizedAllowedDir + path_1.default.sep)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Resolve working directory
|
|
94
|
+
* @param targetPath Target path
|
|
95
|
+
* @param cwd Current working directory
|
|
96
|
+
* @returns Normalized working directory
|
|
97
|
+
* @throws If path is not safe
|
|
98
|
+
*/
|
|
99
|
+
resolveWorkingDirectory(targetPath, cwd) {
|
|
100
|
+
const normalized = this.normalizePath(targetPath, cwd);
|
|
101
|
+
if (!this.isSafePath(targetPath, cwd)) {
|
|
102
|
+
throw new Error(`Path ${normalized} is not allowed. Please add it to the allowed directories list.`);
|
|
103
|
+
}
|
|
104
|
+
return normalized;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if all paths are safe
|
|
108
|
+
* @param paths Path list
|
|
109
|
+
* @param cwd Current working directory
|
|
110
|
+
* @returns Whether all are safe
|
|
111
|
+
*/
|
|
112
|
+
areAllPathsSafe(paths, cwd) {
|
|
113
|
+
if (paths.length === 0) {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
return paths.every(p => this.isSafePath(p, cwd));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get allowed directories list
|
|
120
|
+
* @returns Allowed directories list
|
|
121
|
+
*/
|
|
122
|
+
getAllowedDirectories() {
|
|
123
|
+
return Array.from(this.allowedDirs);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Add allowed directory
|
|
127
|
+
* @param directory Directory path
|
|
128
|
+
*/
|
|
129
|
+
addAllowedDirectory(directory) {
|
|
130
|
+
if (!this.allowedDirs.has(directory)) {
|
|
131
|
+
this.allowedDirs.add(directory);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Remove allowed directory
|
|
136
|
+
* @param directory Directory path
|
|
137
|
+
*/
|
|
138
|
+
removeAllowedDirectory(directory) {
|
|
139
|
+
this.allowedDirs.delete(directory);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.DirectoryGuard = DirectoryGuard;
|
|
143
|
+
//# sourceMappingURL=DirectoryGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DirectoryGuard.js","sourceRoot":"","sources":["../../src/security/DirectoryGuard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration type definitions
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Security configuration
|
|
6
|
+
*/
|
|
7
|
+
export interface SecurityConfig {
|
|
8
|
+
/** Allowed directory list (supports ~ and relative paths) */
|
|
9
|
+
allowedDirectories: string[];
|
|
10
|
+
/** Denied command patterns */
|
|
11
|
+
deniedCommands: string[];
|
|
12
|
+
/** Maximum concurrent tasks */
|
|
13
|
+
maxConcurrentTasks: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Server configuration
|
|
17
|
+
*/
|
|
18
|
+
export interface ServerConfig {
|
|
19
|
+
/** WebSocket server URL */
|
|
20
|
+
url: string;
|
|
21
|
+
/** Reconnect interval (milliseconds) */
|
|
22
|
+
reconnectInterval: number;
|
|
23
|
+
/** Heartbeat interval (milliseconds) */
|
|
24
|
+
heartbeatInterval: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Complete configuration
|
|
28
|
+
*/
|
|
29
|
+
export interface Config {
|
|
30
|
+
deviceId?: string;
|
|
31
|
+
openId?: string;
|
|
32
|
+
serverUrl?: string;
|
|
33
|
+
security: SecurityConfig;
|
|
34
|
+
server: ServerConfig;
|
|
35
|
+
service?: {
|
|
36
|
+
running?: boolean;
|
|
37
|
+
startedAt?: number;
|
|
38
|
+
stoppedAt?: number;
|
|
39
|
+
pid?: number;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Default configuration
|
|
44
|
+
*/
|
|
45
|
+
export declare const DEFAULT_CONFIG: Config;
|
|
46
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,8BAA8B;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,+BAA+B;IAC/B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAW5B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration type definitions
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEFAULT_CONFIG = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Default configuration
|
|
9
|
+
*/
|
|
10
|
+
exports.DEFAULT_CONFIG = {
|
|
11
|
+
security: {
|
|
12
|
+
allowedDirectories: [],
|
|
13
|
+
deniedCommands: [],
|
|
14
|
+
maxConcurrentTasks: 1
|
|
15
|
+
},
|
|
16
|
+
server: {
|
|
17
|
+
url: 'wss://localhost:3000',
|
|
18
|
+
reconnectInterval: 5000,
|
|
19
|
+
heartbeatInterval: 30000
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA2CH;;GAEG;AACU,QAAA,cAAc,GAAW;IACpC,QAAQ,EAAE;QACR,kBAAkB,EAAE,EAAE;QACtB,cAAc,EAAE,EAAE;QAClB,kBAAkB,EAAE,CAAC;KACtB;IACD,MAAM,EAAE;QACN,GAAG,EAAE,sBAAsB;QAC3B,iBAAiB,EAAE,IAAI;QACvB,iBAAiB,EAAE,KAAK;KACzB;CACF,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool use information for structured messages
|
|
3
|
+
*/
|
|
4
|
+
export interface ToolUseInfo {
|
|
5
|
+
name: string;
|
|
6
|
+
id: string;
|
|
7
|
+
input: Record<string, any>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Tool result information for structured messages
|
|
11
|
+
*/
|
|
12
|
+
export interface ToolResultInfo {
|
|
13
|
+
tool_use_id: string;
|
|
14
|
+
content: string;
|
|
15
|
+
is_error: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Content block types for structured streaming messages
|
|
19
|
+
*/
|
|
20
|
+
export type ContentBlockType = 'text' | 'tool_use' | 'tool_result' | 'divider';
|
|
21
|
+
/**
|
|
22
|
+
* Base content block interface
|
|
23
|
+
*/
|
|
24
|
+
export interface ContentBlock {
|
|
25
|
+
type: ContentBlockType;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Text content block
|
|
29
|
+
*/
|
|
30
|
+
export interface TextBlock extends ContentBlock {
|
|
31
|
+
type: 'text';
|
|
32
|
+
content: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Tool use content block
|
|
36
|
+
*/
|
|
37
|
+
export interface ToolUseBlock extends ContentBlock {
|
|
38
|
+
type: 'tool_use';
|
|
39
|
+
tool: ToolUseInfo;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Tool result content block
|
|
43
|
+
*/
|
|
44
|
+
export interface ToolResultBlock extends ContentBlock {
|
|
45
|
+
type: 'tool_result';
|
|
46
|
+
result: ToolResultInfo;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Divider content block (for visual separation)
|
|
50
|
+
*/
|
|
51
|
+
export interface DividerBlock extends ContentBlock {
|
|
52
|
+
type: 'divider';
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Union type for all content blocks
|
|
56
|
+
*/
|
|
57
|
+
export type ContentBlockUnion = TextBlock | ToolUseBlock | ToolResultBlock | DividerBlock;
|
|
58
|
+
/**
|
|
59
|
+
* Structured content for rich message formatting
|
|
60
|
+
*/
|
|
61
|
+
export interface StructuredContent {
|
|
62
|
+
/** Array of content blocks */
|
|
63
|
+
blocks: ContentBlockUnion[];
|
|
64
|
+
/** Optional session abbreviation for completion tracking */
|
|
65
|
+
sessionAbbr?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Incoming message from router server
|
|
69
|
+
*/
|
|
70
|
+
export interface IncomingMessage {
|
|
71
|
+
type: 'command' | 'status' | 'ping';
|
|
72
|
+
messageId: string;
|
|
73
|
+
content?: string;
|
|
74
|
+
workingDirectory?: string;
|
|
75
|
+
openId?: string;
|
|
76
|
+
timestamp: number;
|
|
77
|
+
/** Whether this is a passthrough slash command */
|
|
78
|
+
isSlashCommand?: boolean;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Stream message types
|
|
82
|
+
*/
|
|
83
|
+
export type StreamType = 'text' | 'tool_use' | 'tool_result';
|
|
84
|
+
/**
|
|
85
|
+
* Outgoing message to router server
|
|
86
|
+
*/
|
|
87
|
+
export interface OutgoingMessage {
|
|
88
|
+
type: 'result' | 'progress' | 'status' | 'pong' | 'structured' | 'stream';
|
|
89
|
+
messageId: string;
|
|
90
|
+
success?: boolean;
|
|
91
|
+
/** Plain text output (for backward compatibility) */
|
|
92
|
+
output?: string;
|
|
93
|
+
/** Structured content for rich formatting (new format) */
|
|
94
|
+
structuredContent?: StructuredContent;
|
|
95
|
+
error?: string;
|
|
96
|
+
message?: string;
|
|
97
|
+
status?: any;
|
|
98
|
+
timestamp: number;
|
|
99
|
+
workingDirectory?: string;
|
|
100
|
+
openId?: string;
|
|
101
|
+
/** Stream chunk (for streaming messages) */
|
|
102
|
+
chunk?: string;
|
|
103
|
+
/** Stream type (for typed streaming) */
|
|
104
|
+
streamType?: StreamType;
|
|
105
|
+
/** Tool use info (when streamType === 'tool_use') */
|
|
106
|
+
toolUse?: ToolUseInfo;
|
|
107
|
+
/** Tool result info (when streamType === 'tool_result') */
|
|
108
|
+
toolResult?: ToolResultInfo;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,IAAI,EAAE,SAAS,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,YAAY,GAAG,eAAe,GAAG,YAAY,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,qDAAqD;IACrD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feishu Message Formatter
|
|
3
|
+
* Formats tool use and tool result messages into beautiful Feishu interactive cards
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Tool use information
|
|
7
|
+
*/
|
|
8
|
+
export interface ToolUseInfo {
|
|
9
|
+
name: string;
|
|
10
|
+
id: string;
|
|
11
|
+
input: Record<string, any>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Tool result information
|
|
15
|
+
*/
|
|
16
|
+
export interface ToolResultInfo {
|
|
17
|
+
id: string;
|
|
18
|
+
content: string;
|
|
19
|
+
isError: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Format tool use message as a compact indicator
|
|
23
|
+
* Intelligently extracts key information based on tool type
|
|
24
|
+
* @param toolUse Tool use information
|
|
25
|
+
* @returns Formatted compact message string
|
|
26
|
+
*/
|
|
27
|
+
export declare function formatToolUseMessage(toolUse: ToolUseInfo): string;
|
|
28
|
+
/**
|
|
29
|
+
* Format tool result message as a status indicator with visual indentation
|
|
30
|
+
* Only shows details when there's an error
|
|
31
|
+
* @param result Tool result information
|
|
32
|
+
* @returns Formatted message string with quote-style indentation
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatToolResultMessage(result: ToolResultInfo): string;
|
|
35
|
+
/**
|
|
36
|
+
* Feishu card element for horizontal rule (divider)
|
|
37
|
+
*/
|
|
38
|
+
export interface DividerElement {
|
|
39
|
+
tag: 'hr';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Feishu card element for markdown content
|
|
43
|
+
*/
|
|
44
|
+
export interface MarkdownElement {
|
|
45
|
+
tag: 'markdown';
|
|
46
|
+
content: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Union type for card content elements
|
|
50
|
+
*/
|
|
51
|
+
export type CardElement = DividerElement | MarkdownElement;
|
|
52
|
+
/**
|
|
53
|
+
* Create a Feishu divider element (horizontal rule)
|
|
54
|
+
* @returns Divider element for card
|
|
55
|
+
*/
|
|
56
|
+
export declare function createDividerElement(): DividerElement;
|
|
57
|
+
/**
|
|
58
|
+
* Create a Feishu markdown element
|
|
59
|
+
* @param content Markdown content
|
|
60
|
+
* @returns Markdown element for card
|
|
61
|
+
*/
|
|
62
|
+
export declare function createMarkdownElement(content: string): MarkdownElement;
|
|
63
|
+
/**
|
|
64
|
+
* Create a visual separator between tool executions (for text mode)
|
|
65
|
+
* @returns Formatted separator string
|
|
66
|
+
* @deprecated Use createDividerElement() for card-based messages
|
|
67
|
+
*/
|
|
68
|
+
export declare function createToolSeparator(): string;
|
|
69
|
+
/**
|
|
70
|
+
* Create a visual separator between tool execution and final response (for text mode)
|
|
71
|
+
* @returns Formatted separator string
|
|
72
|
+
* @deprecated Use createDividerElement() for card-based messages
|
|
73
|
+
*/
|
|
74
|
+
export declare function createResponseSeparator(): string;
|
|
75
|
+
/**
|
|
76
|
+
* Create Feishu interactive card for tool use
|
|
77
|
+
* This can be used to create a collapsible card with full details
|
|
78
|
+
*/
|
|
79
|
+
export declare function createToolUseCard(toolUse: ToolUseInfo): any;
|
|
80
|
+
/**
|
|
81
|
+
* Create Feishu interactive card for tool result
|
|
82
|
+
*/
|
|
83
|
+
export declare function createToolResultCard(result: ToolResultInfo): any;
|
|
84
|
+
//# sourceMappingURL=FeishuMessageFormatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeishuMessageFormatter.d.ts","sourceRoot":"","sources":["../../src/utils/FeishuMessageFormatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAejE;AA2MD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAYtE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,IAAI,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,eAAe,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAGD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,GAAG,CA4B3D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,GAAG,CA8BhE"}
|