@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,296 @@
1
+ #!/usr/bin/env node
2
+ // ============================================================================
3
+ // MAAD CLI — Command dispatch
4
+ // ============================================================================
5
+ import path from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { cmdScan, cmdSummary, cmdDescribe } from './commands/discover.js';
8
+ import { cmdGet, cmdQuery, cmdSearch, cmdRelated, cmdSchema } from './commands/read.js';
9
+ import { cmdCreate, cmdUpdate } from './commands/write.js';
10
+ import { cmdInit, cmdValidate, cmdReindex, cmdParse } from './commands/maintain.js';
11
+ import { cmdHistory, cmdAudit } from './commands/audit.js';
12
+ import { cmdAuth } from './commands/auth.js';
13
+ import { startServer } from '../mcp/server.js';
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = path.dirname(__filename);
16
+ // Parse --project / --instance flags (env vars MAAD_PROJECT / MAAD_INSTANCE as fallbacks).
17
+ // --project and --instance are mutually exclusive. If neither is supplied, `serve` errors out;
18
+ // other commands still default --project to cwd for backward compatibility.
19
+ const rawArgs = process.argv.slice(2);
20
+ let projectRoot = process.env['MAAD_PROJECT'];
21
+ let instancePath = process.env['MAAD_INSTANCE'];
22
+ const args = [];
23
+ for (let i = 0; i < rawArgs.length; i++) {
24
+ if (rawArgs[i] === '--project' && rawArgs[i + 1]) {
25
+ projectRoot = rawArgs[i + 1];
26
+ i++;
27
+ }
28
+ else if (rawArgs[i] === '--instance' && rawArgs[i + 1]) {
29
+ instancePath = rawArgs[i + 1];
30
+ i++;
31
+ }
32
+ else {
33
+ args.push(rawArgs[i]);
34
+ }
35
+ }
36
+ if (projectRoot && instancePath) {
37
+ console.error('Error: --project and --instance are mutually exclusive.');
38
+ process.exit(1);
39
+ }
40
+ // Non-serve commands still need a default project when neither flag is set.
41
+ if (!projectRoot && !instancePath)
42
+ projectRoot = '.';
43
+ const ctx = { args, projectRoot: projectRoot ?? '.', __dirname };
44
+ const command = args[0];
45
+ async function main() {
46
+ switch (command) {
47
+ // Discover
48
+ case 'scan':
49
+ await cmdScan(ctx);
50
+ break;
51
+ case 'summary':
52
+ await cmdSummary(ctx);
53
+ break;
54
+ case 'describe':
55
+ await cmdDescribe(ctx);
56
+ break;
57
+ // Read
58
+ case 'get':
59
+ await cmdGet(ctx);
60
+ break;
61
+ case 'query':
62
+ await cmdQuery(ctx);
63
+ break;
64
+ case 'search':
65
+ await cmdSearch(ctx);
66
+ break;
67
+ case 'related':
68
+ await cmdRelated(ctx);
69
+ break;
70
+ case 'schema':
71
+ await cmdSchema(ctx);
72
+ break;
73
+ // Write
74
+ case 'create':
75
+ await cmdCreate(ctx);
76
+ break;
77
+ case 'update':
78
+ await cmdUpdate(ctx);
79
+ break;
80
+ // Maintain
81
+ case 'init':
82
+ await cmdInit(ctx);
83
+ break;
84
+ case 'validate':
85
+ await cmdValidate(ctx);
86
+ break;
87
+ case 'reindex':
88
+ await cmdReindex(ctx);
89
+ break;
90
+ case 'parse':
91
+ await cmdParse(ctx);
92
+ break;
93
+ // Audit
94
+ case 'history':
95
+ await cmdHistory(ctx);
96
+ break;
97
+ case 'audit':
98
+ await cmdAudit(ctx);
99
+ break;
100
+ // Auth (0.7.0)
101
+ case 'auth':
102
+ await cmdAuth({ instancePath, args });
103
+ break;
104
+ // MCP
105
+ case 'serve':
106
+ await cmdServe();
107
+ break;
108
+ case 'help':
109
+ case '--help':
110
+ case '-h':
111
+ case undefined:
112
+ printHelp();
113
+ break;
114
+ default:
115
+ console.error(`Unknown command: ${command}`);
116
+ printHelp();
117
+ process.exit(1);
118
+ }
119
+ }
120
+ function parseIntEnv(val, fallback) {
121
+ if (val === undefined || val === '')
122
+ return fallback;
123
+ const n = Number.parseInt(val, 10);
124
+ return Number.isFinite(n) && n > 0 ? n : fallback;
125
+ }
126
+ async function cmdServe() {
127
+ let role = process.env['MAAD_ROLE'];
128
+ let dryRun = false;
129
+ let provenance = process.env['MAAD_PROV'];
130
+ let transport = process.env['MAAD_TRANSPORT'] ?? 'stdio';
131
+ let httpHost = process.env['MAAD_HTTP_HOST'] ?? '127.0.0.1';
132
+ let httpPort = parseIntEnv(process.env['MAAD_HTTP_PORT'], 7733);
133
+ let httpMaxBody = parseIntEnv(process.env['MAAD_HTTP_MAX_BODY'], 1_048_576);
134
+ let headersTimeoutMs = parseIntEnv(process.env['MAAD_HTTP_HEADERS_TIMEOUT_MS'], 10_000);
135
+ let requestTimeoutMs = parseIntEnv(process.env['MAAD_HTTP_REQUEST_TIMEOUT_MS'], 60_000);
136
+ let keepAliveTimeoutMs = parseIntEnv(process.env['MAAD_HTTP_KEEPALIVE_TIMEOUT_MS'], 5_000);
137
+ let idleMs = parseIntEnv(process.env['MAAD_SESSION_IDLE_MS'], 1_800_000);
138
+ let trustProxy = process.env['MAAD_TRUST_PROXY'] === '1' || process.env['MAAD_TRUST_PROXY'] === 'true';
139
+ let authToken = process.env['MAAD_AUTH_TOKEN'];
140
+ // 0.7.5 (fup-2026-148) — Unix-socket transport
141
+ let socketPath = process.env['MAAD_UNIX_SOCKET'];
142
+ let socketMode = (() => {
143
+ const raw = process.env['MAAD_UNIX_SOCKET_MODE'];
144
+ if (!raw)
145
+ return undefined;
146
+ const n = Number.parseInt(raw, 8);
147
+ return Number.isFinite(n) && n > 0 ? n : undefined;
148
+ })();
149
+ for (let i = 0; i < args.length; i++) {
150
+ const a = args[i];
151
+ const next = args[i + 1];
152
+ if (a === '--role' && next)
153
+ role = next;
154
+ else if (a === '--dry-run')
155
+ dryRun = true;
156
+ else if (a === '--prov' && next)
157
+ provenance = next;
158
+ else if (a === '--transport' && next)
159
+ transport = next;
160
+ else if (a === '--http-host' && next)
161
+ httpHost = next;
162
+ else if (a === '--http-port' && next)
163
+ httpPort = parseIntEnv(next, httpPort);
164
+ else if (a === '--http-max-body' && next)
165
+ httpMaxBody = parseIntEnv(next, httpMaxBody);
166
+ else if (a === '--http-headers-timeout' && next)
167
+ headersTimeoutMs = parseIntEnv(next, headersTimeoutMs);
168
+ else if (a === '--http-request-timeout' && next)
169
+ requestTimeoutMs = parseIntEnv(next, requestTimeoutMs);
170
+ else if (a === '--http-keepalive-timeout' && next)
171
+ keepAliveTimeoutMs = parseIntEnv(next, keepAliveTimeoutMs);
172
+ else if (a === '--session-idle-ms' && next)
173
+ idleMs = parseIntEnv(next, idleMs);
174
+ else if (a === '--trust-proxy')
175
+ trustProxy = true;
176
+ else if (a === '--auth-token' && next)
177
+ authToken = next;
178
+ else if (a === '--unix-socket' && next)
179
+ socketPath = next;
180
+ else if (a === '--unix-socket-mode' && next) {
181
+ const n = Number.parseInt(next, 8);
182
+ if (Number.isFinite(n) && n > 0)
183
+ socketMode = n;
184
+ }
185
+ }
186
+ if (transport !== 'stdio' && transport !== 'http' && transport !== 'unix') {
187
+ console.error(`Error: --transport must be 'stdio', 'http', or 'unix' (got '${transport}')`);
188
+ process.exit(1);
189
+ }
190
+ if (transport === 'unix' && (!socketPath || socketPath.length === 0)) {
191
+ console.error("Error: --transport unix requires --unix-socket=<path> or MAAD_UNIX_SOCKET env");
192
+ process.exit(1);
193
+ }
194
+ // 0.7.0 — HTTP boot-mode enforcement moved to server.ts (needs TokenStore).
195
+ // CLI just passes authToken through; server validates via checkHttpAuthAtBoot.
196
+ const base = {
197
+ role,
198
+ dryRun,
199
+ provenance,
200
+ transport,
201
+ ...(transport === 'http' || transport === 'unix' ? {
202
+ http: {
203
+ host: httpHost,
204
+ port: httpPort,
205
+ maxBodyBytes: httpMaxBody,
206
+ headersTimeoutMs,
207
+ requestTimeoutMs,
208
+ keepAliveTimeoutMs,
209
+ trustProxy,
210
+ idleMs,
211
+ authToken,
212
+ ...(transport === 'unix' ? { socketPath, socketMode } : {}),
213
+ },
214
+ } : {}),
215
+ };
216
+ if (instancePath) {
217
+ await startServer({ ...base, instancePath: path.resolve(instancePath) });
218
+ }
219
+ else if (projectRoot) {
220
+ await startServer({ ...base, projectRoot: path.resolve(projectRoot) });
221
+ }
222
+ else {
223
+ console.error('Error: `serve` requires --project <dir> or --instance <path>.');
224
+ process.exit(1);
225
+ }
226
+ }
227
+ function printHelp() {
228
+ console.log(`
229
+ MAAD — Markdown As A Database
230
+
231
+ Usage: maad <command> [options]
232
+
233
+ Commands:
234
+ init [dir] Initialize a new MAAD project
235
+ scan <file.md|dir> Analyze raw markdown (no registry needed)
236
+ summary Project snapshot (types, counts, sample IDs, object inventory)
237
+ describe Show project overview
238
+ get <doc_id> [depth] [block] Read a document (hot/warm/cold/full)
239
+ query <type> [--filter k=v] Find documents by type and filters
240
+ search <primitive> [opts] Search extracted objects (--subtype, --value, --contains, --doc)
241
+ related <doc_id> [direction] Show related documents
242
+ schema <type> Show field definitions for a type (for writes)
243
+ create <type> --field k=v [...] Create a new document
244
+ update <doc_id> --field k=v [...] Update a document's fields or body
245
+ validate [doc_id] Validate one or all documents
246
+ reindex [--force] Rebuild the index from markdown
247
+ parse <file.md> Parse a file and print the result
248
+ history <doc_id> Show git history for a document
249
+ audit [--since date] Show project-wide activity
250
+ serve [--transport stdio|http] [--role ...] [--prov ...] Start MCP server
251
+
252
+ Options:
253
+ --project <dir> Single-project mode (default for CLI cmds: cwd)
254
+ --instance <path> Multi-project mode: path to instance.yaml (serve only)
255
+ --role <role> MCP server role in single-project mode (default: reader)
256
+ --force Force full reindex (skip hash check)
257
+ --help Show this help
258
+
259
+ serve HTTP options (when --transport http or --transport unix):
260
+ --transport <stdio|http|unix> Transport selection (default: stdio)
261
+ --http-host <host> Bind address for http (default: 127.0.0.1)
262
+ --http-port <port> Bind port for http (default: 7733)
263
+ --unix-socket <path> Unix socket path (required for unix transport)
264
+ --unix-socket-mode <octal> Socket file mode (default: 660)
265
+ --auth-token <token> Bearer token (required for http/unix; prefer MAAD_AUTH_TOKEN env)
266
+ --http-max-body <bytes> Max request body bytes (default: 1048576)
267
+ --http-headers-timeout <ms> node:http headersTimeout (default: 10000)
268
+ --http-request-timeout <ms> node:http requestTimeout (default: 60000)
269
+ --http-keepalive-timeout <ms> node:http keepAliveTimeout (default: 5000)
270
+ --session-idle-ms <ms> Per-session idle eviction threshold (default: 1800000 = 30 min)
271
+ --trust-proxy Use X-Forwarded-For first hop for remote IP in logs (http only)
272
+
273
+ Environment Variables:
274
+ MAAD_PROJECT Project root (fallback for --project)
275
+ MAAD_INSTANCE Path to instance.yaml (fallback for --instance)
276
+ MAAD_ROLE Server role (fallback for --role)
277
+ MAAD_PROV Provenance mode (fallback for --prov)
278
+ MAAD_TRANSPORT stdio | http | unix (default: stdio)
279
+ MAAD_HTTP_HOST HTTP bind host (default: 127.0.0.1)
280
+ MAAD_HTTP_PORT HTTP bind port (default: 7733)
281
+ MAAD_UNIX_SOCKET Unix socket path (required when MAAD_TRANSPORT=unix)
282
+ MAAD_UNIX_SOCKET_MODE Socket file mode in octal (default: 660)
283
+ MAAD_AUTH_TOKEN Bearer token for HTTP/UDS transport (required)
284
+ MAAD_SESSION_IDLE_MS Per-session idle eviction threshold (default: 1800000)
285
+ MAAD_HTTP_MAX_BODY HTTP max body bytes (default: 1048576)
286
+ MAAD_HTTP_HEADERS_TIMEOUT_MS headersTimeout ms (default: 10000)
287
+ MAAD_HTTP_REQUEST_TIMEOUT_MS requestTimeout ms (default: 60000)
288
+ MAAD_HTTP_KEEPALIVE_TIMEOUT_MS keepAliveTimeout ms (default: 5000)
289
+ MAAD_TRUST_PROXY 1|true to trust X-Forwarded-For (default: false)
290
+ `);
291
+ }
292
+ main().catch(e => {
293
+ console.error(e);
294
+ process.exit(1);
295
+ });
296
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import './cli/index.js';
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAMA,OAAO,gBAAgB,CAAC"}
package/dist/cli.js ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ // ============================================================================
3
+ // Re-export from cli/ directory.
4
+ // All code lives in src/cli/*.ts — this file is the entry point passthrough.
5
+ // ============================================================================
6
+ import './cli/index.js';
7
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,+EAA+E;AAC/E,iCAAiC;AACjC,6EAA6E;AAC7E,+EAA+E;AAE/E,OAAO,gBAAgB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type Result } from '../errors.js';
2
+ import { type DocId, type DocType, type ParsedCommit, type AuditEntry, type DiffResult, type SnapshotResult } from '../types.js';
3
+ import type { EngineContext } from './context.js';
4
+ export declare function history(ctx: EngineContext, id: DocId, opts?: {
5
+ limit?: number;
6
+ since?: string;
7
+ }): Promise<Result<ParsedCommit[]>>;
8
+ export declare function diff(ctx: EngineContext, id: DocId, from: string, to?: string): Promise<Result<DiffResult>>;
9
+ export declare function snapshot(ctx: EngineContext, id: DocId, at: string): Promise<Result<SnapshotResult>>;
10
+ export declare function audit(ctx: EngineContext, opts?: {
11
+ since?: string;
12
+ until?: string;
13
+ docType?: DocType;
14
+ }): Promise<Result<AuditEntry[]>>;
15
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/engine/audit.ts"],"names":[],"mappings":"AAMA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,wBAAsB,OAAO,CAC3B,GAAG,EAAE,aAAa,EAClB,EAAE,EAAE,KAAK,EACT,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAQjC;AAED,wBAAsB,IAAI,CACxB,GAAG,EAAE,aAAa,EAClB,EAAE,EAAE,KAAK,EACT,IAAI,EAAE,MAAM,EACZ,EAAE,CAAC,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAS7B;AAED,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,aAAa,EAClB,EAAE,EAAE,KAAK,EACT,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CASjC;AAED,wBAAsB,KAAK,CACzB,GAAG,EAAE,aAAa,EAClB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAK/B"}
@@ -0,0 +1,42 @@
1
+ // ============================================================================
2
+ // Audit — history, diff, snapshot, audit (git-backed)
3
+ // ============================================================================
4
+ import { ok, singleErr } from '../errors.js';
5
+ export async function history(ctx, id, opts) {
6
+ if (!ctx.gitLayer)
7
+ return singleErr('GIT_NOT_INITIALIZED', 'Git is not available in this project');
8
+ const doc = ctx.backend.getDocument(id);
9
+ if (!doc)
10
+ return singleErr('FILE_NOT_FOUND', `Document "${id}" not found`);
11
+ const commits = await ctx.gitLayer.history(doc.filePath, opts);
12
+ return ok(commits);
13
+ }
14
+ export async function diff(ctx, id, from, to) {
15
+ if (!ctx.gitLayer)
16
+ return singleErr('GIT_NOT_INITIALIZED', 'Git is not available in this project');
17
+ const doc = ctx.backend.getDocument(id);
18
+ if (!doc)
19
+ return singleErr('FILE_NOT_FOUND', `Document "${id}" not found`);
20
+ const result = await ctx.gitLayer.diff(doc.filePath, id, from, to);
21
+ if (!result)
22
+ return singleErr('GIT_ERROR', 'Failed to compute diff');
23
+ return ok(result);
24
+ }
25
+ export async function snapshot(ctx, id, at) {
26
+ if (!ctx.gitLayer)
27
+ return singleErr('GIT_NOT_INITIALIZED', 'Git is not available in this project');
28
+ const doc = ctx.backend.getDocument(id);
29
+ if (!doc)
30
+ return singleErr('FILE_NOT_FOUND', `Document "${id}" not found`);
31
+ const result = await ctx.gitLayer.snapshot(doc.filePath, id, at);
32
+ if (!result)
33
+ return singleErr('GIT_ERROR', 'Failed to retrieve snapshot');
34
+ return ok(result);
35
+ }
36
+ export async function audit(ctx, opts) {
37
+ if (!ctx.gitLayer)
38
+ return singleErr('GIT_NOT_INITIALIZED', 'Git is not available in this project');
39
+ const entries = await ctx.gitLayer.audit(opts);
40
+ return ok(entries);
41
+ }
42
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/engine/audit.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,sDAAsD;AACtD,+EAA+E;AAI/E,OAAO,EAAE,EAAE,EAAE,SAAS,EAAe,MAAM,cAAc,CAAC;AAY1D,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAkB,EAClB,EAAS,EACT,IAAyC;IAEzC,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAC;IAEnG,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC,gBAAgB,EAAE,aAAa,EAAY,aAAa,CAAC,CAAC;IAErF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAkB,EAAE,IAAI,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,GAAkB,EAClB,EAAS,EACT,IAAY,EACZ,EAAW;IAEX,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAC;IAEnG,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC,gBAAgB,EAAE,aAAa,EAAY,aAAa,CAAC,CAAC;IAErF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;IACrE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,GAAkB,EAClB,EAAS,EACT,EAAU;IAEV,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAC;IAEnG,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC,gBAAgB,EAAE,aAAa,EAAY,aAAa,CAAC,CAAC;IAErF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAkB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;IAC1E,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,GAAkB,EAClB,IAA4D;IAE5D,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC,qBAAqB,EAAE,sCAAsC,CAAC,CAAC;IAEnG,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type Result } from '../errors.js';
2
+ import type { EngineContext } from './context.js';
3
+ import type { BackupTag, CreateBackupOptions, ListBackupsOptions } from './types.js';
4
+ export declare function createBackup(ctx: EngineContext, opts?: CreateBackupOptions): Promise<Result<BackupTag>>;
5
+ export declare function listBackups(ctx: EngineContext, opts?: ListBackupsOptions): Promise<Result<BackupTag[]>>;
6
+ export declare function deleteBackup(ctx: EngineContext, tag: string): Promise<Result<{
7
+ removed: string;
8
+ }>>;
9
+ //# sourceMappingURL=backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/engine/backup.ts"],"names":[],"mappings":"AAYA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA+BrF,wBAAsB,YAAY,CAChC,GAAG,EAAE,aAAa,EAClB,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAwC5B;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,aAAa,EAClB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAiB9B;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAkBtC"}
@@ -0,0 +1,100 @@
1
+ // ============================================================================
2
+ // 0.7.10 — maad_backup: named recovery anchors via annotated git tags.
3
+ //
4
+ // Three operations:
5
+ // createBackup — annotated tag on HEAD with structured name
6
+ // listBackups — every maad-snapshot-* tag with sha + message + createdAt
7
+ // deleteBackup — drop a maad-snapshot-* tag (refuses other tags)
8
+ //
9
+ // Pure git operations on the project repo. No SQLite reads, no schema lookups,
10
+ // no engine_meta writes (that stamp comes with Step 9 / maad_health).
11
+ // ============================================================================
12
+ import { ok, singleErr } from '../errors.js';
13
+ const MAAD_SNAPSHOT_PREFIX = 'maad-snapshot-';
14
+ const LABEL_MAX_LEN = 32;
15
+ /**
16
+ * Sanitize an operator-supplied label: trim, lowercase, replace runs of
17
+ * non-[a-z0-9-] chars with a single -, strip leading/trailing hyphens,
18
+ * cap at LABEL_MAX_LEN. Returns null when the result is empty.
19
+ */
20
+ function sanitizeLabel(raw) {
21
+ const sanitized = raw
22
+ .trim()
23
+ .toLowerCase()
24
+ .replace(/[^a-z0-9-]+/g, '-')
25
+ .replace(/^-+|-+$/g, '')
26
+ .slice(0, LABEL_MAX_LEN)
27
+ .replace(/^-+|-+$/g, '');
28
+ return sanitized.length > 0 ? sanitized : null;
29
+ }
30
+ function formatTagName(now, label) {
31
+ const yyyy = now.getUTCFullYear();
32
+ const mm = String(now.getUTCMonth() + 1).padStart(2, '0');
33
+ const dd = String(now.getUTCDate()).padStart(2, '0');
34
+ const hh = String(now.getUTCHours()).padStart(2, '0');
35
+ const mn = String(now.getUTCMinutes()).padStart(2, '0');
36
+ const base = `${MAAD_SNAPSHOT_PREFIX}${yyyy}-${mm}-${dd}-${hh}${mn}`;
37
+ return label ? `${base}-${label}` : base;
38
+ }
39
+ export async function createBackup(ctx, opts = {}) {
40
+ if (!ctx.gitLayer) {
41
+ return singleErr('GIT_NOT_INITIALIZED', 'Project has no git repository');
42
+ }
43
+ const head = await ctx.gitLayer.headSha();
44
+ if (!head) {
45
+ return singleErr('NO_HEAD_COMMIT', 'Repository has no commits yet — nothing to snapshot');
46
+ }
47
+ let label = null;
48
+ if (opts.label !== undefined && opts.label !== '') {
49
+ label = sanitizeLabel(opts.label);
50
+ if (label === null) {
51
+ return singleErr('INVALID_FIELDS', `Label "${opts.label}" sanitizes to an empty string — use [a-z0-9-] chars`);
52
+ }
53
+ }
54
+ const tagName = formatTagName(new Date(), label);
55
+ // Collision check — refuse to overwrite an existing tag of the same name.
56
+ const existing = await ctx.gitLayer.listTagsByPrefix(tagName);
57
+ if (existing.some(t => t.tag === tagName)) {
58
+ return singleErr('TAG_EXISTS', `Snapshot "${tagName}" already exists`);
59
+ }
60
+ const branch = await ctx.gitLayer.currentBranch();
61
+ const message = opts.message ?? `MAADB snapshot at ${head} ('${branch}')`;
62
+ await ctx.gitLayer.addAnnotatedTag(tagName, message);
63
+ return ok({
64
+ tag: tagName,
65
+ sha: head,
66
+ message,
67
+ createdAt: new Date().toISOString(),
68
+ });
69
+ }
70
+ export async function listBackups(ctx, opts = {}) {
71
+ if (!ctx.gitLayer)
72
+ return ok([]);
73
+ const all = await ctx.gitLayer.listTagsByPrefix(MAAD_SNAPSHOT_PREFIX);
74
+ if (opts.since !== undefined) {
75
+ const sinceMs = Date.parse(opts.since);
76
+ if (Number.isNaN(sinceMs)) {
77
+ return singleErr('INVALID_FIELDS', `since is not a valid ISO8601 date: "${opts.since}"`);
78
+ }
79
+ return ok(all.filter(t => {
80
+ const tagMs = Date.parse(t.createdAt);
81
+ return !Number.isNaN(tagMs) && tagMs >= sinceMs;
82
+ }));
83
+ }
84
+ return ok(all);
85
+ }
86
+ export async function deleteBackup(ctx, tag) {
87
+ if (!ctx.gitLayer) {
88
+ return singleErr('GIT_NOT_INITIALIZED', 'Project has no git repository');
89
+ }
90
+ if (!tag.startsWith(MAAD_SNAPSHOT_PREFIX)) {
91
+ return singleErr('INVALID_FIELDS', `maad_backup delete only removes ${MAAD_SNAPSHOT_PREFIX}* tags — got "${tag}"`);
92
+ }
93
+ const existing = await ctx.gitLayer.listTagsByPrefix(tag);
94
+ if (!existing.some(t => t.tag === tag)) {
95
+ return singleErr('TAG_NOT_FOUND', `Tag "${tag}" does not exist`);
96
+ }
97
+ await ctx.gitLayer.deleteTag(tag);
98
+ return ok({ removed: tag });
99
+ }
100
+ //# sourceMappingURL=backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/engine/backup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type Result } from '../errors.js';
2
+ import { type DocId } from '../types.js';
3
+ import type { EngineContext } from './context.js';
4
+ import type { GetFullResult } from './types.js';
5
+ export declare function getDocumentFull(ctx: EngineContext, id: DocId): Promise<Result<GetFullResult>>;
6
+ //# sourceMappingURL=composites.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composites.d.ts","sourceRoot":"","sources":["../../src/engine/composites.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAEL,KAAK,KAAK,EACX,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,wBAAsB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CA+FnG"}
@@ -0,0 +1,102 @@
1
+ // ============================================================================
2
+ // Composites — Tier 2 deterministic bundled reads (provisional)
3
+ // Evaluate after MCP: keep only if they measurably reduce tool chatter.
4
+ // ============================================================================
5
+ import { ok, singleErr } from '../errors.js';
6
+ import { docId as toDocId, } from '../types.js';
7
+ import { logger } from './logger.js';
8
+ import { readFrontmatter } from './helpers.js';
9
+ export async function getDocumentFull(ctx, id) {
10
+ const doc = ctx.backend.getDocument(id);
11
+ if (!doc)
12
+ return singleErr('FILE_NOT_FOUND', `Document "${id}" not found`);
13
+ const frontmatter = await readFrontmatter(ctx.projectRoot, doc);
14
+ // Resolve ref fields to names
15
+ const schema = ctx.schemaStore.getSchemaForType(doc.docType);
16
+ const resolvedRefs = {};
17
+ if (schema) {
18
+ for (const [fieldName, fieldDef] of schema.fields) {
19
+ if (fieldDef.type === 'ref' && frontmatter[fieldName]) {
20
+ const targetId = String(frontmatter[fieldName]);
21
+ const targetDoc = ctx.backend.getDocument(toDocId(targetId));
22
+ if (targetDoc) {
23
+ const targetFm = await readFrontmatter(ctx.projectRoot, targetDoc);
24
+ resolvedRefs[fieldName] = {
25
+ docId: targetId,
26
+ name: String(targetFm['name'] ?? targetFm['title'] ?? targetId),
27
+ };
28
+ }
29
+ }
30
+ }
31
+ }
32
+ const objects = ctx.backend.findObjects({ docId: id, limit: 50 });
33
+ const rels = ctx.backend.getRelationships(id, 'both');
34
+ // Batch lookup all related doc IDs
35
+ const relatedIds = new Set();
36
+ for (const rel of rels) {
37
+ if (rel.sourceDocId === id)
38
+ relatedIds.add(rel.targetDocId);
39
+ else
40
+ relatedIds.add(rel.sourceDocId);
41
+ }
42
+ const docsMap = ctx.backend.getDocumentsByIds([...relatedIds]);
43
+ const outgoing = [];
44
+ const incoming = [];
45
+ for (const rel of rels) {
46
+ if (rel.sourceDocId === id) {
47
+ const target = docsMap.get(rel.targetDocId);
48
+ outgoing.push({
49
+ docId: rel.targetDocId,
50
+ docType: (target?.docType ?? 'unknown'),
51
+ field: rel.field,
52
+ });
53
+ }
54
+ else {
55
+ const source = docsMap.get(rel.sourceDocId);
56
+ incoming.push({
57
+ docId: rel.sourceDocId,
58
+ docType: (source?.docType ?? 'unknown'),
59
+ field: rel.field,
60
+ });
61
+ }
62
+ }
63
+ // Latest incoming note
64
+ let latestNote = null;
65
+ if (ctx.gitLayer) {
66
+ for (const inc of incoming) {
67
+ const incDoc = docsMap.get(toDocId(inc.docId));
68
+ if (!incDoc)
69
+ continue;
70
+ if (!(inc.docType.includes('note')))
71
+ continue;
72
+ try {
73
+ const history = await ctx.gitLayer.history(incDoc.filePath, { limit: 1 });
74
+ if (history.length > 0) {
75
+ const entry = history[0];
76
+ if (!latestNote || entry.timestamp > latestNote.timestamp) {
77
+ latestNote = {
78
+ docId: inc.docId,
79
+ summary: entry.summary,
80
+ timestamp: entry.timestamp,
81
+ };
82
+ }
83
+ }
84
+ }
85
+ catch (e) {
86
+ logger.bestEffort('composites', 'getDocumentFull.latestNote', `Git history lookup failed for ${inc.docId}`, { error: e instanceof Error ? e.message : String(e) });
87
+ }
88
+ }
89
+ }
90
+ return ok({
91
+ docId: doc.docId,
92
+ docType: doc.docType,
93
+ version: doc.version,
94
+ updatedAt: doc.updatedAt,
95
+ frontmatter,
96
+ resolvedRefs,
97
+ objects,
98
+ related: { outgoing, incoming },
99
+ latestNote,
100
+ });
101
+ }
102
+ //# sourceMappingURL=composites.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composites.js","sourceRoot":"","sources":["../../src/engine/composites.ts"],"names":[],"mappings":"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"}