@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.
Files changed (95) hide show
  1. package/README.md +7 -1
  2. package/agent-skills/changelog/SKILL.md +13 -1
  3. package/agent-skills/getting-started-installation/SKILL.md +12 -2
  4. package/agent-skills/index.json +1 -1
  5. package/agent-skills/usage-onboarding-ai/SKILL.md +11 -0
  6. package/agent-skills/usage-settings/SKILL.md +15 -1
  7. package/bin/mdocs.js +1 -1
  8. package/dist/server/agent/Agent/context-usage.js +6 -5
  9. package/dist/server/agent/Agent/context-usage.js.map +1 -1
  10. package/dist/server/agent/Agent/hydrate-messages.js +137 -0
  11. package/dist/server/agent/Agent/hydrate-messages.js.map +1 -0
  12. package/dist/server/agent/Agent/run-pi-agent.js +109 -0
  13. package/dist/server/agent/Agent/run-pi-agent.js.map +1 -0
  14. package/dist/server/agent/Agent/run.js +46 -322
  15. package/dist/server/agent/Agent/run.js.map +1 -1
  16. package/dist/server/agent/Agent/session-manager.js +38 -3
  17. package/dist/server/agent/Agent/session-manager.js.map +1 -1
  18. package/dist/server/agent/Agent/skill-form-pending.js +68 -0
  19. package/dist/server/agent/Agent/skill-form-pending.js.map +1 -0
  20. package/dist/server/agent/Agent/stream-events.js +2 -0
  21. package/dist/server/agent/Agent/stream-events.js.map +1 -0
  22. package/dist/server/agent/Agent/system-prompt.js +8 -4
  23. package/dist/server/agent/Agent/system-prompt.js.map +1 -1
  24. package/dist/server/agent/Agent/tool-deps.js +7 -0
  25. package/dist/server/agent/Agent/tool-deps.js.map +1 -0
  26. package/dist/server/agent/Agent/tool-ui-effects.js +170 -0
  27. package/dist/server/agent/Agent/tool-ui-effects.js.map +1 -0
  28. package/dist/server/agent/Agent/tools-choice.js +44 -50
  29. package/dist/server/agent/Agent/tools-choice.js.map +1 -1
  30. package/dist/server/agent/Agent/tools-coding.get-working.test.js +10 -8
  31. package/dist/server/agent/Agent/tools-coding.get-working.test.js.map +1 -1
  32. package/dist/server/agent/Agent/tools-coding.js +51 -58
  33. package/dist/server/agent/Agent/tools-coding.js.map +1 -1
  34. package/dist/server/agent/Agent/tools-documents.get-document.test.js +2 -4
  35. package/dist/server/agent/Agent/tools-documents.get-document.test.js.map +1 -1
  36. package/dist/server/agent/Agent/tools-documents.js +192 -187
  37. package/dist/server/agent/Agent/tools-documents.js.map +1 -1
  38. package/dist/server/agent/Agent/tools-domains.js +155 -156
  39. package/dist/server/agent/Agent/tools-domains.js.map +1 -1
  40. package/dist/server/agent/Agent/tools-overwrite.js +93 -101
  41. package/dist/server/agent/Agent/tools-overwrite.js.map +1 -1
  42. package/dist/server/agent/Agent/tools-registry.js +26 -0
  43. package/dist/server/agent/Agent/tools-registry.js.map +1 -0
  44. package/dist/server/agent/Agent/tools-registry.test.js +67 -0
  45. package/dist/server/agent/Agent/tools-registry.test.js.map +1 -0
  46. package/dist/server/agent/Agent/tools-template.js +45 -0
  47. package/dist/server/agent/Agent/tools-template.js.map +1 -0
  48. package/dist/server/agent/Agent/tools-user-skills.js +176 -0
  49. package/dist/server/agent/Agent/tools-user-skills.js.map +1 -0
  50. package/dist/server/agent/Agent/tools-visitors.js +15 -22
  51. package/dist/server/agent/Agent/tools-visitors.js.map +1 -1
  52. package/dist/server/agent/Agent/tools.js +40 -33
  53. package/dist/server/agent/Agent/tools.js.map +1 -1
  54. package/dist/server/agent/Agent/user-skills.js +214 -0
  55. package/dist/server/agent/Agent/user-skills.js.map +1 -0
  56. package/dist/server/agent/Agent/user-skills.test.js +53 -0
  57. package/dist/server/agent/Agent/user-skills.test.js.map +1 -0
  58. package/dist/server/cli/main.js +10 -0
  59. package/dist/server/cli/main.js.map +1 -1
  60. package/dist/server/cli/self-update.js +158 -0
  61. package/dist/server/cli/self-update.js.map +1 -0
  62. package/dist/server/cli/self-update.test.js +17 -0
  63. package/dist/server/cli/self-update.test.js.map +1 -0
  64. package/dist/server/db/repositories/agent-user-skill.repo.js +78 -0
  65. package/dist/server/db/repositories/agent-user-skill.repo.js.map +1 -0
  66. package/dist/server/db/schema.js +11 -0
  67. package/dist/server/db/schema.js.map +1 -1
  68. package/dist/server/routes/agent.routes.js +177 -0
  69. package/dist/server/routes/agent.routes.js.map +1 -1
  70. package/dist/web/assets/AgentChatPanel-Cva-1CWE.js +1 -0
  71. package/dist/web/assets/AgentSkillFormCard-DcKxyiAV.js +6 -0
  72. package/dist/web/assets/AiWriteWorkbench-DkZ4JQuS.js +6 -0
  73. package/dist/web/assets/DiagramEditor-BTRe45TX-C1YVSFMK.js +2 -0
  74. package/dist/web/assets/{DocumentEditor-B2H3rHSg.js → DocumentEditor-B6IMAcRI.js} +1 -1
  75. package/dist/web/assets/{MergeView-Cy4Pi3Je.js → MergeView-DoUvoUF6.js} +1 -1
  76. package/dist/web/assets/{PlaygroundPage-hHfIzPO5.js → PlaygroundPage-XyDSnDG_.js} +1 -1
  77. package/dist/web/assets/SettingsPage-DOeySRr-.js +1 -0
  78. package/dist/web/assets/{Toolbar-DPkTtGNL.js → Toolbar-C6GIlNMW.js} +1 -1
  79. package/dist/web/assets/{VisitorPickerModal-CJ0K2gj8.js → VisitorPickerModal-Db9Mh63R.js} +1 -1
  80. package/dist/web/assets/{copy-DCKasK29.js → copy-D8ORBt1-.js} +1 -1
  81. package/dist/web/assets/{editor-BBXgdU3Q.js → editor-ONzd_YnO.js} +1 -1
  82. package/dist/web/assets/index-BQ1RXV0n.css +1 -0
  83. package/dist/web/assets/{index-CA7lpALZ.js → index-czw0A2GN.js} +7 -7
  84. package/dist/web/assets/meta2d-C8Z4cn-d.js +110 -0
  85. package/dist/web/assets/meta2dEngine-BD2XbzaV-D1CzYV6l.js +1 -0
  86. package/dist/web/assets/{plus-B2rZTPWV.js → plus-9njZDkAU.js} +1 -1
  87. package/dist/web/assets/react-BCo8JH1D.js +2126 -0
  88. package/dist/web/index.html +2 -2
  89. package/package.json +2 -2
  90. package/dist/web/assets/AgentChatPanel-DHy3KgSW.js +0 -1
  91. package/dist/web/assets/AiWriteWorkbench-Ce_OaED4.js +0 -6
  92. package/dist/web/assets/SettingsPage-BRAPdqW9.js +0 -1
  93. package/dist/web/assets/history-BQkmetJ0.js +0 -6
  94. package/dist/web/assets/index-BksNm27A.css +0 -1
  95. 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.18**
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: "- **首屏加速**:编辑器 / 设置 / 助手 / 帮写按需懒加载;Vite 拆分重型 vendor chunk,入口 JS 从约 6MB 降到约 134KB - **更快看到侧栏树**:启动时延后全文索引重建(默认约 15s,可用 `MDOCS_INDEX_INITIAL_DELAY_MS` 调整),减轻 HTML TTFB 被 CPU 拖慢 - **加载壳**:`index.html` 增加"
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
- 通过 npm 安装的版本,直接重新安装即可升级:
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
 
@@ -2,7 +2,7 @@
2
2
  {
3
3
  "id": "changelog",
4
4
  "name": "更新日志",
5
- "description": "- **首屏加速**:编辑器 / 设置 / 助手 / 帮写按需懒加载;Vite 拆分重型 vendor chunk,入口 JS 从约 6MB 降到约 134KB - **更快看到侧栏树**:启动时延后全文索引重建(默认约 15s,可用 `MDOCS_INDEX_INITIAL_DELAY_MS` 调整),减轻 HTML TTFB 被 CPU 拖慢 - **加载壳**:`index.html` 增加",
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,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // mdocs CLI entry — starts the server by default.
4
- // Subcommands: mdocs visitor list, mdocs visitor migrate
4
+ // Subcommands: mdocs update | mdocs visitor list | mdocs visitor migrate
5
5
 
6
6
  import("../dist/server/cli/main.js");
@@ -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 { createSkillTools } from "./tools.js";
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 = skills.isReady()
29
- ? [...createSkillTools(skills), ...createAccountTools(visitorId)]
30
- : createAccountTools(visitorId);
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":"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"}
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":"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"}
@@ -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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"}