@zhin.js/adapter-slack 1.0.78 → 1.1.2
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/CHANGELOG.md +731 -2
- package/PERMITS.md +24 -0
- package/README.md +111 -158
- package/adapters/slack/index.js +40 -0
- package/adapters/slack/index.ts +45 -0
- package/agents/slack/agent.json +20 -0
- package/agents/slack/boundaries.md +3 -0
- package/agents/slack/conventions.md +3 -0
- package/agents/slack/skills/slack-channels/SKILL.md +24 -0
- package/agents/slack/skills/slack-channels/tools/archive_channel/index.js +19 -0
- package/agents/slack/skills/slack-channels/tools/archive_channel/index.ts +21 -0
- package/agents/slack/skills/slack-channels/tools/invite_to_channel/index.js +20 -0
- package/agents/slack/skills/slack-channels/tools/invite_to_channel/index.ts +23 -0
- package/agents/slack/skills/slack-channels/tools/set_purpose/index.js +20 -0
- package/agents/slack/skills/slack-channels/tools/set_purpose/index.ts +23 -0
- package/agents/slack/skills/slack-channels/tools/set_topic/index.js +20 -0
- package/agents/slack/skills/slack-channels/tools/set_topic/index.ts +23 -0
- package/agents/slack/skills/slack-channels/tools/unarchive/index.js +19 -0
- package/agents/slack/skills/slack-channels/tools/unarchive/index.ts +21 -0
- package/agents/slack/skills/slack-channels/tools/user_info/index.js +27 -0
- package/agents/slack/skills/slack-channels/tools/user_info/index.ts +29 -0
- package/agents/slack/skills/slack-messages/SKILL.md +22 -0
- package/agents/slack/skills/slack-messages/tools/add_reaction/index.js +27 -0
- package/agents/slack/skills/slack-messages/tools/add_reaction/index.ts +29 -0
- package/agents/slack/skills/slack-messages/tools/edit_message/index.js +21 -0
- package/agents/slack/skills/slack-messages/tools/edit_message/index.ts +25 -0
- package/agents/slack/skills/slack-messages/tools/pin_message/index.js +20 -0
- package/agents/slack/skills/slack-messages/tools/pin_message/index.ts +23 -0
- package/agents/slack/skills/slack-messages/tools/remove_reaction/index.js +30 -0
- package/agents/slack/skills/slack-messages/tools/remove_reaction/index.ts +32 -0
- package/agents/slack/skills/slack-messages/tools/unpin_message/index.js +20 -0
- package/agents/slack/skills/slack-messages/tools/unpin_message/index.ts +23 -0
- package/agents/slack/system.md +3 -0
- package/commands/slack/endpoint/add/[id]/index.js +3 -0
- package/commands/slack/endpoint/add/[id]/index.ts +3 -0
- package/commands/slack/endpoint/definition.js +19 -0
- package/commands/slack/endpoint/definition.ts +19 -0
- package/commands/slack/endpoint/list/index.js +3 -0
- package/commands/slack/endpoint/list/index.ts +3 -0
- package/commands/slack/endpoint/remove/[id]/index.js +3 -0
- package/commands/slack/endpoint/remove/[id]/index.ts +3 -0
- package/lib/client.d.ts +25 -0
- package/lib/client.js +2 -0
- package/lib/endpoint.d.ts +153 -0
- package/lib/endpoint.js +425 -0
- package/lib/index.d.ts +10 -10
- package/lib/index.js +10 -242
- package/lib/markdown-to-mrkdwn.d.ts +9 -0
- package/lib/markdown-to-mrkdwn.js +121 -0
- package/lib/mrkdwn-to-markdown.d.ts +4 -0
- package/lib/mrkdwn-to-markdown.js +30 -0
- package/lib/platform-permit.d.ts +15 -0
- package/lib/platform-permit.js +43 -0
- package/lib/protocol.d.ts +144 -0
- package/lib/protocol.js +258 -0
- package/lib/side-event-dispatch.d.ts +4 -0
- package/lib/side-event-dispatch.js +45 -0
- package/lib/slack-inbound-filter.d.ts +12 -0
- package/lib/slack-inbound-filter.js +46 -0
- package/lib/slack-message-ref.d.ts +7 -0
- package/lib/slack-message-ref.js +17 -0
- package/lib/slack-outbound.d.ts +24 -0
- package/lib/slack-outbound.js +111 -0
- package/lib/slack-reaction.d.ts +1 -0
- package/lib/slack-reaction.js +26 -0
- package/lib/slack-response-url.d.ts +5 -0
- package/lib/slack-response-url.js +16 -0
- package/lib/slack-runtime-state.d.ts +1 -0
- package/lib/slack-runtime-state.js +6 -0
- package/lib/webhook.d.ts +14 -0
- package/lib/webhook.js +72 -0
- package/package.json +80 -16
- package/plugin.js +19 -0
- package/schema.json +108 -0
- package/src/client.ts +30 -0
- package/src/endpoint.ts +526 -0
- package/src/index.ts +59 -265
- package/src/markdown-to-mrkdwn.ts +117 -0
- package/src/mrkdwn-to-markdown.ts +29 -0
- package/src/platform-permit.ts +59 -0
- package/src/protocol.ts +406 -0
- package/src/side-event-dispatch.ts +54 -0
- package/src/slack-inbound-filter.ts +60 -0
- package/src/slack-message-ref.ts +18 -0
- package/src/slack-outbound.ts +170 -0
- package/src/slack-reaction.ts +23 -0
- package/src/slack-response-url.ts +26 -0
- package/src/slack-runtime-state.ts +7 -0
- package/src/webhook.ts +106 -0
- package/lib/adapter.d.ts +0 -16
- package/lib/adapter.d.ts.map +0 -1
- package/lib/adapter.js +0 -43
- package/lib/adapter.js.map +0 -1
- package/lib/bot.d.ts +0 -106
- package/lib/bot.d.ts.map +0 -1
- package/lib/bot.js +0 -628
- package/lib/bot.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/types.d.ts +0 -17
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js +0 -2
- package/lib/types.js.map +0 -1
- package/plugin.yml +0 -3
- package/skills/slack/SKILL.md +0 -91
- package/src/adapter.ts +0 -52
- package/src/bot.ts +0 -688
- package/src/types.ts +0 -18
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { platformPermission } from '@zhin.js/permission';
|
|
5
|
+
export default defineAgentTool({
|
|
6
|
+
description: '恢复已归档的 Slack 频道',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
channel_id: z.string().describe('频道 ID'),
|
|
9
|
+
}),
|
|
10
|
+
adapter: 'slack',
|
|
11
|
+
tags: ['slack'],
|
|
12
|
+
permissions: [platformPermission('slack', 'workspace_admin')],
|
|
13
|
+
async execute({ channel_id }, context) {
|
|
14
|
+
const client = context.$client;
|
|
15
|
+
await client.conversations.unarchive({ channel: channel_id });
|
|
16
|
+
const success = true;
|
|
17
|
+
return { success, message: success ? '频道已恢复' : '操作失败' };
|
|
18
|
+
},
|
|
19
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermission } from '@zhin.js/permission';
|
|
4
|
+
|
|
5
|
+
export default defineAgentTool<{
|
|
6
|
+
channel_id: string;
|
|
7
|
+
}>({
|
|
8
|
+
description: '恢复已归档的 Slack 频道',
|
|
9
|
+
inputSchema: z.object({
|
|
10
|
+
channel_id: z.string().describe('频道 ID'),
|
|
11
|
+
}),
|
|
12
|
+
adapter: 'slack',
|
|
13
|
+
tags: ['slack'],
|
|
14
|
+
permissions: [platformPermission('slack', 'workspace_admin')],
|
|
15
|
+
async execute({ channel_id }, context) {
|
|
16
|
+
const client = context.$client;
|
|
17
|
+
await client.conversations.unarchive({ channel: channel_id });
|
|
18
|
+
const success = true;
|
|
19
|
+
return { success, message: success ? '频道已恢复' : '操作失败' };
|
|
20
|
+
},
|
|
21
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export default defineAgentTool({
|
|
5
|
+
description: '查询 Slack 用户详细信息',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
user_id: z.string().describe('用户 ID'),
|
|
8
|
+
}),
|
|
9
|
+
adapter: 'slack',
|
|
10
|
+
tags: ['slack'],
|
|
11
|
+
async execute({ user_id }, context) {
|
|
12
|
+
const client = context.$client;
|
|
13
|
+
const user = (await client.users.info({ user: user_id })).user;
|
|
14
|
+
if (!user)
|
|
15
|
+
throw new Error(`Slack 用户不存在: ${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
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import type { SlackUserInfo } from '@zhin.js/adapter-slack';
|
|
4
|
+
|
|
5
|
+
export default defineAgentTool<{
|
|
6
|
+
user_id: string;
|
|
7
|
+
}>({
|
|
8
|
+
description: '查询 Slack 用户详细信息',
|
|
9
|
+
inputSchema: z.object({
|
|
10
|
+
user_id: z.string().describe('用户 ID'),
|
|
11
|
+
}),
|
|
12
|
+
adapter: 'slack',
|
|
13
|
+
tags: ['slack'],
|
|
14
|
+
async execute({ user_id }, context) {
|
|
15
|
+
const client = context.$client;
|
|
16
|
+
const user = (await client.users.info({ user: user_id })).user as SlackUserInfo | undefined;
|
|
17
|
+
if (!user) throw new Error(`Slack 用户不存在: ${user_id}`);
|
|
18
|
+
return {
|
|
19
|
+
id: user.id,
|
|
20
|
+
name: user.name,
|
|
21
|
+
real_name: user.real_name,
|
|
22
|
+
display_name: user.profile?.display_name,
|
|
23
|
+
email: user.profile?.email,
|
|
24
|
+
is_admin: user.is_admin,
|
|
25
|
+
is_bot: user.is_bot,
|
|
26
|
+
status_text: user.profile?.status_text,
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slack-messages
|
|
3
|
+
platforms:
|
|
4
|
+
- slack
|
|
5
|
+
description: Slack 消息编辑、置顶和 reaction 管理能力。
|
|
6
|
+
keywords:
|
|
7
|
+
- "slack"
|
|
8
|
+
- "message"
|
|
9
|
+
- "pin"
|
|
10
|
+
- "reaction"
|
|
11
|
+
- "edit"
|
|
12
|
+
tools:
|
|
13
|
+
- "pin_message"
|
|
14
|
+
- "unpin_message"
|
|
15
|
+
- "add_reaction"
|
|
16
|
+
- "remove_reaction"
|
|
17
|
+
- "edit_message"
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# slack-messages
|
|
21
|
+
|
|
22
|
+
使用稳定频道 ID 与消息时间戳。编辑、置顶和 reaction 变更均遵守 Tool 审批。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { normalizeSlackReactionName } from '@zhin.js/adapter-slack';
|
|
5
|
+
export default defineAgentTool({
|
|
6
|
+
description: '给 Slack 消息添加表情反应',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
channel: z.string().describe('频道 ID'),
|
|
9
|
+
timestamp: z.string().describe('消息时间戳'),
|
|
10
|
+
emoji: z.string().describe('表情名称(不含冒号)'),
|
|
11
|
+
}),
|
|
12
|
+
adapter: 'slack',
|
|
13
|
+
tags: ['slack'],
|
|
14
|
+
async execute({ channel, timestamp, emoji }, context) {
|
|
15
|
+
const client = context.$client;
|
|
16
|
+
const name = normalizeSlackReactionName(emoji);
|
|
17
|
+
try {
|
|
18
|
+
await client.reactions.add({ channel, timestamp, name });
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (error?.data?.error !== 'already_reacted')
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
const success = true;
|
|
25
|
+
return { success, message: success ? `已添加反应 :${emoji}:` : '操作失败' };
|
|
26
|
+
},
|
|
27
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { normalizeSlackReactionName } from '@zhin.js/adapter-slack';
|
|
4
|
+
|
|
5
|
+
export default defineAgentTool<{
|
|
6
|
+
channel: string;
|
|
7
|
+
timestamp: string;
|
|
8
|
+
emoji: string;
|
|
9
|
+
}>({
|
|
10
|
+
description: '给 Slack 消息添加表情反应',
|
|
11
|
+
inputSchema: z.object({
|
|
12
|
+
channel: z.string().describe('频道 ID'),
|
|
13
|
+
timestamp: z.string().describe('消息时间戳'),
|
|
14
|
+
emoji: z.string().describe('表情名称(不含冒号)'),
|
|
15
|
+
}),
|
|
16
|
+
adapter: 'slack',
|
|
17
|
+
tags: ['slack'],
|
|
18
|
+
async execute({ channel, timestamp, emoji }, context) {
|
|
19
|
+
const client = context.$client;
|
|
20
|
+
const name = normalizeSlackReactionName(emoji);
|
|
21
|
+
try {
|
|
22
|
+
await client.reactions.add({ channel, timestamp, name });
|
|
23
|
+
} catch (error) {
|
|
24
|
+
if ((error as { data?: { error?: string } })?.data?.error !== 'already_reacted') throw error;
|
|
25
|
+
}
|
|
26
|
+
const success = true;
|
|
27
|
+
return { success, message: success ? `已添加反应 :${emoji}:` : '操作失败' };
|
|
28
|
+
},
|
|
29
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { editSlackContent } from '@zhin.js/adapter-slack';
|
|
5
|
+
export default defineAgentTool({
|
|
6
|
+
description: '编辑 Slack 消息',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
channel: z.string().describe('频道 ID'),
|
|
9
|
+
message_ts: z.string().describe('消息时间戳'),
|
|
10
|
+
text: z.string().describe('新的消息文本'),
|
|
11
|
+
}),
|
|
12
|
+
adapter: 'slack',
|
|
13
|
+
tags: ['slack'],
|
|
14
|
+
async execute({ channel, message_ts, text }, context) {
|
|
15
|
+
const client = context.$client;
|
|
16
|
+
await editSlackContent(client, channel, message_ts, [
|
|
17
|
+
{ type: 'text', data: { text } },
|
|
18
|
+
]);
|
|
19
|
+
return { success: true, message: '消息已编辑' };
|
|
20
|
+
},
|
|
21
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { editSlackContent } from '@zhin.js/adapter-slack';
|
|
4
|
+
|
|
5
|
+
export default defineAgentTool<{
|
|
6
|
+
channel: string;
|
|
7
|
+
message_ts: string;
|
|
8
|
+
text: string;
|
|
9
|
+
}>({
|
|
10
|
+
description: '编辑 Slack 消息',
|
|
11
|
+
inputSchema: z.object({
|
|
12
|
+
channel: z.string().describe('频道 ID'),
|
|
13
|
+
message_ts: z.string().describe('消息时间戳'),
|
|
14
|
+
text: z.string().describe('新的消息文本'),
|
|
15
|
+
}),
|
|
16
|
+
adapter: 'slack',
|
|
17
|
+
tags: ['slack'],
|
|
18
|
+
async execute({ channel, message_ts, text }, context) {
|
|
19
|
+
const client = context.$client;
|
|
20
|
+
await editSlackContent(client, channel, message_ts, [
|
|
21
|
+
{ type: 'text', data: { text } },
|
|
22
|
+
]);
|
|
23
|
+
return { success: true, message: '消息已编辑' };
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { platformPermission } from '@zhin.js/permission';
|
|
5
|
+
export default defineAgentTool({
|
|
6
|
+
description: '置顶 Slack 消息',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
channel: z.string().describe('频道 ID'),
|
|
9
|
+
timestamp: z.string().describe('消息时间戳'),
|
|
10
|
+
}),
|
|
11
|
+
adapter: 'slack',
|
|
12
|
+
tags: ['slack'],
|
|
13
|
+
permissions: [platformPermission('slack', 'channel_manager')],
|
|
14
|
+
async execute({ channel, timestamp }, context) {
|
|
15
|
+
const client = context.$client;
|
|
16
|
+
await client.pins.add({ channel, timestamp });
|
|
17
|
+
const success = true;
|
|
18
|
+
return { success, message: success ? '已置顶消息' : '操作失败' };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermission } from '@zhin.js/permission';
|
|
4
|
+
|
|
5
|
+
export default defineAgentTool<{
|
|
6
|
+
channel: string;
|
|
7
|
+
timestamp: string;
|
|
8
|
+
}>({
|
|
9
|
+
description: '置顶 Slack 消息',
|
|
10
|
+
inputSchema: z.object({
|
|
11
|
+
channel: z.string().describe('频道 ID'),
|
|
12
|
+
timestamp: z.string().describe('消息时间戳'),
|
|
13
|
+
}),
|
|
14
|
+
adapter: 'slack',
|
|
15
|
+
tags: ['slack'],
|
|
16
|
+
permissions: [platformPermission('slack', 'channel_manager')],
|
|
17
|
+
async execute({ channel, timestamp }, context) {
|
|
18
|
+
const client = context.$client;
|
|
19
|
+
await client.pins.add({ channel, timestamp });
|
|
20
|
+
const success = true;
|
|
21
|
+
return { success, message: success ? '已置顶消息' : '操作失败' };
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { normalizeSlackReactionName } from '@zhin.js/adapter-slack';
|
|
5
|
+
export default defineAgentTool({
|
|
6
|
+
description: '移除 Slack 消息上的表情反应',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
channel_id: z.string().describe('频道 ID'),
|
|
9
|
+
timestamp: z.string().describe('消息时间戳'),
|
|
10
|
+
name: z.string().describe('表情名称(如 thumbsup、heart)'),
|
|
11
|
+
}),
|
|
12
|
+
adapter: 'slack',
|
|
13
|
+
tags: ['slack'],
|
|
14
|
+
async execute({ channel_id, timestamp, name }, context) {
|
|
15
|
+
const client = context.$client;
|
|
16
|
+
try {
|
|
17
|
+
await client.reactions.remove({
|
|
18
|
+
channel: channel_id,
|
|
19
|
+
timestamp,
|
|
20
|
+
name: normalizeSlackReactionName(name),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (error?.data?.error !== 'no_reaction')
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
const success = true;
|
|
28
|
+
return { success, message: success ? `已移除反应 :${name}:` : '操作失败' };
|
|
29
|
+
},
|
|
30
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { normalizeSlackReactionName } from '@zhin.js/adapter-slack';
|
|
4
|
+
|
|
5
|
+
export default defineAgentTool<{
|
|
6
|
+
channel_id: string;
|
|
7
|
+
timestamp: string;
|
|
8
|
+
name: string;
|
|
9
|
+
}>({
|
|
10
|
+
description: '移除 Slack 消息上的表情反应',
|
|
11
|
+
inputSchema: z.object({
|
|
12
|
+
channel_id: z.string().describe('频道 ID'),
|
|
13
|
+
timestamp: z.string().describe('消息时间戳'),
|
|
14
|
+
name: z.string().describe('表情名称(如 thumbsup、heart)'),
|
|
15
|
+
}),
|
|
16
|
+
adapter: 'slack',
|
|
17
|
+
tags: ['slack'],
|
|
18
|
+
async execute({ channel_id, timestamp, name }, context) {
|
|
19
|
+
const client = context.$client;
|
|
20
|
+
try {
|
|
21
|
+
await client.reactions.remove({
|
|
22
|
+
channel: channel_id,
|
|
23
|
+
timestamp,
|
|
24
|
+
name: normalizeSlackReactionName(name),
|
|
25
|
+
});
|
|
26
|
+
} catch (error) {
|
|
27
|
+
if ((error as { data?: { error?: string } })?.data?.error !== 'no_reaction') throw error;
|
|
28
|
+
}
|
|
29
|
+
const success = true;
|
|
30
|
+
return { success, message: success ? `已移除反应 :${name}:` : '操作失败' };
|
|
31
|
+
},
|
|
32
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { platformPermission } from '@zhin.js/permission';
|
|
5
|
+
export default defineAgentTool({
|
|
6
|
+
description: '取消 Slack 频道中消息的置顶',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
channel_id: z.string().describe('频道 ID'),
|
|
9
|
+
timestamp: z.string().describe('消息时间戳'),
|
|
10
|
+
}),
|
|
11
|
+
adapter: 'slack',
|
|
12
|
+
tags: ['slack'],
|
|
13
|
+
permissions: [platformPermission('slack', 'channel_manager')],
|
|
14
|
+
async execute({ channel_id, timestamp }, context) {
|
|
15
|
+
const client = context.$client;
|
|
16
|
+
await client.pins.remove({ channel: channel_id, timestamp });
|
|
17
|
+
const success = true;
|
|
18
|
+
return { success, message: success ? '已取消置顶' : '操作失败' };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineAgentTool } from '@zhin.js/tool';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { platformPermission } from '@zhin.js/permission';
|
|
4
|
+
|
|
5
|
+
export default defineAgentTool<{
|
|
6
|
+
channel_id: string;
|
|
7
|
+
timestamp: string;
|
|
8
|
+
}>({
|
|
9
|
+
description: '取消 Slack 频道中消息的置顶',
|
|
10
|
+
inputSchema: z.object({
|
|
11
|
+
channel_id: z.string().describe('频道 ID'),
|
|
12
|
+
timestamp: z.string().describe('消息时间戳'),
|
|
13
|
+
}),
|
|
14
|
+
adapter: 'slack',
|
|
15
|
+
tags: ['slack'],
|
|
16
|
+
permissions: [platformPermission('slack', 'channel_manager')],
|
|
17
|
+
async execute({ channel_id, timestamp }, context) {
|
|
18
|
+
const client = context.$client;
|
|
19
|
+
await client.pins.remove({ channel: channel_id, timestamp });
|
|
20
|
+
const success = true;
|
|
21
|
+
return { success, message: success ? '已取消置顶' : '操作失败' };
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Generated by build-plugin-runtime-entries.mjs. Do not edit.
|
|
2
|
+
/**
|
|
3
|
+
* `slack endpoint` 命令族:由 @zhin.js/adapter 的 createEndpointCommands 套件生成。
|
|
4
|
+
* commands/slack/endpoint/ 下的 list / add / remove 直接默认导出这三项。
|
|
5
|
+
*/
|
|
6
|
+
import { createEndpointCommands } from 'zhin.js/adapter';
|
|
7
|
+
import { defineCommand } from 'zhin.js/command';
|
|
8
|
+
import { slackRuntimeStateToken } from "../../../lib/slack-runtime-state.js";
|
|
9
|
+
export const slackEndpointCommands = createEndpointCommands({
|
|
10
|
+
adapterKey: 'slack',
|
|
11
|
+
adapterDisplayName: 'Slack',
|
|
12
|
+
fields: [
|
|
13
|
+
{ key: 'token', required: true, env: true, description: 'Bot User OAuth Token(xoxb-...)' },
|
|
14
|
+
{ key: 'signingSecret', env: true, description: '签名密钥(HTTP Events,socketMode: false 必填)' },
|
|
15
|
+
{ key: 'appToken', env: true, description: 'App-Level Token(xapp-...,Socket Mode)' },
|
|
16
|
+
],
|
|
17
|
+
running: (use) => use(slackRuntimeStateToken).endpoints.values(),
|
|
18
|
+
describeEntry: (entry) => `token: ${String(entry.token)}`,
|
|
19
|
+
}, defineCommand);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slack endpoint` 命令族:由 @zhin.js/adapter 的 createEndpointCommands 套件生成。
|
|
3
|
+
* commands/slack/endpoint/ 下的 list / add / remove 直接默认导出这三项。
|
|
4
|
+
*/
|
|
5
|
+
import { createEndpointCommands } from 'zhin.js/adapter';
|
|
6
|
+
import { defineCommand } from 'zhin.js/command';
|
|
7
|
+
import { slackRuntimeStateToken } from '../../../src/slack-runtime-state.js';
|
|
8
|
+
|
|
9
|
+
export const slackEndpointCommands = createEndpointCommands({
|
|
10
|
+
adapterKey: 'slack',
|
|
11
|
+
adapterDisplayName: 'Slack',
|
|
12
|
+
fields: [
|
|
13
|
+
{ key: 'token', required: true, env: true, description: 'Bot User OAuth Token(xoxb-...)' },
|
|
14
|
+
{ key: 'signingSecret', env: true, description: '签名密钥(HTTP Events,socketMode: false 必填)' },
|
|
15
|
+
{ key: 'appToken', env: true, description: 'App-Level Token(xapp-...,Socket Mode)' },
|
|
16
|
+
],
|
|
17
|
+
running: (use) => use(slackRuntimeStateToken).endpoints.values(),
|
|
18
|
+
describeEntry: (entry) => `token: ${String(entry.token)}`,
|
|
19
|
+
}, defineCommand);
|
package/lib/client.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SlackWebClientLike } from './endpoint.js';
|
|
2
|
+
import type { SlackEvent } from './protocol.js';
|
|
3
|
+
/** Slack users.info response fields projected by the bundled tools. */
|
|
4
|
+
export interface SlackUserInfo {
|
|
5
|
+
id?: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
real_name?: string;
|
|
8
|
+
is_admin?: boolean;
|
|
9
|
+
is_bot?: boolean;
|
|
10
|
+
profile?: {
|
|
11
|
+
display_name?: string;
|
|
12
|
+
email?: string;
|
|
13
|
+
status_text?: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export type SlackClientEventMap = Record<string, SlackEvent>;
|
|
17
|
+
declare module '@zhin.js/feature-kit' {
|
|
18
|
+
interface AdapterClientRegistry {
|
|
19
|
+
readonly slack: {
|
|
20
|
+
readonly client: SlackWebClientLike;
|
|
21
|
+
readonly events: SlackClientEventMap;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export declare const slackClient: import("@zhin.js/adapter").EndpointClientToken<SlackWebClientLike, SlackClientEventMap>;
|
package/lib/client.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { Endpoint } from 'zhin.js/adapter';
|
|
2
|
+
import type { EndpointControl, EndpointManagement, EndpointSendRequest } from 'zhin.js/adapter';
|
|
3
|
+
import type { HttpHost } from '@zhin.js/host-http';
|
|
4
|
+
import type { CapabilityId } from 'zhin.js';
|
|
5
|
+
import { type ResolvedSlackConfig, type SlackEvent, type SlackInteractionPayload, type SlackMessageEvent, type SlackSlashCommand } from './protocol.js';
|
|
6
|
+
import { type SlackChatClient } from './slack-outbound.js';
|
|
7
|
+
import { type SlackWebhookHandler } from './webhook.js';
|
|
8
|
+
export interface SlackSocketLike {
|
|
9
|
+
on(event: string, handler: (args: {
|
|
10
|
+
ack: () => Promise<void>;
|
|
11
|
+
body: unknown;
|
|
12
|
+
}) => void | Promise<void>): void;
|
|
13
|
+
start(): Promise<void>;
|
|
14
|
+
disconnect(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export interface SlackWebClientLike extends SlackChatClient {
|
|
17
|
+
auth: {
|
|
18
|
+
test(): Promise<{
|
|
19
|
+
user_id?: string;
|
|
20
|
+
user?: string;
|
|
21
|
+
}>;
|
|
22
|
+
};
|
|
23
|
+
conversations: {
|
|
24
|
+
invite(opts: {
|
|
25
|
+
channel: string;
|
|
26
|
+
users: string;
|
|
27
|
+
}): Promise<unknown>;
|
|
28
|
+
kick(opts: {
|
|
29
|
+
channel: string;
|
|
30
|
+
user: string;
|
|
31
|
+
}): Promise<unknown>;
|
|
32
|
+
setTopic(opts: {
|
|
33
|
+
channel: string;
|
|
34
|
+
topic: string;
|
|
35
|
+
}): Promise<unknown>;
|
|
36
|
+
setPurpose(opts: {
|
|
37
|
+
channel: string;
|
|
38
|
+
purpose: string;
|
|
39
|
+
}): Promise<unknown>;
|
|
40
|
+
archive(opts: {
|
|
41
|
+
channel: string;
|
|
42
|
+
}): Promise<unknown>;
|
|
43
|
+
unarchive(opts: {
|
|
44
|
+
channel: string;
|
|
45
|
+
}): Promise<unknown>;
|
|
46
|
+
rename(opts: {
|
|
47
|
+
channel: string;
|
|
48
|
+
name: string;
|
|
49
|
+
}): Promise<unknown>;
|
|
50
|
+
members(opts: {
|
|
51
|
+
channel: string;
|
|
52
|
+
}): Promise<{
|
|
53
|
+
members?: string[];
|
|
54
|
+
}>;
|
|
55
|
+
info(opts: {
|
|
56
|
+
channel: string;
|
|
57
|
+
}): Promise<{
|
|
58
|
+
channel?: unknown;
|
|
59
|
+
}>;
|
|
60
|
+
list(opts?: {
|
|
61
|
+
types?: string;
|
|
62
|
+
limit?: number;
|
|
63
|
+
cursor?: string;
|
|
64
|
+
exclude_archived?: boolean;
|
|
65
|
+
}): Promise<{
|
|
66
|
+
channels?: unknown[];
|
|
67
|
+
response_metadata?: {
|
|
68
|
+
next_cursor?: string;
|
|
69
|
+
};
|
|
70
|
+
}>;
|
|
71
|
+
};
|
|
72
|
+
users: {
|
|
73
|
+
info(opts: {
|
|
74
|
+
user: string;
|
|
75
|
+
}): Promise<{
|
|
76
|
+
user?: unknown;
|
|
77
|
+
}>;
|
|
78
|
+
list(opts?: {
|
|
79
|
+
limit?: number;
|
|
80
|
+
cursor?: string;
|
|
81
|
+
}): Promise<{
|
|
82
|
+
members?: unknown[];
|
|
83
|
+
response_metadata?: {
|
|
84
|
+
next_cursor?: string;
|
|
85
|
+
};
|
|
86
|
+
}>;
|
|
87
|
+
};
|
|
88
|
+
reactions: {
|
|
89
|
+
add(opts: {
|
|
90
|
+
channel: string;
|
|
91
|
+
timestamp: string;
|
|
92
|
+
name: string;
|
|
93
|
+
}): Promise<unknown>;
|
|
94
|
+
remove(opts: {
|
|
95
|
+
channel: string;
|
|
96
|
+
timestamp: string;
|
|
97
|
+
name: string;
|
|
98
|
+
}): Promise<unknown>;
|
|
99
|
+
};
|
|
100
|
+
pins: {
|
|
101
|
+
add(opts: {
|
|
102
|
+
channel: string;
|
|
103
|
+
timestamp: string;
|
|
104
|
+
}): Promise<unknown>;
|
|
105
|
+
remove(opts: {
|
|
106
|
+
channel: string;
|
|
107
|
+
timestamp: string;
|
|
108
|
+
}): Promise<unknown>;
|
|
109
|
+
};
|
|
110
|
+
chat: SlackChatClient['chat'] & {
|
|
111
|
+
delete(opts: {
|
|
112
|
+
channel: string;
|
|
113
|
+
ts: string;
|
|
114
|
+
}): Promise<unknown>;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export interface SlackEndpointOptions {
|
|
118
|
+
readonly id: CapabilityId;
|
|
119
|
+
readonly config: ResolvedSlackConfig;
|
|
120
|
+
readonly http?: HttpHost;
|
|
121
|
+
readonly createClient?: (token: string) => SlackWebClientLike;
|
|
122
|
+
readonly createSocket?: (opts: {
|
|
123
|
+
readonly appToken: string;
|
|
124
|
+
readonly clientPingTimeout: number;
|
|
125
|
+
}) => SlackSocketLike;
|
|
126
|
+
}
|
|
127
|
+
export declare class SlackEndpoint extends Endpoint<SlackWebClientLike> implements SlackWebhookHandler {
|
|
128
|
+
#private;
|
|
129
|
+
readonly management: EndpointManagement;
|
|
130
|
+
readonly control: EndpointControl;
|
|
131
|
+
constructor(options: SlackEndpointOptions);
|
|
132
|
+
/** Console 展示 / AdapterIndex live name(多 endpoint 时与 entry name 一致)。 */
|
|
133
|
+
get name(): string;
|
|
134
|
+
get client(): SlackWebClientLike;
|
|
135
|
+
get platformUserId(): string | undefined;
|
|
136
|
+
get config(): ResolvedSlackConfig;
|
|
137
|
+
start(): Promise<void>;
|
|
138
|
+
open(): void;
|
|
139
|
+
close(): void;
|
|
140
|
+
stop(): Promise<void>;
|
|
141
|
+
send({ conversation, payload }: EndpointSendRequest): Promise<string>;
|
|
142
|
+
/** Test / internal: admit a message event when open. */
|
|
143
|
+
admit(event: SlackMessageEvent | SlackEvent): void;
|
|
144
|
+
admitInteraction(payload: SlackInteractionPayload): void;
|
|
145
|
+
admitSlashCommand(cmd: SlackSlashCommand): void;
|
|
146
|
+
handleEnvelope(body: unknown): void;
|
|
147
|
+
trackMessageChannel(ts: string, channel: string): void;
|
|
148
|
+
resolveMessageRef(messageId: string, channelHint?: string): {
|
|
149
|
+
channel: string;
|
|
150
|
+
ts: string;
|
|
151
|
+
} | null;
|
|
152
|
+
recallMessage(messageId: string): Promise<void>;
|
|
153
|
+
}
|