@fgbg/mdocs 1.4.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/README.md +1 -1
  2. package/agent-skills/changelog/SKILL.md +25 -0
  3. package/dist/server/agent/Agent/run-manager.js +1 -0
  4. package/dist/server/agent/Agent/run-manager.js.map +1 -1
  5. package/dist/server/agent/Agent/run-pi-agent.js +22 -7
  6. package/dist/server/agent/Agent/run-pi-agent.js.map +1 -1
  7. package/dist/server/agent/Agent/run.js +29 -4
  8. package/dist/server/agent/Agent/run.js.map +1 -1
  9. package/dist/server/agent/Agent/session-manager.js +45 -5
  10. package/dist/server/agent/Agent/session-manager.js.map +1 -1
  11. package/dist/server/agent/Agent/system-prompt.js +5 -3
  12. package/dist/server/agent/Agent/system-prompt.js.map +1 -1
  13. package/dist/server/agent/Agent/tools-documents.js +13 -4
  14. package/dist/server/agent/Agent/tools-documents.js.map +1 -1
  15. package/dist/server/agent/Agent/tools-registry.test.js +1 -1
  16. package/dist/server/agent/Agent/tools-registry.test.js.map +1 -1
  17. package/dist/server/agent/Agent/tools-template.js +2 -1
  18. package/dist/server/agent/Agent/tools-template.js.map +1 -1
  19. package/dist/server/agent/Config/config.test.js +21 -0
  20. package/dist/server/agent/Config/config.test.js.map +1 -1
  21. package/dist/server/agent/attachments/capabilities.js +52 -0
  22. package/dist/server/agent/attachments/capabilities.js.map +1 -0
  23. package/dist/server/agent/attachments/capabilities.test.js +33 -0
  24. package/dist/server/agent/attachments/capabilities.test.js.map +1 -0
  25. package/dist/server/agent/attachments/index.js +6 -0
  26. package/dist/server/agent/attachments/index.js.map +1 -0
  27. package/dist/server/agent/attachments/inject.js +67 -0
  28. package/dist/server/agent/attachments/inject.js.map +1 -0
  29. package/dist/server/agent/attachments/inject.test.js +41 -0
  30. package/dist/server/agent/attachments/inject.test.js.map +1 -0
  31. package/dist/server/agent/attachments/object-fs.js +44 -0
  32. package/dist/server/agent/attachments/object-fs.js.map +1 -0
  33. package/dist/server/agent/attachments/parse/image.js +22 -0
  34. package/dist/server/agent/attachments/parse/image.js.map +1 -0
  35. package/dist/server/agent/attachments/parse/pdf.js +19 -0
  36. package/dist/server/agent/attachments/parse/pdf.js.map +1 -0
  37. package/dist/server/agent/attachments/parse/plain-text.js +18 -0
  38. package/dist/server/agent/attachments/parse/plain-text.js.map +1 -0
  39. package/dist/server/agent/attachments/prepare-turn.js +32 -0
  40. package/dist/server/agent/attachments/prepare-turn.js.map +1 -0
  41. package/dist/server/agent/attachments/store.js +120 -0
  42. package/dist/server/agent/attachments/store.js.map +1 -0
  43. package/dist/server/agent/attachments/tools-read-attachment.js +95 -0
  44. package/dist/server/agent/attachments/tools-read-attachment.js.map +1 -0
  45. package/dist/server/agent/attachments/types.js +6 -0
  46. package/dist/server/agent/attachments/types.js.map +1 -0
  47. package/dist/server/agent/attachments/upload-filename.test.js +39 -0
  48. package/dist/server/agent/attachments/upload-filename.test.js.map +1 -0
  49. package/dist/server/agent/attachments/upload.js +11 -0
  50. package/dist/server/agent/attachments/upload.js.map +1 -0
  51. package/dist/server/app.js +9 -1
  52. package/dist/server/app.js.map +1 -1
  53. package/dist/server/config/index.js +1 -0
  54. package/dist/server/config/index.js.map +1 -1
  55. package/dist/server/db/repositories/agent-attachment.repo.js +51 -0
  56. package/dist/server/db/repositories/agent-attachment.repo.js.map +1 -0
  57. package/dist/server/db/repositories/document.repo.js +9 -9
  58. package/dist/server/db/repositories/document.repo.js.map +1 -1
  59. package/dist/server/db/schema.js +64 -3
  60. package/dist/server/db/schema.js.map +1 -1
  61. package/dist/server/documents/document.service.js +2 -3
  62. package/dist/server/documents/document.service.js.map +1 -1
  63. package/dist/server/documents/graph.integration.test.js +1 -0
  64. package/dist/server/documents/graph.integration.test.js.map +1 -1
  65. package/dist/server/documents/tree-and-folders.test.js +1 -0
  66. package/dist/server/documents/tree-and-folders.test.js.map +1 -1
  67. package/dist/server/domains/change-domain-permission.test.js +12 -0
  68. package/dist/server/domains/change-domain-permission.test.js.map +1 -1
  69. package/dist/server/routes/agent.routes.js +85 -2
  70. package/dist/server/routes/agent.routes.js.map +1 -1
  71. package/dist/server/routes/visitors.routes.js +2 -0
  72. package/dist/server/routes/visitors.routes.js.map +1 -1
  73. package/dist/server/search/document-index-manager.js +13 -4
  74. package/dist/server/search/document-index-manager.js.map +1 -1
  75. package/dist/server/search/document-index-manager.test.js +14 -3
  76. package/dist/server/search/document-index-manager.test.js.map +1 -1
  77. package/dist/server/search/embedding-store.js +9 -0
  78. package/dist/server/search/embedding-store.js.map +1 -1
  79. package/dist/server/search/embedding-store.test.js +27 -3
  80. package/dist/server/search/embedding-store.test.js.map +1 -1
  81. package/dist/shared/file-type-policy.js +1 -1
  82. package/dist/shared/file-type-policy.js.map +1 -1
  83. package/dist/shared/file-type-policy.test.js +2 -1
  84. package/dist/shared/file-type-policy.test.js.map +1 -1
  85. package/dist/web/assets/AgentChatPanel-Bhv57WUW.js +47 -0
  86. package/dist/web/assets/{AiWriteWorkbench-DzJAmRHY.js → AiWriteWorkbench-DOse9-oQ.js} +4 -4
  87. package/dist/web/assets/{DiagramEditor-NtNY3sZL-KWdKFFEL.js → DiagramEditor-NtNY3sZL-D7sapmVz.js} +1 -1
  88. package/dist/web/assets/DocChrome-Dj5rSAvl.js +16 -0
  89. package/dist/web/assets/{DocumentEditor-CrU6HKmU.js → DocumentEditor-BTxsH3UT.js} +1 -1
  90. package/dist/web/assets/{HtmlEditor-BBcreXJD.js → HtmlEditor-OEfTnjjz.js} +1 -1
  91. package/dist/web/assets/MergeView-CGz2CWUZ.js +10 -0
  92. package/dist/web/assets/{PlaygroundPage-Bo9rM8MY.js → PlaygroundPage-BsekHU2o.js} +1 -1
  93. package/dist/web/assets/{SettingsPage-D09P0j48.js → SettingsPage-cVFmyADe.js} +5 -5
  94. package/dist/web/assets/SheetEditor-1LMR2jA1.js +26 -0
  95. package/dist/web/assets/SheetEditor-DJOs2u-u.css +1 -0
  96. package/dist/web/assets/{Toolbar-C1HmC2Qc.js → Toolbar-CPIpQgP1.js} +1 -1
  97. package/dist/web/assets/VisitorPickerModal-aRuuDomz.js +6 -0
  98. package/dist/web/assets/{check-BAYRiedE.js → check-NyVbPIj8.js} +1 -1
  99. package/dist/web/assets/{copy-J9XXv57X.js → copy-C_H9wgwB.js} +1 -1
  100. package/dist/web/assets/file-type-policy-5jFXMeIz.js +1 -0
  101. package/dist/web/assets/index-CervldVc.css +1 -0
  102. package/dist/web/assets/index-Kp5r4mc7.js +299 -0
  103. package/dist/web/assets/{italic-BfR6fH81.js → italic-BqrahN0G.js} +1 -1
  104. package/dist/web/assets/{meta2dEngine-BD2XbzaV-MY1Hyyeh.js → meta2dEngine-BD2XbzaV-CUKxedXW.js} +1 -1
  105. package/dist/web/assets/{plus-DvWl4lHk.js → plus-D8tCpRfA.js} +1 -1
  106. package/dist/web/assets/{react-C7aGt3wN.js → react-DsdrF7vh.js} +3 -3
  107. package/dist/web/index.html +2 -2
  108. package/package.json +1 -1
  109. package/dist/web/assets/AgentChatPanel-_IV-LAS4.js +0 -42
  110. package/dist/web/assets/DocChrome-CtT7xOl6.js +0 -16
  111. package/dist/web/assets/MergeView-LV_hny8a.js +0 -10
  112. package/dist/web/assets/SheetEditor-BPTMQ2s5.css +0 -1
  113. package/dist/web/assets/SheetEditor-Dyk-jpRL.js +0 -26
  114. package/dist/web/assets/VisitorPickerModal-Cx03Papl.js +0 -6
  115. package/dist/web/assets/file-type-policy-aRrzC4LZ.js +0 -1
  116. package/dist/web/assets/index-Btfv_3-Q.js +0 -299
  117. package/dist/web/assets/index-C1Mc0Svw.css +0 -1
@@ -0,0 +1,120 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { getConfig } from "../../config/index.js";
3
+ import { getDb } from "../../db/connection.js";
4
+ import { deleteExpiredStagingAttachments, findAgentAttachmentById, findAgentAttachmentsByIds, insertAgentAttachment, persistAgentAttachments, } from "../../db/repositories/agent-attachment.repo.js";
5
+ import { assertUploadAllowed } from "./capabilities.js";
6
+ import { putObject, readObject } from "./object-fs.js";
7
+ import { STAGING_TTL_MS, } from "./types.js";
8
+ function mimeGuess(name, fallback) {
9
+ const lower = name.toLowerCase();
10
+ if (lower.endsWith(".png"))
11
+ return "image/png";
12
+ if (lower.endsWith(".jpg") || lower.endsWith(".jpeg"))
13
+ return "image/jpeg";
14
+ if (lower.endsWith(".webp"))
15
+ return "image/webp";
16
+ if (lower.endsWith(".gif"))
17
+ return "image/gif";
18
+ if (lower.endsWith(".pdf"))
19
+ return "application/pdf";
20
+ if (lower.endsWith(".md"))
21
+ return "text/markdown";
22
+ if (lower.endsWith(".csv"))
23
+ return "text/csv";
24
+ if (lower.endsWith(".json"))
25
+ return "application/json";
26
+ if (lower.endsWith(".txt"))
27
+ return "text/plain";
28
+ return fallback?.trim() || "application/octet-stream";
29
+ }
30
+ function rowToMeta(row) {
31
+ return {
32
+ id: row.attachment_id,
33
+ sessionId: row.session_id,
34
+ ownerVisitorId: row.owner_visitor_id,
35
+ sha256: row.sha256,
36
+ name: row.name,
37
+ mime: row.mime,
38
+ bytes: row.byte_size,
39
+ status: row.status,
40
+ createdAt: row.created_at,
41
+ persistedAt: row.persisted_at,
42
+ };
43
+ }
44
+ let cached = null;
45
+ export function getAttachmentStore() {
46
+ if (cached)
47
+ return cached;
48
+ const cfg = getConfig();
49
+ const objectsDir = `${cfg.agentAttachmentsDir}/objects`;
50
+ cached = createAttachmentStore({ objectsDir });
51
+ return cached;
52
+ }
53
+ export function createAttachmentStore(deps) {
54
+ const db = () => deps.db ?? getDb();
55
+ const store = {
56
+ async saveStaging(input) {
57
+ const name = input.name.trim() || "file";
58
+ assertUploadAllowed(name, input.data.byteLength);
59
+ // 懒清理:上传时顺带扫过期 staging
60
+ void store.purgeExpiredStaging().catch(() => undefined);
61
+ const sha256 = await putObject(deps.objectsDir, input.data);
62
+ const now = new Date().toISOString();
63
+ const id = randomUUID();
64
+ const row = {
65
+ attachment_id: id,
66
+ owner_visitor_id: input.visitorId,
67
+ session_id: input.sessionId,
68
+ sha256,
69
+ name,
70
+ mime: mimeGuess(name, input.mime),
71
+ byte_size: input.data.byteLength,
72
+ status: "staging",
73
+ created_at: now,
74
+ persisted_at: null,
75
+ };
76
+ insertAgentAttachment(db(), row);
77
+ return rowToMeta(row);
78
+ },
79
+ async persist(input) {
80
+ if (input.ids.length === 0)
81
+ return [];
82
+ const found = findAgentAttachmentsByIds(db(), input.visitorId, input.sessionId, input.ids);
83
+ if (found.length !== input.ids.length) {
84
+ throw new Error("attachment_not_found");
85
+ }
86
+ for (const row of found) {
87
+ if (row.status !== "staging" && row.status !== "persisted") {
88
+ throw new Error("invalid_attachment_status");
89
+ }
90
+ }
91
+ const now = new Date().toISOString();
92
+ const stagingIds = found
93
+ .filter((r) => r.status === "staging")
94
+ .map((r) => r.attachment_id);
95
+ if (stagingIds.length > 0) {
96
+ persistAgentAttachments(db(), input.visitorId, input.sessionId, stagingIds, now);
97
+ }
98
+ const again = findAgentAttachmentsByIds(db(), input.visitorId, input.sessionId, input.ids);
99
+ if (again.some((r) => r.status !== "persisted")) {
100
+ throw new Error("persist_failed");
101
+ }
102
+ return again.map(rowToMeta);
103
+ },
104
+ async read(input) {
105
+ const row = findAgentAttachmentById(db(), input.id);
106
+ if (!row || row.owner_visitor_id !== input.visitorId) {
107
+ throw new Error("attachment_not_found");
108
+ }
109
+ const data = await readObject(deps.objectsDir, row.sha256);
110
+ return { meta: rowToMeta(row), data };
111
+ },
112
+ async purgeExpiredStaging(ttlMs = STAGING_TTL_MS) {
113
+ const cutoff = new Date(Date.now() - ttlMs).toISOString();
114
+ const ids = deleteExpiredStagingAttachments(db(), cutoff);
115
+ return ids.length;
116
+ },
117
+ };
118
+ return store;
119
+ }
120
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/server/agent/attachments/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import { Type } from "@earendil-works/pi-ai";
2
+ import { asToolResult } from "../Agent/tool-deps.js";
3
+ import { resolveParseStrategy } from "./capabilities.js";
4
+ import { getAttachmentStore } from "./store.js";
5
+ import { DEFAULT_PARSE_LIMITS } from "./types.js";
6
+ /** 按需读取已 persist 的附件;大文本可 offset/limit */
7
+ export function readAttachmentTool(deps) {
8
+ return {
9
+ name: "read_attachment",
10
+ label: "读取聊天附件",
11
+ description: "读取用户在本会话上传的附件内容。大文件/PDF 未内嵌时应调用本工具。可传 offset+limit 分段读文本。",
12
+ parameters: Type.Object({
13
+ assetId: Type.String({ description: "附件 id(消息里 [附件] 提示中的 id)" }),
14
+ offset: Type.Optional(Type.Integer({ minimum: 0, description: "文本起始字符偏移,默认 0" })),
15
+ limit: Type.Optional(Type.Integer({
16
+ minimum: 1,
17
+ maximum: 50_000,
18
+ description: "最多返回字符数,默认 8000",
19
+ })),
20
+ }),
21
+ execute: async (_id, raw) => {
22
+ const params = raw;
23
+ const assetId = typeof params.assetId === "string" ? params.assetId.trim() : "";
24
+ if (!assetId) {
25
+ return asToolResult({ ok: false, error: "assetId_required" });
26
+ }
27
+ const offset = typeof params.offset === "number" ? params.offset : 0;
28
+ const limit = typeof params.limit === "number" ? params.limit : 8000;
29
+ const store = getAttachmentStore();
30
+ try {
31
+ const { meta, data } = await store.read({
32
+ visitorId: deps.visitorId,
33
+ id: assetId,
34
+ });
35
+ const parse = resolveParseStrategy(meta.name);
36
+ const result = await parse({
37
+ meta,
38
+ data,
39
+ limits: {
40
+ ...DEFAULT_PARSE_LIMITS,
41
+ // tool 路径允许更大文本,再由 offset/limit 切片
42
+ maxEmbedTextChars: 5_000_000,
43
+ maxImageBytes: 20 * 1024 * 1024,
44
+ },
45
+ });
46
+ if (result.kind === "image") {
47
+ return asToolResult({
48
+ ok: true,
49
+ kind: "image",
50
+ name: meta.name,
51
+ mime: result.mime,
52
+ bytes: result.data.byteLength,
53
+ note: "图片已可由多模态直接查看;如需描述请结合用户问题回答,无需再转文字。",
54
+ });
55
+ }
56
+ if (result.kind === "text") {
57
+ const slice = result.text.slice(offset, offset + limit);
58
+ return asToolResult({
59
+ ok: true,
60
+ kind: "text",
61
+ name: meta.name,
62
+ offset,
63
+ length: slice.length,
64
+ total: result.text.length,
65
+ truncated: offset + limit < result.text.length,
66
+ text: slice,
67
+ });
68
+ }
69
+ if (result.kind === "deferred") {
70
+ // PDF v1:至少返回基本信息;若将来抽文本,可在此扩展
71
+ return asToolResult({
72
+ ok: true,
73
+ kind: "deferred",
74
+ name: meta.name,
75
+ mime: meta.mime,
76
+ bytes: meta.bytes,
77
+ reason: result.reason,
78
+ hint: result.hint,
79
+ note: "当前无法抽出可嵌入正文;请根据文件名与用户说明继续,或请用户粘贴关键片段。",
80
+ });
81
+ }
82
+ return asToolResult({
83
+ ok: false,
84
+ error: "unsupported",
85
+ reason: result.reason,
86
+ });
87
+ }
88
+ catch (err) {
89
+ const msg = err instanceof Error ? err.message : String(err);
90
+ return asToolResult({ ok: false, error: msg });
91
+ }
92
+ },
93
+ };
94
+ }
95
+ //# sourceMappingURL=tools-read-attachment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-read-attachment.js","sourceRoot":"","sources":["../../../../src/server/agent/attachments/tools-read-attachment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export const DEFAULT_PARSE_LIMITS = {
2
+ maxImageBytes: 4 * 1024 * 1024,
3
+ maxEmbedTextChars: 12_000,
4
+ };
5
+ export const STAGING_TTL_MS = 24 * 60 * 60 * 1000;
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/server/agent/attachments/types.ts"],"names":[],"mappings":"AAsCA,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,aAAa,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IAC9B,iBAAiB,EAAE,MAAM;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC"}
@@ -0,0 +1,39 @@
1
+ import http from "node:http";
2
+ import express from "express";
3
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
4
+ import { agentAttachmentUpload } from "./upload.js";
5
+ describe("agentAttachmentUpload filename", () => {
6
+ const app = express();
7
+ app.post("/up", agentAttachmentUpload.single("file"), (req, res) => {
8
+ res.json({ name: req.file?.originalname ?? null });
9
+ });
10
+ const server = http.createServer(app);
11
+ let base = "";
12
+ beforeAll(async () => {
13
+ await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
14
+ const addr = server.address();
15
+ base = `http://127.0.0.1:${addr.port}`;
16
+ });
17
+ afterAll(async () => {
18
+ await new Promise((resolve, reject) => {
19
+ server.close((err) => (err ? reject(err) : resolve()));
20
+ });
21
+ });
22
+ it("keeps a Chinese filename instead of latin1 mojibake", async () => {
23
+ const boundary = "----mdocsTest";
24
+ const filename = "截图.png";
25
+ const body = Buffer.from(`--${boundary}\r\n` +
26
+ `Content-Disposition: form-data; name="file"; filename="${filename}"\r\n` +
27
+ `Content-Type: image/png\r\n\r\n` +
28
+ `PNG\r\n` +
29
+ `--${boundary}--\r\n`, "utf8");
30
+ const res = await fetch(`${base}/up`, {
31
+ method: "POST",
32
+ headers: { "content-type": `multipart/form-data; boundary=${boundary}` },
33
+ body,
34
+ });
35
+ expect(res.status).toBe(200);
36
+ expect(await res.json()).toEqual({ name: "截图.png" });
37
+ });
38
+ });
39
+ //# sourceMappingURL=upload-filename.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-filename.test.js","sourceRoot":"","sources":["../../../../src/server/agent/attachments/upload-filename.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACjE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,YAAY,IAAI,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAiB,CAAC;QAC7C,IAAI,GAAG,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,QAAQ,GAAG,eAAe,CAAC;QACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC;QAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CACtB,KAAK,QAAQ,MAAM;YACjB,0DAA0D,QAAQ,OAAO;YACzE,iCAAiC;YACjC,SAAS;YACT,KAAK,QAAQ,QAAQ,EACvB,MAAM,CACP,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,KAAK,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,iCAAiC,QAAQ,EAAE,EAAE;YACxE,IAAI;SACL,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import multer from "multer";
2
+ /**
3
+ * 浏览器按 UTF-8 写 multipart 的 filename。
4
+ * multer 默认用 latin1 解码,中文会变成「截图.png」这种乱码。
5
+ */
6
+ export const agentAttachmentUpload = multer({
7
+ storage: multer.memoryStorage(),
8
+ limits: { fileSize: 20 * 1024 * 1024, files: 1 },
9
+ defParamCharset: "utf8",
10
+ });
11
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../../src/server/agent/attachments/upload.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE;IAC/B,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;IAChD,eAAe,EAAE,MAAM;CACxB,CAAC,CAAC"}
@@ -128,7 +128,15 @@ export function buildApp() {
128
128
  /** 确保运行时所需的各目录已存在,按 0o700 权限递归创建。 */
129
129
  function ensureRuntimeDirs() {
130
130
  const cfg = getConfig();
131
- for (const dir of [cfg.dataDir, cfg.filesDir, cfg.docsDir, cfg.assetsDir, cfg.logsDir]) {
131
+ for (const dir of [
132
+ cfg.dataDir,
133
+ cfg.filesDir,
134
+ cfg.docsDir,
135
+ cfg.assetsDir,
136
+ cfg.agentAttachmentsDir,
137
+ path.join(cfg.agentAttachmentsDir, "objects"),
138
+ cfg.logsDir,
139
+ ]) {
132
140
  fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
133
141
  }
134
142
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,7 @@ export function getConfig() {
36
36
  filesDir: path.join(dataDir, "files"),
37
37
  docsDir: path.join(dataDir, "files", "docs"),
38
38
  assetsDir: path.join(dataDir, "files", "assets"),
39
+ agentAttachmentsDir: path.join(dataDir, "files", "agent-attachments"),
39
40
  // 历史提交快照:路径仅由正文 SHA-256 决定,见 resolveCommitBlobAbsolutePath
40
41
  commitsDir: path.join(dataDir, "files", "commits"),
41
42
  logsDir: path.join(dataDir, "logs"),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ export function insertAgentAttachment(db, row) {
2
+ db.prepare(`INSERT INTO agent_attachments (
3
+ attachment_id, owner_visitor_id, session_id, sha256, name, mime,
4
+ byte_size, status, created_at, persisted_at
5
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(row.attachment_id, row.owner_visitor_id, row.session_id, row.sha256, row.name, row.mime, row.byte_size, row.status, row.created_at, row.persisted_at);
6
+ }
7
+ export function findAgentAttachmentById(db, attachmentId) {
8
+ return db
9
+ .prepare(`SELECT * FROM agent_attachments WHERE attachment_id = ?`)
10
+ .get(attachmentId);
11
+ }
12
+ export function findAgentAttachmentsByIds(db, ownerVisitorId, sessionId, ids) {
13
+ if (ids.length === 0)
14
+ return [];
15
+ const placeholders = ids.map(() => "?").join(",");
16
+ const rows = db
17
+ .prepare(`SELECT * FROM agent_attachments
18
+ WHERE owner_visitor_id = ? AND session_id = ?
19
+ AND attachment_id IN (${placeholders})`)
20
+ .all(ownerVisitorId, sessionId, ...ids);
21
+ const byId = new Map(rows.map((r) => [r.attachment_id, r]));
22
+ return ids.map((id) => byId.get(id)).filter((r) => !!r);
23
+ }
24
+ export function persistAgentAttachments(db, ownerVisitorId, sessionId, ids, persistedAt) {
25
+ if (ids.length === 0)
26
+ return [];
27
+ const tx = db.transaction(() => {
28
+ const update = db.prepare(`UPDATE agent_attachments
29
+ SET status = 'persisted', persisted_at = ?
30
+ WHERE attachment_id = ? AND owner_visitor_id = ? AND session_id = ?
31
+ AND status = 'staging'`);
32
+ for (const id of ids) {
33
+ update.run(persistedAt, id, ownerVisitorId, sessionId);
34
+ }
35
+ return findAgentAttachmentsByIds(db, ownerVisitorId, sessionId, ids);
36
+ });
37
+ return tx();
38
+ }
39
+ export function deleteExpiredStagingAttachments(db, cutoffIso) {
40
+ const rows = db
41
+ .prepare(`SELECT attachment_id FROM agent_attachments
42
+ WHERE status = 'staging' AND created_at < ?`)
43
+ .all(cutoffIso);
44
+ const ids = rows.map((r) => r.attachment_id);
45
+ if (ids.length === 0)
46
+ return [];
47
+ const placeholders = ids.map(() => "?").join(",");
48
+ db.prepare(`DELETE FROM agent_attachments WHERE attachment_id IN (${placeholders})`).run(...ids);
49
+ return ids;
50
+ }
51
+ //# sourceMappingURL=agent-attachment.repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-attachment.repo.js","sourceRoot":"","sources":["../../../../src/server/db/repositories/agent-attachment.repo.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,8 @@ export function listDocumentsByDomain(db, domainId) {
28
28
  FROM documents WHERE domain_id = ? ORDER BY relative_path`)
29
29
  .all(domainId);
30
30
  }
31
+ /** 我的文章可筛选的文件类型(与设置页下拉一致) */
32
+ const MY_DOC_FILE_TYPES = new Set(["md", "html", "sheet"]);
31
33
  /**
32
34
  * 列出指定访客创建的所有文档,支持分页,按更新时间倒序排列。
33
35
  *
@@ -42,23 +44,20 @@ export function listDocumentsByVisitor(db, visitorId, query = {}) {
42
44
  const offset = Math.max(query.offset ?? 0, 0);
43
45
  const domainId = query.domainId?.trim() || null;
44
46
  const creatorVisitorId = query.creatorVisitorId?.trim() || null;
47
+ const fileTypeRaw = query.fileType?.trim() || "";
48
+ const fileType = MY_DOC_FILE_TYPES.has(fileTypeRaw) ? fileTypeRaw : null;
45
49
  const where = `WHERE d.owner_visitor_id = ?
46
50
  AND (? IS NULL OR d.domain_id = ?)
47
- AND (? IS NULL OR d.owner_visitor_id = ?)`;
48
- const filterArgs = [
49
- visitorId,
50
- domainId,
51
- domainId,
52
- creatorVisitorId,
53
- creatorVisitorId,
54
- ];
51
+ AND (? IS NULL OR d.owner_visitor_id = ?)
52
+ AND (? IS NULL OR d.file_type = ?)`;
53
+ const filterArgs = [visitorId, domainId, domainId, creatorVisitorId, creatorVisitorId, fileType, fileType];
55
54
  const countRow = db
56
55
  .prepare(`SELECT COUNT(*) as c FROM documents d ${where}`)
57
56
  .get(...filterArgs);
58
57
  const total = countRow?.c ?? 0;
59
58
  const rows = db
60
59
  .prepare(`SELECT d.document_id, d.domain_id, d.relative_path, d.display_name, d.created_at, d.updated_at,
61
- d.permission, d.owner_visitor_id, v.visitor_name AS creator_name
60
+ d.permission, d.file_type, d.owner_visitor_id, v.visitor_name AS creator_name
62
61
  FROM documents d
63
62
  LEFT JOIN visitors v ON v.visitor_id = d.owner_visitor_id
64
63
  ${where}
@@ -72,6 +71,7 @@ export function listDocumentsByVisitor(db, visitorId, query = {}) {
72
71
  createdAt: row.created_at,
73
72
  updatedAt: row.updated_at,
74
73
  permission: row.permission,
74
+ fileType: row.file_type,
75
75
  creatorVisitorId: row.owner_visitor_id,
76
76
  creatorName: row.creator_name ?? row.owner_visitor_id,
77
77
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"document.repo.js","sourceRoot":"","sources":["../../../../src/server/db/repositories/document.repo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document.repo.js","sourceRoot":"","sources":["../../../../src/server/db/repositories/document.repo.ts"],"names":[],"mappings":"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"}
@@ -215,6 +215,23 @@ const SCHEMA_STATEMENTS = [
215
215
  )`,
216
216
  `CREATE INDEX IF NOT EXISTS idx_embedding_chunks_domain ON document_embedding_chunks (domain_id)`,
217
217
  `CREATE INDEX IF NOT EXISTS idx_embedding_chunks_document ON document_embedding_chunks (document_id)`,
218
+ `CREATE TABLE IF NOT EXISTS agent_attachments (
219
+ attachment_id TEXT PRIMARY KEY,
220
+ owner_visitor_id TEXT NOT NULL,
221
+ session_id TEXT NOT NULL,
222
+ sha256 TEXT NOT NULL,
223
+ name TEXT NOT NULL,
224
+ mime TEXT NOT NULL,
225
+ byte_size INTEGER NOT NULL,
226
+ status TEXT NOT NULL CHECK (status IN ('staging', 'persisted')),
227
+ created_at TEXT NOT NULL,
228
+ persisted_at TEXT,
229
+ FOREIGN KEY (owner_visitor_id) REFERENCES visitors(visitor_id) ON DELETE CASCADE
230
+ )`,
231
+ `CREATE INDEX IF NOT EXISTS idx_agent_att_session ON agent_attachments (session_id, status)`,
232
+ `CREATE INDEX IF NOT EXISTS idx_agent_att_staging_created ON agent_attachments (status, created_at)`,
233
+ `CREATE INDEX IF NOT EXISTS idx_agent_att_sha ON agent_attachments (sha256)`,
234
+ `CREATE INDEX IF NOT EXISTS idx_agent_att_owner ON agent_attachments (owner_visitor_id)`,
218
235
  ];
219
236
  /**
220
237
  * 在数据库上应用完整 Schema。
@@ -473,14 +490,53 @@ function migrateAgentModelConfigDropDisplayName(db) {
473
490
  db.exec(`ALTER TABLE agent_model_configs DROP COLUMN display_name`);
474
491
  }
475
492
  /** 一访客多配置:去掉 owner UNIQUE,增加 is_default */
493
+ /** 唯一索引的列(按 seqno)。主键 autoindex 的列是 id,不能当成 owner 唯一约束。 */
494
+ function uniqueIndexColumns(db, indexName) {
495
+ const quoted = indexName.replaceAll(`"`, `""`);
496
+ const rows = db.prepare(`PRAGMA index_info("${quoted}")`).all();
497
+ return rows.sort((a, b) => a.seqno - b.seqno).map((r) => r.name);
498
+ }
499
+ function hasOwnerVisitorUnique(db) {
500
+ const indexes = db.prepare(`PRAGMA index_list(agent_model_configs)`).all();
501
+ return indexes.some((idx) => {
502
+ if (idx.unique !== 1)
503
+ return false;
504
+ const cols = uniqueIndexColumns(db, idx.name);
505
+ return cols.length === 1 && cols[0] === "owner_visitor_id";
506
+ });
507
+ }
508
+ /** 每个访客只保留一条 is_default=1(已有默认里取最新;都没有则提升最新一条)。 */
509
+ function collapseAgentModelConfigDefaults(db) {
510
+ const rows = db.prepare(`SELECT id, owner_visitor_id, is_default, updated_at
511
+ FROM agent_model_configs
512
+ ORDER BY owner_visitor_id, is_default DESC, updated_at DESC, id DESC`).all();
513
+ const clear = db.prepare(`UPDATE agent_model_configs SET is_default = 0 WHERE id = ?`);
514
+ const setDefault = db.prepare(`UPDATE agent_model_configs SET is_default = 1 WHERE id = ?`);
515
+ let currentOwner = "";
516
+ let kept = false;
517
+ for (const row of rows) {
518
+ if (row.owner_visitor_id !== currentOwner) {
519
+ currentOwner = row.owner_visitor_id;
520
+ kept = false;
521
+ }
522
+ if (!kept) {
523
+ kept = true;
524
+ if (row.is_default !== 1)
525
+ setDefault.run(row.id);
526
+ continue;
527
+ }
528
+ if (row.is_default === 1)
529
+ clear.run(row.id);
530
+ }
531
+ }
476
532
  function migrateAgentModelConfigMultiDefault(db) {
477
533
  const cols = db.prepare(`PRAGMA table_info(agent_model_configs)`).all();
478
534
  if (cols.length === 0)
479
535
  return;
480
536
  const hasIsDefault = cols.some((c) => c.name === "is_default");
481
- const indexes = db.prepare(`PRAGMA index_list(agent_model_configs)`).all();
482
- const hasOwnerUnique = indexes.some((idx) => idx.unique === 1 && idx.name.startsWith("sqlite_autoindex_agent_model_configs"));
537
+ const hasOwnerUnique = hasOwnerVisitorUnique(db);
483
538
  if (hasIsDefault && !hasOwnerUnique) {
539
+ collapseAgentModelConfigDefaults(db);
484
540
  db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS idx_agent_model_configs_owner_default
485
541
  ON agent_model_configs(owner_visitor_id) WHERE is_default = 1`);
486
542
  db.exec(`CREATE INDEX IF NOT EXISTS idx_agent_model_configs_owner
@@ -514,7 +570,12 @@ function migrateAgentModelConfigMultiDefault(db) {
514
570
  COALESCE(api_type, 'openai-completions'),
515
571
  compat_json, model_id, api_key,
516
572
  COALESCE(context_window, 128000),
517
- 1,
573
+ CASE WHEN id = (
574
+ SELECT o.id FROM agent_model_configs AS o
575
+ WHERE o.owner_visitor_id = agent_model_configs.owner_visitor_id
576
+ ORDER BY o.updated_at DESC, o.id DESC
577
+ LIMIT 1
578
+ ) THEN 1 ELSE 0 END,
518
579
  updated_at
519
580
  FROM agent_model_configs`);
520
581
  db.exec(`DROP TABLE agent_model_configs`);