flashclaw 1.0.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.md +305 -0
- package/config/plugins.json +23 -0
- package/dist/agent-runner.d.ts +103 -0
- package/dist/agent-runner.d.ts.map +1 -0
- package/dist/agent-runner.js +530 -0
- package/dist/agent-runner.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +497 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +68 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +252 -0
- package/dist/commands.js.map +1 -0
- package/dist/config-schema.d.ts +21 -0
- package/dist/config-schema.d.ts.map +1 -0
- package/dist/config-schema.js +26 -0
- package/dist/config-schema.js.map +1 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +36 -0
- package/dist/config.js.map +1 -0
- package/dist/core/api-client.d.ts +236 -0
- package/dist/core/api-client.d.ts.map +1 -0
- package/dist/core/api-client.js +369 -0
- package/dist/core/api-client.js.map +1 -0
- package/dist/core/memory.d.ts +291 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +754 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/model-capabilities.d.ts +45 -0
- package/dist/core/model-capabilities.d.ts.map +1 -0
- package/dist/core/model-capabilities.js +85 -0
- package/dist/core/model-capabilities.js.map +1 -0
- package/dist/db.d.ts +103 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +380 -0
- package/dist/db.js.map +1 -0
- package/dist/errors.d.ts +22 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +44 -0
- package/dist/errors.js.map +1 -0
- package/dist/health.d.ts +27 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +55 -0
- package/dist/health.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1181 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +9 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +19 -0
- package/dist/logger.js.map +1 -0
- package/dist/message-queue.d.ts +69 -0
- package/dist/message-queue.d.ts.map +1 -0
- package/dist/message-queue.js +198 -0
- package/dist/message-queue.js.map +1 -0
- package/dist/metrics.d.ts +46 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +101 -0
- package/dist/metrics.js.map +1 -0
- package/dist/paths.d.ts +81 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +127 -0
- package/dist/paths.js.map +1 -0
- package/dist/plugins/index.d.ts +9 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +13 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/installer.d.ts +120 -0
- package/dist/plugins/installer.d.ts.map +1 -0
- package/dist/plugins/installer.js +1008 -0
- package/dist/plugins/installer.js.map +1 -0
- package/dist/plugins/loader.d.ts +37 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +429 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +72 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +187 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/types.d.ts +101 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +12 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/session-tracker.d.ts +81 -0
- package/dist/session-tracker.d.ts.map +1 -0
- package/dist/session-tracker.js +228 -0
- package/dist/session-tracker.js.map +1 -0
- package/dist/task-scheduler.d.ts +47 -0
- package/dist/task-scheduler.d.ts.map +1 -0
- package/dist/task-scheduler.js +331 -0
- package/dist/task-scheduler.js.map +1 -0
- package/dist/types.d.ts +57 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/env-substitute.d.ts +63 -0
- package/dist/utils/env-substitute.d.ts.map +1 -0
- package/dist/utils/env-substitute.js +133 -0
- package/dist/utils/env-substitute.js.map +1 -0
- package/dist/utils/log-rotate.d.ts +19 -0
- package/dist/utils/log-rotate.d.ts.map +1 -0
- package/dist/utils/log-rotate.js +85 -0
- package/dist/utils/log-rotate.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +38 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +79 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/retry.d.ts +10 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +47 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils.d.ts +86 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +218 -0
- package/dist/utils.js.map +1 -0
- package/package.json +78 -0
- package/plugins/cancel-task/index.ts +161 -0
- package/plugins/cancel-task/plugin.json +9 -0
- package/plugins/feishu/index.ts +944 -0
- package/plugins/feishu/plugin.json +29 -0
- package/plugins/list-tasks/index.ts +150 -0
- package/plugins/list-tasks/plugin.json +9 -0
- package/plugins/memory/index.ts +190 -0
- package/plugins/memory/plugin.json +7 -0
- package/plugins/pause-task/index.ts +95 -0
- package/plugins/pause-task/plugin.json +8 -0
- package/plugins/register-group/index.ts +147 -0
- package/plugins/register-group/plugin.json +7 -0
- package/plugins/resume-task/index.ts +92 -0
- package/plugins/resume-task/plugin.json +8 -0
- package/plugins/schedule-task/index.ts +248 -0
- package/plugins/schedule-task/plugin.json +9 -0
- package/plugins/send-message/index.ts +75 -0
- package/plugins/send-message/plugin.json +9 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 GuLu9527
|
|
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.md
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
# ⚡ FlashClaw
|
|
2
|
+
|
|
3
|
+
> 闪电龙虾 - 快如闪电的 AI 助手
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="assets/flashclaw-logo.png" alt="FlashClaw" width="400">
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
## 特点
|
|
10
|
+
|
|
11
|
+
- ⚡ **快速响应** - 直接 API 调用,2-5 秒响应
|
|
12
|
+
- 🧱 **乐高式架构** - 通讯渠道和工具都是可插拔的插件
|
|
13
|
+
- 🔥 **热加载** - 运行时加载插件,无需重启
|
|
14
|
+
- 🇨🇳 **中国本土** - 飞书原生支持
|
|
15
|
+
- 🤖 **智能响应** - 群聊 @提及、私聊自动回复
|
|
16
|
+
- 📅 **定时任务** - 支持 cron、间隔、一次性任务,具备精确定时、并发控制、超时保护和自动重试
|
|
17
|
+
|
|
18
|
+
## 安装
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install -g flashclaw
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 快速开始
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# 启动服务
|
|
28
|
+
flashclaw start
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 更新日志
|
|
32
|
+
|
|
33
|
+
详见 [CHANGELOG.md](CHANGELOG.md)
|
|
34
|
+
|
|
35
|
+
## CLI 命令
|
|
36
|
+
|
|
37
|
+
| 命令 | 说明 |
|
|
38
|
+
|------|------|
|
|
39
|
+
| `flashclaw` | 启动服务(默认) |
|
|
40
|
+
| `flashclaw start` | 启动服务 |
|
|
41
|
+
| `flashclaw version` | 显示版本 |
|
|
42
|
+
| `flashclaw -v` / `flashclaw --version` | 显示版本(快捷方式) |
|
|
43
|
+
| `flashclaw help` | 显示帮助 |
|
|
44
|
+
| `flashclaw -h` / `flashclaw --help` | 显示帮助(快捷方式) |
|
|
45
|
+
| `flashclaw plugins list` | 列出已安装插件 |
|
|
46
|
+
| `flashclaw plugins list --available` | 列出可安装插件 |
|
|
47
|
+
| `flashclaw plugins install <name>` | 安装插件 |
|
|
48
|
+
| `flashclaw plugins uninstall <name>` | 卸载插件 |
|
|
49
|
+
| `flashclaw plugins update <name>` | 更新插件 |
|
|
50
|
+
| `flashclaw plugins update --all` | 更新所有插件 |
|
|
51
|
+
| `flashclaw config list-backups` | 列出配置备份 |
|
|
52
|
+
| `flashclaw config restore [n]` | 恢复配置备份(n=1-5) |
|
|
53
|
+
|
|
54
|
+
**安装插件示例:**
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# 从官方仓库安装
|
|
58
|
+
flashclaw plugins install hello-world
|
|
59
|
+
flashclaw plugins install web-fetch
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 插件系统
|
|
63
|
+
|
|
64
|
+
FlashClaw 采用乐高式插件架构,添加功能就像放 Minecraft Mod 一样简单:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
plugins/
|
|
68
|
+
├── feishu/ # 飞书渠道插件
|
|
69
|
+
├── send-message/ # 发送消息工具
|
|
70
|
+
├── schedule-task/ # 创建定时任务
|
|
71
|
+
├── list-tasks/ # 列出定时任务
|
|
72
|
+
├── cancel-task/ # 取消定时任务
|
|
73
|
+
├── pause-task/ # 暂停定时任务
|
|
74
|
+
├── resume-task/ # 恢复定时任务
|
|
75
|
+
├── memory/ # 长期记忆(remember/recall)
|
|
76
|
+
├── register-group/ # 注册群组
|
|
77
|
+
└── my-plugin/ # 你的自定义插件
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 插件类型
|
|
81
|
+
|
|
82
|
+
| 类型 | 说明 | 示例 |
|
|
83
|
+
|------|------|------|
|
|
84
|
+
| `channel` | 消息渠道插件 | 飞书、Telegram、Slack |
|
|
85
|
+
| `tool` | AI 工具插件 | 发送消息、定时任务 |
|
|
86
|
+
|
|
87
|
+
### 创建插件
|
|
88
|
+
|
|
89
|
+
1. 在 `~/.flashclaw/plugins/` 创建文件夹
|
|
90
|
+
2. 添加 `plugin.json` 和 `index.ts`
|
|
91
|
+
3. 重启服务(开发模式下会自动热加载)
|
|
92
|
+
|
|
93
|
+
详见 [FLASHCLAW.md](FLASHCLAW.md)
|
|
94
|
+
|
|
95
|
+
## 配置
|
|
96
|
+
|
|
97
|
+
配置文件位于 `~/.flashclaw/.env`(首次运行自动创建)。
|
|
98
|
+
|
|
99
|
+
**特性:**
|
|
100
|
+
- 支持环境变量替换:`${VAR}` 或 `${VAR:-default}`
|
|
101
|
+
- 自动备份:每次修改前自动保存备份(最多 5 个)
|
|
102
|
+
- 使用 `flashclaw config restore` 恢复误操作
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# AI API 配置(三选一)
|
|
106
|
+
# 方式1:Anthropic 官方 API(两者任选其一)
|
|
107
|
+
ANTHROPIC_AUTH_TOKEN=sk-ant-xxx
|
|
108
|
+
ANTHROPIC_API_KEY=sk-ant-xxx
|
|
109
|
+
|
|
110
|
+
# 方式2:API 代理(如 MiniMax)
|
|
111
|
+
ANTHROPIC_BASE_URL=https://api.minimaxi.com/anthropic
|
|
112
|
+
ANTHROPIC_AUTH_TOKEN=your-token
|
|
113
|
+
AI_MODEL=MiniMax-M2.1
|
|
114
|
+
ANTHROPIC_MODEL=claude-4-5-sonnet-20250929
|
|
115
|
+
|
|
116
|
+
# 飞书配置
|
|
117
|
+
FEISHU_APP_ID=cli_xxx
|
|
118
|
+
FEISHU_APP_SECRET=xxx
|
|
119
|
+
|
|
120
|
+
# 其他配置
|
|
121
|
+
BOT_NAME=FlashClaw
|
|
122
|
+
LOG_LEVEL=info
|
|
123
|
+
TIMEZONE=Asia/Shanghai
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## 架构
|
|
127
|
+
|
|
128
|
+
### 用户数据目录
|
|
129
|
+
|
|
130
|
+
安装后,FlashClaw 在用户主目录创建配置文件夹:
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
~/.flashclaw/ # Windows: C:\Users\用户名\.flashclaw\
|
|
134
|
+
├── .env # API 密钥和配置
|
|
135
|
+
├── config/
|
|
136
|
+
│ └── plugins.json # 插件启用/禁用配置
|
|
137
|
+
├── data/
|
|
138
|
+
│ ├── flashclaw.db # SQLite 数据库
|
|
139
|
+
│ └── flashclaw.pid # 进程 PID
|
|
140
|
+
├── logs/
|
|
141
|
+
│ └── flashclaw.log # 运行日志
|
|
142
|
+
├── plugins/ # 用户自定义插件
|
|
143
|
+
└── groups/ # 群组记忆
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### 项目结构
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
flashclaw/
|
|
150
|
+
├── src/ # 核心源码
|
|
151
|
+
│ ├── index.ts # 主入口、消息路由
|
|
152
|
+
│ ├── cli.ts # 命令行接口
|
|
153
|
+
│ ├── commands.ts # 聊天命令处理
|
|
154
|
+
│ ├── session-tracker.ts # Token 用量追踪
|
|
155
|
+
│ ├── paths.ts # 路径管理
|
|
156
|
+
│ ├── agent-runner.ts # AI Agent 运行器
|
|
157
|
+
│ ├── db.ts # SQLite 数据库
|
|
158
|
+
│ ├── task-scheduler.ts # 定时任务调度
|
|
159
|
+
│ ├── core/ # 核心模块
|
|
160
|
+
│ │ ├── api-client.ts # AI API 客户端
|
|
161
|
+
│ │ ├── memory.ts # 记忆管理
|
|
162
|
+
│ │ └── model-capabilities.ts # 模型能力检测
|
|
163
|
+
│ └── plugins/ # 插件系统
|
|
164
|
+
│ ├── manager.ts # 插件管理器
|
|
165
|
+
│ ├── loader.ts # 插件加载器
|
|
166
|
+
│ ├── installer.ts # 插件安装器
|
|
167
|
+
│ └── types.ts # 插件类型定义
|
|
168
|
+
│
|
|
169
|
+
├── plugins/ # 内置插件(9个)
|
|
170
|
+
│ ├── feishu/ # 飞书渠道
|
|
171
|
+
│ ├── memory/ # 长期记忆
|
|
172
|
+
│ ├── schedule-task/ # 定时任务
|
|
173
|
+
│ ├── list-tasks/ # 列出任务
|
|
174
|
+
│ ├── cancel-task/ # 取消任务
|
|
175
|
+
│ ├── pause-task/ # 暂停任务
|
|
176
|
+
│ ├── resume-task/ # 恢复任务
|
|
177
|
+
│ ├── send-message/ # 发送消息
|
|
178
|
+
│ └── register-group/ # 注册群组
|
|
179
|
+
│
|
|
180
|
+
└── community-plugins/ # 社区/官方扩展插件
|
|
181
|
+
├── hello-world/ # 测试插件
|
|
182
|
+
└── web-fetch/ # 网页内容获取
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
> community-plugins 作为扩展插件库示例,默认不随 npm 包发布,可通过插件安装命令单独获取。
|
|
186
|
+
|
|
187
|
+
## 功能特性
|
|
188
|
+
|
|
189
|
+
### 智能响应
|
|
190
|
+
|
|
191
|
+
- **私聊**:直接回复,无需触发词
|
|
192
|
+
- **群聊**:@机器人 触发响应
|
|
193
|
+
- **自动注册**:新会话自动注册,无需手动配置
|
|
194
|
+
|
|
195
|
+
### 聊天命令
|
|
196
|
+
|
|
197
|
+
在对话中使用斜杠命令快速操作:
|
|
198
|
+
|
|
199
|
+
| 命令 | 说明 |
|
|
200
|
+
|------|------|
|
|
201
|
+
| `/help` | 显示帮助信息 |
|
|
202
|
+
| `/status` | 查看会话状态和 Token 用量 |
|
|
203
|
+
| `/new` | 重置当前会话 |
|
|
204
|
+
| `/compact` | 压缩上下文(生成摘要) |
|
|
205
|
+
| `/tasks` | 查看定时任务 |
|
|
206
|
+
| `/ping` | 测试机器人响应 |
|
|
207
|
+
|
|
208
|
+
**上下文管理:**
|
|
209
|
+
- 系统会实时统计 Token 使用量
|
|
210
|
+
- 达到 70% (140k tokens) 时自动提示
|
|
211
|
+
- 使用 `/compact` 可手动压缩,保留摘要继续对话
|
|
212
|
+
- 使用 `/new` 完全重置会话
|
|
213
|
+
|
|
214
|
+
### 多模态支持
|
|
215
|
+
|
|
216
|
+
- **文本消息**:完整支持
|
|
217
|
+
- **图片消息**:自动检测模型能力,不支持时提示用户
|
|
218
|
+
- **文件消息**:识别文件名和类型
|
|
219
|
+
- **富文本**:支持飞书富文本消息解析
|
|
220
|
+
|
|
221
|
+
### 定时任务
|
|
222
|
+
|
|
223
|
+
支持三种调度方式:
|
|
224
|
+
- **cron** - 使用 cron 表达式(如 `0 9 * * *` 每天 9 点)
|
|
225
|
+
- **interval** - 固定间隔执行(毫秒数)
|
|
226
|
+
- **once** - 一次性任务(ISO 时间字符串)
|
|
227
|
+
|
|
228
|
+
**核心特性:**
|
|
229
|
+
- **精确定时器** - 按需唤醒,而非固定轮询,资源占用极低
|
|
230
|
+
- **并发控制** - 最多同时执行 3 个任务,避免资源耗尽
|
|
231
|
+
- **超时保护** - 默认 5 分钟超时,防止任务卡死
|
|
232
|
+
- **自动重试** - 失败任务自动重试,使用指数退避策略(默认最多 3 次)
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
用户:每天早上9点提醒我喝水
|
|
236
|
+
AI:好的,已创建定时任务(任务ID: task_xxx,下次执行: 2024-02-04 09:00:00)
|
|
237
|
+
|
|
238
|
+
用户:创建一个每30分钟检查一次的任务,最多重试5次
|
|
239
|
+
AI:已创建任务,配置:间隔 30 分钟,最大重试 5 次
|
|
240
|
+
|
|
241
|
+
用户:我有哪些任务?
|
|
242
|
+
AI:你有以下定时任务:
|
|
243
|
+
1. 每日喝水提醒 (cron: 0 9 * * *, 下次: 2024-02-04 09:00:00)
|
|
244
|
+
|
|
245
|
+
用户:取消任务1
|
|
246
|
+
AI:已取消任务
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### 记忆系统
|
|
250
|
+
|
|
251
|
+
FlashClaw 支持多层级记忆:
|
|
252
|
+
|
|
253
|
+
| 层级 | 存储位置 | 作用域 |
|
|
254
|
+
|------|----------|--------|
|
|
255
|
+
| **用户记忆** | `~/.flashclaw/data/memory/users/{userId}.md` | 跨会话共享,同一用户在私聊和群聊中记忆互通 |
|
|
256
|
+
| **会话记忆** | `~/.flashclaw/data/memory/{chatId}.md` | 单个会话内有效 |
|
|
257
|
+
| **全局记忆** | `~/.flashclaw/groups/global/CLAUDE.md` | 所有会话共享的系统提示 |
|
|
258
|
+
|
|
259
|
+
```
|
|
260
|
+
用户(私聊):记住我喜欢吃苹果
|
|
261
|
+
AI:好的,已记住
|
|
262
|
+
|
|
263
|
+
用户(群聊):我喜欢吃什么?
|
|
264
|
+
AI:你喜欢吃苹果 ← 跨会话记忆生效
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
## 平台支持
|
|
268
|
+
|
|
269
|
+
| 平台 | 状态 |
|
|
270
|
+
|------|------|
|
|
271
|
+
| Windows | ✅ 原生运行 |
|
|
272
|
+
| Linux | ✅ 原生运行 |
|
|
273
|
+
| macOS | ✅ 原生运行 |
|
|
274
|
+
|
|
275
|
+
## 消息平台
|
|
276
|
+
|
|
277
|
+
| 平台 | 状态 | 连接方式 |
|
|
278
|
+
|------|------|----------|
|
|
279
|
+
| 飞书 | ✅ 完整支持 | WebSocket 长连接 |
|
|
280
|
+
| Telegram | 📋 计划中 | - |
|
|
281
|
+
| Slack | 📋 计划中 | - |
|
|
282
|
+
| Discord | 📋 计划中 | - |
|
|
283
|
+
|
|
284
|
+
**注意**:所有平台都使用长连接,**无需公网服务器**!
|
|
285
|
+
|
|
286
|
+
## 安全说明
|
|
287
|
+
|
|
288
|
+
FlashClaw 的 AI Agent 直接在本机运行,**可以访问所有文件和执行命令**。这是为个人助手设计的,请确保:
|
|
289
|
+
|
|
290
|
+
- 只在可信环境运行
|
|
291
|
+
- 只添加可信的群组
|
|
292
|
+
- 定期检查 AI 的操作日志
|
|
293
|
+
|
|
294
|
+
## 文档
|
|
295
|
+
|
|
296
|
+
- [开发规则](FLASHCLAW.md) - 插件开发指南
|
|
297
|
+
- [设计要求](docs/REQUIREMENTS.md) - 架构决策
|
|
298
|
+
- [API 文档](docs/API.md) - 内部 API
|
|
299
|
+
- [技术规格](docs/SPEC.md) - 详细规格
|
|
300
|
+
- [安全模型](docs/SECURITY.md) - 安全说明
|
|
301
|
+
- [贡献指南](CONTRIBUTING.md) - 如何贡献
|
|
302
|
+
|
|
303
|
+
## 许可证
|
|
304
|
+
|
|
305
|
+
MIT
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"plugins": {
|
|
3
|
+
"feishu": {
|
|
4
|
+
"enabled": true
|
|
5
|
+
},
|
|
6
|
+
"send-message": {
|
|
7
|
+
"enabled": true
|
|
8
|
+
},
|
|
9
|
+
"schedule-task": {
|
|
10
|
+
"enabled": true
|
|
11
|
+
},
|
|
12
|
+
"list-tasks": {
|
|
13
|
+
"enabled": true
|
|
14
|
+
},
|
|
15
|
+
"cancel-task": {
|
|
16
|
+
"enabled": true
|
|
17
|
+
},
|
|
18
|
+
"memory": {
|
|
19
|
+
"enabled": true
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"hotReload": true
|
|
23
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Runner for FlashClaw
|
|
3
|
+
* 使用 Anthropic SDK 直接调用 API
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Direct Anthropic API integration
|
|
7
|
+
* - IPC-based tools for messaging and task scheduling
|
|
8
|
+
* - Per-group isolation via working directories
|
|
9
|
+
* - 记忆系统集成
|
|
10
|
+
*/
|
|
11
|
+
import { RegisteredGroup } from './types.js';
|
|
12
|
+
import { ToolSchema } from './core/api-client.js';
|
|
13
|
+
import { MemoryManager } from './core/memory.js';
|
|
14
|
+
/**
|
|
15
|
+
* 图片附件
|
|
16
|
+
*/
|
|
17
|
+
export interface ImageAttachment {
|
|
18
|
+
type: 'image';
|
|
19
|
+
/** base64 data URL 或纯 base64 数据 */
|
|
20
|
+
content: string;
|
|
21
|
+
mimeType?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface AgentInput {
|
|
24
|
+
prompt: string;
|
|
25
|
+
sessionId?: string;
|
|
26
|
+
groupFolder: string;
|
|
27
|
+
chatJid: string;
|
|
28
|
+
isMain: boolean;
|
|
29
|
+
isScheduledTask?: boolean;
|
|
30
|
+
/** 用户 ID,用于用户级别记忆 */
|
|
31
|
+
userId?: string;
|
|
32
|
+
/** 图片附件列表 */
|
|
33
|
+
attachments?: ImageAttachment[];
|
|
34
|
+
}
|
|
35
|
+
export interface AgentOutput {
|
|
36
|
+
status: 'success' | 'error';
|
|
37
|
+
result: string | null;
|
|
38
|
+
newSessionId?: string;
|
|
39
|
+
error?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* IPC 上下文
|
|
43
|
+
*/
|
|
44
|
+
interface IpcContext {
|
|
45
|
+
chatJid: string;
|
|
46
|
+
groupFolder: string;
|
|
47
|
+
isMain: boolean;
|
|
48
|
+
userId: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 工具执行结果
|
|
52
|
+
*/
|
|
53
|
+
interface ToolResult {
|
|
54
|
+
content: string;
|
|
55
|
+
isError?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 获取所有可用工具(完全依赖插件)
|
|
59
|
+
*/
|
|
60
|
+
export declare function getAllTools(): ToolSchema[];
|
|
61
|
+
/**
|
|
62
|
+
* 创建工具执行器
|
|
63
|
+
* 完全依赖插件工具
|
|
64
|
+
*/
|
|
65
|
+
export declare function createToolExecutor(ctx: IpcContext, memoryManager: MemoryManager): (name: string, params: unknown) => Promise<ToolResult>;
|
|
66
|
+
/**
|
|
67
|
+
* 获取全局记忆管理器
|
|
68
|
+
* 使用 memory.ts 中的全局单例
|
|
69
|
+
*/
|
|
70
|
+
export declare function getMemoryManager(): MemoryManager;
|
|
71
|
+
interface RetryConfig {
|
|
72
|
+
maxRetries: number;
|
|
73
|
+
baseDelayMs: number;
|
|
74
|
+
maxDelayMs: number;
|
|
75
|
+
retryableErrors: string[];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 运行 Agent(带重试)
|
|
79
|
+
*/
|
|
80
|
+
export declare function runAgent(group: RegisteredGroup, input: AgentInput, retryConfig?: RetryConfig): Promise<AgentOutput>;
|
|
81
|
+
export declare function writeTasksSnapshot(groupFolder: string, isMain: boolean, tasks: Array<{
|
|
82
|
+
id: string;
|
|
83
|
+
groupFolder: string;
|
|
84
|
+
prompt: string;
|
|
85
|
+
schedule_type: string;
|
|
86
|
+
schedule_value: string;
|
|
87
|
+
status: string;
|
|
88
|
+
next_run: string | null;
|
|
89
|
+
}>): void;
|
|
90
|
+
export interface AvailableGroup {
|
|
91
|
+
jid: string;
|
|
92
|
+
name: string;
|
|
93
|
+
lastActivity: string;
|
|
94
|
+
isRegistered: boolean;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Write available groups snapshot for the agent to read.
|
|
98
|
+
* Only main group can see all available groups (for activation).
|
|
99
|
+
* Non-main groups only see their own registration status.
|
|
100
|
+
*/
|
|
101
|
+
export declare function writeGroupsSnapshot(groupFolder: string, isMain: boolean, groups: AvailableGroup[], registeredJids: Set<string>): void;
|
|
102
|
+
export {};
|
|
103
|
+
//# sourceMappingURL=agent-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-runner.d.ts","sourceRoot":"","sources":["../src/agent-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAA0B,UAAU,EAAuC,MAAM,sBAAsB,CAAC;AAE/G,OAAO,EAAE,aAAa,EAA8C,MAAM,kBAAkB,CAAC;AAU7F;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID;;GAEG;AACH,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA0BD;;GAEG;AACH,wBAAgB,WAAW,IAAI,UAAU,EAAE,CAE1C;AAGD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,IAuBhE,MAAM,MAAM,EAAE,QAAQ,OAAO,KAAG,OAAO,CAAC,UAAU,CAAC,CAuClE;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAOD,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAuID;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,UAAU,EACjB,WAAW,GAAE,WAAkC,GAC9C,OAAO,CAAC,WAAW,CAAC,CAqCtB;AA+RD,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,KAAK,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC,GACD,IAAI,CAYN;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,cAAc,EAAE,EACxB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAC1B,IAAI,CAYN"}
|