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,228 @@
|
|
|
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 { cp, mkdir, stat } from 'node:fs/promises';
|
|
24
|
+
import { basename, join, resolve, sep } from 'node:path';
|
|
25
|
+
import { failure, KNOWLEDGE_ASSET_DIR, KNOWLEDGE_SOURCE_DIR, KNOWLEDGE_WIKI_DIR, success, } from './types.js';
|
|
26
|
+
const ENTITY_TYPES = ['concept', 'metric', 'table', 'event', 'playbook', 'case'];
|
|
27
|
+
/** Refuse any path that would escape the knowledge root. */
|
|
28
|
+
export function safeJoin(root, ...parts) {
|
|
29
|
+
const base = resolve(root);
|
|
30
|
+
const target = resolve(base, ...parts);
|
|
31
|
+
if (target !== base && !target.startsWith(base + sep))
|
|
32
|
+
return undefined;
|
|
33
|
+
return target;
|
|
34
|
+
}
|
|
35
|
+
function rewriteImageRefs(markdown, mapping) {
|
|
36
|
+
let result = markdown;
|
|
37
|
+
for (const [from, to] of mapping) {
|
|
38
|
+
result = result.split(`(${from})`).join(`(${to})`);
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
function cardImageRef(hash, rel, entityType) {
|
|
43
|
+
// A card lives at 02_wiki/<entityType>/<slug>.md; the asset lives at
|
|
44
|
+
// 01_source_truth/_assets/<hash>/<file>.
|
|
45
|
+
const depth = 2;
|
|
46
|
+
const up = Array.from({ length: depth }, () => '..').join('/');
|
|
47
|
+
return `${up}/${KNOWLEDGE_SOURCE_DIR}/${KNOWLEDGE_ASSET_DIR}/${hash}/${basename(rel)}`;
|
|
48
|
+
}
|
|
49
|
+
export function buildCardHints(input) {
|
|
50
|
+
const entityType = input.entityType && ENTITY_TYPES.includes(input.entityType) ? input.entityType : 'concept';
|
|
51
|
+
const content = rewriteImageRefs(input.payload.content, new Map([...input.assetMapping].map(([from, to]) => [from, cardImageRef(input.assetBucket, to, entityType)])));
|
|
52
|
+
const imageRefs = input.payload.assets.map(asset => cardImageRef(input.assetBucket, asset.rel, entityType));
|
|
53
|
+
const summary = input.payload.content
|
|
54
|
+
.replace(/!\[[^\]]*\]\([^)]*\)/g, '')
|
|
55
|
+
.replace(/[#>*`_\-[\]()]/g, ' ')
|
|
56
|
+
.replace(/\s+/g, ' ')
|
|
57
|
+
.trim()
|
|
58
|
+
.slice(0, 160);
|
|
59
|
+
return {
|
|
60
|
+
entityTypes: ENTITY_TYPES,
|
|
61
|
+
sourceRefs: [input.sourceId],
|
|
62
|
+
title: input.payload.title,
|
|
63
|
+
summary,
|
|
64
|
+
contentWithImages: content,
|
|
65
|
+
imageRefs,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Turn a store rejection into an actionable suggestion without inventing one.
|
|
70
|
+
*
|
|
71
|
+
* 0013:分类候选来自**当前知识库的注册表**(含用户自定义分类),不再写死三个内置值。
|
|
72
|
+
*/
|
|
73
|
+
function suggestionFor(code, candidates) {
|
|
74
|
+
if (code === 'SOURCE_TYPE_UNKNOWN') {
|
|
75
|
+
return `当前知识库的分类注册表里没有这个分类。可用分类:${candidates.join(' / ') || '(无)'};要新增分类请到「知识库设置 → 来源类型」,并写清怎么判断它是这一类。`;
|
|
76
|
+
}
|
|
77
|
+
if (code === 'SOURCE_TYPE_DISABLED') {
|
|
78
|
+
return `该分类已停用。可用分类:${candidates.join(' / ') || '(无)'};要恢复请到「知识库设置 → 来源类型」重新启用。`;
|
|
79
|
+
}
|
|
80
|
+
// 这里曾经有一条 `CONTENT_TOO_LARGE` 的建议(「调大 maxSourceBytes」)。0029 撤掉
|
|
81
|
+
// 那个上限之后,`addSource` 再也不会产出这个 code,留着它就成了一条指向不存在开关
|
|
82
|
+
// 的指路牌 —— 环境里已经没有任何东西会触发它。
|
|
83
|
+
if (code === 'SOURCE_TRUTH_DISABLED') {
|
|
84
|
+
return '在知识插件设置里打开「允许写入 SourceTruth」(allowSourceTruth)。';
|
|
85
|
+
}
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
export async function ingestDelivery(options) {
|
|
89
|
+
const { service, taskId } = options;
|
|
90
|
+
let payload;
|
|
91
|
+
try {
|
|
92
|
+
payload = await service.ingestPlan(taskId);
|
|
93
|
+
}
|
|
94
|
+
catch (cause) {
|
|
95
|
+
const error = cause;
|
|
96
|
+
return failure(emptyOutcome(taskId, options.knowledgeRoot, options.sourceType), error.code ?? 'TASK_NOT_READY', error.message, false, error.suggestion);
|
|
97
|
+
}
|
|
98
|
+
const bucket = payload.contentHash.slice(0, 12);
|
|
99
|
+
const assetRoot = safeJoin(options.knowledgeRoot, KNOWLEDGE_SOURCE_DIR, KNOWLEDGE_ASSET_DIR, bucket);
|
|
100
|
+
if (!assetRoot) {
|
|
101
|
+
return failure(emptyOutcome(taskId, options.knowledgeRoot, options.sourceType), 'PATH_OUTSIDE_KNOWLEDGE_ROOT', '资产目标路径越出知识库根目录。');
|
|
102
|
+
}
|
|
103
|
+
const assetMapping = new Map();
|
|
104
|
+
const placed = [];
|
|
105
|
+
const notes = [];
|
|
106
|
+
const warnings = [];
|
|
107
|
+
if (options.planOnly !== true && payload.assets.length > 0) {
|
|
108
|
+
await mkdir(assetRoot, { recursive: true });
|
|
109
|
+
for (const asset of payload.assets) {
|
|
110
|
+
const target = safeJoin(assetRoot, basename(asset.rel));
|
|
111
|
+
if (!target) {
|
|
112
|
+
warnings.push(`跳过越界资产:${asset.rel}`);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
await cp(asset.path, target, { force: true });
|
|
117
|
+
const info = await stat(target);
|
|
118
|
+
placed.push({ rel: asset.rel, target, bytes: info.size });
|
|
119
|
+
assetMapping.set(asset.rel, asset.rel);
|
|
120
|
+
}
|
|
121
|
+
catch (cause) {
|
|
122
|
+
warnings.push(`资产复制失败(${asset.rel}):${cause instanceof Error ? cause.message : String(cause)}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (placed.length !== payload.assets.length) {
|
|
126
|
+
notes.push(`${payload.assets.length - placed.length} 个图片资产未复制,正文中的对应引用会指向不存在的文件。`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else if (options.planOnly === true) {
|
|
130
|
+
for (const asset of payload.assets)
|
|
131
|
+
assetMapping.set(asset.rel, asset.rel);
|
|
132
|
+
notes.push('planOnly=true:未复制资产、未写入 SourceRaw。');
|
|
133
|
+
}
|
|
134
|
+
const sourceContent = rewriteImageRefs(payload.content, new Map([...assetMapping].map(([from, to]) => [from, `${KNOWLEDGE_ASSET_DIR}/${bucket}/${basename(to)}`])));
|
|
135
|
+
const metadata = {
|
|
136
|
+
...(options.metadata ?? {}),
|
|
137
|
+
source_format: payload.sourceFormat,
|
|
138
|
+
parser: payload.parser,
|
|
139
|
+
content_hash: payload.contentHash,
|
|
140
|
+
convert_task_id: taskId,
|
|
141
|
+
convert_contract_version: 1,
|
|
142
|
+
...(payload.sourceUrl ? { source_url: payload.sourceUrl } : {}),
|
|
143
|
+
...(payload.sourcePath ? { source_path: payload.sourcePath } : {}),
|
|
144
|
+
assets: placed.map(asset => `${KNOWLEDGE_ASSET_DIR}/${bucket}/${basename(asset.rel)}`),
|
|
145
|
+
};
|
|
146
|
+
const sourceType = options.sourceType?.trim() || 'document';
|
|
147
|
+
// 分类候选取自当前知识库的注册表(0013):内置分类 + 用户自定义,只列启用的。
|
|
148
|
+
const sourceTypeCandidates = (options.runtime.sourceTypes?.() ?? [])
|
|
149
|
+
.filter((def) => def.enabled)
|
|
150
|
+
.map((def) => def.id);
|
|
151
|
+
payload.sourceTypeCandidates = sourceTypeCandidates;
|
|
152
|
+
const title = options.title?.trim() || payload.title;
|
|
153
|
+
const externalId = payload.externalId;
|
|
154
|
+
if (!options.planOnly) {
|
|
155
|
+
const result = await options.runtime.addSource({
|
|
156
|
+
sourceType: sourceType,
|
|
157
|
+
title,
|
|
158
|
+
content: sourceContent,
|
|
159
|
+
externalId,
|
|
160
|
+
metadata,
|
|
161
|
+
...(options.lineage ? { lineage: options.lineage } : {}),
|
|
162
|
+
});
|
|
163
|
+
if (!result.ok) {
|
|
164
|
+
const code = result.error?.code ?? 'KNOWLEDGE_WRITE_FAILED';
|
|
165
|
+
return failure(emptyOutcome(taskId, options.knowledgeRoot, options.sourceType), code, result.error?.message ?? '知识库拒绝了该来源', false, result.error?.suggestion ?? suggestionFor(code, sourceTypeCandidates));
|
|
166
|
+
}
|
|
167
|
+
const sourceId = result.data.sourceId;
|
|
168
|
+
const sourcePath = result.data.path;
|
|
169
|
+
const cardHints = buildCardHints({ payload, sourceId, assetBucket: bucket, assetMapping });
|
|
170
|
+
notes.push('SourceRaw 已写入;图片要进入多模态召回,还需要一张引用它们的 wiki 卡片(见 cardHints)。');
|
|
171
|
+
return success({
|
|
172
|
+
taskId,
|
|
173
|
+
sourceId,
|
|
174
|
+
...(sourcePath ? { sourcePath } : {}),
|
|
175
|
+
knowledgeRoot: options.knowledgeRoot,
|
|
176
|
+
externalId,
|
|
177
|
+
contentHash: payload.contentHash,
|
|
178
|
+
sourceFormat: payload.sourceFormat,
|
|
179
|
+
parser: payload.parser,
|
|
180
|
+
sourceType,
|
|
181
|
+
sourceTypeSupplied: Boolean(options.sourceType?.trim()),
|
|
182
|
+
sourceTypeCandidates: payload.sourceTypeCandidates,
|
|
183
|
+
assets: placed,
|
|
184
|
+
...(sourcePath ? { relativeSourcePath: relativeTo(options.knowledgeRoot, sourcePath) } : {}),
|
|
185
|
+
cardHints,
|
|
186
|
+
notes,
|
|
187
|
+
}, warnings);
|
|
188
|
+
}
|
|
189
|
+
// Dry run: report what would happen, including the card hints.
|
|
190
|
+
const preview = buildCardHints({ payload, sourceId: '<add_source 返回的 sourceId>', assetBucket: bucket, assetMapping });
|
|
191
|
+
return success({
|
|
192
|
+
taskId,
|
|
193
|
+
knowledgeRoot: options.knowledgeRoot,
|
|
194
|
+
externalId,
|
|
195
|
+
contentHash: payload.contentHash,
|
|
196
|
+
sourceFormat: payload.sourceFormat,
|
|
197
|
+
parser: payload.parser,
|
|
198
|
+
sourceType,
|
|
199
|
+
sourceTypeSupplied: Boolean(options.sourceType?.trim()),
|
|
200
|
+
sourceTypeCandidates: payload.sourceTypeCandidates,
|
|
201
|
+
assets: payload.assets.map(asset => ({ rel: asset.rel, target: join(assetRoot, basename(asset.rel)), bytes: asset.bytes })),
|
|
202
|
+
cardHints: preview,
|
|
203
|
+
notes: [...notes, `将写入 ${KNOWLEDGE_SOURCE_DIR},资产放入 ${KNOWLEDGE_ASSET_DIR}/${bucket}/`],
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
function relativeTo(root, path) {
|
|
207
|
+
const base = resolve(root);
|
|
208
|
+
const target = resolve(path);
|
|
209
|
+
return target.startsWith(base + sep) ? target.slice(base.length + 1) : target;
|
|
210
|
+
}
|
|
211
|
+
function emptyOutcome(taskId, knowledgeRoot, sourceType) {
|
|
212
|
+
return {
|
|
213
|
+
taskId,
|
|
214
|
+
knowledgeRoot,
|
|
215
|
+
externalId: '',
|
|
216
|
+
contentHash: '',
|
|
217
|
+
sourceFormat: '',
|
|
218
|
+
parser: '',
|
|
219
|
+
sourceType: sourceType?.trim() || 'document',
|
|
220
|
+
sourceTypeSupplied: Boolean(sourceType?.trim()),
|
|
221
|
+
sourceTypeCandidates: [],
|
|
222
|
+
assets: [],
|
|
223
|
+
cardHints: { entityTypes: ENTITY_TYPES, sourceRefs: [], title: '', summary: '', contentWithImages: '', imageRefs: [] },
|
|
224
|
+
notes: [],
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
export { ENTITY_TYPES, KNOWLEDGE_WIKI_DIR };
|
|
228
|
+
//# sourceMappingURL=ingest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../../src/convert/ingest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 转换设置的 schema(纯数据,单独一个模块)。
|
|
3
|
+
*
|
|
4
|
+
* 与 `src/intent/settings-schema.ts` 同一个理由:0.1.7 之后它要被 `Config` 组合、
|
|
5
|
+
* 并被 `tests/settings-schema.test.mjs` 独立解析一遍,而 `host.ts` 会 `import`
|
|
6
|
+
* 工具层 —— 那条依赖在 `node --test` 里拉不起来(`dsh-tools` 的
|
|
7
|
+
* `@deepseek-ai/dsh-sandbox` 是未安装的 peer)。
|
|
8
|
+
*
|
|
9
|
+
* 0029 起这里**没有路径字段**:交付物与工作区都从知识插件的 `agentRoot` 推出来
|
|
10
|
+
* (`<agentRoot>/output/<日期>/`、`<agentRoot>/tmp/`)。一个 Agent 只有一个根路径,
|
|
11
|
+
* 所以这里再放一个 `rootDir` 就等于把「东西存在哪」这个答案劈成两半。
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
import { type ConvertPluginConfig } from './types.js';
|
|
16
|
+
/** 显式标注是为了 TS2742(见 `intent/settings-schema.ts` 上的同一条注释)。 */
|
|
17
|
+
export declare const CONVERT_SETTINGS_SCHEMA: Schemastery<ConvertPluginConfig>;
|
|
18
|
+
//# sourceMappingURL=settings-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-schema.d.ts","sourceRoot":"","sources":["../../../src/convert/settings-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAE7E,6DAA6D;AAC7D,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,mBAAmB,CAMlE,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 转换设置的 schema(纯数据,单独一个模块)。
|
|
3
|
+
*
|
|
4
|
+
* 与 `src/intent/settings-schema.ts` 同一个理由:0.1.7 之后它要被 `Config` 组合、
|
|
5
|
+
* 并被 `tests/settings-schema.test.mjs` 独立解析一遍,而 `host.ts` 会 `import`
|
|
6
|
+
* 工具层 —— 那条依赖在 `node --test` 里拉不起来(`dsh-tools` 的
|
|
7
|
+
* `@deepseek-ai/dsh-sandbox` 是未安装的 peer)。
|
|
8
|
+
*
|
|
9
|
+
* 0029 起这里**没有路径字段**:交付物与工作区都从知识插件的 `agentRoot` 推出来
|
|
10
|
+
* (`<agentRoot>/output/<日期>/`、`<agentRoot>/tmp/`)。一个 Agent 只有一个根路径,
|
|
11
|
+
* 所以这里再放一个 `rootDir` 就等于把「东西存在哪」这个答案劈成两半。
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
import z from '@deepseek-ai/schemastery';
|
|
16
|
+
import { volatileFields } from '../settings-volatile.js';
|
|
17
|
+
import { DEFAULT_CONVERT_CONFIG } from './types.js';
|
|
18
|
+
/** 显式标注是为了 TS2742(见 `intent/settings-schema.ts` 上的同一条注释)。 */
|
|
19
|
+
export const CONVERT_SETTINGS_SCHEMA = z.object(volatileFields({
|
|
20
|
+
maxConcurrent: z.number().step(1).min(1).max(8).default(DEFAULT_CONVERT_CONFIG.maxConcurrent),
|
|
21
|
+
maxInputBytes: z.number().step(1).min(1024).default(DEFAULT_CONVERT_CONFIG.maxInputBytes),
|
|
22
|
+
retentionDays: z.number().step(1).max(365).default(DEFAULT_CONVERT_CONFIG.retentionDays),
|
|
23
|
+
toolWaitMs: z.number().step(1).min(1000).max(900000).default(DEFAULT_CONVERT_CONFIG.toolWaitMs),
|
|
24
|
+
ingestEnabled: z.boolean().default(DEFAULT_CONVERT_CONFIG.ingestEnabled),
|
|
25
|
+
}));
|
|
26
|
+
//# sourceMappingURL=settings-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-schema.js","sourceRoot":"","sources":["../../../src/convert/settings-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAA4B,MAAM,YAAY,CAAA;AAE7E,6DAA6D;AAC7D,MAAM,CAAC,MAAM,uBAAuB,GAAqC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IAC/F,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC;IAC7F,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC;IACzF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC;IACxF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,UAAU,CAAC;IAC/F,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC;CACzE,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin-level types, defaults and the envelope shape for the **convert seam**.
|
|
3
|
+
*
|
|
4
|
+
* These live inside `data-knowledge` since 0018: conversion is a sub-capability
|
|
5
|
+
* of the knowledge plugin, not a separately mounted plugin. The kernel itself
|
|
6
|
+
* (`dsh-convert-core`) stays an independent, optional package.
|
|
7
|
+
*/
|
|
8
|
+
export declare const CONVERT_SETTINGS_NAMESPACE = "tita-data-agent-convert";
|
|
9
|
+
/** Knowledge store layout the convert seam cooperates with (issue 0013). */
|
|
10
|
+
export declare const KNOWLEDGE_SOURCE_DIR = "01_source_truth";
|
|
11
|
+
export declare const KNOWLEDGE_WIKI_DIR = "02_wiki";
|
|
12
|
+
/** Sub-directory inside `01_source_truth` that holds converted images. */
|
|
13
|
+
export declare const KNOWLEDGE_ASSET_DIR = "_assets";
|
|
14
|
+
export interface ConvertPluginConfig {
|
|
15
|
+
maxConcurrent: number;
|
|
16
|
+
maxInputBytes: number;
|
|
17
|
+
/** Deliveries older than this are pruned on start; 0 disables. */
|
|
18
|
+
retentionDays: number;
|
|
19
|
+
/** How long a tool call waits for the conversion before returning `running`. */
|
|
20
|
+
toolWaitMs: number;
|
|
21
|
+
/** Allow `convert_ingest` to write into the knowledge store. */
|
|
22
|
+
ingestEnabled: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* @deprecated 0029:转换不再有自己的根目录。交付物落
|
|
26
|
+
* `<agentRoot>/output/<日期>/`、工作区落 `<agentRoot>/tmp/<日期>/`,
|
|
27
|
+
* 由 `layout.ts` 统一算出来。这个函数只留给**独立运行的内核**
|
|
28
|
+
* (`bin/tita-convert.mjs`)与它的单测,插件侧不再读它。
|
|
29
|
+
*/
|
|
30
|
+
export declare function defaultConvertRoot(): string;
|
|
31
|
+
export declare const DEFAULT_CONVERT_CONFIG: ConvertPluginConfig;
|
|
32
|
+
export interface Envelope<T> {
|
|
33
|
+
ok: boolean;
|
|
34
|
+
data: T;
|
|
35
|
+
warnings?: string[];
|
|
36
|
+
error?: {
|
|
37
|
+
code: string;
|
|
38
|
+
message: string;
|
|
39
|
+
suggestion?: string;
|
|
40
|
+
retryable?: boolean;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export declare function success<T>(data: T, warnings?: string[]): Envelope<T>;
|
|
44
|
+
export declare function failure<T>(data: T, code: string, message: string, retryable?: boolean, suggestion?: string): Envelope<T>;
|
|
45
|
+
export declare const WRITE_TOOLS: readonly ["convert_source", "convert_ingest"];
|
|
46
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/convert/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,eAAO,MAAM,0BAA0B,4BAA4B,CAAA;AAEnE,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,oBAAoB,CAAA;AACrD,eAAO,MAAM,kBAAkB,YAAY,CAAA;AAC3C,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,YAAY,CAAA;AAE5C,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAA;IACrB,gFAAgF;IAChF,UAAU,EAAE,MAAM,CAAA;IAClB,gEAAgE;IAChE,aAAa,EAAE,OAAO,CAAA;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED,eAAO,MAAM,sBAAsB,EAAE,mBAMpC,CAAA;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,EAAE,CAAC,CAAA;IACP,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CACpF;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAEpE;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,UAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAEtH;AAED,eAAO,MAAM,WAAW,+CAAgD,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin-level types, defaults and the envelope shape for the **convert seam**.
|
|
3
|
+
*
|
|
4
|
+
* These live inside `data-knowledge` since 0018: conversion is a sub-capability
|
|
5
|
+
* of the knowledge plugin, not a separately mounted plugin. The kernel itself
|
|
6
|
+
* (`dsh-convert-core`) stays an independent, optional package.
|
|
7
|
+
*/
|
|
8
|
+
import { homedir } from 'node:os';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
export const CONVERT_SETTINGS_NAMESPACE = 'tita-data-agent-convert';
|
|
11
|
+
/** Knowledge store layout the convert seam cooperates with (issue 0013). */
|
|
12
|
+
export const KNOWLEDGE_SOURCE_DIR = '01_source_truth';
|
|
13
|
+
export const KNOWLEDGE_WIKI_DIR = '02_wiki';
|
|
14
|
+
/** Sub-directory inside `01_source_truth` that holds converted images. */
|
|
15
|
+
export const KNOWLEDGE_ASSET_DIR = '_assets';
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated 0029:转换不再有自己的根目录。交付物落
|
|
18
|
+
* `<agentRoot>/output/<日期>/`、工作区落 `<agentRoot>/tmp/<日期>/`,
|
|
19
|
+
* 由 `layout.ts` 统一算出来。这个函数只留给**独立运行的内核**
|
|
20
|
+
* (`bin/tita-convert.mjs`)与它的单测,插件侧不再读它。
|
|
21
|
+
*/
|
|
22
|
+
export function defaultConvertRoot() {
|
|
23
|
+
if (process.env.DSH_CONVERT_ROOT)
|
|
24
|
+
return process.env.DSH_CONVERT_ROOT;
|
|
25
|
+
return join(homedir(), '.tita-data-agent', 'convert');
|
|
26
|
+
}
|
|
27
|
+
export const DEFAULT_CONVERT_CONFIG = {
|
|
28
|
+
maxConcurrent: 2,
|
|
29
|
+
maxInputBytes: 256 * 1024 * 1024,
|
|
30
|
+
retentionDays: 14,
|
|
31
|
+
toolWaitMs: 120_000,
|
|
32
|
+
ingestEnabled: true,
|
|
33
|
+
};
|
|
34
|
+
export function success(data, warnings) {
|
|
35
|
+
return { ok: true, data, ...(warnings && warnings.length > 0 ? { warnings } : {}) };
|
|
36
|
+
}
|
|
37
|
+
export function failure(data, code, message, retryable = false, suggestion) {
|
|
38
|
+
return { ok: false, data, error: { code, message, retryable, ...(suggestion ? { suggestion } : {}) } };
|
|
39
|
+
}
|
|
40
|
+
export const WRITE_TOOLS = ['convert_source', 'convert_ingest'];
|
|
41
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/convert/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,CAAC,MAAM,0BAA0B,GAAG,yBAAyB,CAAA;AAEnE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAA;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAA;AAC3C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAA;AAa5C;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAA;IACrE,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAwB;IACzD,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;IAChC,aAAa,EAAE,EAAE;IACjB,UAAU,EAAE,OAAO;IACnB,aAAa,EAAE,IAAI;CACpB,CAAA;AASD,MAAM,UAAU,OAAO,CAAI,IAAO,EAAE,QAAmB;IACrD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;AACrF,CAAC;AAED,MAAM,UAAU,OAAO,CAAI,IAAO,EAAE,IAAY,EAAE,OAAe,EAAE,SAAS,GAAG,KAAK,EAAE,UAAmB;IACvG,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAA;AACxG,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAU,CAAA"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { type DiagnosisEntityType } from './schema.js';
|
|
2
|
+
import type { AttributionCase } from './seed.js';
|
|
3
|
+
import type { AttributionEdgeKind, AttributionGraphData, AttributionNodeKind } from './types.js';
|
|
4
|
+
export interface DiagnosisCardSection {
|
|
5
|
+
heading: string;
|
|
6
|
+
body: string;
|
|
7
|
+
}
|
|
8
|
+
export interface DiagnosisCard {
|
|
9
|
+
entityId: string;
|
|
10
|
+
entityType: DiagnosisEntityType;
|
|
11
|
+
title: string;
|
|
12
|
+
/** 一句话说明。落到节点上是 `summary`(现象上是 `observable`)。 */
|
|
13
|
+
summary?: string;
|
|
14
|
+
status: string;
|
|
15
|
+
owner?: string;
|
|
16
|
+
sourceRefs: string[];
|
|
17
|
+
updatedAt?: string;
|
|
18
|
+
/** 正文小节,顺序按 spec。 */
|
|
19
|
+
sections: DiagnosisCardSection[];
|
|
20
|
+
/** 结构化块。字段随 entity_type 而定,见 `CARD_LAYOUT`。 */
|
|
21
|
+
block: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
/** 卡片不声明状态时的默认值:它已经被人写过一遍,只是还没走评审流程。 */
|
|
24
|
+
export declare const DEFAULT_CARD_STATUS = "reviewed";
|
|
25
|
+
/** 反向查表:节点 kind → 卡片 entity_type。`asset` 与执行产物没有卡片。 */
|
|
26
|
+
export declare function entityTypeOf(kind: AttributionNodeKind): DiagnosisEntityType | undefined;
|
|
27
|
+
/** 卡片能定义的节点类型。其余(asset / evidence / cause / unknown)不走卡片。 */
|
|
28
|
+
export declare const CARD_NODE_KINDS: AttributionNodeKind[];
|
|
29
|
+
/** 卡片能定义的边:全部是卡片字段的确定性投影。 */
|
|
30
|
+
export declare const CARD_EDGE_KINDS: AttributionEdgeKind[];
|
|
31
|
+
/** 一次排查写下的边。它们不属于任何卡片,见文件头的边界表。 */
|
|
32
|
+
export declare const RUN_EDGE_KINDS: AttributionEdgeKind[];
|
|
33
|
+
/**
|
|
34
|
+
* 卡片 → markdown 文本。
|
|
35
|
+
*
|
|
36
|
+
* 结构化块放在**正文里**而不是 front matter 的 JSON 里:改一个字段就从「一个几百字符的
|
|
37
|
+
* 长行整体重写」变成「一行改动」,review 时才看得出改了哪条判据、哪一步顺序。
|
|
38
|
+
* 这正是 §6.3 把三段分开的理由。
|
|
39
|
+
*/
|
|
40
|
+
export declare function serializeCard(card: DiagnosisCard): string;
|
|
41
|
+
export declare function parseCard(source: string): DiagnosisCard | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* 类型层与案例 → 卡片。
|
|
44
|
+
*
|
|
45
|
+
* `asset` / `evidence` / `cause` 节点**不产出卡片**:它们不是手写的知识(§6.4)。
|
|
46
|
+
* 被假设引用的资产会在反序列化时按 id 补一个最小节点回来。
|
|
47
|
+
*/
|
|
48
|
+
export declare function graphToCards(graph: AttributionGraphData, cases?: AttributionCase[]): DiagnosisCard[];
|
|
49
|
+
export interface CompiledDiagnosis {
|
|
50
|
+
graph: AttributionGraphData;
|
|
51
|
+
cases: AttributionCase[];
|
|
52
|
+
/** 卡片之间的关系(引用完整性等);节点字段校验仍走 `validateDiagnosis`。 */
|
|
53
|
+
problems: string[];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 卡片 → 图。
|
|
57
|
+
*
|
|
58
|
+
* 只产出「卡片定义得了」的那部分(类型层 + 引用层的资产 + 案例,以及五种卡片边);
|
|
59
|
+
* `evidence` / `cause` 与四条执行边由一次排查写入,不在这里合成 —— 否则一次执行的结果
|
|
60
|
+
* 会被伪装成可复用的知识。
|
|
61
|
+
*/
|
|
62
|
+
export declare function cardsToGraph(cards: DiagnosisCard[]): CompiledDiagnosis;
|
|
63
|
+
/**
|
|
64
|
+
* 卡片在磁盘上的相对路径:`02_wiki/<entity_type>/<slug(entity_id)>.md`。
|
|
65
|
+
*
|
|
66
|
+
* `entity_type` 里的斜杠是**目录层级**(五类排查卡片因此落在 `02_wiki/diagnosis/` 下,
|
|
67
|
+
* 与其它 wiki 子树分开),不是要压成横杠 —— 我一开始压了,结果写进去的卡片和编译器去读的
|
|
68
|
+
* 路径差一层目录,而失败是静默的:读不到,就只是图上少几条边。
|
|
69
|
+
*/
|
|
70
|
+
export declare function cardPathOf(card: DiagnosisCard): string;
|
|
71
|
+
//# sourceMappingURL=cards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../../src/diagnosis/cards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,KAAK,EACO,mBAAmB,EAAE,oBAAoB,EAAmB,mBAAmB,EAEjG,MAAM,YAAY,CAAA;AAwCnB,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,mBAAmB,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qBAAqB;IACrB,QAAQ,EAAE,oBAAoB,EAAE,CAAA;IAChC,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,aAAa,CAAA;AAgC7C,uDAAuD;AACvD,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,mBAAmB,GAAG,SAAS,CAEvF;AAED,6DAA6D;AAC7D,eAAO,MAAM,eAAe,EAAE,mBAAmB,EAA8C,CAAA;AAE/F,6BAA6B;AAC7B,eAAO,MAAM,eAAe,EAAE,mBAAmB,EAEhD,CAAA;AAED,mCAAmC;AACnC,eAAO,MAAM,cAAc,EAAE,mBAAmB,EAAwD,CAAA;AAQxG;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAiBzD;AAID,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CA+BnE;AAoDD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,GAAE,eAAe,EAAO,GAAG,aAAa,EAAE,CA8ExG;AAID,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,iBAAiB,CA+HtE;AA2BD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAEtD"}
|