dsh-data-domain-knowledge 0.1.1-alpha.2 → 0.1.1-alpha.4

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 (252) hide show
  1. package/README.md +33 -16
  2. package/lib/client.js +1042 -2097
  3. package/lib/contract-refs.d.ts +0 -1
  4. package/lib/doc-page.js +1 -1
  5. package/lib/pages.js +2489 -1060
  6. package/lib/types/agent-behavior-rules.d.ts.map +1 -1
  7. package/lib/types/agent-behavior-rules.js +3 -2
  8. package/lib/types/agent-behavior-rules.js.map +1 -1
  9. package/lib/types/axis-contract.js +1 -1
  10. package/lib/types/axis-contract.js.map +1 -1
  11. package/lib/types/card-organize.d.ts +2 -1
  12. package/lib/types/card-organize.d.ts.map +1 -1
  13. package/lib/types/card-organize.js +5 -3
  14. package/lib/types/card-organize.js.map +1 -1
  15. package/lib/types/config-schema.d.ts +1 -1
  16. package/lib/types/config-schema.js +1 -1
  17. package/lib/types/convert/host.d.ts +2 -3
  18. package/lib/types/convert/host.d.ts.map +1 -1
  19. package/lib/types/convert/host.js +11 -2
  20. package/lib/types/convert/host.js.map +1 -1
  21. package/lib/types/convert/ingest.d.ts +14 -20
  22. package/lib/types/convert/ingest.d.ts.map +1 -1
  23. package/lib/types/convert/ingest.js +8 -5
  24. package/lib/types/convert/ingest.js.map +1 -1
  25. package/lib/types/diagnosis/store.d.ts +2 -2
  26. package/lib/types/diagnosis/store.d.ts.map +1 -1
  27. package/lib/types/diagnosis/store.js +10 -2
  28. package/lib/types/diagnosis/store.js.map +1 -1
  29. package/lib/types/diagnosis/types.d.ts +1 -1
  30. package/lib/types/diagnosis/types.js +1 -1
  31. package/lib/types/extract-model.d.ts +3 -0
  32. package/lib/types/extract-model.d.ts.map +1 -1
  33. package/lib/types/extract-model.js.map +1 -1
  34. package/lib/types/images.js +1 -1
  35. package/lib/types/index.d.ts +0 -4
  36. package/lib/types/index.d.ts.map +1 -1
  37. package/lib/types/index.js +99 -91
  38. package/lib/types/index.js.map +1 -1
  39. package/lib/types/knowledge-bases.d.ts +3 -0
  40. package/lib/types/knowledge-bases.d.ts.map +1 -1
  41. package/lib/types/knowledge-bases.js +22 -2
  42. package/lib/types/knowledge-bases.js.map +1 -1
  43. package/lib/types/knowledge-contract.d.ts +6 -0
  44. package/lib/types/knowledge-contract.d.ts.map +1 -1
  45. package/lib/types/knowledge-contract.js +6 -2
  46. package/lib/types/knowledge-contract.js.map +1 -1
  47. package/lib/types/layout.d.ts +9 -26
  48. package/lib/types/layout.d.ts.map +1 -1
  49. package/lib/types/layout.js +10 -28
  50. package/lib/types/layout.js.map +1 -1
  51. package/lib/types/materialize-snapshot.d.ts +5 -0
  52. package/lib/types/materialize-snapshot.d.ts.map +1 -1
  53. package/lib/types/migrate.d.ts +3 -1
  54. package/lib/types/migrate.d.ts.map +1 -1
  55. package/lib/types/migrate.js +3 -1
  56. package/lib/types/migrate.js.map +1 -1
  57. package/lib/types/model-text.d.ts +7 -0
  58. package/lib/types/model-text.d.ts.map +1 -1
  59. package/lib/types/model-text.js +31 -9
  60. package/lib/types/model-text.js.map +1 -1
  61. package/lib/types/organize-contract.d.ts.map +1 -1
  62. package/lib/types/organize-contract.js +2 -1
  63. package/lib/types/organize-contract.js.map +1 -1
  64. package/lib/types/pipeline/engine.d.ts +28 -4
  65. package/lib/types/pipeline/engine.d.ts.map +1 -1
  66. package/lib/types/pipeline/engine.js +68 -15
  67. package/lib/types/pipeline/engine.js.map +1 -1
  68. package/lib/types/pipeline/progress.d.ts +12 -0
  69. package/lib/types/pipeline/progress.d.ts.map +1 -0
  70. package/lib/types/pipeline/progress.js +37 -0
  71. package/lib/types/pipeline/progress.js.map +1 -0
  72. package/lib/types/pipeline/resumable-extract.d.ts +45 -0
  73. package/lib/types/pipeline/resumable-extract.d.ts.map +1 -0
  74. package/lib/types/pipeline/resumable-extract.js +262 -0
  75. package/lib/types/pipeline/resumable-extract.js.map +1 -0
  76. package/lib/types/pipeline/store.d.ts +8 -2
  77. package/lib/types/pipeline/store.d.ts.map +1 -1
  78. package/lib/types/pipeline/store.js +27 -5
  79. package/lib/types/pipeline/store.js.map +1 -1
  80. package/lib/types/pipeline/types.d.ts +56 -0
  81. package/lib/types/pipeline/types.d.ts.map +1 -1
  82. package/lib/types/pipeline/types.js +18 -1
  83. package/lib/types/pipeline/types.js.map +1 -1
  84. package/lib/types/present.d.ts +1 -1
  85. package/lib/types/present.js +1 -1
  86. package/lib/types/preset-ids.d.ts +0 -1
  87. package/lib/types/preset-ids.d.ts.map +1 -1
  88. package/lib/types/preset-ids.js +0 -3
  89. package/lib/types/preset-ids.js.map +1 -1
  90. package/lib/types/query-analysis.d.ts +0 -5
  91. package/lib/types/query-analysis.d.ts.map +1 -1
  92. package/lib/types/query-analysis.js +0 -16
  93. package/lib/types/query-analysis.js.map +1 -1
  94. package/lib/types/recall-delivery.d.ts +36 -0
  95. package/lib/types/recall-delivery.d.ts.map +1 -0
  96. package/lib/types/recall-delivery.js +16 -0
  97. package/lib/types/recall-delivery.js.map +1 -0
  98. package/lib/types/retrieval/scope.d.ts +17 -0
  99. package/lib/types/retrieval/scope.d.ts.map +1 -0
  100. package/lib/types/retrieval/scope.js +11 -0
  101. package/lib/types/retrieval/scope.js.map +1 -0
  102. package/lib/types/runtime.d.ts +75 -14
  103. package/lib/types/runtime.d.ts.map +1 -1
  104. package/lib/types/runtime.js +454 -198
  105. package/lib/types/runtime.js.map +1 -1
  106. package/lib/types/settings-volatile.d.ts +0 -7
  107. package/lib/types/settings-volatile.d.ts.map +1 -1
  108. package/lib/types/settings-volatile.js +0 -7
  109. package/lib/types/settings-volatile.js.map +1 -1
  110. package/lib/types/source-identity.d.ts +34 -0
  111. package/lib/types/source-identity.d.ts.map +1 -0
  112. package/lib/types/source-identity.js +85 -0
  113. package/lib/types/source-identity.js.map +1 -0
  114. package/lib/types/source-read.d.ts +18 -0
  115. package/lib/types/source-read.d.ts.map +1 -0
  116. package/lib/types/source-read.js +49 -0
  117. package/lib/types/source-read.js.map +1 -0
  118. package/lib/types/store/axis-references.d.ts.map +1 -1
  119. package/lib/types/store/axis-references.js +5 -3
  120. package/lib/types/store/axis-references.js.map +1 -1
  121. package/lib/types/store/knowledge-db.d.ts +5 -29
  122. package/lib/types/store/knowledge-db.d.ts.map +1 -1
  123. package/lib/types/store/knowledge-db.js +57 -2
  124. package/lib/types/store/knowledge-db.js.map +1 -1
  125. package/lib/types/store/source-identity.d.ts +8 -0
  126. package/lib/types/store/source-identity.d.ts.map +1 -0
  127. package/lib/types/store/source-identity.js +56 -0
  128. package/lib/types/store/source-identity.js.map +1 -0
  129. package/lib/types/types.d.ts +46 -5
  130. package/lib/types/types.d.ts.map +1 -1
  131. package/lib/types/types.js +6 -3
  132. package/lib/types/types.js.map +1 -1
  133. package/lib/types/wiki-availability.d.ts +11 -0
  134. package/lib/types/wiki-availability.d.ts.map +1 -0
  135. package/lib/types/wiki-availability.js +39 -0
  136. package/lib/types/wiki-availability.js.map +1 -0
  137. package/lib/types/wiki-finalize.d.ts +4 -2
  138. package/lib/types/wiki-finalize.d.ts.map +1 -1
  139. package/lib/types/wiki-finalize.js +9 -27
  140. package/lib/types/wiki-finalize.js.map +1 -1
  141. package/lib/types/wiki-links.d.ts +35 -0
  142. package/lib/types/wiki-links.d.ts.map +1 -0
  143. package/lib/types/wiki-links.js +129 -0
  144. package/lib/types/wiki-links.js.map +1 -0
  145. package/lib/types/wiki-trial-types.d.ts +3 -0
  146. package/lib/types/wiki-trial-types.d.ts.map +1 -1
  147. package/lib/types/wiki-trial.d.ts +3 -3
  148. package/lib/types/wiki-trial.d.ts.map +1 -1
  149. package/lib/types/wiki-trial.js +14 -3
  150. package/lib/types/wiki-trial.js.map +1 -1
  151. package/package.json +16 -16
  152. package/scripts/doctor.mjs +0 -7
  153. package/scripts/setup-embedding.sh +0 -0
  154. package/src/agent-behavior-rules.ts +3 -2
  155. package/src/axis-contract.ts +1 -1
  156. package/src/card-organize.ts +5 -3
  157. package/src/client/AttributionEventGuide.tsx +3 -3
  158. package/src/client/AxisMatrix.tsx +86 -19
  159. package/src/client/AxisRegistrySection.tsx +1 -1
  160. package/src/client/CompileSettingsView.tsx +473 -0
  161. package/src/client/DirectoryPicker.tsx +0 -2
  162. package/src/client/ExtractionTasksPage.tsx +557 -423
  163. package/src/client/GuideArchitectureCanvas.tsx +5 -12
  164. package/src/client/ImportFilesDialog.tsx +1 -0
  165. package/src/client/InfoHint.tsx +1 -1
  166. package/src/client/KnowledgeBaseTab.tsx +141 -148
  167. package/src/client/KnowledgePanel.tsx +16 -9
  168. package/src/client/OperationLogTab.tsx +1 -1
  169. package/src/client/PipelineRunView.tsx +173 -0
  170. package/src/client/RecallPanel.tsx +5 -16
  171. package/src/client/TabGuide.tsx +3 -7
  172. package/src/client/WikiFlowPanel.tsx +10 -11
  173. package/src/client/arch/NodeLogicPanel.tsx +3 -3
  174. package/src/client/arch/model.ts +5 -113
  175. package/src/client/architecture.css +1 -1
  176. package/src/client/architecture.tsx +13 -27
  177. package/src/client/attribution/AttributionTab.tsx +141 -10
  178. package/src/client/pages.css +305 -180
  179. package/src/client/pages.tsx +7 -12
  180. package/src/client/styles.css +15 -96
  181. package/src/config-schema.ts +1 -1
  182. package/src/convert/host.ts +13 -5
  183. package/src/convert/ingest.ts +20 -7
  184. package/src/diagnosis/store.ts +7 -2
  185. package/src/diagnosis/types.ts +1 -1
  186. package/src/extract-model.ts +3 -0
  187. package/src/images.ts +1 -1
  188. package/src/index.ts +92 -97
  189. package/src/knowledge-bases.ts +23 -3
  190. package/src/knowledge-contract.ts +7 -2
  191. package/src/layout.ts +10 -32
  192. package/src/materialize-snapshot.ts +1 -0
  193. package/src/migrate.ts +3 -1
  194. package/src/model-text.ts +33 -11
  195. package/src/organize-contract.ts +2 -1
  196. package/src/pipeline/engine.ts +85 -22
  197. package/src/pipeline/progress.ts +40 -0
  198. package/src/pipeline/resumable-extract.ts +233 -0
  199. package/src/pipeline/store.ts +28 -6
  200. package/src/pipeline/types.ts +47 -2
  201. package/src/present.ts +1 -1
  202. package/src/preset-ids.ts +0 -4
  203. package/src/query-analysis.ts +0 -20
  204. package/src/recall-delivery.ts +19 -0
  205. package/src/retrieval/scope.ts +10 -0
  206. package/src/runtime.ts +412 -206
  207. package/src/settings-volatile.ts +0 -7
  208. package/src/source-identity.ts +85 -0
  209. package/src/source-read.ts +47 -0
  210. package/src/store/axis-references.ts +5 -3
  211. package/src/store/knowledge-db.ts +54 -2
  212. package/src/store/source-identity.ts +42 -0
  213. package/src/types.ts +18 -5
  214. package/src/wiki-availability.ts +37 -0
  215. package/src/wiki-finalize.ts +9 -25
  216. package/src/wiki-links.ts +120 -0
  217. package/src/wiki-trial-types.ts +3 -2
  218. package/src/wiki-trial.ts +17 -6
  219. package/lib/types/intent/engine.d.ts +0 -122
  220. package/lib/types/intent/engine.d.ts.map +0 -1
  221. package/lib/types/intent/engine.js +0 -488
  222. package/lib/types/intent/engine.js.map +0 -1
  223. package/lib/types/intent/host.d.ts +0 -68
  224. package/lib/types/intent/host.d.ts.map +0 -1
  225. package/lib/types/intent/host.js +0 -249
  226. package/lib/types/intent/host.js.map +0 -1
  227. package/lib/types/intent/scope.d.ts +0 -25
  228. package/lib/types/intent/scope.d.ts.map +0 -1
  229. package/lib/types/intent/scope.js +0 -116
  230. package/lib/types/intent/scope.js.map +0 -1
  231. package/lib/types/intent/store.d.ts +0 -33
  232. package/lib/types/intent/store.d.ts.map +0 -1
  233. package/lib/types/intent/store.js +0 -239
  234. package/lib/types/intent/store.js.map +0 -1
  235. package/lib/types/intent/tools.d.ts +0 -62
  236. package/lib/types/intent/tools.d.ts.map +0 -1
  237. package/lib/types/intent/tools.js +0 -130
  238. package/lib/types/intent/tools.js.map +0 -1
  239. package/lib/types/intent/types.d.ts +0 -170
  240. package/lib/types/intent/types.d.ts.map +0 -1
  241. package/lib/types/intent/types.js +0 -56
  242. package/lib/types/intent/types.js.map +0 -1
  243. package/src/client/IntentLogic.tsx +0 -192
  244. package/src/client/IntentTab.tsx +0 -343
  245. package/src/client/TypeDefinitionDrawer.tsx +0 -195
  246. package/src/intent/README.md +0 -42
  247. package/src/intent/engine.ts +0 -515
  248. package/src/intent/host.ts +0 -315
  249. package/src/intent/scope.ts +0 -125
  250. package/src/intent/store.ts +0 -218
  251. package/src/intent/tools.ts +0 -154
  252. package/src/intent/types.ts +0 -229
@@ -1,239 +0,0 @@
1
- /**
2
- * 意图审计的持久化层。
3
- *
4
- * 意图是 agent / session 级数据,不属于某一个知识库,所以它放在:
5
- *
6
- * <agentRoot>/intent/intent.db
7
- *
8
- * SQLite 里有两张记录表:
9
- *
10
- * - `intent_records`:按 `session_key + turn_key` 保存当前版本,供面板与会话恢复读取;
11
- * - `intent_record_history`:每次保存都追加一版,保留审计轨迹。
12
- *
13
- * 旧版本的 `records.ndjson` 只作为一次性迁移输入,不再继续写入。
14
- */
15
- import { existsSync } from 'node:fs';
16
- import { mkdir, readFile } from 'node:fs/promises';
17
- import { join } from 'node:path';
18
- import { loadSqlite } from '../fts.js';
19
- /** 新的持久化文件。 */
20
- export const INTENT_DB_FILE = 'intent.db';
21
- /** 迁移旧版本时仍会读取这个文件,但新写入不再使用它。 */
22
- export const INTENT_RECORDS_FILE = 'records.ndjson';
23
- const SCHEMA_VERSION = 1;
24
- const writeQueues = new Map();
25
- function dbPath(root) {
26
- return join(root, INTENT_DB_FILE);
27
- }
28
- function isPlainObject(value) {
29
- return value !== null && typeof value === 'object' && !Array.isArray(value);
30
- }
31
- function asRecord(value) {
32
- if (!isPlainObject(value))
33
- return undefined;
34
- if (typeof value.sessionKey !== 'string' || typeof value.turnKey !== 'string')
35
- return undefined;
36
- return value;
37
- }
38
- function schemaSql() {
39
- return `
40
- CREATE TABLE IF NOT EXISTS intent_records (
41
- session_key TEXT NOT NULL,
42
- turn_key TEXT NOT NULL,
43
- record_id TEXT NOT NULL,
44
- updated_at TEXT NOT NULL,
45
- payload_json TEXT NOT NULL,
46
- PRIMARY KEY (session_key, turn_key)
47
- );
48
- CREATE INDEX IF NOT EXISTS idx_intent_records_session_updated
49
- ON intent_records (session_key, updated_at);
50
- CREATE TABLE IF NOT EXISTS intent_record_history (
51
- revision_id INTEGER PRIMARY KEY AUTOINCREMENT,
52
- session_key TEXT NOT NULL,
53
- turn_key TEXT NOT NULL,
54
- record_id TEXT NOT NULL,
55
- updated_at TEXT NOT NULL,
56
- payload_json TEXT NOT NULL
57
- );
58
- CREATE INDEX IF NOT EXISTS idx_intent_history_session_updated
59
- ON intent_record_history (session_key, updated_at);
60
- CREATE TABLE IF NOT EXISTS intent_store_meta (
61
- key TEXT PRIMARY KEY,
62
- value TEXT NOT NULL
63
- );
64
- PRAGMA user_version = ${SCHEMA_VERSION};
65
- `;
66
- }
67
- function updatedAtOf(record) {
68
- return String(record.updatedAt ?? record.createdAt ?? '');
69
- }
70
- function insertRecord(db, record, history) {
71
- const payload = JSON.stringify(record);
72
- const updatedAt = updatedAtOf(record);
73
- if (history) {
74
- db.prepare(`
75
- INSERT INTO intent_record_history
76
- (session_key, turn_key, record_id, updated_at, payload_json)
77
- VALUES (?, ?, ?, ?, ?)
78
- `).run(record.sessionKey, record.turnKey, record.id, updatedAt, payload);
79
- }
80
- db.prepare(`
81
- INSERT INTO intent_records
82
- (session_key, turn_key, record_id, updated_at, payload_json)
83
- VALUES (?, ?, ?, ?, ?)
84
- ON CONFLICT(session_key, turn_key) DO UPDATE SET
85
- record_id = excluded.record_id,
86
- updated_at = excluded.updated_at,
87
- payload_json = excluded.payload_json
88
- `).run(record.sessionKey, record.turnKey, record.id, updatedAt, payload);
89
- }
90
- async function readLegacyRecords(root) {
91
- const path = join(root, INTENT_RECORDS_FILE);
92
- if (!existsSync(path))
93
- return [];
94
- let text;
95
- try {
96
- text = await readFile(path, 'utf8');
97
- }
98
- catch {
99
- return [];
100
- }
101
- const records = [];
102
- for (const line of text.split(/\r?\n/)) {
103
- if (!line.trim())
104
- continue;
105
- try {
106
- const record = asRecord(JSON.parse(line));
107
- if (record)
108
- records.push(record);
109
- }
110
- catch {
111
- // 旧 JSONL 的最后半行可能是不完整的,只跳过这一行。
112
- }
113
- }
114
- return records;
115
- }
116
- async function migrateLegacyIfNeeded(db, root) {
117
- const marker = db.prepare('SELECT value FROM intent_store_meta WHERE key = ?').get('legacy_ndjson_migrated');
118
- if (marker?.value === '1')
119
- return;
120
- const legacy = await readLegacyRecords(root);
121
- db.exec('BEGIN');
122
- try {
123
- for (const record of legacy)
124
- insertRecord(db, record, true);
125
- db.prepare('INSERT OR REPLACE INTO intent_store_meta (key, value) VALUES (?, ?)').run('legacy_ndjson_migrated', '1');
126
- db.exec('COMMIT');
127
- }
128
- catch (error) {
129
- try {
130
- db.exec('ROLLBACK');
131
- }
132
- catch { /* ignore rollback failure */ }
133
- throw error;
134
- }
135
- }
136
- async function openIntentDb(root) {
137
- const sqlite = await loadSqlite();
138
- if (!sqlite)
139
- return null;
140
- let db;
141
- try {
142
- await mkdir(root, { recursive: true });
143
- db = new sqlite.DatabaseSync(dbPath(root));
144
- db.exec('PRAGMA busy_timeout = 5000');
145
- db.exec('PRAGMA journal_mode = WAL');
146
- db.exec(schemaSql());
147
- await migrateLegacyIfNeeded(db, root);
148
- return db;
149
- }
150
- catch {
151
- try {
152
- db?.close();
153
- }
154
- catch { /* ignore close failure */ }
155
- return null;
156
- }
157
- }
158
- async function waitForWrites(path) {
159
- await writeQueues.get(path)?.catch(() => undefined);
160
- }
161
- /**
162
- * 保存一条意图记录。
163
- *
164
- * 同一根目录的写入串行化,避免多个工具调用同时打开 SQLite 时互相抢写锁。
165
- * 持久化失败只影响留痕,不影响当前回答。
166
- */
167
- export async function appendIntentRecord(root, record) {
168
- const path = dbPath(root);
169
- const previous = writeQueues.get(path) ?? Promise.resolve();
170
- const next = previous.catch(() => undefined).then(async () => {
171
- const db = await openIntentDb(root);
172
- if (!db)
173
- return;
174
- try {
175
- db.exec('BEGIN IMMEDIATE');
176
- insertRecord(db, record, true);
177
- db.exec('COMMIT');
178
- }
179
- catch {
180
- try {
181
- db.exec('ROLLBACK');
182
- }
183
- catch { /* ignore rollback failure */ }
184
- }
185
- finally {
186
- try {
187
- db.close();
188
- }
189
- catch { /* already closed */ }
190
- }
191
- });
192
- writeQueues.set(path, next);
193
- try {
194
- await next;
195
- }
196
- finally {
197
- if (writeQueues.get(path) === next)
198
- writeQueues.delete(path);
199
- }
200
- }
201
- /**
202
- * 读取当前版本。
203
- *
204
- * `limit` 是每个会话的上限,不是全库总数;返回按更新时间升序,面板再反转显示最近一条。
205
- */
206
- export async function readIntentRecords(root, sessionKey, limit = 200) {
207
- const path = dbPath(root);
208
- await waitForWrites(path);
209
- const db = await openIntentDb(root);
210
- if (!db)
211
- return [];
212
- try {
213
- const rows = sessionKey === undefined
214
- ? db.prepare('SELECT payload_json FROM intent_records ORDER BY updated_at DESC LIMIT ?').all(Math.max(0, Math.round(limit)))
215
- : db.prepare('SELECT payload_json FROM intent_records WHERE session_key = ? ORDER BY updated_at DESC LIMIT ?').all(sessionKey, Math.max(0, Math.round(limit)));
216
- return rows.flatMap(row => {
217
- const payload = row.payload_json;
218
- if (typeof payload !== 'string')
219
- return [];
220
- try {
221
- const record = asRecord(JSON.parse(payload));
222
- return record ? [record] : [];
223
- }
224
- catch {
225
- return [];
226
- }
227
- }).reverse();
228
- }
229
- catch {
230
- return [];
231
- }
232
- finally {
233
- try {
234
- db.close();
235
- }
236
- catch { /* already closed */ }
237
- }
238
- }
239
- //# sourceMappingURL=store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/intent/store.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- /**
2
- * 两个 `intent_*` 工具的**注册器**:与「引擎住在哪个平面」解耦。
3
- *
4
- * ## 为什么要单独一个文件
5
- *
6
- * 工具由 Host 层注册,因此可以被标准模式调用。由于 Host 工具也可能出现在其他 preset
7
- * 中,执行端会检查会话,只接受 `standard`。
8
- *
9
- * @module
10
- */
11
- import { type ToolRunContext } from '@deepseek-ai/dsh-tools';
12
- import type { LineageContext } from '#contracts';
13
- /**
14
- * 注册这两个工具需要引擎提供的能力。
15
- *
16
- * 刻意是**结构化的最小面**而不是 `IntentEngine` 本身:宿主平面通过
17
- * `INTENT_SERVICE` 提供它,注册器只按这个形状使用引擎,不依赖其具体实现位置。
18
- */
19
- export interface IntentToolHost {
20
- /** `intent_record` 的**工具描述就是路由提示词**(0023)。 */
21
- routingPrompt(): string;
22
- record(args: Record<string, unknown>, exec?: ToolRunContext): unknown;
23
- view(sessionKey: string, includePrompt?: boolean): unknown;
24
- }
25
- /** 工具的最小注册面。测试替身与真实 `ctx` 都满足它。 */
26
- export interface ToolRegistryLike {
27
- register(definition: unknown): unknown;
28
- }
29
- export declare function jsonTool(name: string, description: string, parameters: Record<string, unknown>, execute: (args: any, exec?: ToolRunContext) => unknown): import("@deepseek-ai/dsh-tools").ToolDefinition;
30
- export declare function lineageOf(args: Record<string, unknown>, exec?: ToolRunContext): Partial<LineageContext> | undefined;
31
- export declare function sessionKeyOf(exec?: ToolRunContext): string | undefined;
32
- /**
33
- * 这个会话是不是**子代理**。
34
- *
35
- * 子代理会加入父会话的组合,所以它会继承到 `intent_*` 两个工具。而意图记录描述的是
36
- * 「用户在跟 Agent 要什么」:子代理做的是被拆出来的一个片段,它记一条只会污染任务树。
37
- *
38
- * 这条规矩原来写在 preset 的 delegation 行上(`toolFilter: { deny: [...] }`)。DSH 0.1.8
39
- * 起 `toolFilter`(与 `persona`)**不再被 `dsh-tool-subagent` 接受** —— 带上它的 preset
40
- * 直接挂载失败,整个组合都不会生效。平台给的替代是「在 Agent Preset 里配好工具,再用
41
- * `agentPreset` 选中它」,而那**只对 spawn provider 有效**:fork / codex / claude-code
42
- * 的子会话按定义继承父会话的组合,没有选择余地(`inheritsParentContext` 直接拒绝)。
43
- *
44
- * 所以判据搬进工具本身:看会话头,与「谁把子会话拉起来的」无关。四个 provider 一视同仁,
45
- * 也不会再出现「新增一个 delegation 行忘了 deny」这种漏法。
46
- *
47
- * 判据取两个字段:`origin === 'subagent'` 是产品分类,`delegationDepth > 0` 是递归深度
48
- * (持久化过,重启后仍然成立)。任一条成立就算子会话。
49
- */
50
- export declare function isSubagentSession(exec?: ToolRunContext): boolean;
51
- /**
52
- * 注册两个 `intent_*` 工具,返回一个把两者一起撤掉的 disposer。
53
- *
54
- * `intent_record` 的描述来自固定的会话审计契约,不依赖设置或注册表。
55
- *
56
- * 类型守卫(`typeof disposer === 'function'`)是因为测试替身的 `register` 不一定
57
- * 返回 disposer。
58
- */
59
- export declare function registerIntentTools(ctx: {
60
- tools: ToolRegistryLike;
61
- }, host: IntentToolHost): () => void;
62
- //# sourceMappingURL=tools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/intent/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAGhD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,aAAa,IAAI,MAAM,CAAA;IACvB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAA;IACrE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CAC3D;AAqBD,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAA;CACvC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,cAAc,KAAK,OAAO,mDAMtJ;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,CAWnH;AAED,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAGtE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAKhE;AAWD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,gBAAgB,CAAA;CAAE,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,IAAI,CAgCtG"}
@@ -1,130 +0,0 @@
1
- /**
2
- * 两个 `intent_*` 工具的**注册器**:与「引擎住在哪个平面」解耦。
3
- *
4
- * ## 为什么要单独一个文件
5
- *
6
- * 工具由 Host 层注册,因此可以被标准模式调用。由于 Host 工具也可能出现在其他 preset
7
- * 中,执行端会检查会话,只接受 `standard`。
8
- *
9
- * @module
10
- */
11
- import { defineTool } from '@deepseek-ai/dsh-tools';
12
- import { envelopeFailure } from '#contracts';
13
- import { isIntentAgentSession } from './scope.js';
14
- /** `intent_record` 的参数表。描述是路由提示词(工具级),所以这里只声明字段。 */
15
- const INTENT_RECORD_PARAMS = {
16
- user_input: { type: 'string', required: true, description: '本轮用户原文' },
17
- act: { type: 'string', description: '本轮动作 id,取自工具描述里的 act 词表' },
18
- category: { type: 'string', description: '意图分类 id:先按预置分类匹配,命中就直接用它的 id;全不命中才自行新起一个 id 或落 unknown' },
19
- predicate: { type: 'string', description: '要执行的动作,例如 query_babel_data' },
20
- slots: { type: 'json', description: '从用户输入抽取的关键参数' },
21
- confidence: { type: 'number', description: '0-1,用于标注 lowConfidence' },
22
- refs: { type: 'array', description: '引用对象,例如 { id, kind, label }' },
23
- relation: { type: 'string', enum: ['new_task', 'subtask_of'], description: '本轮是新任务还是已有任务的子任务' },
24
- turn_id: { type: 'string', description: '当前对话轮次 id;不传则由 Host 生成' },
25
- task_id: { type: 'string', description: 'relation=subtask_of 时指向的已有业务任务 id;新任务不传' },
26
- subtask_id: { type: 'string', description: '已有子任务 id;新子任务不传,由 Host 生成' },
27
- parent_subtask_id: { type: 'string', description: '父任务节点 id;通常由 Host 生成' },
28
- run_id: { type: 'string', description: '已有执行尝试 id;重试时传新值' },
29
- trace_id: { type: 'string' },
30
- domain: { type: 'string' },
31
- };
32
- export function jsonTool(name, description, parameters, execute) {
33
- return defineTool({
34
- name, description, parameters: parameters,
35
- output: { schema: { type: 'json' }, render: (_args, value) => [{ type: 'text', text: JSON.stringify(value) }] },
36
- execute: async (args, exec) => execute(args, exec),
37
- });
38
- }
39
- export function lineageOf(args, exec) {
40
- const lineage = {};
41
- // Session identity is execution context, never model-controlled input.
42
- const sessionId = exec?.agent?.session?.header?.id;
43
- if (sessionId)
44
- lineage.sessionId = sessionId;
45
- const fields = [
46
- ['turnId', 'turn_id'], ['taskId', 'task_id'], ['subtaskId', 'subtask_id'],
47
- ['parentSubtaskId', 'parent_subtask_id'], ['runId', 'run_id'], ['traceId', 'trace_id'], ['domain', 'domain'],
48
- ];
49
- for (const [target, source] of fields)
50
- if (typeof args[source] === 'string' && args[source].trim())
51
- lineage[target] = args[source].trim();
52
- return Object.keys(lineage).length > 0 ? lineage : undefined;
53
- }
54
- export function sessionKeyOf(exec) {
55
- const sessionId = exec?.agent?.session?.header?.id;
56
- return typeof sessionId === 'string' && sessionId.trim() ? sessionId.trim() : undefined;
57
- }
58
- /**
59
- * 这个会话是不是**子代理**。
60
- *
61
- * 子代理会加入父会话的组合,所以它会继承到 `intent_*` 两个工具。而意图记录描述的是
62
- * 「用户在跟 Agent 要什么」:子代理做的是被拆出来的一个片段,它记一条只会污染任务树。
63
- *
64
- * 这条规矩原来写在 preset 的 delegation 行上(`toolFilter: { deny: [...] }`)。DSH 0.1.8
65
- * 起 `toolFilter`(与 `persona`)**不再被 `dsh-tool-subagent` 接受** —— 带上它的 preset
66
- * 直接挂载失败,整个组合都不会生效。平台给的替代是「在 Agent Preset 里配好工具,再用
67
- * `agentPreset` 选中它」,而那**只对 spawn provider 有效**:fork / codex / claude-code
68
- * 的子会话按定义继承父会话的组合,没有选择余地(`inheritsParentContext` 直接拒绝)。
69
- *
70
- * 所以判据搬进工具本身:看会话头,与「谁把子会话拉起来的」无关。四个 provider 一视同仁,
71
- * 也不会再出现「新增一个 delegation 行忘了 deny」这种漏法。
72
- *
73
- * 判据取两个字段:`origin === 'subagent'` 是产品分类,`delegationDepth > 0` 是递归深度
74
- * (持久化过,重启后仍然成立)。任一条成立就算子会话。
75
- */
76
- export function isSubagentSession(exec) {
77
- const header = exec?.agent?.session?.header;
78
- if (!header)
79
- return false;
80
- if (header.origin === 'subagent')
81
- return true;
82
- return typeof header.delegationDepth === 'number' && header.delegationDepth > 0;
83
- }
84
- /** 子代理调这两个工具时统一回这一条:说清为什么,并给出该走的路。 */
85
- function subagentRefusal() {
86
- return envelopeFailure({ sessionKey: null }, {
87
- code: 'SUBAGENT_NOT_RECORDED',
88
- message: '子代理不记录意图:意图描述的是用户与主 Agent 的交互。把要记的内容写进返回结果,由主 Agent 记录。',
89
- retryable: false,
90
- });
91
- }
92
- /**
93
- * 注册两个 `intent_*` 工具,返回一个把两者一起撤掉的 disposer。
94
- *
95
- * `intent_record` 的描述来自固定的会话审计契约,不依赖设置或注册表。
96
- *
97
- * 类型守卫(`typeof disposer === 'function'`)是因为测试替身的 `register` 不一定
98
- * 返回 disposer。
99
- */
100
- export function registerIntentTools(ctx, host) {
101
- const disposeRecord = ctx.tools.register(jsonTool('intent_record', host.routingPrompt(), INTENT_RECORD_PARAMS, (args, exec) => (isSubagentSession(exec) ? subagentRefusal() : host.record(args, exec))));
102
- const disposeView = ctx.tools.register(jsonTool('intent_store_view', 'View recent intent records and active task ids for the current session. Only standard sessions can use this tool.', { include_prompt: { type: 'boolean' } }, (args, exec) => {
103
- if (isSubagentSession(exec))
104
- return subagentRefusal();
105
- const session = exec?.agent?.session;
106
- if (session && !isIntentAgentSession(session)) {
107
- return envelopeFailure({ sessionKey: null }, {
108
- code: 'INTENT_PRESET_UNSUPPORTED',
109
- message: '意图记录只支持标准模式。',
110
- retryable: false,
111
- });
112
- }
113
- const sessionKey = sessionKeyOf(exec);
114
- if (!sessionKey) {
115
- return envelopeFailure({ sessionKey: null }, {
116
- code: 'SESSION_CONTEXT_REQUIRED',
117
- message: '意图记录只能在有活动 DSH 会话的上下文中读取。',
118
- retryable: false,
119
- });
120
- }
121
- return host.view(sessionKey, args.include_prompt);
122
- }));
123
- return () => {
124
- if (typeof disposeRecord === 'function')
125
- disposeRecord();
126
- if (typeof disposeView === 'function')
127
- disposeView();
128
- };
129
- }
130
- //# sourceMappingURL=tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/intent/tools.ts"],"names":[],"mappings":"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"}
@@ -1,170 +0,0 @@
1
- import type { ToolStatus } from '#contracts';
2
- import type { LineageContext } from '#contracts';
3
- export type { ToolStatus };
4
- /**
5
- * 一个动作类型(act)。
6
- *
7
- * act 回答"这一轮用户在**做什么**",与 category(做什么**业务**)正交:同一句
8
- * "帮我看下上个月的 GMV" 是 `query` × `data_analysis`。光有 id 时模型只能猜
9
- * `query` 和 `request` 的区别,所以每一类都带 label 与 description。
10
- */
11
- export interface IntentActDef {
12
- id: string;
13
- label: string;
14
- description: string;
15
- enabled: boolean;
16
- }
17
- /**
18
- * 内置 act 词表。它是会话审计的固定提示,不是知识召回配置,也不提供编辑入口。
19
- */
20
- export declare const DEFAULT_ACTS: IntentActDef[];
21
- /** Free-form act id; validated against the fixed audit vocabulary when possible. */
22
- export type IntentAct = string;
23
- /** How one turn relates to the session's existing tasks. */
24
- export type IntentRelation = 'new_task' | 'subtask_of' | 'unknown';
25
- /** `model` is a model-authored record; `fallback` is the Host's data-turn backfill. */
26
- export type IntentSource = 'model' | 'fallback';
27
- export interface IntentSlotMap {
28
- [name: string]: unknown;
29
- }
30
- export interface IntentRef {
31
- id: string;
32
- kind?: string;
33
- label?: string;
34
- }
35
- /**
36
- * One built-in intent category; `route` names the act it usually maps to.
37
- *
38
- * 固定分类的作用是**把模型的自由判断收窄成一次匹配**:
39
- * {@link description} 说明这一类"是什么",{@link examples} 给出用户可能怎么说。
40
- * 两者都会被拼进固定的 routing prompt,模型先按它们匹配,命中就直接用该 id。
41
- */
42
- export interface IntentCategory {
43
- id: string;
44
- label: string;
45
- route: string;
46
- description: string;
47
- /**
48
- * 预置说法(few-shot):用户可能怎么表达这一类意图,每行一条。
49
- *
50
- * 固定词表中的 few-shot 说法。
51
- */
52
- examples?: string[];
53
- enabled: boolean;
54
- }
55
- /**
56
- * Recorder settings. 只有审计运行参数保留为内部默认值;分类词表属于固定契约,
57
- * 不再作为用户配置暴露。
58
- */
59
- export interface IntentSettings {
60
- /** Below this confidence a record is annotated lowConfidence; the model decides whether to clarify. */
61
- clarifyThreshold: number;
62
- ttlSeconds: number;
63
- /**
64
- * 0023:路由提示词**没有开关**。它随 `intent_record` 的工具描述一起下发,
65
- * 分类规则必须始终在场——否则模型退化成每轮从零判断。
66
- */
67
- /** Backfill one `unknown` record when an eligible data turn ends without a model record. */
68
- fallbackEnabled: boolean;
69
- }
70
- /**
71
- * 出厂预置的意图分类。
72
- *
73
- * 每一项都**必须**带 `description` 与 `examples`:只给标签("数据分析")时模型
74
- * 只能靠猜,同一句话在不同轮次会被分到不同类。这些文案是模型的匹配依据,全部
75
- * 词表随代码发布,不通过知识库配置或 UI 修改。
76
- */
77
- export declare const DEFAULT_CATEGORIES: Array<IntentCategory & {
78
- examples: string[];
79
- }>;
80
- export declare const DEFAULT_PREDICATES: string[];
81
- export declare const DEFAULT_INTENT_SETTINGS: IntentSettings;
82
- /** One recorded intent. The record is an audit fact; it never drives control flow. */
83
- export interface IntentRecord {
84
- id: string;
85
- sessionKey: string;
86
- /** `sessionKey#turn` — the upsert key that keeps one record per turn. */
87
- turnKey: string;
88
- turnId: string;
89
- userInput: string;
90
- act: IntentAct;
91
- category?: string;
92
- predicate?: string;
93
- slots: IntentSlotMap;
94
- confidence?: number;
95
- lowConfidence?: boolean;
96
- refs: IntentRef[];
97
- relation: IntentRelation;
98
- source: IntentSource;
99
- createdAt: string;
100
- updatedAt: string;
101
- lineage: LineageContext;
102
- meta: Record<string, unknown>;
103
- }
104
- export interface IntentRecordInput {
105
- userInput: string;
106
- act?: string;
107
- category?: string;
108
- predicate?: string;
109
- slots?: IntentSlotMap;
110
- confidence?: number;
111
- refs?: IntentRef[];
112
- relation?: IntentRelation;
113
- sessionKey: string;
114
- turnId?: string;
115
- lineage?: Partial<LineageContext>;
116
- now?: number;
117
- }
118
- /** Compact task context returned to the model so it can pick the next relation. */
119
- export interface IntentTaskSummary {
120
- taskId: string;
121
- lastSubtaskId?: string;
122
- category?: string;
123
- ageSeconds: number;
124
- }
125
- export interface IntentStoreView {
126
- sessionKey: string;
127
- activeTaskId?: string;
128
- activeIntentId?: string;
129
- tasks: IntentTaskSummary[];
130
- recent: IntentRecord[];
131
- expiresAt?: string;
132
- }
133
- export interface IntentResultData {
134
- intentId?: string;
135
- taskId?: string;
136
- subtaskId?: string;
137
- parentSubtaskId?: string;
138
- runId?: string;
139
- turnId?: string;
140
- act?: string;
141
- category?: string;
142
- relation?: IntentRelation;
143
- source?: IntentSource;
144
- lowConfidence?: boolean;
145
- activeTasks?: IntentTaskSummary[];
146
- store?: IntentStoreView;
147
- prompt?: string;
148
- /** True when the scoped tool call was intentionally ignored as a non-data turn. */
149
- skipped?: boolean;
150
- skipReason?: 'non_data_agent' | 'unsupported_preset' | 'non_data_turn';
151
- }
152
- export interface IntentResult {
153
- ok: boolean;
154
- status: ToolStatus;
155
- data: IntentResultData;
156
- warnings: string[];
157
- }
158
- /** Live turn state: the provisional ids allocated before the model records. */
159
- export interface IntentTurnState {
160
- turn: number;
161
- userInput: string;
162
- subtaskId: string;
163
- taskId?: string;
164
- /** The turn entered the data intent scope through text, payload or a data tool. */
165
- eligible: boolean;
166
- /** A data tool ran during this turn; a later chat classification cannot revoke it. */
167
- dataToolUsed: boolean;
168
- committed: boolean;
169
- }
170
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/intent/types.ts"],"names":[],"mappings":"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"}