@cvtoolman/pingcode-cli 0.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.
Files changed (141) hide show
  1. package/dist/cli/client.d.ts +6 -0
  2. package/dist/cli/client.d.ts.map +1 -0
  3. package/dist/cli/client.js +13 -0
  4. package/dist/cli/client.js.map +1 -0
  5. package/dist/cli/commands/auth.d.ts +3 -0
  6. package/dist/cli/commands/auth.d.ts.map +1 -0
  7. package/dist/cli/commands/auth.js +108 -0
  8. package/dist/cli/commands/auth.js.map +1 -0
  9. package/dist/cli/commands/project.d.ts +3 -0
  10. package/dist/cli/commands/project.d.ts.map +1 -0
  11. package/dist/cli/commands/project.js +54 -0
  12. package/dist/cli/commands/project.js.map +1 -0
  13. package/dist/cli/commands/sprint.d.ts +3 -0
  14. package/dist/cli/commands/sprint.d.ts.map +1 -0
  15. package/dist/cli/commands/sprint.js +44 -0
  16. package/dist/cli/commands/sprint.js.map +1 -0
  17. package/dist/cli/commands/user.d.ts +3 -0
  18. package/dist/cli/commands/user.d.ts.map +1 -0
  19. package/dist/cli/commands/user.js +20 -0
  20. package/dist/cli/commands/user.js.map +1 -0
  21. package/dist/cli/commands/wiki.d.ts +3 -0
  22. package/dist/cli/commands/wiki.d.ts.map +1 -0
  23. package/dist/cli/commands/wiki.js +105 -0
  24. package/dist/cli/commands/wiki.js.map +1 -0
  25. package/dist/cli/commands/work-item.d.ts +3 -0
  26. package/dist/cli/commands/work-item.d.ts.map +1 -0
  27. package/dist/cli/commands/work-item.js +116 -0
  28. package/dist/cli/commands/work-item.js.map +1 -0
  29. package/dist/cli/config-store.d.ts +25 -0
  30. package/dist/cli/config-store.d.ts.map +1 -0
  31. package/dist/cli/config-store.js +55 -0
  32. package/dist/cli/config-store.js.map +1 -0
  33. package/dist/cli/index.d.ts +6 -0
  34. package/dist/cli/index.d.ts.map +1 -0
  35. package/dist/cli/index.js +54 -0
  36. package/dist/cli/index.js.map +1 -0
  37. package/dist/cli/output.d.ts +7 -0
  38. package/dist/cli/output.d.ts.map +1 -0
  39. package/dist/cli/output.js +29 -0
  40. package/dist/cli/output.js.map +1 -0
  41. package/dist/cli/setup.d.ts +26 -0
  42. package/dist/cli/setup.d.ts.map +1 -0
  43. package/dist/cli/setup.js +216 -0
  44. package/dist/cli/setup.js.map +1 -0
  45. package/dist/client/api/comments.d.ts +12 -0
  46. package/dist/client/api/comments.d.ts.map +1 -0
  47. package/dist/client/api/comments.js +37 -0
  48. package/dist/client/api/comments.js.map +1 -0
  49. package/dist/client/api/deliverables.d.ts +14 -0
  50. package/dist/client/api/deliverables.d.ts.map +1 -0
  51. package/dist/client/api/deliverables.js +38 -0
  52. package/dist/client/api/deliverables.js.map +1 -0
  53. package/dist/client/api/myself.d.ts +10 -0
  54. package/dist/client/api/myself.d.ts.map +1 -0
  55. package/dist/client/api/myself.js +13 -0
  56. package/dist/client/api/myself.js.map +1 -0
  57. package/dist/client/api/sprints.d.ts +15 -0
  58. package/dist/client/api/sprints.d.ts.map +1 -0
  59. package/dist/client/api/sprints.js +64 -0
  60. package/dist/client/api/sprints.js.map +1 -0
  61. package/dist/client/api/stories.d.ts +17 -0
  62. package/dist/client/api/stories.d.ts.map +1 -0
  63. package/dist/client/api/stories.js +54 -0
  64. package/dist/client/api/stories.js.map +1 -0
  65. package/dist/client/api/wiki.d.ts +25 -0
  66. package/dist/client/api/wiki.d.ts.map +1 -0
  67. package/dist/client/api/wiki.js +90 -0
  68. package/dist/client/api/wiki.js.map +1 -0
  69. package/dist/client/api/work-items.d.ts +27 -0
  70. package/dist/client/api/work-items.d.ts.map +1 -0
  71. package/dist/client/api/work-items.js +141 -0
  72. package/dist/client/api/work-items.js.map +1 -0
  73. package/dist/client/auth.d.ts +30 -0
  74. package/dist/client/auth.d.ts.map +1 -0
  75. package/dist/client/auth.js +159 -0
  76. package/dist/client/auth.js.map +1 -0
  77. package/dist/client/client.d.ts +46 -0
  78. package/dist/client/client.d.ts.map +1 -0
  79. package/dist/client/client.js +157 -0
  80. package/dist/client/client.js.map +1 -0
  81. package/dist/client/errors.d.ts +15 -0
  82. package/dist/client/errors.d.ts.map +1 -0
  83. package/dist/client/errors.js +26 -0
  84. package/dist/client/errors.js.map +1 -0
  85. package/dist/client/index.d.ts +16 -0
  86. package/dist/client/index.d.ts.map +1 -0
  87. package/dist/client/index.js +15 -0
  88. package/dist/client/index.js.map +1 -0
  89. package/dist/client/token-store.d.ts +12 -0
  90. package/dist/client/token-store.d.ts.map +1 -0
  91. package/dist/client/token-store.js +38 -0
  92. package/dist/client/token-store.js.map +1 -0
  93. package/dist/client/types.d.ts +176 -0
  94. package/dist/client/types.d.ts.map +1 -0
  95. package/dist/client/types.js +5 -0
  96. package/dist/client/types.js.map +1 -0
  97. package/dist/server/format.d.ts +7 -0
  98. package/dist/server/format.d.ts.map +1 -0
  99. package/dist/server/format.js +60 -0
  100. package/dist/server/format.js.map +1 -0
  101. package/dist/server/index.d.ts +6 -0
  102. package/dist/server/index.d.ts.map +1 -0
  103. package/dist/server/index.js +51 -0
  104. package/dist/server/index.js.map +1 -0
  105. package/dist/server/tools/comment-tools.d.ts +4 -0
  106. package/dist/server/tools/comment-tools.d.ts.map +1 -0
  107. package/dist/server/tools/comment-tools.js +55 -0
  108. package/dist/server/tools/comment-tools.js.map +1 -0
  109. package/dist/server/tools/deliverable-tools.d.ts +4 -0
  110. package/dist/server/tools/deliverable-tools.d.ts.map +1 -0
  111. package/dist/server/tools/deliverable-tools.js +59 -0
  112. package/dist/server/tools/deliverable-tools.js.map +1 -0
  113. package/dist/server/tools/product-tools.d.ts +4 -0
  114. package/dist/server/tools/product-tools.d.ts.map +1 -0
  115. package/dist/server/tools/product-tools.js +30 -0
  116. package/dist/server/tools/product-tools.js.map +1 -0
  117. package/dist/server/tools/project-tools.d.ts +4 -0
  118. package/dist/server/tools/project-tools.d.ts.map +1 -0
  119. package/dist/server/tools/project-tools.js +44 -0
  120. package/dist/server/tools/project-tools.js.map +1 -0
  121. package/dist/server/tools/sprint-tools.d.ts +4 -0
  122. package/dist/server/tools/sprint-tools.d.ts.map +1 -0
  123. package/dist/server/tools/sprint-tools.js +69 -0
  124. package/dist/server/tools/sprint-tools.js.map +1 -0
  125. package/dist/server/tools/story-tools.d.ts +4 -0
  126. package/dist/server/tools/story-tools.d.ts.map +1 -0
  127. package/dist/server/tools/story-tools.js +55 -0
  128. package/dist/server/tools/story-tools.js.map +1 -0
  129. package/dist/server/tools/user-tools.d.ts +4 -0
  130. package/dist/server/tools/user-tools.d.ts.map +1 -0
  131. package/dist/server/tools/user-tools.js +41 -0
  132. package/dist/server/tools/user-tools.js.map +1 -0
  133. package/dist/server/tools/wiki-tools.d.ts +4 -0
  134. package/dist/server/tools/wiki-tools.d.ts.map +1 -0
  135. package/dist/server/tools/wiki-tools.js +171 -0
  136. package/dist/server/tools/wiki-tools.js.map +1 -0
  137. package/dist/server/tools/work-item-tools.d.ts +4 -0
  138. package/dist/server/tools/work-item-tools.d.ts.map +1 -0
  139. package/dist/server/tools/work-item-tools.js +180 -0
  140. package/dist/server/tools/work-item-tools.js.map +1 -0
  141. package/package.json +32 -0
@@ -0,0 +1,6 @@
1
+ /**
2
+ * CLI 单例 PingCodeClient 访问器
3
+ */
4
+ import { PingCodeClient } from '../client/index.js';
5
+ export declare function getClient(): Promise<PingCodeClient>;
6
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cli/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD,wBAAsB,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,CAMzD"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * CLI 单例 PingCodeClient 访问器
3
+ */
4
+ import { PingCodeClient } from '../client/index.js';
5
+ let _client = null;
6
+ export async function getClient() {
7
+ if (!_client) {
8
+ _client = new PingCodeClient();
9
+ await _client.initSubApis();
10
+ }
11
+ return _client;
12
+ }
13
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cli/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,IAAI,OAAO,GAA0B,IAAI,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;QAC/B,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const authCommand: Command;
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SAA0C,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { Command } from 'commander';
2
+ import { PingCodeAuth, TokenStore } from '../../client/index.js';
3
+ import { loadGlobalConfig, saveGlobalConfig, getGlobalConfigPath } from '../config-store.js';
4
+ import { ensureAuthorized, prompt, GLOBAL_TOKEN_FILE } from '../setup.js';
5
+ export const authCommand = new Command('auth').description('认证管理');
6
+ authCommand
7
+ .command('login')
8
+ .description('登录 PingCode(交互式引导)')
9
+ .option('--mode <mode>', '认证模式 (client/user)')
10
+ .option('--code <code>', '授权码(user 模式直接传入)')
11
+ .action(async (opts) => {
12
+ try {
13
+ // 如果指定了 --mode 和 --code,走快捷路径(适合脚本调用)
14
+ if (opts.mode === 'user' && opts.code) {
15
+ const auth = new PingCodeAuth({ authMode: 'user', tokenFile: GLOBAL_TOKEN_FILE });
16
+ await auth.getUserToken(opts.code);
17
+ console.log('用户令牌获取成功 ✓');
18
+ return;
19
+ }
20
+ // 否则走交互式引导
21
+ await ensureAuthorized();
22
+ }
23
+ catch (e) {
24
+ console.error(`登录失败: ${e.message}`);
25
+ process.exit(1);
26
+ }
27
+ });
28
+ authCommand
29
+ .command('status')
30
+ .description('查看认证状态')
31
+ .action(() => {
32
+ const config = loadGlobalConfig();
33
+ const store = new TokenStore(GLOBAL_TOKEN_FILE);
34
+ const data = store.load();
35
+ console.log(`配置文件: ${getGlobalConfigPath()}`);
36
+ console.log(`API 地址: ${config.apiRoot || 'https://open.pingcode.com'}`);
37
+ console.log('');
38
+ if (!data) {
39
+ console.log('认证状态: 未登录');
40
+ console.log('\n运行 pingcode-cli auth login 进行登录');
41
+ return;
42
+ }
43
+ console.log(`认证模式: ${data.auth_mode === 'client' ? '客户端凭证' : '授权码'}`);
44
+ console.log(`令牌: ${data.access_token.slice(0, 10)}...`);
45
+ if (data.expires_at) {
46
+ const expDate = new Date(data.expires_at * 1000);
47
+ const isExpired = Date.now() / 1000 >= data.expires_at - 86400;
48
+ console.log(`过期时间: ${expDate.toLocaleString()}${isExpired ? ' (已过期)' : ''}`);
49
+ }
50
+ });
51
+ authCommand
52
+ .command('logout')
53
+ .description('清除认证信息(保留配置)')
54
+ .action(() => {
55
+ const store = new TokenStore(GLOBAL_TOKEN_FILE);
56
+ store.clear();
57
+ console.log('已清除认证信息');
58
+ console.log('配置信息已保留,运行 pingcode-cli auth login 可重新登录');
59
+ });
60
+ authCommand
61
+ .command('config')
62
+ .description('查看或修改配置')
63
+ .option('--reset', '重置全局配置(清除所有凭证和设置)')
64
+ .option('--set-api-root <url>', '修改 API 地址')
65
+ .action(async (opts) => {
66
+ if (opts.reset) {
67
+ const answer = await prompt('确认重置全局配置?这将清除所有凭证信息 (y/N): ');
68
+ if (answer.toLowerCase() !== 'y') {
69
+ console.log('已取消');
70
+ return;
71
+ }
72
+ saveGlobalConfig({});
73
+ const store = new TokenStore(GLOBAL_TOKEN_FILE);
74
+ store.clear();
75
+ console.log('全局配置和令牌已重置');
76
+ return;
77
+ }
78
+ if (opts.setApiRoot) {
79
+ const config = loadGlobalConfig();
80
+ config.apiRoot = opts.setApiRoot.replace(/\/+$/, '');
81
+ saveGlobalConfig(config);
82
+ console.log(`API 地址已更新为: ${config.apiRoot}`);
83
+ return;
84
+ }
85
+ // 默认:显示当前配置
86
+ const config = loadGlobalConfig();
87
+ const configPath = getGlobalConfigPath();
88
+ if (Object.keys(config).length === 0) {
89
+ console.log(`未找到全局配置(${configPath})`);
90
+ console.log('运行 pingcode-cli auth login 会自动引导配置');
91
+ return;
92
+ }
93
+ console.log(`配置文件: ${configPath}\n`);
94
+ console.log(`API 地址: ${config.apiRoot || '(默认) https://open.pingcode.com'}`);
95
+ console.log(`认证模式: ${config.authMode === 'client' ? '客户端凭证' : config.authMode === 'user' ? '授权码' : '(未设置)'}`);
96
+ if (config.clientId)
97
+ console.log(`Client ID: ${config.clientId.slice(0, 8)}...`);
98
+ if (config.clientSecret)
99
+ console.log(`Client Secret: ${'*'.repeat(16)}`);
100
+ if (config.userClientId)
101
+ console.log(`User Client ID: ${config.userClientId.slice(0, 8)}...`);
102
+ if (config.userClientSecret)
103
+ console.log(`User Client Secret: ${'*'.repeat(16)}`);
104
+ console.log('\n可用操作:');
105
+ console.log(' pingcode-cli auth config --set-api-root <url> 修改 API 地址');
106
+ console.log(' pingcode-cli auth config --reset 重置所有配置');
107
+ });
108
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const projectCommand: Command;
3
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,cAAc,SAA6C,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { Command } from 'commander';
2
+ import { getClient } from '../client.js';
3
+ import { printJson, printTable, printKeyValue } from '../output.js';
4
+ export const projectCommand = new Command('project').description('项目管理');
5
+ projectCommand
6
+ .command('list')
7
+ .description('获取项目列表')
8
+ .option('--page-index <n>', '页码', '0')
9
+ .option('--page-size <n>', '每页数量', '30')
10
+ .option('--format <format>', '输出格式', 'text')
11
+ .action(async (opts) => {
12
+ try {
13
+ const client = await getClient();
14
+ const data = await client.listProjects(Number(opts.pageIndex), Number(opts.pageSize));
15
+ opts.format === 'json' ? printJson(data) : printTable(data.values || []);
16
+ }
17
+ catch (e) {
18
+ console.error(e.message);
19
+ process.exit(1);
20
+ }
21
+ });
22
+ projectCommand
23
+ .command('get <id>')
24
+ .description('获取项目详情')
25
+ .option('--format <format>', '输出格式', 'text')
26
+ .action(async (id, opts) => {
27
+ try {
28
+ const client = await getClient();
29
+ const data = await client.getProject(id);
30
+ opts.format === 'json' ? printJson(data) : printKeyValue(data);
31
+ }
32
+ catch (e) {
33
+ console.error(e.message);
34
+ process.exit(1);
35
+ }
36
+ });
37
+ projectCommand
38
+ .command('members <project-id>')
39
+ .description('获取项目成员列表')
40
+ .option('--page-index <n>', '页码', '0')
41
+ .option('--page-size <n>', '每页数量', '30')
42
+ .option('--format <format>', '输出格式', 'text')
43
+ .action(async (projectId, opts) => {
44
+ try {
45
+ const client = await getClient();
46
+ const data = await client.listProjectMembers(projectId, Number(opts.pageIndex), Number(opts.pageSize));
47
+ opts.format === 'json' ? printJson(data) : printTable(data.values || []);
48
+ }
49
+ catch (e) {
50
+ console.error(e.message);
51
+ process.exit(1);
52
+ }
53
+ });
54
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/cli/commands/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const sprintCommand: Command;
3
+ //# sourceMappingURL=sprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprint.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAA4C,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { Command } from 'commander';
2
+ import { getClient } from '../client.js';
3
+ import { printJson, printTable, printKeyValue } from '../output.js';
4
+ export const sprintCommand = new Command('sprint').description('迭代管理');
5
+ sprintCommand
6
+ .command('list')
7
+ .description('获取迭代列表')
8
+ .requiredOption('--project-id <id>', '项目 ID')
9
+ .option('--name <name>', '迭代名称')
10
+ .option('--status <status>', '状态')
11
+ .option('--page-index <n>', '页码', '0')
12
+ .option('--page-size <n>', '每页数量', '30')
13
+ .option('--format <format>', '输出格式', 'text')
14
+ .action(async (opts) => {
15
+ try {
16
+ const client = await getClient();
17
+ const data = await client.sprints.listSprints({
18
+ projectId: opts.projectId, name: opts.name, status: opts.status,
19
+ pageIndex: Number(opts.pageIndex), pageSize: Number(opts.pageSize),
20
+ });
21
+ opts.format === 'json' ? printJson(data) : printTable(data.values || []);
22
+ }
23
+ catch (e) {
24
+ console.error(e.message);
25
+ process.exit(1);
26
+ }
27
+ });
28
+ sprintCommand
29
+ .command('get <sprint-id>')
30
+ .description('获取迭代详情')
31
+ .requiredOption('--project-id <id>', '项目 ID')
32
+ .option('--format <format>', '输出格式', 'text')
33
+ .action(async (sprintId, opts) => {
34
+ try {
35
+ const client = await getClient();
36
+ const data = await client.sprints.getSprint(opts.projectId, sprintId);
37
+ opts.format === 'json' ? printJson(data) : printKeyValue(data);
38
+ }
39
+ catch (e) {
40
+ console.error(e.message);
41
+ process.exit(1);
42
+ }
43
+ });
44
+ //# sourceMappingURL=sprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprint.js","sourceRoot":"","sources":["../../../src/cli/commands/sprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAEvE,aAAa;KACV,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,QAAQ,CAAC;KACrB,cAAc,CAAC,mBAAmB,EAAE,OAAO,CAAC;KAC5C,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC;KAC/B,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC;KACjC,MAAM,CAAC,kBAAkB,EAAE,IAAI,EAAE,GAAG,CAAC;KACrC,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC;KACvC,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;YAC5C,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;YAC/D,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;SACnE,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEL,aAAa;KACV,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,QAAQ,CAAC;KACrB,cAAc,CAAC,mBAAmB,EAAE,OAAO,CAAC;KAC5C,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACjE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const userCommand: Command;
3
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,WAAW,SAA0C,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Command } from 'commander';
2
+ import { getClient } from '../client.js';
3
+ import { printJson, printKeyValue } from '../output.js';
4
+ export const userCommand = new Command('user').description('用户管理');
5
+ userCommand
6
+ .command('me')
7
+ .description('获取当前用户信息')
8
+ .option('--format <format>', '输出格式', 'text')
9
+ .action(async (opts) => {
10
+ try {
11
+ const client = await getClient();
12
+ const data = await client.myself.getMyself();
13
+ opts.format === 'json' ? printJson(data) : printKeyValue(data);
14
+ }
15
+ catch (e) {
16
+ console.error(e.message);
17
+ process.exit(1);
18
+ }
19
+ });
20
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/cli/commands/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAEnE,WAAW;KACR,OAAO,CAAC,IAAI,CAAC;KACb,WAAW,CAAC,UAAU,CAAC;KACvB,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACjE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const wikiCommand: Command;
3
+ //# sourceMappingURL=wiki.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wiki.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,WAAW,SAA0C,CAAC"}
@@ -0,0 +1,105 @@
1
+ import { Command } from 'commander';
2
+ import { getClient } from '../client.js';
3
+ import { printJson, printTable, printKeyValue } from '../output.js';
4
+ export const wikiCommand = new Command('wiki').description('知识管理');
5
+ wikiCommand
6
+ .command('space-list')
7
+ .description('获取空间列表')
8
+ .option('--keywords <kw>', '关键字搜索')
9
+ .option('--format <format>', '输出格式', 'text')
10
+ .action(async (opts) => {
11
+ try {
12
+ const client = await getClient();
13
+ const data = await client.wiki.listSpaces(opts.keywords);
14
+ opts.format === 'json' ? printJson(data) : printTable(data.values || []);
15
+ }
16
+ catch (e) {
17
+ console.error(e.message);
18
+ process.exit(1);
19
+ }
20
+ });
21
+ wikiCommand
22
+ .command('space-get <space-id>')
23
+ .description('获取空间详情')
24
+ .option('--format <format>', '输出格式', 'text')
25
+ .action(async (spaceId, opts) => {
26
+ try {
27
+ const client = await getClient();
28
+ const data = await client.wiki.getSpace(spaceId);
29
+ opts.format === 'json' ? printJson(data) : printKeyValue(data);
30
+ }
31
+ catch (e) {
32
+ console.error(e.message);
33
+ process.exit(1);
34
+ }
35
+ });
36
+ wikiCommand
37
+ .command('space-create')
38
+ .description('创建空间')
39
+ .requiredOption('--name <name>', '空间名称')
40
+ .requiredOption('--identifier <id>', '空间标识符')
41
+ .option('--description <desc>', '描述')
42
+ .option('--format <format>', '输出格式', 'text')
43
+ .action(async (opts) => {
44
+ try {
45
+ const client = await getClient();
46
+ const data = await client.wiki.createSpace({ name: opts.name, identifier: opts.identifier, description: opts.description });
47
+ opts.format === 'json' ? printJson(data) : printKeyValue(data);
48
+ }
49
+ catch (e) {
50
+ console.error(e.message);
51
+ process.exit(1);
52
+ }
53
+ });
54
+ wikiCommand
55
+ .command('page-get <page-id>')
56
+ .description('获取页面详情')
57
+ .option('--format <format>', '输出格式', 'text')
58
+ .action(async (pageId, opts) => {
59
+ try {
60
+ const client = await getClient();
61
+ const data = await client.wiki.getPageContent(pageId);
62
+ opts.format === 'json' ? printJson(data) : console.log(data.content || JSON.stringify(data));
63
+ }
64
+ catch (e) {
65
+ console.error(e.message);
66
+ process.exit(1);
67
+ }
68
+ });
69
+ wikiCommand
70
+ .command('page-create')
71
+ .description('创建页面')
72
+ .requiredOption('--space-id <id>', '空间 ID')
73
+ .requiredOption('--name <name>', '页面名称')
74
+ .requiredOption('--content <content>', '页面内容')
75
+ .option('--format-type <type>', '格式类型', 'text')
76
+ .option('--format <format>', '输出格式', 'text')
77
+ .action(async (opts) => {
78
+ try {
79
+ const client = await getClient();
80
+ const data = await client.wiki.createPage({ spaceId: opts.spaceId, name: opts.name, content: opts.content, formatType: opts.formatType });
81
+ opts.format === 'json' ? printJson(data) : printKeyValue(data);
82
+ }
83
+ catch (e) {
84
+ console.error(e.message);
85
+ process.exit(1);
86
+ }
87
+ });
88
+ wikiCommand
89
+ .command('page-update <page-id>')
90
+ .description('更新页面内容')
91
+ .requiredOption('--content <content>', '新内容')
92
+ .option('--format-type <type>', '格式类型', 'text')
93
+ .option('--format <format>', '输出格式', 'text')
94
+ .action(async (pageId, opts) => {
95
+ try {
96
+ const client = await getClient();
97
+ const data = await client.wiki.updatePageContent(pageId, opts.content, opts.formatType);
98
+ opts.format === 'json' ? printJson(data) : printKeyValue(data);
99
+ }
100
+ catch (e) {
101
+ console.error(e.message);
102
+ process.exit(1);
103
+ }
104
+ });
105
+ //# sourceMappingURL=wiki.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki.js","sourceRoot":"","sources":["../../../src/cli/commands/wiki.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const workItemCommand: Command;
3
+ //# sourceMappingURL=work-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-item.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/work-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,eAAe,SAAgD,CAAC"}
@@ -0,0 +1,116 @@
1
+ import { Command } from 'commander';
2
+ import { getClient } from '../client.js';
3
+ import { printJson, printTable, printKeyValue } from '../output.js';
4
+ export const workItemCommand = new Command('work-item').description('工作项管理');
5
+ workItemCommand
6
+ .command('list')
7
+ .description('获取工作项列表')
8
+ .option('--project-ids <ids>', '项目 ID(逗号分隔)')
9
+ .option('--keywords <kw>', '关键字搜索')
10
+ .option('--assignee-ids <ids>', '负责人 ID')
11
+ .option('--page-index <n>', '页码', '0')
12
+ .option('--page-size <n>', '每页数量', '30')
13
+ .option('--format <format>', '输出格式', 'text')
14
+ .action(async (opts) => {
15
+ try {
16
+ const client = await getClient();
17
+ const data = await client.workItems.listWorkItems({
18
+ projectIds: opts.projectIds, keywords: opts.keywords,
19
+ assigneeIds: opts.assigneeIds,
20
+ pageIndex: Number(opts.pageIndex), pageSize: Number(opts.pageSize),
21
+ });
22
+ opts.format === 'json' ? printJson(data) : printTable(data.values || []);
23
+ }
24
+ catch (e) {
25
+ console.error(e.message);
26
+ process.exit(1);
27
+ }
28
+ });
29
+ workItemCommand
30
+ .command('get <id>')
31
+ .description('获取工作项详情')
32
+ .option('--format <format>', '输出格式', 'text')
33
+ .action(async (id, opts) => {
34
+ try {
35
+ const client = await getClient();
36
+ const data = await client.workItems.getWorkItem(id);
37
+ opts.format === 'json' ? printJson(data) : printKeyValue(data);
38
+ }
39
+ catch (e) {
40
+ console.error(e.message);
41
+ process.exit(1);
42
+ }
43
+ });
44
+ workItemCommand
45
+ .command('create')
46
+ .description('创建工作项')
47
+ .requiredOption('--project-id <id>', '项目 ID')
48
+ .requiredOption('--title <title>', '标题')
49
+ .requiredOption('--type-id <id>', '类型 ID')
50
+ .option('--description <desc>', '描述')
51
+ .option('--assignee-id <id>', '负责人 ID')
52
+ .option('--format <format>', '输出格式', 'text')
53
+ .action(async (opts) => {
54
+ try {
55
+ const client = await getClient();
56
+ const data = await client.workItems.createWorkItem({
57
+ projectId: opts.projectId, title: opts.title, typeId: opts.typeId,
58
+ description: opts.description, assigneeId: opts.assigneeId,
59
+ });
60
+ opts.format === 'json' ? printJson(data) : printKeyValue(data);
61
+ }
62
+ catch (e) {
63
+ console.error(e.message);
64
+ process.exit(1);
65
+ }
66
+ });
67
+ workItemCommand
68
+ .command('search <keyword>')
69
+ .description('搜索工作项')
70
+ .option('--project-ids <ids>', '项目 ID')
71
+ .option('--page-index <n>', '页码', '0')
72
+ .option('--page-size <n>', '每页数量', '30')
73
+ .option('--format <format>', '输出格式', 'text')
74
+ .action(async (keyword, opts) => {
75
+ try {
76
+ const client = await getClient();
77
+ const data = await client.workItems.searchWorkItems(keyword, opts.projectIds, Number(opts.pageIndex), Number(opts.pageSize));
78
+ opts.format === 'json' ? printJson(data) : printTable(data.values || []);
79
+ }
80
+ catch (e) {
81
+ console.error(e.message);
82
+ process.exit(1);
83
+ }
84
+ });
85
+ workItemCommand
86
+ .command('comment-list <work-item-id>')
87
+ .description('获取工作项评论列表')
88
+ .option('--format <format>', '输出格式', 'text')
89
+ .action(async (workItemId, opts) => {
90
+ try {
91
+ const client = await getClient();
92
+ const data = await client.workItems.listWorkItemComments(workItemId);
93
+ opts.format === 'json' ? printJson(data) : printTable(data.values || []);
94
+ }
95
+ catch (e) {
96
+ console.error(e.message);
97
+ process.exit(1);
98
+ }
99
+ });
100
+ workItemCommand
101
+ .command('comment-add <work-item-id>')
102
+ .description('添加工作项评论')
103
+ .requiredOption('--content <content>', '评论内容')
104
+ .option('--format <format>', '输出格式', 'text')
105
+ .action(async (workItemId, opts) => {
106
+ try {
107
+ const client = await getClient();
108
+ const data = await client.workItems.addWorkItemComment(workItemId, opts.content);
109
+ opts.format === 'json' ? printJson(data) : printKeyValue(data);
110
+ }
111
+ catch (e) {
112
+ console.error(e.message);
113
+ process.exit(1);
114
+ }
115
+ });
116
+ //# sourceMappingURL=work-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-item.js","sourceRoot":"","sources":["../../../src/cli/commands/work-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAE7E,eAAe;KACZ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,SAAS,CAAC;KACtB,MAAM,CAAC,qBAAqB,EAAE,aAAa,CAAC;KAC5C,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC;KAClC,MAAM,CAAC,sBAAsB,EAAE,QAAQ,CAAC;KACxC,MAAM,CAAC,kBAAkB,EAAE,IAAI,EAAE,GAAG,CAAC;KACrC,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC;KACvC,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC;YAChD,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACpD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;SACnE,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEL,eAAe;KACZ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,SAAS,CAAC;KACtB,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEL,eAAe;KACZ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,OAAO,CAAC;KACpB,cAAc,CAAC,mBAAmB,EAAE,OAAO,CAAC;KAC5C,cAAc,CAAC,iBAAiB,EAAE,IAAI,CAAC;KACvC,cAAc,CAAC,gBAAgB,EAAE,OAAO,CAAC;KACzC,MAAM,CAAC,sBAAsB,EAAE,IAAI,CAAC;KACpC,MAAM,CAAC,oBAAoB,EAAE,QAAQ,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;YACjD,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;YACjE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU;SAC3D,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEL,eAAe;KACZ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,qBAAqB,EAAE,OAAO,CAAC;KACtC,MAAM,CAAC,kBAAkB,EAAE,IAAI,EAAE,GAAG,CAAC;KACrC,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC;KACvC,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7H,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEL,eAAe;KACZ,OAAO,CAAC,6BAA6B,CAAC;KACtC,WAAW,CAAC,WAAW,CAAC;KACxB,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEL,eAAe;KACZ,OAAO,CAAC,4BAA4B,CAAC;KACrC,WAAW,CAAC,SAAS,CAAC;KACtB,cAAc,CAAC,qBAAqB,EAAE,MAAM,CAAC;KAC7C,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AACjE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 全局配置管理器
3
+ *
4
+ * 配置文件存储在 ~/.pingcode/config.json
5
+ * 用于存储 API 地址、客户端凭证等信息,让用户无需手动编辑 .env
6
+ */
7
+ export interface GlobalConfig {
8
+ apiRoot?: string;
9
+ authMode?: 'client' | 'user';
10
+ clientId?: string;
11
+ clientSecret?: string;
12
+ userClientId?: string;
13
+ userClientSecret?: string;
14
+ orgId?: string;
15
+ productId?: string;
16
+ }
17
+ export declare function loadGlobalConfig(): GlobalConfig;
18
+ export declare function saveGlobalConfig(config: GlobalConfig): void;
19
+ export declare function getGlobalConfigPath(): string;
20
+ /**
21
+ * 将全局配置注入到 process.env 中(仅填充未设置的变量)
22
+ * 优先级:环境变量 / .env > 全局配置
23
+ */
24
+ export declare function applyGlobalConfigToEnv(): void;
25
+ //# sourceMappingURL=config-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/cli/config-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAgB,gBAAgB,IAAI,YAAY,CAO/C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAG3D;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAuB7C"}