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
@@ -12,7 +12,7 @@
12
12
 
13
13
  import {
14
14
  BarChart3, Box, BrainCircuit, ClipboardCheck, Clock3, Database, FileCode2, FileText,
15
- Gauge, GitBranch, HardDrive, Layers3, MessageCircle, RefreshCw, Search, Share2,
15
+ Gauge, GitBranch, HardDrive, Layers3, MessageCircle, PenTool, RefreshCw, Search, Share2,
16
16
  Table2, UserRound,
17
17
  } from '@tita-data-agent/ui/icons'
18
18
  import type { LucideIcon } from '@tita-data-agent/ui/icons'
@@ -42,6 +42,23 @@ export type PanelTab = 'overview' | 'intent' | 'knowledge' | 'attribution' | 'me
42
42
  */
43
43
  export type KnowledgeTab = 'source-raw' | 'wiki' | 'graph' | 'recall'
44
44
 
45
+ /**
46
+ * 「回答 / 数据工具」这个节点能打开的**工作区页面**。
47
+ *
48
+ * 三个 kind 各由一个别的插件注册(`dsh-data-table` / `dsh-data-notebook` /
49
+ * `dsh-data-excalidraw`)—— 这里只写 kind 字符串,不 import 它们的代码,所以某个
50
+ * 插件没装时按钮依然在,宿主会就着这个 kind 显示「没有页面类型能打开它」。
51
+ *
52
+ * 联合写在一处:`NodeLogicPanel` 用它画按钮、`KnowledgePanel` 转发它、客户端入口
53
+ * 把它交给宿主的 `openTab`。三处各写一份,迟早出现「面板多了一个按钮,入口的类型
54
+ * 还不认它」——加画布这次就正好会踩到。
55
+ *
56
+ * 「回答 / 数据工具」的输出产物就是这三样:可编辑表格、可复现 Notebook、可编辑画布。
57
+ * 画布是 2026-09-26 补上的第四个出口:Excalidraw 画布已经在宿主里跑着,而这张架构图
58
+ * 上原先只列了 Table 与 Notebook,读起来像是「Agent 出不了图」。
59
+ */
60
+ export type WorkspaceTabKind = 'data-sheet' | 'data-notebook' | 'data-excalidraw'
61
+
45
62
  /**
46
63
  * 五个分栏的顺序、名字与图标。**定义在这里而不是在 `KnowledgeBaseTab` 里**:
47
64
  * 渲染它的地方有两个 —— 面板外壳顶部那一条分栏 tab,和知识库内容本身。
@@ -83,7 +100,7 @@ export const NODE_LANES: LaneMeta[] = [
83
100
  ]
84
101
 
85
102
  export type NodeId =
86
- | 'conversation' | 'intent' | 'runtime' | 'answer' | 'data-sheet' | 'data-notebook'
103
+ | 'conversation' | 'intent' | 'runtime' | 'answer' | 'data-sheet' | 'data-notebook' | 'data-canvas'
87
104
  | 'source-raw' | 'compile' | 'build' | 'recall' | 'context'
88
105
  | 'interaction' | 'episodic-memory' | 'procedural-memory' | 'memory-quality' | 'daily-update' | 'funded-value'
89
106
 
@@ -103,9 +120,12 @@ export const NODE_STATUS_LABEL: Record<NodeStatus, string> = {
103
120
  }
104
121
 
105
122
  /**
106
- * 卡片上的状态文字。**只有「宿主提供」需要缩短** —— 它是四个字,而卡片右侧那点宽度
107
- * 是从标题里借的:省下两个字,`记忆整理与质量检查` 这种九字标题才放得下。
108
- * 面板、无障碍列表和状态记录读的仍是完整措辞,缩的只是图上那一处。
123
+ * 带名条上的状态文字(`A 宿主 5 · 部分实现 1 · …`)。**只有「宿主提供」需要缩短** ——
124
+ * 它是四个字,而带名条右侧那条计数是十几个字挤在一行里。
125
+ * 面板、卡片悬停与无障碍列表读的仍是完整措辞,缩的只是带名条那一处。
126
+ *
127
+ * 它原来还负责卡片右上角那枚状态字;2026-09-26 那枚撤掉了(同时出现十六次,
128
+ * 把每张卡的标题都挤窄),卡片上的状态现在只在悬停的 `title` 里。
109
129
  */
110
130
  export const NODE_STATUS_SHORT: Record<NodeStatus, string> = {
111
131
  ...NODE_STATUS_LABEL,
@@ -113,25 +133,17 @@ export const NODE_STATUS_SHORT: Record<NodeStatus, string> = {
113
133
  }
114
134
 
115
135
  /**
116
- * 状态色:**四档只用三种颜色,而且只在文字上**。
117
- *
118
- * 「已实现」是常态,所以它拿绿(`--tita-success`,白底 5.7:1);「部分实现」是唯一需要
119
- * 人动手的一档,拿琥珀(`--tita-warning`,5.4:1);「待实现」和「宿主提供」都不是我们的
120
- * 进度,拿两级灰:文字分两级(faint / muted),圆点合并成 faint 一档 —— 共享词表里只有
121
- * 三级墨色,而这两档圆点本来就只差一格,区分它们的是文字。
122
- * 四档不各配一个背景色药丸 —— 那样四张卡片并排时,颜色比标题还响。
136
+ * 状态色表**已删除**(2026-09-26),连同它最后一个消费者。
123
137
  *
124
- * `fill` 仍然保留,但它只用在**需要一整块底**的地方(例如图例上的小色块);
125
- * 卡片上的状态是「一个小圆点 + 状态文字」,不是一块色底。
138
+ * 它服务的是卡片右上角那枚「小圆点 + 状态字」。那枚撤掉之后,画布上唯一的状态读数
139
+ * 是问题域带名条里一行灰字计数(`A 宿主 5 · 部分实现 1 · …`)—— 计数不分色。
140
+ * 也就是说四档状态在画布上不再有「颜色」这个说法,留下一张 `fill/text/dot` 的表
141
+ * 只会让人以为某处还在按它上色。
126
142
  *
127
- * 这些值进的是 G6 **HTML 节点**的 innerHTML,也就是真实 DOM,所以可以用共享令牌。
143
+ * 状态**照旧要如实标注**,只是改由这三处承担:带名条的逐带计数、点开节点后浮层标题
144
+ * 旁的 `Badge`(`NodeLogicPanel` 的 `STATUS_BADGE`)、以及卡片悬停 `title` 与无障碍
145
+ * 列表里的 `statusNote` 依据。
128
146
  */
129
- export const NODE_STATUS_TONE: Record<NodeStatus, { fill: string; text: string; dot: string }> = {
130
- live: { fill: 'var(--tita-tone-green-tint)', text: 'var(--tita-success)', dot: 'var(--tita-success)' },
131
- partial: { fill: 'var(--tita-tone-amber-tint)', text: 'var(--tita-warning)', dot: 'var(--tita-warning)' },
132
- planned: { fill: 'var(--tita-surface-muted)', text: 'var(--tita-ink-faint)', dot: 'var(--tita-ink-faint)' },
133
- host: { fill: 'var(--tita-surface-muted)', text: 'var(--tita-ink-muted)', dot: 'var(--tita-ink-faint)' },
134
- }
135
147
 
136
148
  /** 一个执行步骤。/ `state` 决定面板里显示对勾、半勾还是空心圈。 */
137
149
  export interface NodeStep {
@@ -145,6 +157,10 @@ export interface NodeMeta {
145
157
  /**
146
158
  * 卡片上的短名。只给放不进 180px 卡片的标题用 —— 卡片是示意图,它旁边还站着
147
159
  * 十来个同宽的字;面板里写的始终是完整名字,卡片的 `title` 悬停也给出完整名字。
160
+ *
161
+ * 右上角那枚状态字撤掉之后(2026-09-26),卡片的标题行确实空出了一截。这里**没有**
162
+ * 因此把短名换回全名:短名当初是按「180px 里读得顺」挑的,不只是为了躲开那枚状态字,
163
+ * 而且面板与悬停里全名一直都在。哪条短名读起来不如全名,单独改那一条即可。
148
164
  */
149
165
  shortTitle?: string
150
166
  subtitle: string
@@ -204,13 +220,13 @@ icon: Box, lane: 'interaction',
204
220
  },
205
221
  answer: {
206
222
  title: '回答 / 数据工具', subtitle: '生成结果、可视化与方案',
207
- detail: '输出解释、引用和数据结果,并把结构化结果继续交给 Table 或 Notebook 处理。',
208
- input: '模型回答 + 工具返回值', output: '可读回答、可编辑表格、可复现 Notebook',
223
+ detail: '输出解释、引用和数据结果,并把结构化结果继续交给 Table、Notebook 或画布处理。',
224
+ input: '模型回答 + 工具返回值', output: '可读回答、可编辑表格、可复现 Notebook、可编辑画布',
209
225
  steps: [
210
226
  { label: '回答与引用', detail: '每一条结论都能指回 wiki 与 SourceRaw', state: 'done' },
211
- { label: '转交数据工具', detail: '结构化结果可继续在 Table / Notebook 里加工', state: 'done' },
227
+ { label: '转交数据工具', detail: '结构化结果可继续在 Table / Notebook / 画布里加工', state: 'done' },
212
228
  ],
213
- status: 'host', statusNote: '回答渲染与 Table / Notebook 由宿主工作区提供。',
229
+ status: 'host', statusNote: '回答渲染与 Table / Notebook / 画布由宿主工作区提供。',
214
230
  icon: BarChart3, lane: 'interaction',
215
231
  },
216
232
  'data-sheet': {
@@ -229,6 +245,14 @@ icon: Table2, lane: 'interaction',
229
245
  status: 'host', statusNote: '属于 `dsh-data-notebook` 插件,这里只画调用关系。',
230
246
  icon: FileCode2, lane: 'interaction',
231
247
  },
248
+ 'data-canvas': {
249
+ title: '画布', subtitle: '生成 / 编辑 Excalidraw 画布',
250
+ detail: '把结构化结果画成一张可继续手工编辑的画布:架构草图、流程、方案对比。它是「输出产物」里唯一能被人接着改的那一种。',
251
+ input: '结构化结果 / 画布指令', output: '可编辑的画布文件与导出图',
252
+ steps: [{ label: '打开画布面板', detail: '由宿主的 Excalidraw 插件承载', state: 'done' }],
253
+ status: 'host', statusNote: '属于 `dsh-data-excalidraw` 插件,这里只画调用关系。',
254
+ icon: PenTool, lane: 'interaction',
255
+ },
232
256
 
233
257
  'source-raw': {
234
258
  title: 'SourceRaw', subtitle: '原始可追溯文档',
@@ -391,11 +415,12 @@ export interface KnowledgeStats {
391
415
  cardsRemoved?: number
392
416
  notesReused?: number
393
417
  notesRecompiled?: number
394
- /** Pass 0 · 候选抽取 + 归一的诚实计数(0028)。 */
418
+ /** Pass 0 · 候选抽取 + 归一的诚实计数(0028 / v1.5)。 */
395
419
  candidatesExtracted?: number
396
420
  candidatesRejected?: number
397
- cardsCreated?: number
398
- cardsMerged?: number
421
+ /** v1.5:Pass 0 只提议,不落卡 —— 这两个计数数的是**提议**(原名 cardsCreated / cardsMerged)。 */
422
+ proposalsCreated?: number
423
+ proposalsMerged?: number
399
424
  relationsExtracted?: number
400
425
  relationsDropped?: number
401
426
  sourcesExtracted?: number
@@ -504,7 +529,7 @@ export function metricsByNode(stats: KnowledgeStats, version: number): Partial<R
504
529
 
505
530
  /** 节点在图上出现的顺序:按链路,再按链内阅读顺序。它就是键盘可达列表的顺序。 */
506
531
  export const NODE_ORDER: NodeId[] = [
507
- 'conversation', 'intent', 'runtime', 'answer', 'data-sheet', 'data-notebook',
532
+ 'conversation', 'intent', 'runtime', 'answer', 'data-sheet', 'data-notebook', 'data-canvas',
508
533
  'source-raw', 'compile', 'build', 'recall', 'context',
509
534
  'interaction', 'episodic-memory', 'procedural-memory', 'memory-quality', 'daily-update', 'funded-value',
510
535
  ]