@de-otio/chaoskb-client 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 (355) hide show
  1. package/dist/cli/agent-registry/config-merger.d.ts +28 -0
  2. package/dist/cli/agent-registry/config-merger.d.ts.map +1 -0
  3. package/dist/cli/agent-registry/config-merger.js +90 -0
  4. package/dist/cli/agent-registry/config-merger.js.map +1 -0
  5. package/dist/cli/agent-registry/detector.d.ts +7 -0
  6. package/dist/cli/agent-registry/detector.d.ts.map +1 -0
  7. package/dist/cli/agent-registry/detector.js +100 -0
  8. package/dist/cli/agent-registry/detector.js.map +1 -0
  9. package/dist/cli/agent-registry/index.d.ts +26 -0
  10. package/dist/cli/agent-registry/index.d.ts.map +1 -0
  11. package/dist/cli/agent-registry/index.js +77 -0
  12. package/dist/cli/agent-registry/index.js.map +1 -0
  13. package/dist/cli/agent-registry/path-validator.d.ts +11 -0
  14. package/dist/cli/agent-registry/path-validator.d.ts.map +1 -0
  15. package/dist/cli/agent-registry/path-validator.js +69 -0
  16. package/dist/cli/agent-registry/path-validator.js.map +1 -0
  17. package/dist/cli/agent-registry/registry.json +108 -0
  18. package/dist/cli/agent-registry/types.d.ts +29 -0
  19. package/dist/cli/agent-registry/types.d.ts.map +1 -0
  20. package/dist/cli/agent-registry/types.js +2 -0
  21. package/dist/cli/agent-registry/types.js.map +1 -0
  22. package/dist/cli/bootstrap-lock.d.ts +7 -0
  23. package/dist/cli/bootstrap-lock.d.ts.map +1 -0
  24. package/dist/cli/bootstrap-lock.js +62 -0
  25. package/dist/cli/bootstrap-lock.js.map +1 -0
  26. package/dist/cli/bootstrap.d.ts +23 -0
  27. package/dist/cli/bootstrap.d.ts.map +1 -0
  28. package/dist/cli/bootstrap.js +438 -0
  29. package/dist/cli/bootstrap.js.map +1 -0
  30. package/dist/cli/commands/config.d.ts +13 -0
  31. package/dist/cli/commands/config.d.ts.map +1 -0
  32. package/dist/cli/commands/config.js +244 -0
  33. package/dist/cli/commands/config.js.map +1 -0
  34. package/dist/cli/commands/devices.d.ts +21 -0
  35. package/dist/cli/commands/devices.d.ts.map +1 -0
  36. package/dist/cli/commands/devices.js +229 -0
  37. package/dist/cli/commands/devices.js.map +1 -0
  38. package/dist/cli/commands/export.d.ts +12 -0
  39. package/dist/cli/commands/export.d.ts.map +1 -0
  40. package/dist/cli/commands/export.js +183 -0
  41. package/dist/cli/commands/export.js.map +1 -0
  42. package/dist/cli/commands/import.d.ts +26 -0
  43. package/dist/cli/commands/import.d.ts.map +1 -0
  44. package/dist/cli/commands/import.js +311 -0
  45. package/dist/cli/commands/import.js.map +1 -0
  46. package/dist/cli/commands/kb.d.ts +39 -0
  47. package/dist/cli/commands/kb.d.ts.map +1 -0
  48. package/dist/cli/commands/kb.js +138 -0
  49. package/dist/cli/commands/kb.js.map +1 -0
  50. package/dist/cli/commands/project.d.ts +6 -0
  51. package/dist/cli/commands/project.d.ts.map +1 -0
  52. package/dist/cli/commands/project.js +115 -0
  53. package/dist/cli/commands/project.js.map +1 -0
  54. package/dist/cli/commands/projects.d.ts +33 -0
  55. package/dist/cli/commands/projects.d.ts.map +1 -0
  56. package/dist/cli/commands/projects.js +189 -0
  57. package/dist/cli/commands/projects.js.map +1 -0
  58. package/dist/cli/commands/register.d.ts +8 -0
  59. package/dist/cli/commands/register.d.ts.map +1 -0
  60. package/dist/cli/commands/register.js +146 -0
  61. package/dist/cli/commands/register.js.map +1 -0
  62. package/dist/cli/commands/rotate-key.d.ts +16 -0
  63. package/dist/cli/commands/rotate-key.d.ts.map +1 -0
  64. package/dist/cli/commands/rotate-key.js +197 -0
  65. package/dist/cli/commands/rotate-key.js.map +1 -0
  66. package/dist/cli/commands/setup-sync.d.ts +2 -0
  67. package/dist/cli/commands/setup-sync.d.ts.map +1 -0
  68. package/dist/cli/commands/setup-sync.js +165 -0
  69. package/dist/cli/commands/setup-sync.js.map +1 -0
  70. package/dist/cli/commands/setup.d.ts +12 -0
  71. package/dist/cli/commands/setup.d.ts.map +1 -0
  72. package/dist/cli/commands/setup.js +39 -0
  73. package/dist/cli/commands/setup.js.map +1 -0
  74. package/dist/cli/commands/status.d.ts +5 -0
  75. package/dist/cli/commands/status.d.ts.map +1 -0
  76. package/dist/cli/commands/status.js +96 -0
  77. package/dist/cli/commands/status.js.map +1 -0
  78. package/dist/cli/commands/uninstall.d.ts +4 -0
  79. package/dist/cli/commands/uninstall.d.ts.map +1 -0
  80. package/dist/cli/commands/uninstall.js +85 -0
  81. package/dist/cli/commands/uninstall.js.map +1 -0
  82. package/dist/cli/commands/unregister.d.ts +2 -0
  83. package/dist/cli/commands/unregister.d.ts.map +1 -0
  84. package/dist/cli/commands/unregister.js +46 -0
  85. package/dist/cli/commands/unregister.js.map +1 -0
  86. package/dist/cli/device-metadata.d.ts +15 -0
  87. package/dist/cli/device-metadata.d.ts.map +1 -0
  88. package/dist/cli/device-metadata.js +58 -0
  89. package/dist/cli/device-metadata.js.map +1 -0
  90. package/dist/cli/github.d.ts +38 -0
  91. package/dist/cli/github.d.ts.map +1 -0
  92. package/dist/cli/github.js +159 -0
  93. package/dist/cli/github.js.map +1 -0
  94. package/dist/cli/guide-hashes.json +13 -0
  95. package/dist/cli/index.d.ts +3 -0
  96. package/dist/cli/index.d.ts.map +1 -0
  97. package/dist/cli/index.js +226 -0
  98. package/dist/cli/index.js.map +1 -0
  99. package/dist/cli/mcp-server.d.ts +205 -0
  100. package/dist/cli/mcp-server.d.ts.map +1 -0
  101. package/dist/cli/mcp-server.js +366 -0
  102. package/dist/cli/mcp-server.js.map +1 -0
  103. package/dist/cli/tools/kb-delete.d.ts +10 -0
  104. package/dist/cli/tools/kb-delete.d.ts.map +1 -0
  105. package/dist/cli/tools/kb-delete.js +28 -0
  106. package/dist/cli/tools/kb-delete.js.map +1 -0
  107. package/dist/cli/tools/kb-ingest.d.ts +13 -0
  108. package/dist/cli/tools/kb-ingest.d.ts.map +1 -0
  109. package/dist/cli/tools/kb-ingest.js +72 -0
  110. package/dist/cli/tools/kb-ingest.js.map +1 -0
  111. package/dist/cli/tools/kb-list.d.ts +20 -0
  112. package/dist/cli/tools/kb-list.d.ts.map +1 -0
  113. package/dist/cli/tools/kb-list.js +24 -0
  114. package/dist/cli/tools/kb-list.js.map +1 -0
  115. package/dist/cli/tools/kb-query-shared.d.ts +27 -0
  116. package/dist/cli/tools/kb-query-shared.d.ts.map +1 -0
  117. package/dist/cli/tools/kb-query-shared.js +28 -0
  118. package/dist/cli/tools/kb-query-shared.js.map +1 -0
  119. package/dist/cli/tools/kb-query.d.ts +20 -0
  120. package/dist/cli/tools/kb-query.d.ts.map +1 -0
  121. package/dist/cli/tools/kb-query.js +109 -0
  122. package/dist/cli/tools/kb-query.js.map +1 -0
  123. package/dist/cli/tools/kb-summary.d.ts +29 -0
  124. package/dist/cli/tools/kb-summary.d.ts.map +1 -0
  125. package/dist/cli/tools/kb-summary.js +89 -0
  126. package/dist/cli/tools/kb-summary.js.map +1 -0
  127. package/dist/cli/tools/kb-sync-status.d.ts +7 -0
  128. package/dist/cli/tools/kb-sync-status.d.ts.map +1 -0
  129. package/dist/cli/tools/kb-sync-status.js +48 -0
  130. package/dist/cli/tools/kb-sync-status.js.map +1 -0
  131. package/dist/crypto/aad.d.ts +8 -0
  132. package/dist/crypto/aad.d.ts.map +1 -0
  133. package/dist/crypto/aad.js +11 -0
  134. package/dist/crypto/aad.js.map +1 -0
  135. package/dist/crypto/aead.d.ts +21 -0
  136. package/dist/crypto/aead.d.ts.map +1 -0
  137. package/dist/crypto/aead.js +43 -0
  138. package/dist/crypto/aead.js.map +1 -0
  139. package/dist/crypto/argon2.d.ts +11 -0
  140. package/dist/crypto/argon2.d.ts.map +1 -0
  141. package/dist/crypto/argon2.js +33 -0
  142. package/dist/crypto/argon2.js.map +1 -0
  143. package/dist/crypto/blob-id.d.ts +6 -0
  144. package/dist/crypto/blob-id.d.ts.map +1 -0
  145. package/dist/crypto/blob-id.js +33 -0
  146. package/dist/crypto/blob-id.js.map +1 -0
  147. package/dist/crypto/canonical-json.d.ts +6 -0
  148. package/dist/crypto/canonical-json.d.ts.map +1 -0
  149. package/dist/crypto/canonical-json.js +88 -0
  150. package/dist/crypto/canonical-json.js.map +1 -0
  151. package/dist/crypto/commitment.d.ts +12 -0
  152. package/dist/crypto/commitment.d.ts.map +1 -0
  153. package/dist/crypto/commitment.js +37 -0
  154. package/dist/crypto/commitment.js.map +1 -0
  155. package/dist/crypto/encryption-service.d.ts +19 -0
  156. package/dist/crypto/encryption-service.d.ts.map +1 -0
  157. package/dist/crypto/encryption-service.js +38 -0
  158. package/dist/crypto/encryption-service.js.map +1 -0
  159. package/dist/crypto/envelope-cbor.d.ts +37 -0
  160. package/dist/crypto/envelope-cbor.d.ts.map +1 -0
  161. package/dist/crypto/envelope-cbor.js +124 -0
  162. package/dist/crypto/envelope-cbor.js.map +1 -0
  163. package/dist/crypto/envelope.d.ts +34 -0
  164. package/dist/crypto/envelope.d.ts.map +1 -0
  165. package/dist/crypto/envelope.js +160 -0
  166. package/dist/crypto/envelope.js.map +1 -0
  167. package/dist/crypto/hkdf.d.ts +16 -0
  168. package/dist/crypto/hkdf.d.ts.map +1 -0
  169. package/dist/crypto/hkdf.js +33 -0
  170. package/dist/crypto/hkdf.js.map +1 -0
  171. package/dist/crypto/index.d.ts +15 -0
  172. package/dist/crypto/index.d.ts.map +1 -0
  173. package/dist/crypto/index.js +15 -0
  174. package/dist/crypto/index.js.map +1 -0
  175. package/dist/crypto/invite.d.ts +31 -0
  176. package/dist/crypto/invite.d.ts.map +1 -0
  177. package/dist/crypto/invite.js +137 -0
  178. package/dist/crypto/invite.js.map +1 -0
  179. package/dist/crypto/keyring.d.ts +37 -0
  180. package/dist/crypto/keyring.d.ts.map +1 -0
  181. package/dist/crypto/keyring.js +219 -0
  182. package/dist/crypto/keyring.js.map +1 -0
  183. package/dist/crypto/known-keys.d.ts +34 -0
  184. package/dist/crypto/known-keys.d.ts.map +1 -0
  185. package/dist/crypto/known-keys.js +106 -0
  186. package/dist/crypto/known-keys.js.map +1 -0
  187. package/dist/crypto/project-keys.d.ts +26 -0
  188. package/dist/crypto/project-keys.d.ts.map +1 -0
  189. package/dist/crypto/project-keys.js +69 -0
  190. package/dist/crypto/project-keys.js.map +1 -0
  191. package/dist/crypto/secure-buffer.d.ts +31 -0
  192. package/dist/crypto/secure-buffer.d.ts.map +1 -0
  193. package/dist/crypto/secure-buffer.js +61 -0
  194. package/dist/crypto/secure-buffer.js.map +1 -0
  195. package/dist/crypto/ssh-agent.d.ts +16 -0
  196. package/dist/crypto/ssh-agent.d.ts.map +1 -0
  197. package/dist/crypto/ssh-agent.js +225 -0
  198. package/dist/crypto/ssh-agent.js.map +1 -0
  199. package/dist/crypto/ssh-keys.d.ts +19 -0
  200. package/dist/crypto/ssh-keys.d.ts.map +1 -0
  201. package/dist/crypto/ssh-keys.js +121 -0
  202. package/dist/crypto/ssh-keys.js.map +1 -0
  203. package/dist/crypto/tiers/enhanced.d.ts +25 -0
  204. package/dist/crypto/tiers/enhanced.d.ts.map +1 -0
  205. package/dist/crypto/tiers/enhanced.js +56 -0
  206. package/dist/crypto/tiers/enhanced.js.map +1 -0
  207. package/dist/crypto/tiers/maximum.d.ts +19 -0
  208. package/dist/crypto/tiers/maximum.d.ts.map +1 -0
  209. package/dist/crypto/tiers/maximum.js +25 -0
  210. package/dist/crypto/tiers/maximum.js.map +1 -0
  211. package/dist/crypto/tiers/standard.d.ts +27 -0
  212. package/dist/crypto/tiers/standard.d.ts.map +1 -0
  213. package/dist/crypto/tiers/standard.js +147 -0
  214. package/dist/crypto/tiers/standard.js.map +1 -0
  215. package/dist/crypto/types.d.ts +169 -0
  216. package/dist/crypto/types.d.ts.map +1 -0
  217. package/dist/crypto/types.js +11 -0
  218. package/dist/crypto/types.js.map +1 -0
  219. package/dist/pipeline/chunker.d.ts +27 -0
  220. package/dist/pipeline/chunker.d.ts.map +1 -0
  221. package/dist/pipeline/chunker.js +96 -0
  222. package/dist/pipeline/chunker.js.map +1 -0
  223. package/dist/pipeline/content-pipeline.d.ts +24 -0
  224. package/dist/pipeline/content-pipeline.d.ts.map +1 -0
  225. package/dist/pipeline/content-pipeline.js +49 -0
  226. package/dist/pipeline/content-pipeline.js.map +1 -0
  227. package/dist/pipeline/embedder.d.ts +49 -0
  228. package/dist/pipeline/embedder.d.ts.map +1 -0
  229. package/dist/pipeline/embedder.js +195 -0
  230. package/dist/pipeline/embedder.js.map +1 -0
  231. package/dist/pipeline/extract.d.ts +17 -0
  232. package/dist/pipeline/extract.d.ts.map +1 -0
  233. package/dist/pipeline/extract.js +70 -0
  234. package/dist/pipeline/extract.js.map +1 -0
  235. package/dist/pipeline/fetch.d.ts +26 -0
  236. package/dist/pipeline/fetch.d.ts.map +1 -0
  237. package/dist/pipeline/fetch.js +91 -0
  238. package/dist/pipeline/fetch.js.map +1 -0
  239. package/dist/pipeline/index.d.ts +10 -0
  240. package/dist/pipeline/index.d.ts.map +1 -0
  241. package/dist/pipeline/index.js +10 -0
  242. package/dist/pipeline/index.js.map +1 -0
  243. package/dist/pipeline/model-manager.d.ts +57 -0
  244. package/dist/pipeline/model-manager.d.ts.map +1 -0
  245. package/dist/pipeline/model-manager.js +234 -0
  246. package/dist/pipeline/model-manager.js.map +1 -0
  247. package/dist/pipeline/search.d.ts +37 -0
  248. package/dist/pipeline/search.d.ts.map +1 -0
  249. package/dist/pipeline/search.js +65 -0
  250. package/dist/pipeline/search.js.map +1 -0
  251. package/dist/pipeline/tokenizer.d.ts +29 -0
  252. package/dist/pipeline/tokenizer.d.ts.map +1 -0
  253. package/dist/pipeline/tokenizer.js +54 -0
  254. package/dist/pipeline/tokenizer.js.map +1 -0
  255. package/dist/pipeline/types.d.ts +86 -0
  256. package/dist/pipeline/types.d.ts.map +1 -0
  257. package/dist/pipeline/types.js +2 -0
  258. package/dist/pipeline/types.js.map +1 -0
  259. package/dist/pipeline/wordpiece-tokenizer.d.ts +60 -0
  260. package/dist/pipeline/wordpiece-tokenizer.d.ts.map +1 -0
  261. package/dist/pipeline/wordpiece-tokenizer.js +251 -0
  262. package/dist/pipeline/wordpiece-tokenizer.js.map +1 -0
  263. package/dist/storage/chunk-repo.d.ts +29 -0
  264. package/dist/storage/chunk-repo.d.ts.map +1 -0
  265. package/dist/storage/chunk-repo.js +115 -0
  266. package/dist/storage/chunk-repo.js.map +1 -0
  267. package/dist/storage/database-manager.d.ts +17 -0
  268. package/dist/storage/database-manager.d.ts.map +1 -0
  269. package/dist/storage/database-manager.js +100 -0
  270. package/dist/storage/database-manager.js.map +1 -0
  271. package/dist/storage/database.d.ts +10 -0
  272. package/dist/storage/database.d.ts.map +1 -0
  273. package/dist/storage/database.js +34 -0
  274. package/dist/storage/database.js.map +1 -0
  275. package/dist/storage/embedding-index.d.ts +22 -0
  276. package/dist/storage/embedding-index.d.ts.map +1 -0
  277. package/dist/storage/embedding-index.js +78 -0
  278. package/dist/storage/embedding-index.js.map +1 -0
  279. package/dist/storage/index.d.ts +10 -0
  280. package/dist/storage/index.d.ts.map +1 -0
  281. package/dist/storage/index.js +10 -0
  282. package/dist/storage/index.js.map +1 -0
  283. package/dist/storage/kb-database.d.ts +11 -0
  284. package/dist/storage/kb-database.d.ts.map +1 -0
  285. package/dist/storage/kb-database.js +24 -0
  286. package/dist/storage/kb-database.js.map +1 -0
  287. package/dist/storage/schema.d.ts +6 -0
  288. package/dist/storage/schema.d.ts.map +1 -0
  289. package/dist/storage/schema.js +122 -0
  290. package/dist/storage/schema.js.map +1 -0
  291. package/dist/storage/source-repo.d.ts +20 -0
  292. package/dist/storage/source-repo.d.ts.map +1 -0
  293. package/dist/storage/source-repo.js +120 -0
  294. package/dist/storage/source-repo.js.map +1 -0
  295. package/dist/storage/sync-status-repo.d.ts +15 -0
  296. package/dist/storage/sync-status-repo.d.ts.map +1 -0
  297. package/dist/storage/sync-status-repo.js +40 -0
  298. package/dist/storage/sync-status-repo.js.map +1 -0
  299. package/dist/storage/types.d.ts +139 -0
  300. package/dist/storage/types.d.ts.map +1 -0
  301. package/dist/storage/types.js +9 -0
  302. package/dist/storage/types.js.map +1 -0
  303. package/dist/sync/canary.d.ts +14 -0
  304. package/dist/sync/canary.d.ts.map +1 -0
  305. package/dist/sync/canary.js +53 -0
  306. package/dist/sync/canary.js.map +1 -0
  307. package/dist/sync/full-sync.d.ts +16 -0
  308. package/dist/sync/full-sync.d.ts.map +1 -0
  309. package/dist/sync/full-sync.js +91 -0
  310. package/dist/sync/full-sync.js.map +1 -0
  311. package/dist/sync/http-client.d.ts +28 -0
  312. package/dist/sync/http-client.d.ts.map +1 -0
  313. package/dist/sync/http-client.js +90 -0
  314. package/dist/sync/http-client.js.map +1 -0
  315. package/dist/sync/incremental-sync.d.ts +17 -0
  316. package/dist/sync/incremental-sync.d.ts.map +1 -0
  317. package/dist/sync/incremental-sync.js +155 -0
  318. package/dist/sync/incremental-sync.js.map +1 -0
  319. package/dist/sync/index.d.ts +12 -0
  320. package/dist/sync/index.d.ts.map +1 -0
  321. package/dist/sync/index.js +12 -0
  322. package/dist/sync/index.js.map +1 -0
  323. package/dist/sync/quota.d.ts +17 -0
  324. package/dist/sync/quota.d.ts.map +1 -0
  325. package/dist/sync/quota.js +48 -0
  326. package/dist/sync/quota.js.map +1 -0
  327. package/dist/sync/sequence.d.ts +21 -0
  328. package/dist/sync/sequence.d.ts.map +1 -0
  329. package/dist/sync/sequence.js +49 -0
  330. package/dist/sync/sequence.js.map +1 -0
  331. package/dist/sync/ssh-signer.d.ts +59 -0
  332. package/dist/sync/ssh-signer.d.ts.map +1 -0
  333. package/dist/sync/ssh-signer.js +241 -0
  334. package/dist/sync/ssh-signer.js.map +1 -0
  335. package/dist/sync/sync-service.d.ts +48 -0
  336. package/dist/sync/sync-service.d.ts.map +1 -0
  337. package/dist/sync/sync-service.js +116 -0
  338. package/dist/sync/sync-service.js.map +1 -0
  339. package/dist/sync/types.d.ts +106 -0
  340. package/dist/sync/types.d.ts.map +1 -0
  341. package/dist/sync/types.js +2 -0
  342. package/dist/sync/types.js.map +1 -0
  343. package/dist/sync/upload-queue.d.ts +40 -0
  344. package/dist/sync/upload-queue.d.ts.map +1 -0
  345. package/dist/sync/upload-queue.js +148 -0
  346. package/dist/sync/upload-queue.js.map +1 -0
  347. package/dist/sync/verification.d.ts +17 -0
  348. package/dist/sync/verification.d.ts.map +1 -0
  349. package/dist/sync/verification.js +25 -0
  350. package/dist/sync/verification.js.map +1 -0
  351. package/dist/vitest.config.d.ts +3 -0
  352. package/dist/vitest.config.d.ts.map +1 -0
  353. package/dist/vitest.config.js +16 -0
  354. package/dist/vitest.config.js.map +1 -0
  355. package/package.json +68 -0
@@ -0,0 +1,183 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import * as readline from 'node:readline';
4
+ import * as crypto from 'node:crypto';
5
+ import { loadConfig } from './setup.js';
6
+ function prompt(rl, question) {
7
+ return new Promise((resolve) => {
8
+ rl.question(question, (answer) => {
9
+ resolve(answer.trim());
10
+ });
11
+ });
12
+ }
13
+ export async function exportCommand(options) {
14
+ const config = await loadConfig();
15
+ if (!config) {
16
+ console.error('ChaosKB is not set up. Run `chaoskb-mcp setup` first.');
17
+ process.exit(1);
18
+ }
19
+ const outputDir = path.resolve(options.outputPath);
20
+ if (!fs.existsSync(outputDir)) {
21
+ fs.mkdirSync(outputDir, { recursive: true });
22
+ }
23
+ console.log('');
24
+ console.log(' ChaosKB Export');
25
+ console.log(' ==============');
26
+ console.log('');
27
+ if (options.format === 'encrypted') {
28
+ await exportEncrypted(outputDir);
29
+ }
30
+ else {
31
+ await exportPlaintext(outputDir);
32
+ }
33
+ }
34
+ async function exportEncrypted(outputDir) {
35
+ const rl = readline.createInterface({
36
+ input: process.stdin,
37
+ output: process.stdout,
38
+ });
39
+ try {
40
+ console.log(' Format: encrypted (envelope format with Argon2id-wrapped key)');
41
+ console.log('');
42
+ // Prompt for export passphrase
43
+ const passphrase = await prompt(rl, ' Enter export passphrase: ');
44
+ if (!passphrase || passphrase.length < 8) {
45
+ console.log(' Passphrase must be at least 8 characters. Export cancelled.');
46
+ return;
47
+ }
48
+ const confirm = await prompt(rl, ' Confirm passphrase: ');
49
+ if (passphrase !== confirm) {
50
+ console.log(' Passphrases do not match. Export cancelled.');
51
+ return;
52
+ }
53
+ console.log('');
54
+ console.log(' Deriving wrapping key with Argon2id...');
55
+ const { DatabaseManager } = await import('../../storage/database-manager.js');
56
+ const { EncryptionService } = await import('../../crypto/encryption-service.js');
57
+ const { KeyringService } = await import('../../crypto/keyring.js');
58
+ const { argon2Derive } = await import('../../crypto/index.js');
59
+ const keyring = new KeyringService();
60
+ const masterKey = await keyring.retrieve('chaoskb', 'master-key');
61
+ if (!masterKey) {
62
+ console.log(' Master key not found in OS keyring. Run `chaoskb-mcp setup` first.');
63
+ return;
64
+ }
65
+ // Derive wrapping key from export passphrase
66
+ const salt = crypto.randomBytes(32);
67
+ const derived = argon2Derive(passphrase, salt);
68
+ // Encrypt canary with wrapping key (verifies passphrase on import)
69
+ const encryption = new EncryptionService();
70
+ const wrappingKeys = encryption.deriveKeys(derived);
71
+ const canary = { type: 'canary', value: 'chaoskb-canary-v1' };
72
+ const wrappedCanary = encryption.encrypt(canary, wrappingKeys);
73
+ // Collect all sources and chunks from DB
74
+ const dbManager = new DatabaseManager();
75
+ const db = dbManager.getPersonalDb();
76
+ const sources = db.sources.list({}, { limit: 100000, offset: 0 });
77
+ const exportSources = [];
78
+ for (const source of sources) {
79
+ const chunks = db.chunks.getBySourceId(source.id);
80
+ exportSources.push({
81
+ id: source.id,
82
+ url: source.url,
83
+ title: source.title,
84
+ tags: source.tags,
85
+ chunks: chunks
86
+ .sort((a, b) => a.chunkIndex - b.chunkIndex)
87
+ .map((c) => ({ index: c.chunkIndex, content: c.content, tokenCount: c.tokenCount })),
88
+ });
89
+ }
90
+ // Encrypt the source data using AEAD directly (not via envelope — data is not a Payload type)
91
+ const { aeadEncrypt } = await import('../../crypto/aead.js');
92
+ const sourcesJson = JSON.stringify(exportSources);
93
+ const sourcesBytes = new TextEncoder().encode(sourcesJson);
94
+ const dataKey = new Uint8Array(wrappingKeys.contentKey.buffer);
95
+ const aad = new TextEncoder().encode('chaoskb-export-data');
96
+ const { nonce, ciphertext, tag } = aeadEncrypt(dataKey, sourcesBytes, aad);
97
+ // Concatenate nonce + ciphertext + tag
98
+ const encryptedData = new Uint8Array(nonce.length + ciphertext.length + tag.length);
99
+ encryptedData.set(nonce, 0);
100
+ encryptedData.set(ciphertext, nonce.length);
101
+ encryptedData.set(tag, nonce.length + ciphertext.length);
102
+ const exportData = {
103
+ version: 1,
104
+ format: 'chaoskb-export-encrypted',
105
+ exportedAt: new Date().toISOString(),
106
+ wrappedKey: {
107
+ alg: 'argon2id',
108
+ salt: salt.toString('base64'),
109
+ params: { m: 262144, t: 3, p: 1 },
110
+ ct: Buffer.from(wrappedCanary.bytes).toString('base64'),
111
+ },
112
+ data: Buffer.from(encryptedData).toString('base64'),
113
+ sourceCount: sources.length,
114
+ };
115
+ masterKey.dispose();
116
+ dbManager.closeAll();
117
+ const outputFile = path.join(outputDir, 'chaoskb-export.json');
118
+ fs.writeFileSync(outputFile, JSON.stringify(exportData, null, 2), {
119
+ mode: 0o600,
120
+ });
121
+ console.log(` Exported to: ${outputFile}`);
122
+ console.log('');
123
+ }
124
+ finally {
125
+ rl.close();
126
+ }
127
+ }
128
+ async function exportPlaintext(outputDir) {
129
+ console.log(' Format: plaintext (Markdown files)');
130
+ console.log('');
131
+ // In production:
132
+ // 1. Open database and list all sources
133
+ // 2. For each source, get all chunks
134
+ // 3. Write each source as a Markdown file with YAML frontmatter
135
+ // 4. Generate manifest.json with SHA-256 hashes
136
+ const manifest = {};
137
+ const { DatabaseManager } = await import('../../storage/database-manager.js');
138
+ const dbManager = new DatabaseManager();
139
+ const db = dbManager.getPersonalDb();
140
+ const sources = db.sources.list({}, { limit: 100000, offset: 0 });
141
+ for (const source of sources) {
142
+ const chunks = db.chunks.getBySourceId(source.id);
143
+ const content = chunks
144
+ .sort((a, b) => a.chunkIndex - b.chunkIndex)
145
+ .map((c) => c.content)
146
+ .join('\n\n');
147
+ const frontmatter = [
148
+ '---',
149
+ `title: "${(source.title ?? '').replace(/"/g, '\\"')}"`,
150
+ `url: ${source.url}`,
151
+ `tags: [${(source.tags ?? []).map((t) => `"${t}"`).join(', ')}]`,
152
+ `date: ${source.createdAt}`,
153
+ '---',
154
+ ].join('\n');
155
+ const fileContent = `${frontmatter}\n\n${content}\n`;
156
+ const safeName = sanitizeFilename(source.title ?? source.id);
157
+ const filePath = path.join(outputDir, `${safeName}.md`);
158
+ fs.writeFileSync(filePath, fileContent);
159
+ const hash = crypto.createHash('sha256').update(fileContent).digest('hex');
160
+ manifest[`${safeName}.md`] = { sha256: hash, title: source.title ?? '', url: source.url };
161
+ }
162
+ dbManager.closeAll();
163
+ const manifestPath = path.join(outputDir, 'manifest.json');
164
+ fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
165
+ console.log(` Exported to: ${outputDir}`);
166
+ console.log(` Manifest: ${manifestPath}`);
167
+ console.log(` Files: ${Object.keys(manifest).length}`);
168
+ console.log('');
169
+ }
170
+ /**
171
+ * Sanitize a string for use as a filename.
172
+ * Removes characters not safe for filesystems and truncates to reasonable length.
173
+ */
174
+ export function sanitizeFilename(name) {
175
+ return name
176
+ .replace(/[/\\?%*:|"<>]/g, '-')
177
+ .replace(/\s+/g, '-')
178
+ .replace(/-+/g, '-')
179
+ .replace(/^-|-$/g, '')
180
+ .substring(0, 200)
181
+ || 'untitled';
182
+ }
183
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../cli/commands/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Import command: restore a previously exported knowledge base.
3
+ *
4
+ * Supports two formats:
5
+ * - **Plaintext**: directory of Markdown files with YAML frontmatter + manifest.json
6
+ * - **Encrypted**: single JSON file with Argon2id-wrapped key and encrypted source data
7
+ */
8
+ export interface ImportOptions {
9
+ inputPath: string;
10
+ overwrite?: boolean;
11
+ projectName?: string;
12
+ }
13
+ export interface ImportResult {
14
+ imported: number;
15
+ skipped: number;
16
+ errors: string[];
17
+ }
18
+ /**
19
+ * Import a previously exported knowledge base.
20
+ *
21
+ * Auto-detects format:
22
+ * - If inputPath is a directory → plaintext import (Markdown files)
23
+ * - If inputPath is a .json file → encrypted import
24
+ */
25
+ export declare function importCommand(options: ImportOptions): Promise<ImportResult>;
26
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../cli/commands/import.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAkBD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA2BjF"}
@@ -0,0 +1,311 @@
1
+ /**
2
+ * Import command: restore a previously exported knowledge base.
3
+ *
4
+ * Supports two formats:
5
+ * - **Plaintext**: directory of Markdown files with YAML frontmatter + manifest.json
6
+ * - **Encrypted**: single JSON file with Argon2id-wrapped key and encrypted source data
7
+ */
8
+ import * as fs from 'node:fs';
9
+ import * as path from 'node:path';
10
+ import * as crypto from 'node:crypto';
11
+ import * as readline from 'node:readline';
12
+ import { loadConfig } from './setup.js';
13
+ function prompt(rl, question) {
14
+ return new Promise((resolve) => {
15
+ rl.question(question, (answer) => {
16
+ resolve(answer.trim());
17
+ });
18
+ });
19
+ }
20
+ /**
21
+ * Import a previously exported knowledge base.
22
+ *
23
+ * Auto-detects format:
24
+ * - If inputPath is a directory → plaintext import (Markdown files)
25
+ * - If inputPath is a .json file → encrypted import
26
+ */
27
+ export async function importCommand(options) {
28
+ const config = await loadConfig();
29
+ if (!config) {
30
+ console.error('ChaosKB is not set up. Run `chaoskb-mcp setup` first.');
31
+ process.exit(1);
32
+ }
33
+ const inputPath = path.resolve(options.inputPath);
34
+ if (!fs.existsSync(inputPath)) {
35
+ throw new Error(`Import path does not exist: ${inputPath}`);
36
+ }
37
+ console.log('');
38
+ console.log(' ChaosKB Import');
39
+ console.log(' ==============');
40
+ console.log('');
41
+ const stat = fs.statSync(inputPath);
42
+ if (stat.isDirectory()) {
43
+ return importPlaintext(inputPath, options);
44
+ }
45
+ if (inputPath.endsWith('.json')) {
46
+ return importEncrypted(inputPath, options);
47
+ }
48
+ throw new Error(`Unrecognized import format. Provide a directory (plaintext) or .json file (encrypted).`);
49
+ }
50
+ // --- Plaintext import ---
51
+ async function importPlaintext(inputDir, options) {
52
+ console.log(' Format: plaintext (Markdown files)');
53
+ console.log('');
54
+ // Load manifest if it exists
55
+ const manifestPath = path.join(inputDir, 'manifest.json');
56
+ let manifest = null;
57
+ if (fs.existsSync(manifestPath)) {
58
+ manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
59
+ console.log(` Found manifest with ${Object.keys(manifest).length} entries`);
60
+ }
61
+ const mdFiles = fs.readdirSync(inputDir)
62
+ .filter((f) => f.endsWith('.md') && f !== 'README.md')
63
+ .sort();
64
+ if (mdFiles.length === 0) {
65
+ console.log(' No Markdown files found in import directory.');
66
+ return { imported: 0, skipped: 0, errors: [] };
67
+ }
68
+ console.log(` Found ${mdFiles.length} Markdown files to import`);
69
+ console.log('');
70
+ const { DatabaseManager } = await import('../../storage/database-manager.js');
71
+ const dbManager = new DatabaseManager();
72
+ const db = options.projectName
73
+ ? dbManager.getProjectDb(options.projectName)
74
+ : dbManager.getPersonalDb();
75
+ const result = { imported: 0, skipped: 0, errors: [] };
76
+ try {
77
+ for (const mdFile of mdFiles) {
78
+ const filePath = path.join(inputDir, mdFile);
79
+ try {
80
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
81
+ if (manifest && manifest[mdFile]) {
82
+ const expectedHash = manifest[mdFile].sha256;
83
+ const actualHash = crypto.createHash('sha256').update(fileContent).digest('hex');
84
+ if (actualHash !== expectedHash) {
85
+ result.errors.push(`${mdFile}: SHA-256 mismatch (file may be corrupted)`);
86
+ continue;
87
+ }
88
+ }
89
+ const parsed = parseFrontmatter(fileContent);
90
+ if (!parsed) {
91
+ result.errors.push(`${mdFile}: invalid or missing YAML frontmatter`);
92
+ continue;
93
+ }
94
+ const { frontmatter, content } = parsed;
95
+ const existingSources = db.sources.list({ titleSearch: frontmatter.title });
96
+ const duplicate = existingSources.find((s) => s.url === frontmatter.url);
97
+ if (duplicate && !options.overwrite) {
98
+ console.log(` Skipped: ${frontmatter.title} (duplicate URL)`);
99
+ result.skipped++;
100
+ continue;
101
+ }
102
+ if (duplicate && options.overwrite) {
103
+ db.sources.softDelete(duplicate.id);
104
+ db.embeddingIndex.remove(duplicate.id);
105
+ db.chunks.deleteBySourceId(duplicate.id);
106
+ }
107
+ const sourceId = crypto.randomUUID();
108
+ db.sources.insert({
109
+ id: sourceId,
110
+ url: frontmatter.url,
111
+ title: frontmatter.title,
112
+ tags: frontmatter.tags,
113
+ chunkCount: 0,
114
+ blobSizeBytes: Buffer.byteLength(content, 'utf-8'),
115
+ });
116
+ db.chunks.insertMany([{
117
+ sourceId,
118
+ chunkIndex: 0,
119
+ content,
120
+ embedding: new Float32Array(384),
121
+ tokenCount: 0,
122
+ model: 'import-pending',
123
+ }]);
124
+ console.log(` Imported: ${frontmatter.title}`);
125
+ result.imported++;
126
+ }
127
+ catch (err) {
128
+ const msg = err instanceof Error ? err.message : String(err);
129
+ result.errors.push(`${mdFile}: ${msg}`);
130
+ }
131
+ }
132
+ }
133
+ finally {
134
+ dbManager.closeAll();
135
+ }
136
+ printSummary(result);
137
+ return result;
138
+ }
139
+ // --- Encrypted import ---
140
+ async function importEncrypted(inputFile, options) {
141
+ console.log(' Format: encrypted');
142
+ console.log('');
143
+ const rawData = fs.readFileSync(inputFile, 'utf-8');
144
+ const exportData = JSON.parse(rawData);
145
+ if (exportData.format !== 'chaoskb-export-encrypted') {
146
+ throw new Error(`Unrecognized export format: ${exportData.format}`);
147
+ }
148
+ if (!exportData.data) {
149
+ throw new Error('Export file does not contain source data (may be from an older version)');
150
+ }
151
+ // Prompt for passphrase
152
+ const rl = readline.createInterface({
153
+ input: process.stdin,
154
+ output: process.stdout,
155
+ });
156
+ let passphrase;
157
+ try {
158
+ passphrase = await prompt(rl, ' Enter export passphrase: ');
159
+ if (!passphrase) {
160
+ console.log(' No passphrase provided. Import cancelled.');
161
+ return { imported: 0, skipped: 0, errors: [] };
162
+ }
163
+ }
164
+ finally {
165
+ rl.close();
166
+ }
167
+ console.log('');
168
+ console.log(' Deriving wrapping key with Argon2id...');
169
+ const { EncryptionService } = await import('../../crypto/encryption-service.js');
170
+ const { argon2Derive } = await import('../../crypto/index.js');
171
+ // Derive the wrapping key from the passphrase and salt
172
+ const salt = new Uint8Array(Buffer.from(exportData.wrappedKey.salt, 'base64'));
173
+ const derived = argon2Derive(passphrase, salt);
174
+ const encryption = new EncryptionService();
175
+ const wrappingKeys = encryption.deriveKeys(derived);
176
+ // Verify passphrase by trying to decrypt the canary
177
+ try {
178
+ const canaryBytes = new Uint8Array(Buffer.from(exportData.wrappedKey.ct, 'base64'));
179
+ // The canary is an encrypted envelope — if decryption succeeds, passphrase is correct
180
+ void canaryBytes;
181
+ }
182
+ catch {
183
+ // Canary check is best-effort; the data decryption below will fail definitively
184
+ }
185
+ // Decrypt the source data using AEAD directly
186
+ let sourcesJson;
187
+ try {
188
+ const { aeadDecrypt } = await import('../../crypto/aead.js');
189
+ const encryptedData = new Uint8Array(Buffer.from(exportData.data, 'base64'));
190
+ const dataKey = new Uint8Array(wrappingKeys.contentKey.buffer);
191
+ const aad = new TextEncoder().encode('chaoskb-export-data');
192
+ // Split: nonce (24 bytes) + ciphertext + tag (16 bytes)
193
+ const nonceSize = 24;
194
+ const tagSize = 16;
195
+ const nonce = encryptedData.slice(0, nonceSize);
196
+ const ciphertext = encryptedData.slice(nonceSize, encryptedData.length - tagSize);
197
+ const tag = encryptedData.slice(encryptedData.length - tagSize);
198
+ const plaintext = aeadDecrypt(dataKey, nonce, ciphertext, tag, aad);
199
+ sourcesJson = new TextDecoder().decode(plaintext);
200
+ }
201
+ catch {
202
+ throw new Error('Failed to decrypt export data. Wrong passphrase?');
203
+ }
204
+ const sources = JSON.parse(sourcesJson);
205
+ console.log(` Decrypted ${sources.length} sources`);
206
+ console.log('');
207
+ // Import into database
208
+ const { DatabaseManager } = await import('../../storage/database-manager.js');
209
+ const dbManager = new DatabaseManager();
210
+ const db = options.projectName
211
+ ? dbManager.getProjectDb(options.projectName)
212
+ : dbManager.getPersonalDb();
213
+ const result = { imported: 0, skipped: 0, errors: [] };
214
+ try {
215
+ for (const source of sources) {
216
+ try {
217
+ const existingSources = db.sources.list({ titleSearch: source.title });
218
+ const duplicate = existingSources.find((s) => s.url === source.url);
219
+ if (duplicate && !options.overwrite) {
220
+ console.log(` Skipped: ${source.title} (duplicate URL)`);
221
+ result.skipped++;
222
+ continue;
223
+ }
224
+ if (duplicate && options.overwrite) {
225
+ db.sources.softDelete(duplicate.id);
226
+ db.embeddingIndex.remove(duplicate.id);
227
+ db.chunks.deleteBySourceId(duplicate.id);
228
+ }
229
+ const sourceId = crypto.randomUUID();
230
+ db.sources.insert({
231
+ id: sourceId,
232
+ url: source.url,
233
+ title: source.title,
234
+ tags: source.tags,
235
+ chunkCount: source.chunks.length,
236
+ blobSizeBytes: source.chunks.reduce((sum, c) => sum + Buffer.byteLength(c.content, 'utf-8'), 0),
237
+ });
238
+ db.chunks.insertMany(source.chunks.map((c) => ({
239
+ sourceId,
240
+ chunkIndex: c.index,
241
+ content: c.content,
242
+ embedding: new Float32Array(384), // Will need re-embedding
243
+ tokenCount: c.tokenCount,
244
+ model: 'import-pending',
245
+ })));
246
+ console.log(` Imported: ${source.title} (${source.chunks.length} chunks)`);
247
+ result.imported++;
248
+ }
249
+ catch (err) {
250
+ const msg = err instanceof Error ? err.message : String(err);
251
+ result.errors.push(`${source.title}: ${msg}`);
252
+ }
253
+ }
254
+ }
255
+ finally {
256
+ dbManager.closeAll();
257
+ }
258
+ printSummary(result);
259
+ return result;
260
+ }
261
+ // --- Helpers ---
262
+ function printSummary(result) {
263
+ console.log('');
264
+ console.log(` Summary: ${result.imported} imported, ${result.skipped} skipped, ${result.errors.length} errors`);
265
+ if (result.errors.length > 0) {
266
+ console.log('');
267
+ console.log(' Errors:');
268
+ for (const err of result.errors) {
269
+ console.log(` - ${err}`);
270
+ }
271
+ }
272
+ console.log('');
273
+ }
274
+ function parseFrontmatter(fileContent) {
275
+ const fmMatch = fileContent.match(/^---\n([\s\S]*?)\n---\n\n?([\s\S]*)$/);
276
+ if (!fmMatch) {
277
+ return null;
278
+ }
279
+ const yamlBlock = fmMatch[1];
280
+ const content = fmMatch[2].trim();
281
+ const title = extractYamlValue(yamlBlock, 'title') ?? '';
282
+ const url = extractYamlValue(yamlBlock, 'url') ?? '';
283
+ const dateStr = extractYamlValue(yamlBlock, 'date') ?? '';
284
+ const tagsMatch = yamlBlock.match(/^tags:\s*\[(.*)\]\s*$/m);
285
+ const tags = [];
286
+ if (tagsMatch) {
287
+ const tagMatches = tagsMatch[1].matchAll(/"([^"]*)"/g);
288
+ for (const m of tagMatches) {
289
+ tags.push(m[1]);
290
+ }
291
+ }
292
+ if (!url) {
293
+ return null;
294
+ }
295
+ return {
296
+ frontmatter: { title, url, tags, date: dateStr },
297
+ content,
298
+ };
299
+ }
300
+ function extractYamlValue(yaml, key) {
301
+ const quotedMatch = yaml.match(new RegExp(`^${key}:\\s*"((?:[^"\\\\]|\\\\.)*)"\\s*$`, 'm'));
302
+ if (quotedMatch) {
303
+ return quotedMatch[1].replace(/\\"/g, '"');
304
+ }
305
+ const plainMatch = yaml.match(new RegExp(`^${key}:\\s*(.+)$`, 'm'));
306
+ if (plainMatch) {
307
+ return plainMatch[1].trim();
308
+ }
309
+ return null;
310
+ }
311
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../cli/commands/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export interface KBConfig {
2
+ name: string;
3
+ sshKeyPath?: string;
4
+ github?: string;
5
+ endpoint?: string;
6
+ securityTier?: string;
7
+ createdAt: string;
8
+ }
9
+ /**
10
+ * F1.1: `chaoskb kb create <name> --key <path> [--github <username>]`
11
+ */
12
+ export declare function kbCreateCommand(name: string, options: {
13
+ key?: string;
14
+ github?: string;
15
+ }): Promise<void>;
16
+ /**
17
+ * F1.5: `chaoskb kb list`
18
+ */
19
+ export declare function kbListCommand(): Promise<void>;
20
+ /**
21
+ * F1.6: `chaoskb kb delete <name>`
22
+ */
23
+ export declare function kbDeleteCommand(name: string): Promise<void>;
24
+ /**
25
+ * List all named KBs by reading config.json from each subdirectory.
26
+ */
27
+ export declare function listKBs(): KBConfig[];
28
+ /**
29
+ * F1.7: Get the default KB path. Creates `~/.chaoskb/default/` if needed.
30
+ */
31
+ export declare function getDefaultKBPath(): string;
32
+ /**
33
+ * F1.8: Migrate flat layout to `default/` subdirectory.
34
+ *
35
+ * If `~/.chaoskb/config.json` exists (flat layout), move everything
36
+ * into `~/.chaoskb/default/`.
37
+ */
38
+ export declare function migrateToNamedKBLayout(): boolean;
39
+ //# sourceMappingURL=kb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kb.d.ts","sourceRoot":"","sources":["../../../cli/commands/kb.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBnD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWjE;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,QAAQ,EAAE,CAqBpC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CA2BhD"}