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,501 @@
1
+ import { DEFAULT_ACTS, DEFAULT_INTENT_SETTINGS, } from './types.js';
2
+ import { envelopeSuccess } from 'dsh-data-contracts/envelope';
3
+ function id(prefix = 'intent') {
4
+ return `${prefix}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
5
+ }
6
+ function clamp01(value) {
7
+ if (typeof value !== 'number' || !Number.isFinite(value))
8
+ return undefined;
9
+ return Math.max(0, Math.min(1, value));
10
+ }
11
+ function slotsOf(value) {
12
+ if (!value || typeof value !== 'object' || Array.isArray(value))
13
+ return {};
14
+ return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== null && item !== undefined));
15
+ }
16
+ function refsOf(value) {
17
+ if (!Array.isArray(value))
18
+ return [];
19
+ return value.flatMap((ref) => {
20
+ if (typeof ref === 'string' && ref.trim())
21
+ return [{ id: ref.trim() }];
22
+ if (ref && typeof ref === 'object' && typeof ref.id === 'string') {
23
+ const item = ref;
24
+ return [{ id: item.id, ...(typeof item.kind === 'string' ? { kind: item.kind } : {}), ...(typeof item.label === 'string' ? { label: item.label } : {}) }];
25
+ }
26
+ return [];
27
+ });
28
+ }
29
+ function safeLineage(value) {
30
+ if (!value || typeof value !== 'object' || Array.isArray(value))
31
+ return {};
32
+ const record = value;
33
+ const result = {};
34
+ for (const key of ['sessionId', 'turnId', 'intentId', 'taskId', 'subtaskId', 'parentSubtaskId', 'runId', 'traceId', 'domain']) {
35
+ if (typeof record[key] === 'string' && record[key].trim())
36
+ result[key] = record[key].trim().slice(0, 160);
37
+ }
38
+ return result;
39
+ }
40
+ /**
41
+ * 规整 act 词表。
42
+ *
43
+ * 兼容两种形态:0023 之前的持久化配置是 `string[]`,现在是带 label 的对象数组。
44
+ * 老配置读回来只会缺 label / description,不会丢动作。
45
+ */
46
+ function actsOf(value) {
47
+ if (!Array.isArray(value))
48
+ return DEFAULT_ACTS.map(def => ({ ...def }));
49
+ return value.flatMap((item) => {
50
+ if (typeof item === 'string' && item.trim()) {
51
+ const id = item.trim();
52
+ return [{ id, label: id, description: '', enabled: true }];
53
+ }
54
+ if (!item || typeof item !== 'object')
55
+ return [];
56
+ const record = item;
57
+ const id = typeof record.id === 'string' ? record.id.trim() : '';
58
+ if (!id)
59
+ return [];
60
+ return [{
61
+ id,
62
+ label: typeof record.label === 'string' && record.label.trim() ? record.label.trim() : id,
63
+ description: typeof record.description === 'string' ? record.description : '',
64
+ enabled: record.enabled !== false,
65
+ }];
66
+ });
67
+ }
68
+ /**
69
+ * 谓词词表。
70
+ *
71
+ * 与 `categories` / `acts` 同一个理由:`predicates` 是 schema 里唯一一个「数组 +
72
+ * volatile」的标量字段,而 0.1.7 解析出来的 volatile 字段是引用、不是值 —— 一个
73
+ * 漏解包的引用在这里会变成 `predicates.join('、')` 抛
74
+ * `join is not a function`(0029 实测,抛出点在 preset 的挂载行上,整个 preset
75
+ * 组合不出会话)。所以这里也兜一层:不是字符串数组就退回出厂谓词,而不是让整个
76
+ * preset 挂掉 —— 与 `normalizeKnowledge` 的取舍一致(一个配置疏漏不该把插件打挂)。
77
+ */
78
+ function predicatesOf(value) {
79
+ if (!Array.isArray(value))
80
+ return DEFAULT_INTENT_SETTINGS.predicates;
81
+ const items = value.filter((item) => typeof item === 'string');
82
+ return items.length ? items : DEFAULT_INTENT_SETTINGS.predicates;
83
+ }
84
+ /** 标量字段的同类兜底:类型不对就退回默认值(引用对象、`undefined`、字符串都算不对)。 */
85
+ function numberOr(value, fallback) {
86
+ return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
87
+ }
88
+ function booleanOr(value, fallback) {
89
+ return typeof value === 'boolean' ? value : fallback;
90
+ }
91
+ function normalizeSettings(settings) {
92
+ return {
93
+ ...settings,
94
+ clarifyThreshold: numberOr(settings.clarifyThreshold, DEFAULT_INTENT_SETTINGS.clarifyThreshold),
95
+ ttlSeconds: numberOr(settings.ttlSeconds, DEFAULT_INTENT_SETTINGS.ttlSeconds),
96
+ fallbackEnabled: booleanOr(settings.fallbackEnabled, DEFAULT_INTENT_SETTINGS.fallbackEnabled),
97
+ categories: Array.isArray(settings.categories) ? settings.categories : DEFAULT_INTENT_SETTINGS.categories,
98
+ acts: actsOf(settings.acts),
99
+ predicates: predicatesOf(settings.predicates),
100
+ };
101
+ }
102
+ /**
103
+ * Bounded audit store: one record per session turn, expiring after the configured TTL.
104
+ *
105
+ * 0033 起它同时是**工作集**与**留痕的入口**,两者的分工要说清:
106
+ *
107
+ * - 内存里这份是有 TTL 的**工作集**(默认 600 秒):血缘判定只关心最近的轮次,
108
+ * 一个十轮之前就结束的会话不该让新的一轮接到它的 task 上。
109
+ * - 磁盘上那份(`intent/records.ndjson`)是**留痕**,只追加、不随 TTL 消失。
110
+ * `sink` 在每次 `save` 时被调用,`hydrate` 在启动时把留痕读回工作集 ——
111
+ * 重启之后同一个会话的血缘因此还在(在 TTL 窗口内)。
112
+ *
113
+ * 为什么不干脆让 `records()` 直接读文件:那会让 TTL 名存实亡(文件永远有),
114
+ * 于是「工作集」这个概念消失,血缘会接到很久以前的 task 上。两件事分开,
115
+ * 各自的契约才都成立。
116
+ */
117
+ export class IntentStore {
118
+ ttlSeconds;
119
+ now;
120
+ sessions = new Map();
121
+ /**
122
+ * 每条被保存的记录都会经过它(落盘留痕)。
123
+ *
124
+ * 同步签名、由调用方自己吞异常:`save` 在记录路径的关键路径上,而留痕失败
125
+ * 不该让这一轮的意图记录失败 —— 「记录不拦截请求」这条契约对留痕也成立。
126
+ */
127
+ sink;
128
+ constructor(ttlSeconds = DEFAULT_INTENT_SETTINGS.ttlSeconds, now = () => Date.now()) {
129
+ this.ttlSeconds = ttlSeconds;
130
+ this.now = now;
131
+ }
132
+ /** 装上一个留痕出口。多次调用以最后一次为准。 */
133
+ setSink(sink) {
134
+ this.sink = sink;
135
+ }
136
+ /**
137
+ * 把留痕读回工作集(启动时调用一次)。
138
+ *
139
+ * `touched` 用记录自己的 `updatedAt`,于是「重启」不会把 TTL 归零:一份十小时
140
+ * 前的记录在 TTL 600 秒下本来就该过期,重启不该让它复活。
141
+ */
142
+ hydrate(records) {
143
+ let loaded = 0;
144
+ for (const record of records) {
145
+ const item = this.sessions.get(record.sessionKey) ?? { records: [], touched: 0 };
146
+ const index = item.records.findIndex(existing => existing.turnKey === record.turnKey);
147
+ if (index >= 0)
148
+ item.records[index] = record;
149
+ else
150
+ item.records.push(record);
151
+ item.records = item.records.slice(-100);
152
+ const at = Date.parse(String(record.updatedAt ?? record.createdAt));
153
+ item.touched = Math.max(item.touched, Number.isFinite(at) ? at : this.now());
154
+ this.sessions.set(record.sessionKey, item);
155
+ loaded += 1;
156
+ }
157
+ return loaded;
158
+ }
159
+ setTtl(seconds) {
160
+ this.ttlSeconds = Math.max(1, Math.min(86400, Math.round(seconds)));
161
+ }
162
+ entry(sessionKey) {
163
+ const current = this.sessions.get(sessionKey);
164
+ if (!current || this.now() - current.touched > this.ttlSeconds * 1000) {
165
+ const fresh = { records: [], touched: this.now() };
166
+ this.sessions.set(sessionKey, fresh);
167
+ return fresh;
168
+ }
169
+ current.touched = this.now();
170
+ return current;
171
+ }
172
+ /** Upsert by turn key so repeated records within one turn stay a single fact. */
173
+ save(record) {
174
+ const item = this.entry(record.sessionKey);
175
+ const index = item.records.findIndex(existing => existing.turnKey === record.turnKey);
176
+ if (index >= 0)
177
+ item.records[index] = record;
178
+ else
179
+ item.records.push(record);
180
+ item.records = item.records.slice(-100);
181
+ try {
182
+ this.sink?.(record);
183
+ }
184
+ catch { /* 留痕失败不影响这一轮 */ }
185
+ return record;
186
+ }
187
+ records(sessionKey) {
188
+ return this.entry(sessionKey).records;
189
+ }
190
+ last(sessionKey) {
191
+ return this.entry(sessionKey).records.at(-1);
192
+ }
193
+ findByTurn(sessionKey, turnKey) {
194
+ return this.entry(sessionKey).records.find(record => record.turnKey === turnKey);
195
+ }
196
+ taskExists(sessionKey, taskId) {
197
+ return this.entry(sessionKey).records.some(record => record.lineage.taskId === taskId);
198
+ }
199
+ lastSubtaskOf(sessionKey, taskId) {
200
+ return this.entry(sessionKey).records.filter(record => record.lineage.taskId === taskId).at(-1)?.lineage.subtaskId;
201
+ }
202
+ expiresAt(sessionKey) {
203
+ const item = this.entry(sessionKey);
204
+ return item.records.length > 0 ? new Date(item.touched + this.ttlSeconds * 1000).toISOString() : undefined;
205
+ }
206
+ clear(sessionKey) {
207
+ this.sessions.delete(sessionKey);
208
+ }
209
+ /** When the session was last touched (ms since epoch); 0 when unknown. */
210
+ touchedAt(sessionKey) {
211
+ return this.sessions.get(sessionKey)?.touched ?? 0;
212
+ }
213
+ /** Live session keys, most recently touched first. Expired sessions are skipped. */
214
+ sessionKeys() {
215
+ const now = this.now();
216
+ const live = [];
217
+ for (const [key, item] of this.sessions) {
218
+ if (now - item.touched > this.ttlSeconds * 1000)
219
+ continue;
220
+ live.push({ key, touched: item.touched });
221
+ }
222
+ return live.sort((left, right) => right.touched - left.touched).map(item => item.key);
223
+ }
224
+ }
225
+ /**
226
+ * Intent recorder. Every entry point is total: an unrecognized act, an unknown
227
+ * task reference, or a missing classification degrade into warnings on a stored
228
+ * record. Nothing here blocks, confirms, or rewrites the user's request.
229
+ */
230
+ export class IntentEngine {
231
+ store;
232
+ settings;
233
+ turns = new Map();
234
+ constructor(settings = {}, store) {
235
+ this.settings = normalizeSettings({ ...DEFAULT_INTENT_SETTINGS, ...settings });
236
+ this.store = store ?? new IntentStore(this.settings.ttlSeconds);
237
+ }
238
+ setSettings(settings) {
239
+ this.settings = normalizeSettings({ ...this.settings, ...settings });
240
+ this.store.setTtl(this.settings.ttlSeconds);
241
+ }
242
+ getSettings() {
243
+ return this.settings;
244
+ }
245
+ /**
246
+ * Open a turn and allocate its provisional ids before the model records.
247
+ * Downstream calls dispatched in parallel with the record can already carry
248
+ * an id; the record later commits the authoritative task binding.
249
+ */
250
+ beginTurn(sessionKey, turn, userInput) {
251
+ const state = {
252
+ turn,
253
+ userInput: userInput.slice(0, 2000),
254
+ subtaskId: id('subtask'),
255
+ taskId: this.store.last(sessionKey)?.lineage.taskId,
256
+ committed: false,
257
+ };
258
+ this.turns.set(sessionKey, state);
259
+ return state;
260
+ }
261
+ /** Backfill one `unknown` record when a turn ends without a model record. */
262
+ fallbackWhenMissing(sessionKey, turn) {
263
+ if (!this.settings.fallbackEnabled)
264
+ return undefined;
265
+ const state = this.turns.get(sessionKey);
266
+ if (!state || state.turn !== turn || state.committed)
267
+ return undefined;
268
+ const result = this.record({
269
+ userInput: state.userInput,
270
+ act: 'unknown',
271
+ category: 'unknown',
272
+ relation: 'unknown',
273
+ sessionKey,
274
+ }, 'fallback');
275
+ if (result.ok) {
276
+ state.committed = true;
277
+ this.turns.delete(sessionKey);
278
+ }
279
+ return result;
280
+ }
281
+ /** Record the model's intent judgement. Always stores a record. */
282
+ record(input, source = 'model') {
283
+ const sessionKey = input.sessionKey?.trim() || 'default';
284
+ const timestamp = new Date(input.now ?? Date.now()).toISOString();
285
+ const warnings = [];
286
+ const state = this.turns.get(sessionKey);
287
+ const turnKey = state ? `${sessionKey}#${state.turn}` : `${sessionKey}#${input.turnId?.trim() || 'manual'}`;
288
+ const existing = this.store.findByTurn(sessionKey, turnKey);
289
+ const lineageInput = safeLineage(input.lineage);
290
+ const act = input.act?.trim() || 'unknown';
291
+ const category = input.category?.trim() || undefined;
292
+ const confidence = clamp01(input.confidence);
293
+ if (!input.userInput?.trim())
294
+ warnings.push('user_input 为空,仅记录了一条空意图');
295
+ if (act !== 'unknown' && !this.settings.acts.some(item => item.id === act && item.enabled))
296
+ warnings.push(`act "${act}" 不在已启用的 act 列表中,已按原样记录`);
297
+ if (category && !this.settings.categories.some(item => item.id === category && item.enabled))
298
+ warnings.push(`category "${category}" 不是已启用的分类,已按原样记录`);
299
+ const lowConfidence = confidence !== undefined && confidence < this.settings.clarifyThreshold;
300
+ if (lowConfidence)
301
+ warnings.push(`confidence ${confidence.toFixed(2)} 低于阈值 ${this.settings.clarifyThreshold.toFixed(2)},已标记 lowConfidence`);
302
+ const requestedTaskId = lineageInput.taskId;
303
+ let relation = input.relation ?? (requestedTaskId ? 'subtask_of' : 'new_task');
304
+ let taskId;
305
+ let parentSubtaskId;
306
+ if (relation === 'subtask_of') {
307
+ if (requestedTaskId && this.store.taskExists(sessionKey, requestedTaskId)) {
308
+ taskId = requestedTaskId;
309
+ parentSubtaskId = this.store.lastSubtaskOf(sessionKey, requestedTaskId);
310
+ }
311
+ else {
312
+ warnings.push(requestedTaskId
313
+ ? `task_id "${requestedTaskId}" 在本会话不存在,本轮已按 new_task 记录`
314
+ : 'relation=subtask_of 缺少 task_id,本轮已按 new_task 记录');
315
+ relation = 'new_task';
316
+ }
317
+ }
318
+ if (!taskId) {
319
+ taskId = relation === 'new_task'
320
+ ? id('task')
321
+ : existing?.lineage.taskId ?? state?.taskId ?? id('task');
322
+ }
323
+ const subtaskId = existing?.lineage.subtaskId ?? state?.subtaskId ?? id('subtask');
324
+ const runId = lineageInput.runId ?? existing?.lineage.runId ?? id('run');
325
+ const intentId = existing?.id ?? id('intent');
326
+ const turnId = input.turnId?.trim() || existing?.turnId || (state ? `turn-${state.turn}` : id('turn'));
327
+ const record = {
328
+ id: intentId,
329
+ sessionKey,
330
+ turnKey,
331
+ turnId,
332
+ userInput: input.userInput ?? '',
333
+ act,
334
+ ...(category ? { category } : {}),
335
+ ...(input.predicate?.trim() ? { predicate: input.predicate.trim() } : {}),
336
+ slots: slotsOf(input.slots),
337
+ ...(confidence !== undefined ? { confidence } : {}),
338
+ ...(lowConfidence ? { lowConfidence: true } : {}),
339
+ refs: refsOf(input.refs),
340
+ relation,
341
+ source,
342
+ createdAt: existing?.createdAt ?? timestamp,
343
+ updatedAt: timestamp,
344
+ lineage: {
345
+ ...lineageInput,
346
+ sessionId: lineageInput.sessionId ?? sessionKey,
347
+ turnId,
348
+ intentId,
349
+ taskId,
350
+ subtaskId,
351
+ ...(parentSubtaskId ? { parentSubtaskId } : {}),
352
+ runId,
353
+ },
354
+ meta: {},
355
+ };
356
+ this.store.save(record);
357
+ if (state) {
358
+ state.committed = true;
359
+ state.taskId = taskId;
360
+ state.subtaskId = subtaskId;
361
+ }
362
+ // Built through the shared constructor. This literal used to omit
363
+ // `error: null`, which made an intent result the one envelope in the repo
364
+ // that did not satisfy spec/contracts/envelope.json.
365
+ return envelopeSuccess({
366
+ intentId,
367
+ taskId,
368
+ subtaskId,
369
+ ...(parentSubtaskId ? { parentSubtaskId } : {}),
370
+ runId,
371
+ turnId,
372
+ act,
373
+ ...(category ? { category } : {}),
374
+ relation,
375
+ source,
376
+ lowConfidence,
377
+ activeTasks: this.tasks(sessionKey),
378
+ }, warnings);
379
+ }
380
+ /** Ids a downstream tool call in this session should carry. */
381
+ activeLineage(sessionKey) {
382
+ const last = this.store.last(sessionKey);
383
+ if (last)
384
+ return { lineage: { ...last.lineage }, committed: this.turns.get(sessionKey)?.committed ?? true };
385
+ const state = this.turns.get(sessionKey);
386
+ if (!state)
387
+ return undefined;
388
+ return { lineage: { sessionId: sessionKey, ...(state.taskId ? { taskId: state.taskId } : {}), subtaskId: state.subtaskId }, committed: false };
389
+ }
390
+ tasks(sessionKey) {
391
+ const now = Date.now();
392
+ const seen = new Map();
393
+ for (const record of this.store.records(sessionKey)) {
394
+ const taskId = record.lineage.taskId;
395
+ if (!taskId)
396
+ continue;
397
+ seen.set(taskId, {
398
+ taskId,
399
+ ...(record.lineage.subtaskId ? { lastSubtaskId: record.lineage.subtaskId } : {}),
400
+ ...(record.category ? { category: record.category } : {}),
401
+ ageSeconds: Math.max(0, Math.round((now - Date.parse(record.updatedAt)) / 1000)),
402
+ });
403
+ }
404
+ return [...seen.values()].slice(-3).reverse();
405
+ }
406
+ view(sessionKey = 'default', includePrompt = false) {
407
+ const last = this.store.last(sessionKey);
408
+ const view = {
409
+ sessionKey,
410
+ ...(last?.lineage.taskId ? { activeTaskId: last.lineage.taskId } : {}),
411
+ ...(last ? { activeIntentId: last.id } : {}),
412
+ tasks: this.tasks(sessionKey),
413
+ recent: this.store.records(sessionKey).slice(-10).reverse(),
414
+ ...(this.store.expiresAt(sessionKey) ? { expiresAt: this.store.expiresAt(sessionKey) } : {}),
415
+ };
416
+ return envelopeSuccess({ store: view, ...(includePrompt ? { prompt: this.routingPrompt() } : {}) });
417
+ }
418
+ /**
419
+ * Session-level index for the 意图 panel: every live session with its last
420
+ * classification and active task ids. Records themselves stay per-session.
421
+ */
422
+ overview() {
423
+ const sessions = this.store.sessionKeys().map(sessionKey => {
424
+ const last = this.store.last(sessionKey);
425
+ return {
426
+ sessionKey,
427
+ recordCount: this.store.records(sessionKey).length,
428
+ lastAt: new Date(this.store.touchedAt(sessionKey)).toISOString(),
429
+ tasks: this.tasks(sessionKey),
430
+ ...(last ? { activeIntentId: last.id } : {}),
431
+ ...(last?.act ? { lastAct: last.act } : {}),
432
+ ...(last?.category ? { lastCategory: last.category } : {}),
433
+ ...(last?.relation ? { lastRelation: last.relation } : {}),
434
+ ...(last?.lineage.taskId ? { activeTaskId: last.lineage.taskId } : {}),
435
+ ...(last && last.confidence !== undefined ? { lastConfidence: last.confidence } : {}),
436
+ };
437
+ });
438
+ return { sessions };
439
+ }
440
+ registry() {
441
+ return {
442
+ acts: this.settings.acts.map(def => ({ ...def })),
443
+ categories: this.settings.categories.map(category => ({
444
+ id: category.id,
445
+ label: category.label,
446
+ route: category.route,
447
+ description: category.description ?? '',
448
+ examples: [...(category.examples ?? [])],
449
+ enabled: category.enabled,
450
+ })),
451
+ predicates: [...this.settings.predicates],
452
+ };
453
+ }
454
+ /**
455
+ * Model-facing contract: record first, then continue; the record never gates the request.
456
+ *
457
+ * 这段文本就是 `intent_record` 的**工具描述**(0023 起不再单独注入 system prompt 段),
458
+ * 所以它**没有开关**:分类规则必须始终随工具在场。宿主在设置变更时重新注册工具,
459
+ * 因此改完分类下一轮就是新文本。
460
+ *
461
+ * 分类判定是**两段式**的(issue 0023):
462
+ * 1. 先拿用户意思去比对预置分类的 `description` / `examples`,命中就**直接用该 id**;
463
+ * 2. 全不命中才允许自行判断(新起一个 id 或落 `unknown`)。
464
+ *
465
+ * 这样预置项就是"先验",而不是一份仅供参考的清单——模型不必每轮从零分类。
466
+ */
467
+ routingPrompt() {
468
+ const enabled = this.settings.categories.filter(category => category.enabled);
469
+ const disabledCount = this.settings.categories.length - enabled.length;
470
+ const routes = enabled
471
+ .map(category => {
472
+ const head = `- ${category.id}(${category.label})→ ${category.route}${category.description ? `:${category.description}` : ''}`;
473
+ const examples = (category.examples ?? []).filter(Boolean);
474
+ return examples.length > 0 ? `${head}\n 例如:${examples.join(' / ')}` : head;
475
+ })
476
+ .join('\n');
477
+ const acts = this.settings.acts.filter(def => def.enabled)
478
+ .map(def => `- ${def.id}${def.label && def.label !== def.id ? `(${def.label})` : ''}${def.description ? `:${def.description}` : ''}`)
479
+ .join('\n');
480
+ return [
481
+ '记录本轮用户意图:先判断,再调用 intent_record 落一条审计记录,然后继续完成请求——记录不改变、不阻塞、也不需要用户确认。',
482
+ '当前轮是新的任务用 relation=new_task;如果是在延续某个已有任务(追问、补充、纠正),用 relation=subtask_of 并带上该任务的 task_id;无法判断时省略 relation。',
483
+ '',
484
+ '分类判定分两步,必须先匹配预置、再自行判断:',
485
+ '1) 先把用户的意思和下面的「预置分类」逐条比对——看定义,也看"例如"里的说法。命中就直接用该分类的 id,不要另起一个近义的新 id,也不要因为措辞不同就换一个分类。',
486
+ '2) 所有预置分类都不命中时,才自行判断:可以按语义新起一个短语作为分类 id,或落 unknown。新起的 id 用英文小写下划线,并在 slots 里带上关键参数。',
487
+ '',
488
+ '预置分类(category 参数传 id):',
489
+ routes,
490
+ ...(disabledCount > 0 ? [`(另有 ${disabledCount} 个分类已停用,不要使用。)`] : []),
491
+ '',
492
+ 'act 回答"这一轮用户在做什么",挑最贴近的一个:',
493
+ acts,
494
+ `可用 predicate:${this.settings.predicates.join('、')}`,
495
+ ].join('\n');
496
+ }
497
+ }
498
+ export function createIntentEngine(settings) {
499
+ return new IntentEngine(settings);
500
+ }
501
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/intent/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { LineageContext } from 'dsh-data-contracts/refs';
3
+ import { type IntentSettings } from './types.js';
4
+ import type { IntentToolHost } from './tools.js';
5
+ export * from './types.js';
6
+ export * from './engine.js';
7
+ export * from './tools.js';
8
+ export declare const SETTINGS_NAMESPACE = "tita-data-agent-intent";
9
+ /** Read-only HTTP surface the 意图 panel reads: `/intent/overview`, `/intent/store`, `/intent/registry`. */
10
+ export declare const INTENT_MOUNT_PATH = "/intent";
11
+ /** Cordis service name consumers read to inherit the session's active task ids. */
12
+ export declare const INTENT_SERVICE = "titaDataAgentIntent";
13
+ /**
14
+ * 意图引擎的对外操作面。
15
+ *
16
+ * 两类消费者,一个服务:
17
+ * - `activeLineage` —— 其它插件(`data-table`)读本轮活动血缘。
18
+ * - 其余成员 —— agent 平面的挂载行(`./preset-tools.ts`)按它注册 `intent_*` 工具。
19
+ *
20
+ * 0029 之前这三个工具由本模块直接全局注册;现在注册搬到了 agent 平面,这里只留
21
+ * 「引擎能做什么」。引擎只有一份,工具定义也只有一份(`./tools.ts`)。
22
+ */
23
+ export interface IntentService extends IntentToolHost {
24
+ /**
25
+ * Ids a downstream tool call in `sessionKey` should carry. `committed` is
26
+ * false while the current turn has not recorded yet, so callers can tell a
27
+ * provisional subtask id from an authoritative record.
28
+ * @param sessionKey - session whose lineage is requested.
29
+ * @returns lineage plus whether a record already committed it, or undefined when nothing is known.
30
+ */
31
+ activeLineage(sessionKey: string): {
32
+ lineage: Partial<LineageContext>;
33
+ committed: boolean;
34
+ } | undefined;
35
+ }
36
+ /** @deprecated 0029:改用 `IntentService`。保留别名只为不动既有 import。 */
37
+ export type IntentLineageService = IntentService;
38
+ export { ACT_SCHEMA, CATEGORY_SCHEMA, INTENT_SETTINGS_SCHEMA } from './settings-schema.js';
39
+ /**
40
+ * 意图记录模块(原 `@tita-data-agent/data-domain-intent`,0020 并入本插件)。
41
+ *
42
+ * 它是 `KnowledgePanel` 五个视图之一「意图」的宿主实现。0029 起它**只负责引擎**:
43
+ * 设置、轮次记账、`/intent/**` 只读面,以及通过 `INTENT_SERVICE` 暴露操作面。
44
+ *
45
+ * 三个 `intent_*` 工具**不再在这里注册** —— 它们搬到了 agent 平面的
46
+ * `./preset-tools.ts`,只被自定义 preset 的 `agent.cordis.yml` 挂载,于是只有跑
47
+ * TitaAgent 那套组合的会话才看得到它们。理由见那个文件的模块注释。
48
+ *
49
+ * 本模块由 `src/index.ts` 组合根调用,不自己导出 `name` / `inject`。
50
+ * @module dsh-data-domain-knowledge/intent
51
+ */
52
+ /**
53
+ * 组合根交给意图模块的东西。
54
+ *
55
+ * `intentRoot` 是**函数**而不是字符串:根路径由设置决定,可以在运行时改,而
56
+ * 模块加载时还不知道。每次读写都重新问一次,于是「改了根路径」立刻生效,
57
+ * 不存在「配置说 A、实际写 B」。
58
+ */
59
+ export interface IntentHostDeps {
60
+ /** `<agentRoot>/intent`。省略时退回内存态(只测引擎的单元测试用这个形态)。 */
61
+ intentRoot?: () => string;
62
+ /**
63
+ * 已解析的 `intent` 设置组(来自插件 entry 的 config)。
64
+ *
65
+ * 0.1.7 起设置不再是命名空间 —— 它随 `apply(ctx, config)` 进来。省略时用
66
+ * `DEFAULT_INTENT_SETTINGS`,这样只测引擎的装配方式仍然能跑。
67
+ *
68
+ * 允许给**函数**:设置字段全是 volatile,schema 解析出来是引用,而「解包成普通值」
69
+ * 是一次快照 —— 快照会漏掉「用户在设置页改了值」(loader 只就地改引用、不重载插件)。
70
+ * 给函数则每次读都重新解包,`reprocess()` 才真的拿得到新值。
71
+ */
72
+ config?: Partial<IntentSettings> | (() => Partial<IntentSettings>);
73
+ }
74
+ /**
75
+ * `applyIntent` 交给组合根的那一个把手。
76
+ *
77
+ * volatile 改动不会重载插件(`Entry._commitVolatile()` 只就地改引用再发一个
78
+ * `loader/volatile-update`),所以「设置存下了但没生效」只能由插件自己兜住 ——
79
+ * 见 `settings-volatile.ts` 末尾那段。重灌设置之后还要 `notify()`:agent 平面的行
80
+ * 挂在那个订阅上,而 `intent_record` 的**工具描述就是路由提示词**,词表一变描述就
81
+ * 必须变。
82
+ */
83
+ export interface IntentHost {
84
+ /** 按**当前**的 entry config 重灌一次引擎设置,并通知订阅者。 */
85
+ reprocess(): void;
86
+ }
87
+ export declare function applyIntent(ctx: Context, deps?: IntentHostDeps): IntentHost;
88
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/intent/host.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAMlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAoG,KAAK,cAAc,EAAE,MAAM,YAAY,CAAA;AAGlJ,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAGhD,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAE1B,eAAO,MAAM,kBAAkB,2BAA2B,CAAA;AAC1D,0GAA0G;AAC1G,eAAO,MAAM,iBAAiB,YAAY,CAAA;AAC1C,mFAAmF;AACnF,eAAO,MAAM,cAAc,wBAAwB,CAAA;AAEnD;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD;;;;;;OAMG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAA;CACxG;AAED,6DAA6D;AAC7D,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAA;AAMhD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAa1F;;;;;;;;;;;;GAYG;AACH;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,MAAM,CAAA;IACzB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC,CAAA;CACnE;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,6CAA6C;IAC7C,SAAS,IAAI,IAAI,CAAA;CAClB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE,cAAmB,GAAG,UAAU,CA0V/E"}