@newpeak/barista-cli 0.2.287 → 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.
Files changed (129) hide show
  1. package/dist/commands/liberica/finance/voucher/update.js +1 -1
  2. package/dist/commands/liberica/finance/voucher/update.js.map +1 -1
  3. package/dist/commands/liberica/issue/submit.d.ts.map +1 -1
  4. package/dist/commands/liberica/issue/submit.js +279 -11
  5. package/dist/commands/liberica/issue/submit.js.map +1 -1
  6. package/dist/commands/liberica/teams/chain-helper.d.ts +26 -0
  7. package/dist/commands/liberica/teams/chain-helper.d.ts.map +1 -0
  8. package/dist/commands/liberica/teams/chain-helper.js +42 -0
  9. package/dist/commands/liberica/teams/chain-helper.js.map +1 -0
  10. package/dist/commands/liberica/teams/index.d.ts.map +1 -1
  11. package/dist/commands/liberica/teams/index.js +6 -0
  12. package/dist/commands/liberica/teams/index.js.map +1 -1
  13. package/dist/commands/liberica/teams/issues/create.d.ts.map +1 -1
  14. package/dist/commands/liberica/teams/issues/create.js +39 -0
  15. package/dist/commands/liberica/teams/issues/create.js.map +1 -1
  16. package/dist/commands/liberica/teams/issues/list.d.ts.map +1 -1
  17. package/dist/commands/liberica/teams/issues/list.js +22 -0
  18. package/dist/commands/liberica/teams/issues/list.js.map +1 -1
  19. package/dist/commands/liberica/teams/issues/update.d.ts.map +1 -1
  20. package/dist/commands/liberica/teams/issues/update.js +32 -1
  21. package/dist/commands/liberica/teams/issues/update.js.map +1 -1
  22. package/dist/commands/liberica/teams/members/index.d.ts +3 -0
  23. package/dist/commands/liberica/teams/members/index.d.ts.map +1 -0
  24. package/dist/commands/liberica/teams/members/index.js +9 -0
  25. package/dist/commands/liberica/teams/members/index.js.map +1 -0
  26. package/dist/commands/liberica/teams/members/suggest.d.ts +3 -0
  27. package/dist/commands/liberica/teams/members/suggest.d.ts.map +1 -0
  28. package/dist/commands/liberica/teams/members/suggest.js +57 -0
  29. package/dist/commands/liberica/teams/members/suggest.js.map +1 -0
  30. package/dist/commands/liberica/teams/mentions/count.d.ts +3 -0
  31. package/dist/commands/liberica/teams/mentions/count.d.ts.map +1 -0
  32. package/dist/commands/liberica/teams/mentions/count.js +55 -0
  33. package/dist/commands/liberica/teams/mentions/count.js.map +1 -0
  34. package/dist/commands/liberica/teams/mentions/index.d.ts +3 -0
  35. package/dist/commands/liberica/teams/mentions/index.d.ts.map +1 -0
  36. package/dist/commands/liberica/teams/mentions/index.js +17 -0
  37. package/dist/commands/liberica/teams/mentions/index.js.map +1 -0
  38. package/dist/commands/liberica/teams/mentions/list.d.ts +3 -0
  39. package/dist/commands/liberica/teams/mentions/list.d.ts.map +1 -0
  40. package/dist/commands/liberica/teams/mentions/list.js +97 -0
  41. package/dist/commands/liberica/teams/mentions/list.js.map +1 -0
  42. package/dist/commands/liberica/teams/mentions/notify-setting.d.ts +3 -0
  43. package/dist/commands/liberica/teams/mentions/notify-setting.d.ts.map +1 -0
  44. package/dist/commands/liberica/teams/mentions/notify-setting.js +119 -0
  45. package/dist/commands/liberica/teams/mentions/notify-setting.js.map +1 -0
  46. package/dist/commands/liberica/teams/mentions/read.d.ts +3 -0
  47. package/dist/commands/liberica/teams/mentions/read.d.ts.map +1 -0
  48. package/dist/commands/liberica/teams/mentions/read.js +144 -0
  49. package/dist/commands/liberica/teams/mentions/read.js.map +1 -0
  50. package/dist/commands/liberica/teams/mentions/reply.d.ts +3 -0
  51. package/dist/commands/liberica/teams/mentions/reply.d.ts.map +1 -0
  52. package/dist/commands/liberica/teams/mentions/reply.js +96 -0
  53. package/dist/commands/liberica/teams/mentions/reply.js.map +1 -0
  54. package/dist/commands/liberica/teams/tasks/attachment-add.d.ts.map +1 -1
  55. package/dist/commands/liberica/teams/tasks/attachment-add.js +6 -0
  56. package/dist/commands/liberica/teams/tasks/attachment-add.js.map +1 -1
  57. package/dist/commands/liberica/teams/tasks/attachment-list.d.ts.map +1 -1
  58. package/dist/commands/liberica/teams/tasks/attachment-list.js +21 -1
  59. package/dist/commands/liberica/teams/tasks/attachment-list.js.map +1 -1
  60. package/dist/commands/liberica/teams/tasks/create.d.ts.map +1 -1
  61. package/dist/commands/liberica/teams/tasks/create.js +53 -0
  62. package/dist/commands/liberica/teams/tasks/create.js.map +1 -1
  63. package/dist/commands/liberica/teams/tasks/update.d.ts.map +1 -1
  64. package/dist/commands/liberica/teams/tasks/update.js +54 -0
  65. package/dist/commands/liberica/teams/tasks/update.js.map +1 -1
  66. package/dist/commands/liberica/teams/topics/common.d.ts +44 -0
  67. package/dist/commands/liberica/teams/topics/common.d.ts.map +1 -0
  68. package/dist/commands/liberica/teams/topics/common.js +135 -0
  69. package/dist/commands/liberica/teams/topics/common.js.map +1 -0
  70. package/dist/commands/liberica/teams/topics/follow.d.ts +3 -0
  71. package/dist/commands/liberica/teams/topics/follow.d.ts.map +1 -0
  72. package/dist/commands/liberica/teams/topics/follow.js +50 -0
  73. package/dist/commands/liberica/teams/topics/follow.js.map +1 -0
  74. package/dist/commands/liberica/teams/topics/followed.d.ts +3 -0
  75. package/dist/commands/liberica/teams/topics/followed.d.ts.map +1 -0
  76. package/dist/commands/liberica/teams/topics/followed.js +44 -0
  77. package/dist/commands/liberica/teams/topics/followed.js.map +1 -0
  78. package/dist/commands/liberica/teams/topics/get.d.ts +3 -0
  79. package/dist/commands/liberica/teams/topics/get.d.ts.map +1 -0
  80. package/dist/commands/liberica/teams/topics/get.js +51 -0
  81. package/dist/commands/liberica/teams/topics/get.js.map +1 -0
  82. package/dist/commands/liberica/teams/topics/index.d.ts +3 -0
  83. package/dist/commands/liberica/teams/topics/index.d.ts.map +1 -0
  84. package/dist/commands/liberica/teams/topics/index.js +23 -0
  85. package/dist/commands/liberica/teams/topics/index.js.map +1 -0
  86. package/dist/commands/liberica/teams/topics/list.d.ts +3 -0
  87. package/dist/commands/liberica/teams/topics/list.d.ts.map +1 -0
  88. package/dist/commands/liberica/teams/topics/list.js +58 -0
  89. package/dist/commands/liberica/teams/topics/list.js.map +1 -0
  90. package/dist/commands/liberica/teams/topics/refs.d.ts +3 -0
  91. package/dist/commands/liberica/teams/topics/refs.d.ts.map +1 -0
  92. package/dist/commands/liberica/teams/topics/refs.js +47 -0
  93. package/dist/commands/liberica/teams/topics/refs.js.map +1 -0
  94. package/dist/commands/liberica/teams/topics/stats.d.ts +3 -0
  95. package/dist/commands/liberica/teams/topics/stats.d.ts.map +1 -0
  96. package/dist/commands/liberica/teams/topics/stats.js +36 -0
  97. package/dist/commands/liberica/teams/topics/stats.js.map +1 -0
  98. package/dist/commands/liberica/teams/topics/suggest.d.ts +3 -0
  99. package/dist/commands/liberica/teams/topics/suggest.d.ts.map +1 -0
  100. package/dist/commands/liberica/teams/topics/suggest.js +57 -0
  101. package/dist/commands/liberica/teams/topics/suggest.js.map +1 -0
  102. package/dist/commands/liberica/teams/topics/unfollow.d.ts +3 -0
  103. package/dist/commands/liberica/teams/topics/unfollow.d.ts.map +1 -0
  104. package/dist/commands/liberica/teams/topics/unfollow.js +50 -0
  105. package/dist/commands/liberica/teams/topics/unfollow.js.map +1 -0
  106. package/dist/core/api/client.d.ts +67 -0
  107. package/dist/core/api/client.d.ts.map +1 -1
  108. package/dist/core/api/client.js +428 -5
  109. package/dist/core/api/client.js.map +1 -1
  110. package/dist/types/issue-report.d.ts +5 -0
  111. package/dist/types/issue-report.d.ts.map +1 -1
  112. package/dist/types/team-issue.d.ts +7 -0
  113. package/dist/types/team-issue.d.ts.map +1 -1
  114. package/dist/types/team-mention.d.ts +67 -0
  115. package/dist/types/team-mention.d.ts.map +1 -0
  116. package/dist/types/team-mention.js +10 -0
  117. package/dist/types/team-mention.js.map +1 -0
  118. package/dist/types/team-task.d.ts +14 -0
  119. package/dist/types/team-task.d.ts.map +1 -1
  120. package/dist/types/team-topic.d.ts +98 -0
  121. package/dist/types/team-topic.d.ts.map +1 -0
  122. package/dist/types/team-topic.js +10 -0
  123. package/dist/types/team-topic.js.map +1 -0
  124. package/dist/utils/enum-dict-mapping.d.ts.map +1 -1
  125. package/dist/utils/enum-dict-mapping.js +6 -0
  126. package/dist/utils/enum-dict-mapping.js.map +1 -1
  127. package/package.json +1 -1
  128. package/skills/barista-cli/data/commands.json +88 -1
  129. package/skills/barista-cli/data/commands.yaml +61 -1
@@ -0,0 +1,97 @@
1
+ import { Command, Option } from 'commander';
2
+ import chalk from 'chalk';
3
+ import Table from 'cli-table3';
4
+ import { configManager } from '../../../../core/config/manager.js';
5
+ import { apiClient } from '../../../../core/api/client.js';
6
+ import { shouldUseJson } from '../../../../utils/output.js';
7
+ function formatRead(read) {
8
+ return read ? '已读' : '未读';
9
+ }
10
+ export function createTeamMentionListCommand() {
11
+ const command = new Command('list');
12
+ command
13
+ .description('List mentions of the current user (提到我的)')
14
+ .option('--unread', 'Only unread mentions')
15
+ .option('--page <number>', 'Page number', '1')
16
+ .option('--size <number>', 'Page size', '20')
17
+ .addOption(new Option('--env <string>').hideHelp())
18
+ .addOption(new Option('--tenant <string>').hideHelp())
19
+ .option('--json', 'Output as JSON');
20
+ command.action(async (options) => {
21
+ const context = configManager.getCurrentContext();
22
+ const environment = context.environment;
23
+ const tenant = context.tenant;
24
+ const outputJson = shouldUseJson(options);
25
+ const page = parseInt(options.page, 10) || 1;
26
+ const size = parseInt(options.size, 10) || 20;
27
+ const readState = options.unread === true ? 'UNREAD' : undefined;
28
+ let response;
29
+ try {
30
+ response = await apiClient.listTeamMentions(environment, tenant, {
31
+ pageNo: page,
32
+ pageSize: size,
33
+ readState,
34
+ });
35
+ }
36
+ catch (error) {
37
+ if (outputJson) {
38
+ console.log(JSON.stringify({
39
+ success: false,
40
+ error: { message: error instanceof Error ? error.message : 'Unknown error' },
41
+ }));
42
+ }
43
+ else {
44
+ console.error(chalk.red(`\n✗ Error: ${error instanceof Error ? error.message : 'Unknown error'}\n`));
45
+ }
46
+ process.exit(1);
47
+ return;
48
+ }
49
+ if (!response.success) {
50
+ if (outputJson) {
51
+ console.log(JSON.stringify({ success: false, error: response.error }, null, 2));
52
+ }
53
+ else {
54
+ console.error(chalk.red(`\n✗ Failed to list mentions: ${response.error?.message || 'Unknown error'}`));
55
+ if (response.error?.code) {
56
+ console.error(chalk.gray(` Error code: ${response.error.code}`));
57
+ }
58
+ console.error();
59
+ }
60
+ process.exit(1);
61
+ return;
62
+ }
63
+ const data = response.data;
64
+ const rows = (data?.rows || []);
65
+ const unreadCount = data?.unreadCount ?? 0;
66
+ if (outputJson) {
67
+ console.log(JSON.stringify({ success: true, data }, null, 2));
68
+ return;
69
+ }
70
+ if (rows.length === 0) {
71
+ console.log(chalk.yellow('\n⚠ No mentions found\n'));
72
+ return;
73
+ }
74
+ const table = new Table({
75
+ head: ['MentionId', 'Type', 'From', 'Source', 'Time', 'Read'],
76
+ style: { head: ['cyan'] },
77
+ colWidths: [22, 16, 18, 40, 20, 8],
78
+ wordWrap: true,
79
+ });
80
+ for (const row of rows) {
81
+ table.push([
82
+ row.mentionId || '',
83
+ row.bizTypeName || row.bizType || '',
84
+ row.fromName || '',
85
+ row.bizTitle || row.bizId || '',
86
+ row.createTimeWrapper || row.createTime || '',
87
+ formatRead(row.read),
88
+ ]);
89
+ }
90
+ console.log();
91
+ console.log(table.toString());
92
+ console.log(chalk.gray(`Unread: ${unreadCount} | Page ${data?.pageNo ?? page} (${data?.totalRows ?? rows.length} total)`));
93
+ console.log();
94
+ });
95
+ return command;
96
+ }
97
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/mentions/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createTeamMentionNotifySettingCommand(): Command;
3
+ //# sourceMappingURL=notify-setting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify-setting.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/mentions/notify-setting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAc5C,wBAAgB,qCAAqC,IAAI,OAAO,CAiH/D"}
@@ -0,0 +1,119 @@
1
+ import { Command, Option } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { configManager } from '../../../../core/config/manager.js';
4
+ import { apiClient } from '../../../../core/api/client.js';
5
+ import { shouldUseJson } from '../../../../utils/output.js';
6
+ function parseEmailEnable(value) {
7
+ const normalized = value.trim().toLowerCase();
8
+ if (normalized === 'true' || normalized === '1')
9
+ return true;
10
+ if (normalized === 'false' || normalized === '0')
11
+ return false;
12
+ return undefined;
13
+ }
14
+ export function createTeamMentionNotifySettingCommand() {
15
+ const command = new Command('notify-setting');
16
+ command
17
+ .description('Get or set mention email notification setting')
18
+ .option('--email-enable <boolean>', 'Enable/disable email notifications: true|false')
19
+ .option('--dry-run', 'Preview without saving the setting')
20
+ .addOption(new Option('--env <string>').hideHelp())
21
+ .addOption(new Option('--tenant <string>').hideHelp())
22
+ .option('--json', 'Output as JSON');
23
+ command.action(async (options) => {
24
+ const context = configManager.getCurrentContext();
25
+ const environment = context.environment;
26
+ const tenant = context.tenant;
27
+ const outputJson = shouldUseJson(options);
28
+ const dryRun = options.dryRun === true;
29
+ const hasEmailEnable = options.emailEnable !== undefined;
30
+ function fail(code, message) {
31
+ if (outputJson) {
32
+ console.log(JSON.stringify({ success: false, error: { code, message } }, null, 2));
33
+ }
34
+ else {
35
+ console.error(chalk.red(`\n✗ ${message}\n`));
36
+ }
37
+ process.exit(1);
38
+ }
39
+ let emailEnable;
40
+ if (hasEmailEnable) {
41
+ emailEnable = parseEmailEnable(String(options.emailEnable));
42
+ if (emailEnable === undefined) {
43
+ fail('INVALID_OPTION', '--email-enable must be true or false');
44
+ }
45
+ }
46
+ try {
47
+ if (!hasEmailEnable) {
48
+ const response = await apiClient.getTeamMentionNotifySetting(environment, tenant);
49
+ if (!response.success) {
50
+ if (outputJson) {
51
+ console.log(JSON.stringify({ success: false, error: response.error }, null, 2));
52
+ }
53
+ else {
54
+ console.error(chalk.red(`\n✗ Failed to get notify setting: ${response.error?.message || 'Unknown error'}`));
55
+ if (response.error?.code) {
56
+ console.error(chalk.gray(` Error code: ${response.error.code}`));
57
+ }
58
+ console.error();
59
+ }
60
+ process.exit(1);
61
+ }
62
+ if (outputJson) {
63
+ console.log(JSON.stringify({ success: true, data: response.data }, null, 2));
64
+ }
65
+ else {
66
+ console.log(`\nEmail notifications: ${chalk.green(String(response.data?.emailEnable ?? true))}\n`);
67
+ }
68
+ return;
69
+ }
70
+ if (dryRun) {
71
+ const data = { emailEnable };
72
+ if (outputJson) {
73
+ console.log(JSON.stringify({ success: true, dryRun: true, data }, null, 2));
74
+ }
75
+ else {
76
+ console.log(chalk.bold('\n🔍 Dry-Run Mode: No changes will be made\n'));
77
+ console.log(` ${chalk.gray('Email notifications:')} ${emailEnable}`);
78
+ console.log();
79
+ }
80
+ return;
81
+ }
82
+ const response = await apiClient.setTeamMentionNotifySetting(environment, tenant, emailEnable);
83
+ if (!response.success) {
84
+ if (outputJson) {
85
+ console.log(JSON.stringify({ success: false, error: response.error }, null, 2));
86
+ }
87
+ else {
88
+ console.error(chalk.red(`\n✗ Failed to save notify setting: ${response.error?.message || 'Unknown error'}`));
89
+ if (response.error?.code) {
90
+ console.error(chalk.gray(` Error code: ${response.error.code}`));
91
+ }
92
+ console.error();
93
+ }
94
+ process.exit(1);
95
+ }
96
+ if (outputJson) {
97
+ console.log(JSON.stringify({ success: true, data: response.data }, null, 2));
98
+ }
99
+ else {
100
+ console.log(chalk.green('\n✓ Notify setting saved'));
101
+ console.log(` ${chalk.gray('Email notifications:')} ${response.data?.emailEnable}\n`);
102
+ }
103
+ }
104
+ catch (error) {
105
+ if (outputJson) {
106
+ console.log(JSON.stringify({
107
+ success: false,
108
+ error: { message: error instanceof Error ? error.message : 'Unknown error' },
109
+ }));
110
+ }
111
+ else {
112
+ console.error(chalk.red(`\n✗ Error: ${error instanceof Error ? error.message : 'Unknown error'}\n`));
113
+ }
114
+ process.exit(1);
115
+ }
116
+ });
117
+ return command;
118
+ }
119
+ //# sourceMappingURL=notify-setting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify-setting.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/mentions/notify-setting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createTeamMentionReadCommand(): Command;
3
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/mentions/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AA2C5C,wBAAgB,4BAA4B,IAAI,OAAO,CAiHtD"}
@@ -0,0 +1,144 @@
1
+ import { Command, Option } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { configManager } from '../../../../core/config/manager.js';
4
+ import { apiClient } from '../../../../core/api/client.js';
5
+ import { shouldUseJson } from '../../../../utils/output.js';
6
+ const ALL_PAGE_SIZE = 100;
7
+ async function collectUnreadMentionIds(environment, tenant) {
8
+ const ids = [];
9
+ const seen = new Set();
10
+ let pageNo = 1;
11
+ for (;;) {
12
+ const response = await apiClient.listTeamMentions(environment, tenant, {
13
+ pageNo,
14
+ pageSize: ALL_PAGE_SIZE,
15
+ readState: 'UNREAD',
16
+ });
17
+ if (!response.success) {
18
+ return { ids, error: response.error };
19
+ }
20
+ const rows = response.data?.rows || [];
21
+ const before = ids.length;
22
+ for (const row of rows) {
23
+ if (row.mentionId && !seen.has(row.mentionId)) {
24
+ seen.add(row.mentionId);
25
+ ids.push(row.mentionId);
26
+ }
27
+ }
28
+ const totalRows = response.data?.totalRows ?? 0;
29
+ const added = ids.length - before;
30
+ if (rows.length === 0 || added === 0 || ids.length >= totalRows) {
31
+ return { ids, unreadCount: response.data?.unreadCount };
32
+ }
33
+ pageNo += 1;
34
+ }
35
+ }
36
+ export function createTeamMentionReadCommand() {
37
+ const command = new Command('read');
38
+ command
39
+ .description('Mark mentions as read (explicit ids or --all unread)')
40
+ .argument('[mention-ids...]', 'Mention IDs to mark as read')
41
+ .option('--all', 'Mark all unread mentions as read')
42
+ .option('--dry-run', 'Preview without making the write API call')
43
+ .addOption(new Option('--env <string>').hideHelp())
44
+ .addOption(new Option('--tenant <string>').hideHelp())
45
+ .option('--json', 'Output as JSON');
46
+ command.action(async (mentionIds, options) => {
47
+ const context = configManager.getCurrentContext();
48
+ const environment = context.environment;
49
+ const tenant = context.tenant;
50
+ const outputJson = shouldUseJson(options);
51
+ const all = options.all === true;
52
+ const dryRun = options.dryRun === true;
53
+ function fail(code, message) {
54
+ if (outputJson) {
55
+ console.log(JSON.stringify({ success: false, error: { code, message } }, null, 2));
56
+ }
57
+ else {
58
+ console.error(chalk.red(`\n✗ ${message}\n`));
59
+ }
60
+ process.exit(1);
61
+ }
62
+ if (!all && mentionIds.length === 0) {
63
+ fail('MISSING_ARGUMENT', 'Provide at least one mention id or use --all');
64
+ }
65
+ try {
66
+ let ids = mentionIds;
67
+ if (all) {
68
+ const collected = await collectUnreadMentionIds(environment, tenant);
69
+ if (collected.error) {
70
+ if (outputJson) {
71
+ console.log(JSON.stringify({ success: false, error: collected.error }, null, 2));
72
+ }
73
+ else {
74
+ console.error(chalk.red(`\n✗ Failed to list unread mentions: ${collected.error.message}\n`));
75
+ }
76
+ process.exit(1);
77
+ }
78
+ ids = collected.ids;
79
+ }
80
+ if (dryRun) {
81
+ const data = { mentionIds: ids, markedCount: ids.length };
82
+ if (outputJson) {
83
+ console.log(JSON.stringify({ success: true, dryRun: true, data }, null, 2));
84
+ }
85
+ else {
86
+ console.log(chalk.bold('\n🔍 Dry-Run Mode: No changes will be made\n'));
87
+ console.log(` Mentions to mark read: ${ids.length}`);
88
+ ids.forEach((id) => console.log(` ${chalk.gray('-')} ${id}`));
89
+ console.log();
90
+ }
91
+ return;
92
+ }
93
+ if (ids.length === 0) {
94
+ const data = { unreadCount: 0, markedCount: 0 };
95
+ if (outputJson) {
96
+ console.log(JSON.stringify({ success: true, data }, null, 2));
97
+ }
98
+ else {
99
+ console.log(chalk.yellow('\n⚠ No unread mentions to mark as read\n'));
100
+ }
101
+ return;
102
+ }
103
+ const response = await apiClient.markTeamMentionsRead(environment, tenant, ids);
104
+ if (!response.success) {
105
+ if (outputJson) {
106
+ console.log(JSON.stringify({ success: false, error: response.error }, null, 2));
107
+ }
108
+ else {
109
+ console.error(chalk.red(`\n✗ Failed to mark mentions read: ${response.error?.message || 'Unknown error'}`));
110
+ if (response.error?.code) {
111
+ console.error(chalk.gray(` Error code: ${response.error.code}`));
112
+ }
113
+ console.error();
114
+ }
115
+ process.exit(1);
116
+ }
117
+ const data = {
118
+ unreadCount: response.data?.unreadCount ?? 0,
119
+ markedCount: ids.length,
120
+ };
121
+ if (outputJson) {
122
+ console.log(JSON.stringify({ success: true, data }, null, 2));
123
+ }
124
+ else {
125
+ console.log(chalk.green(`\n✓ Marked ${data.markedCount} mention(s) as read`));
126
+ console.log(chalk.gray(` Remaining unread: ${data.unreadCount}\n`));
127
+ }
128
+ }
129
+ catch (error) {
130
+ if (outputJson) {
131
+ console.log(JSON.stringify({
132
+ success: false,
133
+ error: { message: error instanceof Error ? error.message : 'Unknown error' },
134
+ }));
135
+ }
136
+ else {
137
+ console.error(chalk.red(`\n✗ Error: ${error instanceof Error ? error.message : 'Unknown error'}\n`));
138
+ }
139
+ process.exit(1);
140
+ }
141
+ });
142
+ return command;
143
+ }
144
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/mentions/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createTeamMentionReplyCommand(): Command;
3
+ //# sourceMappingURL=reply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/mentions/reply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAQ5C,wBAAgB,6BAA6B,IAAI,OAAO,CA+FvD"}
@@ -0,0 +1,96 @@
1
+ import { Command, Option } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { readFileSync } from 'fs';
4
+ import { configManager } from '../../../../core/config/manager.js';
5
+ import { apiClient } from '../../../../core/api/client.js';
6
+ import { shouldUseJson } from '../../../../utils/output.js';
7
+ export function createTeamMentionReplyCommand() {
8
+ const command = new Command('reply');
9
+ command
10
+ .description('Reply to a mention (creates a reply_of mention)')
11
+ .argument('<mention-id>', 'Mention ID to reply to')
12
+ .option('--content <string>', 'Reply content')
13
+ .option('--content-file <path>', 'Read reply content from a UTF-8 file')
14
+ .option('--dry-run', 'Preview without making the write API call')
15
+ .addOption(new Option('--env <string>').hideHelp())
16
+ .addOption(new Option('--tenant <string>').hideHelp())
17
+ .option('--json', 'Output as JSON');
18
+ command.action(async (mentionId, options) => {
19
+ const context = configManager.getCurrentContext();
20
+ const environment = context.environment;
21
+ const tenant = context.tenant;
22
+ const outputJson = shouldUseJson(options);
23
+ const dryRun = options.dryRun === true;
24
+ function fail(code, message) {
25
+ if (outputJson) {
26
+ console.log(JSON.stringify({ success: false, error: { code, message } }, null, 2));
27
+ }
28
+ else {
29
+ console.error(chalk.red(`\n✗ ${message}\n`));
30
+ }
31
+ process.exit(1);
32
+ }
33
+ const content = options.contentFile
34
+ ? readFileSync(options.contentFile, 'utf-8')
35
+ : options.content;
36
+ if (!content || content.trim() === '') {
37
+ fail('MISSING_CONTENT', 'Reply content is required. Use --content or --content-file');
38
+ }
39
+ try {
40
+ if (dryRun) {
41
+ const data = { mentionId, content };
42
+ if (outputJson) {
43
+ console.log(JSON.stringify({ success: true, dryRun: true, data }, null, 2));
44
+ }
45
+ else {
46
+ console.log(chalk.bold('\n🔍 Dry-Run Mode: No changes will be made\n'));
47
+ console.log(` ${chalk.gray('Mention ID:')} ${mentionId}`);
48
+ console.log(` ${chalk.gray('Content:')} ${content}`);
49
+ console.log();
50
+ }
51
+ return;
52
+ }
53
+ const response = await apiClient.replyTeamMention(environment, tenant, {
54
+ mentionId,
55
+ content,
56
+ });
57
+ if (!response.success) {
58
+ if (outputJson) {
59
+ console.log(JSON.stringify({ success: false, error: response.error }, null, 2));
60
+ }
61
+ else {
62
+ console.error(chalk.red(`\n✗ Failed to reply mention: ${response.error?.message || 'Unknown error'}`));
63
+ if (response.error?.code) {
64
+ console.error(chalk.gray(` Error code: ${response.error.code}`));
65
+ }
66
+ console.error();
67
+ }
68
+ process.exit(1);
69
+ }
70
+ if (outputJson) {
71
+ console.log(JSON.stringify({ success: true, data: response.data }, null, 2));
72
+ }
73
+ else {
74
+ console.log(chalk.green('\n✓ Reply mention created'));
75
+ if (response.data?.replyMentionId) {
76
+ console.log(` ${chalk.gray('Reply Mention ID:')} ${response.data.replyMentionId}`);
77
+ }
78
+ console.log();
79
+ }
80
+ }
81
+ catch (error) {
82
+ if (outputJson) {
83
+ console.log(JSON.stringify({
84
+ success: false,
85
+ error: { message: error instanceof Error ? error.message : 'Unknown error' },
86
+ }));
87
+ }
88
+ else {
89
+ console.error(chalk.red(`\n✗ Error: ${error instanceof Error ? error.message : 'Unknown error'}\n`));
90
+ }
91
+ process.exit(1);
92
+ }
93
+ });
94
+ return command;
95
+ }
96
+ //# sourceMappingURL=reply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/mentions/reply.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-add.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/tasks/attachment-add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAY5C,wBAAgB,kCAAkC,IAAI,OAAO,CA8H5D"}
1
+ {"version":3,"file":"attachment-add.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/tasks/attachment-add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAY5C,wBAAgB,kCAAkC,IAAI,OAAO,CAwI5D"}
@@ -12,6 +12,7 @@ export function createTeamTaskAttachmentAddCommand() {
12
12
  .description('Add attachments (uploaded files) to a team task')
13
13
  .argument('<task-id>', 'Task ID (19-digit taskId or taskCode, auto-resolved)')
14
14
  .option('--file-id <fileId>', 'File ID from "barista liberica files upload" (repeatable)', collectFileIds, [])
15
+ .option('--comment-id <commentId>', 'Attach to a specific task comment (optional)')
15
16
  .addOption(new Option('--env <string>').hideHelp())
16
17
  .addOption(new Option('--tenant <string>').hideHelp())
17
18
  .option('--json', 'Output as JSON');
@@ -41,12 +42,17 @@ export function createTeamTaskAttachmentAddCommand() {
41
42
  fail('INVALID_ATTACHMENT_ID', `Invalid file ID: "${fileId}" — must be a positive integer digit string (the fileId returned by "barista liberica files upload").`);
42
43
  }
43
44
  }
45
+ const commentId = (options.commentId || '').trim() || undefined;
46
+ if (commentId && !/^[1-9]\d*$/.test(commentId)) {
47
+ fail('INVALID_COMMENT_ID', `Invalid comment ID: "${commentId}" — must be a positive integer digit string.`);
48
+ }
44
49
  const attachments = [];
45
50
  try {
46
51
  for (const fileId of fileIds) {
47
52
  const response = await apiClient.addTaskAttachment(environment, tenant, {
48
53
  taskId,
49
54
  taskAttachmentId: fileId,
55
+ ...(commentId ? { commentId } : {}),
50
56
  });
51
57
  if (!response.success) {
52
58
  if (outputJson) {
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-add.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/tasks/attachment-add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachment-add.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/tasks/attachment-add.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-list.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/tasks/attachment-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAS5C,wBAAgB,mCAAmC,IAAI,OAAO,CAiG7D"}
1
+ {"version":3,"file":"attachment-list.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/tasks/attachment-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAS5C,wBAAgB,mCAAmC,IAAI,OAAO,CA+H7D"}
@@ -9,6 +9,7 @@ export function createTeamTaskAttachmentListCommand() {
9
9
  command
10
10
  .description('List attachments of a team task')
11
11
  .argument('<task-id>', 'Task ID (19-digit taskId or taskCode, auto-resolved)')
12
+ .option('--comment-id <commentId>', 'Filter attachments by task comment (optional)')
12
13
  .addOption(new Option('--env <string>').hideHelp())
13
14
  .addOption(new Option('--tenant <string>').hideHelp())
14
15
  .option('--json', 'Output as JSON');
@@ -26,8 +27,27 @@ export function createTeamTaskAttachmentListCommand() {
26
27
  }
27
28
  process.exit(1);
28
29
  }
30
+ const commentId = (options.commentId || '').trim() || undefined;
31
+ if (commentId && !/^[1-9]\d*$/.test(commentId)) {
32
+ if (outputJson) {
33
+ console.log(JSON.stringify({
34
+ success: false,
35
+ error: {
36
+ code: 'INVALID_COMMENT_ID',
37
+ message: `Invalid comment ID: "${commentId}" — must be a positive integer digit string.`,
38
+ },
39
+ }, null, 2));
40
+ }
41
+ else {
42
+ console.error(chalk.red(`\n✗ Invalid comment ID: "${commentId}" — must be a positive integer digit string.\n`));
43
+ }
44
+ process.exit(1);
45
+ }
29
46
  try {
30
- const response = await apiClient.listTaskAttachments(environment, tenant, { taskId });
47
+ const response = await apiClient.listTaskAttachments(environment, tenant, {
48
+ taskId,
49
+ ...(commentId ? { commentId } : {}),
50
+ });
31
51
  if (response.success) {
32
52
  const data = response.data;
33
53
  const rows = (Array.isArray(data) ? data : []);