@amaster.ai/pi-wecom 0.1.2-beta.29 → 0.1.2-beta.30
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/cli.d.ts +3 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +45 -26
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -23
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/cli.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export declare function isWeComCliInstalled(): boolean
|
|
1
|
+
export declare function isWeComCliInstalled(): Promise<boolean>;
|
|
2
2
|
export declare function installWeComCli(): Promise<void>;
|
|
3
3
|
export declare function ensureWeComCli(): Promise<boolean>;
|
|
4
|
-
export declare function isWeComCliAuthenticated(): boolean
|
|
5
|
-
export declare function getWeComCliSkillsDir(): string | undefined
|
|
4
|
+
export declare function isWeComCliAuthenticated(): Promise<boolean>;
|
|
5
|
+
export declare function getWeComCliSkillsDir(): Promise<string | undefined>;
|
|
6
6
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA0BA,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAU5D;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAMrD;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAIvD;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC,CAOhE;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAaxE"}
|
package/dist/cli.js
CHANGED
|
@@ -1,51 +1,70 @@
|
|
|
1
|
-
import { exec
|
|
2
|
-
import { existsSync } from 'node:fs';
|
|
1
|
+
import { exec } from 'node:child_process';
|
|
2
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
3
4
|
import { join } from 'node:path';
|
|
4
5
|
const NPM_PACKAGE = '@wecom/cli';
|
|
5
|
-
|
|
6
|
+
const INSTALL_DIR = join(homedir(), '.wecom-cli');
|
|
7
|
+
const BIN_PATH = join(INSTALL_DIR, 'node_modules', '.bin', 'wecom-cli');
|
|
8
|
+
let installAttempted = false;
|
|
9
|
+
let cliAvailable;
|
|
10
|
+
function execAsync(command) {
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
exec(command, (error, stdout, stderr) => {
|
|
13
|
+
if (error)
|
|
14
|
+
reject(error);
|
|
15
|
+
else
|
|
16
|
+
resolve({ stdout, stderr });
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function wecomCliBin() {
|
|
21
|
+
if (existsSync(BIN_PATH))
|
|
22
|
+
return BIN_PATH;
|
|
23
|
+
return 'wecom-cli';
|
|
24
|
+
}
|
|
25
|
+
export async function isWeComCliInstalled() {
|
|
26
|
+
if (cliAvailable !== undefined)
|
|
27
|
+
return cliAvailable;
|
|
6
28
|
try {
|
|
7
|
-
|
|
29
|
+
await execAsync(`"${wecomCliBin()}" --version`);
|
|
30
|
+
cliAvailable = true;
|
|
8
31
|
return true;
|
|
9
32
|
}
|
|
10
33
|
catch {
|
|
34
|
+
cliAvailable = false;
|
|
11
35
|
return false;
|
|
12
36
|
}
|
|
13
37
|
}
|
|
14
|
-
export function installWeComCli() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
});
|
|
22
|
-
});
|
|
38
|
+
export async function installWeComCli() {
|
|
39
|
+
if (installAttempted)
|
|
40
|
+
return;
|
|
41
|
+
installAttempted = true;
|
|
42
|
+
mkdirSync(INSTALL_DIR, { recursive: true });
|
|
43
|
+
await execAsync(`npm install --prefix "${INSTALL_DIR}" ${NPM_PACKAGE}@latest`);
|
|
44
|
+
cliAvailable = undefined;
|
|
23
45
|
}
|
|
24
46
|
export async function ensureWeComCli() {
|
|
25
|
-
if (isWeComCliInstalled())
|
|
47
|
+
if (await isWeComCliInstalled())
|
|
26
48
|
return true;
|
|
27
49
|
await installWeComCli();
|
|
28
50
|
return isWeComCliInstalled();
|
|
29
51
|
}
|
|
30
|
-
export function isWeComCliAuthenticated() {
|
|
52
|
+
export async function isWeComCliAuthenticated() {
|
|
31
53
|
try {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
stdio: ['pipe', 'pipe', 'ignore'],
|
|
35
|
-
});
|
|
36
|
-
return !output.includes('not authenticated') && !output.includes('未认证');
|
|
54
|
+
const { stdout } = await execAsync(`"${wecomCliBin()}" auth status`);
|
|
55
|
+
return !stdout.includes('not authenticated') && !stdout.includes('未认证');
|
|
37
56
|
}
|
|
38
57
|
catch {
|
|
39
58
|
return false;
|
|
40
59
|
}
|
|
41
60
|
}
|
|
42
|
-
export function getWeComCliSkillsDir() {
|
|
61
|
+
export async function getWeComCliSkillsDir() {
|
|
62
|
+
const localSkills = join(INSTALL_DIR, 'node_modules', '@wecom', 'cli', 'skills');
|
|
63
|
+
if (existsSync(localSkills))
|
|
64
|
+
return localSkills;
|
|
43
65
|
try {
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
stdio: ['pipe', 'pipe', 'ignore'],
|
|
47
|
-
}).trim();
|
|
48
|
-
const skillsPath = join(npmRoot, '@wecom', 'cli', 'skills');
|
|
66
|
+
const { stdout } = await execAsync('npm root -g');
|
|
67
|
+
const skillsPath = join(stdout.trim(), '@wecom', 'cli', 'skills');
|
|
49
68
|
if (existsSync(skillsPath))
|
|
50
69
|
return skillsPath;
|
|
51
70
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AActF,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAyC/D"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import { dirname, join } from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import { ensureWeComCli, getWeComCliSkillsDir, isWeComCliAuthenticated
|
|
4
|
+
import { ensureWeComCli, getWeComCliSkillsDir, isWeComCliAuthenticated } from './cli.js';
|
|
5
5
|
import { loadWeComConfig } from './config.js';
|
|
6
6
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
7
|
const BUNDLED_SKILLS_DIR = join(__dirname, '..', 'skills');
|
|
8
|
-
function resolveSkillsDir() {
|
|
9
|
-
const cliSkills = getWeComCliSkillsDir();
|
|
8
|
+
async function resolveSkillsDir() {
|
|
9
|
+
const cliSkills = await getWeComCliSkillsDir();
|
|
10
10
|
if (cliSkills)
|
|
11
11
|
return cliSkills;
|
|
12
12
|
if (existsSync(BUNDLED_SKILLS_DIR))
|
|
@@ -22,28 +22,18 @@ export default function piWeComExtension(pi) {
|
|
|
22
22
|
if (existsSync(BUNDLED_SKILLS_DIR)) {
|
|
23
23
|
skillsDir = BUNDLED_SKILLS_DIR;
|
|
24
24
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
try {
|
|
26
|
+
const installed = await ensureWeComCli();
|
|
27
|
+
if (installed) {
|
|
28
|
+
skillsDir = await resolveSkillsDir();
|
|
29
|
+
ctx.ui.setStatus?.('pi-wecom', 'wecom-cli: ready');
|
|
30
|
+
if (!(await isWeComCliAuthenticated())) {
|
|
31
|
+
ctx.ui.notify('pi-wecom: wecom-cli 未认证,请运行 wecom-cli init 完成扫码认证', 'warning');
|
|
32
|
+
}
|
|
28
33
|
}
|
|
29
|
-
skillsDir = resolveSkillsDir();
|
|
30
|
-
ctx.ui.setStatus?.('pi-wecom', 'wecom-cli: ready');
|
|
31
34
|
}
|
|
32
|
-
|
|
33
|
-
ctx.ui.
|
|
34
|
-
ensureWeComCli()
|
|
35
|
-
.then((installed) => {
|
|
36
|
-
if (installed) {
|
|
37
|
-
skillsDir = resolveSkillsDir();
|
|
38
|
-
ctx.ui.setStatus?.('pi-wecom', 'wecom-cli: ready');
|
|
39
|
-
if (!isWeComCliAuthenticated()) {
|
|
40
|
-
ctx.ui.notify('pi-wecom: wecom-cli 未认证,请运行 wecom-cli init 完成扫码认证', 'warning');
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
})
|
|
44
|
-
.catch((err) => {
|
|
45
|
-
ctx.ui.notify(`pi-wecom: 安装失败 — ${err instanceof Error ? err.message : String(err)}`, 'warning');
|
|
46
|
-
});
|
|
35
|
+
catch (err) {
|
|
36
|
+
ctx.ui.notify(`pi-wecom: 初始化失败 — ${err instanceof Error ? err.message : String(err)}`, 'warning');
|
|
47
37
|
}
|
|
48
38
|
});
|
|
49
39
|
pi.on('resources_discover', () => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAE3D,KAAK,UAAU,gBAAgB;IAC7B,MAAM,SAAS,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC/C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,UAAU,CAAC,kBAAkB,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAgB;IACvD,IAAI,SAA6B,CAAC;IAElC,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAe,EAAE,GAAqB,EAAE,EAAE;QACtE,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,SAAS;YAAE,OAAO;QAEjD,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACnC,SAAS,GAAG,kBAAkB,CAAC;QACjC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,cAAc,EAAE,CAAC;YACzC,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBACrC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;gBACnD,IAAI,CAAC,CAAC,MAAM,uBAAuB,EAAE,CAAC,EAAE,CAAC;oBACvC,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,mDAAmD,EACnD,SAAS,CACV,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACvE,SAAS,CACV,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC/B,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACnC,SAAS,GAAG,SAAS,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/pi-wecom",
|
|
3
|
-
"version": "0.1.2-beta.
|
|
3
|
+
"version": "0.1.2-beta.30",
|
|
4
4
|
"description": "Pi extension for WeCom (enterprise WeChat) workspace — contacts, messages, meetings, schedules, docs and more via wecom-cli.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"vitest": "^4.0.0"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@amaster.ai/pi-shared": "0.1.2-beta.
|
|
61
|
+
"@amaster.ai/pi-shared": "0.1.2-beta.30"
|
|
62
62
|
},
|
|
63
63
|
"scripts": {
|
|
64
64
|
"fetch-skills": "node scripts/fetch-skills.mjs",
|