dsh-slack 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.en.md +33 -5
- package/README.md +33 -6
- package/lib/config.js +1 -1
- package/lib/index.js +2 -1
- package/lib/socket.js +8 -1
- package/lib/tools.d.ts +2 -0
- package/lib/tools.js +34 -1
- package/package.json +59 -54
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 stardustlc
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.en.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
# dsh-slack
|
|
4
4
|
|
|
5
|
+
[](https://awesome-dsh-plugin.com)
|
|
6
|
+
|
|
5
7
|
DSH (DeepSeek Harness) community plugin: lets the agent communicate with Slack bidirectionally.
|
|
6
8
|
|
|
7
9
|
> **v0.2 scope (two-way)**: v0.1 only did one-way "agent → Slack" notifications; v0.2 adds Socket Mode,
|
|
@@ -12,11 +14,25 @@ DSH (DeepSeek Harness) community plugin: lets the agent communicate with Slack b
|
|
|
12
14
|
## Features
|
|
13
15
|
|
|
14
16
|
- `slack_notify`: send a Markdown text message to a channel (or thread), returning the message `ts`.
|
|
15
|
-
- `slack_channels`: list the channels currently visible to the bot (`conversations.list`).
|
|
16
|
-
- `slack_inbox`: read messages received via Socket Mode (in-memory queue, keeps up to 200).
|
|
17
|
+
- `slack_channels`: list the channels currently visible to the bot (`conversations.list`, paginating through `next_cursor` until complete).
|
|
18
|
+
- `slack_inbox`: read messages received via Socket Mode (in-memory queue, keeps up to 200; deduplicates retries and consumes atomically with `markRead=true`).
|
|
17
19
|
- `slack_reply`: reply to an inbox message as a thread (`chat.postMessage` with `thread_ts`).
|
|
20
|
+
- WebClient instances are cached by `token + slackApiUrl` and rebuilt automatically when configuration changes.
|
|
18
21
|
- Configuration via `cordis.patch.yml`; tokens support environment-variable fallback (`DSH_SLACK_TOKEN` / `DSH_SLACK_APP_TOKEN`).
|
|
19
22
|
|
|
23
|
+
### v0.2.3 improvements
|
|
24
|
+
|
|
25
|
+
- `slack_channels` paginates automatically so large workspaces no longer lose channels after the first page.
|
|
26
|
+
- `slack_inbox` deduplicates Slack's at-least-once event deliveries and drains atomically on `markRead`.
|
|
27
|
+
- WebClient reuse avoids rebuilding clients on every tool call.
|
|
28
|
+
- Pagination has a page cap to prevent loops from a misbehaving `next_cursor`.
|
|
29
|
+
- Error mapping adds `not_authed` / `is_archived` / `msg_too_long` / `ratelimited`.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
## Compatibility
|
|
33
|
+
|
|
34
|
+
Verified against `@deepseek-ai/dsh@0.1.1-rc.2` on 2026-08-26. Built for the cordis patch-bundle plugin model (`cordis.patch.yml` + `dsh.bundle.patch`). No runtime imports of `@deepseek-ai/*` internals.
|
|
35
|
+
|
|
20
36
|
## Installation
|
|
21
37
|
|
|
22
38
|
The plugin runs inside the host process, is installed into the profile via `dsh plugin`, and takes effect after a restart:
|
|
@@ -27,6 +43,15 @@ dsh plugin --profile web add dsh-slack
|
|
|
27
43
|
|
|
28
44
|
After installing, restart your dsh Web service; the four tools `slack_notify` / `slack_channels` / `slack_inbox` / `slack_reply` become visible to the model.
|
|
29
45
|
|
|
46
|
+
## Uninstall
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
dsh plugin --profile web remove dsh-slack
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Then restart the web service. To clean up fully, also remove the plugin entry from your profile `cordis.patch.yml` if you overrode it.
|
|
53
|
+
|
|
54
|
+
|
|
30
55
|
## Configuration
|
|
31
56
|
|
|
32
57
|
Configuration lives in the profile's `cordis.patch.yml`; override this plugin's line by `id: slack` (overriding replaces that line's `config` wholesale — it does not merge). Available options:
|
|
@@ -142,7 +167,10 @@ All error messages are in Chinese, readable by both the model and the user:
|
|
|
142
167
|
- `invalid_auth`: hints to check/regenerate the token.
|
|
143
168
|
- `channel_not_found`: hints the channel name or ID is wrong.
|
|
144
169
|
- `not_in_channel`: hints to invite the bot App into the channel first.
|
|
145
|
-
- `token_revoked` / `account_inactive` / `missing_scope`: hints permission or token expiry, reinstall the App.
|
|
170
|
+
- `token_revoked` / `account_inactive` / `missing_scope` / `not_authed`: hints permission or token expiry, reinstall the App.
|
|
171
|
+
- `is_archived`: hints the channel is archived and cannot receive messages.
|
|
172
|
+
- `msg_too_long`: hints the message exceeds Slack's 40,000-character limit.
|
|
173
|
+
- `ratelimited`: hints to retry after a short wait.
|
|
146
174
|
|
|
147
175
|
## Development and testing
|
|
148
176
|
|
|
@@ -154,7 +182,7 @@ pnpm test # 先 build,再用 node:test 跑 test/*.test.mjs
|
|
|
154
182
|
|
|
155
183
|
Tests need no real token: parameter compilation, config parsing (incl. env fallback), tool registration (4 tools + Chinese error on missing config),
|
|
156
184
|
injecting a fake client to assert `postMessage` arguments (incl. `thread_ts`), output schema pure-JSON validation,
|
|
157
|
-
inbox queue capacity/clear, Socket Mode event parsing (fake event objects), and no-crash on missing appToken.
|
|
185
|
+
inbox queue capacity/clear/deduplication/atomic drain, Socket Mode event parsing (fake event objects), and no-crash on missing appToken.
|
|
158
186
|
|
|
159
187
|
## Known limitations and roadmap
|
|
160
188
|
|
|
@@ -173,4 +201,4 @@ Roadmap: v0.3 plans to introduce interactive components (buttons/modals) and a p
|
|
|
173
201
|
|
|
174
202
|
## License
|
|
175
203
|
|
|
176
|
-
MIT
|
|
204
|
+
MIT
|
package/README.md
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
   
|
|
8
8
|
|
|
9
|
+
[](https://awesome-dsh-plugin.com)
|
|
10
|
+
|
|
9
11
|
|
|
10
12
|
DSH(DeepSeek Harness)社区插件:让 agent 与 Slack 双向通信。
|
|
11
13
|
|
|
@@ -17,11 +19,25 @@ DSH(DeepSeek Harness)社区插件:让 agent 与 Slack 双向通信。
|
|
|
17
19
|
## 功能
|
|
18
20
|
|
|
19
21
|
- `slack_notify`:向指定频道(或线程)发送一条 Markdown 文本消息,返回消息 `ts`。
|
|
20
|
-
- `slack_channels`:列出机器人当前可见的频道(`conversations.list
|
|
21
|
-
- `slack_inbox`:读取通过 Socket Mode 收到的消息(内存队列,最多保留 200
|
|
22
|
+
- `slack_channels`:列出机器人当前可见的频道(`conversations.list`,自动沿 `next_cursor` 翻页拉全)。
|
|
23
|
+
- `slack_inbox`:读取通过 Socket Mode 收到的消息(内存队列,最多保留 200 条;自动去重,`markRead=true` 原子消费)。
|
|
22
24
|
- `slack_reply`:以线程回复形式回复某条收件箱消息(`chat.postMessage` 带 `thread_ts`)。
|
|
25
|
+
- WebClient 按 `token + slackApiUrl` 缓存复用,配置变更时自动重建。
|
|
23
26
|
- 配置走 `cordis.patch.yml`,令牌支持环境变量回退(`DSH_SLACK_TOKEN` / `DSH_SLACK_APP_TOKEN`)。
|
|
24
27
|
|
|
28
|
+
### v0.2.3 优化
|
|
29
|
+
|
|
30
|
+
- `slack_channels` 自动分页:频道很多时不再只返回第一页。
|
|
31
|
+
- `slack_inbox` 去重 + `drain` 原子消费:Slack 重投的事件不会重复入队,`markRead` 期间新到的消息也不会被误清。
|
|
32
|
+
- WebClient 复用:同一 `token + slackApiUrl` 只创建一个客户端,减少重复初始化。
|
|
33
|
+
- 分页增加页数上限,防止异常 `next_cursor` 导致死循环。
|
|
34
|
+
- 错误映射补充 `not_authed` / `is_archived` / `msg_too_long` / `ratelimited`。
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
## 兼容性
|
|
38
|
+
|
|
39
|
+
在 `@deepseek-ai/dsh@0.1.1-rc.2` 上验证(2026-08-26)。遵循 cordis 组合包补丁模型(`cordis.patch.yml` + `dsh.bundle.patch`),运行时不 import 任何 `@deepseek-ai/*` 内部模块。
|
|
40
|
+
|
|
25
41
|
## 安装
|
|
26
42
|
|
|
27
43
|
插件运行在宿主进程内,通过 `dsh plugin` 安装进 profile,重启后生效:
|
|
@@ -98,6 +114,15 @@ export DSH_SLACK_APP_TOKEN=xapp-你的App级令牌
|
|
|
98
114
|
> 未配置 `appToken` 时插件**不会崩溃**:只打印告警,`slack_inbox` 返回空队列(中文提示)。
|
|
99
115
|
> Socket Mode 网络错误由 SDK 自动重连,插件只记录告警、不抛崩。
|
|
100
116
|
|
|
117
|
+
|
|
118
|
+
## 卸载
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
dsh plugin --profile web remove dsh-slack
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
卸载后重启 Web 服务。如需彻底清理,可再手动删除自己 profile `cordis.patch.yml` 中的对应插件行。
|
|
125
|
+
|
|
101
126
|
## 工具清单
|
|
102
127
|
|
|
103
128
|
### `slack_notify`
|
|
@@ -150,7 +175,10 @@ export DSH_SLACK_APP_TOKEN=xapp-你的App级令牌
|
|
|
150
175
|
- `invalid_auth`:提示检查/重新生成 token。
|
|
151
176
|
- `channel_not_found`:提示频道名或频道 ID 错误。
|
|
152
177
|
- `not_in_channel`:提示先把机器人 App 邀请进频道。
|
|
153
|
-
- `token_revoked` / `account_inactive` / `missing_scope`:提示权限或令牌失效,需重新安装 App。
|
|
178
|
+
- `token_revoked` / `account_inactive` / `missing_scope` / `not_authed`:提示权限或令牌失效,需重新安装 App。
|
|
179
|
+
- `is_archived`:提示频道已归档,不能发消息。
|
|
180
|
+
- `msg_too_long`:提示 Slack 单条消息超过 40,000 字符。
|
|
181
|
+
- `ratelimited`:提示请求太频繁,稍后重试。
|
|
154
182
|
|
|
155
183
|
## 开发与测试
|
|
156
184
|
|
|
@@ -162,7 +190,7 @@ pnpm test # 先 build,再用 node:test 跑 test/*.test.mjs
|
|
|
162
190
|
|
|
163
191
|
测试无需真实 token:参数编译、配置解析(含 env 回退)、工具注册(4 个工具 + 缺配置中文报错)、
|
|
164
192
|
注入 fake client 断言 `postMessage` 参数(含 `thread_ts`)、输出 schema 纯 JSON 校验、
|
|
165
|
-
|
|
193
|
+
收件箱队列容量/清空/去重/原子 drain、Socket Mode 事件解析(fake event 对象)、appToken 缺失不崩。
|
|
166
194
|
|
|
167
195
|
## 已知限制与路线图
|
|
168
196
|
|
|
@@ -182,5 +210,4 @@ pnpm test # 先 build,再用 node:test 跑 test/*.test.mjs
|
|
|
182
210
|
|
|
183
211
|
## License
|
|
184
212
|
|
|
185
|
-
MIT
|
|
186
|
-
|
|
213
|
+
MIT
|
package/lib/config.js
CHANGED
|
@@ -27,7 +27,7 @@ export function parseConfig(raw) {
|
|
|
27
27
|
* 解析 token:config.token 优先,其次环境变量 DSH_SLACK_TOKEN。
|
|
28
28
|
*/
|
|
29
29
|
export function resolveToken(config) {
|
|
30
|
-
const fromConfig = config?.token
|
|
30
|
+
const fromConfig = config?.token?.trim() ?? '';
|
|
31
31
|
if (fromConfig)
|
|
32
32
|
return fromConfig;
|
|
33
33
|
return process.env[ENV_TOKEN]?.trim() ?? '';
|
package/lib/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { parseConfig, requireToken, resolveAppToken, resolveToken } from './config.js';
|
|
7
7
|
import { createWebSlackClient } from './slack-client.js';
|
|
8
|
-
import { buildChannelsTool, buildInboxTool, buildNotifyTool, buildReplyTool } from './tools.js';
|
|
8
|
+
import { buildChannelsTool, buildInboxTool, buildNotifyTool, buildHealthTool, buildReplyTool } from './tools.js';
|
|
9
9
|
import { createInboxQueue } from './inbox.js';
|
|
10
10
|
import { startSocketModeClient } from './socket.js';
|
|
11
11
|
export const name = 'dsh-slack';
|
|
@@ -90,4 +90,5 @@ export function apply(ctx, rawConfig) {
|
|
|
90
90
|
ctx.tools.register(buildChannelsTool(deps));
|
|
91
91
|
ctx.tools.register(buildInboxTool(deps));
|
|
92
92
|
ctx.tools.register(buildReplyTool(deps));
|
|
93
|
+
ctx.tools.register(buildHealthTool(deps));
|
|
93
94
|
}
|
package/lib/socket.js
CHANGED
|
@@ -11,14 +11,21 @@ import { parseMessageEvent } from './inbox.js';
|
|
|
11
11
|
export function startSocketModeClient(appToken, handler, warn) {
|
|
12
12
|
const client = new SocketModeClient({ appToken });
|
|
13
13
|
client.on('slack_event', (...args) => {
|
|
14
|
+
const raw = args[0];
|
|
14
15
|
try {
|
|
15
|
-
const message = parseMessageEvent(
|
|
16
|
+
const message = parseMessageEvent(raw);
|
|
16
17
|
if (message !== null)
|
|
17
18
|
handler.onMessage(message);
|
|
18
19
|
}
|
|
19
20
|
catch (error) {
|
|
20
21
|
warn('[dsh-slack] 解析 Socket Mode 事件失败:', error);
|
|
21
22
|
}
|
|
23
|
+
finally {
|
|
24
|
+
// events_api 事件必须 ack,否则 Slack 会重投;重复投递由收件箱 seen 去重兜底。
|
|
25
|
+
if (typeof raw.ack === 'function') {
|
|
26
|
+
void raw.ack().catch(() => { });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
22
29
|
});
|
|
23
30
|
client.on('error', (...args) => {
|
|
24
31
|
warn('[dsh-slack] Socket Mode 连接错误(SDK 会自动重连):', args[0]);
|
package/lib/tools.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export interface ToolDeps {
|
|
|
8
8
|
configProvider: () => SlackConfig | undefined;
|
|
9
9
|
inboxProvider: () => InboxQueue;
|
|
10
10
|
}
|
|
11
|
+
/** 自检工具:检查 token / appToken / 默认频道配置,不发起网络请求。 */
|
|
12
|
+
export declare function buildHealthTool(deps: ToolDeps): ToolDefinition;
|
|
11
13
|
export declare function buildNotifyTool(deps: ToolDeps): ToolDefinition;
|
|
12
14
|
export declare function buildChannelsTool(deps: ToolDeps): ToolDefinition;
|
|
13
15
|
export declare function buildInboxTool(deps: ToolDeps): ToolDefinition;
|
package/lib/tools.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { compileParameters } from './compile.js';
|
|
2
|
-
import { resolveDefaultChannel } from './config.js';
|
|
2
|
+
import { resolveAppToken, resolveDefaultChannel, resolveToken } from './config.js';
|
|
3
3
|
import { assertChannel, assertText, assertThreadTs, mapSlackError } from './slack-client.js';
|
|
4
4
|
const NOTIFY_OUTPUT_SCHEMA = {
|
|
5
5
|
type: 'object',
|
|
@@ -58,6 +58,39 @@ function clampLimit(value) {
|
|
|
58
58
|
return 10;
|
|
59
59
|
return Math.min(50, Math.max(1, Math.trunc(value)));
|
|
60
60
|
}
|
|
61
|
+
/** 自检工具:检查 token / appToken / 默认频道配置,不发起网络请求。 */
|
|
62
|
+
export function buildHealthTool(deps) {
|
|
63
|
+
return {
|
|
64
|
+
name: 'slack_health',
|
|
65
|
+
description: 'dsh-slack 自检:检查 botToken / appToken / 默认频道配置是否就绪(不发起网络请求)。遇到问题时先运行本工具定位。',
|
|
66
|
+
parameters: compileParameters({}),
|
|
67
|
+
output: {
|
|
68
|
+
schema: { type: 'object', additionalProperties: true },
|
|
69
|
+
render: (_args, value) => {
|
|
70
|
+
const rec = (value ?? {});
|
|
71
|
+
const rawChecks = Array.isArray(rec.checks) ? rec.checks : [];
|
|
72
|
+
const lines = ['dsh-slack 自检' + (rec.ok === true ? ':正常。' : ':发现问题。')];
|
|
73
|
+
for (const item of rawChecks) {
|
|
74
|
+
const c = (item ?? {});
|
|
75
|
+
lines.push('- ' + String(c.name) + ':' + (c.ok === true ? '✅ ' + String(c.detail ?? '') : '❌ ' + String(c.detail ?? '')));
|
|
76
|
+
}
|
|
77
|
+
return [textBlock(lines.join('\n'))];
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
async execute() {
|
|
81
|
+
const config = deps.configProvider();
|
|
82
|
+
const checks = [];
|
|
83
|
+
const token = resolveToken(config);
|
|
84
|
+
checks.push({ name: 'botToken', ok: token !== '', detail: token !== '' ? '已配置' : '未配置:请填 token 或环境变量(发送/频道工具需要)' });
|
|
85
|
+
const appToken = resolveAppToken(config);
|
|
86
|
+
checks.push({ name: 'appToken', ok: true, detail: appToken !== '' ? '已配置(Socket Mode 收件箱可用)' : '未配置(收件箱功能不可用,通知不受影响)' });
|
|
87
|
+
const defaultChannel = resolveDefaultChannel(config);
|
|
88
|
+
checks.push({ name: '默认频道', ok: true, detail: defaultChannel !== '' ? defaultChannel : '未配置(发送时必须显式给 channel)' });
|
|
89
|
+
const ok = token !== '';
|
|
90
|
+
return { ok, plugin: 'dsh-slack', checks };
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
61
94
|
export function buildNotifyTool(deps) {
|
|
62
95
|
const defaultChannel = resolveDefaultChannel(deps.configProvider());
|
|
63
96
|
const channelDescription = defaultChannel
|
package/package.json
CHANGED
|
@@ -1,54 +1,59 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "dsh-slack",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "DSH 社区插件:Slack 通知/桥接(v0.2 支持 Socket Mode 双向:收件箱 + 线程回复)",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./lib/index.js",
|
|
7
|
-
"types": "./lib/index.d.ts",
|
|
8
|
-
"exports": {
|
|
9
|
-
".": {
|
|
10
|
-
"types": "./lib/index.d.ts",
|
|
11
|
-
"default": "./lib/index.js"
|
|
12
|
-
},
|
|
13
|
-
"./package.json": "./package.json",
|
|
14
|
-
"./cordis.patch.yml": "./cordis.patch.yml"
|
|
15
|
-
},
|
|
16
|
-
"files": [
|
|
17
|
-
"lib",
|
|
18
|
-
"cordis.patch.yml",
|
|
19
|
-
"README.md"
|
|
20
|
-
],
|
|
21
|
-
"license": "MIT",
|
|
22
|
-
"dsh": {
|
|
23
|
-
"bundle": {
|
|
24
|
-
"patch": "./cordis.patch.yml"
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
|
|
54
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "dsh-slack",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "DSH 社区插件:Slack 通知/桥接(v0.2 支持 Socket Mode 双向:收件箱 + 线程回复)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./lib/index.js",
|
|
7
|
+
"types": "./lib/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./lib/index.d.ts",
|
|
11
|
+
"default": "./lib/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./package.json": "./package.json",
|
|
14
|
+
"./cordis.patch.yml": "./cordis.patch.yml"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"lib",
|
|
18
|
+
"cordis.patch.yml",
|
|
19
|
+
"README.md"
|
|
20
|
+
],
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"dsh": {
|
|
23
|
+
"bundle": {
|
|
24
|
+
"patch": "./cordis.patch.yml"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc -p tsconfig.json",
|
|
29
|
+
"test": "pnpm run build && node --test \"test/*.test.mjs\"",
|
|
30
|
+
"prepublishOnly": "pnpm run build",
|
|
31
|
+
"test:protocol": "node test/protocol-acceptance.mjs"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@slack/socket-mode": "^3.0.0",
|
|
35
|
+
"@slack/web-api": "^8.0.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^24.0.0",
|
|
39
|
+
"typescript": "^5.7.3"
|
|
40
|
+
},
|
|
41
|
+
"repository": {
|
|
42
|
+
"url": "git+https://github.com/STARDUSTLC666/dsh-slack.git",
|
|
43
|
+
"type": "git"
|
|
44
|
+
},
|
|
45
|
+
"bugs": {
|
|
46
|
+
"url": "https://github.com/STARDUSTLC666/dsh-slack/issues"
|
|
47
|
+
},
|
|
48
|
+
"homepage": "https://github.com/STARDUSTLC666/dsh-slack#readme",
|
|
49
|
+
"author": "stardustlc",
|
|
50
|
+
"keywords": [
|
|
51
|
+
"dsh-plugin",
|
|
52
|
+
"deepseek-harness",
|
|
53
|
+
"dsh"
|
|
54
|
+
],
|
|
55
|
+
"packageManager": "pnpm@11.7.0",
|
|
56
|
+
"engines": {
|
|
57
|
+
"node": ">=22"
|
|
58
|
+
}
|
|
59
|
+
}
|