@fgbg/mdocs 1.3.15 → 1.3.17
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 +6 -6
- package/agent-skills/changelog/SKILL.md +32 -1
- package/agent-skills/core-concepts-all-files/SKILL.md +3 -3
- package/agent-skills/core-concepts-domain/SKILL.md +49 -46
- package/agent-skills/core-concepts-invitation/SKILL.md +9 -9
- package/agent-skills/core-concepts-no-account/SKILL.md +1 -1
- package/agent-skills/deployment-requirements/SKILL.md +2 -2
- package/agent-skills/faq/SKILL.md +2 -2
- package/agent-skills/getting-started-first-kb/SKILL.md +2 -2
- package/agent-skills/getting-started-installation/SKILL.md +3 -3
- package/agent-skills/index/SKILL.md +2 -2
- package/agent-skills/index.json +8 -8
- package/agent-skills/usage-bookmarks/SKILL.md +5 -5
- package/agent-skills/usage-cli-token/SKILL.md +6 -6
- package/agent-skills/usage-comments/SKILL.md +1 -1
- package/agent-skills/usage-domain-members/SKILL.md +27 -27
- package/agent-skills/usage-html-documents/SKILL.md +1 -1
- package/agent-skills/usage-knowledge-graph/SKILL.md +5 -5
- package/agent-skills/usage-my-documents/SKILL.md +8 -8
- package/agent-skills/usage-onboarding-ai/SKILL.md +6 -6
- package/agent-skills/usage-search/SKILL.md +2 -2
- package/agent-skills/usage-settings/SKILL.md +8 -8
- package/dist/server/access/access-control.js +23 -0
- package/dist/server/access/access-control.js.map +1 -1
- package/dist/server/access/access-control.test.js +44 -0
- package/dist/server/access/access-control.test.js.map +1 -1
- package/dist/server/access/domain-access.js +8 -0
- package/dist/server/access/domain-access.js.map +1 -1
- package/dist/server/agent/Agent/system-prompt.js +3 -3
- package/dist/server/agent/Agent/system-prompt.js.map +1 -1
- package/dist/server/agent/Agent/tool-ui-effects.js +1 -1
- package/dist/server/agent/Agent/tools-documents.js +12 -12
- package/dist/server/agent/Agent/tools-documents.js.map +1 -1
- package/dist/server/agent/Agent/tools-domains.js +14 -14
- package/dist/server/agent/Agent/tools-domains.js.map +1 -1
- package/dist/server/agent/Agent/tools-visitors.js +1 -1
- package/dist/server/agent/Agent/tools-visitors.js.map +1 -1
- package/dist/server/documents/document.service.js +6 -6
- package/dist/server/documents/document.service.js.map +1 -1
- package/dist/server/documents/graph/folder-progress.test.js +40 -0
- package/dist/server/documents/graph/folder-progress.test.js.map +1 -0
- package/dist/server/documents/graph/index.js +2 -1
- package/dist/server/documents/graph/index.js.map +1 -1
- package/dist/server/documents/graph-task.js +1 -1
- package/dist/server/documents/graph-task.js.map +1 -1
- package/dist/server/documents/graph.service.js +4 -5
- package/dist/server/documents/graph.service.js.map +1 -1
- package/dist/server/domains/change-domain-permission.js +1 -1
- package/dist/server/domains/change-domain-permission.js.map +1 -1
- package/dist/server/routes/folders.routes.js +4 -4
- package/dist/server/routes/folders.routes.js.map +1 -1
- package/dist/server/routes/graph.routes.js +36 -0
- package/dist/server/routes/graph.routes.js.map +1 -1
- package/dist/web/assets/AgentChatPanel-C3c14Bo_.js +22 -0
- package/dist/web/assets/{AgentSkillFormCard-llRkQdK_.js → AgentSkillFormCard-BYUjSFe1.js} +3 -3
- package/dist/web/assets/AiWriteWorkbench-ze827qk7.js +7 -0
- package/dist/web/assets/{DiagramEditor-NtNY3sZL-D0FE-I9-.js → DiagramEditor-NtNY3sZL-Cie6NhLx.js} +1 -1
- package/dist/web/assets/DocChrome-ixaNyUG9.js +21 -0
- package/dist/web/assets/DocumentEditor-ByqPHijF.js +1 -0
- package/dist/web/assets/HtmlEditor-CpqCAPAr.js +1 -0
- package/dist/web/assets/{MergeView-DsVxYKKc.js → MergeView-D93ZHlTG.js} +2 -2
- package/dist/web/assets/{PlaygroundPage-BEqH8lAT.js → PlaygroundPage-CodSaeWS.js} +1 -1
- package/dist/web/assets/SettingsPage-C8doYEbb.js +6 -0
- package/dist/web/assets/{Toolbar-D5TrWh7K.js → Toolbar-CSKpV4ua.js} +1 -1
- package/dist/web/assets/{VisitorPickerModal-B0fxKY7g.js → VisitorPickerModal-CqDA1S9F.js} +1 -1
- package/dist/web/assets/{check-s9DVK_zH.js → check-CN9m0reb.js} +2 -2
- package/dist/web/assets/{copy-D_-gX8nM.js → copy-DFs3qk19.js} +2 -2
- package/dist/web/assets/index-C0ujN3sT.css +1 -0
- package/dist/web/assets/index-CUdIA5aE.js +288 -0
- package/dist/web/assets/{meta2dEngine-BD2XbzaV-DLBNOz_m.js → meta2dEngine-BD2XbzaV-SYn2XtSh.js} +1 -1
- package/dist/web/assets/{plus-BR1kwsYl.js → plus-QDhBbIRF.js} +2 -2
- package/dist/web/assets/{react-DCTIdd3e.js → react-Bf45libg.js} +3 -3
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/AgentChatPanel-ePXffWJl.js +0 -22
- package/dist/web/assets/AiWriteWorkbench-DtD5xWmd.js +0 -7
- package/dist/web/assets/DocChrome-BkDnBqBu.js +0 -21
- package/dist/web/assets/DocumentEditor-CUdNMfU8.js +0 -1
- package/dist/web/assets/HtmlEditor-BFOWf-Xl.js +0 -1
- package/dist/web/assets/SettingsPage-ClwYG9Q8.js +0 -6
- package/dist/web/assets/index-B3TBoi2p.css +0 -1
- package/dist/web/assets/index-vbUbFD-2.js +0 -283
|
@@ -79,7 +79,7 @@ export async function buildDomainGraph(domainId, agentConfig, options = {}) {
|
|
|
79
79
|
const db = getDb();
|
|
80
80
|
const domain = findDomainById(db, domainId);
|
|
81
81
|
if (!domain) {
|
|
82
|
-
throw new Error(
|
|
82
|
+
throw new Error(`工作空间不存在:${domainId}`);
|
|
83
83
|
}
|
|
84
84
|
const ownerVisitorId = domain.creator_visitor_id;
|
|
85
85
|
const deps = createGraphDeps(agentConfig, domainId, ownerVisitorId);
|
|
@@ -166,8 +166,7 @@ function buildTreeNodeForDoc(doc, visitorId) {
|
|
|
166
166
|
* FolderSubtreeNode[] → TreeNode[] 转换。
|
|
167
167
|
* buildFolderSubtree 返回的是精简结构,这里补全 graph 模块需要的字段。
|
|
168
168
|
*
|
|
169
|
-
*
|
|
170
|
-
* path 只是展示用,不影响核心逻辑。
|
|
169
|
+
* title 已是目录/文章的 display_name。path 只用于进度文案,不能填 document id。
|
|
171
170
|
*/
|
|
172
171
|
function subtreeNodesToTreeNodes(nodes) {
|
|
173
172
|
return nodes.map((n) => {
|
|
@@ -175,7 +174,7 @@ function subtreeNodesToTreeNodes(nodes) {
|
|
|
175
174
|
return {
|
|
176
175
|
type: "folder",
|
|
177
176
|
name: n.title,
|
|
178
|
-
path: n.
|
|
177
|
+
path: n.title,
|
|
179
178
|
documentId: n.id,
|
|
180
179
|
children: subtreeNodesToTreeNodes(n.children),
|
|
181
180
|
};
|
|
@@ -183,7 +182,7 @@ function subtreeNodesToTreeNodes(nodes) {
|
|
|
183
182
|
return {
|
|
184
183
|
type: "document",
|
|
185
184
|
name: n.title,
|
|
186
|
-
path: n.
|
|
185
|
+
path: n.title,
|
|
187
186
|
documentId: n.id,
|
|
188
187
|
displayName: n.title,
|
|
189
188
|
ownerVisitorId: "",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.service.js","sourceRoot":"","sources":["../../../src/server/documents/graph.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"graph.service.js","sourceRoot":"","sources":["../../../src/server/documents/graph.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ export function changeDomainPermission(actorVisitorId, domainId, next, db = getD
|
|
|
24
24
|
throw new DomainPermissionError("BAD_REQUEST", "invalid permission", 400);
|
|
25
25
|
}
|
|
26
26
|
if (change === "downgrade") {
|
|
27
|
-
throw new DomainPermissionError("DOMAIN_PERMISSION_DOWNGRADE", "
|
|
27
|
+
throw new DomainPermissionError("DOMAIN_PERMISSION_DOWNGRADE", "工作空间权限只能升级(private → restricted → public),不能下降", 400);
|
|
28
28
|
}
|
|
29
29
|
if (change === "upgrade") {
|
|
30
30
|
updateDomainPermission(db, domainId, next);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-domain-permission.js","sourceRoot":"","sources":["../../../src/server/domains/change-domain-permission.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3F,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAErC;IAEA;IAHT,YACS,IAAY,EACnB,OAAe,EACR,MAAc;QAErB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAQ;QAEZ,WAAM,GAAN,MAAM,CAAQ;IAGvB,CAAC;CACF;AAED,qCAAqC;AACrC,MAAM,UAAU,sBAAsB,CACpC,cAAsB,EACtB,QAAgB,EAChB,IAAY,EACZ,KAAwB,KAAK,EAAE;IAE/B,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,qBAAqB,CAAC,WAAW,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,kBAAkB,KAAK,cAAc,EAAE,CAAC;QACjD,MAAM,IAAI,qBAAqB,CAAC,WAAW,EAAE,yCAAyC,EAAE,GAAG,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,qBAAqB,CAAC,aAAa,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,MAAM,IAAI,qBAAqB,CAC7B,6BAA6B,EAC7B,
|
|
1
|
+
{"version":3,"file":"change-domain-permission.js","sourceRoot":"","sources":["../../../src/server/domains/change-domain-permission.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3F,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAErC;IAEA;IAHT,YACS,IAAY,EACnB,OAAe,EACR,MAAc;QAErB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAQ;QAEZ,WAAM,GAAN,MAAM,CAAQ;IAGvB,CAAC;CACF;AAED,qCAAqC;AACrC,MAAM,UAAU,sBAAsB,CACpC,cAAsB,EACtB,QAAgB,EAChB,IAAY,EACZ,KAAwB,KAAK,EAAE;IAE/B,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,qBAAqB,CAAC,WAAW,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,kBAAkB,KAAK,cAAc,EAAE,CAAC;QACjD,MAAM,IAAI,qBAAqB,CAAC,WAAW,EAAE,yCAAyC,EAAE,GAAG,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,qBAAqB,CAAC,aAAa,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,MAAM,IAAI,qBAAqB,CAC7B,6BAA6B,EAC7B,gDAAgD,EAChD,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAChF,CAAC"}
|
|
@@ -74,11 +74,11 @@ export function createFolder(params) {
|
|
|
74
74
|
const db = getDb();
|
|
75
75
|
const domainRow = findDomainById(db, domainId);
|
|
76
76
|
if (!domainRow) {
|
|
77
|
-
throw new DocumentError("DOMAIN_NOT_FOUND", "
|
|
77
|
+
throw new DocumentError("DOMAIN_NOT_FOUND", "工作空间不存在", 404);
|
|
78
78
|
}
|
|
79
79
|
const access = resolveDomainAccess(db, domainRow, domainId, params.actorVisitorId);
|
|
80
80
|
if (access.kind !== "full") {
|
|
81
|
-
throw new DocumentError("FORBIDDEN", "
|
|
81
|
+
throw new DocumentError("FORBIDDEN", "无权在该工作空间创建目录", 403);
|
|
82
82
|
}
|
|
83
83
|
// 规范化目录名(空格转下划线等),用于 relative_path
|
|
84
84
|
const storageName = normalisePathSegmentForStorage(params.name);
|
|
@@ -93,7 +93,7 @@ export function createFolder(params) {
|
|
|
93
93
|
throw new DocumentError("INVALID_PARENT", "父目录不存在", 404);
|
|
94
94
|
}
|
|
95
95
|
if (parent.domain_id !== domainId) {
|
|
96
|
-
throw new DocumentError("FORBIDDEN", "
|
|
96
|
+
throw new DocumentError("FORBIDDEN", "不能跨工作空间创建目录", 403);
|
|
97
97
|
}
|
|
98
98
|
normalizedPath = `${parent.relative_path}/${storageName}`;
|
|
99
99
|
}
|
|
@@ -115,7 +115,7 @@ export function createFolder(params) {
|
|
|
115
115
|
let permission;
|
|
116
116
|
if (params.permission !== undefined) {
|
|
117
117
|
if (!validateDomainPermission(domainRow.permission, params.permission)) {
|
|
118
|
-
throw new DocumentError("INVALID_PERMISSION",
|
|
118
|
+
throw new DocumentError("INVALID_PERMISSION", `工作空间类型不允许该权限值`, 400);
|
|
119
119
|
}
|
|
120
120
|
permission = params.permission;
|
|
121
121
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folders.routes.js","sourceRoot":"","sources":["../../../src/server/routes/folders.routes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"folders.routes.js","sourceRoot":"","sources":["../../../src/server/routes/folders.routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ import { findDocumentById } from "../db/repositories/document.repo.js";
|
|
|
19
19
|
import { getDb } from "../db/connection.js";
|
|
20
20
|
import { taskQueue } from "../task-queue/index.js";
|
|
21
21
|
import { FILE_TYPE } from "../../shared/file-types.js";
|
|
22
|
+
import { assertGraphAccess, DocumentError } from "../access/access-control.js";
|
|
22
23
|
import "../documents/graph-task.js"; // 副作用导入,注册图谱任务
|
|
23
24
|
const router = Router();
|
|
24
25
|
/** 未配置可用 AI 时抛出,前端据此引导用户去配置(而不是显示一句泛泛的失败) */
|
|
@@ -28,6 +29,13 @@ class AiNotConfiguredError extends Error {
|
|
|
28
29
|
super("请先配置 AI 模型后再生成图谱");
|
|
29
30
|
}
|
|
30
31
|
}
|
|
32
|
+
function sendGraphError(res, err) {
|
|
33
|
+
if (err instanceof DocumentError) {
|
|
34
|
+
res.status(err.status).json({ error: { code: err.code, message: err.message } });
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
31
39
|
/** 优先用当前访客默认 AI 配置;未配置时再读服务端环境变量(兼容旧部署) */
|
|
32
40
|
function getAgentConfig(req) {
|
|
33
41
|
const visitorId = req.visitor?.visitor_id;
|
|
@@ -61,12 +69,21 @@ router.get("/tasks/:taskId", (req, res) => {
|
|
|
61
69
|
// ========== 域级 ==========
|
|
62
70
|
router.get("/domain/:domainId", (req, res) => {
|
|
63
71
|
const { domainId } = req.params;
|
|
72
|
+
try {
|
|
73
|
+
assertGraphAccess(domainId, req.visitor?.visitor_id ?? null);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
if (sendGraphError(res, err))
|
|
77
|
+
return;
|
|
78
|
+
throw err;
|
|
79
|
+
}
|
|
64
80
|
const graph = getDomainGraph(domainId);
|
|
65
81
|
res.json({ data: graph });
|
|
66
82
|
});
|
|
67
83
|
router.post("/domain/:domainId/analyze", (req, res) => {
|
|
68
84
|
const { domainId } = req.params;
|
|
69
85
|
try {
|
|
86
|
+
assertGraphAccess(domainId, req.visitor?.visitor_id ?? null);
|
|
70
87
|
const agentConfig = getAgentConfig(req);
|
|
71
88
|
const result = taskQueue.enqueue("graph-generate", {
|
|
72
89
|
type: "domain",
|
|
@@ -78,6 +95,8 @@ router.post("/domain/:domainId/analyze", (req, res) => {
|
|
|
78
95
|
res.json({ data: result });
|
|
79
96
|
}
|
|
80
97
|
catch (err) {
|
|
98
|
+
if (sendGraphError(res, err))
|
|
99
|
+
return;
|
|
81
100
|
if (err instanceof AiNotConfiguredError) {
|
|
82
101
|
res.status(400).json({ error: { code: err.code, message: err.message } });
|
|
83
102
|
return;
|
|
@@ -90,6 +109,20 @@ router.post("/domain/:domainId/analyze", (req, res) => {
|
|
|
90
109
|
// ========== 目录级 ==========
|
|
91
110
|
router.get("/:folderId", (req, res) => {
|
|
92
111
|
const { folderId } = req.params;
|
|
112
|
+
const db = getDb();
|
|
113
|
+
const folder = findDocumentById(db, folderId);
|
|
114
|
+
if (!folder) {
|
|
115
|
+
res.status(404).json({ error: { message: "目录不存在" } });
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
assertGraphAccess(folder.domain_id, req.visitor?.visitor_id ?? null);
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
if (sendGraphError(res, err))
|
|
123
|
+
return;
|
|
124
|
+
throw err;
|
|
125
|
+
}
|
|
93
126
|
const graph = getGraphByFolderId(folderId);
|
|
94
127
|
res.json({ data: graph });
|
|
95
128
|
});
|
|
@@ -102,6 +135,7 @@ router.post("/:folderId/analyze", (req, res) => {
|
|
|
102
135
|
return;
|
|
103
136
|
}
|
|
104
137
|
try {
|
|
138
|
+
assertGraphAccess(folder.domain_id, req.visitor?.visitor_id ?? null);
|
|
105
139
|
const agentConfig = getAgentConfig(req);
|
|
106
140
|
// DB 里目录是 FILE_TYPE.FOLDER === "dir",不是字面量 "folder"
|
|
107
141
|
const result = taskQueue.enqueue("graph-generate", {
|
|
@@ -114,6 +148,8 @@ router.post("/:folderId/analyze", (req, res) => {
|
|
|
114
148
|
res.json({ data: result });
|
|
115
149
|
}
|
|
116
150
|
catch (err) {
|
|
151
|
+
if (sendGraphError(res, err))
|
|
152
|
+
return;
|
|
117
153
|
if (err instanceof AiNotConfiguredError) {
|
|
118
154
|
res.status(400).json({ error: { code: err.code, message: err.message } });
|
|
119
155
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.routes.js","sourceRoot":"","sources":["../../../src/server/routes/graph.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"graph.routes.js","sourceRoot":"","sources":["../../../src/server/routes/graph.routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/diagram-Bk84WZto.js","assets/ui-CvA4pq3d.js","assets/react-vendor-BuABiQkA.js","assets/motion-DFABYlwt.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as i,j as e,_ as ct,b as dt}from"./react-vendor-BuABiQkA.js";import{o as ae,N as Ke,C as ut,am as Xe,Y as ne,an as qe,ao as mt,q as Fe,ap as Pe,aq as pt,ar as ft,as as ht,at as gt,au as xt,av as yt,aw as Ue,ax as jt,ay as kt,az as Nt}from"./index-CUdIA5aE.js";import{H as bt,S as vt,A as wt,a as Ct}from"./AgentSkillFormCard-BYUjSFe1.js";import{C as Ye}from"./check-CN9m0reb.js";import{C as Ge}from"./copy-DFs3qk19.js";import{P as St}from"./plus-QDhBbIRF.js";import{ae as _t,af as At}from"./ui-CvA4pq3d.js";import"./diagram-Bk84WZto.js";import"./motion-DFABYlwt.js";/**
|
|
3
|
+
* @license lucide-react v0.562.0 - ISC
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the ISC license.
|
|
6
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/const It=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]],Mt=ae("maximize-2",It);/**
|
|
8
|
+
* @license lucide-react v0.562.0 - ISC
|
|
9
|
+
*
|
|
10
|
+
* This source code is licensed under the ISC license.
|
|
11
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
12
|
+
*/const Et=[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]],Rt=ae("minimize-2",Et);/**
|
|
13
|
+
* @license lucide-react v0.562.0 - ISC
|
|
14
|
+
*
|
|
15
|
+
* This source code is licensed under the ISC license.
|
|
16
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
17
|
+
*/const $t=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],Tt=ae("zoom-in",$t);/**
|
|
18
|
+
* @license lucide-react v0.562.0 - ISC
|
|
19
|
+
*
|
|
20
|
+
* This source code is licensed under the ISC license.
|
|
21
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
22
|
+
*/const zt=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],Dt=ae("zoom-out",zt);function je(s){var n;return s==null||typeof s=="boolean"?"":typeof s=="string"||typeof s=="number"?String(s):Array.isArray(s)?s.map(je).join(""):typeof s=="object"&&"props"in s?je((n=s.props)==null?void 0:n.children):""}function qt(s){return s?/\blanguage-mermaid\b|\bmermaid\b/i.test(s):!1}function Ft(s){const n=Array.isArray(s)?s:[s];for(const a of n){if(a==null||typeof a!="object"||!("props"in a))continue;const c=a.props;if(!(!c||!qt(c.className)))return je(c.children).replace(/\n$/,"")}return null}const Pt=.4,Lt=4,se=.2;let xe=null;function Bt(){return xe||(xe=ct(()=>import("./diagram-Bk84WZto.js").then(s=>s.z),__vite__mapDeps([0,1,2,3])).then(s=>{const n=s.default;return n.initialize({startOnLoad:!1,securityLevel:"strict",theme:"neutral",fontFamily:"ui-sans-serif, system-ui, sans-serif"}),n})),xe}const Ot=32,W=new Map;function Le(s){return W.get(s)??null}function Wt(s,n){for(W.has(s)&&W.delete(s),W.set(s,n);W.size>Ot;){const a=W.keys().next().value;if(a==null)break;W.delete(a)}}function ye(s){return Math.min(Lt,Math.max(Pt,s))}function Ht(s){const[n,a]=i.useState(1),[c,b]=i.useState({x:0,y:0}),h=i.useRef(null),[_,y]=i.useState(!1);i.useEffect(()=>{const u=I=>{I.key==="Escape"&&s.onClose()};window.addEventListener("keydown",u);const m=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{window.removeEventListener("keydown",u),document.body.style.overflow=m}},[s.onClose]);function A(u){u.button===0&&(u.currentTarget.setPointerCapture(u.pointerId),h.current={pointerId:u.pointerId,startX:u.clientX,startY:u.clientY,originX:c.x,originY:c.y},y(!0))}function C(u){const m=h.current;!m||m.pointerId!==u.pointerId||b({x:m.originX+(u.clientX-m.startX),y:m.originY+(u.clientY-m.startY)})}function E(u){const m=h.current;if(!(!m||m.pointerId!==u.pointerId)){h.current=null,y(!1);try{u.currentTarget.releasePointerCapture(u.pointerId)}catch{}}}function N(u){u.preventDefault();const m=u.deltaY>0?-se:se;a(I=>ye(Number((I+m).toFixed(2))))}return dt.createPortal(e.jsxs("div",{className:"mdocs-agent-mermaid-float",role:"dialog","aria-modal":"true","aria-label":"Mermaid 图预览",children:[e.jsx("button",{type:"button",className:"mdocs-agent-mermaid-float-backdrop","aria-label":"关闭预览",onClick:s.onClose}),e.jsxs("div",{className:"mdocs-agent-mermaid-float-chrome",children:[e.jsxs("div",{className:"mdocs-agent-mermaid-float-tools",children:[e.jsx("button",{type:"button",className:"mdocs-agent-mermaid-float-btn",onClick:()=>a(u=>ye(Number((u-se).toFixed(2)))),title:"缩小","aria-label":"缩小",children:e.jsx(Dt,{size:16,"aria-hidden":!0})}),e.jsxs("span",{className:"mdocs-agent-mermaid-float-scale",children:[Math.round(n*100),"%"]}),e.jsx("button",{type:"button",className:"mdocs-agent-mermaid-float-btn",onClick:()=>a(u=>ye(Number((u+se).toFixed(2)))),title:"放大","aria-label":"放大",children:e.jsx(Tt,{size:16,"aria-hidden":!0})}),e.jsx("button",{type:"button",className:"mdocs-agent-mermaid-float-btn",onClick:()=>{a(1),b({x:0,y:0})},title:"重置",children:"重置"}),e.jsx("button",{type:"button",className:"mdocs-agent-mermaid-float-btn",onClick:s.onClose,title:"关闭","aria-label":"关闭",children:e.jsx(ne,{size:16,"aria-hidden":!0})})]}),e.jsx("div",{className:_?"mdocs-agent-mermaid-float-stage is-dragging":"mdocs-agent-mermaid-float-stage",onPointerDown:A,onPointerMove:C,onPointerUp:E,onPointerCancel:E,onWheel:N,children:e.jsx("div",{className:"mdocs-agent-mermaid-float-canvas",style:{transform:`translate(calc(-50% + ${c.x}px), calc(-50% + ${c.y}px)) scale(${n})`},dangerouslySetInnerHTML:{__html:s.svg}})}),e.jsx("p",{className:"mdocs-agent-mermaid-float-hint",children:"拖动平移 · 滚轮缩放 · Esc 关闭"})]})]}),document.body)}function Kt(s){const n=i.useId().replace(/:/g,""),[a,c]=i.useState("diagram"),[b,h]=i.useState(()=>Le(s.source.trim())),[_,y]=i.useState(null),[A,C]=i.useState(!1),[E,N]=i.useState(!1),u=i.useRef(null),m=s.source.trim(),I=i.useMemo(()=>m,[m]);i.useEffect(()=>()=>{u.current!=null&&window.clearTimeout(u.current)},[]),i.useEffect(()=>{if(a!=="diagram")return;if(!I){h(null),y(null);return}const j=Le(I);if(j){h(j),y(null);return}let M=!1;const P=window.setTimeout(()=>{(async()=>{try{const F=await Bt();if(M)return;const T=`mdocs-agent-mmd-${n}-${Date.now()}`,{svg:R}=await F.render(T,I);if(M)return;Wt(I,R),h(R),y(null)}catch(F){if(M)return;h(null),y(F instanceof Error?F.message:"Mermaid 渲染失败")}})()},200);return()=>{M=!0,window.clearTimeout(P)}},[a,I,n]);async function H(){!m||!await Xe(m)||(C(!0),u.current!=null&&window.clearTimeout(u.current),u.current=window.setTimeout(()=>C(!1),1500))}return e.jsxs("div",{className:"mdocs-agent-mermaid",children:[e.jsxs("div",{className:"mdocs-agent-mermaid-toolbar",children:[e.jsxs("div",{className:"mdocs-agent-mermaid-toggle",role:"group","aria-label":"Mermaid 显示模式",children:[e.jsxs("button",{type:"button",className:a==="diagram"?"mdocs-agent-mermaid-toggle-btn is-active":"mdocs-agent-mermaid-toggle-btn",onClick:()=>c("diagram"),"aria-pressed":a==="diagram",title:"图谱",children:[e.jsx(Ke,{size:14,"aria-hidden":!0}),e.jsx("span",{children:"图谱"})]}),e.jsxs("button",{type:"button",className:a==="code"?"mdocs-agent-mermaid-toggle-btn is-active":"mdocs-agent-mermaid-toggle-btn",onClick:()=>c("code"),"aria-pressed":a==="code",title:"代码",children:[e.jsx(ut,{size:14,"aria-hidden":!0}),e.jsx("span",{children:"代码"})]})]}),e.jsx("button",{type:"button",className:"mdocs-agent-panel-md-copy mdocs-agent-mermaid-copy",onClick:()=>void H(),"aria-label":A?"已复制":"复制代码",title:A?"已复制":"复制",children:A?e.jsx(Ye,{size:14,"aria-hidden":!0}):e.jsx(Ge,{size:14,"aria-hidden":!0})})]}),a==="diagram"?e.jsx("div",{className:"mdocs-agent-mermaid-diagram",children:_?e.jsxs("div",{className:"mdocs-agent-mermaid-error",role:"alert",children:[e.jsx("p",{children:"无法渲染该图,可切换到代码查看源码。"}),e.jsx("pre",{children:_})]}):b?e.jsx("div",{className:"mdocs-agent-mermaid-svg mdocs-agent-mermaid-svg-hit",role:"button",tabIndex:0,onClick:()=>N(!0),onKeyDown:j=>{(j.key==="Enter"||j.key===" ")&&(j.preventDefault(),N(!0))},title:"点击放大预览","aria-label":"点击放大预览 Mermaid 图",children:e.jsx("span",{className:"mdocs-agent-mermaid-svg-inner",dangerouslySetInnerHTML:{__html:b}})}):e.jsx("div",{className:"mdocs-agent-mermaid-loading",children:"渲染中…"})}):e.jsx("div",{className:"mdocs-agent-panel-md-pre-wrap mdocs-agent-mermaid-code",children:e.jsx("pre",{children:s.codeChildren??e.jsx("code",{className:"language-mermaid",children:m})})}),E&&b?e.jsx(Ht,{svg:b,onClose:()=>N(!1)}):null]})}const Xt=i.memo(Kt,(s,n)=>s.source===n.source);function ke(s){var n;return s==null||typeof s=="boolean"?"":typeof s=="string"||typeof s=="number"?String(s):Array.isArray(s)?s.map(ke).join(""):typeof s=="object"&&"props"in s?ke((n=s.props)==null?void 0:n.children):""}function Ut(s){const[n,a]=i.useState(!1),c=i.useRef(null),b=i.useRef(null),h=ke(s.children).replace(/\n$/,"");i.useEffect(()=>()=>{c.current!=null&&window.clearTimeout(c.current)},[]);async function _(y){var N,u,m;y.preventDefault(),y.stopPropagation();const C=(((m=(u=(N=b.current)==null?void 0:N.querySelector("pre"))==null?void 0:u.innerText)==null?void 0:m.replace(/\n$/,""))??"")||h;!C||!await Xe(C)||(a(!0),c.current!=null&&window.clearTimeout(c.current),c.current=window.setTimeout(()=>a(!1),1500))}return e.jsxs("div",{className:"mdocs-agent-panel-md-pre-wrap",ref:b,children:[e.jsx("button",{type:"button",className:"mdocs-agent-panel-md-copy",onClick:y=>void _(y),"aria-label":n?"已复制":"复制代码",title:n?"已复制":"复制",children:n?e.jsx(Ye,{size:14,"aria-hidden":!0}):e.jsx(Ge,{size:14,"aria-hidden":!0})}),e.jsx("pre",{children:s.children})]})}function Yt(s){const n=Ft(s.children);return n!=null?e.jsx(Xt,{source:n,codeChildren:s.children}):e.jsx(Ut,{children:s.children})}const Gt={pre:({children:s})=>e.jsx(Yt,{children:s})},Be=i.memo(function(n){return e.jsx("div",{className:"mdocs-agent-panel-md",children:e.jsx(_t,{remarkPlugins:[At],components:Gt,children:n.children})})}),Vt=["如何发布文档?","草稿是什么?","如何创建工作空间?"];function Oe(s,n){return n.map((a,c)=>{const b=a.skillNames&&a.skillNames.length>0?a.skillNames:a.skillIds&&a.skillIds.length>0?a.skillIds:void 0;return{id:`h-${s}-${c}-${a.role}`,role:a.role,content:a.content,skillNames:b}})}function Jt(s,n){const a=s.slice(),c=a[a.length-1];return(c==null?void 0:c.type)==="text"?a[a.length-1]={type:"text",text:c.text+n}:a.push({type:"text",text:n}),a}function Zt(s,n){const a=s.slice(),c=a[a.length-1];return(c==null?void 0:c.type)==="thinking"?a[a.length-1]={type:"thinking",text:c.text+n}:a.push({type:"thinking",text:n}),a}function We(s){return s!=null&&s.length?s.filter(n=>n.type==="text").map(n=>n.text).join(""):""}function Qt(s){return!!(s!=null&&s.some(n=>n.type==="thinking"&&n.text.length>0))}function es(s){const n=new Date(s);if(Number.isNaN(n.getTime()))return"";const a=new Date;return n.getFullYear()===a.getFullYear()&&n.getMonth()===a.getMonth()&&n.getDate()===a.getDate()?n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}):n.toLocaleDateString(void 0,{month:"2-digit",day:"2-digit"})}function He(s){if(s>=1e3){const n=s/1e3;return`${n>=10?Math.round(n):Math.round(n*10)/10}K`}return String(s)}function ts(s){const{block:n,onResolved:a}=s,[c,b]=i.useState(""),[h,_]=i.useState(!1),[y,A]=i.useState(1),C=i.useRef(!1),E=i.useRef(a);E.current=a;const N=n.status==="open",u=i.useRef(0);i.useEffect(()=>{if(!N)return;C.current=!1;const j=new Date(n.expiresAt).getTime(),M=Date.now(),P=Math.max(j-M,1);u.current=P,A(1);const F=()=>{const R=j-Date.now(),p=Math.max(0,Math.min(1,R/P));A(p),R<=0&&!C.current&&(C.current=!0,kt(n.requestId).catch(()=>{}).finally(()=>{E.current(n.requestId,"","expired")}))};F();const T=window.setInterval(F,100);return()=>window.clearInterval(T)},[N,n.expiresAt,n.requestId]);async function m(j){const M=j.trim();if(!(!M||h||!N)){_(!0);try{await Nt(n.requestId,M),a(n.requestId,M,"selected")}catch{a(n.requestId,M,"failed")}finally{_(!1)}}}async function I(){if(!(h||!N)){_(!0),C.current=!0;try{await Ue(n.requestId),a(n.requestId,"","cancelled")}catch{a(n.requestId,"","failed")}finally{_(!1)}}}const H=Math.max(0,Math.ceil(y*u.current/1e3));return e.jsxs("div",{className:"mdocs-agent-choice-card"+(N?"":" mdocs-agent-choice-card-done"),children:[e.jsxs("div",{className:"mdocs-agent-choice-head",children:[e.jsx("p",{className:"mdocs-agent-choice-title",children:n.title}),N?e.jsxs("span",{className:"mdocs-agent-choice-timer","aria-live":"polite",children:[H,"s"]}):null]}),N?e.jsx("div",{className:"mdocs-agent-choice-progress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(y*100),children:e.jsx("div",{className:"mdocs-agent-choice-progress-bar",style:{transform:`scaleX(${y})`}})}):null,n.status==="selected"&&n.selected?e.jsxs("p",{className:"mdocs-agent-choice-result",children:["已选择:",n.selected]}):null,n.status==="cancelled"?e.jsx("p",{className:"mdocs-agent-choice-result muted",children:"已取消"}):null,n.status==="expired"?e.jsx("p",{className:"mdocs-agent-choice-result muted",children:"已超时,选择已失效"}):null,n.status==="failed"?e.jsx("p",{className:"mdocs-agent-choice-result muted",children:"提交失败或已失效"}):null,N?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"mdocs-agent-choice-options",children:n.options.map(j=>e.jsx("button",{type:"button",className:"mdocs-agent-choice-option",disabled:h,onClick:()=>void m(j),children:j},j))}),e.jsxs("div",{className:"mdocs-agent-choice-custom",children:[e.jsx("input",{value:c,disabled:h,placeholder:"或输入自己的内容…",onChange:j=>b(j.target.value),onKeyDown:j=>{j.key==="Enter"&&(j.preventDefault(),m(c))}}),e.jsx("button",{type:"button",disabled:h||!c.trim(),onClick:()=>void m(c),children:"提交"})]}),e.jsx("div",{className:"mdocs-agent-choice-footer",children:e.jsx("button",{type:"button",className:"mdocs-agent-choice-cancel",disabled:h,onClick:()=>void I(),children:"取消"})})]}):null]})}function ss(s){const b=2*Math.PI*8.75,h=Math.min(100,Math.max(0,s.percent)),_=b*(1-h/100),y=h>=90?"danger":h>=70?"warn":"ok",A=`上下文 ${h}% · 已用 ${He(s.used)} / ${He(s.limit)} tokens`;return e.jsx("span",{className:"mdocs-agent-panel-context mdocs-agent-panel-context-"+y,"data-tooltip":A,"aria-label":A,role:"img",tabIndex:0,children:e.jsxs("svg",{width:20,height:20,viewBox:"0 0 20 20","aria-hidden":!0,children:[e.jsx("circle",{className:"mdocs-agent-panel-context-track",cx:20/2,cy:20/2,r:8.75,fill:"none",strokeWidth:2.5}),e.jsx("circle",{className:"mdocs-agent-panel-context-value",cx:20/2,cy:20/2,r:8.75,fill:"none",strokeWidth:2.5,strokeLinecap:"round",strokeDasharray:b,strokeDashoffset:_,transform:`rotate(-90 ${20/2} ${20/2})`})]})})}function ns(s){var n;for(const a of s)if(!(a.role!=="assistant"||!((n=a.blocks)!=null&&n.length))){for(const c of a.blocks)if((c.type==="choice_card"||c.type==="skill_form_card")&&c.status==="open")return!0}return!1}const ps=i.forwardRef(function(n,a){const{open:c,onClose:b,visitorName:h,anchorStyle:_,fullscreen:y,onToggleFullscreen:A,domainId:C,documentId:E,documentTitle:N,documentPath:u,graphFileId:m,graphLabel:I,onOpenDocument:H,onTreeChanged:j,onDocumentOverwritten:M,onOpenCoding:P}=n,F=((h==null?void 0:h.trim().charAt(0))||"我").toUpperCase(),[T,R]=i.useState(!1),[p,U]=i.useState(null),[Ve,Y]=i.useState(null),[z,w]=i.useState([]),[re,G]=i.useState(null),[Ne,Je]=i.useState([]),[Ze,be]=i.useState(!1),[V,J]=i.useState(""),[X,ve]=i.useState([]),[we,ie]=i.useState(!1),[v,Z]=i.useState(!1),[Ce,L]=i.useState(null),[Q,Se]=i.useState(null),[oe,O]=i.useState(!1),[B,_e]=i.useState(!1),Qe=i.useRef(null),ee=i.useRef(null),D=i.useRef(null),Ae=i.useRef(0),K=i.useRef(!0),[et,le]=i.useState(!1),ce=i.useRef(z);ce.current=z;const Ie=!!(E!=null&&E.trim())&&!we,tt=(N==null?void 0:N.trim())||"当前文档",Me=(u==null?void 0:u.trim())||"",de=!!(m!=null&&m.trim())&&!we,st=(I==null?void 0:I.trim())||"当前图谱";i.useEffect(()=>{ie(!1)},[E,m]);function Ee(t){return Ae.current+=1,`${t}-${Ae.current}`}const Re=120;function $e(t){return t.scrollHeight-t.scrollTop-t.clientHeight}function te(){const t=ee.current;t&&(t.scrollTop=t.scrollHeight,le(!1))}function q(){K.current&&te()}function nt(){const t=ee.current;if(!t)return;const f=$e(t);K.current=f<=48,le(f>Re)}function at(){K.current=!0,te()}i.useLayoutEffect(()=>{q();const t=ee.current;t&&le($e(t)>Re)},[z]);async function rt(){be(!0);try{const t=await ht();Je(t.sessions),re||G(t.lastOpenedSessionId)}catch{}finally{be(!1)}}async function ue(){try{const t=await ft();Se(t)}catch{}}async function Te(){try{const t=await qe();U(t),Y(null)}catch(t){U(null),Y(t instanceof Error?t.message:String(t))}}i.useEffect(()=>{var f;if(!c){R(!1),(f=D.current)==null||f.abort(),D.current=null,Z(!1);return}let t=!1;return(async()=>{try{const o=await qe();t||(U(o),Y(null))}catch(o){t||(U(null),Y(o instanceof Error?o.message:String(o)))}})(),ue(),()=>{t=!0}},[c]),i.useEffect(()=>{if(!c)return;let t=!1;return(async()=>{try{const f=await mt();if(t)return;G(f.sessionId),w(o=>o.length>0?o:Oe(f.sessionId,f.messages))}catch{}})(),()=>{t=!0}},[c]),i.useEffect(()=>{!c||!T||rt()},[c,T]);function me(){if(!B){if(ns(ce.current)){O(!0);return}O(!1),b()}}async function it(){var o;if(B)return;_e(!0);const t=ce.current,f=[];for(const S of t)if(!(S.role!=="assistant"||!S.blocks))for(const g of S.blocks)g.type==="choice_card"&&g.status==="open"&&f.push(Ue(g.requestId).catch(()=>{})),g.type==="skill_form_card"&&g.status==="open"&&f.push(jt(g.requestId).catch(()=>{}));await Promise.all(f),(o=D.current)==null||o.abort(),w(S=>S.map(g=>g.role!=="assistant"||!g.blocks?g:{...g,blocks:g.blocks.map(x=>x.type==="choice_card"&&x.status==="open"?{...x,status:"cancelled"}:x.type==="skill_form_card"&&x.status==="open"?{...x,status:"cancelled"}:x)})),O(!1),_e(!1),b()}const pe=i.useRef(me);pe.current=me,i.useImperativeHandle(a,()=>({requestClose:()=>pe.current()}),[]),i.useEffect(()=>{if(!c){O(!1);return}const t=f=>{if(f.key==="Escape"){if(oe){B||O(!1);return}if(T){R(!1);return}pe.current()}};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[c,T,oe,B]);async function fe(t){var x;const f=t.trim();if(!f||v)return;if(!(p!=null&&p.enabled)){L((p==null?void 0:p.reason)==="missing_api_key"?"请先配置 API Key":(p==null?void 0:p.reason)==="skills_missing"?"手册 skills 未就绪,请确认已构建 agent-skills":"助手暂不可用");return}(x=D.current)==null||x.abort();const o=new AbortController;D.current=o;const S={id:Ee("u"),role:"user",content:f,skillNames:X.length>0?[...X]:void 0},g=Ee("a");K.current=!0,w($=>[...$,S,{id:g,role:"assistant",content:""}]),J(""),Z(!0),L(null),R(!1),requestAnimationFrame(()=>{te(),requestAnimationFrame(te)});try{let $=!1;await yt(f,{skillNames:X.length>0?X:void 0,references:{domainId:(C==null?void 0:C.trim())||void 0,documentId:!de&&Ie?E.trim():void 0,graphFileId:de?m.trim():void 0},signal:o.signal,onEvent:l=>{l.type==="text_delta"?(w(k=>k.map(r=>{if(r.id!==g)return r;const d=Jt(r.blocks??[],l.text);return{...r,blocks:d,content:We(d)}})),requestAnimationFrame(()=>q())):l.type==="thinking_delta"?(w(k=>k.map(r=>{if(r.id!==g)return r;const d=Zt(r.blocks??[],l.text);return{...r,blocks:d}})),requestAnimationFrame(()=>q())):l.type==="sources"?(w(k=>k.map(r=>{if(r.id!==g)return r;const d=(r.blocks??[]).slice(),ge=d[d.length-1];return(ge==null?void 0:ge.type)==="sources"?d[d.length-1]={type:"sources",items:l.items}:d.push({type:"sources",items:l.items}),{...r,blocks:d}})),requestAnimationFrame(()=>q())):l.type==="document_table"?(w(k=>k.map(r=>{if(r.id!==g)return r;const d=[...r.blocks??[],{type:"document_table",title:l.title,rows:l.rows}];return{...r,blocks:d}})),requestAnimationFrame(()=>q())):l.type==="document_card"?(w(k=>k.map(r=>{if(r.id!==g)return r;const d=[...r.blocks??[],{type:"document_card",documentId:l.documentId,title:l.title,path:l.path,preview:l.preview}];return{...r,blocks:d}})),requestAnimationFrame(()=>q())):l.type==="tool_notice"?(w(k=>k.map(r=>{if(r.id!==g)return r;const d=[...r.blocks??[],{type:"tool_notice",toolName:l.toolName,text:l.text}];return{...r,blocks:d}})),requestAnimationFrame(()=>q())):l.type==="choice_card"?(w(k=>k.map(r=>{if(r.id!==g)return r;const d=[...r.blocks??[],{type:"choice_card",requestId:l.requestId,title:l.title,options:l.options,expiresAt:l.expiresAt,status:"open"}];return{...r,blocks:d}})),requestAnimationFrame(()=>q())):l.type==="choice_expired"?w(k=>k.map(r=>r.id!==g||!r.blocks?r:{...r,blocks:r.blocks.map(d=>d.type==="choice_card"&&d.requestId===l.requestId&&d.status==="open"?{...d,status:"expired"}:d)})):l.type==="skill_form_card"?(w(k=>k.map(r=>{if(r.id!==g)return r;const d=[...r.blocks??[],{type:"skill_form_card",requestId:l.requestId,mode:l.mode,title:l.title,currentName:l.currentName,initialName:l.initialName,initialDescription:l.initialDescription,initialBody:l.initialBody,expiresAt:l.expiresAt,status:"open"}];return{...r,blocks:d}})),requestAnimationFrame(()=>q())):l.type==="skill_form_expired"?w(k=>k.map(r=>r.id!==g||!r.blocks?r:{...r,blocks:r.blocks.map(d=>d.type==="skill_form_card"&&d.requestId===l.requestId&&d.status==="open"?{...d,status:"expired"}:d)})):l.type==="tree_changed"?j==null||j():l.type==="document_overwritten"?M==null||M({documentId:l.documentId,headCommitId:l.headCommitId}):l.type==="open_coding"?P==null||P({documentId:l.documentId,displayName:l.displayName}):l.type==="context_usage"?Se({percent:l.percent,used:l.used,limit:l.limit}):l.type==="error"&&($=!0,L(l.message))}}),!o.signal.aborted&&!$&&ve([])}catch($){if(o.signal.aborted)return;L($ instanceof Error?$.message:String($))}finally{D.current===o&&(D.current=null),Z(!1)}}async function ot(){var t;if(!v){(t=D.current)==null||t.abort(),L(null),R(!1),Z(!1);try{const f=await gt();G(f.sessionId),w([]),J(""),K.current=!0,ue()}catch(f){L(f instanceof Error?f.message:String(f))}}}async function lt(t){var f;if(!v){if(t===re){R(!1);return}(f=D.current)==null||f.abort(),L(null);try{const o=await xt(t);G(o.sessionId),w(Oe(o.sessionId,o.messages)),J(""),R(!1),K.current=!0,requestAnimationFrame(()=>q()),ue()}catch(o){L(o instanceof Error?o.message:String(o))}}}function ze(t){!t||!H||H(t)}if(!c)return null;const he=(p==null?void 0:p.reason)==="missing_api_key",De=Ve??(p&&!p.enabled&&!he?p.reason==="skills_missing"?"skills 未就绪":"助手暂不可用":null);return e.jsxs("div",{ref:Qe,className:"mdocs-agent-panel"+(y?" mdocs-agent-panel--fullscreen":""),role:"dialog","aria-label":"mdocs 智能助手","aria-modal":y?!0:void 0,style:y?void 0:_,children:[e.jsxs("header",{className:"mdocs-agent-panel-header",children:[e.jsxs("div",{className:"mdocs-agent-panel-title",children:[e.jsx("img",{src:Fe,alt:"",className:"mdocs-agent-panel-title-logo"}),e.jsx("span",{children:"mdocs 智能助手"})]}),e.jsxs("div",{className:"mdocs-agent-panel-actions",children:[e.jsx("button",{type:"button",className:"mdocs-agent-panel-icon-btn",title:"新会话","aria-label":"新会话",disabled:v,onClick:()=>void ot(),children:e.jsx(St,{size:16,strokeWidth:1.8})}),e.jsx("button",{type:"button",className:"mdocs-agent-panel-icon-btn"+(T?" active":""),title:"历史会话","aria-label":"历史会话",onClick:()=>R(t=>!t),children:e.jsx(bt,{size:16,strokeWidth:1.8})}),A?e.jsx("button",{type:"button",className:"mdocs-agent-panel-icon-btn",title:y?"退出全屏":"全屏","aria-label":y?"退出全屏":"全屏",onClick:A,children:y?e.jsx(Rt,{size:16,strokeWidth:1.8}):e.jsx(Mt,{size:16,strokeWidth:1.8})}):null,e.jsx("button",{type:"button",className:"mdocs-agent-panel-icon-btn",title:"关闭","aria-label":"关闭",onClick:me,children:e.jsx(ne,{size:16,strokeWidth:1.8})})]})]}),T?e.jsxs("div",{className:"mdocs-agent-panel-history",children:[e.jsxs("div",{className:"mdocs-agent-panel-history-head",children:[e.jsx("span",{children:"历史会话"}),e.jsx("button",{type:"button",className:"mdocs-agent-panel-history-back",onClick:()=>R(!1),children:"返回对话"})]}),Ze?e.jsx("p",{className:"mdocs-agent-panel-history-hint",children:"加载中…"}):Ne.length===0?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"mdocs-agent-panel-history-empty",children:"暂无历史会话"}),e.jsx("p",{className:"mdocs-agent-panel-history-hint",children:"发一条消息后会出现在这里"})]}):e.jsx("ul",{className:"mdocs-agent-panel-history-list",children:Ne.map(t=>e.jsx("li",{children:e.jsxs("button",{type:"button",className:"mdocs-agent-panel-history-item"+(t.id===re?" active":""),disabled:v,onClick:()=>void lt(t.id),children:[e.jsx("span",{className:"mdocs-agent-panel-history-title",children:t.title}),e.jsx("span",{className:"mdocs-agent-panel-history-time",children:es(t.updatedAt)})]})},t.id))})]}):e.jsxs("div",{className:"mdocs-agent-panel-body",children:[e.jsxs("div",{className:"mdocs-agent-panel-scroll-wrap",children:[e.jsx("div",{className:"mdocs-agent-panel-welcome",ref:ee,onScroll:nt,children:z.length===0?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"mdocs-agent-panel-hello",children:"你好,我是 mdocs 智能助手"}),e.jsx("p",{className:"mdocs-agent-panel-desc",children:"我能答疑、搜文档、整理结构,也能帮你写全文;需要精细改稿请点文档顶栏「帮写」。"}),he?e.jsx(Pe,{onConfigured:Te}):De?e.jsx("p",{className:"mdocs-agent-panel-status-warn",children:De}):e.jsx("div",{className:"mdocs-agent-panel-chips",children:Vt.map(t=>e.jsx("button",{type:"button",className:"mdocs-agent-panel-chip",onClick:()=>void fe(t),disabled:v||!(p!=null&&p.enabled),children:t},t))})]}):e.jsx("div",{className:"mdocs-agent-panel-messages",children:z.map(t=>{var f;return e.jsxs("div",{className:"mdocs-agent-panel-msg"+(t.role==="user"?" mdocs-agent-panel-msg-user":" mdocs-agent-panel-msg-assistant"),children:[t.role==="assistant"?e.jsx("div",{className:"mdocs-agent-panel-avatar mdocs-agent-panel-avatar-ai","aria-hidden":!0,children:e.jsx("img",{src:Fe,alt:""})}):null,e.jsxs("div",{className:"mdocs-agent-panel-msg-bubble",children:[t.role==="user"&&t.skillNames&&t.skillNames.length>0?e.jsxs("div",{className:"mdocs-agent-msg-skills",children:["Skill ×",t.skillNames.length]}):null,t.role==="assistant"?t.blocks&&t.blocks.length>0?e.jsxs("div",{className:"mdocs-agent-panel-timeline",children:[t.blocks.map((o,S)=>{var g;return o.type==="thinking"?o.text?e.jsxs("details",{className:"mdocs-agent-panel-think-fold",open:v&&t.id===((g=z[z.length-1])==null?void 0:g.id),children:[e.jsx("summary",{children:"思考中"}),e.jsx("pre",{className:"mdocs-agent-panel-think-body",children:o.text})]},`${t.id}-th-${S}`):null:o.type==="text"?o.text?e.jsx("div",{className:"mdocs-agent-panel-block",children:e.jsx(Be,{children:o.text})},`${t.id}-t-${S}`):null:o.type==="sources"?o.items.length===0?null:e.jsx("div",{className:"mdocs-agent-panel-block",children:e.jsxs("details",{className:"mdocs-agent-panel-tool-fold",children:[e.jsxs("summary",{children:["已阅读 ",o.items.length," 个页面"]}),e.jsx("ol",{className:"mdocs-agent-panel-sources-list",children:o.items.map(x=>e.jsx("li",{children:e.jsx("a",{href:x.url,target:"_blank",rel:"noreferrer",children:x.name})},x.id))})]})},`${t.id}-s-${S}`):o.type==="tool_notice"?e.jsx("div",{className:"mdocs-agent-panel-block",children:e.jsx("p",{className:"mdocs-agent-panel-tool-notice",children:o.text})},`${t.id}-n-${S}`):o.type==="choice_card"?e.jsx("div",{className:"mdocs-agent-panel-block",children:e.jsx(ts,{block:o,onResolved:(x,$,l)=>{w(k=>k.map(r=>r.id!==t.id||!r.blocks?r:{...r,blocks:r.blocks.map(d=>d.type==="choice_card"&&d.requestId===x?{...d,status:l,selected:l==="selected"?$:d.selected}:d)}))}})},`${t.id}-ch-${S}`):o.type==="skill_form_card"?e.jsx("div",{className:"mdocs-agent-panel-block",children:e.jsx(vt,{block:o,onResolved:(x,$,l)=>{w(k=>k.map(r=>r.id!==t.id||!r.blocks?r:{...r,blocks:r.blocks.map(d=>d.type==="skill_form_card"&&d.requestId===x?{...d,status:$,submittedName:$==="submitted"?l:d.submittedName}:d)}))}})},`${t.id}-sf-${S}`):o.type==="document_card"?e.jsx("div",{className:"mdocs-agent-panel-block",children:e.jsxs("details",{className:"mdocs-agent-panel-tool-fold",children:[e.jsxs("summary",{children:[e.jsxs("button",{type:"button",className:"mdocs-agent-panel-doc-link",onClick:x=>{x.preventDefault(),x.stopPropagation(),ze(o.documentId)},children:["《",o.title,"》"]}),e.jsx("span",{className:"mdocs-agent-panel-tool-fold-hint",children:"文档预览"})]}),e.jsxs("div",{className:"mdocs-agent-panel-doc-card-body",children:[o.path?e.jsx("p",{className:"mdocs-agent-panel-doc-card-path",children:o.path}):null,o.preview?e.jsx("p",{className:"mdocs-agent-panel-doc-card-preview",children:o.preview}):e.jsx("p",{className:"mdocs-agent-panel-doc-card-preview muted",children:"(无正文预览)"})]})]})},`${t.id}-c-${S}`):e.jsx("div",{className:"mdocs-agent-panel-block",children:e.jsxs("details",{className:"mdocs-agent-panel-tool-fold",children:[e.jsxs("summary",{children:[o.title,e.jsx("span",{className:"mdocs-agent-panel-tool-fold-hint",children:o.rows.length===0?"无结果":`${o.rows.length} 条`})]}),e.jsx("div",{className:"mdocs-agent-panel-doc-table-wrap",children:o.rows.length===0?e.jsx("p",{className:"mdocs-agent-panel-doc-table-empty",children:"无结果"}):e.jsxs("table",{className:"mdocs-agent-panel-doc-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"文章名字"}),e.jsx("th",{children:"文章内容"})]})}),e.jsx("tbody",{children:o.rows.map(x=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("button",{type:"button",className:"mdocs-agent-panel-doc-link",onClick:()=>ze(x.documentId),children:x.title})}),e.jsx("td",{children:x.summary||"-"})]},x.documentId))})]})})]})},`${t.id}-d-${S}`)}),v&&t.id===((f=z[z.length-1])==null?void 0:f.id)&&!We(t.blocks)&&!Qt(t.blocks)?e.jsxs("span",{className:"mdocs-agent-panel-thinking","aria-label":"思考中",children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]}):null]}):t.content?e.jsx(Be,{children:t.content}):v?e.jsxs("span",{className:"mdocs-agent-panel-thinking","aria-label":"思考中",children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]}):null:t.content]}),t.role==="user"?e.jsx("div",{className:"mdocs-agent-panel-avatar mdocs-agent-panel-avatar-user","aria-hidden":!0,children:F}):null]},t.id)})})}),et?e.jsxs("button",{type:"button",className:"mdocs-chat-jump-bottom",onClick:at,title:"回到底部","aria-label":"回到底部",children:[e.jsx(wt,{size:14,strokeWidth:2,"aria-hidden":!0}),e.jsx("span",{children:"置底"})]}):null]}),Ce?e.jsx("p",{className:"mdocs-agent-panel-status-warn",children:Ce}):null,he&&z.length>0?e.jsx(Pe,{onConfigured:Te}):null,e.jsx(Ct,{selectedNames:X,onChange:ve,disabled:v||!(p!=null&&p.enabled)}),e.jsxs("div",{className:"mdocs-agent-panel-input-wrap",children:[de?e.jsxs("div",{className:"mdocs-agent-doc-ref mdocs-agent-graph-ref",children:[e.jsx(Ke,{size:15,strokeWidth:1.75,className:"mdocs-agent-doc-ref-icon","aria-hidden":!0}),e.jsxs("div",{className:"mdocs-agent-doc-ref-text",children:[e.jsx("span",{className:"mdocs-agent-doc-ref-title",children:st}),e.jsx("span",{className:"mdocs-agent-doc-ref-path",children:"图谱(只读)"})]}),e.jsx("button",{type:"button",className:"mdocs-agent-doc-ref-unlink",title:"取消引用","aria-label":"取消引用当前图谱",disabled:v,onClick:()=>ie(!0),children:e.jsx(ne,{size:14,strokeWidth:2,"aria-hidden":!0})})]}):Ie?e.jsxs("div",{className:"mdocs-agent-doc-ref",children:[e.jsx(pt,{size:15,strokeWidth:1.75,className:"mdocs-agent-doc-ref-icon","aria-hidden":!0}),e.jsxs("div",{className:"mdocs-agent-doc-ref-text",children:[e.jsx("span",{className:"mdocs-agent-doc-ref-title",children:tt}),Me?e.jsx("span",{className:"mdocs-agent-doc-ref-path",children:Me}):null]}),e.jsx("button",{type:"button",className:"mdocs-agent-doc-ref-unlink",title:"取消引用","aria-label":"取消引用当前文档",disabled:v,onClick:()=>ie(!0),children:e.jsx(ne,{size:14,strokeWidth:2,"aria-hidden":!0})})]}):null,e.jsxs("div",{className:"mdocs-agent-panel-input-body",children:[e.jsx("textarea",{className:"mdocs-agent-panel-input",rows:2,placeholder:p!=null&&p.enabled?"把你的问题告诉我…":"请先配置 API Key",value:V,disabled:v||!(p!=null&&p.enabled),onChange:t=>J(t.target.value),onKeyDown:t=>{t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),fe(V))}}),Q?e.jsx(ss,{percent:Q.percent,used:Q.used,limit:Q.limit}):null,e.jsx("button",{type:"button",className:v?"mdocs-agent-panel-send mdocs-agent-panel-send-stop":"mdocs-agent-panel-send",disabled:v?!1:!(p!=null&&p.enabled)||!V.trim(),onClick:()=>{var t;if(v){(t=D.current)==null||t.abort();return}fe(V)},title:v?"停止":"发送","aria-label":v?"停止":"发送",children:v?"■":"↑"})]})]}),e.jsx("p",{className:"mdocs-agent-panel-footnote",children:"内容由 AI 生成,仅供参考"})]}),oe?e.jsx("div",{className:"mdocs-agent-close-confirm-backdrop",role:"presentation",onClick:()=>{B||O(!1)},children:e.jsxs("div",{className:"mdocs-message-dialog mdocs-agent-close-confirm",role:"dialog","aria-modal":"true","aria-labelledby":"mdocs-agent-close-confirm-title",onClick:t=>t.stopPropagation(),children:[e.jsx("h3",{id:"mdocs-agent-close-confirm-title",className:"mdocs-message-dialog-title",children:"有待处理的倒计时"}),e.jsx("p",{className:"mdocs-message-dialog-body",children:"当前还有选择卡或 Skill 表单在倒计时。强制关闭会取消这些操作并退出助手;也可以继续等待完成后再关。"}),e.jsxs("div",{className:"mdocs-message-dialog-actions mdocs-agent-close-confirm-actions",children:[e.jsx("button",{type:"button",className:"secondary",disabled:B,onClick:()=>O(!1),children:"继续等待"}),e.jsx("button",{type:"button",disabled:B,onClick:()=>void it(),children:B?"关闭中…":"强制关闭并退出"})]})]})}):null]})});export{ps as AgentChatPanel};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{o as E,a8 as L,aB as D,ax as _,aC as B}from"./index-CUdIA5aE.js";import{r as a,j as e}from"./react-vendor-BuABiQkA.js";/**
|
|
2
2
|
* @license lucide-react v0.562.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
5
5
|
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const
|
|
6
|
+
*/const F=[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]],X=E("arrow-down",F);/**
|
|
7
7
|
* @license lucide-react v0.562.0 - ISC
|
|
8
8
|
*
|
|
9
9
|
* This source code is licensed under the ISC license.
|
|
10
10
|
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const
|
|
11
|
+
*/const $=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]],K=E("history",$),j=5;function P(i){const t=a.useRef(!0),r=a.useRef(null),[d,k]=a.useState([]),[u,p]=a.useState(!1),[h,v]=a.useState(null);a.useEffect(()=>(t.current=!0,()=>{t.current=!1}),[]),a.useEffect(()=>{(async()=>{try{const s=await L();if(!t.current)return;k(s)}catch(s){if(!t.current)return;v(s instanceof Error?s.message:String(s))}})()},[]),a.useEffect(()=>{if(!u)return;function s(o){const g=r.current;!g||g.contains(o.target)||p(!1)}function n(o){o.key==="Escape"&&p(!1)}return document.addEventListener("mousedown",s),document.addEventListener("keydown",n),()=>{document.removeEventListener("mousedown",s),document.removeEventListener("keydown",n)}},[u]);const c=d.filter(s=>i.selectedNames.includes(s.name));function f(s){if(i.disabled)return;const n=new Set(i.selectedNames);if(n.has(s))n.delete(s);else{if(n.size>=j)return;n.add(s)}i.onChange([...n])}return d.length===0&&!h?null:e.jsxs("div",{className:"mdocs-agent-skill-ref",ref:r,children:[e.jsxs("div",{className:"mdocs-agent-skill-ref-bar",children:[e.jsxs("div",{className:"mdocs-agent-skill-ref-anchor",children:[u&&d.length>0?e.jsxs("div",{className:"mdocs-agent-skill-popover",role:"listbox","aria-label":"选择 Skill",children:[e.jsxs("div",{className:"mdocs-agent-skill-popover-hint",children:["选择要引用的 Skill(最多 ",j," 个)"]}),e.jsx("ul",{className:"mdocs-agent-skill-popover-list",children:d.map(s=>{const n=i.selectedNames.includes(s.name),o=!n&&i.selectedNames.length>=j;return e.jsx("li",{children:e.jsxs("button",{type:"button",role:"option","aria-selected":n,className:"mdocs-agent-skill-popover-item"+(n?" mdocs-agent-skill-popover-item-on":""),disabled:i.disabled||o,onClick:()=>f(s.name),children:[e.jsx("span",{className:"mdocs-agent-skill-popover-check","aria-hidden":!0,children:n?"✓":""}),e.jsxs("span",{className:"mdocs-agent-skill-popover-text",children:[e.jsx("span",{className:"mdocs-agent-skill-popover-name",children:s.name}),s.description?e.jsx("span",{className:"mdocs-agent-skill-popover-desc",children:s.description}):e.jsx("span",{className:"mdocs-agent-skill-popover-desc mdocs-agent-skill-popover-desc-muted",children:"无简介"})]})]})},s.id)})})]}):null,e.jsxs("button",{type:"button",className:"mdocs-agent-skill-ref-toggle"+(u?" mdocs-agent-skill-ref-toggle-open":""),disabled:i.disabled||d.length===0,onClick:()=>p(s=>!s),"aria-expanded":u,"aria-haspopup":"listbox",title:"引用 Skill",children:["Skill",c.length>0?` · ${c.length}`:""]})]}),c.map(s=>e.jsxs("button",{type:"button",className:"mdocs-agent-skill-chip mdocs-agent-skill-chip-on",disabled:i.disabled,onClick:()=>f(s.name),title:"移除引用",children:[s.name,e.jsx("span",{"aria-hidden":!0,children:" ×"})]},s.name))]}),h?e.jsx("p",{className:"mdocs-agent-panel-status-warn",children:h}):null]})}const z=/^[A-Za-z0-9_]+$/;function T(i){const{block:t,onResolved:r}=i,[d,k]=a.useState(t.initialName),[u,p]=a.useState(t.initialDescription),[h,v]=a.useState(t.initialBody),[c,f]=a.useState(!1),[s,n]=a.useState(null),[o,g]=a.useState(1),x=a.useRef(!1),N=a.useRef(r);N.current=r;const m=t.status==="open",b=a.useRef(0);a.useEffect(()=>{if(!m)return;x.current=!1;const l=new Date(t.expiresAt).getTime(),M=Date.now(),y=Math.max(l-M,1);b.current=y,g(1);const S=()=>{const w=l-Date.now(),q=Math.max(0,Math.min(1,w/y));g(q),w<=0&&!x.current&&(x.current=!0,D(t.requestId).catch(()=>{}).finally(()=>{N.current(t.requestId,"expired")}))};S();const I=window.setInterval(S,100);return()=>window.clearInterval(I)},[m,t.expiresAt,t.requestId]);async function R(){if(c||!m)return;const l=d.trim();if(!l){n("名称不能为空");return}if(!z.test(l)){n("名称仅允许英文、数字、下划线");return}if(!h.trim()){n("正文不能为空");return}f(!0),n(null);try{await B(t.requestId,{name:l,description:u.trim(),body:h}),r(t.requestId,"submitted",l)}catch{r(t.requestId,"failed")}finally{f(!1)}}async function A(){if(!(c||!m)){f(!0),n(null),x.current=!0;try{await _(t.requestId),r(t.requestId,"cancelled")}catch{r(t.requestId,"failed")}finally{f(!1)}}}const C=Math.max(0,Math.ceil(o*b.current/1e3));return e.jsxs("div",{className:"mdocs-agent-choice-card mdocs-agent-skill-form-card"+(m?"":" mdocs-agent-choice-card-done"),children:[e.jsxs("div",{className:"mdocs-agent-choice-head",children:[e.jsx("p",{className:"mdocs-agent-choice-title",children:t.title}),m?e.jsxs("span",{className:"mdocs-agent-choice-timer","aria-live":"polite",children:[C,"s"]}):null]}),m?e.jsx("div",{className:"mdocs-agent-choice-progress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(o*100),children:e.jsx("div",{className:"mdocs-agent-choice-progress-bar",style:{transform:`scaleX(${o})`}})}):null,t.status==="submitted"?e.jsxs("p",{className:"mdocs-agent-choice-result",children:["已提交",t.submittedName?`:${t.submittedName}`:""]}):null,t.status==="cancelled"?e.jsx("p",{className:"mdocs-agent-choice-result muted",children:"已取消"}):null,t.status==="expired"?e.jsx("p",{className:"mdocs-agent-choice-result muted",children:"已超时,表单已失效"}):null,t.status==="failed"?e.jsx("p",{className:"mdocs-agent-choice-result muted",children:"提交失败或已失效"}):null,m?e.jsxs("div",{className:"mdocs-agent-skill-form-fields",children:[e.jsxs("label",{className:"mdocs-agent-skill-form-field",children:[e.jsx("span",{children:"名称(英文数字下划线)"}),e.jsx("input",{type:"text",value:d,onChange:l=>k(l.target.value),maxLength:64,disabled:c,autoComplete:"off",spellCheck:!1})]}),e.jsxs("label",{className:"mdocs-agent-skill-form-field",children:[e.jsx("span",{children:"简介"}),e.jsx("input",{type:"text",value:u,onChange:l=>p(l.target.value),maxLength:200,disabled:c})]}),e.jsxs("label",{className:"mdocs-agent-skill-form-field",children:[e.jsx("span",{children:"正文"}),e.jsx("textarea",{value:h,onChange:l=>v(l.target.value),rows:8,disabled:c})]}),s?e.jsx("p",{className:"mdocs-agent-skill-form-error",children:s}):null,e.jsxs("div",{className:"mdocs-agent-skill-form-actions",children:[e.jsx("button",{type:"button",className:"mdocs-agent-skill-form-cancel",disabled:c,onClick:()=>void A(),children:"取消"}),e.jsx("button",{type:"button",disabled:c,onClick:()=>void R(),children:c?"提交中…":t.mode==="create"?"创建":"保存"})]})]}):null]})}export{X as A,K as H,T as S,P as a};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{r as c,j as e}from"./react-vendor-BuABiQkA.js";import{ay as Se,az as Ie,aw as ve,an as de,ao as Me,q as Ae,ap as ue,a4 as Te,as as Le,aA as Re,at as $e,au as Ee,av as _e}from"./index-CUdIA5aE.js";import{H as qe,S as Pe,A as De,a as Be}from"./AgentSkillFormCard-BYUjSFe1.js";import{P as Fe}from"./plus-QDhBbIRF.js";import{ae as He,af as Ke}from"./ui-CvA4pq3d.js";import"./diagram-Bk84WZto.js";import"./motion-DFABYlwt.js";function Oe(t){const{block:s,onResolved:i}=t,[r,f]=c.useState(""),[g,p]=c.useState(!1),[N,k]=c.useState(1),h=c.useRef(!1),j=c.useRef(i);j.current=i;const u=s.status==="open",E=c.useRef(0);c.useEffect(()=>{if(!u)return;h.current=!1;const m=new Date(s.expiresAt).getTime(),b=Date.now(),P=Math.max(m-b,1);E.current=P,k(1);const $=()=>{const K=m-Date.now(),A=Math.max(0,Math.min(1,K/P));k(A),K<=0&&!h.current&&(h.current=!0,Se(s.requestId).catch(()=>{}).finally(()=>{j.current(s.requestId,"","expired")}))};$();const H=window.setInterval($,100);return()=>window.clearInterval(H)},[u,s.expiresAt,s.requestId]);async function y(m){const b=m.trim();if(!(!b||g||!u)){p(!0);try{await Ie(s.requestId,b),i(s.requestId,b,"selected")}catch{i(s.requestId,b,"failed")}finally{p(!1)}}}async function R(){if(!(g||!u)){p(!0),h.current=!0;try{await ve(s.requestId),i(s.requestId,"","cancelled")}catch{i(s.requestId,"","failed")}finally{p(!1)}}}const F=Math.max(0,Math.ceil(N*E.current/1e3));return e.jsxs("div",{className:"mdocs-agent-choice-card"+(u?"":" mdocs-agent-choice-card-done"),children:[e.jsxs("div",{className:"mdocs-agent-choice-head",children:[e.jsx("p",{className:"mdocs-agent-choice-title",children:s.title}),u?e.jsxs("span",{className:"mdocs-agent-choice-timer","aria-live":"polite",children:[F,"s"]}):null]}),u?e.jsx("div",{className:"mdocs-agent-choice-progress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(N*100),children:e.jsx("div",{className:"mdocs-agent-choice-progress-bar",style:{transform:`scaleX(${N})`}})}):null,s.status==="selected"&&s.selected?e.jsxs("p",{className:"mdocs-agent-choice-result",children:["已选择:",s.selected]}):null,s.status==="cancelled"?e.jsx("p",{className:"mdocs-agent-choice-result muted",children:"已取消"}):null,s.status==="expired"?e.jsx("p",{className:"mdocs-agent-choice-result muted",children:"已超时,选择已失效"}):null,s.status==="failed"?e.jsx("p",{className:"mdocs-agent-choice-result muted",children:"提交失败或已失效"}):null,u?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"mdocs-agent-choice-options",children:s.options.map(m=>e.jsx("button",{type:"button",className:"mdocs-agent-choice-option",disabled:g,onClick:()=>void y(m),children:m},m))}),e.jsxs("div",{className:"mdocs-agent-choice-custom",children:[e.jsx("input",{value:r,disabled:g,placeholder:"或输入自己的内容…",onChange:m=>f(m.target.value),onKeyDown:m=>{m.key==="Enter"&&(m.preventDefault(),y(r))}}),e.jsx("button",{type:"button",disabled:g||!r.trim(),onClick:()=>void y(r),children:"提交"})]}),e.jsx("div",{className:"mdocs-agent-choice-footer",children:e.jsx("button",{type:"button",className:"mdocs-agent-choice-cancel",disabled:g,onClick:()=>void R(),children:"取消"})})]}):null]})}function te(t){return t===""?[]:t.split(`
|
|
2
|
+
`)}function We(t){return t.join(`
|
|
3
|
+
`)}function ne(t,s){const i=te(t),r=te(s),f=i.length,g=r.length,p=Array.from({length:f+1},()=>Array.from({length:g+1},()=>0));for(let y=f-1;y>=0;y--)for(let R=g-1;R>=0;R--)i[y]===r[R]?p[y][R]=p[y+1][R+1]+1:p[y][R]=Math.max(p[y+1][R],p[y][R+1]);const N=[];let k=0,h=0;for(;k<f||h<g;)if(k<f&&h<g&&i[k]===r[h])N.push({kind:"eq",oi:k,ni:h}),k++,h++;else if(h<g&&(k===f||p[k][h+1]>=p[k+1][h]))N.push({kind:"ins",oi:k,ni:h}),h++;else if(k<f)N.push({kind:"del",oi:k,ni:h}),k++;else break;const j=[];let u=0,E=0;for(;u<N.length;){if(N[u].kind==="eq"){u++;continue}const y=N[u].oi,R=N[u].ni,F=[],m=[];let b=y,P=R;for(;u<N.length&&N[u].kind!=="eq";){const $=N[u];$.kind==="del"?(F.push(i[$.oi]),b=$.oi+1):(m.push(r[$.ni]),P=$.ni+1),u++}j.push({id:`h${E++}`,oldStart:y,oldEnd:b,newStart:R,newEnd:P,oldLines:F,newLines:m})}return j}function ze(t,s){const i=te(t);return We([...i.slice(0,s.oldStart),...s.newLines,...i.slice(s.oldEnd)])}function U(t){return t===""?[]:t.split(`
|
|
4
|
+
`)}function z(t){return t.join(`
|
|
5
|
+
`)}function Je(t,s){const i=U(t),r=[];let f=0;return s.forEach((g,p)=>{g.oldStart>f&&r.push({kind:"same",lines:i.slice(f,g.oldStart),key:`s-${f}-${g.oldStart}`}),r.push({kind:"hunk",hunk:g,hunkIndex:p,key:`h-${g.id}-${p}`}),f=g.oldEnd}),f<i.length?r.push({kind:"same",lines:i.slice(f),key:`s-${f}-end`}):s.length===0&&i.length===0&&r.push({kind:"same",lines:[],key:"s-empty"}),r}function Ge(t){const s=[],i=[];for(const r of t)r.kind==="same"?s.push(z(r.lines)):i.push(z(r.hunk.newLines));return{sameTexts:s,newTexts:i}}function me(t,s){const i=[];let r=0,f=0;for(const g of t)if(g.kind==="same"){const p=s.sameTexts[r++]??"";i.push(...U(p))}else{const p=s.newTexts[f++]??"";i.push(...U(p))}return z(i)}function Ue(t){return t.oldLines.length===0?"add":t.newLines.length===0?"del":"mod"}function he(t){const s=Math.max(1,U(t.value).length);return e.jsxs("div",{className:`mdocs-ai-write-line ${t.className}`,children:[e.jsx("span",{className:"mdocs-ai-write-rail","aria-hidden":!0}),e.jsx("textarea",{className:"mdocs-ai-write-inline-edit",value:t.value,rows:s,spellCheck:!1,"aria-label":t["aria-label"],onChange:i=>t.onChange(i.target.value),onBlur:()=>t.onBlurFlush()})]})}function Ve(t){const s=!!t.sending,[i,r]=c.useState(0),[f,g]=c.useState(null),[p,N]=c.useState({sameTexts:[],newTexts:[]}),[k,h]=c.useState([]),j=c.useRef(!1),u=c.useRef(!1),E=c.useRef([]),y=c.useRef(p);y.current=p,E.current=k;const R=c.useMemo(()=>t.proposedMd==null||t.proposedMd===t.currentMd?[]:ne(t.currentMd,t.proposedMd),[t.currentMd,t.proposedMd]),F=!s&&(k.length>0?k.some(l=>l.kind==="hunk"):R.length>0);c.useEffect(()=>{if(s){h([]),j.current=!1,u.current=!1;return}if(t.proposedMd==null||t.proposedMd===t.currentMd){h([]),j.current=!1,u.current=!1;return}if(u.current){u.current=!1;return}const l=ne(t.currentMd,t.proposedMd);if(l.length===0){h([]);return}const x=Je(t.currentMd,l);h(x),j.current=!1,N(Ge(x))},[s,t.proposedMd,t.currentMd]);const m=c.useMemo(()=>k.filter(l=>l.kind==="hunk").map(l=>l.hunk),[k]);c.useEffect(()=>{if(m.length===0){r(0);return}r(l=>Math.min(l,m.length-1))},[m.length]);const b=f??i;function P(){return me(E.current,y.current)}function $(){if(!F||E.current.length===0)return t.proposedMd;const l=P();return j.current=!1,l===t.currentMd?(u.current=!1,t.onProposedChange(null),null):(l!==t.proposedMd&&(u.current=!0,t.onProposedChange(l)),l)}function H(l){const x=E.current.find(D=>D.kind==="hunk"&&D.hunk.id===l.id);if(!x)return;const S=y.current.newTexts[x.hunkIndex],I={...l,newLines:S!=null?U(S):l.newLines},v=P();if(j.current=!1,u.current=!1,v===t.currentMd){t.onProposedChange(null);return}const T=ze(t.currentMd,I);t.onCurrentChange(T),v===T?t.onProposedChange(null):t.onProposedChange(v)}function K(l){const x=E.current.find(v=>v.kind==="hunk"&&v.hunk.id===l.id);if(!x)return;const S={sameTexts:y.current.sameTexts.slice(),newTexts:y.current.newTexts.slice()};S.newTexts[x.hunkIndex]=z(l.oldLines);const I=me(E.current,S);j.current=!1,u.current=!1,I===t.currentMd?t.onProposedChange(null):t.onProposedChange(I)}function A(){const l=P();j.current=!1,u.current=!1,t.onCurrentChange(l),t.onProposedChange(null)}function J(){j.current=!1,u.current=!1,t.onProposedChange(null)}function C(l){m.length!==0&&r(x=>{const S=(x+l+m.length)%m.length,I=document.getElementById(`mdocs-ai-hunk-${S}`);return I==null||I.scrollIntoView({block:"center",behavior:"smooth"}),S})}function W(l,x){j.current=!0,N(S=>{const I=S.sameTexts.slice();return I[l]=x,{...S,sameTexts:I}})}function V(l,x){j.current=!0,N(S=>{const I=S.newTexts.slice();return I[l]=x,{...S,newTexts:I}})}const _=m[b]??null;let G=0;return e.jsxs("div",{className:"mdocs-ai-write-md-pane",children:[e.jsxs("div",{className:"mdocs-ai-write-diff-toolbar",children:[e.jsx("span",{className:"mdocs-ai-write-diff-count",children:s?"接收中·编辑我的稿":m.length===0?t.proposedMd?"与提案一致(可编辑)":"Markdown 源码(可编辑)":`${m.length} 处变更(可改提案)`}),!s&&m.length>0?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"mdocs-ai-write-diff-accept-all",onClick:A,children:"全部接受"}),e.jsx("button",{type:"button",className:"mdocs-ai-write-diff-reject-all",onClick:J,children:"全部拒绝"})]}):null]}),F&&k.length>0?e.jsxs("div",{className:"mdocs-ai-write-inline",role:"document",children:[k.map(l=>{if(l.kind==="same"){const T=G++,D=p.sameTexts[T]??z(l.lines);return e.jsx("div",{className:"mdocs-ai-write-inline-same",children:e.jsx(he,{className:"ctx",value:D,"aria-label":"提案相同行",onChange:Z=>W(T,Z),onBlurFlush:()=>$()})},l.key)}const x=l.hunk,S=Ue(x),I=l.hunkIndex===b,v=p.newTexts[l.hunkIndex]??z(x.newLines);return e.jsxs("div",{id:`mdocs-ai-hunk-${l.hunkIndex}`,className:`mdocs-ai-write-inline-hunk mdocs-ai-write-inline-hunk-${S}`+(I?" is-active":""),onMouseEnter:()=>g(l.hunkIndex),onMouseLeave:()=>g(null),onClick:()=>r(l.hunkIndex),children:[e.jsxs("div",{className:"mdocs-ai-write-hunk-hover",hidden:f!==l.hunkIndex,children:[e.jsx("button",{type:"button",className:"mdocs-ai-write-hunk-reject",onClick:T=>{T.stopPropagation(),K(x)},children:"拒绝"}),e.jsx("button",{type:"button",className:"mdocs-ai-write-hunk-accept",onClick:T=>{T.stopPropagation(),H(x)},children:"接受"})]}),e.jsx("pre",{className:"mdocs-ai-write-hunk-pre",children:x.oldLines.map((T,D)=>e.jsxs("div",{className:"mdocs-ai-write-line del mdocs-ai-write-line-readonly",children:[e.jsx("span",{className:"mdocs-ai-write-rail","aria-hidden":!0}),e.jsx("span",{className:"mdocs-ai-write-code",children:T||" "})]},`o${D}`))}),x.newLines.length>0||v!==""||S!=="del"?e.jsx(he,{className:"add",value:v,"aria-label":"提案新增行",onChange:T=>V(l.hunkIndex,T),onBlurFlush:()=>$()}):null]},l.key)}),_?e.jsxs("div",{className:"mdocs-ai-write-float-nav",role:"toolbar","aria-label":"变更导航",children:[e.jsx("button",{type:"button","aria-label":"上一段",onClick:()=>C(-1),children:"↑"}),e.jsxs("span",{children:[b+1," / ",m.length]}),e.jsx("button",{type:"button","aria-label":"下一段",onClick:()=>C(1),children:"↓"}),e.jsx("button",{type:"button",className:"mdocs-ai-write-hunk-reject",onClick:()=>K(_),children:"拒绝"}),e.jsx("button",{type:"button",className:"mdocs-ai-write-hunk-accept",onClick:()=>H(_),children:"接受"})]}):null]}):e.jsx("textarea",{className:"mdocs-ai-write-editor",value:t.currentMd,onChange:l=>t.onCurrentChange(l.target.value),spellCheck:!1,placeholder:`# 标题
|
|
6
|
+
|
|
7
|
+
在此编辑 Markdown 源码…`})]})}let fe=0;function ge(t){return fe+=1,`${t}-${Date.now()}-${fe}`}function Ye(t,s){const i=t.slice(),r=i[i.length-1];return(r==null?void 0:r.type)==="text"?i[i.length-1]={type:"text",text:r.text+s}:i.push({type:"text",text:s}),i}function Xe(t,s){const i=t.slice(),r=i[i.length-1];return(r==null?void 0:r.type)==="thinking"?i[i.length-1]={type:"thinking",text:r.text+s}:i.push({type:"thinking",text:s}),i}function Q(t,s){const i=s.trim();return i?[...t,{type:"tool",text:i}]:t}function Qe(t){return t.some(s=>s.type==="text"||s.type==="thinking"?s.text.length>0:!0)}function Ze(t){const s=new Date(t);if(Number.isNaN(s.getTime()))return"";const i=new Date;return s.getFullYear()===i.getFullYear()&&s.getMonth()===i.getMonth()&&s.getDate()===i.getDate()?s.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}):s.toLocaleDateString(void 0,{month:"2-digit",day:"2-digit"})}function xe(t,s){return s.map((i,r)=>{const f=`h-${t}-${r}-${i.role}`;if(i.role==="user"){const g=i.skillNames&&i.skillNames.length>0?i.skillNames:i.skillIds&&i.skillIds.length>0?i.skillIds:void 0;return{id:f,role:"user",content:i.content,skillNames:g}}return{id:f,role:"assistant",blocks:i.content?[{type:"text",text:i.content}]:[]}})}function rt(t){const[s,i]=c.useState(t.initialMarkdown),[r,f]=c.useState(null),[g]=c.useState(t.initialMarkdown),[p,N]=c.useState(t.displayName||"未命名"),[k,h]=c.useState([]),[j,u]=c.useState(null),[E,y]=c.useState([]),[R,F]=c.useState(!1),[m,b]=c.useState(!1),[P,$]=c.useState(""),[H,K]=c.useState([]),[A,J]=c.useState(!1),[C,W]=c.useState(null),[V,_]=c.useState(null),[G,l]=c.useState(!1),[x,S]=c.useState(null),I=c.useRef(null),v=c.useRef(null),T=c.useRef(null),D=c.useRef(!0),[Z,ee]=c.useState(!1),se=120;function ie(n){return n.scrollHeight-n.scrollTop-n.clientHeight}function Y(){const n=T.current;n&&(n.scrollTop=n.scrollHeight,ee(!1))}function ke(){D.current&&Y()}function pe(){const n=T.current;if(!n)return;const o=ie(n);D.current=o<=48,ee(o>se)}function ye(){D.current=!0,Y()}c.useLayoutEffect(()=>{if(!t.open)return;ke();const n=T.current;n&&ee(ie(n)>se)},[k,t.open]);async function X(){F(!0);try{const n=await Le("coding",t.documentId);y(n.sessions),j||u(n.lastOpenedSessionId)}catch{}finally{F(!1)}}async function ae(){try{const n=await de();W(n)}catch{W({enabled:!1,skillsReady:!1,model:null})}}if(c.useEffect(()=>{var o;if(!t.open){b(!1),(o=v.current)==null||o.abort();return}i(t.initialMarkdown),f(null),N(t.displayName||"未命名"),$(""),_(null),b(!1);let n=!1;return(async()=>{try{const w=await de();n||W(w)}catch{n||W({enabled:!1,skillsReady:!1,model:null})}try{const w=await Me("coding",t.documentId);if(n)return;u(w.sessionId),h(xe(w.sessionId,w.messages))}catch{n||(u(null),h([]))}X()})(),()=>{n=!0}},[t.open,t.initialMarkdown,t.displayName,t.documentId]),c.useEffect(()=>()=>{var n;return(n=v.current)==null?void 0:n.abort()},[]),c.useEffect(()=>{t.open&&m&&X()},[m,t.open,t.documentId]),!t.open)return null;const le=(C==null?void 0:C.reason)==="missing_api_key",we=r!=null&&r!==s?ne(s,r):[];async function je(){var n;if(!A){(n=v.current)==null||n.abort(),_(null),b(!1),J(!1);try{const o=await $e("coding",t.documentId);u(o.sessionId),h([]),$(""),X()}catch(o){_(o instanceof Error?o.message:String(o))}}}async function Ne(n){var o;if(!A){if(n===j){b(!1);return}(o=v.current)==null||o.abort(),_(null);try{const w=await Ee(n,"coding",t.documentId);u(w.sessionId),h(xe(w.sessionId,w.messages)),$(""),b(!1)}catch(w){_(w instanceof Error?w.message:String(w))}}}async function re(){var O;const n=P.trim();if(!n||A)return;if(!(C!=null&&C.enabled)){_("请先配置 API Key");return}(O=v.current)==null||O.abort();const o=new AbortController;v.current=o;const w=ge("u"),M=ge("a");D.current=!0,h(q=>[...q,{id:w,role:"user",content:n,skillNames:H.length>0?[...H]:void 0},{id:M,role:"assistant",blocks:[]}]),$(""),J(!0),_(null),requestAnimationFrame(()=>{Y(),requestAnimationFrame(Y)});const L=q=>{h(a=>a.map(d=>d.id===M&&d.role==="assistant"?{...d,blocks:q(d.blocks)}:d))};try{let q=!1;await _e(n,{mode:"coding",skillNames:H.length>0?H:void 0,documentId:t.documentId,workingMarkdown:s,baseMarkdown:g,signal:o.signal,onEvent:a=>{a.type==="text_delta"?L(d=>Ye(d,a.text)):a.type==="thinking_delta"?L(d=>Xe(d,a.text)):a.type==="markdown_set"?f(a.markdown):a.type==="tool_notice"?L(d=>Q(d,a.text)):a.type==="document_table"?L(d=>Q(d,a.title)):a.type==="document_card"?L(d=>Q(d,`读取文档「${a.title}」`)):a.type==="sources"?a.items.length>0&&L(d=>Q(d,`已阅读 ${a.items.length} 个手册页面`)):a.type==="skill_form_card"?L(d=>[...d,{type:"skill_form_card",requestId:a.requestId,mode:a.mode,title:a.title,currentName:a.currentName,initialName:a.initialName,initialDescription:a.initialDescription,initialBody:a.initialBody,expiresAt:a.expiresAt,status:"open"}]):a.type==="choice_card"?(D.current=!0,L(d=>[...d,{type:"choice_card",requestId:a.requestId,title:a.title,options:a.options,expiresAt:a.expiresAt,status:"open"}])):a.type==="choice_expired"?L(d=>d.map(B=>B.type==="choice_card"&&B.requestId===a.requestId&&B.status==="open"?{...B,status:"expired"}:B)):a.type==="skill_form_expired"?L(d=>d.map(B=>B.type==="skill_form_card"&&B.requestId===a.requestId&&B.status==="open"?{...B,status:"expired"}:B)):a.type==="error"&&(q=!0,_(a.message))}}),!o.signal.aborted&&!q&&K([]),X()}catch(q){o.signal.aborted||_(q instanceof Error?q.message:String(q))}finally{v.current===o&&(v.current=null),J(!1)}}function oe(n){return new Promise(o=>{I.current=o,S({message:n.message,confirmLabel:n.confirmLabel??"确定",cancelLabel:n.cancelLabel??"返回",danger:n.danger??!1})})}function ce(n){const o=I.current;I.current=null,S(null),o==null||o(n)}async function be(){if(!await oe({message:"是否回写",confirmLabel:"确认",cancelLabel:"返回"}))return;let o=s;we.length>0&&(o=r??s,i(o),f(null)),l(!0);const w=!t.documentId;try{const M=await t.onComplete({markdown:o,documentId:t.documentId,displayName:p.trim()||"未命名"}),L=M&&typeof M=="object"&&typeof M.documentId=="string"?M.documentId.trim():"";if(w&&L&&j)try{await Re(j,L)}catch{}t.onClose()}catch(M){if(M!=null&&M.silent||M instanceof Error&&M.message==="cancelled")return;_(M instanceof Error?M.message:String(M))}finally{l(!1)}}async function Ce(){var n;(s!==g||r!=null)&&!await oe({message:"取消帮写?未写回的修改将丢失。",confirmLabel:"放弃修改",danger:!0})||((n=v.current)==null||n.abort(),t.onClose())}return e.jsxs("div",{className:"mdocs-ai-write-overlay",role:"dialog","aria-modal":"true","aria-label":"帮写",children:[e.jsxs("header",{className:"mdocs-ai-write-header",children:[e.jsxs("div",{className:"mdocs-ai-write-header-left",children:[e.jsx("img",{src:Ae,alt:"",className:"mdocs-ai-write-title-logo"}),e.jsx("strong",{children:"帮写"}),e.jsx("input",{className:"mdocs-ai-write-title",value:p,onChange:n=>N(n.target.value),"aria-label":"文档标题"})]}),e.jsxs("div",{className:"mdocs-ai-write-header-actions",children:[e.jsx("button",{type:"button",onClick:()=>void Ce(),disabled:G||x!=null,children:"取消"}),e.jsx("button",{type:"button",className:"mdocs-ai-write-primary",onClick:()=>void be(),disabled:G||x!=null,children:G?"写回中…":"完成并写回"})]})]}),e.jsxs("div",{className:"mdocs-ai-write-body",children:[e.jsxs("section",{className:"mdocs-ai-write-chat",children:[e.jsxs("div",{className:"mdocs-ai-write-chat-toolbar",children:[e.jsx("span",{className:"mdocs-ai-write-chat-toolbar-label",children:"对话"}),e.jsxs("div",{className:"mdocs-ai-write-chat-toolbar-actions",children:[e.jsx("button",{type:"button",className:"mdocs-agent-panel-icon-btn",title:"新会话","aria-label":"新会话",disabled:A,onClick:()=>void je(),children:e.jsx(Fe,{size:16,strokeWidth:1.8})}),e.jsx("button",{type:"button",className:"mdocs-agent-panel-icon-btn"+(m?" active":""),title:"历史会话","aria-label":"历史会话",onClick:()=>b(n=>!n),children:e.jsx(qe,{size:16,strokeWidth:1.8})})]})]}),m?e.jsxs("div",{className:"mdocs-ai-write-history mdocs-agent-panel-history",children:[e.jsxs("div",{className:"mdocs-agent-panel-history-head",children:[e.jsx("span",{children:"历史会话"}),e.jsx("button",{type:"button",className:"mdocs-agent-panel-history-back",onClick:()=>b(!1),children:"返回对话"})]}),R?e.jsx("p",{className:"mdocs-agent-panel-history-hint",children:"加载中…"}):E.length===0?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"mdocs-agent-panel-history-empty",children:"暂无历史会话"}),e.jsx("p",{className:"mdocs-agent-panel-history-hint",children:"发一条消息后会出现在这里"})]}):e.jsx("ul",{className:"mdocs-agent-panel-history-list",children:E.map(n=>e.jsx("li",{children:e.jsxs("button",{type:"button",className:"mdocs-agent-panel-history-item"+(n.id===j?" active":""),disabled:A,onClick:()=>void Ne(n.id),children:[e.jsx("span",{className:"mdocs-agent-panel-history-title",children:n.title}),e.jsx("span",{className:"mdocs-agent-panel-history-time",children:Ze(n.updatedAt)})]})},n.id))})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mdocs-ai-write-chat-scroll-wrap",children:[e.jsx("div",{className:"mdocs-ai-write-chat-messages",ref:T,onScroll:pe,children:k.length===0?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"mdocs-ai-write-hint",children:"描述你想写或改的内容。助手可读取右侧当前稿与进场快照,再更新提案;请按段接受或拒绝后完成写回。"}),le?e.jsx(ue,{onConfigured:ae}):null]}):k.map(n=>e.jsx("div",{className:"mdocs-ai-write-msg"+(n.role==="user"?" mdocs-ai-write-msg-user":""),children:n.role==="user"?e.jsxs(e.Fragment,{children:[n.skillNames&&n.skillNames.length>0?e.jsxs("div",{className:"mdocs-agent-msg-skills",children:["Skill ×",n.skillNames.length]}):null,n.content]}):Qe(n.blocks)?e.jsx("div",{className:"mdocs-ai-write-timeline",children:n.blocks.map((o,w)=>o.type==="thinking"?o.text?e.jsxs("details",{className:"mdocs-ai-write-thinking",open:A,children:[e.jsx("summary",{children:"思考中"}),e.jsx("pre",{className:"mdocs-ai-write-thinking-body",children:o.text})]},`${n.id}-think-${w}`):null:o.type==="tool"?e.jsx("p",{className:"mdocs-agent-panel-tool-notice",children:o.text},`${n.id}-tool-${w}`):o.type==="skill_form_card"?e.jsx(Pe,{block:o,onResolved:(M,L,O)=>{h(q=>q.map(a=>a.id!==n.id||a.role!=="assistant"?a:{...a,blocks:a.blocks.map(d=>d.type==="skill_form_card"&&d.requestId===M?{...d,status:L,submittedName:L==="submitted"?O:d.submittedName}:d)}))}},`${n.id}-sf-${w}`):o.type==="choice_card"?e.jsx(Oe,{block:o,onResolved:(M,L,O)=>{h(q=>q.map(a=>a.id!==n.id||a.role!=="assistant"?a:{...a,blocks:a.blocks.map(d=>d.type==="choice_card"&&d.requestId===M?{...d,status:O,selected:O==="selected"?L:d.selected}:d)}))}},`${n.id}-ch-${w}`):o.type==="text"&&o.text?e.jsx("div",{className:"mdocs-agent-panel-md",children:e.jsx(He,{remarkPlugins:[Ke],children:o.text})},`${n.id}-text-${w}`):null)}):A?e.jsxs("span",{className:"mdocs-agent-panel-thinking","aria-label":"思考中",children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]}):null},n.id))}),Z?e.jsxs("button",{type:"button",className:"mdocs-chat-jump-bottom",onClick:ye,title:"回到底部","aria-label":"回到底部",children:[e.jsx(De,{size:14,strokeWidth:2,"aria-hidden":!0}),e.jsx("span",{children:"置底"})]}):null]}),V?e.jsx("p",{className:"mdocs-ai-write-error",children:V}):null,le&&k.length>0?e.jsx(ue,{onConfigured:ae}):null,e.jsxs("div",{className:"mdocs-ai-write-input-row",children:[e.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:6},children:[e.jsx(Be,{selectedNames:H,onChange:K,disabled:A||!(C!=null&&C.enabled)}),e.jsx("textarea",{rows:2,value:P,disabled:A||!(C!=null&&C.enabled),placeholder:C!=null&&C.enabled?"说说要写什么…":"请先配置 API Key",onChange:n=>$(n.target.value),onKeyDown:n=>{n.key==="Enter"&&!n.shiftKey&&(n.preventDefault(),re())}})]}),e.jsx("button",{type:"button",className:A?"mdocs-ai-write-stop":void 0,disabled:A?!1:!(C!=null&&C.enabled),onClick:()=>{var n;if(A){(n=v.current)==null||n.abort();return}re()},children:A?"停止":"发送"})]})]})]}),e.jsx(Ve,{currentMd:s,proposedMd:r,sending:A,onCurrentChange:i,onProposedChange:f})]}),x?e.jsx(Te,{message:x.message,confirmLabel:x.confirmLabel,cancelLabel:x.cancelLabel,danger:x.danger,onConfirm:()=>ce(!0),onCancel:()=>ce(!1)}):null]})}export{rt as AiWriteWorkbench};
|