golembot 0.4.0 → 0.6.0-beta.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.
- package/README.md +33 -22
- package/README.zh-CN.md +33 -22
- package/dist/channel.d.ts +8 -1
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +8 -0
- package/dist/channel.js.map +1 -1
- package/dist/channels/slack.d.ts +12 -0
- package/dist/channels/slack.d.ts.map +1 -0
- package/dist/channels/slack.js +74 -0
- package/dist/channels/slack.js.map +1 -0
- package/dist/channels/telegram.d.ts +13 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/channels/telegram.js +64 -0
- package/dist/channels/telegram.js.map +1 -0
- package/dist/gateway.d.ts +8 -0
- package/dist/gateway.d.ts.map +1 -1
- package/dist/gateway.js +122 -10
- package/dist/gateway.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/workspace.d.ts +26 -0
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +5 -0
- package/dist/workspace.js.map +1 -1
- package/package.json +11 -1
- package/skills/im-adapter/SKILL.md +25 -4
package/README.md
CHANGED
|
@@ -17,11 +17,15 @@
|
|
|
17
17
|
|
|
18
18
|
<p align="center"><strong>Your Coding Agent is trapped in a terminal. GolemBot sets it free.</strong></p>
|
|
19
19
|
|
|
20
|
+
<p align="center">
|
|
21
|
+
📖 <a href="https://0xranx.github.io/golembot/"><strong>Documentation & Guides → 0xranx.github.io/golembot</strong></a>
|
|
22
|
+
</p>
|
|
23
|
+
|
|
20
24
|
---
|
|
21
25
|
|
|
22
26
|
Cursor, Claude Code, OpenCode, Codex — these Coding Agents can already write code, run scripts, analyze data, and reason through complex tasks. But they're stuck in an IDE or a terminal window.
|
|
23
27
|
|
|
24
|
-
**GolemBot gives them a body.** One command connects your Coding Agent to Feishu, DingTalk, WeCom, or any HTTP client. Or embed
|
|
28
|
+
**GolemBot gives them a body.** One command connects your Coding Agent to Slack, Telegram, Feishu, DingTalk, WeCom, or any HTTP client. Write a custom adapter to plug in email, Discord, GitHub Issues, or any other message source. Or embed into your own product with 5 lines of code. No AI framework, no prompt engineering — the agent you already have *is* the brain.
|
|
25
29
|
|
|
26
30
|
## Run Your Coding Agent Everywhere
|
|
27
31
|
|
|
@@ -29,7 +33,7 @@ Cursor, Claude Code, OpenCode, Codex — these Coding Agents can already write c
|
|
|
29
33
|
|
|
30
34
|
```bash
|
|
31
35
|
golembot init -e claude-code -n my-bot
|
|
32
|
-
golembot gateway #
|
|
36
|
+
golembot gateway # Slack, Telegram, Feishu, DingTalk, WeCom
|
|
33
37
|
```
|
|
34
38
|
|
|
35
39
|
Your colleagues @ the bot in group chat. It can write code, analyze files, answer questions — because behind it is a real Coding Agent, not a thin API wrapper.
|
|
@@ -74,21 +78,22 @@ golembot gateway # start IM + HTTP service
|
|
|
74
78
|
## Architecture
|
|
75
79
|
|
|
76
80
|
```
|
|
77
|
-
Feishu / DingTalk / WeCom / HTTP API
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
│
|
|
83
|
-
│
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
81
|
+
Slack / Telegram / Feishu / DingTalk / WeCom / HTTP API
|
|
82
|
+
Custom Adapters (email, Discord, GitHub Issues, ...)
|
|
83
|
+
│
|
|
84
|
+
▼
|
|
85
|
+
┌─────────────────────────┐
|
|
86
|
+
│ Gateway Service │
|
|
87
|
+
│ (Channel adapters + │
|
|
88
|
+
│ HTTP service) │
|
|
89
|
+
└────────────┬────────────┘
|
|
90
|
+
│
|
|
91
|
+
createAssistant()
|
|
92
|
+
│
|
|
93
|
+
┌───────┬───────┬───────┐
|
|
94
|
+
▼ ▼ ▼ ▼
|
|
95
|
+
Cursor Claude OpenCode Codex
|
|
96
|
+
Code
|
|
92
97
|
```
|
|
93
98
|
|
|
94
99
|
## Engine Comparison
|
|
@@ -110,19 +115,25 @@ name: my-assistant
|
|
|
110
115
|
engine: claude-code
|
|
111
116
|
|
|
112
117
|
channels:
|
|
118
|
+
slack:
|
|
119
|
+
botToken: ${SLACK_BOT_TOKEN}
|
|
120
|
+
appToken: ${SLACK_APP_TOKEN}
|
|
121
|
+
telegram:
|
|
122
|
+
botToken: ${TELEGRAM_BOT_TOKEN}
|
|
113
123
|
feishu:
|
|
114
124
|
appId: ${FEISHU_APP_ID}
|
|
115
125
|
appSecret: ${FEISHU_APP_SECRET}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
126
|
+
# Custom adapter — local file or npm package
|
|
127
|
+
my-email:
|
|
128
|
+
_adapter: ./adapters/email-adapter.js
|
|
129
|
+
token: ${EMAIL_TOKEN}
|
|
119
130
|
|
|
120
131
|
gateway:
|
|
121
132
|
port: 3000
|
|
122
133
|
token: ${GOLEM_TOKEN}
|
|
123
134
|
```
|
|
124
135
|
|
|
125
|
-
Sensitive fields support `${ENV_VAR}` references.
|
|
136
|
+
Sensitive fields support `${ENV_VAR}` references. Custom channel adapters can be local `.js`/`.mjs` files or npm packages — [see the adapter guide](https://0xranx.github.io/golembot/api/channel-adapter).
|
|
126
137
|
|
|
127
138
|
## Skill System
|
|
128
139
|
|
|
@@ -159,7 +170,7 @@ git clone https://github.com/0xranx/golembot.git
|
|
|
159
170
|
cd golembot
|
|
160
171
|
pnpm install
|
|
161
172
|
pnpm run build
|
|
162
|
-
pnpm run test # Unit tests (
|
|
173
|
+
pnpm run test # Unit tests (718+)
|
|
163
174
|
pnpm run e2e:opencode # End-to-end tests (OpenCode)
|
|
164
175
|
pnpm run e2e:codex # End-to-end tests (Codex)
|
|
165
176
|
```
|
package/README.zh-CN.md
CHANGED
|
@@ -17,11 +17,15 @@
|
|
|
17
17
|
|
|
18
18
|
<p align="center"><strong>你的 Coding Agent 被困在终端里。GolemBot 把它释放出来。</strong></p>
|
|
19
19
|
|
|
20
|
+
<p align="center">
|
|
21
|
+
📖 <a href="https://0xranx.github.io/golembot/"><strong>文档与指南 → 0xranx.github.io/golembot</strong></a>
|
|
22
|
+
</p>
|
|
23
|
+
|
|
20
24
|
---
|
|
21
25
|
|
|
22
26
|
Cursor、Claude Code、OpenCode、Codex —— 这些 Coding Agent 已经能写代码、跑脚本、分析数据、进行复杂推理。但它们被困在 IDE 或终端窗口里。
|
|
23
27
|
|
|
24
|
-
**GolemBot 给它们一个身体。** 一条命令就能把你的 Coding Agent
|
|
28
|
+
**GolemBot 给它们一个身体。** 一条命令就能把你的 Coding Agent 接入 Slack、Telegram、飞书、钉钉、企业微信,或任何 HTTP 客户端。写一个自定义 Adapter 即可接入邮件、Discord、GitHub Issue 等任意消息来源。也可以 5 行代码嵌入你自己的产品。不需要 AI 框架,不需要 prompt 工程 —— 你已有的 Agent 就是大脑。
|
|
25
29
|
|
|
26
30
|
## 让你的 Coding Agent 跑在任何地方
|
|
27
31
|
|
|
@@ -29,7 +33,7 @@ Cursor、Claude Code、OpenCode、Codex —— 这些 Coding Agent 已经能写
|
|
|
29
33
|
|
|
30
34
|
```bash
|
|
31
35
|
golembot init -e claude-code -n my-bot
|
|
32
|
-
golembot gateway #
|
|
36
|
+
golembot gateway # Slack、Telegram、飞书、钉钉、企业微信
|
|
33
37
|
```
|
|
34
38
|
|
|
35
39
|
同事在群里 @ 机器人,它能写代码、分析文件、回答问题 —— 因为背后是一个真正的 Coding Agent,不是套壳 API。
|
|
@@ -74,21 +78,22 @@ golembot gateway # 启动 IM + HTTP 服务
|
|
|
74
78
|
## 架构
|
|
75
79
|
|
|
76
80
|
```
|
|
77
|
-
飞书 / 钉钉 / 企业微信 / HTTP API
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
│
|
|
83
|
-
│
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
81
|
+
Slack / Telegram / 飞书 / 钉钉 / 企业微信 / HTTP API
|
|
82
|
+
自定义 Adapter(邮件、Discord、GitHub Issue……)
|
|
83
|
+
│
|
|
84
|
+
▼
|
|
85
|
+
┌─────────────────────────┐
|
|
86
|
+
│ Gateway 服务 │
|
|
87
|
+
│ (通道适配器 + │
|
|
88
|
+
│ HTTP 服务) │
|
|
89
|
+
└────────────┬────────────┘
|
|
90
|
+
│
|
|
91
|
+
createAssistant()
|
|
92
|
+
│
|
|
93
|
+
┌───────┬───────┬───────┐
|
|
94
|
+
▼ ▼ ▼ ▼
|
|
95
|
+
Cursor Claude OpenCode Codex
|
|
96
|
+
Code
|
|
92
97
|
```
|
|
93
98
|
|
|
94
99
|
## 引擎对比
|
|
@@ -110,19 +115,25 @@ name: my-assistant
|
|
|
110
115
|
engine: claude-code
|
|
111
116
|
|
|
112
117
|
channels:
|
|
118
|
+
slack:
|
|
119
|
+
botToken: ${SLACK_BOT_TOKEN}
|
|
120
|
+
appToken: ${SLACK_APP_TOKEN}
|
|
121
|
+
telegram:
|
|
122
|
+
botToken: ${TELEGRAM_BOT_TOKEN}
|
|
113
123
|
feishu:
|
|
114
124
|
appId: ${FEISHU_APP_ID}
|
|
115
125
|
appSecret: ${FEISHU_APP_SECRET}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
126
|
+
# 自定义 Adapter —— 本地文件或 npm 包
|
|
127
|
+
my-email:
|
|
128
|
+
_adapter: ./adapters/email-adapter.js
|
|
129
|
+
token: ${EMAIL_TOKEN}
|
|
119
130
|
|
|
120
131
|
gateway:
|
|
121
132
|
port: 3000
|
|
122
133
|
token: ${GOLEM_TOKEN}
|
|
123
134
|
```
|
|
124
135
|
|
|
125
|
-
敏感字段支持 `${ENV_VAR}`
|
|
136
|
+
敏感字段支持 `${ENV_VAR}` 引用环境变量。自定义通道 Adapter 可以是本地 `.js`/`.mjs` 文件或 npm 包 —— [查看 Adapter 指南](https://0xranx.github.io/golembot/zh/api/channel-adapter)。
|
|
126
137
|
|
|
127
138
|
## Skill 系统
|
|
128
139
|
|
|
@@ -159,7 +170,7 @@ git clone https://github.com/0xranx/golembot.git
|
|
|
159
170
|
cd golembot
|
|
160
171
|
pnpm install
|
|
161
172
|
pnpm run build
|
|
162
|
-
pnpm run test # 单元测试 (
|
|
173
|
+
pnpm run test # 单元测试 (718+)
|
|
163
174
|
pnpm run e2e:opencode # 端到端测试(OpenCode)
|
|
164
175
|
pnpm run e2e:codex # 端到端测试(Codex)
|
|
165
176
|
```
|
package/dist/channel.d.ts
CHANGED
|
@@ -9,7 +9,9 @@ export interface ChannelMessage {
|
|
|
9
9
|
}
|
|
10
10
|
export interface ChannelAdapter {
|
|
11
11
|
readonly name: string;
|
|
12
|
-
|
|
12
|
+
/** Optional: override the default 4000-char message split limit for this channel. */
|
|
13
|
+
readonly maxMessageLength?: number;
|
|
14
|
+
start(onMessage: (msg: ChannelMessage) => void | Promise<void>): Promise<void>;
|
|
13
15
|
reply(msg: ChannelMessage, text: string): Promise<void>;
|
|
14
16
|
stop(): Promise<void>;
|
|
15
17
|
}
|
|
@@ -19,4 +21,9 @@ export declare function buildSessionKey(msg: ChannelMessage): string;
|
|
|
19
21
|
* Handles common IM @mention formats: `@BotName`, `<at user_id="xxx">BotName</at>` etc.
|
|
20
22
|
*/
|
|
21
23
|
export declare function stripMention(text: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Detect whether `text` contains an @mention of `botName`.
|
|
26
|
+
* Handles `@BotName` and XML-style `<at ...>BotName</at>`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function detectMention(text: string, botName: string): boolean;
|
|
22
29
|
//# sourceMappingURL=channel.d.ts.map
|
package/dist/channel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,IAAI,GAAG,OAAO,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,IAAI,GAAG,OAAO,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,KAAK,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAGpE"}
|
package/dist/channel.js
CHANGED
|
@@ -11,4 +11,12 @@ export function stripMention(text) {
|
|
|
11
11
|
.replace(/@\S+/g, '')
|
|
12
12
|
.trim();
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Detect whether `text` contains an @mention of `botName`.
|
|
16
|
+
* Handles `@BotName` and XML-style `<at ...>BotName</at>`.
|
|
17
|
+
*/
|
|
18
|
+
export function detectMention(text, botName) {
|
|
19
|
+
const escaped = botName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
20
|
+
return new RegExp(`@${escaped}(?!\\w)|<at[^>]*>${escaped}<\\/at>`, 'i').test(text);
|
|
21
|
+
}
|
|
14
22
|
//# sourceMappingURL=channel.js.map
|
package/dist/channel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,eAAe,CAAC,GAAmB;IACjD,OAAO,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;SACnC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe;IACzD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC/D,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,oBAAoB,OAAO,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ChannelAdapter, ChannelMessage } from '../channel.js';
|
|
2
|
+
import type { SlackChannelConfig } from '../workspace.js';
|
|
3
|
+
export declare class SlackAdapter implements ChannelAdapter {
|
|
4
|
+
readonly name = "slack";
|
|
5
|
+
private config;
|
|
6
|
+
private app;
|
|
7
|
+
constructor(config: SlackChannelConfig);
|
|
8
|
+
start(onMessage: (msg: ChannelMessage) => void): Promise<void>;
|
|
9
|
+
reply(msg: ChannelMessage, text: string): Promise<void>;
|
|
10
|
+
stop(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=slack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../src/channels/slack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,qBAAa,YAAa,YAAW,cAAc;IACjD,QAAQ,CAAC,IAAI,WAAW;IACxB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,GAAG,CAAM;gBAEL,MAAM,EAAE,kBAAkB;IAIhC,KAAK,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAsD9D,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAM5B"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export class SlackAdapter {
|
|
2
|
+
name = 'slack';
|
|
3
|
+
config;
|
|
4
|
+
app;
|
|
5
|
+
constructor(config) {
|
|
6
|
+
this.config = config;
|
|
7
|
+
}
|
|
8
|
+
async start(onMessage) {
|
|
9
|
+
let boltModule;
|
|
10
|
+
try {
|
|
11
|
+
boltModule = await import('@slack/bolt');
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
throw new Error('Slack adapter requires @slack/bolt. Install it: npm install @slack/bolt');
|
|
15
|
+
}
|
|
16
|
+
const { App } = boltModule;
|
|
17
|
+
this.app = new App({
|
|
18
|
+
token: this.config.botToken,
|
|
19
|
+
appToken: this.config.appToken,
|
|
20
|
+
socketMode: true,
|
|
21
|
+
});
|
|
22
|
+
// Handle DM messages (channel_type === 'im')
|
|
23
|
+
this.app.message(async ({ message }) => {
|
|
24
|
+
if (message.subtype)
|
|
25
|
+
return; // ignore edits, bot messages, etc.
|
|
26
|
+
if (message.channel_type !== 'im')
|
|
27
|
+
return; // group messages handled via app_mention
|
|
28
|
+
if (!message.text)
|
|
29
|
+
return;
|
|
30
|
+
onMessage({
|
|
31
|
+
channelType: 'slack',
|
|
32
|
+
senderId: message.user,
|
|
33
|
+
chatId: message.channel,
|
|
34
|
+
chatType: 'dm',
|
|
35
|
+
text: message.text,
|
|
36
|
+
raw: message,
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
// Handle group @mention events
|
|
40
|
+
this.app.event('app_mention', async ({ event }) => {
|
|
41
|
+
if (!event.text)
|
|
42
|
+
return;
|
|
43
|
+
// Strip <@BOT_ID> prefix(es)
|
|
44
|
+
const text = event.text.replace(/<@[A-Z0-9]+>/g, '').trim();
|
|
45
|
+
if (!text)
|
|
46
|
+
return;
|
|
47
|
+
onMessage({
|
|
48
|
+
channelType: 'slack',
|
|
49
|
+
senderId: event.user,
|
|
50
|
+
chatId: event.channel,
|
|
51
|
+
chatType: 'group',
|
|
52
|
+
text,
|
|
53
|
+
raw: event,
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
await this.app.start();
|
|
57
|
+
console.log(`[slack] Socket Mode connection established`);
|
|
58
|
+
}
|
|
59
|
+
async reply(msg, text) {
|
|
60
|
+
if (!this.app)
|
|
61
|
+
return;
|
|
62
|
+
await this.app.client.chat.postMessage({
|
|
63
|
+
channel: msg.chatId,
|
|
64
|
+
text,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async stop() {
|
|
68
|
+
if (this.app) {
|
|
69
|
+
await this.app.stop();
|
|
70
|
+
this.app = null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=slack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/channels/slack.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,OAAO,CAAC;IAChB,MAAM,CAAqB;IAC3B,GAAG,CAAM;IAEjB,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAwC;QAClD,IAAI,UAAe,CAAC;QACpB,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;YACjB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC3B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QAEH,6CAA6C;QAC7C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,EAAO,EAAE,EAAE;YAC1C,IAAI,OAAO,CAAC,OAAO;gBAAE,OAAO,CAAC,mCAAmC;YAChE,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI;gBAAE,OAAO,CAAC,yCAAyC;YACpF,IAAI,CAAC,OAAO,CAAC,IAAI;gBAAE,OAAO;YAE1B,SAAS,CAAC;gBACR,WAAW,EAAE,OAAO;gBACpB,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,MAAM,EAAE,OAAO,CAAC,OAAO;gBACvB,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,GAAG,EAAE,OAAO;aACb,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,+BAA+B;QAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,KAAK,EAAO,EAAE,EAAE;YACrD,IAAI,CAAC,KAAK,CAAC,IAAI;gBAAE,OAAO;YACxB,6BAA6B;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5D,IAAI,CAAC,IAAI;gBAAE,OAAO;YAElB,SAAS,CAAC;gBACR,WAAW,EAAE,OAAO;gBACpB,QAAQ,EAAE,KAAK,CAAC,IAAI;gBACpB,MAAM,EAAE,KAAK,CAAC,OAAO;gBACrB,QAAQ,EAAE,OAAO;gBACjB,IAAI;gBACJ,GAAG,EAAE,KAAK;aACX,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAmB,EAAE,IAAY;QAC3C,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO;QACtB,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YACrC,OAAO,EAAE,GAAG,CAAC,MAAM;YACnB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ChannelAdapter, ChannelMessage } from '../channel.js';
|
|
2
|
+
import type { TelegramChannelConfig } from '../workspace.js';
|
|
3
|
+
export declare class TelegramAdapter implements ChannelAdapter {
|
|
4
|
+
readonly name = "telegram";
|
|
5
|
+
private config;
|
|
6
|
+
private bot;
|
|
7
|
+
private botUsername;
|
|
8
|
+
constructor(config: TelegramChannelConfig);
|
|
9
|
+
start(onMessage: (msg: ChannelMessage) => void): Promise<void>;
|
|
10
|
+
reply(msg: ChannelMessage, text: string): Promise<void>;
|
|
11
|
+
stop(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=telegram.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../src/channels/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,qBAAa,eAAgB,YAAW,cAAc;IACpD,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,WAAW,CAAqB;gBAE5B,MAAM,EAAE,qBAAqB;IAInC,KAAK,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAqD9D,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAM5B"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export class TelegramAdapter {
|
|
2
|
+
name = 'telegram';
|
|
3
|
+
config;
|
|
4
|
+
bot;
|
|
5
|
+
botUsername;
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
}
|
|
9
|
+
async start(onMessage) {
|
|
10
|
+
let grammyModule;
|
|
11
|
+
try {
|
|
12
|
+
grammyModule = await import('grammy');
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
throw new Error('Telegram adapter requires grammy. Install it: npm install grammy');
|
|
16
|
+
}
|
|
17
|
+
const { Bot } = grammyModule;
|
|
18
|
+
this.bot = new Bot(this.config.botToken);
|
|
19
|
+
// Fetch bot username for group mention detection
|
|
20
|
+
const me = await this.bot.api.getMe();
|
|
21
|
+
this.botUsername = me.username;
|
|
22
|
+
this.bot.on('message:text', async (ctx) => {
|
|
23
|
+
const message = ctx.message;
|
|
24
|
+
const chatType = message.chat.type === 'private' ? 'dm' : 'group';
|
|
25
|
+
let text = message.text;
|
|
26
|
+
if (chatType === 'group') {
|
|
27
|
+
// Only respond when the bot is explicitly @mentioned
|
|
28
|
+
const botUsername = this.botUsername;
|
|
29
|
+
const isMentioned = (message.entities ?? []).some((e) => e.type === 'mention' &&
|
|
30
|
+
text.slice(e.offset, e.offset + e.length) === `@${botUsername}`);
|
|
31
|
+
if (!isMentioned)
|
|
32
|
+
return;
|
|
33
|
+
// Strip bot @mention from text
|
|
34
|
+
text = text.replace(new RegExp(`@${botUsername}`, 'g'), '').trim();
|
|
35
|
+
if (!text)
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
onMessage({
|
|
39
|
+
channelType: 'telegram',
|
|
40
|
+
senderId: String(message.from?.id ?? message.chat.id),
|
|
41
|
+
senderName: message.from?.first_name,
|
|
42
|
+
chatId: String(message.chat.id),
|
|
43
|
+
chatType,
|
|
44
|
+
text,
|
|
45
|
+
raw: message,
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
// Start long-polling (non-blocking)
|
|
49
|
+
this.bot.start().catch(() => { });
|
|
50
|
+
console.log(`[telegram] Long-polling started (@${this.botUsername})`);
|
|
51
|
+
}
|
|
52
|
+
async reply(msg, text) {
|
|
53
|
+
if (!this.bot)
|
|
54
|
+
return;
|
|
55
|
+
await this.bot.api.sendMessage(Number(msg.chatId), text);
|
|
56
|
+
}
|
|
57
|
+
async stop() {
|
|
58
|
+
if (this.bot) {
|
|
59
|
+
await this.bot.stop();
|
|
60
|
+
this.bot = null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=telegram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/channels/telegram.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type GolemConfig, type GroupChatConfig } from './workspace.js';
|
|
1
2
|
export declare function splitMessage(text: string, maxLen: number): string[];
|
|
2
3
|
interface GatewayOpts {
|
|
3
4
|
dir?: string;
|
|
@@ -7,6 +8,13 @@ interface GatewayOpts {
|
|
|
7
8
|
apiKey?: string;
|
|
8
9
|
verbose?: boolean;
|
|
9
10
|
}
|
|
11
|
+
export interface GroupMessage {
|
|
12
|
+
senderName: string;
|
|
13
|
+
text: string;
|
|
14
|
+
isBot: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function resolveGroupChatConfig(config: GolemConfig): Required<GroupChatConfig>;
|
|
17
|
+
export declare function buildGroupPrompt(history: GroupMessage[], senderName: string, userText: string, injectPass: boolean, groupKey: string, dir: string): string;
|
|
10
18
|
export declare function startGateway(opts: GatewayOpts): Promise<void>;
|
|
11
19
|
export {};
|
|
12
20
|
//# sourceMappingURL=gateway.d.ts.map
|
package/dist/gateway.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,KAAK,WAAW,EAAuB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAkBzG,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBnE;AAED,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAQD,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAQD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC,eAAe,CAAC,CAOrF;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EAAE,EACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,EACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,MAAM,CA6BR;AAsDD,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmKnE"}
|
package/dist/gateway.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { resolve } from 'node:path';
|
|
1
|
+
import { resolve, join } from 'node:path';
|
|
2
|
+
import { mkdir } from 'node:fs/promises';
|
|
2
3
|
import { createAssistant } from './index.js';
|
|
3
4
|
import { createGolemServer } from './server.js';
|
|
4
5
|
import { loadConfig } from './workspace.js';
|
|
5
|
-
import { buildSessionKey, stripMention } from './channel.js';
|
|
6
|
+
import { buildSessionKey, detectMention, stripMention, } from './channel.js';
|
|
6
7
|
// ── IM channel message limits ───────────────────────────
|
|
7
8
|
const CHANNEL_LIMITS = {
|
|
8
9
|
feishu: 4000,
|
|
9
10
|
dingtalk: 4000,
|
|
10
11
|
wecom: 2048,
|
|
12
|
+
slack: 4000,
|
|
13
|
+
telegram: 4096,
|
|
11
14
|
};
|
|
12
15
|
export function splitMessage(text, maxLen) {
|
|
13
16
|
if (text.length <= maxLen)
|
|
@@ -33,7 +36,43 @@ function log(verbose, ...args) {
|
|
|
33
36
|
if (verbose)
|
|
34
37
|
console.log(...args);
|
|
35
38
|
}
|
|
36
|
-
|
|
39
|
+
/** Recent message history per group (key: `channelType:chatId`). */
|
|
40
|
+
const groupHistories = new Map();
|
|
41
|
+
/** Total bot replies sent per group — used as a safety valve against runaway chains. */
|
|
42
|
+
const groupTurnCounters = new Map();
|
|
43
|
+
export function resolveGroupChatConfig(config) {
|
|
44
|
+
const gc = config.groupChat ?? {};
|
|
45
|
+
return {
|
|
46
|
+
groupPolicy: gc.groupPolicy ?? 'mention-only',
|
|
47
|
+
historyLimit: gc.historyLimit ?? 20,
|
|
48
|
+
maxTurns: gc.maxTurns ?? 10,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export function buildGroupPrompt(history, senderName, userText, injectPass, groupKey, dir) {
|
|
52
|
+
const parts = [];
|
|
53
|
+
if (injectPass) {
|
|
54
|
+
parts.push('[System: You are participating in a group chat and were NOT directly addressed. ' +
|
|
55
|
+
'Only respond if you have something important to add or correct. ' +
|
|
56
|
+
'If you have nothing essential to contribute, respond with exactly: [PASS]]');
|
|
57
|
+
}
|
|
58
|
+
// Inject group identity + memory file path so the agent can read/update group memory
|
|
59
|
+
const safeKey = groupKey.replace(/[^a-z0-9_-]/gi, '-');
|
|
60
|
+
const memoryPath = join('memory', 'groups', `${safeKey}.md`);
|
|
61
|
+
parts.push(`[Group: ${groupKey} | MemoryFile: ${memoryPath}]`);
|
|
62
|
+
if (history.length > 1) {
|
|
63
|
+
// history already includes the current message we just pushed; exclude the last entry
|
|
64
|
+
const recentHistory = history.slice(0, -1);
|
|
65
|
+
parts.push('--- Recent group conversation ---');
|
|
66
|
+
for (const m of recentHistory) {
|
|
67
|
+
const label = m.isBot ? '[bot]' : `[${m.senderName}]`;
|
|
68
|
+
parts.push(`${label} ${m.text}`);
|
|
69
|
+
}
|
|
70
|
+
parts.push('--- New message ---');
|
|
71
|
+
}
|
|
72
|
+
parts.push(`[${senderName}] ${userText}`);
|
|
73
|
+
return parts.join('\n');
|
|
74
|
+
}
|
|
75
|
+
async function createChannelAdapter(type, channelConfig, dir) {
|
|
37
76
|
switch (type) {
|
|
38
77
|
case 'feishu': {
|
|
39
78
|
const { FeishuAdapter } = await import('./channels/feishu.js');
|
|
@@ -47,8 +86,35 @@ async function createChannelAdapter(type, channelConfig) {
|
|
|
47
86
|
const { WecomAdapter } = await import('./channels/wecom.js');
|
|
48
87
|
return new WecomAdapter(channelConfig);
|
|
49
88
|
}
|
|
50
|
-
|
|
51
|
-
|
|
89
|
+
case 'slack': {
|
|
90
|
+
const { SlackAdapter } = await import('./channels/slack.js');
|
|
91
|
+
return new SlackAdapter(channelConfig);
|
|
92
|
+
}
|
|
93
|
+
case 'telegram': {
|
|
94
|
+
const { TelegramAdapter } = await import('./channels/telegram.js');
|
|
95
|
+
return new TelegramAdapter(channelConfig);
|
|
96
|
+
}
|
|
97
|
+
default: {
|
|
98
|
+
const adapterPath = channelConfig._adapter;
|
|
99
|
+
if (typeof adapterPath !== 'string') {
|
|
100
|
+
throw new Error(`Unknown channel type "${type}". Add "_adapter: <path or package>" to use a custom adapter.`);
|
|
101
|
+
}
|
|
102
|
+
const resolvedPath = adapterPath.startsWith('.') || adapterPath.startsWith('/')
|
|
103
|
+
? resolve(dir, adapterPath)
|
|
104
|
+
: adapterPath;
|
|
105
|
+
let mod;
|
|
106
|
+
try {
|
|
107
|
+
mod = await import(resolvedPath);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
throw new Error(`Failed to load custom adapter "${adapterPath}": ${e.message}`);
|
|
111
|
+
}
|
|
112
|
+
const AdapterClass = mod.default ?? mod[Object.keys(mod)[0]];
|
|
113
|
+
if (typeof AdapterClass !== 'function') {
|
|
114
|
+
throw new Error(`Custom adapter "${adapterPath}" must export a default class.`);
|
|
115
|
+
}
|
|
116
|
+
return new AdapterClass(channelConfig);
|
|
117
|
+
}
|
|
52
118
|
}
|
|
53
119
|
}
|
|
54
120
|
export async function startGateway(opts) {
|
|
@@ -81,14 +147,44 @@ export async function startGateway(opts) {
|
|
|
81
147
|
if (!channelConfig)
|
|
82
148
|
continue;
|
|
83
149
|
try {
|
|
84
|
-
const adapter = await createChannelAdapter(type, channelConfig);
|
|
150
|
+
const adapter = await createChannelAdapter(type, channelConfig, dir);
|
|
85
151
|
await adapter.start(async (msg) => {
|
|
86
|
-
const sessionKey = buildSessionKey(msg);
|
|
87
152
|
const userText = msg.chatType === 'group' ? stripMention(msg.text) : msg.text;
|
|
88
153
|
if (!userText)
|
|
89
154
|
return;
|
|
90
|
-
|
|
91
|
-
|
|
155
|
+
let sessionKey;
|
|
156
|
+
let fullText;
|
|
157
|
+
if (msg.chatType === 'group') {
|
|
158
|
+
const groupKey = `${msg.channelType}:${msg.chatId}`;
|
|
159
|
+
sessionKey = groupKey;
|
|
160
|
+
const gc = resolveGroupChatConfig(config);
|
|
161
|
+
// Skip messages sent by this bot itself (prevents feedback loops in broadcast adapters)
|
|
162
|
+
if (msg.senderName === config.name)
|
|
163
|
+
return;
|
|
164
|
+
// Always update history buffer, regardless of policy
|
|
165
|
+
const hist = groupHistories.get(groupKey) ?? [];
|
|
166
|
+
hist.push({ senderName: msg.senderName ?? msg.senderId, text: userText, isBot: false });
|
|
167
|
+
if (hist.length > gc.historyLimit)
|
|
168
|
+
hist.shift();
|
|
169
|
+
groupHistories.set(groupKey, hist);
|
|
170
|
+
// mention-only: skip if not @mentioned (zero agent cost)
|
|
171
|
+
const mentioned = detectMention(msg.text, config.name);
|
|
172
|
+
if (gc.groupPolicy === 'mention-only' && !mentioned)
|
|
173
|
+
return;
|
|
174
|
+
// maxTurns safety valve: stop if this bot has replied too many times in this group
|
|
175
|
+
if ((groupTurnCounters.get(groupKey) ?? 0) >= gc.maxTurns) {
|
|
176
|
+
log(verbose, `[${type}] maxTurns (${gc.maxTurns}) reached for group ${groupKey}, skipping`);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// Ensure memory/groups/ directory exists (agent will read/write memory files here)
|
|
180
|
+
await mkdir(join(dir, 'memory', 'groups'), { recursive: true }).catch(() => { });
|
|
181
|
+
const injectPass = gc.groupPolicy === 'smart' && !mentioned;
|
|
182
|
+
fullText = buildGroupPrompt(hist, msg.senderName ?? msg.senderId, userText, injectPass, groupKey, dir);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
sessionKey = buildSessionKey(msg);
|
|
186
|
+
fullText = msg.text;
|
|
187
|
+
}
|
|
92
188
|
log(verbose, `[${type}] received from ${msg.senderName || msg.senderId}: "${userText}" → session ${sessionKey}`);
|
|
93
189
|
try {
|
|
94
190
|
let reply = '';
|
|
@@ -105,16 +201,32 @@ export async function startGateway(opts) {
|
|
|
105
201
|
console.error(`[${type}] Engine error: ${event.message}`);
|
|
106
202
|
}
|
|
107
203
|
}
|
|
204
|
+
// [PASS] sentinel: smart mode bot chose to stay silent
|
|
205
|
+
if (reply.trim() === '[PASS]') {
|
|
206
|
+
log(verbose, `[${type}] [PASS] — bot chose not to respond`);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
108
209
|
if (!reply.trim() && hasError) {
|
|
109
210
|
reply = 'Sorry, an error occurred while processing your message. Please try again later.';
|
|
110
211
|
}
|
|
111
212
|
if (reply.trim()) {
|
|
112
|
-
const maxLen = CHANNEL_LIMITS[type] ?? 4000;
|
|
213
|
+
const maxLen = adapter.maxMessageLength ?? CHANNEL_LIMITS[type] ?? 4000;
|
|
113
214
|
const chunks = splitMessage(reply.trim(), maxLen);
|
|
114
215
|
for (const chunk of chunks) {
|
|
115
216
|
await adapter.reply(msg, chunk);
|
|
116
217
|
}
|
|
117
218
|
log(verbose, `[${type}] replied to ${msg.senderName || msg.senderId}: "${reply.trim().slice(0, 80)}..." (${chunks.length} chunk(s))`);
|
|
219
|
+
// Update group history with bot reply + increment turn counter
|
|
220
|
+
if (msg.chatType === 'group') {
|
|
221
|
+
const groupKey = `${msg.channelType}:${msg.chatId}`;
|
|
222
|
+
const gc = resolveGroupChatConfig(config);
|
|
223
|
+
const hist = groupHistories.get(groupKey) ?? [];
|
|
224
|
+
hist.push({ senderName: config.name, text: reply.trim(), isBot: true });
|
|
225
|
+
if (hist.length > gc.historyLimit)
|
|
226
|
+
hist.shift();
|
|
227
|
+
groupHistories.set(groupKey, hist);
|
|
228
|
+
groupTurnCounters.set(groupKey, (groupTurnCounters.get(groupKey) ?? 0) + 1);
|
|
229
|
+
}
|
|
118
230
|
}
|
|
119
231
|
}
|
|
120
232
|
catch (e) {
|
package/dist/gateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAqC,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,UAAU,EAA+D,MAAM,gBAAgB,CAAC;AACzG,OAAO,EACL,eAAe,EACf,aAAa,EACb,YAAY,GAGb,MAAM,cAAc,CAAC;AAEtB,2DAA2D;AAC3D,MAAM,cAAc,GAA2B;IAC7C,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAc;IACvD,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,OAAO,SAAS,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QACjC,IAAI,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,QAAQ,IAAI,CAAC;YAAE,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClE,IAAI,QAAQ,IAAI,CAAC;YAAE,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,QAAQ,IAAI,CAAC;YAAE,QAAQ,GAAG,MAAM,CAAC;QAErC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAWD,SAAS,GAAG,CAAC,OAAgB,EAAE,GAAG,IAAe;IAC/C,IAAI,OAAO;QAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AACpC,CAAC;AAUD,oEAAoE;AACpE,MAAM,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEzD,wFAAwF;AACxF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEpD,MAAM,UAAU,sBAAsB,CAAC,MAAmB;IACxD,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;IAClC,OAAO;QACL,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,cAAc;QAC7C,YAAY,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;QACnC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAuB,EACvB,UAAkB,EAClB,QAAgB,EAChB,UAAmB,EACnB,QAAgB,EAChB,GAAW;IAEX,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CACR,kFAAkF;YAChF,kEAAkE;YAClE,4EAA4E,CAC/E,CAAC;IACJ,CAAC;IAED,qFAAqF;IACrF,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,KAAK,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,kBAAkB,UAAU,GAAG,CAAC,CAAC;IAE/D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,sFAAsF;QACtF,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,IAAY,EACZ,aAAsC,EACtC,GAAW;IAEX,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC/D,OAAO,IAAI,aAAa,CAAC,aAAoB,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;YACnE,OAAO,IAAI,eAAe,CAAC,aAAoB,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC7D,OAAO,IAAI,YAAY,CAAC,aAAoB,CAAC,CAAC;QAChD,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC7D,OAAO,IAAI,YAAY,CAAC,aAAoB,CAAC,CAAC;QAChD,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;YACnE,OAAO,IAAI,eAAe,CAAC,aAAoB,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC;YAC3C,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,+DAA+D,CAC7F,CAAC;YACJ,CAAC;YACD,MAAM,YAAY,GAChB,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;gBACxD,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC;gBAC3B,CAAC,CAAC,WAAW,CAAC;YAClB,IAAI,GAAQ,CAAC;YACb,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,WAAW,MAAO,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7F,CAAC;YACD,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,mBAAmB,WAAW,gCAAgC,CAAC,CAAC;YAClF,CAAC;YACD,OAAO,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAiB;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IACrC,MAAM,MAAM,GAAgB,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IAEtC,MAAM,SAAS,GAAc,eAAe,CAAC;QAC3C,GAAG;QACH,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;QAC7C,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS;KAC9D,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,IAAI,WAAW,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC;IAEhD,MAAM,UAAU,GAAe,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC/D,MAAM,UAAU,GAAgB,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEzE,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;QACjC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,sCAAsC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAA+B,MAAM,CAAC,QAAQ,CAAC;IAE7D,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,aAAa;gBAAE,SAAS;YAE7B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,aAAwC,EAAE,GAAG,CAAC,CAAC;gBAChG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAmB,EAAE,EAAE;oBAChD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC9E,IAAI,CAAC,QAAQ;wBAAE,OAAO;oBAEtB,IAAI,UAAkB,CAAC;oBACvB,IAAI,QAAgB,CAAC;oBAErB,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;wBAC7B,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;wBACpD,UAAU,GAAG,QAAQ,CAAC;wBACtB,MAAM,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;wBAE1C,wFAAwF;wBACxF,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI;4BAAE,OAAO;wBAE3C,qDAAqD;wBACrD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;wBAChD,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;wBACxF,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,YAAY;4BAAE,IAAI,CAAC,KAAK,EAAE,CAAC;wBAChD,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;wBAEnC,yDAAyD;wBACzD,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;wBACvD,IAAI,EAAE,CAAC,WAAW,KAAK,cAAc,IAAI,CAAC,SAAS;4BAAE,OAAO;wBAE5D,mFAAmF;wBACnF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;4BAC1D,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,CAAC,QAAQ,uBAAuB,QAAQ,YAAY,CAAC,CAAC;4BAC5F,OAAO;wBACT,CAAC;wBAED,mFAAmF;wBACnF,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;wBAEhF,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC;wBAC5D,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;oBACzG,CAAC;yBAAM,CAAC;wBACN,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;wBAClC,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC;oBACtB,CAAC;oBAED,GAAG,CACD,OAAO,EACP,IAAI,IAAI,mBAAmB,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ,MAAM,QAAQ,eAAe,UAAU,EAAE,CACnG,CAAC;oBAEF,IAAI,CAAC;wBACH,IAAI,KAAK,GAAG,EAAE,CAAC;wBACf,IAAI,QAAQ,GAAG,KAAK,CAAC;wBACrB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;4BACnE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gCAC1B,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;4BACzB,CAAC;iCAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gCACpC,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;4BACtD,CAAC;iCAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gCAClC,QAAQ,GAAG,IAAI,CAAC;gCAChB,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;4BAC5D,CAAC;wBACH,CAAC;wBAED,uDAAuD;wBACvD,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;4BAC9B,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,qCAAqC,CAAC,CAAC;4BAC5D,OAAO;wBACT,CAAC;wBAED,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;4BAC9B,KAAK,GAAG,iFAAiF,CAAC;wBAC5F,CAAC;wBAED,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;4BACjB,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;4BACxE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;4BAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gCAC3B,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;4BAClC,CAAC;4BACD,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,gBAAgB,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC;4BAEtI,+DAA+D;4BAC/D,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gCAC7B,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gCACpD,MAAM,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;gCAC1C,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gCAChD,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gCACxE,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,YAAY;oCAAE,IAAI,CAAC,KAAK,EAAE,CAAC;gCAChD,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gCACnC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC9E,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,8BAA8B,EAAE,CAAC,CAAC,CAAC;wBACzD,IAAI,CAAC;4BACH,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,iFAAiF,CAAC,CAAC;wBAC9G,CAAC;wBAAC,MAAM,CAAC;4BACP,cAAc;wBAChB,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,oBAAoB,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,6BAA8B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;QACH,CAAC;QACD,UAAU,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type StreamEvent } from './engine.js';
|
|
2
2
|
export type { StreamEvent } from './engine.js';
|
|
3
|
-
export type { GolemConfig, SkillInfo, ChannelsConfig, GatewayConfig, FeishuChannelConfig, DingtalkChannelConfig, WecomChannelConfig } from './workspace.js';
|
|
3
|
+
export type { GolemConfig, SkillInfo, ChannelsConfig, GatewayConfig, FeishuChannelConfig, DingtalkChannelConfig, WecomChannelConfig, SlackChannelConfig, TelegramChannelConfig } from './workspace.js';
|
|
4
4
|
export { createGolemServer, startServer, type ServerOpts, type GolemServer } from './server.js';
|
|
5
5
|
export type { ChannelAdapter, ChannelMessage } from './channel.js';
|
|
6
6
|
export { buildSessionKey, stripMention } from './channel.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,WAAW,EAAoB,MAAM,aAAa,CAAC;AAE/E,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,WAAW,EAAoB,MAAM,aAAa,CAAC;AAE/E,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvM,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAChG,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAwD5C,MAAM,WAAW,QAAQ;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,SAAS,CAiKpE"}
|
package/dist/workspace.d.ts
CHANGED
|
@@ -14,16 +14,40 @@ export interface WecomChannelConfig {
|
|
|
14
14
|
encodingAESKey: string;
|
|
15
15
|
port?: number;
|
|
16
16
|
}
|
|
17
|
+
export interface SlackChannelConfig {
|
|
18
|
+
botToken: string;
|
|
19
|
+
appToken: string;
|
|
20
|
+
}
|
|
21
|
+
export interface TelegramChannelConfig {
|
|
22
|
+
botToken: string;
|
|
23
|
+
}
|
|
17
24
|
export interface ChannelsConfig {
|
|
18
25
|
feishu?: FeishuChannelConfig;
|
|
19
26
|
dingtalk?: DingtalkChannelConfig;
|
|
20
27
|
wecom?: WecomChannelConfig;
|
|
28
|
+
slack?: SlackChannelConfig;
|
|
29
|
+
telegram?: TelegramChannelConfig;
|
|
30
|
+
/** Custom channel adapters: any key with `_adapter: <path>` in config. */
|
|
31
|
+
[key: string]: unknown;
|
|
21
32
|
}
|
|
22
33
|
export interface GatewayConfig {
|
|
23
34
|
port?: number;
|
|
24
35
|
host?: string;
|
|
25
36
|
token?: string;
|
|
26
37
|
}
|
|
38
|
+
export interface GroupChatConfig {
|
|
39
|
+
/**
|
|
40
|
+
* How the bot decides whether to respond in a group:
|
|
41
|
+
* - `mention-only` (default): only respond when @mentioned; agent not called otherwise (zero cost)
|
|
42
|
+
* - `smart`: agent is called for every message; outputs `[PASS]` to stay silent; can update group memory even when not responding
|
|
43
|
+
* - `always`: respond to every message unconditionally
|
|
44
|
+
*/
|
|
45
|
+
groupPolicy?: 'mention-only' | 'smart' | 'always';
|
|
46
|
+
/** Number of recent group messages to inject as context. Default: 20. */
|
|
47
|
+
historyLimit?: number;
|
|
48
|
+
/** Max total replies this bot will send per group before stopping (safety valve). Default: 10. */
|
|
49
|
+
maxTurns?: number;
|
|
50
|
+
}
|
|
27
51
|
export interface GolemConfig {
|
|
28
52
|
name: string;
|
|
29
53
|
engine: string;
|
|
@@ -41,6 +65,8 @@ export interface GolemConfig {
|
|
|
41
65
|
sessionTtlDays?: number;
|
|
42
66
|
/** System-level instructions prepended to every user message before engine invocation. */
|
|
43
67
|
systemPrompt?: string;
|
|
68
|
+
/** Group chat behaviour. Applies to all group messages across all channels. */
|
|
69
|
+
groupChat?: GroupChatConfig;
|
|
44
70
|
}
|
|
45
71
|
export interface SkillInfo {
|
|
46
72
|
name: string;
|
package/dist/workspace.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,KAAK,CAAC,EAAE,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|
package/dist/workspace.js
CHANGED
|
@@ -54,6 +54,9 @@ export async function loadConfig(dir) {
|
|
|
54
54
|
config.sessionTtlDays = doc.sessionTtlDays;
|
|
55
55
|
if (typeof doc.systemPrompt === 'string')
|
|
56
56
|
config.systemPrompt = doc.systemPrompt;
|
|
57
|
+
if (doc.groupChat && typeof doc.groupChat === 'object') {
|
|
58
|
+
config.groupChat = doc.groupChat;
|
|
59
|
+
}
|
|
57
60
|
return config;
|
|
58
61
|
}
|
|
59
62
|
export async function writeConfig(dir, config) {
|
|
@@ -70,6 +73,8 @@ export async function writeConfig(dir, config) {
|
|
|
70
73
|
content.channels = config.channels;
|
|
71
74
|
if (config.gateway)
|
|
72
75
|
content.gateway = config.gateway;
|
|
76
|
+
if (config.groupChat)
|
|
77
|
+
content.groupChat = config.groupChat;
|
|
73
78
|
await writeFile(configPath, yaml.dump(content, { lineWidth: -1 }), 'utf-8');
|
|
74
79
|
}
|
|
75
80
|
function extractFrontMatter(content) {
|
package/dist/workspace.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,IAAI,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "golembot",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0-beta.1",
|
|
4
4
|
"description": "GolemBot - Local-first AI assistant powered by Coding Agent CLI engines",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -67,20 +67,28 @@
|
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
69
|
"@larksuiteoapi/node-sdk": "^1.24.0",
|
|
70
|
+
"@slack/bolt": "^4.0.0",
|
|
70
71
|
"@wecom/crypto": "^1.0.0",
|
|
71
72
|
"dingtalk-stream": "^2.0.0",
|
|
73
|
+
"grammy": "^1.0.0",
|
|
72
74
|
"xml2js": "^0.6.0"
|
|
73
75
|
},
|
|
74
76
|
"peerDependenciesMeta": {
|
|
75
77
|
"@larksuiteoapi/node-sdk": {
|
|
76
78
|
"optional": true
|
|
77
79
|
},
|
|
80
|
+
"@slack/bolt": {
|
|
81
|
+
"optional": true
|
|
82
|
+
},
|
|
78
83
|
"dingtalk-stream": {
|
|
79
84
|
"optional": true
|
|
80
85
|
},
|
|
81
86
|
"@wecom/crypto": {
|
|
82
87
|
"optional": true
|
|
83
88
|
},
|
|
89
|
+
"grammy": {
|
|
90
|
+
"optional": true
|
|
91
|
+
},
|
|
84
92
|
"xml2js": {
|
|
85
93
|
"optional": true
|
|
86
94
|
}
|
|
@@ -92,9 +100,11 @@
|
|
|
92
100
|
"@semantic-release/github": "^12.0.6",
|
|
93
101
|
"@semantic-release/npm": "^13.1.5",
|
|
94
102
|
"@semantic-release/release-notes-generator": "^14.1.0",
|
|
103
|
+
"@slack/bolt": "^4.6.0",
|
|
95
104
|
"@types/js-yaml": "^4.0.9",
|
|
96
105
|
"@types/node": "^22.0.0",
|
|
97
106
|
"@types/xml2js": "^0.4.14",
|
|
107
|
+
"grammy": "^1.41.0",
|
|
98
108
|
"semantic-release": "^25.0.3",
|
|
99
109
|
"tsx": "^4.0.0",
|
|
100
110
|
"typescript": "^5.7.0",
|
|
@@ -29,10 +29,31 @@ When communicating with users through instant messaging tools (Lark, DingTalk, W
|
|
|
29
29
|
|
|
30
30
|
## Group Chat Guidelines
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
-
|
|
32
|
+
Group messages are prefixed with metadata like `[Group: slack-team | MemoryFile: memory/groups/slack-team.md]` and individual messages are labeled `[username] message text`.
|
|
33
|
+
|
|
34
|
+
**Participating in a group:**
|
|
35
|
+
- Address the specific user in your reply; @mention them at the beginning when helpful
|
|
36
|
+
- Be especially concise — avoid flooding the chat
|
|
37
|
+
- Do not repeat information already covered earlier in the conversation history
|
|
38
|
+
|
|
39
|
+
**Group memory (long-term context):**
|
|
40
|
+
- If `MemoryFile` is specified, read that file at the start of your response to recall who the group members are, the project context, and past decisions
|
|
41
|
+
- After responding, if this conversation introduced new important information (people, decisions, project facts), append it to the memory file in a structured format
|
|
42
|
+
- Memory file format:
|
|
43
|
+
```
|
|
44
|
+
# Group: <group-key>
|
|
45
|
+
## Members
|
|
46
|
+
- Name: role/context
|
|
47
|
+
## Project Context
|
|
48
|
+
- key facts
|
|
49
|
+
## Key Decisions
|
|
50
|
+
- YYYY-MM-DD: decision made
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**`[PASS]` in smart mode:**
|
|
54
|
+
- When the system instructs you that you were NOT directly addressed and asks whether to respond, evaluate honestly
|
|
55
|
+
- If you have nothing important to add or correct, respond with exactly: `[PASS]` (nothing else)
|
|
56
|
+
- Only respond if you see a factual error, security risk, or something directly relevant to your specialty
|
|
36
57
|
|
|
37
58
|
## Action Requests
|
|
38
59
|
|