@maadb/core 0.0.1 → 0.7.9

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 (407) 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/composites.d.ts +6 -0
  80. package/dist/engine/composites.d.ts.map +1 -0
  81. package/dist/engine/composites.js +102 -0
  82. package/dist/engine/composites.js.map +1 -0
  83. package/dist/engine/context.d.ts +47 -0
  84. package/dist/engine/context.d.ts.map +1 -0
  85. package/dist/engine/context.js +55 -0
  86. package/dist/engine/context.js.map +1 -0
  87. package/dist/engine/docid-safe.d.ts +8 -0
  88. package/dist/engine/docid-safe.d.ts.map +1 -0
  89. package/dist/engine/docid-safe.js +0 -0
  90. package/dist/engine/docid-safe.js.map +1 -0
  91. package/dist/engine/helpers.d.ts +8 -0
  92. package/dist/engine/helpers.d.ts.map +1 -0
  93. package/dist/engine/helpers.js +102 -0
  94. package/dist/engine/helpers.js.map +1 -0
  95. package/dist/engine/index.d.ts +209 -0
  96. package/dist/engine/index.d.ts.map +1 -0
  97. package/dist/engine/index.js +489 -0
  98. package/dist/engine/index.js.map +1 -0
  99. package/dist/engine/indexing.d.ts +14 -0
  100. package/dist/engine/indexing.d.ts.map +1 -0
  101. package/dist/engine/indexing.js +225 -0
  102. package/dist/engine/indexing.js.map +1 -0
  103. package/dist/engine/journal.d.ts +32 -0
  104. package/dist/engine/journal.d.ts.map +1 -0
  105. package/dist/engine/journal.js +111 -0
  106. package/dist/engine/journal.js.map +1 -0
  107. package/dist/engine/logger.d.ts +19 -0
  108. package/dist/engine/logger.d.ts.map +1 -0
  109. package/dist/engine/logger.js +40 -0
  110. package/dist/engine/logger.js.map +1 -0
  111. package/dist/engine/maintenance.d.ts +15 -0
  112. package/dist/engine/maintenance.d.ts.map +1 -0
  113. package/dist/engine/maintenance.js +87 -0
  114. package/dist/engine/maintenance.js.map +1 -0
  115. package/dist/engine/mutex.d.ts +24 -0
  116. package/dist/engine/mutex.d.ts.map +1 -0
  117. package/dist/engine/mutex.js +50 -0
  118. package/dist/engine/mutex.js.map +1 -0
  119. package/dist/engine/pathguard.d.ts +16 -0
  120. package/dist/engine/pathguard.d.ts.map +1 -0
  121. package/dist/engine/pathguard.js +41 -0
  122. package/dist/engine/pathguard.js.map +1 -0
  123. package/dist/engine/reads.d.ts +24 -0
  124. package/dist/engine/reads.d.ts.map +1 -0
  125. package/dist/engine/reads.js +701 -0
  126. package/dist/engine/reads.js.map +1 -0
  127. package/dist/engine/types.d.ts +350 -0
  128. package/dist/engine/types.d.ts.map +1 -0
  129. package/dist/engine/types.js +5 -0
  130. package/dist/engine/types.js.map +1 -0
  131. package/dist/engine/writes.d.ts +10 -0
  132. package/dist/engine/writes.d.ts.map +1 -0
  133. package/dist/engine/writes.js +606 -0
  134. package/dist/engine/writes.js.map +1 -0
  135. package/dist/engine.d.ts +3 -0
  136. package/dist/engine.d.ts.map +1 -0
  137. package/dist/engine.js +6 -0
  138. package/dist/engine.js.map +1 -0
  139. package/dist/errors.d.ts +20 -0
  140. package/dist/errors.d.ts.map +1 -0
  141. package/dist/errors.js +17 -0
  142. package/dist/errors.js.map +1 -0
  143. package/dist/extractor/fields.d.ts +3 -0
  144. package/dist/extractor/fields.d.ts.map +1 -0
  145. package/dist/extractor/fields.js +58 -0
  146. package/dist/extractor/fields.js.map +1 -0
  147. package/dist/extractor/index.d.ts +7 -0
  148. package/dist/extractor/index.d.ts.map +1 -0
  149. package/dist/extractor/index.js +22 -0
  150. package/dist/extractor/index.js.map +1 -0
  151. package/dist/extractor/normalizers.d.ts +22 -0
  152. package/dist/extractor/normalizers.d.ts.map +1 -0
  153. package/dist/extractor/normalizers.js +250 -0
  154. package/dist/extractor/normalizers.js.map +1 -0
  155. package/dist/extractor/objects.d.ts +3 -0
  156. package/dist/extractor/objects.d.ts.map +1 -0
  157. package/dist/extractor/objects.js +33 -0
  158. package/dist/extractor/objects.js.map +1 -0
  159. package/dist/extractor/relationships.d.ts +3 -0
  160. package/dist/extractor/relationships.d.ts.map +1 -0
  161. package/dist/extractor/relationships.js +58 -0
  162. package/dist/extractor/relationships.js.map +1 -0
  163. package/dist/git/commit.d.ts +63 -0
  164. package/dist/git/commit.d.ts.map +1 -0
  165. package/dist/git/commit.js +161 -0
  166. package/dist/git/commit.js.map +1 -0
  167. package/dist/git/diff.d.ts +4 -0
  168. package/dist/git/diff.d.ts.map +1 -0
  169. package/dist/git/diff.js +56 -0
  170. package/dist/git/diff.js.map +1 -0
  171. package/dist/git/index.d.ts +41 -0
  172. package/dist/git/index.d.ts.map +1 -0
  173. package/dist/git/index.js +86 -0
  174. package/dist/git/index.js.map +1 -0
  175. package/dist/git/log.d.ts +13 -0
  176. package/dist/git/log.d.ts.map +1 -0
  177. package/dist/git/log.js +116 -0
  178. package/dist/git/log.js.map +1 -0
  179. package/dist/git/snapshot.d.ts +4 -0
  180. package/dist/git/snapshot.d.ts.map +1 -0
  181. package/dist/git/snapshot.js +65 -0
  182. package/dist/git/snapshot.js.map +1 -0
  183. package/dist/instance/config.d.ts +19 -0
  184. package/dist/instance/config.d.ts.map +1 -0
  185. package/dist/instance/config.js +107 -0
  186. package/dist/instance/config.js.map +1 -0
  187. package/dist/instance/pool.d.ts +138 -0
  188. package/dist/instance/pool.d.ts.map +1 -0
  189. package/dist/instance/pool.js +335 -0
  190. package/dist/instance/pool.js.map +1 -0
  191. package/dist/instance/session.d.ts +140 -0
  192. package/dist/instance/session.d.ts.map +1 -0
  193. package/dist/instance/session.js +267 -0
  194. package/dist/instance/session.js.map +1 -0
  195. package/dist/logging.d.ts +108 -0
  196. package/dist/logging.d.ts.map +1 -0
  197. package/dist/logging.js +120 -0
  198. package/dist/logging.js.map +1 -0
  199. package/dist/maad-md.d.ts +11 -0
  200. package/dist/maad-md.d.ts.map +1 -0
  201. package/dist/maad-md.js +252 -0
  202. package/dist/maad-md.js.map +1 -0
  203. package/dist/mcp/bulk-cap.d.ts +10 -0
  204. package/dist/mcp/bulk-cap.d.ts.map +1 -0
  205. package/dist/mcp/bulk-cap.js +37 -0
  206. package/dist/mcp/bulk-cap.js.map +1 -0
  207. package/dist/mcp/config.d.ts +18 -0
  208. package/dist/mcp/config.d.ts.map +1 -0
  209. package/dist/mcp/config.js +20 -0
  210. package/dist/mcp/config.js.map +1 -0
  211. package/dist/mcp/ctx.d.ts +17 -0
  212. package/dist/mcp/ctx.d.ts.map +1 -0
  213. package/dist/mcp/ctx.js +7 -0
  214. package/dist/mcp/ctx.js.map +1 -0
  215. package/dist/mcp/guardrails.d.ts +21 -0
  216. package/dist/mcp/guardrails.d.ts.map +1 -0
  217. package/dist/mcp/guardrails.js +39 -0
  218. package/dist/mcp/guardrails.js.map +1 -0
  219. package/dist/mcp/idempotency.d.ts +69 -0
  220. package/dist/mcp/idempotency.d.ts.map +1 -0
  221. package/dist/mcp/idempotency.js +168 -0
  222. package/dist/mcp/idempotency.js.map +1 -0
  223. package/dist/mcp/instance-reload.d.ts +23 -0
  224. package/dist/mcp/instance-reload.d.ts.map +1 -0
  225. package/dist/mcp/instance-reload.js +126 -0
  226. package/dist/mcp/instance-reload.js.map +1 -0
  227. package/dist/mcp/kinds.d.ts +22 -0
  228. package/dist/mcp/kinds.d.ts.map +1 -0
  229. package/dist/mcp/kinds.js +110 -0
  230. package/dist/mcp/kinds.js.map +1 -0
  231. package/dist/mcp/lifecycle.d.ts +8 -0
  232. package/dist/mcp/lifecycle.d.ts.map +1 -0
  233. package/dist/mcp/lifecycle.js +65 -0
  234. package/dist/mcp/lifecycle.js.map +1 -0
  235. package/dist/mcp/notifications.d.ts +87 -0
  236. package/dist/mcp/notifications.d.ts.map +1 -0
  237. package/dist/mcp/notifications.js +154 -0
  238. package/dist/mcp/notifications.js.map +1 -0
  239. package/dist/mcp/query-depth.d.ts +28 -0
  240. package/dist/mcp/query-depth.d.ts.map +1 -0
  241. package/dist/mcp/query-depth.js +43 -0
  242. package/dist/mcp/query-depth.js.map +1 -0
  243. package/dist/mcp/rate-limit.d.ts +60 -0
  244. package/dist/mcp/rate-limit.d.ts.map +1 -0
  245. package/dist/mcp/rate-limit.js +203 -0
  246. package/dist/mcp/rate-limit.js.map +1 -0
  247. package/dist/mcp/reload-signal.d.ts +13 -0
  248. package/dist/mcp/reload-signal.d.ts.map +1 -0
  249. package/dist/mcp/reload-signal.js +68 -0
  250. package/dist/mcp/reload-signal.js.map +1 -0
  251. package/dist/mcp/response.d.ts +109 -0
  252. package/dist/mcp/response.d.ts.map +1 -0
  253. package/dist/mcp/response.js +132 -0
  254. package/dist/mcp/response.js.map +1 -0
  255. package/dist/mcp/roles.d.ts +7 -0
  256. package/dist/mcp/roles.d.ts.map +1 -0
  257. package/dist/mcp/roles.js +56 -0
  258. package/dist/mcp/roles.js.map +1 -0
  259. package/dist/mcp/server.d.ts +33 -0
  260. package/dist/mcp/server.d.ts.map +1 -0
  261. package/dist/mcp/server.js +242 -0
  262. package/dist/mcp/server.js.map +1 -0
  263. package/dist/mcp/shutdown.d.ts +32 -0
  264. package/dist/mcp/shutdown.d.ts.map +1 -0
  265. package/dist/mcp/shutdown.js +130 -0
  266. package/dist/mcp/shutdown.js.map +1 -0
  267. package/dist/mcp/tools/audit.d.ts +4 -0
  268. package/dist/mcp/tools/audit.d.ts.map +1 -0
  269. package/dist/mcp/tools/audit.js +45 -0
  270. package/dist/mcp/tools/audit.js.map +1 -0
  271. package/dist/mcp/tools/auth.d.ts +4 -0
  272. package/dist/mcp/tools/auth.d.ts.map +1 -0
  273. package/dist/mcp/tools/auth.js +181 -0
  274. package/dist/mcp/tools/auth.js.map +1 -0
  275. package/dist/mcp/tools/discover.d.ts +4 -0
  276. package/dist/mcp/tools/discover.d.ts.map +1 -0
  277. package/dist/mcp/tools/discover.js +83 -0
  278. package/dist/mcp/tools/discover.js.map +1 -0
  279. package/dist/mcp/tools/instance.d.ts +15 -0
  280. package/dist/mcp/tools/instance.d.ts.map +1 -0
  281. package/dist/mcp/tools/instance.js +207 -0
  282. package/dist/mcp/tools/instance.js.map +1 -0
  283. package/dist/mcp/tools/maintain.d.ts +4 -0
  284. package/dist/mcp/tools/maintain.d.ts.map +1 -0
  285. package/dist/mcp/tools/maintain.js +118 -0
  286. package/dist/mcp/tools/maintain.js.map +1 -0
  287. package/dist/mcp/tools/read.d.ts +4 -0
  288. package/dist/mcp/tools/read.d.ts.map +1 -0
  289. package/dist/mcp/tools/read.js +260 -0
  290. package/dist/mcp/tools/read.js.map +1 -0
  291. package/dist/mcp/tools/write.d.ts +4 -0
  292. package/dist/mcp/tools/write.d.ts.map +1 -0
  293. package/dist/mcp/tools/write.js +342 -0
  294. package/dist/mcp/tools/write.js.map +1 -0
  295. package/dist/mcp/transport/auth.d.ts +41 -0
  296. package/dist/mcp/transport/auth.d.ts.map +1 -0
  297. package/dist/mcp/transport/auth.js +115 -0
  298. package/dist/mcp/transport/auth.js.map +1 -0
  299. package/dist/mcp/transport/http.d.ts +62 -0
  300. package/dist/mcp/transport/http.d.ts.map +1 -0
  301. package/dist/mcp/transport/http.js +357 -0
  302. package/dist/mcp/transport/http.js.map +1 -0
  303. package/dist/mcp/transport/pin.d.ts +15 -0
  304. package/dist/mcp/transport/pin.d.ts.map +1 -0
  305. package/dist/mcp/transport/pin.js +71 -0
  306. package/dist/mcp/transport/pin.js.map +1 -0
  307. package/dist/mcp/transport/telemetry.d.ts +79 -0
  308. package/dist/mcp/transport/telemetry.d.ts.map +1 -0
  309. package/dist/mcp/transport/telemetry.js +97 -0
  310. package/dist/mcp/transport/telemetry.js.map +1 -0
  311. package/dist/mcp/with-session.d.ts +26 -0
  312. package/dist/mcp/with-session.d.ts.map +1 -0
  313. package/dist/mcp/with-session.js +275 -0
  314. package/dist/mcp/with-session.js.map +1 -0
  315. package/dist/parser/annotations.d.ts +3 -0
  316. package/dist/parser/annotations.d.ts.map +1 -0
  317. package/dist/parser/annotations.js +41 -0
  318. package/dist/parser/annotations.js.map +1 -0
  319. package/dist/parser/blocks.d.ts +3 -0
  320. package/dist/parser/blocks.d.ts.map +1 -0
  321. package/dist/parser/blocks.js +99 -0
  322. package/dist/parser/blocks.js.map +1 -0
  323. package/dist/parser/frontmatter.d.ts +9 -0
  324. package/dist/parser/frontmatter.d.ts.map +1 -0
  325. package/dist/parser/frontmatter.js +33 -0
  326. package/dist/parser/frontmatter.js.map +1 -0
  327. package/dist/parser/index.d.ts +11 -0
  328. package/dist/parser/index.d.ts.map +1 -0
  329. package/dist/parser/index.js +54 -0
  330. package/dist/parser/index.js.map +1 -0
  331. package/dist/parser/matter.d.ts +3 -0
  332. package/dist/parser/matter.d.ts.map +1 -0
  333. package/dist/parser/matter.js +32 -0
  334. package/dist/parser/matter.js.map +1 -0
  335. package/dist/parser/tags.d.ts +3 -0
  336. package/dist/parser/tags.d.ts.map +1 -0
  337. package/dist/parser/tags.js +32 -0
  338. package/dist/parser/tags.js.map +1 -0
  339. package/dist/parser/verbatim.d.ts +4 -0
  340. package/dist/parser/verbatim.d.ts.map +1 -0
  341. package/dist/parser/verbatim.js +121 -0
  342. package/dist/parser/verbatim.js.map +1 -0
  343. package/dist/parser/yaml-profile.d.ts +4 -0
  344. package/dist/parser/yaml-profile.d.ts.map +1 -0
  345. package/dist/parser/yaml-profile.js +73 -0
  346. package/dist/parser/yaml-profile.js.map +1 -0
  347. package/dist/registry/index.d.ts +2 -0
  348. package/dist/registry/index.d.ts.map +1 -0
  349. package/dist/registry/index.js +2 -0
  350. package/dist/registry/index.js.map +1 -0
  351. package/dist/registry/loader.d.ts +4 -0
  352. package/dist/registry/loader.d.ts.map +1 -0
  353. package/dist/registry/loader.js +147 -0
  354. package/dist/registry/loader.js.map +1 -0
  355. package/dist/registry/types.d.ts +2 -0
  356. package/dist/registry/types.d.ts.map +1 -0
  357. package/dist/registry/types.js +5 -0
  358. package/dist/registry/types.js.map +1 -0
  359. package/dist/scanner.d.ts +57 -0
  360. package/dist/scanner.d.ts.map +1 -0
  361. package/dist/scanner.js +223 -0
  362. package/dist/scanner.js.map +1 -0
  363. package/dist/schema/index.d.ts +3 -0
  364. package/dist/schema/index.d.ts.map +1 -0
  365. package/dist/schema/index.js +3 -0
  366. package/dist/schema/index.js.map +1 -0
  367. package/dist/schema/loader.d.ts +4 -0
  368. package/dist/schema/loader.d.ts.map +1 -0
  369. package/dist/schema/loader.js +303 -0
  370. package/dist/schema/loader.js.map +1 -0
  371. package/dist/schema/precision.d.ts +6 -0
  372. package/dist/schema/precision.d.ts.map +1 -0
  373. package/dist/schema/precision.js +59 -0
  374. package/dist/schema/precision.js.map +1 -0
  375. package/dist/schema/validator.d.ts +21 -0
  376. package/dist/schema/validator.d.ts.map +1 -0
  377. package/dist/schema/validator.js +200 -0
  378. package/dist/schema/validator.js.map +1 -0
  379. package/dist/schema-md.d.ts +8 -0
  380. package/dist/schema-md.d.ts.map +1 -0
  381. package/dist/schema-md.js +98 -0
  382. package/dist/schema-md.js.map +1 -0
  383. package/dist/skill-files.d.ts +3 -0
  384. package/dist/skill-files.d.ts.map +1 -0
  385. package/dist/skill-files.js +362 -0
  386. package/dist/skill-files.js.map +1 -0
  387. package/dist/skills-scaffold.d.ts +10 -0
  388. package/dist/skills-scaffold.d.ts.map +1 -0
  389. package/dist/skills-scaffold.js +52 -0
  390. package/dist/skills-scaffold.js.map +1 -0
  391. package/dist/types.d.ts +309 -0
  392. package/dist/types.d.ts.map +1 -0
  393. package/dist/types.js +111 -0
  394. package/dist/types.js.map +1 -0
  395. package/dist/writer/index.d.ts +7 -0
  396. package/dist/writer/index.d.ts.map +1 -0
  397. package/dist/writer/index.js +32 -0
  398. package/dist/writer/index.js.map +1 -0
  399. package/dist/writer/serializer.d.ts +4 -0
  400. package/dist/writer/serializer.d.ts.map +1 -0
  401. package/dist/writer/serializer.js +103 -0
  402. package/dist/writer/serializer.js.map +1 -0
  403. package/dist/writer/template.d.ts +3 -0
  404. package/dist/writer/template.d.ts.map +1 -0
  405. package/dist/writer/template.js +27 -0
  406. package/dist/writer/template.js.map +1 -0
  407. 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,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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"}
@@ -0,0 +1,47 @@
1
+ import type { Registry, SchemaStore } from '../types.js';
2
+ import type { MaadBackend } from '../backend/index.js';
3
+ import type { GitLayer, CommitOptions, CommitOutcome } from '../git/index.js';
4
+ import type { CommitIdentity } from '../git/commit.js';
5
+ import type { OperationJournal } from './journal.js';
6
+ /**
7
+ * 0.6.10 — Mutable counters on the context so a write-path failure in
8
+ * `gitCommit` can be surfaced through `maad_health` without plumbing state
9
+ * back to the engine. Initialized once per engine init; bumped by `gitCommit`
10
+ * on the 'failed' outcome.
11
+ */
12
+ export interface CommitFailureTracker {
13
+ count: number;
14
+ lastAt: string | null;
15
+ lastCode: string | null;
16
+ lastMessage: string | null;
17
+ lastAction: 'create' | 'update' | 'delete' | null;
18
+ lastDocId: string | null;
19
+ }
20
+ export declare function newCommitFailureTracker(): CommitFailureTracker;
21
+ export interface EngineContext {
22
+ projectRoot: string;
23
+ registry: Registry;
24
+ schemaStore: SchemaStore;
25
+ backend: MaadBackend;
26
+ gitLayer: GitLayer | null;
27
+ journal: OperationJournal;
28
+ readOnly: boolean;
29
+ commitFailures: CommitFailureTracker;
30
+ /**
31
+ * 0.7.0 — Identity snapshot set per-operation by the MCP layer inside the
32
+ * write mutex. When populated AND MAAD_COMMIT_IDENTITY is not "false",
33
+ * gitCommit passes it through to the commit builder so commit messages
34
+ * get role/token/agent/user lines appended.
35
+ */
36
+ commitIdentity?: CommitIdentity;
37
+ }
38
+ /**
39
+ * Run a git commit and return the outcome. When gitLayer is absent (git not
40
+ * initialized or disabled), returns `noop` — the caller treats that as
41
+ * durable since there's no git to reconcile against. When the commit fails,
42
+ * the failure is logged on the ops channel AND tallied on
43
+ * `ctx.commitFailures` so `maad_health` can surface it; the caller gets the
44
+ * outcome back and can stamp `write_durable: false` on the MCP response.
45
+ */
46
+ export declare function gitCommit(ctx: EngineContext, opts: CommitOptions): Promise<CommitOutcome>;
47
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/engine/context.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIrD;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;IAClD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,CAS9D;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,oBAAoB,CAAC;IACrC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CA6B/F"}
@@ -0,0 +1,55 @@
1
+ // ============================================================================
2
+ // Engine Context — shared state passed to all domain modules
3
+ // ============================================================================
4
+ import { logger } from './logger.js';
5
+ import { logCommitFailure } from '../logging.js';
6
+ export function newCommitFailureTracker() {
7
+ return {
8
+ count: 0,
9
+ lastAt: null,
10
+ lastCode: null,
11
+ lastMessage: null,
12
+ lastAction: null,
13
+ lastDocId: null,
14
+ };
15
+ }
16
+ /**
17
+ * Run a git commit and return the outcome. When gitLayer is absent (git not
18
+ * initialized or disabled), returns `noop` — the caller treats that as
19
+ * durable since there's no git to reconcile against. When the commit fails,
20
+ * the failure is logged on the ops channel AND tallied on
21
+ * `ctx.commitFailures` so `maad_health` can surface it; the caller gets the
22
+ * outcome back and can stamp `write_durable: false` on the MCP response.
23
+ */
24
+ export async function gitCommit(ctx, opts) {
25
+ if (!ctx.gitLayer)
26
+ return { status: 'noop' };
27
+ // 0.7.0 — Thread commit identity through when set by the MCP layer.
28
+ // Engine-level direct callers (CLI imports, tests) leave ctx.commitIdentity
29
+ // undefined; formatCommitMessage then emits the bare title.
30
+ const enriched = ctx.commitIdentity !== undefined
31
+ ? { ...opts, identity: ctx.commitIdentity }
32
+ : opts;
33
+ const outcome = await ctx.gitLayer.commit(enriched);
34
+ if (outcome.status === 'failed') {
35
+ ctx.commitFailures.count++;
36
+ ctx.commitFailures.lastAt = new Date().toISOString();
37
+ ctx.commitFailures.lastCode = outcome.code;
38
+ ctx.commitFailures.lastMessage = outcome.message;
39
+ ctx.commitFailures.lastAction = opts.action;
40
+ ctx.commitFailures.lastDocId = opts.docId;
41
+ logCommitFailure({
42
+ code: outcome.code,
43
+ message: outcome.message,
44
+ action: opts.action,
45
+ doc_id: opts.docId,
46
+ doc_type: opts.docType,
47
+ file_count: opts.files.length,
48
+ });
49
+ // Keep the dev-facing log line so the existing logger.bestEffort signal
50
+ // stays visible for humans tailing ops in non-JSON mode.
51
+ logger.bestEffort('git', 'commit', `Git commit failed for ${opts.docId}: ${outcome.code} — ${outcome.message}`);
52
+ }
53
+ return outcome;
54
+ }
55
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/engine/context.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6DAA6D;AAC7D,+EAA+E;AAO/E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAiBjD,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC;AAoBD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAkB,EAAE,IAAmB;IACrE,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC7C,oEAAoE;IACpE,4EAA4E;IAC5E,4DAA4D;IAC5D,MAAM,QAAQ,GAAkB,GAAG,CAAC,cAAc,KAAK,SAAS;QAC9D,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,cAAc,EAAE;QAC3C,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC3B,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,cAAc,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;QAC3C,GAAG,CAAC,cAAc,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;QACjD,GAAG,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5C,GAAG,CAAC,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,KAAe,CAAC;QACpD,gBAAgB,CAAC;YACf,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,KAAe;YAC5B,QAAQ,EAAE,IAAI,CAAC,OAAiB;YAChC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;SAC9B,CAAC,CAAC;QACH,wEAAwE;QACxE,yDAAyD;QACzD,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,yBAAyB,IAAI,CAAC,KAAe,KAAK,OAAO,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5H,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface DocIdRejection {
2
+ reason: 'EMPTY' | 'TOO_LONG' | 'CONTAINS_DOTDOT' | 'LEADING_DOT' | 'INVALID_CHARS' | 'WINDOWS_RESERVED' | 'CONTROL_CHARS';
3
+ message: string;
4
+ }
5
+ export declare function checkDocIdSafe(docId: string): DocIdRejection | null;
6
+ export declare function assertDocIdSafe(docId: string): void;
7
+ export declare const DOC_ID_MAX_LEN = 128;
8
+ //# sourceMappingURL=docid-safe.d.ts.map