@lemoncat7/dsh-knowledge 0.6.0-alpha.6

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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +184 -0
  3. package/cordis.patch.yml +12 -0
  4. package/docs/architecture.md +107 -0
  5. package/docs/document-knowledge-design.zh-CN.md +329 -0
  6. package/docs/requirements.md +86 -0
  7. package/lib/api.d.ts +4 -0
  8. package/lib/api.d.ts.map +1 -0
  9. package/lib/api.js +497 -0
  10. package/lib/api.js.map +1 -0
  11. package/lib/client.js +420 -0
  12. package/lib/client.js.map +7 -0
  13. package/lib/config.d.ts +38 -0
  14. package/lib/config.d.ts.map +1 -0
  15. package/lib/config.js +84 -0
  16. package/lib/config.js.map +1 -0
  17. package/lib/connection.d.ts +15 -0
  18. package/lib/connection.d.ts.map +1 -0
  19. package/lib/connection.js +95 -0
  20. package/lib/connection.js.map +1 -0
  21. package/lib/control.d.ts +26 -0
  22. package/lib/control.d.ts.map +1 -0
  23. package/lib/control.js +149 -0
  24. package/lib/control.js.map +1 -0
  25. package/lib/domain.d.ts +207 -0
  26. package/lib/domain.d.ts.map +1 -0
  27. package/lib/domain.js +122 -0
  28. package/lib/domain.js.map +1 -0
  29. package/lib/extraction.d.ts +27 -0
  30. package/lib/extraction.d.ts.map +1 -0
  31. package/lib/extraction.js +367 -0
  32. package/lib/extraction.js.map +1 -0
  33. package/lib/index.d.ts +15 -0
  34. package/lib/index.d.ts.map +1 -0
  35. package/lib/index.js +198 -0
  36. package/lib/index.js.map +1 -0
  37. package/lib/local-provider.d.ts +60 -0
  38. package/lib/local-provider.d.ts.map +1 -0
  39. package/lib/local-provider.js +1096 -0
  40. package/lib/local-provider.js.map +1 -0
  41. package/lib/provider-router.d.ts +19 -0
  42. package/lib/provider-router.d.ts.map +1 -0
  43. package/lib/provider-router.js +83 -0
  44. package/lib/provider-router.js.map +1 -0
  45. package/lib/provider.d.ts +38 -0
  46. package/lib/provider.d.ts.map +1 -0
  47. package/lib/provider.js +2 -0
  48. package/lib/provider.js.map +1 -0
  49. package/lib/recall.d.ts +8 -0
  50. package/lib/recall.d.ts.map +1 -0
  51. package/lib/recall.js +76 -0
  52. package/lib/recall.js.map +1 -0
  53. package/lib/remote-provider.d.ts +51 -0
  54. package/lib/remote-provider.d.ts.map +1 -0
  55. package/lib/remote-provider.js +216 -0
  56. package/lib/remote-provider.js.map +1 -0
  57. package/lib/retrieval.d.ts +35 -0
  58. package/lib/retrieval.d.ts.map +1 -0
  59. package/lib/retrieval.js +206 -0
  60. package/lib/retrieval.js.map +1 -0
  61. package/lib/runtime.d.ts +147 -0
  62. package/lib/runtime.d.ts.map +1 -0
  63. package/lib/runtime.js +26 -0
  64. package/lib/runtime.js.map +1 -0
  65. package/lib/tools.d.ts +6 -0
  66. package/lib/tools.d.ts.map +1 -0
  67. package/lib/tools.js +99 -0
  68. package/lib/tools.js.map +1 -0
  69. package/lib/web.d.ts +3 -0
  70. package/lib/web.d.ts.map +1 -0
  71. package/lib/web.js +71 -0
  72. package/lib/web.js.map +1 -0
  73. package/package.json +79 -0
  74. package/web/app.js +1686 -0
  75. package/web/index.html +19 -0
  76. package/web/styles.css +786 -0
package/lib/index.js ADDED
@@ -0,0 +1,198 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { registerKnowledgeApi } from './api.js';
3
+ import { connectionSettingsBase, createConnectionProvider, loadStoredConnection, sameConnection, storeConnection, validateConnectionSettings, } from './connection.js';
4
+ import { Config as ConfigSchema, resolveConfig } from './config.js';
5
+ import { registerKnowledgeControl } from './control.js';
6
+ import { ExtractionCoordinator } from './extraction.js';
7
+ import { LocalKnowledgeProvider } from './local-provider.js';
8
+ import { KnowledgeProviderRouter } from './provider-router.js';
9
+ import { registerKnowledgeCatalog, registerRecall } from './recall.js';
10
+ import { KnowledgeHandleCodec } from './retrieval.js';
11
+ import { RemoteProviderError } from './remote-provider.js';
12
+ import { createWritebackMessage } from './runtime.js';
13
+ import { registerKnowledgeTools } from './tools.js';
14
+ import { registerKnowledgeWeb } from './web.js';
15
+ export const Config = ConfigSchema;
16
+ export * from './domain.js';
17
+ export * from './provider.js';
18
+ export { LocalKnowledgeProvider } from './local-provider.js';
19
+ export { RemoteKnowledgeProvider, RemoteProviderError } from './remote-provider.js';
20
+ /** Human-readable Cordis plugin name. */
21
+ export const name = 'dsh-knowledge';
22
+ /** Extraction, native retrieval tools, and mounted-base context require the corresponding DSH host services. */
23
+ export const inject = ['llm', 'tools', 'systemPrompt'];
24
+ /** Mount storage, hybrid retrieval, extraction, and the optional authenticated HTTP API. */
25
+ export function apply(ctx, config) {
26
+ const runtime = ctx;
27
+ const resolved = resolveConfig(config);
28
+ const baseConnection = connectionSettingsBase(resolved);
29
+ let initialConnection = baseConnection;
30
+ try {
31
+ const stored = loadStoredConnection(resolved.connectionPath);
32
+ if (stored !== undefined) {
33
+ validateConnectionSettings(stored, resolved.exposeApi, resolved.databasePath !== undefined && resolved.databasePath.trim().length > 0);
34
+ initialConnection = stored;
35
+ }
36
+ }
37
+ catch (error) {
38
+ runtime.logger.warn(`dsh-knowledge: ignored invalid stored connection: ${error instanceof Error ? error.message : String(error)}`);
39
+ }
40
+ const initialProvider = createConnectionProvider(resolved, initialConnection);
41
+ const providerRouter = new KnowledgeProviderRouter(initialProvider);
42
+ const provider = providerRouter.provider;
43
+ let activeConnection = initialConnection;
44
+ const coordinator = new ExtractionCoordinator(runtime, provider, resolved);
45
+ const handleCodec = new KnowledgeHandleCodec(randomBytes(32));
46
+ registerKnowledgeCatalog(runtime, provider, resolved);
47
+ registerRecall(runtime, provider, resolved, handleCodec);
48
+ registerKnowledgeTools(runtime, provider, handleCodec);
49
+ let switching = Promise.resolve();
50
+ const updateConnection = (input) => {
51
+ const pending = switching.then(async () => {
52
+ const next = {
53
+ backend: input.backend,
54
+ remoteTimeoutMs: input.remoteTimeoutMs,
55
+ ...input.remoteUrl !== undefined ? { remoteUrl: input.remoteUrl } : activeConnection.remoteUrl !== undefined ? { remoteUrl: activeConnection.remoteUrl } : {},
56
+ ...input.remoteToken !== undefined ? { remoteToken: input.remoteToken } : activeConnection.remoteToken !== undefined ? { remoteToken: activeConnection.remoteToken } : {},
57
+ };
58
+ validateConnectionSettings(next, resolved.exposeApi, resolved.databasePath !== undefined && resolved.databasePath.trim().length > 0);
59
+ if (sameConnection(next, activeConnection))
60
+ return activeConnection;
61
+ if (resolved.connectionPath === undefined)
62
+ throw connectionError(409, '当前插件没有配置持久化路径,无法保存连接。');
63
+ const candidate = createConnectionProvider(resolved, next);
64
+ let persisted = false;
65
+ try {
66
+ if (next.backend === 'remote')
67
+ await candidate.stats();
68
+ await storeConnection(resolved.connectionPath, next);
69
+ persisted = true;
70
+ await providerRouter.replace(candidate);
71
+ activeConnection = next;
72
+ runtime.logger.info(`dsh-knowledge: verified and switched to ${next.backend} provider`);
73
+ return activeConnection;
74
+ }
75
+ catch (error) {
76
+ await candidate.close().catch(() => { });
77
+ if (persisted) {
78
+ await storeConnection(resolved.connectionPath, activeConnection).catch(rollbackError => {
79
+ runtime.logger.error(`dsh-knowledge: failed to restore connection settings: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`);
80
+ });
81
+ }
82
+ throw error;
83
+ }
84
+ });
85
+ const operation = pending.catch(error => {
86
+ runtime.logger.warn(`dsh-knowledge: connection switch rejected: ${error instanceof Error ? error.message : String(error)}`);
87
+ throw publicConnectionError(error);
88
+ });
89
+ switching = operation.catch(() => { });
90
+ return operation;
91
+ };
92
+ if (runtime.inject !== undefined) {
93
+ runtime.inject(['webServer'], httpRuntime => {
94
+ const disposeControl = registerKnowledgeControl(httpRuntime, {
95
+ current: () => activeConnection,
96
+ canSwitchRemote: !resolved.exposeApi,
97
+ writable: resolved.connectionPath !== undefined,
98
+ update: updateConnection,
99
+ });
100
+ httpRuntime.effect(() => disposeControl, 'dsh-knowledge.connection-control');
101
+ });
102
+ }
103
+ else if (runtime.webServer !== undefined) {
104
+ const disposeControl = registerKnowledgeControl(runtime, {
105
+ current: () => activeConnection,
106
+ canSwitchRemote: !resolved.exposeApi,
107
+ writable: resolved.connectionPath !== undefined,
108
+ update: updateConnection,
109
+ });
110
+ runtime.effect(() => disposeControl, 'dsh-knowledge.connection-control');
111
+ }
112
+ else {
113
+ runtime.logger.warn('dsh-knowledge: webServer is unavailable; the connection settings entry is disabled');
114
+ }
115
+ if (resolved.extractionEnabled) {
116
+ runtime.on('agent/turn-stopping', async ({ agent, turn, signal }) => {
117
+ if (agent.session.append === undefined)
118
+ throw new Error('synchronous knowledge writeback requires Session.append');
119
+ let summary;
120
+ try {
121
+ const result = await coordinator.run(agent.session, turn, signal);
122
+ if (result.status === 'duplicate')
123
+ return;
124
+ if (result.status === 'unmounted')
125
+ summary = '知识库回写 · 未挂载可写知识库';
126
+ else if (result.status === 'skipped')
127
+ summary = '知识库回写 · 当前回答无可提取内容';
128
+ else if (result.candidateCount === 0)
129
+ summary = '知识库回写 · 无需收录';
130
+ else
131
+ summary = `知识库回写 · ${result.bases.map(base => {
132
+ const parts = [base.directCount > 0 ? `直写 ${base.directCount}` : '', base.auditCount > 0 ? `待审 ${base.auditCount}` : ''].filter(Boolean);
133
+ return `${base.name}:${parts.join('、')}`;
134
+ }).join(';')}`;
135
+ }
136
+ catch (error) {
137
+ if (signal.aborted)
138
+ return;
139
+ const message = error instanceof Error ? error.message : String(error);
140
+ runtime.logger.warn(`dsh-knowledge: synchronous writeback failed: ${message}`);
141
+ summary = message.includes('max-tokens')
142
+ ? '知识库回写 · 失败:提取结果超过模型输出上限'
143
+ : '知识库回写 · 失败,可稍后重试';
144
+ }
145
+ agent.session.append('user/message', createWritebackMessage(summary), { surfaceOp: 'append' });
146
+ });
147
+ }
148
+ if (resolved.exposeApi) {
149
+ if (!(initialProvider instanceof LocalKnowledgeProvider))
150
+ throw new Error('exposeApi is supported only by the local backend');
151
+ initialProvider.ensureBootstrapToken(resolved.apiToken);
152
+ if (runtime.inject === undefined)
153
+ throw new Error('exposeApi requires Cordis dynamic service injection');
154
+ runtime.inject(['webServer'], (httpRuntime) => {
155
+ const disposeApi = registerKnowledgeApi(httpRuntime, initialProvider, resolved.apiPrefix);
156
+ httpRuntime.effect(() => disposeApi, 'dsh-knowledge.api');
157
+ if (resolved.exposeWeb) {
158
+ const disposeWeb = registerKnowledgeWeb(httpRuntime, resolved.webPath, resolved.apiPrefix);
159
+ httpRuntime.effect(() => disposeWeb, 'dsh-knowledge.web');
160
+ }
161
+ });
162
+ }
163
+ runtime.effect(() => async () => {
164
+ await coordinator.close();
165
+ await providerRouter.close();
166
+ }, 'dsh-knowledge.close');
167
+ runtime.logger.info(`dsh-knowledge: ${provider.mode} provider ready`);
168
+ }
169
+ function publicConnectionError(error) {
170
+ if (error instanceof RemoteProviderError) {
171
+ if (error.status === 401)
172
+ return connectionError(400, '客户端令牌无效或已被撤销。');
173
+ if (error.status === 403)
174
+ return connectionError(400, '客户端令牌没有读取该知识库的权限。');
175
+ if (error.status === 404)
176
+ return connectionError(400, '服务器地址不是有效的知识库 API 地址。');
177
+ if (error.status === 0)
178
+ return connectionError(400, '无法连接远程知识库,请检查地址、网络和证书。');
179
+ return connectionError(400, `远程知识库验证失败(HTTP ${error.status})。`);
180
+ }
181
+ if (error instanceof Error && typeof error.status === 'number')
182
+ return error;
183
+ if (error instanceof Error) {
184
+ if (/server URL and client token|24 characters/i.test(error.message))
185
+ return connectionError(400, '首次连接需要填写至少 24 个字符的客户端令牌。');
186
+ if (/HTTPS/i.test(error.message))
187
+ return connectionError(400, '远程知识库必须使用 HTTPS。');
188
+ if (/timeout/i.test(error.message))
189
+ return connectionError(400, '请求超时时间不正确。');
190
+ if (/databasePath/i.test(error.message))
191
+ return connectionError(409, '当前 DSH 没有可用的本地知识库。');
192
+ }
193
+ return error instanceof Error ? error : new Error(String(error));
194
+ }
195
+ function connectionError(status, message) {
196
+ return Object.assign(new Error(message), { status });
197
+ }
198
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { type CandidateProposal, type ApiTokenRecord, type ExtractionJobRecord, type KnowledgeCandidate, type KnowledgeBase, type KnowledgeBaseDraft, type KnowledgeBasePatch, type KnowledgeDraft, type KnowledgeEntry, type KnowledgeDocument, type KnowledgeStats, type KnowledgeVersion, type KnowledgeMount, type KnowledgeMountBatch, type KnowledgeMountBatchResult, type KnowledgeMountDraft, type KnowledgeMountTargetKind, type ResolvedKnowledgeMount, type ListRequest, type ListResult, type ReviewDecision, type SearchHit, type SearchRequest, type TokenPermission } from './domain.js';
2
+ import type { KnowledgeProvider } from './provider.js';
3
+ export declare class LocalKnowledgeProvider implements KnowledgeProvider {
4
+ readonly mode: "local";
5
+ private readonly db;
6
+ private closed;
7
+ constructor(path: string);
8
+ private migrate;
9
+ private assertOpen;
10
+ listKnowledgeBases(): Promise<KnowledgeBase[]>;
11
+ getKnowledgeBase(id: string): Promise<KnowledgeBase | undefined>;
12
+ createKnowledgeBase(input: KnowledgeBaseDraft): Promise<KnowledgeBase>;
13
+ updateKnowledgeBase(id: string, input: KnowledgeBaseDraft): Promise<KnowledgeBase>;
14
+ patchKnowledgeBase(id: string, patch: KnowledgeBasePatch): Promise<KnowledgeBase>;
15
+ archiveKnowledgeBase(id: string): Promise<KnowledgeBase>;
16
+ restoreKnowledgeBase(id: string): Promise<KnowledgeBase>;
17
+ deleteKnowledgeBase(id: string): Promise<void>;
18
+ listDocuments(knowledgeBaseId?: string, query?: string): Promise<KnowledgeDocument[]>;
19
+ getDocument(id: string): Promise<KnowledgeDocument | undefined>;
20
+ listMounts(targetKind?: KnowledgeMountTargetKind, targetId?: string): Promise<KnowledgeMount[]>;
21
+ upsertMount(input: KnowledgeMountDraft): Promise<KnowledgeMount>;
22
+ applyMountBatch(batch: KnowledgeMountBatch): Promise<KnowledgeMountBatchResult>;
23
+ private upsertMountRow;
24
+ deleteMount(id: string): Promise<void>;
25
+ resolveMounts(sessionId: string, projectId?: string): Promise<ResolvedKnowledgeMount[]>;
26
+ stats(): Promise<KnowledgeStats>;
27
+ private transaction;
28
+ search(request: SearchRequest): Promise<SearchHit[]>;
29
+ private searchByTerms;
30
+ list(request: ListRequest): Promise<ListResult<KnowledgeEntry>>;
31
+ get(id: string): Promise<KnowledgeEntry | undefined>;
32
+ versions(id: string): Promise<KnowledgeVersion[]>;
33
+ create(draft: KnowledgeDraft): Promise<KnowledgeEntry>;
34
+ private insertEntry;
35
+ update(id: string, draft: KnowledgeDraft): Promise<KnowledgeEntry>;
36
+ private updateEntry;
37
+ archive(id: string): Promise<KnowledgeEntry>;
38
+ delete(id: string): Promise<void>;
39
+ propose(input: CandidateProposal, sourceKey?: string): Promise<KnowledgeCandidate>;
40
+ listCandidates(status: 'pending' | 'approved' | 'rejected', limit: number): Promise<KnowledgeCandidate[]>;
41
+ review(id: string, decision: ReviewDecision): Promise<KnowledgeCandidate>;
42
+ claimExtraction(sourceKey: string): Promise<boolean>;
43
+ completeExtraction(sourceKey: string, candidateCount: number): Promise<void>;
44
+ failExtraction(sourceKey: string, error: string): Promise<void>;
45
+ extractionJob(sourceKey: string): Promise<ExtractionJobRecord | undefined>;
46
+ ensureBootstrapToken(token: string): void;
47
+ authenticate(token: string): ApiTokenRecord | undefined;
48
+ createApiToken(name: string, permissions: TokenPermission[]): {
49
+ record: ApiTokenRecord;
50
+ token: string;
51
+ };
52
+ listApiTokens(): ApiTokenRecord[];
53
+ revokeApiToken(id: string): void;
54
+ close(): Promise<void>;
55
+ private writeVersion;
56
+ private upsertFts;
57
+ private syncAllDocuments;
58
+ private syncKnowledgeDocuments;
59
+ }
60
+ //# sourceMappingURL=local-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-provider.d.ts","sourceRoot":"","sources":["../src/local-provider.ts"],"names":[],"mappings":"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"}