@zhin.js/adapter-slack 4.1.0 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +58 -250
  3. package/adapters/slack.ts +34 -0
  4. package/agent/tools/add_reaction.ts +2 -2
  5. package/agent/tools/archive_channel.ts +2 -2
  6. package/agent/tools/edit_message.ts +5 -4
  7. package/agent/tools/invite_to_channel.ts +2 -2
  8. package/agent/tools/pin_message.ts +2 -2
  9. package/agent/tools/remove_reaction.ts +2 -2
  10. package/agent/tools/set_purpose.ts +2 -2
  11. package/agent/tools/set_topic.ts +2 -2
  12. package/agent/tools/unarchive.ts +2 -2
  13. package/agent/tools/unpin_message.ts +2 -2
  14. package/agent/tools/user_info.ts +2 -2
  15. package/lib/endpoint.d.ts +147 -0
  16. package/lib/endpoint.js +335 -0
  17. package/lib/index.d.ts +11 -0
  18. package/lib/index.js +11 -0
  19. package/lib/markdown-to-mrkdwn.d.ts +9 -0
  20. package/lib/markdown-to-mrkdwn.js +121 -0
  21. package/lib/mrkdwn-to-markdown.d.ts +4 -0
  22. package/lib/{src/mrkdwn-to-markdown.js → mrkdwn-to-markdown.js} +0 -1
  23. package/lib/platform-permit.d.ts +16 -0
  24. package/lib/{src/platform-permit.js → platform-permit.js} +1 -2
  25. package/lib/protocol.d.ts +143 -0
  26. package/lib/protocol.js +225 -0
  27. package/lib/slack-agent-deps.d.ts +28 -0
  28. package/lib/slack-agent-deps.js +30 -0
  29. package/lib/slack-inbound-filter.d.ts +12 -0
  30. package/lib/{src/slack-inbound-filter.js → slack-inbound-filter.js} +0 -1
  31. package/lib/slack-message-ref.d.ts +7 -0
  32. package/lib/{src/slack-message-ref.js → slack-message-ref.js} +0 -1
  33. package/lib/slack-outbound.d.ts +24 -0
  34. package/lib/slack-outbound.js +109 -0
  35. package/lib/slack-reaction.d.ts +1 -0
  36. package/lib/{src/slack-reaction.js → slack-reaction.js} +0 -1
  37. package/lib/slack-response-url.d.ts +5 -0
  38. package/lib/{src/slack-response-url.js → slack-response-url.js} +0 -1
  39. package/lib/webhook.d.ts +14 -0
  40. package/lib/webhook.js +69 -0
  41. package/package.json +41 -20
  42. package/plugin.ts +13 -0
  43. package/schema.json +38 -0
  44. package/src/endpoint.ts +317 -227
  45. package/src/index.ts +62 -66
  46. package/src/markdown-to-mrkdwn.ts +63 -4
  47. package/src/platform-permit.ts +1 -1
  48. package/src/protocol.ts +380 -0
  49. package/src/slack-agent-deps.ts +46 -11
  50. package/src/slack-inbound-filter.ts +1 -1
  51. package/src/slack-outbound.ts +32 -134
  52. package/src/webhook.ts +103 -0
  53. package/lib/agent/tools/add_reaction.js +0 -21
  54. package/lib/agent/tools/add_reaction.js.map +0 -1
  55. package/lib/agent/tools/archive_channel.js +0 -21
  56. package/lib/agent/tools/archive_channel.js.map +0 -1
  57. package/lib/agent/tools/edit_message.js +0 -22
  58. package/lib/agent/tools/edit_message.js.map +0 -1
  59. package/lib/agent/tools/invite_to_channel.js +0 -22
  60. package/lib/agent/tools/invite_to_channel.js.map +0 -1
  61. package/lib/agent/tools/pin_message.js +0 -22
  62. package/lib/agent/tools/pin_message.js.map +0 -1
  63. package/lib/agent/tools/remove_reaction.js +0 -21
  64. package/lib/agent/tools/remove_reaction.js.map +0 -1
  65. package/lib/agent/tools/set_purpose.js +0 -22
  66. package/lib/agent/tools/set_purpose.js.map +0 -1
  67. package/lib/agent/tools/set_topic.js +0 -22
  68. package/lib/agent/tools/set_topic.js.map +0 -1
  69. package/lib/agent/tools/unarchive.js +0 -21
  70. package/lib/agent/tools/unarchive.js.map +0 -1
  71. package/lib/agent/tools/unpin_message.js +0 -22
  72. package/lib/agent/tools/unpin_message.js.map +0 -1
  73. package/lib/agent/tools/user_info.js +0 -28
  74. package/lib/agent/tools/user_info.js.map +0 -1
  75. package/lib/src/adapter.js +0 -62
  76. package/lib/src/adapter.js.map +0 -1
  77. package/lib/src/endpoint.js +0 -312
  78. package/lib/src/endpoint.js.map +0 -1
  79. package/lib/src/event-dispatcher.js +0 -233
  80. package/lib/src/event-dispatcher.js.map +0 -1
  81. package/lib/src/index.js +0 -51
  82. package/lib/src/index.js.map +0 -1
  83. package/lib/src/markdown-to-mrkdwn.js +0 -61
  84. package/lib/src/markdown-to-mrkdwn.js.map +0 -1
  85. package/lib/src/mrkdwn-to-markdown.js.map +0 -1
  86. package/lib/src/platform-permit.js.map +0 -1
  87. package/lib/src/segment-mapper.js +0 -2
  88. package/lib/src/segment-mapper.js.map +0 -1
  89. package/lib/src/signing.js +0 -21
  90. package/lib/src/signing.js.map +0 -1
  91. package/lib/src/slack-agent-deps.js +0 -10
  92. package/lib/src/slack-agent-deps.js.map +0 -1
  93. package/lib/src/slack-inbound-filter.js.map +0 -1
  94. package/lib/src/slack-inbound.js +0 -127
  95. package/lib/src/slack-inbound.js.map +0 -1
  96. package/lib/src/slack-message-ref.js.map +0 -1
  97. package/lib/src/slack-outbound.js +0 -223
  98. package/lib/src/slack-outbound.js.map +0 -1
  99. package/lib/src/slack-reaction.js.map +0 -1
  100. package/lib/src/slack-response-url.js.map +0 -1
  101. package/lib/src/slack-side-events.js +0 -64
  102. package/lib/src/slack-side-events.js.map +0 -1
  103. package/lib/src/transport-http.js +0 -83
  104. package/lib/src/transport-http.js.map +0 -1
  105. package/lib/src/transport-socket.js +0 -68
  106. package/lib/src/transport-socket.js.map +0 -1
  107. package/lib/src/types.js +0 -5
  108. package/lib/src/types.js.map +0 -1
  109. package/plugin.yml +0 -3
  110. package/src/adapter.ts +0 -75
  111. package/src/event-dispatcher.ts +0 -255
  112. package/src/segment-mapper.ts +0 -1
  113. package/src/signing.ts +0 -28
  114. package/src/slack-inbound.ts +0 -140
  115. package/src/slack-side-events.ts +0 -74
  116. package/src/transport-http.ts +0 -95
  117. package/src/transport-socket.ts +0 -77
  118. package/src/types.ts +0 -113
@@ -1,10 +1,9 @@
1
1
  /**
2
- * Slack 出站消息构造mrkdwn + Block Kit + files.uploadV2
2
+ * Slack outboundchat.postMessage + Block Kit + files.uploadV2
3
3
  */
4
- import type { WebClient } from '@slack/web-api';
5
- import type { MessageSegment, SendContent } from 'zhin.js';
6
4
  import type { Logger } from '@zhin.js/logger';
7
5
  import { markdownToMrkdwn, mrkdwnToPlainFallback, splitMrkdwnText } from './markdown-to-mrkdwn.js';
6
+ import { formatOutboundWire, keyboardToBlockKitBlocks } from './protocol.js';
8
7
 
9
8
  export interface SlackOutboundResult {
10
9
  ts: string;
@@ -15,71 +14,27 @@ export interface SlackSendOptions {
15
14
  threadTs?: string;
16
15
  }
17
16
 
17
+ export interface SlackChatClient {
18
+ chat: {
19
+ postMessage(opts: Record<string, unknown>): Promise<{ ts?: string }>;
20
+ update(opts: Record<string, unknown>): Promise<unknown>;
21
+ };
22
+ filesUploadV2?(opts: Record<string, unknown>): Promise<unknown>;
23
+ }
24
+
18
25
  const SLACK_MAX_BLOCKS_PER_MESSAGE = 48;
19
26
 
20
27
  export async function sendSlackContent(
21
- client: WebClient,
22
- content: SendContent,
28
+ client: SlackChatClient,
29
+ content: unknown,
23
30
  opts: SlackSendOptions,
24
31
  logger: Logger,
25
32
  ): Promise<SlackOutboundResult> {
26
- const segments = normalizeContent(content);
27
- let textContent = '';
28
- const blocks: Record<string, unknown>[] = [];
29
- const attachments: Record<string, unknown>[] = [];
30
- const pendingFiles: Array<{ buffer?: Buffer; url?: string; path?: string; name?: string }> = [];
31
-
32
- for (const seg of segments) {
33
- if (typeof seg === 'string') {
34
- textContent += seg;
35
- continue;
36
- }
37
- const { type, data } = seg as MessageSegment;
38
- switch (type) {
39
- case 'text':
40
- textContent += data.text ?? '';
41
- break;
42
- case 'at':
43
- case 'mention':
44
- textContent += `<@${data.id ?? data.target}>`;
45
- break;
46
- case 'channel_mention':
47
- textContent += `<#${data.id}>`;
48
- break;
49
- case 'link':
50
- if (data.text && data.text !== data.url) {
51
- textContent += `<${data.url}|${data.text}>`;
52
- } else {
53
- textContent += `<${data.url}>`;
54
- }
55
- break;
56
- case 'image':
57
- if (data.url) {
58
- attachments.push({ image_url: data.url, title: data.name ?? data.title ?? '' });
59
- } else if (data.media) {
60
- pendingFiles.push(resolveMediaToFile(data.media, data.alt ?? 'image'));
61
- }
62
- break;
63
- case 'audio':
64
- case 'video':
65
- case 'file':
66
- if (data.media) {
67
- pendingFiles.push(resolveMediaToFile(data.media, data.name ?? type));
68
- } else if (data.file || data.url) {
69
- pendingFiles.push({ path: data.file, url: data.url, name: data.name ?? type });
70
- }
71
- break;
72
- case 'keyboard':
73
- blocks.push(...keyboardToBlockKitBlocks(data));
74
- break;
75
- default:
76
- textContent += data.text ?? `[${type}]`;
77
- }
78
- }
79
-
80
- const textDelivery = applyTextMrkdwnBlocks(textContent, blocks);
33
+ const wire = formatOutboundWire(content);
34
+ const blocks = [...wire.blocks];
35
+ const textDelivery = applyTextMrkdwnBlocks(wire.text, blocks);
81
36
 
82
- for (const pf of pendingFiles) {
37
+ for (const pf of wire.files) {
83
38
  try {
84
39
  await uploadFile(client, opts.channel, pf, opts.threadTs, logger);
85
40
  } catch (e) {
@@ -91,39 +46,20 @@ export async function sendSlackContent(
91
46
  channel: opts.channel,
92
47
  threadTs: opts.threadTs,
93
48
  blocks,
94
- attachments,
49
+ attachments: wire.attachments,
95
50
  fallbackText: textDelivery.fallbackText,
96
51
  });
97
52
  }
98
53
 
99
54
  export async function editSlackContent(
100
- client: WebClient,
55
+ client: SlackChatClient,
101
56
  channel: string,
102
57
  ts: string,
103
- content: SendContent,
58
+ content: unknown,
104
59
  ): Promise<void> {
105
- const segments = normalizeContent(content);
106
- let textContent = '';
107
- const blocks: Record<string, unknown>[] = [];
108
-
109
- for (const seg of segments) {
110
- if (typeof seg === 'string') { textContent += seg; continue; }
111
- const { type, data } = seg as MessageSegment;
112
- switch (type) {
113
- case 'text': textContent += data.text ?? ''; break;
114
- case 'at': case 'mention': textContent += `<@${data.id ?? data.target}>`; break;
115
- case 'channel_mention': textContent += `<#${data.id}>`; break;
116
- case 'link':
117
- textContent += data.text && data.text !== data.url ? `<${data.url}|${data.text}>` : `<${data.url}>`;
118
- break;
119
- case 'keyboard':
120
- blocks.push(...keyboardToBlockKitBlocks(data));
121
- break;
122
- default: textContent += data.text ?? `[${type}]`;
123
- }
124
- }
125
-
126
- const textDelivery = applyTextMrkdwnBlocks(textContent, blocks);
60
+ const wire = formatOutboundWire(content);
61
+ const blocks = [...wire.blocks];
62
+ const textDelivery = applyTextMrkdwnBlocks(wire.text, blocks);
127
63
  const payloadBlocks = blocks.slice(0, SLACK_MAX_BLOCKS_PER_MESSAGE);
128
64
 
129
65
  const updateOpts: Record<string, unknown> = {
@@ -132,13 +68,7 @@ export async function editSlackContent(
132
68
  text: textDelivery.fallbackText || ' ',
133
69
  };
134
70
  if (payloadBlocks.length > 0) updateOpts.blocks = payloadBlocks;
135
- await client.chat.update(updateOpts as any);
136
- }
137
-
138
- function normalizeContent(content: SendContent): Array<string | MessageSegment> {
139
- if (typeof content === 'string') return [content];
140
- if (!Array.isArray(content)) return [content as MessageSegment];
141
- return content as Array<string | MessageSegment>;
71
+ await client.chat.update(updateOpts);
142
72
  }
143
73
 
144
74
  function applyTextMrkdwnBlocks(
@@ -163,7 +93,7 @@ function applyTextMrkdwnBlocks(
163
93
  }
164
94
 
165
95
  async function postSlackMessage(
166
- client: WebClient,
96
+ client: SlackChatClient,
167
97
  opts: {
168
98
  channel: string;
169
99
  threadTs?: string;
@@ -182,8 +112,8 @@ async function postSlackMessage(
182
112
  text: fallbackText || 'Message',
183
113
  ...(threadTs ? { thread_ts: threadTs } : {}),
184
114
  ...(attachments.length > 0 ? { attachments } : {}),
185
- } as any);
186
- return { ts: (result as any).ts ?? '' };
115
+ });
116
+ return { ts: result.ts ?? '' };
187
117
  }
188
118
 
189
119
  for (let offset = 0; offset < blocks.length; offset += SLACK_MAX_BLOCKS_PER_MESSAGE) {
@@ -194,8 +124,8 @@ async function postSlackMessage(
194
124
  blocks: chunk,
195
125
  ...(threadTs ? { thread_ts: threadTs } : {}),
196
126
  ...(offset === 0 && attachments.length > 0 ? { attachments } : {}),
197
- } as any);
198
- const ts = (result as any).ts ?? '';
127
+ });
128
+ const ts = result.ts ?? '';
199
129
  if (!firstTs) firstTs = ts;
200
130
  if (!threadTs) threadTs = ts;
201
131
  }
@@ -203,48 +133,14 @@ async function postSlackMessage(
203
133
  return { ts: firstTs };
204
134
  }
205
135
 
206
- function resolveMediaToFile(
207
- media: { kind: string; value: string; mime_type?: string },
208
- name: string,
209
- ): { buffer?: Buffer; url?: string; name: string } {
210
- if (media.kind === 'base64') {
211
- return { buffer: Buffer.from(media.value, 'base64'), name };
212
- }
213
- if (media.kind === 'url') {
214
- return { url: media.value, name };
215
- }
216
- return { url: media.value, name };
217
- }
218
-
219
- /** 每行 keyboard → 独立 actions block(Slack 每 block 最多 5 个按钮) */
220
- export function keyboardToBlockKitBlocks(data: Record<string, unknown>): Record<string, unknown>[] {
221
- const rows = data.rows as Array<Array<Record<string, unknown>>> | undefined;
222
- if (!rows?.length) return [];
223
-
224
- const blocks: Record<string, unknown>[] = [];
225
- for (const row of rows) {
226
- const elements = row.slice(0, 5).map((btn, index) => ({
227
- type: 'button',
228
- text: { type: 'plain_text', text: String(btn.label ?? btn.text ?? 'button').slice(0, 75) },
229
- action_id: String(btn.id ?? btn.action_id ?? `btn_${blocks.length}_${index}`),
230
- ...(btn.value != null ? { value: String(btn.value) } : {}),
231
- ...(btn.style === 'primary' ? { style: 'primary' } : {}),
232
- ...(btn.style === 'danger' ? { style: 'danger' } : {}),
233
- }));
234
- if (elements.length > 0) {
235
- blocks.push({ type: 'actions', elements });
236
- }
237
- }
238
- return blocks;
239
- }
240
-
241
136
  async function uploadFile(
242
- client: WebClient,
137
+ client: SlackChatClient,
243
138
  channel: string,
244
139
  file: { buffer?: Buffer; url?: string; path?: string; name?: string },
245
140
  threadTs?: string,
246
141
  logger?: Logger,
247
142
  ): Promise<void> {
143
+ if (!client.filesUploadV2) return;
248
144
  try {
249
145
  let buffer = file.buffer;
250
146
  if (!buffer && file.path) {
@@ -267,3 +163,5 @@ async function uploadFile(
267
163
  logger?.error('File upload failed:', e);
268
164
  }
269
165
  }
166
+
167
+ export { keyboardToBlockKitBlocks };
package/src/webhook.ts ADDED
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Slack webhook HTTP: signature → parse → admit.
3
+ */
4
+ import type { IncomingMessage, ServerResponse } from 'node:http';
5
+ import type { HttpHost, HttpRouteRegistration } from '@zhin.js/host-http';
6
+ import { formatCompact, getLogger } from '@zhin.js/logger';
7
+ import {
8
+ headerValue,
9
+ readTextBody,
10
+ verifySlackSignature,
11
+ type ResolvedSlackConfig,
12
+ type SlackInteractionPayload,
13
+ type SlackSlashCommand,
14
+ type SlackUrlVerification,
15
+ } from './protocol.js';
16
+
17
+ const logger = getLogger('slack');
18
+
19
+ export interface SlackWebhookHandler {
20
+ readonly config: ResolvedSlackConfig;
21
+ handleEnvelope(body: unknown): void;
22
+ admitInteraction(payload: SlackInteractionPayload): void;
23
+ admitSlashCommand(cmd: SlackSlashCommand): void;
24
+ }
25
+
26
+ export function registerSlackWebhookRoutes(
27
+ http: HttpHost,
28
+ handler: SlackWebhookHandler,
29
+ ): HttpRouteRegistration[] {
30
+ const path = handler.config.webhookPath;
31
+ return [
32
+ http.route('POST', path, async (request, response) => {
33
+ await handleSlackWebhookRequest(request, response, handler);
34
+ }, { summary: 'Slack Events API / Interactivity', tags: ['slack'] }),
35
+ ];
36
+ }
37
+
38
+ export async function handleSlackWebhookRequest(
39
+ request: IncomingMessage,
40
+ response: ServerResponse,
41
+ handler: SlackWebhookHandler,
42
+ ): Promise<void> {
43
+ try {
44
+ const rawBody = await readTextBody(request);
45
+ const timestamp = headerValue(request.headers, 'x-slack-request-timestamp');
46
+ const signature = headerValue(request.headers, 'x-slack-signature');
47
+
48
+ if (!verifySlackSignature(handler.config.signingSecret, rawBody, timestamp, signature)) {
49
+ response.writeHead(401, { 'Content-Type': 'text/plain' });
50
+ response.end('Invalid signature');
51
+ return;
52
+ }
53
+
54
+ const contentType = headerValue(request.headers, 'content-type');
55
+ if (contentType.includes('application/x-www-form-urlencoded')) {
56
+ const params = new URLSearchParams(rawBody);
57
+ const payloadStr = params.get('payload');
58
+ if (payloadStr) {
59
+ response.writeHead(200);
60
+ response.end('');
61
+ handler.admitInteraction(JSON.parse(payloadStr) as SlackInteractionPayload);
62
+ return;
63
+ }
64
+ const body = Object.fromEntries(params) as unknown as SlackSlashCommand;
65
+ if (body.command) {
66
+ response.writeHead(200);
67
+ response.end('');
68
+ handler.admitSlashCommand(body);
69
+ return;
70
+ }
71
+ }
72
+
73
+ let envelope: Record<string, unknown>;
74
+ try {
75
+ envelope = JSON.parse(rawBody) as Record<string, unknown>;
76
+ } catch {
77
+ response.writeHead(200);
78
+ response.end('');
79
+ return;
80
+ }
81
+
82
+ if (envelope.type === 'url_verification') {
83
+ const challenge = (envelope as unknown as SlackUrlVerification).challenge;
84
+ response.writeHead(200, { 'Content-Type': 'application/json' });
85
+ response.end(JSON.stringify({ challenge }));
86
+ return;
87
+ }
88
+
89
+ if (envelope.type === 'event_callback' && envelope.event) {
90
+ response.writeHead(200);
91
+ response.end('');
92
+ handler.handleEnvelope(envelope);
93
+ return;
94
+ }
95
+
96
+ response.writeHead(200);
97
+ response.end('');
98
+ } catch (error) {
99
+ logger.error('Slack webhook error:', error);
100
+ response.writeHead(200);
101
+ response.end('');
102
+ }
103
+ }
@@ -1,21 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { getSlackAgentDeps } from '../../src/slack-agent-deps.js';
4
- export default defineTool({
5
- description: '给 Slack 消息添加表情反应',
6
- inputSchema: z.object({
7
- endpoint_id: z.string().describe('Endpoint 名称'),
8
- channel: z.string().describe('频道 ID'),
9
- timestamp: z.string().describe('消息时间戳'),
10
- emoji: z.string().describe('表情名称(不含冒号)'),
11
- }),
12
- platforms: ['slack'],
13
- tags: ['slack'],
14
- async execute({ endpoint_id, channel, timestamp, emoji }) {
15
- const { getEndpoint } = getSlackAgentDeps();
16
- const endpoint = getEndpoint(endpoint_id);
17
- const success = await endpoint.addReaction(channel, timestamp, emoji);
18
- return { success, message: success ? `已添加反应 :${emoji}:` : '操作失败' };
19
- },
20
- });
21
- //# sourceMappingURL=add_reaction.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add_reaction.js","sourceRoot":"","sources":["../../../agent/tools/add_reaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,eAAe,UAAU,CAKtB;IACD,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;KACzC,CAAC;IACF,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE;QACtD,MAAM,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrE,CAAC;CACF,CAAC,CAAC"}
@@ -1,21 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { platformPermit } from '../../src/platform-permit.js';
4
- import { getSlackAgentDeps } from '../../src/slack-agent-deps.js';
5
- export default defineTool({
6
- description: '归档 Slack 频道',
7
- inputSchema: z.object({
8
- endpoint_id: z.string().describe('Endpoint 名称'),
9
- channel: z.string().describe('频道 ID'),
10
- }),
11
- platforms: ['slack'],
12
- tags: ['slack'],
13
- permissions: [platformPermit('workspace_admin')],
14
- async execute({ endpoint_id, channel }) {
15
- const { getEndpoint } = getSlackAgentDeps();
16
- const endpoint = getEndpoint(endpoint_id);
17
- const success = await endpoint.archiveChannel(channel);
18
- return { success, message: success ? '已归档频道' : '操作失败' };
19
- },
20
- });
21
- //# sourceMappingURL=archive_channel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"archive_channel.js","sourceRoot":"","sources":["../../../agent/tools/archive_channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,eAAe,UAAU,CAGtB;IACD,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,WAAW,EAAE,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;QACpC,MAAM,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1D,CAAC;CACF,CAAC,CAAC"}
@@ -1,22 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { getSlackAgentDeps } from '../../src/slack-agent-deps.js';
4
- export default defineTool({
5
- description: '编辑 Slack 消息',
6
- inputSchema: z.object({
7
- endpoint_id: z.string().describe('Endpoint 名称'),
8
- channel: z.string().describe('频道 ID'),
9
- message_ts: z.string().describe('消息时间戳'),
10
- text: z.string().describe('新的消息文本'),
11
- }),
12
- platforms: ['slack'],
13
- tags: ['slack'],
14
- async execute({ endpoint_id, channel, message_ts, text }) {
15
- const { getAdapter } = getSlackAgentDeps();
16
- await getAdapter().editMessage(endpoint_id, channel, message_ts, [
17
- { type: 'text', data: { text } },
18
- ]);
19
- return { success: true, message: '消息已编辑' };
20
- },
21
- });
22
- //# sourceMappingURL=edit_message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edit_message.js","sourceRoot":"","sources":["../../../agent/tools/edit_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,eAAe,UAAU,CAKtB;IACD,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;KACpC,CAAC;IACF,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE;QACtD,MAAM,EAAE,UAAU,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC3C,MAAM,UAAU,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE;YAC/D,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE;SACjC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC"}
@@ -1,22 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { platformPermit } from '../../src/platform-permit.js';
4
- import { getSlackAgentDeps } from '../../src/slack-agent-deps.js';
5
- export default defineTool({
6
- description: '邀请用户加入 Slack 频道',
7
- inputSchema: z.object({
8
- endpoint_id: z.string().describe('Endpoint 名称'),
9
- channel: z.string().describe('频道 ID'),
10
- users: z.string().describe('用户 ID 列表(逗号分隔)'),
11
- }),
12
- platforms: ['slack'],
13
- tags: ['slack'],
14
- permissions: [platformPermit('channel_manager')],
15
- async execute({ endpoint_id, channel, users }) {
16
- const { getEndpoint } = getSlackAgentDeps();
17
- const endpoint = getEndpoint(endpoint_id);
18
- const success = await endpoint.inviteToChannel(channel, users.split(','));
19
- return { success, message: success ? '已邀请用户加入频道' : '操作失败' };
20
- },
21
- });
22
- //# sourceMappingURL=invite_to_channel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invite_to_channel.js","sourceRoot":"","sources":["../../../agent/tools/invite_to_channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,eAAe,UAAU,CAItB;IACD,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KAC7C,CAAC;IACF,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,WAAW,EAAE,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3C,MAAM,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9D,CAAC;CACF,CAAC,CAAC"}
@@ -1,22 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { platformPermit } from '../../src/platform-permit.js';
4
- import { getSlackAgentDeps } from '../../src/slack-agent-deps.js';
5
- export default defineTool({
6
- description: '置顶 Slack 消息',
7
- inputSchema: z.object({
8
- endpoint_id: z.string().describe('Endpoint 名称'),
9
- channel: z.string().describe('频道 ID'),
10
- timestamp: z.string().describe('消息时间戳'),
11
- }),
12
- platforms: ['slack'],
13
- tags: ['slack'],
14
- permissions: [platformPermit('channel_manager')],
15
- async execute({ endpoint_id, channel, timestamp }) {
16
- const { getEndpoint } = getSlackAgentDeps();
17
- const endpoint = getEndpoint(endpoint_id);
18
- const success = await endpoint.pinMessage(channel, timestamp);
19
- return { success, message: success ? '已置顶消息' : '操作失败' };
20
- },
21
- });
22
- //# sourceMappingURL=pin_message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pin_message.js","sourceRoot":"","sources":["../../../agent/tools/pin_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,eAAe,UAAU,CAItB;IACD,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACxC,CAAC;IACF,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,WAAW,EAAE,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE;QAC/C,MAAM,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC9D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1D,CAAC;CACF,CAAC,CAAC"}
@@ -1,21 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { getSlackAgentDeps } from '../../src/slack-agent-deps.js';
4
- export default defineTool({
5
- description: '移除 Slack 消息上的表情反应',
6
- inputSchema: z.object({
7
- endpoint_id: z.string().describe('Endpoint 名称'),
8
- channel_id: z.string().describe('频道 ID'),
9
- timestamp: z.string().describe('消息时间戳'),
10
- name: z.string().describe('表情名称(如 thumbsup、heart)'),
11
- }),
12
- platforms: ['slack'],
13
- tags: ['slack'],
14
- async execute({ endpoint_id, channel_id, timestamp, name }) {
15
- const { getEndpoint } = getSlackAgentDeps();
16
- const endpoint = getEndpoint(endpoint_id);
17
- const success = await endpoint.removeReaction(channel_id, timestamp, name);
18
- return { success, message: success ? `已移除反应 :${name}:` : '操作失败' };
19
- },
20
- });
21
- //# sourceMappingURL=remove_reaction.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remove_reaction.js","sourceRoot":"","sources":["../../../agent/tools/remove_reaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,eAAe,UAAU,CAKtB;IACD,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KACpD,CAAC;IACF,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE;QACxD,MAAM,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACpE,CAAC;CACF,CAAC,CAAC"}
@@ -1,22 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { platformPermit } from '../../src/platform-permit.js';
4
- import { getSlackAgentDeps } from '../../src/slack-agent-deps.js';
5
- export default defineTool({
6
- description: '设置 Slack 频道的用途/目的',
7
- inputSchema: z.object({
8
- endpoint_id: z.string().describe('Endpoint 名称'),
9
- channel_id: z.string().describe('频道 ID'),
10
- purpose: z.string().describe('频道用途描述'),
11
- }),
12
- platforms: ['slack'],
13
- tags: ['slack'],
14
- permissions: [platformPermit('channel_manager')],
15
- async execute({ endpoint_id, channel_id, purpose }) {
16
- const { getEndpoint } = getSlackAgentDeps();
17
- const endpoint = getEndpoint(endpoint_id);
18
- const success = await endpoint.setChannelPurpose(channel_id, purpose);
19
- return { success, message: success ? '频道用途已更新' : '操作失败' };
20
- },
21
- });
22
- //# sourceMappingURL=set_purpose.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"set_purpose.js","sourceRoot":"","sources":["../../../agent/tools/set_purpose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,eAAe,UAAU,CAItB;IACD,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;KACvC,CAAC;IACF,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,WAAW,EAAE,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE;QAChD,MAAM,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5D,CAAC;CACF,CAAC,CAAC"}
@@ -1,22 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { platformPermit } from '../../src/platform-permit.js';
4
- import { getSlackAgentDeps } from '../../src/slack-agent-deps.js';
5
- export default defineTool({
6
- description: '设置 Slack 频道话题',
7
- inputSchema: z.object({
8
- endpoint_id: z.string().describe('Endpoint 名称'),
9
- channel: z.string().describe('频道 ID'),
10
- topic: z.string().describe('新话题'),
11
- }),
12
- platforms: ['slack'],
13
- tags: ['slack'],
14
- permissions: [platformPermit('channel_manager')],
15
- async execute({ endpoint_id, channel, topic }) {
16
- const { getEndpoint } = getSlackAgentDeps();
17
- const endpoint = getEndpoint(endpoint_id);
18
- const success = await endpoint.setChannelTopic(channel, topic);
19
- return { success, message: success ? '已设置频道话题' : '操作失败' };
20
- },
21
- });
22
- //# sourceMappingURL=set_topic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"set_topic.js","sourceRoot":"","sources":["../../../agent/tools/set_topic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,eAAe,UAAU,CAItB;IACD,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;KAClC,CAAC;IACF,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,WAAW,EAAE,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3C,MAAM,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5D,CAAC;CACF,CAAC,CAAC"}
@@ -1,21 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { platformPermit } from '../../src/platform-permit.js';
4
- import { getSlackAgentDeps } from '../../src/slack-agent-deps.js';
5
- export default defineTool({
6
- description: '恢复已归档的 Slack 频道',
7
- inputSchema: z.object({
8
- endpoint_id: z.string().describe('Endpoint 名称'),
9
- channel_id: z.string().describe('频道 ID'),
10
- }),
11
- platforms: ['slack'],
12
- tags: ['slack'],
13
- permissions: [platformPermit('workspace_admin')],
14
- async execute({ endpoint_id, channel_id }) {
15
- const { getEndpoint } = getSlackAgentDeps();
16
- const endpoint = getEndpoint(endpoint_id);
17
- const success = await endpoint.unarchiveChannel(channel_id);
18
- return { success, message: success ? '频道已恢复' : '操作失败' };
19
- },
20
- });
21
- //# sourceMappingURL=unarchive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unarchive.js","sourceRoot":"","sources":["../../../agent/tools/unarchive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,eAAe,UAAU,CAGtB;IACD,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACzC,CAAC;IACF,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,WAAW,EAAE,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE;QACvC,MAAM,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC5D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1D,CAAC;CACF,CAAC,CAAC"}
@@ -1,22 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { platformPermit } from '../../src/platform-permit.js';
4
- import { getSlackAgentDeps } from '../../src/slack-agent-deps.js';
5
- export default defineTool({
6
- description: '取消 Slack 频道中消息的置顶',
7
- inputSchema: z.object({
8
- endpoint_id: z.string().describe('Endpoint 名称'),
9
- channel_id: z.string().describe('频道 ID'),
10
- timestamp: z.string().describe('消息时间戳'),
11
- }),
12
- platforms: ['slack'],
13
- tags: ['slack'],
14
- permissions: [platformPermit('channel_manager')],
15
- async execute({ endpoint_id, channel_id, timestamp }) {
16
- const { getEndpoint } = getSlackAgentDeps();
17
- const endpoint = getEndpoint(endpoint_id);
18
- const success = await endpoint.unpinMessage(channel_id, timestamp);
19
- return { success, message: success ? '已取消置顶' : '操作失败' };
20
- },
21
- });
22
- //# sourceMappingURL=unpin_message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unpin_message.js","sourceRoot":"","sources":["../../../agent/tools/unpin_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,eAAe,UAAU,CAItB;IACD,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACxC,CAAC;IACF,SAAS,EAAE,CAAC,OAAO,CAAC;IACpB,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,WAAW,EAAE,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE;QAClD,MAAM,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1D,CAAC;CACF,CAAC,CAAC"}
@@ -1,28 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { getSlackAgentDeps } from '../../src/slack-agent-deps.js';
4
- export default defineTool({
5
- description: '查询 Slack 用户详细信息',
6
- inputSchema: z.object({
7
- endpoint_id: z.string().describe('Endpoint 名称'),
8
- user_id: z.string().describe('用户 ID'),
9
- }),
10
- platforms: ['slack'],
11
- tags: ['slack'],
12
- async execute({ endpoint_id, user_id }) {
13
- const { getEndpoint } = getSlackAgentDeps();
14
- const endpoint = getEndpoint(endpoint_id);
15
- const user = await endpoint.getUserInfo(user_id);
16
- return {
17
- id: user.id,
18
- name: user.name,
19
- real_name: user.real_name,
20
- display_name: user.profile?.display_name,
21
- email: user.profile?.email,
22
- is_admin: user.is_admin,
23
- is_bot: user.is_bot,
24
- status_text: user.profile?.status_text,
25
- };
26
- },
27
- });
28
- //# sourceMappingURL=user_info.js.map