@lemoncat7/dsh-knowledge 1.2.0 → 2.1.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 (104) hide show
  1. package/README.md +22 -2
  2. package/docs/architecture.md +30 -4
  3. package/docs/requirements.md +10 -0
  4. package/lib/api.d.ts.map +1 -1
  5. package/lib/api.js +194 -1
  6. package/lib/api.js.map +1 -1
  7. package/lib/atomic-file.d.ts +1 -1
  8. package/lib/atomic-file.d.ts.map +1 -1
  9. package/lib/atomic-file.js +0 -1
  10. package/lib/atomic-file.js.map +1 -1
  11. package/lib/client.d.ts.map +1 -1
  12. package/lib/client.js +48 -82
  13. package/lib/client.js.map +2 -2
  14. package/lib/content-safety.d.ts +12 -0
  15. package/lib/content-safety.d.ts.map +1 -0
  16. package/lib/content-safety.js +38 -0
  17. package/lib/content-safety.js.map +1 -0
  18. package/lib/domain.d.ts +13 -0
  19. package/lib/domain.d.ts.map +1 -1
  20. package/lib/domain.js.map +1 -1
  21. package/lib/extraction.d.ts.map +1 -1
  22. package/lib/extraction.js +8 -2
  23. package/lib/extraction.js.map +1 -1
  24. package/lib/index.d.ts +1 -0
  25. package/lib/index.d.ts.map +1 -1
  26. package/lib/index.js +6 -1
  27. package/lib/index.js.map +1 -1
  28. package/lib/local-provider.d.ts +24 -1
  29. package/lib/local-provider.d.ts.map +1 -1
  30. package/lib/local-provider.js +302 -2
  31. package/lib/local-provider.js.map +1 -1
  32. package/lib/management-proxy.d.ts.map +1 -1
  33. package/lib/management-proxy.js +22 -13
  34. package/lib/management-proxy.js.map +1 -1
  35. package/lib/note-reference-handle.d.ts +15 -0
  36. package/lib/note-reference-handle.d.ts.map +1 -0
  37. package/lib/note-reference-handle.js +54 -0
  38. package/lib/note-reference-handle.js.map +1 -0
  39. package/lib/note-reference-tools.d.ts +6 -0
  40. package/lib/note-reference-tools.d.ts.map +1 -0
  41. package/lib/note-reference-tools.js +119 -0
  42. package/lib/note-reference-tools.js.map +1 -0
  43. package/lib/note-tools.d.ts +6 -0
  44. package/lib/note-tools.d.ts.map +1 -0
  45. package/lib/note-tools.js +283 -0
  46. package/lib/note-tools.js.map +1 -0
  47. package/lib/notes/domain.d.ts +44 -0
  48. package/lib/notes/domain.d.ts.map +1 -0
  49. package/lib/notes/domain.js +38 -0
  50. package/lib/notes/domain.js.map +1 -0
  51. package/lib/notes/store.d.ts +39 -0
  52. package/lib/notes/store.d.ts.map +1 -0
  53. package/lib/notes/store.js +407 -0
  54. package/lib/notes/store.js.map +1 -0
  55. package/lib/provider.d.ts +17 -0
  56. package/lib/provider.d.ts.map +1 -1
  57. package/lib/remote-provider.d.ts +19 -0
  58. package/lib/remote-provider.d.ts.map +1 -1
  59. package/lib/remote-provider.js +139 -13
  60. package/lib/remote-provider.js.map +1 -1
  61. package/lib/runtime.d.ts +1 -0
  62. package/lib/runtime.d.ts.map +1 -1
  63. package/lib/runtime.js.map +1 -1
  64. package/lib/theme-bridge.d.ts +2 -2
  65. package/lib/theme-bridge.d.ts.map +1 -1
  66. package/lib/theme-bridge.js +24 -57
  67. package/lib/theme-bridge.js.map +1 -1
  68. package/lib/tool-authorization.d.ts +14 -0
  69. package/lib/tool-authorization.d.ts.map +1 -0
  70. package/lib/tool-authorization.js +124 -0
  71. package/lib/tool-authorization.js.map +1 -0
  72. package/lib/tool-input.d.ts +6 -0
  73. package/lib/tool-input.d.ts.map +1 -0
  74. package/lib/tool-input.js +27 -0
  75. package/lib/tool-input.js.map +1 -0
  76. package/lib/tools.d.ts +2 -1
  77. package/lib/tools.d.ts.map +1 -1
  78. package/lib/tools.js +29 -179
  79. package/lib/tools.js.map +1 -1
  80. package/lib/tracking.d.ts +29 -0
  81. package/lib/tracking.d.ts.map +1 -0
  82. package/lib/tracking.js +141 -0
  83. package/lib/tracking.js.map +1 -0
  84. package/lib/web-markdown-preview.d.ts.map +1 -1
  85. package/lib/web-markdown-preview.js +10 -0
  86. package/lib/web-markdown-preview.js.map +1 -1
  87. package/lib/web-note-editor.d.ts +44 -0
  88. package/lib/web-note-editor.d.ts.map +1 -0
  89. package/lib/web-note-editor.js +118 -0
  90. package/lib/web-note-editor.js.map +1 -0
  91. package/lib/web-workspace-effects.d.ts +13 -0
  92. package/lib/web-workspace-effects.d.ts.map +1 -0
  93. package/lib/web-workspace-effects.js +340 -0
  94. package/lib/web-workspace-effects.js.map +1 -0
  95. package/lib/web.d.ts.map +1 -1
  96. package/lib/web.js +3 -1
  97. package/lib/web.js.map +1 -1
  98. package/package.json +12 -1
  99. package/web/app.js +1670 -93
  100. package/web/index.html +2 -0
  101. package/web/markdown-preview.js +8 -8
  102. package/web/note-editor.js +220 -0
  103. package/web/styles.css +845 -182
  104. package/web/workspace-effects.js +16 -0
@@ -0,0 +1,27 @@
1
+ export function requireToolAgent(exec, family = 'knowledge tools') {
2
+ if (exec.agent === undefined)
3
+ throw new Error(`${family} require a calling DSH agent`);
4
+ return exec.agent;
5
+ }
6
+ export function toolRecord(value) {
7
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
8
+ throw new Error('tool arguments must be an object');
9
+ return value;
10
+ }
11
+ export function requiredToolString(value, name, maxLength) {
12
+ if (typeof value !== 'string' || value.trim().length === 0)
13
+ throw new Error(`${name} must be a non-empty string`);
14
+ const result = value.trim();
15
+ if (result.length > maxLength)
16
+ throw new Error(`${name} must contain at most ${maxLength} characters`);
17
+ return result;
18
+ }
19
+ export function optionalToolInteger(value, name, min, max) {
20
+ if (value === undefined)
21
+ return undefined;
22
+ if (!Number.isInteger(value) || Number(value) < min || Number(value) > max) {
23
+ throw new Error(`${name} must be an integer between ${min} and ${max}`);
24
+ }
25
+ return Number(value);
26
+ }
27
+ //# sourceMappingURL=tool-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-input.js","sourceRoot":"","sources":["../src/tool-input.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,IAAwB,EAAE,MAAM,GAAG,iBAAiB;IACnF,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,8BAA8B,CAAC,CAAA;IACtF,OAAO,IAAI,CAAC,KAAK,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IAC5H,OAAO,KAAgC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc,EAAE,IAAY,EAAE,SAAiB;IAChF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAA;IACjH,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,yBAAyB,SAAS,aAAa,CAAC,CAAA;IACtG,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW;IACxF,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,+BAA+B,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAA;IACzE,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC"}
package/lib/tools.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { KnowledgeProvider } from './provider.js';
2
2
  import { KnowledgeHandleCodec } from './retrieval.js';
3
3
  import type { RuntimeContextLike } from './runtime.js';
4
+ import type { KnowledgeNoteHandleCodec } from './note-reference-handle.js';
4
5
  /** Register scoped retrieval tools and explicit knowledge-base management tools. */
5
- export declare function registerKnowledgeTools(ctx: RuntimeContextLike, provider: KnowledgeProvider, codec: KnowledgeHandleCodec): void;
6
+ export declare function registerKnowledgeTools(ctx: RuntimeContextLike, provider: KnowledgeProvider, codec: KnowledgeHandleCodec, noteCodec: KnowledgeNoteHandleCodec): void;
6
7
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAWtD,OAAO,EAIL,oBAAoB,EAOrB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAa,kBAAkB,EAA0C,MAAM,cAAc,CAAA;AAOzG,oFAAoF;AACpF,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,kBAAkB,EACvB,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,oBAAoB,GAC1B,IAAI,CAMN"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAOtD,OAAO,EAIL,oBAAoB,EAMrB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAsB,kBAAkB,EAA0C,MAAM,cAAc,CAAA;AAGlH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAO1E,oFAAoF;AACpF,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,kBAAkB,EACvB,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,oBAAoB,EAC3B,SAAS,EAAE,wBAAwB,GAClC,IAAI,CAQN"}
package/lib/tools.js CHANGED
@@ -1,141 +1,21 @@
1
- import { isKnowledgeType, normalizeTags, } from './domain.js';
2
- import { formatKnowledgeEntry, formatKnowledgeBaseMatches, formatSearchResults, readMountedKnowledge, resolveKnowledgeMounts, resolveRecallMounts, searchMountedKnowledgeBases, searchMountedKnowledge, selectMounts, } from './retrieval.js';
1
+ import { normalizeTags, } from './domain.js';
2
+ import { formatKnowledgeEntry, formatKnowledgeBaseMatches, formatSearchResults, readMountedKnowledge, resolveRecallMounts, searchMountedKnowledgeBases, searchMountedKnowledge, selectMounts, } from './retrieval.js';
3
+ import { assertExplicitKnowledgeBaseManagementRequest } from './tool-authorization.js';
4
+ import { registerKnowledgeNoteReferenceTools } from './note-reference-tools.js';
5
+ import { registerKnowledgeNoteTools } from './note-tools.js';
3
6
  const textOutput = {
4
7
  schema: { type: 'string' },
5
8
  render: (_args, value) => [{ type: 'text', text: String(value) }],
6
9
  };
7
10
  /** Register scoped retrieval tools and explicit knowledge-base management tools. */
8
- export function registerKnowledgeTools(ctx, provider, codec) {
11
+ export function registerKnowledgeTools(ctx, provider, codec, noteCodec) {
9
12
  ctx.tools.register(searchKnowledgeBaseTool(provider));
10
13
  ctx.tools.register(searchTool(provider, codec));
11
14
  ctx.tools.register(readTool(provider, codec));
12
- ctx.tools.register(createKnowledgeBaseTool(provider));
13
- ctx.tools.register(updateKnowledgeBaseTool(provider));
14
- }
15
- function writeTool(provider, codec) {
16
- return {
17
- name: 'knowledge_write',
18
- description: 'Use ONLY when the current direct user message explicitly asks to save, remember, record, or write content into a knowledge base. Normal durable findings are handled automatically after the answer and MUST NOT trigger this tool. Persist explicit requests as topic documents in a writable mounted base. Search first and pass the matching document handle; send only new Markdown material. Never mention this tool, its result, automatic write-back, or any write refusal in the assistant answer.',
19
- parameters: {
20
- type: 'object',
21
- additionalProperties: false,
22
- properties: {
23
- handle: { type: 'string', description: 'For an update: exact signed handle returned by knowledge_search.' },
24
- base: { type: 'string', description: 'For a new document: exact writable mounted knowledge-base id or name. Optional only when exactly one writable base is mounted.' },
25
- title: { type: 'string', description: 'Stable subject document title, not an individual fact title. For a GitHub repository prefer owner/repository. Required only for a genuinely new document.' },
26
- content: { type: 'string', description: 'Only the NEW Markdown sections or paragraphs for the topic document. Group related findings, and do not repeat existing content or include session narration.' },
27
- type: { type: 'string', enum: ['preference', 'fact', 'decision', 'procedure', 'lesson'], description: 'Knowledge type. Required for new knowledge; existing type is preserved on update.' },
28
- tags: { type: 'array', items: { type: 'string' }, maxItems: 32 },
29
- scope: { type: 'string', enum: ['global', 'project'], description: 'Scope for new knowledge. Project uses the current workspace; default is global.' },
30
- },
31
- required: ['content'],
32
- },
33
- output: textOutput,
34
- isConcurrencySafe: () => false,
35
- async execute(raw, exec) {
36
- const agent = requireAgent(exec);
37
- if (!currentUserExplicitlyRequestsKnowledgeWrite(agent)) {
38
- return JSON.stringify({
39
- outcome: 'not-needed',
40
- instruction: 'Continue the substantive answer silently. Do not mention knowledge_write, this result, automatic write-back, persistence, or any refusal in the assistant answer.',
41
- });
42
- }
43
- const args = asRecord(raw);
44
- const content = requireNonEmptyString(args.content, 'content', 50_000);
45
- const handle = optionalString(args.handle, 'handle', 4096);
46
- const allMounts = await resolveKnowledgeMounts(provider, agent, exec.signal);
47
- const writableMounts = allMounts.filter(mount => mount.writeMode !== 'none');
48
- if (writableMounts.length === 0)
49
- throw new Error('no writable knowledge base is mounted in this session');
50
- let mount;
51
- let targetId;
52
- let current = undefined;
53
- if (handle !== undefined) {
54
- const resolved = await readMountedKnowledge(provider, agent, handle, codec, exec.signal);
55
- mount = resolved.mount;
56
- current = resolved.entry;
57
- targetId = resolved.entry.id;
58
- if (mount.writeMode === 'none')
59
- throw new Error('the knowledge base addressed by this handle is mounted read-only');
60
- }
61
- else {
62
- mount = selectWritableMount(writableMounts, optionalString(args.base, 'base', 200));
63
- }
64
- const scope = current?.scope ?? parseWriteScope(args.scope, agent.session.header.cwd);
65
- const type = current?.type ?? parseWriteType(args.type);
66
- const title = current?.title ?? requireNonEmptyString(args.title, 'title', 200);
67
- const turn = currentTurn(agent);
68
- const draft = {
69
- knowledgeBaseId: mount.knowledgeBaseId,
70
- title,
71
- body: content,
72
- type,
73
- tags: normalizeTags([
74
- ...mount.base.defaultTags,
75
- ...mount.includeTags,
76
- ...optionalStringArray(args.tags, 'tags', 32, 100),
77
- ]).filter(tag => !mount.excludeTags.includes(tag)),
78
- scope,
79
- confidence: .95,
80
- source: {
81
- sessionId: agent.session.id,
82
- ...turn === undefined ? {} : { turn },
83
- },
84
- };
85
- const proposal = {
86
- action: targetId === undefined ? 'create' : 'update',
87
- ...targetId === undefined ? {} : { targetId },
88
- draft,
89
- reason: 'Persisted through the scoped knowledge_write tool.',
90
- };
91
- const sourceKey = `knowledge-write:${agent.session.id}`;
92
- if (mount.writeMode === 'audit') {
93
- const candidate = await provider.propose(proposal, sourceKey, exec.signal);
94
- return JSON.stringify({
95
- storage: provider.mode,
96
- outcome: 'pending-review',
97
- knowledgeBase: { id: mount.knowledgeBaseId, name: mount.base.name },
98
- candidateId: candidate.id,
99
- }, null, 2);
100
- }
101
- const result = await provider.writeDirect(proposal, sourceKey, exec.signal);
102
- return JSON.stringify({
103
- storage: provider.mode,
104
- outcome: result.outcome,
105
- knowledgeBase: { id: mount.knowledgeBaseId, name: mount.base.name },
106
- ...result.entry === undefined ? {} : { document: { id: result.entry.id, title: result.entry.title } },
107
- ...result.candidate?.status === 'pending' ? { candidateId: result.candidate.id } : {},
108
- }, null, 2);
109
- },
110
- };
111
- }
112
- function currentUserExplicitlyRequestsKnowledgeWrite(agent) {
113
- let turnStart = -1;
114
- for (let index = agent.session.events.length - 1; index >= 0; index -= 1) {
115
- if (agent.session.events[index]?.type === 'turn/start') {
116
- turnStart = index;
117
- break;
118
- }
119
- }
120
- const text = agent.session.events.slice(turnStart + 1)
121
- .filter(event => event.type === 'user/message')
122
- .map(event => event.data)
123
- .filter(message => message.source?.kind === 'user')
124
- .flatMap(message => message.content ?? [])
125
- .filter(block => block.type === 'text' && typeof block.text === 'string')
126
- .map(block => block.text)
127
- .join('\n')
128
- .normalize('NFKC')
129
- .toLocaleLowerCase('zh-CN');
130
- if (text.length === 0)
131
- return false;
132
- if (/(?:不要|别|无需|不需要|禁止|取消).{0,12}(?:写入|回写|存入|保存|收录|记录|记住|加入|添加|沉淀).{0,12}知识库/iu.test(text))
133
- return false;
134
- if (/(?:do\s+not|don't|never|no\s+need\s+to).{0,24}(?:write|save|store|record|remember|add|persist).{0,24}(?:knowledge|memory)/iu.test(text))
135
- return false;
136
- return /(?:请|麻烦|帮我|把|将).{0,80}(?:写入|回写|存入|保存到|保存进|收录到|记录到|记到|加入|添加到|沉淀到).{0,40}知识库/iu.test(text)
137
- || /(?:请|麻烦|帮我).{0,20}(?:记住|记下来|记录下来|保存下来)(?:这|该|上述|以上|当前|刚才|它|内容|结论|信息)/iu.test(text)
138
- || /(?:please\s+)?(?:write|save|store|record|remember|add|persist).{0,60}(?:to|in|into)?\s*(?:the\s+)?(?:knowledge\s*(?:base|store)|memory)/iu.test(text);
15
+ ctx.tools.register(createKnowledgeBaseTool(provider, ctx.llm));
16
+ ctx.tools.register(updateKnowledgeBaseTool(provider, ctx.llm));
17
+ registerKnowledgeNoteTools(ctx, provider, noteCodec);
18
+ registerKnowledgeNoteReferenceTools(ctx, provider, codec, noteCodec);
139
19
  }
140
20
  function searchKnowledgeBaseTool(provider) {
141
21
  return {
@@ -164,7 +44,7 @@ function searchKnowledgeBaseTool(provider) {
164
44
  },
165
45
  };
166
46
  }
167
- function createKnowledgeBaseTool(provider) {
47
+ function createKnowledgeBaseTool(provider, llm) {
168
48
  return {
169
49
  name: 'knowledge_base_create',
170
50
  description: 'Create a knowledge base only when the user explicitly asks. The tool always uses the currently active knowledge provider and reports whether it created the base in local or remote storage; it never guesses, falls back, copies, or synchronizes. Creating a base does not mount it to the current project or session.',
@@ -184,13 +64,17 @@ function createKnowledgeBaseTool(provider) {
184
64
  },
185
65
  output: textOutput,
186
66
  async execute(raw, exec) {
187
- requireAgent(exec);
67
+ const agent = requireAgent(exec);
68
+ assertExplicitKnowledgeBaseManagementRequest(agent, 'create');
188
69
  const args = asRecord(raw);
189
70
  const writebackProvider = optionalString(args.writebackProvider, 'writebackProvider', 100);
190
71
  const writebackModel = optionalString(args.writebackModel, 'writebackModel', 200);
191
72
  if ((writebackProvider === undefined) !== (writebackModel === undefined)) {
192
73
  throw new Error('writebackProvider and writebackModel must be configured together');
193
74
  }
75
+ if (writebackProvider !== undefined && writebackModel !== undefined) {
76
+ await validateWritebackRoute(llm, writebackProvider, writebackModel, exec.signal);
77
+ }
194
78
  const draft = {
195
79
  name: requireNonEmptyString(args.name, 'name', 100),
196
80
  description: optionalTrimmedString(args.description, 'description', 2000) ?? '',
@@ -205,7 +89,7 @@ function createKnowledgeBaseTool(provider) {
205
89
  },
206
90
  };
207
91
  }
208
- function updateKnowledgeBaseTool(provider) {
92
+ function updateKnowledgeBaseTool(provider, llm) {
209
93
  return {
210
94
  name: 'knowledge_base_update',
211
95
  description: 'Modify an existing knowledge base only when the user explicitly asks. Identify it by exact id or name. The tool always updates the currently active local or remote provider and reports the actual destination; it never moves or synchronizes the base and does not change project/session mounts.',
@@ -227,7 +111,8 @@ function updateKnowledgeBaseTool(provider) {
227
111
  },
228
112
  output: textOutput,
229
113
  async execute(raw, exec) {
230
- requireAgent(exec);
114
+ const agent = requireAgent(exec);
115
+ assertExplicitKnowledgeBaseManagementRequest(agent, 'update');
231
116
  const args = asRecord(raw);
232
117
  const requestedBase = requireNonEmptyString(args.base, 'base', 200);
233
118
  const storage = provider.mode;
@@ -261,6 +146,7 @@ function updateKnowledgeBaseTool(provider) {
261
146
  patch.writebackModel = null;
262
147
  }
263
148
  else if (writebackProvider !== undefined && writebackModel !== undefined) {
149
+ await validateWritebackRoute(llm, writebackProvider, writebackModel, exec.signal);
264
150
  patch.writebackProvider = writebackProvider;
265
151
  patch.writebackModel = writebackModel;
266
152
  }
@@ -330,36 +216,6 @@ function readTool(provider, codec) {
330
216
  },
331
217
  };
332
218
  }
333
- function selectWritableMount(mounts, requested) {
334
- if (requested === undefined) {
335
- if (mounts.length === 1)
336
- return mounts[0];
337
- throw new Error(`multiple writable knowledge bases are mounted (${mounts.map(mount => mount.base.name).join(', ')}); specify one with base`);
338
- }
339
- const folded = requested.toLocaleLowerCase('zh-CN');
340
- const matches = mounts.filter(mount => mount.knowledgeBaseId === requested
341
- || mount.base.name.toLocaleLowerCase('zh-CN') === folded);
342
- if (matches.length === 0)
343
- throw new Error(`knowledge base ${JSON.stringify(requested)} is not mounted for write-back`);
344
- if (matches.length > 1)
345
- throw new Error(`knowledge base ${JSON.stringify(requested)} is ambiguous; use its exact id`);
346
- return matches[0];
347
- }
348
- function parseWriteScope(value, projectId) {
349
- if (value === undefined || value === 'global')
350
- return { kind: 'global' };
351
- if (value !== 'project')
352
- throw new Error('scope must be global or project');
353
- if (projectId === undefined || projectId.trim().length === 0) {
354
- throw new Error('project scope requires a current workspace');
355
- }
356
- return { kind: 'project', id: projectId };
357
- }
358
- function parseWriteType(value) {
359
- if (!isKnowledgeType(value))
360
- throw new Error('type is required for new knowledge and must be preference, fact, decision, procedure, or lesson');
361
- return value;
362
- }
363
219
  function parseWritebackPolicy(value) {
364
220
  if (value === undefined)
365
221
  return undefined;
@@ -368,14 +224,6 @@ function parseWritebackPolicy(value) {
368
224
  }
369
225
  return value;
370
226
  }
371
- function currentTurn(agent) {
372
- for (let index = agent.session.events.length - 1; index >= 0; index -= 1) {
373
- const event = agent.session.events[index];
374
- if (event?.type === 'turn/start' && typeof event.data.turn === 'number')
375
- return event.data.turn;
376
- }
377
- return undefined;
378
- }
379
227
  async function resolveKnowledgeBase(provider, requested, signal) {
380
228
  const folded = requested.toLocaleLowerCase('zh-CN');
381
229
  const matches = (await provider.listKnowledgeBases(signal)).filter(base => base.id === requested
@@ -386,6 +234,15 @@ async function resolveKnowledgeBase(provider, requested, signal) {
386
234
  throw new Error(`knowledge base ${JSON.stringify(requested)} is ambiguous; use its exact id`);
387
235
  return matches[0];
388
236
  }
237
+ async function validateWritebackRoute(llm, provider, model, signal) {
238
+ try {
239
+ await llm.resolveModelInfo(provider, model, signal);
240
+ }
241
+ catch (error) {
242
+ const detail = error instanceof Error ? error.message : String(error);
243
+ throw new Error(`write-back model ${provider}/${model} is unavailable: ${detail}`);
244
+ }
245
+ }
389
246
  function formatKnowledgeBaseMutation(storage, operation, base) {
390
247
  return JSON.stringify({
391
248
  storage,
@@ -438,13 +295,6 @@ function optionalTrimmedString(value, name, maxLength) {
438
295
  throw new Error(`${name} must contain at most ${maxLength} characters`);
439
296
  return result;
440
297
  }
441
- function optionalBoolean(value, name) {
442
- if (value === undefined)
443
- return undefined;
444
- if (typeof value !== 'boolean')
445
- throw new Error(`${name} must be a boolean`);
446
- return value;
447
- }
448
298
  function optionalStringArray(value, name, maxItems, maxLength) {
449
299
  if (value === undefined)
450
300
  return [];
package/lib/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { KnowledgeProvider } from './provider.js';
2
+ import type { AgentLike } from './runtime.js';
3
+ export declare const KNOWLEDGE_TRACKING_SERVICE = "dshKnowledgeTracking";
4
+ export interface KnowledgeTrackingInput {
5
+ id: string;
6
+ subject: string;
7
+ event: string;
8
+ evidence: string;
9
+ source: string;
10
+ reference?: string;
11
+ at: number;
12
+ }
13
+ export interface KnowledgeTrackingResult {
14
+ storage: 'knowledge' | 'local';
15
+ outcome: 'written' | 'pending-review' | 'not-mounted' | 'not-writable' | 'ambiguous';
16
+ knowledgeBaseId?: string;
17
+ }
18
+ export interface KnowledgeTrackingSource {
19
+ kind: 'knowledge';
20
+ label: string;
21
+ detail: string;
22
+ token: string;
23
+ }
24
+ export interface KnowledgeTrackingService {
25
+ record(agent: AgentLike, input: KnowledgeTrackingInput, signal?: AbortSignal): Promise<KnowledgeTrackingResult>;
26
+ list(agent: AgentLike, query?: string, limit?: number, signal?: AbortSignal): Promise<KnowledgeTrackingSource[]>;
27
+ }
28
+ export declare function createKnowledgeTrackingService(provider: KnowledgeProvider): KnowledgeTrackingService;
29
+ //# sourceMappingURL=tracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking.d.ts","sourceRoot":"","sources":["../src/tracking.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,eAAO,MAAM,0BAA0B,yBAAyB,CAAA;AAEhE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAA;IAC9B,OAAO,EAAE,SAAS,GAAG,gBAAgB,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,CAAA;IACpF,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAC/G,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAA;CACjH;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,wBAAwB,CAmEpG"}
@@ -0,0 +1,141 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { containsSensitiveContent } from './content-safety.js';
3
+ import { normalizeTags } from './domain.js';
4
+ import { resolveKnowledgeMounts } from './retrieval.js';
5
+ export const KNOWLEDGE_TRACKING_SERVICE = 'dshKnowledgeTracking';
6
+ export function createKnowledgeTrackingService(provider) {
7
+ return {
8
+ async record(agent, input, signal) {
9
+ const mounts = await resolveKnowledgeMounts(provider, agent, signal);
10
+ const selected = selectMount(mounts, input.reference);
11
+ if (selected.outcome !== undefined)
12
+ return { storage: 'local', outcome: selected.outcome };
13
+ const mount = selected.mount;
14
+ if (mount === undefined)
15
+ return { storage: 'local', outcome: 'not-mounted' };
16
+ if (mount.writeMode === 'none')
17
+ return { storage: 'local', outcome: 'not-writable', knowledgeBaseId: mount.knowledgeBaseId };
18
+ const requestedTitle = referenceTitle(input.reference);
19
+ const existing = await findEntry(provider, agent, mount, requestedTitle ?? input.subject, signal);
20
+ const title = existing?.title ?? requestedTitle ?? compact(`伙伴关注 · ${input.subject}`, 200);
21
+ const content = observationMarkdown(input);
22
+ const proposal = {
23
+ action: existing === undefined ? 'create' : 'update',
24
+ ...(existing === undefined ? {} : { targetId: existing.id }),
25
+ draft: {
26
+ knowledgeBaseId: mount.knowledgeBaseId,
27
+ title,
28
+ body: content,
29
+ type: existing?.type ?? 'fact',
30
+ tags: normalizeTags([
31
+ ...existing?.tags ?? [], ...mount.base.defaultTags, ...mount.includeTags, 'partner-observation',
32
+ ]).filter(tag => !mount.excludeTags.includes(tag)),
33
+ scope: existing?.scope ?? (agent.session.header.cwd ? { kind: 'project', id: agent.session.header.cwd } : { kind: 'global' }),
34
+ confidence: existing?.confidence ?? .9,
35
+ source: { sessionId: agent.session.id, evidence: 'verified' },
36
+ },
37
+ reason: `伙伴挂念出现了经过校验的新变化:${compact(input.event, 240)}`,
38
+ };
39
+ const sourceKey = `partner-observation:${input.id}:${createHash('sha256').update(content).digest('hex').slice(0, 24)}`;
40
+ if (mount.writeMode === 'audit' || containsSensitiveContent(`${title}\n${content}`)) {
41
+ await provider.propose(proposal, sourceKey, signal);
42
+ return { storage: 'knowledge', outcome: 'pending-review', knowledgeBaseId: mount.knowledgeBaseId };
43
+ }
44
+ await provider.writeDirect(proposal, sourceKey, signal);
45
+ return { storage: 'knowledge', outcome: 'written', knowledgeBaseId: mount.knowledgeBaseId };
46
+ },
47
+ async list(agent, query = '', limit = 20, signal) {
48
+ const boundedLimit = Math.max(1, Math.min(Math.trunc(limit), 40));
49
+ const mounts = (await resolveKnowledgeMounts(provider, agent, signal)).filter(item => item.enabled && item.recallEnabled);
50
+ if (mounts.length === 0)
51
+ return [];
52
+ const foldedQuery = query.trim().replace(/^@(?:知识库\[)?/u, '').toLocaleLowerCase('zh-CN');
53
+ const batches = await Promise.all(mounts.map(async (mount) => {
54
+ const documents = await provider.listDocuments(mount.knowledgeBaseId, foldedQuery || undefined, signal);
55
+ return documents.flatMap(document => {
56
+ const baseReference = referenceBase(mount);
57
+ const documentReference = document.title.trim();
58
+ if (!baseReference || !documentReference || baseReference.includes(']') || documentReference.includes(']'))
59
+ return [];
60
+ const label = `${mount.base.name} / ${document.title}`;
61
+ const score = sourceMatchScore(`${mount.base.name} ${mount.knowledgeBaseId} ${document.title} ${document.relPath}`, foldedQuery);
62
+ if (score < 0)
63
+ return [];
64
+ return [{
65
+ kind: 'knowledge',
66
+ label,
67
+ detail: `已挂载知识文档 · ${document.entryCount} 条知识`,
68
+ token: `@知识库[${baseReference}/${documentReference}]`,
69
+ score,
70
+ }];
71
+ });
72
+ }));
73
+ return batches.flat()
74
+ .sort((left, right) => right.score - left.score || left.label.localeCompare(right.label, 'zh-CN'))
75
+ .slice(0, boundedLimit)
76
+ .map(({ score: _score, ...source }) => source);
77
+ },
78
+ };
79
+ }
80
+ function referenceBase(mount) {
81
+ const name = mount.base.name.trim();
82
+ return name && !name.includes('/') ? name : mount.knowledgeBaseId;
83
+ }
84
+ function sourceMatchScore(value, query) {
85
+ if (!query)
86
+ return 0;
87
+ const folded = value.toLocaleLowerCase('zh-CN');
88
+ const index = folded.indexOf(query);
89
+ return index < 0 ? -1 : (index === 0 ? 40 : 20) - index * .01;
90
+ }
91
+ function selectMount(mounts, reference) {
92
+ const writable = mounts.filter(item => item.enabled);
93
+ if (reference) {
94
+ const base = reference.split('/')[0]?.trim().toLocaleLowerCase('zh-CN');
95
+ const matches = writable.filter(item => item.knowledgeBaseId.toLocaleLowerCase('zh-CN') === base || item.base.name.toLocaleLowerCase('zh-CN') === base);
96
+ if (matches.length === 0)
97
+ return { outcome: 'not-mounted' };
98
+ if (matches.length > 1)
99
+ return { outcome: 'ambiguous' };
100
+ return { mount: matches[0] };
101
+ }
102
+ const candidates = writable.filter(item => item.writeMode !== 'none');
103
+ if (candidates.length === 0)
104
+ return { outcome: writable.length > 0 ? 'not-writable' : 'not-mounted' };
105
+ if (candidates.length > 1)
106
+ return { outcome: 'ambiguous' };
107
+ return { mount: candidates[0] };
108
+ }
109
+ async function findEntry(provider, agent, mount, title, signal) {
110
+ const hits = await provider.search({
111
+ text: title,
112
+ ...(agent.session.header.cwd ? { projectId: agent.session.header.cwd } : {}),
113
+ knowledgeBaseIds: [mount.knowledgeBaseId],
114
+ ...mount.includeTags.length > 0 ? { includeTags: mount.includeTags } : {},
115
+ ...mount.excludeTags.length > 0 ? { excludeTags: mount.excludeTags } : {},
116
+ limit: 12,
117
+ }, signal);
118
+ const folded = title.trim().toLocaleLowerCase('zh-CN');
119
+ return hits.map(item => item.entry).find(item => item.status === 'active' && item.documentState === 'open' && item.title.trim().toLocaleLowerCase('zh-CN') === folded);
120
+ }
121
+ function referenceTitle(reference) {
122
+ const index = reference?.indexOf('/') ?? -1;
123
+ const value = index < 0 ? '' : reference?.slice(index + 1).trim() ?? '';
124
+ return value || undefined;
125
+ }
126
+ function observationMarkdown(input) {
127
+ const date = new Date(input.at).toISOString();
128
+ return [
129
+ `## 伙伴观察 · ${date}`,
130
+ '',
131
+ `- 挂念:${compact(input.subject, 300)}`,
132
+ `- 新变化:${compact(input.event, 800)}`,
133
+ input.evidence ? `- 依据:${compact(input.evidence, 2_000)}` : '',
134
+ input.source ? `- 来源:${compact(input.source, 500)}` : '',
135
+ ].filter(Boolean).join('\n');
136
+ }
137
+ function compact(value, max) {
138
+ const text = value.replace(/\s+/g, ' ').trim();
139
+ return text.length <= max ? text : `${text.slice(0, max - 1)}…`;
140
+ }
141
+ //# sourceMappingURL=tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../src/tracking.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"web-markdown-preview.d.ts","sourceRoot":"","sources":["../src/web-markdown-preview.ts"],"names":[],"mappings":"AAQA,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAevD"}
1
+ {"version":3,"file":"web-markdown-preview.d.ts","sourceRoot":"","sources":["../src/web-markdown-preview.ts"],"names":[],"mappings":"AAWA,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuBvD"}
@@ -4,6 +4,8 @@ marked.use({
4
4
  gfm: true,
5
5
  breaks: false,
6
6
  });
7
+ const SAFE_LINK_PATTERN = /^(?:(?:https?|mailto|tel):|note:\/\/note_[a-f0-9]{32}$|[^a-z]|[a-z+.-]+(?:[^a-z+.-:]|$))/i;
8
+ const NOTE_LINK_PATTERN = /^note:\/\/(note_[a-f0-9]{32})$/;
7
9
  /** Render knowledge Markdown for the management console without trusting document HTML. */
8
10
  export function renderMarkdown(markdown) {
9
11
  const rendered = marked.parse(markdown, { async: false });
@@ -12,10 +14,18 @@ export function renderMarkdown(markdown) {
12
14
  FORBID_ATTR: ['style'],
13
15
  RETURN_TRUSTED_TYPE: false,
14
16
  USE_PROFILES: { html: true },
17
+ ALLOWED_URI_REGEXP: SAFE_LINK_PATTERN,
15
18
  });
16
19
  const template = document.createElement('template');
17
20
  template.innerHTML = sanitized;
18
21
  for (const link of template.content.querySelectorAll('a')) {
22
+ const note = NOTE_LINK_PATTERN.exec(link.getAttribute('href') ?? '');
23
+ if (note?.[1]) {
24
+ link.removeAttribute('href');
25
+ link.dataset.noteId = note[1];
26
+ link.classList.add('note-reference');
27
+ continue;
28
+ }
19
29
  link.target = '_blank';
20
30
  link.rel = 'noopener noreferrer';
21
31
  }