@larksuite/openclaw-lark-tools 1.0.19-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/doctor.d.ts +5 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +169 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/info.d.ts +5 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +120 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/install.d.ts +10 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +292 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/self-update.d.ts +4 -0
- package/dist/commands/self-update.d.ts.map +1 -0
- package/dist/commands/self-update.js +79 -0
- package/dist/commands/self-update.js.map +1 -0
- package/dist/commands/update.d.ts +4 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +140 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/config.d.ts +38 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +71 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/feishu-auth.d.ts +47 -0
- package/dist/utils/feishu-auth.d.ts.map +1 -0
- package/dist/utils/feishu-auth.js +149 -0
- package/dist/utils/feishu-auth.js.map +1 -0
- package/dist/utils/install-prompts.d.ts +19 -0
- package/dist/utils/install-prompts.d.ts.map +1 -0
- package/dist/utils/install-prompts.js +210 -0
- package/dist/utils/install-prompts.js.map +1 -0
- package/dist/utils/prompts.d.ts +8 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +60 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/system.d.ts +14 -0
- package/dist/utils/system.d.ts.map +1 -0
- package/dist/utils/system.js +123 -0
- package/dist/utils/system.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmH9E"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.doctorCommand = doctorCommand;
|
|
40
|
+
const fs = __importStar(require("fs-extra"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
const config_1 = require("../utils/config");
|
|
44
|
+
const prompts_1 = require("../utils/prompts");
|
|
45
|
+
const system_1 = require("../utils/system");
|
|
46
|
+
const EXTENSIONS_DIR = (0, config_1.getExtensionsDir)();
|
|
47
|
+
const PLUGIN_NAME = 'feishu-openclaw-plugin';
|
|
48
|
+
const PLUGIN_PATH = path.join(EXTENSIONS_DIR, PLUGIN_NAME);
|
|
49
|
+
async function doctorCommand(options = {}) {
|
|
50
|
+
console.log(chalk_1.default.blue('Running diagnostic checks...'));
|
|
51
|
+
let checksPassed = true;
|
|
52
|
+
// 1. Check plugin directory
|
|
53
|
+
if (!(await fs.pathExists(PLUGIN_PATH))) {
|
|
54
|
+
console.error(chalk_1.default.red(`[FAIL] Plugin directory missing at ${PLUGIN_PATH}`));
|
|
55
|
+
console.warn(chalk_1.default.yellow('Suggestion: Plugin is not installed. Use "feishu-plugin-onboard install" command to install it.'));
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
// 2. Check node_modules
|
|
59
|
+
if (await fs.pathExists(PLUGIN_PATH)) {
|
|
60
|
+
if (!(await fs.pathExists(path.join(PLUGIN_PATH, 'node_modules')))) {
|
|
61
|
+
console.error(chalk_1.default.red(`[FAIL] node_modules missing in plugin directory`));
|
|
62
|
+
if (options.fix) {
|
|
63
|
+
console.log(chalk_1.default.blue('Attempting to fix: Running npm install...'));
|
|
64
|
+
try {
|
|
65
|
+
// Change directory and run npm install
|
|
66
|
+
// We use cwd option in execSync via runCommand to avoid shell-specific cd command issues on Windows
|
|
67
|
+
const npmCmd = (0, system_1.getPlatformCommand)('npm');
|
|
68
|
+
(0, system_1.runCommand)(npmCmd, ['install'], { cwd: PLUGIN_PATH });
|
|
69
|
+
console.log(chalk_1.default.green('[FIXED] npm install completed.'));
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
console.error(chalk_1.default.red('[FIX FAIL] Failed to run npm install. Please try manually.'));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.warn(chalk_1.default.yellow(`Suggestion: Plugin dependencies not installed. Run "npm install" in ${PLUGIN_PATH} or run "feishu-plugin-onboard doctor --fix".`));
|
|
77
|
+
}
|
|
78
|
+
checksPassed = false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// 3. Check configuration (plugins.allow)
|
|
82
|
+
const config = await (0, config_1.readConfig)();
|
|
83
|
+
if (!config.plugins?.allow?.includes(PLUGIN_NAME)) {
|
|
84
|
+
console.error(chalk_1.default.red(`[FAIL] Plugin not found in plugins.allow`));
|
|
85
|
+
if (options.fix) {
|
|
86
|
+
console.log(chalk_1.default.blue('Attempting to fix: Adding plugin to allow list...'));
|
|
87
|
+
try {
|
|
88
|
+
if (!config.plugins)
|
|
89
|
+
config.plugins = {};
|
|
90
|
+
if (!config.plugins.allow)
|
|
91
|
+
config.plugins.allow = [];
|
|
92
|
+
config.plugins.allow.push(PLUGIN_NAME);
|
|
93
|
+
await (0, config_1.writeConfig)(config);
|
|
94
|
+
console.log(chalk_1.default.green('[FIXED] Plugin added to allow list.'));
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
console.error(chalk_1.default.red('[FIX FAIL] Failed to update configuration.'));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
console.warn(chalk_1.default.yellow('Suggestion: Plugin is not allowed in configuration. Run "feishu-plugin-onboard doctor --fix" to automatically add it.'));
|
|
102
|
+
}
|
|
103
|
+
checksPassed = false;
|
|
104
|
+
}
|
|
105
|
+
// 4. Check channel configuration
|
|
106
|
+
const feishuChannel = config.channels?.feishu;
|
|
107
|
+
let channelConfigValid = false;
|
|
108
|
+
if (feishuChannel && feishuChannel.appId && feishuChannel.appSecret) {
|
|
109
|
+
if (typeof feishuChannel.appId === 'string' && typeof feishuChannel.appSecret === 'string') {
|
|
110
|
+
channelConfigValid = true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (!channelConfigValid) {
|
|
114
|
+
console.error(chalk_1.default.red(`[FAIL] Feishu channel configuration missing or incomplete`));
|
|
115
|
+
if (options.fix) {
|
|
116
|
+
console.log(chalk_1.default.blue('Attempting to fix: Configuring App ID and Secret...'));
|
|
117
|
+
try {
|
|
118
|
+
if (!config.channels)
|
|
119
|
+
config.channels = {};
|
|
120
|
+
if (!config.channels.feishu) {
|
|
121
|
+
// Init defaults if missing, similar to install logic
|
|
122
|
+
config.channels.feishu = {
|
|
123
|
+
enabled: true,
|
|
124
|
+
appId: "",
|
|
125
|
+
appSecret: "",
|
|
126
|
+
domain: "feishu",
|
|
127
|
+
connectionMode: "websocket",
|
|
128
|
+
requireMention: true,
|
|
129
|
+
dmPolicy: "pairing",
|
|
130
|
+
groupPolicy: "allowlist",
|
|
131
|
+
allowFrom: [],
|
|
132
|
+
groupAllowFrom: []
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
const { appId, appSecret } = await (0, prompts_1.promptAppIdSecret)();
|
|
136
|
+
config.channels.feishu.appId = appId;
|
|
137
|
+
config.channels.feishu.appSecret = appSecret;
|
|
138
|
+
await (0, config_1.writeConfig)(config);
|
|
139
|
+
console.log(chalk_1.default.green('[FIXED] Channel configuration updated.'));
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
console.error(chalk_1.default.red('[FIX FAIL] Failed to update channel configuration.'));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
console.warn(chalk_1.default.yellow('Suggestion: App ID or Secret missing. Run "feishu-plugin-onboard doctor --fix" to configure them.'));
|
|
147
|
+
}
|
|
148
|
+
checksPassed = false;
|
|
149
|
+
}
|
|
150
|
+
if (checksPassed) {
|
|
151
|
+
console.log(chalk_1.default.green('All checks passed!'));
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// If we tried to fix things, maybe checks are passed now?
|
|
155
|
+
// The previous logic marked checksPassed = false immediately upon finding an error.
|
|
156
|
+
// If fix was successful, strictly speaking the "check" passed *after* fix.
|
|
157
|
+
// But for simplicity, let's keep it as "some checks failed initially".
|
|
158
|
+
// Or we could re-run checks? That might be recursive.
|
|
159
|
+
// Let's just say "Done".
|
|
160
|
+
if (options.fix) {
|
|
161
|
+
console.log(chalk_1.default.blue('Fix attempts finished. Please run doctor again to verify.'));
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
console.log(chalk_1.default.yellow('Some checks failed. Use "feishu-plugin-onboard doctor --fix" to attempt automatic repair.'));
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4E1E"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.infoCommand = infoCommand;
|
|
40
|
+
const config_1 = require("../utils/config");
|
|
41
|
+
const system_1 = require("../utils/system");
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const fs = __importStar(require("fs-extra"));
|
|
45
|
+
const child_process_1 = require("child_process");
|
|
46
|
+
async function infoCommand(options = {}) {
|
|
47
|
+
try {
|
|
48
|
+
// 0. Get CLI Version
|
|
49
|
+
let cliVersion = 'Unknown';
|
|
50
|
+
let cliName = '';
|
|
51
|
+
try {
|
|
52
|
+
const cliPackagePath = path.join(__dirname, '../../package.json');
|
|
53
|
+
if (await fs.pathExists(cliPackagePath)) {
|
|
54
|
+
const pkg = await fs.readJSON(cliPackagePath);
|
|
55
|
+
cliVersion = pkg.version;
|
|
56
|
+
cliName = pkg.name;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
// ignore
|
|
61
|
+
}
|
|
62
|
+
let updateMsg = '';
|
|
63
|
+
if (cliName) {
|
|
64
|
+
try {
|
|
65
|
+
const registry = cliName.startsWith('@lark-open') ? 'https://bnpm.byted.org' : 'https://registry.npmjs.org';
|
|
66
|
+
const latestVer = (0, child_process_1.execSync)(`npm view ${cliName} dist-tags.latest --registry=${registry}`, {
|
|
67
|
+
encoding: 'utf8',
|
|
68
|
+
timeout: 2000,
|
|
69
|
+
stdio: ['ignore', 'pipe', 'ignore']
|
|
70
|
+
}).trim();
|
|
71
|
+
if (latestVer && latestVer !== cliVersion) {
|
|
72
|
+
updateMsg = ` (Latest: ${latestVer})`;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
// ignore
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
console.log(chalk_1.default.bold('feishu-plugin-onboard: ') + chalk_1.default.green(cliVersion) + chalk_1.default.yellow(updateMsg));
|
|
80
|
+
// 1. Get OpenClaw Version
|
|
81
|
+
let openClawVersion = 'Not Installed';
|
|
82
|
+
try {
|
|
83
|
+
const openclawCmd = (0, system_1.getPlatformCommand)('openclaw');
|
|
84
|
+
openClawVersion = (0, system_1.runCommandQuiet)(openclawCmd, ['--version']);
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
// openclaw not installed or error
|
|
88
|
+
}
|
|
89
|
+
console.log(chalk_1.default.bold('openclaw: ') + (openClawVersion !== 'Not Installed' ? chalk_1.default.green(openClawVersion) : chalk_1.default.red(openClawVersion)));
|
|
90
|
+
// 2. Get Plugin Version
|
|
91
|
+
const EXTENSIONS_DIR = (0, config_1.getExtensionsDir)();
|
|
92
|
+
const PLUGIN_NAME = 'feishu-openclaw-plugin';
|
|
93
|
+
const PLUGIN_PATH = path.join(EXTENSIONS_DIR, PLUGIN_NAME);
|
|
94
|
+
const PACKAGE_JSON_PATH = path.join(PLUGIN_PATH, 'package.json');
|
|
95
|
+
let pluginVersion = 'Not Installed';
|
|
96
|
+
if (await fs.pathExists(PACKAGE_JSON_PATH)) {
|
|
97
|
+
try {
|
|
98
|
+
const pkg = await fs.readJSON(PACKAGE_JSON_PATH);
|
|
99
|
+
if (pkg.version) {
|
|
100
|
+
pluginVersion = pkg.version;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
// Failed to read package.json
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
console.log(chalk_1.default.bold('feishu-openclaw-plugin: ') + (pluginVersion !== 'Not Installed' ? chalk_1.default.green(pluginVersion) : chalk_1.default.red(pluginVersion)));
|
|
108
|
+
// 3. Print Config if --all
|
|
109
|
+
if (options.all) {
|
|
110
|
+
console.log(''); // Empty line
|
|
111
|
+
const config = await (0, config_1.readConfig)();
|
|
112
|
+
console.log(chalk_1.default.bold('Configuration Info:'));
|
|
113
|
+
console.log(JSON.stringify(config, null, 2));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.error(chalk_1.default.red('Failed to retrieve information.'));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FeishuEnv } from '../utils/config';
|
|
2
|
+
export interface InstallOptions {
|
|
3
|
+
version?: string;
|
|
4
|
+
env?: FeishuEnv;
|
|
5
|
+
lane?: string;
|
|
6
|
+
debug?: boolean;
|
|
7
|
+
verbose?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function installCommand(options: InstallOptions): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAIA,OAAO,EAA6C,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAUvF,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAyJD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8F3E"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.installCommand = installCommand;
|
|
40
|
+
const fs = __importStar(require("fs-extra"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
const system_1 = require("../utils/system");
|
|
44
|
+
const config_1 = require("../utils/config");
|
|
45
|
+
const install_prompts_1 = require("../utils/install-prompts");
|
|
46
|
+
const update_1 = require("./update");
|
|
47
|
+
const EXTENSIONS_DIR = (0, config_1.getExtensionsDir)();
|
|
48
|
+
const PLUGIN_NAME = 'feishu-openclaw-plugin';
|
|
49
|
+
const PLUGIN_PATH = path.join(EXTENSIONS_DIR, PLUGIN_NAME);
|
|
50
|
+
const CONFLICT_PLUGIN_PATH = path.join(EXTENSIONS_DIR, 'feishu');
|
|
51
|
+
const PACKAGE_NAME = '@larksuite/openclaw-lark';
|
|
52
|
+
function compareVersions(v1, v2) {
|
|
53
|
+
const parts1 = v1.split('.').map(Number);
|
|
54
|
+
const parts2 = v2.split('.').map(Number);
|
|
55
|
+
for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
|
|
56
|
+
const p1 = parts1[i] || 0;
|
|
57
|
+
const p2 = parts2[i] || 0;
|
|
58
|
+
if (p1 > p2)
|
|
59
|
+
return 1;
|
|
60
|
+
if (p1 < p2)
|
|
61
|
+
return -1;
|
|
62
|
+
}
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
async function ensureChannelConfig(options = {}) {
|
|
66
|
+
let config = await (0, config_1.readConfig)();
|
|
67
|
+
if (!config)
|
|
68
|
+
config = {};
|
|
69
|
+
// Ensure basic structure
|
|
70
|
+
if (!config.channels)
|
|
71
|
+
config.channels = {};
|
|
72
|
+
if (!config.channels.feishu) {
|
|
73
|
+
config.channels.feishu = {
|
|
74
|
+
enabled: true,
|
|
75
|
+
appId: "",
|
|
76
|
+
appSecret: "",
|
|
77
|
+
domain: "feishu",
|
|
78
|
+
connectionMode: "websocket",
|
|
79
|
+
requireMention: true,
|
|
80
|
+
dmPolicy: "pairing",
|
|
81
|
+
groupPolicy: "open",
|
|
82
|
+
allowFrom: [],
|
|
83
|
+
groupAllowFrom: []
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Get current credentials - safely handle null/undefined
|
|
87
|
+
const feishuConfig = config.channels.feishu || {};
|
|
88
|
+
const currentAppId = feishuConfig.appId || "";
|
|
89
|
+
// Ensure appSecret is undefined if it's null or empty string, to trigger prompt if needed?
|
|
90
|
+
// Wait, if it's empty string but appId exists, we want to prompt.
|
|
91
|
+
// runInstallAuthFlow handles empty string correctly (validatedSecret="").
|
|
92
|
+
// But let's ensure it's not null.
|
|
93
|
+
const currentAppSecret = feishuConfig.appSecret || undefined;
|
|
94
|
+
// Run interactive auth flow
|
|
95
|
+
const { appId, appSecret, userInfo } = await (0, install_prompts_1.runInstallAuthFlow)(currentAppId, currentAppSecret, options);
|
|
96
|
+
// Update config with validated credentials
|
|
97
|
+
// Re-verify structure in case something weird happened, though unlikely
|
|
98
|
+
if (!config.channels)
|
|
99
|
+
config.channels = {};
|
|
100
|
+
if (!config.channels.feishu)
|
|
101
|
+
config.channels.feishu = feishuConfig; // Should be reference assignment
|
|
102
|
+
config.channels.feishu.appId = appId;
|
|
103
|
+
config.channels.feishu.appSecret = appSecret;
|
|
104
|
+
// Update dmPolicy and allowFrom based on userInfo
|
|
105
|
+
if (userInfo && userInfo.openId) {
|
|
106
|
+
config.channels.feishu.dmPolicy = "allowlist";
|
|
107
|
+
if (!config.channels.feishu.allowFrom)
|
|
108
|
+
config.channels.feishu.allowFrom = [];
|
|
109
|
+
if (!config.channels.feishu.allowFrom.includes(userInfo.openId)) {
|
|
110
|
+
config.channels.feishu.allowFrom.push(userInfo.openId);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else if (userInfo) {
|
|
114
|
+
// userInfo exists but openId is missing, meaning we tried to fetch it but failed or it wasn't there
|
|
115
|
+
// In this case, set to open as per requirement
|
|
116
|
+
config.channels.feishu.dmPolicy = "open";
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// userInfo is undefined (e.g. use existing bot), preserve existing behavior or set default
|
|
120
|
+
if (!config.channels.feishu.dmPolicy) {
|
|
121
|
+
config.channels.feishu.dmPolicy = "pairing";
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Ensure groupPolicy defaults
|
|
125
|
+
if (!config.channels.feishu.groupPolicy) {
|
|
126
|
+
config.channels.feishu.groupPolicy = "open";
|
|
127
|
+
}
|
|
128
|
+
// Update plugins.allow
|
|
129
|
+
if (!config.plugins)
|
|
130
|
+
config.plugins = {};
|
|
131
|
+
if (!config.plugins.allow)
|
|
132
|
+
config.plugins.allow = [];
|
|
133
|
+
if (!config.plugins.allow.includes(PLUGIN_NAME)) {
|
|
134
|
+
config.plugins.allow.push(PLUGIN_NAME);
|
|
135
|
+
}
|
|
136
|
+
// Explicitly enable the plugin in entries as per requirement 9.2
|
|
137
|
+
if (!config.plugins.entries)
|
|
138
|
+
config.plugins.entries = {};
|
|
139
|
+
if (!config.plugins.entries[PLUGIN_NAME]) {
|
|
140
|
+
config.plugins.entries[PLUGIN_NAME] = { enabled: true };
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
config.plugins.entries[PLUGIN_NAME].enabled = true;
|
|
144
|
+
}
|
|
145
|
+
await (0, config_1.writeConfig)(config);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Helper to verify installation and start OpenClaw gateway and logs.
|
|
149
|
+
*/
|
|
150
|
+
async function verifyAndStart(options) {
|
|
151
|
+
const finalConfig = await (0, config_1.readConfig)();
|
|
152
|
+
const checks = [
|
|
153
|
+
!finalConfig.plugins?.entries?.feishu?.enabled,
|
|
154
|
+
finalConfig.plugins?.entries?.[PLUGIN_NAME]?.enabled,
|
|
155
|
+
await fs.pathExists(path.join(PLUGIN_PATH, 'node_modules'))
|
|
156
|
+
];
|
|
157
|
+
if (checks.every(Boolean)) {
|
|
158
|
+
const openclawCmd = (0, system_1.getPlatformCommand)('openclaw');
|
|
159
|
+
try {
|
|
160
|
+
(0, system_1.runCommand)(openclawCmd, ['gateway', 'restart']);
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
console.warn(chalk_1.default.yellow('Warning: Failed to restart OpenClaw gateway.'));
|
|
164
|
+
}
|
|
165
|
+
// Wait a bit for gateway to initialize and produce logs
|
|
166
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
167
|
+
// Health check with retry
|
|
168
|
+
let healthOk = false;
|
|
169
|
+
for (let i = 0; i < 5; i++) {
|
|
170
|
+
try {
|
|
171
|
+
const healthOutput = (0, system_1.runCommandQuiet)(openclawCmd, ['health', '--json']);
|
|
172
|
+
if (healthOutput) {
|
|
173
|
+
// Extract JSON part from output (ignoring log prefixes)
|
|
174
|
+
const jsonMatch = healthOutput.match(/\{[\s\S]*\}/);
|
|
175
|
+
if (jsonMatch) {
|
|
176
|
+
const health = JSON.parse(jsonMatch[0]);
|
|
177
|
+
if (health && health.ok === true) {
|
|
178
|
+
healthOk = true;
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (e) {
|
|
185
|
+
// Ignore errors and retry
|
|
186
|
+
}
|
|
187
|
+
// Wait 2 seconds before next retry
|
|
188
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
189
|
+
}
|
|
190
|
+
if (!healthOk) {
|
|
191
|
+
console.warn(chalk_1.default.yellow('Warning: Health check failed after installation. The service might not be running correctly.'));
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
console.log(chalk_1.default.green('OpenClaw is all set. (OpenClaw 已就绪)'));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
console.warn(chalk_1.default.yellow('Installation finished but some checks failed. Please run "doctor" command to diagnose.'));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async function installCommand(options) {
|
|
202
|
+
const openclawCmd = (0, system_1.getPlatformCommand)('openclaw');
|
|
203
|
+
if (options.version && !/^[0-9a-zA-Z.\-+]+$/.test(options.version)) {
|
|
204
|
+
console.error(chalk_1.default.red('Error: Invalid version format.'));
|
|
205
|
+
process.exit(1);
|
|
206
|
+
}
|
|
207
|
+
// 1. Check openclaw version
|
|
208
|
+
try {
|
|
209
|
+
const output = (0, system_1.runCommandQuiet)(openclawCmd, ['--version']);
|
|
210
|
+
// Parse version from output: supports "2026.2.26" and "OpenClaw 2026.3.9 (commit)"
|
|
211
|
+
const versionMatch = output ? output.match(/(?:OpenClaw\s+)?(\d+\.\d+\.\d+)/) : null;
|
|
212
|
+
const version = versionMatch ? versionMatch[1] : null;
|
|
213
|
+
if (version && compareVersions(version, '2026.2.26') < 0) {
|
|
214
|
+
console.error(chalk_1.default.red(`Error: OpenClaw version mismatch. Expected >= 2026.2.26, found ${version} (raw: ${output}). Please upgrade.`));
|
|
215
|
+
process.exit(1);
|
|
216
|
+
}
|
|
217
|
+
else if (!version) {
|
|
218
|
+
console.warn(chalk_1.default.yellow(`Warning: Could not parse OpenClaw version from "${output}". Proceeding with installation but compatibility is not guaranteed.`));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
console.error(chalk_1.default.red('Error: OpenClaw is not installed or not in PATH.'));
|
|
223
|
+
process.exit(1);
|
|
224
|
+
}
|
|
225
|
+
// 2. Check existing installation
|
|
226
|
+
if (await fs.pathExists(PLUGIN_PATH)) {
|
|
227
|
+
console.log(chalk_1.default.yellow('Plugin is already installed. Starting update process...'));
|
|
228
|
+
const newVersion = await (0, update_1.updateCommand)(options, true, true);
|
|
229
|
+
// Validate config after update
|
|
230
|
+
try {
|
|
231
|
+
await ensureChannelConfig(options);
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
console.error(chalk_1.default.red('Failed to configure channels (配置渠道失败):'));
|
|
235
|
+
console.error(error);
|
|
236
|
+
process.exit(1);
|
|
237
|
+
}
|
|
238
|
+
if (newVersion) {
|
|
239
|
+
// console.log(chalk.green(`Update complete! New version: ${newVersion}`));
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
// console.log(chalk.green('Update complete!'));
|
|
243
|
+
}
|
|
244
|
+
// Execute verification and start logic even for updates
|
|
245
|
+
await verifyAndStart(options);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
// 3. Set npm registry
|
|
249
|
+
try {
|
|
250
|
+
const npmCmd = (0, system_1.getPlatformCommand)('npm');
|
|
251
|
+
(0, system_1.runCommand)(npmCmd, ['config', 'set', 'registry', 'https://registry.npmjs.org/']);
|
|
252
|
+
}
|
|
253
|
+
catch (e) {
|
|
254
|
+
console.error(chalk_1.default.red('Failed to set npm registry.'));
|
|
255
|
+
}
|
|
256
|
+
// 4. Disable built-in plugin
|
|
257
|
+
const config = await (0, config_1.readConfig)();
|
|
258
|
+
if (!config.plugins)
|
|
259
|
+
config.plugins = {};
|
|
260
|
+
if (!config.plugins.entries)
|
|
261
|
+
config.plugins.entries = {};
|
|
262
|
+
if (!config.plugins.entries.feishu)
|
|
263
|
+
config.plugins.entries.feishu = { enabled: false };
|
|
264
|
+
config.plugins.entries.feishu.enabled = false;
|
|
265
|
+
await (0, config_1.writeConfig)(config);
|
|
266
|
+
// 5. Remove conflicting directory
|
|
267
|
+
if (await fs.pathExists(CONFLICT_PLUGIN_PATH)) {
|
|
268
|
+
await fs.remove(CONFLICT_PLUGIN_PATH);
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
const packageIdentifier = options.version ? `${PACKAGE_NAME}@${options.version}` : PACKAGE_NAME;
|
|
272
|
+
(0, system_1.runCommand)(openclawCmd, ['plugins', 'install', packageIdentifier]);
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
console.error(chalk_1.default.red('Failed to install plugin from npm.'));
|
|
276
|
+
console.error(error);
|
|
277
|
+
process.exit(1);
|
|
278
|
+
}
|
|
279
|
+
// 6. Configure channels
|
|
280
|
+
try {
|
|
281
|
+
await ensureChannelConfig(options);
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
console.error(chalk_1.default.red('Failed to configure channels (配置渠道失败):'));
|
|
285
|
+
console.error(error);
|
|
286
|
+
// Optionally exit or continue? If config fails, we probably shouldn't start.
|
|
287
|
+
process.exit(1);
|
|
288
|
+
}
|
|
289
|
+
// 9. Final Verification and Start
|
|
290
|
+
await verifyAndStart(options);
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|