@fgbg/mdocs 0.8.15 → 0.8.18

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 (112) hide show
  1. package/README.md +114 -76
  2. package/agent-skills/changelog/SKILL.md +23 -1
  3. package/agent-skills/index/SKILL.md +1 -1
  4. package/agent-skills/index.json +4 -4
  5. package/agent-skills/usage-agent-dev-loop/SKILL.md +7 -7
  6. package/agent-skills/usage-onboarding-ai/SKILL.md +109 -17
  7. package/agent-skills/usage-settings/SKILL.md +4 -4
  8. package/dist/server/agent/Agent/almost-empty.js +15 -0
  9. package/dist/server/agent/Agent/almost-empty.js.map +1 -0
  10. package/dist/server/agent/Agent/almost-empty.test.js +20 -0
  11. package/dist/server/agent/Agent/almost-empty.test.js.map +1 -0
  12. package/dist/server/agent/Agent/choice-pending.js +71 -0
  13. package/dist/server/agent/Agent/choice-pending.js.map +1 -0
  14. package/dist/server/agent/Agent/choice-pending.test.js +58 -0
  15. package/dist/server/agent/Agent/choice-pending.test.js.map +1 -0
  16. package/dist/server/agent/Agent/run.js +80 -5
  17. package/dist/server/agent/Agent/run.js.map +1 -1
  18. package/dist/server/agent/Agent/session-manager.doc-scope.test.js +15 -0
  19. package/dist/server/agent/Agent/session-manager.doc-scope.test.js.map +1 -0
  20. package/dist/server/agent/Agent/session-manager.js +181 -37
  21. package/dist/server/agent/Agent/session-manager.js.map +1 -1
  22. package/dist/server/agent/Agent/system-prompt.js +19 -9
  23. package/dist/server/agent/Agent/system-prompt.js.map +1 -1
  24. package/dist/server/agent/Agent/tools-account.js +16 -3
  25. package/dist/server/agent/Agent/tools-account.js.map +1 -1
  26. package/dist/server/agent/Agent/tools-choice.js +70 -0
  27. package/dist/server/agent/Agent/tools-choice.js.map +1 -0
  28. package/dist/server/agent/Agent/tools-coding.get-working.test.js +29 -0
  29. package/dist/server/agent/Agent/tools-coding.get-working.test.js.map +1 -0
  30. package/dist/server/agent/Agent/tools-coding.js +75 -0
  31. package/dist/server/agent/Agent/tools-coding.js.map +1 -0
  32. package/dist/server/agent/Agent/tools-overwrite.js +158 -0
  33. package/dist/server/agent/Agent/tools-overwrite.js.map +1 -0
  34. package/dist/server/routes/agent.routes.js +130 -6
  35. package/dist/server/routes/agent.routes.js.map +1 -1
  36. package/dist/server/routes/assets.routes.js +58 -11
  37. package/dist/server/routes/assets.routes.js.map +1 -1
  38. package/dist/server/search/document-index-manager.js +11 -8
  39. package/dist/server/search/document-index-manager.js.map +1 -1
  40. package/dist/web/assets/AgentChatPanel-DHy3KgSW.js +1 -0
  41. package/dist/web/assets/AiWriteWorkbench-Ce_OaED4.js +6 -0
  42. package/dist/web/assets/DocumentEditor-B2H3rHSg.js +21 -0
  43. package/dist/web/assets/{MergeView-0Q5K5-jO.js → MergeView-Cy4Pi3Je.js} +2 -2
  44. package/dist/web/assets/PlaygroundPage-hHfIzPO5.js +8 -0
  45. package/dist/web/assets/SettingsPage-BRAPdqW9.js +1 -0
  46. package/dist/web/assets/Toolbar-DPkTtGNL.js +126 -0
  47. package/dist/web/assets/VisitorPickerModal-CJ0K2gj8.js +1 -0
  48. package/dist/web/assets/copy-DCKasK29.js +11 -0
  49. package/dist/web/assets/diagram-BJFhx-27.js +3016 -0
  50. package/dist/web/assets/editor-BBXgdU3Q.js +16 -0
  51. package/dist/web/assets/history-BQkmetJ0.js +6 -0
  52. package/dist/web/assets/index-BksNm27A.css +1 -0
  53. package/dist/web/assets/index-CA7lpALZ.js +185 -0
  54. package/dist/web/assets/motion-D-I76zAi.js +8 -0
  55. package/dist/web/assets/plus-B2rZTPWV.js +6 -0
  56. package/dist/web/assets/react-CQByW0Rg.js +2236 -0
  57. package/dist/web/assets/react-vendor-BNpqFP9B.js +242 -0
  58. package/dist/web/assets/ui-C3xtW1w8.js +3126 -0
  59. package/dist/web/index.html +28 -3
  60. package/package.json +2 -2
  61. package/dist/web/assets/_baseUniq-BISfv-Mh.js +0 -1
  62. package/dist/web/assets/arc-C-3Bi1Jy.js +0 -1
  63. package/dist/web/assets/architectureDiagram-Q4EWVU46-CusFjwbL.js +0 -36
  64. package/dist/web/assets/blockDiagram-DXYQGD6D-B0jPfa7U.js +0 -132
  65. package/dist/web/assets/c4Diagram-AHTNJAMY-Oe6MTT6L.js +0 -10
  66. package/dist/web/assets/channel-DB58qUXq.js +0 -1
  67. package/dist/web/assets/chunk-4BX2VUAB-CmxvxupC.js +0 -1
  68. package/dist/web/assets/chunk-4TB4RGXK-Bzj2dbY7.js +0 -206
  69. package/dist/web/assets/chunk-55IACEB6-CqfjDrYS.js +0 -1
  70. package/dist/web/assets/chunk-EDXVE4YY-CWoGAuuy.js +0 -1
  71. package/dist/web/assets/chunk-FMBD7UC4-WFLld2bI.js +0 -15
  72. package/dist/web/assets/chunk-OYMX7WX6-CSyOxg1H.js +0 -231
  73. package/dist/web/assets/chunk-QZHKN3VN-Cyee_8uW.js +0 -1
  74. package/dist/web/assets/chunk-YZCP3GAM-C7J3AIM1.js +0 -1
  75. package/dist/web/assets/classDiagram-6PBFFD2Q-BlGKxrV2.js +0 -1
  76. package/dist/web/assets/classDiagram-v2-HSJHXN6E-BlGKxrV2.js +0 -1
  77. package/dist/web/assets/clone-rVZWwKcK.js +0 -1
  78. package/dist/web/assets/cose-bilkent-S5V4N54A-BCHs5xNn.js +0 -1
  79. package/dist/web/assets/cytoscape.esm-BiciSPf8.js +0 -331
  80. package/dist/web/assets/dagre-KV5264BT-Cqyy62Ql.js +0 -4
  81. package/dist/web/assets/defaultLocale-DX6XiGOO.js +0 -1
  82. package/dist/web/assets/diagram-5BDNPKRD-BNlGWRfQ.js +0 -10
  83. package/dist/web/assets/diagram-G4DWMVQ6-Qtz-K4Lr.js +0 -24
  84. package/dist/web/assets/diagram-MMDJMWI5-D5yn6u63.js +0 -43
  85. package/dist/web/assets/diagram-TYMM5635-CR-RaIAP.js +0 -24
  86. package/dist/web/assets/erDiagram-SMLLAGMA-BccF6Qsp.js +0 -85
  87. package/dist/web/assets/flowDiagram-DWJPFMVM-B0OEEMQt.js +0 -162
  88. package/dist/web/assets/ganttDiagram-T4ZO3ILL-B8kfqGyD.js +0 -292
  89. package/dist/web/assets/gitGraphDiagram-UUTBAWPF-BJntaoFE.js +0 -106
  90. package/dist/web/assets/graph-Dt01jPc-.js +0 -1
  91. package/dist/web/assets/index-CMSpZccR.js +0 -6276
  92. package/dist/web/assets/index-CPYNlnGV.css +0 -1
  93. package/dist/web/assets/infoDiagram-42DDH7IO-YITqxZHx.js +0 -2
  94. package/dist/web/assets/ishikawaDiagram-UXIWVN3A-B2HEjE4j.js +0 -70
  95. package/dist/web/assets/journeyDiagram-VCZTEJTY-BfWiWY1h.js +0 -139
  96. package/dist/web/assets/kanban-definition-6JOO6SKY-L7VcnCp4.js +0 -89
  97. package/dist/web/assets/layout-CN5HZPYy.js +0 -1
  98. package/dist/web/assets/linear-J-E2mhNr.js +0 -1
  99. package/dist/web/assets/min-DG8d4OWa.js +0 -1
  100. package/dist/web/assets/mindmap-definition-QFDTVHPH-4QKB3LVg.js +0 -96
  101. package/dist/web/assets/pieDiagram-DEJITSTG-BpbKNaYV.js +0 -30
  102. package/dist/web/assets/quadrantDiagram-34T5L4WZ-BsJUNf_y.js +0 -7
  103. package/dist/web/assets/requirementDiagram-MS252O5E-CEEvTN62.js +0 -84
  104. package/dist/web/assets/sankeyDiagram-XADWPNL6-C-OIxGQH.js +0 -10
  105. package/dist/web/assets/sequenceDiagram-FGHM5R23-DYNvxdh-.js +0 -157
  106. package/dist/web/assets/stateDiagram-FHFEXIEX-Ct9mBbpM.js +0 -1
  107. package/dist/web/assets/stateDiagram-v2-QKLJ7IA2-Bq3YuMeU.js +0 -1
  108. package/dist/web/assets/timeline-definition-GMOUNBTQ-CV15Blkv.js +0 -120
  109. package/dist/web/assets/vennDiagram-DHZGUBPP-DI7bqTnV.js +0 -34
  110. package/dist/web/assets/wardley-RL74JXVD-C6O53D0O.js +0 -162
  111. package/dist/web/assets/wardleyDiagram-NUSXRM2D-CaAQ_aSA.js +0 -20
  112. package/dist/web/assets/xychartDiagram-5P7HB3ND-Bw31tQmi.js +0 -7
@@ -3,6 +3,8 @@ import path from "node:path";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { getConfig } from "../../config/index.js";
5
5
  const SESSION_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
6
+ /** 空白帮写(无 documentId)的 lastOpened 键 */
7
+ export const CODING_BLANK_DOC_KEY = "__blank__";
6
8
  function safeString(v) {
7
9
  if (typeof v !== "string")
8
10
  return null;
@@ -21,15 +23,26 @@ function titleFromUserContent(content) {
21
23
  return "新会话";
22
24
  return oneLine.length > 36 ? `${oneLine.slice(0, 36)}…` : oneLine;
23
25
  }
26
+ /** null/空 → 空白桶;有 id → 该文档 */
27
+ export function docScopeKey(documentId) {
28
+ const id = typeof documentId === "string" ? documentId.trim() : "";
29
+ return id || CODING_BLANK_DOC_KEY;
30
+ }
31
+ function entryDocKey(entry) {
32
+ return docScopeKey(entry.documentId);
33
+ }
24
34
  export class AgentSessionManager {
25
35
  visitorId;
26
36
  sessionDir;
27
37
  metaPath;
38
+ kind;
28
39
  cachedSessionId = null;
29
- constructor(visitorId) {
40
+ constructor(visitorId, opts) {
30
41
  this.visitorId = visitorId;
31
42
  const { dataDir } = getConfig();
32
- this.sessionDir = path.join(dataDir, "tenant", visitorId, "agent", "session");
43
+ this.kind = opts?.kind === "coding" ? "coding" : "normal";
44
+ const kindDir = this.kind === "coding" ? "coding-session" : "session";
45
+ this.sessionDir = path.join(dataDir, "tenant", visitorId, "agent", kindDir);
33
46
  this.metaPath = path.join(this.sessionDir, "session.json");
34
47
  }
35
48
  jsonlPath(sessionId) {
@@ -48,7 +61,10 @@ export class AgentSessionManager {
48
61
  const sessions = Array.isArray(parsed?.sessions)
49
62
  ? parsed.sessions.filter((s) => s && isSessionId(String(s.id ?? "")))
50
63
  : [];
51
- return { lastOpenedSessionId, sessions };
64
+ const lastOpenedByDocument = parsed?.lastOpenedByDocument && typeof parsed.lastOpenedByDocument === "object"
65
+ ? Object.fromEntries(Object.entries(parsed.lastOpenedByDocument).filter(([, id]) => typeof id === "string" && isSessionId(id)))
66
+ : undefined;
67
+ return { lastOpenedSessionId, sessions, lastOpenedByDocument };
52
68
  }
53
69
  catch (err) {
54
70
  if (err && typeof err === "object" && "code" in err && err.code === "ENOENT") {
@@ -68,6 +84,7 @@ export class AgentSessionManager {
68
84
  id: sessionId,
69
85
  title: patch?.title,
70
86
  updatedAt: now,
87
+ documentId: patch?.documentId !== undefined ? patch.documentId : undefined,
71
88
  });
72
89
  return;
73
90
  }
@@ -76,17 +93,34 @@ export class AgentSessionManager {
76
93
  ...cur,
77
94
  title: patch?.title !== undefined ? patch.title : cur.title,
78
95
  updatedAt: patch?.touchUpdatedAt === false ? cur.updatedAt ?? now : now,
96
+ documentId: patch?.documentId !== undefined ? patch.documentId : cur.documentId,
97
+ };
98
+ }
99
+ setLastOpenedForDoc(meta, documentId, sessionId) {
100
+ if (this.kind !== "coding")
101
+ return;
102
+ const key = docScopeKey(documentId);
103
+ meta.lastOpenedByDocument = {
104
+ ...(meta.lastOpenedByDocument ?? {}),
105
+ [key]: sessionId,
79
106
  };
80
107
  }
81
108
  sortSummaries(sessions) {
82
109
  return sessions
83
110
  .map((s) => ({
84
111
  id: s.id,
85
- title: (s.title?.trim() || "新会话"),
112
+ title: s.title?.trim() || "新会话",
86
113
  updatedAt: s.updatedAt ?? nowIso(),
114
+ documentId: s.documentId ?? null,
87
115
  }))
88
116
  .sort((a, b) => (a.updatedAt < b.updatedAt ? 1 : a.updatedAt > b.updatedAt ? -1 : 0));
89
117
  }
118
+ filterByDocument(sessions, documentId) {
119
+ if (this.kind !== "coding")
120
+ return sessions;
121
+ const key = docScopeKey(documentId);
122
+ return sessions.filter((s) => entryDocKey(s) === key);
123
+ }
90
124
  async loadTranscript(sessionId) {
91
125
  try {
92
126
  const txt = await fs.promises.readFile(this.jsonlPath(sessionId), "utf8");
@@ -114,53 +148,109 @@ export class AgentSessionManager {
114
148
  return [];
115
149
  }
116
150
  }
117
- async ensureLastOpened() {
151
+ /**
152
+ * 确保有可用 lastOpened。
153
+ * coding + documentId:按文档维度;normal:全局 lastOpened。
154
+ */
155
+ async ensureLastOpened(documentId) {
118
156
  await this.ensureSessionDir();
119
- if (this.cachedSessionId)
120
- return this.cachedSessionId;
121
- const meta = await this.readMeta();
122
- if (!meta) {
123
- const sessionId = randomUUID();
124
- await this.writeMeta({
125
- lastOpenedSessionId: sessionId,
126
- sessions: [{ id: sessionId, updatedAt: nowIso() }],
127
- });
157
+ if (this.kind !== "coding") {
158
+ if (this.cachedSessionId)
159
+ return this.cachedSessionId;
160
+ const meta = await this.readMeta();
161
+ if (!meta) {
162
+ const sessionId = randomUUID();
163
+ await this.writeMeta({
164
+ lastOpenedSessionId: sessionId,
165
+ sessions: [{ id: sessionId, updatedAt: nowIso() }],
166
+ });
167
+ this.cachedSessionId = sessionId;
168
+ return sessionId;
169
+ }
170
+ this.ensureSessionEntry(meta, meta.lastOpenedSessionId, { touchUpdatedAt: false });
171
+ await this.writeMeta(meta);
172
+ this.cachedSessionId = meta.lastOpenedSessionId;
173
+ return meta.lastOpenedSessionId;
174
+ }
175
+ const key = docScopeKey(documentId);
176
+ const meta = (await this.readMeta()) ?? {
177
+ lastOpenedSessionId: "",
178
+ sessions: [],
179
+ lastOpenedByDocument: {},
180
+ };
181
+ const scoped = this.filterByDocument(meta.sessions, documentId);
182
+ const mapped = meta.lastOpenedByDocument?.[key];
183
+ const mappedOk = mapped &&
184
+ isSessionId(mapped) &&
185
+ scoped.some((s) => s.id === mapped);
186
+ if (mappedOk) {
187
+ meta.lastOpenedSessionId = mapped;
188
+ this.ensureSessionEntry(meta, mapped, { touchUpdatedAt: false });
189
+ await this.writeMeta(meta);
190
+ this.cachedSessionId = mapped;
191
+ return mapped;
192
+ }
193
+ if (scoped[0]) {
194
+ const sessionId = scoped[0].id;
195
+ meta.lastOpenedSessionId = sessionId;
196
+ this.setLastOpenedForDoc(meta, documentId, sessionId);
197
+ await this.writeMeta(meta);
128
198
  this.cachedSessionId = sessionId;
129
199
  return sessionId;
130
200
  }
131
- this.ensureSessionEntry(meta, meta.lastOpenedSessionId, { touchUpdatedAt: false });
201
+ const sessionId = randomUUID();
202
+ meta.lastOpenedSessionId = sessionId;
203
+ this.ensureSessionEntry(meta, sessionId, {
204
+ touchUpdatedAt: true,
205
+ documentId: documentId?.trim() ? documentId.trim() : null,
206
+ });
207
+ this.setLastOpenedForDoc(meta, documentId, sessionId);
132
208
  await this.writeMeta(meta);
133
- this.cachedSessionId = meta.lastOpenedSessionId;
134
- return meta.lastOpenedSessionId;
209
+ this.cachedSessionId = sessionId;
210
+ return sessionId;
135
211
  }
136
- async listSessions() {
137
- const lastOpenedSessionId = await this.ensureLastOpened();
212
+ async listSessions(documentId) {
213
+ const lastOpenedSessionId = await this.ensureLastOpened(documentId);
138
214
  const meta = (await this.readMeta());
215
+ const scoped = this.filterByDocument(meta.sessions, documentId);
139
216
  return {
140
217
  lastOpenedSessionId,
141
- sessions: this.sortSummaries(meta.sessions),
218
+ sessions: this.sortSummaries(scoped),
142
219
  };
143
220
  }
144
- async loadLastOpenedMessages() {
145
- const sessionId = await this.ensureLastOpened();
221
+ async loadLastOpenedMessages(documentId) {
222
+ const sessionId = await this.ensureLastOpened(documentId);
146
223
  return { sessionId, messages: await this.loadTranscript(sessionId) };
147
224
  }
148
- /** 新建空会话并设为 lastOpened */
149
- async createSession() {
225
+ /** 新建空会话并设为该文档(或空白桶)的 lastOpened */
226
+ async createSession(documentId) {
150
227
  await this.ensureSessionDir();
151
228
  const sessionId = randomUUID();
152
229
  const meta = (await this.readMeta()) ?? {
153
230
  lastOpenedSessionId: sessionId,
154
231
  sessions: [],
232
+ lastOpenedByDocument: {},
155
233
  };
156
234
  meta.lastOpenedSessionId = sessionId;
157
- this.ensureSessionEntry(meta, sessionId, { title: "新会话", touchUpdatedAt: true });
235
+ const doc = this.kind === "coding"
236
+ ? documentId?.trim()
237
+ ? documentId.trim()
238
+ : null
239
+ : undefined;
240
+ this.ensureSessionEntry(meta, sessionId, {
241
+ title: "新会话",
242
+ touchUpdatedAt: true,
243
+ documentId: doc,
244
+ });
245
+ if (this.kind === "coding") {
246
+ this.setLastOpenedForDoc(meta, documentId, sessionId);
247
+ }
158
248
  await this.writeMeta(meta);
159
249
  this.cachedSessionId = sessionId;
160
250
  return { sessionId, messages: [] };
161
251
  }
162
- /** 切换 lastOpened 并返回该会话 transcript */
163
- async openSession(sessionId) {
252
+ /** 切换 lastOpened;coding 时可校验属于同一 documentId */
253
+ async openSession(sessionId, documentId) {
164
254
  if (!isSessionId(sessionId))
165
255
  throw new Error("invalid_session_id");
166
256
  await this.ensureSessionDir();
@@ -169,25 +259,76 @@ export class AgentSessionManager {
169
259
  const hasFile = fs.existsSync(this.jsonlPath(sessionId));
170
260
  if (!inMeta && !hasFile)
171
261
  throw new Error("session_not_found");
172
- const next = meta ?? { lastOpenedSessionId: sessionId, sessions: [] };
262
+ const next = meta ?? { lastOpenedSessionId: sessionId, sessions: [], lastOpenedByDocument: {} };
263
+ const entry = next.sessions.find((s) => s.id === sessionId);
264
+ if (this.kind === "coding" && documentId !== undefined) {
265
+ const want = docScopeKey(documentId);
266
+ const have = entry ? entryDocKey(entry) : CODING_BLANK_DOC_KEY;
267
+ if (want !== have)
268
+ throw new Error("session_document_mismatch");
269
+ }
173
270
  next.lastOpenedSessionId = sessionId;
174
271
  this.ensureSessionEntry(next, sessionId, { touchUpdatedAt: true });
272
+ if (this.kind === "coding") {
273
+ const bindDoc = entry?.documentId ?? (documentId !== undefined ? documentId : null);
274
+ this.setLastOpenedForDoc(next, bindDoc, sessionId);
275
+ }
175
276
  await this.writeMeta(next);
176
277
  this.cachedSessionId = sessionId;
177
278
  return { sessionId, messages: await this.loadTranscript(sessionId) };
178
279
  }
280
+ /**
281
+ * 空白帮写写回成文后:把 session 绑到新 documentId,并设为该文 lastOpened。
282
+ */
283
+ async bindSessionDocument(sessionId, documentId) {
284
+ if (this.kind !== "coding")
285
+ throw new Error("bind_only_coding");
286
+ if (!isSessionId(sessionId))
287
+ throw new Error("invalid_session_id");
288
+ const doc = documentId.trim();
289
+ if (!doc)
290
+ throw new Error("document_id_required");
291
+ await this.ensureSessionDir();
292
+ const meta = (await this.readMeta()) ?? {
293
+ lastOpenedSessionId: sessionId,
294
+ sessions: [],
295
+ lastOpenedByDocument: {},
296
+ };
297
+ const inMeta = meta.sessions.some((s) => s.id === sessionId);
298
+ const hasFile = fs.existsSync(this.jsonlPath(sessionId));
299
+ if (!inMeta && !hasFile)
300
+ throw new Error("session_not_found");
301
+ this.ensureSessionEntry(meta, sessionId, {
302
+ documentId: doc,
303
+ touchUpdatedAt: true,
304
+ });
305
+ meta.lastOpenedSessionId = sessionId;
306
+ this.setLastOpenedForDoc(meta, doc, sessionId);
307
+ // 从空白桶 lastOpened 清掉自己(若仍指向本 session)
308
+ if (meta.lastOpenedByDocument?.[CODING_BLANK_DOC_KEY] === sessionId) {
309
+ delete meta.lastOpenedByDocument[CODING_BLANK_DOC_KEY];
310
+ }
311
+ await this.writeMeta(meta);
312
+ this.cachedSessionId = sessionId;
313
+ return { sessionId, documentId: doc };
314
+ }
179
315
  async touchLastOpened(sessionId, patch) {
180
316
  const meta = (await this.readMeta()) ?? {
181
317
  lastOpenedSessionId: sessionId,
182
318
  sessions: [],
319
+ lastOpenedByDocument: {},
183
320
  };
184
321
  meta.lastOpenedSessionId = sessionId;
185
322
  const existing = meta.sessions.find((s) => s.id === sessionId);
186
- const needTitle = patch?.titleIfEmpty && !(existing?.title && existing.title.trim() && existing.title !== "新会话");
323
+ const needTitle = patch?.titleIfEmpty &&
324
+ !(existing?.title && existing.title.trim() && existing.title !== "新会话");
187
325
  this.ensureSessionEntry(meta, sessionId, {
188
326
  title: needTitle ? patch.titleIfEmpty : undefined,
189
327
  touchUpdatedAt: true,
190
328
  });
329
+ if (this.kind === "coding") {
330
+ this.setLastOpenedForDoc(meta, existing?.documentId ?? null, sessionId);
331
+ }
191
332
  await this.writeMeta(meta);
192
333
  this.cachedSessionId = sessionId;
193
334
  }
@@ -204,16 +345,19 @@ export class AgentSessionManager {
204
345
  await this.touchLastOpened(sessionId);
205
346
  }
206
347
  }
207
- export async function getAgentSessionForApi(visitorId) {
208
- return new AgentSessionManager(visitorId).loadLastOpenedMessages();
348
+ export async function getAgentSessionForApi(visitorId, kind = "normal", documentId) {
349
+ return new AgentSessionManager(visitorId, { kind }).loadLastOpenedMessages(kind === "coding" ? documentId : undefined);
350
+ }
351
+ export async function listAgentSessionsForApi(visitorId, kind = "normal", documentId) {
352
+ return new AgentSessionManager(visitorId, { kind }).listSessions(kind === "coding" ? documentId : undefined);
209
353
  }
210
- export async function listAgentSessionsForApi(visitorId) {
211
- return new AgentSessionManager(visitorId).listSessions();
354
+ export async function createAgentSessionForApi(visitorId, kind = "normal", documentId) {
355
+ return new AgentSessionManager(visitorId, { kind }).createSession(kind === "coding" ? documentId : undefined);
212
356
  }
213
- export async function createAgentSessionForApi(visitorId) {
214
- return new AgentSessionManager(visitorId).createSession();
357
+ export async function openAgentSessionForApi(visitorId, sessionId, kind = "normal", documentId) {
358
+ return new AgentSessionManager(visitorId, { kind }).openSession(sessionId, kind === "coding" ? documentId : undefined);
215
359
  }
216
- export async function openAgentSessionForApi(visitorId, sessionId) {
217
- return new AgentSessionManager(visitorId).openSession(sessionId);
360
+ export async function bindCodingSessionDocumentForApi(visitorId, sessionId, documentId) {
361
+ return new AgentSessionManager(visitorId, { kind: "coding" }).bindSessionDocument(sessionId, documentId);
218
362
  }
219
363
  //# sourceMappingURL=session-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/session-manager.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,24 @@
1
- const RULES = `你是 mdocs 智能助手:可帮助理解产品用法,也可代为执行账号内的域/目录/空文档操作。
1
+ const NORMAL_RULES = `你是 mdocs 智能助手:上手向导 + 账号助理。可帮助理解产品用法,也可代为执行账号内的域/目录/空文档等结构操作。
2
2
 
3
3
  规则:
4
- 1. 禁止代写、润色、改写用户文档,也不要给出可直接粘贴进正文的长文草稿。
4
+ 1. 禁止代写长文草稿给用户粘贴;不做发布、不做删除。改已有文档正文必须调用「覆写文档正文」(overwrite_document):几乎空则工具直接写入;已有实质正文时工具会弹出「直接覆写 / 打开帮写审阅 / 取消」供用户选择。有正文也可以覆写,只是要用户同意——由该工具出卡,你不得自行声称「无法覆写」。
5
5
  2. 需要产品知识时:先调用「查询 mdocs 手册大纲」了解有哪些主题,再调用「查询 mdocs 手册正文」按 id 阅读相关章节后回答。
6
- 3. 允许调用账号工具执行:列访客、列域、列/添加域成员、建域、搜文、列树、列我的文档、读取文档内容、建空文档、建文件夹、移动文档;执行后基于工具 JSON 结果如实反馈。用户问某篇具体内容时用「读取文档内容」(documentId);搜文/列树只给摘要或元数据。用户问「有哪些人可以邀请」时调用「列出活跃访客」;问某域现有成员时调用「列出域成员」;要把某人加进 restricted 域时先列访客再「添加域成员」。移动文档用「移动文档」(parentId 为文件夹 id,不传则到域根);仅创建者可移动。
7
- 4. 若用户要求写作或改文档正文,明确拒绝,并提示他们在编辑器中自行操作。可读取用户有权查看的文档来回答问题,但不要据此代写或改写正文。
8
- 5. 回答简洁、面向操作步骤。
9
- 6. 每轮回答正文结束后,另起一段追加一句引导(只追加一次,不要反复追问):先问「您还有什么想了解的吗?」,再给 1~2 个与本轮话题相关、可继续深挖的具体问题示例(例如「比如:受限域怎么加成员?」「比如:文档档位和邀请有什么区别?」)。示例要短、可直接当作下一句提问;与当前无关的主题不要乱推。`;
10
- /** 组装 system prompt:角色规则 + tool 使用说明(手册目录由 tool 按需返回) */
11
- export function buildSystemPrompt() {
12
- return RULES;
6
+ 3. 允许调用账号工具执行:列域、建域、搜文、列树、列我的文档、建空文档、建文件夹;以及列访客、列/添加域成员、读取文档内容、移动文档、覆写文档正文。执行后基于工具 JSON 结果如实反馈,不得编造工具未返回的字段。用户问某篇具体内容时用「读取文档内容」(documentId);搜文/列树只给摘要或元数据。用户问「有哪些人可以邀请」时调用「列出活跃访客」;问某域现有成员时调用「列出域成员」;要把某人加进 restricted 域时先列访客再「添加域成员」。移动文档用「移动文档」(parentId 为文件夹 id,不传则到域根);仅创建者可移动。
7
+ 4. 若需要用户在若干方案中做选择(例如选 A/B),必须调用「请用户选择」(ask_user_choice)。但用户要改某篇已有文档时:禁止用 ask_user_choice 自拟「无法覆写 / 新建一篇 / 我自己处理」等绕道选项;必须直接调用 overwrite_document,让工具出卡。工具返回后再如实说明结果。
8
+ 5. 用户要求写作或改文档正文:调用 overwrite_document(documentId, 完整 markdown);按工具返回说明已覆写、已打开帮写、或用户取消/超时。可读取用户有权查看的文档来回答问题。
9
+ 6. 先给出工具结果与结论,再给简短下一步建议;回答简洁、面向操作步骤。
10
+ 7. 每轮回答正文结束后,另起一段追加一句引导(只追加一次,不要反复追问):先问「您还有什么想了解的吗?」,再给 1~2 个与本轮话题相关、可继续深挖的具体问题示例。示例要短、可直接当作下一句提问;与当前无关的主题不要乱推。`;
11
+ const CODING_RULES = `你是 mdocs「帮写」助手(coding 模式):在纯 Markdown 工作台协助用户起草/改稿。
12
+
13
+ 规则:
14
+ 1. 改稿前必须先调用「读取帮写工作稿」(get_working_document) 获取进场快照与当前工作稿;以工具返回为准,禁止臆造正文。工作稿来自本次请求,不是磁盘上的旧版。
15
+ 2. 用工具「设置帮写正文」(set_markdown_document) 提交**完整** Markdown 提案;该工具只更新前端提案,不直接写服务器。用户会按段接受/拒绝后再点完成写回。
16
+ 3. 每次 set_markdown_document 应给出当前完整正文(不要只给局部补丁)。可另用搜文、列树、读取文档内容收集参考材料。
17
+ 4. 允许使用账号结构工具辅助;不要发布、不要删除。
18
+ 5. 特殊块(mermaid / markmap / meta2d)用 Markdown 围栏源码书写即可。
19
+ 6. 先简短说明你要改什么,再调用工具;工具返回后如实确认已更新提案。
20
+ 7. 回答简洁;不要编造工具未返回的字段。`;
21
+ export function buildSystemPrompt(mode = "normal") {
22
+ return mode === "coding" ? CODING_RULES : NORMAL_RULES;
13
23
  }
14
24
  //# sourceMappingURL=system-prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/system-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG;;;;;;;;qJAQuI,CAAC;AAEtJ,yDAAyD;AACzD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/system-prompt.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG;;;;;;;;;iHAS4F,CAAC;AAElH,MAAM,YAAY,GAAG;;;;;;;;;sBASC,CAAC;AAEvB,MAAM,UAAU,iBAAiB,CAAC,OAAkB,QAAQ;IAC1D,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;AACzD,CAAC"}
@@ -1,12 +1,25 @@
1
1
  import { createDocumentTools } from "./tools-documents.js";
2
2
  import { createDomainTools } from "./tools-domains.js";
3
3
  import { createVisitorTools } from "./tools-visitors.js";
4
- /** 账号/结构操作 tools(不写正文);与手册 tools 一并交给 Pi。 */
5
- export function createAccountTools(visitorId) {
6
- return [
4
+ import { createChoiceTools } from "./tools-choice.js";
5
+ import { createOverwriteTools, } from "./tools-overwrite.js";
6
+ function isOverwriteHooks(hooks) {
7
+ return !!hooks && typeof hooks.onOpenCoding === "function";
8
+ }
9
+ /** 账号/结构操作 tools;带 hooks 时另挂 choice;Ask 另挂覆写。 */
10
+ export function createAccountTools(visitorId, choiceHooks, options = {}) {
11
+ const withOverwrite = options.withOverwrite !== false;
12
+ const base = [
7
13
  ...createVisitorTools(visitorId),
8
14
  ...createDomainTools(visitorId),
9
15
  ...createDocumentTools(visitorId),
10
16
  ];
17
+ const withChoice = choiceHooks
18
+ ? [...base, ...createChoiceTools(visitorId, choiceHooks)]
19
+ : base;
20
+ if (withOverwrite && isOverwriteHooks(choiceHooks)) {
21
+ return [...withChoice, ...createOverwriteTools(visitorId, choiceHooks)];
22
+ }
23
+ return withChoice;
11
24
  }
12
25
  //# sourceMappingURL=tools-account.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools-account.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/tools-account.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,6CAA6C;AAC7C,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,OAAO;QACL,GAAG,kBAAkB,CAAC,SAAS,CAAC;QAChC,GAAG,iBAAiB,CAAC,SAAS,CAAC;QAC/B,GAAG,mBAAmB,CAAC,SAAS,CAAC;KAClC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"tools-account.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/tools-account.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAwB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EACL,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAO9B,SAAS,gBAAgB,CACvB,KAAkC;IAElC,OAAO,CAAC,CAAC,KAAK,IAAI,OAAQ,KAA4B,CAAC,YAAY,KAAK,UAAU,CAAC;AACrF,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,WAA6B,EAC7B,UAA+B,EAAE;IAEjC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,KAAK,CAAC;IACtD,MAAM,IAAI,GAAG;QACX,GAAG,kBAAkB,CAAC,SAAS,CAAC;QAChC,GAAG,iBAAiB,CAAC,SAAS,CAAC;QAC/B,GAAG,mBAAmB,CAAC,SAAS,CAAC;KAClC,CAAC;IACF,MAAM,UAAU,GAAG,WAAW;QAC5B,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACzD,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,aAAa,IAAI,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,oBAAoB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { Type } from "@earendil-works/pi-ai";
2
+ import { DEFAULT_CHOICE_TIMEOUT_MS, waitForUserChoice, } from "./choice-pending.js";
3
+ function asToolResult(payload) {
4
+ return {
5
+ content: [{ type: "text", text: JSON.stringify(payload, null, 2) }],
6
+ details: payload,
7
+ };
8
+ }
9
+ function normalizeOptions(raw) {
10
+ if (!Array.isArray(raw))
11
+ return [];
12
+ const out = [];
13
+ for (const item of raw) {
14
+ if (typeof item !== "string")
15
+ continue;
16
+ const t = item.trim();
17
+ if (t && !out.includes(t))
18
+ out.push(t);
19
+ }
20
+ return out;
21
+ }
22
+ /** 向用户展示选项并阻塞等待内容字符串选择(可自由输入) */
23
+ export function createChoiceTools(visitorId, hooks) {
24
+ return [
25
+ {
26
+ name: "ask_user_choice",
27
+ label: "请用户选择",
28
+ description: "向用户展示一张选择卡片:options 为内容字符串列表(你自填、不固定)。调用后会阻塞直到用户点选某项、自行输入一段文字、超时或取消。需要用户做二选一/多选一时必须用本工具,禁止只在口头上问。返回 JSON 含 status 与 choice(选中的内容字符串)。",
29
+ parameters: Type.Object({
30
+ title: Type.Optional(Type.String({ description: "卡片标题/问题" })),
31
+ options: Type.Array(Type.String({ description: "一个可点选项的文案" }), {
32
+ description: "至少 2 个选项文案",
33
+ minItems: 2,
34
+ }),
35
+ timeoutMs: Type.Optional(Type.Number({ description: "超时毫秒,默认 120000(2 分钟)" })),
36
+ }),
37
+ execute: async (_id, params) => {
38
+ const title = typeof params.title === "string"
39
+ ? params.title.trim()
40
+ : "请选择";
41
+ const options = normalizeOptions(params.options);
42
+ if (options.length < 2) {
43
+ throw new Error("options must contain at least 2 non-empty strings");
44
+ }
45
+ const timeoutRaw = params.timeoutMs;
46
+ const timeoutMs = typeof timeoutRaw === "number" && Number.isFinite(timeoutRaw)
47
+ ? timeoutRaw
48
+ : DEFAULT_CHOICE_TIMEOUT_MS;
49
+ const { requestId, promise } = waitForUserChoice({
50
+ visitorId,
51
+ timeoutMs,
52
+ signal: hooks.signal,
53
+ });
54
+ const expiresAt = new Date(Date.now() + timeoutMs).toISOString();
55
+ hooks.onChoiceCard({
56
+ requestId,
57
+ title: title || "请选择",
58
+ options,
59
+ expiresAt,
60
+ });
61
+ const result = await promise;
62
+ if (result.status === "timeout") {
63
+ hooks.onChoiceExpired?.(requestId);
64
+ }
65
+ return asToolResult(result);
66
+ },
67
+ },
68
+ ];
69
+ }
70
+ //# sourceMappingURL=tools-choice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-choice.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/tools-choice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { createCodingWriteTools } from "./tools-coding.js";
3
+ async function runGetWorking(params = {}) {
4
+ const tool = createCodingWriteTools({
5
+ documentId: "doc-1",
6
+ workingMarkdown: "# working\nhello",
7
+ baseMarkdown: "# base\nold",
8
+ }).find((t) => t.name === "get_working_document");
9
+ if (!tool)
10
+ throw new Error("get_working_document missing");
11
+ return tool.execute("call-1", params, undefined, undefined);
12
+ }
13
+ describe("get_working_document", () => {
14
+ it("returns both base and working by default", async () => {
15
+ const result = await runGetWorking();
16
+ const details = result.details;
17
+ expect(details.documentId).toBe("doc-1");
18
+ expect(details.source).toBe("request_body");
19
+ expect(details.workingMarkdown).toContain("working");
20
+ expect(details.baseMarkdown).toContain("base");
21
+ });
22
+ it("can return only working", async () => {
23
+ const result = await runGetWorking({ which: "working" });
24
+ const details = result.details;
25
+ expect(details.workingMarkdown).toBeDefined();
26
+ expect(details.baseMarkdown).toBeUndefined();
27
+ });
28
+ });
29
+ //# sourceMappingURL=tools-coding.get-working.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-coding.get-working.test.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/tools-coding.get-working.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,KAAK,UAAU,aAAa,CAAC,SAAkC,EAAE;IAC/D,MAAM,IAAI,GAAG,sBAAsB,CAAC;QAClC,UAAU,EAAE,OAAO;QACnB,eAAe,EAAE,kBAAkB;QACnC,YAAY,EAAE,aAAa;KAC5B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,sBAAsB,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAe,EAAE,SAAkB,EAAE,SAAkB,CAAC,CAAC;AACzF,CAAC;AAED,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAKtB,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAkC,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,aAAa,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}