@leeguoo/yapi-mcp 0.3.26 → 0.4.1

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.
Files changed (91) hide show
  1. package/README.md +34 -14
  2. package/dist/bin.js +35 -0
  3. package/dist/bin.js.map +1 -0
  4. package/dist/cli/commands/col.d.ts +2 -0
  5. package/dist/cli/commands/col.js +80 -0
  6. package/dist/cli/commands/col.js.map +1 -0
  7. package/dist/cli/commands/config.d.ts +2 -0
  8. package/dist/cli/commands/config.js +66 -0
  9. package/dist/cli/commands/config.js.map +1 -0
  10. package/dist/cli/commands/docs-sync.d.ts +3 -0
  11. package/dist/cli/commands/docs-sync.js +1139 -0
  12. package/dist/cli/commands/docs-sync.js.map +1 -0
  13. package/dist/cli/commands/env.d.ts +2 -0
  14. package/dist/cli/commands/env.js +13 -0
  15. package/dist/cli/commands/env.js.map +1 -0
  16. package/dist/cli/commands/export.d.ts +2 -0
  17. package/dist/cli/commands/export.js +86 -0
  18. package/dist/cli/commands/export.js.map +1 -0
  19. package/dist/cli/commands/follow.d.ts +2 -0
  20. package/dist/cli/commands/follow.js +8 -0
  21. package/dist/cli/commands/follow.js.map +1 -0
  22. package/dist/cli/commands/group.d.ts +2 -0
  23. package/dist/cli/commands/group.js +22 -0
  24. package/dist/cli/commands/group.js.map +1 -0
  25. package/dist/cli/commands/install-skill.d.ts +1 -0
  26. package/dist/cli/commands/install-skill.js +9 -0
  27. package/dist/cli/commands/install-skill.js.map +1 -0
  28. package/dist/cli/commands/interface.d.ts +2 -0
  29. package/dist/cli/commands/interface.js +99 -0
  30. package/dist/cli/commands/interface.js.map +1 -0
  31. package/dist/cli/commands/log.d.ts +2 -0
  32. package/dist/cli/commands/log.js +31 -0
  33. package/dist/cli/commands/log.js.map +1 -0
  34. package/dist/cli/commands/login.d.ts +2 -0
  35. package/dist/cli/commands/login.js +90 -0
  36. package/dist/cli/commands/login.js.map +1 -0
  37. package/dist/cli/commands/logout.d.ts +2 -0
  38. package/dist/cli/commands/logout.js +25 -0
  39. package/dist/cli/commands/logout.js.map +1 -0
  40. package/dist/cli/commands/member.d.ts +2 -0
  41. package/dist/cli/commands/member.js +25 -0
  42. package/dist/cli/commands/member.js.map +1 -0
  43. package/dist/cli/commands/project.d.ts +2 -0
  44. package/dist/cli/commands/project.js +49 -0
  45. package/dist/cli/commands/project.js.map +1 -0
  46. package/dist/cli/commands/request.d.ts +2 -0
  47. package/dist/cli/commands/request.js +189 -0
  48. package/dist/cli/commands/request.js.map +1 -0
  49. package/dist/cli/commands/search.d.ts +2 -0
  50. package/dist/cli/commands/search.js +39 -0
  51. package/dist/cli/commands/search.js.map +1 -0
  52. package/dist/cli/commands/self-update.d.ts +1 -0
  53. package/dist/cli/commands/self-update.js +19 -0
  54. package/dist/cli/commands/self-update.js.map +1 -0
  55. package/dist/cli/commands/user.d.ts +2 -0
  56. package/dist/cli/commands/user.js +27 -0
  57. package/dist/cli/commands/user.js.map +1 -0
  58. package/dist/cli/commands/whoami.d.ts +2 -0
  59. package/dist/cli/commands/whoami.js +8 -0
  60. package/dist/cli/commands/whoami.js.map +1 -0
  61. package/dist/cli/http.d.ts +9 -0
  62. package/dist/cli/http.js +44 -0
  63. package/dist/cli/http.js.map +1 -0
  64. package/dist/cli/simple-request.d.ts +2 -0
  65. package/dist/cli/simple-request.js +135 -0
  66. package/dist/cli/simple-request.js.map +1 -0
  67. package/dist/cli/types.d.ts +163 -0
  68. package/dist/cli/types.js +3 -0
  69. package/dist/cli/types.js.map +1 -0
  70. package/dist/cli/utils.d.ts +53 -0
  71. package/dist/cli/utils.js +610 -0
  72. package/dist/cli/utils.js.map +1 -0
  73. package/dist/docs/markdown.d.ts +13 -0
  74. package/dist/docs/markdown.js +77 -3
  75. package/dist/docs/markdown.js.map +1 -1
  76. package/dist/yapi-cli.js +459 -3135
  77. package/dist/yapi-cli.js.map +1 -1
  78. package/package.json +13 -26
  79. package/skill-template/SKILL.md +112 -4
  80. package/dist/cli.js +0 -32
  81. package/dist/cli.js.map +0 -1
  82. package/dist/config.d.ts +0 -28
  83. package/dist/config.js +0 -240
  84. package/dist/config.js.map +0 -1
  85. package/dist/index.d.ts +0 -5
  86. package/dist/index.js +0 -66
  87. package/dist/index.js.map +0 -1
  88. package/dist/server.d.ts +0 -28
  89. package/dist/server.js +0 -1004
  90. package/dist/server.js.map +0 -1
  91. /package/dist/{cli.d.ts → bin.d.ts} +0 -0
package/README.md CHANGED
@@ -54,27 +54,46 @@ Yapi Auto MCP Server 是一个基于 [Model Context Protocol](https://modelconte
54
54
 
55
55
  ### 推荐方式:用 Cross Request Master 一键安装 Skill(免手动找 Token)
56
56
 
57
- 如果你日常就在浏览器里使用 YApi,推荐安装 Chrome 扩展 [cross-request-master](https://github.com/leeguooooo/cross-request-master)。它会在 YApi 接口详情页(基本信息区域右上角)提供 **「YApi 工具箱」** 按钮,包含 Skill 一键安装(推荐)/MCP 配置(兼容)/CLI docs-sync 说明;另外保留 **「复制给 AI」** 一键复制接口 Markdown:
57
+ 如果你日常就在浏览器里使用 YApi,推荐安装 Chrome 扩展 [cross-request-master](https://github.com/leeguooooo/cross-request-master)。它会在 YApi 接口详情页(基本信息区域右上角)提供 **「YApi 工具箱」** 按钮,包含 Skill 一键安装(推荐,支持 `npx skills add`)/MCP 配置(兼容)/CLI docs-sync 说明;另外保留 **「复制给 AI」** 一键复制接口 Markdown:
58
58
 
59
- - Skill 一键安装(推荐):生成 Codex/Claude Skill,并写入全局配置 `~/.yapi/config.toml`
59
+ - Skill 一键安装(推荐):优先生成 `npx skills add` 命令安装仓库导出的 Skill,再配合 `yapi config init` 初始化全局配置;如需一步写入配置,保留 `yapi install-skill` 兼容路径
60
60
  - MCP 配置(兼容):使用 `--yapi-auth-mode=global`(账号密码),默认会自动懒登录;也可手动调用一次 `yapi_update_token` 预热缓存
61
61
  - CLI 使用与 docs-sync:提供本地 CLI 安装命令和文档同步示例
62
62
 
63
63
  ### Skill 一键安装与 CLI
64
64
 
65
- 一条命令把 Skill 安装到 Codex / Claude Code / Cursor,并写入 `~/.yapi/config.toml`(缺省会提示输入):
65
+ 推荐先用 `skills` 安装仓库导出的 Skill:
66
66
 
67
67
  ```bash
68
- # 推荐:全局安装后使用 yapi 命令
68
+ # 推荐:把仓库里的 yapi Skill 装到全局 agent 目录
69
+ npx skills add leeguooooo/cross-request-master -y -g
70
+ ```
71
+
72
+ 这条命令只负责安装 Skill 文件,不会写入 `~/.yapi/config.toml`。如果你还没有本地配置,继续执行下面任一方式:
73
+
74
+ ```bash
75
+ # 方式一:推荐单独初始化配置
69
76
  npm install -g @leeguoo/yapi-mcp
77
+ yapi config init \
78
+ --base-url=https://your-yapi-domain.com \
79
+ --auth-mode=global \
80
+ --email=your_email@example.com
70
81
 
82
+ # 如未保存密码,首次再同步一次浏览器登录态
83
+ yapi login --base-url=https://your-yapi-domain.com --browser
84
+ ```
85
+
86
+ 也可以继续使用兼容命令,在安装 Skill 的同时写入 `~/.yapi/config.toml`:
87
+
88
+ ```bash
89
+ npm install -g @leeguoo/yapi-mcp
71
90
  yapi install-skill \
72
91
  --yapi-base-url=https://your-yapi-domain.com \
73
92
  --yapi-email=your_email@example.com \
74
93
  --yapi-password=your_password
75
94
  ```
76
95
 
77
- 也可以用 npx 临时运行(不全局安装):
96
+ 也可以用 npx 临时运行兼容命令(不全局安装):
78
97
 
79
98
  ```bash
80
99
  npx -y -p @leeguoo/yapi-mcp yapi install-skill \
@@ -83,22 +102,20 @@ npx -y -p @leeguoo/yapi-mcp yapi install-skill \
83
102
  --yapi-password=your_password
84
103
  ```
85
104
 
86
- Skill 安装目录:
87
- - Codex: `~/.codex/skills/yapi/`
88
- - Claude Code: `~/.claude/skills/yapi/`
89
- - Cursor: `~/.cursor/skills/yapi/`
105
+ `skills` CLI 会维护一份规范化安装副本,并按目标 agent 建立链接/映射。当前全局安装通常可在 `~/.agents/skills/yapi/` 看到 canonical copy,具体 agent 侧落点由 `skills` CLI 决定。
90
106
 
91
- Skill 模板来源:`packages/yapi-mcp/skill-template/SKILL.md`(发布后从包内复制到技能目录)。
107
+ 仓库导出的 Skill 来源:`skills/yapi/SKILL.md`(供 `npx skills add` 发现)。
108
+ npm 包内安装模板来源:`packages/yapi-mcp/skill-template/SKILL.md`(供 `yapi install-skill` 复制到技能目录)。
92
109
  后续当 CLI 升级而本地 Skill 仍是旧版本时,`yapi` 会自动提示:
93
110
 
94
111
  ```bash
95
- skill update available: installed Codex@0.3.24, current 0.3.25. Run: yapi install-skill --force
112
+ skill update available: installed Codex@0.3.24, current 0.3.25. Run: npx skills add leeguooooo/cross-request-master -y -g
96
113
  ```
97
114
 
98
115
  也可以手动重装 Skill:
99
116
 
100
117
  ```bash
101
- yapi install-skill --force
118
+ npx skills add leeguooooo/cross-request-master -y -g
102
119
  ```
103
120
 
104
121
  ### CLI 使用
@@ -106,13 +123,14 @@ yapi install-skill --force
106
123
  推荐全局安装后直接使用 `yapi` 命令(走同一份 `~/.yapi/config.toml`):
107
124
 
108
125
  当前 CLI 能力补充:
126
+ - 支持 `yapi config init`:单独初始化/更新 `~/.yapi/config.toml`,适合和 `npx skills add` 组合使用
109
127
  - 支持 `yapi login --browser`:通过 `agent-browser-stealth` 打开页面,登录后自动同步 `_yapi_token/_yapi_uid` 到本地缓存
110
128
  - 默认打开 `base-url` 首页(不强制 `/login`),适配“已登录可直接拿 Cookie”的场景
111
129
  - 支持 `yapi login --login-url <url>` 指定登录页
112
130
  - 支持 `yapi logout` 清理当前 `base_url` 对应的全局会话缓存
113
131
  - 适用于 SSO/额外验证体系:无法使用账号密码时可只走浏览器登录
114
132
  - 支持 `yapi self-update` 升级全局 CLI
115
- - 当已安装的 Skill 版本落后于当前 CLI 时,会自动提示重新执行 `yapi install-skill --force`
133
+ - 当已安装的 Skill 版本落后于当前 CLI 时,会自动提示重新执行 `npx skills add leeguooooo/cross-request-master -y -g`
116
134
 
117
135
  ```bash
118
136
  # 检查版本
@@ -194,12 +212,14 @@ yapi docs-sync
194
212
  - 绑定模式同步后会写入 `.yapi/docs-sync.deployments.json`(本地文档 → 已部署 URL)
195
213
  - 兼容旧方式:`--dir` 读取目录内 `.yapi.json` 的 `project_id/catid` 与 `source_files`
196
214
  - 管理绑定:`yapi docs-sync bind list|get|add|update|remove`
215
+ - 也可以在运行时临时过滤文件:`yapi docs-sync --binding projectA --source-file architecture.md`;优先级是 `--source-file` > 绑定里的 `source_files` > 目录全量扫描
197
216
  - `--query` 支持像 curl 一样写成单个字符串:`--query "catid=4631&limit=50&page=1"`
198
217
  - 可用 `--dry-run` 只做预览不更新;现在会输出每个文件的 Markdown/HTML/请求体大小,并提前暴露超大文档风险
199
218
  - 默认只同步内容变更的文件,如需全量更新使用 `--force`
200
219
  - 普通同步命中相同 `file_hashes` 时会在渲染前直接跳过,不再重复渲染 Mermaid / PlantUML / Graphviz / D2;`--dry-run` 仍会保留预览渲染
201
- - 如果上传返回 `413 Payload Too Large`,CLI 会显示当前请求大小、解析出的服务端限制值(如果响应里有)、以及最大的 Mermaid 块大小,并建议先拆分文档
220
+ - 如果上传返回 `413 Payload Too Large`,CLI 会按 `默认 Mermaid -> --mermaid-classic -> --no-mermaid` 自动降级;某个文件一旦降级成功,会把该模式记住,后续同步优先直接使用,避免每次先撞一次 413
202
221
  - Mermaid 预渲染依赖 `mmdc`(默认手绘风格;安装时会尝试拉取,失败不影响同步)
222
+ - 如果 `mmdc` 已安装但提示缺少 `chrome-headless-shell` / Puppeteer 浏览器,执行:`npx puppeteer browsers install chrome-headless-shell`
203
223
  - PlantUML 预渲染依赖 `plantuml`(需要本机 Java 环境)
204
224
  - Graphviz 预渲染依赖 `dot`(graphviz)
205
225
  - D2 预渲染依赖 `d2`(默认手绘风格输出)
package/dist/bin.js ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const REQUIRED_DEPS = ["yargs", "axios"];
5
+ const missing = [];
6
+ for (const dep of REQUIRED_DEPS) {
7
+ try {
8
+ require.resolve(dep);
9
+ }
10
+ catch {
11
+ missing.push(dep);
12
+ }
13
+ }
14
+ if (missing.length > 0) {
15
+ const path = require("path");
16
+ const pkgDir = path.resolve(__dirname, "..");
17
+ const lines = [
18
+ `[yapi-cli] Missing runtime dependencies: ${missing.join(", ")}`,
19
+ "",
20
+ "This usually means the package directory has no node_modules installed.",
21
+ "",
22
+ "To fix, run one of the following in the package directory:",
23
+ ` cd "${pkgDir}"`,
24
+ " pnpm install # if using pnpm (recommended for this repo)",
25
+ " # or",
26
+ " npm install # if using npm",
27
+ "",
28
+ "If you installed @leeguoo/yapi-mcp globally, try reinstalling:",
29
+ " npm i -g @leeguoo/yapi-mcp",
30
+ ];
31
+ console.error(lines.join("\n"));
32
+ process.exit(1);
33
+ }
34
+ require("./yapi-cli");
35
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;AAQA,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAEzC,MAAM,OAAO,GAAa,EAAE,CAAC;AAC7B,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAA0B,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG;QACZ,4CAA4C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAChE,EAAE;QACF,yEAAyE;QACzE,EAAE;QACF,4DAA4D;QAC5D,SAAS,MAAM,GAAG;QAClB,sEAAsE;QACtE,QAAQ;QACR,yCAAyC;QACzC,EAAE;QACF,gEAAgE;QAChE,8BAA8B;KAC/B,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAGD,OAAO,CAAC,YAAY,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Options } from "../types";
2
+ export declare function runCol(action: string, options: Options): Promise<number>;
@@ -0,0 +1,80 @@
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.runCol = runCol;
7
+ const utils_1 = require("../utils");
8
+ const simple_request_1 = require("../simple-request");
9
+ const http_1 = require("../http");
10
+ const fs_1 = __importDefault(require("fs"));
11
+ async function runCol(action, options) {
12
+ if (action === "list") {
13
+ return await (0, simple_request_1.runSimpleRequest)(options, "/api/col/list", true, (opts) => {
14
+ const projectId = String(opts.projectId || "").trim();
15
+ if (!projectId) {
16
+ console.error("missing --project-id for col list");
17
+ return { ok: false };
18
+ }
19
+ return { ok: true, queryItems: [["project_id", projectId]] };
20
+ });
21
+ }
22
+ if (action === "cases" || action === "case-list" || action === "case_list") {
23
+ return await (0, simple_request_1.runSimpleRequest)(options, "/api/col/case_list", true, (opts) => {
24
+ const colId = String(opts.id || "").trim();
25
+ if (!colId) {
26
+ console.error("missing --id (col id) for col cases");
27
+ return { ok: false };
28
+ }
29
+ return { ok: true, queryItems: [["col_id", colId]] };
30
+ });
31
+ }
32
+ if (action === "run") {
33
+ const configPath = options.config || (0, utils_1.globalConfigPath)();
34
+ const config = fs_1.default.existsSync(configPath)
35
+ ? (0, utils_1.parseSimpleToml)(fs_1.default.readFileSync(configPath, "utf8"))
36
+ : {};
37
+ const baseUrl = options.baseUrl || config.base_url || "";
38
+ if (!baseUrl) {
39
+ console.error("missing --base-url or config base_url");
40
+ return 2;
41
+ }
42
+ const colId = String(options.id || "").trim();
43
+ if (!colId) {
44
+ console.error("missing --id (col id) for col run");
45
+ return 2;
46
+ }
47
+ const projectId = options.projectId || config.project_id || "";
48
+ const rawToken = options.token || config.token || "";
49
+ const token = (0, utils_1.resolveToken)(rawToken, projectId);
50
+ if (!token) {
51
+ console.error("missing --token for col run (requires project token, not cookie auth)");
52
+ return 2;
53
+ }
54
+ const url = (0, http_1.buildUrl)(baseUrl, "/api/open/run_auto_test", [["id", colId]], token, options.tokenParam || "token");
55
+ try {
56
+ const response = await (0, http_1.fetchWithTimeout)(url, { method: "GET" }, options.timeout || 30000);
57
+ const text = await response.text();
58
+ if (options.noPretty) {
59
+ console.log(text);
60
+ }
61
+ else {
62
+ try {
63
+ const payload = JSON.parse(text);
64
+ console.log(JSON.stringify(payload, null, 2));
65
+ }
66
+ catch {
67
+ console.log(text);
68
+ }
69
+ }
70
+ return 0;
71
+ }
72
+ catch (error) {
73
+ console.error("request failed: " + (error instanceof Error ? error.message : String(error)));
74
+ return 2;
75
+ }
76
+ }
77
+ console.error(`unknown col action: ${action || "(missing)"}`);
78
+ return 2;
79
+ }
80
+ //# sourceMappingURL=col.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"col.js","sourceRoot":"","sources":["../../../src/cli/commands/col.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Options } from "../types";
2
+ export declare function runConfig(action: string, options: Options): Promise<number>;
@@ -0,0 +1,66 @@
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.runConfig = runConfig;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const utils_1 = require("../utils");
9
+ function resolveAuthMode(explicit, existing, merged) {
10
+ const normalized = String(explicit || existing.auth_mode || "").trim().toLowerCase();
11
+ if (!normalized) {
12
+ return merged.token ? "token" : "global";
13
+ }
14
+ if (normalized === "token" || normalized === "global")
15
+ return normalized;
16
+ return null;
17
+ }
18
+ async function runConfig(action, options) {
19
+ const normalizedAction = String(action || "init").trim().toLowerCase() || "init";
20
+ if (normalizedAction !== "init") {
21
+ console.error(`unknown config action: ${normalizedAction}`);
22
+ return 2;
23
+ }
24
+ const configPath = options.config || (0, utils_1.globalConfigPath)();
25
+ const existing = fs_1.default.existsSync(configPath)
26
+ ? (0, utils_1.parseSimpleToml)(fs_1.default.readFileSync(configPath, "utf8"))
27
+ : {};
28
+ const merged = { ...existing };
29
+ if (options.baseUrl !== undefined)
30
+ merged.base_url = options.baseUrl;
31
+ if (options.email !== undefined)
32
+ merged.email = options.email;
33
+ if (options.password !== undefined)
34
+ merged.password = options.password;
35
+ if (options.token !== undefined)
36
+ merged.token = options.token;
37
+ if (options.projectId !== undefined)
38
+ merged.project_id = options.projectId;
39
+ if (!merged.base_url) {
40
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
41
+ console.error("missing --base-url");
42
+ return 2;
43
+ }
44
+ merged.base_url = await (0, utils_1.promptRequired)("YApi base URL: ", false);
45
+ }
46
+ const authMode = resolveAuthMode(options.authMode || "", existing, merged);
47
+ if (!authMode) {
48
+ console.error("invalid --auth-mode (use token or global)");
49
+ return 2;
50
+ }
51
+ merged.auth_mode = authMode;
52
+ merged.email = merged.email || "";
53
+ merged.password = merged.password || "";
54
+ merged.token = merged.token || "";
55
+ merged.project_id = merged.project_id || "";
56
+ (0, utils_1.writeConfig)(configPath, merged);
57
+ console.log(`Config written to: ${configPath}`);
58
+ if (authMode === "global" && !merged.password) {
59
+ console.log("Global auth configured without saved password. Run `yapi login --base-url <url> --browser` once to sync cookie, or rerun with --password to enable password relogin.");
60
+ }
61
+ if (authMode === "token" && !merged.token) {
62
+ console.log("Token mode configured without token. Pass --token now or set it later before requests.");
63
+ }
64
+ return 0;
65
+ }
66
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DocsSyncBindArgs, DocsSyncOptions } from "../types";
2
+ export declare function runDocsSyncBindings(action: string, args: DocsSyncBindArgs): Promise<number>;
3
+ export declare function runDocsSync(options: DocsSyncOptions): Promise<number>;