im-connector 1.0.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,10 +7,10 @@
7
7
  ## 前置条件
8
8
 
9
9
  - Node.js >= 18
10
- - **钉钉**:`npm i -g dingtalk-workspace-cli`,然后 `dws auth login --recommend`
11
- - **企业微信**:`npm i -g @wecom/cli`,然后 `wecom-cli auth init --noninteractive` 扫码授权
10
+ - 两个命令行工具(dws / wecom-cli)**已随包一起安装**(可选依赖),无需单独安装
11
+ - **登录一次即可**(凭据保存在 CLI 自己的本地登录态,本包不接触凭据)——见下方「登录」
12
12
 
13
- 连接器不保存任何凭据,直接用两个 CLI 自己的登录态。
13
+ > 使用 pnpm 安装时,若提示 CLI 不可用,允许依赖的安装脚本(`pnpm approve-builds`)或手动 `npm i -g dingtalk-workspace-cli @wecom/cli` 即可。
14
14
 
15
15
  ## 安装
16
16
 
@@ -19,6 +19,26 @@ npx -y im-connector # 直接用,无需安装
19
19
  npm i -g im-connector # 或全局安装
20
20
  ```
21
21
 
22
+ > 注意:首次安装会下载两个 CLI(dws 约 130MB),之后无需再装。
23
+
24
+ ## 登录(扫码即可,不用终端)
25
+
26
+ 配置好 MCP 客户端后,让 Agent 调用 `login` 工具:
27
+
28
+ | 平台 | 调用 | 交互 |
29
+ |---|---|---|
30
+ | 企业微信 | `login {provider:"wecom"}` | 返回**二维码图片**,用企业微信扫码 |
31
+ | 钉钉 | `login {provider:"dingtalk"}` | 自动拉起**浏览器授权**(无头/远程环境用 `mode:"device"` 走设备码) |
32
+
33
+ 授权完成后调用 `login_status {provider}`,看到 `authorized: true` 即可开始使用。
34
+
35
+ 也可以在终端里手动登录:
36
+
37
+ ```bash
38
+ dws auth login --recommend # 钉钉(浏览器授权)
39
+ wecom-cli auth init --noninteractive # 企业微信(终端二维码)
40
+ ```
41
+
22
42
  ## 配置 MCP 客户端
23
43
 
24
44
  通用 MCP 客户端(如 Claude Desktop):
@@ -65,11 +85,30 @@ Agent 调用 `mcp__im__run`,参数是 `{ provider, args }`,`args` 就是对
65
85
 
66
86
  完整命令见各 CLI 的 `--help`(如 `dws chat --help`、`wecom-cli message --help`)。
67
87
 
88
+ ## 自检
89
+
90
+ 调用 `info` 工具(无参数)返回每个平台的 CLI 版本、登录状态与实际可执行入口:
91
+
92
+ ```json
93
+ {
94
+ "providers": [
95
+ {
96
+ "id": "dingtalk",
97
+ "displayName": "钉钉",
98
+ "version": "dws version v1.0.65 (...)",
99
+ "resolved": "<npm>/dingtalk-workspace-cli/bin/dws.js",
100
+ "auth": { "authenticated": true, "corp_name": "...", ... }
101
+ },
102
+ { "id": "wecom", "version": "wecom-cli 1.3.4", "auth": "authorized" }
103
+ ]
104
+ }
105
+ ```
106
+
68
107
  ## 说明
69
108
 
70
109
  - **写操作**(发消息、提交审批等)请先让 Agent 确认意图;不确定时用 `--dry-run` 预览(两平台都支持)
71
110
  - 参数会原样透传给 CLI,返回其 JSON 输出
72
- - 支持的 provider:`dingtalk`、`wecom`
111
+ - 支持的 provider:`dingtalk`(dws,24 个服务域 + `api`/`aicard`/`audit` 等)、`wecom`(wecom-cli,`--schema`/`--page-count`/`--dry-run`)
73
112
 
74
113
  ## 开发
75
114
 
@@ -16,6 +16,11 @@ export interface CliExecution {
16
16
  /** stdout 解析后的 JSON(无法解析时为原始文本)。 */
17
17
  data: unknown;
18
18
  }
19
+ export interface LaunchSpec {
20
+ command: string;
21
+ prefix: string[];
22
+ shell: boolean;
23
+ }
19
24
  /**
20
25
  * 通用 CLI 透传执行器:按 provider 规格定位 CLI(npm 全局 bin 脚本 → node 直跑,
21
26
  * 规避 Windows shim),追加 provider 的 formatArgs,收集 stdout/stderr,解析 JSON,
@@ -27,7 +32,15 @@ export declare class CliRunner {
27
32
  get providerId(): string;
28
33
  /** 运行并返回解析后的 stdout JSON;失败抛 CliError。 */
29
34
  runJson(args: string[], opts?: CliRunOptions): Promise<unknown>;
35
+ /** 运行命令(追加 provider 的 formatArgs)。 */
30
36
  run(args: string[], opts?: CliRunOptions): Promise<CliExecution>;
37
+ /** 运行原始命令(不追加 formatArgs,用于 --version 等非业务查询)。 */
38
+ runRaw(args: string[], opts?: CliRunOptions): Promise<CliExecution>;
39
+ /** 解析实际使用的 CLI 入口(脚本路径或命令名),用于诊断。 */
40
+ resolveScript(binOverride?: string): Promise<string>;
41
+ /** 暴露启动规格(供登录会话等需要自行 spawn 的场景复用解析逻辑)。 */
42
+ resolveLaunch(binOverride?: string): Promise<LaunchSpec>;
43
+ private execute;
31
44
  private launch;
32
45
  }
33
46
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oCAAoC;IACpC,IAAI,EAAE,OAAO,CAAC;CACf;AAQD;;;;GAIG;AACH,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,cAAc;IAEjD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,0CAA0C;IACpC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YAmExD,MAAM;CAwBrB"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oCAAoC;IACpC,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,cAAc;IAEjD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,0CAA0C;IACpC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrE,sCAAsC;IAChC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAItE,kDAAkD;IAC5C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAIzE,qCAAqC;IAC/B,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,0CAA0C;IACpC,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YAIhD,OAAO;YAuEP,MAAM;CAkCrB"}
@@ -1,6 +1,7 @@
1
1
  import { spawn } from "node:child_process";
2
- import { existsSync } from "node:fs";
3
- import { join } from "node:path";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { createRequire } from "node:module";
4
+ import { dirname, join } from "node:path";
4
5
  import { CliError, parseErrorEnvelope } from "./errors.js";
5
6
  /**
6
7
  * 通用 CLI 透传执行器:按 provider 规格定位 CLI(npm 全局 bin 脚本 → node 直跑,
@@ -20,13 +21,30 @@ export class CliRunner {
20
21
  const exec = await this.run(args, opts);
21
22
  return exec.data;
22
23
  }
24
+ /** 运行命令(追加 provider 的 formatArgs)。 */
23
25
  async run(args, opts) {
24
- const spec = await this.launch(opts?.bin);
25
- const finalArgs = [...spec.prefix, ...args, ...this.spec.formatArgs];
26
- const command = `${this.spec.bin} ${args.join(" ")}`;
26
+ return this.execute(args, [...args, ...this.spec.formatArgs], opts);
27
+ }
28
+ /** 运行原始命令(不追加 formatArgs,用于 --version 等非业务查询)。 */
29
+ async runRaw(args, opts) {
30
+ return this.execute(args, args, opts);
31
+ }
32
+ /** 解析实际使用的 CLI 入口(脚本路径或命令名),用于诊断。 */
33
+ async resolveScript(binOverride) {
34
+ const launch = await this.launch(binOverride);
35
+ return launch.shell ? launch.command : (launch.prefix[0] ?? launch.command);
36
+ }
37
+ /** 暴露启动规格(供登录会话等需要自行 spawn 的场景复用解析逻辑)。 */
38
+ async resolveLaunch(binOverride) {
39
+ return this.launch(binOverride);
40
+ }
41
+ async execute(displayArgs, cliArgs, opts) {
42
+ const launch = await this.launch(opts?.bin);
43
+ const finalArgs = [...launch.prefix, ...cliArgs];
44
+ const command = `${this.spec.bin} ${displayArgs.join(" ")}`;
27
45
  return new Promise((resolve, reject) => {
28
- const child = spawn(spec.command, finalArgs, {
29
- shell: spec.shell,
46
+ const child = spawn(launch.command, finalArgs, {
47
+ shell: launch.shell,
30
48
  cwd: opts?.cwd,
31
49
  env: { ...process.env, ...opts?.env },
32
50
  stdio: ["ignore", "pipe", "pipe"],
@@ -56,7 +74,7 @@ export class CliRunner {
56
74
  }
57
75
  child.on("error", (e) => {
58
76
  reject(new CliError({
59
- message: `Failed to launch ${this.spec.bin} (${spec.command}): ${e.message}`,
77
+ message: `Failed to launch ${this.spec.bin} (${launch.command}): ${e.message}`,
60
78
  command,
61
79
  retryable: true,
62
80
  }));
@@ -95,8 +113,13 @@ export class CliRunner {
95
113
  if (bin !== this.spec.bin && existsSync(bin)) {
96
114
  return { command: bin, prefix: [], shell: false };
97
115
  }
98
- // 3) 默认 bin:解析 npm 全局包内脚本
116
+ // 3) 随包安装的 CLI(optionalDependencies 里的依赖,开箱即用)
99
117
  if (bin === this.spec.bin) {
118
+ const local = localCliScript(this.spec);
119
+ if (local) {
120
+ return { command: process.execPath, prefix: [local], shell: false };
121
+ }
122
+ // 4) 回退:npm 全局安装的 CLI
100
123
  const globalRoot = await npmGlobalRoot();
101
124
  if (globalRoot) {
102
125
  const script = join(globalRoot, ...this.spec.binScript.split("/"));
@@ -104,11 +127,55 @@ export class CliRunner {
104
127
  return { command: process.execPath, prefix: [script], shell: false };
105
128
  }
106
129
  }
130
+ // 5) 通过 package.json 的 bin 字段再找一次(处理 binScript 与安装布局不一致)
131
+ const viaManifest = await cliScriptFromManifest(this.spec);
132
+ if (viaManifest) {
133
+ return { command: process.execPath, prefix: [viaManifest], shell: false };
134
+ }
107
135
  }
108
- // 4) 回退:shell 执行(Windows shim)
136
+ // 6) 回退:shell 执行(Windows shim)
109
137
  return { command: bin, prefix: [], shell: process.platform === "win32" };
110
138
  }
111
139
  }
140
+ /**
141
+ * 解析随包安装的 CLI 脚本(包内 node_modules,如 optionalDependencies)。
142
+ * 返回可直接用 `node <script>` 执行的脚本路径;找不到返回 undefined。
143
+ */
144
+ function localCliScript(spec) {
145
+ try {
146
+ const require = createRequire(import.meta.url);
147
+ const pkgJson = require.resolve(`${spec.npmPackage}/package.json`);
148
+ const pkgDir = dirname(pkgJson);
149
+ // binScript = "<npmPackage>/bin/xxx.js" → 相对包目录的脚本路径
150
+ const rel = spec.binScript.slice(spec.npmPackage.length + 1);
151
+ const script = join(pkgDir, rel);
152
+ if (existsSync(script))
153
+ return script;
154
+ return undefined;
155
+ }
156
+ catch {
157
+ return undefined;
158
+ }
159
+ }
160
+ /** 通过包 manifest 的 bin 字段定位脚本(兼容 binScript 与实际 bin 布局不同的情况)。 */
161
+ async function cliScriptFromManifest(spec) {
162
+ try {
163
+ const require = createRequire(import.meta.url);
164
+ const pkgJson = require.resolve(`${spec.npmPackage}/package.json`);
165
+ const manifest = JSON.parse(readFileSync(pkgJson, "utf8"));
166
+ const pkgDir = dirname(pkgJson);
167
+ const bins = typeof manifest.bin === "string" ? [manifest.bin] : Object.values(manifest.bin ?? {});
168
+ for (const rel of bins) {
169
+ const script = join(pkgDir, rel);
170
+ if (existsSync(script))
171
+ return script;
172
+ }
173
+ return undefined;
174
+ }
175
+ catch {
176
+ return undefined;
177
+ }
178
+ }
112
179
  function parseStdoutJson(stdout) {
113
180
  const text = stdout.trim();
114
181
  if (!text)
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AA2B3D;;;;GAIG;AACH,MAAM,OAAO,SAAS;IACS;IAA7B,YAA6B,IAAoB;QAApB,SAAI,GAAJ,IAAI,CAAgB;IAAG,CAAC;IAErD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACtB,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,OAAO,CAAC,IAAc,EAAE,IAAoB;QAChD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,GAAG,CAAC,IAAc,EAAE,IAAoB;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,MAAM,CAAC,IAAc,EAAE,IAAoB;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,aAAa,CAAC,WAAoB;QACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9E,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,aAAa,CAAC,WAAoB;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,WAAqB,EACrB,OAAiB,EACjB,IAAoB;QAEpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE;gBAC7C,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,GAAG,EAAE,IAAI,EAAE,GAAG;gBACd,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;gBACrC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;gBAC5B,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;gBAC5B,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,GAAS,EAAE;gBACzB,IAAI,CAAC;oBACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACP,YAAY;gBACd,CAAC;YACH,CAAC,CAAC;YACF,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO,EAAE,CAAC;;oBAC9B,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gBACtB,MAAM,CACJ,IAAI,QAAQ,CAAC;oBACX,OAAO,EAAE,oBAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,OAAO,EAAE;oBAC9E,OAAO;oBACP,SAAS,EAAE,IAAI;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,IAAI,EAAE,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;gBACvC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;oBAC5C,MAAM,CACJ,IAAI,QAAQ,CAAC;wBACX,OAAO,EACL,QAAQ,EAAE,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,qBAAqB,IAAI,EAAE;wBAC1F,OAAO;wBACP,MAAM;wBACN,QAAQ,EAAE,IAAI;wBACd,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI;wBAC3B,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;wBACnC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM;wBAC/B,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS;wBACrC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI;wBAC3B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO;qBAClC,CAAC,CACH,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,WAAoB;QACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;QACxD,MAAM,GAAG,GAAG,WAAW,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACxD,gBAAgB;QAChB,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACpE,CAAC;QACD,aAAa;QACb,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACpD,CAAC;QACD,+CAA+C;QAC/C,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACtE,CAAC;YACD,sBAAsB;YACtB,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;YACzC,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnE,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvB,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;gBACvE,CAAC;YACH,CAAC;YACD,yDAAyD;YACzD,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,+BAA+B;QAC/B,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;IAC3E,CAAC;CACF;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,IAAoB;IAC1C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,eAAe,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,qDAAqD;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,KAAK,UAAU,qBAAqB,CAAC,IAAoB;IACvD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,eAAe,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAExD,CAAC;QACF,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QACnG,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACjC,IAAI,UAAU,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC;QACxC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAAc;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5F,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,IAAI,IAAI,IAAI,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -5,4 +5,5 @@ export { dingtalk } from "./providers/dingtalk.js";
5
5
  export { wecom } from "./providers/wecom.js";
6
6
  export { getProvider, listProviders } from "./providers/registry.js";
7
7
  export { buildMcpServer, type McpServerOptions } from "./mcp/server.js";
8
+ export { authorizedOf, loginStatus, startLogin, stopLogin, type LoginSnapshot, type LoginStatusResult, } from "./login/session.js";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnF,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnF,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -4,4 +4,5 @@ export { dingtalk } from "./providers/dingtalk.js";
4
4
  export { wecom } from "./providers/wecom.js";
5
5
  export { getProvider, listProviders } from "./providers/registry.js";
6
6
  export { buildMcpServer } from "./mcp/server.js";
7
+ export { authorizedOf, loginStatus, startLogin, stopLogin, } from "./login/session.js";
7
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,kBAAkB,EAAyB,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,SAAS,EAAyC,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAyB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,kBAAkB,EAAyB,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,SAAS,EAAyC,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAyB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,GAGV,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { CliRunner } from "../cli/runner.js";
2
+ import type { ImProviderSpec } from "../providers/types.js";
3
+ /** 一次登录会话的可观察状态。 */
4
+ export interface LoginSnapshot {
5
+ provider: string;
6
+ displayName: string;
7
+ running: boolean;
8
+ startedAt: number;
9
+ endedAt?: number;
10
+ exitCode: number | null;
11
+ /** 输出尾部(用于展示授权链接 / 设备码 / 错误信息)。 */
12
+ output: string;
13
+ /** 二维码 PNG 的 data URL(企业微信扫码)。 */
14
+ qrDataUrl?: string;
15
+ /** 二维码文件路径(若 CLI 输出到文件)。 */
16
+ qrPath?: string;
17
+ }
18
+ /** 登录状态查询结果。 */
19
+ export interface LoginStatusResult {
20
+ provider: string;
21
+ authorized: boolean;
22
+ running: boolean;
23
+ /** 登录进程退出码(未结束时为 null)。 */
24
+ exitCode: number | null;
25
+ /** auth 查询的原始结果(JSON 或文本)。 */
26
+ auth?: unknown;
27
+ authError?: string;
28
+ output: string;
29
+ qrDataUrl?: string;
30
+ }
31
+ /**
32
+ * 发起登录(后台进程,不阻塞):
33
+ * - 钉钉:`dws auth login --recommend` 会打开浏览器完成授权;
34
+ * - 企业微信:`auth init --noninteractive --output-qrcode <png>` 生成扫码图。
35
+ * 返回会话快照;已有进行中的会话则直接返回当前状态。
36
+ */
37
+ export declare function startLogin(spec: ImProviderSpec, runner: CliRunner, opts?: {
38
+ bin?: string;
39
+ mode?: "browser" | "device";
40
+ }): Promise<LoginSnapshot>;
41
+ /** 查询登录状态:auth 查询 + 会话运行状态 + 二维码(若仍在生成中)。 */
42
+ export declare function loginStatus(spec: ImProviderSpec, runner: CliRunner, opts?: {
43
+ bin?: string;
44
+ }): Promise<LoginStatusResult>;
45
+ /** 结束并清理登录会话。 */
46
+ export declare function stopLogin(provider: string): boolean;
47
+ /** 把各种 CLI 的认证输出归一化为布尔值。 */
48
+ export declare function authorizedOf(data: unknown): boolean;
49
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/login/session.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,oBAAoB;AACpB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAO,GACvD,OAAO,CAAC,aAAa,CAAC,CAiExB;AAED,6CAA6C;AAC7C,wBAAsB,WAAW,CAC/B,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAyB5B;AAED,iBAAiB;AACjB,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAWnD;AAED,4BAA4B;AAC5B,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAiBnD"}
@@ -0,0 +1,181 @@
1
+ import { spawn } from "node:child_process";
2
+ import { existsSync, readFileSync, rmSync, statSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ /** 每个 provider 最多一个进行中的登录会话。 */
6
+ const sessions = new Map();
7
+ const MAX_OUTPUT = 8 * 1024;
8
+ const LOGIN_TIMEOUT_MS = 10 * 60 * 1000;
9
+ const QR_WAIT_MS = 5_000;
10
+ /**
11
+ * 发起登录(后台进程,不阻塞):
12
+ * - 钉钉:`dws auth login --recommend` 会打开浏览器完成授权;
13
+ * - 企业微信:`auth init --noninteractive --output-qrcode <png>` 生成扫码图。
14
+ * 返回会话快照;已有进行中的会话则直接返回当前状态。
15
+ */
16
+ export async function startLogin(spec, runner, opts = {}) {
17
+ const existing = sessions.get(spec.id);
18
+ if (existing && existing.exitCode === null) {
19
+ return await snapshot(spec, existing);
20
+ }
21
+ const launch = await runner.resolveLaunch(opts.bin);
22
+ const args = [...(spec.loginArgs ?? ["auth", "login"])];
23
+ if (spec.id === "dingtalk" && opts.mode === "device") {
24
+ args[args.length - 1] = "--device";
25
+ }
26
+ let qrPath;
27
+ if (spec.qrOutputFlag) {
28
+ qrPath = join(tmpdir(), `im-connector-${spec.id}-${Date.now()}.png`);
29
+ if (existsSync(qrPath))
30
+ rmSync(qrPath, { force: true });
31
+ args.push(spec.qrOutputFlag, qrPath);
32
+ }
33
+ const child = spawn(launch.command, [...launch.prefix, ...args], {
34
+ shell: launch.shell,
35
+ stdio: ["ignore", "pipe", "pipe"],
36
+ windowsHide: true,
37
+ });
38
+ const session = {
39
+ child,
40
+ output: "",
41
+ startedAt: Date.now(),
42
+ exitCode: null,
43
+ qrPath,
44
+ };
45
+ sessions.set(spec.id, session);
46
+ const append = (chunk) => {
47
+ session.output = (session.output + chunk.toString("utf8")).slice(-MAX_OUTPUT);
48
+ };
49
+ child.stdout?.on("data", append);
50
+ child.stderr?.on("data", append);
51
+ child.on("exit", (code) => {
52
+ session.exitCode = code;
53
+ session.endedAt = Date.now();
54
+ if (session.timer)
55
+ clearTimeout(session.timer);
56
+ });
57
+ child.on("error", (e) => {
58
+ session.output = (session.output + `\n[launch error] ${e.message}`).slice(-MAX_OUTPUT);
59
+ session.exitCode = -1;
60
+ session.endedAt = Date.now();
61
+ });
62
+ session.timer = setTimeout(() => {
63
+ try {
64
+ child.kill("SIGTERM");
65
+ }
66
+ catch {
67
+ /* ignore */
68
+ }
69
+ }, LOGIN_TIMEOUT_MS);
70
+ // 企业微信:等待二维码 PNG 写盘并写完(最多 QR_WAIT_MS)
71
+ if (qrPath) {
72
+ const deadline = Date.now() + QR_WAIT_MS;
73
+ while (Date.now() < deadline && !hasNonEmptyFile(qrPath) && session.exitCode === null) {
74
+ await new Promise((r) => setTimeout(r, 200));
75
+ }
76
+ }
77
+ return await snapshot(spec, session);
78
+ }
79
+ /** 查询登录状态:auth 查询 + 会话运行状态 + 二维码(若仍在生成中)。 */
80
+ export async function loginStatus(spec, runner, opts = {}) {
81
+ const session = sessions.get(spec.id);
82
+ const result = {
83
+ provider: spec.id,
84
+ authorized: false,
85
+ running: false,
86
+ exitCode: session?.exitCode ?? null,
87
+ output: session?.output ?? "",
88
+ };
89
+ if (session) {
90
+ result.running = session.exitCode === null;
91
+ if (session.qrPath && existsSync(session.qrPath)) {
92
+ result.qrDataUrl = pngDataUrl(session.qrPath);
93
+ }
94
+ }
95
+ if (spec.authArgs) {
96
+ try {
97
+ const data = await runner.runJson(spec.authArgs, { bin: opts.bin });
98
+ result.auth = data;
99
+ result.authorized = authorizedOf(data);
100
+ }
101
+ catch (e) {
102
+ result.authError = e instanceof Error ? e.message : String(e);
103
+ }
104
+ }
105
+ return result;
106
+ }
107
+ /** 结束并清理登录会话。 */
108
+ export function stopLogin(provider) {
109
+ const session = sessions.get(provider);
110
+ if (!session)
111
+ return false;
112
+ if (session.timer)
113
+ clearTimeout(session.timer);
114
+ try {
115
+ session.child.kill("SIGTERM");
116
+ }
117
+ catch {
118
+ /* ignore */
119
+ }
120
+ sessions.delete(provider);
121
+ return true;
122
+ }
123
+ /** 把各种 CLI 的认证输出归一化为布尔值。 */
124
+ export function authorizedOf(data) {
125
+ if (typeof data === "string") {
126
+ const text = data.trim().toLowerCase();
127
+ return text === "authorized" || text === "ok" || text === "true";
128
+ }
129
+ if (data && typeof data === "object") {
130
+ const record = data;
131
+ for (const key of ["authenticated", "authorized", "authorized_status", "logged_in", "success"]) {
132
+ const value = record[key];
133
+ if (typeof value === "boolean")
134
+ return value;
135
+ if (typeof value === "string")
136
+ return value.toLowerCase() === "authorized" || value === "true";
137
+ }
138
+ // wecom-cli 的 auth show 可能包一层 results
139
+ const nested = record.results ?? record.result;
140
+ if (nested !== undefined)
141
+ return authorizedOf(nested);
142
+ }
143
+ return false;
144
+ }
145
+ async function snapshot(spec, session) {
146
+ const snap = {
147
+ provider: spec.id,
148
+ displayName: spec.displayName,
149
+ running: session.exitCode === null,
150
+ startedAt: session.startedAt,
151
+ endedAt: session.endedAt,
152
+ exitCode: session.exitCode,
153
+ output: session.output,
154
+ };
155
+ if (session.qrPath && existsSync(session.qrPath)) {
156
+ snap.qrPath = session.qrPath;
157
+ snap.qrDataUrl = pngDataUrl(session.qrPath);
158
+ }
159
+ return snap;
160
+ }
161
+ function pngDataUrl(path) {
162
+ try {
163
+ const bytes = readFileSync(path);
164
+ if (bytes.length === 0)
165
+ return undefined;
166
+ return `data:image/png;base64,${bytes.toString("base64")}`;
167
+ }
168
+ catch {
169
+ return undefined;
170
+ }
171
+ }
172
+ /** PNG 是否已写盘且写完(CLI 会先创建空文件再写入内容)。 */
173
+ function hasNonEmptyFile(path) {
174
+ try {
175
+ return statSync(path).size > 0;
176
+ }
177
+ catch {
178
+ return false;
179
+ }
180
+ }
181
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/login/session.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
3
  /**
4
- * 构建统一 IM 透传 MCP server:暴露一个 `run { provider, args }` 工具,
5
- * 按 provider 注册表路由到底层 CLI。新增平台只需在 registry 追加 spec。
4
+ * 构建统一 IM 透传 MCP server:暴露
5
+ * - `run { provider, args }`:业务透传;
6
+ * - `info`:版本/登录自检;
7
+ * - `login { provider }`:发起扫码/浏览器登录(返回二维码图片);
8
+ * - `login_status { provider }`:查询登录状态。
9
+ * 按 provider 注册表路由到底层 CLI;新增平台只需在 registry 追加 spec。
6
10
  */
7
11
  export interface McpServerOptions {
8
12
  name?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AA6CnE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,CA+DrE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAgKnE;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,CA0KrE"}
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { createRequire } from "node:module";
2
4
  import { pathToFileURL } from "node:url";
3
5
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
4
6
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
@@ -6,6 +8,7 @@ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextpro
6
8
  import { getProvider, listProviders } from "../providers/registry.js";
7
9
  import { CliRunner } from "../cli/runner.js";
8
10
  import { isCliError } from "../cli/errors.js";
11
+ import { loginStatus, startLogin } from "../login/session.js";
9
12
  function buildRunTool() {
10
13
  const providers = listProviders();
11
14
  const lines = providers
@@ -36,16 +39,215 @@ function buildRunTool() {
36
39
  },
37
40
  };
38
41
  }
42
+ function buildInfoTool() {
43
+ return {
44
+ name: "info",
45
+ description: "查看已接入平台的 CLI 版本、登录状态与实际可执行入口(环境自检 / 排障用)。返回每个 provider 的 id、displayName、版本、登录状态与解析到的 CLI 路径。",
46
+ inputSchema: {
47
+ type: "object",
48
+ properties: {},
49
+ additionalProperties: false,
50
+ },
51
+ };
52
+ }
53
+ async function collectProviderInfo(spec, binOverride) {
54
+ const runner = new CliRunner(spec);
55
+ const info = { id: spec.id, displayName: spec.displayName, bin: spec.bin };
56
+ try {
57
+ info.resolved = await runner.resolveScript(binOverride);
58
+ }
59
+ catch {
60
+ /* ignore */
61
+ }
62
+ // 版本:优先 CLI --version,回退读包内 package.json
63
+ try {
64
+ const exec = await runner.runRaw(spec.versionArgs ?? ["--version"], { bin: binOverride });
65
+ const firstLine = exec.stdout
66
+ .split(/\r?\n/)
67
+ .map((l) => l.trim())
68
+ .find((l) => l.length > 0);
69
+ if (firstLine)
70
+ info.version = firstLine;
71
+ }
72
+ catch {
73
+ /* ignore */
74
+ }
75
+ if (!info.version) {
76
+ try {
77
+ const require = createRequire(import.meta.url);
78
+ const pkgJson = require.resolve(`${spec.npmPackage}/package.json`);
79
+ const manifest = JSON.parse(readFileSync(pkgJson, "utf8"));
80
+ if (manifest.version)
81
+ info.version = manifest.version;
82
+ }
83
+ catch {
84
+ /* ignore */
85
+ }
86
+ }
87
+ // 登录状态:走 provider 的 authArgs(JSON 输出)
88
+ if (spec.authArgs) {
89
+ try {
90
+ info.auth = await runner.runJson(spec.authArgs, { bin: binOverride });
91
+ }
92
+ catch (e) {
93
+ info.authError = isCliError(e) ? e.message : e instanceof Error ? e.message : String(e);
94
+ }
95
+ }
96
+ return info;
97
+ }
98
+ function buildLoginTool() {
99
+ const providers = listProviders();
100
+ return {
101
+ name: "login",
102
+ description: "发起平台登录(无需终端):企业微信会返回可直接渲染的扫码二维码图片;钉钉会拉起浏览器授权(或 mode=device 走设备码流程)。" +
103
+ "返回结果里的 markdown 字段是绝对路径图片语法,直接贴进回复即可在聊天里内联显示二维码。" +
104
+ `完成后调用 login_status 确认。平台:${providers.map((p) => `${p.id}=${p.displayName}`).join(",")}。`,
105
+ inputSchema: {
106
+ type: "object",
107
+ properties: {
108
+ provider: {
109
+ type: "string",
110
+ enum: providers.map((p) => p.id),
111
+ description: "要登录的平台。",
112
+ },
113
+ mode: {
114
+ type: "string",
115
+ enum: ["browser", "device"],
116
+ description: "钉钉登录方式:browser=本机浏览器授权(默认),device=设备码(无头/远程环境)。企业微信固定扫码。",
117
+ },
118
+ },
119
+ required: ["provider"],
120
+ },
121
+ };
122
+ }
123
+ function buildLoginStatusTool() {
124
+ return {
125
+ name: "login_status",
126
+ description: "查询登录状态:是否已授权、登录进程是否仍在运行、二维码(若可用)与最近输出。",
127
+ inputSchema: {
128
+ type: "object",
129
+ properties: {
130
+ provider: {
131
+ type: "string",
132
+ enum: listProviders().map((p) => p.id),
133
+ description: "要查询的平台。",
134
+ },
135
+ },
136
+ required: ["provider"],
137
+ },
138
+ };
139
+ }
39
140
  export function buildMcpServer(options = {}) {
40
141
  const server = new Server({ name: options.name ?? "im", version: options.version ?? "0.1.0" }, { capabilities: { tools: {} } });
41
142
  const runTool = buildRunTool();
143
+ const infoTool = buildInfoTool();
144
+ const loginTool = buildLoginTool();
145
+ const loginStatusTool = buildLoginStatusTool();
42
146
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
43
- tools: [runTool],
147
+ tools: [runTool, infoTool, loginTool, loginStatusTool],
44
148
  }));
45
149
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
150
+ if (request.params.name === "login" || request.params.name === "login_status") {
151
+ const { provider, mode } = (request.params.arguments ?? {});
152
+ const spec = getProvider(provider);
153
+ if (!spec) {
154
+ return {
155
+ content: [
156
+ {
157
+ type: "text",
158
+ text: `未知平台 "${provider}"。可用:${listProviders().map((p) => p.id).join(",")}`,
159
+ },
160
+ ],
161
+ isError: true,
162
+ };
163
+ }
164
+ const runner = new CliRunner(spec);
165
+ const bin = options.binOverrides?.[spec.id];
166
+ try {
167
+ if (request.params.name === "login_status") {
168
+ const status = await loginStatus(spec, runner, { bin });
169
+ return {
170
+ content: [
171
+ {
172
+ type: "text",
173
+ text: JSON.stringify({
174
+ ...status,
175
+ hint: status.authorized
176
+ ? "已登录,可以直接使用 run 工具。"
177
+ : status.running
178
+ ? "登录会话进行中:请扫码/完成浏览器授权后再次查询。"
179
+ : status.exitCode === 0
180
+ ? "授权流程已完成(exitCode=0),但 auth 查询仍未通过;请检查 CLI 登录态或重新 login。"
181
+ : status.exitCode === null
182
+ ? "尚未发起登录;请调用 login 获取二维码/打开授权页。"
183
+ : `登录流程已结束(exitCode=${status.exitCode}),未成功;请重新调用 login。`,
184
+ }, null, 2),
185
+ },
186
+ ],
187
+ };
188
+ }
189
+ const login = await startLogin(spec, runner, {
190
+ bin,
191
+ mode: mode === "device" ? "device" : "browser",
192
+ });
193
+ const content = [];
194
+ if (login.qrDataUrl?.startsWith("data:image/png;base64,")) {
195
+ content.push({
196
+ type: "image",
197
+ data: login.qrDataUrl.slice("data:image/png;base64,".length),
198
+ mimeType: "image/png",
199
+ });
200
+ }
201
+ content.push({
202
+ type: "text",
203
+ text: JSON.stringify({
204
+ provider: login.provider,
205
+ displayName: login.displayName,
206
+ running: login.running,
207
+ exitCode: login.exitCode,
208
+ qrPath: login.qrPath,
209
+ // 可直接粘贴到回复里的 Markdown 图片(DSH 聊天会把本地绝对路径渲染为内联图片)
210
+ markdown: login.qrPath ? `![${login.displayName}登录二维码](${login.qrPath.replace(/\\/g, "/")})` : undefined,
211
+ outputTail: login.output.slice(-800),
212
+ hint: login.qrDataUrl
213
+ ? "请用手机扫描二维码完成授权,然后调用 login_status 确认。"
214
+ : "请在浏览器完成授权(钉钉默认自动打开浏览器);完成后调用 login_status 确认。",
215
+ }, null, 2),
216
+ });
217
+ return { content };
218
+ }
219
+ catch (e) {
220
+ return {
221
+ content: [
222
+ {
223
+ type: "text",
224
+ text: `${spec.displayName} ${request.params.name} failed: ${e instanceof Error ? e.message : String(e)}`,
225
+ },
226
+ ],
227
+ isError: true,
228
+ };
229
+ }
230
+ }
231
+ if (request.params.name === "info") {
232
+ try {
233
+ const providers = [];
234
+ for (const spec of listProviders()) {
235
+ providers.push(await collectProviderInfo(spec, options.binOverrides?.[spec.id]));
236
+ }
237
+ return {
238
+ content: [{ type: "text", text: JSON.stringify({ providers }, null, 2) }],
239
+ };
240
+ }
241
+ catch (e) {
242
+ return {
243
+ content: [{ type: "text", text: `info failed: ${e instanceof Error ? e.message : String(e)}` }],
244
+ isError: true,
245
+ };
246
+ }
247
+ }
46
248
  if (request.params.name !== "run") {
47
249
  return {
48
- content: [{ type: "text", text: `Unknown tool: ${request.params.name}. Only "run" is available.` }],
250
+ content: [{ type: "text", text: `Unknown tool: ${request.params.name}. Available: "run", "info".` }],
49
251
  isError: true,
50
252
  };
51
253
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dingtalk.d.ts","sourceRoot":"","sources":["../../src/providers/dingtalk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,2CAA2C;AAC3C,eAAO,MAAM,QAAQ,EAAE,cAoBtB,CAAC"}
1
+ {"version":3,"file":"dingtalk.d.ts","sourceRoot":"","sources":["../../src/providers/dingtalk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,2CAA2C;AAC3C,eAAO,MAAM,QAAQ,EAAE,cAwBtB,CAAC"}
@@ -7,6 +7,9 @@ export const dingtalk = {
7
7
  binScript: "dingtalk-workspace-cli/bin/dws.js",
8
8
  formatArgs: ["--format", "json"],
9
9
  envBin: "DINGTALK_DWS_BIN",
10
+ versionArgs: ["--version"],
11
+ authArgs: ["auth", "status"],
12
+ loginArgs: ["auth", "login", "--recommend"],
10
13
  examples: [
11
14
  '["contact","+me"]',
12
15
  '["contact","+search-user","--query","张三"]',
@@ -18,6 +21,7 @@ export const dingtalk = {
18
21
  '["doc","read","--node","<docId|url>"] / ["wiki","+space-list"]',
19
22
  '["chat","+chat-messages","--group","<群名|id>","--limit","20"] / ["chat","+search-msg","--query","<kw>"]',
20
23
  '写:["chat","+messages-send","--group","<cid>","--markdown","内容","--title","标题","--yes"]',
24
+ '其他服务域(dws --help 查看):aicard / api / attendance / audit / contract / devapp / devdoc / ding / drive / hrbrain / live / mail / minutes / sheet / whiteboard / wiki …',
21
25
  ],
22
26
  };
23
27
  //# sourceMappingURL=dingtalk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dingtalk.js","sourceRoot":"","sources":["../../src/providers/dingtalk.ts"],"names":[],"mappings":"AAEA,2CAA2C;AAC3C,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACtC,EAAE,EAAE,UAAU;IACd,WAAW,EAAE,IAAI;IACjB,GAAG,EAAE,KAAK;IACV,UAAU,EAAE,wBAAwB;IACpC,SAAS,EAAE,mCAAmC;IAC9C,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,kBAAkB;IAC1B,QAAQ,EAAE;QACR,mBAAmB;QACnB,2CAA2C;QAC3C,uBAAuB;QACvB,0BAA0B;QAC1B,sFAAsF;QACtF,8FAA8F;QAC9F,2EAA2E;QAC3E,gEAAgE;QAChE,wGAAwG;QACxG,wFAAwF;KACzF;CACF,CAAC"}
1
+ {"version":3,"file":"dingtalk.js","sourceRoot":"","sources":["../../src/providers/dingtalk.ts"],"names":[],"mappings":"AAEA,2CAA2C;AAC3C,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACtC,EAAE,EAAE,UAAU;IACd,WAAW,EAAE,IAAI;IACjB,GAAG,EAAE,KAAK;IACV,UAAU,EAAE,wBAAwB;IACpC,SAAS,EAAE,mCAAmC;IAC9C,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,kBAAkB;IAC1B,WAAW,EAAE,CAAC,WAAW,CAAC;IAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC5B,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC;IAC3C,QAAQ,EAAE;QACR,mBAAmB;QACnB,2CAA2C;QAC3C,uBAAuB;QACvB,0BAA0B;QAC1B,sFAAsF;QACtF,8FAA8F;QAC9F,2EAA2E;QAC3E,gEAAgE;QAChE,wGAAwG;QACxG,wFAAwF;QACxF,oKAAoK;KACrK;CACF,CAAC"}
@@ -17,6 +17,14 @@ export interface ImProviderSpec {
17
17
  formatArgs: string[];
18
18
  /** 覆盖 bin 的环境变量名(可选),如 "DINGTALK_DWS_BIN"。 */
19
19
  envBin?: string;
20
+ /** 查询 CLI 版本的原始参数(不追加 formatArgs),如 ["--version"]。 */
21
+ versionArgs?: string[];
22
+ /** 查询登录状态的命令(走 JSON 输出),如 ["auth","status"]。 */
23
+ authArgs?: string[];
24
+ /** 登录/授权命令(在 MCP 工具里后台执行),如 ["auth","login","--recommend"]。 */
25
+ loginArgs?: string[];
26
+ /** 扫码输出图片的参数名(值为 PNG 路径),如 wecom-cli 的 "--output-qrcode"。 */
27
+ qrOutputFlag?: string;
20
28
  /** 展示在 MCP 工具描述里的示例命令(数组形式,便于模型理解)。 */
21
29
  examples: string[];
22
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,cAAc;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,cAAc;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"wecom.d.ts","sourceRoot":"","sources":["../../src/providers/wecom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,8DAA8D;AAC9D,eAAO,MAAM,KAAK,EAAE,cAcnB,CAAC"}
1
+ {"version":3,"file":"wecom.d.ts","sourceRoot":"","sources":["../../src/providers/wecom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,8DAA8D;AAC9D,eAAO,MAAM,KAAK,EAAE,cAmBnB,CAAC"}
@@ -7,11 +7,16 @@ export const wecom = {
7
7
  binScript: "@wecom/cli/bin/wecom.js",
8
8
  formatArgs: [],
9
9
  envBin: "WECOM_CLI_BIN",
10
+ versionArgs: ["--version"],
11
+ authArgs: ["auth", "show", "--status"],
12
+ loginArgs: ["auth", "init", "--noninteractive"],
13
+ qrOutputFlag: "--output-qrcode",
10
14
  examples: [
11
15
  '["contact","users","search","--keywords","张三"]',
12
16
  '["chat","messages","list","--chat-id","<id>","--begin-time","2026-10-01 00:00:00","--end-time","2026-10-21 00:00:00"]',
17
+ '["message","send","--chat-id","<id>","--msg-type","text","--text","{\\"content\\":\\"通知\\"}"]',
13
18
  '["auth","show","--status"]',
14
- '通用形态:["<service>","<resource>","<operation>",...flags];--schema 查看方法 schema,--dry-run 预览不发送。',
19
+ '通用形态:["<service>","<resource>","<operation>",...flags];--schema 查看方法 schema,--page-count 自动分页(NDJSON),--dry-run 预览不发送。',
15
20
  ],
16
21
  };
17
22
  //# sourceMappingURL=wecom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wecom.js","sourceRoot":"","sources":["../../src/providers/wecom.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,MAAM,CAAC,MAAM,KAAK,GAAmB;IACnC,EAAE,EAAE,OAAO;IACX,WAAW,EAAE,MAAM;IACnB,GAAG,EAAE,WAAW;IAChB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,yBAAyB;IACpC,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,eAAe;IACvB,QAAQ,EAAE;QACR,gDAAgD;QAChD,uHAAuH;QACvH,4BAA4B;QAC5B,8FAA8F;KAC/F;CACF,CAAC"}
1
+ {"version":3,"file":"wecom.js","sourceRoot":"","sources":["../../src/providers/wecom.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,MAAM,CAAC,MAAM,KAAK,GAAmB;IACnC,EAAE,EAAE,OAAO;IACX,WAAW,EAAE,MAAM;IACnB,GAAG,EAAE,WAAW;IAChB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,yBAAyB;IACpC,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,eAAe;IACvB,WAAW,EAAE,CAAC,WAAW,CAAC;IAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;IACtC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC;IAC/C,YAAY,EAAE,iBAAiB;IAC/B,QAAQ,EAAE;QACR,gDAAgD;QAChD,uHAAuH;QACvH,+FAA+F;QAC/F,4BAA4B;QAC5B,wHAAwH;KACzH;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "im-connector",
3
- "version": "1.0.1",
3
+ "version": "1.2.0",
4
4
  "description": "MCP server that lets agents drive DingTalk (dws) and WeCom (wecom-cli) CLIs: send messages, write reports, create todos, query calendars and approvals. Extensible provider registry for more IM platforms.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -40,6 +40,10 @@
40
40
  "dependencies": {
41
41
  "@modelcontextprotocol/sdk": "^1.12.0"
42
42
  },
43
+ "optionalDependencies": {
44
+ "dingtalk-workspace-cli": "^1.0.65",
45
+ "@wecom/cli": "^1.3.4"
46
+ },
43
47
  "devDependencies": {
44
48
  "@types/node": "^22.10.0",
45
49
  "typescript": "^5.7.0",