skyloom 1.14.5 → 1.14.8
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/.github/workflows/publish.yml +27 -0
- package/README.md +523 -220
- package/dist/cli/loom.d.ts +2 -0
- package/dist/cli/loom.d.ts.map +1 -1
- package/dist/cli/loom.js +76 -7
- package/dist/cli/loom.js.map +1 -1
- package/dist/cli/main.js +12 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/core/agent/guard.js +4 -4
- package/dist/core/agent/guard.js.map +1 -1
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +12 -9
- package/dist/core/agent.js.map +1 -1
- package/dist/core/agent_helpers.d.ts +2 -2
- package/dist/core/agent_helpers.d.ts.map +1 -1
- package/dist/core/agent_helpers.js +7 -4
- package/dist/core/agent_helpers.js.map +1 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +8 -2
- package/dist/core/config.js.map +1 -1
- package/dist/core/memory.d.ts.map +1 -1
- package/dist/core/memory.js +12 -2
- package/dist/core/memory.js.map +1 -1
- package/dist/core/model_config.d.ts.map +1 -1
- package/dist/core/model_config.js +7 -2
- package/dist/core/model_config.js.map +1 -1
- package/dist/plugins/loader.d.ts +7 -0
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +27 -0
- package/dist/plugins/loader.js.map +1 -1
- package/dist/tools/builtin.d.ts +6 -0
- package/dist/tools/builtin.d.ts.map +1 -1
- package/dist/tools/builtin.js +332 -41
- package/dist/tools/builtin.js.map +1 -1
- package/dist/tools/computer.d.ts.map +1 -1
- package/dist/tools/computer.js +18 -7
- package/dist/tools/computer.js.map +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +35 -2
- package/dist/web/server.js.map +1 -1
- package/package.json +68 -68
- package/src/cli/loom.ts +66 -7
- package/src/cli/main.ts +6 -3
- package/src/core/agent/guard.ts +4 -4
- package/src/core/agent.ts +12 -8
- package/src/core/agent_helpers.ts +7 -4
- package/src/core/config.ts +5 -2
- package/src/core/memory.ts +9 -2
- package/src/core/model_config.ts +4 -2
- package/src/plugins/loader.ts +91 -66
- package/src/tools/builtin.ts +288 -36
- package/src/tools/computer.ts +279 -269
- package/src/web/server.ts +35 -2
- package/tests/fence_plugin.test.ts +52 -0
- package/tests/loom.test.ts +89 -0
- package/tests/ssrf.test.ts +38 -0
- package/tsconfig.json +1 -0
package/README.md
CHANGED
|
@@ -1,220 +1,523 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
<div align="center">
|
|
4
|
-
|
|
5
|
-
**≋ 雾 · ⸽ 雨 · ✱ 霜 · ❉ 雪 · ∘ 露 · ☼ 晴**
|
|
6
|
-
|
|
7
|
-
*六位 Agent,一支团队 —— 一座水墨气象台。*
|
|
8
|
-
|
|
9
|
-
[](https://github.com/susurrune/skyloom-ts/actions)
|
|
10
|
-
[](https://www.npmjs.com/package/skyloom)
|
|
11
|
-
[](LICENSE)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
55
|
-
sky
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
|
167
|
-
|
|
168
|
-
|
|
|
169
|
-
|
|
|
170
|
-
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
│
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
1
|
+
# Skyloom — 天空织机
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+
**≋ 雾 · ⸽ 雨 · ✱ 霜 · ❉ 雪 · ∘ 露 · ☼ 晴**
|
|
6
|
+
|
|
7
|
+
*六位 Agent,一支团队 —— 一座水墨气象台。*
|
|
8
|
+
|
|
9
|
+
[](https://github.com/susurrune/skyloom-ts/actions)
|
|
10
|
+
[](https://www.npmjs.com/package/skyloom)
|
|
11
|
+
[](LICENSE)
|
|
12
|
+
[](https://nodejs.org)
|
|
13
|
+
[](https://www.typescriptlang.org)
|
|
14
|
+
[](https://github.com/susurrune/skyloom-ts/tree/main/tests)
|
|
15
|
+
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
**Skyloom** 是一个本地优先的多智能体终端框架。六个专职 Agent 通过事件总线、三层记忆与 DAG 编排引擎协作完成复杂工作流。它不是又一个 LLM 聊天包装器 —— 而是一个**分工明确、可观测、可审计的 AI 团队运行时**。
|
|
21
|
+
|
|
22
|
+
每个 Agent 对应一种天气、一味矿物颜料、一句古诗。这套贯穿 CLI、TUI 与 Web 的「水墨气象台」意象系统,是 Skyloom 的辨识度所在。设计理念详见 [美学设计系统](docs/AESTHETIC_DESIGN.md)。
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 目录
|
|
27
|
+
|
|
28
|
+
- [快速开始](#快速开始)
|
|
29
|
+
- [六灵 — Agent 体系](#六灵--agent-体系)
|
|
30
|
+
- [交互界面](#交互界面)
|
|
31
|
+
- [立轴模式(默认)](#立轴模式默认)
|
|
32
|
+
- [经典线性模式](#经典线性模式)
|
|
33
|
+
- [Web UI](#web-ui)
|
|
34
|
+
- [命令与操作](#命令与操作)
|
|
35
|
+
- [核心架构](#核心架构)
|
|
36
|
+
- [智能路由与编排](#智能路由与编排)
|
|
37
|
+
- [三层记忆](#三层记忆)
|
|
38
|
+
- [工具系统](#工具系统)
|
|
39
|
+
- [安全体系](#安全体系)
|
|
40
|
+
- [技能系统](#技能系统)
|
|
41
|
+
- [MCP 双向桥](#mcp-双向桥)
|
|
42
|
+
- [工程化能力](#工程化能力)
|
|
43
|
+
- [支持的 LLM Provider](#支持的-llm-provider)
|
|
44
|
+
- [项目结构](#项目结构)
|
|
45
|
+
- [开发](#开发)
|
|
46
|
+
- [路线图](#路线图)
|
|
47
|
+
- [许可证](#许可证)
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 快速开始
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npm install -g skyloom
|
|
55
|
+
sky
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
首次启动自动进入设置向导 —— 选 Provider → 输 API Key → 选模型,全部交互式完成。
|
|
59
|
+
|
|
60
|
+
- API Key 持久化于 `~/.skyloom/config.yaml`,更新不丢失
|
|
61
|
+
- 随时 `/setup` 重新切换 Provider 或模型
|
|
62
|
+
- 支持管道接入:`cat err.log | sky -p "归类错误"`
|
|
63
|
+
|
|
64
|
+
### 常用命令
|
|
65
|
+
|
|
66
|
+
| 命令 | 说明 |
|
|
67
|
+
|------|------|
|
|
68
|
+
| `sky` | 进入交互对话(全屏「立轴」水墨 TUI) |
|
|
69
|
+
| `sky --classic` | 线性滚动界面(管道 / 窄终端自动回退) |
|
|
70
|
+
| `sky fog` | 直接与指定 Agent 对话 |
|
|
71
|
+
| `sky task "写一个CLI"` | 多 Agent DAG 编排 |
|
|
72
|
+
| `sky web` | 启动 Web UI → `http://localhost:3000` |
|
|
73
|
+
| `sky mcp` | 启动 MCP Server(供 Claude Desktop 等调用) |
|
|
74
|
+
| `sky apikey set <provider> <key>` | 保存 API Key |
|
|
75
|
+
| `sky -p "问题" [--agent fog] [--json]` | Headless 模式(CI / 管道 / 外部编排) |
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 六灵 — Agent 体系
|
|
80
|
+
|
|
81
|
+
Skyloom 内置六个专职 Agent,各自拥有独立的系统提示、工具集、技能集与矿物色标识:
|
|
82
|
+
|
|
83
|
+
| Agent | 符号 | 矿物色 | 色值 | 职责定位 | 核心技能 |
|
|
84
|
+
|-------|------|--------|------|----------|----------|
|
|
85
|
+
| **雾** Fog | ≋ | 松烟墨 | `#4a4a44` | 探索洞察 — 调研、分析、信息提取 | `web_research`, `code_analysis` |
|
|
86
|
+
| **雨** Rain | ⸽ | 石青 | `#2a5c8a` | 创造产出 — 代码生成、内容写作 | `code_generator`, `content_writer` |
|
|
87
|
+
| **霜** Frost | ✱ | 石绿 | `#3a7a6e` | 精炼品质 — 代码审查、安全审计 | `code_reviewer`, `security_auditor` |
|
|
88
|
+
| **雪** Snow | ❉ | 铅白 | `#8a8a82` | 架构规划 — 任务分解、系统设计 | `task_planner`, `arch_designer` |
|
|
89
|
+
| **露** Dew | ∘ | 赭石 | `#8b6914` | 可靠守护 — 运维、CI/CD、部署 | `sys_operator`, `ci_cd_manager` |
|
|
90
|
+
| **晴** Fair | ☼ | 朱砂 | `#b3342d` | 情感陪伴 — 对话、自我进化 | `emotional_companion`, `self_evolve` |
|
|
91
|
+
|
|
92
|
+
Agent 之间可通过 `delegate_to` 工具相互委托子任务,也可通过事件总线异步协作。在多 Agent 编排中,**雪(Snow)** 担任规划者角色,将目标分解为 DAG 子任务后分派给各灵执行。
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 交互界面
|
|
97
|
+
|
|
98
|
+
### 立轴模式(默认)
|
|
99
|
+
|
|
100
|
+
`sky` 在真实终端中进入全屏**立轴**模式 —— 一座水墨气象台:
|
|
101
|
+
|
|
102
|
+
- **顶部印章**:随当前 Agent 切换矿物色
|
|
103
|
+
- **天幕**:气象粒子按灵的动势飘动(雾飘 · 雨落 · 霜结 · 雪降 · 露凝 · 晴升)
|
|
104
|
+
- **远山剪影**:随会话逐渐生长
|
|
105
|
+
- **左栏**:六灵常驻面板,多灵编排时亮起脉冲与 ✓/✗ 战绩
|
|
106
|
+
- **右侧正文**:真流式逐字「晕染」入场,差量重绘只刷新变化的行
|
|
107
|
+
- **织谱**:`/task` 多灵编排时逐梭列出子任务与依赖,原位更新状态与耗时
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
┌─ 天空织机 Skyloom ──────────────────────────────────────── 霧 ─┐
|
|
111
|
+
│ ≋ ≋ ≋ 气象粒子 ≋ ≋ │
|
|
112
|
+
│ ▁▂▃▅▃▂▁▁▂▄▂▁ 远山随会话生长 ▁▁▂▃▂▁▁▁▂▄▃▂▁▁▁▂▃▅▃▂▁▁▁▂▃▂▁▁▁ │
|
|
113
|
+
│ ● 霧 fog ✓1 │ ❯ 帮我调研并起草一份方案 │
|
|
114
|
+
│ ⸽ 雨 rain │ │
|
|
115
|
+
│ · 霜 frost │ ✦ 织谱 · 3 梭 ← /task 多灵织造 │
|
|
116
|
+
│ · 雪 snow │ ✓ ① 霧 调研竞品现状 (3.2s) │
|
|
117
|
+
│ · 露 dew │ ⸽ ② 雨 起草方案 ←① ← 执行中,符号脉冲 │
|
|
118
|
+
│ · 晴 fair │ · ③ 霜 审校精炼 ←② │
|
|
119
|
+
│ ╌╌╌╌╌╌╌╌╌╌╌╌╌ │ ⸙ web_search 检索中… │
|
|
120
|
+
│ 山色有无中 │ │
|
|
121
|
+
│ 織 1/3 梭 │ │
|
|
122
|
+
├ ≋ 织造 1/3 ·· ──────────────────── gpt-4o · $0.02 · ▰▰▱▱▱ 41% ┤
|
|
123
|
+
│ ≋ ❯ █ │
|
|
124
|
+
└─ /help 命令 · Tab 补全 · PgUp 回看 · Ctrl-C 退出 ──────────────┘
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**技术要点**:流式文本不直接写终端,而是落入虚拟块缓冲区,每帧在内存中合成后差量重绘。流式与动效互不干扰。CJK 宽度计算贯穿所有排版路径。
|
|
128
|
+
|
|
129
|
+
### 经典线性模式
|
|
130
|
+
|
|
131
|
+
`sky --classic` 或管道 / 窄终端环境自动回退至线性对话流:
|
|
132
|
+
|
|
133
|
+
- 真实行编辑(←→ / Home·End / 退格 / 粘贴 / 中文均正确)
|
|
134
|
+
- `↑↓` 历史、`/` 命令 `Tab` 补全
|
|
135
|
+
- 回复**真流式**逐字呈现,按终端宽度智能换行(中英文 / 长链接不溢出)
|
|
136
|
+
- 每位灵以矿物色印章入场
|
|
137
|
+
|
|
138
|
+
### Web UI
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
sky web
|
|
142
|
+
# → http://localhost:3000
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
宣纸质感、六矿物颜料、按 Agent 切换的气象粒子与印章汉字。`⌘1-6` 唤灵切换。回复经 SSE **真流式**推送,工具调用呈现为「气象事件」。
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 命令与操作
|
|
150
|
+
|
|
151
|
+
### Slash 命令
|
|
152
|
+
|
|
153
|
+
| 类别 | 命令 | 说明 |
|
|
154
|
+
|------|------|------|
|
|
155
|
+
| **Agent 切换** | `/fog` `/rain` `/frost` `/snow` `/dew` `/fair` | 切换当前对话 Agent |
|
|
156
|
+
| **配置** | `/setup` `/apikey` `/model` | 安装向导、设置 Key、切换模型 |
|
|
157
|
+
| **信息** | `/status` `/cost` `/memory` `/workspace` `/version` | 查看系统状态 |
|
|
158
|
+
| **会话** | `/sessions` · `/resume <id>` · `/new` | 会话列表、恢复、新建 |
|
|
159
|
+
| **操作** | `/compact` `/retry` `/clear` `/task <goal>` | 压缩上下文、重试、编排 |
|
|
160
|
+
| **诊断** | `/context` `/tools` | Token 分布明细、工具调用统计 |
|
|
161
|
+
| **版本控制** | `/rewind [n]` | 文件检查点回退(不依赖 git) |
|
|
162
|
+
| **退出** | `/quit` `/exit` | 退出对话 |
|
|
163
|
+
|
|
164
|
+
### 输入宏
|
|
165
|
+
|
|
166
|
+
| 宏 | 说明 | 示例 |
|
|
167
|
+
|----|------|------|
|
|
168
|
+
| `@文件路径` | 将文件内容注入上下文 | `@src/main.ts 这个函数有bug` |
|
|
169
|
+
| `!shell命令` | Shell 输出入上下文(不耗 LLM) | `!git diff` |
|
|
170
|
+
| `#内容` | 一句话追加到 SKY.md 项目记忆 | `#项目用pnpm管理依赖` |
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 核心架构
|
|
175
|
+
|
|
176
|
+
### 智能路由与编排
|
|
177
|
+
|
|
178
|
+
Skyloom 的输入处理分三级,由规则引擎在 < 1ms 内完成分类(无需 LLM 调用):
|
|
179
|
+
|
|
180
|
+
| 模式 | 触发条件 | 执行路径 |
|
|
181
|
+
|------|----------|----------|
|
|
182
|
+
| **direct** | 短问候、单句事实问答 | 直接回复,不调用工具 |
|
|
183
|
+
| **single** | 明确单步任务 | 单 Agent + 工具集 |
|
|
184
|
+
| **orchestrate** | 多步骤、含枚举/序号、长文本 | 雪(Snow)分解为 DAG → 多 Agent 协作 |
|
|
185
|
+
|
|
186
|
+
对于常见工作流(代码审查、调研后写作、重构后测试等),**9 种 Pipeline 模板**会在匹配后直接跳过 LLM 拆解,节省 2-3k tokens 的规划开销。
|
|
187
|
+
|
|
188
|
+
### 三层记忆
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
┌─────────────────────────────────────────────────┐
|
|
192
|
+
│ Short-term — SQLite 持久化会话上下文 │
|
|
193
|
+
│ Working — 内存级任务作用域状态 │
|
|
194
|
+
│ Long-term — 持久化 KV 存储 + 语义检索 │
|
|
195
|
+
└─────────────────────────────────────────────────┘
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
- **Short-term**:对话消息序列,SQLite 持久化,支持会话恢复与上下文压缩(`/compact`)
|
|
199
|
+
- **Working**:任务级临时状态(todo 清单、中间结果),存于内存,不怕上下文压缩丢失
|
|
200
|
+
- **Long-term**:持久化事实存储,支持 `remember_fact` / `recall_facts`,通过 TF-IDF + Cosine 语义检索召回
|
|
201
|
+
|
|
202
|
+
附加能力:
|
|
203
|
+
- **知识图谱**:实体-关系三重存储(SQLite),自动从对话中提取,支持 2-hop 传递查询
|
|
204
|
+
- **向量搜索**:TF-IDF + Cosine,CJK 感知分词,零外部依赖
|
|
205
|
+
- **持续学习**:任务完成后自动记录审查,失败模式入库用于去重与自进化
|
|
206
|
+
|
|
207
|
+
### 工具系统
|
|
208
|
+
|
|
209
|
+
| 工具类别 | 工具 | 说明 |
|
|
210
|
+
|----------|------|------|
|
|
211
|
+
| **文件操作** | `read_file` `write_file` `edit_file` `delete_file` `copy_file` `move_file` | 文件读写编辑,支持 `offset/limit` 分页 |
|
|
212
|
+
| **搜索** | `list_directory` `tree` `file_search` `code_search` `grep` | 目录遍历、文件搜索、代码搜索 |
|
|
213
|
+
| **Shell** | `run_bash` | 沙箱隔离执行,超时保护 + 输出限制 |
|
|
214
|
+
| **网络** | `http_get` `http_post` `web_search` `fetch_page` | HTTP 请求 + 多引擎搜索(DDG/Bing/Baidu/Sogou 降级) |
|
|
215
|
+
| **Git** | `git_status` `git_diff` `git_log` `git_add` `git_commit` `git_checkout` | Git 操作 |
|
|
216
|
+
| **系统** | `system_info` `system_diagnose` `list_processes` `list_installed_apps` | 系统诊断 |
|
|
217
|
+
| **电脑操作** | `launch_app` `open_path` `kill_process` `install_software` 等 10 个 | 跨平台桌面操作 |
|
|
218
|
+
| **Agent 间** | `delegate_to` | 跨 Agent 任务委托 |
|
|
219
|
+
| **模型管理** | `set_my_model` | Agent 自主切换模型 |
|
|
220
|
+
| **记忆** | `remember_fact` `recall_facts` | 长期记忆读写 |
|
|
221
|
+
| **技能** | `use_skill` `list_skills` | 技能激活与管理 |
|
|
222
|
+
| **MCP** | `mcp_list_servers` `mcp_add_server` `mcp_remove_server` | MCP 服务器管理 |
|
|
223
|
+
|
|
224
|
+
工具框架特性:
|
|
225
|
+
- **重试与熔断**:每个工具支持 `maxRetries` + `retryDelay`,内置 Circuit Breaker 模式
|
|
226
|
+
- **结果缓存**:LRU 缓存(128 条目),可配置 `cacheable` 标记
|
|
227
|
+
- **超时保护**:默认 30s,可按工具配置
|
|
228
|
+
- **结果截断**:超大工具结果自动头尾保留 + 中间截断(默认 12k 字符),提示精确重取
|
|
229
|
+
|
|
230
|
+
### 安全体系
|
|
231
|
+
|
|
232
|
+
Skyloom 的安全模型贯穿工具执行的全生命周期:
|
|
233
|
+
|
|
234
|
+
| 层级 | 机制 | 说明 |
|
|
235
|
+
|------|------|------|
|
|
236
|
+
| **危险分级** | 5 级 DangerLevel | `SAFE` → `LOW` → `MEDIUM` → `HIGH` → `CRITICAL`,每工具静态映射 |
|
|
237
|
+
| **红线拦截** | REDLINE_PATTERNS / REDLINE_COMMANDS | `rm -rf`、`format C:`、`sudo rm` 等永不自动批准 |
|
|
238
|
+
| **沙箱隔离** | `sandbox.ts` | 临时目录隔离、超时强制终止、输出大小限制(1MB)、执行前预检 |
|
|
239
|
+
| **SSRF 防护** | `assertFetchAllowed` | 阻止对私有/环回/链路本地地址的请求(DNS 解析后二次检查) |
|
|
240
|
+
| **工作区围栏** | `SKYLOOM_WORKSPACE_FENCE=1` | 可选:限制文件操作在项目根目录内 |
|
|
241
|
+
| **输出脱敏** | `filter.ts` | API Key / 密码 / 私钥 / 邮箱 / 内网 IP / 数据库连接串自动替换 |
|
|
242
|
+
| **审计日志** | 全链路 | 所有安全决策记录在案 |
|
|
243
|
+
| **Hooks** | `pre_tool` / `post_tool` | 用户自定义 shell 钩子,`pre_tool` 非零退出可拦截工具调用 |
|
|
244
|
+
|
|
245
|
+
### 技能系统
|
|
246
|
+
|
|
247
|
+
17 个内置技能,运行时按 Agent 职责动态激活:
|
|
248
|
+
|
|
249
|
+
| 技能 | 适用 Agent | 说明 |
|
|
250
|
+
|------|-----------|------|
|
|
251
|
+
| `web_research` | 雾 | 多引擎网络搜索与信息整合 |
|
|
252
|
+
| `code_analysis` | 雾 | 代码结构分析与理解 |
|
|
253
|
+
| `code_generator` | 雨 | 代码生成与实现 |
|
|
254
|
+
| `content_writer` | 雨 | 文档与内容创作 |
|
|
255
|
+
| `code_reviewer` | 霜 | 代码审查与质量评估 |
|
|
256
|
+
| `security_auditor` | 霜 | 安全漏洞审计 |
|
|
257
|
+
| `task_planner` | 雪 | 任务分解与计划制定 |
|
|
258
|
+
| `arch_designer` | 雪 | 系统架构设计 |
|
|
259
|
+
| `sys_operator` | 露 | 系统运维操作 |
|
|
260
|
+
| `ci_cd_manager` | 露 | CI/CD 流水线管理 |
|
|
261
|
+
| `emotional_companion` | 晴 | 情感陪伴与对话 |
|
|
262
|
+
| `self_evolve` | 晴 | 自我进化与 Prompt 优化 |
|
|
263
|
+
| `data_transformer` | 雨/霜 | 数据格式转换 |
|
|
264
|
+
| `document_analysis` | 雾 | 文档分析与提取 |
|
|
265
|
+
| `performance_checker` | 霜 | 性能分析与检查 |
|
|
266
|
+
| `api_integrator` | 雨 | API 集成与对接 |
|
|
267
|
+
| `workflow_designer` | 雪 | 工作流设计与编排 |
|
|
268
|
+
|
|
269
|
+
**Claude Code 技能迁移**:将 skill 文件夹放入 `.claude/skills/` 或 `.sky/skills/`,SKILL.md 同架构兼容(frontmatter `name/description/allowed-tools`,工具名自动映射),零拷贝迁移、改完即生效。
|
|
270
|
+
|
|
271
|
+
扫描路径:`~/.claude/skills` → `~/.skyloom/skills` → `.claude/skills` → `.sky/skills`
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## 工程化能力
|
|
276
|
+
|
|
277
|
+
### 项目记忆 SKY.md
|
|
278
|
+
|
|
279
|
+
三层加载,自动注入所有 Agent 的系统提示:
|
|
280
|
+
|
|
281
|
+
1. `~/.skyloom/SKY.md` — 用户级(跨项目通用)
|
|
282
|
+
2. `./SKY.md` — 项目级(兼容 `CLAUDE.md` / `AGENTS.md`)
|
|
283
|
+
3. `./SKY.local.md` — 本地覆盖(不入版本控制)
|
|
284
|
+
|
|
285
|
+
`/init` 生成模板,`#内容` 快速追加。
|
|
286
|
+
|
|
287
|
+
### 验证闭环
|
|
288
|
+
|
|
289
|
+
任务写文件后自动运行配置的验证命令(测试 / lint / type-check),失败回灌 Agent 自动修复(默认 2 轮):
|
|
290
|
+
|
|
291
|
+
```yaml
|
|
292
|
+
# ~/.skyloom/config.yaml
|
|
293
|
+
verify:
|
|
294
|
+
commands: ["npm run -s type-check", "npm test -s"]
|
|
295
|
+
max_fix_rounds: 2
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
也可在 SKY.md 的 `## Verify` 代码块中定义。`/verify` 手动触发。
|
|
299
|
+
|
|
300
|
+
### 计划模式
|
|
301
|
+
|
|
302
|
+
`Shift+Tab` 或 `/plan` 进入:只读工具集 + 先出编号方案,批准后切回执行。`/auto` 免审批模式。
|
|
303
|
+
|
|
304
|
+
### 文件检查点
|
|
305
|
+
|
|
306
|
+
`/rewind [n]` — 每轮自动快照被修改的文件,一键回退 n 轮。不依赖 git(`run_bash` 副作用除外)。
|
|
307
|
+
|
|
308
|
+
### 自定义命令
|
|
309
|
+
|
|
310
|
+
`.sky/commands/*.md`(项目级)/ `~/.skyloom/commands/`(用户级):
|
|
311
|
+
|
|
312
|
+
- frontmatter 可指定 `description` / `agent`
|
|
313
|
+
- 正文支持 `$ARGUMENTS` `$1…$9` 占位符
|
|
314
|
+
- 子目录命名空间:`git/commit.md` → `/git:commit`
|
|
315
|
+
- 改完即生效
|
|
316
|
+
|
|
317
|
+
### Hooks
|
|
318
|
+
|
|
319
|
+
```yaml
|
|
320
|
+
hooks:
|
|
321
|
+
session_start:
|
|
322
|
+
- "echo session initialized"
|
|
323
|
+
pre_tool:
|
|
324
|
+
- matcher: "run_bash"
|
|
325
|
+
command: "./scripts/guard.sh" # 非零退出 = 拦截
|
|
326
|
+
post_tool:
|
|
327
|
+
- matcher: "write_file|edit_file"
|
|
328
|
+
command: "npx prettier --write \"$SKY_FILE\""
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
环境变量:`SKY_TOOL`、`SKY_ARGS`、`SKY_FILE`、`SKY_AGENT`。
|
|
332
|
+
|
|
333
|
+
### 模型配置
|
|
334
|
+
|
|
335
|
+
`/model [id|unified <id>|reset|key <key>]` — 统一默认 + 每灵独立覆盖(模型与 API Key 均可),即改即生效并持久化。Agent 也能用 `set_my_model` 工具自己换模型。
|
|
336
|
+
|
|
337
|
+
### 自进化
|
|
338
|
+
|
|
339
|
+
失败模式分析 → Prompt diff 生成 → Agent 自主应用改进。经验库去重,7 天滑动窗口。
|
|
340
|
+
|
|
341
|
+
### 可观测性
|
|
342
|
+
|
|
343
|
+
| 命令 | 说明 |
|
|
344
|
+
|------|------|
|
|
345
|
+
| `/context` | 按角色分解 token 占用 + 系统提示 / 工具 / 技能开销 |
|
|
346
|
+
| `/tools` | 每工具调用次数 / 失败 / 缓存命中 / 平均耗时 / 熔断状态 |
|
|
347
|
+
| `/cost` | 累计用量与费用(按模型、按 Agent 细分) |
|
|
348
|
+
|
|
349
|
+
### MCP 双向桥
|
|
350
|
+
|
|
351
|
+
- **Client**:连接外部 MCP Server(stdio / SSE 传输),扩展工具集。兼容 `.mcp.json`(Claude Code 同款 schema)
|
|
352
|
+
- **Server**:`sky mcp` 启动,将 Skyloom Agent 暴露为工具供 Claude Desktop / Zed / Continue 等调用
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## 支持的 LLM Provider
|
|
357
|
+
|
|
358
|
+
9 家 Provider,统一接口,支持自动 fallback 链与成本追踪:
|
|
359
|
+
|
|
360
|
+
| Provider | 可调模型 | 上下文窗口 |
|
|
361
|
+
|----------|----------|-----------|
|
|
362
|
+
| **OpenAI** | gpt-4.1, gpt-4.1-mini, gpt-4o, gpt-4o-mini, o4-mini | 128K – 1M |
|
|
363
|
+
| **Anthropic** | claude-sonnet-4-6, claude-opus-4-7, claude-haiku-4-5 | 200K |
|
|
364
|
+
| **DeepSeek** | deepseek-chat, deepseek-reasoner, deepseek-v4-flash, deepseek-v4-pro | 64K – 128K |
|
|
365
|
+
| **Google** | gemini-2.5-pro, gemini-2.5-flash | 1M |
|
|
366
|
+
| **Groq** | llama-4-scout, llama-3.3-70b, mixtral-8x7b | 32K – 128K |
|
|
367
|
+
| **OpenRouter** | gpt-4.1, claude-sonnet-4-6, gemini-2.5-flash, llama-4-maverick | 128K – 1M |
|
|
368
|
+
| **Mistral** | mistral-large, mistral-small | 32K – 128K |
|
|
369
|
+
| **xAI** | grok-4 | 128K |
|
|
370
|
+
| **Ollama** | llama3, qwen2.5, deepseek-r1(本地) | 8K – 32K |
|
|
371
|
+
|
|
372
|
+
模型目录是单一事实源,含上下文窗口与成本数据,参见 [`config/models.yaml`](config/models.yaml)。
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
## 项目结构
|
|
377
|
+
|
|
378
|
+
```
|
|
379
|
+
skyloom-ts/
|
|
380
|
+
├── src/
|
|
381
|
+
│ ├── cli/ CLI 入口与交互层
|
|
382
|
+
│ │ ├── main.ts 命令注册 + 对话循环 (Commander)
|
|
383
|
+
│ │ ├── loom.ts 立轴全屏 TUI (差量重绘引擎)
|
|
384
|
+
│ │ ├── loom_chat.ts 立轴对话管理
|
|
385
|
+
│ │ ├── tui.ts 行编辑器 + 流式渲染 + CJK 宽度
|
|
386
|
+
│ │ ├── mode.ts 模式控制器
|
|
387
|
+
│ │ ├── input_macros.ts @文件 !命令 #记忆 宏展开
|
|
388
|
+
│ │ └── commands_md.ts 自定义 .md 命令加载
|
|
389
|
+
│ ├── core/ 核心引擎 (44 模块)
|
|
390
|
+
│ │ ├── agent.ts BaseAgent — LLM 推理循环 + 工具执行
|
|
391
|
+
│ │ ├── agent/
|
|
392
|
+
│ │ │ ├── task.ts Task/TaskResult 领域模型
|
|
393
|
+
│ │ │ └── guard.ts 循环守卫(防无限工具调用)
|
|
394
|
+
│ │ ├── factory.ts SystemContext — 统一启动 + 编排入口
|
|
395
|
+
│ │ ├── llm.ts LLM 统一客户端(路由/重试/fallback/成本)
|
|
396
|
+
│ │ ├── memory.ts 三层记忆(SQLite + 内存 + 持久化 KV)
|
|
397
|
+
│ │ ├── bus.ts 异步事件总线(Agent 间通信)
|
|
398
|
+
│ │ ├── tool.ts 工具注册框架(重试/缓存/熔断/超时)
|
|
399
|
+
│ │ ├── tool_router.ts 工具智能选择(按上下文裁剪工具集)
|
|
400
|
+
│ │ ├── router.ts 复杂度路由(direct/single/orchestrate)
|
|
401
|
+
│ │ ├── pipelines.ts 9 种预定义 DAG 模板
|
|
402
|
+
│ │ ├── security.ts 5 级危险分级 + 红线拦截
|
|
403
|
+
│ │ ├── sandbox.ts Shell 沙箱(隔离/超时/输出限制)
|
|
404
|
+
│ │ ├── filter.ts 输出脱敏(API Key/密码/PII)
|
|
405
|
+
│ │ ├── verify.ts 验证闭环(自动跑测试/lint)
|
|
406
|
+
│ │ ├── hooks.ts 生命周期钩子(pre/post_tool)
|
|
407
|
+
│ │ ├── checkpoint.ts 编排检查点(中断恢复)
|
|
408
|
+
│ │ ├── file_checkpoint.ts 文件快照(/rewind)
|
|
409
|
+
│ │ ├── skill.ts 技能注册与动态激活
|
|
410
|
+
│ │ ├── skymd.ts SKY.md 三层加载
|
|
411
|
+
│ │ ├── mcp.ts MCP Client(stdio/SSE 传输)
|
|
412
|
+
│ │ ├── mcp_server.ts MCP Server(暴露 Agent 为工具)
|
|
413
|
+
│ │ ├── vector.ts TF-IDF + Cosine 向量检索
|
|
414
|
+
│ │ ├── graph.ts 知识图谱(实体-关系三重存储)
|
|
415
|
+
│ │ ├── semantic.ts 字符 n-gram Jaccard 语义评分
|
|
416
|
+
│ │ ├── learn.ts 持续学习(任务审查 + 经验库)
|
|
417
|
+
│ │ ├── evolve.ts 自进化(失败分析 → Prompt 优化)
|
|
418
|
+
│ │ ├── longdoc.ts 长文档处理(滑动窗口 + 摘要链)
|
|
419
|
+
│ │ ├── circuit_breaker.ts 熔断器模式
|
|
420
|
+
│ │ ├── config.ts 配置管理(YAML 多层合并)
|
|
421
|
+
│ │ ├── catalog.ts 模型目录(单一事实源)
|
|
422
|
+
│ │ ├── estimate.ts Token 估算
|
|
423
|
+
│ │ ├── arbitrate.ts 仲裁器
|
|
424
|
+
│ │ ├── cache.ts LLM 缓存
|
|
425
|
+
│ │ ├── middleware.ts 中间件链
|
|
426
|
+
│ │ ├── profile.ts 性能分析
|
|
427
|
+
│ │ ├── theme.ts Agent 主题(颜色/符号/诗句)
|
|
428
|
+
│ │ ├── icons.ts Agent 图标
|
|
429
|
+
│ │ ├── workspace.ts 工作区管理
|
|
430
|
+
│ │ ├── schemas.ts 配置 Schema 校验
|
|
431
|
+
│ │ ├── model_config.ts 每灵模型配置
|
|
432
|
+
│ │ ├── constants.ts 全局常量
|
|
433
|
+
│ │ └── logger.ts 结构化日志
|
|
434
|
+
│ ├── agents/ 6 个 Agent 定义
|
|
435
|
+
│ │ ├── fog.ts 雾 — 探索洞察
|
|
436
|
+
│ │ ├── rain.ts 雨 — 创造产出
|
|
437
|
+
│ │ ├── frost.ts 霜 — 精炼品质
|
|
438
|
+
│ │ ├── snow.ts 雪 — 架构规划
|
|
439
|
+
│ │ ├── dew.ts 露 — 可靠守护
|
|
440
|
+
│ │ └── fair.ts 晴 — 情感陪伴
|
|
441
|
+
│ ├── tools/ 工具实现
|
|
442
|
+
│ │ ├── builtin.ts 内置工具(文件/搜索/网络/Git/Shell)
|
|
443
|
+
│ │ ├── computer.ts 电脑操作(10 个跨平台工具)
|
|
444
|
+
│ │ ├── delegate.ts Agent 间委托
|
|
445
|
+
│ │ ├── model_tool.ts 模型自切换
|
|
446
|
+
│ │ └── todo.ts 任务清单工具
|
|
447
|
+
│ ├── skills/ 技能加载器
|
|
448
|
+
│ │ └── loader.ts SKILL.md 解析与注册
|
|
449
|
+
│ ├── plugins/ 插件加载器
|
|
450
|
+
│ │ └── loader.ts 插件发现与注册
|
|
451
|
+
│ ├── web/ Web 层
|
|
452
|
+
│ │ ├── server.ts HTTP + SSE + 水墨气象台 UI
|
|
453
|
+
│ │ └── tts.ts 文本转语音
|
|
454
|
+
│ └── assets/ 静态资源
|
|
455
|
+
├── config/
|
|
456
|
+
│ ├── default.yaml 默认配置
|
|
457
|
+
│ ├── providers.yaml Provider 目录(base URL / env var)
|
|
458
|
+
│ ├── models.yaml 模型目录(上下文窗口 / 成本)
|
|
459
|
+
│ └── skills/ 17 个内置技能 (SKILL.md)
|
|
460
|
+
├── tests/ 24 套件 · 240 Vitest 用例
|
|
461
|
+
├── docs/
|
|
462
|
+
│ ├── AESTHETIC_DESIGN.md 美学设计系统
|
|
463
|
+
│ └── OPTIMIZATION_PLAN.md 优化路线图
|
|
464
|
+
├── scripts/
|
|
465
|
+
│ ├── install.js 安装脚本
|
|
466
|
+
│ └── link.js 符号链接
|
|
467
|
+
├── package.json
|
|
468
|
+
├── tsconfig.json
|
|
469
|
+
└── vitest.config.ts
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
---
|
|
473
|
+
|
|
474
|
+
## 开发
|
|
475
|
+
|
|
476
|
+
```bash
|
|
477
|
+
git clone https://github.com/susurrune/skyloom-ts.git
|
|
478
|
+
cd skyloom-ts
|
|
479
|
+
npm install
|
|
480
|
+
|
|
481
|
+
npm run build # tsc 编译
|
|
482
|
+
npm run dev # watch 模式
|
|
483
|
+
npm test # Vitest (24 套件 · 240 用例)
|
|
484
|
+
npm run test:coverage # 覆盖率报告
|
|
485
|
+
npm run type-check # TypeScript 严格模式检查
|
|
486
|
+
npm run lint # ESLint
|
|
487
|
+
npm run format # Prettier 格式化
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### 技术栈
|
|
491
|
+
|
|
492
|
+
| 层面 | 选型 |
|
|
493
|
+
|------|------|
|
|
494
|
+
| 语言 | TypeScript 5.4 (strict mode) |
|
|
495
|
+
| 运行时 | Node.js ≥ 18 |
|
|
496
|
+
| 包管理 | npm |
|
|
497
|
+
| 测试 | Vitest 2.x + @vitest/coverage-v8 |
|
|
498
|
+
| 代码规范 | ESLint 9 + @typescript-eslint |
|
|
499
|
+
| 格式化 | Prettier 3.x |
|
|
500
|
+
| 数据库 | sql.js (SQLite, WASM) |
|
|
501
|
+
| HTTP | axios |
|
|
502
|
+
| CLI | commander |
|
|
503
|
+
| 终端渲染 | chalk + 自研差量重绘引擎 |
|
|
504
|
+
| 配置 | yaml |
|
|
505
|
+
|
|
506
|
+
### 路径别名
|
|
507
|
+
|
|
508
|
+
```json
|
|
509
|
+
"@skyloom/*": ["src/*"]
|
|
510
|
+
"@/*": ["src/*"]
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
---
|
|
514
|
+
|
|
515
|
+
## 路线图
|
|
516
|
+
|
|
517
|
+
Skyloom 正朝「顶级开源 Agent 框架」演进,对标 [opencode](https://github.com/sst/opencode) 的架构与 Claude Code 的交互范式。完整规划见 [优化计划](docs/OPTIMIZATION_PLAN.md)。
|
|
518
|
+
|
|
519
|
+
---
|
|
520
|
+
|
|
521
|
+
## 许可证
|
|
522
|
+
|
|
523
|
+
[MIT License](LICENSE) · **v1.14.7** · 全功能迁移自 [Python 原版](https://github.com/susurrune/skyloom)
|