@maadb/core 0.0.1 → 0.7.10-rc.3

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 (419) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +371 -3
  3. package/dist/architect.d.ts +2 -0
  4. package/dist/architect.d.ts.map +1 -0
  5. package/dist/architect.js +273 -0
  6. package/dist/architect.js.map +1 -0
  7. package/dist/auth/resolve.d.ts +36 -0
  8. package/dist/auth/resolve.d.ts.map +1 -0
  9. package/dist/auth/resolve.js +77 -0
  10. package/dist/auth/resolve.js.map +1 -0
  11. package/dist/auth/token-store.d.ts +82 -0
  12. package/dist/auth/token-store.d.ts.map +1 -0
  13. package/dist/auth/token-store.js +464 -0
  14. package/dist/auth/token-store.js.map +1 -0
  15. package/dist/auth/types.d.ts +75 -0
  16. package/dist/auth/types.d.ts.map +1 -0
  17. package/dist/auth/types.js +15 -0
  18. package/dist/auth/types.js.map +1 -0
  19. package/dist/backend/adapter.d.ts +57 -0
  20. package/dist/backend/adapter.d.ts.map +1 -0
  21. package/dist/backend/adapter.js +6 -0
  22. package/dist/backend/adapter.js.map +1 -0
  23. package/dist/backend/index.d.ts +3 -0
  24. package/dist/backend/index.d.ts.map +1 -0
  25. package/dist/backend/index.js +2 -0
  26. package/dist/backend/index.js.map +1 -0
  27. package/dist/backend/sqlite/index.d.ts +63 -0
  28. package/dist/backend/sqlite/index.d.ts.map +1 -0
  29. package/dist/backend/sqlite/index.js +521 -0
  30. package/dist/backend/sqlite/index.js.map +1 -0
  31. package/dist/backend/sqlite/schema.d.ts +2 -0
  32. package/dist/backend/sqlite/schema.d.ts.map +1 -0
  33. package/dist/backend/sqlite/schema.js +88 -0
  34. package/dist/backend/sqlite/schema.js.map +1 -0
  35. package/dist/claude-md.d.ts +2 -0
  36. package/dist/claude-md.d.ts.map +1 -0
  37. package/dist/claude-md.js +97 -0
  38. package/dist/claude-md.js.map +1 -0
  39. package/dist/cli/commands/audit.d.ts +4 -0
  40. package/dist/cli/commands/audit.d.ts.map +1 -0
  41. package/dist/cli/commands/audit.js +39 -0
  42. package/dist/cli/commands/audit.js.map +1 -0
  43. package/dist/cli/commands/auth.d.ts +8 -0
  44. package/dist/cli/commands/auth.d.ts.map +1 -0
  45. package/dist/cli/commands/auth.js +242 -0
  46. package/dist/cli/commands/auth.js.map +1 -0
  47. package/dist/cli/commands/discover.d.ts +5 -0
  48. package/dist/cli/commands/discover.d.ts.map +1 -0
  49. package/dist/cli/commands/discover.js +48 -0
  50. package/dist/cli/commands/discover.js.map +1 -0
  51. package/dist/cli/commands/maintain.d.ts +6 -0
  52. package/dist/cli/commands/maintain.d.ts.map +1 -0
  53. package/dist/cli/commands/maintain.js +168 -0
  54. package/dist/cli/commands/maintain.js.map +1 -0
  55. package/dist/cli/commands/read.d.ts +7 -0
  56. package/dist/cli/commands/read.d.ts.map +1 -0
  57. package/dist/cli/commands/read.js +139 -0
  58. package/dist/cli/commands/read.js.map +1 -0
  59. package/dist/cli/commands/write.d.ts +4 -0
  60. package/dist/cli/commands/write.d.ts.map +1 -0
  61. package/dist/cli/commands/write.js +99 -0
  62. package/dist/cli/commands/write.js.map +1 -0
  63. package/dist/cli/helpers.d.ts +8 -0
  64. package/dist/cli/helpers.d.ts.map +1 -0
  65. package/dist/cli/helpers.js +17 -0
  66. package/dist/cli/helpers.js.map +1 -0
  67. package/dist/cli/index.d.ts +3 -0
  68. package/dist/cli/index.d.ts.map +1 -0
  69. package/dist/cli/index.js +296 -0
  70. package/dist/cli/index.js.map +1 -0
  71. package/dist/cli.d.ts +3 -0
  72. package/dist/cli.d.ts.map +1 -0
  73. package/dist/cli.js +7 -0
  74. package/dist/cli.js.map +1 -0
  75. package/dist/engine/audit.d.ts +15 -0
  76. package/dist/engine/audit.d.ts.map +1 -0
  77. package/dist/engine/audit.js +42 -0
  78. package/dist/engine/audit.js.map +1 -0
  79. package/dist/engine/backup.d.ts +9 -0
  80. package/dist/engine/backup.d.ts.map +1 -0
  81. package/dist/engine/backup.js +100 -0
  82. package/dist/engine/backup.js.map +1 -0
  83. package/dist/engine/composites.d.ts +6 -0
  84. package/dist/engine/composites.d.ts.map +1 -0
  85. package/dist/engine/composites.js +102 -0
  86. package/dist/engine/composites.js.map +1 -0
  87. package/dist/engine/context.d.ts +47 -0
  88. package/dist/engine/context.d.ts.map +1 -0
  89. package/dist/engine/context.js +55 -0
  90. package/dist/engine/context.js.map +1 -0
  91. package/dist/engine/docid-safe.d.ts +8 -0
  92. package/dist/engine/docid-safe.d.ts.map +1 -0
  93. package/dist/engine/docid-safe.js +0 -0
  94. package/dist/engine/docid-safe.js.map +1 -0
  95. package/dist/engine/helpers.d.ts +8 -0
  96. package/dist/engine/helpers.d.ts.map +1 -0
  97. package/dist/engine/helpers.js +102 -0
  98. package/dist/engine/helpers.js.map +1 -0
  99. package/dist/engine/index.d.ts +215 -0
  100. package/dist/engine/index.d.ts.map +1 -0
  101. package/dist/engine/index.js +494 -0
  102. package/dist/engine/index.js.map +1 -0
  103. package/dist/engine/indexing.d.ts +14 -0
  104. package/dist/engine/indexing.d.ts.map +1 -0
  105. package/dist/engine/indexing.js +225 -0
  106. package/dist/engine/indexing.js.map +1 -0
  107. package/dist/engine/journal.d.ts +32 -0
  108. package/dist/engine/journal.d.ts.map +1 -0
  109. package/dist/engine/journal.js +111 -0
  110. package/dist/engine/journal.js.map +1 -0
  111. package/dist/engine/logger.d.ts +19 -0
  112. package/dist/engine/logger.d.ts.map +1 -0
  113. package/dist/engine/logger.js +40 -0
  114. package/dist/engine/logger.js.map +1 -0
  115. package/dist/engine/maintenance.d.ts +15 -0
  116. package/dist/engine/maintenance.d.ts.map +1 -0
  117. package/dist/engine/maintenance.js +87 -0
  118. package/dist/engine/maintenance.js.map +1 -0
  119. package/dist/engine/mutex.d.ts +24 -0
  120. package/dist/engine/mutex.d.ts.map +1 -0
  121. package/dist/engine/mutex.js +50 -0
  122. package/dist/engine/mutex.js.map +1 -0
  123. package/dist/engine/pathguard.d.ts +16 -0
  124. package/dist/engine/pathguard.d.ts.map +1 -0
  125. package/dist/engine/pathguard.js +41 -0
  126. package/dist/engine/pathguard.js.map +1 -0
  127. package/dist/engine/reads.d.ts +25 -0
  128. package/dist/engine/reads.d.ts.map +1 -0
  129. package/dist/engine/reads.js +904 -0
  130. package/dist/engine/reads.js.map +1 -0
  131. package/dist/engine/types.d.ts +396 -0
  132. package/dist/engine/types.d.ts.map +1 -0
  133. package/dist/engine/types.js +5 -0
  134. package/dist/engine/types.js.map +1 -0
  135. package/dist/engine/writes.d.ts +10 -0
  136. package/dist/engine/writes.d.ts.map +1 -0
  137. package/dist/engine/writes.js +606 -0
  138. package/dist/engine/writes.js.map +1 -0
  139. package/dist/engine.d.ts +3 -0
  140. package/dist/engine.d.ts.map +1 -0
  141. package/dist/engine.js +6 -0
  142. package/dist/engine.js.map +1 -0
  143. package/dist/errors.d.ts +20 -0
  144. package/dist/errors.d.ts.map +1 -0
  145. package/dist/errors.js +17 -0
  146. package/dist/errors.js.map +1 -0
  147. package/dist/extractor/fields.d.ts +3 -0
  148. package/dist/extractor/fields.d.ts.map +1 -0
  149. package/dist/extractor/fields.js +58 -0
  150. package/dist/extractor/fields.js.map +1 -0
  151. package/dist/extractor/index.d.ts +7 -0
  152. package/dist/extractor/index.d.ts.map +1 -0
  153. package/dist/extractor/index.js +22 -0
  154. package/dist/extractor/index.js.map +1 -0
  155. package/dist/extractor/normalizers.d.ts +22 -0
  156. package/dist/extractor/normalizers.d.ts.map +1 -0
  157. package/dist/extractor/normalizers.js +250 -0
  158. package/dist/extractor/normalizers.js.map +1 -0
  159. package/dist/extractor/objects.d.ts +3 -0
  160. package/dist/extractor/objects.d.ts.map +1 -0
  161. package/dist/extractor/objects.js +33 -0
  162. package/dist/extractor/objects.js.map +1 -0
  163. package/dist/extractor/relationships.d.ts +3 -0
  164. package/dist/extractor/relationships.d.ts.map +1 -0
  165. package/dist/extractor/relationships.js +58 -0
  166. package/dist/extractor/relationships.js.map +1 -0
  167. package/dist/git/commit.d.ts +63 -0
  168. package/dist/git/commit.d.ts.map +1 -0
  169. package/dist/git/commit.js +161 -0
  170. package/dist/git/commit.js.map +1 -0
  171. package/dist/git/diff.d.ts +4 -0
  172. package/dist/git/diff.d.ts.map +1 -0
  173. package/dist/git/diff.js +56 -0
  174. package/dist/git/diff.js.map +1 -0
  175. package/dist/git/index.d.ts +63 -0
  176. package/dist/git/index.d.ts.map +1 -0
  177. package/dist/git/index.js +151 -0
  178. package/dist/git/index.js.map +1 -0
  179. package/dist/git/log.d.ts +13 -0
  180. package/dist/git/log.d.ts.map +1 -0
  181. package/dist/git/log.js +116 -0
  182. package/dist/git/log.js.map +1 -0
  183. package/dist/git/snapshot.d.ts +4 -0
  184. package/dist/git/snapshot.d.ts.map +1 -0
  185. package/dist/git/snapshot.js +65 -0
  186. package/dist/git/snapshot.js.map +1 -0
  187. package/dist/instance/config.d.ts +19 -0
  188. package/dist/instance/config.d.ts.map +1 -0
  189. package/dist/instance/config.js +107 -0
  190. package/dist/instance/config.js.map +1 -0
  191. package/dist/instance/pool.d.ts +138 -0
  192. package/dist/instance/pool.d.ts.map +1 -0
  193. package/dist/instance/pool.js +335 -0
  194. package/dist/instance/pool.js.map +1 -0
  195. package/dist/instance/session.d.ts +140 -0
  196. package/dist/instance/session.d.ts.map +1 -0
  197. package/dist/instance/session.js +267 -0
  198. package/dist/instance/session.js.map +1 -0
  199. package/dist/logging.d.ts +108 -0
  200. package/dist/logging.d.ts.map +1 -0
  201. package/dist/logging.js +120 -0
  202. package/dist/logging.js.map +1 -0
  203. package/dist/maad-md.d.ts +11 -0
  204. package/dist/maad-md.d.ts.map +1 -0
  205. package/dist/maad-md.js +252 -0
  206. package/dist/maad-md.js.map +1 -0
  207. package/dist/mcp/bulk-cap.d.ts +10 -0
  208. package/dist/mcp/bulk-cap.d.ts.map +1 -0
  209. package/dist/mcp/bulk-cap.js +37 -0
  210. package/dist/mcp/bulk-cap.js.map +1 -0
  211. package/dist/mcp/config.d.ts +18 -0
  212. package/dist/mcp/config.d.ts.map +1 -0
  213. package/dist/mcp/config.js +20 -0
  214. package/dist/mcp/config.js.map +1 -0
  215. package/dist/mcp/ctx.d.ts +17 -0
  216. package/dist/mcp/ctx.d.ts.map +1 -0
  217. package/dist/mcp/ctx.js +7 -0
  218. package/dist/mcp/ctx.js.map +1 -0
  219. package/dist/mcp/guardrails.d.ts +42 -0
  220. package/dist/mcp/guardrails.d.ts.map +1 -0
  221. package/dist/mcp/guardrails.js +58 -0
  222. package/dist/mcp/guardrails.js.map +1 -0
  223. package/dist/mcp/idempotency.d.ts +69 -0
  224. package/dist/mcp/idempotency.d.ts.map +1 -0
  225. package/dist/mcp/idempotency.js +168 -0
  226. package/dist/mcp/idempotency.js.map +1 -0
  227. package/dist/mcp/instance-reload.d.ts +23 -0
  228. package/dist/mcp/instance-reload.d.ts.map +1 -0
  229. package/dist/mcp/instance-reload.js +126 -0
  230. package/dist/mcp/instance-reload.js.map +1 -0
  231. package/dist/mcp/kinds.d.ts +22 -0
  232. package/dist/mcp/kinds.d.ts.map +1 -0
  233. package/dist/mcp/kinds.js +112 -0
  234. package/dist/mcp/kinds.js.map +1 -0
  235. package/dist/mcp/lifecycle.d.ts +8 -0
  236. package/dist/mcp/lifecycle.d.ts.map +1 -0
  237. package/dist/mcp/lifecycle.js +65 -0
  238. package/dist/mcp/lifecycle.js.map +1 -0
  239. package/dist/mcp/memory-pressure.d.ts +37 -0
  240. package/dist/mcp/memory-pressure.d.ts.map +1 -0
  241. package/dist/mcp/memory-pressure.js +179 -0
  242. package/dist/mcp/memory-pressure.js.map +1 -0
  243. package/dist/mcp/notifications.d.ts +87 -0
  244. package/dist/mcp/notifications.d.ts.map +1 -0
  245. package/dist/mcp/notifications.js +154 -0
  246. package/dist/mcp/notifications.js.map +1 -0
  247. package/dist/mcp/query-depth.d.ts +28 -0
  248. package/dist/mcp/query-depth.d.ts.map +1 -0
  249. package/dist/mcp/query-depth.js +43 -0
  250. package/dist/mcp/query-depth.js.map +1 -0
  251. package/dist/mcp/rate-limit.d.ts +60 -0
  252. package/dist/mcp/rate-limit.d.ts.map +1 -0
  253. package/dist/mcp/rate-limit.js +203 -0
  254. package/dist/mcp/rate-limit.js.map +1 -0
  255. package/dist/mcp/reload-signal.d.ts +13 -0
  256. package/dist/mcp/reload-signal.d.ts.map +1 -0
  257. package/dist/mcp/reload-signal.js +68 -0
  258. package/dist/mcp/reload-signal.js.map +1 -0
  259. package/dist/mcp/response.d.ts +109 -0
  260. package/dist/mcp/response.d.ts.map +1 -0
  261. package/dist/mcp/response.js +132 -0
  262. package/dist/mcp/response.js.map +1 -0
  263. package/dist/mcp/roles.d.ts +7 -0
  264. package/dist/mcp/roles.d.ts.map +1 -0
  265. package/dist/mcp/roles.js +57 -0
  266. package/dist/mcp/roles.js.map +1 -0
  267. package/dist/mcp/server.d.ts +33 -0
  268. package/dist/mcp/server.d.ts.map +1 -0
  269. package/dist/mcp/server.js +252 -0
  270. package/dist/mcp/server.js.map +1 -0
  271. package/dist/mcp/shutdown.d.ts +32 -0
  272. package/dist/mcp/shutdown.d.ts.map +1 -0
  273. package/dist/mcp/shutdown.js +130 -0
  274. package/dist/mcp/shutdown.js.map +1 -0
  275. package/dist/mcp/tools/audit.d.ts +4 -0
  276. package/dist/mcp/tools/audit.d.ts.map +1 -0
  277. package/dist/mcp/tools/audit.js +45 -0
  278. package/dist/mcp/tools/audit.js.map +1 -0
  279. package/dist/mcp/tools/auth.d.ts +4 -0
  280. package/dist/mcp/tools/auth.d.ts.map +1 -0
  281. package/dist/mcp/tools/auth.js +181 -0
  282. package/dist/mcp/tools/auth.js.map +1 -0
  283. package/dist/mcp/tools/backup.d.ts +4 -0
  284. package/dist/mcp/tools/backup.d.ts.map +1 -0
  285. package/dist/mcp/tools/backup.js +52 -0
  286. package/dist/mcp/tools/backup.js.map +1 -0
  287. package/dist/mcp/tools/discover.d.ts +4 -0
  288. package/dist/mcp/tools/discover.d.ts.map +1 -0
  289. package/dist/mcp/tools/discover.js +83 -0
  290. package/dist/mcp/tools/discover.js.map +1 -0
  291. package/dist/mcp/tools/instance.d.ts +15 -0
  292. package/dist/mcp/tools/instance.d.ts.map +1 -0
  293. package/dist/mcp/tools/instance.js +207 -0
  294. package/dist/mcp/tools/instance.js.map +1 -0
  295. package/dist/mcp/tools/maintain.d.ts +4 -0
  296. package/dist/mcp/tools/maintain.d.ts.map +1 -0
  297. package/dist/mcp/tools/maintain.js +123 -0
  298. package/dist/mcp/tools/maintain.js.map +1 -0
  299. package/dist/mcp/tools/read.d.ts +4 -0
  300. package/dist/mcp/tools/read.d.ts.map +1 -0
  301. package/dist/mcp/tools/read.js +304 -0
  302. package/dist/mcp/tools/read.js.map +1 -0
  303. package/dist/mcp/tools/write.d.ts +4 -0
  304. package/dist/mcp/tools/write.d.ts.map +1 -0
  305. package/dist/mcp/tools/write.js +342 -0
  306. package/dist/mcp/tools/write.js.map +1 -0
  307. package/dist/mcp/transport/auth.d.ts +41 -0
  308. package/dist/mcp/transport/auth.d.ts.map +1 -0
  309. package/dist/mcp/transport/auth.js +115 -0
  310. package/dist/mcp/transport/auth.js.map +1 -0
  311. package/dist/mcp/transport/http.d.ts +62 -0
  312. package/dist/mcp/transport/http.d.ts.map +1 -0
  313. package/dist/mcp/transport/http.js +357 -0
  314. package/dist/mcp/transport/http.js.map +1 -0
  315. package/dist/mcp/transport/pin.d.ts +15 -0
  316. package/dist/mcp/transport/pin.d.ts.map +1 -0
  317. package/dist/mcp/transport/pin.js +71 -0
  318. package/dist/mcp/transport/pin.js.map +1 -0
  319. package/dist/mcp/transport/telemetry.d.ts +79 -0
  320. package/dist/mcp/transport/telemetry.d.ts.map +1 -0
  321. package/dist/mcp/transport/telemetry.js +97 -0
  322. package/dist/mcp/transport/telemetry.js.map +1 -0
  323. package/dist/mcp/with-session.d.ts +26 -0
  324. package/dist/mcp/with-session.d.ts.map +1 -0
  325. package/dist/mcp/with-session.js +275 -0
  326. package/dist/mcp/with-session.js.map +1 -0
  327. package/dist/parser/annotations.d.ts +3 -0
  328. package/dist/parser/annotations.d.ts.map +1 -0
  329. package/dist/parser/annotations.js +41 -0
  330. package/dist/parser/annotations.js.map +1 -0
  331. package/dist/parser/blocks.d.ts +3 -0
  332. package/dist/parser/blocks.d.ts.map +1 -0
  333. package/dist/parser/blocks.js +101 -0
  334. package/dist/parser/blocks.js.map +1 -0
  335. package/dist/parser/frontmatter.d.ts +9 -0
  336. package/dist/parser/frontmatter.d.ts.map +1 -0
  337. package/dist/parser/frontmatter.js +33 -0
  338. package/dist/parser/frontmatter.js.map +1 -0
  339. package/dist/parser/index.d.ts +11 -0
  340. package/dist/parser/index.d.ts.map +1 -0
  341. package/dist/parser/index.js +54 -0
  342. package/dist/parser/index.js.map +1 -0
  343. package/dist/parser/matter.d.ts +3 -0
  344. package/dist/parser/matter.d.ts.map +1 -0
  345. package/dist/parser/matter.js +32 -0
  346. package/dist/parser/matter.js.map +1 -0
  347. package/dist/parser/tags.d.ts +3 -0
  348. package/dist/parser/tags.d.ts.map +1 -0
  349. package/dist/parser/tags.js +32 -0
  350. package/dist/parser/tags.js.map +1 -0
  351. package/dist/parser/verbatim.d.ts +4 -0
  352. package/dist/parser/verbatim.d.ts.map +1 -0
  353. package/dist/parser/verbatim.js +121 -0
  354. package/dist/parser/verbatim.js.map +1 -0
  355. package/dist/parser/yaml-profile.d.ts +4 -0
  356. package/dist/parser/yaml-profile.d.ts.map +1 -0
  357. package/dist/parser/yaml-profile.js +73 -0
  358. package/dist/parser/yaml-profile.js.map +1 -0
  359. package/dist/registry/index.d.ts +2 -0
  360. package/dist/registry/index.d.ts.map +1 -0
  361. package/dist/registry/index.js +2 -0
  362. package/dist/registry/index.js.map +1 -0
  363. package/dist/registry/loader.d.ts +4 -0
  364. package/dist/registry/loader.d.ts.map +1 -0
  365. package/dist/registry/loader.js +147 -0
  366. package/dist/registry/loader.js.map +1 -0
  367. package/dist/registry/types.d.ts +2 -0
  368. package/dist/registry/types.d.ts.map +1 -0
  369. package/dist/registry/types.js +5 -0
  370. package/dist/registry/types.js.map +1 -0
  371. package/dist/scanner.d.ts +57 -0
  372. package/dist/scanner.d.ts.map +1 -0
  373. package/dist/scanner.js +223 -0
  374. package/dist/scanner.js.map +1 -0
  375. package/dist/schema/index.d.ts +3 -0
  376. package/dist/schema/index.d.ts.map +1 -0
  377. package/dist/schema/index.js +3 -0
  378. package/dist/schema/index.js.map +1 -0
  379. package/dist/schema/loader.d.ts +4 -0
  380. package/dist/schema/loader.d.ts.map +1 -0
  381. package/dist/schema/loader.js +303 -0
  382. package/dist/schema/loader.js.map +1 -0
  383. package/dist/schema/precision.d.ts +6 -0
  384. package/dist/schema/precision.d.ts.map +1 -0
  385. package/dist/schema/precision.js +59 -0
  386. package/dist/schema/precision.js.map +1 -0
  387. package/dist/schema/validator.d.ts +21 -0
  388. package/dist/schema/validator.d.ts.map +1 -0
  389. package/dist/schema/validator.js +200 -0
  390. package/dist/schema/validator.js.map +1 -0
  391. package/dist/schema-md.d.ts +8 -0
  392. package/dist/schema-md.d.ts.map +1 -0
  393. package/dist/schema-md.js +98 -0
  394. package/dist/schema-md.js.map +1 -0
  395. package/dist/skill-files.d.ts +3 -0
  396. package/dist/skill-files.d.ts.map +1 -0
  397. package/dist/skill-files.js +362 -0
  398. package/dist/skill-files.js.map +1 -0
  399. package/dist/skills-scaffold.d.ts +10 -0
  400. package/dist/skills-scaffold.d.ts.map +1 -0
  401. package/dist/skills-scaffold.js +52 -0
  402. package/dist/skills-scaffold.js.map +1 -0
  403. package/dist/types.d.ts +309 -0
  404. package/dist/types.d.ts.map +1 -0
  405. package/dist/types.js +111 -0
  406. package/dist/types.js.map +1 -0
  407. package/dist/writer/index.d.ts +7 -0
  408. package/dist/writer/index.d.ts.map +1 -0
  409. package/dist/writer/index.js +32 -0
  410. package/dist/writer/index.js.map +1 -0
  411. package/dist/writer/serializer.d.ts +4 -0
  412. package/dist/writer/serializer.d.ts.map +1 -0
  413. package/dist/writer/serializer.js +103 -0
  414. package/dist/writer/serializer.js.map +1 -0
  415. package/dist/writer/template.d.ts +3 -0
  416. package/dist/writer/template.d.ts.map +1 -0
  417. package/dist/writer/template.js +27 -0
  418. package/dist/writer/template.js.map +1 -0
  419. package/package.json +59 -7
@@ -0,0 +1,362 @@
1
+ // ============================================================================
2
+ // Skill Files — detailed workflow guides generated on init
3
+ // Loaded by the LLM when performing specific tasks.
4
+ // ============================================================================
5
+ export function generateSchemaGuide() {
6
+ return `# Schema Guide
7
+
8
+ ## Overview
9
+
10
+ Every MAAD record type needs two things:
11
+ 1. A type entry in \`_registry/object_types.yaml\`
12
+ 2. A schema file in \`_schema/<type>.v<version>.yaml\`
13
+
14
+ ## Master vs Transaction Records
15
+
16
+ Before designing schemas, classify each type:
17
+
18
+ | Pattern | Description | File strategy | Examples |
19
+ |---------|-------------|---------------|----------|
20
+ | **Master** | Created once, updated occasionally. Low volume. Standalone identity. | One file per record | Clients, contacts, cases, products, accounts |
21
+ | **Transaction** | Created constantly, rarely updated. High volume. Belongs to a parent. | Append blocks to parent file | Notes, logs, events, audit entries, messages |
22
+
23
+ **Why this matters:** 100 sales agents x 10 notes/day x 365 days = 365,000 files if each note is a file. That kills the file system, git, and reindex. Instead, group transaction records into one file per parent — notes for client X go in one file, appended as headed blocks.
24
+
25
+ ### Master record example (one file per record)
26
+ \`\`\`
27
+ clients/
28
+ cli-001.md ← Apex Industrial Supply Co.
29
+ cli-002.md ← BlueLine Logistics LLC
30
+ \`\`\`
31
+
32
+ ### Transaction record example (append to parent file)
33
+ \`\`\`
34
+ case-notes/
35
+ notes-cli-001.md ← all notes for client 001 (appended over time)
36
+ notes-cli-002.md ← all notes for client 002
37
+ \`\`\`
38
+
39
+ Each note is a headed block inside the file:
40
+ \`\`\`markdown
41
+ ## 2024-03-05 — Mediation Session {#note-010}
42
+
43
+ Day-long mediation with Judge Vasquez. No resolution. Opposing at $950K.
44
+ \`\`\`
45
+
46
+ The engine indexes each block with line pointers. Individual notes are addressable via \`get warm <doc_id> <block_id>\`.
47
+
48
+ ### Decision rule
49
+
50
+ Ask: **Will this type generate more than 1,000 records per year?**
51
+ - No → Master pattern (one file per record, use \`maad_create\`)
52
+ - Yes → Transaction pattern (append to parent file, use \`maad_update --append\`)
53
+
54
+ ## Registry entry
55
+
56
+ \`\`\`yaml
57
+ types:
58
+ client:
59
+ path: clients/ # directory for this type's records
60
+ id_prefix: cli # MUST be 2-5 lowercase alphanumeric (e.g. cli, usr, cas, note, te)
61
+ schema: client.v1 # schema file reference
62
+ \`\`\`
63
+
64
+ **id_prefix rules:** 2-5 lowercase letters/numbers only. No uppercase, no single characters, no symbols. Examples: \`cli\`, \`usr\`, \`cas\`, \`note\`, \`te\`. The engine rejects anything else.
65
+
66
+ ## Schema file
67
+
68
+ \`\`\`yaml
69
+ # _schema/client.v1.yaml
70
+ type: client
71
+ required:
72
+ - doc_id
73
+ - name
74
+ - status
75
+ fields:
76
+ name:
77
+ type: string
78
+ index: true
79
+ status:
80
+ type: enum
81
+ index: true
82
+ values: [active, inactive, prospect]
83
+ industry:
84
+ type: string
85
+ index: true
86
+ primary_contact:
87
+ type: ref
88
+ index: true
89
+ target: contact
90
+ email:
91
+ type: string
92
+ index: true
93
+ phone:
94
+ type: string
95
+ index: false
96
+ since:
97
+ type: date
98
+ index: true
99
+ tags:
100
+ type: list
101
+ index: false
102
+ itemType: string
103
+ \`\`\`
104
+
105
+ ## Field types
106
+
107
+ | Type | Description | Index behavior |
108
+ |------|-------------|---------------|
109
+ | \`string\` | Plain text | Exact match, contains |
110
+ | \`number\` | Numeric value | Range queries (gt, lt, gte, lte) |
111
+ | \`date\` | ISO date or datetime (YYYY-MM-DD, or full ISO 8601) | Lexicographic range |
112
+ | \`enum\` | Constrained values | Exact match. Requires \`values\` list. |
113
+ | \`ref\` | Reference to another record | Exact match. Requires \`target\` type. Creates relationship edges. |
114
+ | \`boolean\` | true/false | Exact match |
115
+ | \`list\` | Array of values | Requires \`itemType\`. Use \`target\` for list-of-ref. |
116
+ | \`amount\` | Currency value (e.g. "1250000 USD") | Numeric range on extracted value |
117
+
118
+ ## Date precision (0.6.7+)
119
+
120
+ Date fields accept three optional hints that let the schema declare the
121
+ precision contract instead of relying on convention:
122
+
123
+ | Key | Values | Default | Effect |
124
+ |-----|--------|---------|--------|
125
+ | \`store_precision\` | \`year\` / \`month\` / \`day\` / \`hour\` / \`minute\` / \`second\` / \`millisecond\` | unset (lenient) | Minimum precision the engine accepts on write |
126
+ | \`on_coarser\` | \`warn\` / \`error\` | \`warn\` when \`store_precision\` declared | Behavior when a written value is coarser than declared. \`warn\` emits a response \`_meta.warnings[]\` entry; \`error\` rejects the write. |
127
+ | \`display_precision\` | same enum | unset | Consumer-side rendering hint. Engine never enforces. Must be coarser-or-equal to \`store_precision\`. |
128
+
129
+ ### Example — event timestamp (rich storage, minute-level UI)
130
+
131
+ \`\`\`yaml
132
+ started_at:
133
+ type: date
134
+ store_precision: second # engine enforces — writes coarser than second warn
135
+ on_coarser: warn
136
+ display_precision: minute # consumer renders HH:MM, drops seconds
137
+ \`\`\`
138
+
139
+ ### Example — birthday (identity date, no time component)
140
+
141
+ \`\`\`yaml
142
+ birthday:
143
+ type: date
144
+ store_precision: day # day is the richest meaningful precision
145
+ on_coarser: error # reject year-only or month-only writes
146
+ display_precision: day
147
+ \`\`\`
148
+
149
+ ### Rules
150
+
151
+ - **Storage wins.** \`store_precision\` is a *minimum*, not an exact match — writing finer than declared always passes. Rule: always capture the richest precision available.
152
+ - **Write-time only.** Precision enforcement fires only on \`maad_create\`, \`maad_update\`, and \`maad_bulk_*\`. Reads, reindex, and \`maad_validate\` (without \`includePrecision\`) never judge historical data.
153
+ - **Update-neighbor safe.** Updating a field that isn't the declared-precision date never fires a warning on the unchanged historical date — schemas can tighten precision without breaking records that predate the contract.
154
+ - **Audit with \`maad_validate includePrecision: true\`** to plan migrations. Returns \`precisionDrift[]\` — informational, never counted as invalid.
155
+ - Absent keys = pre-0.6.7 lenient behavior. Fully backward compatible.
156
+
157
+ ## Required fields
158
+
159
+ Every schema must require \`doc_id\`. Add other required fields that every record of this type must have.
160
+
161
+ ## Index flag
162
+
163
+ \`index: true\` means the field is stored in the field_index table for fast queries. Only index fields you need to filter or search on.
164
+
165
+ ## Ref fields
166
+
167
+ \`type: ref\` creates a relationship edge between documents. The \`target\` must be a registered type. Example:
168
+
169
+ \`\`\`yaml
170
+ client:
171
+ type: ref
172
+ index: true
173
+ target: client # points to records of type "client"
174
+ \`\`\`
175
+
176
+ ## Template headings (optional)
177
+
178
+ Add heading structure that \`maad_create\` will generate for new records:
179
+
180
+ \`\`\`yaml
181
+ template:
182
+ - level: 1
183
+ text: "{{title}}"
184
+ - level: 2
185
+ text: Background
186
+ - level: 2
187
+ text: Notes
188
+ \`\`\`
189
+
190
+ ## Schema versioning
191
+
192
+ Schema refs use \`<type>.v<number>\` format. When changing a schema, create a new version file and update the registry reference.
193
+
194
+ ## After creating schemas
195
+
196
+ 1. Call \`maad_reload\` to pick up new registry and schemas
197
+ 2. Call \`maad_summary\` or \`maad_schema <type>\` to verify
198
+ `;
199
+ }
200
+ export function generateImportGuide() {
201
+ return `# Import Guide
202
+
203
+ ## Overview
204
+
205
+ Importing raw data into MAAD:
206
+ 1. Analyze the source data
207
+ 2. Classify each type as master or transaction
208
+ 3. Design the type registry and schemas
209
+ 4. Create records
210
+ 5. Reindex to build the search index
211
+
212
+ ## Step 1 — Analyze source data
213
+
214
+ Read the raw files. Identify:
215
+ - What types of records exist (clients, cases, contacts, notes, etc.)
216
+ - What fields each type has
217
+ - What relationships exist between types (client → contact, case → client)
218
+ - What field types to use (string, date, enum, ref, amount)
219
+
220
+ Use \`maad_scan\` on the source directory for structural patterns if helpful.
221
+
222
+ ## Step 2 — Classify master vs transaction
223
+
224
+ For each type, ask: **Will it generate more than 1,000 records per year?**
225
+
226
+ | Type | Volume | Pattern | File strategy |
227
+ |------|--------|---------|---------------|
228
+ | Clients | Low (tens to hundreds) | Master | One file per client |
229
+ | Cases | Low to medium (hundreds) | Master | One file per case |
230
+ | Contacts | Low (hundreds) | Master | One file per contact |
231
+ | Case notes | **High (thousands+)** | **Transaction** | One file per case, notes appended as blocks |
232
+ | Activity logs | **High (tens of thousands)** | **Transaction** | One file per entity, entries appended |
233
+ | Invoices | Medium to high | Master if <1K/yr, Transaction if more | Depends on volume |
234
+
235
+ ## Step 3 — Design registry and schemas
236
+
237
+ Create \`_registry/object_types.yaml\`:
238
+
239
+ \`\`\`yaml
240
+ types:
241
+ client:
242
+ path: clients/
243
+ id_prefix: cli
244
+ schema: client.v1
245
+ case:
246
+ path: cases/
247
+ id_prefix: cas
248
+ schema: case.v1
249
+ case_note:
250
+ path: case-notes/
251
+ id_prefix: note
252
+ schema: case_note.v1
253
+ \`\`\`
254
+
255
+ Create schema files in \`_schema/\` for each type. See schema-guide.md for field type reference.
256
+
257
+ After writing registry and schemas, call \`maad_reload\` to pick them up.
258
+
259
+ ## Step 4 — Create records
260
+
261
+ ### Master records (one file per record)
262
+
263
+ For each record, use \`maad_create\`:
264
+
265
+ \`\`\`
266
+ maad_create({
267
+ docType: "client",
268
+ fields: {
269
+ name: "Apex Industrial Supply Co.",
270
+ status: "active",
271
+ industry: "Manufacturing",
272
+ primary_contact: "con-ron-stafford",
273
+ email: "r.stafford@apexind.com"
274
+ }
275
+ })
276
+ \`\`\`
277
+
278
+ For bulk imports (10+ records), use \`maad_bulk_create\` instead — accepts an array, returns per-record results, single git commit:
279
+
280
+ \`\`\`
281
+ maad_bulk_create({
282
+ records: [
283
+ { docType: "client", fields: { name: "Acme Corp", status: "active" } },
284
+ { docType: "client", fields: { name: "Beta Inc", status: "prospect" } },
285
+ ...
286
+ ]
287
+ })
288
+ \`\`\`
289
+
290
+ **Important:** Execute individual creates sequentially, not in parallel. Use bulk_create for batch operations.
291
+
292
+ ### Transaction records (append to parent file)
293
+
294
+ First create the parent file, then append entries:
295
+
296
+ \`\`\`
297
+ maad_create({
298
+ docType: "case_note",
299
+ docId: "notes-cas-001",
300
+ fields: { case: "cas-001", doc_type: "case_note" },
301
+ body: "## 2024-03-05 — Mediation Session {#note-010}\\n\\nDay-long mediation. No resolution."
302
+ })
303
+ \`\`\`
304
+
305
+ For subsequent notes, append to the same file:
306
+
307
+ \`\`\`
308
+ maad_update({
309
+ docId: "notes-cas-001",
310
+ appendBody: "## 2024-04-15 — Settlement Call {#note-011}\\n\\nClient agreed to $1.8M floor."
311
+ })
312
+ \`\`\`
313
+
314
+ Each headed block becomes an indexed block with a block_id. Retrieve individual notes with \`maad_get\` at warm depth.
315
+
316
+ ## ID mapping (critical)
317
+
318
+ Source data will have its own IDs (C001, U005, INV-2024-001, etc.). These are NOT MAAD IDs.
319
+
320
+ - MAAD generates IDs using the registry \`id_prefix\`: \`cli-001\`, \`usr-005\`, \`cas-012\`
321
+ - \`id_prefix\` must be 2-5 lowercase alphanumeric characters
322
+ - **Do not change the registry to match source IDs.** Map source IDs to MAAD format during import.
323
+ - Establish the mapping before creating any records: \`C001 → cli-001\`, \`U005 → usr-005\`
324
+ - Create parent types first (clients, users), then dependent types (cases, notes) so refs resolve
325
+ - Store the original source ID in a \`source_id\` field if you need to cross-reference back
326
+ - Ref fields must use MAAD IDs, not source IDs (e.g. \`client: cli-001\`, not \`client: C001\`)
327
+
328
+ ## Handling tabular data
329
+
330
+ If source data is in markdown tables (rows = records):
331
+ - Classify: is each row a master record or a transaction entry?
332
+ - Master rows: each row becomes one \`maad_create\` call (or \`maad_bulk_create\` for 10+)
333
+ - Transaction rows: group by parent, create one file per parent, append rows as headed blocks
334
+ - Column headers map to frontmatter field names
335
+
336
+ ## Handling narrative documents
337
+
338
+ If source data is unstructured text (articles, reports, filings):
339
+ - Create one record per document
340
+ - Put key facts in frontmatter fields (who, what, when, where)
341
+ - The body stays as-is — the original text is preserved unchanged
342
+ - Frontmatter IS the annotation layer — the LLM's understanding of the document
343
+
344
+ ## Step 5 — Reindex and verify
345
+
346
+ After creating all records:
347
+
348
+ 1. \`maad_reindex({ force: true })\` — rebuild the full index
349
+ 2. \`maad_summary\` — verify counts and types
350
+ 3. \`maad_query\` — spot-check a few records
351
+ 4. \`maad_search\` — verify extracted objects
352
+
353
+ ## Tips
354
+
355
+ - Call \`maad_schema <type>\` before creating records to verify field names
356
+ - Use \`maad_reload\` after any registry or schema changes
357
+ - Execute write operations sequentially — do not parallelize
358
+ - If a create fails validation, check the error message — it tells you which field is wrong
359
+ - For bulk imports, work through one type at a time: all clients, then all cases, then notes
360
+ `;
361
+ }
362
+ //# sourceMappingURL=skill-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-files.js","sourceRoot":"","sources":["../src/skill-files.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2DAA2D;AAC3D,oDAAoD;AACpD,+EAA+E;AAE/E,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgMR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+JR,CAAC;AACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface SkillsScaffoldResult {
2
+ created: string[];
3
+ skipped: string[];
4
+ errors: Array<{
5
+ file: string;
6
+ message: string;
7
+ }>;
8
+ }
9
+ export declare function ensureProjectSkills(projectRoot: string): SkillsScaffoldResult;
10
+ //# sourceMappingURL=skills-scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-scaffold.d.ts","sourceRoot":"","sources":["../src/skills-scaffold.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAaD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,CA6B7E"}
@@ -0,0 +1,52 @@
1
+ // ============================================================================
2
+ // Skills Scaffold — ensures _skills/ guide files exist in a project
3
+ //
4
+ // Called by:
5
+ // - MCP lifecycle after engine.init() succeeds (per-session bootstrap)
6
+ // - `maad init` CLI (full project scaffold)
7
+ // - Future EnginePool (0.4.0) on first per-project bind
8
+ //
9
+ // Never overwrites existing files — protects user customizations. Failure is
10
+ // non-fatal to the caller; log and continue so an unwritable _skills/ never
11
+ // blocks the engine from starting.
12
+ // ============================================================================
13
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
14
+ import path from 'node:path';
15
+ import { generateSchemaGuide, generateImportGuide } from './skill-files.js';
16
+ import { generateArchitectSkill } from './architect.js';
17
+ const SKILL_FILES = [
18
+ { name: 'architect-core.md', generator: generateArchitectSkill },
19
+ { name: 'schema-guide.md', generator: generateSchemaGuide },
20
+ { name: 'import-guide.md', generator: generateImportGuide },
21
+ ];
22
+ export function ensureProjectSkills(projectRoot) {
23
+ const result = { created: [], skipped: [], errors: [] };
24
+ const skillDir = path.join(projectRoot, '_skills');
25
+ try {
26
+ if (!existsSync(skillDir))
27
+ mkdirSync(skillDir, { recursive: true });
28
+ }
29
+ catch (e) {
30
+ const message = e instanceof Error ? e.message : String(e);
31
+ result.errors.push({ file: '_skills/', message });
32
+ return result;
33
+ }
34
+ for (const skill of SKILL_FILES) {
35
+ const filePath = path.join(skillDir, skill.name);
36
+ const relPath = path.join('_skills', skill.name);
37
+ if (existsSync(filePath)) {
38
+ result.skipped.push(relPath);
39
+ continue;
40
+ }
41
+ try {
42
+ writeFileSync(filePath, skill.generator(), 'utf-8');
43
+ result.created.push(relPath);
44
+ }
45
+ catch (e) {
46
+ const message = e instanceof Error ? e.message : String(e);
47
+ result.errors.push({ file: relPath, message });
48
+ }
49
+ }
50
+ return result;
51
+ }
52
+ //# sourceMappingURL=skills-scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-scaffold.js","sourceRoot":"","sources":["../src/skills-scaffold.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,oEAAoE;AACpE,EAAE;AACF,aAAa;AACb,yEAAyE;AACzE,8CAA8C;AAC9C,0DAA0D;AAC1D,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,mCAAmC;AACnC,+EAA+E;AAE/E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAaxD,MAAM,WAAW,GAAgB;IAC/B,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,sBAAsB,EAAE;IAChE,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,mBAAmB,EAAE;IAC3D,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,mBAAmB,EAAE;CAC5D,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,MAAM,GAAyB,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}