dsh-data-domain-knowledge 0.1.0-alpha.2 → 0.1.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/README.md +31 -7
  2. package/cordis.patch.yml +11 -5
  3. package/lib/client.js +5557 -3056
  4. package/lib/doc-page.js +7740 -0
  5. package/lib/types/convert/host.d.ts.map +1 -1
  6. package/lib/types/convert/host.js +36 -9
  7. package/lib/types/convert/host.js.map +1 -1
  8. package/lib/types/diagnosis/cards.d.ts +8 -7
  9. package/lib/types/diagnosis/cards.d.ts.map +1 -1
  10. package/lib/types/diagnosis/cards.js +119 -49
  11. package/lib/types/diagnosis/cards.js.map +1 -1
  12. package/lib/types/diagnosis/run.d.ts +51 -0
  13. package/lib/types/diagnosis/run.d.ts.map +1 -0
  14. package/lib/types/diagnosis/run.js +239 -0
  15. package/lib/types/diagnosis/run.js.map +1 -0
  16. package/lib/types/diagnosis/schema.d.ts +25 -2
  17. package/lib/types/diagnosis/schema.d.ts.map +1 -1
  18. package/lib/types/diagnosis/schema.js +64 -25
  19. package/lib/types/diagnosis/schema.js.map +1 -1
  20. package/lib/types/diagnosis/seed-source.d.ts +17 -2
  21. package/lib/types/diagnosis/seed-source.d.ts.map +1 -1
  22. package/lib/types/diagnosis/seed-source.js +18 -1
  23. package/lib/types/diagnosis/seed-source.js.map +1 -1
  24. package/lib/types/diagnosis/seed.d.ts +32 -42
  25. package/lib/types/diagnosis/seed.d.ts.map +1 -1
  26. package/lib/types/diagnosis/seed.js +187 -51
  27. package/lib/types/diagnosis/seed.js.map +1 -1
  28. package/lib/types/diagnosis/store.d.ts +114 -26
  29. package/lib/types/diagnosis/store.d.ts.map +1 -1
  30. package/lib/types/diagnosis/store.js +336 -167
  31. package/lib/types/diagnosis/store.js.map +1 -1
  32. package/lib/types/diagnosis/types.d.ts +168 -16
  33. package/lib/types/diagnosis/types.d.ts.map +1 -1
  34. package/lib/types/diagnosis/types.js +1 -1
  35. package/lib/types/diagnosis/types.js.map +1 -1
  36. package/lib/types/document-page.d.ts +39 -0
  37. package/lib/types/document-page.d.ts.map +1 -0
  38. package/lib/types/document-page.js +43 -0
  39. package/lib/types/document-page.js.map +1 -0
  40. package/lib/types/fs-atomic.d.ts +12 -0
  41. package/lib/types/fs-atomic.d.ts.map +1 -0
  42. package/lib/types/fs-atomic.js +42 -0
  43. package/lib/types/fs-atomic.js.map +1 -0
  44. package/lib/types/index.d.ts.map +1 -1
  45. package/lib/types/index.js +214 -24
  46. package/lib/types/index.js.map +1 -1
  47. package/lib/types/knowledge-bases.d.ts +10 -2
  48. package/lib/types/knowledge-bases.d.ts.map +1 -1
  49. package/lib/types/knowledge-bases.js +20 -18
  50. package/lib/types/knowledge-bases.js.map +1 -1
  51. package/lib/types/proposals.d.ts +166 -0
  52. package/lib/types/proposals.d.ts.map +1 -0
  53. package/lib/types/proposals.js +238 -0
  54. package/lib/types/proposals.js.map +1 -0
  55. package/lib/types/runtime.d.ts +199 -7
  56. package/lib/types/runtime.d.ts.map +1 -1
  57. package/lib/types/runtime.js +728 -145
  58. package/lib/types/runtime.js.map +1 -1
  59. package/lib/types/settings-schema.d.ts +2 -2
  60. package/lib/types/types.d.ts +61 -10
  61. package/lib/types/types.d.ts.map +1 -1
  62. package/lib/types/types.js +56 -8
  63. package/lib/types/types.js.map +1 -1
  64. package/lib/types/wiki-types.d.ts +8 -1
  65. package/lib/types/wiki-types.d.ts.map +1 -1
  66. package/lib/types/wiki-types.js +16 -25
  67. package/lib/types/wiki-types.js.map +1 -1
  68. package/package.json +4 -3
  69. package/preset/tita-data-agent/agent.cordis.yml +11 -5
  70. package/src/client/DirectoryPicker.tsx +12 -12
  71. package/src/client/InfoHint.tsx +21 -8
  72. package/src/client/IntentTab.tsx +20 -26
  73. package/src/client/KnowledgeBaseTab.tsx +190 -80
  74. package/src/client/KnowledgePanel.tsx +42 -9
  75. package/src/client/KnowledgeStepRail.tsx +3 -0
  76. package/src/client/NodeSettings.tsx +20 -22
  77. package/src/client/PreviewSections.tsx +87 -33
  78. package/src/client/ProposalReview.tsx +313 -0
  79. package/src/client/TypeDefinitionDrawer.tsx +72 -38
  80. package/src/client/WikiTypeEditor.tsx +193 -77
  81. package/src/client/arch/AgentArchitectureGraph.tsx +143 -14
  82. package/src/client/arch/NodeLogicPanel.tsx +6 -3
  83. package/src/client/arch/model.ts +164 -26
  84. package/src/client/architecture.css +29 -9
  85. package/src/client/architecture.tsx +54 -29
  86. package/src/client/attribution/AttributionGraph.tsx +481 -34
  87. package/src/client/attribution/AttributionTab.tsx +507 -106
  88. package/src/client/attribution/CaseView.tsx +9 -14
  89. package/src/client/attribution/GraphStage.tsx +25 -18
  90. package/src/client/attribution/RunView.tsx +27 -9
  91. package/src/client/attribution/StageChrome.tsx +296 -140
  92. package/src/client/attribution/graph-options.ts +611 -47
  93. package/src/client/attribution/model.ts +559 -30
  94. package/src/client/convert/ConvertPanel.tsx +6 -1
  95. package/src/client/doc-page.css +134 -0
  96. package/src/client/doc-page.tsx +263 -0
  97. package/src/client/panel-state.ts +105 -0
  98. package/src/client/request.ts +36 -0
  99. package/src/client/styles.css +317 -43
  100. package/src/client/useFitScale.ts +15 -2
  101. package/src/client/wiki-type-groups.ts +86 -0
  102. package/src/convert/host.ts +41 -7
  103. package/src/diagnosis/cards.ts +120 -50
  104. package/src/diagnosis/run.ts +245 -0
  105. package/src/diagnosis/schema.ts +67 -26
  106. package/src/diagnosis/seed-source.ts +28 -3
  107. package/src/diagnosis/seed.ts +187 -85
  108. package/src/diagnosis/store.ts +358 -174
  109. package/src/diagnosis/types.ts +181 -16
  110. package/src/document-page.ts +51 -0
  111. package/src/fs-atomic.ts +42 -0
  112. package/src/index.ts +209 -22
  113. package/src/knowledge-bases.ts +20 -18
  114. package/src/proposals.ts +337 -0
  115. package/src/runtime.ts +736 -135
  116. package/src/types.ts +113 -19
  117. package/src/wiki-types.ts +17 -27
@@ -1,11 +1,25 @@
1
1
  /**
2
- * Seed 图谱:与 0021 §11 的三个案例同源,用来说明「同一现象有多个根因、否定边有用、
3
- * 误导边昂贵」。
2
+ * 内置**示例**:一份排查手册 + 三篇复盘 + 三次排查日志 + 由它们编出来的那张图。
4
3
  *
5
- * 它现在有两重身份:
6
- * 1. **首次启动的起点** —— `DiagnosisStore.ensure()` 在 `05_diagnosis/` 为空时把它写成
7
- * 真实的 jsonl,之后用户可以手改,不会被覆盖回去;
8
- * 2. **回归样本** —— 上面那三条结论需要一个稳定的夹具,所以它不会被删除。
4
+ * 它现在只有一重身份:**用户点了「载入内置示例」才写进去的样例,以及回归夹具**。
5
+ *
6
+ * 原来是两重(另一重是「首次启动的起点」,由 `DiagnosisStore.ensure()` 自动写入)。
7
+ * 实跑反馈把它去掉了:这份示例长得像真的业务文档,而它落在用户自己的
8
+ * `01_source_truth/` 与 `02_wiki/` 里 —— 新装一台机器,一打开「智能归因」就凭空多出
9
+ * 几份来源和几十张卡片,读起来像「我的知识库内容跟着包过来了」。示例没有被删除
10
+ * (它仍然是稳定夹具,`tests/diagnosis-cards.test.mjs` 逐字段对着它断言),
11
+ * 只是不再自动落盘 —— 入口是 `DiagnosisStore.loadSample()`。
12
+ *
13
+ * **两条来源分类、两个作者**(v1.1 起):
14
+ *
15
+ * | 来源分类 | 谁写 | 装什么 |
16
+ * | --- | --- | --- |
17
+ * | `question` | 人 | 手册与复盘 —— 卡片 `source_refs` 指向这里 |
18
+ * | `agent_diagnosis_case` | Agent | 一次排查的过程记录(`SEED_RUNS`) |
19
+ *
20
+ * `SEED_GRAPH` 里**只有卡片定义得了的东西**:类型层、引用层资产、案例桩,以及六种卡片边。
21
+ * `evidence` / `cause` 与四条执行边由 `SEED_RUNS` 读时解析出来 —— 把「上次查到什么」
22
+ * 写进卡片,等于让一份可复用的知识绑死在一次执行上。
9
23
  */
10
24
  export const SEED_GRAPH = {
11
25
  nodes: [
@@ -27,81 +41,87 @@ export const SEED_GRAPH = {
27
41
  problemClass: 'deviation', problemSubclass: 'deviation-rise-sharp',
28
42
  summary: '观测量:DAU + 单日窗口;放大 3.1 倍且只有 T-1 单日,相邻日期正常。',
29
43
  },
30
- { id: 'H1', kind: 'hypothesis', layer: 'type', title: '上游分区未产出', failureMode: 'upstream-missing', reuseCount: 12,
44
+ { id: 'H1', kind: 'hypothesis', layer: 'type', title: '上游分区未产出', failureReason: 'upstream-missing', reuseCount: 12,
31
45
  summary: '当日 dwd / ods 分区不存在 → 指标必然为 0。反例:分区在但行数为 0 时不是它。',
32
46
  discriminator: '当日 dwd / ods 分区不存在 → 指标必然为 0',
33
47
  notWhen: '分区存在但行数为 0(那是 H4);分区正常而指标仍为 0(那是口径或消费侧)' },
34
- { id: 'H2', kind: 'hypothesis', layer: 'type', title: '口径 / 版本变更', failureMode: 'spec-change', reuseCount: 5,
48
+ { id: 'H2', kind: 'hypothesis', layer: 'type', title: '口径 / 版本变更', failureReason: 'spec-change', reuseCount: 5,
35
49
  summary: '口径版本切换未同步 → 同名词指标在不同版本下口径不同。',
36
50
  discriminator: '口径版本切换后,同名词指标在两版定义下口径不一致',
37
51
  notWhen: '口径未变更时本假设不成立 —— 不要用「名字一样」当作口径一致的证据' },
38
- { id: 'H3', kind: 'hypothesis', layer: 'type', title: '维表映射丢失', failureMode: 'data-processing', reuseCount: 4,
52
+ { id: 'H3', kind: 'hypothesis', layer: 'type', title: '维表映射丢失', failureReason: 'data-processing', reuseCount: 4,
39
53
  summary: '新渠道未补录维表 → join 落 unknown 后被 where 过滤。',
40
54
  discriminator: '维表 join 后 unknown 占比显著升高,且缺口集中在新增维度成员上',
41
55
  notWhen: 'unknown 占比正常时本假设不成立;缺口若均匀分布在各维度上,应转 H4 或 H5' },
42
- { id: 'H4', kind: 'hypothesis', layer: 'type', title: '重复 / 回刷', failureMode: 'data-processing', reuseCount: 6,
56
+ { id: 'H4', kind: 'hypothesis', layer: 'type', title: '重复 / 回刷', failureReason: 'data-processing', reuseCount: 6,
43
57
  summary: '上游重跑写入重复行 → 计数类指标放大。',
44
58
  discriminator: '主键不唯一,或分区行数同比放大',
45
59
  notWhen: '主键唯一性检查通过(T4.1)时本假设不成立 —— 这是最常被误判的一条' },
46
- { id: 'H5', kind: 'hypothesis', layer: 'type', title: '时间窗口 / 时区', failureMode: 'data-processing', reuseCount: 2,
60
+ { id: 'H5', kind: 'hypothesis', layer: 'type', title: '时间窗口 / 时区', failureReason: 'data-processing', reuseCount: 2,
47
61
  summary: '跨天事件被补写进 T-1 分区 → 单日指标异常放大。',
48
62
  discriminator: '分区内事件时间跨天,且只有 T-1 单日异常',
49
63
  notWhen: '相邻日期同时异常时应转 H2;事件时间落在单日内则应转 H4' },
50
- { id: 'H6', kind: 'hypothesis', layer: 'type', title: '权限 / 过滤条件', failureMode: 'permission', reuseCount: 1,
64
+ { id: 'H6', kind: 'hypothesis', layer: 'type', title: '权限 / 过滤条件', failureReason: 'permission', reuseCount: 1,
51
65
  summary: '行级权限或 where 条件变更 → 结果集被静默收窄。',
52
66
  discriminator: '结果集被行级权限或 where 条件静默收窄',
53
67
  notWhen: '权限与过滤条件在本周期未变更时本假设不成立' },
54
- { id: 'H7', kind: 'hypothesis', layer: 'type', title: '下游 BI 缓存 / 增量', failureMode: 'consumption', reuseCount: 3,
68
+ { id: 'H7', kind: 'hypothesis', layer: 'type', title: '下游 BI 缓存 / 增量', failureReason: 'consumption', reuseCount: 3,
55
69
  summary: '缓存或增量刷新未触发 → 展示侧滞后,明细不受影响。',
56
70
  discriminator: 'BI 展示侧滞后,但直连明细的数字正常',
57
71
  notWhen: '明细对账一致(T7.2)时本假设不成立;注意 T7.1「缓存时间正常」不足以否定它' },
58
- // `code` 是这张卡片的稳定标识:假设卡片里写的是编码(`failure_mode: data-processing`),
72
+ // `code` 是这张卡片的稳定标识:假设卡片里写的是编码(`failure_reason: data-processing`),
59
73
  // 边要连到节点 —— 少了它,「编码 → 节点」就只能靠 F1..F5 的位置去猜。
60
- { id: 'F1', kind: 'failure-mode', layer: 'type', title: '上游未产出', code: 'upstream-missing' },
61
- { id: 'F2', kind: 'failure-mode', layer: 'type', title: '口径变更', code: 'spec-change' },
62
- { id: 'F3', kind: 'failure-mode', layer: 'type', title: '数据处理', code: 'data-processing' },
63
- { id: 'F4', kind: 'failure-mode', layer: 'type', title: '消费与展示', code: 'consumption' },
64
- { id: 'F5', kind: 'failure-mode', layer: 'type', title: '权限与过滤', code: 'permission' },
65
- { id: 'T1.1', kind: 'check', layer: 'type', title: '查分区存在性', costMinutes: 1, automation: 'auto', owner: '@duty',
74
+ { id: 'F1', kind: 'failure_reason', layer: 'type', title: '上游未产出', code: 'upstream-missing' },
75
+ { id: 'F2', kind: 'failure_reason', layer: 'type', title: '口径变更', code: 'spec-change' },
76
+ { id: 'F3', kind: 'failure_reason', layer: 'type', title: '数据处理', code: 'data-processing' },
77
+ { id: 'F4', kind: 'failure_reason', layer: 'type', title: '消费与展示', code: 'consumption' },
78
+ { id: 'F5', kind: 'failure_reason', layer: 'type', title: '权限与过滤', code: 'permission' },
79
+ // 检查点:`assets[]` 是 v1.3 的必填 —— 缺了它,这条检查不知道去哪查。
80
+ { id: 'T1.1', kind: 'check_point', layer: 'type', title: '查分区存在性', costMinutes: 1, automation: 'auto', owner: '@duty',
81
+ assets: ['dwd_ord_di'],
66
82
  summary: '分区 dwd_ord_di/dt 是否存在。不存在 → 支持 H1。',
67
83
  verdictTrue: '分区不存在', verdictFalse: '分区存在' },
68
- { id: 'T1.2', kind: 'check', layer: 'type', title: '查任务实例状态', costMinutes: 1, automation: 'auto', owner: '@duty',
84
+ { id: 'T1.2', kind: 'check_point', layer: 'type', title: '查任务实例状态', costMinutes: 1, automation: 'auto', owner: '@duty',
85
+ assets: ['ods_order_sync'],
69
86
  summary: '上游任务实例是否 failed。failed → 支持 H1。',
70
87
  verdictTrue: '实例状态 failed', verdictFalse: '实例状态 success / running' },
71
- { id: 'T2.1', kind: 'check', layer: 'type', title: '口径版本对比', costMinutes: 15, automation: 'manual', owner: '@metric-owner',
88
+ { id: 'T2.1', kind: 'check_point', layer: 'type', title: '口径版本对比', costMinutes: 15, automation: 'manual', owner: '@metric-owner',
89
+ assets: ['metric_daily_gmv'],
72
90
  summary: '对比近两次口径版本定义。口径变化 → 支持 H2。',
73
91
  verdictTrue: '近两次口径定义不一致', verdictFalse: '口径定义逐字一致' },
74
- { id: 'T3.1', kind: 'check', layer: 'type', title: 'unknown 占比', costMinutes: 2, automation: 'auto', owner: '@duty',
92
+ { id: 'T3.1', kind: 'check_point', layer: 'type', title: 'unknown 占比', costMinutes: 2, automation: 'auto', owner: '@duty',
93
+ assets: ['dim_channel_df'],
75
94
  summary: '维表 join 后 unknown 占比。显著升高 → 支持 H3。',
76
95
  verdictTrue: 'unknown 占比 > 5%', verdictFalse: 'unknown 占比 ≤ 5%' },
77
- { id: 'T4.1', kind: 'check', layer: 'type', title: '主键唯一性', costMinutes: 3, automation: 'auto', owner: '@duty',
96
+ { id: 'T4.1', kind: 'check_point', layer: 'type', title: '主键唯一性', costMinutes: 3, automation: 'auto', owner: '@duty',
97
+ assets: ['dwd_ord_di'],
78
98
  summary: '主键唯一性检查。通过 → 否定 H4。这是最常被误判的一条。',
79
99
  verdictTrue: '存在重复主键', verdictFalse: '主键唯一 → 否定 H4' },
80
- { id: 'T5.1', kind: 'check', layer: 'type', title: '事件时间分布', costMinutes: 8, automation: 'auto', owner: '@duty',
100
+ { id: 'T5.1', kind: 'check_point', layer: 'type', title: '事件时间分布', costMinutes: 8, automation: 'auto', owner: '@duty',
101
+ assets: ['dwd_ord_di'],
81
102
  summary: '分区内事件时间分布。跨天 → 支持 H5。',
82
103
  verdictTrue: '分区内事件时间跨出 T-1 单日窗口', verdictFalse: '事件时间全部落在 T-1 内' },
83
- { id: 'T7.1', kind: 'check', layer: 'type', title: '查缓存时间戳', costMinutes: 2, automation: 'auto', owner: '@duty',
104
+ { id: 'T7.1', kind: 'check_point', layer: 'type', title: '查缓存时间戳', costMinutes: 2, automation: 'auto', owner: '@duty',
105
+ assets: ['bi_daily_dashboard'],
84
106
  summary: '缓存时间正常并不能否定 H7 —— 便宜检查给不出结论。',
85
107
  verdictTrue: '缓存时间戳过期', verdictFalse: '缓存时间正常 —— 注意:这一条**不足以**否定 H7' },
86
- { id: 'T7.2', kind: 'check', layer: 'type', title: '直连明细对账', costMinutes: 35, automation: 'manual', owner: '@analyst',
108
+ { id: 'T7.2', kind: 'check_point', layer: 'type', title: '直连明细对账', costMinutes: 35, automation: 'manual', owner: '@analyst',
109
+ assets: ['dwd_ord_di'],
87
110
  summary: '明细对账一致 → 否定 H7。要否定它必须做这次贵检查。',
88
111
  verdictTrue: '明细与报表数字不一致', verdictFalse: '明细与报表一致 → 否定 H7' },
89
112
  // ── 引用层 ────────────────────────────────────────────────────────────
90
- { id: 'dwd_ord_di', kind: 'asset', layer: 'reference', title: 'dwd_ord_di' },
91
- { id: 'ods_order_sync', kind: 'asset', layer: 'reference', title: 'ods_order_sync' },
92
- { id: 'dim_channel_df', kind: 'asset', layer: 'reference', title: 'dim_channel_df' },
93
- // ── 实例层(默认折叠,展开后用于演示「证据与复用」) ────────────────────
94
- // 案例节点是**图上的桩**:标题必须与 `SEED_CASES[].title` 是同一个字符串,否则同一份
95
- // 知识会有两份标题(而且还真的不一致过:「只剩」vs「只有」)。画布要在标签前显示案例 id,
113
+ { id: 'dwd_ord_di', kind: 'asset', layer: 'reference', title: 'dwd_ord_di', assetType: 'table' },
114
+ { id: 'ods_order_sync', kind: 'asset', layer: 'reference', title: 'ods_order_sync', assetType: 'job' },
115
+ { id: 'dim_channel_df', kind: 'asset', layer: 'reference', title: 'dim_channel_df', assetType: 'table' },
116
+ { id: 'metric_daily_gmv', kind: 'asset', layer: 'reference', title: 'metric_daily_gmv', assetType: 'metric' },
117
+ { id: 'bi_daily_dashboard', kind: 'asset', layer: 'reference', title: 'bi_daily_dashboard', assetType: 'linkage' },
118
+ // ── 实例层:案例节点是**图上的桩**(正文与有序路径住在案例卡片里) ──────
119
+ // 标题必须与 `SEED_CASES[].title` 是同一个字符串,否则同一份知识会有两份标题
120
+ // (而且还真的不一致过:「只剩」vs「只有」)。画布要在标签前显示案例 id,
96
121
  // 那是渲染层的事(见 `nodeStyleFor` 的 labelText)。
97
122
  { id: 'CASE-001', kind: 'case', layer: 'instance', title: '日报 GMV 为 0' },
98
123
  { id: 'CASE-002', kind: 'case', layer: 'instance', title: '订单数只有昨日 12%' },
99
124
  { id: 'CASE-003', kind: 'case', layer: 'instance', title: 'DAU 突增 3.1 倍' },
100
- { id: 'C1', kind: 'cause', layer: 'instance', title: 'C1 ODS 任务失败' },
101
- { id: 'C2', kind: 'cause', layer: 'instance', title: 'C2 渠道维表未补录' },
102
- { id: 'C3', kind: 'cause', layer: 'instance', title: 'C3 跨天事件补写' },
103
- { id: 'E1', kind: 'evidence', layer: 'instance', title: 'E1 分区不存在' },
104
- { id: 'E7', kind: 'evidence', layer: 'instance', title: 'E7 明细对账一致' },
105
125
  ],
106
126
  edges: [
107
127
  // 层内:现象 → 假设(含一条僵尸边,用来演示「权重过期」)
@@ -125,7 +145,7 @@ export const SEED_GRAPH = {
125
145
  { id: 'e-s3-h4', source: 'S3', target: 'H4', kind: 'may_be_caused_by' },
126
146
  { id: 'e-s3-h5', source: 'S3', target: 'H5', kind: 'may_be_caused_by' },
127
147
  { id: 'e-s3-h7', source: 'S3', target: 'H7', kind: 'may_be_caused_by' },
128
- // 层内:假设 → 检查(H6 故意没有,它就是图上的空区)
148
+ // 层内:假设 → 检查点(H6 故意没有,它就是图上的空区)
129
149
  { id: 'e-h1-t11', source: 'H1', target: 'T1.1', kind: 'verified_by' },
130
150
  { id: 'e-h1-t12', source: 'H1', target: 'T1.2', kind: 'verified_by' },
131
151
  { id: 'e-h2-t21', source: 'H2', target: 'T2.1', kind: 'verified_by' },
@@ -134,7 +154,7 @@ export const SEED_GRAPH = {
134
154
  { id: 'e-h5-t51', source: 'H5', target: 'T5.1', kind: 'verified_by' },
135
155
  { id: 'e-h7-t71', source: 'H7', target: 'T7.1', kind: 'verified_by' },
136
156
  { id: 'e-h7-t72', source: 'H7', target: 'T7.2', kind: 'verified_by' },
137
- // 层内:假设 → 失败模式(切面)
157
+ // 层内:假设 → 失败原因(切面)
138
158
  { id: 'e-h1-f1', source: 'H1', target: 'F1', kind: 'categorized_as' },
139
159
  { id: 'e-h2-f2', source: 'H2', target: 'F2', kind: 'categorized_as' },
140
160
  { id: 'e-h3-f3', source: 'H3', target: 'F3', kind: 'categorized_as' },
@@ -142,26 +162,27 @@ export const SEED_GRAPH = {
142
162
  { id: 'e-h5-f3', source: 'H5', target: 'F3', kind: 'categorized_as' },
143
163
  { id: 'e-h6-f5', source: 'H6', target: 'F5', kind: 'categorized_as' },
144
164
  { id: 'e-h7-f4', source: 'H7', target: 'F4', kind: 'categorized_as' },
145
- // 跨层:资产反向索引
165
+ // 跨层:资产反向索引(这条假设**落在**哪个对象上)
146
166
  { id: 'e-a-dwd-h1', source: 'dwd_ord_di', target: 'H1', kind: 'indexed_from' },
147
167
  { id: 'e-a-ods-h1', source: 'ods_order_sync', target: 'H1', kind: 'indexed_from' },
148
168
  { id: 'e-a-dim-h3', source: 'dim_channel_df', target: 'H3', kind: 'indexed_from' },
149
- // 跨层:检查产出证据、证据支持或否定假设
150
- { id: 'e-t11-e1', source: 'T1.1', target: 'E1', kind: 'produces' },
151
- { id: 'e-e1-h1', source: 'E1', target: 'H1', kind: 'supports' },
152
- { id: 'e-t72-e7', source: 'T7.2', target: 'E7', kind: 'produces' },
153
- { id: 'e-e7-h7', source: 'E7', target: 'H7', kind: 'refutes' },
154
- // 跨层:假设确认成根因
155
- { id: 'e-h1-c1', source: 'H1', target: 'C1', kind: 'confirmed_as' },
156
- { id: 'e-h3-c2', source: 'H3', target: 'C2', kind: 'confirmed_as' },
157
- { id: 'e-h5-c3', source: 'H5', target: 'C3', kind: 'confirmed_as' },
169
+ // 跨层:检查点 → 资产(`queries`,v1.3)。这条检查**要去查**哪些对象 ——
170
+ // 与上面那条 `indexed_from` 是两条边:两端不同,回答的问题也不同。
171
+ { id: 'e-t11-dwd-q', source: 'T1.1', target: 'dwd_ord_di', kind: 'queries' },
172
+ { id: 'e-t12-ods-q', source: 'T1.2', target: 'ods_order_sync', kind: 'queries' },
173
+ { id: 'e-t21-metric-q', source: 'T2.1', target: 'metric_daily_gmv', kind: 'queries' },
174
+ { id: 'e-t31-dim-q', source: 'T3.1', target: 'dim_channel_df', kind: 'queries' },
175
+ { id: 'e-t41-dwd-q', source: 'T4.1', target: 'dwd_ord_di', kind: 'queries' },
176
+ { id: 'e-t51-dwd-q', source: 'T5.1', target: 'dwd_ord_di', kind: 'queries' },
177
+ { id: 'e-t71-bi-q', source: 'T7.1', target: 'bi_daily_dashboard', kind: 'queries' },
178
+ { id: 'e-t72-dwd-q', source: 'T7.2', target: 'dwd_ord_di', kind: 'queries' },
158
179
  // 跨层:案例实例化(三个案例各归各的现象,但收敛到**同一批假设**)
159
180
  { id: 'e-case1-s1', source: 'CASE-001', target: 'S1', kind: 'instance_of', count: 1 },
160
181
  { id: 'e-case2-s2', source: 'CASE-002', target: 'S2', kind: 'instance_of', count: 1 },
161
182
  { id: 'e-case3-s3', source: 'CASE-003', target: 'S3', kind: 'instance_of', count: 1 },
162
183
  ],
163
184
  };
164
- /** 三个 seed 案例,与上面图谱里的节点 id 对齐(0021 §11)。 */
185
+ /** 三个 seed 案例卡片,与上面图谱里的节点 id 对齐(0021 §11)。 */
165
186
  export const SEED_CASES = [
166
187
  {
167
188
  id: 'CASE-001',
@@ -239,4 +260,119 @@ export const SEED_CASES = [
239
260
  ],
240
261
  },
241
262
  ];
263
+ /**
264
+ * 三次排查的**过程记录**(`agent_diagnosis_case`)。
265
+ *
266
+ * 它们与 `SEED_CASES` 一一对应,但**不是同一份东西**:这里是 Agent 跑出来的原始记录
267
+ * (每条检查点真跑了什么、看到什么、这个结果算不算数),`SEED_CASES` 是之后归纳出来的
268
+ * 案例卡片(要经人确认才生效)。一个回答「当时怎么走的」,一个回答「结论是什么」。
269
+ *
270
+ * `E7` 是 CASE-001 里那次**贵的否定**:T7.2 直连明细对账推翻了 H7。它不在案例的
271
+ * 主路径上(主路径早就确认了 H1),但它是这次排查最贵的一条知识 —— 40 分钟的误导段
272
+ * 正是靠它收尾的。
273
+ */
274
+ export const SEED_RUNS = [
275
+ {
276
+ runId: 'RUN-20260811-1',
277
+ symptomId: 'S1',
278
+ startedAt: '2026-08-11T02:55:00+08:00',
279
+ durationMinutes: 65,
280
+ path: SEED_CASES[0].path,
281
+ evidence: [
282
+ {
283
+ id: 'E1', checkPointId: 'T1.1',
284
+ query: "select count(*) from dwd_ord_di where dt = '2026-08-10'",
285
+ result: '分区不存在', verdict: 'supports', hypothesisId: 'H1',
286
+ why: '与调度系统日志一致:ods_order_sync 02:40 实例 failed 且未启用重试,下游无输入',
287
+ at: '2026-08-11T02:58:00+08:00', by: '@duty', rawRef: 'scheduler://ods_order_sync/instance/20260811',
288
+ },
289
+ {
290
+ id: 'E7', checkPointId: 'T7.2',
291
+ query: "select sum(gmv) from dwd_ord_di_detail where dt = '2026-08-10'",
292
+ result: '明细与报表一致', verdict: 'refutes', hypothesisId: 'H7',
293
+ why: '明细对账一致,缓存不影响明细 —— 这一条花了 35 分钟,是唯一能否定 H7 的检查',
294
+ at: '2026-08-11T03:40:00+08:00', by: '@analyst',
295
+ },
296
+ ],
297
+ rootCause: {
298
+ hypothesisId: 'H1', id: 'C1',
299
+ text: 'ODS 任务 ods_order_sync 02:40 失败且未启用重试,dwd_ord_di/dt 分区未产出。',
300
+ fixAction: '补 dwd_ord_di 分区;给 ods_order_sync 加失败告警与自动重试;分区存在性检查加入日报前置校验。',
301
+ confirmedAt: '2026-08-11T04:00:00+08:00',
302
+ },
303
+ misleading: SEED_CASES[0].misleading ? [SEED_CASES[0].misleading] : [],
304
+ },
305
+ {
306
+ runId: 'RUN-20260812-1',
307
+ symptomId: 'S2',
308
+ startedAt: '2026-08-12T09:10:00+08:00',
309
+ durationMinutes: 22,
310
+ path: SEED_CASES[1].path,
311
+ evidence: [
312
+ {
313
+ id: 'E2a', checkPointId: 'T1.1',
314
+ query: "select count(*) from dwd_ord_di where dt = '2026-08-11'",
315
+ result: '分区存在且有数据', verdict: 'refutes', hypothesisId: 'H1',
316
+ why: '分区有数据,H1 不成立 —— 1 分钟就砍掉了一条先验最高的假设',
317
+ at: '2026-08-12T09:12:00+08:00', by: '@duty',
318
+ },
319
+ {
320
+ id: 'E2b', checkPointId: 'T4.1',
321
+ query: "select order_id, count(*) c from dwd_ord_di where dt = '2026-08-11' group by order_id having c > 1 limit 10",
322
+ result: '主键唯一,无重复', verdict: 'refutes', hypothesisId: 'H4',
323
+ why: '主键唯一性检查通过,无重复行 —— H4 被否定',
324
+ at: '2026-08-12T09:16:00+08:00', by: '@duty',
325
+ },
326
+ {
327
+ id: 'E2c', checkPointId: 'T3.1',
328
+ query: "select channel, count(*) from dwd_ord_di where dt = '2026-08-11' group by channel order by 2 desc",
329
+ result: 'unknown 占比 88%', verdict: 'supports', hypothesisId: 'H3',
330
+ why: 'unknown 占比 88%,且缺口集中在新增的两个渠道 —— 与维表未补录一致',
331
+ at: '2026-08-12T09:24:00+08:00', by: '@duty',
332
+ },
333
+ ],
334
+ rootCause: {
335
+ hypothesisId: 'H3', id: 'C2',
336
+ text: '新增渠道未补录维表,dim_channel_df join 落 unknown 后被 where channel is not null 过滤。',
337
+ fixAction: '补录渠道维表;把 unknown 占比纳入日常巡检;下游过滤改为「先报警再过滤」。',
338
+ confirmedAt: '2026-08-12T09:32:00+08:00',
339
+ },
340
+ },
341
+ {
342
+ runId: 'RUN-20260813-1',
343
+ symptomId: 'S3',
344
+ startedAt: '2026-08-13T14:05:00+08:00',
345
+ durationMinutes: 35,
346
+ path: SEED_CASES[2].path,
347
+ evidence: [
348
+ {
349
+ id: 'E3a', checkPointId: 'T4.1',
350
+ query: "select user_id, count(*) c from dwd_dau_di where dt = '2026-08-12' group by user_id having c > 1 limit 10",
351
+ result: '主键唯一,无重复', verdict: 'refutes', hypothesisId: 'H4',
352
+ why: '主键唯一性通过 —— 放大不是重复计数造成的',
353
+ at: '2026-08-13T14:10:00+08:00', by: '@duty',
354
+ },
355
+ {
356
+ id: 'E3b', checkPointId: 'T7.1',
357
+ query: 'select max(refresh_at) from bi_daily_dashboard_meta',
358
+ result: '缓存时间正常', verdict: 'inconclusive', hypothesisId: 'H7',
359
+ why: '缓存时间正常并不能否定 H7(T7.1 的 verdict_false 已经写明);要否定它必须做 35 分钟的直连明细对账 —— 这一条给不出结论',
360
+ at: '2026-08-13T14:18:00+08:00', by: '@duty',
361
+ },
362
+ {
363
+ id: 'E3c', checkPointId: 'T5.1',
364
+ query: "select event_time, count(*) from dwd_dau_di where dt = '2026-08-12' group by 1 order by 1 limit 5",
365
+ result: '分区内事件时间跨天', verdict: 'supports', hypothesisId: 'H5',
366
+ why: '事件时间跨出 T-1 单日窗口,且只有这一天异常 —— 与上游重跑补写一致',
367
+ at: '2026-08-13T14:34:00+08:00', by: '@duty',
368
+ },
369
+ ],
370
+ rootCause: {
371
+ hypothesisId: 'H5', id: 'C3',
372
+ text: '上游重跑把跨天事件补写进 T-1 分区,事件时间与处理时间边界被跨越。',
373
+ fixAction: '重跑加事件时间边界校验;分区写入前检查事件时间下界。',
374
+ confirmedAt: '2026-08-13T14:40:00+08:00',
375
+ },
376
+ },
377
+ ];
242
378
  //# sourceMappingURL=seed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../src/diagnosis/seed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../src/diagnosis/seed.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,52 @@
1
- import { type AttributionCase } from './seed.js';
2
1
  import { type DiagnosisIssue } from './schema.js';
3
- import { cardPathOf, type DiagnosisCard } from './cards.js';
4
- import type { AttributionGraphData } from './types.js';
2
+ import { type DiagnosisCard } from './cards.js';
3
+ import type { AttributionCase, AttributionGraphData, DiagnosisRunRecord } from './types.js';
5
4
  import type { KnowledgeRuntime } from '../runtime.js';
5
+ import type { CardProposalStore } from '../proposals.js';
6
6
  /** 读取顺序的显式来源,界面据此说明「现在看到的是哪一份」。 */
7
- export type DiagnosisSource = 'cards' | 'jsonl' | 'seed';
7
+ export type DiagnosisSource = 'cards' | 'jsonl' | 'empty';
8
8
  export interface DiagnosisSnapshot {
9
9
  graph: AttributionGraphData;
10
10
  cases: AttributionCase[];
11
11
  issues: DiagnosisIssue[];
12
- /** 数据是不是本次 ensure() 从 seed 写进去的。界面据此说明来源。 */
12
+ /** 数据是不是本次调用从内置示例写进去的(只有 `loadSample()` 会把它变成 true)。 */
13
13
  seeded: boolean;
14
14
  /** 旧知识根是否在本次被前向迁移成卡片。 */
15
15
  migrated: boolean;
16
16
  /** 读的是哪一份真相。 */
17
17
  source: DiagnosisSource;
18
- /** 写卡片 / 迁移过程中发现的问题(写失败、迁移分歧)。必须能显示出来,不能只进日志。 */
18
+ /**
19
+ * 这个库还什么都没有 —— 界面据此显示空态(说什么会有、怎么开始),
20
+ * 而不是画一张空图。
21
+ */
22
+ canLoadSample: boolean;
23
+ /** 写卡片 / 迁移 / 读诊断日志过程中发现的问题。必须能显示出来,不能只进日志。 */
19
24
  problems: string[];
25
+ /**
26
+ * 待人确认的提议条数(0021 §7.1)。
27
+ *
28
+ * 它挂在归因这一栏上,是因为**提议多半就是从排查里长出来的**:跑完一次排查,
29
+ * 案例卡片的草案就等在队列里。归因侧只挂一个角标,点它跳到「知识库 → Wiki」的
30
+ * 待办区逐条 review —— review 界面只有一处,不在这里再造一个。
31
+ */
32
+ proposals: {
33
+ pending: number;
34
+ rejected: number;
35
+ confirmed: number;
36
+ };
20
37
  }
21
- /** 只取运行时里真正要用的三件事:读根目录、落 SourceRaw、写卡片。 */
22
- type DiagnosisHost = Pick<KnowledgeRuntime, 'rootDir' | 'addSource' | 'writeCard'>;
38
+ /**
39
+ * 只取运行时里真正要用的那几件事:读根目录、落 SourceRaw、写卡片、列来源。
40
+ *
41
+ * `loadSources` 是 v1.1 新增的:一次排查的产物现在是一条 `agent_diagnosis_case`
42
+ * 的 SourceRaw,归因图读的是它,而不是自造的 jsonl。
43
+ */
44
+ type DiagnosisHost = Pick<KnowledgeRuntime, 'rootDir' | 'addSource' | 'writeCard' | 'loadSources'>;
23
45
  export declare class DiagnosisStore {
24
46
  private readonly host;
25
- constructor(host: DiagnosisHost);
26
- private get dir();
47
+ private readonly proposals?;
48
+ constructor(host: DiagnosisHost, proposals?: CardProposalStore | undefined);
49
+ private get legacyDir();
27
50
  private get cardsDir();
28
51
  /**
29
52
  * 幂等初始化。三种状态各自处理,互不覆盖:
@@ -32,27 +55,83 @@ export declare class DiagnosisStore {
32
55
  * 2. 没有卡片但有旧 jsonl → **前向迁移**:把旧图反推成卡片写出去,并**校验迁移无损**
33
56
  * (重新编译一遍与旧图比对,不一致就不认这次迁移,继续按 jsonl 读 —— 宁可留在旧形态,
34
57
  * 也不要静默丢知识);
35
- * 3. 两者都没有 → 首次启动:先落手册与复盘的 SourceRaw,再把 seed 编译成卡片。
58
+ * 3. 两者都没有 → **什么都不写**。这个库还没开始做排查。
59
+ *
60
+ * 第 3 条原来是自动写入内置示例。实跑反馈把它改掉了:那份示例长得像真的业务文档,
61
+ * 而它落在用户自己的 `01_source_truth/` 与 `02_wiki/` 里 —— 新装一台机器,一打开
62
+ * 「智能归因」就凭空多出几份来源和几十张卡片。示例还在(`loadSample()`),
63
+ * 但改成**用户点一下才载入**。
64
+ *
65
+ * **v1.1 起连模板文件也不铺了**:模板卡由类型定义派生(0021 §6.6),落成磁盘文件会
66
+ * 造出「设置里改了、磁盘上那份没改」的第二真源。
36
67
  */
37
68
  ensure(): Promise<{
38
69
  seeded: boolean;
39
70
  migrated: boolean;
40
71
  problems: string[];
41
72
  }>;
73
+ /**
74
+ * 载入**内置示例**:一份排查手册 + 三篇复盘 + 三次排查日志 → SourceRaw → 卡片 → 图。
75
+ *
76
+ * 只有用户明确点了「载入内置示例」才走这里(`ensure()` 不再自动调用)。幂等:
77
+ * `addSource` 按 `externalId`、`writeCard` 按 entityId,点两次不会写出第二份。
78
+ *
79
+ * **它走的是「提议 → 确认」那条门,不是绕过它**(0021 §6.1)。区别只在确认者是谁:
80
+ * 用户点「载入内置示例」这个动作本身就是**对整批示例的确认**,所以这里给每条提议记下
81
+ * `confirmedBy = user:load-sample`,然后照常走 `writeCard`。这样做的两个好处:
82
+ * 待办区里能看到这批卡片是怎么来的;而「未确认不落 `02_wiki/`」这条规则没有被开一个
83
+ * 后门 —— 例外是**确认者的身份**,不是门的缺失。
84
+ */
85
+ loadSample(): Promise<{
86
+ seeded: boolean;
87
+ migrated: boolean;
88
+ problems: string[];
89
+ }>;
42
90
  snapshot(): Promise<DiagnosisSnapshot>;
91
+ /** 待审 / 已拒 / 已确认未落卡的条数。没有提议存储时全是 0(诚实,不猜)。 */
92
+ private proposalCounts;
93
+ /**
94
+ * 图 = **卡片那张图** + **一次排查的产物**。
95
+ *
96
+ * 两条来源严格分工:类型层与引用层(以及六种卡片边)全部来自卡片;`evidence` / `cause`
97
+ * 与四条执行边全部来自 `agent_diagnosis_case` 的 SourceRaw。合成一张图是**读**的时候
98
+ * 做的,不是写的时候 —— 写的时候合成,等于让一次执行的结果变成可复用的知识。
99
+ */
100
+ private buildGraph;
43
101
  /**
44
- * 图。
102
+ * 旧 `05_diagnosis/` 里的执行产物:`evidence.jsonl` / `causes.jsonl` / `edges.jsonl`。
45
103
  *
46
- * 有卡片:`cardsToGraph(卡片)` + 一次排查的产物;没有卡片:按旧 jsonl 读。
47
- * 两条路径都返回同一种形状,调用方不需要知道现在是哪一代。
104
+ * 只取**执行边**:卡片边由卡片投影出来,这里再读一遍就会出现重复边。同时按 id 去重
105
+ * —— 已经由 `agent_diagnosis_case` 解析出来的节点不重复加(新旧两代可能描述同一次排查)。
48
106
  */
107
+ private readLegacyRunArtifacts;
49
108
  readGraph(): Promise<AttributionGraphData>;
50
109
  readCases(): Promise<AttributionCase[]>;
51
110
  /** 读 `02_wiki/diagnosis/**` 下的全部卡片。解析不出来的文件按「不是卡片」跳过。 */
52
111
  readCards(): Promise<DiagnosisCard[]>;
53
- /** 写一批卡片。返回写失败的原因(schema 不认、出处不存在等),由调用方决定怎么显示。 */
54
- private writeCards;
55
- private seed;
112
+ /**
113
+ * 读全部 `agent_diagnosis_case` 来源,解析出排查记录。
114
+ *
115
+ * 块坏了、`runId` 缺了、`symptomId` 缺了就**跳过并如实报问题** —— 不猜。
116
+ * 一条坏日志不该让整张图读不出来,但它也不能被静默吞掉。
117
+ */
118
+ readRuns(): Promise<{
119
+ records: DiagnosisRunRecord[];
120
+ problems: string[];
121
+ }>;
122
+ /**
123
+ * 一次排查结束:写一条 `agent_diagnosis_case` 的 SourceRaw,并**提议**一张案例卡片。
124
+ *
125
+ * 两件事分开是有意的:记录是 Agent 的产物,可以直接落(它是实例层的原始记录,不是知识);
126
+ * 案例卡片落在收敛的那一侧,所以只能提议,等人确认。
127
+ *
128
+ * 幂等:`externalId` = runId,同一次排查重跑不会写出第二条来源。
129
+ */
130
+ recordRun(record: DiagnosisRunRecord): Promise<{
131
+ sourceId?: string;
132
+ proposalId?: string;
133
+ problems: string[];
134
+ }>;
56
135
  private migrate;
57
136
  /**
58
137
  * 落原始材料。
@@ -61,21 +140,30 @@ export declare class DiagnosisStore {
61
140
  * `addSource` 用 `externalId` 幂等,所以重复调用不会写出第二份。
62
141
  */
63
142
  private writeSources;
64
- private readRunArtifacts;
65
- private writeRunArtifacts;
66
- /** 旧版的类型层快照。首次 seed 时也写一份:它让 `05_diagnosis/` 仍是一份可读的完整快照。 */
67
- private writeLegacySnapshot;
143
+ /**
144
+ * 写一批卡片。返回写失败的原因(schema 不认、出处不存在等),由调用方决定怎么显示。
145
+ *
146
+ * **它是一条「确认之后」的路径**:调用方必须先有人的确认(`loadSample` 是用户点了按钮、
147
+ * 迁移是搬已有知识、review 面板是逐条点了通过),`confirmedBy` 就是那个凭证。
148
+ * Agent 手里没有这条路径 —— 它只有 `propose_wiki_cards` 与 `write_knowledge_card`
149
+ * (后者要求一条已确认且尚未落卡的提议)。
150
+ *
151
+ * 有提议存储时**先提一条提议再确认再落卡**,而不是直接写:这样待办区里能追溯
152
+ * 「这张卡片是哪一次确认产生的」,而两条路径(这里与 review 面板)共用同一个形状。
153
+ */
154
+ private writeCards;
155
+ private readLegacyCases;
68
156
  private readLegacyGraph;
69
157
  /**
70
158
  * 是否存在**值得迁移的旧知识根**。
71
159
  *
72
- * 只看旧版的**类型层**分片,而且要求它真的有内容:`ensure()` 自己会为一次排查的产物
73
- * (`evidence.jsonl` 等)建空占位文件 —— 若把空文件也算成「旧知识根」,首次启动会走进
74
- * 迁移分支,然后在空图上白跑一趟。
160
+ * 只看旧版的**类型层**分片,而且要求它真的有内容:空文件不算「旧知识根」,
161
+ * 否则首次启动会走进迁移分支,然后在空图上白跑一趟。
75
162
  */
76
163
  private legacyShardFiles;
77
164
  private readLines;
78
- private writeIfAbsent;
79
165
  }
80
- export { cardPathOf };
166
+ /** 卡片正文:小节 + 结构化块。复用编解码里的同一套序列化,避免两处格式漂移。 */
167
+ export declare function renderCardBody(card: DiagnosisCard): string;
168
+ export {};
81
169
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/diagnosis/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AAExE,OAAO,EAAuD,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACtG,OAAO,EACS,UAAU,EACR,KAAK,aAAa,EACnC,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAmB,oBAAoB,EAAwC,MAAM,YAAY,CAAA;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AA0DrD,mCAAmC;AACnC,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAA;AAExD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,6CAA6C;IAC7C,MAAM,EAAE,OAAO,CAAA;IACf,yBAAyB;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB;IAChB,MAAM,EAAE,eAAe,CAAA;IACvB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,2CAA2C;AAC3C,KAAK,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,CAAA;AAElF,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,aAAa;IAEhD,OAAO,KAAK,GAAG,GAAkD;IACjE,OAAO,KAAK,QAAQ,GAAqE;IAEzF;;;;;;;;OAQG;IACG,MAAM,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAiB7E,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAoC5C;;;;;OAKG;IACG,SAAS,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAU1C,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAY7C,yDAAyD;IACnD,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAS3C,mDAAmD;YACrC,UAAU;YAoBV,IAAI;YAYJ,OAAO;IA4BrB;;;;;OAKG;YACW,YAAY;YAkBZ,gBAAgB;YAkBhB,iBAAiB;IAW/B,6DAA6D;YAC/C,mBAAmB;YAUnB,eAAe;IAe7B;;;;;;OAMG;YACW,gBAAgB;YAQhB,SAAS;YAMT,aAAa;CAM5B;AAsED,OAAO,EAAE,UAAU,EAAE,CAAA"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/diagnosis/store.ts"],"names":[],"mappings":"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"}