@agenticc/core 1.0.0

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 (196) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +370 -0
  3. package/README.zh-CN.md +372 -0
  4. package/dist/audit/index.d.ts +9 -0
  5. package/dist/audit/index.d.ts.map +1 -0
  6. package/dist/audit/index.js +9 -0
  7. package/dist/audit/index.js.map +1 -0
  8. package/dist/audit/logger.d.ts +211 -0
  9. package/dist/audit/logger.d.ts.map +1 -0
  10. package/dist/audit/logger.js +268 -0
  11. package/dist/audit/logger.js.map +1 -0
  12. package/dist/audit/query.d.ts +164 -0
  13. package/dist/audit/query.d.ts.map +1 -0
  14. package/dist/audit/query.js +250 -0
  15. package/dist/audit/query.js.map +1 -0
  16. package/dist/conversation/context-builder.d.ts +119 -0
  17. package/dist/conversation/context-builder.d.ts.map +1 -0
  18. package/dist/conversation/context-builder.js +252 -0
  19. package/dist/conversation/context-builder.js.map +1 -0
  20. package/dist/conversation/index.d.ts +10 -0
  21. package/dist/conversation/index.d.ts.map +1 -0
  22. package/dist/conversation/index.js +10 -0
  23. package/dist/conversation/index.js.map +1 -0
  24. package/dist/conversation/message-store.d.ts +231 -0
  25. package/dist/conversation/message-store.d.ts.map +1 -0
  26. package/dist/conversation/message-store.js +404 -0
  27. package/dist/conversation/message-store.js.map +1 -0
  28. package/dist/conversation/session.d.ts +201 -0
  29. package/dist/conversation/session.d.ts.map +1 -0
  30. package/dist/conversation/session.js +285 -0
  31. package/dist/conversation/session.js.map +1 -0
  32. package/dist/core/agent.d.ts +277 -0
  33. package/dist/core/agent.d.ts.map +1 -0
  34. package/dist/core/agent.js +674 -0
  35. package/dist/core/agent.js.map +1 -0
  36. package/dist/core/agentic-loop.d.ts +98 -0
  37. package/dist/core/agentic-loop.d.ts.map +1 -0
  38. package/dist/core/agentic-loop.js +496 -0
  39. package/dist/core/agentic-loop.js.map +1 -0
  40. package/dist/core/index.d.ts +14 -0
  41. package/dist/core/index.d.ts.map +1 -0
  42. package/dist/core/index.js +14 -0
  43. package/dist/core/index.js.map +1 -0
  44. package/dist/core/intent-parser.d.ts +101 -0
  45. package/dist/core/intent-parser.d.ts.map +1 -0
  46. package/dist/core/intent-parser.js +221 -0
  47. package/dist/core/intent-parser.js.map +1 -0
  48. package/dist/core/plan-generator.d.ts +133 -0
  49. package/dist/core/plan-generator.d.ts.map +1 -0
  50. package/dist/core/plan-generator.js +294 -0
  51. package/dist/core/plan-generator.js.map +1 -0
  52. package/dist/core/plugin-manager.d.ts +120 -0
  53. package/dist/core/plugin-manager.d.ts.map +1 -0
  54. package/dist/core/plugin-manager.js +369 -0
  55. package/dist/core/plugin-manager.js.map +1 -0
  56. package/dist/core/response-handler.d.ts +141 -0
  57. package/dist/core/response-handler.d.ts.map +1 -0
  58. package/dist/core/response-handler.js +384 -0
  59. package/dist/core/response-handler.js.map +1 -0
  60. package/dist/core/tool-executor.d.ts +143 -0
  61. package/dist/core/tool-executor.d.ts.map +1 -0
  62. package/dist/core/tool-executor.js +354 -0
  63. package/dist/core/tool-executor.js.map +1 -0
  64. package/dist/core/tool-registry.d.ts +133 -0
  65. package/dist/core/tool-registry.d.ts.map +1 -0
  66. package/dist/core/tool-registry.js +252 -0
  67. package/dist/core/tool-registry.js.map +1 -0
  68. package/dist/index.d.ts +44 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +47 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/knowledge/chunker.d.ts +78 -0
  73. package/dist/knowledge/chunker.d.ts.map +1 -0
  74. package/dist/knowledge/chunker.js +233 -0
  75. package/dist/knowledge/chunker.js.map +1 -0
  76. package/dist/knowledge/embedder.d.ts +93 -0
  77. package/dist/knowledge/embedder.d.ts.map +1 -0
  78. package/dist/knowledge/embedder.js +205 -0
  79. package/dist/knowledge/embedder.js.map +1 -0
  80. package/dist/knowledge/index.d.ts +10 -0
  81. package/dist/knowledge/index.d.ts.map +1 -0
  82. package/dist/knowledge/index.js +11 -0
  83. package/dist/knowledge/index.js.map +1 -0
  84. package/dist/knowledge/loaders/index.d.ts +10 -0
  85. package/dist/knowledge/loaders/index.d.ts.map +1 -0
  86. package/dist/knowledge/loaders/index.js +10 -0
  87. package/dist/knowledge/loaders/index.js.map +1 -0
  88. package/dist/knowledge/loaders/markdown.d.ts +88 -0
  89. package/dist/knowledge/loaders/markdown.d.ts.map +1 -0
  90. package/dist/knowledge/loaders/markdown.js +205 -0
  91. package/dist/knowledge/loaders/markdown.js.map +1 -0
  92. package/dist/knowledge/loaders/yaml.d.ts +112 -0
  93. package/dist/knowledge/loaders/yaml.d.ts.map +1 -0
  94. package/dist/knowledge/loaders/yaml.js +368 -0
  95. package/dist/knowledge/loaders/yaml.js.map +1 -0
  96. package/dist/knowledge/retriever.d.ts +144 -0
  97. package/dist/knowledge/retriever.d.ts.map +1 -0
  98. package/dist/knowledge/retriever.js +399 -0
  99. package/dist/knowledge/retriever.js.map +1 -0
  100. package/dist/knowledge/store.d.ts +146 -0
  101. package/dist/knowledge/store.d.ts.map +1 -0
  102. package/dist/knowledge/store.js +420 -0
  103. package/dist/knowledge/store.js.map +1 -0
  104. package/dist/llm/adapter.d.ts +194 -0
  105. package/dist/llm/adapter.d.ts.map +1 -0
  106. package/dist/llm/adapter.js +42 -0
  107. package/dist/llm/adapter.js.map +1 -0
  108. package/dist/llm/adapters/anyrouter.d.ts +84 -0
  109. package/dist/llm/adapters/anyrouter.d.ts.map +1 -0
  110. package/dist/llm/adapters/anyrouter.js +372 -0
  111. package/dist/llm/adapters/anyrouter.js.map +1 -0
  112. package/dist/llm/adapters/claude.d.ts +66 -0
  113. package/dist/llm/adapters/claude.d.ts.map +1 -0
  114. package/dist/llm/adapters/claude.js +323 -0
  115. package/dist/llm/adapters/claude.js.map +1 -0
  116. package/dist/llm/adapters/index.d.ts +12 -0
  117. package/dist/llm/adapters/index.d.ts.map +1 -0
  118. package/dist/llm/adapters/index.js +12 -0
  119. package/dist/llm/adapters/index.js.map +1 -0
  120. package/dist/llm/adapters/mimo.d.ts +85 -0
  121. package/dist/llm/adapters/mimo.d.ts.map +1 -0
  122. package/dist/llm/adapters/mimo.js +316 -0
  123. package/dist/llm/adapters/mimo.js.map +1 -0
  124. package/dist/llm/adapters/openai.d.ts +53 -0
  125. package/dist/llm/adapters/openai.d.ts.map +1 -0
  126. package/dist/llm/adapters/openai.js +293 -0
  127. package/dist/llm/adapters/openai.js.map +1 -0
  128. package/dist/llm/adapters/qwen.d.ts +53 -0
  129. package/dist/llm/adapters/qwen.d.ts.map +1 -0
  130. package/dist/llm/adapters/qwen.js +299 -0
  131. package/dist/llm/adapters/qwen.js.map +1 -0
  132. package/dist/llm/adapters/siliconflow.d.ts +69 -0
  133. package/dist/llm/adapters/siliconflow.d.ts.map +1 -0
  134. package/dist/llm/adapters/siliconflow.js +331 -0
  135. package/dist/llm/adapters/siliconflow.js.map +1 -0
  136. package/dist/llm/index.d.ts +9 -0
  137. package/dist/llm/index.d.ts.map +1 -0
  138. package/dist/llm/index.js +12 -0
  139. package/dist/llm/index.js.map +1 -0
  140. package/dist/llm/manager.d.ts +97 -0
  141. package/dist/llm/manager.d.ts.map +1 -0
  142. package/dist/llm/manager.js +337 -0
  143. package/dist/llm/manager.js.map +1 -0
  144. package/dist/test-utils/arbitraries.d.ts +230 -0
  145. package/dist/test-utils/arbitraries.d.ts.map +1 -0
  146. package/dist/test-utils/arbitraries.js +280 -0
  147. package/dist/test-utils/arbitraries.js.map +1 -0
  148. package/dist/test-utils/cleanup.d.ts +184 -0
  149. package/dist/test-utils/cleanup.d.ts.map +1 -0
  150. package/dist/test-utils/cleanup.js +282 -0
  151. package/dist/test-utils/cleanup.js.map +1 -0
  152. package/dist/test-utils/config.d.ts +80 -0
  153. package/dist/test-utils/config.d.ts.map +1 -0
  154. package/dist/test-utils/config.js +94 -0
  155. package/dist/test-utils/config.js.map +1 -0
  156. package/dist/test-utils/index.d.ts +10 -0
  157. package/dist/test-utils/index.d.ts.map +1 -0
  158. package/dist/test-utils/index.js +36 -0
  159. package/dist/test-utils/index.js.map +1 -0
  160. package/dist/test-utils/mocks.d.ts +170 -0
  161. package/dist/test-utils/mocks.d.ts.map +1 -0
  162. package/dist/test-utils/mocks.js +281 -0
  163. package/dist/test-utils/mocks.js.map +1 -0
  164. package/dist/types/config.d.ts +170 -0
  165. package/dist/types/config.d.ts.map +1 -0
  166. package/dist/types/config.js +120 -0
  167. package/dist/types/config.js.map +1 -0
  168. package/dist/types/knowledge.d.ts +95 -0
  169. package/dist/types/knowledge.d.ts.map +1 -0
  170. package/dist/types/knowledge.js +7 -0
  171. package/dist/types/knowledge.js.map +1 -0
  172. package/dist/types/loop.d.ts +148 -0
  173. package/dist/types/loop.d.ts.map +1 -0
  174. package/dist/types/loop.js +16 -0
  175. package/dist/types/loop.js.map +1 -0
  176. package/dist/types/plugin.d.ts +137 -0
  177. package/dist/types/plugin.d.ts.map +1 -0
  178. package/dist/types/plugin.js +15 -0
  179. package/dist/types/plugin.js.map +1 -0
  180. package/dist/types/response.d.ts +186 -0
  181. package/dist/types/response.d.ts.map +1 -0
  182. package/dist/types/response.js +99 -0
  183. package/dist/types/response.js.map +1 -0
  184. package/dist/types/streaming.d.ts +478 -0
  185. package/dist/types/streaming.d.ts.map +1 -0
  186. package/dist/types/streaming.js +483 -0
  187. package/dist/types/streaming.js.map +1 -0
  188. package/dist/types/tool.d.ts +118 -0
  189. package/dist/types/tool.d.ts.map +1 -0
  190. package/dist/types/tool.js +42 -0
  191. package/dist/types/tool.js.map +1 -0
  192. package/dist/utils/error.d.ts +22 -0
  193. package/dist/utils/error.d.ts.map +1 -0
  194. package/dist/utils/error.js +36 -0
  195. package/dist/utils/error.js.map +1 -0
  196. package/package.json +102 -0
@@ -0,0 +1,280 @@
1
+ /**
2
+ * 共享的 Arbitrary 生成器
3
+ *
4
+ * 为 Property-based 测试提供统一的数据生成器
5
+ */
6
+ import * as fc from 'fast-check';
7
+ // ============================================================================
8
+ // 标识符相关
9
+ // ============================================================================
10
+ /**
11
+ * 有效的标识符(用于工具名、变量名等)
12
+ * 规则:以字母开头,只包含字母、数字、下划线
13
+ */
14
+ export const arbIdentifier = fc
15
+ .stringOf(fc.constantFrom(...'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'.split('')), { minLength: 1, maxLength: 30 })
16
+ .filter((s) => /^[a-zA-Z][a-zA-Z0-9_]*$/.test(s));
17
+ /**
18
+ * 有效的插件名(允许连字符)
19
+ */
20
+ export const arbPluginName = fc
21
+ .stringOf(fc.constantFrom(...'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-'.split('')), { minLength: 1, maxLength: 30 })
22
+ .filter((s) => /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(s));
23
+ /**
24
+ * 有效的工具名(不允许连字符)
25
+ */
26
+ export const arbToolName = fc
27
+ .stringOf(fc.constantFrom(...'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'.split('')), { minLength: 1, maxLength: 30 })
28
+ .filter((s) => /^[a-zA-Z][a-zA-Z0-9_]*$/.test(s));
29
+ /**
30
+ * 有效的命名空间(小写字母开头)
31
+ */
32
+ export const arbNamespace = fc
33
+ .stringOf(fc.constantFrom(...'abcdefghijklmnopqrstuvwxyz0123456789_'.split('')), {
34
+ minLength: 1,
35
+ maxLength: 20,
36
+ })
37
+ .filter((s) => /^[a-z][a-z0-9_]*$/.test(s));
38
+ /**
39
+ * 有效的分类名
40
+ */
41
+ export const arbCategory = fc.stringOf(fc.constantFrom(...'abcdefghijklmnopqrstuvwxyz'.split('')), {
42
+ minLength: 1,
43
+ maxLength: 20,
44
+ });
45
+ // ============================================================================
46
+ // Session 相关
47
+ // ============================================================================
48
+ /**
49
+ * Session ID(UUID 格式)
50
+ */
51
+ export const arbSessionId = fc.uuid().map((uuid) => `session_${uuid}`);
52
+ /**
53
+ * Message ID
54
+ */
55
+ export const arbMessageId = fc.uuid().map((uuid) => `msg_${uuid}`);
56
+ /**
57
+ * 消息角色
58
+ */
59
+ export const arbMessageRole = fc.constantFrom('user', 'assistant', 'system');
60
+ /**
61
+ * 响应类型
62
+ */
63
+ export const arbResponseType = fc.constantFrom('execute', 'clarify', 'confirm', 'options', 'knowledge_request');
64
+ // ============================================================================
65
+ // 字符串相关
66
+ // ============================================================================
67
+ /**
68
+ * 非空字符串
69
+ *
70
+ * @param maxLength - 最大长度
71
+ */
72
+ export const arbNonEmptyString = (maxLength = 200) => fc.string({ minLength: 1, maxLength });
73
+ /**
74
+ * 消息内容
75
+ */
76
+ export const arbMessageContent = arbNonEmptyString(500);
77
+ /**
78
+ * 用户消息
79
+ */
80
+ export const arbUserMessage = arbNonEmptyString(1000);
81
+ /**
82
+ * 安全的字符串(只包含常见字符)
83
+ */
84
+ export const arbSafeString = (maxLength = 100) => fc.stringOf(fc.constantFrom(...'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 .,!?-_'.split('')), { minLength: 1, maxLength });
85
+ // ============================================================================
86
+ // JSON 相关
87
+ // ============================================================================
88
+ /**
89
+ * 有效的 JSON 值(排除 undefined)
90
+ */
91
+ export const arbJsonValue = fc.jsonValue();
92
+ /**
93
+ * 元数据对象
94
+ */
95
+ export const arbMetadata = fc.option(fc.dictionary(fc.string({ minLength: 1, maxLength: 20 }), arbJsonValue), { nil: undefined });
96
+ /**
97
+ * 简单的键值对对象
98
+ */
99
+ export const arbSimpleObject = fc.dictionary(arbIdentifier, fc.oneof(fc.string(), fc.integer(), fc.boolean(), fc.constant(null)), { minKeys: 0, maxKeys: 5 });
100
+ // ============================================================================
101
+ // 工具相关
102
+ // ============================================================================
103
+ /**
104
+ * 工具参数
105
+ */
106
+ export const arbToolArgs = fc.dictionary(arbIdentifier, fc.oneof(fc.string(), fc.integer(), fc.boolean(), fc.constant(null)), { minKeys: 0, maxKeys: 5 });
107
+ /**
108
+ * 错误代码
109
+ */
110
+ export const arbErrorCode = fc.stringOf(fc.constantFrom(...'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'.split('')), { minLength: 3, maxLength: 30 });
111
+ /**
112
+ * 工具执行结果
113
+ */
114
+ export const arbToolResult = fc.record({
115
+ success: fc.boolean(),
116
+ content: arbNonEmptyString(200),
117
+ data: fc.option(arbJsonValue, { nil: undefined }),
118
+ error: fc.option(fc.record({
119
+ code: arbErrorCode,
120
+ message: arbNonEmptyString(100),
121
+ }), { nil: undefined }),
122
+ });
123
+ /**
124
+ * 成功的工具结果
125
+ */
126
+ export const arbSuccessToolResult = fc.record({
127
+ success: fc.constant(true),
128
+ content: arbNonEmptyString(200),
129
+ data: fc.option(arbJsonValue, { nil: undefined }),
130
+ });
131
+ /**
132
+ * 失败的工具结果
133
+ */
134
+ export const arbFailureToolResult = fc.record({
135
+ success: fc.constant(false),
136
+ content: arbNonEmptyString(200),
137
+ error: fc.record({
138
+ code: arbErrorCode,
139
+ message: arbNonEmptyString(100),
140
+ }),
141
+ });
142
+ // ============================================================================
143
+ // 数值相关
144
+ // ============================================================================
145
+ /**
146
+ * 正整数
147
+ *
148
+ * @param max - 最大值
149
+ */
150
+ export const arbPositiveInt = (max = 100) => fc.integer({ min: 1, max });
151
+ /**
152
+ * 非负整数
153
+ *
154
+ * @param max - 最大值
155
+ */
156
+ export const arbNonNegativeInt = (max = 60000) => fc.integer({ min: 0, max });
157
+ /**
158
+ * 持续时间(毫秒)
159
+ */
160
+ export const arbDurationMs = arbNonNegativeInt(60000);
161
+ /**
162
+ * 温度参数(0-2)
163
+ */
164
+ export const arbTemperature = fc.double({ min: 0, max: 2, noNaN: true });
165
+ /**
166
+ * maxTokens 参数
167
+ */
168
+ export const arbMaxTokens = fc.integer({ min: 1, max: 4096 });
169
+ /**
170
+ * maxIterations 参数
171
+ */
172
+ export const arbMaxIterations = fc.integer({ min: 1, max: 50 });
173
+ // ============================================================================
174
+ // 时间相关
175
+ // ============================================================================
176
+ /**
177
+ * 合理范围内的时间戳
178
+ */
179
+ export const arbTimestamp = fc.date({
180
+ min: new Date('2024-01-01'),
181
+ max: new Date('2030-12-31'),
182
+ });
183
+ /**
184
+ * 过去的时间戳
185
+ */
186
+ export const arbPastTimestamp = fc.date({
187
+ min: new Date('2020-01-01'),
188
+ max: new Date(),
189
+ });
190
+ // ============================================================================
191
+ // LLM 相关
192
+ // ============================================================================
193
+ /**
194
+ * LLM 提供商
195
+ */
196
+ export const arbLLMProvider = fc.constantFrom('openai', 'claude', 'qwen', 'siliconflow', 'anyrouter');
197
+ /**
198
+ * LLM 任务类型
199
+ */
200
+ export const arbLLMTask = fc.constantFrom('intent_parsing', 'knowledge_retrieval', 'tool_calling', 'response_generation');
201
+ /**
202
+ * LLM 错误代码
203
+ */
204
+ export const arbLLMErrorCode = fc.constantFrom('AUTHENTICATION_ERROR', 'RATE_LIMIT_ERROR', 'INVALID_REQUEST', 'MODEL_NOT_FOUND', 'CONTEXT_LENGTH_EXCEEDED', 'CONTENT_FILTER', 'TIMEOUT', 'NETWORK_ERROR', 'CANCELLED', 'UNKNOWN_ERROR');
205
+ /**
206
+ * 风险级别
207
+ */
208
+ export const arbRiskLevel = fc.constantFrom('low', 'medium', 'high');
209
+ /**
210
+ * 消息操作生成器
211
+ */
212
+ export const arbMessageOperation = fc.record({
213
+ type: fc.constantFrom('user', 'assistant', 'system'),
214
+ content: arbMessageContent,
215
+ });
216
+ /**
217
+ * 消息操作序列
218
+ */
219
+ export const arbMessageOperations = fc.array(arbMessageOperation, {
220
+ minLength: 1,
221
+ maxLength: 20,
222
+ });
223
+ /**
224
+ * 工具调用
225
+ */
226
+ export const arbToolCall = fc.record({
227
+ id: fc.uuid().map((id) => `call_${id}`),
228
+ type: fc.constant('function'),
229
+ function: fc.record({
230
+ name: arbToolName,
231
+ arguments: fc.json(),
232
+ }),
233
+ });
234
+ /**
235
+ * 工具调用数组
236
+ */
237
+ export const arbToolCalls = fc.array(arbToolCall, { minLength: 1, maxLength: 5 });
238
+ /**
239
+ * LLM 响应
240
+ */
241
+ export const arbLLMResponse = fc.record({
242
+ content: arbNonEmptyString(500),
243
+ toolCalls: fc.option(arbToolCalls, { nil: undefined }),
244
+ });
245
+ // ============================================================================
246
+ // 辅助函数
247
+ // ============================================================================
248
+ /**
249
+ * 创建唯一标识符生成器
250
+ *
251
+ * @param prefix - 前缀
252
+ */
253
+ export function arbUniqueId(prefix) {
254
+ return fc.uuid().map((uuid) => `${prefix}_${uuid}`);
255
+ }
256
+ /**
257
+ * 创建带索引的唯一标识符生成器
258
+ *
259
+ * @param prefix - 前缀
260
+ */
261
+ export function arbIndexedId(prefix) {
262
+ return fc.integer({ min: 0, max: 999999 }).map((i) => `${prefix}_${i}`);
263
+ }
264
+ /**
265
+ * 创建枚举生成器
266
+ *
267
+ * @param values - 枚举值数组
268
+ */
269
+ export function arbEnum(...values) {
270
+ return fc.constantFrom(...values);
271
+ }
272
+ /**
273
+ * 创建可选值生成器
274
+ *
275
+ * @param arb - 基础生成器
276
+ */
277
+ export function arbOptional(arb) {
278
+ return fc.option(arb, { nil: undefined });
279
+ }
280
+ //# sourceMappingURL=arbitraries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arbitraries.js","sourceRoot":"","sources":["../../src/test-utils/arbitraries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * 测试清理工具
3
+ *
4
+ * 确保测试后资源被正确清理,避免测试间的状态污染
5
+ */
6
+ /**
7
+ * 清理函数类型
8
+ */
9
+ export type CleanupFn = () => void | Promise<void>;
10
+ /**
11
+ * 清理管理器
12
+ *
13
+ * 管理测试清理函数的注册和执行
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const cleanup = new CleanupManager();
18
+ *
19
+ * // 注册清理函数
20
+ * cleanup.register(() => store.clear());
21
+ * cleanup.register(() => connection.close());
22
+ *
23
+ * // 测试结束后执行清理
24
+ * await cleanup.cleanup();
25
+ * ```
26
+ */
27
+ export declare class CleanupManager {
28
+ private cleanupFns;
29
+ private cleaned;
30
+ /**
31
+ * 注册清理函数
32
+ *
33
+ * @param fn - 清理函数
34
+ * @returns this(支持链式调用)
35
+ */
36
+ register(fn: CleanupFn): this;
37
+ /**
38
+ * 执行所有清理函数
39
+ *
40
+ * 清理函数按注册的逆序执行(后注册的先清理)
41
+ * 即使某个清理函数失败,也会继续执行其他清理函数
42
+ *
43
+ * @throws AggregateError 如果有清理函数失败
44
+ */
45
+ cleanup(): Promise<void>;
46
+ /**
47
+ * 重置清理管理器
48
+ *
49
+ * 清除所有已注册的清理函数,允许重新使用
50
+ */
51
+ reset(): void;
52
+ /**
53
+ * 获取已注册的清理函数数量
54
+ */
55
+ get count(): number;
56
+ /**
57
+ * 检查是否已执行清理
58
+ */
59
+ get isCleaned(): boolean;
60
+ }
61
+ /**
62
+ * 创建带自动清理的测试上下文
63
+ *
64
+ * @param setup - 设置函数,接收 CleanupManager 并返回测试上下文
65
+ * @returns 异步函数,执行设置并在完成后自动清理
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * const runTest = withCleanup(async (cleanup) => {
70
+ * const store = new KnowledgeStore();
71
+ * cleanup.register(() => store.clear());
72
+ * return store;
73
+ * });
74
+ *
75
+ * const store = await runTest();
76
+ * // 使用 store...
77
+ * // 函数返回后自动清理
78
+ * ```
79
+ */
80
+ export declare function withCleanup<T>(setup: (cleanup: CleanupManager) => T | Promise<T>): () => Promise<{
81
+ result: T;
82
+ cleanup: () => Promise<void>;
83
+ }>;
84
+ /**
85
+ * 创建测试夹具
86
+ *
87
+ * 提供 setup 和 teardown 的便捷封装
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const fixture = createTestFixture(
92
+ * async () => {
93
+ * const store = new KnowledgeStore();
94
+ * await store.initialize();
95
+ * return store;
96
+ * },
97
+ * async (store) => {
98
+ * await store.clear();
99
+ * await store.close();
100
+ * }
101
+ * );
102
+ *
103
+ * // 在测试中使用
104
+ * const store = await fixture.setup();
105
+ * // ... 测试代码
106
+ * await fixture.teardown(store);
107
+ * ```
108
+ */
109
+ export declare function createTestFixture<T>(setup: () => T | Promise<T>, teardown: (instance: T) => void | Promise<void>): {
110
+ setup: () => Promise<T>;
111
+ teardown: (instance: T) => Promise<void>;
112
+ run: <R>(fn: (instance: T) => R | Promise<R>) => Promise<R>;
113
+ };
114
+ /**
115
+ * 资源池
116
+ *
117
+ * 管理可重用的测试资源
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const connectionPool = new ResourcePool(
122
+ * () => createConnection(),
123
+ * (conn) => conn.close()
124
+ * );
125
+ *
126
+ * const conn = await connectionPool.acquire();
127
+ * // 使用连接...
128
+ * await connectionPool.release(conn);
129
+ *
130
+ * // 测试结束后清理所有资源
131
+ * await connectionPool.cleanup();
132
+ * ```
133
+ */
134
+ export declare class ResourcePool<T> {
135
+ private available;
136
+ private inUse;
137
+ private createFn;
138
+ private destroyFn;
139
+ constructor(create: () => T | Promise<T>, destroy: (resource: T) => void | Promise<void>);
140
+ /**
141
+ * 获取资源
142
+ */
143
+ acquire(): Promise<T>;
144
+ /**
145
+ * 释放资源
146
+ */
147
+ release(resource: T): void;
148
+ /**
149
+ * 清理所有资源
150
+ */
151
+ cleanup(): Promise<void>;
152
+ /**
153
+ * 获取池状态
154
+ */
155
+ get stats(): {
156
+ available: number;
157
+ inUse: number;
158
+ };
159
+ }
160
+ /**
161
+ * 延迟执行器
162
+ *
163
+ * 收集操作并在最后批量执行
164
+ */
165
+ export declare class DeferredExecutor {
166
+ private operations;
167
+ /**
168
+ * 添加延迟操作
169
+ */
170
+ defer(operation: () => void | Promise<void>): this;
171
+ /**
172
+ * 执行所有延迟操作
173
+ */
174
+ execute(): Promise<void>;
175
+ /**
176
+ * 清除所有待执行操作
177
+ */
178
+ clear(): void;
179
+ /**
180
+ * 获取待执行操作数量
181
+ */
182
+ get count(): number;
183
+ }
184
+ //# sourceMappingURL=cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/test-utils/cleanup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,OAAO,CAAS;IAExB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAQ7B;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB9B;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,KAAK,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACjD,MAAM,OAAO,CAAC;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAS5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,KAAK,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC9C;IACD,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7D,CAaA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,YAAY,CAAC,CAAC;IACzB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,SAAS,CAAwC;gBAE7C,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxF;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC;IAS3B;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI;IAO1B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB9B;;OAEG;IACH,IAAI,KAAK,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAKhD;CACF;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAyC;IAE3D;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKlD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;CACF"}