hoolix 0.0.1-beta.19

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 (263) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +337 -0
  3. package/STABILITY.md +109 -0
  4. package/bin/hoolix.js +50 -0
  5. package/bin/mcp-portal.js +12 -0
  6. package/bin/postinstall.js +61 -0
  7. package/dist/app/contracts.d.ts +105 -0
  8. package/dist/app/contracts.d.ts.map +1 -0
  9. package/dist/app/contracts.js +2 -0
  10. package/dist/app/contracts.js.map +1 -0
  11. package/dist/app/events.d.ts +13 -0
  12. package/dist/app/events.d.ts.map +1 -0
  13. package/dist/app/events.js +13 -0
  14. package/dist/app/events.js.map +1 -0
  15. package/dist/app/services/analytics.d.ts +42 -0
  16. package/dist/app/services/analytics.d.ts.map +1 -0
  17. package/dist/app/services/analytics.js +106 -0
  18. package/dist/app/services/analytics.js.map +1 -0
  19. package/dist/app/services/catalog.d.ts +14 -0
  20. package/dist/app/services/catalog.d.ts.map +1 -0
  21. package/dist/app/services/catalog.js +26 -0
  22. package/dist/app/services/catalog.js.map +1 -0
  23. package/dist/app/services/credentials.d.ts +42 -0
  24. package/dist/app/services/credentials.d.ts.map +1 -0
  25. package/dist/app/services/credentials.js +143 -0
  26. package/dist/app/services/credentials.js.map +1 -0
  27. package/dist/app/services/servers.d.ts +15 -0
  28. package/dist/app/services/servers.d.ts.map +1 -0
  29. package/dist/app/services/servers.js +445 -0
  30. package/dist/app/services/servers.js.map +1 -0
  31. package/dist/catalog/community.d.ts +19 -0
  32. package/dist/catalog/community.d.ts.map +1 -0
  33. package/dist/catalog/community.js +53 -0
  34. package/dist/catalog/community.js.map +1 -0
  35. package/dist/catalog/templates.d.ts +436 -0
  36. package/dist/catalog/templates.d.ts.map +1 -0
  37. package/dist/catalog/templates.js +489 -0
  38. package/dist/catalog/templates.js.map +1 -0
  39. package/dist/commands/audit.d.ts +2 -0
  40. package/dist/commands/audit.d.ts.map +1 -0
  41. package/dist/commands/audit.js +122 -0
  42. package/dist/commands/audit.js.map +1 -0
  43. package/dist/commands/bundle.d.ts +11 -0
  44. package/dist/commands/bundle.d.ts.map +1 -0
  45. package/dist/commands/bundle.js +299 -0
  46. package/dist/commands/bundle.js.map +1 -0
  47. package/dist/commands/clients.d.ts +6 -0
  48. package/dist/commands/clients.d.ts.map +1 -0
  49. package/dist/commands/clients.js +242 -0
  50. package/dist/commands/clients.js.map +1 -0
  51. package/dist/commands/completion.d.ts +18 -0
  52. package/dist/commands/completion.d.ts.map +1 -0
  53. package/dist/commands/completion.js +495 -0
  54. package/dist/commands/completion.js.map +1 -0
  55. package/dist/commands/connect.d.ts +10 -0
  56. package/dist/commands/connect.d.ts.map +1 -0
  57. package/dist/commands/connect.js +463 -0
  58. package/dist/commands/connect.js.map +1 -0
  59. package/dist/commands/create.d.ts +2 -0
  60. package/dist/commands/create.d.ts.map +1 -0
  61. package/dist/commands/create.js +607 -0
  62. package/dist/commands/create.js.map +1 -0
  63. package/dist/commands/delete.d.ts +2 -0
  64. package/dist/commands/delete.d.ts.map +1 -0
  65. package/dist/commands/delete.js +44 -0
  66. package/dist/commands/delete.js.map +1 -0
  67. package/dist/commands/doctor.d.ts +2 -0
  68. package/dist/commands/doctor.d.ts.map +1 -0
  69. package/dist/commands/doctor.js +259 -0
  70. package/dist/commands/doctor.js.map +1 -0
  71. package/dist/commands/export.d.ts +2 -0
  72. package/dist/commands/export.d.ts.map +1 -0
  73. package/dist/commands/export.js +93 -0
  74. package/dist/commands/export.js.map +1 -0
  75. package/dist/commands/gui.d.ts +2 -0
  76. package/dist/commands/gui.d.ts.map +1 -0
  77. package/dist/commands/gui.js +19 -0
  78. package/dist/commands/gui.js.map +1 -0
  79. package/dist/commands/import.d.ts +2 -0
  80. package/dist/commands/import.d.ts.map +1 -0
  81. package/dist/commands/import.js +102 -0
  82. package/dist/commands/import.js.map +1 -0
  83. package/dist/commands/info.d.ts +2 -0
  84. package/dist/commands/info.d.ts.map +1 -0
  85. package/dist/commands/info.js +151 -0
  86. package/dist/commands/info.js.map +1 -0
  87. package/dist/commands/list.d.ts +2 -0
  88. package/dist/commands/list.d.ts.map +1 -0
  89. package/dist/commands/list.js +90 -0
  90. package/dist/commands/list.js.map +1 -0
  91. package/dist/commands/reindex.d.ts +2 -0
  92. package/dist/commands/reindex.d.ts.map +1 -0
  93. package/dist/commands/reindex.js +186 -0
  94. package/dist/commands/reindex.js.map +1 -0
  95. package/dist/commands/rotate.d.ts +2 -0
  96. package/dist/commands/rotate.d.ts.map +1 -0
  97. package/dist/commands/rotate.js +67 -0
  98. package/dist/commands/rotate.js.map +1 -0
  99. package/dist/commands/secrets.d.ts +10 -0
  100. package/dist/commands/secrets.d.ts.map +1 -0
  101. package/dist/commands/secrets.js +293 -0
  102. package/dist/commands/secrets.js.map +1 -0
  103. package/dist/commands/start.d.ts +2 -0
  104. package/dist/commands/start.d.ts.map +1 -0
  105. package/dist/commands/start.js +234 -0
  106. package/dist/commands/start.js.map +1 -0
  107. package/dist/commands/stats.d.ts +2 -0
  108. package/dist/commands/stats.d.ts.map +1 -0
  109. package/dist/commands/stats.js +220 -0
  110. package/dist/commands/stats.js.map +1 -0
  111. package/dist/commands/stop.d.ts +2 -0
  112. package/dist/commands/stop.d.ts.map +1 -0
  113. package/dist/commands/stop.js +24 -0
  114. package/dist/commands/stop.js.map +1 -0
  115. package/dist/commands/templates.d.ts +2 -0
  116. package/dist/commands/templates.d.ts.map +1 -0
  117. package/dist/commands/templates.js +168 -0
  118. package/dist/commands/templates.js.map +1 -0
  119. package/dist/commands/trial.d.ts +2 -0
  120. package/dist/commands/trial.d.ts.map +1 -0
  121. package/dist/commands/trial.js +61 -0
  122. package/dist/commands/trial.js.map +1 -0
  123. package/dist/commands/uninstall.d.ts +2 -0
  124. package/dist/commands/uninstall.d.ts.map +1 -0
  125. package/dist/commands/uninstall.js +114 -0
  126. package/dist/commands/uninstall.js.map +1 -0
  127. package/dist/commands/update.d.ts +2 -0
  128. package/dist/commands/update.d.ts.map +1 -0
  129. package/dist/commands/update.js +104 -0
  130. package/dist/commands/update.js.map +1 -0
  131. package/dist/commands/verify.d.ts +2 -0
  132. package/dist/commands/verify.d.ts.map +1 -0
  133. package/dist/commands/verify.js +301 -0
  134. package/dist/commands/verify.js.map +1 -0
  135. package/dist/core/config.d.ts +25 -0
  136. package/dist/core/config.d.ts.map +1 -0
  137. package/dist/core/config.js +54 -0
  138. package/dist/core/config.js.map +1 -0
  139. package/dist/core/errors.d.ts +25 -0
  140. package/dist/core/errors.d.ts.map +1 -0
  141. package/dist/core/errors.js +53 -0
  142. package/dist/core/errors.js.map +1 -0
  143. package/dist/core/logger.d.ts +3 -0
  144. package/dist/core/logger.d.ts.map +1 -0
  145. package/dist/core/logger.js +12 -0
  146. package/dist/core/logger.js.map +1 -0
  147. package/dist/core/paths.d.ts +15 -0
  148. package/dist/core/paths.d.ts.map +1 -0
  149. package/dist/core/paths.js +51 -0
  150. package/dist/core/paths.js.map +1 -0
  151. package/dist/core/registry.d.ts +474 -0
  152. package/dist/core/registry.d.ts.map +1 -0
  153. package/dist/core/registry.js +186 -0
  154. package/dist/core/registry.js.map +1 -0
  155. package/dist/core/updater.d.ts +16 -0
  156. package/dist/core/updater.d.ts.map +1 -0
  157. package/dist/core/updater.js +317 -0
  158. package/dist/core/updater.js.map +1 -0
  159. package/dist/core/version.d.ts +2 -0
  160. package/dist/core/version.d.ts.map +1 -0
  161. package/dist/core/version.js +3 -0
  162. package/dist/core/version.js.map +1 -0
  163. package/dist/index.d.ts +13 -0
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +270 -0
  166. package/dist/index.js.map +1 -0
  167. package/dist/ingestion/chunker.d.ts +13 -0
  168. package/dist/ingestion/chunker.d.ts.map +1 -0
  169. package/dist/ingestion/chunker.js +107 -0
  170. package/dist/ingestion/chunker.js.map +1 -0
  171. package/dist/ingestion/cleaners.d.ts +10 -0
  172. package/dist/ingestion/cleaners.d.ts.map +1 -0
  173. package/dist/ingestion/cleaners.js +61 -0
  174. package/dist/ingestion/cleaners.js.map +1 -0
  175. package/dist/ingestion/detectors.d.ts +5 -0
  176. package/dist/ingestion/detectors.d.ts.map +1 -0
  177. package/dist/ingestion/detectors.js +25 -0
  178. package/dist/ingestion/detectors.js.map +1 -0
  179. package/dist/ingestion/fetchers.d.ts +38 -0
  180. package/dist/ingestion/fetchers.d.ts.map +1 -0
  181. package/dist/ingestion/fetchers.js +296 -0
  182. package/dist/ingestion/fetchers.js.map +1 -0
  183. package/dist/ingestion/github.d.ts +60 -0
  184. package/dist/ingestion/github.d.ts.map +1 -0
  185. package/dist/ingestion/github.js +314 -0
  186. package/dist/ingestion/github.js.map +1 -0
  187. package/dist/ingestion/pipeline.d.ts +3 -0
  188. package/dist/ingestion/pipeline.d.ts.map +1 -0
  189. package/dist/ingestion/pipeline.js +160 -0
  190. package/dist/ingestion/pipeline.js.map +1 -0
  191. package/dist/ingestion/types.d.ts +51 -0
  192. package/dist/ingestion/types.d.ts.map +1 -0
  193. package/dist/ingestion/types.js +2 -0
  194. package/dist/ingestion/types.js.map +1 -0
  195. package/dist/lib/auth.d.ts +2 -0
  196. package/dist/lib/auth.d.ts.map +1 -0
  197. package/dist/lib/auth.js +6 -0
  198. package/dist/lib/auth.js.map +1 -0
  199. package/dist/lib/embedding.d.ts +10 -0
  200. package/dist/lib/embedding.d.ts.map +1 -0
  201. package/dist/lib/embedding.js +21 -0
  202. package/dist/lib/embedding.js.map +1 -0
  203. package/dist/mcp/host.d.ts +16 -0
  204. package/dist/mcp/host.d.ts.map +1 -0
  205. package/dist/mcp/host.js +307 -0
  206. package/dist/mcp/host.js.map +1 -0
  207. package/dist/mcp/proxy-host.d.ts +25 -0
  208. package/dist/mcp/proxy-host.d.ts.map +1 -0
  209. package/dist/mcp/proxy-host.js +393 -0
  210. package/dist/mcp/proxy-host.js.map +1 -0
  211. package/dist/mcp/stdio-host.d.ts +19 -0
  212. package/dist/mcp/stdio-host.d.ts.map +1 -0
  213. package/dist/mcp/stdio-host.js +175 -0
  214. package/dist/mcp/stdio-host.js.map +1 -0
  215. package/dist/process/manager.d.ts +74 -0
  216. package/dist/process/manager.d.ts.map +1 -0
  217. package/dist/process/manager.js +322 -0
  218. package/dist/process/manager.js.map +1 -0
  219. package/dist/rag/models.d.ts +30 -0
  220. package/dist/rag/models.d.ts.map +1 -0
  221. package/dist/rag/models.js +30 -0
  222. package/dist/rag/models.js.map +1 -0
  223. package/dist/rag/store.d.ts +63 -0
  224. package/dist/rag/store.d.ts.map +1 -0
  225. package/dist/rag/store.js +505 -0
  226. package/dist/rag/store.js.map +1 -0
  227. package/dist/rag/types.d.ts +56 -0
  228. package/dist/rag/types.d.ts.map +1 -0
  229. package/dist/rag/types.js +2 -0
  230. package/dist/rag/types.js.map +1 -0
  231. package/dist/sources/plugins.d.ts +25 -0
  232. package/dist/sources/plugins.d.ts.map +1 -0
  233. package/dist/sources/plugins.js +55 -0
  234. package/dist/sources/plugins.js.map +1 -0
  235. package/dist/sources/registry.d.ts +19 -0
  236. package/dist/sources/registry.d.ts.map +1 -0
  237. package/dist/sources/registry.js +183 -0
  238. package/dist/sources/registry.js.map +1 -0
  239. package/dist/sources/types.d.ts +361 -0
  240. package/dist/sources/types.d.ts.map +1 -0
  241. package/dist/sources/types.js +59 -0
  242. package/dist/sources/types.js.map +1 -0
  243. package/dist/tui/index.d.ts +22 -0
  244. package/dist/tui/index.d.ts.map +1 -0
  245. package/dist/tui/index.js +711 -0
  246. package/dist/tui/index.js.map +1 -0
  247. package/dist/ui/format.d.ts +27 -0
  248. package/dist/ui/format.d.ts.map +1 -0
  249. package/dist/ui/format.js +80 -0
  250. package/dist/ui/format.js.map +1 -0
  251. package/dist/ui/help.d.ts +2 -0
  252. package/dist/ui/help.d.ts.map +1 -0
  253. package/dist/ui/help.js +106 -0
  254. package/dist/ui/help.js.map +1 -0
  255. package/dist/web/assets.d.ts +2 -0
  256. package/dist/web/assets.d.ts.map +1 -0
  257. package/dist/web/assets.js +659 -0
  258. package/dist/web/assets.js.map +1 -0
  259. package/dist/web/server.d.ts +9 -0
  260. package/dist/web/server.d.ts.map +1 -0
  261. package/dist/web/server.js +349 -0
  262. package/dist/web/server.js.map +1 -0
  263. package/package.json +105 -0
@@ -0,0 +1,607 @@
1
+ import { intro, outro, text, confirm, isCancel, cancel, spinner } from '@clack/prompts';
2
+ import chalk from 'chalk';
3
+ import fs from 'fs-extra';
4
+ import { slugify } from '../core/registry.js';
5
+ import { loadConfig } from '../core/config.js';
6
+ import { logger } from '../core/logger.js';
7
+ import { ServerAlreadyExistsError } from '../core/errors.js';
8
+ import { resolveEmbeddingModel } from '../lib/embedding.js';
9
+ import { createServer } from '../app/services/servers.js';
10
+ import { instantiateTemplate } from '../app/services/catalog.js';
11
+ import { getTemplate } from '../app/services/catalog.js';
12
+ import { promptCredentials, maskCredentials } from '../app/services/credentials.js';
13
+ import { applySourceAuth, parseCliCookie, parseCliHeaders, parseCliSources, sourceLabel } from '../sources/registry.js';
14
+ import { printTitle, printSection, printCommand, printDetails, printJson, truncate, ui, parseOption, } from '../ui/format.js';
15
+ // ── CLI parsing helpers ───────────────────────────────────────────────────────
16
+ /**
17
+ * Transforms `hoolix install <templateId> [positional-values...] [--name <name>] [flags]`
18
+ * into a create-compatible args array with explicit `--template` and `--input` flags.
19
+ * Exits with an error if the template is unknown.
20
+ */
21
+ async function normalizeInstallArgs(args, json) {
22
+ const templateId = args[1];
23
+ if (!templateId || templateId.startsWith('-')) {
24
+ if (json) {
25
+ printJson({ ok: false, error: 'Usage: hoolix install <template-id> [values...] [flags]' });
26
+ }
27
+ else {
28
+ logger.error('Usage: hoolix install <template-id> [positional-values...] [--name <name>] [--yes]');
29
+ printCommand('hoolix templates list');
30
+ }
31
+ process.exit(1);
32
+ }
33
+ // Collect positional values — non-flag args between templateId and first flag
34
+ const positionals = [];
35
+ let firstFlagIdx = args.length;
36
+ for (let i = 2; i < args.length; i++) {
37
+ if (args[i].startsWith('-')) {
38
+ firstFlagIdx = i;
39
+ break;
40
+ }
41
+ positionals.push(args[i]);
42
+ }
43
+ const flagArgs = args.slice(firstFlagIdx);
44
+ // Already using explicit --template: pass through unchanged
45
+ if (flagArgs.includes('--template'))
46
+ return args;
47
+ // Load template early to map positionals to named inputs
48
+ let template;
49
+ try {
50
+ template = await getTemplate(templateId);
51
+ }
52
+ catch (e) {
53
+ if (json)
54
+ printJson({ ok: false, error: e?.message || String(e) });
55
+ else {
56
+ logger.error(e?.message || String(e));
57
+ printCommand('hoolix templates list');
58
+ }
59
+ process.exit(1);
60
+ return args; // unreachable — satisfies TS
61
+ }
62
+ // Extract --name flag and strip it from flagArgs (name will live at args[1])
63
+ const nameFromFlag = parseOption(flagArgs, '--name');
64
+ const cleanedFlags = [];
65
+ for (let i = 0; i < flagArgs.length; i++) {
66
+ if (flagArgs[i] === '--name' && i + 1 < flagArgs.length) {
67
+ i++;
68
+ continue;
69
+ }
70
+ cleanedFlags.push(flagArgs[i]);
71
+ }
72
+ // Map positionals → required input names (skip keys already set via --input)
73
+ const existingInputs = parseCliInputs(cleanedFlags);
74
+ const inputFlags = [];
75
+ if (positionals.length > 0) {
76
+ const requiredInputs = template.inputs.filter((i) => i.required);
77
+ positionals.forEach((val, idx) => {
78
+ const input = requiredInputs[idx];
79
+ if (input && !existingInputs[input.name]) {
80
+ inputFlags.push('--input', `${input.name}=${val}`);
81
+ }
82
+ });
83
+ }
84
+ // docs-rag: positional[0] is the URL (when no --url flag already present)
85
+ const urlFlags = [];
86
+ if (template.kind !== 'mcp-server' &&
87
+ positionals.length > 0 &&
88
+ !cleanedFlags.includes('--url')) {
89
+ urlFlags.push('--url', positionals[0]);
90
+ }
91
+ return [
92
+ 'install',
93
+ ...(nameFromFlag ? [nameFromFlag] : []),
94
+ '--template', templateId,
95
+ ...inputFlags,
96
+ ...urlFlags,
97
+ ...cleanedFlags,
98
+ ];
99
+ }
100
+ function parseCliInputs(args) {
101
+ const inputs = {};
102
+ for (let i = 0; i < args.length; i++) {
103
+ if (args[i] === '--input' && args[i + 1]) {
104
+ const sep = args[i + 1].indexOf('=');
105
+ if (sep > 0) {
106
+ inputs[args[i + 1].slice(0, sep)] = args[i + 1].slice(sep + 1);
107
+ }
108
+ i++;
109
+ }
110
+ }
111
+ return inputs;
112
+ }
113
+ function parseCliCredentials(args) {
114
+ const creds = {};
115
+ for (let i = 0; i < args.length; i++) {
116
+ if (args[i] === '--credential' && args[i + 1]) {
117
+ const sep = args[i + 1].indexOf('=');
118
+ if (sep > 0) {
119
+ creds[args[i + 1].slice(0, sep)] = args[i + 1].slice(sep + 1);
120
+ }
121
+ i++;
122
+ }
123
+ }
124
+ return creds;
125
+ }
126
+ async function loadEnvFile(filePath) {
127
+ const content = await fs.readFile(filePath, 'utf8');
128
+ const result = {};
129
+ for (const line of content.split('\n')) {
130
+ const trimmed = line.trim();
131
+ if (!trimmed || trimmed.startsWith('#'))
132
+ continue;
133
+ const sep = trimmed.indexOf('=');
134
+ if (sep <= 0)
135
+ continue;
136
+ const key = trimmed.slice(0, sep).trim();
137
+ const rawVal = trimmed.slice(sep + 1).trim();
138
+ // Strip surrounding quotes (single or double)
139
+ result[key] = rawVal.replace(/^(['"])(.*)\1$/, '$2');
140
+ }
141
+ return result;
142
+ }
143
+ async function promptTemplateInputs(template, provided, nonInteractive) {
144
+ const result = { ...provided };
145
+ for (const input of template.inputs) {
146
+ if (result[input.name])
147
+ continue;
148
+ if (!input.required)
149
+ continue;
150
+ if (nonInteractive) {
151
+ throw new Error(`Required input "${input.label}" is missing. Pass --input ${input.name}=<value>.`);
152
+ }
153
+ const raw = await text({
154
+ message: input.label + (input.placeholder ? '' : ''),
155
+ placeholder: input.placeholder ?? '',
156
+ validate: (v) => (v && v.trim().length > 0 ? undefined : `${input.label} is required`),
157
+ });
158
+ if (isCancel(raw)) {
159
+ cancel('Cancelled');
160
+ process.exit(0);
161
+ }
162
+ result[input.name] = String(raw).trim();
163
+ }
164
+ return result;
165
+ }
166
+ // ── Main command ──────────────────────────────────────────────────────────────
167
+ export async function cmdCreate(args, json) {
168
+ const isInstall = args[0] === 'install';
169
+ if (isInstall)
170
+ args = await normalizeInstallArgs(args, json);
171
+ if (!json)
172
+ intro(chalk.bold(isInstall ? 'hoolix install' : 'hoolix create'));
173
+ let name = args[1];
174
+ if (name?.startsWith('-'))
175
+ name = undefined; // install mode: name will be prompted
176
+ let url = '';
177
+ let sources = [];
178
+ let templateDefinition;
179
+ let templateName;
180
+ const urlIdx = args.indexOf('--url');
181
+ if (urlIdx !== -1 && args[urlIdx + 1])
182
+ url = args[urlIdx + 1];
183
+ const templateId = parseOption(args, '--template');
184
+ const repoInput = parseOption(args, '--repo');
185
+ const envFilePath = parseOption(args, '--env-file');
186
+ const force = args.includes('--yes') || args.includes('-y');
187
+ // ── mcp-server kind branch ──────────────────────────────────────────────────
188
+ if (templateId) {
189
+ const template = await getTemplate(templateId).catch(() => null);
190
+ if (template?.kind === 'mcp-server') {
191
+ if (!json)
192
+ return cmdCreateMcpServer(args, json, name, templateId, template, force, envFilePath);
193
+ // json mode falls through to same logic below
194
+ return cmdCreateMcpServerJson(args, name, templateId, template, envFilePath);
195
+ }
196
+ }
197
+ // ── docs-rag branch (existing, unchanged) ────────────────────────────────────
198
+ try {
199
+ sources = parseCliSources(args);
200
+ const headers = parseCliHeaders(args);
201
+ const cookie = parseCliCookie(args);
202
+ sources = applySourceAuth(sources, { headers, cookie });
203
+ if (templateId) {
204
+ const inputs = {};
205
+ if (url)
206
+ inputs.url = url;
207
+ if (repoInput)
208
+ inputs.repo = repoInput;
209
+ const instantiated = await instantiateTemplate(templateId, inputs);
210
+ templateDefinition = {
211
+ ...instantiated.definition,
212
+ sources: applySourceAuth(instantiated.definition.sources, { headers, cookie }),
213
+ };
214
+ templateName = instantiated.template.name;
215
+ }
216
+ else if (url && (Object.keys(headers).length > 0 || cookie)) {
217
+ templateDefinition = {
218
+ version: 1,
219
+ sources: applySourceAuth([{ type: 'docs', url, label: 'docs' }], { headers, cookie }),
220
+ };
221
+ }
222
+ }
223
+ catch (e) {
224
+ if (json)
225
+ printJson({ ok: false, error: e?.message || String(e) });
226
+ else
227
+ logger.error(e?.message || String(e));
228
+ process.exit(1);
229
+ }
230
+ if (!name) {
231
+ if (json) {
232
+ printJson({ ok: false, error: 'Missing server name. Next: pass hoolix create <name> --url <url> --yes --json.' });
233
+ process.exit(1);
234
+ }
235
+ const nameInput = await text({
236
+ message: 'Server name (human readable)',
237
+ placeholder: 'My Company Docs',
238
+ validate: (v) => (v && v.length > 1 ? undefined : 'Name is required'),
239
+ });
240
+ if (isCancel(nameInput)) {
241
+ cancel('Cancelled');
242
+ process.exit(0);
243
+ }
244
+ name = String(nameInput);
245
+ }
246
+ if (!url && sources.length === 0 && !templateDefinition) {
247
+ if (json) {
248
+ printJson({ ok: false, error: 'Missing --url, --source, or --template. Next: pass hoolix create <name> --url <url> --yes --json, use --source docs:<url>, or --template docs-rag --url <url>.' });
249
+ process.exit(1);
250
+ }
251
+ const urlInput = await text({
252
+ message: 'Documentation URL (llms.txt, docs site, or GitHub)',
253
+ placeholder: 'https://docs.example.com/llms.txt',
254
+ validate: (v) => {
255
+ if (!v)
256
+ return 'URL is required';
257
+ try {
258
+ new URL(v);
259
+ return undefined;
260
+ }
261
+ catch {
262
+ return 'Must be a valid URL';
263
+ }
264
+ },
265
+ });
266
+ if (isCancel(urlInput)) {
267
+ cancel('Cancelled');
268
+ process.exit(0);
269
+ }
270
+ url = String(urlInput);
271
+ }
272
+ const slug = slugify(name);
273
+ if (json && !force) {
274
+ printJson({ ok: false, error: 'Creation requires confirmation. Next: pass --yes with --json.' });
275
+ process.exit(1);
276
+ }
277
+ let confirmed = force;
278
+ if (!force) {
279
+ const sourceText = sources.length > 0
280
+ ? sources.map(sourceLabel).join(', ')
281
+ : templateDefinition
282
+ ? `template ${templateId}`
283
+ : url;
284
+ confirmed = await confirm({ message: `Create server "${name}" (${slug}) from ${sourceText}?` });
285
+ }
286
+ if (isCancel(confirmed) || !confirmed) {
287
+ cancel('Cancelled');
288
+ process.exit(0);
289
+ }
290
+ const s = json ? null : spinner();
291
+ let ragSpinner = null;
292
+ let ingestStopped = false;
293
+ let lastIngestMessage = 'Ingestion complete';
294
+ s?.start('Ingesting documentation... (10–120s for multi-page llms.txt sites)');
295
+ try {
296
+ const cfg = await loadConfig();
297
+ const embeddingModel = resolveEmbeddingModel(args, cfg);
298
+ const created = await createServer({
299
+ name,
300
+ url: sources.length > 0 || templateDefinition ? undefined : url,
301
+ sources: sources.length > 0 ? sources : undefined,
302
+ definition: templateDefinition,
303
+ templateId,
304
+ embeddingModel,
305
+ maxChunks: 6000,
306
+ maxPages: 80,
307
+ onProgress: (p) => {
308
+ if (p.stage === 'index') {
309
+ if (!ingestStopped) {
310
+ ingestStopped = true;
311
+ s?.stop(lastIngestMessage);
312
+ ragSpinner = json ? null : spinner();
313
+ ragSpinner?.start('Building search index...');
314
+ }
315
+ if (p.message && p.message !== 'Building search index...')
316
+ ragSpinner?.message(p.message);
317
+ return;
318
+ }
319
+ if (p.stage === 'embed') {
320
+ if (p.message)
321
+ ragSpinner?.message(p.message);
322
+ return;
323
+ }
324
+ if (p.message && !ingestStopped) {
325
+ const suffix = p.current != null && p.total != null ? ` (${p.current}/${p.total})` : '';
326
+ lastIngestMessage = `${p.message}${suffix}`;
327
+ s?.message(lastIngestMessage);
328
+ }
329
+ },
330
+ });
331
+ const scheduleValue = parseOption(args, '--schedule');
332
+ if (scheduleValue) {
333
+ const { updateReindexSchedule } = await import('../app/services/servers.js');
334
+ const hours = scheduleValue === 'daily' ? 24 : scheduleValue === 'hourly' ? 1 : parseInt(scheduleValue, 10);
335
+ if (Number.isFinite(hours) && hours > 0)
336
+ await updateReindexSchedule(created.meta.slug, hours);
337
+ }
338
+ const { meta, ingestion: result } = created;
339
+ if (!ingestStopped) {
340
+ s?.stop(`Ingestion complete: ${result.stats.totalChunks} chunks, ${(result.stats.totalChars / 1000).toFixed(1)}k chars`);
341
+ }
342
+ if (created.indexWarning) {
343
+ ragSpinner?.stop('Search index step had issues (server registered; you can reindex later)');
344
+ if (!json)
345
+ logger.warn('RAG indexing error:', created.indexWarning);
346
+ }
347
+ else {
348
+ ragSpinner?.stop(`Search index built (${created.indexLabel})`);
349
+ }
350
+ const pagesInfo = result.sourceUrl.includes('llms-full.txt')
351
+ ? 'llms-full.txt (concatenated documentation)'
352
+ : `${result.stats.pagesProcessed} page(s)`;
353
+ const definitionSources = meta.definition?.sources ?? sources;
354
+ const definitionMultiSource = definitionSources.length > 1;
355
+ if (json) {
356
+ printJson({
357
+ ok: true,
358
+ slug: meta.slug,
359
+ name: meta.name,
360
+ sourceUrl: meta.sourceUrl,
361
+ sourceType: meta.sourceType,
362
+ chunkCount: meta.chunkCount,
363
+ pagesProcessed: result.stats.pagesProcessed,
364
+ embeddingModel: meta.embeddingModel,
365
+ vectorIndexed: meta.vectorIndexed,
366
+ ...(sources.length > 0 || templateDefinition ? {
367
+ sourceCount: definitionSources.length,
368
+ sources: definitionSources,
369
+ } : {}),
370
+ ...(meta.definition?.template ? { template: meta.definition.template } : {}),
371
+ next: [`hoolix start ${meta.slug}`, `hoolix verify ${meta.slug} --json`],
372
+ });
373
+ }
374
+ else {
375
+ outro(`${ui.success('✓')} Server "${name}" created successfully`);
376
+ printTitle('Ready', 'Your authenticated MCP server is registered.');
377
+ printDetails([
378
+ ['Slug', meta.slug],
379
+ ['Chunks', `${meta.chunkCount.toLocaleString()} from ${pagesInfo}`],
380
+ [definitionMultiSource ? 'Sources' : 'Source', definitionMultiSource ? definitionSources.map(sourceLabel).join(', ') : truncate(result.sourceUrl, 92)],
381
+ ['Template', templateName],
382
+ ]);
383
+ console.log('');
384
+ printSection('Next');
385
+ printCommand(`hoolix start ${meta.slug}`);
386
+ console.log('');
387
+ }
388
+ }
389
+ catch (err) {
390
+ s?.stop('Ingestion failed');
391
+ if (json) {
392
+ printJson({
393
+ ok: false,
394
+ error: err instanceof ServerAlreadyExistsError
395
+ ? `A server with slug "${slug}" already exists.`
396
+ : err.message || String(err),
397
+ next: err instanceof ServerAlreadyExistsError
398
+ ? `hoolix delete ${slug} --yes`
399
+ : 'Check the URL and retry.',
400
+ });
401
+ }
402
+ else if (err instanceof ServerAlreadyExistsError) {
403
+ logger.error(`A server with slug "${slug}" already exists.`);
404
+ }
405
+ else {
406
+ logger.error('Failed to create server:', err.message || err);
407
+ }
408
+ process.exit(1);
409
+ }
410
+ }
411
+ // ── mcp-server create (interactive) ──────────────────────────────────────────
412
+ async function cmdCreateMcpServer(args, _json, nameArg, templateId, template, force, envFilePath) {
413
+ // 1. Resolve name
414
+ let name = nameArg;
415
+ if (!name) {
416
+ const nameInput = await text({
417
+ message: 'Server name (human readable)',
418
+ placeholder: `My ${template.name}`,
419
+ validate: (v) => (v && v.length > 1 ? undefined : 'Name is required'),
420
+ });
421
+ if (isCancel(nameInput)) {
422
+ cancel('Cancelled');
423
+ process.exit(0);
424
+ }
425
+ name = String(nameInput);
426
+ }
427
+ const slug = slugify(name);
428
+ // 2. Collect non-sensitive inputs (e.g. allowedPath, dbPath)
429
+ const cliInputs = parseCliInputs(args);
430
+ const templateInputs = await promptTemplateInputs(template, cliInputs, false);
431
+ // 3. Load env file if provided (supplements process.env for credential auto-detection)
432
+ const envOverrides = envFilePath
433
+ ? await loadEnvFile(envFilePath).catch((e) => {
434
+ logger.warn(`Could not load --env-file "${envFilePath}": ${e?.message || e}`);
435
+ return {};
436
+ })
437
+ : {};
438
+ // 4. Collect sensitive credentials
439
+ const cliCreds = parseCliCredentials(args);
440
+ const mergedEnv = { ...process.env, ...envOverrides };
441
+ let credentials = {};
442
+ try {
443
+ credentials = await promptCredentials(template, {
444
+ provided: cliCreds,
445
+ env: mergedEnv,
446
+ nonInteractive: false,
447
+ });
448
+ }
449
+ catch (e) {
450
+ logger.error(e?.message || String(e));
451
+ process.exit(1);
452
+ }
453
+ // 5. Confirm
454
+ if (!force) {
455
+ const confirmed = await confirm({
456
+ message: `Configure server "${name}" (${slug}) using ${template.name}?`,
457
+ });
458
+ if (isCancel(confirmed) || !confirmed) {
459
+ cancel('Cancelled');
460
+ process.exit(0);
461
+ }
462
+ }
463
+ // 6. Build definition (inputs baked in)
464
+ let templateDefinition;
465
+ try {
466
+ const instantiated = await instantiateTemplate(templateId, templateInputs);
467
+ templateDefinition = instantiated.definition;
468
+ }
469
+ catch (e) {
470
+ logger.error('Failed to build template definition:', e?.message || e);
471
+ process.exit(1);
472
+ }
473
+ // 7. Create (no ingestion spinner needed)
474
+ const s = spinner();
475
+ s.start(`Configuring ${template.name}...`);
476
+ try {
477
+ const created = await createServer({
478
+ name,
479
+ definition: templateDefinition,
480
+ templateId,
481
+ credentials,
482
+ embeddingModel: 'fuse',
483
+ onProgress: (p) => {
484
+ if (p.message)
485
+ s.message(p.message);
486
+ },
487
+ });
488
+ s.stop(`${ui.success('✓')} Server "${name}" configured`);
489
+ const { meta } = created;
490
+ const maskedCreds = maskCredentials(credentials, template);
491
+ const credRows = Object.entries(maskedCreds).map(([k, v]) => [k, v]);
492
+ outro(`${ui.success('✓')} "${name}" is ready`);
493
+ printTitle('Ready', `${template.name} (${templateId})`);
494
+ printDetails([
495
+ ['Slug', meta.slug],
496
+ ['Kind', 'MCP server'],
497
+ ['Transport', template.server?.transport ?? 'stdio'],
498
+ ['Template', template.name],
499
+ ...(template.server?.npmPackage ? [['Package', template.server.npmPackage]] : []),
500
+ ...credRows,
501
+ ...Object.entries(templateInputs).map(([k, v]) => [k, v]),
502
+ ]);
503
+ console.log('');
504
+ printSection('Next steps');
505
+ printCommand(`hoolix connect ${meta.slug}`);
506
+ if (template.server?.transport === 'stdio') {
507
+ console.log(` ${ui.muted('Your client will spawn the server process automatically.')}`);
508
+ }
509
+ console.log('');
510
+ if (template.server?.npmPackage) {
511
+ printSection('Required package (installed by client on first run)');
512
+ console.log(` ${ui.accent('›')} ${chalk.cyan(`npx -y ${template.server.npmPackage}@latest`)}`);
513
+ console.log('');
514
+ }
515
+ }
516
+ catch (err) {
517
+ s.stop('Configuration failed');
518
+ if (err instanceof ServerAlreadyExistsError) {
519
+ logger.error(`A server with slug "${slug}" already exists. Next: hoolix delete ${slug} --yes`);
520
+ }
521
+ else {
522
+ logger.error('Failed to configure server:', err?.message || err);
523
+ }
524
+ process.exit(1);
525
+ }
526
+ }
527
+ // ── mcp-server create (--json) ────────────────────────────────────────────────
528
+ async function cmdCreateMcpServerJson(args, nameArg, templateId, template, envFilePath) {
529
+ const force = args.includes('--yes') || args.includes('-y');
530
+ if (!force) {
531
+ printJson({ ok: false, error: 'mcp-server creation requires --yes with --json.' });
532
+ process.exit(1);
533
+ }
534
+ const name = nameArg;
535
+ if (!name) {
536
+ printJson({ ok: false, error: 'Missing server name. Next: hoolix create <name> --template <id> --yes --json.' });
537
+ process.exit(1);
538
+ }
539
+ const slug = slugify(name);
540
+ const envOverrides = envFilePath
541
+ ? await loadEnvFile(envFilePath).catch(() => ({}))
542
+ : {};
543
+ const mergedEnv = { ...process.env, ...envOverrides };
544
+ let credentials = {};
545
+ try {
546
+ credentials = await promptCredentials(template, {
547
+ provided: parseCliCredentials(args),
548
+ env: mergedEnv,
549
+ nonInteractive: true,
550
+ });
551
+ }
552
+ catch (e) {
553
+ printJson({ ok: false, error: e?.message || String(e), next: `Set required env vars or pass --credential key=value` });
554
+ process.exit(1);
555
+ }
556
+ const cliInputs = parseCliInputs(args);
557
+ // For JSON mode, required inputs must be supplied via --input flags
558
+ for (const input of template.inputs) {
559
+ if (input.required && !cliInputs[input.name]) {
560
+ printJson({ ok: false, error: `Required input "${input.name}" missing. Pass --input ${input.name}=<value>.` });
561
+ process.exit(1);
562
+ }
563
+ }
564
+ let templateDefinition;
565
+ try {
566
+ const instantiated = await instantiateTemplate(templateId, cliInputs);
567
+ templateDefinition = instantiated.definition;
568
+ }
569
+ catch (e) {
570
+ printJson({ ok: false, error: e?.message || String(e) });
571
+ process.exit(1);
572
+ }
573
+ try {
574
+ const created = await createServer({
575
+ name,
576
+ definition: templateDefinition,
577
+ templateId,
578
+ credentials,
579
+ embeddingModel: 'fuse',
580
+ });
581
+ const { meta } = created;
582
+ const maskedCreds = maskCredentials(credentials, template);
583
+ printJson({
584
+ ok: true,
585
+ slug: meta.slug,
586
+ name: meta.name,
587
+ kind: 'mcp-server',
588
+ templateId,
589
+ transport: template.server?.transport ?? 'stdio',
590
+ credentialKeys: meta.credentialKeys,
591
+ maskedCredentials: maskedCreds,
592
+ templateInputs: templateDefinition.template?.inputs ?? {},
593
+ next: [`hoolix connect ${meta.slug} --client claude --yes --json`],
594
+ });
595
+ }
596
+ catch (err) {
597
+ printJson({
598
+ ok: false,
599
+ error: err instanceof ServerAlreadyExistsError
600
+ ? `A server with slug "${slug}" already exists.`
601
+ : err?.message || String(err),
602
+ next: err instanceof ServerAlreadyExistsError ? `hoolix delete ${slug} --yes` : undefined,
603
+ });
604
+ process.exit(1);
605
+ }
606
+ }
607
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEpF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAExH,OAAO,EACL,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,GAC3F,MAAM,iBAAiB,CAAC;AAEzB,iFAAiF;AAEjF;;;;GAIG;AACH,KAAK,UAAU,oBAAoB,CAAC,IAAc,EAAE,IAAa;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,yDAAyD,EAAE,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAC;YACnG,YAAY,CAAC,uBAAuB,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8EAA8E;IAC9E,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,YAAY,GAAG,CAAC,CAAC;YAAC,MAAM;QAAC,CAAC;QACzD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAE1C,4DAA4D;IAC5D,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,yDAAyD;IACzD,IAAI,QAAiD,CAAC;IACtD,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,IAAI;YAAE,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAC9D,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;QAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC,CAAC,6BAA6B;IAC5C,CAAC;IAED,6EAA6E;IAC7E,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrD,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC3E,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,6EAA6E;IAC7E,MAAM,cAAc,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjE,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IACE,QAAQ,CAAC,IAAI,KAAK,YAAY;QAC9B,WAAW,CAAC,MAAM,GAAG,CAAC;QACtB,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC/B,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,OAAO;QACL,SAAS;QACT,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,YAAY,EAAE,UAAU;QACxB,GAAG,UAAU;QACb,GAAG,QAAQ;QACX,GAAG,YAAY;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAc;IACpC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACjE,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAc;IACzC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,cAAc,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAgB;IACzC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,GAAG,IAAI,CAAC;YAAE,SAAS;QACvB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,8CAA8C;QAC9C,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,QAAiD,EACjD,QAAgC,EAChC,cAAuB;IAEvB,MAAM,MAAM,GAA2B,EAAE,GAAG,QAAQ,EAAE,CAAC;IACvD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,SAAS;QAC9B,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,mBAAmB,KAAK,CAAC,KAAK,8BAA8B,KAAK,CAAC,IAAI,WAAW,CAClF,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC;YACrB,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;YACpC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,cAAc,CAAC;SACvF,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,IAAa;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IACxC,IAAI,SAAS;QAAE,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI;QAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IAE7E,IAAI,IAAI,GAAuB,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;QAAE,IAAI,GAAG,SAAS,CAAC,CAAC,sCAAsC;IACnF,IAAI,GAAG,GAAI,EAAE,CAAC;IACd,IAAI,OAAO,GAAuB,EAAE,CAAC;IACrC,IAAI,kBAAgD,CAAC;IACrD,IAAI,YAAgC,CAAC;IAErC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAAE,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE5D,+EAA+E;IAC/E,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEjE,IAAI,QAAQ,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI;gBAAE,OAAO,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;YACjG,8CAA8C;YAC9C,OAAO,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,gFAAgF;IAEhF,IAAI,CAAC;QACH,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACxD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;YAC1B,IAAI,SAAS;gBAAE,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;YACvC,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACnE,kBAAkB,GAAG;gBACnB,GAAG,YAAY,CAAC,UAAU;gBAC1B,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;aAC/E,CAAC;YACF,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC5C,CAAC;aAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;YAC9D,kBAAkB,GAAG;gBACnB,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;aACtF,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,IAAI;YAAE,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;YAC9D,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gFAAgF,EAAE,CAAC,CAAC;YAClH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC;YAC3B,OAAO,EAAG,8BAA8B;YACxC,WAAW,EAAE,iBAAiB;YAC9B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;SACtE,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAClE,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxD,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gKAAgK,EAAE,CAAC,CAAC;YAClM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;YAC1B,OAAO,EAAG,oDAAoD;YAC9D,WAAW,EAAE,mCAAmC;YAChD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBACd,IAAI,CAAC,CAAC;oBAAE,OAAO,iBAAiB,CAAC;gBACjC,IAAI,CAAC;oBAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBAAC,OAAO,SAAS,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,OAAO,qBAAqB,CAAC;gBAAC,CAAC;YAC/E,CAAC;SACF,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QACjE,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,GAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,+DAA+D,EAAE,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,SAAS,GAAqB,KAAK,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;YACnC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACrC,CAAC,CAAC,kBAAkB;gBAClB,CAAC,CAAC,YAAY,UAAU,EAAE;gBAC1B,CAAC,CAAC,GAAG,CAAC;QACV,SAAS,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,kBAAkB,IAAI,MAAM,IAAI,UAAU,UAAU,GAAG,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAEhF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAClC,IAAI,UAAU,GAAQ,IAAI,CAAC;IAC3B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,iBAAiB,GAAG,oBAAoB,CAAC;IAC7C,CAAC,EAAE,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAE/E,IAAI,CAAC;QACH,MAAM,GAAG,GAAc,MAAM,UAAU,EAAE,CAAC;QAC1C,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;YACjC,IAAI;YACJ,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;YAC/D,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACjD,UAAU,EAAE,kBAAkB;YAC9B,UAAU;YACV,cAAc;YACd,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,CAAC,CAAmB,EAAE,EAAE;gBAClC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;oBACxB,IAAI,CAAC,aAAa,EAAE,CAAC;wBACnB,aAAa,GAAG,IAAI,CAAC;wBACrB,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;wBAC3B,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;wBACrC,UAAU,EAAE,KAAK,CAAC,0BAA0B,CAAC,CAAC;oBAChD,CAAC;oBACD,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,0BAA0B;wBAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC1F,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;oBACxB,IAAI,CAAC,CAAC,OAAO;wBAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC9C,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;oBAChC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxF,iBAAiB,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;oBAC5C,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACtD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;YAC7E,MAAM,KAAK,GAAG,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YAC5G,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;gBAAE,MAAM,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjG,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC5C,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,CAAC,EAAE,IAAI,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,WAAW,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3H,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,UAAU,EAAE,IAAI,CAAC,yEAAyE,CAAC,CAAC;YAC5F,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,UAAU,EAAE,IAAI,CAAC,uBAAuB,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC1D,CAAC,CAAC,4CAA4C;YAC9C,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,UAAU,CAAC;QAC7C,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,IAAI,OAAO,CAAC;QAC9D,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;QAE3D,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC;gBACR,EAAE,EAAc,IAAI;gBACpB,IAAI,EAAY,IAAI,CAAC,IAAI;gBACzB,IAAI,EAAY,IAAI,CAAC,IAAI;gBACzB,SAAS,EAAO,IAAI,CAAC,SAAS;gBAC9B,UAAU,EAAM,IAAI,CAAC,UAAU;gBAC/B,UAAU,EAAM,IAAI,CAAC,UAAU;gBAC/B,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc;gBAC3C,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,aAAa,EAAG,IAAI,CAAC,aAAa;gBAClC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC;oBAC7C,WAAW,EAAE,iBAAiB,CAAC,MAAM;oBACrC,OAAO,EAAE,iBAAiB;iBAC3B,CAAC,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5E,IAAI,EAAY,CAAC,gBAAgB,IAAI,CAAC,IAAI,EAAE,EAAE,iBAAiB,IAAI,CAAC,IAAI,SAAS,CAAC;aACnF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,wBAAwB,CAAC,CAAC;YAClE,UAAU,CAAC,OAAO,EAAE,8CAA8C,CAAC,CAAC;YACpE,YAAY,CAAC;gBACX,CAAC,MAAM,EAAI,IAAI,CAAC,IAAI,CAAC;gBACrB,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,SAAS,SAAS,EAAE,CAAC;gBACnE,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBACtJ,CAAC,UAAU,EAAE,YAAY,CAAC;aAC3B,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,YAAY,CAAC,MAAM,CAAC,CAAC;YACrB,YAAY,CAAC,gBAAgB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5B,IAAI,IAAI,EAAE,CAAC;YACT,SAAS,CAAC;gBACR,EAAE,EAAK,KAAK;gBACZ,KAAK,EAAE,GAAG,YAAY,wBAAwB;oBAC5C,CAAC,CAAC,uBAAuB,IAAI,mBAAmB;oBAChD,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;gBAC9B,IAAI,EAAE,GAAG,YAAY,wBAAwB;oBAC3C,CAAC,CAAC,iBAAiB,IAAI,QAAQ;oBAC/B,CAAC,CAAC,0BAA0B;aAC/B,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,YAAY,wBAAwB,EAAE,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,uBAAuB,IAAI,mBAAmB,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF,KAAK,UAAU,kBAAkB,CAC/B,IAAc,EACd,KAAc,EACd,OAA2B,EAC3B,UAAkB,EAClB,QAAiD,EACjD,KAAc,EACd,WAA+B;IAE/B,kBAAkB;IAClB,IAAI,IAAI,GAAG,OAAO,CAAC;IACnB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC;YAC3B,OAAO,EAAE,8BAA8B;YACvC,WAAW,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE;YAClC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;SACtE,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAClE,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,6DAA6D;IAC7D,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAE9E,uFAAuF;IACvF,MAAM,YAAY,GAA2B,WAAW;QACtD,CAAC,CAAC,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE;YAC9C,MAAM,CAAC,IAAI,CAAC,8BAA8B,WAAW,MAAM,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9E,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IAEP,mCAAmC;IACnC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,YAAY,EAAuB,CAAC;IAC3E,IAAI,WAAW,GAA2B,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE;YAC9C,QAAQ,EAAE,QAAQ;YAClB,GAAG,EAAE,SAAS;YACd,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,aAAa;IACb,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,qBAAqB,IAAI,MAAM,IAAI,WAAW,QAAQ,CAAC,IAAI,GAAG;SACxE,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IAClF,CAAC;IAED,wCAAwC;IACxC,IAAI,kBAAoC,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC3E,kBAAkB,GAAG,YAAY,CAAC,UAAU,CAAC;IAC/C,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0CAA0C;IAC1C,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;YACjC,IAAI;YACJ,UAAU,EAAE,kBAAkB;YAC9B,UAAU;YACV,WAAW;YACX,cAAc,EAAE,MAAM;YACtB,UAAU,EAAE,CAAC,CAAmB,EAAE,EAAE;gBAClC,IAAI,CAAC,CAAC,OAAO;oBAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;SACF,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc,CAAC,CAAC;QAEzD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAC9C,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAqB,CACvC,CAAC;QAEF,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC;QAC/C,UAAU,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAI,KAAK,UAAU,GAAG,CAAC,CAAC;QACxD,YAAY,CAAC;YACX,CAAC,MAAM,EAAO,IAAI,CAAC,IAAI,CAAC;YACxB,CAAC,MAAM,EAAO,YAAY,CAAC;YAC3B,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,IAAI,OAAO,CAAC;YACpD,CAAC,UAAU,EAAG,QAAQ,CAAC,IAAI,CAAC;YAC5B,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrG,GAAG,QAAQ;YACX,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAqB,CAAC;SAC9E,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,YAAY,CAAC,YAAY,CAAC,CAAC;QAC3B,YAAY,CAAC,kBAAkB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,IAAI,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,0DAA0D,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;YAChC,YAAY,CAAC,qDAAqD,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,MAAM,CAAC,UAAU,SAAS,CAAC,EAAE,CAAC,CAAC;YAChG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC/B,IAAI,GAAG,YAAY,wBAAwB,EAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,uBAAuB,IAAI,yCAAyC,IAAI,QAAQ,CAAC,CAAC;QACjG,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,KAAK,UAAU,sBAAsB,CACnC,IAAc,EACd,OAA2B,EAC3B,UAAkB,EAClB,QAAiD,EACjD,WAA+B;IAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iDAAiD,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC;IACrB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,+EAA+E,EAAE,CAAC,CAAC;QACjH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,MAAM,YAAY,GAA2B,WAAW;QACtD,CAAC,CAAC,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,YAAY,EAAuB,CAAC;IAE3E,IAAI,WAAW,GAA2B,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE;YAC9C,QAAQ,EAAE,mBAAmB,CAAC,IAAI,CAAC;YACnC,GAAG,EAAE,SAAS;YACd,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,sDAAsD,EAAE,CAAC,CAAC;QACvH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACvC,oEAAoE;IACpE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,KAAK,CAAC,IAAI,2BAA2B,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;YAC/G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,kBAAoC,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACtE,kBAAkB,GAAG,YAAY,CAAC,UAAU,CAAC;IAC/C,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;YACjC,IAAI;YACJ,UAAU,EAAE,kBAAkB;YAC9B,UAAU;YACV,WAAW;YACX,cAAc,EAAE,MAAM;SACvB,CAAC,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC3D,SAAS,CAAC;YACR,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,YAAY;YAClB,UAAU;YACV,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,IAAI,OAAO;YAChD,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,iBAAiB,EAAE,WAAW;YAC9B,cAAc,EAAE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE;YACzD,IAAI,EAAE,CAAC,kBAAkB,IAAI,CAAC,IAAI,+BAA+B,CAAC;SACnE,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,SAAS,CAAC;YACR,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,GAAG,YAAY,wBAAwB;gBAC5C,CAAC,CAAC,uBAAuB,IAAI,mBAAmB;gBAChD,CAAC,CAAC,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;YAC/B,IAAI,EAAE,GAAG,YAAY,wBAAwB,CAAC,CAAC,CAAC,iBAAiB,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS;SAC1F,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function cmdDelete(args: string[], json: boolean): Promise<void>;
2
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAMA,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC5E"}