tuplet 2.7.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 (319) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +136 -0
  3. package/dist/agent.d.ts +46 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +393 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/built-in-agents/explore.d.ts +9 -0
  8. package/dist/built-in-agents/explore.d.ts.map +1 -0
  9. package/dist/built-in-agents/explore.js +40 -0
  10. package/dist/built-in-agents/explore.js.map +1 -0
  11. package/dist/built-in-agents/index.d.ts +15 -0
  12. package/dist/built-in-agents/index.d.ts.map +1 -0
  13. package/dist/built-in-agents/index.js +19 -0
  14. package/dist/built-in-agents/index.js.map +1 -0
  15. package/dist/built-in-agents/plan.d.ts +10 -0
  16. package/dist/built-in-agents/plan.d.ts.map +1 -0
  17. package/dist/built-in-agents/plan.js +62 -0
  18. package/dist/built-in-agents/plan.js.map +1 -0
  19. package/dist/built-in-agents/worker.d.ts +9 -0
  20. package/dist/built-in-agents/worker.d.ts.map +1 -0
  21. package/dist/built-in-agents/worker.js +53 -0
  22. package/dist/built-in-agents/worker.js.map +1 -0
  23. package/dist/constants.d.ts +7 -0
  24. package/dist/constants.d.ts.map +1 -0
  25. package/dist/constants.js +18 -0
  26. package/dist/constants.js.map +1 -0
  27. package/dist/context-manager.d.ts +65 -0
  28. package/dist/context-manager.d.ts.map +1 -0
  29. package/dist/context-manager.js +272 -0
  30. package/dist/context-manager.js.map +1 -0
  31. package/dist/context-manager.test.d.ts +2 -0
  32. package/dist/context-manager.test.d.ts.map +1 -0
  33. package/dist/context-manager.test.js +394 -0
  34. package/dist/context-manager.test.js.map +1 -0
  35. package/dist/executor.d.ts +29 -0
  36. package/dist/executor.d.ts.map +1 -0
  37. package/dist/executor.js +399 -0
  38. package/dist/executor.js.map +1 -0
  39. package/dist/index.d.ts +24 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +40 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/prompt/index.d.ts +9 -0
  44. package/dist/prompt/index.d.ts.map +1 -0
  45. package/dist/prompt/index.js +10 -0
  46. package/dist/prompt/index.js.map +1 -0
  47. package/dist/prompt/main-agent-builder.d.ts +81 -0
  48. package/dist/prompt/main-agent-builder.d.ts.map +1 -0
  49. package/dist/prompt/main-agent-builder.js +287 -0
  50. package/dist/prompt/main-agent-builder.js.map +1 -0
  51. package/dist/prompt/sub-agent-builder.d.ts +133 -0
  52. package/dist/prompt/sub-agent-builder.d.ts.map +1 -0
  53. package/dist/prompt/sub-agent-builder.js +337 -0
  54. package/dist/prompt/sub-agent-builder.js.map +1 -0
  55. package/dist/prompt/templates.d.ts +87 -0
  56. package/dist/prompt/templates.d.ts.map +1 -0
  57. package/dist/prompt/templates.js +343 -0
  58. package/dist/prompt/templates.js.map +1 -0
  59. package/dist/prompt/types.d.ts +159 -0
  60. package/dist/prompt/types.d.ts.map +1 -0
  61. package/dist/prompt/types.js +5 -0
  62. package/dist/prompt/types.js.map +1 -0
  63. package/dist/prompt.d.ts +32 -0
  64. package/dist/prompt.d.ts.map +1 -0
  65. package/dist/prompt.js +86 -0
  66. package/dist/prompt.js.map +1 -0
  67. package/dist/providers/dataset/base.d.ts +74 -0
  68. package/dist/providers/dataset/base.d.ts.map +1 -0
  69. package/dist/providers/dataset/base.js +7 -0
  70. package/dist/providers/dataset/base.js.map +1 -0
  71. package/dist/providers/dataset/index.d.ts +8 -0
  72. package/dist/providers/dataset/index.d.ts.map +1 -0
  73. package/dist/providers/dataset/index.js +8 -0
  74. package/dist/providers/dataset/index.js.map +1 -0
  75. package/dist/providers/dataset/recorder.d.ts +46 -0
  76. package/dist/providers/dataset/recorder.d.ts.map +1 -0
  77. package/dist/providers/dataset/recorder.js +105 -0
  78. package/dist/providers/dataset/recorder.js.map +1 -0
  79. package/dist/providers/dataset/replayer.d.ts +46 -0
  80. package/dist/providers/dataset/replayer.d.ts.map +1 -0
  81. package/dist/providers/dataset/replayer.js +163 -0
  82. package/dist/providers/dataset/replayer.js.map +1 -0
  83. package/dist/providers/dataset/tester.d.ts +89 -0
  84. package/dist/providers/dataset/tester.d.ts.map +1 -0
  85. package/dist/providers/dataset/tester.js +143 -0
  86. package/dist/providers/dataset/tester.js.map +1 -0
  87. package/dist/providers/env/memory.d.ts +14 -0
  88. package/dist/providers/env/memory.d.ts.map +1 -0
  89. package/dist/providers/env/memory.js +19 -0
  90. package/dist/providers/env/memory.js.map +1 -0
  91. package/dist/providers/index.d.ts +12 -0
  92. package/dist/providers/index.d.ts.map +1 -0
  93. package/dist/providers/index.js +10 -0
  94. package/dist/providers/index.js.map +1 -0
  95. package/dist/providers/llm/base.d.ts +7 -0
  96. package/dist/providers/llm/base.d.ts.map +1 -0
  97. package/dist/providers/llm/base.js +7 -0
  98. package/dist/providers/llm/base.js.map +1 -0
  99. package/dist/providers/llm/claude.d.ts +32 -0
  100. package/dist/providers/llm/claude.d.ts.map +1 -0
  101. package/dist/providers/llm/claude.js +171 -0
  102. package/dist/providers/llm/claude.js.map +1 -0
  103. package/dist/providers/llm/openai.d.ts +26 -0
  104. package/dist/providers/llm/openai.d.ts.map +1 -0
  105. package/dist/providers/llm/openai.js +174 -0
  106. package/dist/providers/llm/openai.js.map +1 -0
  107. package/dist/providers/llm/openrouter.d.ts +43 -0
  108. package/dist/providers/llm/openrouter.d.ts.map +1 -0
  109. package/dist/providers/llm/openrouter.js +288 -0
  110. package/dist/providers/llm/openrouter.js.map +1 -0
  111. package/dist/providers/logger/base.d.ts +7 -0
  112. package/dist/providers/logger/base.d.ts.map +1 -0
  113. package/dist/providers/logger/base.js +7 -0
  114. package/dist/providers/logger/base.js.map +1 -0
  115. package/dist/providers/logger/console.d.ts +29 -0
  116. package/dist/providers/logger/console.d.ts.map +1 -0
  117. package/dist/providers/logger/console.js +70 -0
  118. package/dist/providers/logger/console.js.map +1 -0
  119. package/dist/providers/repository/base.d.ts +7 -0
  120. package/dist/providers/repository/base.d.ts.map +1 -0
  121. package/dist/providers/repository/base.js +7 -0
  122. package/dist/providers/repository/base.js.map +1 -0
  123. package/dist/providers/repository/memory.d.ts +21 -0
  124. package/dist/providers/repository/memory.d.ts.map +1 -0
  125. package/dist/providers/repository/memory.js +50 -0
  126. package/dist/providers/repository/memory.js.map +1 -0
  127. package/dist/providers/workspace/file.d.ts +26 -0
  128. package/dist/providers/workspace/file.d.ts.map +1 -0
  129. package/dist/providers/workspace/file.js +151 -0
  130. package/dist/providers/workspace/file.js.map +1 -0
  131. package/dist/providers/workspace/index.d.ts +7 -0
  132. package/dist/providers/workspace/index.d.ts.map +1 -0
  133. package/dist/providers/workspace/index.js +6 -0
  134. package/dist/providers/workspace/index.js.map +1 -0
  135. package/dist/providers/workspace/memory.d.ts +26 -0
  136. package/dist/providers/workspace/memory.d.ts.map +1 -0
  137. package/dist/providers/workspace/memory.js +136 -0
  138. package/dist/providers/workspace/memory.js.map +1 -0
  139. package/dist/providers/workspace/types.d.ts +27 -0
  140. package/dist/providers/workspace/types.d.ts.map +1 -0
  141. package/dist/providers/workspace/types.js +8 -0
  142. package/dist/providers/workspace/types.js.map +1 -0
  143. package/dist/providers/workspace/workspace-provider.test.d.ts +2 -0
  144. package/dist/providers/workspace/workspace-provider.test.d.ts.map +1 -0
  145. package/dist/providers/workspace/workspace-provider.test.js +250 -0
  146. package/dist/providers/workspace/workspace-provider.test.js.map +1 -0
  147. package/dist/shell/commands/browse.d.ts +6 -0
  148. package/dist/shell/commands/browse.d.ts.map +1 -0
  149. package/dist/shell/commands/browse.js +158 -0
  150. package/dist/shell/commands/browse.js.map +1 -0
  151. package/dist/shell/commands/cat.d.ts +6 -0
  152. package/dist/shell/commands/cat.d.ts.map +1 -0
  153. package/dist/shell/commands/cat.js +104 -0
  154. package/dist/shell/commands/cat.js.map +1 -0
  155. package/dist/shell/commands/curl.d.ts +6 -0
  156. package/dist/shell/commands/curl.d.ts.map +1 -0
  157. package/dist/shell/commands/curl.js +190 -0
  158. package/dist/shell/commands/curl.js.map +1 -0
  159. package/dist/shell/commands/date.d.ts +6 -0
  160. package/dist/shell/commands/date.d.ts.map +1 -0
  161. package/dist/shell/commands/date.js +151 -0
  162. package/dist/shell/commands/date.js.map +1 -0
  163. package/dist/shell/commands/echo.d.ts +6 -0
  164. package/dist/shell/commands/echo.d.ts.map +1 -0
  165. package/dist/shell/commands/echo.js +48 -0
  166. package/dist/shell/commands/echo.js.map +1 -0
  167. package/dist/shell/commands/env.d.ts +8 -0
  168. package/dist/shell/commands/env.d.ts.map +1 -0
  169. package/dist/shell/commands/env.js +41 -0
  170. package/dist/shell/commands/env.js.map +1 -0
  171. package/dist/shell/commands/file.d.ts +6 -0
  172. package/dist/shell/commands/file.d.ts.map +1 -0
  173. package/dist/shell/commands/file.js +213 -0
  174. package/dist/shell/commands/file.js.map +1 -0
  175. package/dist/shell/commands/find.d.ts +6 -0
  176. package/dist/shell/commands/find.d.ts.map +1 -0
  177. package/dist/shell/commands/find.js +100 -0
  178. package/dist/shell/commands/find.js.map +1 -0
  179. package/dist/shell/commands/grep.d.ts +6 -0
  180. package/dist/shell/commands/grep.d.ts.map +1 -0
  181. package/dist/shell/commands/grep.js +229 -0
  182. package/dist/shell/commands/grep.js.map +1 -0
  183. package/dist/shell/commands/head.d.ts +6 -0
  184. package/dist/shell/commands/head.d.ts.map +1 -0
  185. package/dist/shell/commands/head.js +88 -0
  186. package/dist/shell/commands/head.js.map +1 -0
  187. package/dist/shell/commands/index.d.ts +25 -0
  188. package/dist/shell/commands/index.d.ts.map +1 -0
  189. package/dist/shell/commands/index.js +43 -0
  190. package/dist/shell/commands/index.js.map +1 -0
  191. package/dist/shell/commands/jq.d.ts +8 -0
  192. package/dist/shell/commands/jq.d.ts.map +1 -0
  193. package/dist/shell/commands/jq.js +233 -0
  194. package/dist/shell/commands/jq.js.map +1 -0
  195. package/dist/shell/commands/ls.d.ts +6 -0
  196. package/dist/shell/commands/ls.d.ts.map +1 -0
  197. package/dist/shell/commands/ls.js +88 -0
  198. package/dist/shell/commands/ls.js.map +1 -0
  199. package/dist/shell/commands/mkdir.d.ts +6 -0
  200. package/dist/shell/commands/mkdir.d.ts.map +1 -0
  201. package/dist/shell/commands/mkdir.js +43 -0
  202. package/dist/shell/commands/mkdir.js.map +1 -0
  203. package/dist/shell/commands/rm.d.ts +6 -0
  204. package/dist/shell/commands/rm.d.ts.map +1 -0
  205. package/dist/shell/commands/rm.js +64 -0
  206. package/dist/shell/commands/rm.js.map +1 -0
  207. package/dist/shell/commands/sed.d.ts +6 -0
  208. package/dist/shell/commands/sed.d.ts.map +1 -0
  209. package/dist/shell/commands/sed.js +414 -0
  210. package/dist/shell/commands/sed.js.map +1 -0
  211. package/dist/shell/commands/sort.d.ts +6 -0
  212. package/dist/shell/commands/sort.d.ts.map +1 -0
  213. package/dist/shell/commands/sort.js +109 -0
  214. package/dist/shell/commands/sort.js.map +1 -0
  215. package/dist/shell/commands/tail.d.ts +6 -0
  216. package/dist/shell/commands/tail.d.ts.map +1 -0
  217. package/dist/shell/commands/tail.js +68 -0
  218. package/dist/shell/commands/tail.js.map +1 -0
  219. package/dist/shell/commands/wc.d.ts +6 -0
  220. package/dist/shell/commands/wc.d.ts.map +1 -0
  221. package/dist/shell/commands/wc.js +86 -0
  222. package/dist/shell/commands/wc.js.map +1 -0
  223. package/dist/shell/index.d.ts +10 -0
  224. package/dist/shell/index.d.ts.map +1 -0
  225. package/dist/shell/index.js +10 -0
  226. package/dist/shell/index.js.map +1 -0
  227. package/dist/shell/limits.d.ts +5 -0
  228. package/dist/shell/limits.d.ts.map +1 -0
  229. package/dist/shell/limits.js +5 -0
  230. package/dist/shell/limits.js.map +1 -0
  231. package/dist/shell/parser.d.ts +8 -0
  232. package/dist/shell/parser.d.ts.map +1 -0
  233. package/dist/shell/parser.js +307 -0
  234. package/dist/shell/parser.js.map +1 -0
  235. package/dist/shell/path-validation.d.ts +35 -0
  236. package/dist/shell/path-validation.d.ts.map +1 -0
  237. package/dist/shell/path-validation.js +81 -0
  238. package/dist/shell/path-validation.js.map +1 -0
  239. package/dist/shell/shell.d.ts +66 -0
  240. package/dist/shell/shell.d.ts.map +1 -0
  241. package/dist/shell/shell.js +301 -0
  242. package/dist/shell/shell.js.map +1 -0
  243. package/dist/shell/shell.test.d.ts +2 -0
  244. package/dist/shell/shell.test.d.ts.map +1 -0
  245. package/dist/shell/shell.test.js +1088 -0
  246. package/dist/shell/shell.test.js.map +1 -0
  247. package/dist/shell/types.d.ts +82 -0
  248. package/dist/shell/types.d.ts.map +1 -0
  249. package/dist/shell/types.js +5 -0
  250. package/dist/shell/types.js.map +1 -0
  251. package/dist/summarizer.d.ts +28 -0
  252. package/dist/summarizer.d.ts.map +1 -0
  253. package/dist/summarizer.js +136 -0
  254. package/dist/summarizer.js.map +1 -0
  255. package/dist/summarizer.test.d.ts +2 -0
  256. package/dist/summarizer.test.d.ts.map +1 -0
  257. package/dist/summarizer.test.js +192 -0
  258. package/dist/summarizer.test.js.map +1 -0
  259. package/dist/tools/ask-user.d.ts +11 -0
  260. package/dist/tools/ask-user.d.ts.map +1 -0
  261. package/dist/tools/ask-user.js +35 -0
  262. package/dist/tools/ask-user.js.map +1 -0
  263. package/dist/tools/index.d.ts +11 -0
  264. package/dist/tools/index.d.ts.map +1 -0
  265. package/dist/tools/index.js +18 -0
  266. package/dist/tools/index.js.map +1 -0
  267. package/dist/tools/output.d.ts +15 -0
  268. package/dist/tools/output.d.ts.map +1 -0
  269. package/dist/tools/output.js +40 -0
  270. package/dist/tools/output.js.map +1 -0
  271. package/dist/tools/shell.d.ts +13 -0
  272. package/dist/tools/shell.d.ts.map +1 -0
  273. package/dist/tools/shell.js +166 -0
  274. package/dist/tools/shell.js.map +1 -0
  275. package/dist/tools/sub-agent.d.ts +25 -0
  276. package/dist/tools/sub-agent.d.ts.map +1 -0
  277. package/dist/tools/sub-agent.js +312 -0
  278. package/dist/tools/sub-agent.js.map +1 -0
  279. package/dist/tools/tasks.d.ts +170 -0
  280. package/dist/tools/tasks.d.ts.map +1 -0
  281. package/dist/tools/tasks.js +947 -0
  282. package/dist/tools/tasks.js.map +1 -0
  283. package/dist/trace/builder.d.ts +54 -0
  284. package/dist/trace/builder.d.ts.map +1 -0
  285. package/dist/trace/builder.js +229 -0
  286. package/dist/trace/builder.js.map +1 -0
  287. package/dist/trace/console.d.ts +45 -0
  288. package/dist/trace/console.d.ts.map +1 -0
  289. package/dist/trace/console.js +143 -0
  290. package/dist/trace/console.js.map +1 -0
  291. package/dist/trace/index.d.ts +11 -0
  292. package/dist/trace/index.d.ts.map +1 -0
  293. package/dist/trace/index.js +11 -0
  294. package/dist/trace/index.js.map +1 -0
  295. package/dist/trace/openrouter-pricing.d.ts +9 -0
  296. package/dist/trace/openrouter-pricing.d.ts.map +1 -0
  297. package/dist/trace/openrouter-pricing.js +321 -0
  298. package/dist/trace/openrouter-pricing.js.map +1 -0
  299. package/dist/trace/pricing.d.ts +13 -0
  300. package/dist/trace/pricing.d.ts.map +1 -0
  301. package/dist/trace/pricing.js +41 -0
  302. package/dist/trace/pricing.js.map +1 -0
  303. package/dist/trace/types.d.ts +142 -0
  304. package/dist/trace/types.d.ts.map +1 -0
  305. package/dist/trace/types.js +16 -0
  306. package/dist/trace/types.js.map +1 -0
  307. package/dist/trace.d.ts +5 -0
  308. package/dist/trace.d.ts.map +1 -0
  309. package/dist/trace.js +5 -0
  310. package/dist/trace.js.map +1 -0
  311. package/dist/types.d.ts +382 -0
  312. package/dist/types.d.ts.map +1 -0
  313. package/dist/types.js +5 -0
  314. package/dist/types.js.map +1 -0
  315. package/dist/workspace.d.ts +287 -0
  316. package/dist/workspace.d.ts.map +1 -0
  317. package/dist/workspace.js +560 -0
  318. package/dist/workspace.js.map +1 -0
  319. package/package.json +47 -0
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Dataset Provider - Type Definitions
3
+ *
4
+ * Types for recording and replaying Tuplet runs.
5
+ */
6
+ import type { JSONSchema, Message, ToolCallLog, TodoItem, AgentStatus, ContextStrategy } from '../../types.js';
7
+ import type { Trace } from '../../trace/types.js';
8
+ /**
9
+ * Serialized tool (without execute function)
10
+ */
11
+ export interface SerializedTool {
12
+ name: string;
13
+ description: string;
14
+ parameters: JSONSchema;
15
+ }
16
+ /**
17
+ * Serialized sub-agent configuration (without non-serializable fields)
18
+ */
19
+ export interface SerializedSubAgentConfig {
20
+ name: string;
21
+ description: string;
22
+ systemPrompt: string;
23
+ tools: SerializedTool[];
24
+ model?: string;
25
+ maxIterations?: number;
26
+ inputSchema?: JSONSchema;
27
+ outputSchema?: JSONSchema;
28
+ }
29
+ /**
30
+ * Serialized Tuplet configuration
31
+ */
32
+ export interface RunRecordConfig {
33
+ role: string;
34
+ maxIterations?: number;
35
+ maxContextTokens?: number;
36
+ contextStrategy?: ContextStrategy;
37
+ agentName?: string;
38
+ tools: SerializedTool[];
39
+ agents?: SerializedSubAgentConfig[];
40
+ }
41
+ /**
42
+ * Run result data
43
+ */
44
+ export interface RunRecordResult {
45
+ response: string;
46
+ status: AgentStatus;
47
+ history: Message[];
48
+ toolCalls: ToolCallLog[];
49
+ thinking?: string[];
50
+ todos?: TodoItem[];
51
+ interrupted?: {
52
+ reason: string;
53
+ iterationsCompleted: number;
54
+ };
55
+ trace?: Trace;
56
+ }
57
+ /**
58
+ * Complete run record saved to JSON
59
+ */
60
+ export interface RunRecord {
61
+ /** Unique run identifier */
62
+ id: string;
63
+ /** Unix timestamp when run was recorded */
64
+ timestamp: number;
65
+ /** User's input message that started the run */
66
+ inputMessage: string;
67
+ /** Initial history before the run (for replay/testing) */
68
+ initialHistory: Message[];
69
+ /** Serialized Tuplet configuration */
70
+ config: RunRecordConfig;
71
+ /** Run result data */
72
+ result: RunRecordResult;
73
+ }
74
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/providers/dataset/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,WAAW,EACX,QAAQ,EACR,WAAW,EACX,eAAe,EAChB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,UAAU,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,YAAY,CAAC,EAAE,UAAU,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,MAAM,CAAC,EAAE,wBAAwB,EAAE,CAAA;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,WAAW,CAAA;IACnB,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;IAClB,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,mBAAmB,EAAE,MAAM,CAAA;KAC5B,CAAA;IACD,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAA;IACpB,0DAA0D;IAC1D,cAAc,EAAE,OAAO,EAAE,CAAA;IACzB,sCAAsC;IACtC,MAAM,EAAE,eAAe,CAAA;IACvB,sBAAsB;IACtB,MAAM,EAAE,eAAe,CAAA;CACxB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Dataset Provider - Type Definitions
3
+ *
4
+ * Types for recording and replaying Tuplet runs.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/providers/dataset/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Dataset Provider Exports
3
+ */
4
+ export * from './base.js';
5
+ export { RunRecorder, RunRecorderConfig } from './recorder.js';
6
+ export { RunReplayer } from './replayer.js';
7
+ export { RunTester, RunTesterConfig, TestResult, TestSummary } from './tester.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/dataset/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Dataset Provider Exports
3
+ */
4
+ export * from './base.js';
5
+ export { RunRecorder } from './recorder.js';
6
+ export { RunReplayer } from './replayer.js';
7
+ export { RunTester } from './tester.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/dataset/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,WAAW,EAAqB,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,SAAS,EAA4C,MAAM,aAAa,CAAA"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Run Recorder
3
+ *
4
+ * Records Tuplet run configurations and results to JSON files.
5
+ */
6
+ import type { TupletConfig, AgentResult, Message } from '../../types.js';
7
+ /**
8
+ * Configuration for RunRecorder
9
+ */
10
+ export interface RunRecorderConfig {
11
+ /** Directory to save JSON files */
12
+ outputDir: string;
13
+ }
14
+ /**
15
+ * Records Tuplet runs to JSON files for later analysis and replay
16
+ */
17
+ export declare class RunRecorder {
18
+ private outputDir;
19
+ constructor(config: RunRecorderConfig);
20
+ /**
21
+ * Record a run to a JSON file
22
+ * @param inputMessage - The user's input message
23
+ * @param initialHistory - The history before the run started
24
+ * @param config - The Tuplet configuration used for the run
25
+ * @param result - The result from Tuplet.run()
26
+ * @returns The file path where the record was saved
27
+ */
28
+ record(inputMessage: string, initialHistory: Message[], config: TupletConfig, result: AgentResult): Promise<string>;
29
+ /**
30
+ * Serialize TupletConfig to a JSON-safe format
31
+ */
32
+ private serializeConfig;
33
+ /**
34
+ * Serialize a Tool to remove the execute function
35
+ */
36
+ private serializeTool;
37
+ /**
38
+ * Serialize a SubAgentConfig to remove non-serializable fields
39
+ */
40
+ private serializeSubAgent;
41
+ /**
42
+ * Generate a unique run ID
43
+ */
44
+ private generateRunId;
45
+ }
46
+ //# sourceMappingURL=recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../../src/providers/dataset/recorder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAwB,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAQ9F;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAQ;gBAEb,MAAM,EAAE,iBAAiB;IAIrC;;;;;;;OAOG;IACG,MAAM,CACV,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,OAAO,EAAE,EACzB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC;IAsClB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,aAAa;CAKtB"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Run Recorder
3
+ *
4
+ * Records Tuplet run configurations and results to JSON files.
5
+ */
6
+ import { writeFile, mkdir } from 'fs/promises';
7
+ import { join } from 'path';
8
+ /**
9
+ * Records Tuplet runs to JSON files for later analysis and replay
10
+ */
11
+ export class RunRecorder {
12
+ outputDir;
13
+ constructor(config) {
14
+ this.outputDir = config.outputDir;
15
+ }
16
+ /**
17
+ * Record a run to a JSON file
18
+ * @param inputMessage - The user's input message
19
+ * @param initialHistory - The history before the run started
20
+ * @param config - The Tuplet configuration used for the run
21
+ * @param result - The result from Tuplet.run()
22
+ * @returns The file path where the record was saved
23
+ */
24
+ async record(inputMessage, initialHistory, config, result) {
25
+ const runId = this.generateRunId();
26
+ const timestamp = Date.now();
27
+ const record = {
28
+ id: runId,
29
+ timestamp,
30
+ inputMessage,
31
+ initialHistory,
32
+ config: this.serializeConfig(config),
33
+ result: {
34
+ response: result.response,
35
+ status: result.status,
36
+ history: result.history,
37
+ toolCalls: result.toolCalls,
38
+ thinking: result.thinking,
39
+ todos: result.todos,
40
+ interrupted: result.interrupted,
41
+ trace: result.trace
42
+ }
43
+ };
44
+ // Ensure output directory exists
45
+ await mkdir(this.outputDir, { recursive: true });
46
+ // Save to file, stripping circular refs (parent/children)
47
+ const filePath = join(this.outputDir, `${runId}.json`);
48
+ const json = JSON.stringify(record, (key, value) => {
49
+ if (key === 'parent' || key === 'children') {
50
+ return undefined;
51
+ }
52
+ return value;
53
+ }, 2);
54
+ await writeFile(filePath, json, 'utf-8');
55
+ return filePath;
56
+ }
57
+ /**
58
+ * Serialize TupletConfig to a JSON-safe format
59
+ */
60
+ serializeConfig(config) {
61
+ return {
62
+ role: config.role,
63
+ maxIterations: config.maxIterations,
64
+ maxContextTokens: config.maxContextTokens,
65
+ contextStrategy: config.contextStrategy,
66
+ agentName: config.agentName,
67
+ tools: config.tools.map(tool => this.serializeTool(tool)),
68
+ agents: config.agents?.map(agent => this.serializeSubAgent(agent))
69
+ };
70
+ }
71
+ /**
72
+ * Serialize a Tool to remove the execute function
73
+ */
74
+ serializeTool(tool) {
75
+ return {
76
+ name: tool.name,
77
+ description: tool.description,
78
+ parameters: tool.parameters
79
+ };
80
+ }
81
+ /**
82
+ * Serialize a SubAgentConfig to remove non-serializable fields
83
+ */
84
+ serializeSubAgent(agent) {
85
+ return {
86
+ name: agent.name,
87
+ description: agent.description,
88
+ systemPrompt: agent.systemPrompt,
89
+ tools: agent.tools.map(tool => this.serializeTool(tool)),
90
+ model: agent.model,
91
+ maxIterations: agent.maxIterations,
92
+ inputSchema: agent.inputSchema,
93
+ outputSchema: agent.outputSchema
94
+ };
95
+ }
96
+ /**
97
+ * Generate a unique run ID
98
+ */
99
+ generateRunId() {
100
+ const timestamp = Date.now();
101
+ const random = Math.random().toString(36).slice(2, 8);
102
+ return `run_${timestamp}_${random}`;
103
+ }
104
+ }
105
+ //# sourceMappingURL=recorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.js","sourceRoot":"","sources":["../../../src/providers/dataset/recorder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Run Replayer
3
+ *
4
+ * Loads and displays saved run records.
5
+ */
6
+ import type { Message, ToolCallLog } from '../../types.js';
7
+ import type { Trace } from '../../trace/types.js';
8
+ import type { RunRecord, RunRecordConfig } from './base.js';
9
+ /**
10
+ * Loads and displays saved run records
11
+ */
12
+ export declare class RunReplayer {
13
+ /**
14
+ * Load a run record from a JSON file
15
+ */
16
+ load(filePath: string): Promise<RunRecord>;
17
+ /**
18
+ * Pretty print a run record to console
19
+ */
20
+ display(record: RunRecord): void;
21
+ /**
22
+ * Get the configuration from a run record
23
+ */
24
+ getConfig(record: RunRecord): RunRecordConfig;
25
+ /**
26
+ * Get the initial history from a run record (before the run started)
27
+ */
28
+ getInitialHistory(record: RunRecord): Message[];
29
+ /**
30
+ * Get the final message history from a run record (after the run completed)
31
+ */
32
+ getHistory(record: RunRecord): Message[];
33
+ /**
34
+ * Get the response from a run record
35
+ */
36
+ getResponse(record: RunRecord): string;
37
+ /**
38
+ * Get the tool calls from a run record
39
+ */
40
+ getToolCalls(record: RunRecord): ToolCallLog[];
41
+ /**
42
+ * Get the trace from a run record
43
+ */
44
+ getTrace(record: RunRecord): Trace | undefined;
45
+ }
46
+ //# sourceMappingURL=replayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replayer.d.ts","sourceRoot":"","sources":["../../../src/providers/dataset/replayer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3D;;GAEG;AACH,qBAAa,WAAW;IACtB;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAKhD;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAgHhC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,eAAe;IAI7C;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE;IAI/C;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE;IAIxC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAItC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,EAAE;IAI9C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,KAAK,GAAG,SAAS;CAG/C"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Run Replayer
3
+ *
4
+ * Loads and displays saved run records.
5
+ */
6
+ import { readFile } from 'fs/promises';
7
+ /**
8
+ * Loads and displays saved run records
9
+ */
10
+ export class RunReplayer {
11
+ /**
12
+ * Load a run record from a JSON file
13
+ */
14
+ async load(filePath) {
15
+ const content = await readFile(filePath, 'utf-8');
16
+ return JSON.parse(content);
17
+ }
18
+ /**
19
+ * Pretty print a run record to console
20
+ */
21
+ display(record) {
22
+ const timestamp = new Date(record.timestamp).toISOString();
23
+ console.log(`\n${'='.repeat(60)}`);
24
+ console.log(`Run Record: ${record.id}`);
25
+ console.log(`Timestamp: ${timestamp}`);
26
+ console.log(`${'='.repeat(60)}`);
27
+ // Configuration
28
+ console.log(`\n--- Configuration ---`);
29
+ const rolePreview = record.config.role.length > 200
30
+ ? record.config.role.slice(0, 200) + '...'
31
+ : record.config.role;
32
+ console.log(`Role: ${rolePreview}`);
33
+ console.log(`Max Iterations: ${record.config.maxIterations ?? 'default'}`);
34
+ console.log(`Max Context Tokens: ${record.config.maxContextTokens ?? 'default'}`);
35
+ console.log(`Context Strategy: ${record.config.contextStrategy ?? 'default'}`);
36
+ console.log(`Tools: ${record.config.tools.map(t => t.name).join(', ') || 'none'}`);
37
+ if (record.config.agents && record.config.agents.length > 0) {
38
+ console.log(`Sub-Agents: ${record.config.agents.map(a => a.name).join(', ')}`);
39
+ }
40
+ // Initial History
41
+ if (record.initialHistory && record.initialHistory.length > 0) {
42
+ console.log(`\n--- Initial History (${record.initialHistory.length} messages) ---`);
43
+ record.initialHistory.forEach((msg, i) => {
44
+ const roleLabel = `[${msg.role}]`;
45
+ let content;
46
+ if (typeof msg.content === 'string') {
47
+ content = msg.content;
48
+ }
49
+ else {
50
+ const textBlocks = msg.content
51
+ .filter(b => b.type === 'text')
52
+ .map(b => b.text);
53
+ content = textBlocks.join('\n') || '(non-text content)';
54
+ }
55
+ const contentPreview = content.length > 100 ? content.slice(0, 100) + '...' : content;
56
+ console.log(`${i + 1}. ${roleLabel}: ${contentPreview}`);
57
+ });
58
+ }
59
+ // Input
60
+ console.log(`\n--- Input ---`);
61
+ console.log(record.inputMessage);
62
+ // Result
63
+ console.log(`\n--- Result ---`);
64
+ console.log(`Status: ${record.result.status}`);
65
+ if (record.result.interrupted) {
66
+ console.log(`Interrupted: ${record.result.interrupted.reason} (after ${record.result.interrupted.iterationsCompleted} iterations)`);
67
+ }
68
+ console.log(`\nResponse:`);
69
+ console.log(record.result.response || '(empty)');
70
+ // Tool Calls
71
+ if (record.result.toolCalls.length > 0) {
72
+ console.log(`\n--- Tool Calls (${record.result.toolCalls.length}) ---`);
73
+ record.result.toolCalls.forEach((call, i) => {
74
+ const inputStr = JSON.stringify(call.input);
75
+ const inputPreview = inputStr.length > 50 ? inputStr.slice(0, 50) + '...' : inputStr;
76
+ const status = call.output.success ? 'success' : 'error';
77
+ console.log(`${i + 1}. ${call.name}(${inputPreview}) -> ${status} (${call.durationMs}ms)`);
78
+ });
79
+ }
80
+ // Todos
81
+ if (record.result.todos && record.result.todos.length > 0) {
82
+ console.log(`\n--- Todos (${record.result.todos.length}) ---`);
83
+ record.result.todos.forEach(todo => {
84
+ const statusIcon = todo.status === 'completed' ? '✓' : todo.status === 'in_progress' ? '→' : '○';
85
+ console.log(`${statusIcon} ${todo.content}`);
86
+ });
87
+ }
88
+ // Message History
89
+ console.log(`\n--- Message History (${record.result.history.length} messages) ---`);
90
+ record.result.history.forEach((msg, i) => {
91
+ const roleLabel = `[${msg.role}]`;
92
+ let content;
93
+ if (typeof msg.content === 'string') {
94
+ content = msg.content;
95
+ }
96
+ else {
97
+ // Content blocks
98
+ const textBlocks = msg.content
99
+ .filter(b => b.type === 'text')
100
+ .map(b => b.text);
101
+ const toolUseCount = msg.content.filter(b => b.type === 'tool_use').length;
102
+ const toolResultCount = msg.content.filter(b => b.type === 'tool_result').length;
103
+ content = textBlocks.join('\n');
104
+ if (toolUseCount > 0)
105
+ content += ` [${toolUseCount} tool_use]`;
106
+ if (toolResultCount > 0)
107
+ content += ` [${toolResultCount} tool_result]`;
108
+ }
109
+ const contentPreview = content.length > 100 ? content.slice(0, 100) + '...' : content;
110
+ console.log(`${i + 1}. ${roleLabel}: ${contentPreview}`);
111
+ });
112
+ // Trace summary
113
+ if (record.result.trace) {
114
+ console.log(`\n--- Trace Summary ---`);
115
+ console.log(`Total Cost: $${record.result.trace.totalCost.toFixed(4)}`);
116
+ console.log(`Input Tokens: ${record.result.trace.totalInputTokens}`);
117
+ console.log(`Output Tokens: ${record.result.trace.totalOutputTokens}`);
118
+ console.log(`LLM Calls: ${record.result.trace.totalLLMCalls}`);
119
+ console.log(`Tool Calls: ${record.result.trace.totalToolCalls}`);
120
+ if (record.result.trace.durationMs) {
121
+ console.log(`Duration: ${record.result.trace.durationMs}ms`);
122
+ }
123
+ }
124
+ console.log(`\n${'='.repeat(60)}\n`);
125
+ }
126
+ /**
127
+ * Get the configuration from a run record
128
+ */
129
+ getConfig(record) {
130
+ return record.config;
131
+ }
132
+ /**
133
+ * Get the initial history from a run record (before the run started)
134
+ */
135
+ getInitialHistory(record) {
136
+ return record.initialHistory;
137
+ }
138
+ /**
139
+ * Get the final message history from a run record (after the run completed)
140
+ */
141
+ getHistory(record) {
142
+ return record.result.history;
143
+ }
144
+ /**
145
+ * Get the response from a run record
146
+ */
147
+ getResponse(record) {
148
+ return record.result.response;
149
+ }
150
+ /**
151
+ * Get the tool calls from a run record
152
+ */
153
+ getToolCalls(record) {
154
+ return record.result.toolCalls;
155
+ }
156
+ /**
157
+ * Get the trace from a run record
158
+ */
159
+ getTrace(record) {
160
+ return record.result.trace;
161
+ }
162
+ }
163
+ //# sourceMappingURL=replayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replayer.js","sourceRoot":"","sources":["../../../src/providers/dataset/replayer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Run Tester
3
+ *
4
+ * Runs tests against recorded runs to verify agent behavior.
5
+ */
6
+ import type { Tuplet } from '../../agent.js';
7
+ import type { RunOptions, AgentResult } from '../../types.js';
8
+ import type { RunRecord } from './base.js';
9
+ /**
10
+ * Result of comparing a replay to a recorded run
11
+ */
12
+ export interface TestResult {
13
+ /** Run record ID */
14
+ runId: string;
15
+ /** Whether the test passed */
16
+ passed: boolean;
17
+ /** Input message that was tested */
18
+ inputMessage: string;
19
+ /** Expected response from recording */
20
+ expectedResponse: string;
21
+ /** Actual response from replay */
22
+ actualResponse: string;
23
+ /** Whether status matched */
24
+ statusMatch: boolean;
25
+ /** Whether tool call count matched */
26
+ toolCallCountMatch: boolean;
27
+ /** Whether response matched exactly */
28
+ responseMatch: boolean;
29
+ /** Error if test failed to run */
30
+ error?: string;
31
+ /** Duration of the replay in ms */
32
+ durationMs: number;
33
+ }
34
+ /**
35
+ * Summary of all test results
36
+ */
37
+ export interface TestSummary {
38
+ /** Total number of tests run */
39
+ total: number;
40
+ /** Number of passed tests */
41
+ passed: number;
42
+ /** Number of failed tests */
43
+ failed: number;
44
+ /** Individual test results */
45
+ results: TestResult[];
46
+ /** Total duration in ms */
47
+ durationMs: number;
48
+ }
49
+ /**
50
+ * Configuration for RunTester
51
+ */
52
+ export interface RunTesterConfig {
53
+ /** Directory containing recorded run JSON files */
54
+ runsDir: string;
55
+ /** Custom comparison function (optional) */
56
+ compareFn?: (expected: AgentResult, actual: AgentResult, record: RunRecord) => boolean;
57
+ /** Additional run options to pass to agent.run() */
58
+ runOptions?: Partial<RunOptions>;
59
+ /** Called before each test */
60
+ beforeEach?: (record: RunRecord) => Promise<void> | void;
61
+ /** Called after each test */
62
+ afterEach?: (result: TestResult, record: RunRecord) => Promise<void> | void;
63
+ }
64
+ /**
65
+ * Runs tests against recorded runs
66
+ */
67
+ export declare class RunTester {
68
+ private runsDir;
69
+ private replayer;
70
+ private config;
71
+ constructor(config: RunTesterConfig);
72
+ /**
73
+ * Run all tests in the runs directory
74
+ */
75
+ runAll(agent: Tuplet): Promise<TestSummary>;
76
+ /**
77
+ * Run a single test from a file
78
+ */
79
+ runOne(agent: Tuplet, filePath: string): Promise<TestResult>;
80
+ /**
81
+ * Get all run files in the directory
82
+ */
83
+ private getRunFiles;
84
+ /**
85
+ * Print test summary to console
86
+ */
87
+ static printSummary(summary: TestSummary): void;
88
+ }
89
+ //# sourceMappingURL=tester.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tester.d.ts","sourceRoot":"","sources":["../../../src/providers/dataset/tester.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAG1C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,8BAA8B;IAC9B,MAAM,EAAE,OAAO,CAAA;IACf,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,CAAA;IACxB,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,6BAA6B;IAC7B,WAAW,EAAE,OAAO,CAAA;IACpB,sCAAsC;IACtC,kBAAkB,EAAE,OAAO,CAAA;IAC3B,uCAAuC;IACvC,aAAa,EAAE,OAAO,CAAA;IACtB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,8BAA8B;IAC9B,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAA;IACf,4CAA4C;IAC5C,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAA;IACtF,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IAChC,8BAA8B;IAC9B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACxD,6BAA6B;IAC7B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAC5E;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,eAAe;IAMnC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAmBjD;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA6DlE;;OAEG;YACW,WAAW;IAQzB;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;CAmChD"}