dsh-data-domain-knowledge 0.1.0-alpha.8 → 0.1.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +177 -56
- package/cordis.patch.yml +17 -19
- package/eval/README.md +2 -2
- package/eval/evaluate-retrieval.mjs +1 -1
- package/lib/client.js +4037 -4040
- package/lib/doc-page.js +3 -4
- package/lib/pages.js +21351 -0
- package/lib/types/axis-contract.d.ts +9 -0
- package/lib/types/axis-contract.d.ts.map +1 -0
- package/lib/types/axis-contract.js +35 -0
- package/lib/types/axis-contract.js.map +1 -0
- package/lib/types/axis-registry.d.ts +304 -0
- package/lib/types/axis-registry.d.ts.map +1 -0
- package/lib/types/axis-registry.js +744 -0
- package/lib/types/axis-registry.js.map +1 -0
- package/lib/types/card-organize.d.ts +315 -0
- package/lib/types/card-organize.d.ts.map +1 -0
- package/lib/types/card-organize.js +668 -0
- package/lib/types/card-organize.js.map +1 -0
- package/lib/types/config-schema.d.ts +6 -8
- package/lib/types/config-schema.d.ts.map +1 -1
- package/lib/types/config-schema.js +5 -7
- package/lib/types/config-schema.js.map +1 -1
- package/lib/types/convert/host.d.ts.map +1 -1
- package/lib/types/convert/host.js +1 -20
- package/lib/types/convert/host.js.map +1 -1
- package/lib/types/convert/ingest.d.ts +14 -19
- package/lib/types/convert/ingest.d.ts.map +1 -1
- package/lib/types/convert/ingest.js +114 -40
- package/lib/types/convert/ingest.js.map +1 -1
- package/lib/types/convert/settings-schema.d.ts +2 -2
- package/lib/types/convert/settings-schema.d.ts.map +1 -1
- package/lib/types/convert/settings-schema.js +2 -2
- package/lib/types/convert/settings-schema.js.map +1 -1
- package/lib/types/diagnosis/cards.d.ts +26 -8
- package/lib/types/diagnosis/cards.d.ts.map +1 -1
- package/lib/types/diagnosis/cards.js +29 -10
- package/lib/types/diagnosis/cards.js.map +1 -1
- package/lib/types/diagnosis/schema.d.ts +1 -1
- package/lib/types/diagnosis/seed-source.d.ts +0 -9
- package/lib/types/diagnosis/seed-source.d.ts.map +1 -1
- package/lib/types/diagnosis/seed-source.js +2 -4
- package/lib/types/diagnosis/seed-source.js.map +1 -1
- package/lib/types/diagnosis/seed.d.ts +2 -2
- package/lib/types/diagnosis/seed.js +2 -2
- package/lib/types/diagnosis/store.d.ts +10 -5
- package/lib/types/diagnosis/store.d.ts.map +1 -1
- package/lib/types/diagnosis/store.js +18 -18
- package/lib/types/diagnosis/store.js.map +1 -1
- package/lib/types/extract-model.d.ts +7 -7
- package/lib/types/extract-model.d.ts.map +1 -1
- package/lib/types/extract-model.js +14 -10
- package/lib/types/extract-model.js.map +1 -1
- package/lib/types/extract.d.ts +2 -2
- package/lib/types/extract.js +2 -2
- package/lib/types/extraction-runs.d.ts +97 -0
- package/lib/types/extraction-runs.d.ts.map +1 -0
- package/lib/types/extraction-runs.js +169 -0
- package/lib/types/extraction-runs.js.map +1 -0
- package/lib/types/fs-atomic.d.ts.map +1 -1
- package/lib/types/fs-atomic.js +1 -2
- package/lib/types/fs-atomic.js.map +1 -1
- package/lib/types/index.d.ts +6 -10
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +629 -192
- package/lib/types/index.js.map +1 -1
- package/lib/types/intent/engine.d.ts +11 -5
- package/lib/types/intent/engine.d.ts.map +1 -1
- package/lib/types/intent/engine.js +29 -80
- package/lib/types/intent/engine.js.map +1 -1
- package/lib/types/intent/host.d.ts +8 -25
- package/lib/types/intent/host.d.ts.map +1 -1
- package/lib/types/intent/host.js +26 -211
- package/lib/types/intent/host.js.map +1 -1
- package/lib/types/intent/preset-tools.d.ts +2 -2
- package/lib/types/intent/preset-tools.js +3 -3
- package/lib/types/intent/store.d.ts +16 -58
- package/lib/types/intent/store.d.ts.map +1 -1
- package/lib/types/intent/store.js +202 -102
- package/lib/types/intent/store.js.map +1 -1
- package/lib/types/intent/tools.d.ts +6 -11
- package/lib/types/intent/tools.d.ts.map +1 -1
- package/lib/types/intent/tools.js +8 -28
- package/lib/types/intent/tools.js.map +1 -1
- package/lib/types/intent/types.d.ts +9 -35
- package/lib/types/intent/types.d.ts.map +1 -1
- package/lib/types/intent/types.js +2 -8
- package/lib/types/intent/types.js.map +1 -1
- package/lib/types/knowledge-bases.d.ts +8 -117
- package/lib/types/knowledge-bases.d.ts.map +1 -1
- package/lib/types/knowledge-bases.js +21 -674
- package/lib/types/knowledge-bases.js.map +1 -1
- package/lib/types/knowledge.d.ts +550 -0
- package/lib/types/knowledge.d.ts.map +1 -0
- package/lib/types/knowledge.js +1213 -0
- package/lib/types/knowledge.js.map +1 -0
- package/lib/types/layout.d.ts +98 -26
- package/lib/types/layout.d.ts.map +1 -1
- package/lib/types/layout.js +100 -26
- package/lib/types/layout.js.map +1 -1
- package/lib/types/migrate.d.ts.map +1 -1
- package/lib/types/migrate.js +47 -4
- package/lib/types/migrate.js.map +1 -1
- package/lib/types/model-text.d.ts +1 -1
- package/lib/types/model-text.js +1 -1
- package/lib/types/present.d.ts +0 -3
- package/lib/types/present.d.ts.map +1 -1
- package/lib/types/present.js +6 -7
- package/lib/types/present.js.map +1 -1
- package/lib/types/query-analysis.d.ts +37 -0
- package/lib/types/query-analysis.d.ts.map +1 -0
- package/lib/types/query-analysis.js +103 -0
- package/lib/types/query-analysis.js.map +1 -0
- package/lib/types/recall-rank.d.ts +2 -2
- package/lib/types/recall-rank.d.ts.map +1 -1
- package/lib/types/recall-rank.js +3 -3
- package/lib/types/recall-rank.js.map +1 -1
- package/lib/types/runtime.d.ts +1006 -211
- package/lib/types/runtime.d.ts.map +1 -1
- package/lib/types/runtime.js +4345 -1370
- package/lib/types/runtime.js.map +1 -1
- package/lib/types/settings-schema.d.ts +6 -14
- package/lib/types/settings-schema.d.ts.map +1 -1
- package/lib/types/settings-schema.js +5 -7
- package/lib/types/settings-schema.js.map +1 -1
- package/lib/types/source-images.d.ts +33 -0
- package/lib/types/source-images.d.ts.map +1 -1
- package/lib/types/source-images.js +56 -0
- package/lib/types/source-images.js.map +1 -1
- package/lib/types/store/derived.d.ts +145 -0
- package/lib/types/store/derived.d.ts.map +1 -0
- package/lib/types/store/derived.js +295 -0
- package/lib/types/store/derived.js.map +1 -0
- package/lib/types/store/knowledge-db.d.ts +404 -0
- package/lib/types/store/knowledge-db.d.ts.map +1 -0
- package/lib/types/store/knowledge-db.js +1198 -0
- package/lib/types/store/knowledge-db.js.map +1 -0
- package/lib/types/store/migrate.d.ts +172 -0
- package/lib/types/store/migrate.d.ts.map +1 -0
- package/lib/types/store/migrate.js +498 -0
- package/lib/types/store/migrate.js.map +1 -0
- package/lib/types/store/views.d.ts +118 -0
- package/lib/types/store/views.d.ts.map +1 -0
- package/lib/types/store/views.js +237 -0
- package/lib/types/store/views.js.map +1 -0
- package/lib/types/types.d.ts +272 -262
- package/lib/types/types.d.ts.map +1 -1
- package/lib/types/types.js +26 -350
- package/lib/types/types.js.map +1 -1
- package/lib/types/wiki-finalize.d.ts +48 -31
- package/lib/types/wiki-finalize.d.ts.map +1 -1
- package/lib/types/wiki-finalize.js +65 -39
- package/lib/types/wiki-finalize.js.map +1 -1
- package/lib/types/wiki-materialize.d.ts +84 -0
- package/lib/types/wiki-materialize.d.ts.map +1 -0
- package/lib/types/wiki-materialize.js +171 -0
- package/lib/types/wiki-materialize.js.map +1 -0
- package/lib/types/wiki-trial-types.d.ts +298 -0
- package/lib/types/wiki-trial-types.d.ts.map +1 -0
- package/lib/types/wiki-trial-types.js +18 -0
- package/lib/types/wiki-trial-types.js.map +1 -0
- package/lib/types/wiki-trial.d.ts +255 -0
- package/lib/types/wiki-trial.d.ts.map +1 -0
- package/lib/types/wiki-trial.js +1191 -0
- package/lib/types/wiki-trial.js.map +1 -0
- package/lib/types/wiki-types.d.ts +15 -17
- package/lib/types/wiki-types.d.ts.map +1 -1
- package/lib/types/wiki-types.js +46 -70
- package/lib/types/wiki-types.js.map +1 -1
- package/package.json +7 -4
- package/preset/tita-data-agent/agent.cordis.yml +13 -14
- package/scripts/doctor.mjs +5 -9
- package/scripts/e2e-pipeline.mjs +0 -3
- package/src/axis-contract.ts +35 -0
- package/src/axis-registry.ts +880 -0
- package/src/card-organize.ts +836 -0
- package/src/client/AgentPresetCard.tsx +2 -2
- package/src/client/AttributionEventGuide.tsx +175 -0
- package/src/client/AxisMatrix.tsx +389 -0
- package/src/client/AxisRegistrySection.tsx +394 -0
- package/src/client/CompileDialogs.tsx +67 -21
- package/src/client/DeleteDocumentDialog.tsx +198 -0
- package/src/client/DirectoryPicker.tsx +12 -78
- package/src/client/ExpansionGraph.tsx +11 -12
- package/src/client/ImportFilesDialog.tsx +136 -78
- package/src/client/InfoHint.tsx +40 -5
- package/src/client/{IntentLogicTab.tsx → IntentLogic.tsx} +33 -26
- package/src/client/IntentTab.tsx +152 -589
- package/src/client/KnowledgeBaseTab.tsx +1357 -712
- package/src/client/KnowledgeLayerSection.tsx +629 -0
- package/src/client/KnowledgePanel.tsx +69 -20
- package/src/client/KnowledgeStepRail.tsx +16 -17
- package/src/client/KnowledgeToolRow.tsx +7 -8
- package/src/client/ListPager.tsx +1 -1
- package/src/client/NodeSettings.tsx +26 -46
- package/src/client/OperationLogTab.tsx +37 -21
- package/src/client/PreviewSections.tsx +340 -14
- package/src/client/RecallPanel.tsx +152 -51
- package/src/client/RelatedGraph.tsx +8 -8
- package/src/client/TabGuide.tsx +439 -0
- package/src/client/TrialReportView.tsx +449 -0
- package/src/client/TypeDefinitionDrawer.tsx +33 -314
- package/src/client/WikiCardPreview.tsx +181 -20
- package/src/client/WikiCardReview.tsx +93 -104
- package/src/client/WikiCardRow.tsx +24 -17
- package/src/client/WikiFlowPanel.tsx +577 -0
- package/src/client/WikiTrialRun.tsx +216 -0
- package/src/client/agent-preset.ts +2 -2
- package/src/client/arch/AgentArchitectureGraph.tsx +2 -2
- package/src/client/arch/NodeLogicPanel.tsx +2 -2
- package/src/client/arch/ProblemDetailPanel.tsx +2 -2
- package/src/client/arch/model.ts +147 -16
- package/src/client/architecture.tsx +78 -74
- package/src/client/attribution/AttributionGraph.tsx +1 -1
- package/src/client/attribution/AttributionTab.tsx +41 -11
- package/src/client/attribution/CaseView.tsx +2 -2
- package/src/client/attribution/GraphStage.tsx +1 -1
- package/src/client/attribution/RunView.tsx +2 -2
- package/src/client/attribution/StageChrome.tsx +2 -2
- package/src/client/attribution/ViewSwitch.tsx +2 -2
- package/src/client/axis-lookup.ts +74 -0
- package/src/client/config-scope.ts +2 -2
- package/src/client/convert/ConvertPanel.tsx +9 -25
- package/src/client/doc-page.css +2 -2
- package/src/client/doc-page.tsx +7 -9
- package/src/client/graph/edges.ts +5 -26
- package/src/client/graph/expansion.ts +1 -1
- package/src/client/graph/layout.ts +15 -105
- package/src/client/graph/related.ts +1 -1
- package/src/client/index.ts +12 -6
- package/src/client/ledger.tsx +5 -5
- package/src/client/pages.css +461 -0
- package/src/client/pages.tsx +255 -0
- package/src/client/preview-citations.ts +145 -0
- package/src/client/problem-domains.ts +5 -5
- package/src/client/styles.css +1125 -154
- package/src/client/useFitScale.ts +9 -15
- package/src/client/wiki-trial.ts +414 -0
- package/src/config-schema.ts +6 -10
- package/src/convert/host.ts +1 -21
- package/src/convert/ingest.ts +128 -55
- package/src/convert/settings-schema.ts +2 -2
- package/src/diagnosis/cards.ts +42 -11
- package/src/diagnosis/schema.ts +1 -1
- package/src/diagnosis/seed-source.ts +2 -13
- package/src/diagnosis/seed.ts +2 -2
- package/src/diagnosis/store.ts +18 -18
- package/src/extract-model.ts +15 -11
- package/src/extract.ts +4 -4
- package/src/extraction-runs.ts +216 -0
- package/src/fs-atomic.ts +1 -2
- package/src/index.ts +599 -189
- package/src/intent/README.md +27 -50
- package/src/intent/engine.ts +28 -78
- package/src/intent/host.ts +30 -218
- package/src/intent/preset-tools.ts +3 -3
- package/src/intent/store.ts +180 -105
- package/src/intent/tools.ts +8 -35
- package/src/intent/types.ts +9 -32
- package/src/knowledge-bases.ts +29 -672
- package/src/knowledge.ts +1524 -0
- package/src/layout.ts +102 -27
- package/src/migrate.ts +45 -4
- package/src/model-text.ts +1 -1
- package/src/present.ts +9 -10
- package/src/python/embedding_worker.py +16 -1
- package/src/query-analysis.ts +135 -0
- package/src/recall-rank.ts +4 -4
- package/src/runtime.ts +4453 -1322
- package/src/settings-schema.ts +5 -7
- package/src/source-images.ts +55 -0
- package/src/store/derived.ts +316 -0
- package/src/store/knowledge-db.ts +1375 -0
- package/src/store/migrate.ts +590 -0
- package/src/store/views.ts +313 -0
- package/src/types.ts +281 -564
- package/src/wiki-finalize.ts +72 -43
- package/src/wiki-materialize.ts +213 -0
- package/src/wiki-trial-types.ts +293 -0
- package/src/wiki-trial.ts +1319 -0
- package/src/wiki-types.ts +47 -78
- package/lib/types/intent/settings-schema.d.ts +0 -59
- package/lib/types/intent/settings-schema.d.ts.map +0 -1
- package/lib/types/intent/settings-schema.js +0 -57
- package/lib/types/intent/settings-schema.js.map +0 -1
- package/src/client/KnowledgeGraphView.tsx +0 -519
- package/src/client/WikiFlowCard.tsx +0 -188
- package/src/client/WikiTypeEditor.tsx +0 -433
- package/src/client/graph.css +0 -109
- package/src/client/wiki-type-groups.ts +0 -86
- package/src/intent/settings-schema.ts +0 -63
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Materialize(0063 §5.3):**坐标 → Wiki Card**。
|
|
3
|
+
*
|
|
4
|
+
* ## 它在整条链路里的位置
|
|
5
|
+
*
|
|
6
|
+
* ```text
|
|
7
|
+
* Document ──▶ Extract ──▶ Resolve ──▶ Materialize ──▶ Wiki Card
|
|
8
|
+
* 知识 + 坐标 卡片
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* 前两段由 `wiki-trial.ts` 完成(它对一份文档产出 Knowledge 清单与坐标)。这一段把
|
|
12
|
+
* 坐标变成卡片身份 —— **系统做,确定性**。同一份报告跑两次得到同一批卡片;展示标题
|
|
13
|
+
* 会在后续的模型组织阶段统一生成。
|
|
14
|
+
*
|
|
15
|
+
* ## 为什么不让模型做
|
|
16
|
+
*
|
|
17
|
+
* | 理由 | 说明 |
|
|
18
|
+
* |---|---|
|
|
19
|
+
* | 坐标就是卡片身份 | 三个分量已经在 Knowledge 的标签里,模型再判一遍是重复劳动 |
|
|
20
|
+
* | 坐标是确定的 | 三个分量已经在 Knowledge 的标签里,模型再判一遍是重复劳动 |
|
|
21
|
+
* | 标题属于表达 | 这里只给出候选标题,后续 `Organize` 会按整批 Knowledge 重新组织展示标题 |
|
|
22
|
+
*
|
|
23
|
+
* **没有「要不要建卡」这个问题**:一个坐标 + 至少一条 Knowledge,就天然要建。
|
|
24
|
+
*
|
|
25
|
+
* ## 产出的是 `ExtractionCandidate`,不是卡片
|
|
26
|
+
*
|
|
27
|
+
* 这一点是刻意的:编译链路的下游(判重、并入已有卡片、正文追加、图片、相关块、索引页)
|
|
28
|
+
* 全都建立在「候选」这个概念上,而且它们与「候选从哪来」无关。所以这一段只换**来源**,
|
|
29
|
+
* 不换下游 —— 迁移的影响面因此收在一个函数里。
|
|
30
|
+
*/
|
|
31
|
+
import { legacyCardNameFor } from './wiki-trial.js';
|
|
32
|
+
/**
|
|
33
|
+
* 一个骨架的小节名 → 渲染用的标题。
|
|
34
|
+
*
|
|
35
|
+
* `字段` 是提示词里的兜底值(「拿不准就填字段」),它不是一个小节而是一个位置。
|
|
36
|
+
* 单独成节比硬塞进某个小节诚实:塞进去之后,人读到的正文会像是那一节的内容,
|
|
37
|
+
* 而模型其实说了「我不知道它属于哪一节」。
|
|
38
|
+
*/
|
|
39
|
+
const FIELD_SECTION = '字段';
|
|
40
|
+
/**
|
|
41
|
+
* 报告里的坐标是**名字**,库里要的是**轴实体 id**。
|
|
42
|
+
*
|
|
43
|
+
* 抽出来只因为这一处映射有两个调用方(物化卡片 / 收知识),而它们**必须给出同一个
|
|
44
|
+
* 答案**:`ingestTrialKnowledge` 的注释写着「坐标从轴的解析结果来,**不从名字猜**。
|
|
45
|
+
* 名字会改,id 不会」—— 两处各写一遍,就是那条纪律被破坏的方式。
|
|
46
|
+
*
|
|
47
|
+
* 名字在库里查不到(没接注册表、或那个轴没解析出来)时给空串;三个都空时调用方据此
|
|
48
|
+
* **不给卡片写坐标**,而不是写一个「三段空串」的假坐标。
|
|
49
|
+
*/
|
|
50
|
+
export function coordinateIdsOf(axes, object, action, scene) {
|
|
51
|
+
const idOf = (list, name) => name === null ? '' : list.find(axis => axis.name === name)?.id ?? '';
|
|
52
|
+
return {
|
|
53
|
+
objectId: idOf(axes.objects, object),
|
|
54
|
+
actionId: idOf(axes.actions, action),
|
|
55
|
+
sceneId: idOf(axes.scenes, scene),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** 一个坐标是不是「三段都空」—— 那种情况不是坐标,是「这一次没拿到坐标」。 */
|
|
59
|
+
export function coordinateIsEmpty(coordinate) {
|
|
60
|
+
return coordinate.objectId === '' && coordinate.actionId === '' && coordinate.sceneId === '';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 把一份抽取报告物化成候选。
|
|
64
|
+
*
|
|
65
|
+
* `profileId` 是这张卡用的**骨架**(§8.2:第一版一个知识库固定一个)。它只决定
|
|
66
|
+
* 卡片按哪套小节校验与渲染,不决定卡片的身份 —— 身份是坐标推出来的卡名。
|
|
67
|
+
*/
|
|
68
|
+
export function candidatesFromReport(input) {
|
|
69
|
+
const { report, profileId, sourceId } = input;
|
|
70
|
+
const byId = new Map(report.knowledge.map(item => [item.id, item]));
|
|
71
|
+
const seenNames = new Map();
|
|
72
|
+
const collisions = [];
|
|
73
|
+
const cards = [];
|
|
74
|
+
let unresolvedCoordinates = 0;
|
|
75
|
+
for (const card of report.wikiCards) {
|
|
76
|
+
// 一条 Knowledge 都没引用到的卡不建 —— 空壳卡没有任何东西可召回,
|
|
77
|
+
// 而它占的 id 会让下一份真正说了点什么的文档并进这张空卡里。
|
|
78
|
+
const items = card.placements
|
|
79
|
+
.map(placement => byId.get(placement.item))
|
|
80
|
+
.filter((item) => item !== undefined);
|
|
81
|
+
if (items.length === 0)
|
|
82
|
+
continue;
|
|
83
|
+
/**
|
|
84
|
+
* 撞名检测。键是**坐标**而不是卡名 —— 要抓的正是「两个不同坐标、同一个名字」。
|
|
85
|
+
*/
|
|
86
|
+
const coordinate = `${card.object ?? ''}\u0001${card.action ?? ''}\u0001${card.scene ?? ''}`;
|
|
87
|
+
const previous = seenNames.get(card.name);
|
|
88
|
+
if (previous !== undefined && previous !== coordinate)
|
|
89
|
+
collisions.push(card.name);
|
|
90
|
+
else
|
|
91
|
+
seenNames.set(card.name, coordinate);
|
|
92
|
+
/**
|
|
93
|
+
* 坐标换成轴实体 id(0069)。**这一步就是 0069 之前缺的那一步**:报告里的坐标是
|
|
94
|
+
* 名字,而卡片落地要的是 id —— 从前它在这里被丢掉,于是库里「这张卡是哪个坐标」
|
|
95
|
+
* 只能从卡名字面反推。
|
|
96
|
+
*/
|
|
97
|
+
const ids = coordinateIdsOf(report, card.object, card.action, card.scene);
|
|
98
|
+
const usable = coordinateIsEmpty(ids) ? undefined : ids;
|
|
99
|
+
if (usable === undefined)
|
|
100
|
+
unresolvedCoordinates += 1;
|
|
101
|
+
cards.push({
|
|
102
|
+
candidate: {
|
|
103
|
+
kind: 'entity',
|
|
104
|
+
name: card.name,
|
|
105
|
+
type: profileId,
|
|
106
|
+
// 旧的无分隔拼接标题继续参与召回与判重,但不再占据展示标题。
|
|
107
|
+
aliases: [...new Set([legacyCardNameFor(card.object, card.action, card.scene)])]
|
|
108
|
+
.filter(alias => alias !== card.name),
|
|
109
|
+
body: renderFallbackBody(card.placements, byId),
|
|
110
|
+
...(items[0] ? { summary: items[0].text } : {}),
|
|
111
|
+
/**
|
|
112
|
+
* 证据取这条卡里**第一条核对得上的引文**。
|
|
113
|
+
*
|
|
114
|
+
* 卡片级别的 evidence 只是「这张卡是从哪份文档的哪一段来的」这一条线索 ——
|
|
115
|
+
* 逐条知识各自的出处留在 Knowledge 上(那是真源)。所以这里挑一条就够,
|
|
116
|
+
* 不把每条知识的引文都堆到卡片上:那会让同一句话在库里存很多份。
|
|
117
|
+
*/
|
|
118
|
+
evidence: evidenceOf(items, sourceId),
|
|
119
|
+
confidence: 0.7,
|
|
120
|
+
},
|
|
121
|
+
...(usable === undefined ? {} : { coordinate: usable }),
|
|
122
|
+
/**
|
|
123
|
+
* 落位(0063 §4.5)。`order` 已经是排好序的 —— `materialize()` 排过一次,
|
|
124
|
+
* 这里照抄,不再排第二遍(两处都排就是两套顺序)。
|
|
125
|
+
*/
|
|
126
|
+
placements: card.placements.map((placement, index) => ({
|
|
127
|
+
knowledgeId: placement.item,
|
|
128
|
+
section: placement.section,
|
|
129
|
+
ordinal: index,
|
|
130
|
+
origin: 'compiler',
|
|
131
|
+
})),
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
return { cards, collisions, unresolvedCoordinates };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 兼容路径:按 section 分组拼接原文。
|
|
138
|
+
*
|
|
139
|
+
* 这不是默认的卡片正文。默认开启 Card Organize 时,`runtime.ts` 会用组织器产出的
|
|
140
|
+
* `renderOrganizeBody()`;这里仅保留给显式关闭组织或组织调用失败的兼容场景。
|
|
141
|
+
*/
|
|
142
|
+
function renderFallbackBody(placements, byId) {
|
|
143
|
+
const order = [];
|
|
144
|
+
const grouped = new Map();
|
|
145
|
+
for (const placement of placements) {
|
|
146
|
+
const item = byId.get(placement.item);
|
|
147
|
+
if (item === undefined)
|
|
148
|
+
continue;
|
|
149
|
+
const section = placement.section.trim() || FIELD_SECTION;
|
|
150
|
+
if (!grouped.has(section)) {
|
|
151
|
+
grouped.set(section, []);
|
|
152
|
+
order.push(section);
|
|
153
|
+
}
|
|
154
|
+
grouped.get(section).push(item.text);
|
|
155
|
+
}
|
|
156
|
+
return order
|
|
157
|
+
.map(section => `## ${section}\n\n${grouped.get(section).join('\n\n')}`)
|
|
158
|
+
.join('\n\n');
|
|
159
|
+
}
|
|
160
|
+
/** 这张卡的证据:第一条核对得上的引文。一条都没有时只给来源 id。 */
|
|
161
|
+
function evidenceOf(items, sourceId) {
|
|
162
|
+
for (const item of items) {
|
|
163
|
+
const source = item.sources.find(candidate => candidate.found);
|
|
164
|
+
if (source === undefined)
|
|
165
|
+
continue;
|
|
166
|
+
const heading = source.headingPath.length > 0 ? source.headingPath[source.headingPath.length - 1] : '';
|
|
167
|
+
return { sourceId, ...(heading ? { heading } : {}), quote: source.quote };
|
|
168
|
+
}
|
|
169
|
+
return { sourceId };
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=wiki-materialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-materialize.js","sourceRoot":"","sources":["../../src/wiki-materialize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiki 抽取试跑(0063)的**类型真源**。
|
|
3
|
+
*
|
|
4
|
+
* ## 为什么要单独一个文件
|
|
5
|
+
*
|
|
6
|
+
* 这些类型有两个消费者:服务端的判定(`wiki-trial.ts`)和客户端的展示
|
|
7
|
+
* (`client/WikiTrialRun.tsx`)。原来客户端手抄了一份镜像,结果两次改版各漂了一次 ——
|
|
8
|
+
* 一次漏了 `items`,一次漏了 `summary`,界面上表现为整块白屏或少半页。
|
|
9
|
+
*
|
|
10
|
+
* 改成让客户端 `export type` 转发服务端模块也不行:那会把 `types.ts` 一并拉进客户端的
|
|
11
|
+
* 类型程序,而它依赖 `node:fs` / `node:os` / `process`,客户端 tsconfig 里没有 Node 类型。
|
|
12
|
+
*
|
|
13
|
+
* 所以类型单独放这里:**它不 import 任何东西,也不碰任何 Node API**。服务端与客户端
|
|
14
|
+
* 各自 import 它,只有一份定义。客户端用 `export type` 转发,编译后被完全抹掉,
|
|
15
|
+
* esbuild 不会把这个模块打进浏览器 bundle。
|
|
16
|
+
*/
|
|
17
|
+
export type TrialActor = '系统' | '模型' | '人';
|
|
18
|
+
/** 0063 §5 的四个阶段。`phase` 只用于界面分组,不影响判定。 */
|
|
19
|
+
export type TrialPhase = '① Extract · 抽取' | '② Resolve · 归一' | '③ Materialize · 物化' | '④ Index · 建索引';
|
|
20
|
+
/**
|
|
21
|
+
* 一处出处(0063 §2.1)。
|
|
22
|
+
*
|
|
23
|
+
* `found` / `locator` / `headingPath` 里,只有 `headingPath` 可能来自模型;
|
|
24
|
+
* 能不能在原文里逐字找到要**本地查**,那是引文核验。
|
|
25
|
+
*/
|
|
26
|
+
export interface TrialSource {
|
|
27
|
+
documentId: string;
|
|
28
|
+
quote: string;
|
|
29
|
+
/** 引文在原文里的起止字符偏移。找不到时没有这个字段。 */
|
|
30
|
+
locator?: {
|
|
31
|
+
start: number;
|
|
32
|
+
end: number;
|
|
33
|
+
};
|
|
34
|
+
headingPath: string[];
|
|
35
|
+
/** 引文是不是真能在原文里一字不差找到。false 说明模型改写了。 */
|
|
36
|
+
found: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 知识:一条可独立检索、验证或执行的最小知识单元。
|
|
40
|
+
*
|
|
41
|
+
* (不是"命题"。`查埋点方案维表取 spm_babel_template` 不是命题,但它是知识。)
|
|
42
|
+
*
|
|
43
|
+
* **只有 `text` 是内容**,其余全是索引与出处。
|
|
44
|
+
*/
|
|
45
|
+
export interface TrialKnowledge {
|
|
46
|
+
id: string;
|
|
47
|
+
text: string;
|
|
48
|
+
/** 三个轴实体的**名字**,不是 id —— 换成 id 是第 4 步的事。 */
|
|
49
|
+
object: string | null;
|
|
50
|
+
action: string | null;
|
|
51
|
+
scene: string | null;
|
|
52
|
+
/**
|
|
53
|
+
* 这条知识在卡里排哪。
|
|
54
|
+
*
|
|
55
|
+
* 合法取值来自类型定义(`card.type` 管的是建议小节)。**试跑没有类型** ——
|
|
56
|
+
* 0063 没有规定卡片从哪得到类型,所以这一步只报出来,不校验。Knowledge 暂不增加
|
|
57
|
+
* `Fact` / `Rule` / `Procedure` / `Constraint` 正式字段;未来若需要记录,先放抽取或
|
|
58
|
+
* Card metadata,等不同类型产生不同策略后再结构化。
|
|
59
|
+
*/
|
|
60
|
+
section: string;
|
|
61
|
+
/** 同一小节内的第几位,从 1 开始。 */
|
|
62
|
+
order: number;
|
|
63
|
+
sources: TrialSource[];
|
|
64
|
+
/**
|
|
65
|
+
* 三个分量全空。
|
|
66
|
+
*
|
|
67
|
+
* **它仍然是合法的知识**:有 `text`、有 `sources`。它不进矩阵、不成卡,
|
|
68
|
+
* 但会被全库命中。坐标不是知识的必要条件,是它进入领域 Wiki 的入场券。
|
|
69
|
+
*/
|
|
70
|
+
noCoordinate: boolean;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 一个轴实体。
|
|
74
|
+
*
|
|
75
|
+
* `name` 是抽取阶段给出的 **mention**(原文里怎么称呼它),`id` 是第 4 步的机械绑定结果。
|
|
76
|
+
* 当这次试跑带着知识库时,`id` 来自**轴注册表**(`axis-registry.ts`)—— 那是 Resolve
|
|
77
|
+
* 真正的产出;没有注册表时退化成按名字算出来的稳定 id,此时 `outcome` 是 `no-registry`。
|
|
78
|
+
*/
|
|
79
|
+
export interface TrialAxis {
|
|
80
|
+
name: string;
|
|
81
|
+
/** 名字 → id 的机械绑定结果(第 4 步)。 */
|
|
82
|
+
id: string;
|
|
83
|
+
/**
|
|
84
|
+
* 这一轮拿到的那句定义(0068)。
|
|
85
|
+
*
|
|
86
|
+
* 命中已有实体时给的是**库里那份**(模型这次提的可能没被采纳 —— 人写的不许覆盖);
|
|
87
|
+
* 新建时给的是模型这次写的。两处都不是「模型刚才说了什么」的原文。
|
|
88
|
+
*/
|
|
89
|
+
definition?: string;
|
|
90
|
+
/** 从原文复制的最短证据片段;用于 review 坐标是否真的有依据。 */
|
|
91
|
+
evidence?: string;
|
|
92
|
+
/**
|
|
93
|
+
* 模型指认的已有坐标名字(0068)。它在 `how === 'model-picked'` 时被采纳,
|
|
94
|
+
* 其余情况下只是「它以为对上了」这件事的记录 —— 报告要能看出模型错在哪。
|
|
95
|
+
*/
|
|
96
|
+
existing?: string;
|
|
97
|
+
/** 本文档内与它归一的其它写法。 */
|
|
98
|
+
aliases: string[];
|
|
99
|
+
/**
|
|
100
|
+
* 抽取给出的**作用域证据**:这个 mention 属于谁。空串 = 没有证据。
|
|
101
|
+
*
|
|
102
|
+
* 它是 `坑位click` → `通天塔坑位click` 那条路的关键输入。**没有证据就不加前缀** ——
|
|
103
|
+
* 机械拼接会把 `楼层`、`spm` 这些通用对象错加成「通天塔楼层」。
|
|
104
|
+
*/
|
|
105
|
+
parentMention?: string;
|
|
106
|
+
/**
|
|
107
|
+
* 注册表给的结论。
|
|
108
|
+
*
|
|
109
|
+
* - `matched`:命中了一个已有实体(canonical / alias / 全局唯一)。
|
|
110
|
+
* - `new`:没有命中,这次**新建了一个候选**(`status: candidate`,等人确认)。
|
|
111
|
+
* - `ambiguous`:多个作用域都命中,且没有足够证据选一个 —— **没猜**。
|
|
112
|
+
* - `no-registry`:这次试跑没有知识库上下文,只做了文档内的机械归一。
|
|
113
|
+
*/
|
|
114
|
+
outcome: 'matched' | 'new' | 'ambiguous' | 'no-registry';
|
|
115
|
+
/** 一句话说清「为什么是这个结论」。命中方式,或候选清单。 */
|
|
116
|
+
how: string;
|
|
117
|
+
}
|
|
118
|
+
/** `content.knowledge` 的一条:知识引用 × 位置。 */
|
|
119
|
+
export interface TrialPlacement {
|
|
120
|
+
item: string;
|
|
121
|
+
section: string;
|
|
122
|
+
order: number;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Wiki Card:一个坐标 + 它组织起来的 Knowledge。
|
|
126
|
+
*
|
|
127
|
+
* **卡片不存正文。** `content.knowledge` 是引用与位置,`content.editorial`
|
|
128
|
+
* (summary / notes / warnings)由人写,试跑不产。
|
|
129
|
+
*/
|
|
130
|
+
export interface TrialWikiCard {
|
|
131
|
+
object: string | null;
|
|
132
|
+
action: string | null;
|
|
133
|
+
scene: string | null;
|
|
134
|
+
/** 系统按坐标推导的自然语言展示标题。 */
|
|
135
|
+
name: string;
|
|
136
|
+
placements: TrialPlacement[];
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* 矩阵里的一组:**同一个 `(object, action, scene)` 下的知识**。
|
|
140
|
+
*
|
|
141
|
+
* 组是矩阵最小的可点单位。一个场景一张 Wiki Card,所以 `card` 至多一个名字;
|
|
142
|
+
* 而 `items` 是这一组的知识 id —— 点开一个数字要看到的就是它们。
|
|
143
|
+
*/
|
|
144
|
+
export interface TrialMatrixGroup {
|
|
145
|
+
/** 场景名。空串 = 这一组没有场景。 */
|
|
146
|
+
scene: string;
|
|
147
|
+
/** 落在这一组的知识条数。 */
|
|
148
|
+
knowledge: number;
|
|
149
|
+
/** 这一组的 Wiki Card 名。没有成卡时是空串。 */
|
|
150
|
+
card: string;
|
|
151
|
+
/** 这一组里的知识 id,按它们在报告里的顺序。 */
|
|
152
|
+
items: string[];
|
|
153
|
+
}
|
|
154
|
+
/** 矩阵的一格。**场景落在格子内部**,不进坐标轴。 */
|
|
155
|
+
export interface TrialMatrixCell {
|
|
156
|
+
object: string | null;
|
|
157
|
+
action: string | null;
|
|
158
|
+
/** 这一格按场景分的组。渲染成 `场景名:数字`。 */
|
|
159
|
+
groups: TrialMatrixGroup[];
|
|
160
|
+
/** 这一格的合计条数。 */
|
|
161
|
+
knowledge: number;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* 有对象、没有动作(或反过来)的那些知识,**归到它已有的那一边**。
|
|
165
|
+
*
|
|
166
|
+
* 0063 原稿给矩阵多留了一行「无对象」和一列「无动作」。那样做的代价是**每个对象都多
|
|
167
|
+
* 一格、每个动作都多一格**,而绝大多数格子是空的 —— 空的形状本身没有信息,有信息的是
|
|
168
|
+
* 「这个对象有几条知识还没配动作」。所以这些知识挂在行头 / 列头上:数字跟着它归属的
|
|
169
|
+
* 那一边走,不再单开一条轴。
|
|
170
|
+
*/
|
|
171
|
+
export interface TrialMatrixLoose {
|
|
172
|
+
/** 对象名或动作名。 */
|
|
173
|
+
name: string;
|
|
174
|
+
groups: TrialMatrixGroup[];
|
|
175
|
+
knowledge: number;
|
|
176
|
+
}
|
|
177
|
+
export interface TrialMatrix {
|
|
178
|
+
/** 行:对象名,按模型给出顺序。 */
|
|
179
|
+
objects: string[];
|
|
180
|
+
/** 列:动作名,按模型给出顺序。 */
|
|
181
|
+
actions: string[];
|
|
182
|
+
cells: TrialMatrixCell[];
|
|
183
|
+
/** 有对象、没有动作的知识,按对象归拢 —— 显示在行头上。 */
|
|
184
|
+
noAction: TrialMatrixLoose[];
|
|
185
|
+
/** 有动作、没有对象的知识,按动作归拢 —— 显示在列头上。 */
|
|
186
|
+
noObject: TrialMatrixLoose[];
|
|
187
|
+
/** 三个分量都空的知识条数。它不进矩阵、不成卡,只被全库命中。 */
|
|
188
|
+
noCoordinate: number;
|
|
189
|
+
/** 有知识的格子数。 */
|
|
190
|
+
withKnowledge: number;
|
|
191
|
+
/** 有内容的格子数(有知识或有卡)。 */
|
|
192
|
+
filled: number;
|
|
193
|
+
/** 格子总数:对象 × 动作。两个轴都不单开一格。 */
|
|
194
|
+
slots: number;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 一步的**实际产出**,一行一条。
|
|
198
|
+
*
|
|
199
|
+
* 它和 `rows` 是两件事:`rows` 回答"这一步按什么判",`items` 回答"它判出了什么"。
|
|
200
|
+
* 只有统计没有值,人没法 review —— 而 review 正是试跑面板的全部用途。
|
|
201
|
+
*/
|
|
202
|
+
export interface TrialStepItem {
|
|
203
|
+
/** 左边:这一步看的东西。 */
|
|
204
|
+
ref: string;
|
|
205
|
+
/** 右边:这一步产出的值。 */
|
|
206
|
+
value: string;
|
|
207
|
+
/** 补充:理由、原文片段。 */
|
|
208
|
+
note?: string;
|
|
209
|
+
/** 这个值要人看。界面加波浪线。 */
|
|
210
|
+
flag?: 'warn';
|
|
211
|
+
}
|
|
212
|
+
export interface TrialStep {
|
|
213
|
+
id: string;
|
|
214
|
+
order: number;
|
|
215
|
+
name: string;
|
|
216
|
+
phase: TrialPhase;
|
|
217
|
+
actor: TrialActor;
|
|
218
|
+
needsHuman: boolean;
|
|
219
|
+
summary: string;
|
|
220
|
+
/** 判据、统计、缺什么。 */
|
|
221
|
+
rows: Array<{
|
|
222
|
+
label: string;
|
|
223
|
+
value: string;
|
|
224
|
+
}>;
|
|
225
|
+
items: TrialStepItem[];
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* 四条本地核验(0063 §5.7)。
|
|
229
|
+
*
|
|
230
|
+
* 报出来,**不阻塞**。`hits` 是这次命中几条;`note` 说这条核验抓的是什么。
|
|
231
|
+
*/
|
|
232
|
+
export interface TrialCheck {
|
|
233
|
+
name: string;
|
|
234
|
+
what: string;
|
|
235
|
+
hits: number;
|
|
236
|
+
note: string;
|
|
237
|
+
}
|
|
238
|
+
/** 抽取轨迹(0063 §5.5)。**它是审计,不是知识模型的一部分。** */
|
|
239
|
+
export interface TrialAudit {
|
|
240
|
+
dropped: Array<{
|
|
241
|
+
quote: string;
|
|
242
|
+
why: string;
|
|
243
|
+
}>;
|
|
244
|
+
}
|
|
245
|
+
export interface TrialReport {
|
|
246
|
+
title: string;
|
|
247
|
+
subject: string;
|
|
248
|
+
lines: number;
|
|
249
|
+
chars: number;
|
|
250
|
+
headings: number;
|
|
251
|
+
objects: TrialAxis[];
|
|
252
|
+
actions: TrialAxis[];
|
|
253
|
+
scenes: TrialAxis[];
|
|
254
|
+
knowledge: TrialKnowledge[];
|
|
255
|
+
wikiCards: TrialWikiCard[];
|
|
256
|
+
matrix: TrialMatrix;
|
|
257
|
+
checks: TrialCheck[];
|
|
258
|
+
steps: TrialStep[];
|
|
259
|
+
exceptions: Array<{
|
|
260
|
+
step: string;
|
|
261
|
+
message: string;
|
|
262
|
+
}>;
|
|
263
|
+
/**
|
|
264
|
+
* 模型接缝的状态。`ok: false` 时 `why` 说明原因(界面上要显示,不能静默)。
|
|
265
|
+
*
|
|
266
|
+
* `raw` 是模型实际回了什么的一小段。**没有它,降级告警没有下一步** ——
|
|
267
|
+
* 「模型的回答里没有 JSON」这句话本身不告诉人该去改什么。
|
|
268
|
+
*/
|
|
269
|
+
model: {
|
|
270
|
+
ok: boolean;
|
|
271
|
+
why?: string;
|
|
272
|
+
raw?: string;
|
|
273
|
+
};
|
|
274
|
+
/**
|
|
275
|
+
* 原样发出去的提示词。
|
|
276
|
+
*
|
|
277
|
+
* 面板要把它摊开:文档写一套、代码跑另一套而没人发现,是最贵的错。所以这里给的是
|
|
278
|
+
* **实际调用用的字符串**,不是文档里的理想版。
|
|
279
|
+
*/
|
|
280
|
+
prompt: {
|
|
281
|
+
system: string;
|
|
282
|
+
user: string;
|
|
283
|
+
};
|
|
284
|
+
/**
|
|
285
|
+
* 这一次下发了多少已有坐标(0068)。
|
|
286
|
+
*
|
|
287
|
+
* `null` = 没有下发(试跑面板没接注册表,或者库里一个实体都没有)。**截断数必须露出来**:
|
|
288
|
+
* 模型看不到某条坐标时会以为库里没有它,而那个误判只会在下一次抽取显形。
|
|
289
|
+
*/
|
|
290
|
+
axesContext: {
|
|
291
|
+
injected: number;
|
|
292
|
+
totals: number;
|
|
293
|
+
truncated: number;
|
|
294
|
+
selection?: 'full' | 'relevant' | 'head';
|
|
295
|
+
} | null;
|
|
296
|
+
audit: TrialAudit;
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=wiki-trial-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-trial-types.d.ts","sourceRoot":"","sources":["../../src/wiki-trial-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiki 抽取试跑(0063)的**类型真源**。
|
|
3
|
+
*
|
|
4
|
+
* ## 为什么要单独一个文件
|
|
5
|
+
*
|
|
6
|
+
* 这些类型有两个消费者:服务端的判定(`wiki-trial.ts`)和客户端的展示
|
|
7
|
+
* (`client/WikiTrialRun.tsx`)。原来客户端手抄了一份镜像,结果两次改版各漂了一次 ——
|
|
8
|
+
* 一次漏了 `items`,一次漏了 `summary`,界面上表现为整块白屏或少半页。
|
|
9
|
+
*
|
|
10
|
+
* 改成让客户端 `export type` 转发服务端模块也不行:那会把 `types.ts` 一并拉进客户端的
|
|
11
|
+
* 类型程序,而它依赖 `node:fs` / `node:os` / `process`,客户端 tsconfig 里没有 Node 类型。
|
|
12
|
+
*
|
|
13
|
+
* 所以类型单独放这里:**它不 import 任何东西,也不碰任何 Node API**。服务端与客户端
|
|
14
|
+
* 各自 import 它,只有一份定义。客户端用 `export type` 转发,编译后被完全抹掉,
|
|
15
|
+
* esbuild 不会把这个模块打进浏览器 bundle。
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=wiki-trial-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-trial-types.js","sourceRoot":"","sources":["../../src/wiki-trial-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
|