@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.
- package/README.md +22 -2
- package/docs/architecture.md +30 -4
- package/docs/requirements.md +10 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +194 -1
- package/lib/api.js.map +1 -1
- package/lib/atomic-file.d.ts +1 -1
- package/lib/atomic-file.d.ts.map +1 -1
- package/lib/atomic-file.js +0 -1
- package/lib/atomic-file.js.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +48 -82
- package/lib/client.js.map +2 -2
- package/lib/content-safety.d.ts +12 -0
- package/lib/content-safety.d.ts.map +1 -0
- package/lib/content-safety.js +38 -0
- package/lib/content-safety.js.map +1 -0
- package/lib/domain.d.ts +13 -0
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js.map +1 -1
- package/lib/extraction.d.ts.map +1 -1
- package/lib/extraction.js +8 -2
- package/lib/extraction.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +6 -1
- package/lib/index.js.map +1 -1
- package/lib/local-provider.d.ts +24 -1
- package/lib/local-provider.d.ts.map +1 -1
- package/lib/local-provider.js +302 -2
- package/lib/local-provider.js.map +1 -1
- package/lib/management-proxy.d.ts.map +1 -1
- package/lib/management-proxy.js +22 -13
- package/lib/management-proxy.js.map +1 -1
- package/lib/note-reference-handle.d.ts +15 -0
- package/lib/note-reference-handle.d.ts.map +1 -0
- package/lib/note-reference-handle.js +54 -0
- package/lib/note-reference-handle.js.map +1 -0
- package/lib/note-reference-tools.d.ts +6 -0
- package/lib/note-reference-tools.d.ts.map +1 -0
- package/lib/note-reference-tools.js +119 -0
- package/lib/note-reference-tools.js.map +1 -0
- package/lib/note-tools.d.ts +6 -0
- package/lib/note-tools.d.ts.map +1 -0
- package/lib/note-tools.js +283 -0
- package/lib/note-tools.js.map +1 -0
- package/lib/notes/domain.d.ts +44 -0
- package/lib/notes/domain.d.ts.map +1 -0
- package/lib/notes/domain.js +38 -0
- package/lib/notes/domain.js.map +1 -0
- package/lib/notes/store.d.ts +39 -0
- package/lib/notes/store.d.ts.map +1 -0
- package/lib/notes/store.js +407 -0
- package/lib/notes/store.js.map +1 -0
- package/lib/provider.d.ts +17 -0
- package/lib/provider.d.ts.map +1 -1
- package/lib/remote-provider.d.ts +19 -0
- package/lib/remote-provider.d.ts.map +1 -1
- package/lib/remote-provider.js +139 -13
- package/lib/remote-provider.js.map +1 -1
- package/lib/runtime.d.ts +1 -0
- package/lib/runtime.d.ts.map +1 -1
- package/lib/runtime.js.map +1 -1
- package/lib/theme-bridge.d.ts +2 -2
- package/lib/theme-bridge.d.ts.map +1 -1
- package/lib/theme-bridge.js +24 -57
- package/lib/theme-bridge.js.map +1 -1
- package/lib/tool-authorization.d.ts +14 -0
- package/lib/tool-authorization.d.ts.map +1 -0
- package/lib/tool-authorization.js +124 -0
- package/lib/tool-authorization.js.map +1 -0
- package/lib/tool-input.d.ts +6 -0
- package/lib/tool-input.d.ts.map +1 -0
- package/lib/tool-input.js +27 -0
- package/lib/tool-input.js.map +1 -0
- package/lib/tools.d.ts +2 -1
- package/lib/tools.d.ts.map +1 -1
- package/lib/tools.js +29 -179
- package/lib/tools.js.map +1 -1
- package/lib/tracking.d.ts +29 -0
- package/lib/tracking.d.ts.map +1 -0
- package/lib/tracking.js +141 -0
- package/lib/tracking.js.map +1 -0
- package/lib/web-markdown-preview.d.ts.map +1 -1
- package/lib/web-markdown-preview.js +10 -0
- package/lib/web-markdown-preview.js.map +1 -1
- package/lib/web-note-editor.d.ts +44 -0
- package/lib/web-note-editor.d.ts.map +1 -0
- package/lib/web-note-editor.js +118 -0
- package/lib/web-note-editor.js.map +1 -0
- package/lib/web-workspace-effects.d.ts +13 -0
- package/lib/web-workspace-effects.d.ts.map +1 -0
- package/lib/web-workspace-effects.js +340 -0
- package/lib/web-workspace-effects.js.map +1 -0
- package/lib/web.d.ts.map +1 -1
- package/lib/web.js +3 -1
- package/lib/web.js.map +1 -1
- package/package.json +12 -1
- package/web/app.js +1670 -93
- package/web/index.html +2 -0
- package/web/markdown-preview.js +8 -8
- package/web/note-editor.js +220 -0
- package/web/styles.css +845 -182
- 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
|
package/lib/tools.d.ts.map
CHANGED
|
@@ -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;
|
|
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 {
|
|
2
|
-
import { formatKnowledgeEntry, formatKnowledgeBaseMatches, formatSearchResults, readMountedKnowledge,
|
|
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
|
-
|
|
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":"AACA,OAAO,EACL,aAAa,GAId,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EAEnB,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,sBAAsB,EACtB,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,4CAA4C,EAAE,MAAM,yBAAyB,CAAA;AAEtF,OAAO,EAAE,mCAAmC,EAAE,MAAM,2BAA2B,CAAA;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AAG5D,MAAM,UAAU,GAAG;IACjB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC1B,MAAM,EAAE,CAAC,KAAc,EAAE,KAAc,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;CAC3E,CAAA;AAEV,oFAAoF;AACpF,MAAM,UAAU,sBAAsB,CACpC,GAAuB,EACvB,QAA2B,EAC3B,KAA2B,EAC3B,SAAmC;IAEnC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAA;IACrD,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAC/C,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAC7C,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAC9D,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAC9D,0BAA0B,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;IACpD,mCAAmC,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;AACtE,CAAC;AAED,SAAS,uBAAuB,CAAC,QAA2B;IAC1D,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,iXAAiX;QAC9X,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iEAAiE,EAAE;gBACzG,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6DAA6D,EAAE;aACvG;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;QACD,MAAM,EAAE,UAAU;QAClB,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI;QAC7B,KAAK,CAAC,OAAO,CAAC,GAAY,EAAE,IAAwB;YAClD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC1B,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;YAC9D,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;YAC9D,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YACtE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,4DAA4D,CAAA;YAC5F,OAAO,0BAA0B,CAAC,KAAK,EAAE,2BAA2B,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;QAC7F,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,QAA2B,EAAE,GAAY;IACxE,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,0TAA0T;QACvU,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;gBAC/E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wGAAwG,EAAE;gBACtJ,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACvE,sBAAsB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uDAAuD,EAAE;gBAChH,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,kDAAkD,EAAE;gBACzI,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wFAAwF,EAAE;gBAC5I,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wFAAwF,EAAE;aAC1I;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;QACD,MAAM,EAAE,UAAU;QAClB,KAAK,CAAC,OAAO,CAAC,GAAY,EAAE,IAAwB;YAClD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YAChC,4CAA4C,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;YAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC1B,MAAM,iBAAiB,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAA;YAC1F,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAA;YACjF,IAAI,CAAC,iBAAiB,KAAK,SAAS,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,EAAE,CAAC;gBACzE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;YACrF,CAAC;YACD,IAAI,iBAAiB,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACpE,MAAM,sBAAsB,CAAC,GAAG,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YACnF,CAAC;YACD,MAAM,KAAK,GAAuB;gBAChC,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC;gBACnD,WAAW,EAAE,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE;gBAC/E,WAAW,EAAE,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBACzF,sBAAsB,EAAE,qBAAqB,CAAC,IAAI,CAAC,sBAAsB,EAAE,wBAAwB,EAAE,IAAI,CAAC,IAAI,EAAE;gBAChH,eAAe,EAAE,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,cAAc;gBAC7E,GAAG,iBAAiB,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,cAAc,EAAE;aAChH,CAAA;YACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAA;YAC7B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YACnE,OAAO,2BAA2B,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;QAC9D,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,QAA2B,EAAE,GAAY;IACxE,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,sSAAsS;QACnT,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;gBACzE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;gBACpE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qDAAqD,EAAE;gBACnG,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,+BAA+B,EAAE;gBACrH,sBAAsB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oDAAoD,EAAE;gBAC7G,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,oCAAoC,EAAE;gBAC3H,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gFAAgF,EAAE;gBACpI,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gFAAgF,EAAE;gBACjI,sBAAsB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,mFAAmF,EAAE;aAC9I;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;QACD,MAAM,EAAE,UAAU;QAClB,KAAK,CAAC,OAAO,CAAC,GAAY,EAAE,IAAwB;YAClD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YAChC,4CAA4C,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;YAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC1B,MAAM,aAAa,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YACnE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAA;YAC7B,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAC7E,MAAM,KAAK,GAAuB,EAAE,CAAA;YACpC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YACvF,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;gBAAE,KAAK,CAAC,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,CAAW,CAAA;YAC9H,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;gBAAE,KAAK,CAAC,WAAW,GAAG,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;YACpI,IAAI,IAAI,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;gBAC9C,KAAK,CAAC,sBAAsB,GAAG,qBAAqB,CAAC,IAAI,CAAC,sBAAsB,EAAE,wBAAwB,EAAE,IAAI,CAAW,CAAA;YAC7H,CAAC;YACD,MAAM,eAAe,GAAG,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;YAClE,IAAI,eAAe,KAAK,SAAS;gBAAE,KAAK,CAAC,eAAe,GAAG,eAAe,CAAA;YAC1E,MAAM,iBAAiB,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAA;YAC1F,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAA;YACjF,IAAI,CAAC,iBAAiB,KAAK,SAAS,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,EAAE,CAAC;gBACzE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;YACrF,CAAC;YACD,IAAI,IAAI,CAAC,sBAAsB,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;gBAClG,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;YAC7D,CAAC;YACD,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAC5E,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAA;YAChG,CAAC;YACD,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,EAAE,CAAC;gBACzC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAA;gBAC9B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAA;YAC7B,CAAC;iBAAM,IAAI,iBAAiB,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBAC3E,MAAM,sBAAsB,CAAC,GAAG,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;gBACjF,KAAK,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;gBAC3C,KAAK,CAAC,cAAc,GAAG,cAAc,CAAA;YACvC,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAA;YACnH,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAA;YACjI,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAC9E,OAAO,2BAA2B,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QACjE,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,QAA2B,EAAE,KAA2B;IAC1E,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,iTAAiT;QAC9T,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mEAAmE,EAAE;gBAC3G,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4EAA4E,EAAE;gBACnH,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,mDAAmD,EAAE;aAC7F;YACD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;SAC5B;QACD,MAAM,EAAE,UAAU;QAClB,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI;QAC7B,KAAK,CAAC,OAAO,CAAC,GAAY,EAAE,IAAwB;YAClD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC1B,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;YAC9D,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YAC1D,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;YAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAA;YAC1F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,4DAA4D,CAAA;YAC5F,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YACpG,OAAO,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACzC,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,QAA2B,EAAE,KAA2B;IACxE,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,qOAAqO;QAClP,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0EAA0E,EAAE;gBACnH,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,4DAA4D,EAAE;gBACtG,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,wDAAwD,EAAE;aACrG;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;QACD,MAAM,EAAE,UAAU;QAClB,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI;QAC7B,KAAK,CAAC,OAAO,CAAC,GAAY,EAAE,IAAwB;YAClD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC1B,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;YACjE,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;YACxE,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAA;YAClF,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAChG,OAAO,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC7D,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACzC,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACtE,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,QAA2B,EAC3B,SAAiB,EACjB,MAAoB;IAEpB,MAAM,MAAM,GAAG,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS;WAC3F,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAA;IACrD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,QAAQ,CAAC,IAAI,UAAU,CAAC,CAAA;IAC7I,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAA;IACrH,OAAO,OAAO,CAAC,CAAC,CAAkB,CAAA;AACpC,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,GAAY,EACZ,QAAgB,EAChB,KAAa,EACb,MAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACrE,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,IAAI,KAAK,oBAAoB,MAAM,EAAE,CAAC,CAAA;IACpF,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,OAAkC,EAClC,SAAgC,EAChC,IAAmB;IAEnB,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,OAAO;QACP,SAAS;QACT,aAAa,EAAE,IAAI;QACnB,aAAa,EAAE,KAAK;QACpB,IAAI,EAAE,OAAO,KAAK,QAAQ;YACxB,CAAC,CAAC,wFAAwF;YAC1F,CAAC,CAAC,oGAAoG;KACzG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AACb,CAAC;AAED,SAAS,YAAY,CAAC,IAAwB;IAC5C,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAC5F,OAAO,IAAI,CAAC,KAAK,CAAA;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,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,SAAS,qBAAqB,CAAC,KAAc,EAAE,IAAY,EAAE,SAAiB;IAC5E,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,SAAS,cAAc,CAAC,KAAc,EAAE,IAAY,EAAE,SAAiB;IACrE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACzC,OAAO,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW;IAC7E,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;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,IAAY,EAAE,SAAiB;IAC5E,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAA;IAC1E,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,SAAS,mBAAmB,CAC1B,KAAc,EACd,IAAY,EACZ,QAAgB,EAChB,SAAiB;IAEjB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kCAAkC,QAAQ,QAAQ,CAAC,CAAA;IAChI,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,SAAS,CAAC,CAAC,CAAA;AAChG,CAAC"}
|
|
@@ -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"}
|
package/lib/tracking.js
ADDED
|
@@ -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":"
|
|
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
|
}
|