superskill 0.2.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 (301) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +235 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +1158 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/brainstorm.d.ts +9 -0
  8. package/dist/commands/brainstorm.js +37 -0
  9. package/dist/commands/brainstorm.js.map +1 -0
  10. package/dist/commands/brainstorm.test.d.ts +1 -0
  11. package/dist/commands/brainstorm.test.js +110 -0
  12. package/dist/commands/brainstorm.test.js.map +1 -0
  13. package/dist/commands/context.d.ts +18 -0
  14. package/dist/commands/context.js +88 -0
  15. package/dist/commands/context.js.map +1 -0
  16. package/dist/commands/context.test.d.ts +1 -0
  17. package/dist/commands/context.test.js +230 -0
  18. package/dist/commands/context.test.js.map +1 -0
  19. package/dist/commands/decide.d.ts +12 -0
  20. package/dist/commands/decide.js +40 -0
  21. package/dist/commands/decide.js.map +1 -0
  22. package/dist/commands/decide.test.d.ts +1 -0
  23. package/dist/commands/decide.test.js +109 -0
  24. package/dist/commands/decide.test.js.map +1 -0
  25. package/dist/commands/graph.d.ts +15 -0
  26. package/dist/commands/graph.js +89 -0
  27. package/dist/commands/graph.js.map +1 -0
  28. package/dist/commands/graph.test.d.ts +1 -0
  29. package/dist/commands/graph.test.js +215 -0
  30. package/dist/commands/graph.test.js.map +1 -0
  31. package/dist/commands/init.d.ts +11 -0
  32. package/dist/commands/init.js +257 -0
  33. package/dist/commands/init.js.map +1 -0
  34. package/dist/commands/learn.d.ts +25 -0
  35. package/dist/commands/learn.js +92 -0
  36. package/dist/commands/learn.js.map +1 -0
  37. package/dist/commands/learn.test.d.ts +1 -0
  38. package/dist/commands/learn.test.js +241 -0
  39. package/dist/commands/learn.test.js.map +1 -0
  40. package/dist/commands/prune.d.ts +58 -0
  41. package/dist/commands/prune.js +246 -0
  42. package/dist/commands/prune.js.map +1 -0
  43. package/dist/commands/read.d.ts +8 -0
  44. package/dist/commands/read.js +7 -0
  45. package/dist/commands/read.js.map +1 -0
  46. package/dist/commands/read.test.d.ts +1 -0
  47. package/dist/commands/read.test.js +48 -0
  48. package/dist/commands/read.test.js.map +1 -0
  49. package/dist/commands/resume.d.ts +20 -0
  50. package/dist/commands/resume.js +141 -0
  51. package/dist/commands/resume.js.map +1 -0
  52. package/dist/commands/resume.test.d.ts +1 -0
  53. package/dist/commands/resume.test.js +243 -0
  54. package/dist/commands/resume.test.js.map +1 -0
  55. package/dist/commands/search.d.ts +8 -0
  56. package/dist/commands/search.js +25 -0
  57. package/dist/commands/search.js.map +1 -0
  58. package/dist/commands/search.test.d.ts +1 -0
  59. package/dist/commands/search.test.js +61 -0
  60. package/dist/commands/search.test.js.map +1 -0
  61. package/dist/commands/session.d.ts +22 -0
  62. package/dist/commands/session.js +79 -0
  63. package/dist/commands/session.js.map +1 -0
  64. package/dist/commands/session.test.d.ts +1 -0
  65. package/dist/commands/session.test.js +231 -0
  66. package/dist/commands/session.test.js.map +1 -0
  67. package/dist/commands/skill/catalog.d.ts +39 -0
  68. package/dist/commands/skill/catalog.js +260 -0
  69. package/dist/commands/skill/catalog.js.map +1 -0
  70. package/dist/commands/skill/index.d.ts +55 -0
  71. package/dist/commands/skill/index.js +82 -0
  72. package/dist/commands/skill/index.js.map +1 -0
  73. package/dist/commands/skill/index.test.d.ts +1 -0
  74. package/dist/commands/skill/index.test.js +137 -0
  75. package/dist/commands/skill/index.test.js.map +1 -0
  76. package/dist/commands/skill/install.d.ts +14 -0
  77. package/dist/commands/skill/install.js +108 -0
  78. package/dist/commands/skill/install.js.map +1 -0
  79. package/dist/commands/skill/install.test.d.ts +1 -0
  80. package/dist/commands/skill/install.test.js +225 -0
  81. package/dist/commands/skill/install.test.js.map +1 -0
  82. package/dist/commands/skill/list.d.ts +6 -0
  83. package/dist/commands/skill/list.js +5 -0
  84. package/dist/commands/skill/list.js.map +1 -0
  85. package/dist/commands/skill/list.test.d.ts +1 -0
  86. package/dist/commands/skill/list.test.js +101 -0
  87. package/dist/commands/skill/list.test.js.map +1 -0
  88. package/dist/commands/skill/marketplace.d.ts +121 -0
  89. package/dist/commands/skill/marketplace.js +548 -0
  90. package/dist/commands/skill/marketplace.js.map +1 -0
  91. package/dist/commands/skill/schema.d.ts +27 -0
  92. package/dist/commands/skill/schema.js +55 -0
  93. package/dist/commands/skill/schema.js.map +1 -0
  94. package/dist/commands/skill/schema.test.d.ts +1 -0
  95. package/dist/commands/skill/schema.test.js +142 -0
  96. package/dist/commands/skill/schema.test.js.map +1 -0
  97. package/dist/commands/skill/validate.d.ts +10 -0
  98. package/dist/commands/skill/validate.js +40 -0
  99. package/dist/commands/skill/validate.js.map +1 -0
  100. package/dist/commands/skill/validate.test.d.ts +1 -0
  101. package/dist/commands/skill/validate.test.js +171 -0
  102. package/dist/commands/skill/validate.test.js.map +1 -0
  103. package/dist/commands/task.d.ts +34 -0
  104. package/dist/commands/task.js +160 -0
  105. package/dist/commands/task.js.map +1 -0
  106. package/dist/commands/task.test.d.ts +1 -0
  107. package/dist/commands/task.test.js +395 -0
  108. package/dist/commands/task.test.js.map +1 -0
  109. package/dist/commands/todo.d.ts +15 -0
  110. package/dist/commands/todo.js +99 -0
  111. package/dist/commands/todo.js.map +1 -0
  112. package/dist/commands/todo.test.d.ts +1 -0
  113. package/dist/commands/todo.test.js +324 -0
  114. package/dist/commands/todo.test.js.map +1 -0
  115. package/dist/commands/write.d.ts +12 -0
  116. package/dist/commands/write.js +40 -0
  117. package/dist/commands/write.js.map +1 -0
  118. package/dist/commands/write.test.d.ts +1 -0
  119. package/dist/commands/write.test.js +79 -0
  120. package/dist/commands/write.test.js.map +1 -0
  121. package/dist/config.d.ts +15 -0
  122. package/dist/config.js +49 -0
  123. package/dist/config.js.map +1 -0
  124. package/dist/config.test.d.ts +1 -0
  125. package/dist/config.test.js +147 -0
  126. package/dist/config.test.js.map +1 -0
  127. package/dist/core/executor.d.ts +11 -0
  128. package/dist/core/executor.js +42 -0
  129. package/dist/core/executor.js.map +1 -0
  130. package/dist/core/executor.test.d.ts +1 -0
  131. package/dist/core/executor.test.js +206 -0
  132. package/dist/core/executor.test.js.map +1 -0
  133. package/dist/core/middleware/error-handler.d.ts +2 -0
  134. package/dist/core/middleware/error-handler.js +29 -0
  135. package/dist/core/middleware/error-handler.js.map +1 -0
  136. package/dist/core/middleware/index.d.ts +2 -0
  137. package/dist/core/middleware/index.js +3 -0
  138. package/dist/core/middleware/index.js.map +1 -0
  139. package/dist/core/middleware/logging.d.ts +2 -0
  140. package/dist/core/middleware/logging.js +18 -0
  141. package/dist/core/middleware/logging.js.map +1 -0
  142. package/dist/core/registry.d.ts +12 -0
  143. package/dist/core/registry.js +552 -0
  144. package/dist/core/registry.js.map +1 -0
  145. package/dist/core/registry.test.d.ts +1 -0
  146. package/dist/core/registry.test.js +213 -0
  147. package/dist/core/registry.test.js.map +1 -0
  148. package/dist/core/types.d.ts +38 -0
  149. package/dist/core/types.js +2 -0
  150. package/dist/core/types.js.map +1 -0
  151. package/dist/integration/coordination.test.d.ts +1 -0
  152. package/dist/integration/coordination.test.js +286 -0
  153. package/dist/integration/coordination.test.js.map +1 -0
  154. package/dist/integration/project-artifacts.test.d.ts +1 -0
  155. package/dist/integration/project-artifacts.test.js +275 -0
  156. package/dist/integration/project-artifacts.test.js.map +1 -0
  157. package/dist/integration/registry-graph.test.d.ts +1 -0
  158. package/dist/integration/registry-graph.test.js +157 -0
  159. package/dist/integration/registry-graph.test.js.map +1 -0
  160. package/dist/integration/vault-lifecycle.test.d.ts +1 -0
  161. package/dist/integration/vault-lifecycle.test.js +183 -0
  162. package/dist/integration/vault-lifecycle.test.js.map +1 -0
  163. package/dist/lib/auto-number.d.ts +10 -0
  164. package/dist/lib/auto-number.js +33 -0
  165. package/dist/lib/auto-number.js.map +1 -0
  166. package/dist/lib/auto-number.test.d.ts +1 -0
  167. package/dist/lib/auto-number.test.js +88 -0
  168. package/dist/lib/auto-number.test.js.map +1 -0
  169. package/dist/lib/auto-profile.d.ts +11 -0
  170. package/dist/lib/auto-profile.js +123 -0
  171. package/dist/lib/auto-profile.js.map +1 -0
  172. package/dist/lib/auto-profile.test.d.ts +1 -0
  173. package/dist/lib/auto-profile.test.js +227 -0
  174. package/dist/lib/auto-profile.test.js.map +1 -0
  175. package/dist/lib/escape-regex.d.ts +4 -0
  176. package/dist/lib/escape-regex.js +8 -0
  177. package/dist/lib/escape-regex.js.map +1 -0
  178. package/dist/lib/escape-regex.test.d.ts +1 -0
  179. package/dist/lib/escape-regex.test.js +27 -0
  180. package/dist/lib/escape-regex.test.js.map +1 -0
  181. package/dist/lib/frontmatter.d.ts +34 -0
  182. package/dist/lib/frontmatter.js +75 -0
  183. package/dist/lib/frontmatter.js.map +1 -0
  184. package/dist/lib/frontmatter.test.d.ts +1 -0
  185. package/dist/lib/frontmatter.test.js +192 -0
  186. package/dist/lib/frontmatter.test.js.map +1 -0
  187. package/dist/lib/project-detector.d.ts +12 -0
  188. package/dist/lib/project-detector.js +124 -0
  189. package/dist/lib/project-detector.js.map +1 -0
  190. package/dist/lib/project-detector.test.d.ts +1 -0
  191. package/dist/lib/project-detector.test.js +117 -0
  192. package/dist/lib/project-detector.test.js.map +1 -0
  193. package/dist/lib/safe-external-path.d.ts +10 -0
  194. package/dist/lib/safe-external-path.js +47 -0
  195. package/dist/lib/safe-external-path.js.map +1 -0
  196. package/dist/lib/safe-external-path.test.d.ts +1 -0
  197. package/dist/lib/safe-external-path.test.js +99 -0
  198. package/dist/lib/safe-external-path.test.js.map +1 -0
  199. package/dist/lib/search-engine.d.ts +19 -0
  200. package/dist/lib/search-engine.js +164 -0
  201. package/dist/lib/search-engine.js.map +1 -0
  202. package/dist/lib/search-engine.test.d.ts +1 -0
  203. package/dist/lib/search-engine.test.js +120 -0
  204. package/dist/lib/search-engine.test.js.map +1 -0
  205. package/dist/lib/session-registry.d.ts +59 -0
  206. package/dist/lib/session-registry.js +231 -0
  207. package/dist/lib/session-registry.js.map +1 -0
  208. package/dist/lib/session-registry.test.d.ts +1 -0
  209. package/dist/lib/session-registry.test.js +199 -0
  210. package/dist/lib/session-registry.test.js.map +1 -0
  211. package/dist/lib/skill-registry.d.ts +13 -0
  212. package/dist/lib/skill-registry.js +77 -0
  213. package/dist/lib/skill-registry.js.map +1 -0
  214. package/dist/lib/stack-detector.d.ts +7 -0
  215. package/dist/lib/stack-detector.js +184 -0
  216. package/dist/lib/stack-detector.js.map +1 -0
  217. package/dist/lib/stack-detector.test.d.ts +1 -0
  218. package/dist/lib/stack-detector.test.js +110 -0
  219. package/dist/lib/stack-detector.test.js.map +1 -0
  220. package/dist/lib/token-estimator.d.ts +19 -0
  221. package/dist/lib/token-estimator.js +59 -0
  222. package/dist/lib/token-estimator.js.map +1 -0
  223. package/dist/lib/token-estimator.test.d.ts +1 -0
  224. package/dist/lib/token-estimator.test.js +65 -0
  225. package/dist/lib/token-estimator.test.js.map +1 -0
  226. package/dist/lib/tool-detector.d.ts +8 -0
  227. package/dist/lib/tool-detector.js +76 -0
  228. package/dist/lib/tool-detector.js.map +1 -0
  229. package/dist/lib/tool-detector.test.d.ts +1 -0
  230. package/dist/lib/tool-detector.test.js +170 -0
  231. package/dist/lib/tool-detector.test.js.map +1 -0
  232. package/dist/lib/vault-fs.d.ts +39 -0
  233. package/dist/lib/vault-fs.js +184 -0
  234. package/dist/lib/vault-fs.js.map +1 -0
  235. package/dist/lib/vault-fs.test.d.ts +1 -0
  236. package/dist/lib/vault-fs.test.js +210 -0
  237. package/dist/lib/vault-fs.test.js.map +1 -0
  238. package/dist/mcp-server.d.ts +2 -0
  239. package/dist/mcp-server.js +387 -0
  240. package/dist/mcp-server.js.map +1 -0
  241. package/dist/setup/clients.d.ts +2 -0
  242. package/dist/setup/clients.js +109 -0
  243. package/dist/setup/clients.js.map +1 -0
  244. package/dist/setup/configure.d.ts +6 -0
  245. package/dist/setup/configure.js +126 -0
  246. package/dist/setup/configure.js.map +1 -0
  247. package/dist/setup/configure.test.d.ts +1 -0
  248. package/dist/setup/configure.test.js +112 -0
  249. package/dist/setup/configure.test.js.map +1 -0
  250. package/dist/setup/detect.d.ts +3 -0
  251. package/dist/setup/detect.js +24 -0
  252. package/dist/setup/detect.js.map +1 -0
  253. package/dist/setup/detect.test.d.ts +1 -0
  254. package/dist/setup/detect.test.js +44 -0
  255. package/dist/setup/detect.test.js.map +1 -0
  256. package/dist/setup/index.d.ts +2 -0
  257. package/dist/setup/index.js +147 -0
  258. package/dist/setup/index.js.map +1 -0
  259. package/dist/setup/instructions.d.ts +4 -0
  260. package/dist/setup/instructions.js +62 -0
  261. package/dist/setup/instructions.js.map +1 -0
  262. package/dist/setup/instructions.test.d.ts +1 -0
  263. package/dist/setup/instructions.test.js +84 -0
  264. package/dist/setup/instructions.test.js.map +1 -0
  265. package/dist/setup/json-config.d.ts +10 -0
  266. package/dist/setup/json-config.js +43 -0
  267. package/dist/setup/json-config.js.map +1 -0
  268. package/dist/setup/json-config.test.d.ts +1 -0
  269. package/dist/setup/json-config.test.js +92 -0
  270. package/dist/setup/json-config.test.js.map +1 -0
  271. package/dist/setup/postinstall.d.ts +2 -0
  272. package/dist/setup/postinstall.js +22 -0
  273. package/dist/setup/postinstall.js.map +1 -0
  274. package/dist/setup/preuninstall.d.ts +2 -0
  275. package/dist/setup/preuninstall.js +12 -0
  276. package/dist/setup/preuninstall.js.map +1 -0
  277. package/dist/setup/setup-integration.test.d.ts +1 -0
  278. package/dist/setup/setup-integration.test.js +72 -0
  279. package/dist/setup/setup-integration.test.js.map +1 -0
  280. package/dist/setup/teardown.d.ts +5 -0
  281. package/dist/setup/teardown.js +94 -0
  282. package/dist/setup/teardown.js.map +1 -0
  283. package/dist/setup/teardown.test.d.ts +1 -0
  284. package/dist/setup/teardown.test.js +105 -0
  285. package/dist/setup/teardown.test.js.map +1 -0
  286. package/dist/setup/toml-config.d.ts +5 -0
  287. package/dist/setup/toml-config.js +26 -0
  288. package/dist/setup/toml-config.js.map +1 -0
  289. package/dist/setup/toml-config.test.d.ts +1 -0
  290. package/dist/setup/toml-config.test.js +49 -0
  291. package/dist/setup/toml-config.test.js.map +1 -0
  292. package/dist/setup/types.d.ts +52 -0
  293. package/dist/setup/types.js +23 -0
  294. package/dist/setup/types.js.map +1 -0
  295. package/dist/test-helpers.d.ts +20 -0
  296. package/dist/test-helpers.js +47 -0
  297. package/dist/test-helpers.js.map +1 -0
  298. package/dist/test-helpers.test.d.ts +1 -0
  299. package/dist/test-helpers.test.js +90 -0
  300. package/dist/test-helpers.test.js.map +1 -0
  301. package/package.json +74 -0
@@ -0,0 +1,213 @@
1
+ import { describe, it, expect, beforeEach, vi } from "vitest";
2
+ import { CommandRegistry } from "./registry.js";
3
+ import { VaultError } from "../lib/vault-fs.js";
4
+ function createMockContext() {
5
+ return {
6
+ vaultFs: {},
7
+ vaultPath: "/tmp/test-vault",
8
+ config: {},
9
+ sessionRegistry: {},
10
+ log: {
11
+ debug: vi.fn(),
12
+ info: vi.fn(),
13
+ warn: vi.fn(),
14
+ error: vi.fn(),
15
+ },
16
+ };
17
+ }
18
+ function createMockVaultFs(readResult) {
19
+ return {
20
+ root: "/tmp/test-vault",
21
+ read: vi.fn().mockResolvedValue(readResult ?? ""),
22
+ write: vi.fn().mockResolvedValue({ path: "test", bytes: 0 }),
23
+ list: vi.fn().mockResolvedValue([]),
24
+ exists: vi.fn().mockResolvedValue(false),
25
+ verifyNoSymlinkEscape: vi.fn().mockResolvedValue(undefined),
26
+ append: vi.fn().mockResolvedValue({ path: "test", bytes: 0 }),
27
+ };
28
+ }
29
+ describe("CommandRegistry", () => {
30
+ let registry;
31
+ let ctx;
32
+ beforeEach(() => {
33
+ registry = new CommandRegistry();
34
+ ctx = createMockContext();
35
+ });
36
+ describe("register and get", () => {
37
+ it("stores and retrieves a registration", () => {
38
+ const handler = async () => null;
39
+ const toolDef = {
40
+ name: "test_tool",
41
+ description: "A test tool",
42
+ inputSchema: { type: "object" },
43
+ };
44
+ const reg = { handler, toolDef };
45
+ registry.register("test", reg);
46
+ expect(registry.get("test")).toBe(reg);
47
+ expect(registry.has("test")).toBe(true);
48
+ expect(registry.has("missing")).toBe(false);
49
+ });
50
+ it("returns undefined for unknown command", () => {
51
+ expect(registry.get("unknown")).toBeUndefined();
52
+ });
53
+ });
54
+ describe("execute", () => {
55
+ it("executes a registered command handler", async () => {
56
+ const handler = async (args) => `Hello, ${args.name}!`;
57
+ const reg = {
58
+ handler: handler,
59
+ toolDef: { name: "greet", description: "Greet", inputSchema: {} },
60
+ };
61
+ registry.register("greet", reg);
62
+ const result = await registry.execute("greet", { name: "World" }, ctx);
63
+ expect(result).toBe("Hello, World!");
64
+ });
65
+ it("uses adaptArgs to transform raw arguments", async () => {
66
+ const handler = async (args) => args.camelCase;
67
+ const reg = {
68
+ handler: handler,
69
+ toolDef: { name: "adapt", description: "Adapt", inputSchema: {} },
70
+ adaptArgs: (raw) => ({ camelCase: raw.snake_case }),
71
+ };
72
+ registry.register("adapt", reg);
73
+ const result = await registry.execute("adapt", { snake_case: "value" }, ctx);
74
+ expect(result).toBe("value");
75
+ });
76
+ it("throws for unknown command", async () => {
77
+ await expect(registry.execute("unknown", {}, ctx)).rejects.toThrow("Unknown command: unknown");
78
+ });
79
+ it("passes context through to handler", async () => {
80
+ let receivedCtx = null;
81
+ const handler = async (_args, ctx) => {
82
+ receivedCtx = ctx;
83
+ return "done";
84
+ };
85
+ const reg = {
86
+ handler,
87
+ toolDef: { name: "ctx-test", description: "Ctx", inputSchema: {} },
88
+ };
89
+ registry.register("ctx-test", reg);
90
+ await registry.execute("ctx-test", {}, ctx);
91
+ expect(receivedCtx).toBe(ctx);
92
+ });
93
+ it("passes through errors from handlers", async () => {
94
+ const handler = async () => {
95
+ throw new VaultError("FILE_NOT_FOUND", "not here");
96
+ };
97
+ const reg = {
98
+ handler,
99
+ toolDef: { name: "error-test", description: "Error", inputSchema: {} },
100
+ };
101
+ registry.register("error-test", reg);
102
+ await expect(registry.execute("error-test", {}, ctx)).rejects.toThrow("not here");
103
+ });
104
+ });
105
+ describe("getToolDefinitions", () => {
106
+ it("returns empty array when no registrations", () => {
107
+ expect(registry.getToolDefinitions()).toEqual([]);
108
+ });
109
+ it("returns tool defs from all registrations", () => {
110
+ const handler = async () => null;
111
+ registry.register("cmd1", {
112
+ handler,
113
+ toolDef: { name: "tool1", description: "Tool 1", inputSchema: {} },
114
+ });
115
+ registry.register("cmd2", {
116
+ handler,
117
+ toolDef: { name: "tool2", description: "Tool 2", inputSchema: {} },
118
+ });
119
+ registry.register("cmd3", {
120
+ handler,
121
+ toolDef: { name: "tool3", description: "Tool 3", inputSchema: {} },
122
+ });
123
+ const defs = registry.getToolDefinitions();
124
+ expect(defs).toHaveLength(3);
125
+ expect(defs.map((d) => d.name)).toEqual(["tool1", "tool2", "tool3"]);
126
+ });
127
+ });
128
+ describe("getToolNames", () => {
129
+ it("returns all registered tool names", () => {
130
+ const handler = async () => null;
131
+ registry.register("a", { handler, toolDef: { name: "a", description: "", inputSchema: {} } });
132
+ registry.register("b", { handler, toolDef: { name: "b", description: "", inputSchema: {} } });
133
+ expect(registry.getToolNames()).toEqual(["a", "b"]);
134
+ });
135
+ });
136
+ });
137
+ describe("createRegistry", () => {
138
+ it("registers all expected MCP tools", async () => {
139
+ const { createRegistry } = await import("./registry.js");
140
+ const registry = createRegistry();
141
+ const names = registry.getToolNames();
142
+ const expectedTools = [
143
+ "vault_read",
144
+ "vault_write",
145
+ "vault_search",
146
+ "vault_project_context",
147
+ "vault_init",
148
+ "vault_decide",
149
+ "vault_task",
150
+ "vault_learn",
151
+ "vault_todo",
152
+ "vault_brainstorm",
153
+ "vault_session",
154
+ "vault_prune",
155
+ "vault_stats",
156
+ "vault_resume",
157
+ "vault_deprecate",
158
+ ];
159
+ for (const name of expectedTools) {
160
+ expect(names, `Missing tool: ${name}`).toContain(name);
161
+ }
162
+ });
163
+ it("provides inputSchema with required fields for each tool", async () => {
164
+ const { createRegistry } = await import("./registry.js");
165
+ const registry = createRegistry();
166
+ const defs = registry.getToolDefinitions();
167
+ for (const def of defs) {
168
+ expect(def.inputSchema, `${def.name}: missing inputSchema`).toBeDefined();
169
+ expect(def.inputSchema, `${def.name}: inputSchema must be object`).toHaveProperty("type", "object");
170
+ }
171
+ });
172
+ it("adaptArgs for vault_read passes path and coerces depth", async () => {
173
+ const { createRegistry } = await import("./registry.js");
174
+ const registry = createRegistry();
175
+ const vaultFs = createMockVaultFs("# Hello");
176
+ const ctx = { ...createMockContext(), vaultFs };
177
+ const result = await registry.execute("vault_read", { path: "test.md", depth: "2" }, ctx);
178
+ expect(result).toBe("# Hello");
179
+ expect(vaultFs.read).toHaveBeenCalledWith("test.md");
180
+ });
181
+ it("adaptArgs directly transforms snake_case for each tool", async () => {
182
+ const { createRegistry } = await import("./registry.js");
183
+ const registry = createRegistry();
184
+ const readReg = registry.get("vault_read");
185
+ const readArgs = readReg.adaptArgs({ path: "f.md", depth: 3 });
186
+ expect(readArgs).toEqual({ path: "f.md", depth: 3 });
187
+ const taskReg = registry.get("vault_task");
188
+ const taskArgs = taskReg.adaptArgs({ action: "add", title: "T", blocked_by: ["x"], assigned_to: "a" });
189
+ expect(taskArgs).toEqual({ action: "add", title: "T", blockedBy: ["x"], assignedTo: "a" });
190
+ const sessionReg = registry.get("vault_session");
191
+ const sessionArgs = sessionReg.adaptArgs({ action: "register", tool: "t", task_summary: "s", files_touched: ["a.ts"] });
192
+ expect(sessionArgs).toEqual({ action: "register", tool: "t", taskSummary: "s", filesTouched: ["a.ts"] });
193
+ const learnReg = registry.get("vault_learn");
194
+ const learnArgs = learnReg.adaptArgs({ action: "add", title: "L", tags: ["b"], session_id: "s1" });
195
+ expect(learnArgs).toEqual({ action: "add", title: "L", tags: ["b"], sessionId: "s1" });
196
+ const pruneReg = registry.get("vault_prune");
197
+ const pruneArgs = pruneReg.adaptArgs({ mode: "dry-run", sessions_days: 30, done_tasks_days: 60 });
198
+ expect(pruneArgs).toEqual({ mode: "dry-run", policy: { sessions: 30, doneTasks: 60 }, all: false });
199
+ const ctxReg = registry.get("vault_project_context");
200
+ const ctxArgs = ctxReg.adaptArgs({ project: "p", detail_level: "full" });
201
+ expect(ctxArgs).toEqual({ project: "p", detailLevel: "full" });
202
+ const writeReg = registry.get("vault_write");
203
+ const writeArgs = writeReg.adaptArgs({ path: "f.md", content: "c", mode: "append" });
204
+ expect(writeArgs).toEqual({ path: "f.md", content: "c", mode: "append" });
205
+ const resumeReg = registry.get("vault_resume");
206
+ const resumeArgs = resumeReg.adaptArgs({ project: "p", limit: 3, format: "json" });
207
+ expect(resumeArgs).toEqual({ project: "p", limit: 3 });
208
+ const searchReg = registry.get("vault_search");
209
+ const searchArgs = searchReg.adaptArgs({ query: "q", limit: 5, project: "p", path_filter: "dir" });
210
+ expect(searchArgs).toEqual({ query: "q", project: "p", limit: 5, structured: false });
211
+ });
212
+ });
213
+ //# sourceMappingURL=registry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../src/core/registry.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { VaultFS } from '../lib/vault-fs.js';
2
+ import type { SessionRegistryManager } from '../lib/session-registry.js';
3
+ import type { Config } from '../config.js';
4
+ export interface Logger {
5
+ debug(message: string, ...args: unknown[]): void;
6
+ info(message: string, ...args: unknown[]): void;
7
+ warn(message: string, ...args: unknown[]): void;
8
+ error(message: string, ...args: unknown[]): void;
9
+ }
10
+ export interface CommandContext {
11
+ vaultFs: VaultFS;
12
+ vaultPath: string;
13
+ sessionRegistry: SessionRegistryManager;
14
+ config: Config;
15
+ log: Logger;
16
+ }
17
+ export type CommandHandler<TArgs = unknown, TResult = unknown> = (args: TArgs, ctx: CommandContext) => Promise<TResult>;
18
+ export type Middleware = (ctx: CommandContext, next: () => Promise<unknown>) => Promise<unknown>;
19
+ export interface MCPToolDefinition {
20
+ name: string;
21
+ description: string;
22
+ inputSchema: Record<string, unknown>;
23
+ annotations?: {
24
+ readOnlyHint?: boolean;
25
+ destructiveHint?: boolean;
26
+ idempotentHint?: boolean;
27
+ openWorldHint?: boolean;
28
+ };
29
+ }
30
+ export interface MCPErrorResponse {
31
+ error: string;
32
+ message: string;
33
+ }
34
+ export interface CommandRegistration<TArgs = unknown, TResult = unknown> {
35
+ handler: CommandHandler<TArgs, TResult>;
36
+ toolDef: MCPToolDefinition;
37
+ adaptArgs?: (raw: Record<string, unknown>) => TArgs;
38
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,286 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import { mkdir } from "fs/promises";
3
+ import { join } from "path";
4
+ import { createTestContext } from "../test-helpers.js";
5
+ import { sessionCommand } from "../commands/session.js";
6
+ import { resumeCommand } from "../commands/resume.js";
7
+ import { pruneCommand, statsCommand, deprecateCommand } from "../commands/prune.js";
8
+ import { taskCommand } from "../commands/task.js";
9
+ import { learnCommand } from "../commands/learn.js";
10
+ import { decideCommand } from "../commands/decide.js";
11
+ import { readCommand } from "../commands/read.js";
12
+ import { serializeFrontmatter, createFrontmatter } from "../lib/frontmatter.js";
13
+ describe("integration > coordination", () => {
14
+ let ctx;
15
+ let vaultRoot;
16
+ let cleanup;
17
+ beforeEach(async () => {
18
+ const tc = await createTestContext({ project: "my-project" });
19
+ ctx = tc.ctx;
20
+ vaultRoot = tc.vaultRoot;
21
+ cleanup = tc.cleanup;
22
+ await mkdir(join(vaultRoot, "projects/my-project/tasks"), { recursive: true });
23
+ await mkdir(join(vaultRoot, "projects/my-project/sessions"), { recursive: true });
24
+ await mkdir(join(vaultRoot, "projects/my-project/decisions"), { recursive: true });
25
+ await mkdir(join(vaultRoot, "projects/my-project/learnings"), { recursive: true });
26
+ });
27
+ afterEach(async () => {
28
+ await cleanup();
29
+ });
30
+ describe("session lifecycle", () => {
31
+ it("register session then list_active returns it", async () => {
32
+ const reg = await sessionCommand({ action: "register", tool: "claude-code", project: "my-project", taskSummary: "Build API" }, ctx);
33
+ expect(reg.session_id).toBeDefined();
34
+ expect(reg.conflicts).toHaveLength(0);
35
+ const list = await sessionCommand({ action: "list_active" }, ctx);
36
+ expect(list.active_sessions).toHaveLength(1);
37
+ expect(list.active_sessions[0].tool).toBe("claude-code");
38
+ expect(list.active_sessions[0].project).toBe("my-project");
39
+ expect(list.active_sessions[0].task_summary).toBe("Build API");
40
+ });
41
+ it("register two sessions then list_active returns both", async () => {
42
+ await sessionCommand({ action: "register", tool: "claude-code", project: "my-project", taskSummary: "Task A" }, ctx);
43
+ await sessionCommand({ action: "register", tool: "opencode", project: "my-project", taskSummary: "Task B" }, ctx);
44
+ const list = await sessionCommand({ action: "list_active" }, ctx);
45
+ expect(list.active_sessions).toHaveLength(2);
46
+ const tools = list.active_sessions.map((s) => s.tool);
47
+ expect(tools).toContain("claude-code");
48
+ expect(tools).toContain("opencode");
49
+ });
50
+ it("heartbeat updates session then list shows updated timestamp", async () => {
51
+ const reg = await sessionCommand({ action: "register", tool: "claude-code", project: "my-project" }, ctx);
52
+ const sessionId = reg.session_id;
53
+ const listBefore = await sessionCommand({ action: "list_active" }, ctx);
54
+ const beforeTs = listBefore.active_sessions[0].last_heartbeat;
55
+ await sessionCommand({ action: "heartbeat", sessionId }, ctx);
56
+ const listAfter = await sessionCommand({ action: "list_active" }, ctx);
57
+ const afterTs = listAfter.active_sessions[0].last_heartbeat;
58
+ expect(new Date(afterTs).getTime()).toBeGreaterThanOrEqual(new Date(beforeTs).getTime());
59
+ });
60
+ it("complete session then list_active no longer includes it", async () => {
61
+ const reg = await sessionCommand({ action: "register", tool: "claude-code", project: "my-project" }, ctx);
62
+ const sessionId = reg.session_id;
63
+ await sessionCommand({ action: "complete", sessionId, project: "my-project", tool: "claude-code", outcome: "Done" }, ctx);
64
+ const list = await sessionCommand({ action: "list_active" }, ctx);
65
+ expect(list.active_sessions).toHaveLength(0);
66
+ });
67
+ it("register session with files_touched then complete persists session note", async () => {
68
+ const reg = await sessionCommand({
69
+ action: "register",
70
+ tool: "claude-code",
71
+ project: "my-project",
72
+ taskSummary: "Refactor auth",
73
+ filesTouched: ["src/auth.ts", "src/middleware.ts"],
74
+ }, ctx);
75
+ const sessionId = reg.session_id;
76
+ const complete = await sessionCommand({
77
+ action: "complete",
78
+ sessionId,
79
+ project: "my-project",
80
+ tool: "claude-code",
81
+ outcome: "Refactored auth module",
82
+ filesTouched: ["src/auth.ts", "src/middleware.ts"],
83
+ tasksCompleted: ["task-001"],
84
+ }, ctx);
85
+ expect(complete.session_note_path).toBeDefined();
86
+ const content = await readCommand({ path: complete.session_note_path }, ctx);
87
+ expect(content).toContain("claude-code");
88
+ expect(content).toContain("Refactored auth module");
89
+ expect(content).toContain("src/auth.ts");
90
+ });
91
+ });
92
+ describe("resume", () => {
93
+ it("resume with no sessions returns empty last_sessions and suggested_next_steps", async () => {
94
+ const result = await resumeCommand({ project: "my-project" }, ctx);
95
+ expect(result.project).toBe("my-project");
96
+ expect(result.last_sessions).toHaveLength(0);
97
+ expect(result.active_sessions).toHaveLength(0);
98
+ expect(result.interrupted_sessions).toHaveLength(0);
99
+ expect(result.suggested_next_steps).toHaveLength(0);
100
+ });
101
+ it("create tasks and sessions then resume returns interrupted/in-progress context", async () => {
102
+ await taskCommand({ action: "add", title: "Active task", project: "my-project" }, ctx);
103
+ await taskCommand({ action: "update", taskId: "task-001", status: "in-progress", project: "my-project" }, ctx);
104
+ const reg = await sessionCommand({
105
+ action: "register",
106
+ tool: "claude-code",
107
+ project: "my-project",
108
+ taskSummary: "Working on auth",
109
+ }, ctx);
110
+ await sessionCommand({
111
+ action: "complete",
112
+ sessionId: reg.session_id,
113
+ project: "my-project",
114
+ tool: "claude-code",
115
+ outcome: "Implemented auth flow",
116
+ }, ctx);
117
+ const result = await resumeCommand({ project: "my-project" }, ctx);
118
+ expect(result.last_sessions.length).toBeGreaterThanOrEqual(1);
119
+ expect(result.last_sessions[0].tool).toBe("claude-code");
120
+ expect(result.last_sessions[0].outcome).toBe("Implemented auth flow");
121
+ expect(result.suggested_next_steps.length).toBeGreaterThanOrEqual(1);
122
+ expect(result.suggested_next_steps.some((s) => s.includes("In-progress task"))).toBe(true);
123
+ });
124
+ it("resume respects limit parameter", async () => {
125
+ for (let i = 0; i < 5; i++) {
126
+ const reg = await sessionCommand({
127
+ action: "register",
128
+ tool: `tool-${i}`,
129
+ project: "my-project",
130
+ taskSummary: `Session ${i}`,
131
+ }, ctx);
132
+ await sessionCommand({
133
+ action: "complete",
134
+ sessionId: reg.session_id,
135
+ project: "my-project",
136
+ tool: `tool-${i}`,
137
+ outcome: `Completed session ${i}`,
138
+ }, ctx);
139
+ }
140
+ const result = await resumeCommand({ project: "my-project", limit: 2 }, ctx);
141
+ expect(result.last_sessions.length).toBeLessThanOrEqual(2);
142
+ });
143
+ });
144
+ describe("prune", () => {
145
+ it("prune dry-run mode reports candidates but does not delete", async () => {
146
+ const oldDate = new Date(Date.now() - 90 * 24 * 60 * 60 * 1000).toISOString().slice(0, 10);
147
+ const sessionContent = serializeFrontmatter(createFrontmatter({
148
+ type: "session",
149
+ status: "completed",
150
+ completed_at: oldDate,
151
+ created: oldDate,
152
+ }), "\n# Old session\n");
153
+ await ctx.vaultFs.write("projects/my-project/sessions/2025-01-01-claude-aabbccdd.md", sessionContent);
154
+ const result = await pruneCommand({ mode: "dry-run", project: "my-project", policy: { sessions: 30 } }, ctx);
155
+ expect(result).toHaveLength(1);
156
+ expect(result[0].stats.sessions_scanned).toBe(1);
157
+ expect(result[0].stats.total_archived).toBe(1);
158
+ expect(result[0].stats.total_deleted).toBe(0);
159
+ const files = await ctx.vaultFs.list("projects/my-project/sessions", 1);
160
+ expect(files.filter((f) => f.endsWith(".md"))).toHaveLength(1);
161
+ });
162
+ it("prune archive mode moves old sessions to _archive", async () => {
163
+ const oldDate = new Date(Date.now() - 90 * 24 * 60 * 60 * 1000).toISOString().slice(0, 10);
164
+ const sessionContent = serializeFrontmatter(createFrontmatter({
165
+ type: "session",
166
+ status: "completed",
167
+ completed_at: oldDate,
168
+ created: oldDate,
169
+ }), "\n# Old session\n");
170
+ await ctx.vaultFs.write("projects/my-project/sessions/2025-01-01-claude-aabbccdd.md", sessionContent);
171
+ const result = await pruneCommand({ mode: "archive", project: "my-project", policy: { sessions: 30 } }, ctx);
172
+ expect(result).toHaveLength(1);
173
+ expect(result[0].archived).toHaveLength(1);
174
+ expect(result[0].archived[0].to).toContain("_archive");
175
+ const activeFiles = await ctx.vaultFs.list("projects/my-project/sessions", 1);
176
+ expect(activeFiles.filter((f) => f.endsWith(".md"))).toHaveLength(0);
177
+ });
178
+ it("prune with no stale items returns empty results", async () => {
179
+ const recentDate = new Date().toISOString();
180
+ const sessionContent = serializeFrontmatter(createFrontmatter({
181
+ type: "session",
182
+ status: "completed",
183
+ completed_at: recentDate,
184
+ created: recentDate,
185
+ }), "\n# Recent session\n");
186
+ await ctx.vaultFs.write("projects/my-project/sessions/2026-03-19-claude-aabbccdd.md", sessionContent);
187
+ const result = await pruneCommand({ mode: "dry-run", project: "my-project", policy: { sessions: 30 } }, ctx);
188
+ expect(result).toHaveLength(1);
189
+ expect(result[0].stats.sessions_scanned).toBe(1);
190
+ expect(result[0].stats.total_archived).toBe(0);
191
+ expect(result[0].stats.total_deleted).toBe(0);
192
+ });
193
+ it("prune delete mode removes old tasks", async () => {
194
+ const oldDate = new Date(Date.now() - 90 * 24 * 60 * 60 * 1000).toISOString().slice(0, 10);
195
+ const taskContent = serializeFrontmatter(createFrontmatter({
196
+ type: "task",
197
+ id: "task-old-001",
198
+ status: "done",
199
+ created: oldDate,
200
+ updated: oldDate,
201
+ }), "\n# Old task\n");
202
+ await ctx.vaultFs.write("projects/my-project/tasks/task-old-001.md", taskContent);
203
+ const result = await pruneCommand({ mode: "delete", project: "my-project", policy: { doneTasks: 30 } }, ctx);
204
+ expect(result).toHaveLength(1);
205
+ expect(result[0].deleted).toHaveLength(1);
206
+ expect(result[0].deleted[0]).toContain("task-old-001");
207
+ const files = await ctx.vaultFs.list("projects/my-project/tasks", 1);
208
+ expect(files.filter((f) => f.endsWith(".md"))).toHaveLength(0);
209
+ });
210
+ });
211
+ describe("stats", () => {
212
+ it("stats returns task breakdown", async () => {
213
+ await taskCommand({ action: "add", title: "Backlog task", project: "my-project" }, ctx);
214
+ await taskCommand({ action: "add", title: "Active task", project: "my-project" }, ctx);
215
+ await taskCommand({ action: "add", title: "Done task", project: "my-project" }, ctx);
216
+ await taskCommand({ action: "update", taskId: "task-002", status: "in-progress", project: "my-project" }, ctx);
217
+ await taskCommand({ action: "update", taskId: "task-003", status: "done", project: "my-project" }, ctx);
218
+ const stats = await statsCommand({ project: "my-project" }, ctx);
219
+ expect(stats.project).toBe("my-project");
220
+ expect(stats.tasks.total).toBe(3);
221
+ expect(stats.tasks.backlog).toBe(1);
222
+ expect(stats.tasks.inProgress).toBe(1);
223
+ expect(stats.tasks.done).toBe(1);
224
+ });
225
+ it("stats after creating tasks reflects new count", async () => {
226
+ const before = await statsCommand({ project: "my-project" }, ctx);
227
+ expect(before.tasks.total).toBe(0);
228
+ await taskCommand({ action: "add", title: "New task", project: "my-project" }, ctx);
229
+ const after = await statsCommand({ project: "my-project" }, ctx);
230
+ expect(after.tasks.total).toBe(1);
231
+ expect(after.tasks.backlog).toBe(1);
232
+ });
233
+ it("stats includes learning and ADR counts", async () => {
234
+ await learnCommand({
235
+ action: "add",
236
+ title: "Test learning",
237
+ discovery: "Something useful",
238
+ project: "my-project",
239
+ }, ctx);
240
+ await decideCommand({
241
+ title: "Use React",
242
+ context: "Need UI framework",
243
+ decision: "React chosen",
244
+ project: "my-project",
245
+ }, ctx);
246
+ const stats = await statsCommand({ project: "my-project" }, ctx);
247
+ expect(stats.learnings).toBe(1);
248
+ expect(stats.adrs).toBe(1);
249
+ expect(stats.totalFiles).toBeGreaterThanOrEqual(2);
250
+ });
251
+ });
252
+ describe("deprecate", () => {
253
+ it("deprecate marks vault item with deprecated status", async () => {
254
+ await decideCommand({
255
+ title: "Old decision",
256
+ context: "Initial context",
257
+ decision: "Initial decision",
258
+ project: "my-project",
259
+ }, ctx);
260
+ const adrList = await ctx.vaultFs.list("projects/my-project/decisions", 1);
261
+ const adrPath = adrList.find((f) => f.endsWith(".md"));
262
+ const result = await deprecateCommand({ path: adrPath }, ctx);
263
+ expect(result.path).toBe(adrPath);
264
+ expect(result.status).toBe("deprecated");
265
+ const content = await readCommand({ path: adrPath }, ctx);
266
+ expect(content).toContain("status: deprecated");
267
+ });
268
+ it("deprecate with reason appends deprecation notice", async () => {
269
+ await learnCommand({
270
+ action: "add",
271
+ title: "Outdated learning",
272
+ discovery: "No longer relevant",
273
+ project: "my-project",
274
+ }, ctx);
275
+ const learnList = await ctx.vaultFs.list("projects/my-project/learnings", 1);
276
+ const learnPath = learnList.find((f) => f.endsWith(".md"));
277
+ const reason = "Replaced by new approach";
278
+ await deprecateCommand({ path: learnPath, reason }, ctx);
279
+ const content = await readCommand({ path: learnPath }, ctx);
280
+ expect(content).toContain("status: deprecated");
281
+ expect(content).toContain("Deprecated");
282
+ expect(content).toContain(reason);
283
+ });
284
+ });
285
+ });
286
+ //# sourceMappingURL=coordination.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination.test.js","sourceRoot":"","sources":["../../src/integration/coordination.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEhF,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,IAAI,GAAyD,CAAC;IAC9D,IAAI,SAAiB,CAAC;IACtB,IAAI,OAA4B,CAAC;IAEjC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAC9D,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;QACb,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;QACzB,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QACrB,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,2BAA2B,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,+BAA+B,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnF,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,+BAA+B,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;YAEpI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAEtC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC;YAElE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;YACrH,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;YAElH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC;YAElE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YAC1G,MAAM,SAAS,GAAG,GAAG,CAAC,UAAW,CAAC;YAElC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;YAE/D,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;YAE9D,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,SAAS,CAAC,eAAgB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;YAE7D,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YAC1G,MAAM,SAAS,GAAG,GAAG,CAAC,UAAW,CAAC;YAElC,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;YAE1H,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC;YAElE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;YACvF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC;gBAC/B,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,YAAY;gBACrB,WAAW,EAAE,eAAe;gBAC5B,YAAY,EAAE,CAAC,aAAa,EAAE,mBAAmB,CAAC;aACnD,EAAE,GAAG,CAAC,CAAC;YACR,MAAM,SAAS,GAAG,GAAG,CAAC,UAAW,CAAC;YAElC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;gBACpC,MAAM,EAAE,UAAU;gBAClB,SAAS;gBACT,OAAO,EAAE,YAAY;gBACrB,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,wBAAwB;gBACjC,YAAY,EAAE,CAAC,aAAa,EAAE,mBAAmB,CAAC;gBAClD,cAAc,EAAE,CAAC,UAAU,CAAC;aAC7B,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;YAEjD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,iBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC;YAE9E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;YACpD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC5F,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YAEnE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;YAC7F,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YACvF,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YAE/G,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC;gBAC/B,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,YAAY;gBACrB,WAAW,EAAE,iBAAiB;aAC/B,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,cAAc,CAAC;gBACnB,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,GAAG,CAAC,UAAW;gBAC1B,OAAO,EAAE,YAAY;gBACrB,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,uBAAuB;aACjC,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YAEnE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC;oBAC/B,MAAM,EAAE,UAAU;oBAClB,IAAI,EAAE,QAAQ,CAAC,EAAE;oBACjB,OAAO,EAAE,YAAY;oBACrB,WAAW,EAAE,WAAW,CAAC,EAAE;iBAC5B,EAAE,GAAG,CAAC,CAAC;gBAER,MAAM,cAAc,CAAC;oBACnB,MAAM,EAAE,UAAU;oBAClB,SAAS,EAAE,GAAG,CAAC,UAAW;oBAC1B,OAAO,EAAE,YAAY;oBACrB,IAAI,EAAE,QAAQ,CAAC,EAAE;oBACjB,OAAO,EAAE,qBAAqB,CAAC,EAAE;iBAClC,EAAE,GAAG,CAAC,CAAC;YACV,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAE7E,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3F,MAAM,cAAc,GAAG,oBAAoB,CACzC,iBAAiB,CAAC;gBAChB,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,WAAW;gBACnB,YAAY,EAAE,OAAO;gBACrB,OAAO,EAAE,OAAO;aACjB,CAAC,EACF,mBAAmB,CACpB,CAAC;YACF,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,4DAA4D,EAAE,cAAc,CAAC,CAAC;YAEtG,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAE7G,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE9C,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;YACxE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3F,MAAM,cAAc,GAAG,oBAAoB,CACzC,iBAAiB,CAAC;gBAChB,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,WAAW;gBACnB,YAAY,EAAE,OAAO;gBACrB,OAAO,EAAE,OAAO;aACjB,CAAC,EACF,mBAAmB,CACpB,CAAC;YACF,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,4DAA4D,EAAE,cAAc,CAAC,CAAC;YAEtG,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAE7G,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAEvD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,cAAc,GAAG,oBAAoB,CACzC,iBAAiB,CAAC;gBAChB,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,WAAW;gBACnB,YAAY,EAAE,UAAU;gBACxB,OAAO,EAAE,UAAU;aACpB,CAAC,EACF,sBAAsB,CACvB,CAAC;YACF,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,4DAA4D,EAAE,cAAc,CAAC,CAAC;YAEtG,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAE7G,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3F,MAAM,WAAW,GAAG,oBAAoB,CACtC,iBAAiB,CAAC;gBAChB,IAAI,EAAE,MAAM;gBACZ,EAAE,EAAE,cAAc;gBAClB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,OAAO;aACjB,CAAC,EACF,gBAAgB,CACjB,CAAC;YACF,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,WAAW,CAAC,CAAC;YAElF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAE7G,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YAEvD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;YACrE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YACxF,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YACvF,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/G,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YAExG,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YAEjE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YAElE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEnC,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YAEpF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YAEjE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,YAAY,CAAC;gBACjB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,eAAe;gBACtB,SAAS,EAAE,kBAAkB;gBAC7B,OAAO,EAAE,YAAY;aACtB,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,aAAa,CAAC;gBAClB,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,mBAAmB;gBAC5B,QAAQ,EAAE,cAAc;gBACxB,OAAO,EAAE,YAAY;aACtB,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;YAEjE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,aAAa,CAAC;gBAClB,KAAK,EAAE,cAAc;gBACrB,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,kBAAkB;gBAC5B,OAAO,EAAE,YAAY;aACtB,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;YAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAE,CAAC;YAExD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;YAE9D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEzC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;YAC1D,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,YAAY,CAAC;gBACjB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,mBAAmB;gBAC1B,SAAS,EAAE,oBAAoB;gBAC/B,OAAO,EAAE,YAAY;aACtB,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;YAC7E,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAE,CAAC;YAE5D,MAAM,MAAM,GAAG,0BAA0B,CAAC;YAC1C,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;YAEzD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;YAE5D,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};