dsh-data-domain-knowledge 0.1.0-alpha.13 → 0.1.0-alpha.15
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 +89 -56
- package/cordis.patch.yml +36 -129
- package/eval/benchmark-extraction-format.mjs +20 -0
- package/lib/client.js +3262 -4142
- package/lib/doc-page.js +1 -1
- package/lib/pages.js +1147 -364
- package/lib/types/axis-registry.d.ts +8 -1
- package/lib/types/axis-registry.d.ts.map +1 -1
- package/lib/types/axis-registry.js +62 -7
- package/lib/types/axis-registry.js.map +1 -1
- package/lib/types/convert/host.d.ts.map +1 -1
- package/lib/types/convert/host.js +3 -0
- package/lib/types/convert/host.js.map +1 -1
- package/lib/types/convert/ingest.d.ts +9 -0
- package/lib/types/convert/ingest.d.ts.map +1 -1
- package/lib/types/convert/ingest.js +68 -9
- package/lib/types/convert/ingest.js.map +1 -1
- package/lib/types/diagnosis/cards.d.ts +7 -3
- package/lib/types/diagnosis/cards.d.ts.map +1 -1
- package/lib/types/diagnosis/cards.js +13 -8
- package/lib/types/diagnosis/cards.js.map +1 -1
- package/lib/types/diagnosis/run.d.ts +4 -13
- package/lib/types/diagnosis/run.d.ts.map +1 -1
- package/lib/types/diagnosis/run.js +26 -16
- package/lib/types/diagnosis/run.js.map +1 -1
- package/lib/types/diagnosis/schema.js +2 -2
- package/lib/types/diagnosis/schema.js.map +1 -1
- package/lib/types/diagnosis/seed-source.d.ts +1 -1
- package/lib/types/diagnosis/seed-source.d.ts.map +1 -1
- package/lib/types/diagnosis/seed-source.js +5 -4
- package/lib/types/diagnosis/seed-source.js.map +1 -1
- package/lib/types/diagnosis/seed.d.ts +4 -4
- package/lib/types/diagnosis/seed.d.ts.map +1 -1
- package/lib/types/diagnosis/seed.js +6 -8
- package/lib/types/diagnosis/seed.js.map +1 -1
- package/lib/types/diagnosis/store.d.ts +18 -17
- package/lib/types/diagnosis/store.d.ts.map +1 -1
- package/lib/types/diagnosis/store.js +94 -66
- package/lib/types/diagnosis/store.js.map +1 -1
- package/lib/types/diagnosis/types.d.ts +10 -16
- package/lib/types/diagnosis/types.d.ts.map +1 -1
- package/lib/types/diagnosis/types.js.map +1 -1
- package/lib/types/environment/dsh-python.d.ts +77 -0
- package/lib/types/environment/dsh-python.d.ts.map +1 -0
- package/lib/types/environment/dsh-python.js +139 -0
- package/lib/types/environment/dsh-python.js.map +1 -0
- package/lib/types/environment/install.d.ts +9 -1
- package/lib/types/environment/install.d.ts.map +1 -1
- package/lib/types/environment/install.js +149 -24
- package/lib/types/environment/install.js.map +1 -1
- package/lib/types/environment/model-catalog.d.ts +34 -2
- package/lib/types/environment/model-catalog.d.ts.map +1 -1
- package/lib/types/environment/model-catalog.js +40 -2
- package/lib/types/environment/model-catalog.js.map +1 -1
- package/lib/types/environment/service.d.ts +13 -3
- package/lib/types/environment/service.d.ts.map +1 -1
- package/lib/types/environment/service.js +127 -23
- package/lib/types/environment/service.js.map +1 -1
- package/lib/types/environment/types.d.ts +9 -0
- package/lib/types/environment/types.d.ts.map +1 -1
- package/lib/types/events.d.ts +2 -0
- package/lib/types/events.d.ts.map +1 -1
- package/lib/types/events.js +13 -0
- package/lib/types/events.js.map +1 -1
- package/lib/types/extract-contract.d.ts +1 -1
- package/lib/types/extract-contract.d.ts.map +1 -1
- package/lib/types/extract-contract.js +34 -31
- package/lib/types/extract-contract.js.map +1 -1
- package/lib/types/extract-model.d.ts +2 -0
- package/lib/types/extract-model.d.ts.map +1 -1
- package/lib/types/extract-model.js.map +1 -1
- package/lib/types/extract-table-contract.d.ts +3 -0
- package/lib/types/extract-table-contract.d.ts.map +1 -0
- package/lib/types/extract-table-contract.js +30 -0
- package/lib/types/extract-table-contract.js.map +1 -0
- package/lib/types/extract-table.d.ts +8 -0
- package/lib/types/extract-table.d.ts.map +1 -0
- package/lib/types/extract-table.js +151 -0
- package/lib/types/extract-table.js.map +1 -0
- package/lib/types/extraction-runs.d.ts +30 -6
- package/lib/types/extraction-runs.d.ts.map +1 -1
- package/lib/types/extraction-runs.js +69 -8
- package/lib/types/extraction-runs.js.map +1 -1
- package/lib/types/fs-atomic.d.ts +0 -7
- package/lib/types/fs-atomic.d.ts.map +1 -1
- package/lib/types/fs-atomic.js +17 -2
- package/lib/types/fs-atomic.js.map +1 -1
- package/lib/types/images.d.ts +1 -1
- package/lib/types/images.d.ts.map +1 -1
- package/lib/types/images.js +2 -2
- package/lib/types/images.js.map +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +232 -50
- package/lib/types/index.js.map +1 -1
- package/lib/types/intent/scope.d.ts.map +1 -1
- package/lib/types/intent/scope.js +1 -0
- package/lib/types/intent/scope.js.map +1 -1
- package/lib/types/intent/tools.d.ts +19 -0
- package/lib/types/intent/tools.d.ts.map +1 -1
- package/lib/types/intent/tools.js +37 -1
- package/lib/types/intent/tools.js.map +1 -1
- package/lib/types/knowledge-bases.d.ts.map +1 -1
- package/lib/types/knowledge-bases.js +5 -16
- package/lib/types/knowledge-bases.js.map +1 -1
- package/lib/types/knowledge.d.ts +3 -0
- package/lib/types/knowledge.d.ts.map +1 -1
- package/lib/types/knowledge.js +21 -5
- package/lib/types/knowledge.js.map +1 -1
- package/lib/types/materialize-snapshot.d.ts +49 -0
- package/lib/types/materialize-snapshot.d.ts.map +1 -0
- package/lib/types/materialize-snapshot.js +2 -0
- package/lib/types/materialize-snapshot.js.map +1 -0
- package/lib/types/model-text.d.ts +1 -1
- package/lib/types/model-text.d.ts.map +1 -1
- package/lib/types/model-text.js +5 -4
- package/lib/types/model-text.js.map +1 -1
- package/lib/types/oplog.d.ts.map +1 -1
- package/lib/types/oplog.js +7 -0
- package/lib/types/oplog.js.map +1 -1
- package/lib/types/pipeline/engine.d.ts +60 -0
- package/lib/types/pipeline/engine.d.ts.map +1 -0
- package/lib/types/pipeline/engine.js +338 -0
- package/lib/types/pipeline/engine.js.map +1 -0
- package/lib/types/pipeline/store.d.ts +73 -0
- package/lib/types/pipeline/store.d.ts.map +1 -0
- package/lib/types/pipeline/store.js +143 -0
- package/lib/types/pipeline/store.js.map +1 -0
- package/lib/types/pipeline/types.d.ts +101 -0
- package/lib/types/pipeline/types.d.ts.map +1 -0
- package/lib/types/pipeline/types.js +5 -0
- package/lib/types/pipeline/types.js.map +1 -0
- package/lib/types/present.d.ts +2 -0
- package/lib/types/present.d.ts.map +1 -1
- package/lib/types/present.js +9 -4
- package/lib/types/present.js.map +1 -1
- package/lib/types/retention.d.ts +39 -0
- package/lib/types/retention.d.ts.map +1 -0
- package/lib/types/retention.js +42 -0
- package/lib/types/retention.js.map +1 -0
- package/lib/types/runtime.d.ts +115 -5
- package/lib/types/runtime.d.ts.map +1 -1
- package/lib/types/runtime.js +862 -132
- package/lib/types/runtime.js.map +1 -1
- package/lib/types/source-evidence.d.ts +9 -1
- package/lib/types/source-evidence.d.ts.map +1 -1
- package/lib/types/source-evidence.js +13 -5
- package/lib/types/source-evidence.js.map +1 -1
- package/lib/types/store/axis-references.js +3 -3
- package/lib/types/store/axis-references.js.map +1 -1
- package/lib/types/store/derived.d.ts +1 -1
- package/lib/types/store/derived.d.ts.map +1 -1
- package/lib/types/store/derived.js +41 -7
- package/lib/types/store/derived.js.map +1 -1
- package/lib/types/store/knowledge-db.d.ts +18 -0
- package/lib/types/store/knowledge-db.d.ts.map +1 -1
- package/lib/types/store/knowledge-db.js +111 -6
- package/lib/types/store/knowledge-db.js.map +1 -1
- package/lib/types/store/migrate.js +1 -1
- package/lib/types/store/migrate.js.map +1 -1
- package/lib/types/trajectory-types.d.ts +172 -0
- package/lib/types/trajectory-types.d.ts.map +1 -0
- package/lib/types/trajectory-types.js +36 -0
- package/lib/types/trajectory-types.js.map +1 -0
- package/lib/types/types.d.ts +3 -4
- package/lib/types/types.d.ts.map +1 -1
- package/lib/types/types.js.map +1 -1
- package/lib/types/wiki-finalize.d.ts +16 -0
- package/lib/types/wiki-finalize.d.ts.map +1 -1
- package/lib/types/wiki-finalize.js +26 -0
- package/lib/types/wiki-finalize.js.map +1 -1
- package/lib/types/wiki-materialize.d.ts.map +1 -1
- package/lib/types/wiki-materialize.js +3 -15
- package/lib/types/wiki-materialize.js.map +1 -1
- package/lib/types/wiki-trial-types.d.ts +3 -0
- package/lib/types/wiki-trial-types.d.ts.map +1 -1
- package/lib/types/wiki-trial.d.ts +2 -0
- package/lib/types/wiki-trial.d.ts.map +1 -1
- package/lib/types/wiki-trial.js +31 -7
- package/lib/types/wiki-trial.js.map +1 -1
- package/package.json +6 -3
- package/preset/tita-data-agent/agent.cordis.yml +36 -129
- package/src/axis-registry.ts +57 -9
- package/src/client/AttributionEventGuide.tsx +10 -9
- package/src/client/CompileDialogs.tsx +10 -2
- package/src/client/EnvironmentSetup.tsx +76 -16
- package/src/client/ExpansionGraph.tsx +13 -7
- package/src/client/ExtractionTasksPage.tsx +543 -156
- package/src/client/ImportFilesDialog.tsx +2 -13
- package/src/client/IntentTab.tsx +3 -1
- package/src/client/KnowledgeBaseTab.tsx +139 -122
- package/src/client/KnowledgeLayerSection.tsx +19 -2
- package/src/client/KnowledgePanel.tsx +17 -3
- package/src/client/ListPager.tsx +15 -5
- package/src/client/MaterializeTrajectoryView.tsx +124 -0
- package/src/client/NodeSettings.tsx +90 -25
- package/src/client/NormalizeTrajectoryView.tsx +136 -0
- package/src/client/PipelineNotice.tsx +26 -0
- package/src/client/RecallPanel.tsx +55 -25
- package/src/client/TabGuide.tsx +4 -4
- package/src/client/TrialReportView.tsx +61 -16
- package/src/client/TypeDefinitionDrawer.tsx +33 -9
- package/src/client/WikiCardPreview.tsx +43 -10
- package/src/client/WikiFlowPanel.tsx +4 -4
- package/src/client/architecture.tsx +1 -1
- package/src/client/attribution/AttributionTab.tsx +37 -36
- package/src/client/attribution/CaseView.tsx +3 -1
- package/src/client/attribution/EventView.tsx +14 -4
- package/src/client/attribution/RunView.tsx +2 -2
- package/src/client/attribution/ViewSwitch.tsx +20 -5
- package/src/client/attribution/graph-options.ts +38 -31
- package/src/client/attribution/model.ts +16 -9
- package/src/client/graph/palette.ts +165 -0
- package/src/client/pages.css +224 -28
- package/src/client/pages.tsx +33 -11
- package/src/client/styles.css +61 -6
- package/src/client/wiki-trial.ts +30 -1
- package/src/convert/host.ts +3 -0
- package/src/convert/ingest.ts +73 -9
- package/src/diagnosis/cards.ts +13 -8
- package/src/diagnosis/run.ts +27 -17
- package/src/diagnosis/schema.ts +2 -2
- package/src/diagnosis/seed-source.ts +5 -4
- package/src/diagnosis/seed.ts +6 -8
- package/src/diagnosis/store.ts +99 -69
- package/src/diagnosis/types.ts +10 -16
- package/src/environment/dsh-python.ts +156 -0
- package/src/environment/install.ts +134 -19
- package/src/environment/model-catalog.ts +45 -3
- package/src/environment/service.ts +111 -23
- package/src/environment/types.ts +6 -0
- package/src/events.ts +12 -0
- package/src/extract-contract.ts +6 -3
- package/src/extract-model.ts +2 -0
- package/src/extract-table-contract.ts +29 -0
- package/src/extract-table.ts +126 -0
- package/src/extraction-runs.ts +70 -11
- package/src/fs-atomic.ts +19 -2
- package/src/images.ts +2 -2
- package/src/index.ts +207 -72
- package/src/intent/scope.ts +1 -0
- package/src/intent/tools.ts +38 -1
- package/src/knowledge-bases.ts +4 -12
- package/src/knowledge.ts +24 -4
- package/src/materialize-snapshot.ts +46 -0
- package/src/model-text.ts +5 -3
- package/src/oplog.ts +7 -0
- package/src/pipeline/engine.ts +312 -0
- package/src/pipeline/store.ts +147 -0
- package/src/pipeline/types.ts +92 -0
- package/src/present.ts +10 -4
- package/src/retention.ts +76 -0
- package/src/runtime.ts +853 -131
- package/src/source-evidence.ts +12 -5
- package/src/store/axis-references.ts +3 -3
- package/src/store/derived.ts +40 -7
- package/src/store/knowledge-db.ts +111 -5
- package/src/store/migrate.ts +1 -1
- package/src/trajectory-types.ts +142 -0
- package/src/types.ts +3 -4
- package/src/wiki-finalize.ts +28 -0
- package/src/wiki-materialize.ts +3 -14
- package/src/wiki-trial-types.ts +3 -0
- package/src/wiki-trial.ts +26 -7
- package/src/client/convert/ConvertPanel.tsx +0 -583
- package/src/client/convert/styles.css +0 -138
- package/src/client/convert/styles.ts +0 -49
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import type { Knowledge } from './knowledge.js';
|
|
2
2
|
import type { KnowledgeDb } from './store/knowledge-db.js';
|
|
3
3
|
/** Checking an evidence anchor does not establish whether a claim is true. */
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* `bodies` 是可选的**来源正文预读**(documentId → 当前版本与正文)。批量路径(物化快照)
|
|
6
|
+
* 一次读完全部来源再传进来,于是每条知识不再各自 join 一次 blob、各做一次整份文档的
|
|
7
|
+
* flatten 与子串匹配 —— 那是 O(知识条数 × 文档大小)。不传时退回按需读取(单条判定)。
|
|
8
|
+
*/
|
|
9
|
+
export declare function assessKnowledgeEvidence(knowledge: Knowledge, db: KnowledgeDb, bodies?: ReadonlyMap<string, {
|
|
10
|
+
version: number;
|
|
11
|
+
content: string;
|
|
12
|
+
}>): Knowledge;
|
|
5
13
|
export declare function hasCurrentSupport(knowledge: Knowledge): boolean;
|
|
6
14
|
//# sourceMappingURL=source-evidence.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-evidence.d.ts","sourceRoot":"","sources":["../../src/source-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,gBAAgB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE1D,8EAA8E;AAC9E,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"source-evidence.d.ts","sourceRoot":"","sources":["../../src/source-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,gBAAgB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE1D,8EAA8E;AAC9E;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,CAK5J;AAmBD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAG/D"}
|
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
/** Checking an evidence anchor does not establish whether a claim is true. */
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* `bodies` 是可选的**来源正文预读**(documentId → 当前版本与正文)。批量路径(物化快照)
|
|
4
|
+
* 一次读完全部来源再传进来,于是每条知识不再各自 join 一次 blob、各做一次整份文档的
|
|
5
|
+
* flatten 与子串匹配 —— 那是 O(知识条数 × 文档大小)。不传时退回按需读取(单条判定)。
|
|
6
|
+
*/
|
|
7
|
+
export function assessKnowledgeEvidence(knowledge, db, bodies) {
|
|
3
8
|
return {
|
|
4
9
|
...knowledge,
|
|
5
|
-
sources: knowledge.sources.map(source => assessSource(source, db)),
|
|
10
|
+
sources: knowledge.sources.map(source => assessSource(source, db, bodies)),
|
|
6
11
|
};
|
|
7
12
|
}
|
|
8
|
-
function assessSource(source, db) {
|
|
13
|
+
function assessSource(source, db, bodies) {
|
|
14
|
+
if (source.withdrawn)
|
|
15
|
+
return { ...source, evidenceStatus: 'historical', quoteInCurrentVersion: false };
|
|
9
16
|
if (!source.documentId)
|
|
10
17
|
return { ...source, evidenceStatus: 'human' };
|
|
11
|
-
const head = db.source(source.documentId);
|
|
18
|
+
const head = bodies?.get(source.documentId) ?? db.source(source.documentId);
|
|
12
19
|
if (!head)
|
|
13
20
|
return { ...source, evidenceStatus: 'missing', quoteInCurrentVersion: false };
|
|
21
|
+
const content = 'record' in head ? head.record.content : head.content;
|
|
14
22
|
const flatten = (text) => text.replace(/\s+/g, '');
|
|
15
23
|
const quote = flatten(source.quote);
|
|
16
24
|
return {
|
|
@@ -18,7 +26,7 @@ function assessSource(source, db) {
|
|
|
18
26
|
currentVersion: head.version,
|
|
19
27
|
evidenceStatus: source.toVersion === undefined ? 'unversioned'
|
|
20
28
|
: source.toVersion === head.version ? 'current' : 'historical',
|
|
21
|
-
quoteInCurrentVersion: quote !== '' && flatten(
|
|
29
|
+
quoteInCurrentVersion: quote !== '' && flatten(content).includes(quote),
|
|
22
30
|
};
|
|
23
31
|
}
|
|
24
32
|
export function hasCurrentSupport(knowledge) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-evidence.js","sourceRoot":"","sources":["../../src/source-evidence.ts"],"names":[],"mappings":"AAGA,8EAA8E;AAC9E,MAAM,UAAU,uBAAuB,CAAC,SAAoB,EAAE,EAAe;
|
|
1
|
+
{"version":3,"file":"source-evidence.js","sourceRoot":"","sources":["../../src/source-evidence.ts"],"names":[],"mappings":"AAGA,8EAA8E;AAC9E;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAoB,EAAE,EAAe,EAAE,MAAkE;IAC/I,OAAO;QACL,GAAG,SAAS;QACZ,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;KAC3E,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAuB,EAAE,EAAe,EAAE,MAAkE;IAChI,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAA;IACtG,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,CAAA;IACrE,MAAM,IAAI,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAC3E,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAA;IACxF,MAAM,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAA;IACrE,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAClE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACnC,OAAO;QACL,GAAG,MAAM;QACT,cAAc,EAAE,IAAI,CAAC,OAAO;QAC5B,cAAc,EAAE,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa;YAC5D,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;QAChE,qBAAqB,EAAE,KAAK,KAAK,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;KACxE,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IACpD,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,KAAK,OAAO;WACpE,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,qBAAqB,KAAK,IAAI,CAAC,CAAC,CAAA;AACtF,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
|
-
import { compositeEventIdentity, eventEntityFromRecords } from '../events.js';
|
|
2
|
+
import { compositeEventIdentity, eventEntityFromRecords, stripEventReferenceSection } from '../events.js';
|
|
3
3
|
import { cardCoordinateKey } from '../types.js';
|
|
4
4
|
/** Runs inside the axis merge transaction on the same validated connection. */
|
|
5
5
|
export function redirectAxisReferences(db, kind, fromId, intoId) {
|
|
@@ -27,7 +27,7 @@ export function redirectAxisReferences(db, kind, fromId, intoId) {
|
|
|
27
27
|
const eventRefs = [...new Set([...db.cardEventIds(base.card.entityId), ...db.cardEventIds(row.card.entityId)])];
|
|
28
28
|
const card = {
|
|
29
29
|
...base.card, coordinate: next,
|
|
30
|
-
content: merged ? `${base.card.content}\n\n${row.card.content}` : row.card.content,
|
|
30
|
+
content: stripEventReferenceSection(merged ? `${base.card.content}\n\n${row.card.content}` : row.card.content),
|
|
31
31
|
sourceRefs: [...new Set([...base.card.sourceRefs, ...row.card.sourceRefs])],
|
|
32
32
|
annotations: [...new Map([...(base.card.annotations ?? []), ...(row.card.annotations ?? [])].map(annotation => [annotation.id, annotation])).values()],
|
|
33
33
|
metadata: { ...base.card.metadata, layout: undefined, citations: undefined,
|
|
@@ -91,7 +91,7 @@ export function redirectAxisReferences(db, kind, fromId, intoId) {
|
|
|
91
91
|
}
|
|
92
92
|
if (redirects.size) {
|
|
93
93
|
for (const row of db.cards()) {
|
|
94
|
-
let content = row.card.content;
|
|
94
|
+
let content = stripEventReferenceSection(row.card.content);
|
|
95
95
|
for (const [from, into] of redirects)
|
|
96
96
|
content = content.replaceAll(from, into);
|
|
97
97
|
if (content === row.card.content && !affectedCards.has(row.card.entityId))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axis-references.js","sourceRoot":"","sources":["../../../src/store/axis-references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAoB,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"axis-references.js","sourceRoot":"","sources":["../../../src/store/axis-references.ts"],"names":[],"mappings":"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"}
|
|
@@ -145,7 +145,7 @@ export declare class DerivedDb {
|
|
|
145
145
|
* 查询语法错误或索引损坏时**返回空数组而不抛**:关键词路是三条召回路线之一,
|
|
146
146
|
* 它挂了不该把整次召回带走 —— 调用方在诊断里如实说明这一路没结果。
|
|
147
147
|
*/
|
|
148
|
-
searchFts(query: string, limit: number): FtsHit[];
|
|
148
|
+
searchFts(query: string, limit: number, eligible?: ReadonlySet<string>): FtsHit[];
|
|
149
149
|
/** 一句话说清这个库现在有什么。界面与诊断用。 */
|
|
150
150
|
summary(): {
|
|
151
151
|
artifacts: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derived.d.ts","sourceRoot":"","sources":["../../../src/store/derived.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,mDAAmD;AACnD,OAAO,EAAE,eAAe,EAAE,CAAA;AAE1B;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,aAAa,CAAA;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAA;AAElC;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAED,kDAAkD;AAClD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,GAAG,CAAC,EAAE,WAAW,EAAE,CAAA;IACnB,OAAO,CAAC,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACrE;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,SAAS,CAAC,CAAC,uBAAuB;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACrE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAsC5E;;GAEG;AACH,qBAAa,SAAS;IACA,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAkB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAA9E,OAAO;IAEP;;;;;;;;;;;;;;OAcG;WACU,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE,MAAM,KAAK,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"derived.d.ts","sourceRoot":"","sources":["../../../src/store/derived.ts"],"names":[],"mappings":"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"}
|
|
@@ -125,12 +125,29 @@ export class DerivedDb {
|
|
|
125
125
|
try {
|
|
126
126
|
const owner = readPragma(db, 'application_id');
|
|
127
127
|
const version = readPragma(db, 'user_version');
|
|
128
|
-
|
|
128
|
+
/**
|
|
129
|
+
* 属主标记为 0 = 这份文件从来没有被我们的初始化**写完过**。两种来源都要按「无主」处理:
|
|
130
|
+
*
|
|
131
|
+
* 1. 全新/空的文件(一张表都没有);
|
|
132
|
+
* 2. `schemaSql()` 已经建好表、`PRAGMA application_id` 还没写就被杀掉的那一次
|
|
133
|
+
* (崩溃、kill、磁盘满)。第二种原来会落到下面的「属主不对」分支,返回
|
|
134
|
+
* `NOT_A_DERIVED_DB` —— 而 `derivedHandle()` 会把这个结论缓存住,于是编译与召回
|
|
135
|
+
* **永久**失败,尽管这个文件按定义是可重建的。
|
|
136
|
+
*
|
|
137
|
+
* 但不能因此误伤别人的库:只有「文件里所有表都是我们自己建的」才认领重建,
|
|
138
|
+
* 出现陌生表就仍然拒绝打开(认错库比打不开糟)。
|
|
139
|
+
*/
|
|
140
|
+
const tables = userTables(db);
|
|
141
|
+
const foreign = tables.filter(name => !['artifact', 'vector_index', 'fts'].includes(name));
|
|
142
|
+
if (owner === 0 && foreign.length === 0) {
|
|
143
|
+
db.exec('DROP TABLE IF EXISTS fts');
|
|
144
|
+
db.exec('DROP TABLE IF EXISTS artifact');
|
|
145
|
+
db.exec('DROP TABLE IF EXISTS vector_index');
|
|
129
146
|
db.exec('PRAGMA journal_mode = WAL');
|
|
130
147
|
db.exec(schemaSql());
|
|
131
148
|
db.exec(`PRAGMA application_id = ${DERIVED_DB_APPLICATION_ID}`);
|
|
132
149
|
db.exec(`PRAGMA user_version = ${DERIVED_DB_SCHEMA}`);
|
|
133
|
-
return { ok: true, db: new DerivedDb(db, file), rebuilt:
|
|
150
|
+
return { ok: true, db: new DerivedDb(db, file), rebuilt: tables.length > 0 };
|
|
134
151
|
}
|
|
135
152
|
if (owner !== DERIVED_DB_APPLICATION_ID) {
|
|
136
153
|
db.close();
|
|
@@ -280,12 +297,20 @@ export class DerivedDb {
|
|
|
280
297
|
* 查询语法错误或索引损坏时**返回空数组而不抛**:关键词路是三条召回路线之一,
|
|
281
298
|
* 它挂了不该把整次召回带走 —— 调用方在诊断里如实说明这一路没结果。
|
|
282
299
|
*/
|
|
283
|
-
searchFts(query, limit) {
|
|
300
|
+
searchFts(query, limit, eligible) {
|
|
284
301
|
const expression = matchExpression(query);
|
|
285
302
|
if (expression === null || !this.hasFts())
|
|
286
303
|
return [];
|
|
287
304
|
try {
|
|
288
|
-
|
|
305
|
+
/*
|
|
306
|
+
* `eligible` 必须进 SQL。先 LIMIT 再在 JS 里过滤,会让已删除/停用卡片的死
|
|
307
|
+
* unitId 占满候选窗口(索引只在编译时重建,删除不会立刻反映到 fts 表)。
|
|
308
|
+
* 用 `json_each` 传一个 JSON 数组而不是拼参数列表:一个绑定参数,不受
|
|
309
|
+
* SQLITE_MAX_VARIABLE_NUMBER 限制。
|
|
310
|
+
*/
|
|
311
|
+
const rows = (eligible === undefined
|
|
312
|
+
? this.raw('SELECT unit_id, bm25(fts) AS rank FROM fts WHERE fts MATCH ? ORDER BY rank LIMIT ?').all(expression, limit)
|
|
313
|
+
: this.raw('SELECT unit_id, bm25(fts) AS rank FROM fts WHERE fts MATCH ? AND unit_id IN (SELECT value FROM json_each(?)) ORDER BY rank LIMIT ?').all(expression, JSON.stringify([...eligible]), limit));
|
|
289
314
|
const parsed = rows
|
|
290
315
|
.map(row => ({ unitId: String(row.unit_id ?? ''), raw: Number(row.rank ?? 0) }))
|
|
291
316
|
.filter(row => row.unitId !== '' && Number.isFinite(row.raw));
|
|
@@ -297,6 +322,15 @@ export class DerivedDb {
|
|
|
297
322
|
return parsed.map(row => ({ ...row, score: Math.max(0, Math.min(1, -row.raw / scale)) }));
|
|
298
323
|
}
|
|
299
324
|
catch {
|
|
325
|
+
/**
|
|
326
|
+
* `json_each` 不可用(SQLite 没编 JSON)或索引损坏时,**不能直接返回空**。
|
|
327
|
+
*
|
|
328
|
+
* 空数组会被上游读成「这一路没命中」,而实际是「这一路坏了」—— 正是这次要消灭的
|
|
329
|
+
* 那种静默降级。退回不带资格过滤的两参数查询:结果仍然正确(调用方还会过滤一遍),
|
|
330
|
+
* 只是候选窗口可能被已删除的条目占掉。真的连那条也失败,才认「没有结果」。
|
|
331
|
+
*/
|
|
332
|
+
if (eligible !== undefined)
|
|
333
|
+
return this.searchFts(query, limit);
|
|
300
334
|
return [];
|
|
301
335
|
}
|
|
302
336
|
}
|
|
@@ -313,8 +347,8 @@ function readPragma(db, name) {
|
|
|
313
347
|
const first = row === undefined ? undefined : Object.values(row)[0];
|
|
314
348
|
return typeof first === 'number' ? first : Number(first ?? 0);
|
|
315
349
|
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
return
|
|
350
|
+
/** 文件里现有的表名。用来判断「这份文件是不是我们建的」。 */
|
|
351
|
+
function userTables(db) {
|
|
352
|
+
return db.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'").all().map(row => String(row.name ?? ''));
|
|
319
353
|
}
|
|
320
354
|
//# sourceMappingURL=derived.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derived.js","sourceRoot":"","sources":["../../../src/store/derived.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,mDAAmD;AACnD,OAAO,EAAE,eAAe,EAAE,CAAA;AAE1B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,UAAU,CAAA;AAEnD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAgClC,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAChE,CAAC;AAED;;;;;;GAMG;AACH,SAAS,SAAS;IAChB,OAAO;;;;;;;;;;;;;;;;CAgBR,CAAA;AACD,CAAC;AAED,6CAA6C;AAC7C,SAAS,MAAM;IACb,OAAO,0GAA0G,CAAA;AACnH,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,SAAS;IACiB;IAA6B;IAAlE,YAAqC,EAAkB,EAAW,IAAY;QAAzC,OAAE,GAAF,EAAE,CAAgB;QAAW,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAElF;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,YAAkD;QAChF,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAA;QAC9E,CAAC;QACD,IAAI,EAAkB,CAAA;QACtB,IAAI,CAAC;YACH,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAA;QACtH,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAA;YAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;YAC9C,
|
|
1
|
+
{"version":3,"file":"derived.js","sourceRoot":"","sources":["../../../src/store/derived.ts"],"names":[],"mappings":"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"}
|
|
@@ -239,6 +239,8 @@ export declare class KnowledgeDb {
|
|
|
239
239
|
private readonly db;
|
|
240
240
|
readonly file: string;
|
|
241
241
|
private transactionSequence;
|
|
242
|
+
/** 距离上一次保留裁剪又提交了几次写事务。 */
|
|
243
|
+
private writesSincePrune;
|
|
242
244
|
private constructor();
|
|
243
245
|
/**
|
|
244
246
|
* 打开(必要时创建)一个知识库文件。
|
|
@@ -269,6 +271,22 @@ export declare class KnowledgeDb {
|
|
|
269
271
|
* 说明不了自己改了什么的行。
|
|
270
272
|
*/
|
|
271
273
|
transact<T>(entry: TreeEntry, fn: (tx: KnowledgeTx) => T): T;
|
|
274
|
+
/**
|
|
275
|
+
* 保留上限(0070)。
|
|
276
|
+
*
|
|
277
|
+
* 文档里写了保留策略,代码里一条 `DELETE` 都没有。这里补上**新数据**的上限,
|
|
278
|
+
* 且只裁「水位以上」的行 —— 升级那一刻已有的历史一行不动(见 `retention.ts`)。
|
|
279
|
+
*
|
|
280
|
+
* - `revision`:机器版本(`auto`)每个实体留最近 20 版;**命名版本永不裁**
|
|
281
|
+
* (`named` 是人对内容做的决定,保留策略里它是永久的)。
|
|
282
|
+
* - `pipeline_extractions`:抽取检查点同时是复用缓存,每份来源留最近 5 份;
|
|
283
|
+
* `pipeline_sources` 指着的那两份(当前抽取 / 当前归一)绝不删 ——
|
|
284
|
+
* 删了会让那份来源显示成「还没抽取」。
|
|
285
|
+
* - `blob`:水位以上、已经没有任何 revision 引用的才删。水位以下的 blob 一律留着,
|
|
286
|
+
* 因为老版本可能还在引用它们。
|
|
287
|
+
* - `tree`:操作台账,与处理日志同一量级。
|
|
288
|
+
*/
|
|
289
|
+
private pruneRetention;
|
|
272
290
|
/** 记一次**没有内容变更**的操作(迁移收尾、审核结论这一类)。 */
|
|
273
291
|
recordOperation(entry: TreeEntry, manifest?: Record<string, number>): void;
|
|
274
292
|
versions(kind: EntityKind, id: string): RevisionRow[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-db.d.ts","sourceRoot":"","sources":["../../../src/store/knowledge-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"knowledge-db.d.ts","sourceRoot":"","sources":["../../../src/store/knowledge-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
import { createHash } from 'node:crypto';
|
|
30
30
|
import { mkdir } from 'node:fs/promises';
|
|
31
31
|
import { dirname } from 'node:path';
|
|
32
|
+
import { applyRetention } from '../retention.js';
|
|
32
33
|
import { KNOWLEDGE_DB_FILE } from '../layout.js';
|
|
33
34
|
import { cardCoordinateKey, legacyCardStorageKey } from '../types.js';
|
|
34
35
|
/** 知识库里那个文件的名字。定义在 `layout.ts`(布局的唯一真源),这里只是本模块的别名。 */
|
|
@@ -310,15 +311,26 @@ function rebuildCardTableForSchemaMigration(db) {
|
|
|
310
311
|
head_version, created_at, updated_at, object_id, action_id, scene_id)
|
|
311
312
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
312
313
|
`);
|
|
314
|
+
/** 已经用掉的落位键。同坐标多行时后面那些要退回身份键(见下面的说明)。 */
|
|
315
|
+
const used = new Set();
|
|
313
316
|
for (const row of rows) {
|
|
314
317
|
const entityId = String(row.entity_id ?? '');
|
|
315
318
|
const objectId = String(row.object_id ?? '');
|
|
316
319
|
const actionId = String(row.action_id ?? '');
|
|
317
320
|
const sceneId = String(row.scene_id ?? '');
|
|
318
321
|
const coordinate = coordinateOfRow({ object_id: objectId, action_id: actionId, scene_id: sceneId });
|
|
319
|
-
|
|
322
|
+
let key = coordinate === undefined
|
|
320
323
|
? legacyCardStorageKey(entityId)
|
|
321
324
|
: cardCoordinateKey(coordinate);
|
|
325
|
+
/**
|
|
326
|
+
* 同一坐标在旧表里可能有多行(那时还没有坐标唯一约束)。`coordinate_key` 是主键,
|
|
327
|
+
* 一旦冲突整次迁移就回滚 —— 而迁移在打开库时跑,于是**每次启动都打不开这个库**,
|
|
328
|
+
* 也没有修复路径。落在后面的那一行退回按 `entityId` 生成的身份键:两张卡都留住,
|
|
329
|
+
* 坐标冲突交给既有的审计路径去报。`entity_id` 在旧表里是唯一的,所以这个键不会重。
|
|
330
|
+
*/
|
|
331
|
+
if (used.has(key))
|
|
332
|
+
key = legacyCardStorageKey(entityId);
|
|
333
|
+
used.add(key);
|
|
322
334
|
insert.run(key, entityId, String(row.entity_type ?? 'card'), String(row.title ?? ''), String(row.status ?? 'active'), row.owner === null || row.owner === undefined ? null : String(row.owner), String(row.frontmatter ?? '{}'), Number(row.head_version ?? 0), String(row.created_at ?? ''), String(row.updated_at ?? ''), objectId, actionId, sceneId);
|
|
323
335
|
}
|
|
324
336
|
db.exec(`DROP TABLE ${quoteIdentifier('card')}`);
|
|
@@ -649,6 +661,8 @@ export class KnowledgeDb {
|
|
|
649
661
|
db;
|
|
650
662
|
file;
|
|
651
663
|
transactionSequence = 0;
|
|
664
|
+
/** 距离上一次保留裁剪又提交了几次写事务。 */
|
|
665
|
+
writesSincePrune = 0;
|
|
652
666
|
constructor(db, file) {
|
|
653
667
|
this.db = db;
|
|
654
668
|
this.file = file;
|
|
@@ -740,6 +754,8 @@ export class KnowledgeDb {
|
|
|
740
754
|
}
|
|
741
755
|
}
|
|
742
756
|
close() {
|
|
757
|
+
// 关库前收一次尾:否则「最后一次裁剪之后新增的行」会一直留到下次打开。
|
|
758
|
+
this.pruneRetention();
|
|
743
759
|
try {
|
|
744
760
|
this.db.close();
|
|
745
761
|
}
|
|
@@ -776,6 +792,17 @@ export class KnowledgeDb {
|
|
|
776
792
|
const result = fn(tx);
|
|
777
793
|
this.raw('UPDATE tree SET manifest = ? WHERE op_id = ?').run(tx.manifestJson(), entry.opId);
|
|
778
794
|
this.db.exec(`RELEASE ${savepoint}`);
|
|
795
|
+
/**
|
|
796
|
+
* 裁剪**每 50 次写入**做一次,不是每次。
|
|
797
|
+
*
|
|
798
|
+
* 每次都做的话,一次卡片写入要额外跑一遍 `ROW_NUMBER()` 按实体分区的窗口(水位以上
|
|
799
|
+
* 收敛到约 20 版/实体,5000 个实体就是十万行排序)外加一次 blob 引用集比对 ——
|
|
800
|
+
* 那是把维护成本摊到每一次交互上。每 50 次一次,界面上感觉不到,库也照样有界。
|
|
801
|
+
*/
|
|
802
|
+
if (++this.writesSincePrune >= 50) {
|
|
803
|
+
this.writesSincePrune = 0;
|
|
804
|
+
this.pruneRetention();
|
|
805
|
+
}
|
|
779
806
|
return result;
|
|
780
807
|
}
|
|
781
808
|
catch (cause) {
|
|
@@ -786,6 +813,48 @@ export class KnowledgeDb {
|
|
|
786
813
|
throw cause;
|
|
787
814
|
}
|
|
788
815
|
}
|
|
816
|
+
/**
|
|
817
|
+
* 保留上限(0070)。
|
|
818
|
+
*
|
|
819
|
+
* 文档里写了保留策略,代码里一条 `DELETE` 都没有。这里补上**新数据**的上限,
|
|
820
|
+
* 且只裁「水位以上」的行 —— 升级那一刻已有的历史一行不动(见 `retention.ts`)。
|
|
821
|
+
*
|
|
822
|
+
* - `revision`:机器版本(`auto`)每个实体留最近 20 版;**命名版本永不裁**
|
|
823
|
+
* (`named` 是人对内容做的决定,保留策略里它是永久的)。
|
|
824
|
+
* - `pipeline_extractions`:抽取检查点同时是复用缓存,每份来源留最近 5 份;
|
|
825
|
+
* `pipeline_sources` 指着的那两份(当前抽取 / 当前归一)绝不删 ——
|
|
826
|
+
* 删了会让那份来源显示成「还没抽取」。
|
|
827
|
+
* - `blob`:水位以上、已经没有任何 revision 引用的才删。水位以下的 blob 一律留着,
|
|
828
|
+
* 因为老版本可能还在引用它们。
|
|
829
|
+
* - `tree`:操作台账,与处理日志同一量级。
|
|
830
|
+
*/
|
|
831
|
+
pruneRetention() {
|
|
832
|
+
/*
|
|
833
|
+
* 每一张都要先问在不在:`pipeline_extractions` 与 `pipeline_sources` 是**管线模块**
|
|
834
|
+
* 懒建的(`PipelineStore` 的构造函数),而 knowledge.db 可能被别的模块先打开、
|
|
835
|
+
* 也可能根本没跑过管线。少了这一步,这里会以「no such table」把**每一次写入**都打挂。
|
|
836
|
+
*
|
|
837
|
+
* 整个方法包在 try 里还有一层理由:裁剪是**尽力而为**的维护动作,它绝不能成为
|
|
838
|
+
* 一次已提交写入的失败原因。真出错时宁可不裁(库继续变大),也不让用户写不进去。
|
|
839
|
+
*/
|
|
840
|
+
try {
|
|
841
|
+
if (tableExists(this.db, 'revision')) {
|
|
842
|
+
applyRetention(this.db, 'revision', { table: 'revision', key: 'rowid', keep: 20, where: "kind = 'auto'", groupBy: "entity_kind || '/' || entity_id" });
|
|
843
|
+
}
|
|
844
|
+
if (tableExists(this.db, 'pipeline_extractions') && tableExists(this.db, 'pipeline_sources')) {
|
|
845
|
+
applyRetention(this.db, 'pipeline_extractions', {
|
|
846
|
+
table: 'pipeline_extractions', key: 'rowid', keep: 5, groupBy: 'source_id',
|
|
847
|
+
where: "id NOT IN (SELECT extracted_id FROM pipeline_sources WHERE extracted_id IS NOT NULL) AND id NOT IN (SELECT normalized_id FROM pipeline_sources WHERE normalized_id IS NOT NULL)",
|
|
848
|
+
});
|
|
849
|
+
}
|
|
850
|
+
if (tableExists(this.db, 'blob') && tableExists(this.db, 'revision')) {
|
|
851
|
+
applyRetention(this.db, 'blob', { table: 'blob', key: 'rowid', keep: 0, where: 'hash NOT IN (SELECT blob_hash FROM revision)' });
|
|
852
|
+
}
|
|
853
|
+
if (tableExists(this.db, 'tree'))
|
|
854
|
+
applyRetention(this.db, 'tree', { table: 'tree', key: 'rowid', keep: 2000 });
|
|
855
|
+
}
|
|
856
|
+
catch { /* 裁剪是尽力而为:不让它成为写入失败的原因 */ }
|
|
857
|
+
}
|
|
789
858
|
/** 记一次**没有内容变更**的操作(迁移收尾、审核结论这一类)。 */
|
|
790
859
|
recordOperation(entry, manifest = {}) {
|
|
791
860
|
this.raw('INSERT OR REPLACE INTO tree(op_id, at, actor, summary, manifest) VALUES (?, ?, ?, ?, ?)')
|
|
@@ -1084,12 +1153,13 @@ export class KnowledgeDb {
|
|
|
1084
1153
|
* 名字拼成语法错误。
|
|
1085
1154
|
*/
|
|
1086
1155
|
columnsOf(schema, table) {
|
|
1087
|
-
const rows = this.raw('SELECT name, "notnull" AS not_null, dflt_value AS dflt FROM pragma_table_info(?, ?)')
|
|
1156
|
+
const rows = this.raw('SELECT name, "notnull" AS not_null, dflt_value AS dflt, pk FROM pragma_table_info(?, ?)')
|
|
1088
1157
|
.all(table, schema);
|
|
1089
1158
|
return rows.map(row => ({
|
|
1090
1159
|
name: String(row.name ?? ''),
|
|
1091
1160
|
notNull: Number(row.not_null ?? 0) === 1,
|
|
1092
1161
|
hasDefault: row.dflt !== null && row.dflt !== undefined,
|
|
1162
|
+
pk: Number(row.pk ?? 0),
|
|
1093
1163
|
}));
|
|
1094
1164
|
}
|
|
1095
1165
|
/**
|
|
@@ -1188,12 +1258,47 @@ export class KnowledgeDb {
|
|
|
1188
1258
|
}
|
|
1189
1259
|
const columns = shared.map(quoteIdentifier).join(', ');
|
|
1190
1260
|
const expected = Number(this.db.prepare(`SELECT count(*) AS c FROM legacy.${quoteIdentifier(name)}`).get()?.c ?? 0);
|
|
1191
|
-
|
|
1261
|
+
/**
|
|
1262
|
+
* 「有没有丢行」要按**三个账**算(0070):`already`(插入**之前**主键就已存在)、
|
|
1263
|
+
* `inserted`(本次真的插进去的)、以及两者之外的 `unaccounted`
|
|
1264
|
+
* —— 被唯一索引 / 非空 / 检查约束挡掉的那些才是真的丢。
|
|
1265
|
+
*
|
|
1266
|
+
* **顺序很要紧**:`already` 必须在 `INSERT` 之前数。插完再数会把本次插入的行
|
|
1267
|
+
* 也算进去,重复计数恰好把丢行掩盖成 0(试过,就是这样漏掉一行的)。
|
|
1268
|
+
*
|
|
1269
|
+
* 原来那条 `copied < expected`(拿目标**总行数**比旧文件行数)则**永远不成立** ——
|
|
1270
|
+
* 每一次主键冲突都对应一行早就存在 —— 于是丢行之后调用方还会把旧库删掉。
|
|
1271
|
+
*/
|
|
1272
|
+
const keyColumns = this.columnsOf('main', name).filter(column => column.pk > 0).map(column => column.name);
|
|
1273
|
+
const comparable = shared.filter(column => !keyColumns.includes(column));
|
|
1274
|
+
const already = keyColumns.length === 0 ? 0 : Number(this.db.prepare(`SELECT COUNT(*) AS c FROM legacy.${quoteIdentifier(name)} l WHERE EXISTS (
|
|
1275
|
+
SELECT 1 FROM main.${quoteIdentifier(name)} m WHERE ${keyColumns.map(column => `m.${quoteIdentifier(column)} IS l.${quoteIdentifier(column)}`).join(' AND ')}
|
|
1276
|
+
)`).get()?.c ?? 0);
|
|
1277
|
+
const run = this.db.prepare(`INSERT OR IGNORE INTO main.${quoteIdentifier(name)} (${columns}) SELECT ${columns} FROM legacy.${quoteIdentifier(name)}`).run();
|
|
1278
|
+
const inserted = Number(run?.changes ?? 0);
|
|
1192
1279
|
const copied = Number(this.db.prepare(`SELECT count(*) AS c FROM main.${quoteIdentifier(name)}`).get()?.c ?? 0);
|
|
1193
1280
|
tables[name] = copied;
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1281
|
+
if (keyColumns.length === 0) {
|
|
1282
|
+
if (inserted < expected)
|
|
1283
|
+
problems.push(`${name} 只拷进 ${inserted} 行(旧文件 ${expected} 行):这张表没有主键,无法逐行核对,旧文件不删`);
|
|
1284
|
+
}
|
|
1285
|
+
else {
|
|
1286
|
+
const unaccounted = expected - already - inserted;
|
|
1287
|
+
if (unaccounted > 0)
|
|
1288
|
+
problems.push(`${name} 有 ${unaccounted} 行没能进来(主键之外还有唯一索引 / 非空 / 检查约束挡住的行):旧文件不删`);
|
|
1289
|
+
/**
|
|
1290
|
+
* 纯主键表(例如 `entity_asset(entity_kind, entity_id, ref)`)没有可比的非键列:
|
|
1291
|
+
* 主键相同就是同一行。重跑时报「无法比对内容」是误报,会让旧文件永久留在磁盘上。
|
|
1292
|
+
*/
|
|
1293
|
+
if (comparable.length > 0) {
|
|
1294
|
+
const onEq = keyColumns.map(column => `m.${quoteIdentifier(column)} = l.${quoteIdentifier(column)}`).join(' AND ');
|
|
1295
|
+
// `IS NOT` 而不是 `<>`:NULL 与任何值都不相等,用 `<>` 会把「一边是 NULL」漏判。
|
|
1296
|
+
const differs = Number(this.db.prepare(`SELECT COUNT(*) AS c FROM legacy.${quoteIdentifier(name)} l JOIN main.${quoteIdentifier(name)} m ON ${onEq}
|
|
1297
|
+
WHERE ${comparable.map(column => `m.${quoteIdentifier(column)} IS NOT l.${quoteIdentifier(column)}`).join(' OR ')}`).get()?.c ?? 0);
|
|
1298
|
+
if (differs > 0)
|
|
1299
|
+
problems.push(`${name} 有 ${differs} 行与目标库主键相同但内容不同:旧文件不删`);
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1197
1302
|
}
|
|
1198
1303
|
catch (cause) {
|
|
1199
1304
|
problems.push(`${name} 的行没拷成:${cause instanceof Error ? cause.message : String(cause)}`);
|