@fgbg/mdocs 0.8.18 → 0.8.20
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 +7 -1
- package/agent-skills/changelog/SKILL.md +13 -1
- package/agent-skills/getting-started-installation/SKILL.md +12 -2
- package/agent-skills/index.json +1 -1
- package/agent-skills/usage-onboarding-ai/SKILL.md +11 -0
- package/agent-skills/usage-settings/SKILL.md +15 -1
- package/bin/mdocs.js +1 -1
- package/dist/server/agent/Agent/context-usage.js +6 -5
- package/dist/server/agent/Agent/context-usage.js.map +1 -1
- package/dist/server/agent/Agent/hydrate-messages.js +137 -0
- package/dist/server/agent/Agent/hydrate-messages.js.map +1 -0
- package/dist/server/agent/Agent/run-pi-agent.js +109 -0
- package/dist/server/agent/Agent/run-pi-agent.js.map +1 -0
- package/dist/server/agent/Agent/run.js +46 -322
- package/dist/server/agent/Agent/run.js.map +1 -1
- package/dist/server/agent/Agent/session-manager.js +38 -3
- package/dist/server/agent/Agent/session-manager.js.map +1 -1
- package/dist/server/agent/Agent/skill-form-pending.js +68 -0
- package/dist/server/agent/Agent/skill-form-pending.js.map +1 -0
- package/dist/server/agent/Agent/stream-events.js +2 -0
- package/dist/server/agent/Agent/stream-events.js.map +1 -0
- package/dist/server/agent/Agent/system-prompt.js +8 -4
- package/dist/server/agent/Agent/system-prompt.js.map +1 -1
- package/dist/server/agent/Agent/tool-deps.js +7 -0
- package/dist/server/agent/Agent/tool-deps.js.map +1 -0
- package/dist/server/agent/Agent/tool-ui-effects.js +170 -0
- package/dist/server/agent/Agent/tool-ui-effects.js.map +1 -0
- package/dist/server/agent/Agent/tools-choice.js +44 -50
- package/dist/server/agent/Agent/tools-choice.js.map +1 -1
- package/dist/server/agent/Agent/tools-coding.get-working.test.js +10 -8
- package/dist/server/agent/Agent/tools-coding.get-working.test.js.map +1 -1
- package/dist/server/agent/Agent/tools-coding.js +51 -58
- package/dist/server/agent/Agent/tools-coding.js.map +1 -1
- package/dist/server/agent/Agent/tools-documents.get-document.test.js +2 -4
- package/dist/server/agent/Agent/tools-documents.get-document.test.js.map +1 -1
- package/dist/server/agent/Agent/tools-documents.js +192 -187
- package/dist/server/agent/Agent/tools-documents.js.map +1 -1
- package/dist/server/agent/Agent/tools-domains.js +155 -156
- package/dist/server/agent/Agent/tools-domains.js.map +1 -1
- package/dist/server/agent/Agent/tools-overwrite.js +93 -101
- package/dist/server/agent/Agent/tools-overwrite.js.map +1 -1
- package/dist/server/agent/Agent/tools-registry.js +26 -0
- package/dist/server/agent/Agent/tools-registry.js.map +1 -0
- package/dist/server/agent/Agent/tools-registry.test.js +67 -0
- package/dist/server/agent/Agent/tools-registry.test.js.map +1 -0
- package/dist/server/agent/Agent/tools-template.js +45 -0
- package/dist/server/agent/Agent/tools-template.js.map +1 -0
- package/dist/server/agent/Agent/tools-user-skills.js +176 -0
- package/dist/server/agent/Agent/tools-user-skills.js.map +1 -0
- package/dist/server/agent/Agent/tools-visitors.js +15 -22
- package/dist/server/agent/Agent/tools-visitors.js.map +1 -1
- package/dist/server/agent/Agent/tools.js +40 -33
- package/dist/server/agent/Agent/tools.js.map +1 -1
- package/dist/server/agent/Agent/user-skills.js +214 -0
- package/dist/server/agent/Agent/user-skills.js.map +1 -0
- package/dist/server/agent/Agent/user-skills.test.js +53 -0
- package/dist/server/agent/Agent/user-skills.test.js.map +1 -0
- package/dist/server/cli/main.js +10 -0
- package/dist/server/cli/main.js.map +1 -1
- package/dist/server/cli/self-update.js +158 -0
- package/dist/server/cli/self-update.js.map +1 -0
- package/dist/server/cli/self-update.test.js +17 -0
- package/dist/server/cli/self-update.test.js.map +1 -0
- package/dist/server/db/repositories/agent-user-skill.repo.js +78 -0
- package/dist/server/db/repositories/agent-user-skill.repo.js.map +1 -0
- package/dist/server/db/schema.js +11 -0
- package/dist/server/db/schema.js.map +1 -1
- package/dist/server/routes/agent.routes.js +177 -0
- package/dist/server/routes/agent.routes.js.map +1 -1
- package/dist/web/assets/AgentChatPanel-Cva-1CWE.js +1 -0
- package/dist/web/assets/AgentSkillFormCard-DcKxyiAV.js +6 -0
- package/dist/web/assets/AiWriteWorkbench-DkZ4JQuS.js +6 -0
- package/dist/web/assets/DiagramEditor-BTRe45TX-C1YVSFMK.js +2 -0
- package/dist/web/assets/{DocumentEditor-B2H3rHSg.js → DocumentEditor-B6IMAcRI.js} +1 -1
- package/dist/web/assets/{MergeView-Cy4Pi3Je.js → MergeView-DoUvoUF6.js} +1 -1
- package/dist/web/assets/{PlaygroundPage-hHfIzPO5.js → PlaygroundPage-XyDSnDG_.js} +1 -1
- package/dist/web/assets/SettingsPage-DOeySRr-.js +1 -0
- package/dist/web/assets/{Toolbar-DPkTtGNL.js → Toolbar-C6GIlNMW.js} +1 -1
- package/dist/web/assets/{VisitorPickerModal-CJ0K2gj8.js → VisitorPickerModal-Db9Mh63R.js} +1 -1
- package/dist/web/assets/{copy-DCKasK29.js → copy-D8ORBt1-.js} +1 -1
- package/dist/web/assets/{editor-BBXgdU3Q.js → editor-ONzd_YnO.js} +1 -1
- package/dist/web/assets/index-BQ1RXV0n.css +1 -0
- package/dist/web/assets/{index-CA7lpALZ.js → index-czw0A2GN.js} +7 -7
- package/dist/web/assets/meta2d-C8Z4cn-d.js +110 -0
- package/dist/web/assets/meta2dEngine-BD2XbzaV-D1CzYV6l.js +1 -0
- package/dist/web/assets/{plus-B2rZTPWV.js → plus-9njZDkAU.js} +1 -1
- package/dist/web/assets/react-BCo8JH1D.js +2126 -0
- package/dist/web/index.html +2 -2
- package/package.json +2 -2
- package/dist/web/assets/AgentChatPanel-DHy3KgSW.js +0 -1
- package/dist/web/assets/AiWriteWorkbench-Ce_OaED4.js +0 -6
- package/dist/web/assets/SettingsPage-BRAPdqW9.js +0 -1
- package/dist/web/assets/history-BQkmetJ0.js +0 -6
- package/dist/web/assets/index-BksNm27A.css +0 -1
- package/dist/web/assets/react-CQByW0Rg.js +0 -2236
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
面向个人开发者与小团队:产品内 **智能助手 + 帮写**,外部 **CLI / Skills** 接入 Cursor / Claude;SQLite + 本地文件,**无账户**即可协作。
|
|
6
6
|
|
|
7
|
-
[文档站点](https://xuhuafeifei.github.io/mdocs-site/) · [GitHub](https://github.com/xuhuafeifei/mdocs) · [npm `@fgbg/mdocs`](https://www.npmjs.com/package/@fgbg/mdocs) · 当前版本 **0.8.
|
|
7
|
+
[文档站点](https://xuhuafeifei.github.io/mdocs-site/) · [GitHub](https://github.com/xuhuafeifei/mdocs) · [npm `@fgbg/mdocs`](https://www.npmjs.com/package/@fgbg/mdocs) · 当前版本 **0.8.20**
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
10
|
<img src="image/site主页.png" alt="mdocs 文档站点首页" width="860" />
|
|
@@ -104,6 +104,12 @@ pnpm typecheck
|
|
|
104
104
|
pnpm mdocs visitor list # 管理 CLI(开发用 tsx 入口)
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
+
全局安装后原地升级(淘宝 npmmirror,保留 `node_modules`,依赖走 `--prefer-offline`):
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
mdocs update
|
|
111
|
+
```
|
|
112
|
+
|
|
107
113
|
仓库布局:
|
|
108
114
|
|
|
109
115
|
```
|
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: changelog
|
|
3
3
|
name: "更新日志"
|
|
4
|
-
description: "-
|
|
4
|
+
description: "- **私人 Agent Skills**:设置 → AI 可 CRUD 私人提示词宏(名称对本账号唯一,仅英文数字下划线);智能助手 / 帮写可按名称引用,落盘只存引用,请求时再展开进上下文 - **助手可管理 Skill**:`list_user_skills` / `create_user_skill` / `update_user_skill` / `delete_user_skill`;"
|
|
5
5
|
keywords: []
|
|
6
6
|
source: changelog.md
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# 更新日志
|
|
10
10
|
|
|
11
|
+
## v0.8.20
|
|
12
|
+
|
|
13
|
+
- **私人 Agent Skills**:设置 → AI 可 CRUD 私人提示词宏(名称对本账号唯一,仅英文数字下划线);智能助手 / 帮写可按名称引用,落盘只存引用,请求时再展开进上下文
|
|
14
|
+
- **助手可管理 Skill**:`list_user_skills` / `create_user_skill` / `update_user_skill` / `delete_user_skill`;新建与修改弹出带倒计时的表单卡
|
|
15
|
+
- **`mdocs update`**:全局安装后从淘宝 npmmirror 原地升级,保留已有 `node_modules`,依赖走 `--prefer-offline`(已缓存的不再重复下载)
|
|
16
|
+
|
|
17
|
+
## v0.8.19
|
|
18
|
+
|
|
19
|
+
- **Meta2d 按需加载**:文档没有流程图时不下载 `@meta2d`;有图 / 插入图 / 打开编辑时再加载
|
|
20
|
+
- **流程图属性「Text」输入**:防抖写回画布,不再每敲一字全量重绘(依赖 `@fgbg/lobe-editor@1.0.0-fork.19`)
|
|
21
|
+
- **构建**:Vite 将 `@meta2d` / `canvas2svg` 单独拆成 `meta2d` chunk
|
|
22
|
+
|
|
11
23
|
## v0.8.18
|
|
12
24
|
|
|
13
25
|
- **首屏加速**:编辑器 / 设置 / 助手 / 帮写按需懒加载;Vite 拆分重型 vendor chunk,入口 JS 从约 6MB 降到约 134KB
|
|
@@ -188,13 +188,23 @@ npm install typebox@1.1.38 --no-audit --no-fund
|
|
|
188
188
|
|
|
189
189
|
## 升级
|
|
190
190
|
|
|
191
|
-
|
|
191
|
+
### 推荐:`mdocs update`(原地升级)
|
|
192
|
+
|
|
193
|
+
已全局安装时,直接:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
mdocs update
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
该命令写死从淘宝镜像 [`https://registry.npmmirror.com`](https://registry.npmmirror.com) 拉取最新 `@fgbg/mdocs`,**保留现有 `node_modules`**,再用 `npm install --prefer-offline` 只补差量依赖(本地缓存里已有的包不会再下一遍)。升级后重启服务即可。
|
|
200
|
+
|
|
201
|
+
### 备选:重新全局安装
|
|
192
202
|
|
|
193
203
|
```bash
|
|
194
204
|
npm install -g @fgbg/mdocs@latest --registry=https://registry.npmjs.org/
|
|
195
205
|
```
|
|
196
206
|
|
|
197
|
-
|
|
207
|
+
小服务器若遇半残目录或 OOM,仍按上面「清半残目录 + 限制并发」步骤执行。
|
|
198
208
|
|
|
199
209
|
## 下一步
|
|
200
210
|
|
package/agent-skills/index.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
{
|
|
3
3
|
"id": "changelog",
|
|
4
4
|
"name": "更新日志",
|
|
5
|
-
"description": "-
|
|
5
|
+
"description": "- **私人 Agent Skills**:设置 → AI 可 CRUD 私人提示词宏(名称对本账号唯一,仅英文数字下划线);智能助手 / 帮写可按名称引用,落盘只存引用,请求时再展开进上下文 - **助手可管理 Skill**:`list_user_skills` / `create_user_skill` / `update_user_skill` / `delete_user_skill`;",
|
|
6
6
|
"keywords": [],
|
|
7
7
|
"source": "changelog.md"
|
|
8
8
|
},
|
|
@@ -128,6 +128,17 @@ mdocs 内置 **两种 AI 能力模式**,共用设置页里的 DeepSeek 配置
|
|
|
128
128
|
|
|
129
129
|
每人一份配置,仅本人可用;Key 在服务端按访客隔离存储,不会出现在别的访客界面上。配置页可查看配置名称、模型、脱敏后的 Key 与配置 ID;需要改时可点 **编辑**。
|
|
130
130
|
|
|
131
|
+
### 私人 Agent Skills
|
|
132
|
+
|
|
133
|
+
同一页下方可管理 **Agent Skills**(私人提示词宏):
|
|
134
|
+
|
|
135
|
+
- 名称对本账号唯一,仅英文、数字、下划线
|
|
136
|
+
- 简介可选;正文为 Agent 应遵守的步骤与约束
|
|
137
|
+
- 在智能助手 / 帮写输入区点 **Skill** 多选引用;本轮发送成功后选中标签会清空
|
|
138
|
+
- 也可让助手用工具新建 / 修改(表单卡 + 倒计时)、罗列或按名删除
|
|
139
|
+
|
|
140
|
+
落盘与会话历史只保存 skill **名称引用**,不会把正文全文写进聊天记录;请求时再按名称展开进模型上下文。
|
|
141
|
+
|
|
131
142
|
## 怎么问(智能助手)
|
|
132
143
|
|
|
133
144
|
可以直接问,例如:
|
|
@@ -76,11 +76,25 @@ Token / Cookie 丢失时的自助找回;引入登录密码后已边缘化。
|
|
|
76
76
|
| 我的收藏 | [收藏功能](./bookmarks.md) |
|
|
77
77
|
| 我的文章 | [我的文章](./my-documents.md) |
|
|
78
78
|
| 域管理 / 域成员模板 | [受限域成员与名单模板](./domain-members.md) |
|
|
79
|
-
| AI | [智能助手(AI)](./onboarding-ai.md) |
|
|
79
|
+
| AI | [智能助手(AI)](./onboarding-ai.md)(含 DeepSeek 配置与私人 Agent Skills) |
|
|
80
80
|
| 保存与发布 | [草稿与同步](./drafts.md) |
|
|
81
81
|
|
|
82
82
|
---
|
|
83
83
|
|
|
84
|
+
## AI 设置里的 Agent Skills
|
|
85
|
+
|
|
86
|
+
在 **设置 → AI**,DeepSeek 配置下方有 **Agent Skills**:
|
|
87
|
+
|
|
88
|
+
- 新建 / 编辑 / 删除**私人**提示词宏(仅本人可见)
|
|
89
|
+
- **名称**对本账号唯一,仅允许英文、数字、下划线(如 `weekly_report`)
|
|
90
|
+
- 在智能助手或帮写输入区点 **Skill**,按名称勾选后随本轮消息引用
|
|
91
|
+
|
|
92
|
+
也可在对话里让助手调用管理工具(列出、新建、修改、删除);新建与修改会弹出带倒计时的表单卡。
|
|
93
|
+
|
|
94
|
+
详情见 [智能助手(AI)](./onboarding-ai.md#私人-agent-skills)。
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
84
98
|
## 常见问题
|
|
85
99
|
|
|
86
100
|
### 设置会保存在哪里?
|
package/bin/mdocs.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { getVisitorAgentConfig, DEFAULT_AGENT_CONTEXT_WINDOW } from "../Config/config.js";
|
|
2
2
|
import { getSkillLoader } from "../Skill/skill-loader.js";
|
|
3
3
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
4
|
-
import {
|
|
5
|
-
import { createAccountTools } from "./tools-account.js";
|
|
4
|
+
import { createToolsForMode } from "./tools-registry.js";
|
|
6
5
|
import { AgentSessionManager } from "./session-manager.js";
|
|
7
6
|
/** 粗估 token:CJK 约 1 字 1 token,其余约 4 字符 1 token */
|
|
8
7
|
export function estimateTokens(text) {
|
|
@@ -25,9 +24,11 @@ export function estimateTokens(text) {
|
|
|
25
24
|
}
|
|
26
25
|
function estimateToolsTokens(visitorId) {
|
|
27
26
|
const skills = getSkillLoader();
|
|
28
|
-
const tools =
|
|
29
|
-
|
|
30
|
-
:
|
|
27
|
+
const tools = createToolsForMode("normal", {
|
|
28
|
+
visitorId,
|
|
29
|
+
onEvent: () => { },
|
|
30
|
+
skills: skills.isReady() ? skills : null,
|
|
31
|
+
});
|
|
31
32
|
let total = 0;
|
|
32
33
|
for (const t of tools) {
|
|
33
34
|
total += estimateTokens(t.name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-usage.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/context-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"context-usage.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/context-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 用户 skill 用时展开:历史 / 本轮 → Pi messages。
|
|
3
|
+
* - 合成 load_user_skill toolCall + toolResult(仿 Claude)
|
|
4
|
+
* - 单次请求内同 skillId 全文只展开一次;越新越先标定展开点
|
|
5
|
+
* - 用户原文不在此追加(本轮走 prompt);历史 user 原文照常写入
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from "node:crypto";
|
|
8
|
+
import { skillRefsOfMessage } from "./session-manager.js";
|
|
9
|
+
import { formatSkillExpandBlock, resolveSkillExpandBlocks, } from "./user-skills.js";
|
|
10
|
+
export const LOAD_USER_SKILL_TOOL = "load_user_skill";
|
|
11
|
+
const EMPTY_USAGE = {
|
|
12
|
+
input: 0,
|
|
13
|
+
output: 0,
|
|
14
|
+
cacheRead: 0,
|
|
15
|
+
cacheWrite: 0,
|
|
16
|
+
totalTokens: 0,
|
|
17
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
|
|
18
|
+
};
|
|
19
|
+
/** 从新到旧:每个 skill 引用(name,或旧 id)→ 最新出现的 user 轮下标 */
|
|
20
|
+
export function markSkillExpandPoints(history) {
|
|
21
|
+
const expandAt = new Map();
|
|
22
|
+
for (let i = history.length - 1; i >= 0; i--) {
|
|
23
|
+
const m = history[i];
|
|
24
|
+
if (m?.role !== "user")
|
|
25
|
+
continue;
|
|
26
|
+
const refs = skillRefsOfMessage(m);
|
|
27
|
+
if (!refs.length)
|
|
28
|
+
continue;
|
|
29
|
+
for (const ref of refs) {
|
|
30
|
+
if (!expandAt.has(ref))
|
|
31
|
+
expandAt.set(ref, i);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return expandAt;
|
|
35
|
+
}
|
|
36
|
+
function buildSyntheticSkillPair(model, block, timestamp) {
|
|
37
|
+
const toolCallId = `uskill-${randomUUID()}`;
|
|
38
|
+
const assistant = {
|
|
39
|
+
role: "assistant",
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
type: "toolCall",
|
|
43
|
+
id: toolCallId,
|
|
44
|
+
name: LOAD_USER_SKILL_TOOL,
|
|
45
|
+
arguments: { id: block.id, name: block.name },
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
api: model.api,
|
|
49
|
+
provider: model.provider,
|
|
50
|
+
model: model.id,
|
|
51
|
+
usage: EMPTY_USAGE,
|
|
52
|
+
stopReason: "toolUse",
|
|
53
|
+
timestamp,
|
|
54
|
+
};
|
|
55
|
+
const result = {
|
|
56
|
+
role: "toolResult",
|
|
57
|
+
toolCallId,
|
|
58
|
+
toolName: LOAD_USER_SKILL_TOOL,
|
|
59
|
+
content: [
|
|
60
|
+
{
|
|
61
|
+
type: "text",
|
|
62
|
+
text: `[user skill loaded]\n${block.content}`,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
isError: false,
|
|
66
|
+
timestamp,
|
|
67
|
+
};
|
|
68
|
+
return [assistant, result];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 仅产出本轮应预置的假 tool 对(不含用户原文)。
|
|
72
|
+
* `alreadyExpanded`:历史 hydrate 已展开过的 id,本轮跳过。
|
|
73
|
+
*/
|
|
74
|
+
export function expandCurrentTurnSkillPairs(visitorId, skillNames, model, alreadyExpanded, timestamp = Date.now()) {
|
|
75
|
+
const refs = (skillNames ?? []).filter((id) => id && !alreadyExpanded.has(id));
|
|
76
|
+
if (refs.length === 0)
|
|
77
|
+
return [];
|
|
78
|
+
const blocks = resolveSkillExpandBlocks(visitorId, refs);
|
|
79
|
+
const out = [];
|
|
80
|
+
for (const b of blocks) {
|
|
81
|
+
const [a, r] = buildSyntheticSkillPair(model, b, timestamp);
|
|
82
|
+
out.push(a, r);
|
|
83
|
+
}
|
|
84
|
+
return out;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 历史 → Pi messages。
|
|
88
|
+
* `expandAt` 若传入(含本轮下标),按该表标定;否则仅就 history 从新到旧标定。
|
|
89
|
+
*/
|
|
90
|
+
export function hydrateSessionMessagesToPi(visitorId, history, model, expandAt = markSkillExpandPoints(history)) {
|
|
91
|
+
const ts = Date.now();
|
|
92
|
+
const expandedSkillIds = new Set();
|
|
93
|
+
const out = [];
|
|
94
|
+
for (let i = 0; i < history.length; i++) {
|
|
95
|
+
const m = history[i];
|
|
96
|
+
if (m.role === "assistant") {
|
|
97
|
+
out.push({
|
|
98
|
+
role: "assistant",
|
|
99
|
+
content: [{ type: "text", text: m.content }],
|
|
100
|
+
api: model.api,
|
|
101
|
+
provider: model.provider,
|
|
102
|
+
model: model.id,
|
|
103
|
+
usage: EMPTY_USAGE,
|
|
104
|
+
stopReason: "stop",
|
|
105
|
+
timestamp: ts,
|
|
106
|
+
});
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const refsThisTurn = skillRefsOfMessage(m).filter((ref) => expandAt.get(ref) === i && !expandedSkillIds.has(ref));
|
|
110
|
+
if (refsThisTurn.length > 0) {
|
|
111
|
+
const blocks = resolveSkillExpandBlocks(visitorId, refsThisTurn);
|
|
112
|
+
for (const b of blocks) {
|
|
113
|
+
const [a, r] = buildSyntheticSkillPair(model, b, ts);
|
|
114
|
+
out.push(a, r);
|
|
115
|
+
expandedSkillIds.add(b.name);
|
|
116
|
+
expandedSkillIds.add(b.id);
|
|
117
|
+
for (const ref of refsThisTurn) {
|
|
118
|
+
if (ref === b.name || ref === b.id)
|
|
119
|
+
expandedSkillIds.add(ref);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
out.push({ role: "user", content: m.content, timestamp: ts });
|
|
124
|
+
}
|
|
125
|
+
return { messages: out, expandedSkillIds };
|
|
126
|
+
}
|
|
127
|
+
/** @deprecated 测试兼容:无 skill 时退化为单条 user */
|
|
128
|
+
export function expandUserMessageForPi(_visitorId, content, skillNames, timestamp) {
|
|
129
|
+
if (!skillNames?.length) {
|
|
130
|
+
return [{ role: "user", content, timestamp }];
|
|
131
|
+
}
|
|
132
|
+
// 有 skill 时旧 API 不再内联正文;调用方应改用 expandCurrentTurnSkillPairs
|
|
133
|
+
return [{ role: "user", content, timestamp }];
|
|
134
|
+
}
|
|
135
|
+
// re-export for tests
|
|
136
|
+
export { formatSkillExpandBlock };
|
|
137
|
+
//# sourceMappingURL=hydrate-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hydrate-messages.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/hydrate-messages.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAEtD,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,CAAC;IACZ,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;IACd,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;CACrE,CAAC;AA8CF,mDAAmD;AACnD,MAAM,UAAU,qBAAqB,CACnC,OAA8B;IAE9B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,EAAE,IAAI,KAAK,MAAM;YAAE,SAAS;QACjC,MAAM,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,SAAS;QAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAiB,EACjB,KAAoD,EACpD,SAAiB;IAEjB,MAAM,UAAU,GAAG,UAAU,UAAU,EAAE,EAAE,CAAC;IAC5C,MAAM,SAAS,GAA2B;QACxC,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,UAAU;gBAChB,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,oBAAoB;gBAC1B,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;aAC9C;SACF;QACD,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,EAAE;QACf,KAAK,EAAE,WAAW;QAClB,UAAU,EAAE,SAAS;QACrB,SAAS;KACV,CAAC;IACF,MAAM,MAAM,GAAwB;QAClC,IAAI,EAAE,YAAY;QAClB,UAAU;QACV,QAAQ,EAAE,oBAAoB;QAC9B,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,wBAAwB,KAAK,CAAC,OAAO,EAAE;aAC9C;SACF;QACD,OAAO,EAAE,KAAK;QACd,SAAS;KACV,CAAC;IACF,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,SAAiB,EACjB,UAAgC,EAChC,KAAiB,EACjB,eAAoC,EACpC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;IAEtB,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,GAAG,GAAwD,EAAE,CAAC;IACpE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,uBAAuB,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC5D,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,SAAiB,EACjB,OAA8B,EAC9B,KAAiB,EACjB,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC;IAEzC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,MAAM,GAAG,GAAwB,EAAE,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC5C,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,KAAK,EAAE,WAAW;gBAClB,UAAU,EAAE,MAAM;gBAClB,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,CAC/C,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAC/D,CAAC;QACF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YACjE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,uBAAuB,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrD,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACf,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC7B,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC3B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;wBAAE,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC;AAC7C,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,OAAe,EACf,UAAgC,EAChC,SAAiB;IAEjB,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,2DAA2D;IAC3D,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,sBAAsB;AACtB,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { createToolUiEffectsHandler } from "./tool-ui-effects.js";
|
|
2
|
+
import { cancelVisitorChoices } from "./choice-pending.js";
|
|
3
|
+
import { cancelVisitorSkillForms } from "./skill-form-pending.js";
|
|
4
|
+
export async function runPiAgent(params) {
|
|
5
|
+
const { agent, message, skillNames, visitorId, sessionId, sessionManager, onEvent, signal, } = params;
|
|
6
|
+
const track = { emittedError: false, lastUsageInput: 0 };
|
|
7
|
+
const unsub = agent.subscribe(bindAgentEvents({ sessionId, sessionManager, skillNames, onEvent, track }));
|
|
8
|
+
const onAbort = () => {
|
|
9
|
+
cancelVisitorChoices(visitorId);
|
|
10
|
+
cancelVisitorSkillForms(visitorId);
|
|
11
|
+
agent.abort();
|
|
12
|
+
};
|
|
13
|
+
signal?.addEventListener("abort", onAbort);
|
|
14
|
+
try {
|
|
15
|
+
await agent.prompt(message);
|
|
16
|
+
const leftover = agent.state.errorMessage;
|
|
17
|
+
// prompt 在模型鉴权失败时仍可能 resolve,再兜底一次
|
|
18
|
+
if (leftover && !track.emittedError) {
|
|
19
|
+
onEvent({ type: "error", message: leftover });
|
|
20
|
+
track.emittedError = true;
|
|
21
|
+
}
|
|
22
|
+
return track;
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
if (signal?.aborted)
|
|
26
|
+
return track;
|
|
27
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
28
|
+
onEvent({ type: "error", message: msg });
|
|
29
|
+
throw err;
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
signal?.removeEventListener("abort", onAbort);
|
|
33
|
+
cancelVisitorChoices(visitorId);
|
|
34
|
+
cancelVisitorSkillForms(visitorId);
|
|
35
|
+
unsub();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function extractUserContent(userMsg) {
|
|
39
|
+
const c = userMsg.content;
|
|
40
|
+
if (typeof c === "string")
|
|
41
|
+
return c;
|
|
42
|
+
if (Array.isArray(c)) {
|
|
43
|
+
return c
|
|
44
|
+
.filter((x) => x?.type === "text")
|
|
45
|
+
.map((x) => x.text)
|
|
46
|
+
.join("");
|
|
47
|
+
}
|
|
48
|
+
return "";
|
|
49
|
+
}
|
|
50
|
+
function extractAssistantVisibleText(assistantMsg) {
|
|
51
|
+
const content = assistantMsg.content;
|
|
52
|
+
if (!Array.isArray(content))
|
|
53
|
+
return "";
|
|
54
|
+
return content
|
|
55
|
+
.filter((x) => x?.type === "text")
|
|
56
|
+
.map((x) => x.text)
|
|
57
|
+
.join("");
|
|
58
|
+
}
|
|
59
|
+
/** SSE + session 落盘;tool→SSE 见 tool-ui-effects */
|
|
60
|
+
function bindAgentEvents(opts) {
|
|
61
|
+
const { sessionId, sessionManager, skillNames, onEvent, track } = opts;
|
|
62
|
+
const onToolUi = createToolUiEffectsHandler(onEvent);
|
|
63
|
+
let appendedUser = false;
|
|
64
|
+
let appendedAssistant = false;
|
|
65
|
+
return async (event) => {
|
|
66
|
+
if (event.type === "message_update" &&
|
|
67
|
+
event.assistantMessageEvent.type === "text_delta") {
|
|
68
|
+
onEvent({ type: "text_delta", text: event.assistantMessageEvent.delta });
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (event.type === "message_end") {
|
|
72
|
+
if (event.message.role === "user") {
|
|
73
|
+
if (!appendedUser) {
|
|
74
|
+
appendedUser = true;
|
|
75
|
+
const content = extractUserContent(event.message);
|
|
76
|
+
if (content)
|
|
77
|
+
await sessionManager.appendUser(sessionId, content, skillNames);
|
|
78
|
+
}
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (event.message.role === "assistant") {
|
|
82
|
+
const msg = event.message;
|
|
83
|
+
if (typeof msg.usage?.input === "number" && msg.usage.input > 0) {
|
|
84
|
+
track.lastUsageInput = Math.max(track.lastUsageInput, msg.usage.input);
|
|
85
|
+
}
|
|
86
|
+
if ((msg.stopReason === "error" || msg.stopReason === "aborted") &&
|
|
87
|
+
msg.errorMessage) {
|
|
88
|
+
track.emittedError = true;
|
|
89
|
+
onEvent({ type: "error", message: msg.errorMessage });
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// toolUse = 准备调工具,不是最终可见回答
|
|
93
|
+
if (!appendedAssistant &&
|
|
94
|
+
(msg.stopReason === "stop" || msg.stopReason === "length")) {
|
|
95
|
+
appendedAssistant = true;
|
|
96
|
+
const visibleText = extractAssistantVisibleText(event.message);
|
|
97
|
+
if (visibleText) {
|
|
98
|
+
await sessionManager.appendAssistant(sessionId, visibleText);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (event.type === "tool_execution_end") {
|
|
105
|
+
onToolUi(event);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=run-pi-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-pi-agent.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/run-pi-agent.ts"],"names":[],"mappings":"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"}
|