@newpeak/barista-cli 0.2.295 → 0.2.298
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/liberica/teams/index.d.ts.map +1 -1
- package/dist/commands/liberica/teams/index.js +6 -0
- package/dist/commands/liberica/teams/index.js.map +1 -1
- package/dist/commands/liberica/teams/members/index.d.ts +3 -0
- package/dist/commands/liberica/teams/members/index.d.ts.map +1 -0
- package/dist/commands/liberica/teams/members/index.js +9 -0
- package/dist/commands/liberica/teams/members/index.js.map +1 -0
- package/dist/commands/liberica/teams/members/suggest.d.ts +3 -0
- package/dist/commands/liberica/teams/members/suggest.d.ts.map +1 -0
- package/dist/commands/liberica/teams/members/suggest.js +57 -0
- package/dist/commands/liberica/teams/members/suggest.js.map +1 -0
- package/dist/commands/liberica/teams/mentions/count.d.ts +3 -0
- package/dist/commands/liberica/teams/mentions/count.d.ts.map +1 -0
- package/dist/commands/liberica/teams/mentions/count.js +55 -0
- package/dist/commands/liberica/teams/mentions/count.js.map +1 -0
- package/dist/commands/liberica/teams/mentions/index.d.ts +3 -0
- package/dist/commands/liberica/teams/mentions/index.d.ts.map +1 -0
- package/dist/commands/liberica/teams/mentions/index.js +17 -0
- package/dist/commands/liberica/teams/mentions/index.js.map +1 -0
- package/dist/commands/liberica/teams/mentions/list.d.ts +3 -0
- package/dist/commands/liberica/teams/mentions/list.d.ts.map +1 -0
- package/dist/commands/liberica/teams/mentions/list.js +97 -0
- package/dist/commands/liberica/teams/mentions/list.js.map +1 -0
- package/dist/commands/liberica/teams/mentions/notify-setting.d.ts +3 -0
- package/dist/commands/liberica/teams/mentions/notify-setting.d.ts.map +1 -0
- package/dist/commands/liberica/teams/mentions/notify-setting.js +119 -0
- package/dist/commands/liberica/teams/mentions/notify-setting.js.map +1 -0
- package/dist/commands/liberica/teams/mentions/read.d.ts +3 -0
- package/dist/commands/liberica/teams/mentions/read.d.ts.map +1 -0
- package/dist/commands/liberica/teams/mentions/read.js +144 -0
- package/dist/commands/liberica/teams/mentions/read.js.map +1 -0
- package/dist/commands/liberica/teams/mentions/reply.d.ts +3 -0
- package/dist/commands/liberica/teams/mentions/reply.d.ts.map +1 -0
- package/dist/commands/liberica/teams/mentions/reply.js +96 -0
- package/dist/commands/liberica/teams/mentions/reply.js.map +1 -0
- package/dist/commands/liberica/teams/topics/common.d.ts +44 -0
- package/dist/commands/liberica/teams/topics/common.d.ts.map +1 -0
- package/dist/commands/liberica/teams/topics/common.js +135 -0
- package/dist/commands/liberica/teams/topics/common.js.map +1 -0
- package/dist/commands/liberica/teams/topics/follow.d.ts +3 -0
- package/dist/commands/liberica/teams/topics/follow.d.ts.map +1 -0
- package/dist/commands/liberica/teams/topics/follow.js +50 -0
- package/dist/commands/liberica/teams/topics/follow.js.map +1 -0
- package/dist/commands/liberica/teams/topics/followed.d.ts +3 -0
- package/dist/commands/liberica/teams/topics/followed.d.ts.map +1 -0
- package/dist/commands/liberica/teams/topics/followed.js +44 -0
- package/dist/commands/liberica/teams/topics/followed.js.map +1 -0
- package/dist/commands/liberica/teams/topics/get.d.ts +3 -0
- package/dist/commands/liberica/teams/topics/get.d.ts.map +1 -0
- package/dist/commands/liberica/teams/topics/get.js +51 -0
- package/dist/commands/liberica/teams/topics/get.js.map +1 -0
- package/dist/commands/liberica/teams/topics/index.d.ts +3 -0
- package/dist/commands/liberica/teams/topics/index.d.ts.map +1 -0
- package/dist/commands/liberica/teams/topics/index.js +23 -0
- package/dist/commands/liberica/teams/topics/index.js.map +1 -0
- package/dist/commands/liberica/teams/topics/list.d.ts +3 -0
- package/dist/commands/liberica/teams/topics/list.d.ts.map +1 -0
- package/dist/commands/liberica/teams/topics/list.js +58 -0
- package/dist/commands/liberica/teams/topics/list.js.map +1 -0
- package/dist/commands/liberica/teams/topics/refs.d.ts +3 -0
- package/dist/commands/liberica/teams/topics/refs.d.ts.map +1 -0
- package/dist/commands/liberica/teams/topics/refs.js +47 -0
- package/dist/commands/liberica/teams/topics/refs.js.map +1 -0
- package/dist/commands/liberica/teams/topics/stats.d.ts +3 -0
- package/dist/commands/liberica/teams/topics/stats.d.ts.map +1 -0
- package/dist/commands/liberica/teams/topics/stats.js +36 -0
- package/dist/commands/liberica/teams/topics/stats.js.map +1 -0
- package/dist/commands/liberica/teams/topics/suggest.d.ts +3 -0
- package/dist/commands/liberica/teams/topics/suggest.d.ts.map +1 -0
- package/dist/commands/liberica/teams/topics/suggest.js +57 -0
- package/dist/commands/liberica/teams/topics/suggest.js.map +1 -0
- package/dist/commands/liberica/teams/topics/unfollow.d.ts +3 -0
- package/dist/commands/liberica/teams/topics/unfollow.d.ts.map +1 -0
- package/dist/commands/liberica/teams/topics/unfollow.js +50 -0
- package/dist/commands/liberica/teams/topics/unfollow.js.map +1 -0
- package/dist/core/api/client.d.ts +67 -0
- package/dist/core/api/client.d.ts.map +1 -1
- package/dist/core/api/client.js +415 -0
- package/dist/core/api/client.js.map +1 -1
- package/dist/types/team-mention.d.ts +67 -0
- package/dist/types/team-mention.d.ts.map +1 -0
- package/dist/types/team-mention.js +10 -0
- package/dist/types/team-mention.js.map +1 -0
- package/dist/types/team-topic.d.ts +98 -0
- package/dist/types/team-topic.d.ts.map +1 -0
- package/dist/types/team-topic.js +10 -0
- package/dist/types/team-topic.js.map +1 -0
- package/package.json +1 -1
- package/skills/barista-cli/data/commands.json +81 -1
- package/skills/barista-cli/data/commands.yaml +56 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Command, Option } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { apiClient } from '../../../../core/api/client.js';
|
|
4
|
+
import { shouldUseJson } from '../../../../utils/output.js';
|
|
5
|
+
import { getTopicContext, printApiError, printCatchError, refItems, renderRefRows, } from './common.js';
|
|
6
|
+
export function createTeamTopicGetCommand() {
|
|
7
|
+
const command = new Command('get');
|
|
8
|
+
command
|
|
9
|
+
.description('Show topic header with its references')
|
|
10
|
+
.argument('<topic-id>', 'Topic ID (19-digit Snowflake, passed as string)')
|
|
11
|
+
.option('--biz-type <type>', 'Filter references by biz type')
|
|
12
|
+
.option('--page <number>', 'Page number', '1')
|
|
13
|
+
.option('--size <number>', 'Page size', '20')
|
|
14
|
+
.addOption(new Option('--env <string>').hideHelp())
|
|
15
|
+
.addOption(new Option('--tenant <string>').hideHelp())
|
|
16
|
+
.option('--json', 'Output as JSON');
|
|
17
|
+
command.action(async (topicId, options) => {
|
|
18
|
+
const { environment, tenant } = getTopicContext();
|
|
19
|
+
const outputJson = shouldUseJson(options);
|
|
20
|
+
const page = parseInt(options.page, 10) || 1;
|
|
21
|
+
const size = parseInt(options.size, 10) || 20;
|
|
22
|
+
try {
|
|
23
|
+
const response = await apiClient.getTeamTopicDetail(environment, tenant, {
|
|
24
|
+
topicId,
|
|
25
|
+
bizType: options.bizType,
|
|
26
|
+
pageNo: page,
|
|
27
|
+
pageSize: size,
|
|
28
|
+
});
|
|
29
|
+
if (!response.success) {
|
|
30
|
+
printApiError(outputJson, response.error, 'Failed to get topic');
|
|
31
|
+
}
|
|
32
|
+
const data = response.data;
|
|
33
|
+
if (outputJson) {
|
|
34
|
+
console.log(JSON.stringify({ success: true, data }, null, 2));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
console.log(chalk.bold(`\n#${data?.topicName ?? ''}`) +
|
|
38
|
+
chalk.gray(` (${data?.topicId ?? topicId})`) +
|
|
39
|
+
chalk.gray(` Followed: ${data?.followed ? '是' : '否'}`));
|
|
40
|
+
renderRefRows(refItems(data), {
|
|
41
|
+
totalRows: data?.totalRows,
|
|
42
|
+
pageNo: data?.pageNo ?? page,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
printCatchError(outputJson, error);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
return command;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/get.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,uBAAuB,IAAI,OAAO,CAcjD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { createTeamTopicListCommand } from './list.js';
|
|
3
|
+
import { createTeamTopicGetCommand } from './get.js';
|
|
4
|
+
import { createTeamTopicFollowedCommand } from './followed.js';
|
|
5
|
+
import { createTeamTopicFollowCommand } from './follow.js';
|
|
6
|
+
import { createTeamTopicUnfollowCommand } from './unfollow.js';
|
|
7
|
+
import { createTeamTopicRefsCommand } from './refs.js';
|
|
8
|
+
import { createTeamTopicStatsCommand } from './stats.js';
|
|
9
|
+
import { createTeamTopicSuggestCommand } from './suggest.js';
|
|
10
|
+
export function createTeamTopicsCommand() {
|
|
11
|
+
const topicsCommand = new Command('topics');
|
|
12
|
+
topicsCommand.description('Manage aggregated topics (话题聚合 / 关注 / 引用项 / 联想)');
|
|
13
|
+
topicsCommand.addCommand(createTeamTopicListCommand());
|
|
14
|
+
topicsCommand.addCommand(createTeamTopicGetCommand());
|
|
15
|
+
topicsCommand.addCommand(createTeamTopicFollowedCommand());
|
|
16
|
+
topicsCommand.addCommand(createTeamTopicFollowCommand());
|
|
17
|
+
topicsCommand.addCommand(createTeamTopicUnfollowCommand());
|
|
18
|
+
topicsCommand.addCommand(createTeamTopicRefsCommand());
|
|
19
|
+
topicsCommand.addCommand(createTeamTopicStatsCommand());
|
|
20
|
+
topicsCommand.addCommand(createTeamTopicSuggestCommand());
|
|
21
|
+
return topicsCommand;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,UAAU,uBAAuB;IACrC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,aAAa,CAAC,WAAW,CAAC,iDAAiD,CAAC,CAAC;IAE7E,aAAa,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACvD,aAAa,CAAC,UAAU,CAAC,yBAAyB,EAAE,CAAC,CAAC;IACtD,aAAa,CAAC,UAAU,CAAC,8BAA8B,EAAE,CAAC,CAAC;IAC3D,aAAa,CAAC,UAAU,CAAC,4BAA4B,EAAE,CAAC,CAAC;IACzD,aAAa,CAAC,UAAU,CAAC,8BAA8B,EAAE,CAAC,CAAC;IAC3D,aAAa,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACvD,aAAa,CAAC,UAAU,CAAC,2BAA2B,EAAE,CAAC,CAAC;IACxD,aAAa,CAAC,UAAU,CAAC,6BAA6B,EAAE,CAAC,CAAC;IAE1D,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAc5C,wBAAgB,0BAA0B,IAAI,OAAO,CA0DpD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Command, Option } from 'commander';
|
|
2
|
+
import { apiClient } from '../../../../core/api/client.js';
|
|
3
|
+
import { shouldUseJson } from '../../../../utils/output.js';
|
|
4
|
+
import { failCommand, getTopicContext, normalizeInstant, printApiError, printCatchError, renderTopicRows, topicItems, withItems, } from './common.js';
|
|
5
|
+
export function createTeamTopicListCommand() {
|
|
6
|
+
const command = new Command('list');
|
|
7
|
+
command
|
|
8
|
+
.description('List aggregated topics (话题聚合)')
|
|
9
|
+
.option('--keyword <text>', 'Filter by topic name keyword')
|
|
10
|
+
.option('--biz-type <type>', 'Filter by source biz type (ISSUE|TASK|WORKLOG|...)')
|
|
11
|
+
.option('--follow-state <state>', 'Filter by follow state (FOLLOWED|UNFOLLOWED)')
|
|
12
|
+
.option('--update-from <iso>', 'Updated from (YYYY-MM-DD or ISO-8601, UTC)')
|
|
13
|
+
.option('--update-to <iso>', 'Updated to (YYYY-MM-DD or ISO-8601, UTC)')
|
|
14
|
+
.option('--page <number>', 'Page number', '1')
|
|
15
|
+
.option('--size <number>', 'Page size', '20')
|
|
16
|
+
.addOption(new Option('--env <string>').hideHelp())
|
|
17
|
+
.addOption(new Option('--tenant <string>').hideHelp())
|
|
18
|
+
.option('--json', 'Output as JSON');
|
|
19
|
+
command.action(async (options) => {
|
|
20
|
+
const { environment, tenant } = getTopicContext();
|
|
21
|
+
const outputJson = shouldUseJson(options);
|
|
22
|
+
const page = parseInt(options.page, 10) || 1;
|
|
23
|
+
const size = parseInt(options.size, 10) || 20;
|
|
24
|
+
const followState = options.followState;
|
|
25
|
+
if (followState && !['FOLLOWED', 'UNFOLLOWED'].includes(followState.toUpperCase())) {
|
|
26
|
+
failCommand(outputJson, 'INVALID_OPTION', '--follow-state must be FOLLOWED or UNFOLLOWED');
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const response = await apiClient.listTeamTopics(environment, tenant, {
|
|
30
|
+
pageNo: page,
|
|
31
|
+
pageSize: size,
|
|
32
|
+
keyword: options.keyword,
|
|
33
|
+
bizType: options.bizType,
|
|
34
|
+
followState: followState ? followState.toUpperCase() : undefined,
|
|
35
|
+
updateFrom: normalizeInstant(options.updateFrom),
|
|
36
|
+
updateTo: normalizeInstant(options.updateTo, true),
|
|
37
|
+
});
|
|
38
|
+
if (!response.success) {
|
|
39
|
+
printApiError(outputJson, response.error, 'Failed to list topics');
|
|
40
|
+
}
|
|
41
|
+
const data = response.data;
|
|
42
|
+
if (outputJson) {
|
|
43
|
+
console.log(JSON.stringify({ success: true, data: withItems(data) }, null, 2));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
renderTopicRows(topicItems(data), {
|
|
47
|
+
totalRows: data?.totalRows,
|
|
48
|
+
pageNo: data?.pageNo ?? page,
|
|
49
|
+
size,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
printCatchError(outputJson, error);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return command;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/refs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAY5C,wBAAgB,0BAA0B,IAAI,OAAO,CA8CpD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Command, Option } from 'commander';
|
|
2
|
+
import { apiClient } from '../../../../core/api/client.js';
|
|
3
|
+
import { shouldUseJson } from '../../../../utils/output.js';
|
|
4
|
+
import { getTopicContext, printApiError, printCatchError, refItems, renderRefRows, withItems, } from './common.js';
|
|
5
|
+
export function createTeamTopicRefsCommand() {
|
|
6
|
+
const command = new Command('refs');
|
|
7
|
+
command
|
|
8
|
+
.description('List business objects referencing a topic (no topic header)')
|
|
9
|
+
.argument('<topic-id>', 'Topic ID (19-digit Snowflake, passed as string)')
|
|
10
|
+
.option('--biz-type <type>', 'Filter by biz type (ISSUE|TASK|WORKLOG|...)')
|
|
11
|
+
.option('--page <number>', 'Page number', '1')
|
|
12
|
+
.option('--size <number>', 'Page size', '20')
|
|
13
|
+
.addOption(new Option('--env <string>').hideHelp())
|
|
14
|
+
.addOption(new Option('--tenant <string>').hideHelp())
|
|
15
|
+
.option('--json', 'Output as JSON');
|
|
16
|
+
command.action(async (topicId, options) => {
|
|
17
|
+
const { environment, tenant } = getTopicContext();
|
|
18
|
+
const outputJson = shouldUseJson(options);
|
|
19
|
+
const page = parseInt(options.page, 10) || 1;
|
|
20
|
+
const size = parseInt(options.size, 10) || 20;
|
|
21
|
+
try {
|
|
22
|
+
const response = await apiClient.listTeamTopicRefs(environment, tenant, {
|
|
23
|
+
topicId,
|
|
24
|
+
bizType: options.bizType,
|
|
25
|
+
pageNo: page,
|
|
26
|
+
pageSize: size,
|
|
27
|
+
});
|
|
28
|
+
if (!response.success) {
|
|
29
|
+
printApiError(outputJson, response.error, 'Failed to list topic references');
|
|
30
|
+
}
|
|
31
|
+
const data = response.data;
|
|
32
|
+
if (outputJson) {
|
|
33
|
+
console.log(JSON.stringify({ success: true, data: withItems(data) }, null, 2));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
renderRefRows(refItems(data), {
|
|
37
|
+
totalRows: data?.totalRows,
|
|
38
|
+
pageNo: data?.pageNo ?? page,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
printCatchError(outputJson, error);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return command;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=refs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refs.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/refs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,eAAe,EACf,aAAa,EACb,eAAe,EACf,QAAQ,EACR,aAAa,EACb,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,MAAM,UAAU,0BAA0B;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO;SACJ,WAAW,CAAC,6DAA6D,CAAC;SAC1E,QAAQ,CAAC,YAAY,EAAE,iDAAiD,CAAC;SACzE,MAAM,CAAC,mBAAmB,EAAE,6CAA6C,CAAC;SAC1E,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,GAAG,CAAC;SAC7C,MAAM,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAC;SAC5C,SAAS,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;SAClD,SAAS,CAAC,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC;SACrD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAEtC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,OAAgC,EAAE,EAAE;QACzE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAExD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE;gBACtE,OAAO;gBACP,OAAO,EAAE,OAAO,CAAC,OAA6B;gBAC9C,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;YAC/E,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/E,OAAO;YACT,CAAC;YAED,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAC5B,SAAS,EAAE,IAAI,EAAE,SAAS;gBAC1B,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI;aAC7B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAM5C,wBAAgB,2BAA2B,IAAI,OAAO,CAiCrD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Command, Option } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { apiClient } from '../../../../core/api/client.js';
|
|
4
|
+
import { shouldUseJson } from '../../../../utils/output.js';
|
|
5
|
+
import { getTopicContext, printApiError, printCatchError } from './common.js';
|
|
6
|
+
export function createTeamTopicStatsCommand() {
|
|
7
|
+
const command = new Command('stats');
|
|
8
|
+
command
|
|
9
|
+
.description('Show topic aggregation statistics card')
|
|
10
|
+
.addOption(new Option('--env <string>').hideHelp())
|
|
11
|
+
.addOption(new Option('--tenant <string>').hideHelp())
|
|
12
|
+
.option('--json', 'Output as JSON');
|
|
13
|
+
command.action(async (options) => {
|
|
14
|
+
const { environment, tenant } = getTopicContext();
|
|
15
|
+
const outputJson = shouldUseJson(options);
|
|
16
|
+
try {
|
|
17
|
+
const response = await apiClient.getTeamTopicStatistics(environment, tenant);
|
|
18
|
+
if (!response.success) {
|
|
19
|
+
printApiError(outputJson, response.error, 'Failed to get topic statistics');
|
|
20
|
+
}
|
|
21
|
+
const data = response.data;
|
|
22
|
+
if (outputJson) {
|
|
23
|
+
console.log(JSON.stringify({ success: true, data }, null, 2));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
console.log(`\nTopics: ${chalk.green(String(data?.topicTotal ?? 0))}`);
|
|
27
|
+
console.log(`Followed: ${chalk.green(String(data?.followCount ?? 0))}`);
|
|
28
|
+
console.log(`Mentions: ${chalk.green(String(data?.mentionCount ?? 0))}\n`);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
printCatchError(outputJson, error);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return command;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9E,MAAM,UAAU,2BAA2B;IACzC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO;SACJ,WAAW,CAAC,wCAAwC,CAAC;SACrD,SAAS,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;SAClD,SAAS,CAAC,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC;SACrD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAEtC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;QACxD,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC7E,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,gCAAgC,CAAC,CAAC;YAC9E,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC9D,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAO5C,wBAAgB,6BAA6B,IAAI,OAAO,CAuDvD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Command, Option } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import Table from 'cli-table3';
|
|
4
|
+
import { apiClient } from '../../../../core/api/client.js';
|
|
5
|
+
import { shouldUseJson } from '../../../../utils/output.js';
|
|
6
|
+
import { failCommand, getTopicContext, printApiError, printCatchError } from './common.js';
|
|
7
|
+
export function createTeamTopicSuggestCommand() {
|
|
8
|
+
const command = new Command('suggest');
|
|
9
|
+
command
|
|
10
|
+
.description('Suggest existing topics by keyword (avoid split tags)')
|
|
11
|
+
.requiredOption('--keyword <text>', 'Topic name keyword')
|
|
12
|
+
.option('--size <number>', 'Max results', '10')
|
|
13
|
+
.addOption(new Option('--env <string>').hideHelp())
|
|
14
|
+
.addOption(new Option('--tenant <string>').hideHelp())
|
|
15
|
+
.option('--json', 'Output as JSON');
|
|
16
|
+
command.action(async (options) => {
|
|
17
|
+
const { environment, tenant } = getTopicContext();
|
|
18
|
+
const outputJson = shouldUseJson(options);
|
|
19
|
+
const keyword = String(options.keyword ?? '').trim();
|
|
20
|
+
const size = parseInt(options.size, 10) || 10;
|
|
21
|
+
if (!keyword) {
|
|
22
|
+
failCommand(outputJson, 'MISSING_ARGUMENT', '--keyword is required');
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const response = await apiClient.suggestTeamTopics(environment, tenant, keyword, size);
|
|
26
|
+
if (!response.success) {
|
|
27
|
+
printApiError(outputJson, response.error, 'Failed to suggest topics');
|
|
28
|
+
}
|
|
29
|
+
const rows = response.data || [];
|
|
30
|
+
if (outputJson) {
|
|
31
|
+
console.log(JSON.stringify({ success: true, data: rows }, null, 2));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (rows.length === 0) {
|
|
35
|
+
console.log(chalk.yellow('\n⚠ No matching topics\n'));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const table = new Table({
|
|
39
|
+
head: ['TopicId', 'Topic', 'Refs'],
|
|
40
|
+
style: { head: ['cyan'] },
|
|
41
|
+
colWidths: [22, 50, 7],
|
|
42
|
+
wordWrap: true,
|
|
43
|
+
});
|
|
44
|
+
for (const row of rows) {
|
|
45
|
+
table.push([row.topicId || '', row.topicName || '', String(row.refCount ?? 0)]);
|
|
46
|
+
}
|
|
47
|
+
console.log();
|
|
48
|
+
console.log(table.toString());
|
|
49
|
+
console.log();
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
printCatchError(outputJson, error);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return command;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=suggest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/suggest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unfollow.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/unfollow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAM5C,wBAAgB,8BAA8B,IAAI,OAAO,CA6CxD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Command, Option } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { apiClient } from '../../../../core/api/client.js';
|
|
4
|
+
import { shouldUseJson } from '../../../../utils/output.js';
|
|
5
|
+
import { getTopicContext, printApiError, printCatchError } from './common.js';
|
|
6
|
+
export function createTeamTopicUnfollowCommand() {
|
|
7
|
+
const command = new Command('unfollow');
|
|
8
|
+
command
|
|
9
|
+
.description('Unfollow a topic (idempotent)')
|
|
10
|
+
.argument('<topic-id>', 'Topic ID (19-digit Snowflake, passed as string)')
|
|
11
|
+
.option('--dry-run', 'Preview without making the write API call')
|
|
12
|
+
.addOption(new Option('--env <string>').hideHelp())
|
|
13
|
+
.addOption(new Option('--tenant <string>').hideHelp())
|
|
14
|
+
.option('--json', 'Output as JSON');
|
|
15
|
+
command.action(async (topicId, options) => {
|
|
16
|
+
const { environment, tenant } = getTopicContext();
|
|
17
|
+
const outputJson = shouldUseJson(options);
|
|
18
|
+
const dryRun = options.dryRun === true;
|
|
19
|
+
try {
|
|
20
|
+
if (dryRun) {
|
|
21
|
+
const data = { topicId, followed: false };
|
|
22
|
+
if (outputJson) {
|
|
23
|
+
console.log(JSON.stringify({ success: true, dryRun: true, data }, null, 2));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.log(chalk.bold('\n🔍 Dry-Run Mode: No changes will be made\n'));
|
|
27
|
+
console.log(` ${chalk.gray('Topic ID:')} ${topicId}`);
|
|
28
|
+
console.log();
|
|
29
|
+
}
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const response = await apiClient.unfollowTeamTopic(environment, tenant, topicId);
|
|
33
|
+
if (!response.success) {
|
|
34
|
+
printApiError(outputJson, response.error, 'Failed to unfollow topic');
|
|
35
|
+
}
|
|
36
|
+
const data = { topicId, followed: false };
|
|
37
|
+
if (outputJson) {
|
|
38
|
+
console.log(JSON.stringify({ success: true, data }, null, 2));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.log(chalk.green(`\n✓ Unfollowed topic ${topicId}\n`));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
printCatchError(outputJson, error);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return command;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=unfollow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unfollow.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/topics/unfollow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9E,MAAM,UAAU,8BAA8B;IAC5C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO;SACJ,WAAW,CAAC,+BAA+B,CAAC;SAC5C,QAAQ,CAAC,YAAY,EAAE,iDAAiD,CAAC;SACzE,MAAM,CAAC,WAAW,EAAE,2CAA2C,CAAC;SAChE,SAAS,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;SAClD,SAAS,CAAC,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC;SACrD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAEtC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,OAAgC,EAAE,EAAE;QACzE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC;QAEvC,IAAI,CAAC;YACH,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;gBAC1C,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC9E,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;oBACxE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;oBACvD,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACjF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;YACxE,CAAC;YAED,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC1C,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,OAAO,IAAI,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -23,6 +23,8 @@ import { MouldEntityQueryParams, MouldEntitySetStatusRequest, MouldEntityApiResp
|
|
|
23
23
|
import { MouldEntityRegFormRequest, MouldEntityRegFormApiResponse } from '../../types/mould-stock-in.js';
|
|
24
24
|
import { MouldEntityStockOutFormRequest, MouldEntityStockOutFormApiResponse } from '../../types/mould-stock-out.js';
|
|
25
25
|
import { TeamIssueQueryParams, TeamIssueApiResponse, CreateTeamIssueRequest, UpdateTeamIssueRequest, BatchEditTeamIssueRequest, CreateTeamIssueCommentRequest, TeamIssueCommentQueryParams, TeamIssueCommentApiResponse, AddTeamIssueAttachmentRequest, DeleteTeamIssueAttachmentRequest, TeamIssueAttachmentQueryParams, TeamIssueAttachmentApiResponse } from '../../types/team-issue.js';
|
|
26
|
+
import { TeamMentionListQueryParams, TeamMentionListResponse, TeamMentionUnreadCountResponse, TeamMentionReadResponse, TeamMentionReplyResponse, TeamMentionReplyRequest, TeamMentionNotifySetting, TeamMentionApiResponse } from '../../types/team-mention.js';
|
|
27
|
+
import { TeamTopicListQueryParams, TeamTopicPageResult, TeamTopicListRow, TeamTopicDetailQueryParams, TeamTopicDetailResponse, TeamTopicStatisticsResponse, TeamTopicRefRow, TeamTopicSuggestRow, TeamMemberSuggestRow, TeamTopicApiResponse } from '../../types/team-topic.js';
|
|
26
28
|
import { IssueReportRequest, IssueReportApiResponse, IssueListApiResponse, IssueTrackApiResponse, ValidateProjectApiResponse, IssueCloseRequest, IssueCloseApiResponse, IssueReopenRequest, IssueReopenApiResponse } from '../../types/issue-report.js';
|
|
27
29
|
import { TeamWorkLogQueryParams, TeamWorkLogApiResponse, CreateTeamWorkLogRequest, UpdateTeamWorkLogRequest } from '../../types/team-work-log.js';
|
|
28
30
|
import { TeamEmployeeGroupsApiResponse } from '../../types/team-employee-group.js';
|
|
@@ -382,6 +384,71 @@ export declare const apiClient: {
|
|
|
382
384
|
deleteTeamIssue(environment: Environment, tenant: string, teamIssueId: string): Promise<TeamIssueApiResponse>;
|
|
383
385
|
createTeamIssueComment(environment: Environment, tenant: string, data: CreateTeamIssueCommentRequest): Promise<TeamIssueCommentApiResponse>;
|
|
384
386
|
listTeamIssueComments(environment: Environment, tenant: string, params: TeamIssueCommentQueryParams): Promise<TeamIssueCommentApiResponse>;
|
|
387
|
+
/**
|
|
388
|
+
* 「提到我的」分页列表(POST /enterprise/team/mention/list)。
|
|
389
|
+
*
|
|
390
|
+
* `readState` 仅 `UNREAD` 生效,不传 = 全部。响应含当前用户未读总数 `unreadCount`。
|
|
391
|
+
*/
|
|
392
|
+
listTeamMentions(environment: Environment, tenant: string, params?: TeamMentionListQueryParams): Promise<TeamMentionApiResponse<TeamMentionListResponse>>;
|
|
393
|
+
/**
|
|
394
|
+
* 未读提及计数(GET /enterprise/team/mention/unreadCount)。
|
|
395
|
+
*/
|
|
396
|
+
getTeamMentionUnreadCount(environment: Environment, tenant: string): Promise<TeamMentionApiResponse<TeamMentionUnreadCountResponse>>;
|
|
397
|
+
/**
|
|
398
|
+
* 标记提及已读(POST /enterprise/team/mention/read)。
|
|
399
|
+
*/
|
|
400
|
+
markTeamMentionsRead(environment: Environment, tenant: string, mentionIds: string[]): Promise<TeamMentionApiResponse<TeamMentionReadResponse>>;
|
|
401
|
+
/**
|
|
402
|
+
* 回复提及(POST /enterprise/team/mention/reply),生成 reply_of 提及。
|
|
403
|
+
*/
|
|
404
|
+
replyTeamMention(environment: Environment, tenant: string, data: TeamMentionReplyRequest): Promise<TeamMentionApiResponse<TeamMentionReplyResponse>>;
|
|
405
|
+
/**
|
|
406
|
+
* 读取提及邮件通知设置(GET /enterprise/team/mention/notifySetting/get)。
|
|
407
|
+
*/
|
|
408
|
+
getTeamMentionNotifySetting(environment: Environment, tenant: string): Promise<TeamMentionApiResponse<TeamMentionNotifySetting>>;
|
|
409
|
+
/**
|
|
410
|
+
* 保存提及邮件通知设置(POST /enterprise/team/mention/notifySetting/set)。
|
|
411
|
+
*/
|
|
412
|
+
setTeamMentionNotifySetting(environment: Environment, tenant: string, emailEnable: boolean): Promise<TeamMentionApiResponse<TeamMentionNotifySetting>>;
|
|
413
|
+
/**
|
|
414
|
+
* 话题聚合分页列表(POST /enterprise/team/topic/list)。
|
|
415
|
+
*/
|
|
416
|
+
listTeamTopics(environment: Environment, tenant: string, params?: TeamTopicListQueryParams): Promise<TeamTopicApiResponse<TeamTopicPageResult<TeamTopicListRow>>>;
|
|
417
|
+
/**
|
|
418
|
+
* 话题详情(POST /enterprise/team/topic/detail)。
|
|
419
|
+
*/
|
|
420
|
+
getTeamTopicDetail(environment: Environment, tenant: string, params: TeamTopicDetailQueryParams): Promise<TeamTopicApiResponse<TeamTopicDetailResponse>>;
|
|
421
|
+
/**
|
|
422
|
+
* 关注话题(POST /enterprise/team/topic/follow)。幂等。
|
|
423
|
+
*/
|
|
424
|
+
followTeamTopic(environment: Environment, tenant: string, topicId: string): Promise<TeamTopicApiResponse<boolean>>;
|
|
425
|
+
/**
|
|
426
|
+
* 取消关注话题(POST /enterprise/team/topic/unfollow)。幂等。
|
|
427
|
+
*/
|
|
428
|
+
unfollowTeamTopic(environment: Environment, tenant: string, topicId: string): Promise<TeamTopicApiResponse<boolean>>;
|
|
429
|
+
/**
|
|
430
|
+
* 我关注的话题(POST /enterprise/team/topic/myFollowed)。
|
|
431
|
+
*/
|
|
432
|
+
listMyFollowedTeamTopics(environment: Environment, tenant: string, params?: {
|
|
433
|
+
pageNo?: number;
|
|
434
|
+
pageSize?: number;
|
|
435
|
+
}): Promise<TeamTopicApiResponse<TeamTopicPageResult<TeamTopicListRow>>>;
|
|
436
|
+
/**
|
|
437
|
+
* 话题引用项分页(POST /enterprise/team/topic/ref/list)。
|
|
438
|
+
*/
|
|
439
|
+
listTeamTopicRefs(environment: Environment, tenant: string, params: TeamTopicDetailQueryParams): Promise<TeamTopicApiResponse<TeamTopicPageResult<TeamTopicRefRow>>>;
|
|
440
|
+
/**
|
|
441
|
+
* 话题聚合页统计卡(POST /enterprise/team/topic/statistics)。
|
|
442
|
+
*/
|
|
443
|
+
getTeamTopicStatistics(environment: Environment, tenant: string): Promise<TeamTopicApiResponse<TeamTopicStatisticsResponse>>;
|
|
444
|
+
/**
|
|
445
|
+
* 话题联想(POST /enterprise/team/topic/suggest)。
|
|
446
|
+
*/
|
|
447
|
+
suggestTeamTopics(environment: Environment, tenant: string, keyword: string, pageSize?: number): Promise<TeamTopicApiResponse<TeamTopicSuggestRow[]>>;
|
|
448
|
+
/**
|
|
449
|
+
* 成员联想(POST /enterprise/team/member/suggest)。用于写正文前确认姓名/工号。
|
|
450
|
+
*/
|
|
451
|
+
suggestTeamMembers(environment: Environment, tenant: string, keyword: string, pageSize?: number): Promise<TeamTopicApiResponse<TeamMemberSuggestRow[]>>;
|
|
385
452
|
/**
|
|
386
453
|
* Add a single attachment (file) to a team issue.
|
|
387
454
|
*
|