dsh-data-domain-knowledge 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +360 -0
  3. package/cordis.patch.yml +410 -0
  4. package/eval/README.md +76 -0
  5. package/eval/evaluate-retrieval.mjs +121 -0
  6. package/eval/queries.example.jsonl +2 -0
  7. package/lib/client.js +111415 -0
  8. package/lib/types/config-schema.d.ts +35 -0
  9. package/lib/types/config-schema.d.ts.map +1 -0
  10. package/lib/types/config-schema.js +34 -0
  11. package/lib/types/config-schema.js.map +1 -0
  12. package/lib/types/convert/core-loader.d.ts +32 -0
  13. package/lib/types/convert/core-loader.d.ts.map +1 -0
  14. package/lib/types/convert/core-loader.js +60 -0
  15. package/lib/types/convert/core-loader.js.map +1 -0
  16. package/lib/types/convert/host.d.ts +88 -0
  17. package/lib/types/convert/host.d.ts.map +1 -0
  18. package/lib/types/convert/host.js +479 -0
  19. package/lib/types/convert/host.js.map +1 -0
  20. package/lib/types/convert/ingest.d.ts +125 -0
  21. package/lib/types/convert/ingest.d.ts.map +1 -0
  22. package/lib/types/convert/ingest.js +228 -0
  23. package/lib/types/convert/ingest.js.map +1 -0
  24. package/lib/types/convert/settings-schema.d.ts +18 -0
  25. package/lib/types/convert/settings-schema.d.ts.map +1 -0
  26. package/lib/types/convert/settings-schema.js +26 -0
  27. package/lib/types/convert/settings-schema.js.map +1 -0
  28. package/lib/types/convert/types.d.ts +46 -0
  29. package/lib/types/convert/types.d.ts.map +1 -0
  30. package/lib/types/convert/types.js +41 -0
  31. package/lib/types/convert/types.js.map +1 -0
  32. package/lib/types/diagnosis/cards.d.ts +71 -0
  33. package/lib/types/diagnosis/cards.d.ts.map +1 -0
  34. package/lib/types/diagnosis/cards.js +482 -0
  35. package/lib/types/diagnosis/cards.js.map +1 -0
  36. package/lib/types/diagnosis/problem-classes.d.ts +51 -0
  37. package/lib/types/diagnosis/problem-classes.d.ts.map +1 -0
  38. package/lib/types/diagnosis/problem-classes.js +66 -0
  39. package/lib/types/diagnosis/problem-classes.js.map +1 -0
  40. package/lib/types/diagnosis/schema.d.ts +65 -0
  41. package/lib/types/diagnosis/schema.d.ts.map +1 -0
  42. package/lib/types/diagnosis/schema.js +208 -0
  43. package/lib/types/diagnosis/schema.js.map +1 -0
  44. package/lib/types/diagnosis/seed-source.d.ts +20 -0
  45. package/lib/types/diagnosis/seed-source.d.ts.map +1 -0
  46. package/lib/types/diagnosis/seed-source.js +96 -0
  47. package/lib/types/diagnosis/seed-source.js.map +1 -0
  48. package/lib/types/diagnosis/seed.d.ts +50 -0
  49. package/lib/types/diagnosis/seed.d.ts.map +1 -0
  50. package/lib/types/diagnosis/seed.js +242 -0
  51. package/lib/types/diagnosis/seed.js.map +1 -0
  52. package/lib/types/diagnosis/store.d.ts +81 -0
  53. package/lib/types/diagnosis/store.d.ts.map +1 -0
  54. package/lib/types/diagnosis/store.js +409 -0
  55. package/lib/types/diagnosis/store.js.map +1 -0
  56. package/lib/types/diagnosis/types.d.ts +124 -0
  57. package/lib/types/diagnosis/types.d.ts.map +1 -0
  58. package/lib/types/diagnosis/types.js +13 -0
  59. package/lib/types/diagnosis/types.js.map +1 -0
  60. package/lib/types/directory-picker.d.ts +94 -0
  61. package/lib/types/directory-picker.d.ts.map +1 -0
  62. package/lib/types/directory-picker.js +110 -0
  63. package/lib/types/directory-picker.js.map +1 -0
  64. package/lib/types/extract-model.d.ts +76 -0
  65. package/lib/types/extract-model.d.ts.map +1 -0
  66. package/lib/types/extract-model.js +193 -0
  67. package/lib/types/extract-model.js.map +1 -0
  68. package/lib/types/extract.d.ts +121 -0
  69. package/lib/types/extract.d.ts.map +1 -0
  70. package/lib/types/extract.js +549 -0
  71. package/lib/types/extract.js.map +1 -0
  72. package/lib/types/fts.d.ts +96 -0
  73. package/lib/types/fts.d.ts.map +1 -0
  74. package/lib/types/fts.js +184 -0
  75. package/lib/types/fts.js.map +1 -0
  76. package/lib/types/index.d.ts +39 -0
  77. package/lib/types/index.d.ts.map +1 -0
  78. package/lib/types/index.js +1112 -0
  79. package/lib/types/index.js.map +1 -0
  80. package/lib/types/intent/engine.d.ts +108 -0
  81. package/lib/types/intent/engine.d.ts.map +1 -0
  82. package/lib/types/intent/engine.js +501 -0
  83. package/lib/types/intent/engine.js.map +1 -0
  84. package/lib/types/intent/host.d.ts +88 -0
  85. package/lib/types/intent/host.d.ts.map +1 -0
  86. package/lib/types/intent/host.js +389 -0
  87. package/lib/types/intent/host.js.map +1 -0
  88. package/lib/types/intent/preset-tools.d.ts +37 -0
  89. package/lib/types/intent/preset-tools.d.ts.map +1 -0
  90. package/lib/types/intent/preset-tools.js +45 -0
  91. package/lib/types/intent/preset-tools.js.map +1 -0
  92. package/lib/types/intent/settings-schema.d.ts +59 -0
  93. package/lib/types/intent/settings-schema.d.ts.map +1 -0
  94. package/lib/types/intent/settings-schema.js +57 -0
  95. package/lib/types/intent/settings-schema.js.map +1 -0
  96. package/lib/types/intent/store.d.ts +75 -0
  97. package/lib/types/intent/store.d.ts.map +1 -0
  98. package/lib/types/intent/store.js +139 -0
  99. package/lib/types/intent/store.js.map +1 -0
  100. package/lib/types/intent/tools.d.ts +63 -0
  101. package/lib/types/intent/tools.d.ts.map +1 -0
  102. package/lib/types/intent/tools.js +108 -0
  103. package/lib/types/intent/tools.js.map +1 -0
  104. package/lib/types/intent/types.d.ts +189 -0
  105. package/lib/types/intent/types.d.ts.map +1 -0
  106. package/lib/types/intent/types.js +62 -0
  107. package/lib/types/intent/types.js.map +1 -0
  108. package/lib/types/knowledge-bases.d.ts +266 -0
  109. package/lib/types/knowledge-bases.d.ts.map +1 -0
  110. package/lib/types/knowledge-bases.js +1107 -0
  111. package/lib/types/knowledge-bases.js.map +1 -0
  112. package/lib/types/layout.d.ts +262 -0
  113. package/lib/types/layout.d.ts.map +1 -0
  114. package/lib/types/layout.js +312 -0
  115. package/lib/types/layout.js.map +1 -0
  116. package/lib/types/migrate.d.ts +110 -0
  117. package/lib/types/migrate.d.ts.map +1 -0
  118. package/lib/types/migrate.js +280 -0
  119. package/lib/types/migrate.js.map +1 -0
  120. package/lib/types/recall-rank.d.ts +158 -0
  121. package/lib/types/recall-rank.d.ts.map +1 -0
  122. package/lib/types/recall-rank.js +261 -0
  123. package/lib/types/recall-rank.js.map +1 -0
  124. package/lib/types/runtime.d.ts +568 -0
  125. package/lib/types/runtime.d.ts.map +1 -0
  126. package/lib/types/runtime.js +3045 -0
  127. package/lib/types/runtime.js.map +1 -0
  128. package/lib/types/settings-schema.d.ts +117 -0
  129. package/lib/types/settings-schema.d.ts.map +1 -0
  130. package/lib/types/settings-schema.js +92 -0
  131. package/lib/types/settings-schema.js.map +1 -0
  132. package/lib/types/settings-volatile.d.ts +102 -0
  133. package/lib/types/settings-volatile.d.ts.map +1 -0
  134. package/lib/types/settings-volatile.js +114 -0
  135. package/lib/types/settings-volatile.js.map +1 -0
  136. package/lib/types/types.d.ts +799 -0
  137. package/lib/types/types.d.ts.map +1 -0
  138. package/lib/types/types.js +387 -0
  139. package/lib/types/types.js.map +1 -0
  140. package/lib/types/wiki-types.d.ts +68 -0
  141. package/lib/types/wiki-types.d.ts.map +1 -0
  142. package/lib/types/wiki-types.js +322 -0
  143. package/lib/types/wiki-types.js.map +1 -0
  144. package/package.json +101 -0
  145. package/preset/tita-data-agent/agent.cordis.yml +376 -0
  146. package/preset/tita-data-agent/preset.yml +3 -0
  147. package/python/requirements.txt +8 -0
  148. package/scripts/doctor.mjs +70 -0
  149. package/scripts/e2e-pipeline.mjs +355 -0
  150. package/scripts/install-agent-preset.mjs +92 -0
  151. package/scripts/setup-embedding.sh +34 -0
  152. package/scripts/sync-agent-preset.mjs +188 -0
  153. package/src/client/AgentPresetCard.tsx +247 -0
  154. package/src/client/DirectoryPicker.tsx +357 -0
  155. package/src/client/InfoHint.tsx +65 -0
  156. package/src/client/IntentLogicTab.tsx +185 -0
  157. package/src/client/IntentTab.tsx +715 -0
  158. package/src/client/KnowledgeBaseTab.tsx +1454 -0
  159. package/src/client/KnowledgeGraphView.tsx +306 -0
  160. package/src/client/KnowledgePanel.tsx +381 -0
  161. package/src/client/KnowledgeStepRail.tsx +60 -0
  162. package/src/client/NodeSettings.tsx +392 -0
  163. package/src/client/PreviewSections.tsx +116 -0
  164. package/src/client/RecallPanel.tsx +399 -0
  165. package/src/client/TypeDefinitionDrawer.tsx +215 -0
  166. package/src/client/WikiFlowCard.tsx +226 -0
  167. package/src/client/WikiTypeEditor.tsx +332 -0
  168. package/src/client/agent-preset.ts +121 -0
  169. package/src/client/arch/AgentArchitectureGraph.tsx +219 -0
  170. package/src/client/arch/NodeLogicPanel.tsx +133 -0
  171. package/src/client/arch/ProblemDetailPanel.tsx +88 -0
  172. package/src/client/arch/model.ts +691 -0
  173. package/src/client/architecture.css +191 -0
  174. package/src/client/architecture.tsx +530 -0
  175. package/src/client/attribution/AttributionGraph.tsx +104 -0
  176. package/src/client/attribution/AttributionTab.tsx +332 -0
  177. package/src/client/attribution/CaseView.tsx +102 -0
  178. package/src/client/attribution/GraphStage.tsx +87 -0
  179. package/src/client/attribution/RunView.tsx +184 -0
  180. package/src/client/attribution/StageChrome.tsx +403 -0
  181. package/src/client/attribution/ViewSwitch.tsx +107 -0
  182. package/src/client/attribution/graph-options.ts +381 -0
  183. package/src/client/attribution/model.ts +462 -0
  184. package/src/client/config-scope.ts +119 -0
  185. package/src/client/convert/ConvertPanel.tsx +594 -0
  186. package/src/client/convert/styles.css +138 -0
  187. package/src/client/convert/styles.ts +49 -0
  188. package/src/client/format.ts +39 -0
  189. package/src/client/graph/layout.ts +181 -0
  190. package/src/client/graph.css +113 -0
  191. package/src/client/index.ts +98 -0
  192. package/src/client/problem-domains.ts +114 -0
  193. package/src/client/styles.css +940 -0
  194. package/src/client/styles.ts +11 -0
  195. package/src/client/useFitScale.ts +68 -0
  196. package/src/config-schema.ts +45 -0
  197. package/src/convert/core-loader.ts +68 -0
  198. package/src/convert/host.ts +579 -0
  199. package/src/convert/ingest.ts +367 -0
  200. package/src/convert/settings-schema.ts +27 -0
  201. package/src/convert/types.ts +65 -0
  202. package/src/diagnosis/cards.ts +498 -0
  203. package/src/diagnosis/problem-classes.ts +117 -0
  204. package/src/diagnosis/schema.ts +260 -0
  205. package/src/diagnosis/seed-source.ts +107 -0
  206. package/src/diagnosis/seed.ts +291 -0
  207. package/src/diagnosis/store.ts +432 -0
  208. package/src/diagnosis/types.ts +152 -0
  209. package/src/directory-picker.ts +164 -0
  210. package/src/extract-model.ts +227 -0
  211. package/src/extract.ts +632 -0
  212. package/src/fts.ts +203 -0
  213. package/src/index.ts +1091 -0
  214. package/src/intent/README.md +63 -0
  215. package/src/intent/engine.ts +527 -0
  216. package/src/intent/host.ts +462 -0
  217. package/src/intent/preset-tools.ts +48 -0
  218. package/src/intent/settings-schema.ts +63 -0
  219. package/src/intent/store.ts +143 -0
  220. package/src/intent/tools.ts +139 -0
  221. package/src/intent/types.ts +245 -0
  222. package/src/knowledge-bases.ts +1160 -0
  223. package/src/layout.ts +350 -0
  224. package/src/migrate.ts +262 -0
  225. package/src/python/embedding_worker.py +471 -0
  226. package/src/recall-rank.ts +299 -0
  227. package/src/runtime.ts +3069 -0
  228. package/src/settings-schema.ts +94 -0
  229. package/src/settings-volatile.ts +122 -0
  230. package/src/types.ts +1140 -0
  231. package/src/wiki-types.ts +357 -0
@@ -0,0 +1,191 @@
1
+ /* =====================================================================
2
+ Agent 概览:一张 AntV 架构图 + 画布内的详情浮层
3
+ ---------------------------------------------------------------------
4
+ 0025 之前这里住的是回字形 / 阶段带那套 DOM 图,类名已全部删除。
5
+ 0026 之前画布上方有一条 flex 工具条(图例 + 提示 + 统计 + 全屏),栏宽一窄
6
+ `flex-wrap` 就把全屏按钮甩到第二行 —— 那正是「全屏不在右上角」的来源。
7
+ 0027 之前节点详情是画布**右边的一列**(旧侧栏类名已全部删除):它把画布挤窄到
8
+ 494px(缩放 0.42,卡片上的字缩到读不出),而且「图」与「这张图上的东西」
9
+ 分成两块表面。现在它是画布内的浮层,侧栏那套类名随之删除。
10
+ 0029 之前画布左上角还压着两行图例(边语义 + 全图状态分布),现在也撤了:
11
+ 读法在带名、卡片状态字与浮层正文里,画布上不留说明板。
12
+
13
+ 这个文件跟着架构视图走,不并进插件通用 styles.css:它是「一张图 + 一个
14
+ 浮层」的版式,和知识库 / 意图 / 记忆那些卡片页没有共同词汇。
15
+ ===================================================================== */
16
+
17
+ /* ---------------------------------------------------------------- 版式 */
18
+
19
+ /* **一个表面。** 画布拥有边框、圆角、投影;详情浮层浮在它里面,
20
+ 不另起一列、不另起一张卡。 */
21
+ .tita-archStage {
22
+ position: relative;
23
+ display: flex;
24
+ min-width: 0;
25
+ flex-direction: column;
26
+ border: 1px solid var(--tita-line);
27
+ border-radius: 10px;
28
+ background: var(--tita-surface);
29
+ overflow: hidden;
30
+ }
31
+
32
+ .tita-archStage:fullscreen { border: 0; border-radius: 0; }
33
+ .tita-archStage:fullscreen .tita-archPane { flex: 1 1 auto; min-height: 0; }
34
+
35
+ /* 画布那一列。**浮层的定位上下文是它**,不是整块表面 —— 否则右上角那排操作
36
+ 会浮到详情浮层头上。 */
37
+ .tita-archPane { position: relative; display: flex; flex: 1 1 auto; min-width: 0; flex-direction: column; }
38
+
39
+ /* ---------------------------------------------------------------- 画布 */
40
+
41
+ /* 浮层:只剩右上角的操作(缩放档 + 全屏)。0029 撤掉了左上角那两行图例 ——
42
+ 画布上不再压一块半透明说明板,读法改由带名、卡片状态字与浮层正文承担。
43
+ `nowrap` 仍然保留:将来再有东西浮上来,也不许把操作挤到第二行去。 */
44
+ .tita-archOverlay {
45
+ position: absolute;
46
+ z-index: 2;
47
+ top: 10px;
48
+ right: 10px;
49
+ left: 10px;
50
+ display: flex;
51
+ align-items: flex-start;
52
+ justify-content: flex-end;
53
+ gap: 10px;
54
+ flex-wrap: nowrap;
55
+ pointer-events: none;
56
+ }
57
+
58
+ .tita-archOverlayActions { display: flex; flex: 0 0 auto; align-items: center; gap: 10px; padding: 3px 0; pointer-events: auto; }
59
+ /* 缩放档:两段的分段控件。两段都在,是因为一个来回翻转的按钮说不清「现在是哪一档」。 */
60
+ .tita-archZoom { display: inline-flex; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 7px; background: var(--tita-surface); }
61
+ .tita-archZoomOption { border: 0; background: transparent; padding: 4px 9px; color: var(--tita-ink-muted); font: inherit; font-size: 11px; cursor: pointer; }
62
+ .tita-archZoomOption + .tita-archZoomOption { border-left: 1px solid var(--tita-line); }
63
+ .tita-archZoomOption:hover { background: var(--tita-surface-muted); color: var(--tita-ink); }
64
+ .tita-archZoomOn { background: var(--tita-surface-muted); color: var(--tita-ink); font-weight: 600; }
65
+
66
+ /* 画布容器:**画布永远是设计尺寸,缩放由板上的 transform 承担**。
67
+ 这张画布设计宽 1172px、高 1132px(三条链路 + 一条问题域带),宿主右侧栏只有
68
+ 380–840px。所以外层不去「适配」画布,而是按缩放比把整块板缩下来:`fit` 档下板宽
69
+ 正好等于栏宽(没有可滚的余量),`1:1` 档下板保持设计尺寸、由滚动条承载。
70
+ 缩放比由组件按设计常量算出(`CANVAS_WIDTH/HEIGHT`),不写进 CSS,避免两处各写一份。 */
71
+ .tita-archScroll { width: 100%; min-width: 0; overflow: auto; background: var(--tita-surface); }
72
+ .tita-archStage:fullscreen .tita-archScroll {
73
+ flex: 1 1 auto;
74
+ min-height: 0;
75
+ /* 全屏下 `fit` 档两边都可能有余量,居中;`safe` 保证 1:1 档溢出时左上角不被裁掉。 */
76
+ display: flex;
77
+ align-items: safe center;
78
+ justify-content: safe center;
79
+ }
80
+ .tita-archBoard { min-width: 0; flex: 0 0 auto; }
81
+ .tita-archCanvas { width: 100%; height: 100%; min-width: 0; }
82
+
83
+ /* 画布里的卡片与问题域牌子都是 G6 的 HTML 节点;选中态由 updateNodeData 换
84
+ innerHTML,这里只补 hover 反馈,否则鼠标移到卡片上看不出它可点。 */
85
+ .tita-archStage .tita-archCard { cursor: pointer; }
86
+ .tita-archStage .tita-archCard:hover { border-color: var(--tita-primary) !important; box-shadow: 0 0 0 3px var(--tita-primary-soft) !important; }
87
+ .tita-archStage .tita-archCardOn { cursor: default; }
88
+ .tita-archStage .tita-archPlate { cursor: pointer; }
89
+ .tita-archStage .tita-archPlate:hover { border-color: var(--tita-primary) !important; box-shadow: 0 0 0 3px var(--tita-primary-soft) !important; }
90
+ .tita-archStage .tita-archPlateOn { cursor: default; }
91
+
92
+ /* ---------------------------------------------------------------- 详情浮层 */
93
+
94
+ /* 浮层的高度取「板高 - 顶部留白」与「视口上限」的较小值:`1:1` 档下板高有 1132px,
95
+ 如果浮层跟着板高长,它的下半截会落到宿主可视区外面去。 */
96
+ .tita-archInspector {
97
+ position: absolute;
98
+ z-index: 3;
99
+ top: 58px;
100
+ right: 10px;
101
+ display: flex;
102
+ width: min(360px, calc(100% - 20px));
103
+ height: min(calc(var(--arch-board-h, 600px) - 68px), 76vh);
104
+ flex-direction: column;
105
+ border: 1px solid var(--tita-line);
106
+ border-radius: 9px;
107
+ background: color-mix(in srgb, var(--tita-surface) 97%, transparent);
108
+ box-shadow: 0 12px 28px rgba(16, 24, 40, .13);
109
+ backdrop-filter: blur(3px);
110
+ overflow: hidden;
111
+ }
112
+
113
+ /* 窄到放不下两列时,浮层改成底部抽屉:它不再盖住左上角的图例与右上角的
114
+ 缩放 / 全屏 —— 那两个控件是「怎么看这张图」的全部入口,盖住它们就等于把人锁在浮层里。 */
115
+ @container (max-width: 620px) {
116
+ .tita-archInspector {
117
+ top: auto;
118
+ right: 10px;
119
+ left: 10px;
120
+ width: auto;
121
+ height: min(52%, 420px);
122
+ }
123
+ }
124
+
125
+ /* ---------------------------------------------------------------- 节点 / 问题域面板 */
126
+
127
+ .tita-archPanel {
128
+ display: flex;
129
+ min-width: 0;
130
+ flex-direction: column;
131
+ background: var(--tita-surface);
132
+ overflow: hidden;
133
+ }
134
+
135
+ .tita-archPanelHead { display: flex; flex: 0 0 auto; align-items: flex-start; gap: 9px; border-bottom: 1px solid var(--tita-line); padding: 11px 12px 10px; }
136
+ .tita-archPanelIcon { display: inline-flex; flex: 0 0 auto; width: 30px; height: 30px; align-items: center; justify-content: center; border: 1px solid var(--tita-line); border-radius: 7px; background: var(--tita-surface-muted); color: var(--tita-ink); }
137
+ .tita-archPanelHeadCopy { display: grid; flex: 1 1 auto; gap: 3px; min-width: 0; }
138
+ .tita-archPanelTitleRow { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; }
139
+ .tita-archPanelTitleRow h3 { margin: 0; color: var(--tita-ink); font-size: 13.5px; font-weight: 650; }
140
+ .tita-archPanelHeadCopy p { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.5; }
141
+ /* 链路归属:一枚小圆点 + 链路名。颜色由行内 style 给(链路身份色在 model.ts 里)。 */
142
+ .tita-archPanelLane { display: inline-flex; align-items: center; gap: 5px; color: var(--tita-ink-muted); font-size: 10px; }
143
+ .tita-archPanelLane > i { width: 6px; height: 6px; border-radius: 999px; }
144
+
145
+ .tita-archPanelBody { display: grid; min-width: 0; overflow-y: auto; }
146
+ .tita-archPanelSection { display: grid; gap: 8px; border-top: 1px solid var(--tita-line); padding: 12px; }
147
+ .tita-archPanelSection:first-child { border-top: 0; }
148
+ .tita-archPanelSectionHead { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
149
+ .tita-archPanelSectionHead h4 { margin: 0; color: var(--tita-ink); font-size: 11.5px; font-weight: 650; }
150
+ .tita-archPanelEyebrow { color: var(--tita-ink-faint); font-size: 9.5px; font-weight: 650; font-variant-numeric: tabular-nums; }
151
+ .tita-archPanelText { margin: 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.72; }
152
+ /* 状态说明块:用「整圈细边框 + 浅底」而不是左侧粗色条。左侧粗色条是
153
+ AI 生成界面的典型指纹,而且它并不比一圈细边框多传递任何信息。 */
154
+ .tita-archPanelNote { margin: 0; border: 1px solid var(--tita-line); border-radius: 7px; background: var(--tita-surface-muted); padding: 7px 9px; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.65; }
155
+
156
+ .tita-archPanelFlow { display: grid; gap: 4px; border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface); padding: 8px 9px; color: var(--tita-ink); }
157
+ .tita-archPanelFlow > span { display: grid; gap: 1px; font-size: 11px; }
158
+ .tita-archPanelFlow small { color: var(--tita-ink-faint); font-size: 9.5px; font-weight: 650; letter-spacing: .06em; }
159
+ .tita-archPanelFlow > svg { color: var(--tita-ink-faint); }
160
+
161
+ .tita-archPanelSteps { display: grid; gap: 7px; margin: 0; padding: 0; list-style: none; }
162
+ .tita-archPanelStep { display: grid; grid-template-columns: 14px minmax(0, 1fr); gap: 7px; align-items: start; }
163
+ .tita-archPanelStep > svg { margin-top: 2px; color: var(--tita-tone-green); }
164
+ .tita-archPanelStep > span { display: grid; gap: 1px; min-width: 0; }
165
+ .tita-archPanelStep b { color: var(--tita-ink); font-size: 11.5px; font-weight: 600; }
166
+ .tita-archPanelStep small { color: var(--tita-ink-muted); font-size: 10.5px; line-height: 1.55; }
167
+ .tita-archPanelStepTodo > svg { color: var(--tita-ink-faint); }
168
+ .tita-archPanelStepTodo b { color: var(--tita-ink-muted); }
169
+
170
+ .tita-archPanelMetrics { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
171
+ .tita-archPanelMetric { display: grid; gap: 2px; border: 1px solid var(--tita-line); border-radius: 7px; background: var(--tita-surface); padding: 7px 9px; }
172
+ .tita-archPanelMetric small { color: var(--tita-ink-faint); font-size: 9.5px; font-weight: 600; letter-spacing: .03em; }
173
+ .tita-archPanelMetric b { color: var(--tita-ink); font-size: 14px; font-weight: 650; font-variant-numeric: tabular-nums; }
174
+
175
+ .tita-archPanelRecords { display: grid; gap: 0; margin: 0; }
176
+ .tita-archPanelRecords > div { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; border-bottom: 1px solid var(--tita-line); padding: 6px 0; }
177
+ .tita-archPanelRecords > div:last-child { border-bottom: 0; }
178
+ .tita-archPanelRecords dt { color: var(--tita-ink-muted); font-size: 10.5px; }
179
+ .tita-archPanelRecords dd { margin: 0; color: var(--tita-ink); font-size: 11px; font-weight: 600; text-align: right; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
180
+
181
+ .tita-archPanelHint { display: flex; align-items: flex-start; gap: 6px; margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.6; }
182
+ .tita-archPanelHint > svg { flex: 0 0 auto; margin-top: 2px; }
183
+ .tita-archPanelActions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
184
+
185
+ /* 机制标签:可点的跳到对应节点,没有落地的就是一枚静态标签 + 「未落地」徽标。
186
+ 两种都在,因为「这个域现在靠什么跑」和「它还想靠什么」是两件事。 */
187
+ .tita-archPanelChips { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; }
188
+ .tita-archPanelChip { display: inline-flex; align-items: center; gap: 2px; border: 1px solid var(--tita-line); border-radius: 999px; background: var(--tita-surface); color: var(--tita-ink-muted); padding: 2px 4px 2px 9px; font: inherit; font-size: 10.5px; font-weight: 600; cursor: pointer; transition: border-color 140ms ease, color 140ms ease, background 140ms ease; }
189
+ .tita-archPanelChip:hover { border-color: var(--tita-primary-line); background: var(--tita-primary-soft); color: var(--tita-primary); }
190
+ .tita-archPanelChip:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 1px; }
191
+ .tita-archPanelChipOff { display: inline-flex; align-items: center; gap: 5px; border: 1px dashed var(--tita-line); border-radius: 999px; color: var(--tita-ink-faint); padding: 2px 8px; font-size: 10.5px; }