dsh-data-domain-knowledge 0.1.0-alpha.1
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/LICENSE +21 -0
- package/README.md +360 -0
- package/cordis.patch.yml +410 -0
- package/eval/README.md +76 -0
- package/eval/evaluate-retrieval.mjs +121 -0
- package/eval/queries.example.jsonl +2 -0
- package/lib/client.js +111415 -0
- package/lib/types/config-schema.d.ts +35 -0
- package/lib/types/config-schema.d.ts.map +1 -0
- package/lib/types/config-schema.js +34 -0
- package/lib/types/config-schema.js.map +1 -0
- package/lib/types/convert/core-loader.d.ts +32 -0
- package/lib/types/convert/core-loader.d.ts.map +1 -0
- package/lib/types/convert/core-loader.js +60 -0
- package/lib/types/convert/core-loader.js.map +1 -0
- package/lib/types/convert/host.d.ts +88 -0
- package/lib/types/convert/host.d.ts.map +1 -0
- package/lib/types/convert/host.js +479 -0
- package/lib/types/convert/host.js.map +1 -0
- package/lib/types/convert/ingest.d.ts +125 -0
- package/lib/types/convert/ingest.d.ts.map +1 -0
- package/lib/types/convert/ingest.js +228 -0
- package/lib/types/convert/ingest.js.map +1 -0
- package/lib/types/convert/settings-schema.d.ts +18 -0
- package/lib/types/convert/settings-schema.d.ts.map +1 -0
- package/lib/types/convert/settings-schema.js +26 -0
- package/lib/types/convert/settings-schema.js.map +1 -0
- package/lib/types/convert/types.d.ts +46 -0
- package/lib/types/convert/types.d.ts.map +1 -0
- package/lib/types/convert/types.js +41 -0
- package/lib/types/convert/types.js.map +1 -0
- package/lib/types/diagnosis/cards.d.ts +71 -0
- package/lib/types/diagnosis/cards.d.ts.map +1 -0
- package/lib/types/diagnosis/cards.js +482 -0
- package/lib/types/diagnosis/cards.js.map +1 -0
- package/lib/types/diagnosis/problem-classes.d.ts +51 -0
- package/lib/types/diagnosis/problem-classes.d.ts.map +1 -0
- package/lib/types/diagnosis/problem-classes.js +66 -0
- package/lib/types/diagnosis/problem-classes.js.map +1 -0
- package/lib/types/diagnosis/schema.d.ts +65 -0
- package/lib/types/diagnosis/schema.d.ts.map +1 -0
- package/lib/types/diagnosis/schema.js +208 -0
- package/lib/types/diagnosis/schema.js.map +1 -0
- package/lib/types/diagnosis/seed-source.d.ts +20 -0
- package/lib/types/diagnosis/seed-source.d.ts.map +1 -0
- package/lib/types/diagnosis/seed-source.js +96 -0
- package/lib/types/diagnosis/seed-source.js.map +1 -0
- package/lib/types/diagnosis/seed.d.ts +50 -0
- package/lib/types/diagnosis/seed.d.ts.map +1 -0
- package/lib/types/diagnosis/seed.js +242 -0
- package/lib/types/diagnosis/seed.js.map +1 -0
- package/lib/types/diagnosis/store.d.ts +81 -0
- package/lib/types/diagnosis/store.d.ts.map +1 -0
- package/lib/types/diagnosis/store.js +409 -0
- package/lib/types/diagnosis/store.js.map +1 -0
- package/lib/types/diagnosis/types.d.ts +124 -0
- package/lib/types/diagnosis/types.d.ts.map +1 -0
- package/lib/types/diagnosis/types.js +13 -0
- package/lib/types/diagnosis/types.js.map +1 -0
- package/lib/types/directory-picker.d.ts +94 -0
- package/lib/types/directory-picker.d.ts.map +1 -0
- package/lib/types/directory-picker.js +110 -0
- package/lib/types/directory-picker.js.map +1 -0
- package/lib/types/extract-model.d.ts +76 -0
- package/lib/types/extract-model.d.ts.map +1 -0
- package/lib/types/extract-model.js +193 -0
- package/lib/types/extract-model.js.map +1 -0
- package/lib/types/extract.d.ts +121 -0
- package/lib/types/extract.d.ts.map +1 -0
- package/lib/types/extract.js +549 -0
- package/lib/types/extract.js.map +1 -0
- package/lib/types/fts.d.ts +96 -0
- package/lib/types/fts.d.ts.map +1 -0
- package/lib/types/fts.js +184 -0
- package/lib/types/fts.js.map +1 -0
- package/lib/types/index.d.ts +39 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +1112 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types/intent/engine.d.ts +108 -0
- package/lib/types/intent/engine.d.ts.map +1 -0
- package/lib/types/intent/engine.js +501 -0
- package/lib/types/intent/engine.js.map +1 -0
- package/lib/types/intent/host.d.ts +88 -0
- package/lib/types/intent/host.d.ts.map +1 -0
- package/lib/types/intent/host.js +389 -0
- package/lib/types/intent/host.js.map +1 -0
- package/lib/types/intent/preset-tools.d.ts +37 -0
- package/lib/types/intent/preset-tools.d.ts.map +1 -0
- package/lib/types/intent/preset-tools.js +45 -0
- package/lib/types/intent/preset-tools.js.map +1 -0
- package/lib/types/intent/settings-schema.d.ts +59 -0
- package/lib/types/intent/settings-schema.d.ts.map +1 -0
- package/lib/types/intent/settings-schema.js +57 -0
- package/lib/types/intent/settings-schema.js.map +1 -0
- package/lib/types/intent/store.d.ts +75 -0
- package/lib/types/intent/store.d.ts.map +1 -0
- package/lib/types/intent/store.js +139 -0
- package/lib/types/intent/store.js.map +1 -0
- package/lib/types/intent/tools.d.ts +63 -0
- package/lib/types/intent/tools.d.ts.map +1 -0
- package/lib/types/intent/tools.js +108 -0
- package/lib/types/intent/tools.js.map +1 -0
- package/lib/types/intent/types.d.ts +189 -0
- package/lib/types/intent/types.d.ts.map +1 -0
- package/lib/types/intent/types.js +62 -0
- package/lib/types/intent/types.js.map +1 -0
- package/lib/types/knowledge-bases.d.ts +266 -0
- package/lib/types/knowledge-bases.d.ts.map +1 -0
- package/lib/types/knowledge-bases.js +1107 -0
- package/lib/types/knowledge-bases.js.map +1 -0
- package/lib/types/layout.d.ts +262 -0
- package/lib/types/layout.d.ts.map +1 -0
- package/lib/types/layout.js +312 -0
- package/lib/types/layout.js.map +1 -0
- package/lib/types/migrate.d.ts +110 -0
- package/lib/types/migrate.d.ts.map +1 -0
- package/lib/types/migrate.js +280 -0
- package/lib/types/migrate.js.map +1 -0
- package/lib/types/recall-rank.d.ts +158 -0
- package/lib/types/recall-rank.d.ts.map +1 -0
- package/lib/types/recall-rank.js +261 -0
- package/lib/types/recall-rank.js.map +1 -0
- package/lib/types/runtime.d.ts +568 -0
- package/lib/types/runtime.d.ts.map +1 -0
- package/lib/types/runtime.js +3045 -0
- package/lib/types/runtime.js.map +1 -0
- package/lib/types/settings-schema.d.ts +117 -0
- package/lib/types/settings-schema.d.ts.map +1 -0
- package/lib/types/settings-schema.js +92 -0
- package/lib/types/settings-schema.js.map +1 -0
- package/lib/types/settings-volatile.d.ts +102 -0
- package/lib/types/settings-volatile.d.ts.map +1 -0
- package/lib/types/settings-volatile.js +114 -0
- package/lib/types/settings-volatile.js.map +1 -0
- package/lib/types/types.d.ts +799 -0
- package/lib/types/types.d.ts.map +1 -0
- package/lib/types/types.js +387 -0
- package/lib/types/types.js.map +1 -0
- package/lib/types/wiki-types.d.ts +68 -0
- package/lib/types/wiki-types.d.ts.map +1 -0
- package/lib/types/wiki-types.js +322 -0
- package/lib/types/wiki-types.js.map +1 -0
- package/package.json +101 -0
- package/preset/tita-data-agent/agent.cordis.yml +376 -0
- package/preset/tita-data-agent/preset.yml +3 -0
- package/python/requirements.txt +8 -0
- package/scripts/doctor.mjs +70 -0
- package/scripts/e2e-pipeline.mjs +355 -0
- package/scripts/install-agent-preset.mjs +92 -0
- package/scripts/setup-embedding.sh +34 -0
- package/scripts/sync-agent-preset.mjs +188 -0
- package/src/client/AgentPresetCard.tsx +247 -0
- package/src/client/DirectoryPicker.tsx +357 -0
- package/src/client/InfoHint.tsx +65 -0
- package/src/client/IntentLogicTab.tsx +185 -0
- package/src/client/IntentTab.tsx +715 -0
- package/src/client/KnowledgeBaseTab.tsx +1454 -0
- package/src/client/KnowledgeGraphView.tsx +306 -0
- package/src/client/KnowledgePanel.tsx +381 -0
- package/src/client/KnowledgeStepRail.tsx +60 -0
- package/src/client/NodeSettings.tsx +392 -0
- package/src/client/PreviewSections.tsx +116 -0
- package/src/client/RecallPanel.tsx +399 -0
- package/src/client/TypeDefinitionDrawer.tsx +215 -0
- package/src/client/WikiFlowCard.tsx +226 -0
- package/src/client/WikiTypeEditor.tsx +332 -0
- package/src/client/agent-preset.ts +121 -0
- package/src/client/arch/AgentArchitectureGraph.tsx +219 -0
- package/src/client/arch/NodeLogicPanel.tsx +133 -0
- package/src/client/arch/ProblemDetailPanel.tsx +88 -0
- package/src/client/arch/model.ts +691 -0
- package/src/client/architecture.css +191 -0
- package/src/client/architecture.tsx +530 -0
- package/src/client/attribution/AttributionGraph.tsx +104 -0
- package/src/client/attribution/AttributionTab.tsx +332 -0
- package/src/client/attribution/CaseView.tsx +102 -0
- package/src/client/attribution/GraphStage.tsx +87 -0
- package/src/client/attribution/RunView.tsx +184 -0
- package/src/client/attribution/StageChrome.tsx +403 -0
- package/src/client/attribution/ViewSwitch.tsx +107 -0
- package/src/client/attribution/graph-options.ts +381 -0
- package/src/client/attribution/model.ts +462 -0
- package/src/client/config-scope.ts +119 -0
- package/src/client/convert/ConvertPanel.tsx +594 -0
- package/src/client/convert/styles.css +138 -0
- package/src/client/convert/styles.ts +49 -0
- package/src/client/format.ts +39 -0
- package/src/client/graph/layout.ts +181 -0
- package/src/client/graph.css +113 -0
- package/src/client/index.ts +98 -0
- package/src/client/problem-domains.ts +114 -0
- package/src/client/styles.css +940 -0
- package/src/client/styles.ts +11 -0
- package/src/client/useFitScale.ts +68 -0
- package/src/config-schema.ts +45 -0
- package/src/convert/core-loader.ts +68 -0
- package/src/convert/host.ts +579 -0
- package/src/convert/ingest.ts +367 -0
- package/src/convert/settings-schema.ts +27 -0
- package/src/convert/types.ts +65 -0
- package/src/diagnosis/cards.ts +498 -0
- package/src/diagnosis/problem-classes.ts +117 -0
- package/src/diagnosis/schema.ts +260 -0
- package/src/diagnosis/seed-source.ts +107 -0
- package/src/diagnosis/seed.ts +291 -0
- package/src/diagnosis/store.ts +432 -0
- package/src/diagnosis/types.ts +152 -0
- package/src/directory-picker.ts +164 -0
- package/src/extract-model.ts +227 -0
- package/src/extract.ts +632 -0
- package/src/fts.ts +203 -0
- package/src/index.ts +1091 -0
- package/src/intent/README.md +63 -0
- package/src/intent/engine.ts +527 -0
- package/src/intent/host.ts +462 -0
- package/src/intent/preset-tools.ts +48 -0
- package/src/intent/settings-schema.ts +63 -0
- package/src/intent/store.ts +143 -0
- package/src/intent/tools.ts +139 -0
- package/src/intent/types.ts +245 -0
- package/src/knowledge-bases.ts +1160 -0
- package/src/layout.ts +350 -0
- package/src/migrate.ts +262 -0
- package/src/python/embedding_worker.py +471 -0
- package/src/recall-rank.ts +299 -0
- package/src/runtime.ts +3069 -0
- package/src/settings-schema.ts +94 -0
- package/src/settings-volatile.ts +122 -0
- package/src/types.ts +1140 -0
- package/src/wiki-types.ts +357 -0
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The convert host — the DSH-facing half of multi-format conversion.
|
|
3
|
+
*
|
|
4
|
+
* Since 0018 this lives inside `plugins/dsh-data-domain-knowledge` (issue 0018):
|
|
5
|
+
* conversion is a sub-capability of knowledge, mounted as one plugin, with one
|
|
6
|
+
* sidebar entry and one settings surface for the user. The kernel
|
|
7
|
+
* (`dsh-convert-core`) stays an independent, optional package that
|
|
8
|
+
* `core-loader.ts` imports lazily.
|
|
9
|
+
*
|
|
10
|
+
* Layering this file must keep:
|
|
11
|
+
*
|
|
12
|
+
* kernel (convert-core) input → knowledge-ready Markdown + assets + console
|
|
13
|
+
* this host settings, agent tools, /convert route, ingestion
|
|
14
|
+
*
|
|
15
|
+
* Nothing about parsing lives here; nothing about DSH lives in the kernel. That
|
|
16
|
+
* is why the same console still works standalone at `tita-convert`.
|
|
17
|
+
*/
|
|
18
|
+
import { stat } from 'node:fs/promises';
|
|
19
|
+
import { basename, resolve } from 'node:path';
|
|
20
|
+
import { defineTool } from '@deepseek-ai/dsh-tools';
|
|
21
|
+
import { ConvertCoreMissingError, loadConvertCore } from './core-loader.js';
|
|
22
|
+
import { tmpRoot, workspaceOutputRoot } from '../layout.js';
|
|
23
|
+
import { ingestDelivery } from './ingest.js';
|
|
24
|
+
import { DEFAULT_CONVERT_CONFIG, failure, success, WRITE_TOOLS, } from './types.js';
|
|
25
|
+
export { CONVERT_SETTINGS_NAMESPACE, DEFAULT_CONVERT_CONFIG, defaultConvertRoot } from './types.js';
|
|
26
|
+
/** Route prefix the console and API are mounted on. Frozen contract. */
|
|
27
|
+
export const MOUNT_PATH = '/convert';
|
|
28
|
+
const PREVIEW_CHARS = 1200;
|
|
29
|
+
/**
|
|
30
|
+
* 转换的设置 schema。
|
|
31
|
+
*
|
|
32
|
+
* 0029 起它**没有路径字段**:交付物与工作区都从知识插件的 `agentRoot` 推出来
|
|
33
|
+
* (`<agentRoot>/output/<日期>/`、`<agentRoot>/tmp/`)。一个 Agent 只有一个根路径,
|
|
34
|
+
* 所以这里再放一个 `rootDir` 就等于把「东西存在哪」这个答案劈成两半。
|
|
35
|
+
*
|
|
36
|
+
* 定义本身搬到了 `./settings-schema.js`(纯数据、可被 `Config` 组合并在
|
|
37
|
+
* `node --test` 里独立解析);这里 re-export,保持既有出口不变。
|
|
38
|
+
*/
|
|
39
|
+
export { CONVERT_SETTINGS_SCHEMA } from './settings-schema.js';
|
|
40
|
+
function output() {
|
|
41
|
+
return { schema: { type: 'json' }, render: (_args, value) => [{ type: 'text', text: JSON.stringify(value) }] };
|
|
42
|
+
}
|
|
43
|
+
function tool(toolName, description, parameters, execute) {
|
|
44
|
+
return defineTool({ name: toolName, description, parameters: parameters, output: output(), execute: execute });
|
|
45
|
+
}
|
|
46
|
+
function lineageOf(args, exec) {
|
|
47
|
+
const lineage = {};
|
|
48
|
+
const sessionId = typeof args.session_key === 'string' && args.session_key.trim() ? args.session_key.trim() : exec?.agent?.session.header.id;
|
|
49
|
+
if (sessionId)
|
|
50
|
+
lineage.sessionId = sessionId;
|
|
51
|
+
const fields = [
|
|
52
|
+
['turnId', 'turn_id'], ['intentId', 'intent_id'], ['taskId', 'task_id'],
|
|
53
|
+
['subtaskId', 'subtask_id'], ['parentSubtaskId', 'parent_subtask_id'], ['runId', 'run_id'], ['traceId', 'trace_id'], ['domain', 'domain'],
|
|
54
|
+
];
|
|
55
|
+
for (const [target, source] of fields)
|
|
56
|
+
if (typeof args[source] === 'string' && args[source].trim())
|
|
57
|
+
lineage[target] = args[source].trim().slice(0, 160);
|
|
58
|
+
return Object.keys(lineage).length > 0 ? lineage : undefined;
|
|
59
|
+
}
|
|
60
|
+
async function readJsonBody(req, maxBytes = 2 * 1024 * 1024) {
|
|
61
|
+
const chunks = [];
|
|
62
|
+
let bytes = 0;
|
|
63
|
+
for await (const chunk of req) {
|
|
64
|
+
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));
|
|
65
|
+
bytes += buffer.length;
|
|
66
|
+
if (bytes > maxBytes)
|
|
67
|
+
throw new Error('REQUEST_TOO_LARGE');
|
|
68
|
+
chunks.push(buffer);
|
|
69
|
+
}
|
|
70
|
+
if (!chunks.length)
|
|
71
|
+
return {};
|
|
72
|
+
return JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
73
|
+
}
|
|
74
|
+
function send(res, status, body) {
|
|
75
|
+
res.statusCode = status;
|
|
76
|
+
res.setHeader('content-type', 'application/json; charset=utf-8');
|
|
77
|
+
res.setHeader('cache-control', 'no-store');
|
|
78
|
+
res.end(JSON.stringify(body));
|
|
79
|
+
}
|
|
80
|
+
/** Compact task view for tools — the full ingest payload never enters context. */
|
|
81
|
+
function taskView(task) {
|
|
82
|
+
const manifest = task.manifest;
|
|
83
|
+
return {
|
|
84
|
+
taskId: task.id,
|
|
85
|
+
state: task.state,
|
|
86
|
+
inputKind: task.inputKind,
|
|
87
|
+
title: manifest?.title ?? task.label,
|
|
88
|
+
sourceFormat: manifest?.sourceFormat ?? task.sourceFormat,
|
|
89
|
+
parser: manifest?.parser,
|
|
90
|
+
progress: task.progress,
|
|
91
|
+
stage: task.stage,
|
|
92
|
+
message: task.message,
|
|
93
|
+
error: task.error ?? null,
|
|
94
|
+
warnings: task.warnings.map(warning => warning.code),
|
|
95
|
+
attempts: task.attempts,
|
|
96
|
+
deliveryDir: task.deliveryDir,
|
|
97
|
+
assetCount: manifest?.assets.length ?? 0,
|
|
98
|
+
wordCount: manifest?.wordCount ?? 0,
|
|
99
|
+
contentHash: manifest?.contentHash,
|
|
100
|
+
externalId: manifest?.externalId,
|
|
101
|
+
sourceTypeCandidates: manifest?.ingest.sourceTypeCandidates ?? [],
|
|
102
|
+
sourceTypeRequired: manifest?.ingest.sourceTypeRequired ?? true,
|
|
103
|
+
preview: manifest?.ingest.content.slice(0, PREVIEW_CHARS) ?? null,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
async function waitForTask(service, taskId, timeoutMs) {
|
|
107
|
+
const deadline = Date.now() + timeoutMs;
|
|
108
|
+
while (Date.now() < deadline) {
|
|
109
|
+
const task = service.get(taskId);
|
|
110
|
+
if (!task)
|
|
111
|
+
return undefined;
|
|
112
|
+
if (task.state === 'succeeded' || task.state === 'failed' || task.state === 'cancelled')
|
|
113
|
+
return task;
|
|
114
|
+
await new Promise(resolve => setTimeout(resolve, 250));
|
|
115
|
+
}
|
|
116
|
+
return service.get(taskId);
|
|
117
|
+
}
|
|
118
|
+
export function applyConvert(ctx, deps) {
|
|
119
|
+
let config = { ...DEFAULT_CONVERT_CONFIG };
|
|
120
|
+
let service;
|
|
121
|
+
let starting;
|
|
122
|
+
let kernelHandler;
|
|
123
|
+
/**
|
|
124
|
+
* Set when the optional kernel could not be loaded. Kept as the original error
|
|
125
|
+
* so the tool/route layer can surface its code and install suggestion verbatim.
|
|
126
|
+
*/
|
|
127
|
+
let dependencyError;
|
|
128
|
+
async function ensureService() {
|
|
129
|
+
if (service)
|
|
130
|
+
return service;
|
|
131
|
+
if (!starting) {
|
|
132
|
+
starting = loadConvertCore()
|
|
133
|
+
.then(async (core) => {
|
|
134
|
+
// 目录都从知识插件的根路径推出来:状态文件落在 `tmp/` 根(它是运行期
|
|
135
|
+
// 事实,不是交付物,所以不占日期桶),交付与工作区各自按日期分桶。
|
|
136
|
+
const root = deps.agentRoot();
|
|
137
|
+
const created = await core.createConvertService({
|
|
138
|
+
rootDir: tmpRoot(root),
|
|
139
|
+
outRoot: workspaceOutputRoot(deps.workspace?.() ?? process.cwd()),
|
|
140
|
+
workRoot: tmpRoot(root),
|
|
141
|
+
// 根路径契约里 output/ 与 tmp/ 的二级就是日期(`layout.ts`),所以插件
|
|
142
|
+
// 显式打开分桶;独立内核保持扁平布局不受影响。
|
|
143
|
+
bucketByDay: true,
|
|
144
|
+
maxConcurrent: config.maxConcurrent,
|
|
145
|
+
maxInputBytes: config.maxInputBytes,
|
|
146
|
+
retentionDays: config.retentionDays,
|
|
147
|
+
});
|
|
148
|
+
service = created;
|
|
149
|
+
kernelHandler = core.createRequestHandler({ service: created, basePath: MOUNT_PATH });
|
|
150
|
+
dependencyError = undefined;
|
|
151
|
+
return created;
|
|
152
|
+
})
|
|
153
|
+
.catch(error => {
|
|
154
|
+
starting = undefined;
|
|
155
|
+
dependencyError = error;
|
|
156
|
+
return undefined;
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
return await starting;
|
|
160
|
+
}
|
|
161
|
+
async function resetService() {
|
|
162
|
+
const current = service;
|
|
163
|
+
service = undefined;
|
|
164
|
+
starting = undefined;
|
|
165
|
+
kernelHandler = undefined;
|
|
166
|
+
if (current)
|
|
167
|
+
await current.close().catch(() => undefined);
|
|
168
|
+
}
|
|
169
|
+
/** The kernel is optional; this is the single place its absence becomes an answer. */
|
|
170
|
+
function missingDependency(data) {
|
|
171
|
+
const error = dependencyError;
|
|
172
|
+
const message = error instanceof Error ? error.message : '转换内核 dsh-convert-core 不可用。';
|
|
173
|
+
const suggestion = error instanceof ConvertCoreMissingError
|
|
174
|
+
? error.suggestion
|
|
175
|
+
: '安装可选依赖 dsh-convert-core 后重试。';
|
|
176
|
+
return failure(data, 'DEPENDENCY_MISSING', message, true, suggestion);
|
|
177
|
+
}
|
|
178
|
+
function knowledgeBaseUrl() {
|
|
179
|
+
const web = ctx.get('webServer');
|
|
180
|
+
const host = web?.host === '0.0.0.0' ? '127.0.0.1' : web?.host ?? '127.0.0.1';
|
|
181
|
+
return `http://${host}:${web?.port ?? 0}`;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Since 0018 the knowledge root is not resolved from another plugin's settings
|
|
185
|
+
* or an environment variable: the convert host runs inside the knowledge
|
|
186
|
+
* plugin and writes exactly where the live runtime reads.
|
|
187
|
+
*
|
|
188
|
+
* Since 0019 a delivery can also target a **specific** knowledge base: the
|
|
189
|
+
* panel imports a file into whichever base the user selected.
|
|
190
|
+
*/
|
|
191
|
+
function resolveKnowledgeRoot() {
|
|
192
|
+
return { root: deps.knowledgeRoot(), source: 'knowledge-runtime' };
|
|
193
|
+
}
|
|
194
|
+
/** Ingest target for one knowledge base, falling back to the default base. */
|
|
195
|
+
function targetFor(kbId) {
|
|
196
|
+
const id = typeof kbId === 'string' && kbId.trim() ? kbId.trim() : undefined;
|
|
197
|
+
const resolved = id ? deps.resolveTarget?.(id) : undefined;
|
|
198
|
+
if (resolved)
|
|
199
|
+
return { ...resolved, baseId: id };
|
|
200
|
+
return { runtime: deps.runtime(), knowledgeRoot: deps.knowledgeRoot(), ...(id ? { baseId: id } : {}) };
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* 目标知识库中「存在且启用」的来源分类 id(0013)。
|
|
204
|
+
*
|
|
205
|
+
* 用作转换内核的候选提示,**取代内核按载体格式猜出来的那张表**——那张表会给出
|
|
206
|
+
* video / image 这类载体名,和「source_type 描述业务场景」直接冲突。分类判定
|
|
207
|
+
* 仍然由 knowledge 侧负责,这里只是把真实候选告诉调用方。
|
|
208
|
+
*/
|
|
209
|
+
function sourceTypeCandidateIds(runtime) {
|
|
210
|
+
return (runtime.sourceTypes?.() ?? []).filter(def => def.enabled).map(def => def.id);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* 设置来源。0.1.7 起设置随 `applyConvert(ctx, deps)` 的 `deps.config` 进来
|
|
214
|
+
* (插件 entry 的 `convert` 组),`settings.installSection` 那套命名空间注册
|
|
215
|
+
* 已经整个删除。组合层会合上 schema 默认值,这里再铺一层
|
|
216
|
+
* `DEFAULT_CONVERT_CONFIG` 兜底,好让直接调用 `applyConvert` 的装配方式也成立。
|
|
217
|
+
*
|
|
218
|
+
* 「改设置会让插件整个重载」这句话对 volatile 字段**不成立** —— loader 只就地改
|
|
219
|
+
* 引用再发一个事件(见 `settings-volatile.ts`)。所以重灌这件事由组合根在
|
|
220
|
+
* `loader/volatile-update` 时调 `reprocess()` 补上,这里只负责读值。
|
|
221
|
+
*/
|
|
222
|
+
const readConfig = () => (typeof deps.config === 'function' ? deps.config() : deps.config) ?? {};
|
|
223
|
+
config = { ...DEFAULT_CONVERT_CONFIG, ...readConfig() };
|
|
224
|
+
void resetService();
|
|
225
|
+
ctx.on('tools/pre-execute', (exec, next) => {
|
|
226
|
+
if (WRITE_TOOLS.includes(exec.name)) {
|
|
227
|
+
return Promise.resolve({ kind: 'ask', reason: '该操作会转换本地内容,并写入 Tita Knowledge Store,需要本轮用户审批。' });
|
|
228
|
+
}
|
|
229
|
+
return next();
|
|
230
|
+
});
|
|
231
|
+
// ---------------------------------------------------------------- tools
|
|
232
|
+
ctx.tools.register(tool('convert_capabilities', 'Inspect the conversion kernel: available adapters, engine version, supported formats and where deliveries are written. Read-only; call this before promising a format will work.', { session_key: { type: 'string' } }, async () => {
|
|
233
|
+
const kernel = await ensureService();
|
|
234
|
+
if (!kernel)
|
|
235
|
+
return missingDependency({ adapters: [], supportedExtensions: [] });
|
|
236
|
+
// Forced: this is an explicit question ("can you convert X?"), not the console's
|
|
237
|
+
// poll, and the service caches the report so that poll stays cheap. An agent that
|
|
238
|
+
// just installed a binary and then asked would otherwise get the stale answer.
|
|
239
|
+
const report = await kernel.capabilities({ force: true });
|
|
240
|
+
const knowledge = resolveKnowledgeRoot();
|
|
241
|
+
return success({
|
|
242
|
+
adapters: report.adapters,
|
|
243
|
+
runtime: report.runtime,
|
|
244
|
+
defaults: report.defaults,
|
|
245
|
+
supportedExtensions: report.extensions,
|
|
246
|
+
rootDir: kernel.rootDir,
|
|
247
|
+
outDir: kernel.outDir,
|
|
248
|
+
consolePath: `${MOUNT_PATH}/`,
|
|
249
|
+
knowledgeRoot: knowledge.root,
|
|
250
|
+
knowledgeRootSource: knowledge.source,
|
|
251
|
+
knowledgeBaseUrl: knowledgeBaseUrl(),
|
|
252
|
+
ingestEnabled: config.ingestEnabled,
|
|
253
|
+
});
|
|
254
|
+
}));
|
|
255
|
+
ctx.tools.register(tool('convert_source', 'Convert a document (Word / PowerPoint / Excel / OpenDocument / RTF / EPUB / CSV / text-layer PDF) or inline text into knowledge-ready Markdown + local images. Async kernel task; returns taskId, delivery dir and ingest hints (source_type candidates, external_id, content_hash). Write operation: DSH asks the user once before execution.', {
|
|
256
|
+
kind: { type: 'string', enum: ['file', 'text'], required: true },
|
|
257
|
+
path: { type: 'string' },
|
|
258
|
+
text: { type: 'string' },
|
|
259
|
+
title: { type: 'string' },
|
|
260
|
+
source_type: { type: 'string' },
|
|
261
|
+
adapter: { type: 'string' },
|
|
262
|
+
wait: { type: 'boolean' },
|
|
263
|
+
session_key: { type: 'string' },
|
|
264
|
+
task_id: { type: 'string' },
|
|
265
|
+
subtask_id: { type: 'string' },
|
|
266
|
+
parent_subtask_id: { type: 'string' },
|
|
267
|
+
run_id: { type: 'string' },
|
|
268
|
+
turn_id: { type: 'string' },
|
|
269
|
+
trace_id: { type: 'string' },
|
|
270
|
+
domain: { type: 'string' },
|
|
271
|
+
}, async (args, exec) => {
|
|
272
|
+
const kernel = await ensureService();
|
|
273
|
+
if (!kernel)
|
|
274
|
+
return missingDependency({ taskId: null });
|
|
275
|
+
const kind = args.kind;
|
|
276
|
+
const candidates = sourceTypeCandidateIds(targetFor(args.kb).runtime);
|
|
277
|
+
const request = {
|
|
278
|
+
kind,
|
|
279
|
+
...(candidates.length > 0 ? { sourceTypeCandidates: candidates } : {}),
|
|
280
|
+
...(typeof args.text === 'string' ? { text: args.text } : {}),
|
|
281
|
+
...(typeof args.title === 'string' && args.title.trim() ? { title: args.title.trim() } : {}),
|
|
282
|
+
...(typeof args.source_type === 'string' && args.source_type.trim() ? { sourceType: args.source_type.trim(), sourceTypeSource: 'agent' } : {}),
|
|
283
|
+
...(typeof args.adapter === 'string' && args.adapter.trim() ? { adapter: args.adapter.trim() } : {}),
|
|
284
|
+
...(lineageOf(args, exec) ? { lineage: lineageOf(args, exec) } : {}),
|
|
285
|
+
};
|
|
286
|
+
// Local files are handed to the kernel as a path: it owns staging, size
|
|
287
|
+
// limits and cleanup, so the host never buffers a 256 MB file.
|
|
288
|
+
if (kind === 'file') {
|
|
289
|
+
if (typeof args.path !== 'string' || !args.path.trim()) {
|
|
290
|
+
return failure({ taskId: null }, 'PATH_REQUIRED', 'kind=file 必须提供本地绝对路径 path。', false, '用户上传的文件请走知识面板的「转换」页;Agent 侧只能读取本机已有路径。');
|
|
291
|
+
}
|
|
292
|
+
const absolute = resolve(args.path.trim());
|
|
293
|
+
try {
|
|
294
|
+
const info = await stat(absolute);
|
|
295
|
+
if (!info.isFile())
|
|
296
|
+
return failure({ taskId: null }, 'PATH_NOT_A_FILE', `路径不是文件:${absolute}`);
|
|
297
|
+
if (info.size > config.maxInputBytes) {
|
|
298
|
+
return failure({ taskId: null }, 'INPUT_TOO_LARGE', `文件 ${info.size} 字节超过上限 ${config.maxInputBytes}。`, false, '调大转换设置 maxInputBytes,或先压缩文件。');
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
catch (cause) {
|
|
302
|
+
return failure({ taskId: null }, 'PATH_UNREADABLE', `无法读取 ${absolute}:${cause instanceof Error ? cause.message : String(cause)}`);
|
|
303
|
+
}
|
|
304
|
+
request.localPath = absolute;
|
|
305
|
+
if (!request.title)
|
|
306
|
+
request.title = basename(absolute);
|
|
307
|
+
}
|
|
308
|
+
const submitted = await kernel.submit(request);
|
|
309
|
+
const shouldWait = args.wait !== false;
|
|
310
|
+
const finished = shouldWait ? await waitForTask(kernel, submitted.id, config.toolWaitMs) : submitted;
|
|
311
|
+
const view = taskView(finished ?? submitted);
|
|
312
|
+
return success({
|
|
313
|
+
...view,
|
|
314
|
+
waited: shouldWait,
|
|
315
|
+
ingestHint: '调用 convert_ingest 把该任务写入知识库;它会把 Markdown 与图片一起落地,并返回 cardHints。',
|
|
316
|
+
});
|
|
317
|
+
}));
|
|
318
|
+
ctx.tools.register(tool('convert_task', 'Inspect the conversion queue: list, get, cancel, retry, or read the delivered Markdown/manifest of a task. Read-only.', {
|
|
319
|
+
action: { type: 'string', enum: ['list', 'get', 'cancel', 'retry', 'markdown', 'manifest'], required: true },
|
|
320
|
+
task_id: { type: 'string' },
|
|
321
|
+
limit: { type: 'integer' },
|
|
322
|
+
}, async (args) => {
|
|
323
|
+
const kernel = await ensureService();
|
|
324
|
+
if (!kernel)
|
|
325
|
+
return missingDependency({ tasks: [] });
|
|
326
|
+
const action = String(args.action);
|
|
327
|
+
if (action === 'list') {
|
|
328
|
+
const limit = Number.isFinite(args.limit) ? Math.max(1, Math.min(100, Number(args.limit))) : 20;
|
|
329
|
+
return success({ tasks: kernel.list().slice(0, limit).map(taskView) });
|
|
330
|
+
}
|
|
331
|
+
const taskId = typeof args.task_id === 'string' ? args.task_id.trim() : '';
|
|
332
|
+
if (!taskId)
|
|
333
|
+
return failure({ taskId: null }, 'TASK_ID_REQUIRED', `${action} 需要 task_id。`);
|
|
334
|
+
if (action === 'cancel')
|
|
335
|
+
return success(taskView(kernel.cancel(taskId)));
|
|
336
|
+
if (action === 'retry')
|
|
337
|
+
return success(taskView(await kernel.retry(taskId)));
|
|
338
|
+
if (action === 'markdown') {
|
|
339
|
+
const file = await kernel.readDeliveryFile(taskId, 'index.md');
|
|
340
|
+
if (!file)
|
|
341
|
+
return failure({ taskId }, 'ARTIFACT_NOT_FOUND', '该任务没有 index.md(未成功或已被清理)。');
|
|
342
|
+
return success({ taskId, markdown: file.data.toString('utf8') });
|
|
343
|
+
}
|
|
344
|
+
if (action === 'manifest') {
|
|
345
|
+
const file = await kernel.readDeliveryFile(taskId, 'manifest.json');
|
|
346
|
+
if (!file)
|
|
347
|
+
return failure({ taskId }, 'ARTIFACT_NOT_FOUND', '该任务没有 manifest.json。');
|
|
348
|
+
return success({ taskId, manifest: JSON.parse(file.data.toString('utf8')) });
|
|
349
|
+
}
|
|
350
|
+
const task = kernel.get(taskId);
|
|
351
|
+
if (!task)
|
|
352
|
+
return failure({ taskId }, 'TASK_NOT_FOUND', `任务不存在:${taskId}`);
|
|
353
|
+
return success(taskView(task));
|
|
354
|
+
}));
|
|
355
|
+
ctx.tools.register(tool('convert_ingest', 'Ingest a delivered conversion into the knowledge store: copies images into the knowledge root, rewrites local image references, writes the SourceRaw document in-process, and returns cardHints so a wiki card can carry the images into multimodal recall. Write operation: DSH asks the user once before execution. Set plan_only=true for a dry run.', {
|
|
356
|
+
convert_task_id: { type: 'string', required: true },
|
|
357
|
+
kb: { type: 'string', description: '目标知识库 id;省略则写入默认知识库' },
|
|
358
|
+
source_type: { type: 'string' },
|
|
359
|
+
title: { type: 'string' },
|
|
360
|
+
plan_only: { type: 'boolean' },
|
|
361
|
+
session_key: { type: 'string' },
|
|
362
|
+
task_id: { type: 'string' },
|
|
363
|
+
subtask_id: { type: 'string' },
|
|
364
|
+
parent_subtask_id: { type: 'string' },
|
|
365
|
+
run_id: { type: 'string' },
|
|
366
|
+
turn_id: { type: 'string' },
|
|
367
|
+
trace_id: { type: 'string' },
|
|
368
|
+
domain: { type: 'string' },
|
|
369
|
+
}, async (args, exec) => {
|
|
370
|
+
if (!config.ingestEnabled) {
|
|
371
|
+
return failure({ taskId: String(args.convert_task_id) }, 'INGEST_DISABLED', '当前设置禁止转换写入知识库(ingestEnabled=false)。', false, '在 Tita Data Agent → 设置 → 转换 中开启「允许一键入库」,或手动调用 add_source。');
|
|
372
|
+
}
|
|
373
|
+
const kernel = await ensureService();
|
|
374
|
+
if (!kernel)
|
|
375
|
+
return missingDependency({ taskId: String(args.convert_task_id) });
|
|
376
|
+
const target = targetFor(args.kb);
|
|
377
|
+
const result = await ingestDelivery({
|
|
378
|
+
service: kernel,
|
|
379
|
+
taskId: String(args.convert_task_id),
|
|
380
|
+
runtime: target.runtime,
|
|
381
|
+
knowledgeRoot: target.knowledgeRoot,
|
|
382
|
+
...(typeof args.source_type === 'string' && args.source_type.trim() ? { sourceType: args.source_type.trim() } : {}),
|
|
383
|
+
...(typeof args.title === 'string' && args.title.trim() ? { title: args.title.trim() } : {}),
|
|
384
|
+
planOnly: args.plan_only === true,
|
|
385
|
+
...(lineageOf(args, exec) ? { lineage: lineageOf(args, exec) } : {}),
|
|
386
|
+
});
|
|
387
|
+
return {
|
|
388
|
+
...result,
|
|
389
|
+
data: {
|
|
390
|
+
...result.data,
|
|
391
|
+
knowledgeRootSource: 'knowledge-runtime',
|
|
392
|
+
...(target.baseId ? { knowledgeBaseId: target.baseId } : {}),
|
|
393
|
+
},
|
|
394
|
+
};
|
|
395
|
+
}));
|
|
396
|
+
// ---------------------------------------------------------------- routes
|
|
397
|
+
ctx.inject(['webServer'], webCtx => {
|
|
398
|
+
const web = webCtx;
|
|
399
|
+
// Plugin-level facts the kernel cannot know about itself.
|
|
400
|
+
const pluginFacts = () => {
|
|
401
|
+
const knowledge = resolveKnowledgeRoot();
|
|
402
|
+
const root = deps.agentRoot();
|
|
403
|
+
return {
|
|
404
|
+
rootDir: service?.rootDir ?? tmpRoot(root),
|
|
405
|
+
outDir: service?.outRoot ?? workspaceOutputRoot(deps.workspace?.() ?? process.cwd()),
|
|
406
|
+
workDir: service?.workRoot ?? tmpRoot(root),
|
|
407
|
+
mountPath: MOUNT_PATH,
|
|
408
|
+
knowledgeRoot: knowledge.root,
|
|
409
|
+
knowledgeRootSource: knowledge.source,
|
|
410
|
+
knowledgeBaseUrl: knowledgeBaseUrl(),
|
|
411
|
+
ingestEnabled: config.ingestEnabled,
|
|
412
|
+
kernelLoaded: service !== undefined,
|
|
413
|
+
};
|
|
414
|
+
};
|
|
415
|
+
const dispatch = async (req, res) => {
|
|
416
|
+
const url = new URL(req.url ?? '/', 'http://127.0.0.1');
|
|
417
|
+
if (url.pathname === `${MOUNT_PATH}/api/ingest`) {
|
|
418
|
+
if (req.method !== 'POST')
|
|
419
|
+
return send(res, 405, failure({}, 'METHOD_NOT_ALLOWED', '该 endpoint 只接受 POST'));
|
|
420
|
+
try {
|
|
421
|
+
const body = await readJsonBody(req);
|
|
422
|
+
const kernel = await ensureService();
|
|
423
|
+
if (!kernel)
|
|
424
|
+
return send(res, 503, missingDependency({ taskId: String(body.task_id ?? '') }));
|
|
425
|
+
const target = targetFor(body.kb);
|
|
426
|
+
const result = await ingestDelivery({
|
|
427
|
+
service: kernel,
|
|
428
|
+
taskId: String(body.task_id ?? ''),
|
|
429
|
+
runtime: target.runtime,
|
|
430
|
+
knowledgeRoot: target.knowledgeRoot,
|
|
431
|
+
...(typeof body.source_type === 'string' && body.source_type.trim() ? { sourceType: body.source_type.trim() } : {}),
|
|
432
|
+
...(typeof body.title === 'string' && body.title.trim() ? { title: body.title.trim() } : {}),
|
|
433
|
+
planOnly: body.plan_only === true,
|
|
434
|
+
...(body.lineage && typeof body.lineage === 'object' ? { lineage: body.lineage } : {}),
|
|
435
|
+
});
|
|
436
|
+
return send(res, 200, {
|
|
437
|
+
...result,
|
|
438
|
+
data: {
|
|
439
|
+
...result.data,
|
|
440
|
+
knowledgeRootSource: 'knowledge-runtime',
|
|
441
|
+
...(target.baseId ? { knowledgeBaseId: target.baseId } : {}),
|
|
442
|
+
},
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
catch (cause) {
|
|
446
|
+
return send(res, 400, failure({}, 'REQUEST_INVALID', cause instanceof Error ? cause.message : String(cause)));
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
if (url.pathname === `${MOUNT_PATH}/api/plugin`) {
|
|
450
|
+
if (req.method !== 'GET')
|
|
451
|
+
return send(res, 405, failure({}, 'METHOD_NOT_ALLOWED', '该 endpoint 只接受 GET'));
|
|
452
|
+
return send(res, 200, success(pluginFacts()));
|
|
453
|
+
}
|
|
454
|
+
// Everything else belongs to the kernel console/API.
|
|
455
|
+
if (!kernelHandler)
|
|
456
|
+
await ensureService();
|
|
457
|
+
if (!kernelHandler)
|
|
458
|
+
return send(res, 503, missingDependency({ mountPath: MOUNT_PATH }));
|
|
459
|
+
return await kernelHandler(req, res);
|
|
460
|
+
};
|
|
461
|
+
const dispose = web.webServer.register({ kind: 'prefix', path: MOUNT_PATH, handler: dispatch });
|
|
462
|
+
return () => {
|
|
463
|
+
void dispose();
|
|
464
|
+
void resetService();
|
|
465
|
+
};
|
|
466
|
+
});
|
|
467
|
+
return {
|
|
468
|
+
reprocess: () => {
|
|
469
|
+
const next = { ...DEFAULT_CONVERT_CONFIG, ...readConfig() };
|
|
470
|
+
const changed = Object.keys(next).some(key => next[key] !== config[key]);
|
|
471
|
+
config = next;
|
|
472
|
+
// 只有真变了才重置内核:`loader/volatile-update` 是**这个 entry**的事件,但知识那组
|
|
473
|
+
// 的改动也会走到这里,无谓地关掉内核会让下一次转换重新起一遍内核。
|
|
474
|
+
if (changed)
|
|
475
|
+
void resetService();
|
|
476
|
+
},
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
//# sourceMappingURL=host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../../src/convert/host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The knowledge-ingestion seam.
|
|
3
|
+
*
|
|
4
|
+
* Rules this file obeys, and why:
|
|
5
|
+
*
|
|
6
|
+
* 1. **One write entry, in-process.** Since 0018 the convert host lives inside
|
|
7
|
+
* the knowledge plugin, so ingestion calls `KnowledgeRuntime.addSource()`
|
|
8
|
+
* directly instead of `POST /knowledge/sources`. That removes a JSON body
|
|
9
|
+
* cap (the old transport 400'd above ~1.2 MB) and removes port discovery,
|
|
10
|
+
* startup ordering and error-code re-translation from the failure surface.
|
|
11
|
+
* The structural `IngestTarget` interface is deliberately the only knowledge
|
|
12
|
+
* API this module may touch — conversion code must not reach into the store.
|
|
13
|
+
* 2. **The kernel never writes the knowledge store.** It only produces
|
|
14
|
+
* `convert-out/<taskId>/`. This module is the translation step.
|
|
15
|
+
* 3. **`source_type` stays the knowledge side's decision.** We propose
|
|
16
|
+
* candidates; if the store rejects the value we surface its error verbatim
|
|
17
|
+
* instead of silently defaulting.
|
|
18
|
+
* 4. **Images must land inside the knowledge root**, because retrieval only
|
|
19
|
+
* reads local relative paths — and only the *first* image of a unit reaches
|
|
20
|
+
* the multimodal embedder, so we also emit card hints that tell the Agent how
|
|
21
|
+
* to reference them.
|
|
22
|
+
*/
|
|
23
|
+
import type { ConvertService, IngestPayload } from 'dsh-convert-core';
|
|
24
|
+
import type { LineageContext } from 'dsh-data-contracts/refs';
|
|
25
|
+
import type { SourceType, SourceTypeDef } from '../types.js';
|
|
26
|
+
import { KNOWLEDGE_WIKI_DIR, type Envelope } from './types.js';
|
|
27
|
+
/**
|
|
28
|
+
* The only slice of the knowledge store this seam is allowed to use. Declared
|
|
29
|
+
* structurally so this module never imports `runtime.ts`.
|
|
30
|
+
*/
|
|
31
|
+
export interface IngestTarget {
|
|
32
|
+
addSource(input: {
|
|
33
|
+
sourceType: SourceType;
|
|
34
|
+
title?: string;
|
|
35
|
+
content: string;
|
|
36
|
+
externalId?: string;
|
|
37
|
+
metadata?: Record<string, unknown>;
|
|
38
|
+
sourceId?: string;
|
|
39
|
+
lineage?: LineageContext;
|
|
40
|
+
}): Promise<{
|
|
41
|
+
ok: boolean;
|
|
42
|
+
data: {
|
|
43
|
+
sourceId: string;
|
|
44
|
+
path: string;
|
|
45
|
+
};
|
|
46
|
+
error?: {
|
|
47
|
+
code?: string;
|
|
48
|
+
message?: string;
|
|
49
|
+
suggestion?: string;
|
|
50
|
+
} | null;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* 该知识库的来源分类注册表(0013,**只读**)。
|
|
54
|
+
*
|
|
55
|
+
* 只用来把「候选分类」告诉调用方,转换模块不参与分类判定、也不改注册表,
|
|
56
|
+
* 所以它仍然是 knowledge 侧的能力,不算越界写。可选:老的测试替身可以不给。
|
|
57
|
+
*/
|
|
58
|
+
sourceTypes?(): SourceTypeDef[];
|
|
59
|
+
}
|
|
60
|
+
export interface IngestOptions {
|
|
61
|
+
service: ConvertService;
|
|
62
|
+
taskId: string;
|
|
63
|
+
/** The live knowledge runtime; the write goes through `addSource` only. */
|
|
64
|
+
runtime: IngestTarget;
|
|
65
|
+
/** Absolute knowledge root the runtime currently writes to. */
|
|
66
|
+
knowledgeRoot: string;
|
|
67
|
+
/** Business classification. Omitted means "let the store decide/default". */
|
|
68
|
+
sourceType?: string;
|
|
69
|
+
title?: string;
|
|
70
|
+
metadata?: Record<string, unknown>;
|
|
71
|
+
lineage?: Record<string, unknown>;
|
|
72
|
+
/** Dry run: build the plan without copying assets or writing the source. */
|
|
73
|
+
planOnly?: boolean;
|
|
74
|
+
}
|
|
75
|
+
export interface PlacedAsset {
|
|
76
|
+
rel: string;
|
|
77
|
+
/** Absolute path inside the knowledge root. */
|
|
78
|
+
target: string;
|
|
79
|
+
bytes: number;
|
|
80
|
+
}
|
|
81
|
+
export interface IngestOutcome {
|
|
82
|
+
taskId: string;
|
|
83
|
+
sourceId?: string;
|
|
84
|
+
sourcePath?: string;
|
|
85
|
+
knowledgeRoot: string;
|
|
86
|
+
externalId: string;
|
|
87
|
+
contentHash: string;
|
|
88
|
+
sourceFormat: string;
|
|
89
|
+
parser: string;
|
|
90
|
+
sourceType: string;
|
|
91
|
+
sourceTypeSupplied: boolean;
|
|
92
|
+
sourceTypeCandidates: string[];
|
|
93
|
+
assets: PlacedAsset[];
|
|
94
|
+
/** Path to the source file relative to the knowledge root, e.g. `01_source_truth/x.md`. */
|
|
95
|
+
relativeSourcePath?: string;
|
|
96
|
+
cardHints: CardHints;
|
|
97
|
+
notes: string[];
|
|
98
|
+
}
|
|
99
|
+
export interface CardHints {
|
|
100
|
+
/** `entity_type` values accepted by the knowledge schema. */
|
|
101
|
+
entityTypes: string[];
|
|
102
|
+
sourceRefs: string[];
|
|
103
|
+
title: string;
|
|
104
|
+
summary: string;
|
|
105
|
+
/**
|
|
106
|
+
* Card body with image references already re-based to `02_wiki/<entityType>/`,
|
|
107
|
+
* so the first image actually reaches the multimodal embedder.
|
|
108
|
+
*/
|
|
109
|
+
contentWithImages: string;
|
|
110
|
+
/** The image references as they must appear inside a card body. */
|
|
111
|
+
imageRefs: string[];
|
|
112
|
+
}
|
|
113
|
+
declare const ENTITY_TYPES: string[];
|
|
114
|
+
/** Refuse any path that would escape the knowledge root. */
|
|
115
|
+
export declare function safeJoin(root: string, ...parts: string[]): string | undefined;
|
|
116
|
+
export declare function buildCardHints(input: {
|
|
117
|
+
payload: IngestPayload;
|
|
118
|
+
sourceId: string;
|
|
119
|
+
assetBucket: string;
|
|
120
|
+
assetMapping: Map<string, string>;
|
|
121
|
+
entityType?: string;
|
|
122
|
+
}): CardHints;
|
|
123
|
+
export declare function ingestDelivery(options: IngestOptions): Promise<Envelope<IngestOutcome>>;
|
|
124
|
+
export { ENTITY_TYPES, KNOWLEDGE_WIKI_DIR };
|
|
125
|
+
//# sourceMappingURL=ingest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../../src/convert/ingest.ts"],"names":[],"mappings":"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"}
|