@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.
- package/README.md +1 -1
- package/agent-skills/changelog/SKILL.md +25 -0
- package/dist/server/agent/Agent/run-manager.js +1 -0
- package/dist/server/agent/Agent/run-manager.js.map +1 -1
- package/dist/server/agent/Agent/run-pi-agent.js +22 -7
- package/dist/server/agent/Agent/run-pi-agent.js.map +1 -1
- package/dist/server/agent/Agent/run.js +29 -4
- package/dist/server/agent/Agent/run.js.map +1 -1
- package/dist/server/agent/Agent/session-manager.js +45 -5
- package/dist/server/agent/Agent/session-manager.js.map +1 -1
- package/dist/server/agent/Agent/system-prompt.js +5 -3
- package/dist/server/agent/Agent/system-prompt.js.map +1 -1
- package/dist/server/agent/Agent/tools-documents.js +13 -4
- package/dist/server/agent/Agent/tools-documents.js.map +1 -1
- package/dist/server/agent/Agent/tools-registry.test.js +1 -1
- package/dist/server/agent/Agent/tools-registry.test.js.map +1 -1
- package/dist/server/agent/Agent/tools-template.js +2 -1
- package/dist/server/agent/Agent/tools-template.js.map +1 -1
- package/dist/server/agent/Config/config.test.js +21 -0
- package/dist/server/agent/Config/config.test.js.map +1 -1
- package/dist/server/agent/attachments/capabilities.js +52 -0
- package/dist/server/agent/attachments/capabilities.js.map +1 -0
- package/dist/server/agent/attachments/capabilities.test.js +33 -0
- package/dist/server/agent/attachments/capabilities.test.js.map +1 -0
- package/dist/server/agent/attachments/index.js +6 -0
- package/dist/server/agent/attachments/index.js.map +1 -0
- package/dist/server/agent/attachments/inject.js +67 -0
- package/dist/server/agent/attachments/inject.js.map +1 -0
- package/dist/server/agent/attachments/inject.test.js +41 -0
- package/dist/server/agent/attachments/inject.test.js.map +1 -0
- package/dist/server/agent/attachments/object-fs.js +44 -0
- package/dist/server/agent/attachments/object-fs.js.map +1 -0
- package/dist/server/agent/attachments/parse/image.js +22 -0
- package/dist/server/agent/attachments/parse/image.js.map +1 -0
- package/dist/server/agent/attachments/parse/pdf.js +19 -0
- package/dist/server/agent/attachments/parse/pdf.js.map +1 -0
- package/dist/server/agent/attachments/parse/plain-text.js +18 -0
- package/dist/server/agent/attachments/parse/plain-text.js.map +1 -0
- package/dist/server/agent/attachments/prepare-turn.js +32 -0
- package/dist/server/agent/attachments/prepare-turn.js.map +1 -0
- package/dist/server/agent/attachments/store.js +120 -0
- package/dist/server/agent/attachments/store.js.map +1 -0
- package/dist/server/agent/attachments/tools-read-attachment.js +95 -0
- package/dist/server/agent/attachments/tools-read-attachment.js.map +1 -0
- package/dist/server/agent/attachments/types.js +6 -0
- package/dist/server/agent/attachments/types.js.map +1 -0
- package/dist/server/agent/attachments/upload-filename.test.js +39 -0
- package/dist/server/agent/attachments/upload-filename.test.js.map +1 -0
- package/dist/server/agent/attachments/upload.js +11 -0
- package/dist/server/agent/attachments/upload.js.map +1 -0
- package/dist/server/app.js +9 -1
- package/dist/server/app.js.map +1 -1
- package/dist/server/config/index.js +1 -0
- package/dist/server/config/index.js.map +1 -1
- package/dist/server/db/repositories/agent-attachment.repo.js +51 -0
- package/dist/server/db/repositories/agent-attachment.repo.js.map +1 -0
- package/dist/server/db/repositories/document.repo.js +9 -9
- package/dist/server/db/repositories/document.repo.js.map +1 -1
- package/dist/server/db/schema.js +64 -3
- package/dist/server/db/schema.js.map +1 -1
- package/dist/server/documents/document.service.js +2 -3
- package/dist/server/documents/document.service.js.map +1 -1
- package/dist/server/documents/graph.integration.test.js +1 -0
- package/dist/server/documents/graph.integration.test.js.map +1 -1
- package/dist/server/documents/tree-and-folders.test.js +1 -0
- package/dist/server/documents/tree-and-folders.test.js.map +1 -1
- package/dist/server/domains/change-domain-permission.test.js +12 -0
- package/dist/server/domains/change-domain-permission.test.js.map +1 -1
- package/dist/server/routes/agent.routes.js +85 -2
- package/dist/server/routes/agent.routes.js.map +1 -1
- package/dist/server/routes/visitors.routes.js +2 -0
- package/dist/server/routes/visitors.routes.js.map +1 -1
- package/dist/server/search/document-index-manager.js +13 -4
- package/dist/server/search/document-index-manager.js.map +1 -1
- package/dist/server/search/document-index-manager.test.js +14 -3
- package/dist/server/search/document-index-manager.test.js.map +1 -1
- package/dist/server/search/embedding-store.js +9 -0
- package/dist/server/search/embedding-store.js.map +1 -1
- package/dist/server/search/embedding-store.test.js +27 -3
- package/dist/server/search/embedding-store.test.js.map +1 -1
- package/dist/shared/file-type-policy.js +1 -1
- package/dist/shared/file-type-policy.js.map +1 -1
- package/dist/shared/file-type-policy.test.js +2 -1
- package/dist/shared/file-type-policy.test.js.map +1 -1
- package/dist/web/assets/AgentChatPanel-Bhv57WUW.js +47 -0
- package/dist/web/assets/{AiWriteWorkbench-DzJAmRHY.js → AiWriteWorkbench-DOse9-oQ.js} +4 -4
- package/dist/web/assets/{DiagramEditor-NtNY3sZL-KWdKFFEL.js → DiagramEditor-NtNY3sZL-D7sapmVz.js} +1 -1
- package/dist/web/assets/DocChrome-Dj5rSAvl.js +16 -0
- package/dist/web/assets/{DocumentEditor-CrU6HKmU.js → DocumentEditor-BTxsH3UT.js} +1 -1
- package/dist/web/assets/{HtmlEditor-BBcreXJD.js → HtmlEditor-OEfTnjjz.js} +1 -1
- package/dist/web/assets/MergeView-CGz2CWUZ.js +10 -0
- package/dist/web/assets/{PlaygroundPage-Bo9rM8MY.js → PlaygroundPage-BsekHU2o.js} +1 -1
- package/dist/web/assets/{SettingsPage-D09P0j48.js → SettingsPage-cVFmyADe.js} +5 -5
- package/dist/web/assets/SheetEditor-1LMR2jA1.js +26 -0
- package/dist/web/assets/SheetEditor-DJOs2u-u.css +1 -0
- package/dist/web/assets/{Toolbar-C1HmC2Qc.js → Toolbar-CPIpQgP1.js} +1 -1
- package/dist/web/assets/VisitorPickerModal-aRuuDomz.js +6 -0
- package/dist/web/assets/{check-BAYRiedE.js → check-NyVbPIj8.js} +1 -1
- package/dist/web/assets/{copy-J9XXv57X.js → copy-C_H9wgwB.js} +1 -1
- package/dist/web/assets/file-type-policy-5jFXMeIz.js +1 -0
- package/dist/web/assets/index-CervldVc.css +1 -0
- package/dist/web/assets/index-Kp5r4mc7.js +299 -0
- package/dist/web/assets/{italic-BfR6fH81.js → italic-BqrahN0G.js} +1 -1
- package/dist/web/assets/{meta2dEngine-BD2XbzaV-MY1Hyyeh.js → meta2dEngine-BD2XbzaV-CUKxedXW.js} +1 -1
- package/dist/web/assets/{plus-DvWl4lHk.js → plus-D8tCpRfA.js} +1 -1
- package/dist/web/assets/{react-C7aGt3wN.js → react-DsdrF7vh.js} +3 -3
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/AgentChatPanel-_IV-LAS4.js +0 -42
- package/dist/web/assets/DocChrome-CtT7xOl6.js +0 -16
- package/dist/web/assets/MergeView-LV_hny8a.js +0 -10
- package/dist/web/assets/SheetEditor-BPTMQ2s5.css +0 -1
- package/dist/web/assets/SheetEditor-Dyk-jpRL.js +0 -26
- package/dist/web/assets/VisitorPickerModal-Cx03Papl.js +0 -6
- package/dist/web/assets/file-type-policy-aRrzC4LZ.js +0 -1
- package/dist/web/assets/index-Btfv_3-Q.js +0 -299
- 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 @@
|
|
|
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"}
|
package/dist/server/app.js
CHANGED
|
@@ -128,7 +128,15 @@ export function buildApp() {
|
|
|
128
128
|
/** 确保运行时所需的各目录已存在,按 0o700 权限递归创建。 */
|
|
129
129
|
function ensureRuntimeDirs() {
|
|
130
130
|
const cfg = getConfig();
|
|
131
|
-
for (const dir of [
|
|
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
|
}
|
package/dist/server/app.js.map
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,kDAAkD;AAClD,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CACpC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,WAAW,CACZ,CAAC;
|
|
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
|
-
|
|
49
|
-
|
|
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":"AAiDA;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAqB,EAAE,QAAgB;IAC5E,mCAAmC;IACnC,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CACN,yDAAyD,CAC1D;SACA,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjB,oBAAoB;IACpB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAqB,EAAE,QAAgB;IAC3E,OAAO,EAAE;SACN,OAAO,CACN;;;iEAG2D,CAC5D;SACA,GAAG,CAAC,QAAQ,CAAC,CAAC;AACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"document.repo.js","sourceRoot":"","sources":["../../../../src/server/db/repositories/document.repo.ts"],"names":[],"mappings":"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"}
|
package/dist/server/db/schema.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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`);
|